1f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file
5f6e50924SAndrew Rist * distributed with this work for additional information
6f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the
8f6e50924SAndrew Rist * "License"); you may not use this file except in compliance
9f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at
10f6e50924SAndrew Rist *
11f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12f6e50924SAndrew Rist *
13f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing,
14f6e50924SAndrew Rist * software distributed under the License is distributed on an
15f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16f6e50924SAndrew Rist * KIND, either express or implied. See the License for the
17f6e50924SAndrew Rist * specific language governing permissions and limitations
18f6e50924SAndrew Rist * under the License.
19f6e50924SAndrew Rist *
20f6e50924SAndrew Rist *************************************************************/
21f6e50924SAndrew Rist
22f6e50924SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <com/sun/star/text/WritingMode.hpp>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <vcl/toolbox.hxx>
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <svl/itempool.hxx>
32cdf0e10cSrcweir
33cdf0e10cSrcweir #include <svtools/toolbarmenu.hxx>
34cdf0e10cSrcweir #include <svtools/popupwindowcontroller.hxx>
35cdf0e10cSrcweir #include <svtools/popupmenucontrollerbase.hxx>
36cdf0e10cSrcweir
37cdf0e10cSrcweir #include <sfx2/app.hxx>
38cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
39cdf0e10cSrcweir
40cdf0e10cSrcweir #include <editeng/eeitem.hxx>
41cdf0e10cSrcweir #include <editeng/frmdiritem.hxx>
42cdf0e10cSrcweir
43cdf0e10cSrcweir #include <svx/fmmodel.hxx>
44cdf0e10cSrcweir #include <svx/svxids.hrc>
45cdf0e10cSrcweir #include <svx/dialmgr.hxx>
46cdf0e10cSrcweir #include <svx/dialogs.hrc>
47cdf0e10cSrcweir #include <svx/svdpage.hxx>
48cdf0e10cSrcweir #include <svx/svdobj.hxx>
49cdf0e10cSrcweir #include <svx/svdview.hxx>
50cdf0e10cSrcweir #include <svx/svdoutl.hxx>
51cdf0e10cSrcweir
52cdf0e10cSrcweir #include "svx/gallery.hxx"
53cdf0e10cSrcweir #include <svx/dlgutil.hxx>
54cdf0e10cSrcweir
55cdf0e10cSrcweir #include <svx/fontworkgallery.hxx>
56cdf0e10cSrcweir #include "fontworkgallery.hrc"
57cdf0e10cSrcweir
58cdf0e10cSrcweir #include <algorithm>
59cdf0e10cSrcweir
60cdf0e10cSrcweir #include "helpid.hrc"
61cdf0e10cSrcweir
62cdf0e10cSrcweir using ::rtl::OUString;
63cdf0e10cSrcweir using ::svtools::ToolbarMenu;
64cdf0e10cSrcweir
65cdf0e10cSrcweir using namespace ::com::sun::star;
66cdf0e10cSrcweir using namespace ::com::sun::star::uno;
67cdf0e10cSrcweir using namespace ::com::sun::star::lang;
68cdf0e10cSrcweir using namespace ::com::sun::star::beans;
69cdf0e10cSrcweir using namespace ::com::sun::star::frame;
70cdf0e10cSrcweir
71cdf0e10cSrcweir namespace svx
72cdf0e10cSrcweir {
73cdf0e10cSrcweir
74cdf0e10cSrcweir const int nColCount = 4;
75cdf0e10cSrcweir const int nLineCount = 4;
76cdf0e10cSrcweir
77cdf0e10cSrcweir /*************************************************************************
78cdf0e10cSrcweir |* Svx3DWin - FloatingWindow
79cdf0e10cSrcweir \************************************************************************/
FontWorkGalleryDialog(SdrView * pSdrView,Window * pParent,sal_uInt16)80cdf0e10cSrcweir FontWorkGalleryDialog::FontWorkGalleryDialog( SdrView* pSdrView, Window* pParent, sal_uInt16 /*nSID*/ ) :
81cdf0e10cSrcweir ModalDialog( pParent, SVX_RES( RID_SVX_MDLG_FONTWORK_GALLERY ) ),
82cdf0e10cSrcweir maFLFavorites ( this, SVX_RES( FL_FAVORITES ) ),
83cdf0e10cSrcweir maCtlFavorites ( this, SVX_RES( CTL_FAVORITES ) ),
84cdf0e10cSrcweir maOKButton ( this, SVX_RES( BTN_OK ) ),
85cdf0e10cSrcweir maCancelButton ( this, SVX_RES( BTN_CANCEL ) ),
86cdf0e10cSrcweir maHelpButton ( this, SVX_RES( BTN_HELP ) ),
87cdf0e10cSrcweir mnThemeId ( 0xffff ),
88cdf0e10cSrcweir mpSdrView ( pSdrView ),
89cdf0e10cSrcweir mpModel ( (FmFormModel*)pSdrView->GetModel() ),
90cdf0e10cSrcweir maStrClickToAddText ( SVX_RES( STR_CLICK_TO_ADD_TEXT ) ),
91cdf0e10cSrcweir mppSdrObject ( NULL ),
92cdf0e10cSrcweir mpDestModel ( NULL )
93cdf0e10cSrcweir {
94cdf0e10cSrcweir FreeResource();
95cdf0e10cSrcweir
96cdf0e10cSrcweir maCtlFavorites.SetDoubleClickHdl( LINK( this, FontWorkGalleryDialog, DoubleClickFavoriteHdl ) );
97cdf0e10cSrcweir maOKButton.SetClickHdl( LINK( this, FontWorkGalleryDialog, ClickOKHdl ) );
98cdf0e10cSrcweir
99cdf0e10cSrcweir maCtlFavorites.SetColCount( nColCount );
100cdf0e10cSrcweir maCtlFavorites.SetLineCount( nLineCount );
101cdf0e10cSrcweir maCtlFavorites.SetExtraSpacing( 3 );
102cdf0e10cSrcweir
1036dd94783SArmin Le Grand initFavorites( GALLERY_THEME_FONTWORK );
1046dd94783SArmin Le Grand fillFavorites( GALLERY_THEME_FONTWORK );
105cdf0e10cSrcweir }
106cdf0e10cSrcweir
107cdf0e10cSrcweir // -----------------------------------------------------------------------
~FontWorkGalleryDialog()108cdf0e10cSrcweir FontWorkGalleryDialog::~FontWorkGalleryDialog()
109cdf0e10cSrcweir {
110cdf0e10cSrcweir }
111cdf0e10cSrcweir
112cdf0e10cSrcweir // -----------------------------------------------------------------------
113cdf0e10cSrcweir
initFavorites(sal_uInt16 nThemeId)1146dd94783SArmin Le Grand void FontWorkGalleryDialog::initFavorites(sal_uInt16 nThemeId)
115cdf0e10cSrcweir {
116cdf0e10cSrcweir // Ueber die Gallery werden die Favoriten eingelesen
117cdf0e10cSrcweir sal_uIntPtr nFavCount = GalleryExplorer::GetSdrObjCount( nThemeId );
118cdf0e10cSrcweir
119cdf0e10cSrcweir // Gallery thema locken
120cdf0e10cSrcweir GalleryExplorer::BeginLocking(nThemeId);
121cdf0e10cSrcweir
122cdf0e10cSrcweir sal_uInt32 nModelPos;
123cdf0e10cSrcweir FmFormModel *pModel = NULL;
12435726d9dSArmin Le Grand const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
12535726d9dSArmin Le Grand
126cdf0e10cSrcweir for( nModelPos = 0; nModelPos < nFavCount; nModelPos++ )
127cdf0e10cSrcweir {
1286dd94783SArmin Le Grand BitmapEx aThumb;
1296dd94783SArmin Le Grand
1306dd94783SArmin Le Grand GalleryExplorer::GetSdrObj(nThemeId, nModelPos, pModel, &aThumb);
1316dd94783SArmin Le Grand
1326dd94783SArmin Le Grand if(!!aThumb)
1336dd94783SArmin Le Grand {
1346dd94783SArmin Le Grand VirtualDevice aVDev;
1356dd94783SArmin Le Grand const Point aNull(0, 0);
1366dd94783SArmin Le Grand const Size aSize(aThumb.GetSizePixel());
1376dd94783SArmin Le Grand
1386dd94783SArmin Le Grand aVDev.SetOutputSizePixel(aSize);
1396dd94783SArmin Le Grand
140*33b19716SArmin Le Grand if(rStyleSettings.GetPreviewUsesCheckeredBackground())
14135726d9dSArmin Le Grand {
14235726d9dSArmin Le Grand static const sal_uInt32 nLen(8);
14335726d9dSArmin Le Grand static const Color aW(COL_WHITE);
14435726d9dSArmin Le Grand static const Color aG(0xef, 0xef, 0xef);
14535726d9dSArmin Le Grand
14635726d9dSArmin Le Grand aVDev.DrawCheckered(aNull, aSize, nLen, aW, aG);
14735726d9dSArmin Le Grand }
14835726d9dSArmin Le Grand else
14935726d9dSArmin Le Grand {
15035726d9dSArmin Le Grand aVDev.SetBackground(rStyleSettings.GetFieldColor());
15135726d9dSArmin Le Grand aVDev.Erase();
15235726d9dSArmin Le Grand }
15335726d9dSArmin Le Grand
15435726d9dSArmin Le Grand aVDev.DrawBitmapEx(aNull, aThumb);
1556dd94783SArmin Le Grand maFavoritesHorizontal.push_back(aVDev.GetBitmap(aNull, aSize));
1566dd94783SArmin Le Grand }
157cdf0e10cSrcweir }
158cdf0e10cSrcweir
159cdf0e10cSrcweir // Gallery thema freigeben
160cdf0e10cSrcweir GalleryExplorer::EndLocking(nThemeId);
161cdf0e10cSrcweir }
162cdf0e10cSrcweir
fillFavorites(sal_uInt16 nThemeId)1636dd94783SArmin Le Grand void FontWorkGalleryDialog::fillFavorites(sal_uInt16 nThemeId)
164cdf0e10cSrcweir {
165cdf0e10cSrcweir mnThemeId = nThemeId;
166cdf0e10cSrcweir
167cdf0e10cSrcweir Size aThumbSize( maCtlFavorites.GetSizePixel() );
168cdf0e10cSrcweir aThumbSize.Width() /= nColCount;
169cdf0e10cSrcweir aThumbSize.Height() /= nLineCount;
170cdf0e10cSrcweir aThumbSize.Width() -= 12;
171cdf0e10cSrcweir aThumbSize.Height() -= 12;
172cdf0e10cSrcweir
1736dd94783SArmin Le Grand std::vector< Bitmap * >::size_type nFavCount = maFavoritesHorizontal.size();
174cdf0e10cSrcweir
175cdf0e10cSrcweir // ValueSet Favoriten
176cdf0e10cSrcweir if( nFavCount > (nColCount * nLineCount) )
177cdf0e10cSrcweir {
178cdf0e10cSrcweir WinBits nWinBits = maCtlFavorites.GetStyle();
179cdf0e10cSrcweir nWinBits |= WB_VSCROLL;
180cdf0e10cSrcweir maCtlFavorites.SetStyle( nWinBits );
181cdf0e10cSrcweir }
182cdf0e10cSrcweir
183cdf0e10cSrcweir maCtlFavorites.Clear();
184cdf0e10cSrcweir
185cdf0e10cSrcweir sal_uInt32 nFavorite;
186cdf0e10cSrcweir for( nFavorite = 1; nFavorite <= nFavCount; nFavorite++ )
187cdf0e10cSrcweir {
188cdf0e10cSrcweir String aStr(SVX_RES(RID_SVXFLOAT3D_FAVORITE));
189cdf0e10cSrcweir aStr += sal_Unicode(' ');
190cdf0e10cSrcweir aStr += String::CreateFromInt32((sal_Int32)nFavorite);
1916dd94783SArmin Le Grand Image aThumbImage( maFavoritesHorizontal[nFavorite-1] );
192cdf0e10cSrcweir maCtlFavorites.InsertItem( (sal_uInt16)nFavorite, aThumbImage, aStr );
193cdf0e10cSrcweir }
194cdf0e10cSrcweir }
195cdf0e10cSrcweir
changeText(SdrTextObj * pObj)196cdf0e10cSrcweir void FontWorkGalleryDialog::changeText( SdrTextObj* pObj )
197cdf0e10cSrcweir {
198cdf0e10cSrcweir if( pObj )
199cdf0e10cSrcweir {
200cdf0e10cSrcweir SdrOutliner& rOutl = mpModel->GetDrawOutliner(pObj);
201cdf0e10cSrcweir
202cdf0e10cSrcweir sal_uInt16 nOutlMode = rOutl.GetMode();
203cdf0e10cSrcweir Size aPaperSize = rOutl.GetPaperSize();
204cdf0e10cSrcweir sal_Bool bUpdateMode = rOutl.GetUpdateMode();
205cdf0e10cSrcweir rOutl.SetUpdateMode(sal_False);
206cdf0e10cSrcweir rOutl.SetParaAttribs( 0, rOutl.GetEmptyItemSet() );
207cdf0e10cSrcweir
208cdf0e10cSrcweir // #95114# Always set the object's StyleSheet at the Outliner to
209cdf0e10cSrcweir // use the current objects StyleSheet. Thus it's the same as in
210cdf0e10cSrcweir // SetText(...).
211cdf0e10cSrcweir // #95114# Moved this implementation from where SetObjText(...) was called
212cdf0e10cSrcweir // to inside this method to work even when outliner is fetched here.
213cdf0e10cSrcweir rOutl.SetStyleSheet(0, pObj->GetStyleSheet());
214cdf0e10cSrcweir
215cdf0e10cSrcweir rOutl.SetPaperSize( pObj->GetLogicRect().GetSize() );
216cdf0e10cSrcweir
217cdf0e10cSrcweir rOutl.SetText( maStrClickToAddText, rOutl.GetParagraph( 0 ) );
218cdf0e10cSrcweir pObj->SetOutlinerParaObject( rOutl.CreateParaObject() );
219cdf0e10cSrcweir
220cdf0e10cSrcweir rOutl.Init( nOutlMode );
221cdf0e10cSrcweir rOutl.SetParaAttribs( 0, rOutl.GetEmptyItemSet() );
222cdf0e10cSrcweir rOutl.SetUpdateMode( bUpdateMode );
223cdf0e10cSrcweir rOutl.SetPaperSize( aPaperSize );
224cdf0e10cSrcweir
225cdf0e10cSrcweir rOutl.Clear();
226cdf0e10cSrcweir }
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
SetSdrObjectRef(SdrObject ** ppSdrObject,SdrModel * pModel)229cdf0e10cSrcweir void FontWorkGalleryDialog::SetSdrObjectRef( SdrObject** ppSdrObject, SdrModel* pModel )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir mppSdrObject = ppSdrObject;
232cdf0e10cSrcweir mpDestModel = pModel;
233cdf0e10cSrcweir }
234cdf0e10cSrcweir
insertSelectedFontwork()235cdf0e10cSrcweir void FontWorkGalleryDialog::insertSelectedFontwork()
236cdf0e10cSrcweir {
237cdf0e10cSrcweir sal_uInt16 nItemId = maCtlFavorites.GetSelectItemId();
238cdf0e10cSrcweir
239cdf0e10cSrcweir if( nItemId > 0 )
240cdf0e10cSrcweir {
241cdf0e10cSrcweir FmFormModel* pModel = new FmFormModel();
242cdf0e10cSrcweir pModel->GetItemPool().FreezeIdRanges();
243cdf0e10cSrcweir
244cdf0e10cSrcweir if( GalleryExplorer::GetSdrObj( mnThemeId, nItemId-1, pModel ) )
245cdf0e10cSrcweir {
246cdf0e10cSrcweir SdrPage* pPage = pModel->GetPage(0);
247cdf0e10cSrcweir if( pPage && pPage->GetObjCount() )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir SdrObject* pNewObject = pPage->GetObj(0)->Clone();
250cdf0e10cSrcweir
251cdf0e10cSrcweir // center shape on current view
252cdf0e10cSrcweir OutputDevice* pOutDev = mpSdrView->GetFirstOutputDevice();
253cdf0e10cSrcweir if( pOutDev )
254cdf0e10cSrcweir {
255cdf0e10cSrcweir Rectangle aObjRect( pNewObject->GetLogicRect() );
256cdf0e10cSrcweir Rectangle aVisArea = pOutDev->PixelToLogic(Rectangle(Point(0,0), pOutDev->GetOutputSizePixel()));
257cdf0e10cSrcweir /*
258cdf0e10cSrcweir sal_Int32 nObjHeight = aObjRect.GetHeight();
259cdf0e10cSrcweir VirtualDevice aVirDev( 1 ); // calculating the optimal textwidth
260cdf0e10cSrcweir Font aFont;
261cdf0e10cSrcweir aFont.SetHeight( nObjHeight );
262cdf0e10cSrcweir aVirDev.SetMapMode( MAP_100TH_MM );
263cdf0e10cSrcweir aVirDev.SetFont( aFont );
264cdf0e10cSrcweir aObjRect.SetSize( Size( aVirDev.GetTextWidth( maStrClickToAddText ), nObjHeight ) );
265cdf0e10cSrcweir */
266cdf0e10cSrcweir Point aPagePos = aVisArea.Center();
267cdf0e10cSrcweir aPagePos.X() -= aObjRect.GetWidth() / 2;
268cdf0e10cSrcweir aPagePos.Y() -= aObjRect.GetHeight() / 2;
269cdf0e10cSrcweir Rectangle aNewObjectRectangle(aPagePos, aObjRect.GetSize());
270cdf0e10cSrcweir SdrPageView* pPV = mpSdrView->GetSdrPageView();
271cdf0e10cSrcweir
272cdf0e10cSrcweir pNewObject->SetLogicRect(aNewObjectRectangle);
273cdf0e10cSrcweir if ( mppSdrObject )
274cdf0e10cSrcweir {
275cdf0e10cSrcweir *mppSdrObject = pNewObject;
276cdf0e10cSrcweir (*mppSdrObject)->SetModel( mpDestModel );
277cdf0e10cSrcweir }
278cdf0e10cSrcweir else if( pPV )
279cdf0e10cSrcweir {
280cdf0e10cSrcweir mpSdrView->InsertObjectAtView( pNewObject, *pPV );
281cdf0e10cSrcweir // changeText( PTR_CAST( SdrTextObj, pNewObject ) );
282cdf0e10cSrcweir }
283cdf0e10cSrcweir }
284cdf0e10cSrcweir }
285cdf0e10cSrcweir }
286cdf0e10cSrcweir
287cdf0e10cSrcweir delete pModel;
288cdf0e10cSrcweir }
289cdf0e10cSrcweir }
290cdf0e10cSrcweir
291cdf0e10cSrcweir // -----------------------------------------------------------------------
292cdf0e10cSrcweir
IMPL_LINK(FontWorkGalleryDialog,ClickOKHdl,void *,EMPTYARG)293cdf0e10cSrcweir IMPL_LINK( FontWorkGalleryDialog, ClickOKHdl, void*, EMPTYARG )
294cdf0e10cSrcweir {
295cdf0e10cSrcweir insertSelectedFontwork();
296cdf0e10cSrcweir EndDialog( true );
297cdf0e10cSrcweir return 0;
298cdf0e10cSrcweir }
299cdf0e10cSrcweir
300cdf0e10cSrcweir // -----------------------------------------------------------------------
301cdf0e10cSrcweir
IMPL_LINK(FontWorkGalleryDialog,DoubleClickFavoriteHdl,void *,EMPTYARG)302cdf0e10cSrcweir IMPL_LINK( FontWorkGalleryDialog, DoubleClickFavoriteHdl, void*, EMPTYARG )
303cdf0e10cSrcweir {
304cdf0e10cSrcweir insertSelectedFontwork();
305cdf0e10cSrcweir EndDialog( true );
306cdf0e10cSrcweir return( 0L );
307cdf0e10cSrcweir }
308cdf0e10cSrcweir
309cdf0e10cSrcweir //------------------------------------------------------------------------
310cdf0e10cSrcweir
311cdf0e10cSrcweir SFX_IMPL_TOOLBOX_CONTROL( FontWorkShapeTypeControl, SfxStringItem );
FontWorkShapeTypeControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)312cdf0e10cSrcweir FontWorkShapeTypeControl::FontWorkShapeTypeControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx )
313cdf0e10cSrcweir : SfxToolBoxControl( nSlotId, nId, rTbx )
314cdf0e10cSrcweir {
315cdf0e10cSrcweir rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) );
316cdf0e10cSrcweir rTbx.Invalidate();
317cdf0e10cSrcweir }
318cdf0e10cSrcweir
319cdf0e10cSrcweir // -----------------------------------------------------------------------
320cdf0e10cSrcweir
~FontWorkShapeTypeControl()321cdf0e10cSrcweir FontWorkShapeTypeControl::~FontWorkShapeTypeControl()
322cdf0e10cSrcweir {
323cdf0e10cSrcweir }
324cdf0e10cSrcweir
325cdf0e10cSrcweir // -----------------------------------------------------------------------
326cdf0e10cSrcweir
GetPopupWindowType() const327cdf0e10cSrcweir SfxPopupWindowType FontWorkShapeTypeControl::GetPopupWindowType() const
328cdf0e10cSrcweir {
329cdf0e10cSrcweir return SFX_POPUPWINDOW_ONCLICK; //( aLastAction.getLength() == 0 ? SFX_POPUPWINDOW_ONCLICK : SFX_POPUPWINDOW_ONTIMEOUT );
330cdf0e10cSrcweir }
331cdf0e10cSrcweir
332cdf0e10cSrcweir // -----------------------------------------------------------------------
333cdf0e10cSrcweir
CreatePopupWindow()334cdf0e10cSrcweir SfxPopupWindow* FontWorkShapeTypeControl::CreatePopupWindow()
335cdf0e10cSrcweir {
336cdf0e10cSrcweir rtl::OUString aSubTbxResName( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/fontworkshapetype" ) );
337cdf0e10cSrcweir createAndPositionSubToolBar( aSubTbxResName );
338cdf0e10cSrcweir return NULL;
339cdf0e10cSrcweir }
340cdf0e10cSrcweir
341cdf0e10cSrcweir // -----------------------------------------------------------------------
342cdf0e10cSrcweir
Select(sal_Bool)343cdf0e10cSrcweir void FontWorkShapeTypeControl::Select( sal_Bool )
344cdf0e10cSrcweir {
345cdf0e10cSrcweir
346cdf0e10cSrcweir }
347cdf0e10cSrcweir
348cdf0e10cSrcweir // ========================================================================
349199633b5SHerbert Dürr // FontworkAlignmentWindow
350cdf0e10cSrcweir // ========================================================================
351cdf0e10cSrcweir
352199633b5SHerbert Dürr class FontworkAlignmentWindow : public ToolbarMenu
353cdf0e10cSrcweir {
354cdf0e10cSrcweir public:
355199633b5SHerbert Dürr FontworkAlignmentWindow( svt::ToolboxController& rController, const Reference< XFrame >& rFrame, Window* pParentWindow );
356cdf0e10cSrcweir
357cdf0e10cSrcweir virtual void SAL_CALL statusChanged( const frame::FeatureStateEvent& Event ) throw ( RuntimeException );
358cdf0e10cSrcweir virtual void DataChanged( const DataChangedEvent& rDCEvt );
359cdf0e10cSrcweir
360cdf0e10cSrcweir private:
361cdf0e10cSrcweir svt::ToolboxController& mrController;
362cdf0e10cSrcweir
363cdf0e10cSrcweir Image maImgAlgin1;
364cdf0e10cSrcweir Image maImgAlgin2;
365cdf0e10cSrcweir Image maImgAlgin3;
366cdf0e10cSrcweir Image maImgAlgin4;
367cdf0e10cSrcweir Image maImgAlgin5;
368cdf0e10cSrcweir Image maImgAlgin1h;
369cdf0e10cSrcweir Image maImgAlgin2h;
370cdf0e10cSrcweir Image maImgAlgin3h;
371cdf0e10cSrcweir Image maImgAlgin4h;
372cdf0e10cSrcweir Image maImgAlgin5h;
373cdf0e10cSrcweir
374cdf0e10cSrcweir const rtl::OUString msFontworkAlignment;
375cdf0e10cSrcweir
376cdf0e10cSrcweir DECL_LINK( SelectHdl, void * );
377cdf0e10cSrcweir
378cdf0e10cSrcweir void implSetAlignment( int nAlignmentMode, bool bEnabled );
379cdf0e10cSrcweir };
380cdf0e10cSrcweir
FontworkAlignmentWindow(svt::ToolboxController & rController,const Reference<XFrame> & rFrame,Window * pParentWindow)381199633b5SHerbert Dürr FontworkAlignmentWindow::FontworkAlignmentWindow( svt::ToolboxController& rController, const Reference< XFrame >& rFrame, Window* pParentWindow )
382cdf0e10cSrcweir : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_FONTWORK_ALIGNMENT ))
383cdf0e10cSrcweir , mrController( rController )
384cdf0e10cSrcweir , maImgAlgin1( SVX_RES( IMG_FONTWORK_ALIGN_LEFT_16 ) )
385cdf0e10cSrcweir , maImgAlgin2( SVX_RES( IMG_FONTWORK_ALIGN_CENTER_16 ) )
386cdf0e10cSrcweir , maImgAlgin3( SVX_RES( IMG_FONTWORK_ALIGN_RIGHT_16 ) )
387cdf0e10cSrcweir , maImgAlgin4( SVX_RES( IMG_FONTWORK_ALIGN_WORD_16 ) )
388cdf0e10cSrcweir , maImgAlgin5( SVX_RES( IMG_FONTWORK_ALIGN_STRETCH_16 ) )
389cdf0e10cSrcweir , maImgAlgin1h( SVX_RES( IMG_FONTWORK_ALIGN_LEFT_16_H ) )
390cdf0e10cSrcweir , maImgAlgin2h( SVX_RES( IMG_FONTWORK_ALIGN_CENTER_16_H ) )
391cdf0e10cSrcweir , maImgAlgin3h( SVX_RES( IMG_FONTWORK_ALIGN_RIGHT_16_H ) )
392cdf0e10cSrcweir , maImgAlgin4h( SVX_RES( IMG_FONTWORK_ALIGN_WORD_16_H ) )
393cdf0e10cSrcweir , maImgAlgin5h( SVX_RES( IMG_FONTWORK_ALIGN_STRETCH_16_H ) )
394cdf0e10cSrcweir , msFontworkAlignment( RTL_CONSTASCII_USTRINGPARAM( ".uno:FontworkAlignment" ) )
395cdf0e10cSrcweir {
396cdf0e10cSrcweir bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
397cdf0e10cSrcweir
398cdf0e10cSrcweir SetHelpId( HID_POPUP_FONTWORK_ALIGN );
399199633b5SHerbert Dürr SetSelectHdl( LINK( this, FontworkAlignmentWindow, SelectHdl ) );
400cdf0e10cSrcweir
401cdf0e10cSrcweir appendEntry( 0, String( SVX_RES( STR_ALIGN_LEFT ) ), bHighContrast ? maImgAlgin1h : maImgAlgin1 );
402cdf0e10cSrcweir appendEntry( 1, String( SVX_RES( STR_ALIGN_CENTER ) ), bHighContrast ? maImgAlgin2h : maImgAlgin2 );
403cdf0e10cSrcweir appendEntry( 2, String( SVX_RES( STR_ALIGN_RIGHT ) ), bHighContrast ? maImgAlgin3h : maImgAlgin3 );
404cdf0e10cSrcweir appendEntry( 3, String( SVX_RES( STR_ALIGN_WORD ) ), bHighContrast ? maImgAlgin4h : maImgAlgin4 );
405cdf0e10cSrcweir appendEntry( 4, String( SVX_RES( STR_ALIGN_STRETCH ) ), bHighContrast ? maImgAlgin5h : maImgAlgin5 );
406cdf0e10cSrcweir
407cdf0e10cSrcweir SetOutputSizePixel( getMenuSize() );
408cdf0e10cSrcweir
409cdf0e10cSrcweir FreeResource();
410cdf0e10cSrcweir
411cdf0e10cSrcweir AddStatusListener( msFontworkAlignment );
412cdf0e10cSrcweir }
413cdf0e10cSrcweir
414cdf0e10cSrcweir // -----------------------------------------------------------------------
415cdf0e10cSrcweir
implSetAlignment(int nSurface,bool bEnabled)416199633b5SHerbert Dürr void FontworkAlignmentWindow::implSetAlignment( int nSurface, bool bEnabled )
417cdf0e10cSrcweir {
418cdf0e10cSrcweir int i;
419cdf0e10cSrcweir for( i = 0; i < 5; i++ )
420cdf0e10cSrcweir {
421cdf0e10cSrcweir checkEntry( i, (i == nSurface) && bEnabled );
422cdf0e10cSrcweir enableEntry( i, bEnabled );
423cdf0e10cSrcweir }
424cdf0e10cSrcweir }
425cdf0e10cSrcweir
426cdf0e10cSrcweir // -----------------------------------------------------------------------
427cdf0e10cSrcweir
statusChanged(const frame::FeatureStateEvent & Event)428199633b5SHerbert Dürr void SAL_CALL FontworkAlignmentWindow::statusChanged( const frame::FeatureStateEvent& Event ) throw ( RuntimeException )
429cdf0e10cSrcweir {
430cdf0e10cSrcweir if( Event.FeatureURL.Main.equals( msFontworkAlignment ) )
431cdf0e10cSrcweir {
432cdf0e10cSrcweir if( !Event.IsEnabled )
433cdf0e10cSrcweir {
434cdf0e10cSrcweir implSetAlignment( 0, false );
435cdf0e10cSrcweir }
436cdf0e10cSrcweir else
437cdf0e10cSrcweir {
438cdf0e10cSrcweir sal_Int32 nValue = 0;
439cdf0e10cSrcweir if( Event.State >>= nValue )
440cdf0e10cSrcweir implSetAlignment( nValue, true );
441cdf0e10cSrcweir }
442cdf0e10cSrcweir }
443cdf0e10cSrcweir }
444cdf0e10cSrcweir
445cdf0e10cSrcweir // -----------------------------------------------------------------------
446cdf0e10cSrcweir
DataChanged(const DataChangedEvent & rDCEvt)447199633b5SHerbert Dürr void FontworkAlignmentWindow::DataChanged( const DataChangedEvent& rDCEvt )
448cdf0e10cSrcweir {
449cdf0e10cSrcweir ToolbarMenu::DataChanged( rDCEvt );
450cdf0e10cSrcweir
451cdf0e10cSrcweir if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
452cdf0e10cSrcweir {
453cdf0e10cSrcweir bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
454cdf0e10cSrcweir
455cdf0e10cSrcweir appendEntry( 0, String( SVX_RES( STR_ALIGN_LEFT ) ), bHighContrast ? maImgAlgin1h : maImgAlgin1 );
456cdf0e10cSrcweir appendEntry( 1, String( SVX_RES( STR_ALIGN_CENTER ) ), bHighContrast ? maImgAlgin2h : maImgAlgin2 );
457cdf0e10cSrcweir appendEntry( 2, String( SVX_RES( STR_ALIGN_RIGHT ) ), bHighContrast ? maImgAlgin3h : maImgAlgin3 );
458cdf0e10cSrcweir appendEntry( 3, String( SVX_RES( STR_ALIGN_WORD ) ), bHighContrast ? maImgAlgin4h : maImgAlgin4 );
459cdf0e10cSrcweir appendEntry( 4, String( SVX_RES( STR_ALIGN_STRETCH ) ), bHighContrast ? maImgAlgin5h : maImgAlgin5 );
460cdf0e10cSrcweir }
461cdf0e10cSrcweir }
462cdf0e10cSrcweir
463cdf0e10cSrcweir // -----------------------------------------------------------------------
464cdf0e10cSrcweir
IMPL_LINK(FontworkAlignmentWindow,SelectHdl,void *,EMPTYARG)465199633b5SHerbert Dürr IMPL_LINK( FontworkAlignmentWindow, SelectHdl, void *, EMPTYARG )
466cdf0e10cSrcweir {
467cdf0e10cSrcweir if ( IsInPopupMode() )
468cdf0e10cSrcweir EndPopupMode();
469cdf0e10cSrcweir
470cdf0e10cSrcweir sal_Int32 nAlignment = getSelectedEntryId();
471cdf0e10cSrcweir if( nAlignment >= 0 )
472cdf0e10cSrcweir {
473cdf0e10cSrcweir Sequence< PropertyValue > aArgs( 1 );
474cdf0e10cSrcweir aArgs[0].Name = msFontworkAlignment.copy(5);
475cdf0e10cSrcweir aArgs[0].Value <<= (sal_Int32)nAlignment;
476cdf0e10cSrcweir
477cdf0e10cSrcweir mrController.dispatchCommand( msFontworkAlignment, aArgs );
478cdf0e10cSrcweir
479cdf0e10cSrcweir implSetAlignment( nAlignment, true );
480cdf0e10cSrcweir }
481cdf0e10cSrcweir
482cdf0e10cSrcweir return 0;
483cdf0e10cSrcweir }
484cdf0e10cSrcweir
485cdf0e10cSrcweir // ========================================================================
486199633b5SHerbert Dürr // FontworkAlignmentControl
487cdf0e10cSrcweir // ========================================================================
488cdf0e10cSrcweir
489199633b5SHerbert Dürr class FontworkAlignmentControl : public svt::PopupWindowController
490cdf0e10cSrcweir {
491cdf0e10cSrcweir public:
492199633b5SHerbert Dürr FontworkAlignmentControl( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rServiceManager );
493cdf0e10cSrcweir
494cdf0e10cSrcweir virtual ::Window* createPopupWindow( ::Window* pParent );
495cdf0e10cSrcweir
496cdf0e10cSrcweir // XServiceInfo
497cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
498cdf0e10cSrcweir virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException );
499cdf0e10cSrcweir
500cdf0e10cSrcweir using svt::PopupWindowController::createPopupWindow;
501cdf0e10cSrcweir };
502cdf0e10cSrcweir
503cdf0e10cSrcweir
504cdf0e10cSrcweir // -----------------------------------------------------------------------
505cdf0e10cSrcweir
FontworkAlignmentControl(const Reference<lang::XMultiServiceFactory> & rServiceManager)506199633b5SHerbert Dürr FontworkAlignmentControl::FontworkAlignmentControl( const Reference< lang::XMultiServiceFactory >& rServiceManager )
507cdf0e10cSrcweir : svt::PopupWindowController( rServiceManager, Reference< frame::XFrame >(), OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FontworkAlignment" ) ) )
508cdf0e10cSrcweir {
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
511cdf0e10cSrcweir // -----------------------------------------------------------------------
512cdf0e10cSrcweir
createPopupWindow(::Window * pParent)513199633b5SHerbert Dürr ::Window* FontworkAlignmentControl::createPopupWindow( ::Window* pParent )
514cdf0e10cSrcweir {
515199633b5SHerbert Dürr return new FontworkAlignmentWindow( *this, m_xFrame, pParent );
516cdf0e10cSrcweir }
517cdf0e10cSrcweir
518cdf0e10cSrcweir // -----------------------------------------------------------------------
519cdf0e10cSrcweir // XServiceInfo
520cdf0e10cSrcweir // -----------------------------------------------------------------------
521cdf0e10cSrcweir
FontworkAlignmentControl_getImplementationName()522199633b5SHerbert Dürr OUString SAL_CALL FontworkAlignmentControl_getImplementationName()
523cdf0e10cSrcweir {
524199633b5SHerbert Dürr return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.FontworkAlignmentController" ));
525cdf0e10cSrcweir }
526cdf0e10cSrcweir
527cdf0e10cSrcweir // --------------------------------------------------------------------
528cdf0e10cSrcweir
FontworkAlignmentControl_getSupportedServiceNames()529199633b5SHerbert Dürr Sequence< OUString > SAL_CALL FontworkAlignmentControl_getSupportedServiceNames() throw( RuntimeException )
530cdf0e10cSrcweir {
531cdf0e10cSrcweir Sequence< OUString > aSNS( 1 );
532cdf0e10cSrcweir aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" ));
533cdf0e10cSrcweir return aSNS;
534cdf0e10cSrcweir }
535cdf0e10cSrcweir
536cdf0e10cSrcweir // --------------------------------------------------------------------
537cdf0e10cSrcweir
FontworkAlignmentControl_createInstance(const Reference<XMultiServiceFactory> & rSMgr)538199633b5SHerbert Dürr Reference< XInterface > SAL_CALL SAL_CALL FontworkAlignmentControl_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException )
539cdf0e10cSrcweir {
540199633b5SHerbert Dürr return *new FontworkAlignmentControl( rSMgr );
541cdf0e10cSrcweir }
542cdf0e10cSrcweir
543cdf0e10cSrcweir // --------------------------------------------------------------------
544cdf0e10cSrcweir
getImplementationName()545199633b5SHerbert Dürr OUString SAL_CALL FontworkAlignmentControl::getImplementationName( ) throw (RuntimeException)
546cdf0e10cSrcweir {
547199633b5SHerbert Dürr return FontworkAlignmentControl_getImplementationName();
548cdf0e10cSrcweir }
549cdf0e10cSrcweir
550cdf0e10cSrcweir // --------------------------------------------------------------------
551cdf0e10cSrcweir
getSupportedServiceNames()552199633b5SHerbert Dürr Sequence< OUString > SAL_CALL FontworkAlignmentControl::getSupportedServiceNames( ) throw (RuntimeException)
553cdf0e10cSrcweir {
554199633b5SHerbert Dürr return FontworkAlignmentControl_getSupportedServiceNames();
555cdf0e10cSrcweir }
556cdf0e10cSrcweir
557cdf0e10cSrcweir
558cdf0e10cSrcweir // ####################################################################
559cdf0e10cSrcweir
560199633b5SHerbert Dürr class FontworkCharacterSpacingWindow : public ToolbarMenu
561cdf0e10cSrcweir {
562cdf0e10cSrcweir public:
563199633b5SHerbert Dürr FontworkCharacterSpacingWindow( svt::ToolboxController& rController, const Reference< XFrame >& rFrame, Window* pParentWindow );
564cdf0e10cSrcweir
565cdf0e10cSrcweir virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException );
566cdf0e10cSrcweir private:
567cdf0e10cSrcweir svt::ToolboxController& mrController;
568cdf0e10cSrcweir
569cdf0e10cSrcweir const rtl::OUString msFontworkCharacterSpacing;
570cdf0e10cSrcweir const rtl::OUString msFontworkKernCharacterPairs;
571cdf0e10cSrcweir
572cdf0e10cSrcweir DECL_LINK( SelectHdl, void * );
573cdf0e10cSrcweir
574cdf0e10cSrcweir void implSetCharacterSpacing( sal_Int32 nCharacterSpacing, bool bEnabled );
575cdf0e10cSrcweir void implSetKernCharacterPairs( sal_Bool bKernOnOff, bool bEnabled );
576cdf0e10cSrcweir
577cdf0e10cSrcweir };
578cdf0e10cSrcweir
579cdf0e10cSrcweir // -----------------------------------------------------------------------
580cdf0e10cSrcweir
FontworkCharacterSpacingWindow(svt::ToolboxController & rController,const Reference<XFrame> & rFrame,Window * pParentWindow)581199633b5SHerbert Dürr FontworkCharacterSpacingWindow::FontworkCharacterSpacingWindow( svt::ToolboxController& rController, const Reference< XFrame >& rFrame, Window* pParentWindow )
582cdf0e10cSrcweir : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_FONTWORK_CHARSPACING ))
583cdf0e10cSrcweir , mrController( rController )
584cdf0e10cSrcweir , msFontworkCharacterSpacing( RTL_CONSTASCII_USTRINGPARAM( ".uno:FontworkCharacterSpacing" ) )
585cdf0e10cSrcweir , msFontworkKernCharacterPairs( RTL_CONSTASCII_USTRINGPARAM( ".uno:FontworkKernCharacterPairs" ) )
586cdf0e10cSrcweir {
587cdf0e10cSrcweir SetHelpId( HID_POPUP_FONTWORK_CHARSPACE );
588199633b5SHerbert Dürr SetSelectHdl( LINK( this, FontworkCharacterSpacingWindow, SelectHdl ) );
589cdf0e10cSrcweir
590cdf0e10cSrcweir appendEntry( 0, String( SVX_RES( STR_CHARS_SPACING_VERY_TIGHT ) ), MIB_RADIOCHECK );
591cdf0e10cSrcweir appendEntry( 1, String( SVX_RES( STR_CHARS_SPACING_TIGHT ) ), MIB_RADIOCHECK );
592cdf0e10cSrcweir appendEntry( 2, String( SVX_RES( STR_CHARS_SPACING_NORMAL ) ), MIB_RADIOCHECK );
593cdf0e10cSrcweir appendEntry( 3, String( SVX_RES( STR_CHARS_SPACING_LOOSE ) ), MIB_RADIOCHECK );
594cdf0e10cSrcweir appendEntry( 4, String( SVX_RES( STR_CHARS_SPACING_VERY_LOOSE ) ), MIB_RADIOCHECK );
595cdf0e10cSrcweir appendEntry( 5, String( SVX_RES( STR_CHARS_SPACING_CUSTOM ) ), MIB_RADIOCHECK );
596cdf0e10cSrcweir appendSeparator();
597cdf0e10cSrcweir appendEntry( 6, String( SVX_RES( STR_CHARS_SPACING_KERN_PAIRS ) ), MIB_CHECKABLE );
598cdf0e10cSrcweir
599cdf0e10cSrcweir SetOutputSizePixel( getMenuSize() );
600cdf0e10cSrcweir
601cdf0e10cSrcweir FreeResource();
602cdf0e10cSrcweir
603cdf0e10cSrcweir AddStatusListener( msFontworkCharacterSpacing );
604cdf0e10cSrcweir AddStatusListener( msFontworkKernCharacterPairs );
605cdf0e10cSrcweir }
606cdf0e10cSrcweir
607cdf0e10cSrcweir // -----------------------------------------------------------------------
608cdf0e10cSrcweir
implSetCharacterSpacing(sal_Int32 nCharacterSpacing,bool bEnabled)609199633b5SHerbert Dürr void FontworkCharacterSpacingWindow::implSetCharacterSpacing( sal_Int32 nCharacterSpacing, bool bEnabled )
610cdf0e10cSrcweir {
611cdf0e10cSrcweir sal_Int32 i;
612cdf0e10cSrcweir for ( i = 0; i < 6; i++ )
613cdf0e10cSrcweir {
614cdf0e10cSrcweir checkEntry( i, sal_False );
615cdf0e10cSrcweir enableEntry( i, bEnabled );
616cdf0e10cSrcweir }
617cdf0e10cSrcweir if ( nCharacterSpacing != -1 )
618cdf0e10cSrcweir {
619cdf0e10cSrcweir sal_Int32 nEntry;
620cdf0e10cSrcweir switch( nCharacterSpacing )
621cdf0e10cSrcweir {
622cdf0e10cSrcweir case 80 : nEntry = 0; break;
623cdf0e10cSrcweir case 90 : nEntry = 1; break;
624cdf0e10cSrcweir case 100 : nEntry = 2; break;
625cdf0e10cSrcweir case 120 : nEntry = 3; break;
626cdf0e10cSrcweir case 150 : nEntry = 4; break;
627cdf0e10cSrcweir default : nEntry = 5; break;
628cdf0e10cSrcweir }
629cdf0e10cSrcweir checkEntry( nEntry, bEnabled );
630cdf0e10cSrcweir }
631cdf0e10cSrcweir }
632cdf0e10cSrcweir
633cdf0e10cSrcweir // -----------------------------------------------------------------------
634cdf0e10cSrcweir
implSetKernCharacterPairs(sal_Bool,bool bEnabled)635199633b5SHerbert Dürr void FontworkCharacterSpacingWindow::implSetKernCharacterPairs( sal_Bool, bool bEnabled )
636cdf0e10cSrcweir {
637cdf0e10cSrcweir enableEntry( 6, bEnabled );
638cdf0e10cSrcweir checkEntry( 6, bEnabled );
639cdf0e10cSrcweir }
640cdf0e10cSrcweir
641cdf0e10cSrcweir // -----------------------------------------------------------------------
642cdf0e10cSrcweir
statusChanged(const::com::sun::star::frame::FeatureStateEvent & Event)643199633b5SHerbert Dürr void SAL_CALL FontworkCharacterSpacingWindow::statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException )
644cdf0e10cSrcweir {
645cdf0e10cSrcweir if( Event.FeatureURL.Main.equals( msFontworkCharacterSpacing ) )
646cdf0e10cSrcweir {
647cdf0e10cSrcweir if( !Event.IsEnabled )
648cdf0e10cSrcweir {
649cdf0e10cSrcweir implSetCharacterSpacing( 0, false );
650cdf0e10cSrcweir }
651cdf0e10cSrcweir else
652cdf0e10cSrcweir {
653cdf0e10cSrcweir sal_Int32 nValue = 0;
654cdf0e10cSrcweir if( Event.State >>= nValue )
655cdf0e10cSrcweir implSetCharacterSpacing( nValue, true );
656cdf0e10cSrcweir }
657cdf0e10cSrcweir }
658cdf0e10cSrcweir else if( Event.FeatureURL.Main.equals( msFontworkKernCharacterPairs ) )
659cdf0e10cSrcweir {
660cdf0e10cSrcweir if( !Event.IsEnabled )
661cdf0e10cSrcweir {
662cdf0e10cSrcweir implSetKernCharacterPairs( 0, false );
663cdf0e10cSrcweir }
664cdf0e10cSrcweir else
665cdf0e10cSrcweir {
666cdf0e10cSrcweir sal_Bool bValue = sal_False;
667cdf0e10cSrcweir if( Event.State >>= bValue )
668cdf0e10cSrcweir implSetKernCharacterPairs( bValue, true );
669cdf0e10cSrcweir }
670cdf0e10cSrcweir }
671cdf0e10cSrcweir }
672cdf0e10cSrcweir
673cdf0e10cSrcweir // -----------------------------------------------------------------------
674cdf0e10cSrcweir
IMPL_LINK(FontworkCharacterSpacingWindow,SelectHdl,void *,EMPTYARG)675199633b5SHerbert Dürr IMPL_LINK( FontworkCharacterSpacingWindow, SelectHdl, void *, EMPTYARG )
676cdf0e10cSrcweir {
677cdf0e10cSrcweir if ( IsInPopupMode() )
678cdf0e10cSrcweir EndPopupMode();
679cdf0e10cSrcweir
680cdf0e10cSrcweir sal_Int32 nSelection = getSelectedEntryId();
681cdf0e10cSrcweir sal_Int32 nCharacterSpacing;
682cdf0e10cSrcweir switch( nSelection )
683cdf0e10cSrcweir {
684cdf0e10cSrcweir case 0 : nCharacterSpacing = 80; break;
685cdf0e10cSrcweir case 1 : nCharacterSpacing = 90; break;
686cdf0e10cSrcweir case 2 : nCharacterSpacing = 100; break;
687cdf0e10cSrcweir case 3 : nCharacterSpacing = 120; break;
688cdf0e10cSrcweir case 4 : nCharacterSpacing = 150; break;
689cdf0e10cSrcweir default : nCharacterSpacing = 100; break;
690cdf0e10cSrcweir }
691cdf0e10cSrcweir if ( nSelection == 5 ) // custom spacing
692cdf0e10cSrcweir {
693cdf0e10cSrcweir Sequence< PropertyValue > aArgs( 1 );
694cdf0e10cSrcweir aArgs[0].Name = msFontworkCharacterSpacing.copy(5);
695cdf0e10cSrcweir aArgs[0].Value <<= (sal_Int32)nCharacterSpacing;
696cdf0e10cSrcweir
697cdf0e10cSrcweir mrController.dispatchCommand( OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FontworkCharacterSpacingDialog" )), aArgs );
698cdf0e10cSrcweir }
699cdf0e10cSrcweir else if ( nSelection == 6 ) // KernCharacterPairs
700cdf0e10cSrcweir {
701cdf0e10cSrcweir rtl::OUString aCommand( RTL_CONSTASCII_USTRINGPARAM( ".uno:FontworkKernCharacterPairs" ));
702cdf0e10cSrcweir
703cdf0e10cSrcweir Sequence< PropertyValue > aArgs( 1 );
704cdf0e10cSrcweir aArgs[0].Name = msFontworkKernCharacterPairs.copy(5);
705cdf0e10cSrcweir aArgs[0].Value <<= (sal_Bool) sal_True;
706cdf0e10cSrcweir
707cdf0e10cSrcweir mrController.dispatchCommand( msFontworkKernCharacterPairs, aArgs );
708cdf0e10cSrcweir
709cdf0e10cSrcweir implSetKernCharacterPairs( sal_True, true );
710cdf0e10cSrcweir }
711cdf0e10cSrcweir else if( nSelection >= 0 )
712cdf0e10cSrcweir {
713cdf0e10cSrcweir Sequence< PropertyValue > aArgs( 1 );
714cdf0e10cSrcweir aArgs[0].Name = msFontworkCharacterSpacing.copy(5);
715cdf0e10cSrcweir aArgs[0].Value <<=( sal_Int32)nCharacterSpacing;
716cdf0e10cSrcweir
717cdf0e10cSrcweir mrController.dispatchCommand( msFontworkCharacterSpacing, aArgs );
718cdf0e10cSrcweir
719cdf0e10cSrcweir implSetCharacterSpacing( nCharacterSpacing, true );
720cdf0e10cSrcweir }
721cdf0e10cSrcweir
722cdf0e10cSrcweir return 0;
723cdf0e10cSrcweir }
724cdf0e10cSrcweir
725cdf0e10cSrcweir // ========================================================================
726199633b5SHerbert Dürr // FontworkCharacterSpacingControl
727cdf0e10cSrcweir // ========================================================================
728cdf0e10cSrcweir
729199633b5SHerbert Dürr class FontworkCharacterSpacingControl : public svt::PopupWindowController
730cdf0e10cSrcweir {
731cdf0e10cSrcweir public:
732199633b5SHerbert Dürr FontworkCharacterSpacingControl( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rServiceManager );
733cdf0e10cSrcweir
734cdf0e10cSrcweir virtual ::Window* createPopupWindow( ::Window* pParent );
735cdf0e10cSrcweir
736cdf0e10cSrcweir // XServiceInfo
737cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
738cdf0e10cSrcweir virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException );
739cdf0e10cSrcweir
740cdf0e10cSrcweir using svt::PopupWindowController::createPopupWindow;
741cdf0e10cSrcweir };
742cdf0e10cSrcweir
743cdf0e10cSrcweir
FontworkCharacterSpacingControl(const Reference<lang::XMultiServiceFactory> & rServiceManager)744199633b5SHerbert Dürr FontworkCharacterSpacingControl::FontworkCharacterSpacingControl( const Reference< lang::XMultiServiceFactory >& rServiceManager )
745cdf0e10cSrcweir : svt::PopupWindowController( rServiceManager, Reference< frame::XFrame >(), OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FontworkCharacterSpacingFloater" ) ) )
746cdf0e10cSrcweir {
747cdf0e10cSrcweir }
748cdf0e10cSrcweir
749cdf0e10cSrcweir // -----------------------------------------------------------------------
750cdf0e10cSrcweir
createPopupWindow(::Window * pParent)751199633b5SHerbert Dürr ::Window* FontworkCharacterSpacingControl::createPopupWindow( ::Window* pParent )
752cdf0e10cSrcweir {
753199633b5SHerbert Dürr return new FontworkCharacterSpacingWindow( *this, m_xFrame, pParent );
754cdf0e10cSrcweir }
755cdf0e10cSrcweir
756cdf0e10cSrcweir // -----------------------------------------------------------------------
757cdf0e10cSrcweir // XServiceInfo
758cdf0e10cSrcweir // -----------------------------------------------------------------------
759cdf0e10cSrcweir
FontworkCharacterSpacingControl_getImplementationName()760199633b5SHerbert Dürr OUString SAL_CALL FontworkCharacterSpacingControl_getImplementationName()
761cdf0e10cSrcweir {
762199633b5SHerbert Dürr return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.FontworkCharacterSpacingController" ));
763cdf0e10cSrcweir }
764cdf0e10cSrcweir
765cdf0e10cSrcweir // --------------------------------------------------------------------
766cdf0e10cSrcweir
FontworkCharacterSpacingControl_getSupportedServiceNames()767199633b5SHerbert Dürr Sequence< OUString > SAL_CALL FontworkCharacterSpacingControl_getSupportedServiceNames() throw( RuntimeException )
768cdf0e10cSrcweir {
769cdf0e10cSrcweir Sequence< OUString > aSNS( 1 );
770cdf0e10cSrcweir aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" ));
771cdf0e10cSrcweir return aSNS;
772cdf0e10cSrcweir }
773cdf0e10cSrcweir
774cdf0e10cSrcweir // --------------------------------------------------------------------
775cdf0e10cSrcweir
FontworkCharacterSpacingControl_createInstance(const Reference<XMultiServiceFactory> & rSMgr)776199633b5SHerbert Dürr Reference< XInterface > SAL_CALL SAL_CALL FontworkCharacterSpacingControl_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException )
777cdf0e10cSrcweir {
778199633b5SHerbert Dürr return *new FontworkCharacterSpacingControl( rSMgr );
779cdf0e10cSrcweir }
780cdf0e10cSrcweir
781cdf0e10cSrcweir // --------------------------------------------------------------------
782cdf0e10cSrcweir
getImplementationName()783199633b5SHerbert Dürr OUString SAL_CALL FontworkCharacterSpacingControl::getImplementationName( ) throw (RuntimeException)
784cdf0e10cSrcweir {
785199633b5SHerbert Dürr return FontworkCharacterSpacingControl_getImplementationName();
786cdf0e10cSrcweir }
787cdf0e10cSrcweir
788cdf0e10cSrcweir // --------------------------------------------------------------------
789cdf0e10cSrcweir
getSupportedServiceNames()790199633b5SHerbert Dürr Sequence< OUString > SAL_CALL FontworkCharacterSpacingControl::getSupportedServiceNames( ) throw (RuntimeException)
791cdf0e10cSrcweir {
792199633b5SHerbert Dürr return FontworkCharacterSpacingControl_getSupportedServiceNames();
793cdf0e10cSrcweir }
794cdf0e10cSrcweir
795cdf0e10cSrcweir // ========================================================================
796cdf0e10cSrcweir // FontworkCharacterSpacingDialog
797cdf0e10cSrcweir // ========================================================================
798cdf0e10cSrcweir
FontworkCharacterSpacingDialog(Window * pParent,sal_Int32 nScale)799cdf0e10cSrcweir FontworkCharacterSpacingDialog::FontworkCharacterSpacingDialog( Window* pParent, sal_Int32 nScale )
800cdf0e10cSrcweir : ModalDialog( pParent, SVX_RES( RID_SVX_MDLG_FONTWORK_CHARSPACING ) ),
801cdf0e10cSrcweir maFLScale( this, SVX_RES( FT_VALUE ) ),
802cdf0e10cSrcweir maMtrScale( this, SVX_RES( MF_VALUE ) ),
803cdf0e10cSrcweir maOKButton( this, SVX_RES( BTN_OK ) ),
804cdf0e10cSrcweir maCancelButton( this, SVX_RES( BTN_CANCEL ) ),
805cdf0e10cSrcweir maHelpButton( this, SVX_RES( BTN_HELP ) )
806cdf0e10cSrcweir {
807cdf0e10cSrcweir maMtrScale.SetValue( nScale );
808cdf0e10cSrcweir FreeResource();
809cdf0e10cSrcweir }
810cdf0e10cSrcweir
~FontworkCharacterSpacingDialog()811cdf0e10cSrcweir FontworkCharacterSpacingDialog::~FontworkCharacterSpacingDialog()
812cdf0e10cSrcweir {
813cdf0e10cSrcweir }
814cdf0e10cSrcweir
getScale() const815cdf0e10cSrcweir sal_Int32 FontworkCharacterSpacingDialog::getScale() const
816cdf0e10cSrcweir {
817cdf0e10cSrcweir return (sal_Int32)maMtrScale.GetValue();
818cdf0e10cSrcweir }
819cdf0e10cSrcweir
820cdf0e10cSrcweir }
821