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 SVX_SIDEBAR_PARA_PROPERTY_PANEL_HXX
23 #define SVX_SIDEBAR_PARA_PROPERTY_PANEL_HXX
24 
25 #include <vcl/ctrl.hxx>
26 #include <sfx2/sidebar/ControllerItem.hxx>
27 #include <sfx2/sidebar/IContextChangeReceiver.hxx>
28 #include <editeng/lspcitem.hxx>
29 #include <svtools/ctrlbox.hxx>
30 #include <svx/tbxcolorupdate.hxx>
31 #include <svx/relfld.hxx>
32 #include <editeng/svxenum.hxx>
33 #include <editeng/fhgtitem.hxx>
34 
35 #include <com/sun/star/frame/XFrame.hpp>
36 #include <com/sun/star/ui/XSidebar.hpp>
37 
38 #include <boost/scoped_ptr.hpp>
39 
40 #include <svx/sidebar/ColorPopup.hxx>
41 #include <vcl/vclenum.hxx>
42 #include <vcl/fixed.hxx>
43 #include <svl/poolitem.hxx>
44 #include <tools/fldunit.hxx>
45 
46 #include "ParaBulletsPopup.hxx"
47 #include "ParaNumberingPopup.hxx"
48 #include "ParaLineSpacingPopup.hxx"
49 
50 class FloatingWindow;
51 class ToolBox;
52 
53 namespace css = ::com::sun::star;
54 namespace cssu = ::com::sun::star::uno;
55 
56 
57 namespace svx { namespace sidebar {
58 
59 class PopupControl;
60 class PopupContainer;
61 
62 class ParaPropertyPanel
63     : public Control,
64       public ::sfx2::sidebar::IContextChangeReceiver,
65       public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
66 {
67 public:
68     static ParaPropertyPanel* Create (
69         Window* pParent,
70         const cssu::Reference<css::frame::XFrame>& rxFrame,
71         SfxBindings* pBindings,
72         const cssu::Reference<css::ui::XSidebar>& rxSidebar);
73 
74 	virtual void DataChanged (const DataChangedEvent& rEvent);
75 	SfxBindings* GetBindings();
76 
77 	virtual void HandleContextChange (
78 	    const ::sfx2::sidebar::EnumContext aContext);
79 
80 	virtual void NotifyItemUpdate(
81 	    const sal_uInt16 nSId,
82 	    const SfxItemState eState,
83 	    const SfxPoolItem* pState);
84 
85 	void ShowMenu (void);
86 	sal_uInt16 GetBulletTypeIndex(){ return mnBulletTypeIndex; }
87 	void SetBulletTypeIndex(sal_uInt16 nInd){ mnBulletTypeIndex = nInd; }
88 	sal_uInt16 GetNumTypeIndex(){ return mnNumTypeIndex; }
89 	void SetNumTypeIndex(sal_uInt16 nInd){ mnNumTypeIndex = nInd; }
90 	FieldUnit GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState );
91 
92 	void EndSpacingPopupMode (void);
93 	void EndBulletsPopupMode (void);
94 	void EndNumberingPopupMode (void);
95 
96 private:
97 	/**********************************************************
98 	 **
99 	 ** UI controls
100 	 **
101 	***********************************************************/
102 	//Alignment
103 	::boost::scoped_ptr<Window> 			maAlignToolBoxBackground;
104 	::boost::scoped_ptr<ToolBox>			maAlignToolBox;
105 	::boost::scoped_ptr<Window> 			maTBxVertAlignBackground;
106 	::boost::scoped_ptr<ToolBox>			maTBxVertAlign;
107 	//NumBullet&Backcolor
108 	::boost::scoped_ptr<Window> 			maTBxNumBulletBackground;
109 	::boost::scoped_ptr<ToolBox>			maTBxNumBullet;
110 	::boost::scoped_ptr<Window> 			maTBxBackColorBackground;
111 	::boost::scoped_ptr<ToolBox>			maTBxBackColor;
112 	//Paragraph spacing
113 	::boost::scoped_ptr<FixedText>			maFTUL;
114 	::boost::scoped_ptr<Window> 			maTbxUL_IncDecBackground;
115 	::boost::scoped_ptr<ToolBox>			maTbxUL_IncDec;
116 	::boost::scoped_ptr<SvxRelativeField>	maTopDist;
117 	::boost::scoped_ptr<SvxRelativeField>	maBottomDist;
118 	//Line spacing
119 	::boost::scoped_ptr<Window> 			maLineSPTbxBackground;
120 	::boost::scoped_ptr<ToolBox>			maLineSPTbx;
121 	//Indent
122 	::boost::scoped_ptr<FixedText>			maFTIndent;
123 	::boost::scoped_ptr<Window> 			maTbxIndent_IncDecBackground;
124 	::boost::scoped_ptr<ToolBox>			maTbxIndent_IncDec;
125 	::boost::scoped_ptr<Window> 			maTbxProDemoteBackground;
126 	::boost::scoped_ptr<ToolBox>			maTbxProDemote;
127 	::boost::scoped_ptr<SvxRelativeField>	maLeftIndent;
128 	::boost::scoped_ptr<SvxRelativeField>	maRightIndent;
129 	::boost::scoped_ptr<SvxRelativeField>	maFLineIndent;
130 	::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > mpColorUpdater;
131 
132 	/**********************************************************
133 	 **
134 	 ** Resources
135 	 **
136 	***********************************************************/
137 	FixedImage  maFISpace1;
138 	FixedImage  maFISpace2;
139 	FixedImage  maFIndent1;
140 	FixedImage  maFIndent2;
141 	FixedImage  maFIndent3;
142 
143 	Image  maSpace1;
144 	Image  maSpace2;
145 	Image  maSpace3;
146 	Image  maIndent1;
147 	Image  maIndent2;
148 	Image  maIndent3;
149 
150 	Image  maLeftPara;
151 	Image  maCentPara;
152 	Image  maRightPara;
153 	Image  maJusPara;
154 
155 	Image  maIndInc;
156 	Image  maIndDec;
157 	Image  maIndInc_BD;
158 	Image  maIndDec_BD;
159 	Image  maIndHang;
160 	Image  maParInc;
161 	Image  maParDec;
162 
163 	ImageList	maVertImageList;
164 	ImageList	maVertImageListH;
165 	ImageList	maNumBImageList;
166 	ImageList	maNumBImageListH;
167 	ImageList	maNumBImageListRTL;
168 	Image		maImgBackColorHigh;
169 	Image		maImgBackColor;
170 
171 	/****************************************************************
172 	**
173 	** Data Member
174 	**
175 	*****************************************************************/
176 	long				maTxtLeft;
177 	//Line spacing
178 	SvxLineSpacingItem	*mpLnSPItem;
179 	SfxItemState			meLnSpState;
180 	bool					mbOutLineLeft;
181 	bool					mbOutLineRight;
182 	long					maUpper;
183 	long					maLower;
184 
185 	sal_uInt16			mnBulletTypeIndex;
186 	sal_uInt16			mnNumTypeIndex;
187 	Color				maColor;
188 	bool					mbColorAvailable;
189 	FieldUnit						m_eMetricUnit;
190 	FieldUnit						m_last_eMetricUnit;
191 	SfxMapUnit                      m_eLRSpaceUnit;
192 	SfxMapUnit                      m_eULSpaceUnit;
193 	/****************************************************************
194 	**
195 	** Controll Items
196 	**
197 	*****************************************************************/
198 
199 	::sfx2::sidebar::ControllerItem  maLeftAlignControl;
200 	::sfx2::sidebar::ControllerItem  maCenterAlignControl;
201 	::sfx2::sidebar::ControllerItem  maRightAlignControl;
202 	::sfx2::sidebar::ControllerItem  maJustifyAlignControl;
203 	::sfx2::sidebar::ControllerItem  maLRSpaceControl;
204 	::sfx2::sidebar::ControllerItem  maLNSpaceControl;
205 	::sfx2::sidebar::ControllerItem  maULSpaceControl;
206 	::sfx2::sidebar::ControllerItem  maOutLineLeftControl;
207 	::sfx2::sidebar::ControllerItem  maOutLineRightControl;
208 	::sfx2::sidebar::ControllerItem  maDecIndentControl;
209 	::sfx2::sidebar::ControllerItem  maIncIndentControl;
210 	::sfx2::sidebar::ControllerItem  maVertTop;
211 	::sfx2::sidebar::ControllerItem  maVertCenter;
212 	::sfx2::sidebar::ControllerItem  maVertBottom;
213 	::sfx2::sidebar::ControllerItem  maBulletOnOff;
214 	::sfx2::sidebar::ControllerItem  maNumberOnOff;
215 	::sfx2::sidebar::ControllerItem  maBackColorControl;
216 	::sfx2::sidebar::ControllerItem  m_aMetricCtl;
217 	::sfx2::sidebar::ControllerItem  maBulletNumRuleIndex;
218 	::sfx2::sidebar::ControllerItem  maNumNumRuleIndex;
219 
220     ::sfx2::sidebar::EnumContext maContext;
221     SfxBindings* mpBindings;
222 	ParaLineSpacingPopup maLineSpacePopup;
223 	ParaBulletsPopup maBulletsPopup;
224 	ParaNumberingPopup maNumberingPopup;
225 	ColorPopup maBGColorPopup;
226     cssu::Reference<css::ui::XSidebar> mxSidebar;
227 
228 
229     ParaPropertyPanel (
230         Window* pParent,
231         const cssu::Reference<css::frame::XFrame>& rxFrame,
232         SfxBindings* pBindings,
233         const cssu::Reference<css::ui::XSidebar>& rxSidebar);
234 	virtual ~ParaPropertyPanel (void);
235 
236 	void InitImageList(::boost::scoped_ptr<ToolBox>& rTbx, ImageList& rImglst, ImageList& rImgHlst);
237 
238 	DECL_LINK(AlignStyleModifyHdl_Impl, ToolBox*);
239 	DECL_LINK(VertTbxSelectHandler, ToolBox*);
240 	DECL_LINK(NumBTbxSelectHandler, ToolBox*);
241 	DECL_LINK(ModifyIndentHdl_Impl, SvxRelativeField*);
242 	DECL_LINK(ClickIndent_IncDec_Hdl_Impl, ToolBox*);
243 	DECL_LINK(ClickProDemote_Hdl_Impl, ToolBox*);
244 	DECL_LINK(ULSpaceHdl_Impl, SvxRelativeField*);
245 	DECL_LINK(ClickUL_IncDec_Hdl_Impl, ToolBox*);
246 	DECL_LINK(ImplPopupModeEndHdl, FloatingWindow* );
247 
248 	void VertStateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState);
249 	void ParaBKGStateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState);
250 	void StateChangedAlignmentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
251 	void StateChangedIndentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
252 	void StateChangedLnSPImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
253 	void StateChangedULImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
254 	void StateChangeOutLineImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
255 	void StateChangeIncDecImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
256 	// Add toggle state for numbering and bullet icons
257 	void StateChangeBulletNumImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
258 	//Modified for Numbering&Bullets Dialog UX Enh
259 	//Handing the transferred the num rule index data of the current selection
260 	void StateChangeBulletNumRuleImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
261 
262 	void initial();
263 	void ReSize(bool bSize);
264 
265 
266 	PopupControl* CreateLineSpacingControl (PopupContainer* pParent);
267 	PopupControl* CreateBulletsPopupControl (PopupContainer* pParent);
268 	PopupControl* CreateNumberingPopupControl (PopupContainer* pParent);
269 	PopupControl* CreateBGColorPopupControl (PopupContainer* pParent);
270 	DECL_LINK(ClickLineSPDropDownHdl_Impl, ToolBox*);
271 	DECL_LINK(NumBTbxDDHandler, ToolBox*);
272 	DECL_LINK(ToolBoxBackColorDDHandler, ToolBox *);
273 
274 	void SetupIcons (void);
275 	void InitToolBoxAlign();
276 	void InitToolBoxVertAlign();
277 	void InitToolBoxIndent();
278 	void InitToolBoxBGColor();
279 	void InitToolBoxBulletsNumbering();
280 	void InitToolBoxSpacing();
281 	void InitToolBoxLineSpacing();
282 
283 	Color GetBGColor (void) const;
284 	void SetBGColor (const String& rsColorName, const Color aColor);
285 };
286 
287 } } // end of namespace ::svx::sidebar
288 
289 #endif
290 
291