xref: /aoo4110/main/svx/source/tbxctrls/tbcontrl.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // include ---------------------------------------------------------------
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski #include <string> // HACK: prevent conflict between STLPORT and Workshop headers
31*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
32*b1cdbd2cSJim Jagielski #include <svl/poolitem.hxx>
33*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/toolbox.hxx>
35*b1cdbd2cSJim Jagielski #include <vcl/bmpacc.hxx>
36*b1cdbd2cSJim Jagielski #include <svtools/valueset.hxx>
37*b1cdbd2cSJim Jagielski #include <svtools/ctrlbox.hxx>
38*b1cdbd2cSJim Jagielski #include <svl/style.hxx>
39*b1cdbd2cSJim Jagielski #include <svtools/ctrltool.hxx>
40*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
41*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
42*b1cdbd2cSJim Jagielski #include <sfx2/tplpitem.hxx>
43*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
44*b1cdbd2cSJim Jagielski #include <sfx2/viewsh.hxx>
45*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
46*b1cdbd2cSJim Jagielski #include <sfx2/docfac.hxx>
47*b1cdbd2cSJim Jagielski #include <sfx2/templdlg.hxx>
48*b1cdbd2cSJim Jagielski #include <svl/isethint.hxx>
49*b1cdbd2cSJim Jagielski #include <sfx2/querystatus.hxx>
50*b1cdbd2cSJim Jagielski #include <sfx2/sfxstatuslistener.hxx>
51*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
52*b1cdbd2cSJim Jagielski #include <sfx2/childwin.hxx>
53*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
54*b1cdbd2cSJim Jagielski #include <unotools/fontoptions.hxx>
55*b1cdbd2cSJim Jagielski #include <vcl/mnemonic.hxx>
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
58*b1cdbd2cSJim Jagielski #include <svl/smplhint.hxx>
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski #define _SVX_TBCONTRL_CXX
61*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx>
62*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
63*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
64*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
65*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/status/ItemStatus.hpp>
66*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/status/FontHeight.hpp>
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
69*b1cdbd2cSJim Jagielski #include <svx/svxitems.hrc>
70*b1cdbd2cSJim Jagielski #include "helpid.hrc"
71*b1cdbd2cSJim Jagielski #include "svx/htmlmode.hxx"
72*b1cdbd2cSJim Jagielski #include <svx/xtable.hxx>
73*b1cdbd2cSJim Jagielski #include "editeng/fontitem.hxx"
74*b1cdbd2cSJim Jagielski #include <editeng/fhgtitem.hxx>
75*b1cdbd2cSJim Jagielski #include <editeng/brshitem.hxx>
76*b1cdbd2cSJim Jagielski #include <editeng/boxitem.hxx>
77*b1cdbd2cSJim Jagielski #include <editeng/colritem.hxx>
78*b1cdbd2cSJim Jagielski #include "editeng/flstitem.hxx"
79*b1cdbd2cSJim Jagielski #include "editeng/bolnitem.hxx"
80*b1cdbd2cSJim Jagielski #include "svx/drawitem.hxx"
81*b1cdbd2cSJim Jagielski #include <svx/tbcontrl.hxx>
82*b1cdbd2cSJim Jagielski #include "svx/dlgutil.hxx"
83*b1cdbd2cSJim Jagielski #include <svx/dialmgr.hxx>
84*b1cdbd2cSJim Jagielski #include "colorwindow.hxx"
85*b1cdbd2cSJim Jagielski #include <memory>
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski #include <svx/tbxcolorupdate.hxx>
88*b1cdbd2cSJim Jagielski #include <editeng/eerdll.hxx>
89*b1cdbd2cSJim Jagielski #include <editeng/editrids.hrc>
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski #define MAX_MRU_FONTNAME_ENTRIES	5
94*b1cdbd2cSJim Jagielski #define LOGICAL_EDIT_HEIGHT         12
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski // STATIC DATA -----------------------------------------------------------
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski #ifndef DELETEZ
99*b1cdbd2cSJim Jagielski #define DELETEZ(p) (delete (p), (p)=NULL)
100*b1cdbd2cSJim Jagielski #endif
101*b1cdbd2cSJim Jagielski // don't make more than 15 entries visible at once
102*b1cdbd2cSJim Jagielski #define MAX_STYLES_ENTRIES          static_cast< sal_uInt16 >( 15 )
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski void lcl_ResizeValueSet( Window &rWin, ValueSet &rValueSet );
105*b1cdbd2cSJim Jagielski void lcl_CalcSizeValueSet( Window &rWin, ValueSet &rValueSet, const Size &aItemSize );
106*b1cdbd2cSJim Jagielski sal_Bool lcl_FontChangedHint( const SfxHint &rHint );
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski // namespaces
109*b1cdbd2cSJim Jagielski using ::rtl::OUString;
110*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
111*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
112*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
113*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
114*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
115*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxStyleToolBoxControl, SfxTemplateItem );
118*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxFontNameToolBoxControl, SvxFontItem );
119*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxFontColorToolBoxControl, SvxColorItem );
120*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxFontColorExtToolBoxControl, SvxColorItem );
121*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxColorToolBoxControl, SvxColorItem );
122*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxFrameToolBoxControl, SvxBoxItem );
123*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxFrameLineStyleToolBoxControl, SvxLineItem );
124*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxFrameLineColorToolBoxControl, SvxColorItem );
125*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxReloadControllerItem,	SfxBoolItem );
126*b1cdbd2cSJim Jagielski SFX_IMPL_TOOLBOX_CONTROL( SvxSimpleUndoRedoController, SfxStringItem );
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski //========================================================================
129*b1cdbd2cSJim Jagielski // class SvxStyleBox_Impl -----------------------------------------------------
130*b1cdbd2cSJim Jagielski //========================================================================
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski class SvxStyleBox_Impl : public ComboBox
134*b1cdbd2cSJim Jagielski {
135*b1cdbd2cSJim Jagielski 	using Window::IsVisible;
136*b1cdbd2cSJim Jagielski public:
137*b1cdbd2cSJim Jagielski     SvxStyleBox_Impl( Window* pParent, sal_uInt16 nSlot, const OUString& rCommand, SfxStyleFamily eFamily, const Reference< XDispatchProvider >& rDispatchProvider,
138*b1cdbd2cSJim Jagielski 						const Reference< XFrame >& _xFrame,const String& rClearFormatKey, const String& rMoreKey, sal_Bool bInSpecialMode );
139*b1cdbd2cSJim Jagielski 	~SvxStyleBox_Impl();
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 	void 			SetFamily( SfxStyleFamily eNewFamily );
IsVisible()142*b1cdbd2cSJim Jagielski     inline sal_Bool     IsVisible() { return bVisible; }
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 	virtual long	PreNotify( NotifyEvent& rNEvt );
145*b1cdbd2cSJim Jagielski 	virtual long	Notify( NotifyEvent& rNEvt );
146*b1cdbd2cSJim Jagielski     virtual void    DataChanged( const DataChangedEvent& rDCEvt );
147*b1cdbd2cSJim Jagielski     virtual void	StateChanged( StateChangedType nStateChange );
148*b1cdbd2cSJim Jagielski 
SetVisibilityListener(const Link & aVisListener)149*b1cdbd2cSJim Jagielski     inline void     SetVisibilityListener( const Link& aVisListener ) { aVisibilityListener = aVisListener; }
RemoveVisibilityListener()150*b1cdbd2cSJim Jagielski     inline void     RemoveVisibilityListener() { aVisibilityListener = Link(); }
151*b1cdbd2cSJim Jagielski 
SetDefaultStyle(const::rtl::OUString & rDefault)152*b1cdbd2cSJim Jagielski     void            SetDefaultStyle( const ::rtl::OUString& rDefault ) { sDefaultStyle = rDefault; }
153*b1cdbd2cSJim Jagielski     DECL_STATIC_LINK( SvxStyleBox_Impl, FocusHdl_Impl, Control* );
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski protected:
156*b1cdbd2cSJim Jagielski 	virtual void	Select();
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski private:
159*b1cdbd2cSJim Jagielski 	sal_uInt16			                nSlotId;
160*b1cdbd2cSJim Jagielski 	SfxStyleFamily	                eStyleFamily;
161*b1cdbd2cSJim Jagielski 	sal_uInt16			                nCurSel;
162*b1cdbd2cSJim Jagielski 	sal_Bool			                bRelease;
163*b1cdbd2cSJim Jagielski     Size                            aLogicalSize;
164*b1cdbd2cSJim Jagielski 	Link			                aVisibilityListener;
165*b1cdbd2cSJim Jagielski 	sal_Bool			                bVisible;
166*b1cdbd2cSJim Jagielski     Reference< XDispatchProvider >  m_xDispatchProvider;
167*b1cdbd2cSJim Jagielski     Reference< XFrame >             m_xFrame;
168*b1cdbd2cSJim Jagielski     OUString                        m_aCommand;
169*b1cdbd2cSJim Jagielski 	String							aClearFormatKey;
170*b1cdbd2cSJim Jagielski 	String							aMoreKey;
171*b1cdbd2cSJim Jagielski 	String                          sDefaultStyle;
172*b1cdbd2cSJim Jagielski     sal_Bool							bInSpecialMode;
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 	void			ReleaseFocus();
175*b1cdbd2cSJim Jagielski };
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski //========================================================================
178*b1cdbd2cSJim Jagielski // class SvxFontNameBox --------------------------------------------------
179*b1cdbd2cSJim Jagielski //========================================================================
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski class SvxFontNameBox_Impl : public FontNameBox
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski 	using Window::Update;
184*b1cdbd2cSJim Jagielski private:
185*b1cdbd2cSJim Jagielski 	const FontList*	               pFontList;
186*b1cdbd2cSJim Jagielski     ::std::auto_ptr<FontList>      m_aOwnFontList;
187*b1cdbd2cSJim Jagielski 	Font			               aCurFont;
188*b1cdbd2cSJim Jagielski     Size                           aLogicalSize;
189*b1cdbd2cSJim Jagielski 	String			               aCurText;
190*b1cdbd2cSJim Jagielski 	sal_uInt16			               nFtCount;
191*b1cdbd2cSJim Jagielski 	sal_Bool			               bRelease;
192*b1cdbd2cSJim Jagielski     Reference< XDispatchProvider > m_xDispatchProvider;
193*b1cdbd2cSJim Jagielski     Reference< XFrame >            m_xFrame;
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski 	void			ReleaseFocus_Impl();
196*b1cdbd2cSJim Jagielski 	void			EnableControls_Impl();
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski protected:
199*b1cdbd2cSJim Jagielski 	virtual void 	Select();
200*b1cdbd2cSJim Jagielski     virtual void    DataChanged( const DataChangedEvent& rDCEvt );
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski public:
203*b1cdbd2cSJim Jagielski     SvxFontNameBox_Impl( Window* pParent, const Reference< XDispatchProvider >& rDispatchProvider,const Reference< XFrame >& _xFrame
204*b1cdbd2cSJim Jagielski         , WinBits nStyle = WB_SORT
205*b1cdbd2cSJim Jagielski         );
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 	void			FillList();
208*b1cdbd2cSJim Jagielski 	void			Update( const SvxFontItem* pFontItem );
GetListCount()209*b1cdbd2cSJim Jagielski 	sal_uInt16			GetListCount() { return nFtCount; }
Clear()210*b1cdbd2cSJim Jagielski 	void			Clear() { FontNameBox::Clear(); nFtCount = 0; }
Fill(const FontList * pList)211*b1cdbd2cSJim Jagielski 	void			Fill( const FontList* pList )
212*b1cdbd2cSJim Jagielski 						{ FontNameBox::Fill( pList );
213*b1cdbd2cSJim Jagielski 						  nFtCount = pList->GetFontNameCount(); }
214*b1cdbd2cSJim Jagielski 	virtual long	PreNotify( NotifyEvent& rNEvt );
215*b1cdbd2cSJim Jagielski 	virtual long	Notify( NotifyEvent& rNEvt );
216*b1cdbd2cSJim Jagielski 	virtual Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
SetOwnFontList(::std::auto_ptr<FontList> _aOwnFontList)217*b1cdbd2cSJim Jagielski     inline void     SetOwnFontList(::std::auto_ptr<FontList> _aOwnFontList) { m_aOwnFontList = _aOwnFontList; }
218*b1cdbd2cSJim Jagielski };
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski //========================================================================
221*b1cdbd2cSJim Jagielski // class SvxFrameWindow_Impl --------------------------------------------------
222*b1cdbd2cSJim Jagielski //========================================================================
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski // fuer den SelectHdl werden die Modifier gebraucht, also
225*b1cdbd2cSJim Jagielski // muss man sie im MouseButtonUp besorgen
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski class SvxFrmValueSet_Impl : public ValueSet
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski 	sal_uInt16			nModifier;
230*b1cdbd2cSJim Jagielski     virtual void    MouseButtonUp( const MouseEvent& rMEvt );
231*b1cdbd2cSJim Jagielski public:
SvxFrmValueSet_Impl(Window * pParent,WinBits nWinStyle)232*b1cdbd2cSJim Jagielski     SvxFrmValueSet_Impl(Window* pParent,  WinBits nWinStyle)
233*b1cdbd2cSJim Jagielski 		: ValueSet(pParent, nWinStyle), nModifier(0) {}
GetModifier() const234*b1cdbd2cSJim Jagielski 	sal_uInt16			GetModifier() const {return nModifier;}
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski };
237*b1cdbd2cSJim Jagielski 
MouseButtonUp(const MouseEvent & rMEvt)238*b1cdbd2cSJim Jagielski void SvxFrmValueSet_Impl::MouseButtonUp( const MouseEvent& rMEvt )
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski 	nModifier = rMEvt.GetModifier();
241*b1cdbd2cSJim Jagielski 	ValueSet::MouseButtonUp(rMEvt);
242*b1cdbd2cSJim Jagielski }
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski class SvxFrameWindow_Impl : public SfxPopupWindow
245*b1cdbd2cSJim Jagielski {
246*b1cdbd2cSJim Jagielski 	using FloatingWindow::StateChanged;
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski private:
249*b1cdbd2cSJim Jagielski     SvxFrmValueSet_Impl  aFrameSet;
250*b1cdbd2cSJim Jagielski 	ImageList 		aImgList;
251*b1cdbd2cSJim Jagielski     sal_Bool        bParagraphMode;
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski #if _SOLAR__PRIVATE
254*b1cdbd2cSJim Jagielski 	DECL_LINK( SelectHdl, void * );
255*b1cdbd2cSJim Jagielski #endif
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski protected:
258*b1cdbd2cSJim Jagielski 	virtual void    Resize();
259*b1cdbd2cSJim Jagielski 	virtual sal_Bool	Close();
260*b1cdbd2cSJim Jagielski 	virtual Window*	GetPreferredKeyInputWindow();
261*b1cdbd2cSJim Jagielski 	virtual void	GetFocus();
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski public:
264*b1cdbd2cSJim Jagielski     SvxFrameWindow_Impl( sal_uInt16 nId, const Reference< XFrame >& rFrame, Window* pParentWindow );
265*b1cdbd2cSJim Jagielski     ~SvxFrameWindow_Impl();
266*b1cdbd2cSJim Jagielski 	void            StartSelection();
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski 	virtual void	StateChanged( sal_uInt16 nSID, SfxItemState eState,
269*b1cdbd2cSJim Jagielski 								  const SfxPoolItem* pState );
270*b1cdbd2cSJim Jagielski 	virtual SfxPopupWindow* Clone() const;
271*b1cdbd2cSJim Jagielski 	virtual void	DataChanged( const DataChangedEvent& rDCEvt );
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski 	inline sal_Bool		IsHighContrast( void ) const;
274*b1cdbd2cSJim Jagielski };
275*b1cdbd2cSJim Jagielski 
IsHighContrast(void) const276*b1cdbd2cSJim Jagielski inline sal_Bool SvxFrameWindow_Impl::IsHighContrast( void ) const
277*b1cdbd2cSJim Jagielski {
278*b1cdbd2cSJim Jagielski 	return GetSettings().GetStyleSettings().GetHighContrastMode();
279*b1cdbd2cSJim Jagielski }
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski //========================================================================
282*b1cdbd2cSJim Jagielski // class SvxLineWindow_Impl ---------------------------------------------------
283*b1cdbd2cSJim Jagielski //========================================================================
284*b1cdbd2cSJim Jagielski class SvxLineWindow_Impl : public SfxPopupWindow
285*b1cdbd2cSJim Jagielski {
286*b1cdbd2cSJim Jagielski private:
287*b1cdbd2cSJim Jagielski 	ValueSet		    aLineSet;
288*b1cdbd2cSJim Jagielski 	bool				m_bIsWriter;
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski #if _SOLAR__PRIVATE
291*b1cdbd2cSJim Jagielski 	void			MakeLineBitmap( sal_uInt16 nNo, Bitmap& rBmp, const Size& rSize, String& rStr,
292*b1cdbd2cSJim Jagielski 									const ::Color& rLine, const ::Color& rBack );
293*b1cdbd2cSJim Jagielski 	DECL_LINK( SelectHdl, void * );
294*b1cdbd2cSJim Jagielski #endif
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski protected:
297*b1cdbd2cSJim Jagielski 	virtual void    Resize();
298*b1cdbd2cSJim Jagielski 	virtual sal_Bool	Close();
299*b1cdbd2cSJim Jagielski 	virtual Window*	GetPreferredKeyInputWindow();
300*b1cdbd2cSJim Jagielski 	virtual void	GetFocus();
301*b1cdbd2cSJim Jagielski     virtual void    DataChanged( const DataChangedEvent& rDCEvt );
302*b1cdbd2cSJim Jagielski 	void			CreateBitmaps( void );
303*b1cdbd2cSJim Jagielski public:
304*b1cdbd2cSJim Jagielski     SvxLineWindow_Impl( sal_uInt16 nId, const Reference< XFrame >& rFrame, Window* pParentWindow );
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 	void					StartSelection();
307*b1cdbd2cSJim Jagielski 	virtual SfxPopupWindow* Clone() const;
308*b1cdbd2cSJim Jagielski };
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski //########################################################################
311*b1cdbd2cSJim Jagielski // Hilfsklassen:
312*b1cdbd2cSJim Jagielski //========================================================================
313*b1cdbd2cSJim Jagielski // class SfxStyleControllerItem ------------------------------------------
314*b1cdbd2cSJim Jagielski //========================================================================
315*b1cdbd2cSJim Jagielski class SvxStyleToolBoxControl;
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski class SfxStyleControllerItem_Impl : public SfxStatusListener
318*b1cdbd2cSJim Jagielski {
319*b1cdbd2cSJim Jagielski     public:
320*b1cdbd2cSJim Jagielski         SfxStyleControllerItem_Impl( const Reference< XDispatchProvider >& rDispatchProvider,
321*b1cdbd2cSJim Jagielski                                      sal_uInt16 nSlotId,
322*b1cdbd2cSJim Jagielski                                      const rtl::OUString& rCommand,
323*b1cdbd2cSJim Jagielski                                      SvxStyleToolBoxControl& rTbxCtl );
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski     protected:
326*b1cdbd2cSJim Jagielski         virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski     private:
329*b1cdbd2cSJim Jagielski         SvxStyleToolBoxControl& rControl;
330*b1cdbd2cSJim Jagielski };
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski //========================================================================
333*b1cdbd2cSJim Jagielski // class SvxStyleBox_Impl -----------------------------------------------------
334*b1cdbd2cSJim Jagielski //========================================================================
335*b1cdbd2cSJim Jagielski 
SvxStyleBox_Impl(Window * pParent,sal_uInt16 nSlot,const rtl::OUString & rCommand,SfxStyleFamily eFamily,const Reference<XDispatchProvider> & rDispatchProvider,const Reference<XFrame> & _xFrame,const String & rClearFormatKey,const String & rMoreKey,sal_Bool bInSpec)336*b1cdbd2cSJim Jagielski SvxStyleBox_Impl::SvxStyleBox_Impl(
337*b1cdbd2cSJim Jagielski     Window*                                 pParent,
338*b1cdbd2cSJim Jagielski     sal_uInt16                                  nSlot,
339*b1cdbd2cSJim Jagielski     const rtl::OUString&                    rCommand,
340*b1cdbd2cSJim Jagielski     SfxStyleFamily                          eFamily,
341*b1cdbd2cSJim Jagielski     const Reference< XDispatchProvider >&   rDispatchProvider,
342*b1cdbd2cSJim Jagielski     const Reference< XFrame >&              _xFrame,
343*b1cdbd2cSJim Jagielski 	const String&							rClearFormatKey,
344*b1cdbd2cSJim Jagielski 	const String&							rMoreKey,
345*b1cdbd2cSJim Jagielski 	sal_Bool									bInSpec) :
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski 	ComboBox( pParent, SVX_RES( RID_SVXTBX_STYLE ) ),
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski 	nSlotId		( nSlot ),
350*b1cdbd2cSJim Jagielski 	eStyleFamily( eFamily ),
351*b1cdbd2cSJim Jagielski 	bRelease	( sal_True ),
352*b1cdbd2cSJim Jagielski     bVisible(sal_False),
353*b1cdbd2cSJim Jagielski     m_xDispatchProvider( rDispatchProvider ),
354*b1cdbd2cSJim Jagielski     m_xFrame(_xFrame),
355*b1cdbd2cSJim Jagielski 	m_aCommand  ( rCommand ),
356*b1cdbd2cSJim Jagielski 	aClearFormatKey	( rClearFormatKey ),
357*b1cdbd2cSJim Jagielski 	aMoreKey		( rMoreKey ),
358*b1cdbd2cSJim Jagielski 	bInSpecialMode	( bInSpec )
359*b1cdbd2cSJim Jagielski {
360*b1cdbd2cSJim Jagielski     aLogicalSize = PixelToLogic( GetSizePixel(), MAP_APPFONT );
361*b1cdbd2cSJim Jagielski 	EnableAutocomplete( sal_True );
362*b1cdbd2cSJim Jagielski }
363*b1cdbd2cSJim Jagielski 
~SvxStyleBox_Impl()364*b1cdbd2cSJim Jagielski SvxStyleBox_Impl::~SvxStyleBox_Impl()
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski }
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
369*b1cdbd2cSJim Jagielski 
ReleaseFocus()370*b1cdbd2cSJim Jagielski void SvxStyleBox_Impl::ReleaseFocus()
371*b1cdbd2cSJim Jagielski {
372*b1cdbd2cSJim Jagielski 	if ( !bRelease )
373*b1cdbd2cSJim Jagielski 	{
374*b1cdbd2cSJim Jagielski 		bRelease = sal_True;
375*b1cdbd2cSJim Jagielski 		return;
376*b1cdbd2cSJim Jagielski 	}
377*b1cdbd2cSJim Jagielski     if ( m_xFrame.is() && m_xFrame->getContainerWindow().is() )
378*b1cdbd2cSJim Jagielski         m_xFrame->getContainerWindow()->setFocus();
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
382*b1cdbd2cSJim Jagielski 
Select()383*b1cdbd2cSJim Jagielski void SvxStyleBox_Impl::Select()
384*b1cdbd2cSJim Jagielski {
385*b1cdbd2cSJim Jagielski     // Tell base class about selection so that AT get informed about it.
386*b1cdbd2cSJim Jagielski     ComboBox::Select();
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 	if ( !IsTravelSelect() )
389*b1cdbd2cSJim Jagielski 	{
390*b1cdbd2cSJim Jagielski         String aSelEntry( GetText() );
391*b1cdbd2cSJim Jagielski 		bool bDoIt = true, bClear = false;
392*b1cdbd2cSJim Jagielski 		if( bInSpecialMode )
393*b1cdbd2cSJim Jagielski 		{
394*b1cdbd2cSJim Jagielski 			if( aSelEntry == aClearFormatKey && GetSelectEntryPos() == 0 )
395*b1cdbd2cSJim Jagielski 			{
396*b1cdbd2cSJim Jagielski                 aSelEntry = sDefaultStyle;
397*b1cdbd2cSJim Jagielski 				bClear = true;
398*b1cdbd2cSJim Jagielski                 //not only apply default style but also call 'ClearFormatting'
399*b1cdbd2cSJim Jagielski                 Sequence< PropertyValue > aEmptyVals;
400*b1cdbd2cSJim Jagielski                 SfxToolBoxControl::Dispatch( m_xDispatchProvider, String::CreateFromAscii(".uno:ResetAttributes"),
401*b1cdbd2cSJim Jagielski                     aEmptyVals);
402*b1cdbd2cSJim Jagielski 			}
403*b1cdbd2cSJim Jagielski 			else if( aSelEntry == aMoreKey && GetSelectEntryPos() == ( GetEntryCount() - 1 ) )
404*b1cdbd2cSJim Jagielski 			{
405*b1cdbd2cSJim Jagielski 				SfxViewFrame* pViewFrm = SfxViewFrame::Current();
406*b1cdbd2cSJim Jagielski 				DBG_ASSERT( pViewFrm, "SvxStyleBox_Impl::Select(): no viewframe" );
407*b1cdbd2cSJim Jagielski 				pViewFrm->ShowChildWindow( SID_STYLE_DESIGNER );
408*b1cdbd2cSJim Jagielski 				SfxChildWindow* pChildWin = pViewFrm->GetChildWindow( SID_STYLE_DESIGNER );
409*b1cdbd2cSJim Jagielski 				if ( pChildWin && pChildWin->GetWindow() )
410*b1cdbd2cSJim Jagielski                 {
411*b1cdbd2cSJim Jagielski                     static_cast< SfxTemplateDialogWrapper* >( pChildWin )->SetParagraphFamily();
412*b1cdbd2cSJim Jagielski                     static_cast< SfxDockingWindow* >( pChildWin->GetWindow() )->AutoShow( sal_True );
413*b1cdbd2cSJim Jagielski                     Application::PostUserEvent(
414*b1cdbd2cSJim Jagielski                         STATIC_LINK( 0, SvxStyleBox_Impl, FocusHdl_Impl ), pChildWin->GetWindow() );
415*b1cdbd2cSJim Jagielski                 }
416*b1cdbd2cSJim Jagielski 				bDoIt = false;
417*b1cdbd2cSJim Jagielski 			}
418*b1cdbd2cSJim Jagielski 		}
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski         // #i36723# after ReleaseFocus() the new entry is included into the List
421*b1cdbd2cSJim Jagielski         sal_Bool bCreateNew = GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND;
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski         /*  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
424*b1cdbd2cSJim Jagielski             This instance may be deleted in the meantime (i.e. when a dialog is opened
425*b1cdbd2cSJim Jagielski             while in Dispatch()), accessing members will crash in this case. */
426*b1cdbd2cSJim Jagielski         ReleaseFocus();
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski         if( bDoIt )
429*b1cdbd2cSJim Jagielski 		{
430*b1cdbd2cSJim Jagielski             if ( bClear )
431*b1cdbd2cSJim Jagielski                 SetText( aSelEntry );
432*b1cdbd2cSJim Jagielski             SaveValue();
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski             Sequence< PropertyValue > aArgs( 2 );
435*b1cdbd2cSJim Jagielski 	        aArgs[0].Value  = makeAny( OUString( aSelEntry ) );
436*b1cdbd2cSJim Jagielski 			aArgs[1].Name   = OUString::createFromAscii( "Family" );
437*b1cdbd2cSJim Jagielski 			aArgs[1].Value  = makeAny( sal_Int16( eStyleFamily ));
438*b1cdbd2cSJim Jagielski 			if( bCreateNew )
439*b1cdbd2cSJim Jagielski             {
440*b1cdbd2cSJim Jagielski                 aArgs[0].Name   = OUString::createFromAscii( "Param" );
441*b1cdbd2cSJim Jagielski                 SfxToolBoxControl::Dispatch( m_xDispatchProvider, String::CreateFromAscii(".uno:StyleNewByExample"), aArgs);
442*b1cdbd2cSJim Jagielski             }
443*b1cdbd2cSJim Jagielski             else
444*b1cdbd2cSJim Jagielski             {
445*b1cdbd2cSJim Jagielski                 aArgs[0].Name   = OUString::createFromAscii( "Template" );
446*b1cdbd2cSJim Jagielski 			    SfxToolBoxControl::Dispatch( m_xDispatchProvider, m_aCommand, aArgs );
447*b1cdbd2cSJim Jagielski             }
448*b1cdbd2cSJim Jagielski         }
449*b1cdbd2cSJim Jagielski 	}
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
452*b1cdbd2cSJim Jagielski 
SetFamily(SfxStyleFamily eNewFamily)453*b1cdbd2cSJim Jagielski void SvxStyleBox_Impl::SetFamily( SfxStyleFamily eNewFamily )
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski 	eStyleFamily = eNewFamily;
456*b1cdbd2cSJim Jagielski }
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
459*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)460*b1cdbd2cSJim Jagielski long SvxStyleBox_Impl::PreNotify( NotifyEvent& rNEvt )
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = rNEvt.GetType();
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 	if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
465*b1cdbd2cSJim Jagielski 		nCurSel = GetSelectEntryPos();
466*b1cdbd2cSJim Jagielski     else if ( EVENT_LOSEFOCUS == nType )
467*b1cdbd2cSJim Jagielski 	{
468*b1cdbd2cSJim Jagielski 		// don't handle before our Select() is called
469*b1cdbd2cSJim Jagielski 		if ( !HasFocus() && !HasChildPathFocus() )
470*b1cdbd2cSJim Jagielski 			SetText( GetSavedValue() );
471*b1cdbd2cSJim Jagielski 	}
472*b1cdbd2cSJim Jagielski 	return ComboBox::PreNotify( rNEvt );
473*b1cdbd2cSJim Jagielski }
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
476*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)477*b1cdbd2cSJim Jagielski long SvxStyleBox_Impl::Notify( NotifyEvent& rNEvt )
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski 	long nHandled = 0;
480*b1cdbd2cSJim Jagielski 
481*b1cdbd2cSJim Jagielski 	if ( rNEvt.GetType() == EVENT_KEYINPUT )
482*b1cdbd2cSJim Jagielski 	{
483*b1cdbd2cSJim Jagielski 		sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski 		switch ( nCode )
486*b1cdbd2cSJim Jagielski 		{
487*b1cdbd2cSJim Jagielski 			case KEY_RETURN:
488*b1cdbd2cSJim Jagielski 			case KEY_TAB:
489*b1cdbd2cSJim Jagielski 			{
490*b1cdbd2cSJim Jagielski 				if ( KEY_TAB == nCode )
491*b1cdbd2cSJim Jagielski 					bRelease = sal_False;
492*b1cdbd2cSJim Jagielski 				else
493*b1cdbd2cSJim Jagielski 					nHandled = 1;
494*b1cdbd2cSJim Jagielski 				Select();
495*b1cdbd2cSJim Jagielski 				break;
496*b1cdbd2cSJim Jagielski 			}
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 			case KEY_ESCAPE:
499*b1cdbd2cSJim Jagielski 				SelectEntryPos( nCurSel );
500*b1cdbd2cSJim Jagielski 				ReleaseFocus();
501*b1cdbd2cSJim Jagielski 				nHandled = 1;
502*b1cdbd2cSJim Jagielski 				break;
503*b1cdbd2cSJim Jagielski 		}
504*b1cdbd2cSJim Jagielski 	}
505*b1cdbd2cSJim Jagielski 	return nHandled ? nHandled : ComboBox::Notify( rNEvt );
506*b1cdbd2cSJim Jagielski }
507*b1cdbd2cSJim Jagielski /* -----------------------------08.03.2002 13:03------------------------------
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
DataChanged(const DataChangedEvent & rDCEvt)510*b1cdbd2cSJim Jagielski void SvxStyleBox_Impl::DataChanged( const DataChangedEvent& rDCEvt )
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
513*b1cdbd2cSJim Jagielski          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
514*b1cdbd2cSJim Jagielski     {
515*b1cdbd2cSJim Jagielski         SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
516*b1cdbd2cSJim Jagielski         Size aDropSize( aLogicalSize.Width(), LOGICAL_EDIT_HEIGHT);
517*b1cdbd2cSJim Jagielski         SetDropDownSizePixel(LogicToPixel(aDropSize, MAP_APPFONT));
518*b1cdbd2cSJim Jagielski     }
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski     ComboBox::DataChanged( rDCEvt );
521*b1cdbd2cSJim Jagielski }
522*b1cdbd2cSJim Jagielski 
StateChanged(StateChangedType nStateChange)523*b1cdbd2cSJim Jagielski void SvxStyleBox_Impl::StateChanged( StateChangedType nStateChange )
524*b1cdbd2cSJim Jagielski {
525*b1cdbd2cSJim Jagielski 	ComboBox::StateChanged( nStateChange );
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski 	if ( nStateChange == STATE_CHANGE_VISIBLE )
528*b1cdbd2cSJim Jagielski 	{
529*b1cdbd2cSJim Jagielski 		bVisible = IsReallyVisible();
530*b1cdbd2cSJim Jagielski 		if ( aVisibilityListener.IsSet() )
531*b1cdbd2cSJim Jagielski 			aVisibilityListener.Call( this );
532*b1cdbd2cSJim Jagielski 	}
533*b1cdbd2cSJim Jagielski 	else if ( nStateChange == STATE_CHANGE_INITSHOW )
534*b1cdbd2cSJim Jagielski 	{
535*b1cdbd2cSJim Jagielski 		bVisible = sal_True;
536*b1cdbd2cSJim Jagielski 		if ( aVisibilityListener.IsSet() )
537*b1cdbd2cSJim Jagielski 			aVisibilityListener.Call( this );
538*b1cdbd2cSJim Jagielski 	}
539*b1cdbd2cSJim Jagielski }
540*b1cdbd2cSJim Jagielski 
541*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
542*b1cdbd2cSJim Jagielski 
IMPL_STATIC_LINK(SvxStyleBox_Impl,FocusHdl_Impl,Control *,_pCtrl)543*b1cdbd2cSJim Jagielski IMPL_STATIC_LINK( SvxStyleBox_Impl, FocusHdl_Impl, Control*, _pCtrl )
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski 	(void)pThis;
546*b1cdbd2cSJim Jagielski     if ( _pCtrl )
547*b1cdbd2cSJim Jagielski         _pCtrl->GrabFocus();
548*b1cdbd2cSJim Jagielski     return 0;
549*b1cdbd2cSJim Jagielski }
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
552*b1cdbd2cSJim Jagielski 
GetDocFontList_Impl(const FontList ** ppFontList,SvxFontNameBox_Impl * pBox)553*b1cdbd2cSJim Jagielski sal_Bool GetDocFontList_Impl( const FontList** ppFontList, SvxFontNameBox_Impl* pBox )
554*b1cdbd2cSJim Jagielski {
555*b1cdbd2cSJim Jagielski 	sal_Bool bChanged = sal_False;
556*b1cdbd2cSJim Jagielski 	const SfxObjectShell* pDocSh = SfxObjectShell::Current();
557*b1cdbd2cSJim Jagielski 	SvxFontListItem* pFontListItem = NULL;
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 	if ( pDocSh )
560*b1cdbd2cSJim Jagielski 		pFontListItem =
561*b1cdbd2cSJim Jagielski 			(SvxFontListItem*)pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST );
562*b1cdbd2cSJim Jagielski     else
563*b1cdbd2cSJim Jagielski     {
564*b1cdbd2cSJim Jagielski         ::std::auto_ptr<FontList> aFontList(new FontList( pBox ));
565*b1cdbd2cSJim Jagielski         *ppFontList = aFontList.get();
566*b1cdbd2cSJim Jagielski         pBox->SetOwnFontList(aFontList);
567*b1cdbd2cSJim Jagielski         bChanged = sal_True;
568*b1cdbd2cSJim Jagielski     }
569*b1cdbd2cSJim Jagielski 
570*b1cdbd2cSJim Jagielski 	if ( pFontListItem )
571*b1cdbd2cSJim Jagielski 	{
572*b1cdbd2cSJim Jagielski 		const FontList*	pNewFontList = pFontListItem->GetFontList();
573*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pNewFontList, "Doc-FontList not available!" );
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski 		// keine alte Liste, aber neue Liste
576*b1cdbd2cSJim Jagielski 		if ( !*ppFontList && pNewFontList )
577*b1cdbd2cSJim Jagielski 		{
578*b1cdbd2cSJim Jagielski 			// => "ubernehmen
579*b1cdbd2cSJim Jagielski 			*ppFontList = pNewFontList;
580*b1cdbd2cSJim Jagielski 			bChanged = sal_True;
581*b1cdbd2cSJim Jagielski 		}
582*b1cdbd2cSJim Jagielski 		else
583*b1cdbd2cSJim Jagielski 		{
584*b1cdbd2cSJim Jagielski 			// Vergleich der Fontlisten ist nicht vollkommen
585*b1cdbd2cSJim Jagielski 			// wird die Fontliste am Doc geaendert, kann man hier
586*b1cdbd2cSJim Jagielski 			// nur ueber die Listbox Aenderungen feststellen, weil
587*b1cdbd2cSJim Jagielski 			// ppFontList dabei schon upgedatet wurde
588*b1cdbd2cSJim Jagielski 			bChanged =
589*b1cdbd2cSJim Jagielski 				( ( *ppFontList != pNewFontList ) ||
590*b1cdbd2cSJim Jagielski 				  pBox->GetListCount() != pNewFontList->GetFontNameCount() );
591*b1cdbd2cSJim Jagielski 			HACK(vergleich ist unvollstaendig)
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski 			if ( bChanged )
594*b1cdbd2cSJim Jagielski 				*ppFontList = pNewFontList;
595*b1cdbd2cSJim Jagielski 		}
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski 		if ( pBox )
598*b1cdbd2cSJim Jagielski 			pBox->Enable();
599*b1cdbd2cSJim Jagielski 	}
600*b1cdbd2cSJim Jagielski 	else if ( pBox && ( pDocSh || ( !pDocSh && !ppFontList )))
601*b1cdbd2cSJim Jagielski     {
602*b1cdbd2cSJim Jagielski         // Disable box only when we have a SfxObjectShell and didn't get a font list OR
603*b1cdbd2cSJim Jagielski         // we don't have a SfxObjectShell and no current font list.
604*b1cdbd2cSJim Jagielski         // It's possible that we currently have no SfxObjectShell, but a current font list.
605*b1cdbd2cSJim Jagielski         // See #i58471: When a user set the focus into the font name combo box and opens
606*b1cdbd2cSJim Jagielski         // the help window with F1. After closing the help window, we disable the font name
607*b1cdbd2cSJim Jagielski         // combo box. The SfxObjectShell::Current() method returns in that case zero. But the
608*b1cdbd2cSJim Jagielski         // font list hasn't changed and therefore the combo box shouldn't be disabled!
609*b1cdbd2cSJim Jagielski         pBox->Disable();
610*b1cdbd2cSJim Jagielski     }
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski 	// in die FontBox ggf. auch die neue Liste f"ullen
613*b1cdbd2cSJim Jagielski 	if ( pBox && bChanged )
614*b1cdbd2cSJim Jagielski 	{
615*b1cdbd2cSJim Jagielski 		if ( *ppFontList )
616*b1cdbd2cSJim Jagielski 			pBox->Fill( *ppFontList );
617*b1cdbd2cSJim Jagielski 		else
618*b1cdbd2cSJim Jagielski 			pBox->Clear();
619*b1cdbd2cSJim Jagielski 	}
620*b1cdbd2cSJim Jagielski 	return bChanged;
621*b1cdbd2cSJim Jagielski }
622*b1cdbd2cSJim Jagielski 
623*b1cdbd2cSJim Jagielski //========================================================================
624*b1cdbd2cSJim Jagielski // class SvxFontNameBox_Impl --------------------------------------------------
625*b1cdbd2cSJim Jagielski //========================================================================
626*b1cdbd2cSJim Jagielski 
SvxFontNameBox_Impl(Window * pParent,const Reference<XDispatchProvider> & rDispatchProvider,const Reference<XFrame> & _xFrame,WinBits nStyle)627*b1cdbd2cSJim Jagielski SvxFontNameBox_Impl::SvxFontNameBox_Impl( Window* pParent, const Reference< XDispatchProvider >& rDispatchProvider,const Reference< XFrame >& _xFrame, WinBits nStyle ) :
628*b1cdbd2cSJim Jagielski 
629*b1cdbd2cSJim Jagielski 	FontNameBox	       ( pParent, nStyle | WinBits( WB_DROPDOWN | WB_AUTOHSCROLL ) ),
630*b1cdbd2cSJim Jagielski 	pFontList	       ( NULL ),
631*b1cdbd2cSJim Jagielski 	aLogicalSize       ( 75,160 ),
632*b1cdbd2cSJim Jagielski 	nFtCount	       ( 0 ),
633*b1cdbd2cSJim Jagielski 	bRelease	       ( sal_True ),
634*b1cdbd2cSJim Jagielski     m_xDispatchProvider( rDispatchProvider ),
635*b1cdbd2cSJim Jagielski     m_xFrame (_xFrame)
636*b1cdbd2cSJim Jagielski {
637*b1cdbd2cSJim Jagielski     SetSizePixel(LogicToPixel( aLogicalSize, MAP_APPFONT ));
638*b1cdbd2cSJim Jagielski     EnableControls_Impl();
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
641*b1cdbd2cSJim Jagielski 
FillList()642*b1cdbd2cSJim Jagielski void SvxFontNameBox_Impl::FillList()
643*b1cdbd2cSJim Jagielski {
644*b1cdbd2cSJim Jagielski 	// alte Selektion merken, und am Ende wieder setzen
645*b1cdbd2cSJim Jagielski 	Selection aOldSel = GetSelection();
646*b1cdbd2cSJim Jagielski 	// hat sich Doc-Fontlist geaendert?
647*b1cdbd2cSJim Jagielski 	GetDocFontList_Impl( &pFontList, this );
648*b1cdbd2cSJim Jagielski 	aCurText = GetText();
649*b1cdbd2cSJim Jagielski 	SetSelection( aOldSel );
650*b1cdbd2cSJim Jagielski }
651*b1cdbd2cSJim Jagielski 
652*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
653*b1cdbd2cSJim Jagielski 
Update(const SvxFontItem * pFontItem)654*b1cdbd2cSJim Jagielski void SvxFontNameBox_Impl::Update( const SvxFontItem* pFontItem )
655*b1cdbd2cSJim Jagielski {
656*b1cdbd2cSJim Jagielski 	if ( pFontItem )
657*b1cdbd2cSJim Jagielski 	{
658*b1cdbd2cSJim Jagielski 		aCurFont.SetName		( pFontItem->GetFamilyName() );
659*b1cdbd2cSJim Jagielski 		aCurFont.SetFamily		( pFontItem->GetFamily() );
660*b1cdbd2cSJim Jagielski 		aCurFont.SetStyleName	( pFontItem->GetStyleName() );
661*b1cdbd2cSJim Jagielski 		aCurFont.SetPitch		( pFontItem->GetPitch() );
662*b1cdbd2cSJim Jagielski 		aCurFont.SetCharSet		( pFontItem->GetCharSet() );
663*b1cdbd2cSJim Jagielski 	}
664*b1cdbd2cSJim Jagielski 	String aCurName = aCurFont.GetName();
665*b1cdbd2cSJim Jagielski 	if ( GetText() != aCurName )
666*b1cdbd2cSJim Jagielski 		SetText( aCurName );
667*b1cdbd2cSJim Jagielski }
668*b1cdbd2cSJim Jagielski 
669*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
670*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)671*b1cdbd2cSJim Jagielski long SvxFontNameBox_Impl::PreNotify( NotifyEvent& rNEvt )
672*b1cdbd2cSJim Jagielski {
673*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = rNEvt.GetType();
674*b1cdbd2cSJim Jagielski 
675*b1cdbd2cSJim Jagielski 	if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
676*b1cdbd2cSJim Jagielski     {
677*b1cdbd2cSJim Jagielski         EnableControls_Impl();
678*b1cdbd2cSJim Jagielski 		FillList();
679*b1cdbd2cSJim Jagielski     }
680*b1cdbd2cSJim Jagielski     return FontNameBox::PreNotify( rNEvt );
681*b1cdbd2cSJim Jagielski }
682*b1cdbd2cSJim Jagielski 
683*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
684*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)685*b1cdbd2cSJim Jagielski long SvxFontNameBox_Impl::Notify( NotifyEvent& rNEvt )
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski 	long nHandled = 0;
688*b1cdbd2cSJim Jagielski 
689*b1cdbd2cSJim Jagielski 	if ( rNEvt.GetType() == EVENT_KEYINPUT )
690*b1cdbd2cSJim Jagielski 	{
691*b1cdbd2cSJim Jagielski 		sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski 		switch ( nCode )
694*b1cdbd2cSJim Jagielski 		{
695*b1cdbd2cSJim Jagielski 			case KEY_RETURN:
696*b1cdbd2cSJim Jagielski 			case KEY_TAB:
697*b1cdbd2cSJim Jagielski 			{
698*b1cdbd2cSJim Jagielski 				if ( KEY_TAB == nCode )
699*b1cdbd2cSJim Jagielski 					bRelease = sal_False;
700*b1cdbd2cSJim Jagielski 				else
701*b1cdbd2cSJim Jagielski 					nHandled = 1;
702*b1cdbd2cSJim Jagielski 				Select();
703*b1cdbd2cSJim Jagielski 				break;
704*b1cdbd2cSJim Jagielski 			}
705*b1cdbd2cSJim Jagielski 
706*b1cdbd2cSJim Jagielski 			case KEY_ESCAPE:
707*b1cdbd2cSJim Jagielski 				SetText( aCurText );
708*b1cdbd2cSJim Jagielski 				ReleaseFocus_Impl();
709*b1cdbd2cSJim Jagielski 				break;
710*b1cdbd2cSJim Jagielski 		}
711*b1cdbd2cSJim Jagielski 	}
712*b1cdbd2cSJim Jagielski     else if ( EVENT_LOSEFOCUS == rNEvt.GetType() )
713*b1cdbd2cSJim Jagielski 	{
714*b1cdbd2cSJim Jagielski 		Window* pFocusWin = Application::GetFocusWindow();
715*b1cdbd2cSJim Jagielski 		if ( !HasFocus() && GetSubEdit() != pFocusWin )
716*b1cdbd2cSJim Jagielski 			SetText( GetSavedValue() );
717*b1cdbd2cSJim Jagielski 	}
718*b1cdbd2cSJim Jagielski 
719*b1cdbd2cSJim Jagielski 	return nHandled ? nHandled : FontNameBox::Notify( rNEvt );
720*b1cdbd2cSJim Jagielski }
721*b1cdbd2cSJim Jagielski 
722*b1cdbd2cSJim Jagielski // ---------------------------------------------------------------------------
DataChanged(const DataChangedEvent & rDCEvt)723*b1cdbd2cSJim Jagielski void SvxFontNameBox_Impl::DataChanged( const DataChangedEvent& rDCEvt )
724*b1cdbd2cSJim Jagielski {
725*b1cdbd2cSJim Jagielski 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
726*b1cdbd2cSJim Jagielski          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
727*b1cdbd2cSJim Jagielski     {
728*b1cdbd2cSJim Jagielski         SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
729*b1cdbd2cSJim Jagielski         Size aDropSize( aLogicalSize.Width(), LOGICAL_EDIT_HEIGHT);
730*b1cdbd2cSJim Jagielski         SetDropDownSizePixel(LogicToPixel(aDropSize, MAP_APPFONT));
731*b1cdbd2cSJim Jagielski     }
732*b1cdbd2cSJim Jagielski 
733*b1cdbd2cSJim Jagielski     FontNameBox::DataChanged( rDCEvt );
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski 
736*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
737*b1cdbd2cSJim Jagielski 
ReleaseFocus_Impl()738*b1cdbd2cSJim Jagielski void SvxFontNameBox_Impl::ReleaseFocus_Impl()
739*b1cdbd2cSJim Jagielski {
740*b1cdbd2cSJim Jagielski 	if ( !bRelease )
741*b1cdbd2cSJim Jagielski 	{
742*b1cdbd2cSJim Jagielski 		bRelease = sal_True;
743*b1cdbd2cSJim Jagielski 		return;
744*b1cdbd2cSJim Jagielski 	}
745*b1cdbd2cSJim Jagielski     if ( m_xFrame.is() && m_xFrame->getContainerWindow().is() )
746*b1cdbd2cSJim Jagielski         m_xFrame->getContainerWindow()->setFocus();
747*b1cdbd2cSJim Jagielski }
748*b1cdbd2cSJim Jagielski 
749*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
750*b1cdbd2cSJim Jagielski 
EnableControls_Impl()751*b1cdbd2cSJim Jagielski void SvxFontNameBox_Impl::EnableControls_Impl()
752*b1cdbd2cSJim Jagielski {
753*b1cdbd2cSJim Jagielski 	SvtFontOptions aFontOpt;
754*b1cdbd2cSJim Jagielski 	sal_Bool bEnable = aFontOpt.IsFontHistoryEnabled();
755*b1cdbd2cSJim Jagielski 	sal_uInt16 nEntries = bEnable ? MAX_MRU_FONTNAME_ENTRIES : 0;
756*b1cdbd2cSJim Jagielski 	if ( GetMaxMRUCount() != nEntries )
757*b1cdbd2cSJim Jagielski 	{
758*b1cdbd2cSJim Jagielski 		// refill in the next GetFocus-Handler
759*b1cdbd2cSJim Jagielski 		pFontList = NULL;
760*b1cdbd2cSJim Jagielski 		Clear();
761*b1cdbd2cSJim Jagielski 		SetMaxMRUCount( nEntries );
762*b1cdbd2cSJim Jagielski 	}
763*b1cdbd2cSJim Jagielski 
764*b1cdbd2cSJim Jagielski 	bEnable = aFontOpt.IsFontWYSIWYGEnabled();
765*b1cdbd2cSJim Jagielski 	EnableWYSIWYG( bEnable );
766*b1cdbd2cSJim Jagielski 	EnableSymbols( bEnable );
767*b1cdbd2cSJim Jagielski }
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
770*b1cdbd2cSJim Jagielski 
Select()771*b1cdbd2cSJim Jagielski void SvxFontNameBox_Impl::Select()
772*b1cdbd2cSJim Jagielski {
773*b1cdbd2cSJim Jagielski 	FontNameBox::Select();
774*b1cdbd2cSJim Jagielski 
775*b1cdbd2cSJim Jagielski 	if ( !IsTravelSelect() )
776*b1cdbd2cSJim Jagielski 	{
777*b1cdbd2cSJim Jagielski 		if ( pFontList )
778*b1cdbd2cSJim Jagielski 		{
779*b1cdbd2cSJim Jagielski 			FontInfo aInfo( pFontList->Get( GetText(),
780*b1cdbd2cSJim Jagielski 											aCurFont.GetWeight(),
781*b1cdbd2cSJim Jagielski 											aCurFont.GetItalic() ) );
782*b1cdbd2cSJim Jagielski 			aCurFont = aInfo;
783*b1cdbd2cSJim Jagielski 
784*b1cdbd2cSJim Jagielski 			SvxFontItem aFontItem( aInfo.GetFamily(),
785*b1cdbd2cSJim Jagielski 								   aInfo.GetName(),
786*b1cdbd2cSJim Jagielski 								   aInfo.GetStyleName(),
787*b1cdbd2cSJim Jagielski 								   aInfo.GetPitch(),
788*b1cdbd2cSJim Jagielski 								   aInfo.GetCharSet(),
789*b1cdbd2cSJim Jagielski 								   SID_ATTR_CHAR_FONT );
790*b1cdbd2cSJim Jagielski 
791*b1cdbd2cSJim Jagielski             Any a;
792*b1cdbd2cSJim Jagielski             Sequence< PropertyValue > aArgs( 1 );
793*b1cdbd2cSJim Jagielski             aArgs[0].Name   = OUString( RTL_CONSTASCII_USTRINGPARAM( "CharFontName" ));
794*b1cdbd2cSJim Jagielski             aFontItem.QueryValue( a );
795*b1cdbd2cSJim Jagielski             aArgs[0].Value  = a;
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski             //  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
798*b1cdbd2cSJim Jagielski             //  This instance may be deleted in the meantime (i.e. when a dialog is opened
799*b1cdbd2cSJim Jagielski             //  while in Dispatch()), accessing members will crash in this case.
800*b1cdbd2cSJim Jagielski             ReleaseFocus_Impl();
801*b1cdbd2cSJim Jagielski 
802*b1cdbd2cSJim Jagielski             SfxToolBoxControl::Dispatch( m_xDispatchProvider,
803*b1cdbd2cSJim Jagielski                                          OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:CharFontName" )),
804*b1cdbd2cSJim Jagielski                                          aArgs );
805*b1cdbd2cSJim Jagielski 		}
806*b1cdbd2cSJim Jagielski         else
807*b1cdbd2cSJim Jagielski             ReleaseFocus_Impl();
808*b1cdbd2cSJim Jagielski 	}
809*b1cdbd2cSJim Jagielski }
810*b1cdbd2cSJim Jagielski 
811*b1cdbd2cSJim Jagielski //========================================================================
812*b1cdbd2cSJim Jagielski // class SvxColorWindow_Impl --------------------------------------------------
813*b1cdbd2cSJim Jagielski //========================================================================
814*b1cdbd2cSJim Jagielski #ifndef WB_NO_DIRECTSELECT
815*b1cdbd2cSJim Jagielski #define WB_NO_DIRECTSELECT      ((WinBits)0x04000000)
816*b1cdbd2cSJim Jagielski #endif
817*b1cdbd2cSJim Jagielski 
SvxColorWindow_Impl(const OUString & rCommand,sal_uInt16 nSlotId,const Reference<XFrame> & rFrame,const String & rWndTitle,Window * pParentWindow)818*b1cdbd2cSJim Jagielski SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString&            rCommand,
819*b1cdbd2cSJim Jagielski                                           sal_uInt16                     nSlotId,
820*b1cdbd2cSJim Jagielski                                           const Reference< XFrame >& rFrame,
821*b1cdbd2cSJim Jagielski 								          const String&              rWndTitle,
822*b1cdbd2cSJim Jagielski                                           Window*                    pParentWindow ) :
823*b1cdbd2cSJim Jagielski 
824*b1cdbd2cSJim Jagielski     SfxPopupWindow( nSlotId, rFrame, pParentWindow, WinBits( WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK|WB_DIALOGCONTROL ) ),
825*b1cdbd2cSJim Jagielski 
826*b1cdbd2cSJim Jagielski 	theSlotId( nSlotId ),
827*b1cdbd2cSJim Jagielski     aColorSet( this, WinBits( WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ),
828*b1cdbd2cSJim Jagielski     maCommand( rCommand )
829*b1cdbd2cSJim Jagielski 
830*b1cdbd2cSJim Jagielski {
831*b1cdbd2cSJim Jagielski 	SfxObjectShell* pDocSh = SfxObjectShell::Current();
832*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pItem = NULL;
833*b1cdbd2cSJim Jagielski 	XColorListSharedPtr aColorTable;
834*b1cdbd2cSJim Jagielski 
835*b1cdbd2cSJim Jagielski 	if ( pDocSh )
836*b1cdbd2cSJim Jagielski 		if ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) )
837*b1cdbd2cSJim Jagielski 			aColorTable = static_cast< const SvxColorTableItem* >(pItem)->GetColorTable();
838*b1cdbd2cSJim Jagielski 
839*b1cdbd2cSJim Jagielski 	if ( !aColorTable )
840*b1cdbd2cSJim Jagielski 	{
841*b1cdbd2cSJim Jagielski 		aColorTable = XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath());
842*b1cdbd2cSJim Jagielski 	}
843*b1cdbd2cSJim Jagielski 
844*b1cdbd2cSJim Jagielski 	if ( SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId || SID_BACKGROUND_COLOR == theSlotId )
845*b1cdbd2cSJim Jagielski 	{
846*b1cdbd2cSJim Jagielski 		aColorSet.SetStyle( aColorSet.GetStyle() | WB_NONEFIELD );
847*b1cdbd2cSJim Jagielski 		aColorSet.SetText( SVX_RESSTR( RID_SVXSTR_TRANSPARENT ) );
848*b1cdbd2cSJim Jagielski 		aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_BACKGROUND ) );
849*b1cdbd2cSJim Jagielski 	}
850*b1cdbd2cSJim Jagielski     else if ( SID_ATTR_CHAR_COLOR == theSlotId || SID_ATTR_CHAR_COLOR2 == theSlotId || SID_EXTRUSION_3D_COLOR == theSlotId )
851*b1cdbd2cSJim Jagielski 	{
852*b1cdbd2cSJim Jagielski         SfxPoolItem* pDummy;
853*b1cdbd2cSJim Jagielski 
854*b1cdbd2cSJim Jagielski 		Reference< XDispatchProvider > aDisp( GetFrame()->getController(), UNO_QUERY );
855*b1cdbd2cSJim Jagielski         SfxQueryStatus aQueryStatus( aDisp,
856*b1cdbd2cSJim Jagielski                                      SID_ATTR_AUTO_COLOR_INVALID,
857*b1cdbd2cSJim Jagielski                                      rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:AutoColorInvalid" )));
858*b1cdbd2cSJim Jagielski         SfxItemState eState = aQueryStatus.QueryState( pDummy );
859*b1cdbd2cSJim Jagielski         if( (SFX_ITEM_DEFAULT > eState) || ( SID_EXTRUSION_3D_COLOR == theSlotId ) )
860*b1cdbd2cSJim Jagielski         {
861*b1cdbd2cSJim Jagielski             aColorSet.SetStyle( aColorSet.GetStyle() | WB_NONEFIELD );
862*b1cdbd2cSJim Jagielski             aColorSet.SetText( SVX_RESSTR( RID_SVXSTR_AUTOMATIC ) );
863*b1cdbd2cSJim Jagielski 			aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_TEXTCOLOR ) );
864*b1cdbd2cSJim Jagielski         }
865*b1cdbd2cSJim Jagielski 	}
866*b1cdbd2cSJim Jagielski 	else
867*b1cdbd2cSJim Jagielski 	{
868*b1cdbd2cSJim Jagielski 		aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_FRAME_COLOR ) );
869*b1cdbd2cSJim Jagielski 	}
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski 	if ( aColorTable )
872*b1cdbd2cSJim Jagielski 	{
873*b1cdbd2cSJim Jagielski 		const long nColorCount(aColorTable->Count());
874*b1cdbd2cSJim Jagielski         const Size aNewSize(aColorSet.layoutAllVisible(nColorCount));
875*b1cdbd2cSJim Jagielski         aColorSet.SetOutputSizePixel(aNewSize);
876*b1cdbd2cSJim Jagielski         static sal_Int32 nAdd = 4;
877*b1cdbd2cSJim Jagielski 
878*b1cdbd2cSJim Jagielski         SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd));
879*b1cdbd2cSJim Jagielski         aColorSet.Clear();
880*b1cdbd2cSJim Jagielski         aColorSet.addEntriesForXColorList(aColorTable);
881*b1cdbd2cSJim Jagielski 	}
882*b1cdbd2cSJim Jagielski 
883*b1cdbd2cSJim Jagielski     aColorSet.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) );
884*b1cdbd2cSJim Jagielski 	SetHelpId( HID_POPUP_COLOR );
885*b1cdbd2cSJim Jagielski 	aColorSet.SetHelpId( HID_POPUP_COLOR_CTRL );
886*b1cdbd2cSJim Jagielski 	SetText( rWndTitle );
887*b1cdbd2cSJim Jagielski 	aColorSet.Show();
888*b1cdbd2cSJim Jagielski     AddStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ColorTableState" )));
889*b1cdbd2cSJim Jagielski }
890*b1cdbd2cSJim Jagielski 
~SvxColorWindow_Impl()891*b1cdbd2cSJim Jagielski SvxColorWindow_Impl::~SvxColorWindow_Impl()
892*b1cdbd2cSJim Jagielski {
893*b1cdbd2cSJim Jagielski }
894*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKEvt)895*b1cdbd2cSJim Jagielski void SvxColorWindow_Impl::KeyInput( const KeyEvent& rKEvt )
896*b1cdbd2cSJim Jagielski {
897*b1cdbd2cSJim Jagielski     aColorSet.KeyInput(rKEvt);
898*b1cdbd2cSJim Jagielski }
899*b1cdbd2cSJim Jagielski 
Clone() const900*b1cdbd2cSJim Jagielski SfxPopupWindow* SvxColorWindow_Impl::Clone() const
901*b1cdbd2cSJim Jagielski {
902*b1cdbd2cSJim Jagielski     return new SvxColorWindow_Impl( maCommand, theSlotId, GetFrame(), GetText(), GetParent() );
903*b1cdbd2cSJim Jagielski }
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
906*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxColorWindow_Impl,SelectHdl,void *,EMPTYARG)907*b1cdbd2cSJim Jagielski IMPL_LINK( SvxColorWindow_Impl, SelectHdl, void *, EMPTYARG )
908*b1cdbd2cSJim Jagielski {
909*b1cdbd2cSJim Jagielski 	sal_uInt16 nItemId = aColorSet.GetSelectItemId();
910*b1cdbd2cSJim Jagielski     SvxColorItem aColorItem( aColorSet.GetItemColor( nItemId ), theSlotId );
911*b1cdbd2cSJim Jagielski 
912*b1cdbd2cSJim Jagielski     /*  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() calls.
913*b1cdbd2cSJim Jagielski         This instance may be deleted in the meantime (i.e. when a dialog is opened
914*b1cdbd2cSJim Jagielski         while in Dispatch()), accessing members will crash in this case. */
915*b1cdbd2cSJim Jagielski     aColorSet.SetNoSelection();
916*b1cdbd2cSJim Jagielski 
917*b1cdbd2cSJim Jagielski 	if ( IsInPopupMode() )
918*b1cdbd2cSJim Jagielski 		EndPopupMode();
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 	if ( !nItemId && ( SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId  || SID_BACKGROUND_COLOR == theSlotId ) )
921*b1cdbd2cSJim Jagielski     {
922*b1cdbd2cSJim Jagielski 		Sequence< PropertyValue > aArgs;
923*b1cdbd2cSJim Jagielski         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
924*b1cdbd2cSJim Jagielski                                      maCommand,
925*b1cdbd2cSJim Jagielski                                      aArgs );
926*b1cdbd2cSJim Jagielski     }
927*b1cdbd2cSJim Jagielski     else if ( !nItemId && (SID_ATTR_CHAR_COLOR == theSlotId || SID_ATTR_CHAR_COLOR2  == theSlotId || SID_EXTRUSION_3D_COLOR == theSlotId) )
928*b1cdbd2cSJim Jagielski     {
929*b1cdbd2cSJim Jagielski         SvxColorItem _aColorItem( COL_AUTO, theSlotId );
930*b1cdbd2cSJim Jagielski         INetURLObject aObj( maCommand );
931*b1cdbd2cSJim Jagielski 
932*b1cdbd2cSJim Jagielski         Any a;
933*b1cdbd2cSJim Jagielski         Sequence< PropertyValue > aArgs( 1 );
934*b1cdbd2cSJim Jagielski         aArgs[0].Name = aObj.GetURLPath();
935*b1cdbd2cSJim Jagielski         _aColorItem.QueryValue( a );
936*b1cdbd2cSJim Jagielski         aArgs[0].Value = a;
937*b1cdbd2cSJim Jagielski         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
938*b1cdbd2cSJim Jagielski                                      maCommand,
939*b1cdbd2cSJim Jagielski                                      aArgs );
940*b1cdbd2cSJim Jagielski     }
941*b1cdbd2cSJim Jagielski     else
942*b1cdbd2cSJim Jagielski 	{
943*b1cdbd2cSJim Jagielski         INetURLObject aObj( maCommand );
944*b1cdbd2cSJim Jagielski 
945*b1cdbd2cSJim Jagielski         Any a;
946*b1cdbd2cSJim Jagielski         Sequence< PropertyValue > aArgs( 1 );
947*b1cdbd2cSJim Jagielski         aArgs[0].Name = aObj.GetURLPath();
948*b1cdbd2cSJim Jagielski         aColorItem.QueryValue( a );
949*b1cdbd2cSJim Jagielski         aArgs[0].Value = a;
950*b1cdbd2cSJim Jagielski         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
951*b1cdbd2cSJim Jagielski                                      maCommand,
952*b1cdbd2cSJim Jagielski                                      aArgs );
953*b1cdbd2cSJim Jagielski 	}
954*b1cdbd2cSJim Jagielski 
955*b1cdbd2cSJim Jagielski 	return 0;
956*b1cdbd2cSJim Jagielski }
957*b1cdbd2cSJim Jagielski 
958*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
959*b1cdbd2cSJim Jagielski 
Resize()960*b1cdbd2cSJim Jagielski void SvxColorWindow_Impl::Resize()
961*b1cdbd2cSJim Jagielski {
962*b1cdbd2cSJim Jagielski 	lcl_ResizeValueSet( *this, aColorSet);
963*b1cdbd2cSJim Jagielski }
964*b1cdbd2cSJim Jagielski 
965*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
966*b1cdbd2cSJim Jagielski 
StartSelection()967*b1cdbd2cSJim Jagielski void SvxColorWindow_Impl::StartSelection()
968*b1cdbd2cSJim Jagielski {
969*b1cdbd2cSJim Jagielski 	aColorSet.StartSelection();
970*b1cdbd2cSJim Jagielski }
971*b1cdbd2cSJim Jagielski 
972*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
973*b1cdbd2cSJim Jagielski 
Close()974*b1cdbd2cSJim Jagielski sal_Bool SvxColorWindow_Impl::Close()
975*b1cdbd2cSJim Jagielski {
976*b1cdbd2cSJim Jagielski 	return SfxPopupWindow::Close();
977*b1cdbd2cSJim Jagielski }
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
980*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)981*b1cdbd2cSJim Jagielski void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
982*b1cdbd2cSJim Jagielski {
983*b1cdbd2cSJim Jagielski     if (( SFX_ITEM_DISABLED != eState ) && pState )
984*b1cdbd2cSJim Jagielski     {
985*b1cdbd2cSJim Jagielski         if (( nSID == SID_COLOR_TABLE ) && ( pState->ISA( SvxColorTableItem )))
986*b1cdbd2cSJim Jagielski         {
987*b1cdbd2cSJim Jagielski 	        XColorListSharedPtr aColorTable;
988*b1cdbd2cSJim Jagielski 
989*b1cdbd2cSJim Jagielski             if(pState)
990*b1cdbd2cSJim Jagielski             {
991*b1cdbd2cSJim Jagielski                 aColorTable = static_cast< const SvxColorTableItem* >(pState)->GetColorTable();
992*b1cdbd2cSJim Jagielski             }
993*b1cdbd2cSJim Jagielski 
994*b1cdbd2cSJim Jagielski 			if ( aColorTable )
995*b1cdbd2cSJim Jagielski 			{
996*b1cdbd2cSJim Jagielski 				// Die Liste der Farben (ColorTable) hat sich ge"andert:
997*b1cdbd2cSJim Jagielski 		        const long nColorCount(aColorTable->Count());
998*b1cdbd2cSJim Jagielski                 const Size aNewSize(aColorSet.layoutAllVisible(nColorCount));
999*b1cdbd2cSJim Jagielski                 aColorSet.SetOutputSizePixel(aNewSize);
1000*b1cdbd2cSJim Jagielski                 static sal_Int32 nAdd = 4;
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski                 SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd));
1003*b1cdbd2cSJim Jagielski                 aColorSet.Clear();
1004*b1cdbd2cSJim Jagielski                 aColorSet.addEntriesForXColorList(aColorTable);
1005*b1cdbd2cSJim Jagielski 			}
1006*b1cdbd2cSJim Jagielski 		}
1007*b1cdbd2cSJim Jagielski 	}
1008*b1cdbd2cSJim Jagielski }
1009*b1cdbd2cSJim Jagielski 
1010*b1cdbd2cSJim Jagielski //========================================================================
1011*b1cdbd2cSJim Jagielski // class SvxFrameWindow_Impl --------------------------------------------------
1012*b1cdbd2cSJim Jagielski //========================================================================
1013*b1cdbd2cSJim Jagielski 
SvxFrameWindow_Impl(sal_uInt16 nId,const Reference<XFrame> & rFrame,Window * pParentWindow)1014*b1cdbd2cSJim Jagielski SvxFrameWindow_Impl::SvxFrameWindow_Impl( sal_uInt16 nId, const Reference< XFrame >& rFrame, Window* pParentWindow ) :
1015*b1cdbd2cSJim Jagielski 
1016*b1cdbd2cSJim Jagielski 	SfxPopupWindow( nId, rFrame, pParentWindow, WinBits( WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK | WB_DIALOGCONTROL ) ),
1017*b1cdbd2cSJim Jagielski     aFrameSet   ( this, WinBits( WB_ITEMBORDER | WB_DOUBLEBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT ) ),
1018*b1cdbd2cSJim Jagielski     bParagraphMode(sal_False)
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski {
1021*b1cdbd2cSJim Jagielski     BindListener();
1022*b1cdbd2cSJim Jagielski     String sCommand(String::CreateFromAscii( ".uno:BorderReducedMode" ));
1023*b1cdbd2cSJim Jagielski     AddStatusListener( sCommand );
1024*b1cdbd2cSJim Jagielski     aImgList = ImageList( SVX_RES( IsHighContrast()? RID_SVXIL_FRAME_HC : RID_SVXIL_FRAME ) );
1025*b1cdbd2cSJim Jagielski 
1026*b1cdbd2cSJim Jagielski 	/*
1027*b1cdbd2cSJim Jagielski 	 *  1       2        3         4
1028*b1cdbd2cSJim Jagielski 	 *  -------------------------------------
1029*b1cdbd2cSJim Jagielski 	 *	NONE    LEFT     RIGHT     LEFTRIGHT
1030*b1cdbd2cSJim Jagielski 	 *	TOP     BOTTOM   TOPBOTTOM OUTER
1031*b1cdbd2cSJim Jagielski 	 *  -------------------------------------
1032*b1cdbd2cSJim Jagielski 	 *	HOR	    HORINNER VERINNER	ALL			<- kann ueber bParagraphMode
1033*b1cdbd2cSJim Jagielski 	 *                                             abgeschaltet werden
1034*b1cdbd2cSJim Jagielski 	 */
1035*b1cdbd2cSJim Jagielski 
1036*b1cdbd2cSJim Jagielski 	sal_uInt16 i = 0;
1037*b1cdbd2cSJim Jagielski 
1038*b1cdbd2cSJim Jagielski 	for ( i=1; i<9; i++ )
1039*b1cdbd2cSJim Jagielski 		aFrameSet.InsertItem( i, aImgList.GetImage(i) );
1040*b1cdbd2cSJim Jagielski 
1041*b1cdbd2cSJim Jagielski     //bParagraphMode should have been set in StateChanged
1042*b1cdbd2cSJim Jagielski     if ( !bParagraphMode )
1043*b1cdbd2cSJim Jagielski 		for ( i = 9; i < 13; i++ )
1044*b1cdbd2cSJim Jagielski 			aFrameSet.InsertItem( i, aImgList.GetImage(i) );
1045*b1cdbd2cSJim Jagielski 
1046*b1cdbd2cSJim Jagielski 	aFrameSet.SetColCount( 4 );
1047*b1cdbd2cSJim Jagielski     aFrameSet.SetSelectHdl( LINK( this, SvxFrameWindow_Impl, SelectHdl ) );
1048*b1cdbd2cSJim Jagielski 
1049*b1cdbd2cSJim Jagielski 	lcl_CalcSizeValueSet( *this, aFrameSet,Size( 20, 20 ));
1050*b1cdbd2cSJim Jagielski 
1051*b1cdbd2cSJim Jagielski 	SetHelpId( HID_POPUP_FRAME );
1052*b1cdbd2cSJim Jagielski 	SetText( SVX_RESSTR(RID_SVXSTR_FRAME) );
1053*b1cdbd2cSJim Jagielski 	aFrameSet.SetAccessibleName( SVX_RESSTR(RID_SVXSTR_FRAME) );
1054*b1cdbd2cSJim Jagielski 	aFrameSet.Show();
1055*b1cdbd2cSJim Jagielski }
1056*b1cdbd2cSJim Jagielski /*-- 22.09.2004 12:27:50---------------------------------------------------
1057*b1cdbd2cSJim Jagielski 
1058*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
~SvxFrameWindow_Impl()1059*b1cdbd2cSJim Jagielski SvxFrameWindow_Impl::~SvxFrameWindow_Impl()
1060*b1cdbd2cSJim Jagielski {
1061*b1cdbd2cSJim Jagielski     UnbindListener();
1062*b1cdbd2cSJim Jagielski }
1063*b1cdbd2cSJim Jagielski 
Clone() const1064*b1cdbd2cSJim Jagielski SfxPopupWindow* SvxFrameWindow_Impl::Clone() const
1065*b1cdbd2cSJim Jagielski {
1066*b1cdbd2cSJim Jagielski 	//! HACK: wie bekomme ich den Paragraph-Mode ??
1067*b1cdbd2cSJim Jagielski     return new SvxFrameWindow_Impl( GetId(), GetFrame(), GetParent() );
1068*b1cdbd2cSJim Jagielski }
1069*b1cdbd2cSJim Jagielski 
GetPreferredKeyInputWindow()1070*b1cdbd2cSJim Jagielski Window* SvxFrameWindow_Impl::GetPreferredKeyInputWindow()
1071*b1cdbd2cSJim Jagielski {
1072*b1cdbd2cSJim Jagielski 	return &aFrameSet;
1073*b1cdbd2cSJim Jagielski }
1074*b1cdbd2cSJim Jagielski 
GetFocus()1075*b1cdbd2cSJim Jagielski void SvxFrameWindow_Impl::GetFocus()
1076*b1cdbd2cSJim Jagielski {
1077*b1cdbd2cSJim Jagielski 	aFrameSet.GrabFocus();
1078*b1cdbd2cSJim Jagielski }
1079*b1cdbd2cSJim Jagielski 
DataChanged(const DataChangedEvent & rDCEvt)1080*b1cdbd2cSJim Jagielski void SvxFrameWindow_Impl::DataChanged( const DataChangedEvent& rDCEvt )
1081*b1cdbd2cSJim Jagielski {
1082*b1cdbd2cSJim Jagielski 	SfxPopupWindow::DataChanged( rDCEvt );
1083*b1cdbd2cSJim Jagielski 
1084*b1cdbd2cSJim Jagielski 	if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
1085*b1cdbd2cSJim Jagielski 	{
1086*b1cdbd2cSJim Jagielski 		aImgList = ImageList( SVX_RES( IsHighContrast()? RID_SVXIL_FRAME_HC : RID_SVXIL_FRAME ) );
1087*b1cdbd2cSJim Jagielski 
1088*b1cdbd2cSJim Jagielski 		sal_uInt16	nNumOfItems = aFrameSet.GetItemCount();
1089*b1cdbd2cSJim Jagielski 
1090*b1cdbd2cSJim Jagielski 		for( sal_uInt16 i = 1 ; i <= nNumOfItems ; ++i )
1091*b1cdbd2cSJim Jagielski 			aFrameSet.SetItemImage( i, aImgList.GetImage( i ) );
1092*b1cdbd2cSJim Jagielski 	}
1093*b1cdbd2cSJim Jagielski }
1094*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1095*b1cdbd2cSJim Jagielski 
1096*b1cdbd2cSJim Jagielski #define FRM_VALID_LEFT 		0x01
1097*b1cdbd2cSJim Jagielski #define FRM_VALID_RIGHT 	0x02
1098*b1cdbd2cSJim Jagielski #define FRM_VALID_TOP 		0x04
1099*b1cdbd2cSJim Jagielski #define FRM_VALID_BOTTOM 	0x08
1100*b1cdbd2cSJim Jagielski #define FRM_VALID_HINNER 	0x10
1101*b1cdbd2cSJim Jagielski #define FRM_VALID_VINNER 	0x20
1102*b1cdbd2cSJim Jagielski #define FRM_VALID_OUTER		0x0f
1103*b1cdbd2cSJim Jagielski #define FRM_VALID_ALL       0xff
1104*b1cdbd2cSJim Jagielski 
1105*b1cdbd2cSJim Jagielski //
1106*b1cdbd2cSJim Jagielski // Per default bleiben ungesetzte Linien unveraendert
1107*b1cdbd2cSJim Jagielski // Mit Shift werden ungesetzte Linien zurueckgsetzt
1108*b1cdbd2cSJim Jagielski //
IMPL_LINK(SvxFrameWindow_Impl,SelectHdl,void *,EMPTYARG)1109*b1cdbd2cSJim Jagielski IMPL_LINK( SvxFrameWindow_Impl, SelectHdl, void *, EMPTYARG )
1110*b1cdbd2cSJim Jagielski {
1111*b1cdbd2cSJim Jagielski 	::Color				aColBlack( COL_BLACK );
1112*b1cdbd2cSJim Jagielski 	SvxBoxItem			aBorderOuter( SID_ATTR_BORDER_OUTER );
1113*b1cdbd2cSJim Jagielski 	SvxBoxInfoItem		aBorderInner( SID_ATTR_BORDER_INNER );
1114*b1cdbd2cSJim Jagielski 	SvxBorderLine		theDefLine;
1115*b1cdbd2cSJim Jagielski     SvxBorderLine       *pLeft = 0,
1116*b1cdbd2cSJim Jagielski 						*pRight = 0,
1117*b1cdbd2cSJim Jagielski 						*pTop = 0,
1118*b1cdbd2cSJim Jagielski 						*pBottom = 0;
1119*b1cdbd2cSJim Jagielski 	sal_uInt16				nSel = aFrameSet.GetSelectItemId();
1120*b1cdbd2cSJim Jagielski 	sal_uInt16 				nModifier = aFrameSet.GetModifier();
1121*b1cdbd2cSJim Jagielski 	sal_uInt8 				nValidFlags = 0;
1122*b1cdbd2cSJim Jagielski 
1123*b1cdbd2cSJim Jagielski     theDefLine.SetOutWidth( DEF_LINE_WIDTH_0 );
1124*b1cdbd2cSJim Jagielski 	switch ( nSel )
1125*b1cdbd2cSJim Jagielski 	{
1126*b1cdbd2cSJim Jagielski 		case 1: nValidFlags |= FRM_VALID_ALL;
1127*b1cdbd2cSJim Jagielski 		break;	// NONE
1128*b1cdbd2cSJim Jagielski 		case 2: pLeft = &theDefLine;
1129*b1cdbd2cSJim Jagielski 				nValidFlags |= FRM_VALID_LEFT;
1130*b1cdbd2cSJim Jagielski 		break;	// LEFT
1131*b1cdbd2cSJim Jagielski 		case 3: pRight = &theDefLine;
1132*b1cdbd2cSJim Jagielski 				nValidFlags |= FRM_VALID_RIGHT;
1133*b1cdbd2cSJim Jagielski 		break;	// RIGHT
1134*b1cdbd2cSJim Jagielski 		case 4: pLeft = pRight = &theDefLine;
1135*b1cdbd2cSJim Jagielski 				nValidFlags |= 	FRM_VALID_RIGHT|FRM_VALID_LEFT;
1136*b1cdbd2cSJim Jagielski 		break;	// LEFTRIGHT
1137*b1cdbd2cSJim Jagielski 		case 5: pTop = &theDefLine;
1138*b1cdbd2cSJim Jagielski 				nValidFlags |= FRM_VALID_TOP;
1139*b1cdbd2cSJim Jagielski 		break;	// TOP
1140*b1cdbd2cSJim Jagielski 		case 6: pBottom = &theDefLine;
1141*b1cdbd2cSJim Jagielski 				nValidFlags |= FRM_VALID_BOTTOM;
1142*b1cdbd2cSJim Jagielski 		break;	// BOTTOM
1143*b1cdbd2cSJim Jagielski 		case 7: pTop =  pBottom = &theDefLine;
1144*b1cdbd2cSJim Jagielski 				nValidFlags |= FRM_VALID_BOTTOM|FRM_VALID_TOP;
1145*b1cdbd2cSJim Jagielski 		break;	// TOPBOTTOM
1146*b1cdbd2cSJim Jagielski 		case 8: pLeft = pRight = pTop = pBottom = &theDefLine;
1147*b1cdbd2cSJim Jagielski 				nValidFlags |= FRM_VALID_OUTER;
1148*b1cdbd2cSJim Jagielski 		break;	// OUTER
1149*b1cdbd2cSJim Jagielski 
1150*b1cdbd2cSJim Jagielski 		// Tabelle innen:
1151*b1cdbd2cSJim Jagielski 		case 9: // HOR
1152*b1cdbd2cSJim Jagielski 			pTop = pBottom = &theDefLine;
1153*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_HORI );
1154*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( NULL, BOXINFO_LINE_VERT );
1155*b1cdbd2cSJim Jagielski 			nValidFlags |= FRM_VALID_HINNER|FRM_VALID_TOP|FRM_VALID_BOTTOM;
1156*b1cdbd2cSJim Jagielski 			break;
1157*b1cdbd2cSJim Jagielski 
1158*b1cdbd2cSJim Jagielski 		case 10: // HORINNER
1159*b1cdbd2cSJim Jagielski 			pLeft = pRight = pTop = pBottom = &theDefLine;
1160*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_HORI );
1161*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( NULL, BOXINFO_LINE_VERT );
1162*b1cdbd2cSJim Jagielski 			nValidFlags |= FRM_VALID_RIGHT|FRM_VALID_LEFT|FRM_VALID_HINNER|FRM_VALID_TOP|FRM_VALID_BOTTOM;
1163*b1cdbd2cSJim Jagielski 			break;
1164*b1cdbd2cSJim Jagielski 
1165*b1cdbd2cSJim Jagielski 		case 11: // VERINNER
1166*b1cdbd2cSJim Jagielski 			pLeft = pRight = pTop = pBottom = &theDefLine;
1167*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( NULL, BOXINFO_LINE_HORI );
1168*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_VERT );
1169*b1cdbd2cSJim Jagielski 			nValidFlags |= FRM_VALID_RIGHT|FRM_VALID_LEFT|FRM_VALID_VINNER|FRM_VALID_TOP|FRM_VALID_BOTTOM;
1170*b1cdbd2cSJim Jagielski 		break;
1171*b1cdbd2cSJim Jagielski 
1172*b1cdbd2cSJim Jagielski 		case 12: // ALL
1173*b1cdbd2cSJim Jagielski 			pLeft = pRight = pTop = pBottom = &theDefLine;
1174*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_HORI );
1175*b1cdbd2cSJim Jagielski 			aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_VERT );
1176*b1cdbd2cSJim Jagielski 			nValidFlags |= FRM_VALID_ALL;
1177*b1cdbd2cSJim Jagielski 			break;
1178*b1cdbd2cSJim Jagielski 
1179*b1cdbd2cSJim Jagielski 		default:
1180*b1cdbd2cSJim Jagielski 		break;
1181*b1cdbd2cSJim Jagielski 	}
1182*b1cdbd2cSJim Jagielski 	aBorderOuter.SetLine( pLeft, BOX_LINE_LEFT );
1183*b1cdbd2cSJim Jagielski 	aBorderOuter.SetLine( pRight, BOX_LINE_RIGHT );
1184*b1cdbd2cSJim Jagielski 	aBorderOuter.SetLine( pTop, BOX_LINE_TOP );
1185*b1cdbd2cSJim Jagielski 	aBorderOuter.SetLine( pBottom, BOX_LINE_BOTTOM );
1186*b1cdbd2cSJim Jagielski 
1187*b1cdbd2cSJim Jagielski 	if(nModifier == KEY_SHIFT)
1188*b1cdbd2cSJim Jagielski 		nValidFlags |= FRM_VALID_ALL;
1189*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_TOP, 		0 != (nValidFlags&FRM_VALID_TOP ));
1190*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_BOTTOM, 	0 != (nValidFlags&FRM_VALID_BOTTOM ));
1191*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_LEFT, 		0 != (nValidFlags&FRM_VALID_LEFT));
1192*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_RIGHT, 	0 != (nValidFlags&FRM_VALID_RIGHT ));
1193*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_HORI, 		0 != (nValidFlags&FRM_VALID_HINNER ));
1194*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_VERT, 		0 != (nValidFlags&FRM_VALID_VINNER));
1195*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_DISTANCE, sal_True );
1196*b1cdbd2cSJim Jagielski 	aBorderInner.SetValid( VALID_DISABLE, sal_False );
1197*b1cdbd2cSJim Jagielski 
1198*b1cdbd2cSJim Jagielski 	if ( IsInPopupMode() )
1199*b1cdbd2cSJim Jagielski 		EndPopupMode();
1200*b1cdbd2cSJim Jagielski 
1201*b1cdbd2cSJim Jagielski     Any a;
1202*b1cdbd2cSJim Jagielski     Sequence< PropertyValue > aArgs( 2 );
1203*b1cdbd2cSJim Jagielski     aArgs[0].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "OuterBorder" ));
1204*b1cdbd2cSJim Jagielski     aBorderOuter.QueryValue( a );
1205*b1cdbd2cSJim Jagielski     aArgs[0].Value = a;
1206*b1cdbd2cSJim Jagielski     aArgs[1].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "InnerBorder" ));
1207*b1cdbd2cSJim Jagielski     aBorderInner.QueryValue( a );
1208*b1cdbd2cSJim Jagielski     aArgs[1].Value = a;
1209*b1cdbd2cSJim Jagielski 
1210*b1cdbd2cSJim Jagielski     /*  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
1211*b1cdbd2cSJim Jagielski         This instance may be deleted in the meantime (i.e. when a dialog is opened
1212*b1cdbd2cSJim Jagielski         while in Dispatch()), accessing members will crash in this case. */
1213*b1cdbd2cSJim Jagielski     aFrameSet.SetNoSelection();
1214*b1cdbd2cSJim Jagielski 
1215*b1cdbd2cSJim Jagielski     SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
1216*b1cdbd2cSJim Jagielski                                  OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:SetBorderStyle" )),
1217*b1cdbd2cSJim Jagielski                                  aArgs );
1218*b1cdbd2cSJim Jagielski 	return 0;
1219*b1cdbd2cSJim Jagielski }
1220*b1cdbd2cSJim Jagielski 
1221*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1222*b1cdbd2cSJim Jagielski 
Resize()1223*b1cdbd2cSJim Jagielski void SvxFrameWindow_Impl::Resize()
1224*b1cdbd2cSJim Jagielski {
1225*b1cdbd2cSJim Jagielski 	lcl_ResizeValueSet( *this, aFrameSet);
1226*b1cdbd2cSJim Jagielski }
1227*b1cdbd2cSJim Jagielski 
1228*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1229*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)1230*b1cdbd2cSJim Jagielski void SvxFrameWindow_Impl::StateChanged(
1231*b1cdbd2cSJim Jagielski 
1232*b1cdbd2cSJim Jagielski 	sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1233*b1cdbd2cSJim Jagielski 
1234*b1cdbd2cSJim Jagielski {
1235*b1cdbd2cSJim Jagielski     if ( pState && nSID == SID_BORDER_REDUCED_MODE)
1236*b1cdbd2cSJim Jagielski 	{
1237*b1cdbd2cSJim Jagielski         const SfxBoolItem* pItem = PTR_CAST( SfxBoolItem, pState );
1238*b1cdbd2cSJim Jagielski 
1239*b1cdbd2cSJim Jagielski 		if ( pItem )
1240*b1cdbd2cSJim Jagielski 		{
1241*b1cdbd2cSJim Jagielski             bParagraphMode = (sal_Bool)pItem->GetValue();
1242*b1cdbd2cSJim Jagielski             //initial calls mustn't insert or remove elements
1243*b1cdbd2cSJim Jagielski             if(aFrameSet.GetItemCount())
1244*b1cdbd2cSJim Jagielski             {
1245*b1cdbd2cSJim Jagielski 			    sal_Bool bTableMode = ( aFrameSet.GetItemCount() == 12 );
1246*b1cdbd2cSJim Jagielski 			    sal_Bool bResize    = sal_False;
1247*b1cdbd2cSJim Jagielski 
1248*b1cdbd2cSJim Jagielski                 if ( bTableMode && bParagraphMode )
1249*b1cdbd2cSJim Jagielski 			    {
1250*b1cdbd2cSJim Jagielski 				    for ( sal_uInt16 i = 9; i < 13; i++ )
1251*b1cdbd2cSJim Jagielski 					    aFrameSet.RemoveItem(i);
1252*b1cdbd2cSJim Jagielski 				    bResize = sal_True;
1253*b1cdbd2cSJim Jagielski 			    }
1254*b1cdbd2cSJim Jagielski                 else if ( !bTableMode && !bParagraphMode )
1255*b1cdbd2cSJim Jagielski 			    {
1256*b1cdbd2cSJim Jagielski 				    for ( sal_uInt16 i = 9; i < 13; i++ )
1257*b1cdbd2cSJim Jagielski 					    aFrameSet.InsertItem( i, aImgList.GetImage(i) );
1258*b1cdbd2cSJim Jagielski 				    bResize = sal_True;
1259*b1cdbd2cSJim Jagielski 			    }
1260*b1cdbd2cSJim Jagielski 
1261*b1cdbd2cSJim Jagielski 			    if ( bResize )
1262*b1cdbd2cSJim Jagielski 			    {
1263*b1cdbd2cSJim Jagielski 				    lcl_CalcSizeValueSet( *this, aFrameSet,Size( 20, 20 ));
1264*b1cdbd2cSJim Jagielski 			    }
1265*b1cdbd2cSJim Jagielski             }
1266*b1cdbd2cSJim Jagielski 		}
1267*b1cdbd2cSJim Jagielski 	}
1268*b1cdbd2cSJim Jagielski 	SfxPopupWindow::StateChanged( nSID, eState, pState );
1269*b1cdbd2cSJim Jagielski }
1270*b1cdbd2cSJim Jagielski 
1271*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1272*b1cdbd2cSJim Jagielski 
StartSelection()1273*b1cdbd2cSJim Jagielski void SvxFrameWindow_Impl::StartSelection()
1274*b1cdbd2cSJim Jagielski {
1275*b1cdbd2cSJim Jagielski 	aFrameSet.StartSelection();
1276*b1cdbd2cSJim Jagielski }
1277*b1cdbd2cSJim Jagielski 
1278*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1279*b1cdbd2cSJim Jagielski 
Close()1280*b1cdbd2cSJim Jagielski sal_Bool SvxFrameWindow_Impl::Close()
1281*b1cdbd2cSJim Jagielski {
1282*b1cdbd2cSJim Jagielski 	return SfxPopupWindow::Close();
1283*b1cdbd2cSJim Jagielski }
1284*b1cdbd2cSJim Jagielski 
1285*b1cdbd2cSJim Jagielski //========================================================================
1286*b1cdbd2cSJim Jagielski // class SvxLineWindow_Impl --------------------------------------------------
1287*b1cdbd2cSJim Jagielski //========================================================================
1288*b1cdbd2cSJim Jagielski 
SvxLineWindow_Impl(sal_uInt16 nId,const Reference<XFrame> & rFrame,Window * pParentWindow)1289*b1cdbd2cSJim Jagielski SvxLineWindow_Impl::SvxLineWindow_Impl( sal_uInt16 nId, const Reference< XFrame >& rFrame, Window* pParentWindow ) :
1290*b1cdbd2cSJim Jagielski 
1291*b1cdbd2cSJim Jagielski 	SfxPopupWindow( nId, rFrame, pParentWindow, WinBits( WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK | WB_DIALOGCONTROL ) ),
1292*b1cdbd2cSJim Jagielski 
1293*b1cdbd2cSJim Jagielski 	aLineSet( this, WinBits( WB_3DLOOK | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_NONEFIELD | WB_NO_DIRECTSELECT ) )
1294*b1cdbd2cSJim Jagielski {
1295*b1cdbd2cSJim Jagielski     try
1296*b1cdbd2cSJim Jagielski     {
1297*b1cdbd2cSJim Jagielski         Reference< lang::XServiceInfo > xServices( rFrame->getController()->getModel(), UNO_QUERY_THROW );
1298*b1cdbd2cSJim Jagielski         m_bIsWriter = xServices->supportsService(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextDocument")));
1299*b1cdbd2cSJim Jagielski 	}
1300*b1cdbd2cSJim Jagielski 	catch(const uno::Exception& )
1301*b1cdbd2cSJim Jagielski 	{
1302*b1cdbd2cSJim Jagielski 	}
1303*b1cdbd2cSJim Jagielski 	Size	aBmpSize( 55, 12 );
1304*b1cdbd2cSJim Jagielski 	CreateBitmaps();
1305*b1cdbd2cSJim Jagielski 
1306*b1cdbd2cSJim Jagielski 	aLineSet.SetColCount( 2 );
1307*b1cdbd2cSJim Jagielski     aLineSet.SetSelectHdl( LINK( this, SvxLineWindow_Impl, SelectHdl ) );
1308*b1cdbd2cSJim Jagielski 	aLineSet.SetText( SVX_RESSTR(RID_SVXSTR_NONE) );
1309*b1cdbd2cSJim Jagielski 
1310*b1cdbd2cSJim Jagielski 	aLineSet.SetAccessibleName( SVX_RESSTR(RID_SVXSTR_FRAME_STYLE) );
1311*b1cdbd2cSJim Jagielski 	lcl_CalcSizeValueSet( *this, aLineSet, aBmpSize );
1312*b1cdbd2cSJim Jagielski 
1313*b1cdbd2cSJim Jagielski 	SetHelpId( HID_POPUP_LINE );
1314*b1cdbd2cSJim Jagielski 	SetText( SVX_RESSTR(RID_SVXSTR_FRAME_STYLE) );
1315*b1cdbd2cSJim Jagielski 	aLineSet.Show();
1316*b1cdbd2cSJim Jagielski }
1317*b1cdbd2cSJim Jagielski 
Clone() const1318*b1cdbd2cSJim Jagielski SfxPopupWindow* SvxLineWindow_Impl::Clone() const
1319*b1cdbd2cSJim Jagielski {
1320*b1cdbd2cSJim Jagielski     return new SvxLineWindow_Impl( GetId(), GetFrame(), GetParent() );
1321*b1cdbd2cSJim Jagielski }
1322*b1cdbd2cSJim Jagielski 
1323*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1324*b1cdbd2cSJim Jagielski 
MakeLineBitmap(sal_uInt16 nNo,Bitmap & rBmp,const Size & rSize,String & rStr,const::Color & rLineCol,const::Color & rBackCol)1325*b1cdbd2cSJim Jagielski void SvxLineWindow_Impl::MakeLineBitmap( sal_uInt16 nNo, Bitmap& rBmp, const Size& rSize, String& rStr,
1326*b1cdbd2cSJim Jagielski 											const ::Color& rLineCol, const ::Color& rBackCol )
1327*b1cdbd2cSJim Jagielski {
1328*b1cdbd2cSJim Jagielski 	VirtualDevice	aVirDev( *this );
1329*b1cdbd2cSJim Jagielski 	Rectangle		aRect( Point(2,0), Size(rSize.Width()-4,0) );
1330*b1cdbd2cSJim Jagielski 
1331*b1cdbd2cSJim Jagielski 	// grau einfaerben und Bitmap sichern:
1332*b1cdbd2cSJim Jagielski 	aVirDev.SetOutputSizePixel( rSize );
1333*b1cdbd2cSJim Jagielski 	aVirDev.SetLineColor();
1334*b1cdbd2cSJim Jagielski 	aVirDev.SetFillColor( rBackCol );
1335*b1cdbd2cSJim Jagielski 	aVirDev.DrawRect( Rectangle( Point(0,0), rSize ) );
1336*b1cdbd2cSJim Jagielski 	aVirDev.SetFillColor( rLineCol );
1337*b1cdbd2cSJim Jagielski 
1338*b1cdbd2cSJim Jagielski     sal_uInt16 nLineWidth = 0;
1339*b1cdbd2cSJim Jagielski 	switch ( nNo )
1340*b1cdbd2cSJim Jagielski 	{
1341*b1cdbd2cSJim Jagielski 		case 1: // DEF_LINE_WIDTH_0
1342*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 6;
1343*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 6;
1344*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1345*b1cdbd2cSJim Jagielski 			break;
1346*b1cdbd2cSJim Jagielski 
1347*b1cdbd2cSJim Jagielski 		case 2: // DEF_LINE_WIDTH_1
1348*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 5;
1349*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 6;
1350*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1351*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) DEF_LINE_WIDTH_1/20;
1352*b1cdbd2cSJim Jagielski 			break;
1353*b1cdbd2cSJim Jagielski 
1354*b1cdbd2cSJim Jagielski 		case 3: // DEF_LINE_WIDTH_2
1355*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 5;
1356*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 7;
1357*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1358*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) DEF_LINE_WIDTH_2/20;
1359*b1cdbd2cSJim Jagielski 			break;
1360*b1cdbd2cSJim Jagielski 
1361*b1cdbd2cSJim Jagielski 		case 4: // DEF_LINE_WIDTH_3
1362*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 4;
1363*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 7;
1364*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1365*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( Rectangle( Point(2,4), Point(37,7) ) );
1366*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) DEF_LINE_WIDTH_3/20;
1367*b1cdbd2cSJim Jagielski 			break;
1368*b1cdbd2cSJim Jagielski 
1369*b1cdbd2cSJim Jagielski 		case 5: // DEF_LINE_WIDTH_4
1370*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 4;
1371*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 8;
1372*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1373*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) DEF_LINE_WIDTH_4/20;
1374*b1cdbd2cSJim Jagielski 			break;
1375*b1cdbd2cSJim Jagielski 
1376*b1cdbd2cSJim Jagielski 		case 6: // DEF_DOUBLE_LINE0
1377*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 5;
1378*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 5;
1379*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1380*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 7;
1381*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 7;
1382*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1383*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE0_OUT+DEF_DOUBLE_LINE0_IN+DEF_DOUBLE_LINE0_DIST)/20;
1384*b1cdbd2cSJim Jagielski 			break;
1385*b1cdbd2cSJim Jagielski 
1386*b1cdbd2cSJim Jagielski 		case 7: // DEF_DOUBLE_LINE7
1387*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 4;
1388*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 4;
1389*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1390*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 7;
1391*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 7;
1392*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1393*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE7_OUT+DEF_DOUBLE_LINE7_IN+DEF_DOUBLE_LINE7_DIST)/20;
1394*b1cdbd2cSJim Jagielski 			break;
1395*b1cdbd2cSJim Jagielski 
1396*b1cdbd2cSJim Jagielski 		case 8: // DEF_DOUBLE_LINE1
1397*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 4;
1398*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 5;
1399*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1400*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 7;
1401*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 8;
1402*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1403*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE1_OUT+DEF_DOUBLE_LINE1_IN+DEF_DOUBLE_LINE1_DIST)/20;
1404*b1cdbd2cSJim Jagielski 			break;
1405*b1cdbd2cSJim Jagielski 
1406*b1cdbd2cSJim Jagielski 		case 9: // DEF_DOUBLE_LINE2
1407*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 3;
1408*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 5;
1409*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1410*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 8;
1411*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 10;
1412*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1413*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE2_OUT+DEF_DOUBLE_LINE2_IN+DEF_DOUBLE_LINE2_DIST)/20;
1414*b1cdbd2cSJim Jagielski 			break;
1415*b1cdbd2cSJim Jagielski 
1416*b1cdbd2cSJim Jagielski 		case 10: // DEF_DOUBLE_LINE8
1417*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 3;
1418*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 4;
1419*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1420*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 7;
1421*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 7;
1422*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1423*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE8_OUT+DEF_DOUBLE_LINE8_IN+DEF_DOUBLE_LINE8_DIST)/20;
1424*b1cdbd2cSJim Jagielski 			break;
1425*b1cdbd2cSJim Jagielski 
1426*b1cdbd2cSJim Jagielski 		case 11: // DEF_DOUBLE_LINE9
1427*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 3;
1428*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 5;
1429*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1430*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 8;
1431*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 8;
1432*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1433*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE9_OUT+DEF_DOUBLE_LINE9_IN+DEF_DOUBLE_LINE9_DIST)/20;
1434*b1cdbd2cSJim Jagielski 			break;
1435*b1cdbd2cSJim Jagielski 
1436*b1cdbd2cSJim Jagielski 		case 12: // DEF_DOUBLE_LINE10
1437*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 2;
1438*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 5;
1439*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1440*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 8;
1441*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 8;
1442*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1443*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE10_OUT+DEF_DOUBLE_LINE10_IN+DEF_DOUBLE_LINE10_DIST)/20;
1444*b1cdbd2cSJim Jagielski 			break;
1445*b1cdbd2cSJim Jagielski 
1446*b1cdbd2cSJim Jagielski 		case 13: // DEF_DOUBLE_LINE3
1447*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 4;
1448*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 5;
1449*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1450*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 7;
1451*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 7;
1452*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1453*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE3_OUT+DEF_DOUBLE_LINE3_IN+DEF_DOUBLE_LINE3_DIST)/20;
1454*b1cdbd2cSJim Jagielski 			break;
1455*b1cdbd2cSJim Jagielski 
1456*b1cdbd2cSJim Jagielski 		case 14: // DEF_DOUBLE_LINE4
1457*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 4;
1458*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 4;
1459*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1460*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 6;
1461*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 7;
1462*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1463*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE4_OUT+DEF_DOUBLE_LINE4_IN+DEF_DOUBLE_LINE4_DIST)/20;
1464*b1cdbd2cSJim Jagielski 			break;
1465*b1cdbd2cSJim Jagielski 
1466*b1cdbd2cSJim Jagielski 		case 15: // DEF_DOUBLE_LINE5
1467*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 3;
1468*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 5;
1469*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1470*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 8;
1471*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 9;
1472*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1473*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE5_OUT+DEF_DOUBLE_LINE5_IN+DEF_DOUBLE_LINE5_DIST)/20;
1474*b1cdbd2cSJim Jagielski 			break;
1475*b1cdbd2cSJim Jagielski 
1476*b1cdbd2cSJim Jagielski 		case 16: // DEF_DOUBLE_LINE6
1477*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 3;
1478*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 4;
1479*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1480*b1cdbd2cSJim Jagielski 			aRect.Top() 	= 7;
1481*b1cdbd2cSJim Jagielski 			aRect.Bottom()	= 9;
1482*b1cdbd2cSJim Jagielski 			aVirDev.DrawRect( aRect );
1483*b1cdbd2cSJim Jagielski 			nLineWidth = (sal_uInt16) (DEF_DOUBLE_LINE6_OUT+DEF_DOUBLE_LINE6_IN+DEF_DOUBLE_LINE6_DIST)/20;
1484*b1cdbd2cSJim Jagielski 			break;
1485*b1cdbd2cSJim Jagielski 
1486*b1cdbd2cSJim Jagielski 		default:
1487*b1cdbd2cSJim Jagielski 			break;
1488*b1cdbd2cSJim Jagielski 	}
1489*b1cdbd2cSJim Jagielski     if ( nLineWidth )
1490*b1cdbd2cSJim Jagielski     {
1491*b1cdbd2cSJim Jagielski         rStr = String::CreateFromInt32( nLineWidth );
1492*b1cdbd2cSJim Jagielski 	    rStr.AppendAscii(" pt");
1493*b1cdbd2cSJim Jagielski     }
1494*b1cdbd2cSJim Jagielski 	rBmp = aVirDev.GetBitmap( Point(0,0), rSize );
1495*b1cdbd2cSJim Jagielski }
1496*b1cdbd2cSJim Jagielski 
1497*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1498*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxLineWindow_Impl,SelectHdl,void *,EMPTYARG)1499*b1cdbd2cSJim Jagielski IMPL_LINK( SvxLineWindow_Impl, SelectHdl, void *, EMPTYARG )
1500*b1cdbd2cSJim Jagielski {
1501*b1cdbd2cSJim Jagielski     SvxLineItem     aLineItem( SID_FRAME_LINESTYLE );
1502*b1cdbd2cSJim Jagielski 	sal_uInt16			n1 = 0,
1503*b1cdbd2cSJim Jagielski 					n2 = 0,
1504*b1cdbd2cSJim Jagielski 					n3 = 0;
1505*b1cdbd2cSJim Jagielski 	sal_Bool			bSetLine = sal_True;
1506*b1cdbd2cSJim Jagielski 
1507*b1cdbd2cSJim Jagielski 	switch ( aLineSet.GetSelectItemId() )
1508*b1cdbd2cSJim Jagielski 	{
1509*b1cdbd2cSJim Jagielski 		case  1: n1 = DEF_LINE_WIDTH_0; break;
1510*b1cdbd2cSJim Jagielski 		case  2: n1 = DEF_LINE_WIDTH_1; break;
1511*b1cdbd2cSJim Jagielski 		case  3: n1 = DEF_LINE_WIDTH_2; break;
1512*b1cdbd2cSJim Jagielski 		case  4: n1 = DEF_LINE_WIDTH_3; break;
1513*b1cdbd2cSJim Jagielski 		case  5: n1 = DEF_LINE_WIDTH_4; break;
1514*b1cdbd2cSJim Jagielski 
1515*b1cdbd2cSJim Jagielski 		case  6: n1 = DEF_DOUBLE_LINE0_OUT;
1516*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE0_IN;
1517*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE0_DIST;	 break;
1518*b1cdbd2cSJim Jagielski 		case  7: n1 = DEF_DOUBLE_LINE7_OUT;
1519*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE7_IN;
1520*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE7_DIST;	 break;
1521*b1cdbd2cSJim Jagielski 		case  8: n1 = DEF_DOUBLE_LINE1_OUT;
1522*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE1_IN;
1523*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE1_DIST;	 break;
1524*b1cdbd2cSJim Jagielski 		case  9: n1 = DEF_DOUBLE_LINE2_OUT;
1525*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE2_IN;
1526*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE2_DIST;	 break;
1527*b1cdbd2cSJim Jagielski 		case 10: n1 = DEF_DOUBLE_LINE8_OUT;
1528*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE8_IN;
1529*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE8_DIST;	 break;
1530*b1cdbd2cSJim Jagielski 		case 11: n1 = DEF_DOUBLE_LINE9_OUT;
1531*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE9_IN;
1532*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE9_DIST;	 break;
1533*b1cdbd2cSJim Jagielski 		case 12: n1 = DEF_DOUBLE_LINE10_OUT;
1534*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE10_IN;
1535*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE10_DIST; break;
1536*b1cdbd2cSJim Jagielski 		case 13: n1 = DEF_DOUBLE_LINE3_OUT;
1537*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE3_IN;
1538*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE3_DIST;	 break;
1539*b1cdbd2cSJim Jagielski 		case 14: n1 = DEF_DOUBLE_LINE4_OUT;
1540*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE4_IN;
1541*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE4_DIST;	 break;
1542*b1cdbd2cSJim Jagielski 		case 15: n1 = DEF_DOUBLE_LINE5_OUT;
1543*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE5_IN;
1544*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE5_DIST;	 break;
1545*b1cdbd2cSJim Jagielski 		case 16: n1 = DEF_DOUBLE_LINE6_OUT;
1546*b1cdbd2cSJim Jagielski 				 n2 = DEF_DOUBLE_LINE6_IN;
1547*b1cdbd2cSJim Jagielski 				 n3 = DEF_DOUBLE_LINE6_DIST;	 break;
1548*b1cdbd2cSJim Jagielski 		case  0:
1549*b1cdbd2cSJim Jagielski 		default:
1550*b1cdbd2cSJim Jagielski 			bSetLine = sal_False;
1551*b1cdbd2cSJim Jagielski 			break;
1552*b1cdbd2cSJim Jagielski 	}
1553*b1cdbd2cSJim Jagielski 	if ( bSetLine )
1554*b1cdbd2cSJim Jagielski 	{
1555*b1cdbd2cSJim Jagielski 		SvxBorderLine aTmp( NULL, n1, n2, n3 );
1556*b1cdbd2cSJim Jagielski 		aLineItem.SetLine( &aTmp );
1557*b1cdbd2cSJim Jagielski 	}
1558*b1cdbd2cSJim Jagielski 	else
1559*b1cdbd2cSJim Jagielski 		aLineItem.SetLine( 0 );
1560*b1cdbd2cSJim Jagielski 
1561*b1cdbd2cSJim Jagielski 	if ( IsInPopupMode() )
1562*b1cdbd2cSJim Jagielski 		EndPopupMode();
1563*b1cdbd2cSJim Jagielski 
1564*b1cdbd2cSJim Jagielski     Any a;
1565*b1cdbd2cSJim Jagielski 	Sequence< PropertyValue > aArgs( 1 );
1566*b1cdbd2cSJim Jagielski     aArgs[0].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "LineStyle" ));
1567*b1cdbd2cSJim Jagielski 	aLineItem.QueryValue( a, m_bIsWriter ? CONVERT_TWIPS : 0 );
1568*b1cdbd2cSJim Jagielski     aArgs[0].Value = a;
1569*b1cdbd2cSJim Jagielski 
1570*b1cdbd2cSJim Jagielski     /*  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
1571*b1cdbd2cSJim Jagielski         This instance may be deleted in the meantime (i.e. when a dialog is opened
1572*b1cdbd2cSJim Jagielski         while in Dispatch()), accessing members will crash in this case. */
1573*b1cdbd2cSJim Jagielski     aLineSet.SetNoSelection();
1574*b1cdbd2cSJim Jagielski 
1575*b1cdbd2cSJim Jagielski     SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
1576*b1cdbd2cSJim Jagielski                                  OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:LineStyle" )),
1577*b1cdbd2cSJim Jagielski                                  aArgs );
1578*b1cdbd2cSJim Jagielski 	return 0;
1579*b1cdbd2cSJim Jagielski }
1580*b1cdbd2cSJim Jagielski 
1581*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1582*b1cdbd2cSJim Jagielski 
Resize()1583*b1cdbd2cSJim Jagielski void SvxLineWindow_Impl::Resize()
1584*b1cdbd2cSJim Jagielski {
1585*b1cdbd2cSJim Jagielski 	lcl_ResizeValueSet( *this, aLineSet);
1586*b1cdbd2cSJim Jagielski }
1587*b1cdbd2cSJim Jagielski 
1588*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1589*b1cdbd2cSJim Jagielski 
StartSelection()1590*b1cdbd2cSJim Jagielski void SvxLineWindow_Impl::StartSelection()
1591*b1cdbd2cSJim Jagielski {
1592*b1cdbd2cSJim Jagielski 	aLineSet.StartSelection();
1593*b1cdbd2cSJim Jagielski }
1594*b1cdbd2cSJim Jagielski 
1595*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1596*b1cdbd2cSJim Jagielski 
Close()1597*b1cdbd2cSJim Jagielski sal_Bool SvxLineWindow_Impl::Close()
1598*b1cdbd2cSJim Jagielski {
1599*b1cdbd2cSJim Jagielski 	return SfxPopupWindow::Close();
1600*b1cdbd2cSJim Jagielski }
1601*b1cdbd2cSJim Jagielski 
1602*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1603*b1cdbd2cSJim Jagielski 
GetPreferredKeyInputWindow()1604*b1cdbd2cSJim Jagielski Window* SvxLineWindow_Impl::GetPreferredKeyInputWindow()
1605*b1cdbd2cSJim Jagielski {
1606*b1cdbd2cSJim Jagielski 	return &aLineSet;
1607*b1cdbd2cSJim Jagielski }
1608*b1cdbd2cSJim Jagielski 
1609*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1610*b1cdbd2cSJim Jagielski 
GetFocus()1611*b1cdbd2cSJim Jagielski void SvxLineWindow_Impl::GetFocus()
1612*b1cdbd2cSJim Jagielski {
1613*b1cdbd2cSJim Jagielski 	aLineSet.GrabFocus();
1614*b1cdbd2cSJim Jagielski }
1615*b1cdbd2cSJim Jagielski 
DataChanged(const DataChangedEvent & rDCEvt)1616*b1cdbd2cSJim Jagielski void SvxLineWindow_Impl::DataChanged( const DataChangedEvent& rDCEvt )
1617*b1cdbd2cSJim Jagielski {
1618*b1cdbd2cSJim Jagielski     SfxPopupWindow::DataChanged( rDCEvt );
1619*b1cdbd2cSJim Jagielski 
1620*b1cdbd2cSJim Jagielski 	if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
1621*b1cdbd2cSJim Jagielski 	{
1622*b1cdbd2cSJim Jagielski 		CreateBitmaps();
1623*b1cdbd2cSJim Jagielski 		Invalidate();
1624*b1cdbd2cSJim Jagielski 	}
1625*b1cdbd2cSJim Jagielski }
1626*b1cdbd2cSJim Jagielski 
CreateBitmaps(void)1627*b1cdbd2cSJim Jagielski void SvxLineWindow_Impl::CreateBitmaps( void )
1628*b1cdbd2cSJim Jagielski {
1629*b1cdbd2cSJim Jagielski 	Size					aBmpSize( 55, 12 );
1630*b1cdbd2cSJim Jagielski 	Bitmap					aBmp;
1631*b1cdbd2cSJim Jagielski 	String					aStr;
1632*b1cdbd2cSJim Jagielski 
1633*b1cdbd2cSJim Jagielski 	const StyleSettings&	rStyleSettings = Application::GetSettings().GetStyleSettings();
1634*b1cdbd2cSJim Jagielski 	svtools::ColorConfig aColorConfig;
1635*b1cdbd2cSJim Jagielski 	::Color					aLineCol( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
1636*b1cdbd2cSJim Jagielski 	::Color					aBackCol( rStyleSettings.GetWindowColor() );
1637*b1cdbd2cSJim Jagielski 	aLineSet.Clear();
1638*b1cdbd2cSJim Jagielski 
1639*b1cdbd2cSJim Jagielski 	for( sal_uInt16 i = 1 ; i < 17 ; ++i )
1640*b1cdbd2cSJim Jagielski 	{
1641*b1cdbd2cSJim Jagielski 		MakeLineBitmap( i, aBmp, aBmpSize, aStr, aLineCol, aBackCol );
1642*b1cdbd2cSJim Jagielski 		aLineSet.InsertItem( i, aBmp, aStr );
1643*b1cdbd2cSJim Jagielski 	}
1644*b1cdbd2cSJim Jagielski }
1645*b1cdbd2cSJim Jagielski 
1646*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1647*b1cdbd2cSJim Jagielski 
1648*b1cdbd2cSJim Jagielski //########################################################################
1649*b1cdbd2cSJim Jagielski // Hilfsklassen
1650*b1cdbd2cSJim Jagielski 
1651*b1cdbd2cSJim Jagielski //========================================================================
1652*b1cdbd2cSJim Jagielski // class SfxStyleControllerItem_Impl ------------------------------------------
1653*b1cdbd2cSJim Jagielski //========================================================================
1654*b1cdbd2cSJim Jagielski 
SfxStyleControllerItem_Impl(const Reference<XDispatchProvider> & rDispatchProvider,sal_uInt16 nSlotId,const rtl::OUString & rCommand,SvxStyleToolBoxControl & rTbxCtl)1655*b1cdbd2cSJim Jagielski SfxStyleControllerItem_Impl::SfxStyleControllerItem_Impl(
1656*b1cdbd2cSJim Jagielski     const Reference< XDispatchProvider >& rDispatchProvider,
1657*b1cdbd2cSJim Jagielski     sal_uInt16			                      nSlotId,      // Family-ID
1658*b1cdbd2cSJim Jagielski     const rtl::OUString&                  rCommand,     // .uno: command bound to this item
1659*b1cdbd2cSJim Jagielski     SvxStyleToolBoxControl&	              rTbxCtl )     // Controller-Instanz, dem dieses Item zugeordnet ist.
1660*b1cdbd2cSJim Jagielski 	:	SfxStatusListener( rDispatchProvider, nSlotId, rCommand ),
1661*b1cdbd2cSJim Jagielski 		rControl( rTbxCtl )
1662*b1cdbd2cSJim Jagielski {
1663*b1cdbd2cSJim Jagielski }
1664*b1cdbd2cSJim Jagielski 
1665*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1666*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)1667*b1cdbd2cSJim Jagielski void SfxStyleControllerItem_Impl::StateChanged(
1668*b1cdbd2cSJim Jagielski 	sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
1669*b1cdbd2cSJim Jagielski {
1670*b1cdbd2cSJim Jagielski 	switch ( GetId() )
1671*b1cdbd2cSJim Jagielski 	{
1672*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY1:
1673*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY2:
1674*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY3:
1675*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY4:
1676*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY5:
1677*b1cdbd2cSJim Jagielski 		{
1678*b1cdbd2cSJim Jagielski 			const sal_uInt16 nIdx = GetId() - SID_STYLE_FAMILY_START;
1679*b1cdbd2cSJim Jagielski 
1680*b1cdbd2cSJim Jagielski 			if ( SFX_ITEM_AVAILABLE == eState )
1681*b1cdbd2cSJim Jagielski 			{
1682*b1cdbd2cSJim Jagielski 				const SfxTemplateItem* pStateItem =
1683*b1cdbd2cSJim Jagielski 					PTR_CAST( SfxTemplateItem, pState );
1684*b1cdbd2cSJim Jagielski 				DBG_ASSERT( pStateItem != NULL, "SfxTemplateItem expected" );
1685*b1cdbd2cSJim Jagielski 				rControl.SetFamilyState( nIdx, pStateItem );
1686*b1cdbd2cSJim Jagielski 			}
1687*b1cdbd2cSJim Jagielski 			else
1688*b1cdbd2cSJim Jagielski 				rControl.SetFamilyState( nIdx, NULL );
1689*b1cdbd2cSJim Jagielski 			break;
1690*b1cdbd2cSJim Jagielski 		}
1691*b1cdbd2cSJim Jagielski 	}
1692*b1cdbd2cSJim Jagielski }
1693*b1cdbd2cSJim Jagielski 
1694*b1cdbd2cSJim Jagielski //########################################################################
1695*b1cdbd2cSJim Jagielski 
1696*b1cdbd2cSJim Jagielski //========================================================================
1697*b1cdbd2cSJim Jagielski // class SvxStyleToolBoxControl ------------------------------------------
1698*b1cdbd2cSJim Jagielski //========================================================================
1699*b1cdbd2cSJim Jagielski 
1700*b1cdbd2cSJim Jagielski struct SvxStyleToolBoxControl::Impl
1701*b1cdbd2cSJim Jagielski {
1702*b1cdbd2cSJim Jagielski 	String						        aClearForm;
1703*b1cdbd2cSJim Jagielski 	String						        aMore;
1704*b1cdbd2cSJim Jagielski     ::std::vector< ::rtl::OUString >    aDefaultStyles;
1705*b1cdbd2cSJim Jagielski 	sal_Bool						bListening;
1706*b1cdbd2cSJim Jagielski 	sal_Bool						bSpecModeWriter;
1707*b1cdbd2cSJim Jagielski 	sal_Bool						bSpecModeCalc;
1708*b1cdbd2cSJim Jagielski 
ImplSvxStyleToolBoxControl::Impl1709*b1cdbd2cSJim Jagielski 	inline Impl( void )
1710*b1cdbd2cSJim Jagielski 		:aClearForm			( SVX_RESSTR( RID_SVXSTR_CLEARFORM ) )
1711*b1cdbd2cSJim Jagielski 		,aMore				( SVX_RESSTR( RID_SVXSTR_MORE ) )
1712*b1cdbd2cSJim Jagielski 		,bListening			( sal_False )
1713*b1cdbd2cSJim Jagielski 		,bSpecModeWriter	( sal_False )
1714*b1cdbd2cSJim Jagielski 		,bSpecModeCalc		( sal_False )
1715*b1cdbd2cSJim Jagielski 	{
1716*b1cdbd2cSJim Jagielski 
1717*b1cdbd2cSJim Jagielski 
1718*b1cdbd2cSJim Jagielski     }
InitializeStylesSvxStyleToolBoxControl::Impl1719*b1cdbd2cSJim Jagielski     void InitializeStyles(Reference < frame::XModel > xModel)
1720*b1cdbd2cSJim Jagielski     {
1721*b1cdbd2cSJim Jagielski         //now convert the default style names to the localized names
1722*b1cdbd2cSJim Jagielski         try
1723*b1cdbd2cSJim Jagielski         {
1724*b1cdbd2cSJim Jagielski             Reference< style::XStyleFamiliesSupplier > xStylesSupplier( xModel, UNO_QUERY_THROW );
1725*b1cdbd2cSJim Jagielski             Reference< lang::XServiceInfo > xServices( xModel, UNO_QUERY_THROW );
1726*b1cdbd2cSJim Jagielski             bSpecModeWriter = xServices->supportsService(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextDocument")));
1727*b1cdbd2cSJim Jagielski             if(bSpecModeWriter)
1728*b1cdbd2cSJim Jagielski             {
1729*b1cdbd2cSJim Jagielski                 Reference<container::XNameAccess> xParaStyles;
1730*b1cdbd2cSJim Jagielski                     xStylesSupplier->getStyleFamilies()->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParagraphStyles"))) >>=
1731*b1cdbd2cSJim Jagielski                     xParaStyles;
1732*b1cdbd2cSJim Jagielski                 static const sal_Char* aWriterStyles[] =
1733*b1cdbd2cSJim Jagielski                 {
1734*b1cdbd2cSJim Jagielski 		            "Standard",
1735*b1cdbd2cSJim Jagielski 		            "Heading 1",
1736*b1cdbd2cSJim Jagielski 		            "Heading 2",
1737*b1cdbd2cSJim Jagielski 		            "Heading 3",
1738*b1cdbd2cSJim Jagielski 		            "Text body"
1739*b1cdbd2cSJim Jagielski                 };
1740*b1cdbd2cSJim Jagielski                 for( sal_uInt32 nStyle = 0; nStyle < sizeof( aWriterStyles ) / sizeof( sal_Char*); ++nStyle )
1741*b1cdbd2cSJim Jagielski                 {
1742*b1cdbd2cSJim Jagielski                     try
1743*b1cdbd2cSJim Jagielski                     {
1744*b1cdbd2cSJim Jagielski                         Reference< beans::XPropertySet > xStyle;
1745*b1cdbd2cSJim Jagielski                         xParaStyles->getByName( rtl::OUString::createFromAscii( aWriterStyles[nStyle] )) >>= xStyle;
1746*b1cdbd2cSJim Jagielski                         ::rtl::OUString sName;
1747*b1cdbd2cSJim Jagielski                         xStyle->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DisplayName"))) >>= sName;
1748*b1cdbd2cSJim Jagielski                         if( sName.getLength() )
1749*b1cdbd2cSJim Jagielski                             aDefaultStyles.push_back(sName);
1750*b1cdbd2cSJim Jagielski                     }
1751*b1cdbd2cSJim Jagielski                     catch( const uno::Exception& )
1752*b1cdbd2cSJim Jagielski                     {}
1753*b1cdbd2cSJim Jagielski                 }
1754*b1cdbd2cSJim Jagielski 
1755*b1cdbd2cSJim Jagielski             }
1756*b1cdbd2cSJim Jagielski             else if( 0 != (
1757*b1cdbd2cSJim Jagielski                 bSpecModeCalc = xServices->supportsService(::rtl::OUString(
1758*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SpreadsheetDocument")))))
1759*b1cdbd2cSJim Jagielski             {
1760*b1cdbd2cSJim Jagielski                 static const sal_Char* aCalcStyles[] =
1761*b1cdbd2cSJim Jagielski                 {
1762*b1cdbd2cSJim Jagielski 		            "Default",
1763*b1cdbd2cSJim Jagielski 		            "Heading1",
1764*b1cdbd2cSJim Jagielski 		            "Result",
1765*b1cdbd2cSJim Jagielski 		            "Result2"
1766*b1cdbd2cSJim Jagielski                 };
1767*b1cdbd2cSJim Jagielski                 Reference<container::XNameAccess> xCellStyles;
1768*b1cdbd2cSJim Jagielski                     xStylesSupplier->getStyleFamilies()->getByName(
1769*b1cdbd2cSJim Jagielski                         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CellStyles"))) >>=
1770*b1cdbd2cSJim Jagielski                         xCellStyles;
1771*b1cdbd2cSJim Jagielski                 for( sal_uInt32 nStyle = 0; nStyle < sizeof( aCalcStyles ) / sizeof( sal_Char*); ++nStyle )
1772*b1cdbd2cSJim Jagielski                 {
1773*b1cdbd2cSJim Jagielski                     try
1774*b1cdbd2cSJim Jagielski                     {
1775*b1cdbd2cSJim Jagielski 						const rtl::OUString sStyleName( rtl::OUString::createFromAscii( aCalcStyles[nStyle] ) );
1776*b1cdbd2cSJim Jagielski 						if( xCellStyles->hasByName( sStyleName ) )
1777*b1cdbd2cSJim Jagielski 						{
1778*b1cdbd2cSJim Jagielski 							Reference< beans::XPropertySet > xStyle( xCellStyles->getByName( sStyleName), UNO_QUERY_THROW );
1779*b1cdbd2cSJim Jagielski 		                    ::rtl::OUString sName;
1780*b1cdbd2cSJim Jagielski 			                xStyle->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DisplayName"))) >>= sName;
1781*b1cdbd2cSJim Jagielski 				            if( sName.getLength() )
1782*b1cdbd2cSJim Jagielski 					            aDefaultStyles.push_back(sName);
1783*b1cdbd2cSJim Jagielski 						}
1784*b1cdbd2cSJim Jagielski                     }
1785*b1cdbd2cSJim Jagielski                     catch( const uno::Exception& )
1786*b1cdbd2cSJim Jagielski                     {}
1787*b1cdbd2cSJim Jagielski                 }
1788*b1cdbd2cSJim Jagielski             }
1789*b1cdbd2cSJim Jagielski         }
1790*b1cdbd2cSJim Jagielski         catch(const uno::Exception& )
1791*b1cdbd2cSJim Jagielski         {
1792*b1cdbd2cSJim Jagielski             DBG_ERROR("error while initializing style names");
1793*b1cdbd2cSJim Jagielski         }
1794*b1cdbd2cSJim Jagielski     }
1795*b1cdbd2cSJim Jagielski };
1796*b1cdbd2cSJim Jagielski 
1797*b1cdbd2cSJim Jagielski 
1798*b1cdbd2cSJim Jagielski // mapping table from bound items. BE CAREFUL this table must be in the
1799*b1cdbd2cSJim Jagielski // same order as the uno commands bound to the slots SID_STYLE_FAMILY1..n
1800*b1cdbd2cSJim Jagielski // MAX_FAMILIES must also be correctly set!
1801*b1cdbd2cSJim Jagielski static const char* StyleSlotToStyleCommand[MAX_FAMILIES] =
1802*b1cdbd2cSJim Jagielski {
1803*b1cdbd2cSJim Jagielski     ".uno:CharStyle",
1804*b1cdbd2cSJim Jagielski     ".uno:ParaStyle",
1805*b1cdbd2cSJim Jagielski     ".uno:FrameStyle",
1806*b1cdbd2cSJim Jagielski     ".uno:PageStyle",
1807*b1cdbd2cSJim Jagielski     ".uno:TemplateFamily5"
1808*b1cdbd2cSJim Jagielski };
1809*b1cdbd2cSJim Jagielski 
SvxStyleToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)1810*b1cdbd2cSJim Jagielski SvxStyleToolBoxControl::SvxStyleToolBoxControl(
1811*b1cdbd2cSJim Jagielski     sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
1812*b1cdbd2cSJim Jagielski 	:	SfxToolBoxControl	( nSlotId, nId, rTbx ),
1813*b1cdbd2cSJim Jagielski 		pStyleSheetPool		( NULL ),
1814*b1cdbd2cSJim Jagielski 		nActFamily			( 0xffff ),
1815*b1cdbd2cSJim Jagielski 		bListening			( sal_False ),
1816*b1cdbd2cSJim Jagielski 		pImpl				( new Impl )
1817*b1cdbd2cSJim Jagielski {
1818*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i=0; i<MAX_FAMILIES; i++ )
1819*b1cdbd2cSJim Jagielski 	{
1820*b1cdbd2cSJim Jagielski         pBoundItems[i] = 0;
1821*b1cdbd2cSJim Jagielski         m_xBoundItems[i] = Reference< XComponent >();
1822*b1cdbd2cSJim Jagielski 		pFamilyState[i]  = NULL;
1823*b1cdbd2cSJim Jagielski     }
1824*b1cdbd2cSJim Jagielski }
1825*b1cdbd2cSJim Jagielski 
1826*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
~SvxStyleToolBoxControl()1827*b1cdbd2cSJim Jagielski SvxStyleToolBoxControl::~SvxStyleToolBoxControl()
1828*b1cdbd2cSJim Jagielski {
1829*b1cdbd2cSJim Jagielski }
1830*b1cdbd2cSJim Jagielski 
1831*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
initialize(const Sequence<Any> & aArguments)1832*b1cdbd2cSJim Jagielski void SAL_CALL SvxStyleToolBoxControl::initialize( const Sequence< Any >& aArguments )
1833*b1cdbd2cSJim Jagielski throw ( Exception, RuntimeException)
1834*b1cdbd2cSJim Jagielski {
1835*b1cdbd2cSJim Jagielski     SfxToolBoxControl::initialize( aArguments );
1836*b1cdbd2cSJim Jagielski 
1837*b1cdbd2cSJim Jagielski     // After initialize we should have a valid frame member where we can retrieve our
1838*b1cdbd2cSJim Jagielski     // dispatch provider.
1839*b1cdbd2cSJim Jagielski     if ( m_xFrame.is() )
1840*b1cdbd2cSJim Jagielski     {
1841*b1cdbd2cSJim Jagielski         pImpl->InitializeStyles(m_xFrame->getController()->getModel());
1842*b1cdbd2cSJim Jagielski         Reference< XDispatchProvider > xDispatchProvider( m_xFrame->getController(), UNO_QUERY );
1843*b1cdbd2cSJim Jagielski         for ( sal_uInt16 i=0; i<MAX_FAMILIES; i++ )
1844*b1cdbd2cSJim Jagielski 	    {
1845*b1cdbd2cSJim Jagielski             pBoundItems[i]   = new SfxStyleControllerItem_Impl( xDispatchProvider,
1846*b1cdbd2cSJim Jagielski                                                                 SID_STYLE_FAMILY_START + i,
1847*b1cdbd2cSJim Jagielski                                                                 OUString::createFromAscii( StyleSlotToStyleCommand[i] ),
1848*b1cdbd2cSJim Jagielski                                                                 *this );
1849*b1cdbd2cSJim Jagielski             m_xBoundItems[i] = Reference< XComponent >( static_cast< OWeakObject* >( pBoundItems[i] ), UNO_QUERY );
1850*b1cdbd2cSJim Jagielski 	        pFamilyState[i]  = NULL;
1851*b1cdbd2cSJim Jagielski         }
1852*b1cdbd2cSJim Jagielski     }
1853*b1cdbd2cSJim Jagielski }
1854*b1cdbd2cSJim Jagielski 
1855*b1cdbd2cSJim Jagielski // XComponent
dispose()1856*b1cdbd2cSJim Jagielski void SAL_CALL SvxStyleToolBoxControl::dispose()
1857*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
1858*b1cdbd2cSJim Jagielski {
1859*b1cdbd2cSJim Jagielski     SfxToolBoxControl::dispose();
1860*b1cdbd2cSJim Jagielski 
1861*b1cdbd2cSJim Jagielski     for( sal_uInt16 i=0; i<MAX_FAMILIES; i++ )
1862*b1cdbd2cSJim Jagielski 	{
1863*b1cdbd2cSJim Jagielski         if ( m_xBoundItems[i].is() )
1864*b1cdbd2cSJim Jagielski         {
1865*b1cdbd2cSJim Jagielski             try
1866*b1cdbd2cSJim Jagielski             {
1867*b1cdbd2cSJim Jagielski                 m_xBoundItems[i]->dispose();
1868*b1cdbd2cSJim Jagielski             }
1869*b1cdbd2cSJim Jagielski             catch ( Exception& )
1870*b1cdbd2cSJim Jagielski             {
1871*b1cdbd2cSJim Jagielski             }
1872*b1cdbd2cSJim Jagielski 
1873*b1cdbd2cSJim Jagielski             m_xBoundItems[i].clear();
1874*b1cdbd2cSJim Jagielski             pBoundItems[i] = 0;
1875*b1cdbd2cSJim Jagielski         }
1876*b1cdbd2cSJim Jagielski 		DELETEZ( pFamilyState[i] );
1877*b1cdbd2cSJim Jagielski 	}
1878*b1cdbd2cSJim Jagielski 	pStyleSheetPool = NULL;
1879*b1cdbd2cSJim Jagielski     DELETEZ( pImpl );
1880*b1cdbd2cSJim Jagielski }
1881*b1cdbd2cSJim Jagielski 
1882*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
update()1883*b1cdbd2cSJim Jagielski void SAL_CALL SvxStyleToolBoxControl::update() throw (RuntimeException)
1884*b1cdbd2cSJim Jagielski {
1885*b1cdbd2cSJim Jagielski     // Do nothing, we will start binding our listener when we are visible.
1886*b1cdbd2cSJim Jagielski     // See link SvxStyleToolBoxControl::VisibilityNotification.
1887*b1cdbd2cSJim Jagielski     SvxStyleBox_Impl* pBox = (SvxStyleBox_Impl*)GetToolBox().GetItemWindow( GetId() );
1888*b1cdbd2cSJim Jagielski 	if ( pBox->IsVisible() )
1889*b1cdbd2cSJim Jagielski 	{
1890*b1cdbd2cSJim Jagielski 		for ( int i=0; i<MAX_FAMILIES; i++ )
1891*b1cdbd2cSJim Jagielski 			pBoundItems	[i]->ReBind();
1892*b1cdbd2cSJim Jagielski 
1893*b1cdbd2cSJim Jagielski         bindListener();
1894*b1cdbd2cSJim Jagielski 	}
1895*b1cdbd2cSJim Jagielski }
1896*b1cdbd2cSJim Jagielski 
1897*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1898*b1cdbd2cSJim Jagielski 
GetActFamily()1899*b1cdbd2cSJim Jagielski SfxStyleFamily SvxStyleToolBoxControl::GetActFamily()
1900*b1cdbd2cSJim Jagielski {
1901*b1cdbd2cSJim Jagielski 	switch ( nActFamily-1 + SID_STYLE_FAMILY_START )
1902*b1cdbd2cSJim Jagielski 	{
1903*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY1:	return SFX_STYLE_FAMILY_CHAR;
1904*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY2:	return SFX_STYLE_FAMILY_PARA;
1905*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY3:	return SFX_STYLE_FAMILY_FRAME;
1906*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY4:	return SFX_STYLE_FAMILY_PAGE;
1907*b1cdbd2cSJim Jagielski 		case SID_STYLE_FAMILY5:	return SFX_STYLE_FAMILY_PSEUDO;
1908*b1cdbd2cSJim Jagielski 		default:
1909*b1cdbd2cSJim Jagielski 			DBG_ERROR( "unknown style family" );
1910*b1cdbd2cSJim Jagielski 			break;
1911*b1cdbd2cSJim Jagielski 	}
1912*b1cdbd2cSJim Jagielski 	return SFX_STYLE_FAMILY_PARA;
1913*b1cdbd2cSJim Jagielski }
1914*b1cdbd2cSJim Jagielski 
1915*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
1916*b1cdbd2cSJim Jagielski 
FillStyleBox()1917*b1cdbd2cSJim Jagielski void SvxStyleToolBoxControl::FillStyleBox()
1918*b1cdbd2cSJim Jagielski {
1919*b1cdbd2cSJim Jagielski     SvxStyleBox_Impl* pBox = (SvxStyleBox_Impl*)GetToolBox().GetItemWindow( GetId() );
1920*b1cdbd2cSJim Jagielski 
1921*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pStyleSheetPool, "StyleSheetPool not found!" );
1922*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pBox,			 "Control not found!" );
1923*b1cdbd2cSJim Jagielski 
1924*b1cdbd2cSJim Jagielski 	if ( pStyleSheetPool && pBox && nActFamily!=0xffff )
1925*b1cdbd2cSJim Jagielski 	{
1926*b1cdbd2cSJim Jagielski 		const SfxStyleFamily	eFamily 	= GetActFamily();
1927*b1cdbd2cSJim Jagielski 		sal_uInt16					nCount  	= pStyleSheetPool->Count();
1928*b1cdbd2cSJim Jagielski 		sal_uInt16 					i			= 0;
1929*b1cdbd2cSJim Jagielski 		SfxStyleSheetBase*		pStyle  	= NULL;
1930*b1cdbd2cSJim Jagielski 		sal_Bool 					bDoFill 	= sal_False;
1931*b1cdbd2cSJim Jagielski 
1932*b1cdbd2cSJim Jagielski 		pStyleSheetPool->SetSearchMask( eFamily, SFXSTYLEBIT_USED );
1933*b1cdbd2cSJim Jagielski 
1934*b1cdbd2cSJim Jagielski 		//------------------------------
1935*b1cdbd2cSJim Jagielski 		// Ueberpruefen, ob Fill noetig:
1936*b1cdbd2cSJim Jagielski 		//------------------------------
1937*b1cdbd2cSJim Jagielski 
1938*b1cdbd2cSJim Jagielski 		pStyle = pStyleSheetPool->First();
1939*b1cdbd2cSJim Jagielski         //!!! TODO: This condition isn't right any longer, because we always show some default entries
1940*b1cdbd2cSJim Jagielski         //!!! so the list doesn't show the count
1941*b1cdbd2cSJim Jagielski 		if ( nCount != pBox->GetEntryCount() )
1942*b1cdbd2cSJim Jagielski 		{
1943*b1cdbd2cSJim Jagielski 			bDoFill = sal_True;
1944*b1cdbd2cSJim Jagielski 		}
1945*b1cdbd2cSJim Jagielski 		else
1946*b1cdbd2cSJim Jagielski 		{
1947*b1cdbd2cSJim Jagielski 			while ( pStyle && !bDoFill )
1948*b1cdbd2cSJim Jagielski 			{
1949*b1cdbd2cSJim Jagielski 				bDoFill = ( pBox->GetEntry(i) != pStyle->GetName() );
1950*b1cdbd2cSJim Jagielski 				pStyle = pStyleSheetPool->Next();
1951*b1cdbd2cSJim Jagielski 				i++;
1952*b1cdbd2cSJim Jagielski 			}
1953*b1cdbd2cSJim Jagielski 		}
1954*b1cdbd2cSJim Jagielski 
1955*b1cdbd2cSJim Jagielski 		if ( bDoFill )
1956*b1cdbd2cSJim Jagielski 		{
1957*b1cdbd2cSJim Jagielski 			pBox->SetUpdateMode( sal_False );
1958*b1cdbd2cSJim Jagielski 			pBox->Clear();
1959*b1cdbd2cSJim Jagielski 
1960*b1cdbd2cSJim Jagielski 			{
1961*b1cdbd2cSJim Jagielski 				sal_uInt16	_i;
1962*b1cdbd2cSJim Jagielski                 sal_uInt32  nCnt = pImpl->aDefaultStyles.size();
1963*b1cdbd2cSJim Jagielski 				bool	bInsert;
1964*b1cdbd2cSJim Jagielski 
1965*b1cdbd2cSJim Jagielski 				pStyle = pStyleSheetPool->First();
1966*b1cdbd2cSJim Jagielski 
1967*b1cdbd2cSJim Jagielski 				if( pImpl->bSpecModeWriter || pImpl->bSpecModeCalc )
1968*b1cdbd2cSJim Jagielski 				{
1969*b1cdbd2cSJim Jagielski 					while ( pStyle )
1970*b1cdbd2cSJim Jagielski 					{
1971*b1cdbd2cSJim Jagielski 						// sort out default styles
1972*b1cdbd2cSJim Jagielski 						bInsert = true;
1973*b1cdbd2cSJim Jagielski                         ::rtl::OUString	aName( pStyle->GetName() );
1974*b1cdbd2cSJim Jagielski 						for( _i = 0 ; _i < nCnt ; ++_i )
1975*b1cdbd2cSJim Jagielski 						{
1976*b1cdbd2cSJim Jagielski 							if( pImpl->aDefaultStyles[_i] == aName )
1977*b1cdbd2cSJim Jagielski 							{
1978*b1cdbd2cSJim Jagielski 								bInsert = false;
1979*b1cdbd2cSJim Jagielski 								break;
1980*b1cdbd2cSJim Jagielski 							}
1981*b1cdbd2cSJim Jagielski 						}
1982*b1cdbd2cSJim Jagielski 
1983*b1cdbd2cSJim Jagielski 						if( bInsert )
1984*b1cdbd2cSJim Jagielski 							pBox->InsertEntry( aName );
1985*b1cdbd2cSJim Jagielski 						pStyle = pStyleSheetPool->Next();
1986*b1cdbd2cSJim Jagielski 					}
1987*b1cdbd2cSJim Jagielski 				}
1988*b1cdbd2cSJim Jagielski 				else
1989*b1cdbd2cSJim Jagielski 				{
1990*b1cdbd2cSJim Jagielski 					while ( pStyle )
1991*b1cdbd2cSJim Jagielski 					{
1992*b1cdbd2cSJim Jagielski 						pBox->InsertEntry( pStyle->GetName() );
1993*b1cdbd2cSJim Jagielski 						pStyle = pStyleSheetPool->Next();
1994*b1cdbd2cSJim Jagielski 					}
1995*b1cdbd2cSJim Jagielski 				}
1996*b1cdbd2cSJim Jagielski 			}
1997*b1cdbd2cSJim Jagielski 
1998*b1cdbd2cSJim Jagielski 			if( pImpl->bSpecModeWriter || pImpl->bSpecModeCalc )
1999*b1cdbd2cSJim Jagielski 			{
2000*b1cdbd2cSJim Jagielski 				// insert default styles
2001*b1cdbd2cSJim Jagielski 				sal_uInt16	_i;
2002*b1cdbd2cSJim Jagielski                 sal_uInt32  nCnt = pImpl->aDefaultStyles.size();
2003*b1cdbd2cSJim Jagielski 				sal_uInt16 nPos = 1;
2004*b1cdbd2cSJim Jagielski 				for( _i = 0 ; _i < nCnt ; ++_i )
2005*b1cdbd2cSJim Jagielski 				{
2006*b1cdbd2cSJim Jagielski 					pBox->InsertEntry( pImpl->aDefaultStyles[_i], nPos );
2007*b1cdbd2cSJim Jagielski 					++nPos;
2008*b1cdbd2cSJim Jagielski 				}
2009*b1cdbd2cSJim Jagielski 
2010*b1cdbd2cSJim Jagielski                 // disable sort to preserve special order
2011*b1cdbd2cSJim Jagielski                 WinBits nWinBits = pBox->GetStyle();
2012*b1cdbd2cSJim Jagielski                 nWinBits &= ~WB_SORT;
2013*b1cdbd2cSJim Jagielski                 pBox->SetStyle( nWinBits );
2014*b1cdbd2cSJim Jagielski 
2015*b1cdbd2cSJim Jagielski                 pBox->InsertEntry( pImpl->aClearForm, 0 );
2016*b1cdbd2cSJim Jagielski                 pBox->SetSeparatorPos( 0 );
2017*b1cdbd2cSJim Jagielski 
2018*b1cdbd2cSJim Jagielski 				pBox->InsertEntry( pImpl->aMore );
2019*b1cdbd2cSJim Jagielski 
2020*b1cdbd2cSJim Jagielski 				// enable sort again
2021*b1cdbd2cSJim Jagielski 				nWinBits |= WB_SORT;
2022*b1cdbd2cSJim Jagielski 				pBox->SetStyle( nWinBits );
2023*b1cdbd2cSJim Jagielski 			}
2024*b1cdbd2cSJim Jagielski 
2025*b1cdbd2cSJim Jagielski 			pBox->SetUpdateMode( sal_True );
2026*b1cdbd2cSJim Jagielski 			pBox->SetFamily( eFamily );
2027*b1cdbd2cSJim Jagielski 
2028*b1cdbd2cSJim Jagielski             sal_uInt16 nLines = Min( pBox->GetEntryCount(), MAX_STYLES_ENTRIES );
2029*b1cdbd2cSJim Jagielski             pBox->SetDropDownLineCount( nLines );
2030*b1cdbd2cSJim Jagielski 		}
2031*b1cdbd2cSJim Jagielski 	}
2032*b1cdbd2cSJim Jagielski }
2033*b1cdbd2cSJim Jagielski 
2034*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2035*b1cdbd2cSJim Jagielski 
SelectStyle(const String & rStyleName)2036*b1cdbd2cSJim Jagielski void SvxStyleToolBoxControl::SelectStyle( const String& rStyleName )
2037*b1cdbd2cSJim Jagielski {
2038*b1cdbd2cSJim Jagielski     SvxStyleBox_Impl* pBox = (SvxStyleBox_Impl*)GetToolBox().GetItemWindow( GetId() );
2039*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pBox, "Control not found!" );
2040*b1cdbd2cSJim Jagielski 
2041*b1cdbd2cSJim Jagielski 	if ( pBox )
2042*b1cdbd2cSJim Jagielski 	{
2043*b1cdbd2cSJim Jagielski //		String aStrSel( pBox->GetSelectEntry() );
2044*b1cdbd2cSJim Jagielski 		String aStrSel( pBox->GetText() );
2045*b1cdbd2cSJim Jagielski 
2046*b1cdbd2cSJim Jagielski 		if ( rStyleName.Len() > 0 )
2047*b1cdbd2cSJim Jagielski 		{
2048*b1cdbd2cSJim Jagielski 			if ( rStyleName != aStrSel )
2049*b1cdbd2cSJim Jagielski //				pBox->SelectEntry( rStyleName );
2050*b1cdbd2cSJim Jagielski 				pBox->SetText( rStyleName );
2051*b1cdbd2cSJim Jagielski 		}
2052*b1cdbd2cSJim Jagielski 		else
2053*b1cdbd2cSJim Jagielski 			pBox->SetNoSelection();
2054*b1cdbd2cSJim Jagielski         pBox->SaveValue();
2055*b1cdbd2cSJim Jagielski     }
2056*b1cdbd2cSJim Jagielski }
2057*b1cdbd2cSJim Jagielski 
2058*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2059*b1cdbd2cSJim Jagielski 
Update()2060*b1cdbd2cSJim Jagielski void SvxStyleToolBoxControl::Update()
2061*b1cdbd2cSJim Jagielski {
2062*b1cdbd2cSJim Jagielski 	SfxStyleSheetBasePool*	pPool	  = NULL;
2063*b1cdbd2cSJim Jagielski 	SfxObjectShell*		    pDocShell = SfxObjectShell::Current();
2064*b1cdbd2cSJim Jagielski 
2065*b1cdbd2cSJim Jagielski 	if ( pDocShell )
2066*b1cdbd2cSJim Jagielski 		pPool = pDocShell->GetStyleSheetPool();
2067*b1cdbd2cSJim Jagielski 
2068*b1cdbd2cSJim Jagielski 	sal_uInt16 i;
2069*b1cdbd2cSJim Jagielski 	for ( i=0; i<MAX_FAMILIES; i++ )
2070*b1cdbd2cSJim Jagielski 		if( pFamilyState[i] )
2071*b1cdbd2cSJim Jagielski 			break;
2072*b1cdbd2cSJim Jagielski 
2073*b1cdbd2cSJim Jagielski 	if ( i==MAX_FAMILIES || !pPool )
2074*b1cdbd2cSJim Jagielski 	{
2075*b1cdbd2cSJim Jagielski 		pStyleSheetPool = pPool;
2076*b1cdbd2cSJim Jagielski 		return;
2077*b1cdbd2cSJim Jagielski 	}
2078*b1cdbd2cSJim Jagielski 
2079*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
2080*b1cdbd2cSJim Jagielski 	const SfxTemplateItem* pItem = NULL;
2081*b1cdbd2cSJim Jagielski 
2082*b1cdbd2cSJim Jagielski 	if ( nActFamily == 0xffff || 0 == (pItem = pFamilyState[nActFamily-1]) )
2083*b1cdbd2cSJim Jagielski 		// aktueller Bereich nicht innerhalb der erlaubten Bereiche
2084*b1cdbd2cSJim Jagielski 		// oder Default
2085*b1cdbd2cSJim Jagielski 	{
2086*b1cdbd2cSJim Jagielski 		pStyleSheetPool = pPool;
2087*b1cdbd2cSJim Jagielski 		nActFamily		= 2;
2088*b1cdbd2cSJim Jagielski 
2089*b1cdbd2cSJim Jagielski 		pItem = pFamilyState[nActFamily-1];
2090*b1cdbd2cSJim Jagielski 		if ( !pItem )
2091*b1cdbd2cSJim Jagielski 		{
2092*b1cdbd2cSJim Jagielski 			nActFamily++;
2093*b1cdbd2cSJim Jagielski 			pItem = pFamilyState[nActFamily-1];
2094*b1cdbd2cSJim Jagielski 		}
2095*b1cdbd2cSJim Jagielski 
2096*b1cdbd2cSJim Jagielski 		if ( !pItem )
2097*b1cdbd2cSJim Jagielski         {
2098*b1cdbd2cSJim Jagielski 			DBG_WARNING( "Unknown Family" ); // can happen
2099*b1cdbd2cSJim Jagielski         }
2100*b1cdbd2cSJim Jagielski 	}
2101*b1cdbd2cSJim Jagielski 	else if ( pPool != pStyleSheetPool )
2102*b1cdbd2cSJim Jagielski 		pStyleSheetPool = pPool;
2103*b1cdbd2cSJim Jagielski 
2104*b1cdbd2cSJim Jagielski 	FillStyleBox(); // entscheidet selbst, ob gefuellt werden muss
2105*b1cdbd2cSJim Jagielski 
2106*b1cdbd2cSJim Jagielski 	if ( pItem )
2107*b1cdbd2cSJim Jagielski 		SelectStyle( pItem->GetStyleName() );
2108*b1cdbd2cSJim Jagielski }
2109*b1cdbd2cSJim Jagielski 
2110*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2111*b1cdbd2cSJim Jagielski 
SetFamilyState(sal_uInt16 nIdx,const SfxTemplateItem * pItem)2112*b1cdbd2cSJim Jagielski void SvxStyleToolBoxControl::SetFamilyState( sal_uInt16 nIdx,
2113*b1cdbd2cSJim Jagielski 											 const SfxTemplateItem* pItem )
2114*b1cdbd2cSJim Jagielski {
2115*b1cdbd2cSJim Jagielski 	DELETEZ( pFamilyState[nIdx] );
2116*b1cdbd2cSJim Jagielski 
2117*b1cdbd2cSJim Jagielski 	if ( pItem )
2118*b1cdbd2cSJim Jagielski 		pFamilyState[nIdx] = new SfxTemplateItem( *pItem );
2119*b1cdbd2cSJim Jagielski 
2120*b1cdbd2cSJim Jagielski     Update();
2121*b1cdbd2cSJim Jagielski }
2122*b1cdbd2cSJim Jagielski 
2123*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2124*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxStyleToolBoxControl,VisibilityNotification,void *,EMPTYARG)2125*b1cdbd2cSJim Jagielski IMPL_LINK( SvxStyleToolBoxControl, VisibilityNotification, void*, EMPTYARG )
2126*b1cdbd2cSJim Jagielski {
2127*b1cdbd2cSJim Jagielski 
2128*b1cdbd2cSJim Jagielski     sal_uInt16 i;
2129*b1cdbd2cSJim Jagielski 
2130*b1cdbd2cSJim Jagielski 	// Call ReBind() && UnBind() according to visibility
2131*b1cdbd2cSJim Jagielski 	SvxStyleBox_Impl* pBox = (SvxStyleBox_Impl*)( GetToolBox().GetItemWindow( GetId() ));
2132*b1cdbd2cSJim Jagielski 	if ( pBox->IsVisible() && !isBound() )
2133*b1cdbd2cSJim Jagielski 	{
2134*b1cdbd2cSJim Jagielski 		for ( i=0; i<MAX_FAMILIES; i++ )
2135*b1cdbd2cSJim Jagielski 			pBoundItems	[i]->ReBind();
2136*b1cdbd2cSJim Jagielski 
2137*b1cdbd2cSJim Jagielski         bindListener();
2138*b1cdbd2cSJim Jagielski 	}
2139*b1cdbd2cSJim Jagielski     else if ( !pBox->IsVisible() && isBound() )
2140*b1cdbd2cSJim Jagielski 	{
2141*b1cdbd2cSJim Jagielski 		for ( i=0; i<MAX_FAMILIES; i++ )
2142*b1cdbd2cSJim Jagielski 			pBoundItems[i]->UnBind();
2143*b1cdbd2cSJim Jagielski 		unbindListener();
2144*b1cdbd2cSJim Jagielski 	}
2145*b1cdbd2cSJim Jagielski 
2146*b1cdbd2cSJim Jagielski 	return 0;
2147*b1cdbd2cSJim Jagielski }
2148*b1cdbd2cSJim Jagielski 
2149*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2150*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)2151*b1cdbd2cSJim Jagielski void SvxStyleToolBoxControl::StateChanged(
2152*b1cdbd2cSJim Jagielski 
2153*b1cdbd2cSJim Jagielski 	sal_uInt16 , SfxItemState eState, const SfxPoolItem* pState )
2154*b1cdbd2cSJim Jagielski 
2155*b1cdbd2cSJim Jagielski {
2156*b1cdbd2cSJim Jagielski 	sal_uInt16 		 nId	= GetId();
2157*b1cdbd2cSJim Jagielski 	ToolBox&	 rTbx   = GetToolBox();
2158*b1cdbd2cSJim Jagielski     SvxStyleBox_Impl* pBox   = (SvxStyleBox_Impl*)(rTbx.GetItemWindow( nId ));
2159*b1cdbd2cSJim Jagielski 	TriState	 eTri	= STATE_NOCHECK;
2160*b1cdbd2cSJim Jagielski 
2161*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pBox, "Control not found!" );
2162*b1cdbd2cSJim Jagielski 
2163*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_DISABLED == eState )
2164*b1cdbd2cSJim Jagielski 		pBox->Disable();
2165*b1cdbd2cSJim Jagielski 	else
2166*b1cdbd2cSJim Jagielski 		pBox->Enable();
2167*b1cdbd2cSJim Jagielski 
2168*b1cdbd2cSJim Jagielski 	rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2169*b1cdbd2cSJim Jagielski 
2170*b1cdbd2cSJim Jagielski 	switch ( eState )
2171*b1cdbd2cSJim Jagielski 	{
2172*b1cdbd2cSJim Jagielski 		case SFX_ITEM_AVAILABLE:
2173*b1cdbd2cSJim Jagielski 			eTri = ((const SfxBoolItem*)pState)->GetValue()
2174*b1cdbd2cSJim Jagielski 						? STATE_CHECK
2175*b1cdbd2cSJim Jagielski 						: STATE_NOCHECK;
2176*b1cdbd2cSJim Jagielski 			break;
2177*b1cdbd2cSJim Jagielski 
2178*b1cdbd2cSJim Jagielski 		case SFX_ITEM_DONTCARE:
2179*b1cdbd2cSJim Jagielski 			eTri = STATE_DONTKNOW;
2180*b1cdbd2cSJim Jagielski 			break;
2181*b1cdbd2cSJim Jagielski 	}
2182*b1cdbd2cSJim Jagielski 
2183*b1cdbd2cSJim Jagielski 	rTbx.SetItemState( nId, eTri );
2184*b1cdbd2cSJim Jagielski 
2185*b1cdbd2cSJim Jagielski     if ( SFX_ITEM_DISABLED != eState )
2186*b1cdbd2cSJim Jagielski         Update();
2187*b1cdbd2cSJim Jagielski }
2188*b1cdbd2cSJim Jagielski 
2189*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2190*b1cdbd2cSJim Jagielski 
CreateItemWindow(Window * pParent)2191*b1cdbd2cSJim Jagielski Window* SvxStyleToolBoxControl::CreateItemWindow( Window *pParent )
2192*b1cdbd2cSJim Jagielski {
2193*b1cdbd2cSJim Jagielski     SvxStyleBox_Impl* pBox = new SvxStyleBox_Impl( pParent,
2194*b1cdbd2cSJim Jagielski 										           SID_STYLE_APPLY,
2195*b1cdbd2cSJim Jagielski                                                    OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:StyleApply" )),
2196*b1cdbd2cSJim Jagielski 										           SFX_STYLE_FAMILY_PARA,
2197*b1cdbd2cSJim Jagielski                                                    Reference< XDispatchProvider >( m_xFrame->getController(), UNO_QUERY ),
2198*b1cdbd2cSJim Jagielski                                                    m_xFrame,
2199*b1cdbd2cSJim Jagielski                                                    pImpl->aClearForm,
2200*b1cdbd2cSJim Jagielski 												   pImpl->aMore,
2201*b1cdbd2cSJim Jagielski 												   pImpl->bSpecModeWriter || pImpl->bSpecModeCalc );
2202*b1cdbd2cSJim Jagielski     if( !pImpl->aDefaultStyles.empty())
2203*b1cdbd2cSJim Jagielski         pBox->SetDefaultStyle( pImpl->aDefaultStyles[0] );
2204*b1cdbd2cSJim Jagielski 	// Set visibility listener to bind/unbind controller
2205*b1cdbd2cSJim Jagielski 	pBox->SetVisibilityListener( LINK( this, SvxStyleToolBoxControl, VisibilityNotification ));
2206*b1cdbd2cSJim Jagielski 
2207*b1cdbd2cSJim Jagielski 	return pBox;
2208*b1cdbd2cSJim Jagielski }
2209*b1cdbd2cSJim Jagielski 
2210*b1cdbd2cSJim Jagielski //========================================================================
2211*b1cdbd2cSJim Jagielski // class SvxFontNameToolBoxControl ---------------------------------------
2212*b1cdbd2cSJim Jagielski //========================================================================
2213*b1cdbd2cSJim Jagielski 
SvxFontNameToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2214*b1cdbd2cSJim Jagielski SvxFontNameToolBoxControl::SvxFontNameToolBoxControl(
2215*b1cdbd2cSJim Jagielski                                             sal_uInt16          nSlotId,
2216*b1cdbd2cSJim Jagielski 											sal_uInt16			nId,
2217*b1cdbd2cSJim Jagielski 											ToolBox&		rTbx )
2218*b1cdbd2cSJim Jagielski 
2219*b1cdbd2cSJim Jagielski 	:	SfxToolBoxControl( nSlotId, nId, rTbx )
2220*b1cdbd2cSJim Jagielski {
2221*b1cdbd2cSJim Jagielski }
2222*b1cdbd2cSJim Jagielski 
2223*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2224*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)2225*b1cdbd2cSJim Jagielski void SvxFontNameToolBoxControl::StateChanged(
2226*b1cdbd2cSJim Jagielski 
2227*b1cdbd2cSJim Jagielski 	sal_uInt16 , SfxItemState eState, const SfxPoolItem* pState )
2228*b1cdbd2cSJim Jagielski 
2229*b1cdbd2cSJim Jagielski {
2230*b1cdbd2cSJim Jagielski 	sal_uInt16 			     nId	= GetId();
2231*b1cdbd2cSJim Jagielski 	ToolBox&		     rTbx   = GetToolBox();
2232*b1cdbd2cSJim Jagielski     SvxFontNameBox_Impl* pBox   = (SvxFontNameBox_Impl*)(rTbx.GetItemWindow( nId ));
2233*b1cdbd2cSJim Jagielski 
2234*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pBox, "Control not found!" );
2235*b1cdbd2cSJim Jagielski 
2236*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_DISABLED == eState )
2237*b1cdbd2cSJim Jagielski 	{
2238*b1cdbd2cSJim Jagielski 		pBox->Disable();
2239*b1cdbd2cSJim Jagielski 		pBox->Update( (const SvxFontItem*)NULL );
2240*b1cdbd2cSJim Jagielski 	}
2241*b1cdbd2cSJim Jagielski 	else
2242*b1cdbd2cSJim Jagielski 	{
2243*b1cdbd2cSJim Jagielski 		pBox->Enable();
2244*b1cdbd2cSJim Jagielski 
2245*b1cdbd2cSJim Jagielski 		if ( SFX_ITEM_AVAILABLE == eState )
2246*b1cdbd2cSJim Jagielski 		{
2247*b1cdbd2cSJim Jagielski 			const SvxFontItem* pFontItem = dynamic_cast< const SvxFontItem* >( pState );
2248*b1cdbd2cSJim Jagielski 
2249*b1cdbd2cSJim Jagielski 			DBG_ASSERT( pFontItem, "svx::SvxFontNameToolBoxControl::StateChanged(), wrong item type!" );
2250*b1cdbd2cSJim Jagielski 			if( pFontItem )
2251*b1cdbd2cSJim Jagielski 				pBox->Update( pFontItem );
2252*b1cdbd2cSJim Jagielski 		}
2253*b1cdbd2cSJim Jagielski 		else
2254*b1cdbd2cSJim Jagielski 			pBox->SetText( String() );
2255*b1cdbd2cSJim Jagielski         pBox->SaveValue();
2256*b1cdbd2cSJim Jagielski 	}
2257*b1cdbd2cSJim Jagielski 
2258*b1cdbd2cSJim Jagielski 	rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2259*b1cdbd2cSJim Jagielski }
2260*b1cdbd2cSJim Jagielski 
2261*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2262*b1cdbd2cSJim Jagielski 
CreateItemWindow(Window * pParent)2263*b1cdbd2cSJim Jagielski Window* SvxFontNameToolBoxControl::CreateItemWindow( Window *pParent )
2264*b1cdbd2cSJim Jagielski {
2265*b1cdbd2cSJim Jagielski     SvxFontNameBox_Impl* pBox = new SvxFontNameBox_Impl( pParent,
2266*b1cdbd2cSJim Jagielski                                                          Reference< XDispatchProvider >( m_xFrame->getController(), UNO_QUERY ),
2267*b1cdbd2cSJim Jagielski                                                          m_xFrame,0);
2268*b1cdbd2cSJim Jagielski 	return pBox;
2269*b1cdbd2cSJim Jagielski }
2270*b1cdbd2cSJim Jagielski 
2271*b1cdbd2cSJim Jagielski //========================================================================
2272*b1cdbd2cSJim Jagielski // class SvxFontColorToolBoxControl --------------------------------------
2273*b1cdbd2cSJim Jagielski //========================================================================
2274*b1cdbd2cSJim Jagielski 
SvxFontColorToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2275*b1cdbd2cSJim Jagielski SvxFontColorToolBoxControl::SvxFontColorToolBoxControl(
2276*b1cdbd2cSJim Jagielski     sal_uInt16          nSlotId,
2277*b1cdbd2cSJim Jagielski     sal_uInt16			nId,
2278*b1cdbd2cSJim Jagielski 	ToolBox&		rTbx )
2279*b1cdbd2cSJim Jagielski 
2280*b1cdbd2cSJim Jagielski 	:	SfxToolBoxControl( nSlotId, nId, rTbx ),
2281*b1cdbd2cSJim Jagielski     pBtnUpdater( new ::svx::ToolboxButtonColorUpdater(
2282*b1cdbd2cSJim Jagielski                     nSlotId, nId, &GetToolBox(), TBX_UPDATER_MODE_CHAR_COLOR_NEW ))
2283*b1cdbd2cSJim Jagielski {
2284*b1cdbd2cSJim Jagielski 	rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
2285*b1cdbd2cSJim Jagielski }
2286*b1cdbd2cSJim Jagielski 
2287*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2288*b1cdbd2cSJim Jagielski 
~SvxFontColorToolBoxControl()2289*b1cdbd2cSJim Jagielski SvxFontColorToolBoxControl::~SvxFontColorToolBoxControl()
2290*b1cdbd2cSJim Jagielski {
2291*b1cdbd2cSJim Jagielski 	delete pBtnUpdater;
2292*b1cdbd2cSJim Jagielski }
2293*b1cdbd2cSJim Jagielski 
2294*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2295*b1cdbd2cSJim Jagielski 
GetPopupWindowType() const2296*b1cdbd2cSJim Jagielski SfxPopupWindowType SvxFontColorToolBoxControl::GetPopupWindowType() const
2297*b1cdbd2cSJim Jagielski {
2298*b1cdbd2cSJim Jagielski 	return SFX_POPUPWINDOW_ONCLICK;
2299*b1cdbd2cSJim Jagielski }
2300*b1cdbd2cSJim Jagielski 
2301*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2302*b1cdbd2cSJim Jagielski 
CreatePopupWindow()2303*b1cdbd2cSJim Jagielski SfxPopupWindow*	SvxFontColorToolBoxControl::CreatePopupWindow()
2304*b1cdbd2cSJim Jagielski {
2305*b1cdbd2cSJim Jagielski     SvxColorWindow_Impl* pColorWin =
2306*b1cdbd2cSJim Jagielski         new SvxColorWindow_Impl(
2307*b1cdbd2cSJim Jagielski                 OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Color" )),
2308*b1cdbd2cSJim Jagielski                 SID_ATTR_CHAR_COLOR,
2309*b1cdbd2cSJim Jagielski                 m_xFrame,
2310*b1cdbd2cSJim Jagielski                 SVX_RESSTR( RID_SVXITEMS_EXTRAS_CHARCOLOR ),
2311*b1cdbd2cSJim Jagielski                 &GetToolBox() );
2312*b1cdbd2cSJim Jagielski 
2313*b1cdbd2cSJim Jagielski     pColorWin->StartPopupMode( &GetToolBox(),
2314*b1cdbd2cSJim Jagielski         FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF );
2315*b1cdbd2cSJim Jagielski 	pColorWin->StartSelection();
2316*b1cdbd2cSJim Jagielski     SetPopupWindow( pColorWin );
2317*b1cdbd2cSJim Jagielski 	return pColorWin;
2318*b1cdbd2cSJim Jagielski }
2319*b1cdbd2cSJim Jagielski 
2320*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2321*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)2322*b1cdbd2cSJim Jagielski void SvxFontColorToolBoxControl::StateChanged(
2323*b1cdbd2cSJim Jagielski 
2324*b1cdbd2cSJim Jagielski 	sal_uInt16 , SfxItemState eState, const SfxPoolItem* pState )
2325*b1cdbd2cSJim Jagielski 
2326*b1cdbd2cSJim Jagielski {
2327*b1cdbd2cSJim Jagielski 	sal_uInt16 nId = GetId();
2328*b1cdbd2cSJim Jagielski 	ToolBox& rTbx = GetToolBox();
2329*b1cdbd2cSJim Jagielski 	const SvxColorItem*	pItem = 0;
2330*b1cdbd2cSJim Jagielski 
2331*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_DONTCARE != eState )
2332*b1cdbd2cSJim Jagielski 	   pItem = PTR_CAST( SvxColorItem, pState );
2333*b1cdbd2cSJim Jagielski 
2334*b1cdbd2cSJim Jagielski 	if ( pItem )
2335*b1cdbd2cSJim Jagielski 		pBtnUpdater->Update( pItem->GetValue());
2336*b1cdbd2cSJim Jagielski 
2337*b1cdbd2cSJim Jagielski 	rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2338*b1cdbd2cSJim Jagielski 	rTbx.SetItemState( nId, ( SFX_ITEM_DONTCARE == eState ) ? STATE_DONTKNOW : STATE_NOCHECK );
2339*b1cdbd2cSJim Jagielski }
2340*b1cdbd2cSJim Jagielski 
2341*b1cdbd2cSJim Jagielski //========================================================================
2342*b1cdbd2cSJim Jagielski // class SvxColorToolBoxControl --------------------------------
2343*b1cdbd2cSJim Jagielski //========================================================================
2344*b1cdbd2cSJim Jagielski 
SvxColorToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2345*b1cdbd2cSJim Jagielski SvxColorToolBoxControl::SvxColorToolBoxControl(	sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
2346*b1cdbd2cSJim Jagielski 
2347*b1cdbd2cSJim Jagielski 	SfxToolBoxControl( nSlotId, nId, rTbx )
2348*b1cdbd2cSJim Jagielski {
2349*b1cdbd2cSJim Jagielski     if ( nSlotId == SID_BACKGROUND_COLOR )
2350*b1cdbd2cSJim Jagielski         rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) );
2351*b1cdbd2cSJim Jagielski     else
2352*b1cdbd2cSJim Jagielski         rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
2353*b1cdbd2cSJim Jagielski 	rTbx.Invalidate();
2354*b1cdbd2cSJim Jagielski     pBtnUpdater = new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() );
2355*b1cdbd2cSJim Jagielski }
2356*b1cdbd2cSJim Jagielski 
2357*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2358*b1cdbd2cSJim Jagielski 
~SvxColorToolBoxControl()2359*b1cdbd2cSJim Jagielski SvxColorToolBoxControl::~SvxColorToolBoxControl()
2360*b1cdbd2cSJim Jagielski {
2361*b1cdbd2cSJim Jagielski 	delete pBtnUpdater;
2362*b1cdbd2cSJim Jagielski }
2363*b1cdbd2cSJim Jagielski 
2364*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2365*b1cdbd2cSJim Jagielski 
GetPopupWindowType() const2366*b1cdbd2cSJim Jagielski SfxPopupWindowType SvxColorToolBoxControl::GetPopupWindowType() const
2367*b1cdbd2cSJim Jagielski {
2368*b1cdbd2cSJim Jagielski 	return SFX_POPUPWINDOW_ONCLICK;
2369*b1cdbd2cSJim Jagielski }
2370*b1cdbd2cSJim Jagielski 
2371*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2372*b1cdbd2cSJim Jagielski 
CreatePopupWindow()2373*b1cdbd2cSJim Jagielski SfxPopupWindow*	SvxColorToolBoxControl::CreatePopupWindow()
2374*b1cdbd2cSJim Jagielski {
2375*b1cdbd2cSJim Jagielski 	sal_uInt16 nResId = GetSlotId() == SID_BACKGROUND_COLOR ?
2376*b1cdbd2cSJim Jagielski 						RID_SVXSTR_BACKGROUND : RID_SVXSTR_COLOR;
2377*b1cdbd2cSJim Jagielski     SvxColorWindow_Impl* pColorWin = new SvxColorWindow_Impl(
2378*b1cdbd2cSJim Jagielski         OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:BackgroundColor" )),
2379*b1cdbd2cSJim Jagielski 									SID_BACKGROUND_COLOR,
2380*b1cdbd2cSJim Jagielski                                     m_xFrame,
2381*b1cdbd2cSJim Jagielski 									SVX_RESSTR(nResId),
2382*b1cdbd2cSJim Jagielski                                     &GetToolBox() );
2383*b1cdbd2cSJim Jagielski 
2384*b1cdbd2cSJim Jagielski     pColorWin->StartPopupMode( &GetToolBox(),
2385*b1cdbd2cSJim Jagielski         FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF );
2386*b1cdbd2cSJim Jagielski 	pColorWin->StartSelection();
2387*b1cdbd2cSJim Jagielski     SetPopupWindow( pColorWin );
2388*b1cdbd2cSJim Jagielski 	return pColorWin;
2389*b1cdbd2cSJim Jagielski }
2390*b1cdbd2cSJim Jagielski 
2391*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2392*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)2393*b1cdbd2cSJim Jagielski void SvxColorToolBoxControl::StateChanged(
2394*b1cdbd2cSJim Jagielski 
2395*b1cdbd2cSJim Jagielski 	sal_uInt16 , SfxItemState eState, const SfxPoolItem* pState )
2396*b1cdbd2cSJim Jagielski 
2397*b1cdbd2cSJim Jagielski {
2398*b1cdbd2cSJim Jagielski 	const SvxColorItem*	pItem	= 0;
2399*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_DONTCARE != eState )
2400*b1cdbd2cSJim Jagielski 		pItem = PTR_CAST( SvxColorItem, pState );
2401*b1cdbd2cSJim Jagielski 
2402*b1cdbd2cSJim Jagielski 	if ( pItem )
2403*b1cdbd2cSJim Jagielski 		pBtnUpdater->Update( pItem->GetValue() );
2404*b1cdbd2cSJim Jagielski 
2405*b1cdbd2cSJim Jagielski 	sal_uInt16 nId = GetId();
2406*b1cdbd2cSJim Jagielski 	ToolBox& rTbx = GetToolBox();
2407*b1cdbd2cSJim Jagielski 	rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2408*b1cdbd2cSJim Jagielski 	rTbx.SetItemState( nId, ( SFX_ITEM_DONTCARE == eState ) ? STATE_DONTKNOW : STATE_NOCHECK );
2409*b1cdbd2cSJim Jagielski }
2410*b1cdbd2cSJim Jagielski 
2411*b1cdbd2cSJim Jagielski //========================================================================
2412*b1cdbd2cSJim Jagielski // class SvxFontColorExtToolBoxControl --------------------------------------
2413*b1cdbd2cSJim Jagielski //========================================================================
2414*b1cdbd2cSJim Jagielski 
SvxFontColorExtToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2415*b1cdbd2cSJim Jagielski SvxFontColorExtToolBoxControl::SvxFontColorExtToolBoxControl(
2416*b1cdbd2cSJim Jagielski 	sal_uInt16 nSlotId,
2417*b1cdbd2cSJim Jagielski     sal_uInt16 nId,
2418*b1cdbd2cSJim Jagielski 	ToolBox& rTbx ) :
2419*b1cdbd2cSJim Jagielski 
2420*b1cdbd2cSJim Jagielski 	SfxToolBoxControl( nSlotId, nId, rTbx ),
2421*b1cdbd2cSJim Jagielski 	pBtnUpdater(0)
2422*b1cdbd2cSJim Jagielski {
2423*b1cdbd2cSJim Jagielski 	rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
2424*b1cdbd2cSJim Jagielski     // The following commands are available at the writer module.
2425*b1cdbd2cSJim Jagielski     if ( SID_ATTR_CHAR_COLOR2 == nSlotId )
2426*b1cdbd2cSJim Jagielski         addStatusListener( OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:CharColorExt" )));
2427*b1cdbd2cSJim Jagielski     else
2428*b1cdbd2cSJim Jagielski         addStatusListener( OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:CharBackgroundExt" )));
2429*b1cdbd2cSJim Jagielski 
2430*b1cdbd2cSJim Jagielski     sal_uInt16 nMode =	SID_ATTR_CHAR_COLOR2 == nSlotId
2431*b1cdbd2cSJim Jagielski 		? TBX_UPDATER_MODE_CHAR_COLOR_NEW :	TBX_UPDATER_MODE_CHAR_COLOR_NEW;
2432*b1cdbd2cSJim Jagielski     pBtnUpdater = new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox(), nMode );
2433*b1cdbd2cSJim Jagielski }
2434*b1cdbd2cSJim Jagielski 
2435*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2436*b1cdbd2cSJim Jagielski 
~SvxFontColorExtToolBoxControl()2437*b1cdbd2cSJim Jagielski SvxFontColorExtToolBoxControl::~SvxFontColorExtToolBoxControl()
2438*b1cdbd2cSJim Jagielski {
2439*b1cdbd2cSJim Jagielski 	delete pBtnUpdater;
2440*b1cdbd2cSJim Jagielski }
2441*b1cdbd2cSJim Jagielski 
2442*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2443*b1cdbd2cSJim Jagielski 
GetPopupWindowType() const2444*b1cdbd2cSJim Jagielski SfxPopupWindowType SvxFontColorExtToolBoxControl::GetPopupWindowType() const
2445*b1cdbd2cSJim Jagielski {
2446*b1cdbd2cSJim Jagielski 	return SFX_POPUPWINDOW_ONTIMEOUT;
2447*b1cdbd2cSJim Jagielski }
2448*b1cdbd2cSJim Jagielski 
2449*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2450*b1cdbd2cSJim Jagielski 
CreatePopupWindow()2451*b1cdbd2cSJim Jagielski SfxPopupWindow*	SvxFontColorExtToolBoxControl::CreatePopupWindow()
2452*b1cdbd2cSJim Jagielski {
2453*b1cdbd2cSJim Jagielski     SvxColorWindow_Impl* pColorWin =
2454*b1cdbd2cSJim Jagielski         new SvxColorWindow_Impl(
2455*b1cdbd2cSJim Jagielski                             m_aCommandURL,
2456*b1cdbd2cSJim Jagielski                             GetSlotId(),
2457*b1cdbd2cSJim Jagielski                             m_xFrame,
2458*b1cdbd2cSJim Jagielski 							SVX_RESSTR( RID_SVXITEMS_EXTRAS_CHARCOLOR ),
2459*b1cdbd2cSJim Jagielski                             &GetToolBox() );
2460*b1cdbd2cSJim Jagielski 
2461*b1cdbd2cSJim Jagielski 	if ( GetSlotId() == SID_ATTR_CHAR_COLOR_BACKGROUND )
2462*b1cdbd2cSJim Jagielski 		pColorWin->SetText( SVX_RESSTR( RID_SVXSTR_EXTRAS_CHARBACKGROUND ) );
2463*b1cdbd2cSJim Jagielski 
2464*b1cdbd2cSJim Jagielski     pColorWin->StartPopupMode( &GetToolBox(),
2465*b1cdbd2cSJim Jagielski         FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF );
2466*b1cdbd2cSJim Jagielski 	pColorWin->StartSelection();
2467*b1cdbd2cSJim Jagielski     SetPopupWindow( pColorWin );
2468*b1cdbd2cSJim Jagielski 	return pColorWin;
2469*b1cdbd2cSJim Jagielski }
2470*b1cdbd2cSJim Jagielski 
2471*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2472*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)2473*b1cdbd2cSJim Jagielski void SvxFontColorExtToolBoxControl::StateChanged(
2474*b1cdbd2cSJim Jagielski 
2475*b1cdbd2cSJim Jagielski 	sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
2476*b1cdbd2cSJim Jagielski 
2477*b1cdbd2cSJim Jagielski {
2478*b1cdbd2cSJim Jagielski 	sal_uInt16 nId = GetId();
2479*b1cdbd2cSJim Jagielski 	ToolBox& rTbx = GetToolBox();
2480*b1cdbd2cSJim Jagielski 	const SvxColorItem*	pItem = 0;
2481*b1cdbd2cSJim Jagielski 
2482*b1cdbd2cSJim Jagielski 	if ( nSID == SID_ATTR_CHAR_COLOR_EXT ||
2483*b1cdbd2cSJim Jagielski 		 nSID == SID_ATTR_CHAR_COLOR_BACKGROUND_EXT )
2484*b1cdbd2cSJim Jagielski 	{
2485*b1cdbd2cSJim Jagielski 		if ( SFX_ITEM_DONTCARE != eState )
2486*b1cdbd2cSJim Jagielski 		{
2487*b1cdbd2cSJim Jagielski 			const SfxBoolItem* pBool = PTR_CAST( SfxBoolItem, pState );
2488*b1cdbd2cSJim Jagielski 			rTbx.CheckItem( nId, pBool && pBool->GetValue());
2489*b1cdbd2cSJim Jagielski 		}
2490*b1cdbd2cSJim Jagielski 		rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2491*b1cdbd2cSJim Jagielski 	}
2492*b1cdbd2cSJim Jagielski 	else
2493*b1cdbd2cSJim Jagielski 	{
2494*b1cdbd2cSJim Jagielski 		if ( SFX_ITEM_DONTCARE != eState )
2495*b1cdbd2cSJim Jagielski 		   pItem = PTR_CAST( SvxColorItem, pState );
2496*b1cdbd2cSJim Jagielski 
2497*b1cdbd2cSJim Jagielski 		if ( pItem )
2498*b1cdbd2cSJim Jagielski 			pBtnUpdater->Update( pItem->GetValue() );
2499*b1cdbd2cSJim Jagielski 	}
2500*b1cdbd2cSJim Jagielski }
2501*b1cdbd2cSJim Jagielski 
2502*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2503*b1cdbd2cSJim Jagielski 
Select(sal_Bool)2504*b1cdbd2cSJim Jagielski void SvxFontColorExtToolBoxControl::Select( sal_Bool )
2505*b1cdbd2cSJim Jagielski {
2506*b1cdbd2cSJim Jagielski     OUString aCommand;
2507*b1cdbd2cSJim Jagielski     OUString aParamName;
2508*b1cdbd2cSJim Jagielski     if ( SID_ATTR_CHAR_COLOR2 == GetSlotId() )
2509*b1cdbd2cSJim Jagielski     {
2510*b1cdbd2cSJim Jagielski         aCommand    = OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:CharColorExt" ));
2511*b1cdbd2cSJim Jagielski         aParamName  = OUString( RTL_CONSTASCII_USTRINGPARAM( "CharColorExt" ));
2512*b1cdbd2cSJim Jagielski     }
2513*b1cdbd2cSJim Jagielski     else
2514*b1cdbd2cSJim Jagielski     {
2515*b1cdbd2cSJim Jagielski         aCommand    = OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:CharBackgroundExt" ));
2516*b1cdbd2cSJim Jagielski         aParamName  = OUString( RTL_CONSTASCII_USTRINGPARAM( "CharBackgroundExt" ));
2517*b1cdbd2cSJim Jagielski     }
2518*b1cdbd2cSJim Jagielski 
2519*b1cdbd2cSJim Jagielski     Sequence< PropertyValue > aArgs( 1 );
2520*b1cdbd2cSJim Jagielski     aArgs[0].Name  = aParamName;
2521*b1cdbd2cSJim Jagielski     aArgs[0].Value = makeAny( GetToolBox().IsItemChecked( GetId() ));
2522*b1cdbd2cSJim Jagielski     Dispatch( aCommand, aArgs );
2523*b1cdbd2cSJim Jagielski }
2524*b1cdbd2cSJim Jagielski 
2525*b1cdbd2cSJim Jagielski //========================================================================
2526*b1cdbd2cSJim Jagielski // class SvxFrameToolBoxControl ------------------------------------------
2527*b1cdbd2cSJim Jagielski //========================================================================
2528*b1cdbd2cSJim Jagielski 
SvxFrameToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2529*b1cdbd2cSJim Jagielski SvxFrameToolBoxControl::SvxFrameToolBoxControl(
2530*b1cdbd2cSJim Jagielski     sal_uInt16      nSlotId,
2531*b1cdbd2cSJim Jagielski     sal_uInt16      nId,
2532*b1cdbd2cSJim Jagielski 	ToolBox&    rTbx )
2533*b1cdbd2cSJim Jagielski 
2534*b1cdbd2cSJim Jagielski     :   SfxToolBoxControl( nSlotId, nId, rTbx )
2535*b1cdbd2cSJim Jagielski {
2536*b1cdbd2cSJim Jagielski 	rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) );
2537*b1cdbd2cSJim Jagielski }
2538*b1cdbd2cSJim Jagielski 
2539*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2540*b1cdbd2cSJim Jagielski 
GetPopupWindowType() const2541*b1cdbd2cSJim Jagielski SfxPopupWindowType SvxFrameToolBoxControl::GetPopupWindowType() const
2542*b1cdbd2cSJim Jagielski {
2543*b1cdbd2cSJim Jagielski 	return SFX_POPUPWINDOW_ONCLICK;
2544*b1cdbd2cSJim Jagielski }
2545*b1cdbd2cSJim Jagielski 
2546*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2547*b1cdbd2cSJim Jagielski 
CreatePopupWindow()2548*b1cdbd2cSJim Jagielski SfxPopupWindow*	SvxFrameToolBoxControl::CreatePopupWindow()
2549*b1cdbd2cSJim Jagielski {
2550*b1cdbd2cSJim Jagielski     SvxFrameWindow_Impl* pFrameWin = new SvxFrameWindow_Impl(
2551*b1cdbd2cSJim Jagielski                                         GetSlotId(), m_xFrame, &GetToolBox() );
2552*b1cdbd2cSJim Jagielski 
2553*b1cdbd2cSJim Jagielski 	pFrameWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS | FLOATWIN_POPUPMODE_ALLOWTEAROFF );
2554*b1cdbd2cSJim Jagielski 	pFrameWin->StartSelection();
2555*b1cdbd2cSJim Jagielski     SetPopupWindow( pFrameWin );
2556*b1cdbd2cSJim Jagielski 
2557*b1cdbd2cSJim Jagielski 	return pFrameWin;
2558*b1cdbd2cSJim Jagielski }
2559*b1cdbd2cSJim Jagielski 
2560*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2561*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem *)2562*b1cdbd2cSJim Jagielski void SvxFrameToolBoxControl::StateChanged(
2563*b1cdbd2cSJim Jagielski 
2564*b1cdbd2cSJim Jagielski 	sal_uInt16, SfxItemState eState, const SfxPoolItem*  )
2565*b1cdbd2cSJim Jagielski 
2566*b1cdbd2cSJim Jagielski {
2567*b1cdbd2cSJim Jagielski 	sal_uInt16 					nId		= GetId();
2568*b1cdbd2cSJim Jagielski 	ToolBox&	 			rTbx	= GetToolBox();
2569*b1cdbd2cSJim Jagielski 
2570*b1cdbd2cSJim Jagielski     rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2571*b1cdbd2cSJim Jagielski     rTbx.SetItemState( nId, (SFX_ITEM_DONTCARE == eState)
2572*b1cdbd2cSJim Jagielski                             ? STATE_DONTKNOW
2573*b1cdbd2cSJim Jagielski                             : STATE_NOCHECK );
2574*b1cdbd2cSJim Jagielski }
2575*b1cdbd2cSJim Jagielski 
2576*b1cdbd2cSJim Jagielski //========================================================================
2577*b1cdbd2cSJim Jagielski // class SvxFrameLineStyleToolBoxControl ---------------------------------
2578*b1cdbd2cSJim Jagielski //========================================================================
2579*b1cdbd2cSJim Jagielski 
SvxFrameLineStyleToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2580*b1cdbd2cSJim Jagielski SvxFrameLineStyleToolBoxControl::SvxFrameLineStyleToolBoxControl(
2581*b1cdbd2cSJim Jagielski     sal_uInt16          nSlotId,
2582*b1cdbd2cSJim Jagielski     sal_uInt16   		nId,
2583*b1cdbd2cSJim Jagielski 	ToolBox& 		rTbx )
2584*b1cdbd2cSJim Jagielski 
2585*b1cdbd2cSJim Jagielski 	:    SfxToolBoxControl( nSlotId, nId, rTbx )
2586*b1cdbd2cSJim Jagielski {
2587*b1cdbd2cSJim Jagielski 	rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) );
2588*b1cdbd2cSJim Jagielski }
2589*b1cdbd2cSJim Jagielski 
2590*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2591*b1cdbd2cSJim Jagielski 
GetPopupWindowType() const2592*b1cdbd2cSJim Jagielski SfxPopupWindowType SvxFrameLineStyleToolBoxControl::GetPopupWindowType() const
2593*b1cdbd2cSJim Jagielski {
2594*b1cdbd2cSJim Jagielski 	return SFX_POPUPWINDOW_ONCLICK;
2595*b1cdbd2cSJim Jagielski }
2596*b1cdbd2cSJim Jagielski 
2597*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2598*b1cdbd2cSJim Jagielski 
CreatePopupWindow()2599*b1cdbd2cSJim Jagielski SfxPopupWindow*	SvxFrameLineStyleToolBoxControl::CreatePopupWindow()
2600*b1cdbd2cSJim Jagielski {
2601*b1cdbd2cSJim Jagielski 	SvxLineWindow_Impl* pLineWin = new SvxLineWindow_Impl( GetSlotId(), m_xFrame, &GetToolBox() );
2602*b1cdbd2cSJim Jagielski 	pLineWin->StartPopupMode( &GetToolBox(), sal_True );
2603*b1cdbd2cSJim Jagielski 	pLineWin->StartSelection();
2604*b1cdbd2cSJim Jagielski     SetPopupWindow( pLineWin );
2605*b1cdbd2cSJim Jagielski 
2606*b1cdbd2cSJim Jagielski 	return pLineWin;
2607*b1cdbd2cSJim Jagielski }
2608*b1cdbd2cSJim Jagielski 
2609*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2610*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem *)2611*b1cdbd2cSJim Jagielski void SvxFrameLineStyleToolBoxControl::StateChanged(
2612*b1cdbd2cSJim Jagielski 
2613*b1cdbd2cSJim Jagielski 	sal_uInt16 , SfxItemState eState, const SfxPoolItem*  )
2614*b1cdbd2cSJim Jagielski {
2615*b1cdbd2cSJim Jagielski 	sal_uInt16 		 nId	= GetId();
2616*b1cdbd2cSJim Jagielski 	ToolBox&	 rTbx   = GetToolBox();
2617*b1cdbd2cSJim Jagielski 
2618*b1cdbd2cSJim Jagielski 	rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2619*b1cdbd2cSJim Jagielski 	rTbx.SetItemState( nId, (SFX_ITEM_DONTCARE == eState)
2620*b1cdbd2cSJim Jagielski 								? STATE_DONTKNOW
2621*b1cdbd2cSJim Jagielski 								: STATE_NOCHECK );
2622*b1cdbd2cSJim Jagielski }
2623*b1cdbd2cSJim Jagielski 
2624*b1cdbd2cSJim Jagielski //========================================================================
2625*b1cdbd2cSJim Jagielski // class SvxFrameLineColorToolBoxControl ---------------------------------
2626*b1cdbd2cSJim Jagielski //========================================================================
2627*b1cdbd2cSJim Jagielski 
SvxFrameLineColorToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2628*b1cdbd2cSJim Jagielski SvxFrameLineColorToolBoxControl::SvxFrameLineColorToolBoxControl(
2629*b1cdbd2cSJim Jagielski 	sal_uInt16      nSlotId,
2630*b1cdbd2cSJim Jagielski     sal_uInt16      nId,
2631*b1cdbd2cSJim Jagielski 	ToolBox&    rTbx ) :
2632*b1cdbd2cSJim Jagielski 
2633*b1cdbd2cSJim Jagielski     SfxToolBoxControl( nSlotId, nId, rTbx ),
2634*b1cdbd2cSJim Jagielski     pBtnUpdater(new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() ))
2635*b1cdbd2cSJim Jagielski {
2636*b1cdbd2cSJim Jagielski 	rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) );
2637*b1cdbd2cSJim Jagielski }
2638*b1cdbd2cSJim Jagielski 
2639*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2640*b1cdbd2cSJim Jagielski 
~SvxFrameLineColorToolBoxControl()2641*b1cdbd2cSJim Jagielski SvxFrameLineColorToolBoxControl::~SvxFrameLineColorToolBoxControl()
2642*b1cdbd2cSJim Jagielski {
2643*b1cdbd2cSJim Jagielski 
2644*b1cdbd2cSJim Jagielski     delete pBtnUpdater;
2645*b1cdbd2cSJim Jagielski }
2646*b1cdbd2cSJim Jagielski 
2647*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2648*b1cdbd2cSJim Jagielski 
GetPopupWindowType() const2649*b1cdbd2cSJim Jagielski SfxPopupWindowType SvxFrameLineColorToolBoxControl::GetPopupWindowType() const
2650*b1cdbd2cSJim Jagielski {
2651*b1cdbd2cSJim Jagielski 	return SFX_POPUPWINDOW_ONCLICK;
2652*b1cdbd2cSJim Jagielski }
2653*b1cdbd2cSJim Jagielski 
2654*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2655*b1cdbd2cSJim Jagielski 
CreatePopupWindow()2656*b1cdbd2cSJim Jagielski SfxPopupWindow*	SvxFrameLineColorToolBoxControl::CreatePopupWindow()
2657*b1cdbd2cSJim Jagielski {
2658*b1cdbd2cSJim Jagielski     SvxColorWindow_Impl* pColorWin = new SvxColorWindow_Impl(
2659*b1cdbd2cSJim Jagielski                                         OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FrameLineColor" )),
2660*b1cdbd2cSJim Jagielski 									    SID_FRAME_LINECOLOR,
2661*b1cdbd2cSJim Jagielski                                         m_xFrame,
2662*b1cdbd2cSJim Jagielski 									    SVX_RESSTR(RID_SVXSTR_FRAME_COLOR),
2663*b1cdbd2cSJim Jagielski                                         &GetToolBox() );
2664*b1cdbd2cSJim Jagielski 
2665*b1cdbd2cSJim Jagielski     pColorWin->StartPopupMode( &GetToolBox(),
2666*b1cdbd2cSJim Jagielski         FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF );
2667*b1cdbd2cSJim Jagielski 	pColorWin->StartSelection();
2668*b1cdbd2cSJim Jagielski     SetPopupWindow( pColorWin );
2669*b1cdbd2cSJim Jagielski 	return pColorWin;
2670*b1cdbd2cSJim Jagielski }
2671*b1cdbd2cSJim Jagielski 
2672*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2673*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)2674*b1cdbd2cSJim Jagielski void SvxFrameLineColorToolBoxControl::StateChanged(
2675*b1cdbd2cSJim Jagielski 
2676*b1cdbd2cSJim Jagielski 	sal_uInt16 , SfxItemState eState, const SfxPoolItem* pState )
2677*b1cdbd2cSJim Jagielski 
2678*b1cdbd2cSJim Jagielski {
2679*b1cdbd2cSJim Jagielski 	sal_uInt16 nId = GetId();
2680*b1cdbd2cSJim Jagielski 	ToolBox& rTbx = GetToolBox();
2681*b1cdbd2cSJim Jagielski 	rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
2682*b1cdbd2cSJim Jagielski 	rTbx.SetItemState( nId, ( SFX_ITEM_DONTCARE == eState ) ? STATE_DONTKNOW : STATE_NOCHECK );
2683*b1cdbd2cSJim Jagielski 
2684*b1cdbd2cSJim Jagielski     const SvxColorItem* pItem = 0;
2685*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_DONTCARE != eState )
2686*b1cdbd2cSJim Jagielski     {
2687*b1cdbd2cSJim Jagielski 	   pItem = PTR_CAST( SvxColorItem, pState );
2688*b1cdbd2cSJim Jagielski         if ( pItem )
2689*b1cdbd2cSJim Jagielski             pBtnUpdater->Update( pItem->GetValue());
2690*b1cdbd2cSJim Jagielski     }
2691*b1cdbd2cSJim Jagielski }
2692*b1cdbd2cSJim Jagielski 
2693*b1cdbd2cSJim Jagielski // class SvxReloadControllerItem_Impl ------------------------------------
2694*b1cdbd2cSJim Jagielski 
2695*b1cdbd2cSJim Jagielski class SvxReloadControllerItem_Impl
2696*b1cdbd2cSJim Jagielski {
2697*b1cdbd2cSJim Jagielski public:
2698*b1cdbd2cSJim Jagielski 	Image* pNormalImage;
2699*b1cdbd2cSJim Jagielski 	Image* pSpecialImage;
2700*b1cdbd2cSJim Jagielski 
SvxReloadControllerItem_Impl()2701*b1cdbd2cSJim Jagielski 	SvxReloadControllerItem_Impl() :
2702*b1cdbd2cSJim Jagielski 		pNormalImage( new Image( SVX_RES( RID_SVX_RELOAD_NORMAL ) ) ), pSpecialImage( 0 ) {}
~SvxReloadControllerItem_Impl()2703*b1cdbd2cSJim Jagielski 	~SvxReloadControllerItem_Impl() { delete pNormalImage; delete pSpecialImage; }
2704*b1cdbd2cSJim Jagielski 
GetNormalImage()2705*b1cdbd2cSJim Jagielski 	Image& GetNormalImage() { return *pNormalImage; }
GetSpecialImage()2706*b1cdbd2cSJim Jagielski 	Image& GetSpecialImage()
2707*b1cdbd2cSJim Jagielski 		{
2708*b1cdbd2cSJim Jagielski 			if ( !pSpecialImage )
2709*b1cdbd2cSJim Jagielski 				pSpecialImage = new Image( SVX_RES( RID_SVX_RELOAD_SPECIAL ) );
2710*b1cdbd2cSJim Jagielski 			return *pSpecialImage;
2711*b1cdbd2cSJim Jagielski 		}
2712*b1cdbd2cSJim Jagielski };
2713*b1cdbd2cSJim Jagielski 
2714*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2715*b1cdbd2cSJim Jagielski 
SvxReloadControllerItem(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2716*b1cdbd2cSJim Jagielski SvxReloadControllerItem::SvxReloadControllerItem( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
2717*b1cdbd2cSJim Jagielski :	SfxToolBoxControl( nSlotId, nId, rTbx )
2718*b1cdbd2cSJim Jagielski ,	pImpl( new SvxReloadControllerItem_Impl )
2719*b1cdbd2cSJim Jagielski {
2720*b1cdbd2cSJim Jagielski 	rTbx.SetItemImage( nId, pImpl->GetNormalImage() );
2721*b1cdbd2cSJim Jagielski }
2722*b1cdbd2cSJim Jagielski 
2723*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2724*b1cdbd2cSJim Jagielski 
~SvxReloadControllerItem()2725*b1cdbd2cSJim Jagielski SvxReloadControllerItem::~SvxReloadControllerItem()
2726*b1cdbd2cSJim Jagielski {
2727*b1cdbd2cSJim Jagielski 	delete pImpl;
2728*b1cdbd2cSJim Jagielski }
2729*b1cdbd2cSJim Jagielski 
2730*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2731*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)2732*b1cdbd2cSJim Jagielski void SvxReloadControllerItem::StateChanged(
2733*b1cdbd2cSJim Jagielski 	sal_uInt16 , SfxItemState eState, const SfxPoolItem* pState )
2734*b1cdbd2cSJim Jagielski {
2735*b1cdbd2cSJim Jagielski 	SfxBoolItem* pItem = PTR_CAST( SfxBoolItem, pState );
2736*b1cdbd2cSJim Jagielski 	ToolBox& rBox = GetToolBox();
2737*b1cdbd2cSJim Jagielski 	if( pItem )
2738*b1cdbd2cSJim Jagielski 	{
2739*b1cdbd2cSJim Jagielski 		rBox.SetItemImage( GetId(),
2740*b1cdbd2cSJim Jagielski 				pItem->GetValue() ? pImpl->GetSpecialImage() :
2741*b1cdbd2cSJim Jagielski 				pImpl->GetNormalImage() );
2742*b1cdbd2cSJim Jagielski 	}
2743*b1cdbd2cSJim Jagielski 	rBox.EnableItem( GetId(), eState != SFX_ITEM_DISABLED );
2744*b1cdbd2cSJim Jagielski }
2745*b1cdbd2cSJim Jagielski 
2746*b1cdbd2cSJim Jagielski //========================================================================
2747*b1cdbd2cSJim Jagielski // class SvxSimpleUndoRedoController -------------------------------------
2748*b1cdbd2cSJim Jagielski //========================================================================
2749*b1cdbd2cSJim Jagielski 
SvxSimpleUndoRedoController(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)2750*b1cdbd2cSJim Jagielski SvxSimpleUndoRedoController::SvxSimpleUndoRedoController( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx  )
2751*b1cdbd2cSJim Jagielski     :SfxToolBoxControl( nSlotId, nId, rTbx )
2752*b1cdbd2cSJim Jagielski {
2753*b1cdbd2cSJim Jagielski     aDefaultText = rTbx.GetItemText( nId );
2754*b1cdbd2cSJim Jagielski }
2755*b1cdbd2cSJim Jagielski 
2756*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2757*b1cdbd2cSJim Jagielski 
~SvxSimpleUndoRedoController()2758*b1cdbd2cSJim Jagielski SvxSimpleUndoRedoController::~SvxSimpleUndoRedoController()
2759*b1cdbd2cSJim Jagielski {
2760*b1cdbd2cSJim Jagielski }
2761*b1cdbd2cSJim Jagielski 
2762*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2763*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)2764*b1cdbd2cSJim Jagielski void SvxSimpleUndoRedoController::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
2765*b1cdbd2cSJim Jagielski {
2766*b1cdbd2cSJim Jagielski     SfxStringItem* pItem = PTR_CAST( SfxStringItem, pState );
2767*b1cdbd2cSJim Jagielski     ToolBox& rBox = GetToolBox();
2768*b1cdbd2cSJim Jagielski     if ( pItem && eState != SFX_ITEM_DISABLED )
2769*b1cdbd2cSJim Jagielski     {
2770*b1cdbd2cSJim Jagielski         ::rtl::OUString aNewText( MnemonicGenerator::EraseAllMnemonicChars( pItem->GetValue() ) );
2771*b1cdbd2cSJim Jagielski         rBox.SetQuickHelpText( GetId(), aNewText );
2772*b1cdbd2cSJim Jagielski     }
2773*b1cdbd2cSJim Jagielski     if ( eState == SFX_ITEM_DISABLED )
2774*b1cdbd2cSJim Jagielski         rBox.SetQuickHelpText( GetId(), aDefaultText );
2775*b1cdbd2cSJim Jagielski     rBox.EnableItem( GetId(), eState != SFX_ITEM_DISABLED );
2776*b1cdbd2cSJim Jagielski }
2777*b1cdbd2cSJim Jagielski 
2778*b1cdbd2cSJim Jagielski //========================================================================
2779*b1cdbd2cSJim Jagielski 
lcl_ResizeValueSet(Window & rWin,ValueSet & rValueSet)2780*b1cdbd2cSJim Jagielski void lcl_ResizeValueSet( Window &rWin, ValueSet &rValueSet )
2781*b1cdbd2cSJim Jagielski {
2782*b1cdbd2cSJim Jagielski 	Size aSize = rWin.GetOutputSizePixel();
2783*b1cdbd2cSJim Jagielski 	aSize.Width()  -= 4;
2784*b1cdbd2cSJim Jagielski 	aSize.Height() -= 4;
2785*b1cdbd2cSJim Jagielski 	rValueSet.SetPosSizePixel( Point(2,2), aSize );
2786*b1cdbd2cSJim Jagielski }
2787*b1cdbd2cSJim Jagielski 
2788*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2789*b1cdbd2cSJim Jagielski 
lcl_CalcSizeValueSet(Window & rWin,ValueSet & rValueSet,const Size & aItemSize)2790*b1cdbd2cSJim Jagielski void lcl_CalcSizeValueSet( Window &rWin, ValueSet &rValueSet, const Size &aItemSize )
2791*b1cdbd2cSJim Jagielski {
2792*b1cdbd2cSJim Jagielski 	Size aSize = rValueSet.CalcWindowSizePixel( aItemSize );
2793*b1cdbd2cSJim Jagielski 	aSize.Width()  += 4;
2794*b1cdbd2cSJim Jagielski 	aSize.Height() += 4;
2795*b1cdbd2cSJim Jagielski 	rWin.SetOutputSizePixel( aSize );
2796*b1cdbd2cSJim Jagielski }
2797*b1cdbd2cSJim Jagielski 
2798*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
2799*b1cdbd2cSJim Jagielski 
lcl_FontChangedHint(const SfxHint & rHint)2800*b1cdbd2cSJim Jagielski sal_Bool lcl_FontChangedHint( const SfxHint &rHint )
2801*b1cdbd2cSJim Jagielski {
2802*b1cdbd2cSJim Jagielski 	SfxPoolItemHint *pItemHint = PTR_CAST(SfxPoolItemHint, &rHint);
2803*b1cdbd2cSJim Jagielski 	if ( pItemHint )
2804*b1cdbd2cSJim Jagielski 	{
2805*b1cdbd2cSJim Jagielski 		SfxPoolItem *pItem = pItemHint->GetObject();
2806*b1cdbd2cSJim Jagielski 		return ( pItem->Which() == SID_ATTR_CHAR_FONTLIST );
2807*b1cdbd2cSJim Jagielski 	}
2808*b1cdbd2cSJim Jagielski 	else
2809*b1cdbd2cSJim Jagielski 	{
2810*b1cdbd2cSJim Jagielski 		SfxSimpleHint* pSimpleHint = PTR_CAST(SfxSimpleHint, &rHint);
2811*b1cdbd2cSJim Jagielski 		return pSimpleHint && ( SFX_HINT_DATACHANGED ==
2812*b1cdbd2cSJim Jagielski 							( pSimpleHint->GetId() & SFX_HINT_DATACHANGED ) );
2813*b1cdbd2cSJim Jagielski 	}
2814*b1cdbd2cSJim Jagielski }
2815*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
CreateAccessible()2816*b1cdbd2cSJim Jagielski Reference< ::com::sun::star::accessibility::XAccessible > SvxFontNameBox_Impl::CreateAccessible()
2817*b1cdbd2cSJim Jagielski {
2818*b1cdbd2cSJim Jagielski 	FillList();
2819*b1cdbd2cSJim Jagielski 	return FontNameBox::CreateAccessible();
2820*b1cdbd2cSJim Jagielski }
2821