| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef SD_SLIDESORTER_SLIDE_SORTER_HXX |
| #define SD_SLIDESORTER_SLIDE_SORTER_HXX |
| |
| #include "fupoor.hxx" |
| #include "Window.hxx" |
| #include <com/sun/star/frame/XController.hpp> |
| #include <cppuhelper/weakref.hxx> |
| #include <sfx2/viewfrm.hxx> |
| #include <boost/noncopyable.hpp> |
| #include <boost/shared_ptr.hpp> |
| #include <boost/scoped_ptr.hpp> |
| #include <boost/current_function.hpp> |
| |
| |
| class ScrollBar; |
| class ScrollBarBox; |
| class Window; |
| |
| |
| namespace sd { |
| class ViewShell; |
| class ViewShellBase; |
| class Window; |
| } |
| |
| namespace sd { namespace slidesorter { namespace model { |
| class SlideSorterModel; |
| } } } |
| |
| namespace sd { namespace slidesorter { namespace view { |
| class SlideSorterView; |
| class Theme; |
| } } } |
| |
| namespace sd { namespace slidesorter { namespace controller { |
| class Listener; |
| class SlideSorterController; |
| class SlotManager; |
| class Properties; |
| } } } |
| |
| |
| typedef ::boost::shared_ptr<sd::Window> SharedSdWindow; |
| |
| |
| namespace sd { namespace slidesorter { |
| |
| /** Show previews for all the slides in a document and allow the user to |
| insert or delete slides and modify the order of the slides. |
| |
| This class is a facade for the model, view, and controller classes. |
| It is a hub that allows access to the various parts of a slide sorter. |
| |
| Note that this class is not in its final state. |
| */ |
| class SlideSorter |
| : private ::boost::noncopyable |
| { |
| friend class controller::SlotManager; |
| public: |
| virtual ~SlideSorter (void); |
| |
| /** Return whether the called SlideSorter object is valid and calling |
| its Get(Model,View,Controller) methods is safe. When <FALSE/> is |
| called then no other methods should be called. |
| Calling this method should be necessary only during startup and |
| shutdown (when that can be detected). |
| */ |
| bool IsValid (void) const; |
| |
| /** Create a new slide sorter that is strongly coupled to the given view |
| shell. Use this function for a slide sorter in the left pane. |
| @param rViewShell |
| Typically a SlideSorterViewShell object. |
| @param rpContentWindow |
| Typically the content window of the ViewShell. |
| @param rpHorizontalScrollBar |
| Typically the horizontal scroll bar of the ViewShell. |
| @param rpVerticalScrollBar |
| Typically the vertical scroll bar of the ViewShell. |
| @param rpScrollBarBox |
| The little square enclosed by the two scroll bars. Typically |
| the one from the ViewShell. |
| */ |
| static ::boost::shared_ptr<SlideSorter> CreateSlideSorter ( |
| ViewShell& rViewShell, |
| const ::boost::shared_ptr<sd::Window>& rpContentWindow, |
| const ::boost::shared_ptr<ScrollBar>& rpHorizontalScrollBar, |
| const ::boost::shared_ptr<ScrollBar>& rpVerticalScrollBar, |
| const ::boost::shared_ptr<ScrollBarBox>& rpScrollBarBox); |
| |
| /** Create a new slide sorter that is losely coupled to the given view |
| shell. The view shell may even be missing. |
| @param rBase |
| ViewShellBase object of the enclosing application. |
| @param pViewShell |
| Supply when at hand. |
| @param rParentWindow |
| The parent window of the internally created content window and |
| scroll bars. |
| */ |
| static ::boost::shared_ptr<SlideSorter> CreateSlideSorter ( |
| ViewShellBase& rBase, |
| ViewShell* pViewShell, |
| ::Window& rParentWindow); |
| |
| /** Return the control of the vertical scroll bar. |
| */ |
| ::boost::shared_ptr<ScrollBar> GetVerticalScrollBar (void) const; |
| |
| /** Return the control of the horizontal scroll bar. |
| */ |
| ::boost::shared_ptr<ScrollBar> GetHorizontalScrollBar (void) const; |
| |
| /** Return the scroll bar filler that paints the little square that is |
| enclosed by the two scroll bars. |
| */ |
| ::boost::shared_ptr<ScrollBarBox> GetScrollBarFiller (void) const; |
| |
| /** Return the content window. This is a sibling and is geometrically |
| enclosed by the scroll bars. |
| */ |
| SharedSdWindow GetContentWindow (void) const; |
| |
| model::SlideSorterModel& GetModel (void) const; |
| |
| view::SlideSorterView& GetView (void) const; |
| |
| controller::SlideSorterController& GetController (void) const; |
| |
| /** Return the view shell that was given at construction. |
| @return |
| May be empty. |
| */ |
| ViewShell* GetViewShell (void) const; |
| |
| /** Return the XController object of the main view. |
| */ |
| ::com::sun::star::uno::Reference<com::sun::star::frame::XController> |
| GetXController (void) const; |
| |
| /** Return the ViewShellBase object. |
| @return |
| May be empty. |
| */ |
| ViewShellBase* GetViewShellBase (void) const; |
| |
| void Paint (const Rectangle& rRepaintArea); |
| |
| /** Place and size the controls and windows. You may want to call this |
| method when something has changed that for instance affects the |
| visibility state of the scroll bars. |
| */ |
| void ArrangeGUIElements ( |
| const Point& rOffset, |
| const Size& rSize); |
| SvBorder GetBorder (void); |
| |
| bool RelocateToWindow (::Window* pWindow); |
| |
| /** Set the current function at the view shell or, when it is not |
| present, set it at the content window. This method supports the use |
| of functions even when there is no SlideSorterViewShell. |
| */ |
| void SetCurrentFunction (const FunctionReference& rpFunction); |
| |
| /** Return a collection of properties that are used througout the slide |
| sorter. |
| */ |
| ::boost::shared_ptr<controller::Properties> GetProperties (void) const; |
| |
| /** Return the active theme wich gives access to colors and fonts. |
| */ |
| ::boost::shared_ptr<view::Theme> GetTheme (void) const; |
| |
| protected: |
| /** This virtual method makes it possible to create a specialization of |
| the slide sorter view shell that works with its own implementation |
| of model, view, and controller. The default implementation simply |
| calls the CreateModel(), CreateView(), and CreateController() |
| methods in this order. |
| */ |
| virtual void CreateModelViewController (void); |
| |
| /** Create the model for the view shell. When called from the default |
| implementation of CreateModelViewController() then neither view nor |
| controller do exist. Test their pointers when in doubt. |
| */ |
| virtual model::SlideSorterModel* CreateModel (void); |
| |
| /** Create the view for the view shell. When called from the default |
| implementation of CreateModelViewController() then the model but not |
| the controller does exist. Test their pointers when in doubt. |
| */ |
| virtual view::SlideSorterView* CreateView (void); |
| |
| /** Create the controller for the view shell. When called from the default |
| implementation of CreateModelViewController() then both the view and |
| the controller do exist. Test their pointers when in doubt. |
| */ |
| virtual controller::SlideSorterController* CreateController (void); |
| |
| private: |
| bool mbIsValid; |
| |
| ::boost::scoped_ptr<controller::SlideSorterController> mpSlideSorterController; |
| ::boost::scoped_ptr<model::SlideSorterModel> mpSlideSorterModel; |
| ::boost::scoped_ptr<view::SlideSorterView> mpSlideSorterView; |
| ::com::sun::star::uno::WeakReference<com::sun::star::frame::XController> mxControllerWeak; |
| ViewShell* mpViewShell; |
| ViewShellBase* mpViewShellBase; |
| SharedSdWindow mpContentWindow; |
| bool mbOwnesContentWindow; |
| ::boost::shared_ptr<ScrollBar> mpHorizontalScrollBar; |
| ::boost::shared_ptr<ScrollBar> mpVerticalScrollBar; |
| ::boost::shared_ptr<ScrollBarBox> mpScrollBarBox; |
| |
| /** Set this flag to <TRUE/> to force a layout before the next paint. |
| */ |
| bool mbLayoutPending; |
| |
| /** Some slide sorter wide properties that are used in different |
| classes. |
| */ |
| ::boost::shared_ptr<controller::Properties> mpProperties; |
| ::boost::shared_ptr<view::Theme> mpTheme; |
| |
| SlideSorter ( |
| ViewShell& rViewShell, |
| const ::boost::shared_ptr<sd::Window>& rpContentWindow, |
| const ::boost::shared_ptr<ScrollBar>& rpHorizontalScrollBar, |
| const ::boost::shared_ptr<ScrollBar>& rpVerticalScrollBar, |
| const ::boost::shared_ptr<ScrollBarBox>& rpScrollBarBox); |
| SlideSorter ( |
| ViewShellBase& rBase, |
| ViewShell* pViewShell, |
| ::Window& rParentWindow); |
| |
| void Init (void); |
| /** Create the controls for the slide sorter. This are the tab bar |
| for switching the edit mode, the scroll bar, and the actual |
| slide sorter view window. |
| This method is usually called exactly one time from the |
| constructor. |
| */ |
| void SetupControls (::Window* pParentWindow); |
| |
| /** This method is usually called exactly one time from the |
| constructor. |
| */ |
| void SetupListeners (void); |
| |
| /** Release the listeners that have been installed in SetupListeners(). |
| */ |
| void ReleaseListeners (void); |
| }; |
| |
| } } // end of namespace ::sd::slidesorter |
| |
| #endif |