xref: /trunk/main/sw/source/ui/sidebar/PagePropertyPanel.hxx (revision af7f2cbf3d6a5481a2f45e7fae5e85a32449c47d)
1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements.  See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership.  The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License.  You may obtain a copy of the License at
10 *
11 *   http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied.  See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21 
22 
23 
24 #ifndef SW_SIDEBAR_PAGE_PROPERTY_PANEL_HXX
25 #define SW_SIDEBAR_PAGE_PROPERTY_PANEL_HXX
26 
27 #include <com/sun/star/frame/XFrame.hpp>
28 #include <com/sun/star/document/XUndoManager.hpp>
29 
30 #include <svx/sidebar/Popup.hxx>
31 
32 #include <sfx2/sidebar/ControllerItem.hxx>
33 #include <sfx2/sidebar/GridLayouter.hxx>
34 
35 namespace svx { namespace sidebar {
36     class PopupControl;
37 } }
38 
39 #include <i18npool/paper.hxx>
40 
41 #include <svx/pageitem.hxx>
42 #include <svx/rulritem.hxx>
43 #include <editeng/sizeitem.hxx>
44 
45 #include <vcl/ctrl.hxx>
46 #include <vcl/fixed.hxx>
47 #include <vcl/button.hxx>
48 #include <vcl/toolbox.hxx>
49 #include <vcl/lstbox.hxx>
50 #include <vcl/field.hxx>
51 #include <svl/intitem.hxx>
52 
53 #include <boost/scoped_ptr.hpp>
54 
55 
56 namespace css = ::com::sun::star;
57 namespace cssu = ::com::sun::star::uno;
58 
59 namespace sw { namespace sidebar {
60 
61     class PagePropertyPanel
62         : public Control,
63           public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
64     {
65     public:
66         static PagePropertyPanel* Create(
67             Window* pParent,
68             const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame,
69             SfxBindings* pBindings );
70 
71         // interface of ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
72         virtual void NotifyItemUpdate(
73             const sal_uInt16 nSId,
74             const SfxItemState eState,
75             const SfxPoolItem* pState,
76             const bool bIsEnabled);
77 
78         SfxBindings* GetBindings() const
79         {
80             return mpBindings;
81         }
82 
83 
84         ::svx::sidebar::PopupControl* CreatePageOrientationControl( ::svx::sidebar::PopupContainer* pParent );
85         void ExecuteOrientationChange( const sal_Bool bLandscape );
86         void ClosePageOrientationPopup();
87 
88         ::svx::sidebar::PopupControl* CreatePageMarginControl( ::svx::sidebar::PopupContainer* pParent );
89         void ExecuteMarginLRChange(
90             const long nPageLeftMargin,
91             const long nPageRightMargin );
92         void ExecuteMarginULChange(
93             const long nPageTopMargin,
94             const long nPageBottomMargin );
95         void ExecutePageLayoutChange( const bool bMirrored );
96         void ClosePageMarginPopup();
97 
98         ::svx::sidebar::PopupControl* CreatePageSizeControl( ::svx::sidebar::PopupContainer* pParent );
99         void ExecuteSizeChange( const Paper ePaper );
100         void ClosePageSizePopup();
101 
102         ::svx::sidebar::PopupControl* CreatePageColumnControl( ::svx::sidebar::PopupContainer* pParent );
103         void ExecuteColumnChange( const sal_uInt16 nColumnType );
104         void ClosePageColumnPopup();
105 
106         void StartUndo();
107         void EndUndo();
108 
109         // Inherited from vcl Window.
110         virtual void Resize (void);
111 
112     private:
113         PagePropertyPanel(
114             Window* pParent,
115             const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame,
116             SfxBindings* pBindings );
117         virtual ~PagePropertyPanel(void);
118 
119         SfxBindings* mpBindings;
120 
121         // toolboxes - on click open corresponding popup
122         FixedText maFtOrientation;
123         ::boost::scoped_ptr<Window> mpToolBoxOrientationBackground;
124         ::boost::scoped_ptr<ToolBox> mpToolBoxOrientation;
125         FixedText               maFtMargin;
126         ::boost::scoped_ptr<Window> mpToolBoxMarginBackground;
127         ::boost::scoped_ptr<ToolBox> mpToolBoxMargin;
128         FixedText               maFtSize;
129         ::boost::scoped_ptr<Window> mpToolBoxSizeBackground;
130         ::boost::scoped_ptr<ToolBox> mpToolBoxSize;
131         FixedText               maFtColumn;
132         ::boost::scoped_ptr<Window> mpToolBoxColumnBackground;
133         ::boost::scoped_ptr<ToolBox> mpToolBoxColumn;
134 
135         Image*                  maImgSize;
136         Image*                  maImgSize_L;
137         Image                   mImgPortrait;
138         Image                   mImgLandscape;
139         Image                   mImgNarrow;
140         Image                   mImgNormal;
141         Image                   mImgWide;
142         Image                   mImgMirrored;
143         Image                   mImgMarginCustom;
144         Image                   mImgNarrow_L;
145         Image                   mImgNormal_L;
146         Image                   mImgWide_L;
147         Image                   mImgMirrored_L;
148         Image                   mImgMarginCustom_L;
149         Image                   mImgA3;
150         Image                   mImgA4;
151         Image                   mImgA5;
152         Image                   mImgB4;
153         Image                   mImgB5;
154         Image                   mImgC5;
155         Image                   mImgLetter;
156         Image                   mImgLegal;
157         Image                   mImgSizeNone;
158         Image                   mImgA3_L;
159         Image                   mImgA4_L;
160         Image                   mImgA5_L;
161         Image                   mImgB4_L;
162         Image                   mImgB5_L;
163         Image                   mImgC5_L;
164         Image                   mImgLetter_L;
165         Image                   mImgLegal_L;
166         Image                   mImgSizeNone_L;
167         Image                   mImgColumn1;
168         Image                   mImgColumn2;
169         Image                   mImgColumn3;
170         Image                   mImgLeft;
171         Image                   mImgRight;
172         Image                   mImgColumnNone;
173         Image                   mImgColumn1_L;
174         Image                   mImgColumn2_L;
175         Image                   mImgColumn3_L;
176         Image                   mImgLeft_L;
177         Image                   mImgRight_L;
178         Image                   mImgColumnNone_L;
179 
180         // item keeping the following page style attributes:
181         // - page orientation
182         // - page usage - only left, only right, both, mirrored
183         // item also hold the numbering type for the page style which should
184         // be kept stable.
185         ::boost::scoped_ptr<SvxPageItem> mpPageItem;
186 
187         // item keeping the page style's left and right margins
188         ::boost::scoped_ptr<SvxLongLRSpaceItem> mpPageLRMarginItem;
189         // item keeping the page style's top and bottom margins
190         ::boost::scoped_ptr<SvxLongULSpaceItem> mpPageULMarginItem;
191 
192         // item keeping the page style's page size
193         ::boost::scoped_ptr<SvxSizeItem> mpPageSizeItem;
194         // Paper corresponding to the page style's page size
195         Paper mePaper;
196 
197         // item keeping the page column type
198         ::boost::scoped_ptr<SfxInt16Item> mpPageColumnTypeItem;
199 
200         FieldUnit           meFUnit;
201         SfxMapUnit          meUnit;
202 
203         // controller items
204         ::sfx2::sidebar::ControllerItem m_aSwPagePgULControl;
205         ::sfx2::sidebar::ControllerItem m_aSwPagePgLRControl;
206         ::sfx2::sidebar::ControllerItem m_aSwPagePgSizeControl;
207         ::sfx2::sidebar::ControllerItem m_aSwPagePgControl;
208         ::sfx2::sidebar::ControllerItem m_aSwPageColControl;
209         ::sfx2::sidebar::ControllerItem m_aSwPagePgMetricControl;
210 
211         // popups
212         ::svx::sidebar::Popup maOrientationPopup;
213         ::svx::sidebar::Popup maMarginPopup;
214         ::svx::sidebar::Popup maSizePopup;
215         ::svx::sidebar::Popup maColumnPopup;
216 
217         const cssu::Reference< css::document::XUndoManager > mxUndoManager;
218 
219         bool mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify;
220         ::sfx2::sidebar::GridLayouter maLayouter;
221 
222         // handler for popup toolboxes to show the popups
223         DECL_LINK(ClickOrientationHdl, ToolBox* );
224         DECL_LINK(ClickMarginHdl, ToolBox* );
225         DECL_LINK(ClickSizeHdl, ToolBox* );
226         DECL_LINK(ClickColumnHdl, ToolBox* );
227 
228         void Initialize();
229 
230         void MetricState( SfxItemState eState, const SfxPoolItem* pState );
231 
232         // helper to adjust popup toolbox' images
233         void ChangeMarginImage();
234         void ChangeSizeImage();
235         void ChangeColumnImage( const sal_uInt16 nColumnType );
236 
237     };
238 
239 } } // end of namespace ::sw::sidebar
240 
241 #endif
242 
243 /* vim: set noet sw=4 ts=4: */
244