LCOV - code coverage report
Current view: top level - svx/source/tbxctrls - tbcontrl.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 1232 0.0 %
Date: 2014-04-14 Functions: 0 157 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10