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 #ifndef SW_SIDEBAR_PAGE_PROPERTY_PANEL_HXX
23 #define SW_SIDEBAR_PAGE_PROPERTY_PANEL_HXX
24 
25 #include <svx/sidebar/Popup.hxx>
26 
27 #include <sfx2/sidebar/SidebarPanelBase.hxx>
28 #include <sfx2/sidebar/ControllerItem.hxx>
29 
30 namespace svx { namespace sidebar {
31     class PopupControl;
32 } }
33 
34 #include <i18npool/paper.hxx>
35 
36 #include <svx/pageitem.hxx>
37 #include <editeng/sizeitem.hxx>
38 
39 #include <vcl/ctrl.hxx>
40 #include <vcl/fixed.hxx>
41 #include <vcl/button.hxx>
42 #include <vcl/toolbox.hxx>
43 #include <vcl/lstbox.hxx>
44 #include <vcl/field.hxx>
45 
46 #include <boost/scoped_ptr.hpp>
47 
48 
49 namespace sw { namespace sidebar {
50 
51     class PagePropertyPanel
52         : public Control,
53           public ::sfx2::sidebar::SidebarPanelBase::ContextChangeReceiverInterface,
54           public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
55     {
56     public:
57         static PagePropertyPanel* Create(
58             Window* pParent,
59             const cssu::Reference<css::frame::XFrame>& rxFrame,
60             SfxBindings* pBindings);
61 
62         // override Window::DataChanged(..) inherited via Control to react on certain changes
63         virtual void DataChanged( const DataChangedEvent& rEvent );
64 
65         // interface of ::sfx2::sidebar::SidebarPanelBase::ContextChangeReceiverInterface
66         virtual void HandleContextChange(
67             const ::sfx2::sidebar::EnumContext aContext);
68 
69         // interface of ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
70         virtual void NotifyItemUpdate(
71             const sal_uInt16 nSId,
72             const SfxItemState eState,
73             const SfxPoolItem* pState);
74 
75         // action on 'More Options' button in panel title
76         void ShowPageStyleFormatDialog( void );
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     private:
107         PagePropertyPanel(
108             Window* pParent,
109             const cssu::Reference<css::frame::XFrame>& rxFrame,
110             SfxBindings* pBindings);
111         virtual ~PagePropertyPanel(void);
112 
113         cssu::Reference<css::frame::XFrame> mxFrame;
114         ::sfx2::sidebar::EnumContext maContext;
115         SfxBindings* mpBindings;
116 
117         // toolboxes - on click open corresponding popup
118         FixedText   maFtOrientation;
119         ::boost::scoped_ptr<Window> mpToolBoxOrientationBackground;
120         ::boost::scoped_ptr<ToolBox> mpToolBoxOrientation;
121         FixedText				maFtMargin;
122         ::boost::scoped_ptr<Window> mpToolBoxMarginBackground;
123         ::boost::scoped_ptr<ToolBox> mpToolBoxMargin;
124         FixedText				maFtSize;
125         ::boost::scoped_ptr<Window> mpToolBoxSizeBackground;
126         ::boost::scoped_ptr<ToolBox> mpToolBoxSize;
127         FixedText				maFtColumn;
128         ::boost::scoped_ptr<Window> mpToolBoxColumnBackground;
129         ::boost::scoped_ptr<ToolBox> mpToolBoxColumn;
130 
131         Image*					maImgSize;
132         Image*					maImgSize_L;
133         Image					mImgPortrait;
134         Image					mImgLandscape;
135         Image					mImgNarrow;
136         Image					mImgNormal;
137         Image					mImgWide;
138         Image					mImgMirrored;
139         Image					mImgMarginCustom;
140         Image					mImgNarrow_L;
141         Image					mImgNormal_L;
142         Image					mImgWide_L;
143         Image					mImgMirrored_L;
144         Image					mImgMarginCustom_L;
145         Image					mImgA3;
146         Image					mImgA4;
147         Image					mImgA5;
148         Image					mImgB4;
149         Image					mImgB5;
150         Image					mImgC5;
151         Image					mImgLetter;
152         Image					mImgLegal;
153         Image					mImgSizeNone;
154         Image					mImgA3_L;
155         Image					mImgA4_L;
156         Image					mImgA5_L;
157         Image					mImgB4_L;
158         Image					mImgB5_L;
159         Image					mImgC5_L;
160         Image					mImgLetter_L;
161         Image					mImgLegal_L;
162         Image					mImgSizeNone_L;
163         Image					mImgColumn1;
164         Image					mImgColumn2;
165         Image					mImgColumn3;
166         Image					mImgLeft;
167         Image					mImgRight;
168         Image					mImgColumnNone;
169         Image					mImgColumn1_L;
170         Image					mImgColumn2_L;
171         Image					mImgColumn3_L;
172         Image					mImgLeft_L;
173         Image					mImgRight_L;
174         Image					mImgColumnNone_L;
175 
176         // item keeping the following page style attributes:
177         // - page orientation
178         // - page usage - only left, only right, both, mirrored
179         // item also hold the numbering type for the page style which should
180         // be kept stable.
181         ::boost::scoped_ptr<SvxPageItem> mpPageItem;
182 
183         // item keeping the page style's left and right margins
184         ::boost::scoped_ptr<SvxLongLRSpaceItem> mpPageLRMarginItem;
185         // item keeping the page style's top and bottom margins
186         ::boost::scoped_ptr<SvxLongULSpaceItem> mpPageULMarginItem;
187 
188         // item keeping the page style's page size
189         ::boost::scoped_ptr<SvxSizeItem> mpPageSizeItem;
190         // Paper corresponding to the page style's page size
191         Paper mePaper;
192 
193         // item keeping the page column type
194         ::boost::scoped_ptr<SfxInt16Item> mpPageColumnTypeItem;
195 
196         FieldUnit 			meFUnit;
197         SfxMapUnit			meUnit;
198 
199         // controller items
200         ::sfx2::sidebar::ControllerItem m_aSwPagePgULControl;
201         ::sfx2::sidebar::ControllerItem m_aSwPagePgLRControl;
202         ::sfx2::sidebar::ControllerItem m_aSwPagePgSizeControl;
203         ::sfx2::sidebar::ControllerItem m_aSwPagePgControl;
204         ::sfx2::sidebar::ControllerItem m_aSwPageColControl;
205         ::sfx2::sidebar::ControllerItem m_aSwPagePgMetricControl;
206 
207         // popups
208         ::boost::scoped_ptr< ::svx::sidebar::Popup > mpOrientationPopup;
209         ::boost::scoped_ptr< ::svx::sidebar::Popup > mpMarginPopup;
210         ::boost::scoped_ptr< ::svx::sidebar::Popup > mpSizePopup;
211         ::boost::scoped_ptr< ::svx::sidebar::Popup > mpColumnPopup;
212 
213         bool mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify;
214 
215         // handler for popup toolboxes to show the popups
216         DECL_LINK(ClickOrientationHdl, ToolBox* );
217         DECL_LINK(ClickMarginHdl, ToolBox* );
218         DECL_LINK(ClickSizeHdl, ToolBox* );
219         DECL_LINK(ClickColumnHdl, ToolBox* );
220 
221         void Initialize();
222 
223         void MetricState( SfxItemState eState, const SfxPoolItem* pState );
224 
225         // helper to adjust popup toolbox' images
226         void ChangeMarginImage();
227         void ChangeSizeImage();
228         void ChangeColumnImage( const sal_uInt16 nColumnType );
229 
230     };
231 
232 } } // end of namespace ::sw::sidebar
233 
234 #endif
235