1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef FORMS_SOLAR_CONTROL_NAVTOOLBAR_HXX
29 #define FORMS_SOLAR_CONTROL_NAVTOOLBAR_HXX
30 
31 #include <vcl/toolbox.hxx>
32 #include <vcl/field.hxx>
33 
34 #include <boost/shared_ptr.hpp>
35 
36 //.........................................................................
37 namespace frm
38 {
39 //.........................................................................
40 
41     class IFeatureDispatcher;
42     class ICommandImageProvider;
43     class ICommandDescriptionProvider;
44 
45     class ImplNavToolBar;
46 
47     //=====================================================================
48     //= NavigationToolBar
49     //=====================================================================
50     class NavigationToolBar : public Window
51     {
52     public:
53         enum ImageSize
54         {
55             eSmall,
56             eLarge
57         };
58 
59         enum FunctionGroup
60         {
61             ePosition,
62             eNavigation,
63             eRecordActions,
64             eFilterSort
65         };
66 
67     private:
68         const IFeatureDispatcher*       m_pDispatcher;
69         const ::boost::shared_ptr< const ICommandImageProvider >
70                                         m_pImageProvider;
71         const ::boost::shared_ptr< const ICommandDescriptionProvider >
72                                         m_pDescriptionProvider;
73         ImageSize                       m_eImageSize;
74         ImplNavToolBar*                 m_pToolbar;
75         ::std::vector< Window* >        m_aChildWins;
76 
77     public:
78         NavigationToolBar(
79             Window* _pParent,
80             WinBits _nStyle,
81             const ::boost::shared_ptr< const ICommandImageProvider >& _pImageProvider,
82             const ::boost::shared_ptr< const ICommandDescriptionProvider >& _pDescriptionProvider
83         );
84         ~NavigationToolBar( );
85 
86         /** sets the dispatcher which is to be used for the features
87 
88             If the dispatcher is the same as the one which is currently set,
89             then the states of the features are updated
90 
91             @param _pDispatcher
92                 the new (or old) dispatcher. The caller is reponsible for
93                 ensuring the life time of the object does exceed the life time
94                 of the tool bar instance.
95         */
96         void    setDispatcher( const IFeatureDispatcher* _pDispatcher );
97 
98         /// enables or disables a given feature
99         void    enableFeature( sal_Int16 _nFeatureId, bool _bEnabled );
100 
101         /// checks or unchecks a given feature
102         void    checkFeature( sal_Int16 _nFeatureId, bool _bEnabled );
103 
104         /// sets the text of a given feature
105         void    setFeatureText( sal_Int16 _nFeatureId, const ::rtl::OUString& _rText );
106 
107         /** retrieves the current image size
108         */
109         inline ImageSize    GetImageSize( ) const { return m_eImageSize; }
110 
111         /** sets the size of the images
112         */
113         void                SetImageSize( ImageSize _eSize );
114 
115         /** shows or hides a function group
116         */
117         void                ShowFunctionGroup( FunctionGroup _eGroup, bool _bShow );
118 
119         /** determines whether or not a given function group is currently visible
120         */
121         bool                IsFunctionGroupVisible( FunctionGroup _eGroup );
122 
123         // Window "overridables" (hiding the respective Window methods)
124         void                SetControlBackground();
125         void                SetControlBackground( const Color& rColor );
126         void                SetTextLineColor( );
127         void                SetTextLineColor( const Color& rColor );
128 
129     protected:
130         // Window overridables
131         virtual void        Resize();
132         virtual void        StateChanged( StateChangedType nType );
133 
134         /// ctor implementation
135         void implInit( );
136 
137         /// impl version of SetImageSize
138         void    implSetImageSize( ImageSize _eSize );
139 
140         /// updates the images of our items
141         void    implUpdateImages();
142 
143         /// enables or disables an item, plus possible dependent items
144         void implEnableItem( sal_uInt16 _nItemId, bool _bEnabled );
145 
146         /** update the states of all features, using the callback
147         */
148         void updateFeatureStates( );
149 
150         // iterating through item windows
151 		typedef void (NavigationToolBar::*ItemWindowHandler) (sal_uInt16, Window*, const void*) const;
152         void    forEachItemWindow( ItemWindowHandler _handler, const void* _pParam );
153 
154         void setItemBackground( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* _pColor ) const;
155         void setTextLineColor( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* _pColor ) const;
156 #if 0
157         void setItemWindowZoom( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const;
158 #endif
159         void setItemControlFont( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const;
160         void setItemControlForeground( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const;
161         void adjustItemWindowWidth( sal_uInt16 _nItemId, Window* _pItemWindow, const void* /* _pParam */ ) const;
162         void enableItemRTL( sal_uInt16 /*_nItemId*/, Window* _pItemWindow, const void* _pIsRTLEnabled ) const;
163     };
164 
165     //=====================================================================
166     //= RecordPositionInput
167     //=====================================================================
168     class RecordPositionInput : public NumericField
169     {
170     private:
171         const IFeatureDispatcher*   m_pDispatcher;
172 
173     public:
174         RecordPositionInput( Window* _pParent );
175         ~RecordPositionInput();
176 
177         /** sets the dispatcher which is to be used for the features
178         */
179         void    setDispatcher( const IFeatureDispatcher* _pDispatcher );
180 
181     protected:
182         // Window overridables
183         virtual void LoseFocus();
184         virtual void KeyInput( const KeyEvent& rKeyEvent );
185 
186     private:
187         void FirePosition( sal_Bool _bForce );
188     };
189 
190 //.........................................................................
191 }   // namespace frm
192 //.........................................................................
193 
194 #endif // FORMS_SOLAR_CONTROL_NAVTOOLBAR_HXX
195