diff options
1071 files changed, 62120 insertions, 13259 deletions
diff --git a/chart2/source/controller/dialogs/dlg_View3D.cxx b/chart2/source/controller/dialogs/dlg_View3D.cxx index 2da22870b8bb..5f818a6573c7 100644 --- a/chart2/source/controller/dialogs/dlg_View3D.cxx +++ b/chart2/source/controller/dialogs/dlg_View3D.cxx @@ -55,7 +55,7 @@ using namespace ::com::sun::star::chart2; sal_uInt16 View3DDialog::m_nLastPageId = 0; -View3DDialog::View3DDialog(Window* pParent, const uno::Reference< frame::XModel > & xChartModel, XColorTable* pColorTable ) +View3DDialog::View3DDialog(Window* pParent, const uno::Reference< frame::XModel > & xChartModel, XColorList* pColorTable ) : TabDialog(pParent,SchResId(DLG_3D_VIEW)) , m_aTabControl(this,SchResId(TABCTRL)) , m_aBtnOK(this,SchResId(BTN_OK)) diff --git a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx index 74674970187f..00f9f5a64987 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx @@ -284,7 +284,7 @@ namespace ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage( Window* pWindow , const uno::Reference< beans::XPropertySet > & xSceneProperties , const uno::Reference< frame::XModel >& xChartModel - , XColorTable* pColorTable ) + , XColorList* pColorTable ) : TabPage ( pWindow, SchResId( TP_3D_SCENEILLUMINATION ) ) , m_aFT_LightSource( this, SchResId( FT_LIGHTSOURCE ) ) , m_aBtn_Light1( this, SchResId( BTN_LIGHT_1 ), 1 ) diff --git a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx index dc041e80d0e1..3be197824985 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx @@ -79,7 +79,7 @@ public: const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & xSceneProperties, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xChartModel, - XColorTable* pColorTable=0 ); + XColorList* pColorTable=0 ); virtual ~ThreeD_SceneIllumination_TabPage(); // has to be called in case the dialog was closed with OK diff --git a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx index ced98b5cf617..eb9f509c54ab 100644 --- a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx +++ b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx @@ -340,10 +340,10 @@ SdrOutliner* DrawViewWrapper::getOutliner() const SfxItemSet DrawViewWrapper::getPositionAndSizeItemSetFromMarkedObject() const { SfxItemSet aFullSet( GetModel()->GetItemPool(), - SID_ATTR_TRANSFORM_POS_X,SID_ATTR_TRANSFORM_ANGLE, - SID_ATTR_TRANSFORM_PROTECT_POS,SID_ATTR_TRANSFORM_AUTOHEIGHT, - SDRATTR_ECKENRADIUS,SDRATTR_ECKENRADIUS, - SID_ATTR_METRIC,SID_ATTR_METRIC, + SID_ATTR_TRANSFORM_POS_X, SID_ATTR_TRANSFORM_ANGLE, + SID_ATTR_TRANSFORM_PROTECT_POS, SID_ATTR_TRANSFORM_AUTOHEIGHT, + SDRATTR_ECKENRADIUS, SDRATTR_ECKENRADIUS, + SID_ATTR_METRIC, SID_ATTR_METRIC, 0); SfxItemSet aGeoSet( E3dView::GetGeoAttrFromMarked() ); aFullSet.Put( aGeoSet ); diff --git a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx index e04b5ea7fa47..39e0f22266da 100644 --- a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx +++ b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx @@ -89,7 +89,7 @@ ViewElementListProvider::~ViewElementListProvider() //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- -XColorTable* ViewElementListProvider::GetColorTable() const +XColorList* ViewElementListProvider::GetColorTable() const { if(m_pDrawModelWrapper) return m_pDrawModelWrapper->GetColorTable(); diff --git a/chart2/source/controller/inc/ViewElementListProvider.hxx b/chart2/source/controller/inc/ViewElementListProvider.hxx index ee8b0b2e4b44..6f9f08df0cd7 100644 --- a/chart2/source/controller/inc/ViewElementListProvider.hxx +++ b/chart2/source/controller/inc/ViewElementListProvider.hxx @@ -41,7 +41,7 @@ public: ViewElementListProvider( DrawModelWrapper* pDrawModelWrapper ); virtual ~ViewElementListProvider(); - XColorTable* GetColorTable() const; + XColorList* GetColorTable() const; XDashList* GetDashList() const; XLineEndList* GetLineEndList() const; XGradientList* GetGradientList() const; diff --git a/chart2/source/controller/inc/dlg_View3D.hxx b/chart2/source/controller/inc/dlg_View3D.hxx index 7649bfd962c6..1414366d707e 100644 --- a/chart2/source/controller/inc/dlg_View3D.hxx +++ b/chart2/source/controller/inc/dlg_View3D.hxx @@ -34,7 +34,7 @@ #ifndef _SV_BUTTON_HXX #include <vcl/button.hxx> #endif -// header for class XColorTable +// header for class XColorList #include <svx/xtable.hxx> #include "ControllerLockGuard.hxx" @@ -52,7 +52,7 @@ class View3DDialog : public TabDialog public: View3DDialog( Window* pWindow, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & xChartModel, - XColorTable* pColorTable=0 ); + XColorList* pColorTable=0 ); ~View3DDialog(); // from Dialog (base of TabDialog) diff --git a/chart2/source/controller/main/ShapeController.cxx b/chart2/source/controller/main/ShapeController.cxx index 6b7b49c3d2b1..b9463e1860d0 100644 --- a/chart2/source/controller/main/ShapeController.cxx +++ b/chart2/source/controller/main/ShapeController.cxx @@ -323,7 +323,7 @@ void ShapeController::executeDispatch_FormatArea() SfxItemPool& rItemPool = pDrawViewWrapper->GetModel()->GetItemPool(); SfxItemSet aSet( rItemPool, rItemPool.GetFirstWhich(), rItemPool.GetLastWhich() ); const SvxColorTableItem* pColorItem = static_cast< const SvxColorTableItem* >( aSet.GetItem( SID_COLOR_TABLE ) ); - if ( pColorItem && pColorItem->GetColorTable() == XColorTable::GetStdColorTable() ) + if ( pColorItem && pColorItem->GetColorTable() == XColorList::GetStdColorList() ) { pDlg->DontDeleteColorTable(); } diff --git a/chart2/source/inc/chartview/DrawModelWrapper.hxx b/chart2/source/inc/chartview/DrawModelWrapper.hxx index 017ca5dde449..a2ad838618d2 100644 --- a/chart2/source/inc/chartview/DrawModelWrapper.hxx +++ b/chart2/source/inc/chartview/DrawModelWrapper.hxx @@ -91,7 +91,7 @@ public: getUnoModel(); SdrModel& getSdrModel(); - XColorTable* GetColorTable() const; + XColorList* GetColorTable() const; XDashList* GetDashList() const; XLineEndList* GetLineEndList() const; XGradientList* GetGradientList() const; diff --git a/chart2/source/view/main/DrawModelWrapper.cxx b/chart2/source/view/main/DrawModelWrapper.cxx index 99b8966f87ee..5814ad6e5bad 100644 --- a/chart2/source/view/main/DrawModelWrapper.cxx +++ b/chart2/source/view/main/DrawModelWrapper.cxx @@ -334,7 +334,7 @@ const SfxItemPool& DrawModelWrapper::GetItemPool() const { return this->SdrModel::GetItemPool(); } -XColorTable* DrawModelWrapper::GetColorTable() const +XColorList* DrawModelWrapper::GetColorTable() const { return this->SdrModel::GetColorTable(); } diff --git a/cui/source/inc/border.hxx b/cui/source/inc/border.hxx index a9e634a1e22c..f0c6a0dd888a 100644 --- a/cui/source/inc/border.hxx +++ b/cui/source/inc/border.hxx @@ -37,7 +37,6 @@ // forward --------------------------------------------------------------- class SvxBorderLine; -class XColorTable; #include <svx/flagsdef.hxx> diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx index e9d66bb36f7b..224b667f2d09 100644 --- a/cui/source/inc/cuitabarea.hxx +++ b/cui/source/inc/cuitabarea.hxx @@ -39,8 +39,8 @@ private: SdrModel* mpDrawModel; // const SdrView* mpView; - XColorTable* mpColorTab; - XColorTable* mpNewColorTab; + XColorList* mpColorTab; + XColorList* mpNewColorTab; XGradientList* mpGradientList; XGradientList* mpNewGradientList; XHatchList* mpHatchingList; @@ -76,10 +76,10 @@ public: const SdrView* pSdrView = NULL ); ~SvxAreaTabDialog(); - void SetNewColorTable( XColorTable* pColTab ) + void SetNewColorTable( XColorList* pColTab ) { mpNewColorTab = pColTab; } - XColorTable* GetNewColorTable() const { return mpNewColorTab; } - const XColorTable* GetColorTable() const { return mpColorTab; } + XColorList* GetNewColorTable() const { return mpNewColorTab; } + const XColorList* GetColorTable() const { return mpColorTab; } void SetNewGradientList( XGradientList* pGrdLst) { mpNewGradientList = pGrdLst; } @@ -243,7 +243,7 @@ private: const SfxItemSet& rOutAttrs; RECT_POINT eRP; - XColorTable* pColorTab; + XColorList* pColorTab; XGradientList* pGradientList; XHatchList* pHatchingList; XBitmapList* pBitmapList; @@ -302,7 +302,7 @@ public: virtual int DeactivatePage( SfxItemSet* pSet ); virtual void PointChanged( Window* pWindow, RECT_POINT eRP ); - void SetColorTable( XColorTable* pColTab ) { pColorTab = pColTab; } + void SetColorTable( XColorList* pColTab ) { pColorTab = pColTab; } void SetGradientList( XGradientList* pGrdLst) { pGradientList = pGrdLst; } void SetHatchingList( XHatchList* pHtchLst) @@ -350,7 +350,7 @@ private: const SfxItemSet& rOutAttrs; RECT_POINT eRP; - XColorTable* pColorTab; + XColorList* pColorTab; ChangeType* pnColorTableState; sal_uInt16 nPageType; //add CHINA001 sal_uInt16 nDlgType; //add CHINA001 @@ -382,7 +382,7 @@ public: virtual int DeactivatePage( SfxItemSet* pSet ); virtual void PointChanged( Window* pWindow, RECT_POINT eRP ); - void SetColorTable( XColorTable* pColTab ) { pColorTab = pColTab; } + void SetColorTable( XColorList* pColTab ) { pColorTab = pColTab; } //CHINA001 void SetPageType( sal_uInt16* pInType ) { pPageType = pInType; } //CHINA001 void SetDlgType( sal_uInt16* pInType ) { pDlgType = pInType; } void SetPageType( sal_uInt16 nInType ) { nPageType = nInType; } //add CHINA001 @@ -432,7 +432,7 @@ private: const SfxItemSet& rOutAttrs; - XColorTable* pColorTab; + XColorList* pColorTab; XGradientList* pGradientList; ChangeType* pnGradientListState; @@ -473,7 +473,7 @@ public: virtual void ActivatePage( const SfxItemSet& rSet ); virtual int DeactivatePage( SfxItemSet* pSet ); - void SetColorTable( XColorTable* pColTab ) { pColorTab = pColTab; } + void SetColorTable( XColorList* pColTab ) { pColorTab = pColTab; } void SetGradientList( XGradientList* pGrdLst) { pGradientList = pGrdLst; } @@ -519,7 +519,7 @@ private: const SfxItemSet& rOutAttrs; RECT_POINT eRP; - XColorTable* pColorTab; + XColorList* pColorTab; XHatchList* pHatchingList; ChangeType* pnHatchingListState; @@ -563,7 +563,7 @@ public: virtual void PointChanged( Window* pWindow, RECT_POINT eRP ); - void SetColorTable( XColorTable* pColTab ) { pColorTab = pColTab; } + void SetColorTable( XColorList* pColTab ) { pColorTab = pColTab; } void SetHatchingList( XHatchList* pHtchLst) { pHatchingList = pHtchLst; } @@ -611,7 +611,7 @@ private: const SfxItemSet& rOutAttrs; - XColorTable* pColorTab; + XColorList* pColorTab; XBitmapList* pBitmapList; ChangeType* pnBitmapListState; @@ -657,7 +657,7 @@ public: virtual void PointChanged( Window* pWindow, RECT_POINT eRP ); - void SetColorTable( XColorTable* pColTab ) { pColorTab = pColTab; } + void SetColorTable( XColorList* pColTab ) { pColorTab = pColTab; } void SetBitmapList( XBitmapList* pBmpLst) { pBitmapList = pBmpLst; } void SetPageType( sal_uInt16* pInType ) { pPageType = pInType; } @@ -723,7 +723,7 @@ private: const SfxItemSet& rOutAttrs; - XColorTable* pColorTab; + XColorList* pColorTab; ChangeType* pnColorTableState; sal_uInt16* pPageType; @@ -779,7 +779,7 @@ public: virtual void ActivatePage( const SfxItemSet& rSet ); virtual int DeactivatePage( SfxItemSet* pSet ); - void SetColorTable( XColorTable* pColTab ) { pColorTab = pColTab; } + void SetColorTable( XColorList* pColTab ) { pColorTab = pColTab; } void SetPageType( sal_uInt16* pInType ) { pPageType = pInType; } void SetDlgType( sal_uInt16* pInType ) { pDlgType = pInType; } diff --git a/cui/source/inc/cuitabline.hxx b/cui/source/inc/cuitabline.hxx index 828dd7527196..163418cc3cec 100644 --- a/cui/source/inc/cuitabline.hxx +++ b/cui/source/inc/cuitabline.hxx @@ -39,8 +39,8 @@ private: const SfxItemSet& rOutAttrs; - XColorTable* pColorTab; - XColorTable* mpNewColorTab; + XColorList* pColorTab; + XColorList* mpNewColorTab; XDashList* pDashList; XDashList* pNewDashList; XLineEndList* pLineEndList; @@ -84,9 +84,9 @@ public: XLineEndList* GetNewLineEndList() const { return pNewLineEndList; } const XLineEndList* GetLineEndList() const { return pLineEndList; } - void SetNewColorTable( XColorTable* pColTab ) { mpNewColorTab = pColTab; } - XColorTable* GetNewColorTable() const { return mpNewColorTab; } - const XColorTable* GetColorTable() const { return pColorTab; } + void SetNewColorTable( XColorList* pColTab ) { mpNewColorTab = pColTab; } + XColorList* GetNewColorTable() const { return mpNewColorTab; } + const XColorList* GetColorTable() const { return pColorTab; } }; /************************************************************************* @@ -166,7 +166,7 @@ private: XLineAttrSetItem aXLineAttr; SfxItemSet& rXLSet; - XColorTable* pColorTab; + XColorList* pColorTab; XDashList* pDashList; XLineEndList* pLineEndList; @@ -231,7 +231,7 @@ public: virtual void FillUserData(); - void SetColorTable( XColorTable* pColTab ) { pColorTab = pColTab; } + void SetColorTable( XColorList* pColTab ) { pColorTab = pColTab; } void SetDashList( XDashList* pDshLst ) { pDashList = pDshLst; } void SetLineEndList( XLineEndList* pLneEndLst) { pLineEndList = pLneEndLst; } void SetObjSelected( sal_Bool bHasObj ) { bObjSelected = bHasObj; } diff --git a/cui/source/inc/sdrcelldlg.hxx b/cui/source/inc/sdrcelldlg.hxx index 2c740da184ba..fd17127ab3d4 100644 --- a/cui/source/inc/sdrcelldlg.hxx +++ b/cui/source/inc/sdrcelldlg.hxx @@ -27,7 +27,7 @@ #include <sfx2/tabdlg.hxx> -class XColorTable; +class XColorList; class XGradientList; class XHatchList; class XBitmapList; @@ -38,7 +38,7 @@ class SvxFormatCellsDialog : public SfxTabDialog private: const SfxItemSet& mrOutAttrs; - XColorTable* mpColorTab; + XColorList* mpColorTab; XGradientList* mpGradientList; XHatchList* mpHatchingList; XBitmapList* mpBitmapList; diff --git a/cui/source/inc/treeopt.hxx b/cui/source/inc/treeopt.hxx index 6274fe2b70c5..ae85d9456204 100644 --- a/cui/source/inc/treeopt.hxx +++ b/cui/source/inc/treeopt.hxx @@ -43,7 +43,7 @@ CreateTabPage GetSSOCreator( void ); class SfxModule; class SfxShell; class SfxItemSet; -class XColorTable; +class XColorList; class OfaOptionsTreeListBox : public SvTreeListBox { using SvListView::Collapse; @@ -197,7 +197,7 @@ private: // for the ColorTabPage SfxItemSet* pColorPageItemSet; - XColorTable* pColorTab; + XColorList* pColorTab; sal_uInt16 nChangeType; sal_uInt16 nUnknownType; sal_uInt16 nUnknownPos; @@ -269,7 +269,7 @@ public: void ApplyItemSets(); sal_uInt16 GetColorChanged() const { return nChangeType; } - XColorTable* GetColorTable() { return pColorTab; } + XColorList* GetColorTable() { return pColorTab; } // helper functions to call the language settings TabPage from the SpellDialog static void ApplyLanguageOptions(const SfxItemSet& rSet); diff --git a/cui/source/options/optchart.cxx b/cui/source/options/optchart.cxx index 1d29a272a08c..d920d5267d61 100644 --- a/cui/source/options/optchart.cxx +++ b/cui/source/options/optchart.cxx @@ -73,7 +73,7 @@ SvxDefaultColorOptPage::SvxDefaultColorOptPage( Window* pParent, const SfxItemSe aValSetColorBox.Show(); pChartOptions = new SvxChartOptions; - pColorTab = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTab = new XColorList( SvtPathOptions().GetPalettePath() ); const SfxPoolItem* pItem = NULL; if ( rInAttrs.GetItemState( SID_SCH_EDITOPTIONS, sal_False, &pItem ) == SFX_ITEM_SET ) @@ -159,7 +159,7 @@ long SvxDefaultColorOptPage::GetColorIndex( const Color& rCol ) { pColorEntry = pColorTab->GetColor( i ); if( pColorEntry && pColorEntry->GetColor() == rCol ) - return SAL_STATIC_CAST( XPropertyTable*, pColorTab )->Get( pColorEntry->GetName() ); + return SAL_STATIC_CAST( XPropertyList*, pColorTab )->Get( pColorEntry->GetName() ); } } return -1L; diff --git a/cui/source/options/optchart.hxx b/cui/source/options/optchart.hxx index 300ad6c93294..54b01d0f218a 100644 --- a/cui/source/options/optchart.hxx +++ b/cui/source/options/optchart.hxx @@ -35,7 +35,7 @@ #ifndef _SV_BUTTON_HXX #include <vcl/button.hxx> #endif -// header for XColorTable +// header for XColorList #include <svx/xtable.hxx> #include "cfgchart.hxx" @@ -61,7 +61,7 @@ private: SvxChartOptions* pChartOptions; SvxChartColorTableItem* pColorConfig; - XColorTable* pColorTab; + XColorList* pColorTab; DECL_LINK( ResetToDefaults, void * ); DECL_LINK( ListClickedHdl, ChartColorLB * ); diff --git a/cui/source/options/optcolor.cxx b/cui/source/options/optcolor.cxx index c84c2f7e1ab2..733322821399 100644 --- a/cui/source/options/optcolor.cxx +++ b/cui/source/options/optcolor.cxx @@ -945,7 +945,7 @@ ColorConfigWindow_Impl::ColorConfigWindow_Impl(Window* pParent, const ResId& rRe } } - XColorTable aColorTable( SvtPathOptions().GetPalettePath() ); + XColorList aColorTable( SvtPathOptions().GetPalettePath() ); aColorBoxes[0]->InsertAutomaticEntry(); for( sal_Int32 i = 0; i < aColorTable.Count(); i++ ) { diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx index 074e5d5f6c2e..ab0ad2fbc810 100644 --- a/cui/source/options/treeopt.cxx +++ b/cui/source/options/treeopt.cxx @@ -1205,7 +1205,7 @@ IMPL_LINK( OfaTreeOptionsDialog, SelectHdl_Impl, Timer*, EMPTYARG ) if ( SfxViewFrame::Current() && SfxViewFrame::Current()->GetDispatcher() ) pPtr = (const OfaPtrItem*)SfxViewFrame::Current()-> GetDispatcher()->Execute( SID_GET_COLORTABLE, SFX_CALLMODE_SYNCHRON ); - pColorTab = pPtr ? (XColorTable*)pPtr->GetValue() : XColorTable::GetStdColorTable(); + pColorTab = pPtr ? (XColorList*)pPtr->GetValue() : XColorList::GetStdColorList(); rColPage.SetColorTable( pColorTab ); rColPage.SetPageType( &nUnknownType ); @@ -2640,7 +2640,7 @@ short OfaTreeOptionsDialog::Execute() const OfaPtrItem* pPtr = (const OfaPtrItem*)SfxViewFrame::Current()->GetDispatcher()->Execute( SID_GET_COLORTABLE, SFX_CALLMODE_SYNCHRON ); if( pPtr ) { - XColorTable* _pColorTab = (XColorTable*)pPtr->GetValue(); + XColorList* _pColorTab = (XColorList*)pPtr->GetValue(); if( _pColorTab && _pColorTab->GetPath() == GetColorTable()->GetPath() && diff --git a/cui/source/tabpages/backgrnd.cxx b/cui/source/tabpages/backgrnd.cxx index 938ae0868580..f84bc459ea6c 100644 --- a/cui/source/tabpages/backgrnd.cxx +++ b/cui/source/tabpages/backgrnd.cxx @@ -1194,7 +1194,7 @@ void SvxBackgroundTabPage::FillColorValueSets_Impl() { SfxObjectShell* pDocSh = SfxObjectShell::Current(); const SfxPoolItem* pItem = NULL; - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; const Size aSize15x15 = Size( 15, 15 ); FASTBOOL bOwn = sal_False; @@ -1204,7 +1204,7 @@ void SvxBackgroundTabPage::FillColorValueSets_Impl() if ( !pColorTable ) { bOwn = sal_True; - pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); } if ( pColorTable ) diff --git a/cui/source/tabpages/border.cxx b/cui/source/tabpages/border.cxx index 578f29deac8f..cac29eddbe52 100644 --- a/cui/source/tabpages/border.cxx +++ b/cui/source/tabpages/border.cxx @@ -38,7 +38,7 @@ #define LINESTYLE_HTML_MAX 5 -#include <svx/xtable.hxx> // XColorTable +#include <svx/xtable.hxx> // XColorList #include <svx/drawitem.hxx> #include <editeng/boxitem.hxx> #include <editeng/shaditem.hxx> @@ -335,10 +335,10 @@ SvxBorderTabPage::SvxBorderTabPage( Window* pParent, FillValueSets(); FillLineListBox_Impl(); - // ColorBox aus der XColorTable fuellen. + // ColorBox aus der XColorList fuellen. SfxObjectShell* pDocSh = SfxObjectShell::Current(); const SfxPoolItem* pItem = NULL; - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; DBG_ASSERT( pDocSh, "DocShell not found!" ); diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx index 50ce94bd633d..18bc03872773 100644 --- a/cui/source/tabpages/chardlg.cxx +++ b/cui/source/tabpages/chardlg.cxx @@ -46,7 +46,7 @@ #include <cuires.hrc> #include "chardlg.hrc" -#include <svx/xtable.hxx> // XColorTable +#include <svx/xtable.hxx> // XColorList #include "chardlg.hxx" #include "editeng/fontitem.hxx" #include <editeng/postitem.hxx> @@ -715,7 +715,7 @@ void SvxCharNamePage::Initialize() // fill the color box SfxObjectShell* pDocSh = SfxObjectShell::Current(); //DBG_ASSERT( pDocSh, "DocShell not found!" ); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; FASTBOOL bKillTable = sal_False; const SfxPoolItem* pItem = NULL; @@ -728,7 +728,7 @@ void SvxCharNamePage::Initialize() if ( !pColorTable ) { - pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); bKillTable = sal_True; } @@ -1787,7 +1787,7 @@ void SvxCharEffectsPage::Initialize() // fill the color box SfxObjectShell* pDocSh = SfxObjectShell::Current(); DBG_ASSERT( pDocSh, "DocShell not found!" ); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; FASTBOOL bKillTable = sal_False; if ( pDocSh ) @@ -1799,7 +1799,7 @@ void SvxCharEffectsPage::Initialize() if ( !pColorTable ) { - pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); bKillTable = sal_True; } diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx index 9e9219c24acd..f6d63fe6a17a 100644 --- a/cui/source/tabpages/numpages.cxx +++ b/cui/source/tabpages/numpages.cxx @@ -1609,7 +1609,7 @@ void SvxNumOptionsTabPage::Reset( const SfxItemSet& rSet ) { SfxObjectShell* pDocSh = SfxObjectShell::Current(); DBG_ASSERT( pDocSh, "DocShell not found!" ); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; FASTBOOL bKillTable = sal_False; if ( pDocSh ) { @@ -1620,7 +1620,7 @@ void SvxNumOptionsTabPage::Reset( const SfxItemSet& rSet ) if ( !pColorTable ) { - pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); bKillTable = sal_True; } diff --git a/cui/source/tabpages/tpbitmap.cxx b/cui/source/tabpages/tpbitmap.cxx index d67c513c97e6..65a7c9ae8132 100644 --- a/cui/source/tabpages/tpbitmap.cxx +++ b/cui/source/tabpages/tpbitmap.cxx @@ -593,8 +593,8 @@ IMPL_LINK( SvxBitmapTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) if( pEntry ) { pBitmapList->Insert( pEntry ); - - aLbBitmaps.Append( pEntry ); + const Size aUiSize(pBitmapList->getUiBitmapWidth(), pBitmapList->getUiBitmapHeight()); + aLbBitmaps.Append(aUiSize, *pEntry ); aLbBitmaps.SelectEntryPos( aLbBitmaps.GetEntryCount() - 1 ); #ifdef WNT @@ -701,7 +701,8 @@ IMPL_LINK( SvxBitmapTabPage, ClickImportHdl_Impl, void *, EMPTYARG ) XBitmapEntry* pEntry = new XBitmapEntry( aGraphic, aName ); pBitmapList->Insert( pEntry ); - aLbBitmaps.Append( pEntry ); + const Size aUiSize(pBitmapList->getUiBitmapWidth(), pBitmapList->getUiBitmapHeight()); + aLbBitmaps.Append(aUiSize, *pEntry ); aLbBitmaps.SelectEntryPos( aLbBitmaps.GetEntryCount() - 1 ); #ifdef WNT @@ -756,6 +757,7 @@ IMPL_LINK( SvxBitmapTabPage, ClickModifyHdl_Impl, void *, EMPTYARG ) long nCount = pBitmapList->Count(); sal_Bool bDifferent = sal_False; sal_Bool bLoop = sal_True; + const Size aUiSize(pBitmapList->getUiBitmapWidth(), pBitmapList->getUiBitmapHeight()); while( bLoop && pDlg->Execute() == RET_OK ) { @@ -780,7 +782,7 @@ IMPL_LINK( SvxBitmapTabPage, ClickModifyHdl_Impl, void *, EMPTYARG ) pEntry->SetGraphicObject(Graphic(aBitmapEx)); - aLbBitmaps.Modify( pEntry, nPos ); + aLbBitmaps.Modify( aUiSize, *pEntry, nPos ); aLbBitmaps.SelectEntryPos( nPos ); // Flag fuer modifiziert setzen diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx index 326ec9b6e5be..1928e2333b2b 100644 --- a/cui/source/tabpages/tpcolor.cxx +++ b/cui/source/tabpages/tpcolor.cxx @@ -524,7 +524,7 @@ IMPL_LINK( SvxColorTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) ConvertColorValues (aAktuellColor, CM_RGB); pEntry = new XColorEntry( aAktuellColor, aName ); - pColorTab->Insert( pColorTab->Count(), pEntry ); + pColorTab->Insert( pEntry, pColorTab->Count() ); aLbColor.Append( pEntry ); aValSetColorTable.InsertItem( aValSetColorTable.GetItemCount() + 1, @@ -643,7 +643,7 @@ IMPL_LINK( SvxColorTabPage, ClickWorkOnHdl_Impl, void *, EMPTYARG ) ConvertColorValues (aTmpColor, CM_RGB); pColorDlg->SetColor (aTmpColor); - pColorDlg->SetMode( svtools::ColorPickerMode_MODIFY );
+ pColorDlg->SetMode( svtools::ColorPickerMode_MODIFY ); if( pColorDlg->Execute() == RET_OK ) { @@ -698,7 +698,7 @@ IMPL_LINK( SvxColorTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG ) { pEntry = pColorTab->Remove( i + 1 ); DBG_ASSERT( pEntry, "ColorEntry nicht vorhanden (2) !" ); - pColorTab->Insert( i, pEntry ); + pColorTab->Insert( pEntry, i ); } // Listbox und ValueSet aktualisieren @@ -765,14 +765,14 @@ IMPL_LINK( SvxColorTabPage, ClickLoadHdl_Impl, void *, EMPTYARG ) aPathURL.removeFinalSlash(); // Tabelle speichern - XColorTable* pColTab = new XColorTable( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool ); + XColorList* pColTab = new XColorList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool ); pColTab->SetName( aURL.getName() ); // XXX if( pColTab->Load() ) { if( pColTab ) { // Pruefen, ob Tabelle geloescht werden darf: - const XColorTable *pTempTable = 0; + const XColorList *pTempTable = 0; SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( DLGWIN ); SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( DLGWIN ); if( pArea ) diff --git a/cui/source/tabpages/tpline.cxx b/cui/source/tabpages/tpline.cxx index a78837113a1d..b6efd27812c1 100644 --- a/cui/source/tabpages/tpline.cxx +++ b/cui/source/tabpages/tpline.cxx @@ -301,7 +301,7 @@ void SvxLineTabPage::FillListboxes() { // Linienstile sal_uInt16 nOldSelect = aLbLineStyle.GetSelectEntryPos(); - aLbLineStyle.FillStyles(); + // aLbLineStyle.FillStyles(); aLbLineStyle.Fill( pDashList ); aLbLineStyle.SelectEntryPos( nOldSelect ); @@ -728,22 +728,22 @@ sal_Bool SvxLineTabPage::FillItemSet( SfxItemSet& rAttrs ) { case 0: // Rounded, default { - pNew = new XLineJointItem(XLINEJOINT_ROUND); + pNew = new XLineJointItem(com::sun::star::drawing::LineJoint_ROUND); break; } case 1: // - none - { - pNew = new XLineJointItem(XLINEJOINT_NONE); + pNew = new XLineJointItem(com::sun::star::drawing::LineJoint_NONE); break; } case 2: // Miter { - pNew = new XLineJointItem(XLINEJOINT_MITER); + pNew = new XLineJointItem(com::sun::star::drawing::LineJoint_MITER); break; } case 3: // Bevel { - pNew = new XLineJointItem(XLINEJOINT_BEVEL); + pNew = new XLineJointItem(com::sun::star::drawing::LineJoint_BEVEL); break; } } @@ -895,22 +895,22 @@ sal_Bool SvxLineTabPage::FillXLSet_Impl() { case 0: // Rounded, default { - rXLSet.Put(XLineJointItem(XLINEJOINT_ROUND)); + rXLSet.Put(XLineJointItem(com::sun::star::drawing::LineJoint_ROUND)); break; } case 1: // - none - { - rXLSet.Put(XLineJointItem(XLINEJOINT_NONE)); + rXLSet.Put(XLineJointItem(com::sun::star::drawing::LineJoint_NONE)); break; } case 2: // Miter { - rXLSet.Put(XLineJointItem(XLINEJOINT_MITER)); + rXLSet.Put(XLineJointItem(com::sun::star::drawing::LineJoint_MITER)); break; } case 3: // Bevel { - rXLSet.Put(XLineJointItem(XLINEJOINT_BEVEL)); + rXLSet.Put(XLineJointItem(com::sun::star::drawing::LineJoint_BEVEL)); break; } } @@ -1344,15 +1344,15 @@ void SvxLineTabPage::Reset( const SfxItemSet& rAttrs ) } else if(SFX_ITEM_DONTCARE != rAttrs.GetItemState(XATTR_LINEJOINT)) { - XLineJoint eLineJoint = ((const XLineJointItem&)(rAttrs.Get(XATTR_LINEJOINT))).GetValue(); + const com::sun::star::drawing::LineJoint eLineJoint = ((const XLineJointItem&)(rAttrs.Get(XATTR_LINEJOINT))).GetValue(); switch(eLineJoint) { - case XLINEJOINT_ROUND : maLBEdgeStyle.SelectEntryPos(0); break; - case XLINEJOINT_NONE : maLBEdgeStyle.SelectEntryPos(1); break; - case XLINEJOINT_MITER : maLBEdgeStyle.SelectEntryPos(2); break; - case XLINEJOINT_BEVEL : maLBEdgeStyle.SelectEntryPos(3); break; - case XLINEJOINT_MIDDLE : break; + case com::sun::star::drawing::LineJoint_MIDDLE : // fallback to round, unused value + case com::sun::star::drawing::LineJoint_ROUND : maLBEdgeStyle.SelectEntryPos(0); break; + case com::sun::star::drawing::LineJoint_NONE : maLBEdgeStyle.SelectEntryPos(1); break; + case com::sun::star::drawing::LineJoint_MITER : maLBEdgeStyle.SelectEntryPos(2); break; + case com::sun::star::drawing::LineJoint_BEVEL : maLBEdgeStyle.SelectEntryPos(3); break; } } else diff --git a/cui/source/tabpages/tplnedef.cxx b/cui/source/tabpages/tplnedef.cxx index a9116e88e3f3..4a5adb6e2bea 100644 --- a/cui/source/tabpages/tplnedef.cxx +++ b/cui/source/tabpages/tplnedef.cxx @@ -626,8 +626,8 @@ IMPL_LINK( SvxLineDefTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) long nDashCount = pDashList->Count(); pDashList->Insert( pEntry, nDashCount ); - Bitmap* pBitmap = pDashList->GetBitmap( nDashCount ); - aLbLineStyles.Append( pEntry, pBitmap ); + const Bitmap aBitmap = pDashList->GetUiBitmap( nDashCount ); + aLbLineStyles.Append( pEntry, &aBitmap ); aLbLineStyles.SelectEntryPos( aLbLineStyles.GetEntryCount() - 1 ); @@ -707,8 +707,8 @@ IMPL_LINK( SvxLineDefTabPage, ClickModifyHdl_Impl, void *, EMPTYARG ) XDashEntry* pEntry = new XDashEntry( aDash, aName ); delete pDashList->Replace( pEntry, nPos ); - Bitmap* pBitmap = pDashList->GetBitmap( nPos ); - aLbLineStyles.Modify( pEntry, nPos, pBitmap ); + const Bitmap aBitmap = pDashList->GetUiBitmap( nPos ); + aLbLineStyles.Modify( pEntry, nPos, &aBitmap ); aLbLineStyles.SelectEntryPos( nPos ); diff --git a/cui/source/tabpages/tplneend.cxx b/cui/source/tabpages/tplneend.cxx index 942e3f93f6e1..210f3d4c7dd9 100644 --- a/cui/source/tabpages/tplneend.cxx +++ b/cui/source/tabpages/tplneend.cxx @@ -407,7 +407,8 @@ IMPL_LINK( SvxLineEndDefTabPage, ClickModifyHdl_Impl, void *, EMPTYARG ) pEntry->SetName( aName ); aEdtName.SetText( aName ); - aLbLineEnds.Modify( pEntry, nPos, pLineEndList->GetBitmap( nPos ) ); + const Bitmap aUiBitmap( pLineEndList->GetUiBitmap( nPos ) ); + aLbLineEnds.Modify( pEntry, nPos, &aUiBitmap ); aLbLineEnds.SelectEntryPos( nPos ); // Flag fuer modifiziert setzen @@ -505,10 +506,10 @@ IMPL_LINK( SvxLineEndDefTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) long nLineEndCount = pLineEndList->Count(); pLineEndList->Insert( pEntry, nLineEndCount ); - Bitmap* pBitmap = pLineEndList->GetBitmap( nLineEndCount ); + const Bitmap aBitmap = pLineEndList->GetUiBitmap( nLineEndCount ); // Zur ListBox hinzufuegen - aLbLineEnds.Append( pEntry, pBitmap ); + aLbLineEnds.Append( pEntry, &aBitmap ); aLbLineEnds.SelectEntryPos( aLbLineEnds.GetEntryCount() - 1 ); // Flag fuer modifiziert setzen diff --git a/default_images/res/soliline.png b/default_images/res/soliline.png Binary files differdeleted file mode 100644 index 9ac96cd9f601..000000000000 --- a/default_images/res/soliline.png +++ /dev/null diff --git a/default_images/sc/res/sidebar/123.png b/default_images/sc/res/sidebar/123.png Binary files differnew file mode 100755 index 000000000000..0d0a6ef7659c --- /dev/null +++ b/default_images/sc/res/sidebar/123.png diff --git a/default_images/sc/res/sidebar/ABC.png b/default_images/sc/res/sidebar/ABC.png Binary files differnew file mode 100755 index 000000000000..fb7e5c8b5585 --- /dev/null +++ b/default_images/sc/res/sidebar/ABC.png diff --git a/default_images/sc/res/sidebar/CellBorder.png b/default_images/sc/res/sidebar/CellBorder.png Binary files differnew file mode 100755 index 000000000000..f4e8e005c340 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_005.png b/default_images/sc/res/sidebar/CellBorderLineStyle_005.png Binary files differnew file mode 100755 index 000000000000..6116ee216ad5 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_005.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_005_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_005_h.png Binary files differnew file mode 100755 index 000000000000..444d51484993 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_005_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_110.png b/default_images/sc/res/sidebar/CellBorderLineStyle_110.png Binary files differnew file mode 100755 index 000000000000..ddca641e4839 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_110.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_110_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_110_h.png Binary files differnew file mode 100755 index 000000000000..1144a495ef0d --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_110_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_250.png b/default_images/sc/res/sidebar/CellBorderLineStyle_250.png Binary files differnew file mode 100755 index 000000000000..93014bf7be88 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_250.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_250_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_250_h.png Binary files differnew file mode 100755 index 000000000000..8a6cc3ce6d7c --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_250_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_260.png b/default_images/sc/res/sidebar/CellBorderLineStyle_260.png Binary files differnew file mode 100755 index 000000000000..4fdc28a2690f --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_260.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_260_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_260_h.png Binary files differnew file mode 100755 index 000000000000..769a03cb8902 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_260_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_400.png b/default_images/sc/res/sidebar/CellBorderLineStyle_400.png Binary files differnew file mode 100755 index 000000000000..38cda1bfd231 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_400.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_400_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_400_h.png Binary files differnew file mode 100755 index 000000000000..cd8503a6de83 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_400_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_450.png b/default_images/sc/res/sidebar/CellBorderLineStyle_450.png Binary files differnew file mode 100755 index 000000000000..245594f90106 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_450.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_450_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_450_h.png Binary files differnew file mode 100755 index 000000000000..17fa6fc02932 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_450_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_500.png b/default_images/sc/res/sidebar/CellBorderLineStyle_500.png Binary files differnew file mode 100755 index 000000000000..9a6457d03a13 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_500.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_500_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_500_h.png Binary files differnew file mode 100755 index 000000000000..90d8d6937eaa --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_500_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_505.png b/default_images/sc/res/sidebar/CellBorderLineStyle_505.png Binary files differnew file mode 100755 index 000000000000..78865c0534fc --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_505.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_505_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_505_h.png Binary files differnew file mode 100755 index 000000000000..94846c3e8779 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_505_h.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_750.png b/default_images/sc/res/sidebar/CellBorderLineStyle_750.png Binary files differnew file mode 100755 index 000000000000..71088c184f8c --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_750.png diff --git a/default_images/sc/res/sidebar/CellBorderLineStyle_750_h.png b/default_images/sc/res/sidebar/CellBorderLineStyle_750_h.png Binary files differnew file mode 100755 index 000000000000..40bafef208b2 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorderLineStyle_750_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_All_18x18.png b/default_images/sc/res/sidebar/CellBorder_All_18x18.png Binary files differnew file mode 100755 index 000000000000..68f9d451675d --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_All_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_All_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_All_18x18_h.png Binary files differnew file mode 100755 index 000000000000..2f7909dda654 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_All_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_Bottom_18x18.png b/default_images/sc/res/sidebar/CellBorder_Bottom_18x18.png Binary files differnew file mode 100755 index 000000000000..20d34e229ec7 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Bottom_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_Bottom_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_Bottom_18x18_h.png Binary files differnew file mode 100755 index 000000000000..7e3ba683d107 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Bottom_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_Bottom_Double_18x18.png b/default_images/sc/res/sidebar/CellBorder_Bottom_Double_18x18.png Binary files differnew file mode 100755 index 000000000000..3bf6450c686c --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Bottom_Double_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_Bottom_Double_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_Bottom_Double_18x18_h.png Binary files differnew file mode 100755 index 000000000000..6093c976e5db --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Bottom_Double_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_Bottom_Thick_18x18.png b/default_images/sc/res/sidebar/CellBorder_Bottom_Thick_18x18.png Binary files differnew file mode 100755 index 000000000000..ecf2afa713be --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Bottom_Thick_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_Bottom_Thick_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_Bottom_Thick_18x18_h.png Binary files differnew file mode 100755 index 000000000000..a824ac0b3814 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Bottom_Thick_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_Empty_18x18.png b/default_images/sc/res/sidebar/CellBorder_Empty_18x18.png Binary files differnew file mode 100755 index 000000000000..a5f3dd45d8b3 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Empty_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_Empty_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_Empty_18x18_h.png Binary files differnew file mode 100755 index 000000000000..f62769b4dae6 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Empty_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_FourBorders_18x18.png b/default_images/sc/res/sidebar/CellBorder_FourBorders_18x18.png Binary files differnew file mode 100755 index 000000000000..54a42b57b918 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_FourBorders_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_FourBorders_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_FourBorders_18x18_h.png Binary files differnew file mode 100755 index 000000000000..7b351935c0cc --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_FourBorders_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_FourBorders_Thick_18x18.png b/default_images/sc/res/sidebar/CellBorder_FourBorders_Thick_18x18.png Binary files differnew file mode 100755 index 000000000000..a54c4f57d6b3 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_FourBorders_Thick_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_FourBorders_Thick_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_FourBorders_Thick_18x18_h.png Binary files differnew file mode 100755 index 000000000000..a62c20175522 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_FourBorders_Thick_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_LeftAndRight_18x18.png b/default_images/sc/res/sidebar/CellBorder_LeftAndRight_18x18.png Binary files differnew file mode 100755 index 000000000000..39e9b0ff2ff9 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_LeftAndRight_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_LeftAndRight_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_LeftAndRight_18x18_h.png Binary files differnew file mode 100755 index 000000000000..62ffc82330f2 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_LeftAndRight_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_LeftDiagonal_18x18.png b/default_images/sc/res/sidebar/CellBorder_LeftDiagonal_18x18.png Binary files differnew file mode 100755 index 000000000000..4e58fee70ca7 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_LeftDiagonal_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_LeftDiagonal_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_LeftDiagonal_18x18_h.png Binary files differnew file mode 100755 index 000000000000..64081573bb4a --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_LeftDiagonal_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_Left_18x18.png b/default_images/sc/res/sidebar/CellBorder_Left_18x18.png Binary files differnew file mode 100755 index 000000000000..987389173b47 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Left_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_Left_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_Left_18x18_h.png Binary files differnew file mode 100755 index 000000000000..7349f5b3f759 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Left_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_RightDiagonal_18x18.png b/default_images/sc/res/sidebar/CellBorder_RightDiagonal_18x18.png Binary files differnew file mode 100755 index 000000000000..3325d03918ba --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_RightDiagonal_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_RightDiagonal_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_RightDiagonal_18x18_h.png Binary files differnew file mode 100755 index 000000000000..ccebd4b4c8d1 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_RightDiagonal_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_Right_18x18.png b/default_images/sc/res/sidebar/CellBorder_Right_18x18.png Binary files differnew file mode 100755 index 000000000000..a33eca25b44d --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Right_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_Right_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_Right_18x18_h.png Binary files differnew file mode 100755 index 000000000000..d84d917b3b64 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Right_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_TopAndBottom_18x18.png b/default_images/sc/res/sidebar/CellBorder_TopAndBottom_18x18.png Binary files differnew file mode 100755 index 000000000000..4249bf669d6e --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_TopAndBottom_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_TopAndBottom_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_TopAndBottom_18x18_h.png Binary files differnew file mode 100755 index 000000000000..3bd0b73552ab --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_TopAndBottom_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18.png b/default_images/sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18.png Binary files differnew file mode 100755 index 000000000000..793a98451a82 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18_h.png Binary files differnew file mode 100755 index 000000000000..bdc624188b0a --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_TopSingle_BottomDouble_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18.png b/default_images/sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18.png Binary files differnew file mode 100755 index 000000000000..e7c8d0576e53 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18_h.png Binary files differnew file mode 100755 index 000000000000..758af77617ba --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_TopThin_BottomThick_18x18_h.png diff --git a/default_images/sc/res/sidebar/CellBorder_Top_18x18.png b/default_images/sc/res/sidebar/CellBorder_Top_18x18.png Binary files differnew file mode 100755 index 000000000000..1dda1c1cdfd3 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Top_18x18.png diff --git a/default_images/sc/res/sidebar/CellBorder_Top_18x18_h.png b/default_images/sc/res/sidebar/CellBorder_Top_18x18_h.png Binary files differnew file mode 100755 index 000000000000..dfa9c53c73d2 --- /dev/null +++ b/default_images/sc/res/sidebar/CellBorder_Top_18x18_h.png diff --git a/default_images/sc/res/sidebar/Line_color.png b/default_images/sc/res/sidebar/Line_color.png Binary files differnew file mode 100755 index 000000000000..a9522b9eeedd --- /dev/null +++ b/default_images/sc/res/sidebar/Line_color.png diff --git a/default_images/sc/res/sidebar/canlendar.png b/default_images/sc/res/sidebar/canlendar.png Binary files differnew file mode 100755 index 000000000000..b40421e68f3e --- /dev/null +++ b/default_images/sc/res/sidebar/canlendar.png diff --git a/default_images/sc/res/sidebar/fill_color.png b/default_images/sc/res/sidebar/fill_color.png Binary files differnew file mode 100755 index 000000000000..1d5d23feb84c --- /dev/null +++ b/default_images/sc/res/sidebar/fill_color.png diff --git a/default_images/sc/res/sidebar/fill_color_h.png b/default_images/sc/res/sidebar/fill_color_h.png Binary files differnew file mode 100755 index 000000000000..47e7ea15bfaa --- /dev/null +++ b/default_images/sc/res/sidebar/fill_color_h.png diff --git a/default_images/sc/res/sidebar/money.png b/default_images/sc/res/sidebar/money.png Binary files differnew file mode 100755 index 000000000000..15b6ff2107ee --- /dev/null +++ b/default_images/sc/res/sidebar/money.png diff --git a/default_images/sc/res/sidebar/morebutton.bmp b/default_images/sc/res/sidebar/morebutton.bmp Binary files differnew file mode 100755 index 000000000000..c665b3e866a8 --- /dev/null +++ b/default_images/sc/res/sidebar/morebutton.bmp diff --git a/default_images/sc/res/sidebar/morebutton_h.bmp b/default_images/sc/res/sidebar/morebutton_h.bmp Binary files differnew file mode 100755 index 000000000000..c665b3e866a8 --- /dev/null +++ b/default_images/sc/res/sidebar/morebutton_h.bmp diff --git a/default_images/sc/res/sidebar/percent.png b/default_images/sc/res/sidebar/percent.png Binary files differnew file mode 100755 index 000000000000..83f37512545d --- /dev/null +++ b/default_images/sc/res/sidebar/percent.png diff --git a/default_images/sc/res/sidebar/sc_alignbottom.png b/default_images/sc/res/sidebar/sc_alignbottom.png Binary files differnew file mode 100755 index 000000000000..de22c240efdb --- /dev/null +++ b/default_images/sc/res/sidebar/sc_alignbottom.png diff --git a/default_images/sc/res/sidebar/sc_aligncenter.png b/default_images/sc/res/sidebar/sc_aligncenter.png Binary files differnew file mode 100755 index 000000000000..441e6773aab9 --- /dev/null +++ b/default_images/sc/res/sidebar/sc_aligncenter.png diff --git a/default_images/sc/res/sidebar/sc_aligncenter_v.png b/default_images/sc/res/sidebar/sc_aligncenter_v.png Binary files differnew file mode 100755 index 000000000000..919edab0d01b --- /dev/null +++ b/default_images/sc/res/sidebar/sc_aligncenter_v.png diff --git a/default_images/sc/res/sidebar/sc_alignjust.png b/default_images/sc/res/sidebar/sc_alignjust.png Binary files differnew file mode 100755 index 000000000000..1d57b1c4b2ce --- /dev/null +++ b/default_images/sc/res/sidebar/sc_alignjust.png diff --git a/default_images/sc/res/sidebar/sc_alignleft.png b/default_images/sc/res/sidebar/sc_alignleft.png Binary files differnew file mode 100755 index 000000000000..a258013a958c --- /dev/null +++ b/default_images/sc/res/sidebar/sc_alignleft.png diff --git a/default_images/sc/res/sidebar/sc_alignright.png b/default_images/sc/res/sidebar/sc_alignright.png Binary files differnew file mode 100755 index 000000000000..cbf816b540ce --- /dev/null +++ b/default_images/sc/res/sidebar/sc_alignright.png diff --git a/default_images/sc/res/sidebar/sc_aligntop.png b/default_images/sc/res/sidebar/sc_aligntop.png Binary files differnew file mode 100755 index 000000000000..275133c3409d --- /dev/null +++ b/default_images/sc/res/sidebar/sc_aligntop.png diff --git a/default_images/sfx2/res/grip.png b/default_images/sfx2/res/grip.png Binary files differnew file mode 100755 index 000000000000..696998385dbb --- /dev/null +++ b/default_images/sfx2/res/grip.png diff --git a/default_images/sfx2/res/grip_hc.png b/default_images/sfx2/res/grip_hc.png Binary files differnew file mode 100755 index 000000000000..04e370d48bdf --- /dev/null +++ b/default_images/sfx2/res/grip_hc.png diff --git a/default_images/sfx2/res/menu.png b/default_images/sfx2/res/menu.png Binary files differnew file mode 100755 index 000000000000..e65517b9ca9d --- /dev/null +++ b/default_images/sfx2/res/menu.png diff --git a/default_images/sfx2/res/menu_hc.png b/default_images/sfx2/res/menu_hc.png Binary files differnew file mode 100755 index 000000000000..bebd1d622707 --- /dev/null +++ b/default_images/sfx2/res/menu_hc.png diff --git a/default_images/sfx2/res/minus_hc.png b/default_images/sfx2/res/minus_hc.png Binary files differnew file mode 100644 index 000000000000..9ee2e438df85 --- /dev/null +++ b/default_images/sfx2/res/minus_hc.png diff --git a/default_images/sfx2/res/plus_hc.png b/default_images/sfx2/res/plus_hc.png Binary files differnew file mode 100644 index 000000000000..a0b80adf6d93 --- /dev/null +++ b/default_images/sfx2/res/plus_hc.png diff --git a/default_images/sfx2/res/separator.png b/default_images/sfx2/res/separator.png Binary files differnew file mode 100755 index 000000000000..d518aefed706 --- /dev/null +++ b/default_images/sfx2/res/separator.png diff --git a/default_images/sfx2/res/symphony/morebutton.png b/default_images/sfx2/res/symphony/morebutton.png Binary files differnew file mode 100755 index 000000000000..5cffa97ca41c --- /dev/null +++ b/default_images/sfx2/res/symphony/morebutton.png diff --git a/default_images/sfx2/res/symphony/morebutton_h.png b/default_images/sfx2/res/symphony/morebutton_h.png Binary files differnew file mode 100755 index 000000000000..5cffa97ca41c --- /dev/null +++ b/default_images/sfx2/res/symphony/morebutton_h.png diff --git a/default_images/sfx2/res/symphony/open_more.png b/default_images/sfx2/res/symphony/open_more.png Binary files differnew file mode 100755 index 000000000000..c981abf0f3a5 --- /dev/null +++ b/default_images/sfx2/res/symphony/open_more.png diff --git a/default_images/sfx2/res/symphony/sidebar-3d-large-hc.png b/default_images/sfx2/res/symphony/sidebar-3d-large-hc.png Binary files differnew file mode 100755 index 000000000000..7bc11604f897 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-3d-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-3d-large.png b/default_images/sfx2/res/symphony/sidebar-3d-large.png Binary files differnew file mode 100755 index 000000000000..7bc11604f897 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-3d-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-3d-small-hc.png b/default_images/sfx2/res/symphony/sidebar-3d-small-hc.png Binary files differnew file mode 100755 index 000000000000..a4cdda9ad5bc --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-3d-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-3d-small.png b/default_images/sfx2/res/symphony/sidebar-3d-small.png Binary files differnew file mode 100755 index 000000000000..a4cdda9ad5bc --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-3d-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-animation-large-hc.png b/default_images/sfx2/res/symphony/sidebar-animation-large-hc.png Binary files differnew file mode 100755 index 000000000000..0be7962635fd --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-animation-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-animation-large.png b/default_images/sfx2/res/symphony/sidebar-animation-large.png Binary files differnew file mode 100755 index 000000000000..0be7962635fd --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-animation-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-animation-small-hc.png b/default_images/sfx2/res/symphony/sidebar-animation-small-hc.png Binary files differnew file mode 100755 index 000000000000..c494dfa6e170 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-animation-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-animation-small.png b/default_images/sfx2/res/symphony/sidebar-animation-small.png Binary files differnew file mode 100755 index 000000000000..c494dfa6e170 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-animation-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-colors-large-hc.png b/default_images/sfx2/res/symphony/sidebar-colors-large-hc.png Binary files differnew file mode 100755 index 000000000000..39ecdc12d1bf --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-colors-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-colors-large.png b/default_images/sfx2/res/symphony/sidebar-colors-large.png Binary files differnew file mode 100755 index 000000000000..39ecdc12d1bf --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-colors-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-colors-small-hc.png b/default_images/sfx2/res/symphony/sidebar-colors-small-hc.png Binary files differnew file mode 100755 index 000000000000..049514bec7df --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-colors-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-colors-small.png b/default_images/sfx2/res/symphony/sidebar-colors-small.png Binary files differnew file mode 100755 index 000000000000..049514bec7df --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-colors-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-eyedropper-large-hc.png b/default_images/sfx2/res/symphony/sidebar-eyedropper-large-hc.png Binary files differnew file mode 100755 index 000000000000..be99b1fbc2a4 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-eyedropper-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-eyedropper-large.png b/default_images/sfx2/res/symphony/sidebar-eyedropper-large.png Binary files differnew file mode 100755 index 000000000000..be99b1fbc2a4 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-eyedropper-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-eyedropper-small-hc.png b/default_images/sfx2/res/symphony/sidebar-eyedropper-small-hc.png Binary files differnew file mode 100755 index 000000000000..55e182a7cfd8 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-eyedropper-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-eyedropper-small.png b/default_images/sfx2/res/symphony/sidebar-eyedropper-small.png Binary files differnew file mode 100755 index 000000000000..55e182a7cfd8 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-eyedropper-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-functions-large-hc.png b/default_images/sfx2/res/symphony/sidebar-functions-large-hc.png Binary files differnew file mode 100644 index 000000000000..1991850ae7db --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-functions-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-functions-large.png b/default_images/sfx2/res/symphony/sidebar-functions-large.png Binary files differnew file mode 100644 index 000000000000..1991850ae7db --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-functions-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-functions-small-hc.png b/default_images/sfx2/res/symphony/sidebar-functions-small-hc.png Binary files differnew file mode 100644 index 000000000000..615bd0b8788d --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-functions-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-functions-small.png b/default_images/sfx2/res/symphony/sidebar-functions-small.png Binary files differnew file mode 100644 index 000000000000..615bd0b8788d --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-functions-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-gallery-large-hc.png b/default_images/sfx2/res/symphony/sidebar-gallery-large-hc.png Binary files differnew file mode 100755 index 000000000000..9effe086a135 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-gallery-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-gallery-large.png b/default_images/sfx2/res/symphony/sidebar-gallery-large.png Binary files differnew file mode 100755 index 000000000000..9effe086a135 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-gallery-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-gallery-small-hc.png b/default_images/sfx2/res/symphony/sidebar-gallery-small-hc.png Binary files differnew file mode 100755 index 000000000000..29b3c2545978 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-gallery-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-gallery-small.png b/default_images/sfx2/res/symphony/sidebar-gallery-small.png Binary files differnew file mode 100755 index 000000000000..29b3c2545978 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-gallery-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-imganim-large-hc.png b/default_images/sfx2/res/symphony/sidebar-imganim-large-hc.png Binary files differnew file mode 100755 index 000000000000..778e49979e55 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-imganim-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-imganim-large.png b/default_images/sfx2/res/symphony/sidebar-imganim-large.png Binary files differnew file mode 100755 index 000000000000..778e49979e55 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-imganim-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-imganim-small-hc.png b/default_images/sfx2/res/symphony/sidebar-imganim-small-hc.png Binary files differnew file mode 100755 index 000000000000..50a065ac299b --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-imganim-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-imganim-small.png b/default_images/sfx2/res/symphony/sidebar-imganim-small.png Binary files differnew file mode 100755 index 000000000000..50a065ac299b --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-imganim-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-navigator-large-hc.png b/default_images/sfx2/res/symphony/sidebar-navigator-large-hc.png Binary files differnew file mode 100755 index 000000000000..a078b0a54194 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-navigator-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-navigator-large.png b/default_images/sfx2/res/symphony/sidebar-navigator-large.png Binary files differnew file mode 100755 index 000000000000..a078b0a54194 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-navigator-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-navigator-small-hc.png b/default_images/sfx2/res/symphony/sidebar-navigator-small-hc.png Binary files differnew file mode 100755 index 000000000000..00bd1cabf200 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-navigator-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-navigator-small.png b/default_images/sfx2/res/symphony/sidebar-navigator-small.png Binary files differnew file mode 100755 index 000000000000..00bd1cabf200 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-navigator-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-property-large-hc.png b/default_images/sfx2/res/symphony/sidebar-property-large-hc.png Binary files differnew file mode 100755 index 000000000000..fb0c1595ff68 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-property-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-property-large.png b/default_images/sfx2/res/symphony/sidebar-property-large.png Binary files differnew file mode 100755 index 000000000000..fb0c1595ff68 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-property-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-property-small-hc.png b/default_images/sfx2/res/symphony/sidebar-property-small-hc.png Binary files differnew file mode 100755 index 000000000000..4147aa14cc0b --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-property-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-property-small.png b/default_images/sfx2/res/symphony/sidebar-property-small.png Binary files differnew file mode 100755 index 000000000000..4147aa14cc0b --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-property-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-style-large-hc.png b/default_images/sfx2/res/symphony/sidebar-style-large-hc.png Binary files differnew file mode 100755 index 000000000000..0d59a2df0cba --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-style-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-style-large.png b/default_images/sfx2/res/symphony/sidebar-style-large.png Binary files differnew file mode 100755 index 000000000000..0d59a2df0cba --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-style-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-style-small-hc.png b/default_images/sfx2/res/symphony/sidebar-style-small-hc.png Binary files differnew file mode 100755 index 000000000000..d570ffa0f8de --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-style-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-style-small.png b/default_images/sfx2/res/symphony/sidebar-style-small.png Binary files differnew file mode 100755 index 000000000000..d570ffa0f8de --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-style-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-template-large-hc.png b/default_images/sfx2/res/symphony/sidebar-template-large-hc.png Binary files differnew file mode 100755 index 000000000000..f4beddc5426d --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-template-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-template-large.png b/default_images/sfx2/res/symphony/sidebar-template-large.png Binary files differnew file mode 100755 index 000000000000..f4beddc5426d --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-template-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-template-small-hc.png b/default_images/sfx2/res/symphony/sidebar-template-small-hc.png Binary files differnew file mode 100755 index 000000000000..65bff0c226e8 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-template-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-template-small.png b/default_images/sfx2/res/symphony/sidebar-template-small.png Binary files differnew file mode 100755 index 000000000000..65bff0c226e8 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-template-small.png diff --git a/default_images/sfx2/res/symphony/sidebar-transition-large-hc.png b/default_images/sfx2/res/symphony/sidebar-transition-large-hc.png Binary files differnew file mode 100755 index 000000000000..f0c319878bb7 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-transition-large-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-transition-large.png b/default_images/sfx2/res/symphony/sidebar-transition-large.png Binary files differnew file mode 100755 index 000000000000..f0c319878bb7 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-transition-large.png diff --git a/default_images/sfx2/res/symphony/sidebar-transition-small-hc.png b/default_images/sfx2/res/symphony/sidebar-transition-small-hc.png Binary files differnew file mode 100755 index 000000000000..6cdc89a5e614 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-transition-small-hc.png diff --git a/default_images/sfx2/res/symphony/sidebar-transition-small.png b/default_images/sfx2/res/symphony/sidebar-transition-small.png Binary files differnew file mode 100755 index 000000000000..6cdc89a5e614 --- /dev/null +++ b/default_images/sfx2/res/symphony/sidebar-transition-small.png diff --git a/default_images/svx/res/rotation.png b/default_images/svx/res/rotation.png Binary files differnew file mode 100755 index 000000000000..57f75b98732c --- /dev/null +++ b/default_images/svx/res/rotation.png diff --git a/default_images/svx/res/rotation_h.png b/default_images/svx/res/rotation_h.png Binary files differnew file mode 100755 index 000000000000..e8adbfc6e92c --- /dev/null +++ b/default_images/svx/res/rotation_h.png diff --git a/default_images/svx/res/symphony/ b/default_images/svx/res/symphony/ Binary files differnew file mode 100755 index 000000000000..263af5d328bd --- /dev/null +++ b/default_images/svx/res/symphony/ diff --git a/default_images/svx/res/symphony/AdjustColorBlue_16x16.png b/default_images/svx/res/symphony/AdjustColorBlue_16x16.png Binary files differnew file mode 100755 index 000000000000..0e4e0b3d2599 --- /dev/null +++ b/default_images/svx/res/symphony/AdjustColorBlue_16x16.png diff --git a/default_images/svx/res/symphony/AdjustColorGamma_16x16.png b/default_images/svx/res/symphony/AdjustColorGamma_16x16.png Binary files differnew file mode 100755 index 000000000000..bc593f743048 --- /dev/null +++ b/default_images/svx/res/symphony/AdjustColorGamma_16x16.png diff --git a/default_images/svx/res/symphony/AdjustColorGreen_16x16.png b/default_images/svx/res/symphony/AdjustColorGreen_16x16.png Binary files differnew file mode 100755 index 000000000000..05f99dcd85b2 --- /dev/null +++ b/default_images/svx/res/symphony/AdjustColorGreen_16x16.png diff --git a/default_images/svx/res/symphony/AdjustColorRed_16x16.png b/default_images/svx/res/symphony/AdjustColorRed_16x16.png Binary files differnew file mode 100755 index 000000000000..86ed800174f8 --- /dev/null +++ b/default_images/svx/res/symphony/AdjustColorRed_16x16.png diff --git a/default_images/svx/res/symphony/AlignTextCenter_16x16.png b/default_images/svx/res/symphony/AlignTextCenter_16x16.png Binary files differnew file mode 100755 index 000000000000..441e6773aab9 --- /dev/null +++ b/default_images/svx/res/symphony/AlignTextCenter_16x16.png diff --git a/default_images/svx/res/symphony/AlignTextJustified_16x16.png b/default_images/svx/res/symphony/AlignTextJustified_16x16.png Binary files differnew file mode 100755 index 000000000000..1d57b1c4b2ce --- /dev/null +++ b/default_images/svx/res/symphony/AlignTextJustified_16x16.png diff --git a/default_images/svx/res/symphony/AlignTextLeft_16x16.png b/default_images/svx/res/symphony/AlignTextLeft_16x16.png Binary files differnew file mode 100755 index 000000000000..a258013a958c --- /dev/null +++ b/default_images/svx/res/symphony/AlignTextLeft_16x16.png diff --git a/default_images/svx/res/symphony/AlignTextRight_16x16.png b/default_images/svx/res/symphony/AlignTextRight_16x16.png Binary files differnew file mode 100755 index 000000000000..cbf816b540ce --- /dev/null +++ b/default_images/svx/res/symphony/AlignTextRight_16x16.png diff --git a/default_images/svx/res/symphony/ColorModeBlackWhite_16x16.png b/default_images/svx/res/symphony/ColorModeBlackWhite_16x16.png Binary files differnew file mode 100755 index 000000000000..c6d333cb45ed --- /dev/null +++ b/default_images/svx/res/symphony/ColorModeBlackWhite_16x16.png diff --git a/default_images/svx/res/symphony/ColorModeGrey_16x16.png b/default_images/svx/res/symphony/ColorModeGrey_16x16.png Binary files differnew file mode 100755 index 000000000000..5bda54f81d99 --- /dev/null +++ b/default_images/svx/res/symphony/ColorModeGrey_16x16.png diff --git a/default_images/svx/res/symphony/ColorModeNormal_16x16.png b/default_images/svx/res/symphony/ColorModeNormal_16x16.png Binary files differnew file mode 100755 index 000000000000..a618abd72851 --- /dev/null +++ b/default_images/svx/res/symphony/ColorModeNormal_16x16.png diff --git a/default_images/svx/res/symphony/ColorModeWaterMark_16x16.png b/default_images/svx/res/symphony/ColorModeWaterMark_16x16.png Binary files differnew file mode 100755 index 000000000000..1606498d5537 --- /dev/null +++ b/default_images/svx/res/symphony/ColorModeWaterMark_16x16.png diff --git a/default_images/svx/res/symphony/DecreaseSpace_16x16.png b/default_images/svx/res/symphony/DecreaseSpace_16x16.png Binary files differnew file mode 100755 index 000000000000..3f97e69229fe --- /dev/null +++ b/default_images/svx/res/symphony/DecreaseSpace_16x16.png diff --git a/default_images/svx/res/symphony/FlipHorizontally_16x16.png b/default_images/svx/res/symphony/FlipHorizontally_16x16.png Binary files differnew file mode 100755 index 000000000000..281ee466886d --- /dev/null +++ b/default_images/svx/res/symphony/FlipHorizontally_16x16.png diff --git a/default_images/svx/res/symphony/FlipVertically_16x16.png b/default_images/svx/res/symphony/FlipVertically_16x16.png Binary files differnew file mode 100755 index 000000000000..7c9c4c45e205 --- /dev/null +++ b/default_images/svx/res/symphony/FlipVertically_16x16.png diff --git a/default_images/svx/res/symphony/Highlight.png b/default_images/svx/res/symphony/Highlight.png Binary files differnew file mode 100755 index 000000000000..8640d2e44be9 --- /dev/null +++ b/default_images/svx/res/symphony/Highlight.png diff --git a/default_images/svx/res/symphony/IncreaseSpace_16x16.png b/default_images/svx/res/symphony/IncreaseSpace_16x16.png Binary files differnew file mode 100755 index 000000000000..f27f369dbe61 --- /dev/null +++ b/default_images/svx/res/symphony/IncreaseSpace_16x16.png diff --git a/default_images/svx/res/symphony/Indent2.png b/default_images/svx/res/symphony/Indent2.png Binary files differnew file mode 100755 index 000000000000..9cb8663a9703 --- /dev/null +++ b/default_images/svx/res/symphony/Indent2.png diff --git a/default_images/svx/res/symphony/Indent3.png b/default_images/svx/res/symphony/Indent3.png Binary files differnew file mode 100755 index 000000000000..c57f2b279c48 --- /dev/null +++ b/default_images/svx/res/symphony/Indent3.png diff --git a/default_images/svx/res/symphony/Indent4.png b/default_images/svx/res/symphony/Indent4.png Binary files differnew file mode 100755 index 000000000000..0cba2f006ed0 --- /dev/null +++ b/default_images/svx/res/symphony/Indent4.png diff --git a/default_images/svx/res/symphony/Indent_16x16.png b/default_images/svx/res/symphony/Indent_16x16.png Binary files differnew file mode 100755 index 000000000000..93137374094e --- /dev/null +++ b/default_images/svx/res/symphony/Indent_16x16.png diff --git a/default_images/svx/res/symphony/Indent_Hanging.png b/default_images/svx/res/symphony/Indent_Hanging.png Binary files differnew file mode 100755 index 000000000000..4acb5b519983 --- /dev/null +++ b/default_images/svx/res/symphony/Indent_Hanging.png diff --git a/default_images/svx/res/symphony/Line_color.png b/default_images/svx/res/symphony/Line_color.png Binary files differnew file mode 100755 index 000000000000..a9522b9eeedd --- /dev/null +++ b/default_images/svx/res/symphony/Line_color.png diff --git a/default_images/svx/res/symphony/Outdent_16x16.png b/default_images/svx/res/symphony/Outdent_16x16.png Binary files differnew file mode 100755 index 000000000000..7461944a7083 --- /dev/null +++ b/default_images/svx/res/symphony/Outdent_16x16.png diff --git a/default_images/svx/res/symphony/Quadratic.png b/default_images/svx/res/symphony/Quadratic.png Binary files differnew file mode 100755 index 000000000000..ad579c8e393d --- /dev/null +++ b/default_images/svx/res/symphony/Quadratic.png diff --git a/default_images/svx/res/symphony/Quadratic_h.png b/default_images/svx/res/symphony/Quadratic_h.png Binary files differnew file mode 100644 index 000000000000..12d644800e9a --- /dev/null +++ b/default_images/svx/res/symphony/Quadratic_h.png diff --git a/default_images/svx/res/symphony/Square.png b/default_images/svx/res/symphony/Square.png Binary files differnew file mode 100755 index 000000000000..1027f8a480f8 --- /dev/null +++ b/default_images/svx/res/symphony/Square.png diff --git a/default_images/svx/res/symphony/Square_h.png b/default_images/svx/res/symphony/Square_h.png Binary files differnew file mode 100755 index 000000000000..8d0ccea3e0f4 --- /dev/null +++ b/default_images/svx/res/symphony/Square_h.png diff --git a/default_images/svx/res/symphony/__morebutton.bmp b/default_images/svx/res/symphony/__morebutton.bmp Binary files differnew file mode 100755 index 000000000000..c665b3e866a8 --- /dev/null +++ b/default_images/svx/res/symphony/__morebutton.bmp diff --git a/default_images/svx/res/symphony/__morebutton_h.bmp b/default_images/svx/res/symphony/__morebutton_h.bmp Binary files differnew file mode 100755 index 000000000000..c665b3e866a8 --- /dev/null +++ b/default_images/svx/res/symphony/__morebutton_h.bmp diff --git a/default_images/svx/res/symphony/axial.png b/default_images/svx/res/symphony/axial.png Binary files differnew file mode 100755 index 000000000000..8b398bef1df5 --- /dev/null +++ b/default_images/svx/res/symphony/axial.png diff --git a/default_images/svx/res/symphony/axial_h.png b/default_images/svx/res/symphony/axial_h.png Binary files differnew file mode 100755 index 000000000000..5771323542d0 --- /dev/null +++ b/default_images/svx/res/symphony/axial_h.png diff --git a/default_images/svx/res/symphony/blank.png b/default_images/svx/res/symphony/blank.png Binary files differnew file mode 100755 index 000000000000..d38ff9daebf9 --- /dev/null +++ b/default_images/svx/res/symphony/blank.png diff --git a/default_images/svx/res/symphony/decrease font.png b/default_images/svx/res/symphony/decrease font.png Binary files differnew file mode 100755 index 000000000000..183e0091f590 --- /dev/null +++ b/default_images/svx/res/symphony/decrease font.png diff --git a/default_images/svx/res/symphony/ellipsoid.png b/default_images/svx/res/symphony/ellipsoid.png Binary files differnew file mode 100755 index 000000000000..babaf75b2da8 --- /dev/null +++ b/default_images/svx/res/symphony/ellipsoid.png diff --git a/default_images/svx/res/symphony/ellipsoid_h.png b/default_images/svx/res/symphony/ellipsoid_h.png Binary files differnew file mode 100755 index 000000000000..2a38b320398b --- /dev/null +++ b/default_images/svx/res/symphony/ellipsoid_h.png diff --git a/default_images/svx/res/symphony/enlarge font.png b/default_images/svx/res/symphony/enlarge font.png Binary files differnew file mode 100755 index 000000000000..86c6e5d49daa --- /dev/null +++ b/default_images/svx/res/symphony/enlarge font.png diff --git a/default_images/svx/res/symphony/fill_color.png b/default_images/svx/res/symphony/fill_color.png Binary files differnew file mode 100755 index 000000000000..1d8837545728 --- /dev/null +++ b/default_images/svx/res/symphony/fill_color.png diff --git a/default_images/svx/res/symphony/fill_color_h.png b/default_images/svx/res/symphony/fill_color_h.png Binary files differnew file mode 100755 index 000000000000..7cbafa57eb99 --- /dev/null +++ b/default_images/svx/res/symphony/fill_color_h.png diff --git a/default_images/svx/res/symphony/icon_normal.png b/default_images/svx/res/symphony/icon_normal.png Binary files differnew file mode 100755 index 000000000000..f69ec0501e9e --- /dev/null +++ b/default_images/svx/res/symphony/icon_normal.png diff --git a/default_images/svx/res/symphony/last_custom_common.png b/default_images/svx/res/symphony/last_custom_common.png Binary files differnew file mode 100755 index 000000000000..bbbe3255d272 --- /dev/null +++ b/default_images/svx/res/symphony/last_custom_common.png diff --git a/default_images/svx/res/symphony/last_custom_common_grey.png b/default_images/svx/res/symphony/last_custom_common_grey.png Binary files differnew file mode 100755 index 000000000000..c95062eb2897 --- /dev/null +++ b/default_images/svx/res/symphony/last_custom_common_grey.png diff --git a/default_images/svx/res/symphony/line1.png b/default_images/svx/res/symphony/line1.png Binary files differnew file mode 100755 index 000000000000..7b667d5fdfe0 --- /dev/null +++ b/default_images/svx/res/symphony/line1.png diff --git a/default_images/svx/res/symphony/line10.png b/default_images/svx/res/symphony/line10.png Binary files differnew file mode 100755 index 000000000000..956c4f05959e --- /dev/null +++ b/default_images/svx/res/symphony/line10.png diff --git a/default_images/svx/res/symphony/line10_h.png b/default_images/svx/res/symphony/line10_h.png Binary files differnew file mode 100755 index 000000000000..6c81727ca103 --- /dev/null +++ b/default_images/svx/res/symphony/line10_h.png diff --git a/default_images/svx/res/symphony/line1_h.png b/default_images/svx/res/symphony/line1_h.png Binary files differnew file mode 100755 index 000000000000..8e5dd3a985a9 --- /dev/null +++ b/default_images/svx/res/symphony/line1_h.png diff --git a/default_images/svx/res/symphony/line2.png b/default_images/svx/res/symphony/line2.png Binary files differnew file mode 100755 index 000000000000..d7c2cae56195 --- /dev/null +++ b/default_images/svx/res/symphony/line2.png diff --git a/default_images/svx/res/symphony/line2_h.png b/default_images/svx/res/symphony/line2_h.png Binary files differnew file mode 100755 index 000000000000..ad3c78bb36ed --- /dev/null +++ b/default_images/svx/res/symphony/line2_h.png diff --git a/default_images/svx/res/symphony/line3.png b/default_images/svx/res/symphony/line3.png Binary files differnew file mode 100755 index 000000000000..0c74e4190570 --- /dev/null +++ b/default_images/svx/res/symphony/line3.png diff --git a/default_images/svx/res/symphony/line3_h.png b/default_images/svx/res/symphony/line3_h.png Binary files differnew file mode 100755 index 000000000000..2d91489a07d7 --- /dev/null +++ b/default_images/svx/res/symphony/line3_h.png diff --git a/default_images/svx/res/symphony/line4.png b/default_images/svx/res/symphony/line4.png Binary files differnew file mode 100755 index 000000000000..5dc893860d32 --- /dev/null +++ b/default_images/svx/res/symphony/line4.png diff --git a/default_images/svx/res/symphony/line4_h.png b/default_images/svx/res/symphony/line4_h.png Binary files differnew file mode 100755 index 000000000000..f62c84d524cf --- /dev/null +++ b/default_images/svx/res/symphony/line4_h.png diff --git a/default_images/svx/res/symphony/line5.png b/default_images/svx/res/symphony/line5.png Binary files differnew file mode 100755 index 000000000000..2f90aedc5b46 --- /dev/null +++ b/default_images/svx/res/symphony/line5.png diff --git a/default_images/svx/res/symphony/line5_h.png b/default_images/svx/res/symphony/line5_h.png Binary files differnew file mode 100755 index 000000000000..74d7fad3a05c --- /dev/null +++ b/default_images/svx/res/symphony/line5_h.png diff --git a/default_images/svx/res/symphony/line6.png b/default_images/svx/res/symphony/line6.png Binary files differnew file mode 100755 index 000000000000..10a7cedcfcae --- /dev/null +++ b/default_images/svx/res/symphony/line6.png diff --git a/default_images/svx/res/symphony/line6_h.png b/default_images/svx/res/symphony/line6_h.png Binary files differnew file mode 100755 index 000000000000..52d4a9a793df --- /dev/null +++ b/default_images/svx/res/symphony/line6_h.png diff --git a/default_images/svx/res/symphony/line7.png b/default_images/svx/res/symphony/line7.png Binary files differnew file mode 100755 index 000000000000..ff1df906dec3 --- /dev/null +++ b/default_images/svx/res/symphony/line7.png diff --git a/default_images/svx/res/symphony/line7_h.png b/default_images/svx/res/symphony/line7_h.png Binary files differnew file mode 100755 index 000000000000..7592f0265cff --- /dev/null +++ b/default_images/svx/res/symphony/line7_h.png diff --git a/default_images/svx/res/symphony/line8.png b/default_images/svx/res/symphony/line8.png Binary files differnew file mode 100755 index 000000000000..5355d76d7644 --- /dev/null +++ b/default_images/svx/res/symphony/line8.png diff --git a/default_images/svx/res/symphony/line8_h.png b/default_images/svx/res/symphony/line8_h.png Binary files differnew file mode 100755 index 000000000000..57b3e4952fb0 --- /dev/null +++ b/default_images/svx/res/symphony/line8_h.png diff --git a/default_images/svx/res/symphony/line9.png b/default_images/svx/res/symphony/line9.png Binary files differnew file mode 100755 index 000000000000..ba822a7c16e3 --- /dev/null +++ b/default_images/svx/res/symphony/line9.png diff --git a/default_images/svx/res/symphony/line9_h.png b/default_images/svx/res/symphony/line9_h.png Binary files differnew file mode 100755 index 000000000000..700a2b02ef79 --- /dev/null +++ b/default_images/svx/res/symphony/line9_h.png diff --git a/default_images/svx/res/symphony/linear.png b/default_images/svx/res/symphony/linear.png Binary files differnew file mode 100755 index 000000000000..a9c3191b1919 --- /dev/null +++ b/default_images/svx/res/symphony/linear.png diff --git a/default_images/svx/res/symphony/linear_h.png b/default_images/svx/res/symphony/linear_h.png Binary files differnew file mode 100755 index 000000000000..23b7a181717b --- /dev/null +++ b/default_images/svx/res/symphony/linear_h.png diff --git a/default_images/svx/res/symphony/list.txt b/default_images/svx/res/symphony/list.txt new file mode 100644 index 000000000000..afcef809536e --- /dev/null +++ b/default_images/svx/res/symphony/list.txt @@ -0,0 +1,70 @@ +mv bla/"axial.png" . +mv bla/"axial_h.png" . +mv bla/"decrease font.png" . +mv bla/"ellipsoid.png" . +mv bla/"ellipsoid_h.png" . +mv bla/"enlarge font.png" . +mv bla/"fill_color.png" . +mv bla/"fill_color_h.png" . +mv bla/"Highlight.png" . +mv bla/"icon_normal.png" . +mv bla/"last_custom_common.png" . +mv bla/"last_custom_common_grey.png" . +mv bla/"line1.png" . +mv bla/"line1_h.png" . +mv bla/"line10.png" . +mv bla/"line10_h.png" . +mv bla/"line2.png" . +mv bla/"line2_h.png" . +mv bla/"line3.png" . +mv bla/"line3_h.png" . +mv bla/"line4.png" . +mv bla/"line4_h.png" . +mv bla/"line5.png" . +mv bla/"line5_h.png" . +mv bla/"line6.png" . +mv bla/"line6_h.png" . +mv bla/"line7.png" . +mv bla/"line7_h.png" . +mv bla/"line8.png" . +mv bla/"line8_h.png" . +mv bla/"line9.png" . +mv bla/"line9_h.png" . +mv bla/"linear.png" . +mv bla/"linear_h.png" . +mv bla/"Quadratic.png" . +mv bla/"Quadratic_h.png" . +mv bla/"radial.png" . +mv bla/"radial_h.png" . +mv bla/"rotate_left.png" . +mv bla/"rotate_right.png" . +mv bla/"sc_bold.png" . +mv bla/"sc_color.png" . +mv bla/"sc_italic.png" . +mv bla/"sc_shadowed.png" . +mv bla/"sc_strikeout.png" . +mv bla/"sc_subscript.png" . +mv bla/"sc_superscript.png" . +mv bla/"sc_underline.png" . +mv bla/"selected-line1.png" . +mv bla/"selected-line10.png" . +mv bla/"selected-line2.png" . +mv bla/"selected-line3.png" . +mv bla/"selected-line4.png" . +mv bla/"selected-line5.png" . +mv bla/"selected-line6.png" . +mv bla/"selected-line7.png" . +mv bla/"selected-line8.png" . +mv bla/"selected-line9.png" . +mv bla/"spacing_loose.png" . +mv bla/"spacing_loose_s.png" . +mv bla/"spacing_normal.png" . +mv bla/"spacing_normal_s.png" . +mv bla/"spacing_tight.png" . +mv bla/"spacing_tight_s.png" . +mv bla/"spacing_very loose.png" . +mv bla/"spacing_very loose_s.png" . +mv bla/"spacing_very tight.png" . +mv bla/"spacing_very tight_s.png" . +mv bla/"Square.png" . +mv bla/"Square_h.png" . diff --git a/default_images/svx/res/symphony/lpselected-spacing-1.png b/default_images/svx/res/symphony/lpselected-spacing-1.png Binary files differnew file mode 100755 index 000000000000..098636521709 --- /dev/null +++ b/default_images/svx/res/symphony/lpselected-spacing-1.png diff --git a/default_images/svx/res/symphony/lpselected-spacing-1_15.png b/default_images/svx/res/symphony/lpselected-spacing-1_15.png Binary files differnew file mode 100755 index 000000000000..97337b0e77dc --- /dev/null +++ b/default_images/svx/res/symphony/lpselected-spacing-1_15.png diff --git a/default_images/svx/res/symphony/lpselected-spacing-1_5.png b/default_images/svx/res/symphony/lpselected-spacing-1_5.png Binary files differnew file mode 100755 index 000000000000..90b2532ca23b --- /dev/null +++ b/default_images/svx/res/symphony/lpselected-spacing-1_5.png diff --git a/default_images/svx/res/symphony/lpselected-spacing-2.png b/default_images/svx/res/symphony/lpselected-spacing-2.png Binary files differnew file mode 100755 index 000000000000..4549b900caf6 --- /dev/null +++ b/default_images/svx/res/symphony/lpselected-spacing-2.png diff --git a/default_images/svx/res/symphony/lpsmall-spacing-1.png b/default_images/svx/res/symphony/lpsmall-spacing-1.png Binary files differnew file mode 100755 index 000000000000..b6afc43b3b9b --- /dev/null +++ b/default_images/svx/res/symphony/lpsmall-spacing-1.png diff --git a/default_images/svx/res/symphony/lpspacing-1.png b/default_images/svx/res/symphony/lpspacing-1.png Binary files differnew file mode 100755 index 000000000000..6aefacf9f8a0 --- /dev/null +++ b/default_images/svx/res/symphony/lpspacing-1.png diff --git a/default_images/svx/res/symphony/lpspacing-1_15.png b/default_images/svx/res/symphony/lpspacing-1_15.png Binary files differnew file mode 100755 index 000000000000..01c861d88f34 --- /dev/null +++ b/default_images/svx/res/symphony/lpspacing-1_15.png diff --git a/default_images/svx/res/symphony/lpspacing-1_5.png b/default_images/svx/res/symphony/lpspacing-1_5.png Binary files differnew file mode 100755 index 000000000000..27708ca4f070 --- /dev/null +++ b/default_images/svx/res/symphony/lpspacing-1_5.png diff --git a/default_images/svx/res/symphony/lpspacing-2.png b/default_images/svx/res/symphony/lpspacing-2.png Binary files differnew file mode 100755 index 000000000000..12f0fcdcd9cf --- /dev/null +++ b/default_images/svx/res/symphony/lpspacing-2.png diff --git a/default_images/svx/res/symphony/no color.png b/default_images/svx/res/symphony/no color.png Binary files differnew file mode 100755 index 000000000000..7442b7484945 --- /dev/null +++ b/default_images/svx/res/symphony/no color.png diff --git a/default_images/svx/res/symphony/para_numbullet01.png b/default_images/svx/res/symphony/para_numbullet01.png Binary files differnew file mode 100755 index 000000000000..8cb0cc7bd94a --- /dev/null +++ b/default_images/svx/res/symphony/para_numbullet01.png diff --git a/default_images/svx/res/symphony/para_numbullet02.png b/default_images/svx/res/symphony/para_numbullet02.png Binary files differnew file mode 100755 index 000000000000..f283c8af12ad --- /dev/null +++ b/default_images/svx/res/symphony/para_numbullet02.png diff --git a/default_images/svx/res/symphony/para_numbullet_rtl01.png b/default_images/svx/res/symphony/para_numbullet_rtl01.png Binary files differnew file mode 100755 index 000000000000..cae419362f95 --- /dev/null +++ b/default_images/svx/res/symphony/para_numbullet_rtl01.png diff --git a/default_images/svx/res/symphony/para_numbullet_rtl02.png b/default_images/svx/res/symphony/para_numbullet_rtl02.png Binary files differnew file mode 100755 index 000000000000..c5ecb4b690f3 --- /dev/null +++ b/default_images/svx/res/symphony/para_numbullet_rtl02.png diff --git a/default_images/svx/res/symphony/para_numbulleth01.png b/default_images/svx/res/symphony/para_numbulleth01.png Binary files differnew file mode 100755 index 000000000000..6bf74ad750ab --- /dev/null +++ b/default_images/svx/res/symphony/para_numbulleth01.png diff --git a/default_images/svx/res/symphony/para_numbulleth02.png b/default_images/svx/res/symphony/para_numbulleth02.png Binary files differnew file mode 100755 index 000000000000..8405c705fea8 --- /dev/null +++ b/default_images/svx/res/symphony/para_numbulleth02.png diff --git a/default_images/svx/res/symphony/para_vert01.png b/default_images/svx/res/symphony/para_vert01.png Binary files differnew file mode 100755 index 000000000000..275133c3409d --- /dev/null +++ b/default_images/svx/res/symphony/para_vert01.png diff --git a/default_images/svx/res/symphony/para_vert02.png b/default_images/svx/res/symphony/para_vert02.png Binary files differnew file mode 100755 index 000000000000..919edab0d01b --- /dev/null +++ b/default_images/svx/res/symphony/para_vert02.png diff --git a/default_images/svx/res/symphony/para_vert03.png b/default_images/svx/res/symphony/para_vert03.png Binary files differnew file mode 100755 index 000000000000..de22c240efdb --- /dev/null +++ b/default_images/svx/res/symphony/para_vert03.png diff --git a/default_images/svx/res/symphony/para_verth01.png b/default_images/svx/res/symphony/para_verth01.png Binary files differnew file mode 100755 index 000000000000..9493fba1c393 --- /dev/null +++ b/default_images/svx/res/symphony/para_verth01.png diff --git a/default_images/svx/res/symphony/para_verth02.png b/default_images/svx/res/symphony/para_verth02.png Binary files differnew file mode 100755 index 000000000000..66470c72db77 --- /dev/null +++ b/default_images/svx/res/symphony/para_verth02.png diff --git a/default_images/svx/res/symphony/para_verth03.png b/default_images/svx/res/symphony/para_verth03.png Binary files differnew file mode 100755 index 000000000000..bf889acb3a31 --- /dev/null +++ b/default_images/svx/res/symphony/para_verth03.png diff --git a/default_images/svx/res/symphony/radial.png b/default_images/svx/res/symphony/radial.png Binary files differnew file mode 100755 index 000000000000..bb44a0c68318 --- /dev/null +++ b/default_images/svx/res/symphony/radial.png diff --git a/default_images/svx/res/symphony/radial_h.png b/default_images/svx/res/symphony/radial_h.png Binary files differnew file mode 100755 index 000000000000..1971f585b0de --- /dev/null +++ b/default_images/svx/res/symphony/radial_h.png diff --git a/default_images/svx/res/symphony/rotate_left.png b/default_images/svx/res/symphony/rotate_left.png Binary files differnew file mode 100755 index 000000000000..b537b6b9286a --- /dev/null +++ b/default_images/svx/res/symphony/rotate_left.png diff --git a/default_images/svx/res/symphony/rotate_right.png b/default_images/svx/res/symphony/rotate_right.png Binary files differnew file mode 100755 index 000000000000..217cf91891b4 --- /dev/null +++ b/default_images/svx/res/symphony/rotate_right.png diff --git a/default_images/svx/res/symphony/rotation.png b/default_images/svx/res/symphony/rotation.png Binary files differnew file mode 100755 index 000000000000..3d197def2724 --- /dev/null +++ b/default_images/svx/res/symphony/rotation.png diff --git a/default_images/svx/res/symphony/rotation_h.png b/default_images/svx/res/symphony/rotation_h.png Binary files differnew file mode 100755 index 000000000000..874fb82bdcb9 --- /dev/null +++ b/default_images/svx/res/symphony/rotation_h.png diff --git a/default_images/svx/res/symphony/rte_Indent_16x16.png b/default_images/svx/res/symphony/rte_Indent_16x16.png Binary files differnew file mode 100755 index 000000000000..28c90a34a62f --- /dev/null +++ b/default_images/svx/res/symphony/rte_Indent_16x16.png diff --git a/default_images/svx/res/symphony/rte_Outdent_16x16.png b/default_images/svx/res/symphony/rte_Outdent_16x16.png Binary files differnew file mode 100755 index 000000000000..ceae7d35d843 --- /dev/null +++ b/default_images/svx/res/symphony/rte_Outdent_16x16.png diff --git a/default_images/svx/res/symphony/sc_backgroundcolor.png b/default_images/svx/res/symphony/sc_backgroundcolor.png Binary files differnew file mode 100755 index 000000000000..7f926b66bd71 --- /dev/null +++ b/default_images/svx/res/symphony/sc_backgroundcolor.png diff --git a/default_images/svx/res/symphony/sc_bold.png b/default_images/svx/res/symphony/sc_bold.png Binary files differnew file mode 100755 index 000000000000..2f610b2529c8 --- /dev/null +++ b/default_images/svx/res/symphony/sc_bold.png diff --git a/default_images/svx/res/symphony/sc_color.png b/default_images/svx/res/symphony/sc_color.png Binary files differnew file mode 100755 index 000000000000..f11f2181434e --- /dev/null +++ b/default_images/svx/res/symphony/sc_color.png diff --git a/default_images/svx/res/symphony/sc_italic.png b/default_images/svx/res/symphony/sc_italic.png Binary files differnew file mode 100755 index 000000000000..0ccd22e1cc39 --- /dev/null +++ b/default_images/svx/res/symphony/sc_italic.png diff --git a/default_images/svx/res/symphony/sc_shadowed.png b/default_images/svx/res/symphony/sc_shadowed.png Binary files differnew file mode 100755 index 000000000000..7d3a6992c92a --- /dev/null +++ b/default_images/svx/res/symphony/sc_shadowed.png diff --git a/default_images/svx/res/symphony/sc_strikeout.png b/default_images/svx/res/symphony/sc_strikeout.png Binary files differnew file mode 100755 index 000000000000..58d2794bb41c --- /dev/null +++ b/default_images/svx/res/symphony/sc_strikeout.png diff --git a/default_images/svx/res/symphony/sc_subscript.png b/default_images/svx/res/symphony/sc_subscript.png Binary files differnew file mode 100755 index 000000000000..682e6f17ac21 --- /dev/null +++ b/default_images/svx/res/symphony/sc_subscript.png diff --git a/default_images/svx/res/symphony/sc_superscript.png b/default_images/svx/res/symphony/sc_superscript.png Binary files differnew file mode 100755 index 000000000000..33fd1ecef7ae --- /dev/null +++ b/default_images/svx/res/symphony/sc_superscript.png diff --git a/default_images/svx/res/symphony/sc_underline.png b/default_images/svx/res/symphony/sc_underline.png Binary files differnew file mode 100755 index 000000000000..b2071c5cc423 --- /dev/null +++ b/default_images/svx/res/symphony/sc_underline.png diff --git a/default_images/svx/res/symphony/sch_backgroundcolor.png b/default_images/svx/res/symphony/sch_backgroundcolor.png Binary files differnew file mode 100755 index 000000000000..a2e234fc3311 --- /dev/null +++ b/default_images/svx/res/symphony/sch_backgroundcolor.png diff --git a/default_images/svx/res/symphony/selected-line1.png b/default_images/svx/res/symphony/selected-line1.png Binary files differnew file mode 100755 index 000000000000..99921b34df4e --- /dev/null +++ b/default_images/svx/res/symphony/selected-line1.png diff --git a/default_images/svx/res/symphony/selected-line10.png b/default_images/svx/res/symphony/selected-line10.png Binary files differnew file mode 100755 index 000000000000..cca4848e0cb5 --- /dev/null +++ b/default_images/svx/res/symphony/selected-line10.png diff --git a/default_images/svx/res/symphony/selected-line2.png b/default_images/svx/res/symphony/selected-line2.png Binary files differnew file mode 100755 index 000000000000..4e68e6ba48c7 --- /dev/null +++ b/default_images/svx/res/symphony/selected-line2.png diff --git a/default_images/svx/res/symphony/selected-line3.png b/default_images/svx/res/symphony/selected-line3.png Binary files differnew file mode 100755 index 000000000000..425869e629c1 --- /dev/null +++ b/default_images/svx/res/symphony/selected-line3.png diff --git a/default_images/svx/res/symphony/selected-line4.png b/default_images/svx/res/symphony/selected-line4.png Binary files differnew file mode 100755 index 000000000000..7fa3f7eb219e --- /dev/null +++ b/default_images/svx/res/symphony/selected-line4.png diff --git a/default_images/svx/res/symphony/selected-line5.png b/default_images/svx/res/symphony/selected-line5.png Binary files differnew file mode 100755 index 000000000000..60e266c070ae --- /dev/null +++ b/default_images/svx/res/symphony/selected-line5.png diff --git a/default_images/svx/res/symphony/selected-line6.png b/default_images/svx/res/symphony/selected-line6.png Binary files differnew file mode 100755 index 000000000000..e89d1996e100 --- /dev/null +++ b/default_images/svx/res/symphony/selected-line6.png diff --git a/default_images/svx/res/symphony/selected-line7.png b/default_images/svx/res/symphony/selected-line7.png Binary files differnew file mode 100755 index 000000000000..c53fd70e0064 --- /dev/null +++ b/default_images/svx/res/symphony/selected-line7.png diff --git a/default_images/svx/res/symphony/selected-line8.png b/default_images/svx/res/symphony/selected-line8.png Binary files differnew file mode 100755 index 000000000000..b24ab5588343 --- /dev/null +++ b/default_images/svx/res/symphony/selected-line8.png diff --git a/default_images/svx/res/symphony/selected-line9.png b/default_images/svx/res/symphony/selected-line9.png Binary files differnew file mode 100755 index 000000000000..c6e266ea110c --- /dev/null +++ b/default_images/svx/res/symphony/selected-line9.png diff --git a/default_images/svx/res/symphony/spacing1.png b/default_images/svx/res/symphony/spacing1.png Binary files differnew file mode 100755 index 000000000000..9e1f4839e25d --- /dev/null +++ b/default_images/svx/res/symphony/spacing1.png diff --git a/default_images/svx/res/symphony/spacing2.png b/default_images/svx/res/symphony/spacing2.png Binary files differnew file mode 100755 index 000000000000..f4ae81a37ced --- /dev/null +++ b/default_images/svx/res/symphony/spacing2.png diff --git a/default_images/svx/res/symphony/spacing3.png b/default_images/svx/res/symphony/spacing3.png Binary files differnew file mode 100755 index 000000000000..106e0edaed0b --- /dev/null +++ b/default_images/svx/res/symphony/spacing3.png diff --git a/default_images/svx/res/symphony/spacing_loose.png b/default_images/svx/res/symphony/spacing_loose.png Binary files differnew file mode 100755 index 000000000000..5ab9f3e02043 --- /dev/null +++ b/default_images/svx/res/symphony/spacing_loose.png diff --git a/default_images/svx/res/symphony/spacing_loose_s.png b/default_images/svx/res/symphony/spacing_loose_s.png Binary files differnew file mode 100755 index 000000000000..46e2f246c558 --- /dev/null +++ b/default_images/svx/res/symphony/spacing_loose_s.png diff --git a/default_images/svx/res/symphony/spacing_normal.png b/default_images/svx/res/symphony/spacing_normal.png Binary files differnew file mode 100755 index 000000000000..bf7d5471160a --- /dev/null +++ b/default_images/svx/res/symphony/spacing_normal.png diff --git a/default_images/svx/res/symphony/spacing_normal_s.png b/default_images/svx/res/symphony/spacing_normal_s.png Binary files differnew file mode 100755 index 000000000000..76097b309e89 --- /dev/null +++ b/default_images/svx/res/symphony/spacing_normal_s.png diff --git a/default_images/svx/res/symphony/spacing_tight.png b/default_images/svx/res/symphony/spacing_tight.png Binary files differnew file mode 100755 index 000000000000..ac469dbb93ed --- /dev/null +++ b/default_images/svx/res/symphony/spacing_tight.png diff --git a/default_images/svx/res/symphony/spacing_tight_s.png b/default_images/svx/res/symphony/spacing_tight_s.png Binary files differnew file mode 100755 index 000000000000..dbb969cf57ae --- /dev/null +++ b/default_images/svx/res/symphony/spacing_tight_s.png diff --git a/default_images/svx/res/symphony/spacing_very loose.png b/default_images/svx/res/symphony/spacing_very loose.png Binary files differnew file mode 100755 index 000000000000..04f3969c6853 --- /dev/null +++ b/default_images/svx/res/symphony/spacing_very loose.png diff --git a/default_images/svx/res/symphony/spacing_very loose_s.png b/default_images/svx/res/symphony/spacing_very loose_s.png Binary files differnew file mode 100755 index 000000000000..21f578408222 --- /dev/null +++ b/default_images/svx/res/symphony/spacing_very loose_s.png diff --git a/default_images/svx/res/symphony/spacing_very tight.png b/default_images/svx/res/symphony/spacing_very tight.png Binary files differnew file mode 100755 index 000000000000..84845c3c9ca5 --- /dev/null +++ b/default_images/svx/res/symphony/spacing_very tight.png diff --git a/default_images/svx/res/symphony/spacing_very tight_s.png b/default_images/svx/res/symphony/spacing_very tight_s.png Binary files differnew file mode 100755 index 000000000000..19b4856b4b0a --- /dev/null +++ b/default_images/svx/res/symphony/spacing_very tight_s.png diff --git a/default_images/svx/res/symphony/style_line1.png b/default_images/svx/res/symphony/style_line1.png Binary files differnew file mode 100755 index 000000000000..6403c068da07 --- /dev/null +++ b/default_images/svx/res/symphony/style_line1.png diff --git a/default_images/svx/res/symphony/style_line10.png b/default_images/svx/res/symphony/style_line10.png Binary files differnew file mode 100755 index 000000000000..f7d1e34985a3 --- /dev/null +++ b/default_images/svx/res/symphony/style_line10.png diff --git a/default_images/svx/res/symphony/style_line10_h.png b/default_images/svx/res/symphony/style_line10_h.png Binary files differnew file mode 100755 index 000000000000..d5925aafea8a --- /dev/null +++ b/default_images/svx/res/symphony/style_line10_h.png diff --git a/default_images/svx/res/symphony/style_line10_hh.png b/default_images/svx/res/symphony/style_line10_hh.png Binary files differnew file mode 100755 index 000000000000..60c1e36b0084 --- /dev/null +++ b/default_images/svx/res/symphony/style_line10_hh.png diff --git a/default_images/svx/res/symphony/style_line11.png b/default_images/svx/res/symphony/style_line11.png Binary files differnew file mode 100755 index 000000000000..4400dd387e7c --- /dev/null +++ b/default_images/svx/res/symphony/style_line11.png diff --git a/default_images/svx/res/symphony/style_line11_h.png b/default_images/svx/res/symphony/style_line11_h.png Binary files differnew file mode 100755 index 000000000000..1e6be193527f --- /dev/null +++ b/default_images/svx/res/symphony/style_line11_h.png diff --git a/default_images/svx/res/symphony/style_line11_hh.png b/default_images/svx/res/symphony/style_line11_hh.png Binary files differnew file mode 100755 index 000000000000..31fec10d2cd6 --- /dev/null +++ b/default_images/svx/res/symphony/style_line11_hh.png diff --git a/default_images/svx/res/symphony/style_line1_h.png b/default_images/svx/res/symphony/style_line1_h.png Binary files differnew file mode 100755 index 000000000000..eadd40e3427a --- /dev/null +++ b/default_images/svx/res/symphony/style_line1_h.png diff --git a/default_images/svx/res/symphony/style_line1_hh.png b/default_images/svx/res/symphony/style_line1_hh.png Binary files differnew file mode 100755 index 000000000000..c91010a6762e --- /dev/null +++ b/default_images/svx/res/symphony/style_line1_hh.png diff --git a/default_images/svx/res/symphony/style_line2.png b/default_images/svx/res/symphony/style_line2.png Binary files differnew file mode 100755 index 000000000000..4269c7dfadf3 --- /dev/null +++ b/default_images/svx/res/symphony/style_line2.png diff --git a/default_images/svx/res/symphony/style_line2_h.png b/default_images/svx/res/symphony/style_line2_h.png Binary files differnew file mode 100755 index 000000000000..3658e182c94c --- /dev/null +++ b/default_images/svx/res/symphony/style_line2_h.png diff --git a/default_images/svx/res/symphony/style_line2_hh.png b/default_images/svx/res/symphony/style_line2_hh.png Binary files differnew file mode 100755 index 000000000000..4bae815bceaa --- /dev/null +++ b/default_images/svx/res/symphony/style_line2_hh.png diff --git a/default_images/svx/res/symphony/style_line3.png b/default_images/svx/res/symphony/style_line3.png Binary files differnew file mode 100755 index 000000000000..3e03ad01f28a --- /dev/null +++ b/default_images/svx/res/symphony/style_line3.png diff --git a/default_images/svx/res/symphony/style_line3_h.png b/default_images/svx/res/symphony/style_line3_h.png Binary files differnew file mode 100755 index 000000000000..1636e050426f --- /dev/null +++ b/default_images/svx/res/symphony/style_line3_h.png diff --git a/default_images/svx/res/symphony/style_line3_hh.png b/default_images/svx/res/symphony/style_line3_hh.png Binary files differnew file mode 100755 index 000000000000..1ab133fdc0aa --- /dev/null +++ b/default_images/svx/res/symphony/style_line3_hh.png diff --git a/default_images/svx/res/symphony/style_line4.png b/default_images/svx/res/symphony/style_line4.png Binary files differnew file mode 100755 index 000000000000..21c1115429ea --- /dev/null +++ b/default_images/svx/res/symphony/style_line4.png diff --git a/default_images/svx/res/symphony/style_line4_h.png b/default_images/svx/res/symphony/style_line4_h.png Binary files differnew file mode 100755 index 000000000000..35741407ac25 --- /dev/null +++ b/default_images/svx/res/symphony/style_line4_h.png diff --git a/default_images/svx/res/symphony/style_line4_hh.png b/default_images/svx/res/symphony/style_line4_hh.png Binary files differnew file mode 100755 index 000000000000..d7b17f49472f --- /dev/null +++ b/default_images/svx/res/symphony/style_line4_hh.png diff --git a/default_images/svx/res/symphony/style_line5.png b/default_images/svx/res/symphony/style_line5.png Binary files differnew file mode 100755 index 000000000000..8648065c1951 --- /dev/null +++ b/default_images/svx/res/symphony/style_line5.png diff --git a/default_images/svx/res/symphony/style_line5_h.png b/default_images/svx/res/symphony/style_line5_h.png Binary files differnew file mode 100755 index 000000000000..5d387d4b33fb --- /dev/null +++ b/default_images/svx/res/symphony/style_line5_h.png diff --git a/default_images/svx/res/symphony/style_line5_hh.png b/default_images/svx/res/symphony/style_line5_hh.png Binary files differnew file mode 100755 index 000000000000..c6436ace4d9e --- /dev/null +++ b/default_images/svx/res/symphony/style_line5_hh.png diff --git a/default_images/svx/res/symphony/style_line6.png b/default_images/svx/res/symphony/style_line6.png Binary files differnew file mode 100755 index 000000000000..b0b8d7cf88ed --- /dev/null +++ b/default_images/svx/res/symphony/style_line6.png diff --git a/default_images/svx/res/symphony/style_line6_h.png b/default_images/svx/res/symphony/style_line6_h.png Binary files differnew file mode 100755 index 000000000000..4a34861b54a5 --- /dev/null +++ b/default_images/svx/res/symphony/style_line6_h.png diff --git a/default_images/svx/res/symphony/style_line6_hh.png b/default_images/svx/res/symphony/style_line6_hh.png Binary files differnew file mode 100755 index 000000000000..88680768447c --- /dev/null +++ b/default_images/svx/res/symphony/style_line6_hh.png diff --git a/default_images/svx/res/symphony/style_line7.png b/default_images/svx/res/symphony/style_line7.png Binary files differnew file mode 100755 index 000000000000..e30fc03fc333 --- /dev/null +++ b/default_images/svx/res/symphony/style_line7.png diff --git a/default_images/svx/res/symphony/style_line7_h.png b/default_images/svx/res/symphony/style_line7_h.png Binary files differnew file mode 100755 index 000000000000..8718ef0332e7 --- /dev/null +++ b/default_images/svx/res/symphony/style_line7_h.png diff --git a/default_images/svx/res/symphony/style_line7_hh.png b/default_images/svx/res/symphony/style_line7_hh.png Binary files differnew file mode 100755 index 000000000000..76d0afaff7c1 --- /dev/null +++ b/default_images/svx/res/symphony/style_line7_hh.png diff --git a/default_images/svx/res/symphony/style_line8.png b/default_images/svx/res/symphony/style_line8.png Binary files differnew file mode 100755 index 000000000000..5c3ed3144a6f --- /dev/null +++ b/default_images/svx/res/symphony/style_line8.png diff --git a/default_images/svx/res/symphony/style_line8_h.png b/default_images/svx/res/symphony/style_line8_h.png Binary files differnew file mode 100755 index 000000000000..db769a43ce78 --- /dev/null +++ b/default_images/svx/res/symphony/style_line8_h.png diff --git a/default_images/svx/res/symphony/style_line8_hh.png b/default_images/svx/res/symphony/style_line8_hh.png Binary files differnew file mode 100755 index 000000000000..a1ca0e8caa9c --- /dev/null +++ b/default_images/svx/res/symphony/style_line8_hh.png diff --git a/default_images/svx/res/symphony/style_line9.png b/default_images/svx/res/symphony/style_line9.png Binary files differnew file mode 100755 index 000000000000..10035bae2640 --- /dev/null +++ b/default_images/svx/res/symphony/style_line9.png diff --git a/default_images/svx/res/symphony/style_line9_h.png b/default_images/svx/res/symphony/style_line9_h.png Binary files differnew file mode 100755 index 000000000000..91062daaf673 --- /dev/null +++ b/default_images/svx/res/symphony/style_line9_h.png diff --git a/default_images/svx/res/symphony/style_line9_hh.png b/default_images/svx/res/symphony/style_line9_hh.png Binary files differnew file mode 100755 index 000000000000..4726c7c8a18a --- /dev/null +++ b/default_images/svx/res/symphony/style_line9_hh.png diff --git a/default_images/svx/res/symphony/width1.png b/default_images/svx/res/symphony/width1.png Binary files differnew file mode 100755 index 000000000000..8faeb437c01f --- /dev/null +++ b/default_images/svx/res/symphony/width1.png diff --git a/default_images/svx/res/symphony/width1_h.png b/default_images/svx/res/symphony/width1_h.png Binary files differnew file mode 100755 index 000000000000..1f14d896ca26 --- /dev/null +++ b/default_images/svx/res/symphony/width1_h.png diff --git a/default_images/svx/res/symphony/width2.png b/default_images/svx/res/symphony/width2.png Binary files differnew file mode 100755 index 000000000000..e6574687fac0 --- /dev/null +++ b/default_images/svx/res/symphony/width2.png diff --git a/default_images/svx/res/symphony/width2_h.png b/default_images/svx/res/symphony/width2_h.png Binary files differnew file mode 100755 index 000000000000..9a30e3fe2173 --- /dev/null +++ b/default_images/svx/res/symphony/width2_h.png diff --git a/default_images/svx/res/symphony/width3.png b/default_images/svx/res/symphony/width3.png Binary files differnew file mode 100755 index 000000000000..dfe321603ce3 --- /dev/null +++ b/default_images/svx/res/symphony/width3.png diff --git a/default_images/svx/res/symphony/width3_h.png b/default_images/svx/res/symphony/width3_h.png Binary files differnew file mode 100755 index 000000000000..80e2e22992be --- /dev/null +++ b/default_images/svx/res/symphony/width3_h.png diff --git a/default_images/svx/res/symphony/width4.png b/default_images/svx/res/symphony/width4.png Binary files differnew file mode 100755 index 000000000000..d19ac86ab222 --- /dev/null +++ b/default_images/svx/res/symphony/width4.png diff --git a/default_images/svx/res/symphony/width4_h.png b/default_images/svx/res/symphony/width4_h.png Binary files differnew file mode 100755 index 000000000000..142768ea34ff --- /dev/null +++ b/default_images/svx/res/symphony/width4_h.png diff --git a/default_images/svx/res/symphony/width5.png b/default_images/svx/res/symphony/width5.png Binary files differnew file mode 100755 index 000000000000..de6fb7f906c9 --- /dev/null +++ b/default_images/svx/res/symphony/width5.png diff --git a/default_images/svx/res/symphony/width5_h.png b/default_images/svx/res/symphony/width5_h.png Binary files differnew file mode 100755 index 000000000000..93100fae2cf9 --- /dev/null +++ b/default_images/svx/res/symphony/width5_h.png diff --git a/default_images/svx/res/symphony/width6.png b/default_images/svx/res/symphony/width6.png Binary files differnew file mode 100755 index 000000000000..27e3cad34eb3 --- /dev/null +++ b/default_images/svx/res/symphony/width6.png diff --git a/default_images/svx/res/symphony/width6_h.png b/default_images/svx/res/symphony/width6_h.png Binary files differnew file mode 100755 index 000000000000..30a9e326931c --- /dev/null +++ b/default_images/svx/res/symphony/width6_h.png diff --git a/default_images/svx/res/symphony/width7.png b/default_images/svx/res/symphony/width7.png Binary files differnew file mode 100755 index 000000000000..5bd3cfe35132 --- /dev/null +++ b/default_images/svx/res/symphony/width7.png diff --git a/default_images/svx/res/symphony/width7_h.png b/default_images/svx/res/symphony/width7_h.png Binary files differnew file mode 100755 index 000000000000..6a51fda02d29 --- /dev/null +++ b/default_images/svx/res/symphony/width7_h.png diff --git a/default_images/svx/res/symphony/width8.png b/default_images/svx/res/symphony/width8.png Binary files differnew file mode 100755 index 000000000000..1cbb7ebda8e5 --- /dev/null +++ b/default_images/svx/res/symphony/width8.png diff --git a/default_images/svx/res/symphony/width8_h.png b/default_images/svx/res/symphony/width8_h.png Binary files differnew file mode 100755 index 000000000000..60219680af26 --- /dev/null +++ b/default_images/svx/res/symphony/width8_h.png diff --git a/default_images/sw/res/sidebar/pageproppanel/Landscapecopy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/Landscapecopy_24x24.png Binary files differnew file mode 100755 index 000000000000..ce1372162eff --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/Landscapecopy_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column1_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column1_24x24.png Binary files differnew file mode 100755 index 000000000000..48f4a8b1c281 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column1_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column2_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column2_24x24.png Binary files differnew file mode 100755 index 000000000000..d8a2de473bf4 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column2_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column3_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column3_24x24.png Binary files differnew file mode 100755 index 000000000000..5869559c36ad --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column3_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column_L_1_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column_L_1_24x24.png Binary files differnew file mode 100755 index 000000000000..bac5e3f468bd --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column_L_1_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column_L_2_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column_L_2_24x24.png Binary files differnew file mode 100755 index 000000000000..146b66695721 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column_L_2_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column_L_3_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column_L_3_24x24.png Binary files differnew file mode 100755 index 000000000000..11ee37536b25 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column_L_3_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column_L_copy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column_L_copy_24x24.png Binary files differnew file mode 100755 index 000000000000..747ac4dd242f --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column_L_copy_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column_L_left_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column_L_left_24x24.png Binary files differnew file mode 100755 index 000000000000..c6a9f0caa740 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column_L_left_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/column_L_right_24x24.png b/default_images/sw/res/sidebar/pageproppanel/column_L_right_24x24.png Binary files differnew file mode 100755 index 000000000000..ccdecfe2de6f --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/column_L_right_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/columncopy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/columncopy_24x24.png Binary files differnew file mode 100755 index 000000000000..983da8be35ad --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/columncopy_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/columnleft_24x24.png b/default_images/sw/res/sidebar/pageproppanel/columnleft_24x24.png Binary files differnew file mode 100755 index 000000000000..c61c76a32b57 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/columnleft_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/columnright_24x24.png b/default_images/sw/res/sidebar/pageproppanel/columnright_24x24.png Binary files differnew file mode 100755 index 000000000000..9421fabc232d --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/columnright_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsizeA3_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsizeA3_24x24.png Binary files differnew file mode 100755 index 000000000000..e9507282d308 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsizeA3_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsizeA4_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsizeA4_24x24.png Binary files differnew file mode 100755 index 000000000000..3039746e09de --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsizeA4_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsizeA5_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsizeA5_24x24.png Binary files differnew file mode 100755 index 000000000000..2e73f5d246dc --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsizeA5_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsizeB4_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsizeB4_24x24.png Binary files differnew file mode 100755 index 000000000000..8456ef4d544f --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsizeB4_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsizeB5_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsizeB5_24x24.png Binary files differnew file mode 100755 index 000000000000..21b37467d657 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsizeB5_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsizeC5_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsizeC5_24x24.png Binary files differnew file mode 100755 index 000000000000..91501da5b92c --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsizeC5_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A3_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A3_24x24.png Binary files differnew file mode 100755 index 000000000000..a32119dfa20f --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A3_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A4_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A4_24x24.png Binary files differnew file mode 100755 index 000000000000..5cd5f8e0fcb9 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A4_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A5_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A5_24x24.png Binary files differnew file mode 100755 index 000000000000..cc4d2cb627a2 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_A5_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsize_L_B4_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_B4_24x24.png Binary files differnew file mode 100755 index 000000000000..e1d1bcf2c91e --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_B4_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsize_L_B5_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_B5_24x24.png Binary files differnew file mode 100755 index 000000000000..0e7627201309 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_B5_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsize_L_C5_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_C5_24x24.png Binary files differnew file mode 100755 index 000000000000..2c880f81b2bc --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_C5_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsize_L_copy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_copy_24x24.png Binary files differnew file mode 100755 index 000000000000..608d5a586147 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsize_L_copy_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/documentsizecopy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/documentsizecopy_24x24.png Binary files differnew file mode 100755 index 000000000000..ce13c36b3f69 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/documentsizecopy_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/format_L_copy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/format_L_copy_24x24.png Binary files differnew file mode 100755 index 000000000000..747ac4dd242f --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/format_L_copy_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/format_L_mirror_24x24.png b/default_images/sw/res/sidebar/pageproppanel/format_L_mirror_24x24.png Binary files differnew file mode 100755 index 000000000000..aa93fbcbb09a --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/format_L_mirror_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/format_L_narrow_24x24.png b/default_images/sw/res/sidebar/pageproppanel/format_L_narrow_24x24.png Binary files differnew file mode 100755 index 000000000000..e6d2579d1525 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/format_L_narrow_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/format_L_nomal_24x24.png b/default_images/sw/res/sidebar/pageproppanel/format_L_nomal_24x24.png Binary files differnew file mode 100755 index 000000000000..840ca804a5ae --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/format_L_nomal_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/format_L_wide_24x24.png b/default_images/sw/res/sidebar/pageproppanel/format_L_wide_24x24.png Binary files differnew file mode 100755 index 000000000000..a47c1ca6cc36 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/format_L_wide_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/formatcopy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/formatcopy_24x24.png Binary files differnew file mode 100755 index 000000000000..983da8be35ad --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/formatcopy_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/formatmirror_24x24.png b/default_images/sw/res/sidebar/pageproppanel/formatmirror_24x24.png Binary files differnew file mode 100755 index 000000000000..696ca1126428 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/formatmirror_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/formatnarrow_24x24.png b/default_images/sw/res/sidebar/pageproppanel/formatnarrow_24x24.png Binary files differnew file mode 100755 index 000000000000..2f4b0e4ca005 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/formatnarrow_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/formatnormal_24x24.png b/default_images/sw/res/sidebar/pageproppanel/formatnormal_24x24.png Binary files differnew file mode 100755 index 000000000000..83fea86ef080 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/formatnormal_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/formatwide_24x24.png b/default_images/sw/res/sidebar/pageproppanel/formatwide_24x24.png Binary files differnew file mode 100755 index 000000000000..b260b07b8d6e --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/formatwide_24x24.png diff --git a/default_images/sw/res/sidebar/pageproppanel/last_custom_common.png b/default_images/sw/res/sidebar/pageproppanel/last_custom_common.png Binary files differnew file mode 100755 index 000000000000..bbbe3255d272 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/last_custom_common.png diff --git a/default_images/sw/res/sidebar/pageproppanel/last_custom_common_grey.png b/default_images/sw/res/sidebar/pageproppanel/last_custom_common_grey.png Binary files differnew file mode 100755 index 000000000000..c95062eb2897 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/last_custom_common_grey.png diff --git a/default_images/sw/res/sidebar/pageproppanel/portraitcopy_24x24.png b/default_images/sw/res/sidebar/pageproppanel/portraitcopy_24x24.png Binary files differnew file mode 100755 index 000000000000..e39324a1d435 --- /dev/null +++ b/default_images/sw/res/sidebar/pageproppanel/portraitcopy_24x24.png diff --git a/editeng/inc/editeng/itemtype.hxx b/editeng/inc/editeng/itemtype.hxx index fb41b3e5df30..939537ff3ed3 100644 --- a/editeng/inc/editeng/itemtype.hxx +++ b/editeng/inc/editeng/itemtype.hxx @@ -37,7 +37,6 @@ #include "editeng/editengdllapi.h" class Color; -class XColorTable; class IntlWrapper; // static and prototypes ------------------------------------------------- diff --git a/editeng/inc/editeng/outliner.hxx b/editeng/inc/editeng/outliner.hxx index 74034df0c89a..2c2d22df437d 100644 --- a/editeng/inc/editeng/outliner.hxx +++ b/editeng/inc/editeng/outliner.hxx @@ -37,7 +37,7 @@ #include <tools/link.hxx> #include <rsc/rscsfx.hxx> #include "editeng/editengdllapi.h" - +#include <editeng/numitem.hxx> #include <svtools/grfmgr.hxx> #include <tools/rtti.hxx> // wegen typedef TypeId @@ -372,7 +372,8 @@ public: or disables numbering for the selected paragraphs if the numbering of the first paragraph is on */ void ToggleBullets(); - + sal_Bool ToggleBullets(sal_Bool bBulletOnOff, sal_Bool bNormalBullet, sal_Bool bMasterView, SvxNumRule* pNumRule = NULL, sal_Bool bForceBulletOnOff = false); + sal_Bool ToggleAllParagraphsBullets(sal_Bool bBulletOnOffMode, sal_Bool bNormalBullet, sal_Bool bToggleOn, sal_Bool bMasterView, SvxNumRule* pNumRule = NULL); /** enables numbering for the selected paragraphs that are not enabled and ignore all selected paragraphs that already have numbering enabled. */ @@ -1049,6 +1050,8 @@ public: virtual sal_Bool IsParaIsNumberingRestart( sal_uInt16 nPara ); virtual void SetParaIsNumberingRestart( sal_uInt16 nPara, sal_Bool bParaIsNumberingRestart ); + + sal_Int16 GetBulletsNumberingStatus(); }; #endif diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx index dd454a1700b8..677bca225367 100644 --- a/editeng/source/items/textitem.cxx +++ b/editeng/source/items/textitem.cxx @@ -3785,6 +3785,16 @@ void SvxScriptSetItem::GetSlotIds( sal_uInt16 nSlotId, sal_uInt16& rLatin, rAsian = SID_ATTR_CHAR_CJK_LANGUAGE; rComplex = SID_ATTR_CHAR_CTL_LANGUAGE; break; + case SID_ATTR_CHAR_SHADOWED: + rLatin = SID_ATTR_CHAR_SHADOWED; + rAsian = SID_ATTR_CHAR_SHADOWED; + rComplex = SID_ATTR_CHAR_SHADOWED; + break; + case SID_ATTR_CHAR_STRIKEOUT: + rLatin = SID_ATTR_CHAR_STRIKEOUT; + rAsian = SID_ATTR_CHAR_STRIKEOUT; + rComplex = SID_ATTR_CHAR_STRIKEOUT; + break; } } diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx index 50127c68c787..e703b36408a9 100644 --- a/editeng/source/outliner/outliner.cxx +++ b/editeng/source/outliner/outliner.cxx @@ -370,6 +370,53 @@ void Outliner::SetParaIsNumberingRestart( sal_uInt16 nPara, sal_Bool bParaIsNumb } } +sal_Int16 Outliner::GetBulletsNumberingStatus() +{ + sal_Bool bHasBulletsNumbering = FALSE; + sal_uInt16 nParaCount = (sal_uInt16)(pParaList->GetParagraphCount()); + for (sal_uInt16 nPara = 0; nPara < nParaCount; nPara++) + { + if ((bHasBulletsNumbering = ImplHasBullet(nPara))) + { + break; + } + } + sal_uInt16 nBulletsCount = 0; + sal_uInt16 nNumberingCount = 0; + if (bHasBulletsNumbering) + { + // At least have one paragraph that having bullets or numbering. + for (sal_uInt16 nPara = 0; nPara < nParaCount; nPara++) + { + Paragraph* pPara = pParaList->GetParagraph(nPara); + const SfxItemSet& rAttrs = GetParaAttribs(nPara); + if (!pPara) + { + continue; + } + const SvxNumberFormat* pFmt = GetNumberFormat(nPara); + if (!pFmt) + { + // At least, exists one paragraph that has no Bullets/Numbering. + break; + } + else if ((pFmt->GetNumberingType() == SVX_NUM_BITMAP) || (pFmt->GetNumberingType() == SVX_NUM_CHAR_SPECIAL)) + { + // Having Bullets in this paragraph. + nBulletsCount++; + } + else + { + // Having Numbering in this paragraph. + nNumberingCount++; + } + } + } + sal_Int16 nValue = (nBulletsCount == nParaCount) ? 0 : 2; + nValue = (nNumberingCount == nParaCount) ? 1 : nValue; + return nValue; +} + OutlinerParaObject* Outliner::CreateParaObject( sal_uInt16 nStartPara, sal_uInt16 nCount ) const { DBG_CHKTHIS(Outliner,0); diff --git a/editeng/source/outliner/outlvw.cxx b/editeng/source/outliner/outlvw.cxx index 3eec145746d5..a41aa3259bd3 100644 --- a/editeng/source/outliner/outlvw.cxx +++ b/editeng/source/outliner/outlvw.cxx @@ -50,6 +50,7 @@ #include <editeng/numitem.hxx> #include <vcl/window.hxx> #include <svl/itemset.hxx> +#include <svl/eitem.hxx> #include <editeng/editstat.hxx> @@ -1232,6 +1233,205 @@ void OutlinerView::ToggleBullets() pOwner->UndoActionEnd( OLUNDO_DEPTH ); } +sal_Bool OutlinerView::ToggleBullets(sal_Bool bBulletOnOff, sal_Bool bNormalBullet, sal_Bool bMasterView, SvxNumRule* pNumRule, sal_Bool bForceBulletOnOff) +{ + pOwner->UndoActionStart( OLUNDO_DEPTH ); + + ESelection aSel( pEditView->GetSelection() ); + aSel.Adjust(); + + const bool bUpdate = pOwner->pEditEngine->GetUpdateMode(); + pOwner->pEditEngine->SetUpdateMode( sal_False ); + + sal_Int16 nDepth = -2; + sal_Bool bRet = sal_False; + + //Modified by xuezhiy for bullet enhancement + bool bBulletOn = sal_True; + + if( bBulletOnOff ) + { + bool bHasBullet = sal_False; + for ( sal_uInt16 nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ ) + { + bHasBullet = pOwner->ImplHasBullet(nPara); + if(bHasBullet) + break; + } + + if( bHasBullet ) + { + bBulletOn = sal_False; + + for ( sal_uInt16 nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ ) + { + Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara ); + DBG_ASSERT(pPara, "OutlinerView::ToggleBullets(), illegal selection?"); + + const SfxItemSet& rAttrs = pOwner->GetParaAttribs( nPara ); + if( pPara ) + { + const SvxNumberFormat* pFmt = pOwner ->GetNumberFormat(nPara); + + if( !pFmt ) + { + // Has no Bullet paragraph + bBulletOn = sal_True; + break; + } + else if( ( pFmt->GetNumberingType() == SVX_NUM_BITMAP ) || ( pFmt->GetNumberingType() == SVX_NUM_CHAR_SPECIAL ) ) + { + // Normal ==>> Numbering + if( !bNormalBullet ) + { + bBulletOn = sal_True; + break; + } + } + else + { + // Numbering ==>> Normal + if( bNormalBullet ) + { + bBulletOn = sal_True; + break; + } + } + } + } + } + + } + if (bForceBulletOnOff) { + bBulletOn = bBulletOnOff; + } + for ( sal_uInt16 nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ ) + { + Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara ); + DBG_ASSERT(pPara, "OutlinerView::ToggleBullets(), illegal selection?"); + + if( pPara ) + { + bRet = sal_True; + + nDepth = pOwner->GetDepth(nPara); + + if( bBulletOn && nDepth == -1 ) + { + // Off ==>> On + nDepth = 0; + } + else if( !bBulletOn && nDepth == 0 ) + { + // On ==>> Off + nDepth = -1; + } + pOwner->SetDepth( pPara, nDepth ); + + const SfxItemSet& rAttrs = pOwner->GetParaAttribs( nPara ); +// bool bBulletState = ((const SfxBoolItem&) rAttrs.Get( EE_PARA_BULLETSTATE ) ).GetValue(); + + SfxItemSet aAttrs(rAttrs); + aAttrs.Put( SfxBoolItem( EE_PARA_BULLETSTATE, bBulletOn ) ); + + // Change bullet types + if( bBulletOn && pNumRule) + { + bool bSetBulletType = false; + if( !bBulletOnOff ) + { + // Not bullet on/off button + bSetBulletType = true; + } + else + { + const SvxNumberFormat* pFmt = pOwner ->GetNumberFormat(nPara); + + if( !pFmt ) + { + // Has no bullet + bSetBulletType = true; + } + else + { + sal_Int16 nNumType = pFmt->GetNumberingType(); + if( bNormalBullet && nNumType != SVX_NUM_BITMAP && nNumType != SVX_NUM_CHAR_SPECIAL ) + { + // Set to Normal bullet, old bullet type is Numbering bullet + bSetBulletType = true; + } + else if( !bNormalBullet && (nNumType == SVX_NUM_BITMAP || nNumType == SVX_NUM_CHAR_SPECIAL) ) + { + // Set to Numbering bullet, old bullet type is Normal bullet + bSetBulletType = true; + } + } + } + + // Get old bullet space + SvxNumRule aNewRule( *pNumRule ); + + const SfxPoolItem* pPoolItem=NULL; + SfxItemState eState = rAttrs.GetItemState(EE_PARA_NUMBULLET, sal_False, &pPoolItem); + if (eState != SFX_ITEM_SET) + { + // Use default value when has not contain bullet item + ESelection aSelection(nPara, 0); + SfxItemSet aTmpSet( pOwner->pEditEngine->GetAttribs( aSelection ) ); + pPoolItem = aTmpSet.GetItem( EE_PARA_NUMBULLET ); + } + + const SvxNumBulletItem* pNumBulletItem = dynamic_cast< const SvxNumBulletItem* >( pPoolItem ); + //const SvxNumBulletItem& rNumBullet = (const SvxNumBulletItem&) rAttrs.Get( EE_PARA_NUMBULLET ); + if( pNumBulletItem ) + { + sal_uInt16 nLevelCnt = pNumBulletItem->GetNumRule()->GetLevelCount(); + nLevelCnt = Min( nLevelCnt, pNumRule->GetLevelCount() ); + + for( sal_uInt16 nLevel = 0; nLevel < nLevelCnt; ++nLevel ) + { + const SvxNumberFormat* pOldFmt = pNumBulletItem->GetNumRule()->Get( nLevel ); + const SvxNumberFormat* pNewFmt = pNumRule->Get( nLevel ); + + if( pOldFmt && pNewFmt && (pOldFmt->GetFirstLineOffset() != pNewFmt->GetFirstLineOffset() + || pOldFmt->GetAbsLSpace() != pNewFmt->GetAbsLSpace() ) ) + { + SvxNumberFormat* pNewFmtClone = new SvxNumberFormat( *pNewFmt ); + pNewFmtClone->SetFirstLineOffset( pOldFmt->GetFirstLineOffset() ); + pNewFmtClone->SetAbsLSpace( pOldFmt->GetAbsLSpace() ); + + aNewRule.SetLevel( nLevel, pNewFmtClone ); + delete pNewFmtClone; + } + } + } + + // Don't set bullet attribute to paragraph in Master view + // Because it will be set into style sheet + if( bSetBulletType && !bMasterView ) + aAttrs.Put(SvxNumBulletItem( aNewRule ), EE_PARA_NUMBULLET); + } + + pOwner->SetParaAttribs( nPara, aAttrs ); + + } + } + + // --> OD 2009-03-10 #i100014# + // It is not a good idea to substract 1 from a count and cast the result + // to sal_uInt16 without check, if the count is 0. + sal_uInt16 nParaCount = (sal_uInt16) (pOwner->pParaList->GetParagraphCount()); + // <-- + pOwner->ImplCheckParagraphs( aSel.nStartPara, nParaCount ); + pOwner->pEditEngine->QuickMarkInvalid( ESelection( aSel.nStartPara, 0, nParaCount, 0 ) ); + + pOwner->pEditEngine->SetUpdateMode( bUpdate ); + + pOwner->UndoActionEnd( OLUNDO_DEPTH ); + + return bRet; +} + void OutlinerView::EnableBullets() { pOwner->UndoActionStart( OLUNDO_DEPTH ); @@ -1266,6 +1466,126 @@ void OutlinerView::EnableBullets() pOwner->UndoActionEnd( OLUNDO_DEPTH ); } +sal_Bool OutlinerView::ToggleAllParagraphsBullets(sal_Bool bBulletOnOffMode, sal_Bool bNormalBullet, sal_Bool bToggleOn, sal_Bool bMasterView, SvxNumRule* pNumRule) +{ + if (!pOwner || !pOwner->pEditEngine || !pOwner->pParaList) + { + return sal_False; + } + + sal_Bool bReturn = sal_False; + pOwner->UndoActionStart(OLUNDO_DEPTH); + const sal_Bool bUpdate = pOwner->pEditEngine->GetUpdateMode(); + pOwner->pEditEngine->SetUpdateMode(sal_False); + + sal_Int16 nDepth = -2; + sal_uInt16 nParaCount = (sal_uInt16)(pOwner->pParaList->GetParagraphCount()); + for (sal_uInt16 nPara = 0; nPara < nParaCount; nPara++) + { + Paragraph* pPara = pOwner->pParaList->GetParagraph(nPara); + DBG_ASSERT(pPara, "OutlinerView::ToggleAllParagraphsBullets(), illegal selection?"); + + if (pPara) + { + bReturn = sal_True; + nDepth = pOwner->GetDepth(nPara); + if (bToggleOn && nDepth == -1) + { + // Off ==>> On + nDepth = 0; + } + else if (!bToggleOn && nDepth == 0) + { + // On ==>> Off + nDepth = -1; + } + pOwner->SetDepth(pPara, nDepth); + + const SfxItemSet& rAttrs = pOwner->GetParaAttribs(nPara); + SfxItemSet aAttrs(rAttrs); + aAttrs.Put(SfxBoolItem(EE_PARA_BULLETSTATE, bToggleOn)); + + // Change bullet types. + if (bToggleOn && pNumRule) + { + sal_Bool bSetBulletType = sal_False; + if (!bBulletOnOffMode) + { + // Not bullet on/off button. + bSetBulletType = sal_True; + } + else + { + const SvxNumberFormat* pFmt = pOwner ->GetNumberFormat(nPara); + if (!pFmt) + { + // Has no bullet. + bSetBulletType = sal_True; + } + else + { + sal_Int16 nNumType = pFmt->GetNumberingType(); + if (bNormalBullet && nNumType != SVX_NUM_BITMAP && nNumType != SVX_NUM_CHAR_SPECIAL) + { + // Set to Normal bullet, old bullet type is Numbering bullet. + bSetBulletType = sal_True; + } + else if (!bNormalBullet && (nNumType == SVX_NUM_BITMAP || nNumType == SVX_NUM_CHAR_SPECIAL)) + { + // Set to Numbering bullet, old bullet type is Normal bullet. + bSetBulletType = sal_True; + } + } + } + + // Get old bullet space. + SvxNumRule aNewRule(*pNumRule); + const SfxPoolItem* pPoolItem=NULL; + SfxItemState eState = rAttrs.GetItemState(EE_PARA_NUMBULLET, sal_False, &pPoolItem); + ESelection aSelection(nPara, 0); + SfxItemSet aTmpSet(pOwner->pEditEngine->GetAttribs(aSelection)); + if (eState != SFX_ITEM_SET) + { + // Use default value when has not contain bullet item. + pPoolItem = aTmpSet.GetItem(EE_PARA_NUMBULLET); + } + + const SvxNumBulletItem* pNumBulletItem = dynamic_cast< const SvxNumBulletItem* >(pPoolItem); + if (pNumBulletItem) + { + sal_uInt16 nLevelCnt = pNumBulletItem->GetNumRule()->GetLevelCount(); + nLevelCnt = Min(nLevelCnt, pNumRule->GetLevelCount()); + + for (sal_uInt16 nLevel = 0; nLevel < nLevelCnt; nLevel++) + { + const SvxNumberFormat* pOldFmt = pNumBulletItem->GetNumRule()->Get(nLevel); + const SvxNumberFormat* pNewFmt = pNumRule->Get(nLevel); + if (pOldFmt && pNewFmt && (pOldFmt->GetFirstLineOffset() != pNewFmt->GetFirstLineOffset() || pOldFmt->GetAbsLSpace() != pNewFmt->GetAbsLSpace())) + { + SvxNumberFormat* pNewFmtClone = new SvxNumberFormat(*pNewFmt); + pNewFmtClone->SetFirstLineOffset(pOldFmt->GetFirstLineOffset()); + pNewFmtClone->SetAbsLSpace(pOldFmt->GetAbsLSpace()); + aNewRule.SetLevel(nLevel, pNewFmtClone); + delete pNewFmtClone; + } + } + } + + // Don't set bullet attribute to paragraph in Master view, because it will be set into style sheet. + if (bSetBulletType && !bMasterView) + aAttrs.Put(SvxNumBulletItem(aNewRule), EE_PARA_NUMBULLET); + } + pOwner->SetParaAttribs(nPara, aAttrs); + } + } + + pOwner->ImplCheckParagraphs(0, nParaCount); + pOwner->pEditEngine->QuickMarkInvalid(ESelection(0, 0, nParaCount, 0)); + pOwner->pEditEngine->SetUpdateMode(bUpdate); + pOwner->UndoActionEnd(OLUNDO_DEPTH); + + return bReturn; +} void OutlinerView::RemoveAttribsKeepLanguages( sal_Bool bRemoveParaAttribs ) { diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx index 186ade97aebe..b6ff73300243 100644 --- a/extensions/source/propctrlr/standardcontrol.cxx +++ b/extensions/source/propctrlr/standardcontrol.cxx @@ -682,7 +682,7 @@ namespace pcr :OColorControl_Base( PropertyControlType::ColorListBox, pParent, nWinStyle ) { // initialize the color listbox - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; SfxObjectShell* pDocSh = SfxObjectShell::Current(); const SfxPoolItem* pItem = pDocSh ? pDocSh->GetItem( SID_COLOR_TABLE ) : NULL; if ( pItem ) @@ -693,7 +693,7 @@ namespace pcr if ( !pColorTable ) { - pColorTable = XColorTable::GetStdColorTable(); + pColorTable = XColorList::GetStdColorList(); } diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index 23d16e935d8d..82af80750607 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -1024,11 +1024,11 @@ void DffPropertyReader::ApplyLineAttributes( SfxItemSet& rSet, const MSO_SPT eSh if ( eShapeType == mso_sptMin ) eLineJointDefault = mso_lineJoinRound; MSO_LineJoin eLineJoint = (MSO_LineJoin)GetPropertyValue( DFF_Prop_lineJoinStyle, eLineJointDefault ); - XLineJoint eXLineJoint( XLINEJOINT_MITER ); + com::sun::star::drawing::LineJoint eXLineJoint( com::sun::star::drawing::LineJoint_MITER ); if ( eLineJoint == mso_lineJoinBevel ) - eXLineJoint = XLINEJOINT_BEVEL; + eXLineJoint = com::sun::star::drawing::LineJoint_BEVEL; else if ( eLineJoint == mso_lineJoinRound ) - eXLineJoint = XLINEJOINT_ROUND; + eXLineJoint = com::sun::star::drawing::LineJoint_ROUND; rSet.Put( XLineJointItem( eXLineJoint ) ); if ( nLineFlags & 0x10 ) diff --git a/framework/Library_fwk.mk b/framework/Library_fwk.mk index c78bf67c405d..31e32d67240c 100644 --- a/framework/Library_fwk.mk +++ b/framework/Library_fwk.mk @@ -116,6 +116,7 @@ $(eval $(call gb_Library_add_exception_objects,fwk,\ framework/source/services/backingcomp \ framework/source/services/backingwindow \ framework/source/services/desktop \ + framework/source/services/ContextChangeEventMultiplexer \ framework/source/services/frame \ framework/source/services/modelwinservice \ framework/source/services/modulemanager \ diff --git a/framework/inc/macros/registration.hxx b/framework/inc/macros/registration.hxx index b14ec798bbb2..2b724ca589c4 100644 --- a/framework/inc/macros/registration.hxx +++ b/framework/inc/macros/registration.hxx @@ -102,7 +102,7 @@ ________________________________________________________________________________ { \ LOG_REGISTRATION_GETFACTORY( "\t\tpImplementationName and pServiceManager are valid ...\n" ) \ /* Define variables which are used in following macros. */ \ - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory > xFactory ; \ + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xFactory ; \ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceManager ; \ xServiceManager = reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pServiceManager ) ; \ /* These parameter will expand to */ \ diff --git a/framework/inc/services/ContextChangeEventMultiplexer.hxx b/framework/inc/services/ContextChangeEventMultiplexer.hxx new file mode 100644 index 000000000000..2abe1820ba05 --- /dev/null +++ b/framework/inc/services/ContextChangeEventMultiplexer.hxx @@ -0,0 +1,144 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef __FRAMEWORK_SERVICES_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ +#define __FRAMEWORK_SERVICES_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ + +#include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp> + +#include <cppuhelper/compbase4.hxx> +#include <cppuhelper/basemutex.hxx> + +#include "macros/xserviceinfo.hxx" + +#include <map> +#include <boost/noncopyable.hpp> + + +namespace +{ + typedef ::cppu::WeakComponentImplHelper4 < + css::ui::XContextChangeEventMultiplexer, + css::lang::XSingleComponentFactory, + css::lang::XServiceInfo, + css::lang::XEventListener + > ContextChangeEventMultiplexerInterfaceBase; +} + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; +namespace cssl = ::com::sun::star::lang; + +namespace framework { + +class ContextChangeEventMultiplexer + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public ContextChangeEventMultiplexerInterfaceBase +{ +public: + ContextChangeEventMultiplexer(const cssu::Reference<css::uno::XComponentContext>& rxContext); + virtual ~ContextChangeEventMultiplexer (void); + + virtual void SAL_CALL disposing (void); + + // XContextChangeEventMultiplexer + virtual void SAL_CALL addContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeAllContextChangeEventListeners ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL broadcastContextChangeEvent ( + const css::ui::ContextChangeEventObject& rContextChangeEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException); + + // XSingleComponentFactory + virtual cssu::Reference<cssu::XInterface> SAL_CALL createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + virtual cssu::Reference<cssu::XInterface > SAL_CALL createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName (void) + throw (cssu::RuntimeException); + virtual sal_Bool SAL_CALL supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException); + virtual cssu::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) + throw (cssu::RuntimeException); + + // XEventListener + virtual void SAL_CALL disposing ( + const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException); + + static ::rtl::OUString SAL_CALL impl_getStaticImplementationName (void); + static cssu::Reference<cssu::XInterface> SAL_CALL impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& xServiceManager); + +private: + typedef ::std::vector<cssu::Reference<css::ui::XContextChangeEventListener> > ListenerContainer; + class FocusDescriptor + { + public: + ListenerContainer maListeners; + ::rtl::OUString msCurrentApplicationName; + ::rtl::OUString msCurrentContextName; + }; + typedef ::std::map<cssu::Reference<cssu::XInterface>, FocusDescriptor> ListenerMap; + ListenerMap maListeners; + + /** Notify all listeners in the container that is associated with + the given event focus. + + Typically called twice from broadcastEvent(), once for the + given event focus and onece for NULL. + */ + void BroadcastEventToSingleContainer ( + const css::ui::ContextChangeEventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus); + FocusDescriptor* GetFocusDescriptor ( + const cssu::Reference<cssu::XInterface>& rxEventFocus, + const bool bCreateWhenMissing); + + static cssu::Sequence< ::rtl::OUString > SAL_CALL static_GetSupportedServiceNames (void); + static cssu::Reference<cssu::XInterface> SAL_CALL static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception); +}; + +} // end of namespace framework + +#endif + diff --git a/framework/inc/services/EventMultiplexer.hxx b/framework/inc/services/EventMultiplexer.hxx new file mode 100644 index 000000000000..b865e7a35b3b --- /dev/null +++ b/framework/inc/services/EventMultiplexer.hxx @@ -0,0 +1,122 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef __FRAMEWORK_SERVICES_EVENT_MULTIPLEXER_HXX_ +#define __FRAMEWORK_SERVICES_EVENT_MULTIPLEXER_HXX_ + +#include <com/sun/star/util/XEventMultiplexer.hpp> + +#include <cppuhelper/compbase3.hxx> +#include <cppuhelper/basemutex.hxx> + +#include "macros/xserviceinfo.hxx" + +namespace +{ + typedef ::cppu::WeakComponentImplHelper3 < + css::util::XEventMultiplexer, + css::lang::XSingleComponentFactory, + css::lang::XServiceInfo + > EventMultiplexerInterfaceBase; +} + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; +namespace cssl = ::com::sun::star::lang; + +namespace framework { + +class EventMultiplexer + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public EventMultiplexerInterfaceBase +{ +public: + EventMultiplexer(const cssu::Reference<css::uno::XComponentContext>& rxContext); + virtual ~EventMultiplexer (void); + + // XEventMultiplexer + virtual void SAL_CALL addEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeAllEventListeners ( + const cssu::Reference<css::util::XEventListener>& rxListener) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL broadcastEvent ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException); + + // XSingleComponentFactory + virtual cssu::Reference<cssu::XInterface> SAL_CALL createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + virtual cssu::Reference<cssu::XInterface > SAL_CALL createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName (void) + throw (cssu::RuntimeException); + virtual sal_Bool SAL_CALL supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException); + virtual cssu::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) + throw (cssu::RuntimeException); + + static ::rtl::OUString SAL_CALL impl_getStaticImplementationName (void); + static cssu::Reference<cssu::XInterface> SAL_CALL impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& xServiceManager); + +private: + typedef ::std::vector<cssu::Reference<css::util::XEventListener> > ListenerContainer; + typedef ::std::map<cssu::Reference<cssu::XInterface>, ListenerContainer> ListenerMap; + ListenerMap maListeners; + + /** Notify all listeners in the container that is associated with + the given event focus. + + Typically called twice from broadcastEvent(), once for the + given event focus and onece for NULL. + */ + void BroadcastEventToSingleContainer ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus); + + static cssu::Sequence< ::rtl::OUString > SAL_CALL static_GetSupportedServiceNames (void); + static cssu::Reference<cssu::XInterface> SAL_CALL static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception); +}; + +} // end of namespace framework + +#endif + diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx index d8cfd95c1eff..813cf48981c6 100644 --- a/framework/source/register/registerservices.cxx +++ b/framework/source/register/registerservices.cxx @@ -53,26 +53,14 @@ #include <services/tabwindowservice.hxx> #include <services/frame.hxx> #include <services/modulemanager.hxx> -//#include <dispatch/oxt_handler.hxx> #include <jobs/jobexecutor.hxx> -//#include <recording/dispatchrecordersupplier.hxx> -//#include <recording/dispatchrecorder.hxx> -//#include <dispatch/mailtodispatcher.hxx> -//#include <dispatch/servicehandler.hxx> #include <jobs/jobdispatch.hxx> #include <services/backingcomp.hxx> -//#include <services/dispatchhelper.hxx> #include <services/layoutmanager.hxx> -//#include <services/license.hxx> #include <uifactory/uielementfactorymanager.hxx> #include <uifactory/popupmenucontrollerfactory.hxx> -//#include <uielement/fontmenucontroller.hxx> -//#include <uielement/fontsizemenucontroller.hxx> #include <uielement/objectmenucontroller.hxx> -//#include <uielement/headermenucontroller.hxx> -//#include <uielement/footermenucontroller.hxx> #include <uielement/controlmenucontroller.hxx> -//#include <uielement/macrosmenucontroller.hxx> #include <uielement/uicommanddescription.hxx> #include <uiconfiguration/uiconfigurationmanager.hxx> #include <uiconfiguration/moduleuicfgsupplier.hxx> @@ -84,7 +72,6 @@ #include <uifactory/toolboxfactory.hxx> #include <uifactory/addonstoolboxfactory.hxx> #include "uiconfiguration/windowstateconfiguration.hxx" -//#include <uielement/toolbarsmenucontroller.hxx> #include "uifactory/toolbarcontrollerfactory.hxx" #include "uifactory/statusbarcontrollerfactory.hxx" #include <services/autorecovery.hxx> @@ -93,42 +80,27 @@ #include <uifactory/statusbarfactory.hxx> #include <uiconfiguration/uicategorydescription.hxx> #include <services/sessionlistener.hxx> -//#include <uielement/newmenucontroller.hxx> #include <services/taskcreatorsrv.hxx> -//#include <services/uriabbreviation.hxx> - #include <uielement/langselectionstatusbarcontroller.hxx> -//#include <uielement/langselectionmenucontroller.hxx> #include <uiconfiguration/imagemanager.hxx> #include <uifactory/windowcontentfactorymanager.hxx> #include <services/substitutepathvars.hxx> #include <services/pathsettings.hxx> +#include <services/ContextChangeEventMultiplexer.hxx> COMPONENTGETIMPLEMENTATIONENVIRONMENT COMPONENTGETFACTORY ( IFFACTORY( ::framework::URLTransformer ) else IFFACTORY( ::framework::Desktop ) else IFFACTORY( ::framework::Frame ) else - //IFFACTORY( ::framework::Oxt_Handler ) else IFFACTORY( ::framework::JobExecutor ) else - //IFFACTORY( ::framework::DispatchRecorderSupplier ) else - //IFFACTORY( ::framework::DispatchRecorder ) else - //IFFACTORY( ::framework::MailToDispatcher ) else - //IFFACTORY( ::framework::ServiceHandler ) else IFFACTORY( ::framework::JobDispatch ) else IFFACTORY( ::framework::BackingComp ) else - //IFFACTORY( ::framework::DispatchHelper ) else IFFACTORY( ::framework::LayoutManager ) else - //IFFACTORY( ::framework::License ) else IFFACTORY( ::framework::UIElementFactoryManager ) else IFFACTORY( ::framework::PopupMenuControllerFactory ) else - //IFFACTORY( ::framework::FontMenuController ) else - //IFFACTORY( ::framework::FontSizeMenuController ) else IFFACTORY( ::framework::ObjectMenuController ) else - //IFFACTORY( ::framework::HeaderMenuController ) else - //IFFACTORY( ::framework::FooterMenuController ) else IFFACTORY( ::framework::ControlMenuController ) else - //IFFACTORY( ::framework::MacrosMenuController ) else IFFACTORY( ::framework::UICommandDescription ) else IFFACTORY( ::framework::ModuleManager ) else IFFACTORY( ::framework::UIConfigurationManager ) else @@ -142,7 +114,6 @@ COMPONENTGETFACTORY ( IFFACTORY( ::framework::URLTransformer IFFACTORY( ::framework::AddonsToolBoxFactory ) else IFFACTORY( ::framework::WindowStateConfiguration ) else IFFACTORY( ::framework::ToolbarControllerFactory ) else - //IFFACTORY( ::framework::ToolbarsMenuController ) else IFFACTORY( ::framework::AutoRecovery ) else IFFACTORY( ::framework::StatusIndicatorFactory ) else IFFACTORY( ::framework::RecentFilesMenuController ) else @@ -152,15 +123,12 @@ COMPONENTGETFACTORY ( IFFACTORY( ::framework::URLTransformer IFFACTORY( ::framework::StatusbarControllerFactory ) else IFFACTORY( ::framework::SessionListener ) else IFFACTORY( ::framework::TaskCreatorService ) else - //IFFACTORY( ::framework::NewMenuController ) else - //IFFACTORY( ::framework::UriAbbreviation ) else - //IFFACTORY( ::framework::PopupMenuDispatcher ) else IFFACTORY( ::framework::ImageManager ) else IFFACTORY( ::framework::LangSelectionStatusbarController ) else - //IFFACTORY( ::framework::LanguageSelectionMenuController ) else IFFACTORY( ::framework::WindowContentFactoryManager ) else IFFACTORY( ::framework::TabWindowService ) else IFFACTORY( ::framework::SubstitutePathVariables ) else - IFFACTORY( ::framework::PathSettings ) + IFFACTORY( ::framework::PathSettings ) else + IFFACTORY( ::framework::ContextChangeEventMultiplexer ) ) diff --git a/framework/source/services/ContextChangeEventMultiplexer.cxx b/framework/source/services/ContextChangeEventMultiplexer.cxx new file mode 100644 index 000000000000..f3861a607d10 --- /dev/null +++ b/framework/source/services/ContextChangeEventMultiplexer.cxx @@ -0,0 +1,389 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_framework.hxx" + +#include "services/ContextChangeEventMultiplexer.hxx" +#include "services.h" + +using ::rtl::OUString; + +#define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) + +using namespace css; +using namespace cssu; + +namespace framework { + +#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer" +#define SERVICE_NAME "com.sun.star.ui.ContextChangeEventMultiplexer" +#define SINGLETON_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexerSigleton" + + +ContextChangeEventMultiplexer::ContextChangeEventMultiplexer ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + : ContextChangeEventMultiplexerInterfaceBase(m_aMutex), + maListeners() +{ + (void)rxContext; +} + + + + +ContextChangeEventMultiplexer::~ContextChangeEventMultiplexer (void) +{ +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::disposing (void) +{ + ListenerMap aListeners; + aListeners.swap(maListeners); + + cssu::Reference<cssu::XInterface> xThis (static_cast<XWeak*>(this)); + css::lang::EventObject aEvent (xThis); + for (ListenerMap::const_iterator iContainer(aListeners.begin()), iEnd(aListeners.end()); + iContainer!=iEnd; + ++iContainer) + { + // Unregister from the focus object. + Reference<lang::XComponent> xComponent (iContainer->first, UNO_QUERY); + if (xComponent.is()) + xComponent->removeEventListener(this); + + // Tell all listeners that we are being disposed. + const FocusDescriptor& rFocusDescriptor (iContainer->second); + for (ListenerContainer::const_iterator + iListener(rFocusDescriptor.maListeners.begin()), + iContainerEnd(rFocusDescriptor.maListeners.end()); + iListener!=iContainerEnd; + ++iListener) + { + (*iListener)->disposing(aEvent); + } + } +} + + + + +// XContextChangeEventMultiplexer + +void SAL_CALL ContextChangeEventMultiplexer::addContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw css::lang::IllegalArgumentException( + A2S("can not add an empty reference"), + static_cast<XWeak*>(this), + 0); + + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true); + if (pFocusDescriptor != NULL) + { + ListenerContainer& rContainer (pFocusDescriptor->maListeners); + if (::std::find(rContainer.begin(), rContainer.end(), rxListener) == rContainer.end()) + rContainer.push_back(rxListener); + else + { + // The listener was added for the same event focus + // previously. That is an error. + throw cssl::IllegalArgumentException(A2S("listener added twice"), static_cast<XWeak*>(this), 0); + } + } + + // Send out an initial event that informs the new listener about + // the current context. + if (rxEventFocus.is() && pFocusDescriptor!=NULL) + { + css::ui::ContextChangeEventObject aEvent ( + NULL, + pFocusDescriptor->msCurrentApplicationName, + pFocusDescriptor->msCurrentContextName); + rxListener->notifyContextChangeEvent(aEvent); + } +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::removeContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException( + A2S("can not remove an empty reference"), + static_cast<XWeak*>(this), 0); + + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false); + if (pFocusDescriptor != NULL) + { + ListenerContainer& rContainer (pFocusDescriptor->maListeners); + const ListenerContainer::iterator iListener ( + ::std::find(rContainer.begin(), rContainer.end(), rxListener)); + if (iListener != rContainer.end()) + { + rContainer.erase(iListener); + + // We hold on to the focus descriptor even when the last listener has been removed. + // This allows us to keep track of the current context and send it to new listeners. + } + } + +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::removeAllContextChangeEventListeners ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException( + A2S("can not remove an empty reference"), + static_cast<XWeak*>(this), 0); + + for (ListenerMap::iterator + iContainer(maListeners.begin()), + iEnd(maListeners.end()); + iContainer!=iEnd; + ++iContainer) + { + const ListenerContainer::iterator iListener ( + ::std::find(iContainer->second.maListeners.begin(), iContainer->second.maListeners.end(), rxListener)); + if (iListener != iContainer->second.maListeners.end()) + { + iContainer->second.maListeners.erase(iListener); + + // We hold on to the focus descriptor even when the last listener has been removed. + // This allows us to keep track of the current context and send it to new listeners. + } + } +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::broadcastContextChangeEvent ( + const css::ui::ContextChangeEventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException) +{ + // Remember the current context. + if (rxEventFocus.is()) + { + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true); + if (pFocusDescriptor != NULL) + { + pFocusDescriptor->msCurrentApplicationName = rEventObject.ApplicationName; + pFocusDescriptor->msCurrentContextName = rEventObject.ContextName; + } + } + + BroadcastEventToSingleContainer(rEventObject, rxEventFocus); + if (rxEventFocus.is()) + BroadcastEventToSingleContainer(rEventObject, NULL); +} + + + + +void ContextChangeEventMultiplexer::BroadcastEventToSingleContainer ( + const css::ui::ContextChangeEventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) +{ + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false); + if (pFocusDescriptor != NULL) + { + // Create a copy of the listener container to avoid problems + // when one of the called listeners calls add... or remove... + ListenerContainer aContainer (pFocusDescriptor->maListeners); + for (ListenerContainer::const_iterator + iListener(aContainer.begin()), + iEnd(aContainer.end()); + iListener!=iEnd; + ++iListener) + { + (*iListener)->notifyContextChangeEvent(rEventObject); + } + } +} + + + + +ContextChangeEventMultiplexer::FocusDescriptor* ContextChangeEventMultiplexer::GetFocusDescriptor ( + const cssu::Reference<cssu::XInterface>& rxEventFocus, + const bool bCreateWhenMissing) +{ + ListenerMap::iterator iDescriptor (maListeners.find(rxEventFocus)); + if (iDescriptor == maListeners.end() && bCreateWhenMissing) + { + // Listen for the focus being disposed. + Reference<lang::XComponent> xComponent (rxEventFocus, UNO_QUERY); + if (xComponent.is()) + xComponent->addEventListener(this); + + // Create a new listener container for the event focus. + iDescriptor = maListeners.insert( + ListenerMap::value_type( + rxEventFocus, + FocusDescriptor())).first; + } + if (iDescriptor != maListeners.end()) + return &iDescriptor->second; + else + return NULL; +} + + + + +// XSingleComponentFactory + +cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + (void)rxContext; + return cssu::Reference<cssu::XInterface>(); +} + + + + +cssu::Reference<cssu::XInterface > SAL_CALL ContextChangeEventMultiplexer::createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + (void)rArguments; + (void)rxContext; + return cssu::Reference<cssu::XInterface>(); +} + + + + +// XServiceInfo + +::rtl::OUString SAL_CALL ContextChangeEventMultiplexer::getImplementationName (void) + throw(cssu::RuntimeException) +{ + return impl_getStaticImplementationName(); +} + + + + + +sal_Bool SAL_CALL ContextChangeEventMultiplexer::supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException) +{ + return ::comphelper::findValue(static_GetSupportedServiceNames(), rsServiceName, sal_True).getLength() != 0; +} + + + + +cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::getSupportedServiceNames (void) + throw (cssu::RuntimeException) +{ + return static_GetSupportedServiceNames(); +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::disposing ( + const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException) +{ + ListenerMap::iterator iDescriptor (maListeners.find(rEvent.Source)); + + if (iDescriptor == maListeners.end()) + { + OSL_ASSERT(iDescriptor != maListeners.end()); + return; + } + + // Should we notify the remaining listeners? + + maListeners.erase(iDescriptor); +} + + + + +// Local and static methods. + +OUString SAL_CALL ContextChangeEventMultiplexer::impl_getStaticImplementationName (void) +{ + return A2S(IMPLEMENTATION_NAME); +} + + + + +cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::static_GetSupportedServiceNames (void) +{ + cssu::Sequence<OUString> aServiceNames (2); + aServiceNames[0] = A2S(SERVICE_NAME); + aServiceNames[1] = A2S(SINGLETON_NAME); + return aServiceNames; +} + + + + +cssu::Reference<cssu::XInterface> ContextChangeEventMultiplexer::impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager) +{ + (void)rxServiceManager; + return cppu::createSingleComponentFactory( + ContextChangeEventMultiplexer::static_CreateInstance, + ContextChangeEventMultiplexer::impl_getStaticImplementationName(), + ContextChangeEventMultiplexer::static_GetSupportedServiceNames() + ); +} + + + + +cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception) +{ + ContextChangeEventMultiplexer* pObject = new ContextChangeEventMultiplexer(rxComponentContext); + cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY); + return xService; +} + +} // end of namespace framework diff --git a/framework/source/services/EventMultiplexer.cxx b/framework/source/services/EventMultiplexer.cxx new file mode 100644 index 000000000000..9f5b05dabe16 --- /dev/null +++ b/framework/source/services/EventMultiplexer.cxx @@ -0,0 +1,270 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_framework.hxx" + +#include "services/EventMultiplexer.hxx" +#include "services.h" + +using ::rtl::OUString; + +#define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) + +namespace framework { + +#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.EventMultiplexer" +#define SERVICE_NAME "com.sun.star.ui.ContextChangeEventMultiplexer" +#define SINGLETON_NAME "org.apache.openoffice.comp.framework.EventMultiplexer" + + +EventMultiplexer::EventMultiplexer (const cssu::Reference<css::uno::XComponentContext>& rxContext) + : EventMultiplexerInterfaceBase(m_aMutex), + maListeners() +{ + (void)rxContext; +} + + + + +EventMultiplexer::~EventMultiplexer (void) +{ + maListeners.clear(); +} + + + + +// XEventMultiplexer + +void SAL_CALL EventMultiplexer::addEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw css::lang::IllegalArgumentException(A2S("can not add an empty reference"), static_cast<XWeak*>(this), 0); + + ListenerMap::iterator iListenerContainer (maListeners.find(rxEventFocus)); + if (iListenerContainer == maListeners.end()) + { + // Create a new listener container for the event focus. + iListenerContainer = maListeners.insert( + ListenerMap::value_type( + rxEventFocus, + ListenerContainer())).first; + } + if (iListenerContainer != maListeners.end()) + { + ListenerContainer& rContainer (iListenerContainer->second); + if (::std::find(rContainer.begin(), rContainer.end(), rxListener) == rContainer.end()) + rContainer.push_back(rxListener); + else + { + // The listener was added for the same event focus + // previously. That is an error. + throw cssl::IllegalArgumentException(A2S("listener added twice"), static_cast<XWeak*>(this), 0); + } + } +} + + + + +void SAL_CALL EventMultiplexer::removeEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException(A2S("can not remove an empty reference"), static_cast<XWeak*>(this), 0); + + ListenerMap::iterator iListenerContainer (maListeners.find(rxEventFocus)); + if (iListenerContainer != maListeners.end()) + { + ListenerContainer& rContainer (iListenerContainer->second); + const ListenerContainer::iterator iListener (::std::find(rContainer.begin(), rContainer.end(), rxListener)); + if (iListener != rContainer.end()) + rContainer.erase(iListener); + } + +} + + + + +void SAL_CALL EventMultiplexer::removeAllEventListeners ( + const cssu::Reference<css::util::XEventListener>& rxListener) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException(A2S("can not remove an empty reference"), static_cast<XWeak*>(this), 0); + + for (ListenerMap::iterator + iContainer(maListeners.begin()), + iEnd(maListeners.end()); + iContainer!=iEnd; + ++iContainer) + { + const ListenerContainer::iterator iListener (::std::find(iContainer->second.begin(), iContainer->second.end(), rxListener)); + if (iListener != iContainer->second.end()) + iContainer->second.erase(iListener); + } +} + + + + + +void SAL_CALL EventMultiplexer::broadcastEvent ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException) +{ + BroadcastEventToSingleContainer(rEventObject, rxEventFocus); + if (rxEventFocus.is()) + BroadcastEventToSingleContainer(rEventObject, NULL); +} + + + + +void EventMultiplexer::BroadcastEventToSingleContainer ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) +{ + ListenerMap::iterator iListenerContainer (maListeners.find(rxEventFocus)); + if (iListenerContainer != maListeners.end()) + { + // Create a copy of the listener container to avoid problems + // when one of the called listeners calls add... or remove... + ListenerContainer aContainer (iListenerContainer->second); + for (ListenerContainer::const_iterator + iListener(aContainer.begin()), + iEnd(aContainer.end()); + iListener!=iEnd; + ++iListener) + { + (*iListener)->notifyEvent(rEventObject); + } + } +} + + + + +// XSingleComponentFactory +cssu::Reference<cssu::XInterface> SAL_CALL EventMultiplexer::createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + return cssu::Reference<cssu::XInterface>(); +} + + + + +cssu::Reference<cssu::XInterface > SAL_CALL EventMultiplexer::createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + return cssu::Reference<cssu::XInterface>(); +} + + + + +// XServiceInfo + +::rtl::OUString SAL_CALL EventMultiplexer::getImplementationName (void) + throw(cssu::RuntimeException) +{ + return impl_getStaticImplementationName(); +} + + + + + +sal_Bool SAL_CALL EventMultiplexer::supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException) +{ + return ::comphelper::findValue(static_GetSupportedServiceNames(), rsServiceName, sal_True).getLength() != 0; +} + + + + +cssu::Sequence<OUString> SAL_CALL EventMultiplexer::getSupportedServiceNames (void) + throw (cssu::RuntimeException) +{ + return static_GetSupportedServiceNames(); +} + + + + +// Local and static methods. + +OUString SAL_CALL EventMultiplexer::impl_getStaticImplementationName (void) +{ + return A2S(IMPLEMENTATION_NAME); +} + + + + +cssu::Sequence<OUString> SAL_CALL EventMultiplexer::static_GetSupportedServiceNames (void) +{ + cssu::Sequence<OUString> aServiceNames (2); + aServiceNames[0] = A2S(SERVICE_NAME); + aServiceNames[1] = A2S(SINGLETON_NAME); + return aServiceNames; +} + + + + +cssu::Reference<cssu::XInterface> EventMultiplexer::impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager) +{ + return cppu::createSingleComponentFactory( + EventMultiplexer::static_CreateInstance, + EventMultiplexer::impl_getStaticImplementationName(), + EventMultiplexer::static_GetSupportedServiceNames() + ); +} + + + + +cssu::Reference<cssu::XInterface> SAL_CALL EventMultiplexer::static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception) +{ + EventMultiplexer* pObject = new EventMultiplexer(rxComponentContext); + cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY); + return xService; +} + +} // end of namespace framework diff --git a/framework/util/fwk.component b/framework/util/fwk.component index 606bcb905eaa..adc60714edd1 100644 --- a/framework/util/fwk.component +++ b/framework/util/fwk.component @@ -45,6 +45,10 @@ <implementation name="com.sun.star.comp.framework.DocumentAcceleratorConfiguration"> <service name="com.sun.star.ui.DocumentAcceleratorConfiguration"/> </implementation> + <implementation name="org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer"> + <service name="com.sun.star.ui.ContextChangeEventMultiplexer"/> + <singleton name="com.sun.star.ui.ContextChangeEventMultiplexer"/> + </implementation> <implementation name="com.sun.star.comp.framework.Frame"> <service name="com.sun.star.frame.Frame"/> </implementation> diff --git a/offapi/com/sun/star/ui/ContextChangeEventMultiplexer.idl b/offapi/com/sun/star/ui/ContextChangeEventMultiplexer.idl new file mode 100644 index 000000000000..e695184c391f --- /dev/null +++ b/offapi/com/sun/star/ui/ContextChangeEventMultiplexer.idl @@ -0,0 +1,40 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + +#ifndef __com_sun_star_ui_ContextChangeEventMultiplexer_idl__ +#define __com_sun_star_ui_ContextChangeEventMultiplexer_idl__ + +#ifndef __com_sun_star_ui_XContextChangeEventMultiplexer_idl__ +#include <com/sun/star/ui/XContextChangeEventMultiplexer.idl> +#endif + +module com { module sun { module star { module ui { + +/** Multiplex events for context changes. + + A typical listener for context changes is the sidebar. +*/ +singleton ContextChangeEventMultiplexer : com::sun::star::ui::XContextChangeEventMultiplexer; + +}; }; }; }; // com.sun.star.ui + +#endif diff --git a/offapi/com/sun/star/ui/ContextChangeEventObject.idl b/offapi/com/sun/star/ui/ContextChangeEventObject.idl new file mode 100644 index 000000000000..7ab6bddd0b5e --- /dev/null +++ b/offapi/com/sun/star/ui/ContextChangeEventObject.idl @@ -0,0 +1,53 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef __com_sun_star_ui_ContextChangeEventObject_idl__ +#define __com_sun_star_ui_ContextChangeEventObject_idl__ + +#ifndef __com_sun_star_uno_XInterface_idl__ +#include <com/sun/star/uno/XInterface.idl> +#endif + +#ifndef __com_sun_star_lang_EventObject_idl__ +#include <com/sun/star/lang/EventObject.idl> +#endif + + +module com { module sun { module star { module ui { + +struct ContextChangeEventObject : com::sun::star::lang::EventObject +{ + /** Return the name of the application. + */ + string ApplicationName; + + /** Return the application specific context name. + */ + string ContextName; +}; + +}; }; }; }; + +//============================================================================= + +#endif diff --git a/offapi/com/sun/star/ui/LayoutSize.idl b/offapi/com/sun/star/ui/LayoutSize.idl new file mode 100644 index 000000000000..7c8fad8ac9ce --- /dev/null +++ b/offapi/com/sun/star/ui/LayoutSize.idl @@ -0,0 +1,50 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef __com_sun_star_ui_LayoutSize_idl__ +#define __com_sun_star_ui_LayoutSize_idl__ + +module com { module sun { module star { module ui { + +/** Size used for layouting windows. + It specifies a range of valid values and a preferred value. + The values must not violate the relation 0 <= Minimum <= Preferred <= Maximum. + + @param Minimum + Zero or positive. The value itself is included in the valid + range. + @param Maximum + A value larger than or equal to Minimum. + The special value -1 means that there is no upper bound. Every value larger than or + equal to Minimum is valid. + @param Preferred + The preferred size inside the valid range. +*/ +struct LayoutSize +{ + long Minimum; + long Maximum; + long Preferred; +}; + +}; }; }; }; + +#endif diff --git a/offapi/com/sun/star/ui/XContextChangeEventListener.idl b/offapi/com/sun/star/ui/XContextChangeEventListener.idl new file mode 100644 index 000000000000..000e3deec82a --- /dev/null +++ b/offapi/com/sun/star/ui/XContextChangeEventListener.idl @@ -0,0 +1,47 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef __com_sun_star_ui_XContextChangeEventListener_idl__ +#define __com_sun_star_ui_XContextChangeEventListener_idl__ + +#ifndef __com_sun_star_uno_XInterface_idl__ +#include <com/sun/star/uno/XInterface.idl> +#endif + +#ifndef __com_sun_star_lang_XEventListener_idl__ +#include <com/sun/star/lang/XEventListener.idl> +#endif + +#ifndef __com_sun_star_ui_ContextChangeEventObject_idl__ +#include <com/sun/star/ui/ContextChangeEventObject.idl> +#endif + +module com { module sun { module star { module ui { + +interface XContextChangeEventListener : ::com::sun::star::lang::XEventListener +{ + [oneway] void notifyContextChangeEvent ( + [in] com::sun::star::ui::ContextChangeEventObject event); +} ; + +} ; } ; } ; } ; + +#endif diff --git a/offapi/com/sun/star/ui/XContextChangeEventMultiplexer.idl b/offapi/com/sun/star/ui/XContextChangeEventMultiplexer.idl new file mode 100644 index 000000000000..e9e7238d1e7d --- /dev/null +++ b/offapi/com/sun/star/ui/XContextChangeEventMultiplexer.idl @@ -0,0 +1,131 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef __com_sun_star_ui_XContextChangeEventMultiplexer_idl__ +#define __com_sun_star_ui_XContextChangeEventMultiplexer_idl__ + +#ifndef __com_sun_star_uno_XInterface_idl__ +#include <com/sun/star/uno/XInterface.idl> +#endif + +#ifndef __com_sun_star_ui_XContextChangeEventListener_idl__ +#include <com/sun/star/ui/XContextChangeEventListener.idl> +#endif + +#ifndef __com_sun_star_ui_ContextChangeEventObject_idl__ +#include <com/sun/star/ui/ContextChangeEventObject.idl> +#endif + +#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ +#include <com/sun/star/lang/IllegalArgumentException.idl> +#endif + + +module com { module sun { module star { module ui { + +/** Provide a central access point for a group of events. + + Listeners can be added with a simple restriction on the event source. + They are only called for events that originate at the specified source. + + Event providers can broadcast an event to all interested listeners. + + The XEventMultiplexer interface is typically implemented as a singleton +*/ +interface XContextChangeEventMultiplexer : ::com::sun::star::uno::XInterface +{ + /** Add an event listener that is called only when events are broadcast for the specified + event focus. + + @param xListener + An empty reference results in an InvalidArgumentException. + + One listener may be added more than once for different + event foci. Adding a listener a second time for the same + event focus results in an InvalidArgumentException. + + @param xEventFocus + An empty reference is a valid value. In this case the + registered listener will be called for every event + broadcast, regardless of its event focus. + + The event focus may or may not be the source of the event. + + A typical example for an event focus is the XController of + a view. Using an XController restricts events passed to + a listener to events that belong to one view. + + @throws com::sun::star::lang::IllegalArgumentException + + */ + void addContextChangeEventListener ( + [in] com::sun::star::ui::XContextChangeEventListener xListener, + [in] com::sun::star::uno::XInterface xEventFocus) + raises (com::sun::star::lang::IllegalArgumentException); + + /** Remove an event listener for the specified event focus. + + When the same listener was added for other event foci then + these associations remain unmodified. + + @param xListener + An empty reference results in an InvalidArgumentException. + + When the listener is not registered for the given event + focus then an InvalidArgumentException is thrown. + + @param xEventFocus + The listener is only removed for this event focus. + An empty reference is a valid value. + + @throws com::sun::star::lang::IllegalArgumentException + */ + void removeContextChangeEventListener ( + [in] com::sun::star::ui::XContextChangeEventListener xListener, + [in] com::sun::star::uno::XInterface xEventFocus) + raises (com::sun::star::lang::IllegalArgumentException); + + /** Remove an event listener for all event foci. + + @param xListener + An empty reference results in an InvalidArgumentException. + + It is not an error when the listener is not registered for any event focus. + + @throws com::sun::star::lang::IllegalArgumentException + */ + void removeAllContextChangeEventListeners ( + [in] com::sun::star::ui::XContextChangeEventListener xListener) + raises (com::sun::star::lang::IllegalArgumentException); + + + /** Call all event listeners that where added for the specified event focus. + */ + [oneway] void broadcastContextChangeEvent ( + [in] com::sun::star::ui::ContextChangeEventObject aEvent, + [in] com::sun::star::uno::XInterface xEventFocus); +} ; + +} ; } ; } ; } ; + +#endif diff --git a/offapi/com/sun/star/ui/XContextChangeListener.idl b/offapi/com/sun/star/ui/XContextChangeListener.idl new file mode 100644 index 000000000000..f7741133a0a3 --- /dev/null +++ b/offapi/com/sun/star/ui/XContextChangeListener.idl @@ -0,0 +1,51 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef __com_sun_star_util_XEventListener_idl__ +#define __com_sun_star_util_XEventListener_idl__ + +#ifndef __com_sun_star_uno_XInterface_idl__ +#include <com/sun/star/uno/XInterface.idl> +#endif + +#ifndef __com_sun_star_lang_XEventListener_idl__ +#include <com/sun/star/lang/XEventListener.idl> +#endif + +#ifndef __com_sun_star_lang_EventObject_idl__ +#include <com/sun/star/lang/EventObject.idl> +#endif + +module com { module sun { module star { module util { + +/** Generic event listener. +*/ +interface XEventListener : ::com::sun::star::lang::XEventListener +{ + [oneway] void notifyEvent ( + [in] com::sun::star::lang::EventObject event); +} ; + +} ; } ; } ; } ; + +#endif diff --git a/offapi/com/sun/star/ui/XSidebar.idl b/offapi/com/sun/star/ui/XSidebar.idl new file mode 100644 index 000000000000..e0992591687b --- /dev/null +++ b/offapi/com/sun/star/ui/XSidebar.idl @@ -0,0 +1,46 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef __com_sun_star_ui_XSidebar_idl__ +#define __com_sun_star_ui_XSidebar_idl__ + +#ifndef __com_sun_star_uno_XInterface_idl__ +#include <com/sun/star/uno/XInterface.idl> +#endif + +module com { module sun { module star { module ui { + +/** Interface of the sidebar that allows its elements like panels to eg request layouts. +*/ +interface XSidebar +{ + /** Request layout of the sidebar. + Call this method when one of the panels wants to change its size due to + late initilization or different content after a context change. + */ + void requestLayout (); +} ; + +} ; } ; } ; } ; + +#endif diff --git a/offapi/com/sun/star/ui/XSidebarPanel.idl b/offapi/com/sun/star/ui/XSidebarPanel.idl new file mode 100644 index 000000000000..837dcf9dc73a --- /dev/null +++ b/offapi/com/sun/star/ui/XSidebarPanel.idl @@ -0,0 +1,64 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef __com_sun_star_ui_XSidebarPanel_idl__ +#define __com_sun_star_ui_XSidebarPanel_idl__ + +#ifndef __com_sun_star_uno_XInterface_idl__ +#include <com/sun/star/uno/XInterface.idl> +#endif + +#ifndef __com_sun_star_rendering_XCanvas_idl__ +#include <com/sun/star/rendering/XCanvas.idl> +#endif + +#ifndef __com_sun_star_awt_Point_idl__ +#include <com/sun/star/awt/Point.idl> +#endif + +#ifndef __com_sun_star_beans_XPropertySet_idl__ +#include <com/sun/star/beans/XPropertySet.idl> +#endif +#ifndef __com_sun_star_ui_LayoutSize_idl__ +#include <com/sun/star/ui/LayoutSize.idl> +#endif + +module com { module sun { module star { module ui { + +/** Optional interface of sidebar panels. +*/ +interface XSidebarPanel +{ + /** For a given width of the container the layouter asks every ui element for its + optimal height. + + The height to which a ui element is set may differ from the returned value. + + The height is set via the XWindow interface. + */ + LayoutSize getHeightForWidth ( [in] long nWidth); +} ; + +} ; } ; } ; } ; + +#endif diff --git a/offapi/com/sun/star/ui/makefile.mk b/offapi/com/sun/star/ui/makefile.mk index a93e6d0e6bca..5e7a5f7feb6b 100644 --- a/offapi/com/sun/star/ui/makefile.mk +++ b/offapi/com/sun/star/ui/makefile.mk @@ -40,6 +40,8 @@ IDLFILES=\ ActionTriggerSeparatorType.idl \ ConfigurableUIElement.idl \ ConfigurationEvent.idl \ + ContextChangeEventMultiplexer.idl \ + ContextChangeEventObject.idl \ ContextMenuExecuteEvent.idl \ ContextMenuInterceptorAction.idl \ DockingArea.idl \ @@ -48,6 +50,7 @@ IDLFILES=\ ItemDescriptor.idl \ ItemStyle.idl \ ItemType.idl \ + LayoutSize.idl \ ModuleUICategoryDescription.idl \ ModuleUICommandDescription.idl \ ModuleUIConfigurationManager.idl \ @@ -66,10 +69,14 @@ IDLFILES=\ XAcceleratorConfiguration.idl \ XContextMenuInterception.idl \ XContextMenuInterceptor.idl \ + XContextChangeEventListener.idl \ + XContextChangeEventMultiplexer.idl \ XDockingAreaAcceptor.idl \ XImageManager.idl \ XModuleUIConfigurationManager.idl \ XModuleUIConfigurationManagerSupplier.idl \ + XSidebar.idl \ + XSidebarPanel.idl \ XStatusbarItem.idl \ XUIConfiguration.idl \ XUIConfigurationListener.idl \ diff --git a/offapi/com/sun/star/util/EventMultiplexer.idl b/offapi/com/sun/star/util/EventMultiplexer.idl new file mode 100644 index 000000000000..80cf505999d0 --- /dev/null +++ b/offapi/com/sun/star/util/EventMultiplexer.idl @@ -0,0 +1,40 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + +#ifndef __com_sun_star_util_EventMultiplexer_idl__ +#define __com_sun_star_util_EventMultiplexer_idl__ + +#ifndef __com_sun_star_util_XEventMultiplexer_idl__ +#include <com/sun/star/util/XEventMultiplexer.idl> +#endif + +module com { module sun { module star { module util { + +/** Multiplex generic events. +*/ +service EventMultiplexer : com::sun::star::util::XEventMultiplexer +{ +}; + +}; }; }; }; // com.sun.star.util + +#endif diff --git a/officecfg/registry/data/org/openoffice/Office/Impress.xcu b/officecfg/registry/data/org/openoffice/Office/Impress.xcu index 85d1d5f8f6e8..e8f03d7a49d7 100644 --- a/officecfg/registry/data/org/openoffice/Office/Impress.xcu +++ b/officecfg/registry/data/org/openoffice/Office/Impress.xcu @@ -46,11 +46,6 @@ <value>private:resource/pane/LeftDrawPane</value> </prop> </node> - <node oor:name="R3" oor:op="replace"> - <prop oor:name="URL"> - <value>private:resource/pane/RightPane</value> - </prop> - </node> </node> </node> <node oor:name="F1" oor:op="replace"> @@ -90,11 +85,6 @@ </node> <node oor:name="R6" oor:op="replace"> <prop oor:name="URL"> - <value>private:resource/view/TaskPane</value> - </prop> - </node> - <node oor:name="R7" oor:op="replace"> - <prop oor:name="URL"> <value>private:resource/view/PresentationView</value> </prop> </node> @@ -114,43 +104,53 @@ </node> <node oor:name="F3" oor:op="replace"> <prop oor:name="ServiceName"> - <value>com.sun.star.drawing.framework.TaskPanelFactory</value> + <value>com.sun.star.comp.Draw.framework.TaskPanelFactory</value> </prop> <node oor:name="ResourceList"> - <node oor:name="R0" oor:op="replace"> + <node oor:name="R0a" oor:op="replace"> + <prop oor:name="URL"> + <value>private:resource/toolpanel/AllMasterPages</value> + </prop> + </node> + <node oor:name="R0b" oor:op="replace"> + <prop oor:name="URL"> + <value>private:resource/toolpanel/RecentMasterPages</value> + </prop> + </node> + <node oor:name="R0c" oor:op="replace"> <prop oor:name="URL"> - <value>private:resource/toolpanel/DrawingFramework/MasterPages</value> + <value>private:resource/toolpanel/UsedMasterPages</value> </prop> </node> <node oor:name="R1" oor:op="replace"> <prop oor:name="URL"> - <value>private:resource/toolpanel/DrawingFramework/Layouts</value> + <value>private:resource/toolpanel/Layouts</value> </prop> </node> <node oor:name="R2" oor:op="replace"> <prop oor:name="URL"> - <value>private:resource/toolpanel/DrawingFramework/TableDesign</value> + <value>private:resource/toolpanel/TableDesign</value> </prop> </node> <node oor:name="R3" oor:op="replace"> <prop oor:name="URL"> - <value>private:resource/toolpanel/DrawingFramework/CustomAnimations</value> + <value>private:resource/toolpanel/CustomAnimations</value> </prop> </node> <node oor:name="R4" oor:op="replace"> <prop oor:name="URL"> - <value>private:resource/toolpanel/DrawingFramework/SlideTransitions</value> + <value>private:resource/toolpanel/SlideTransitions</value> </prop> </node> </node> </node> </node> <node oor:name="StartupServices"> - <node oor:name="S0" oor:op="replace"> - <prop oor:name="ServiceName"> - <value>com.sun.star.drawing.framework.PresentationFactoryProvider</value> - </prop> - </node> + <node oor:name="S0" oor:op="replace"> + <prop oor:name="ServiceName"> + <value>com.sun.star.drawing.framework.PresentationFactoryProvider</value> + </prop> + </node> </node> </node> </node> diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Factories.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Factories.xcu index be557f388ce5..9ca2ee0bdeda 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/Factories.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/Factories.xcu @@ -81,18 +81,60 @@ <value>com.sun.star.comp.framework.StatusBarFactory</value> </prop> </node> - <node oor:name="org.openoffice.Office.Impress.ImpressToolPanelFactory" oor:op="replace"> + <node oor:name="SvxPanelFactory" oor:op="replace"> <prop oor:name="Type"> <value>toolpanel</value> </prop> <prop oor:name="Name"> - <value>DrawingFramework</value> + <value>SvxPanelFactory</value> </prop> <prop oor:name="Module"> - <value>com.sun.star.presentation.PresentationDocument</value> + <value/> + </prop> + <prop oor:name="FactoryImplementation"> + <value>org.apache.openoffice.comp.svx.sidebar.PanelFactory</value> + </prop> + </node> + <node oor:name="SdPanelFactory" oor:op="replace"> + <prop oor:name="Type"> + <value>toolpanel</value> + </prop> + <prop oor:name="Name"> + <value>SdPanelFactory</value> + </prop> + <prop oor:name="Module"> + <value></value> + </prop> + <prop oor:name="FactoryImplementation"> + <value>org.openoffice.comp.Draw.framework.PanelFactory</value> + </prop> + </node> + <node oor:name="ScPanelFactory" oor:op="replace"> + <prop oor:name="Type"> + <value>toolpanel</value> + </prop> + <prop oor:name="Name"> + <value>ScPanelFactory</value> + </prop> + <prop oor:name="Module"> + <value></value> + </prop> + <prop oor:name="FactoryImplementation"> + <value>org.apache.openoffice.comp.sc.sidebar.ScPanelFactory</value> + </prop> + </node> + <node oor:name="SwPanelFactory" oor:op="replace"> + <prop oor:name="Type"> + <value>toolpanel</value> + </prop> + <prop oor:name="Name"> + <value>SwPanelFactory</value> + </prop> + <prop oor:name="Module"> + <value></value> </prop> <prop oor:name="FactoryImplementation"> - <value>com.sun.star.drawing.DefaultToolPanelFactory</value> + <value>org.apache.openoffice.comp.sw.sidebar.SwPanelFactory</value> </prop> </node> </node> diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu index 93e453e576ec..2ca3d11ae59f 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu @@ -5332,6 +5332,11 @@ <value xml:lang="en-US">Task Pane</value> </prop> </node> + <node oor:name=".uno:Sidebar" oor:op="replace"> + <prop oor:name="Label" oor:type="xs:string"> + <value xml:lang="en-US">Sidebar</value> + </prop> + </node> <node oor:name=".uno:TestMode" oor:op="replace"> <prop oor:name="Label" oor:type="xs:string"> <value xml:lang="en-US">Test Mode On/Off</value> diff --git a/officecfg/registry/data/org/openoffice/Office/UI/ImpressWindowState.xcu b/officecfg/registry/data/org/openoffice/Office/UI/ImpressWindowState.xcu index 635e745061c0..06a220164296 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/ImpressWindowState.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/ImpressWindowState.xcu @@ -797,61 +797,6 @@ <value>true</value> </prop> </node> - <node oor:name="private:resource/toolpanel/DrawingFramework/MasterPages" oor:op="replace"> - <prop oor:name="Visible" oor:type="xs:boolean"> - <value>false</value> - </prop> - <prop oor:name="UIName" oor:type="xs:string"> - <value xml:lang="en-US">Master Pages</value> - </prop> - <prop oor:name="ImageURL" oor:type="xs:string"> - <value>private:commandimage/PresentationLayout</value> - </prop> - </node> - <node oor:name="private:resource/toolpanel/DrawingFramework/Layouts" oor:op="replace"> - <prop oor:name="Visible" oor:type="xs:boolean"> - <value>false</value> - </prop> - <prop oor:name="UIName" oor:type="xs:string"> - <value xml:lang="en-US">Layouts</value> - </prop> - <prop oor:name="ImageURL" oor:type="xs:string"> - <value>private:commandimage/ModifyPage</value> - </prop> - </node> - <node oor:name="private:resource/toolpanel/DrawingFramework/TableDesign" oor:op="replace"> - <prop oor:name="Visible" oor:type="xs:boolean"> - <value>false</value> - </prop> - <prop oor:name="UIName" oor:type="xs:string"> - <value xml:lang="en-US">Table Design</value> - </prop> - <prop oor:name="ImageURL" oor:type="xs:string"> - <value>private:commandimage/InsertTable</value> - </prop> - </node> - <node oor:name="private:resource/toolpanel/DrawingFramework/CustomAnimations" oor:op="replace"> - <prop oor:name="Visible" oor:type="xs:boolean"> - <value>false</value> - </prop> - <prop oor:name="UIName" oor:type="xs:string"> - <value xml:lang="en-US">Custom Animation</value> - </prop> - <prop oor:name="ImageURL" oor:type="xs:string"> - <value>private:commandimage/CustomAnimation</value> - </prop> - </node> - <node oor:name="private:resource/toolpanel/DrawingFramework/SlideTransitions" oor:op="replace"> - <prop oor:name="Visible" oor:type="xs:boolean"> - <value>false</value> - </prop> - <prop oor:name="UIName" oor:type="xs:string"> - <value xml:lang="en-US">Slide Transition</value> - </prop> - <prop oor:name="ImageURL" oor:type="xs:string"> - <value>private:commandimage/RehearseTimings</value> - </prop> - </node> <node oor:name="private:resource/toolbar/optimizetablebar" oor:op="replace"> <prop oor:name="Docked" oor:type="xs:boolean"> <value>false</value> diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Sidebar.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Sidebar.xcu new file mode 100644 index 000000000000..423ac13853aa --- /dev/null +++ b/officecfg/registry/data/org/openoffice/Office/UI/Sidebar.xcu @@ -0,0 +1,987 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!--*********************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + ***********************************************************--> + +<!DOCTYPE oor:component-data SYSTEM "../../../../../component-update.dtd"> +<oor:component-data oor:name="Sidebar" oor:package="org.openoffice.Office.UI" xmlns:install="http://openoffice.org/2004/installation" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <node oor:name="Content"> + <node oor:name="DeckList"> + + <node oor:name="PropertyDeck" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Properties</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-property-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-property-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + any, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="GalleryDeck" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Gallery</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>GalleryDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-gallery-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-gallery-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + any, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>300</value> + </prop> + </node> + + <node oor:name="ImpressMasterPagesDeck" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Master Pages</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>MasterPagesDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-template-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-template-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>120</value> + </prop> + </node> + + <node oor:name="ImpressAnimationEffects" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Custom Animation</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>CustomAnimationDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-animation-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-animation-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>140</value> + </prop> + </node> + + <node oor:name="SlideTransitionDeck" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Slide Transition</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>SlideTransitionDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-transition-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-transition-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>160</value> + </prop> + </node> + + <node oor:name="NavigatorDeck" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Navigator</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>NavigatorDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-navigator-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-navigator-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + any, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>400</value> + </prop> + </node> + + <node oor:name="StyleListDeck" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Styles and Formatting</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>StyleListDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-style-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-style-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + any, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>200</value> + </prop> + </node> + + <node oor:name="FunctionsDeck" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Functions</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>FunctionsDeck</value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-functions-large.png</value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <value>private:graphicrepository/sfx2/res/symphony/sidebar-functions-large-hc.png</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, any, visible ; + </value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>500</value> + </prop> + </node> + + </node> + <node oor:name="PanelList"> + + <node oor:name="TextPropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Text</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>TextPropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:FontDialog</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Auditing, visible, .uno:CellTextDlg ; + Calc, Cell, visible, .uno:CellTextDlg ; + Calc, default, visible, .uno:CellTextDlg ; + Calc, DrawText, visible ; + Calc, EditCell, visible ; + Calc, Pivot, visible, .uno:CellTextDlg ; + DrawImpress, 3DObject, visible ; + DrawImpress, Draw, hidden ; + DrawImpress, DrawText, visible ; + DrawImpress, Graphic, hidden ; + DrawImpress, OutlineText, visible ; + DrawImpress, Table, visible ; + DrawImpress, TextObject, visible ; + WriterAndWeb, Annotation, visible ; + WriterAndWeb, DrawText, visible ; + WriterAndWeb, Table, visible ; + WriterAndWeb, Text, visible ; + WriterAndWeb, default, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/TextPropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="ContextPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Current Context (only for debugging)</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>Context</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + none, none, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/Debug_ContextPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>10</value> + </prop> + </node> + + <node oor:name="PagePropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Page</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>PagePropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:PageDialog</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Writer, Table, hidden ; + Writer, Text, hidden ; + Writer, default, hidden ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SwPanelFactory/PagePropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>300</value> + </prop> + </node> + + <node oor:name="ColorPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Colors (only for debugging)</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>ColorPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + none, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/Debug_ColorPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>110</value> + </prop> + </node> + + <node oor:name="AreaPropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Area</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>AreaPropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:FormatArea</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Draw, visible ; + DrawImpress, 3DObject, visible ; + DrawImpress, Draw, visible ; + DrawImpress, TextObject, hidden ; + WriterAndWeb, Draw, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/AreaPropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>300</value> + </prop> + </node> + + <node oor:name="LinePropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Line</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>LinePropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:FormatLine</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Draw, visible ; + Calc, Graphic, visible ; + DrawImpress, 3DObject, visible ; + DrawImpress, Draw, visible ; + DrawImpress, Graphic, visible ; + DrawImpress, TextObject, hidden ; + WriterAndWeb, Draw, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/LinePropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>400</value> + </prop> + </node> + + <node oor:name="GalleryPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Gallery</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>GalleryPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>GalleryDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + any, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/GalleryPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="PosSizePropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Position and Size</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>PosSizePropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:TransformDialog</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Chart, visible ; + Calc, Draw, hidden ; + Calc, Form, visible ; + Calc, Graphic, hidden ; + Calc, Media, visible ; + Calc, MultiObject, visible ; + Calc, OLE, visible ; + DrawImpress, 3DObject, visible ; + DrawImpress, Draw, hidden ; + DrawImpress, Form, visible ; + DrawImpress, Graphic, hidden ; + DrawImpress, Media, visible ; + DrawImpress, MultiObject, visible ; + DrawImpress, OLE, visible ; + DrawImpress, TextObject, hidden ; + WriterAndWeb, Draw, hidden ; + WriterAndWeb, Form, visible ; + WriterAndWeb, Graphic, visible, .uno:GraphicDialog ; + WriterAndWeb, Media, visible ; + WriterAndWeb, OLE, visible, .uno:FrameDialog ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/PosSizePropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>500</value> + </prop> + </node> + + <node oor:name="GraphicPropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Graphic</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>GraphicPropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Graphic, visible ; + DrawImpress, Graphic, visible ; + WriterAndWeb, Graphic, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/GraphicPropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>300</value> + </prop> + </node> + + <node oor:name="Impress1" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Layouts</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>false</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>ImpressLayoutsPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, DrawPage, visible ; + Impress, default, visible ; + Impress, HandoutPage, visible ; + Impress, NotesPage, visible ; + Impress, SlidesorterPage, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/Layouts</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="Impress2" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Used in This Presentation</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>false</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>UsedMasterPagesPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>MasterPagesDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/UsedMasterPages</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="Impress3" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Recently Used</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>false</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>RecentMasterPagesPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>MasterPagesDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/RecentMasterPages</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>200</value> + </prop> + </node> + + <node oor:name="Impress4" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Available for Use</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>false</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>AllMasterPagesPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>MasterPagesDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/AllMasterPages</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>300</value> + </prop> + </node> + + <node oor:name="Impress5" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Custom Animation</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>CustomAnimationPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>CustomAnimationDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/CustomAnimations</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="Impress6" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Slide Transition</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>SlideTransitionPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>SlideTransitionDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/SlideTransitions</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="Impress7" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Table Design</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>false</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>ImpressTableDesignPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Impress, Table, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/TableDesign</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>300</value> + </prop> + </node> + + <node oor:name="EmptyPanel" oor:op="replace"> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Empty</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>EmptyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + any, empty, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/EmptyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="AlignmentPropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Alignment</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>AlignmentPropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:Hyphenate</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Auditing, visible ; + Calc, Cell, visible ; + Calc, default, visible ; + Calc, EditCell, visible ; + Calc, Pivot, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/ScPanelFactory/AlignmentPropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>200</value> + </prop> + </node> + + <node oor:name="CellAppearancePropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Cell Appearance</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>CellAppearancePropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:FormatCellDialg</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Auditing, visible ; + Calc, Cell, visible ; + Calc, default, visible ; + Calc, Pivot, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/ScPanelFactory/CellAppearancePropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>300</value> + </prop> + </node> + + <node oor:name="NumberFormatPropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Number Format</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>NumberFormatPropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:FormatCellDialog</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, Auditing, hidden ; + Calc, Cell, hidden ; + Calc, default, hidden ; + Calc, Pivot, hidden ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/ScPanelFactory/NumberFormatPropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>400</value> + </prop> + </node> + + <node oor:name="ParaPropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Paragraph</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>ParaPropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:ParagraphDialog</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, DrawText, visible ; + DrawImpress, 3DObject, hidden ; + DrawImpress, Draw, hidden ; + DrawImpress, DrawText, visible ; + DrawImpress, Graphic, hidden ; + DrawImpress, Table, visible ; + DrawImpress, TextObject, visible ; + WriterAndWeb, Annotation, visible ; + WriterAndWeb, DrawText, visible ; + WriterAndWeb, Table, visible ; + WriterAndWeb, Text, visible ; + WriterAndWeb, default, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/ParaPropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>200</value> + </prop> + </node> + + <node oor:name="WrapPropertyPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Wrap</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>WrapPropertyPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>PropertyDeck</value> + </prop> + <prop oor:name="DefaultMenuCommand"> + <value>.uno:ObjectWrapDialog</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Writer, Graphic, visible ; + Writer, OLE, visible ; + Writer, Frame, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SwPanelFactory/WrapPropertyPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>500</value> + </prop> + </node> + + <node oor:name="SwNavigatorPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Navigator</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>SwNavigatorPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>NavigatorDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + WriterAndWeb, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SwPanelFactory/NavigatorPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="ScNavigatorPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Navigator</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>ScNavigatorPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>NavigatorDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/ScPanelFactory/NavigatorPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="SdNavigatorPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Navigator</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>SdNavigatorPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>NavigatorDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + DrawImpress, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SdPanelFactory/NavigatorPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="StyleListPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Styles and Formatting</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>StyleListPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>StyleListDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + any, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/SvxPanelFactory/StyleListPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + <node oor:name="FunctionsPanel" oor:op="replace"> + <prop oor:name="Title" oor:type="xs:string"> + <value xml:lang="en-US">Functions</value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <value>true</value> + </prop> + <prop oor:name="Id" oor:type="xs:string"> + <value>FunctionsPanel</value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string"> + <value>FunctionsDeck</value> + </prop> + <prop oor:name="ContextList"> + <value oor:separator=";"> + Calc, any, visible ; + </value> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <value>private:resource/toolpanel/ScPanelFactory/FunctionsPanel</value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <value>100</value> + </prop> + </node> + + </node> + </node> +</oor:component-data> diff --git a/officecfg/registry/data/org/openoffice/Office/UI/makefile.mk b/officecfg/registry/data/org/openoffice/Office/UI/makefile.mk index b32c99cc6040..f1b446db9b43 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/makefile.mk +++ b/officecfg/registry/data/org/openoffice/Office/UI/makefile.mk @@ -64,6 +64,7 @@ LOCALIZEDFILES= \ WriterWebWindowState.xcu \ WriterCommands.xcu\ GenericCategories.xcu\ + Sidebar.xcu XCUFILES= \ $(LOCALIZEDFILES) \ diff --git a/officecfg/registry/data/org/openoffice/Office/Views.xcu b/officecfg/registry/data/org/openoffice/Office/Views.xcu index ade5cb482762..8b27bf326cb7 100644 --- a/officecfg/registry/data/org/openoffice/Office/Views.xcu +++ b/officecfg/registry/data/org/openoffice/Office/Views.xcu @@ -29,5 +29,13 @@ <value>false</value> </prop> </node> + + <!-- show Sidebar child window by default - oor:name == SID_SIDEBAR --> + <node oor:name="10336" oor:op="replace"> + <prop oor:name="Visible" oor:type="xs:boolean"> + <value>true</value> + </prop> + </node> </node> + </oor:component-data> diff --git a/officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs b/officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs new file mode 100644 index 000000000000..ca821b78a7af --- /dev/null +++ b/officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--*********************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + ***********************************************************--> + + +<!DOCTYPE oor:component-schema SYSTEM "../../../../../component-schema.dtd"> +<oor:component-schema + xmlns:oor="http://openoffice.org/2001/registry" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + oor:name="Sidebar" + oor:package="org.openoffice.Office.UI" + xml:lang="en-US"> + <info> + <author>Andre Fischer</author> + <desc>Specification of decks and content panels of the sidebar.</desc> + </info> + <templates> + <group oor:name="Deck"> + <info> + <desc>Specification of a sidebar deck which is a container of content panels.</desc> + </info> + <prop oor:name="Title" oor:type="xs:string" oor:localized="true"> + <info> + <desc>The deck title is displayed above the content panels.</desc> + </info> + <value></value> + </prop> + <prop oor:name="Id" oor:type="xs:string" oor:localized="false"> + <info> + <desc>Internally used to identify the deck. Not displayed in the UI.</desc> + </info> + <value></value> + </prop> + <prop oor:name="IconURL" oor:type="xs:string"> + <info> + <desc>This icon is displayed in the sidebar tab bar. + Any URL scheme supported by the com.sun.star.graphic.GraphicProvider service is suitable here.</desc> + </info> + <value></value> + </prop> + <prop oor:name="HighContrastIconURL" oor:type="xs:string"> + <info> + <desc>This icon is displayed in the sidebar tab bar when high contrast mode is active. + Any URL scheme supported by the com.sun.star.graphic.GraphicProvider service is suitable here.</desc> + </info> + <value></value> + </prop> + <prop oor:name="HelpURL" oor:type="xs:string"> + <info> + <desc>Help about the sidebar deck.</desc> + </info> + <value></value> + </prop> + <prop oor:name="ContextList" oor:type="oor:string-list"> + <info><desc> + List of context descriptors. Each context descriptor is a string that contains four comma + separated values (note that values are case sensitive): + 1 Application name. Valid values are + com.sun.star.text.TextDocument + com.sun.star.sheet.SpreadsheetDocument + com.sun.star.presentation.PresentationDocument + com.sun.star.drawing.DrawingDocument + + Recognized shortcuts: + Writer + Calc + Impress + Draw + + Shortcuts for multiple applications: + DrawImpress + WriterAndWeb + These shortcuts exist for even more convenience and handle the frequent case of Draw + and Impress as well as Writer and WriterWeb having otherwise identical context descriptions. + + Special values: + any + none + + 2 Context name + Know context names are 3DObject, Annotation, Auditing, Cell, Chart, Draw, DrawPage, DrawText, + EditCell, Form, Frame, Graphic, HandoutPage, MasterPage, Media, Multiobj, OLE, OutlineText, + Pivot, SlidesorterPage, Table, Text, TextObject, + default + + Special values: + any + + 3 Panel state. One of + visible Panel is initially visible and expanded + hidden Panel is initially collapsed, ie only its title bar is visible + + 4 (Optional, only used for panels) UNO command that overrides the DefaultMenuCommand. Use + the special value none to override the DefaultMenuCommand to the empty string and thereby + disable the showing of a) the menu button in the panel titlebar and b) the showing of a dialog. + </desc></info> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <info> + <desc>Index used for ordering decks in the tab bar. Smaller values correspond to positions nearer to the top of the tab bar.</desc> + </info> + <value>10000</value> + </prop> + </group> + <group oor:name="Panel"> + <info> + <desc>Specification of a sidebar content panel.</desc> + </info> + <prop oor:name="Title" oor:type="xs:string" oor:localized="true"> + <info> + <desc>The panel title is displayed above the content panel.</desc> + </info> + <value></value> + </prop> + <prop oor:name="TitleBarIsOptional" oor:type="xs:boolean"> + <info> + <desc>When true then the title bar can be ommitted when the panel is the only panel in a deck.</desc> + </info> + <value>false</value> + </prop> + <prop oor:name="Id" oor:type="xs:string" oor:localized="false"> + <info> + <desc>Internally used to identify the panel.</desc> + </info> + <value></value> + </prop> + <prop oor:name="DeckId" oor:type="xs:string" oor:localized="false"> + <info> + <desc>Id of the deck to which the panel belongs.</desc> + </info> + <value></value> + </prop> + <prop oor:name="HelpURL" oor:type="xs:string"> + <info> + <desc>Help about the sidebar content panel.</desc> + </info> + <value></value> + </prop> + <prop oor:name="DefaultMenuCommand" oor:type="xs:string"> + <info><desc> + The default UNO command to execute when the user clicks on the menu button in the panel title bar. + Can be overriden in the ContextList to provide context dependent menu dialogs. + When empty then the menu icon is not shown in the panel title bar. + </desc></info> + <value></value> + </prop> + <prop oor:name="ContextList" oor:type="oor:string-list"> + <info> + <desc>For documentation, please see the Deck/ContextList.</desc> + </info> + </prop> + <prop oor:name="ImplementationURL" oor:type="xs:string"> + <info> + <desc>URL by which the implementation of the panel is known by its factory.</desc> + </info> + <value></value> + </prop> + <prop oor:name="OrderIndex" oor:type="xs:int"> + <info> + <desc>Index used for ordering panels inside a deck. Smaller values correspond to positions nearer to the top of the deck.</desc> + </info> + <value>10000</value> + </prop> + <prop oor:name="WantsCanvas" oor:type="xs:boolean"> + <info> + <desc>Experimental: Set to true when panel wants to paint its content via a XCanvas.</desc> + </info> + <value>false</value> + </prop> + </group> + </templates> + <component> + <group oor:name="Content"> + <info> + <desc>Description of the decks and panels that can be displayed in the content area of the sidebar.</desc> + </info> + <set oor:name="DeckList" oor:node-type="Deck"> + <info> + <desc>Contains all registered sidebar decks.</desc> + </info> + </set> + <set oor:name="PanelList" oor:node-type="Panel"> + <info> + <desc>Contains all registered sidebar content panels.</desc> + </info> + </set> + </group> + </component> +</oor:component-schema> diff --git a/officecfg/registry/schema/org/openoffice/Office/UI/makefile.mk b/officecfg/registry/schema/org/openoffice/Office/UI/makefile.mk index 09ac99084fc1..00af7425f4d2 100644 --- a/officecfg/registry/schema/org/openoffice/Office/UI/makefile.mk +++ b/officecfg/registry/schema/org/openoffice/Office/UI/makefile.mk @@ -70,7 +70,8 @@ XCSFILES= \ Category.xcs \ GenericCategories.xcs \ GlobalSettings.xcs \ - WindowContentFactories.xcs + WindowContentFactories.xcs \ + Sidebar.xcs .INCLUDE : target.mk diff --git a/postprocess/packregistry/makefile.mk b/postprocess/packregistry/makefile.mk index edf6164e2d32..07d41cf7a598 100644 --- a/postprocess/packregistry/makefile.mk +++ b/postprocess/packregistry/makefile.mk @@ -196,6 +196,7 @@ MY_FILES_main = \ $(MY_XCS)/Office/UI/GenericCategories.xcs \ $(MY_XCS)/Office/UI/GenericCommands.xcs \ $(MY_XCS)/Office/UI/GlobalSettings.xcs \ + $(MY_XCS)/Office/UI/Sidebar.xcs \ $(MY_XCS)/Office/UI/StartModuleCommands.xcs \ $(MY_XCS)/Office/UI/StartModuleWindowState.xcs \ $(MY_XCS)/Office/UI/WindowContentFactories.xcs \ @@ -259,6 +260,7 @@ MY_FILES_main = \ $(MY_XCU)/Office/UI/Factories.xcu \ $(MY_XCU)/Office/UI/GenericCategories.xcu \ $(MY_XCU)/Office/UI/GenericCommands.xcu \ + $(MY_XCU)/Office/UI/Sidebar.xcu \ $(MY_XCU)/Office/UI/StartModuleCommands.xcu \ $(MY_XCU)/Office/UI/StartModuleWindowState.xcu \ $(MY_XCU)/Office/UI.xcu \ diff --git a/reportdesign/source/ui/dlg/Condition.cxx b/reportdesign/source/ui/dlg/Condition.cxx index 993dddb58955..7908a77d61eb 100644 --- a/reportdesign/source/ui/dlg/Condition.cxx +++ b/reportdesign/source/ui/dlg/Condition.cxx @@ -146,7 +146,7 @@ OColorPopup::OColorPopup(Window* _pParent,Condition* _pCondition) m_aColorSet.SetHelpId( HID_RPT_POPUP_COLOR_CTRL ); SetHelpId( HID_RPT_POPUP_COLOR ); const Size aSize12( 13, 13 ); - ::std::auto_ptr<XColorTable> pColorTable(new XColorTable( SvtPathOptions().GetPalettePath() )); + ::std::auto_ptr< XColorList > pColorTable(new XColorList( SvtPathOptions().GetPalettePath() )); short i = 0; long nCount = pColorTable->Count(); XColorEntry* pEntry = NULL; diff --git a/reportdesign/source/ui/misc/UITools.cxx b/reportdesign/source/ui/misc/UITools.cxx index 13006a87dd39..07be44b250ed 100644 --- a/reportdesign/source/ui/misc/UITools.cxx +++ b/reportdesign/source/ui/misc/UITools.cxx @@ -44,7 +44,7 @@ #include <editeng/charscaleitem.hxx> #include <svx/algitem.hxx> #include <svx/svdpagv.hxx> -#include <svx/xtable.hxx> // XColorTable +#include <svx/xtable.hxx> // XColorList #include <editeng/brshitem.hxx> #include <editeng/fontitem.hxx> #include <editeng/emphitem.hxx> @@ -654,7 +654,7 @@ bool openCharDialog( const uno::Reference<report::XReportControlFormat >& _rxRep }; Window* pParent = VCLUnoHelper::GetWindow( _rxParentWindow ); ::std::auto_ptr<FontList> pFontList(new FontList( pParent )); - ::std::auto_ptr<XColorTable> pColorTable( new XColorTable( SvtPathOptions().GetPalettePath() )); + ::std::auto_ptr< XColorList > pColorTable( new XColorList( SvtPathOptions().GetPalettePath() )); SfxPoolItem* pDefaults[] = { new SvxFontItem(ITEMID_FONT), @@ -774,7 +774,7 @@ bool openAreaDialog( const uno::Reference<report::XShape >& _xShape,const uno::R // #i74099# by default, the dialog deletes the current color table if a different one is loaded // (see SwDrawShell::ExecDrawDlg) const SvxColorTableItem* pColorItem = static_cast<const SvxColorTableItem*>( pDescriptor->GetItem(SID_COLOR_TABLE) ); - if (pColorItem && pColorItem->GetColorTable() == XColorTable::GetStdColorTable()) + if (pColorItem && pColorItem->GetColorTable() == XColorList::GetStdColorList()) pDialog->DontDeleteColorTable(); bSuccess = ( RET_OK == pDialog->Execute() ); if ( bSuccess ) diff --git a/sc/inc/ScPanelFactory.hxx b/sc/inc/ScPanelFactory.hxx new file mode 100755 index 000000000000..65c3593994de --- /dev/null +++ b/sc/inc/ScPanelFactory.hxx @@ -0,0 +1,70 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_SIDEBAR_PANEL_FACTORY_HXX +#define SC_SIDEBAR_PANEL_FACTORY_HXX + +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> +#include <com/sun/star/ui/XUIElementFactory.hpp> +#include <boost/noncopyable.hpp> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace sc { namespace sidebar { + +namespace +{ + typedef ::cppu::WeakComponentImplHelper1 < + css::ui::XUIElementFactory + > PanelFactoryInterfaceBase; +} + + +class ScPanelFactory + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public PanelFactoryInterfaceBase +{ +public: + static ::rtl::OUString SAL_CALL getImplementationName(void); + static cssu::Reference<cssu::XInterface> SAL_CALL createInstance( + const cssu::Reference<css::lang::XMultiServiceFactory>& rxFactory); + static cssu::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames(void); + + ScPanelFactory(void); + virtual ~ScPanelFactory(void); + + // XUIElementFactory + cssu::Reference<css::ui::XUIElement> SAL_CALL createUIElement( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException ); +}; + + +} } // end of namespace sc::sidebar + +#endif diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 827e9ec2dbd1..a5ebb4fdc4aa 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -75,7 +75,7 @@ namespace sfx2 { class SvxSearchItem; class SvxShadowItem; class Window; -class XColorTable; +class XColorList; class List; class ScAutoFormatData; @@ -261,7 +261,7 @@ private: SfxPrinter* pPrinter; VirtualDevice* pVirtualDevice_100th_mm; ScDrawLayer* pDrawLayer; // SdrModel - XColorTable* pColorTable; + XColorList* pColorTable; ScConditionalFormatList* pCondFormList; // bedingte Formate ScValidationDataList* pValidationList; // Gueltigkeit SvNumberFormatterIndexTable* pFormatExchangeList; // zum Umsetzen von Zahlenformaten @@ -460,7 +460,7 @@ public: void GetDocStat( ScDocStat& rDocStat ); SC_DLLPUBLIC void InitDrawLayer( SfxObjectShell* pDocShell = NULL ); - XColorTable* GetColorTable(); + XColorList* GetColorTable(); SC_DLLPUBLIC sfx2::LinkManager* GetLinkManager() const; diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h index ca0a4d58d338..d9dd5f35e8ab 100644 --- a/sc/inc/helpids.h +++ b/sc/inc/helpids.h @@ -402,6 +402,73 @@ #define HID_MN_FORMAT_ALGN "SC_HID_MN_FORMAT_ALGN" #define HID_MN_FORMAT_LINESPACE "SC_HID_MN_FORMAT_LINESPACE" +// sidebar ----------------------------------------- +// AlignmentPropertyPanel ----------------------------------------- +#define HID_PROPERTYPANEL_SC_ALIGN_SECTION "SC_HID_PROPERTYPANEL_SC_ALIGN_SECTION" +#define HID_PROPERTY_PANEL_ALIGN_TBX_HOR "SC_HID_PROPERTY_PANEL_ALIGN_TBX_HOR" +#define HID_PROPERTY_PANEL_ALIGN_TBI_HOR_L "SC_HID_PROPERTY_PANEL_ALIGN_TBI_HOR_L" +#define HID_PROPERTY_PANEL_ALIGN_TBI_HOR_C "SC_HID_PROPERTY_PANEL_ALIGN_TBI_HOR_C" +#define HID_PROPERTY_PANEL_ALIGN_TBI_HOR_R "SC_HID_PROPERTY_PANEL_ALIGN_TBI_HOR_R" +#define HID_PROPERTY_PANEL_ALIGN_TBI_HOR_J "SC_HID_PROPERTY_PANEL_ALIGN_TBI_HOR_J" +#define HID_PROPERTY_PANEL_ALIGN_TBX_VER "SC_HID_PROPERTY_PANEL_ALIGN_TBX_VER" +#define HID_PROPERTY_PANEL_ALIGN_TBI_VER_T "SC_HID_PROPERTY_PANEL_ALIGN_TBI_VER_T" +#define HID_PROPERTY_PANEL_ALIGN_TBI_VER_C "SC_HID_PROPERTY_PANEL_ALIGN_TBI_VER_C" +#define HID_PROPERTY_PANEL_ALIGN_TBI_VER_B "SC_HID_PROPERTY_PANEL_ALIGN_TBI_VER_B" +#define HID_PROPERTY_PANEL_ALIGN_MBX_INDENT "SC_HID_PROPERTY_PANEL_ALIGN_MBX_INDENT" +#define HID_PROPERTY_PANEL_ALIGN_CBX_WRAP "SC_HID_PROPERTY_PANEL_ALIGN_CBX_WRAP" +#define HID_PROPERTY_PANEL_ALIGN_CBX_MERGE "SC_HID_PROPERTY_PANEL_ALIGN_CBX_MERGE" +#define HID_PROPERTY_PANEL_ALIGN_MBX_ANGLE "SC_HID_PROPERTY_PANEL_ALIGN_MBX_ANGLE" +#define HID_PROPERTY_PANEL_ALIGN_DIAL_CONTROL "SC_HID_PROPERTY_PANEL_ALIGN_DIAL_CONTROL" +#define HID_PROPERTY_PANEL_ALIGN_CBX_VERT "SC_HID_PROPERTY_PANEL_ALIGN_CBX_VERT" + +// CellAppearancePropertyPanel ----------------------------------------- +#define HID_PROPERTYPANEL_SC_CELL_SECTION "SC_HID_PROPERTYPANEL_SC_CELL_SECTION" +#define HID_PROPERTYPANEL_SC_TBX_BKCOLOR "SC_HID_PROPERTYPANEL_SC_TBX_BKCOLOR" +#define HID_PROPERTYPANEL_SC_TBI_BKCOLOR "SC_HID_PROPERTYPANEL_SC_TBI_BKCOLOR" +#define HID_PROPERTYPANEL_SC_TBX_BORDER "SC_HID_PROPERTYPANEL_SC_TBX_BORDER" +#define HID_PROPERTYPANEL_SC_TBI_BORDER "SC_HID_PROPERTYPANEL_SC_TBI_BORDER" +#define HID_PROPERTYPANEL_SC_TBX_STYLE "SC_HID_PROPERTYPANEL_SC_TBX_STYLE" +#define HID_PROPERTYPANEL_SC_TBI_STYLE "SC_HID_PROPERTYPANEL_SC_TBI_STYLE" +#define HID_PROPERTYPANEL_SC_TBX_LINECOLOR "SC_HID_PROPERTYPANEL_SC_TBX_LINECOLOR" +#define HID_PROPERTYPANEL_SC_TBI_LINECOLOR "SC_HID_PROPERTYPANEL_SC_TBI_LINECOLOR" +#define HID_PROPERTYPANEL_SC_CBOX_SHOWGRID "SC_HID_PROPERTYPANEL_SC_CBOX_SHOWGRID" +#define HID_PROPERTYPANEL_FILL_COLOR_VS "SC_HID_PROPERTYPANEL_FILL_COLOR_VS" +#define HID_PROPERTYPANEL_LINE_COLOR_VS "SC_HID_PROPERTYPANEL_LINE_COLOR_VS" +#define HID_PROPERTYPANEL_SC_STYLE_VS "SC_HID_PROPERTYPANEL_SC_STYLE_VS" +#define HID_PROPERTYPANEL_SC_STYLE_PB "SC_HID_PROPERTYPANEL_SC_STYLE_PB" +#define HID_PROPERTYPANEL_SC_BORDER1_TBX "SC_HID_PROPERTYPANEL_SC_BORDER1_TBX" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_NONE "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_NONE" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_ALL "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_ALL" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_OUTER "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_OUTER" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_OUTERBOLD "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_OUTERBOLD" +#define HID_PROPERTYPANEL_SC_BORDER2_TBX "SC_HID_PROPERTYPANEL_SC_BORDER2_TBX" +#define HID_PROPERTYPANEL_SC_BORDER3_TBX "SC_HID_PROPERTYPANEL_SC_BORDER3_TBX" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_S1 "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_S1" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_S2 "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_S2" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_S3 "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_S3" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_S4 "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_S4" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_LEFT "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_LEFT" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_RIGHT "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_RIGHT" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_TOP "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_TOP" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_BOT "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_BOT" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_BLTR "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_BLTR" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_TLBR "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_TLBR" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_TOPBOT "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_TOPBOT" +#define HID_PROPERTYPANEL_SC_BORDER_TBI_LEFTRIGHT "SC_HID_PROPERTYPANEL_SC_BORDER_TBI_LEFTRIGHT" + +// NumberFormatPropertyPanel ----------------------------------------- +#define HID_PROPERTYPANEL_SC_NUM_SECTION "SC_HID_PROPERTYPANEL_SC_NUM_SECTION" +#define HID_PROPERTY_PANEL_NUMFMT_LB_CATEGORY "SC_HID_PROPERTY_PANEL_NUMFMT_LB_CATEGORY" +#define HID_PROPERTY_PANEL_NUMFMT_TBX_CATEGORY "SC_HID_PROPERTY_PANEL_NUMFMT_TBX_CATEGORY" +#define HID_PROPERTY_PANEL_NUMFMT_ID_NUMBER "SC_HID_PROPERTY_PANEL_NUMFMT_ID_NUMBER" +#define HID_PROPERTY_PANEL_NUMFMT_ID_PERCENT "SC_HID_PROPERTY_PANEL_NUMFMT_ID_PERCENT" +#define HID_PROPERTY_PANEL_NUMFMT_ID_CURRENCY "SC_HID_PROPERTY_PANEL_NUMFMT_ID_CURRENCY" +#define HID_PROPERTY_PANEL_NUMFMT_ID_DATE "SC_HID_PROPERTY_PANEL_NUMFMT_ID_DATE" +#define HID_PROPERTY_PANEL_NUMFMT_ID_TEXT "SC_HID_PROPERTY_PANEL_NUMFMT_ID_TEXT" +#define HID_PROPERTY_PANEL_NUMFMT_ED_DECIMALS "SC_HID_PROPERTY_PANEL_NUMFMT_ED_DECIMALS" +#define HID_PROPERTY_PANEL_NUMFMT_ED_LEADZEROES "SC_HID_PROPERTY_PANEL_NUMFMT_ED_LEADZEROES" +#define HID_PROPERTY_PANEL_NUMFMT_BTN_NEGRED "SC_HID_PROPERTY_PANEL_NUMFMT_BTN_NEGRED" +#define HID_PROPERTY_PANEL_NUMFMT_BTN_THOUSAND "SC_HID_PROPERTY_PANEL_NUMFMT_BTN_THOUSAND" // Ende Hilfe IDs ------------------------------------------------------------ diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc index 0eec640c6bde..53dd8271eeef 100644 --- a/sc/inc/sc.hrc +++ b/sc/inc/sc.hrc @@ -51,6 +51,8 @@ #define SC_FUNCTION_END (SID_SC_START + 299) #define SC_PARAM_START (SID_SC_START + 300) #define SC_PARAM_END (SID_SC_START + 399) +#define SC_SIDEBAR_PROPERTY_BEGIN (SID_SC_START + 400) +#define SC_SIDEBAR_PROPERTY_END (SID_SC_START + 499) // kompatibel zu frueher bleiben: #define SC_RESOURCE_START (RID_APP_START+5000) @@ -752,6 +754,11 @@ #define SID_SORT_ATTRIBS (SC_PARAM_START+3) #define SID_SORT_USERDEF (SC_PARAM_START+4) +// Sidebar ------------------------------------------------------------- + +#define SID_SCGRIDSHOW (SC_SIDEBAR_PROPERTY_BEGIN+1) +#define SID_NUMBER_TYPE_FORMAT (SC_SIDEBAR_PROPERTY_BEGIN+2) + // Resourcen ------------------------------------------------------------- #define RID_OBJECTBAR_APP (SC_RESOURCE_START) @@ -1276,7 +1283,18 @@ #define RID_POPUP_FILTER (SC_DIALOGS_START + 153) #define RID_SCDLG_TAB_BG_COLOR (SC_DIALOGS_START + 154) -#define SC_DIALOGS_END (SC_DIALOGS_START + 155) +// defines for AlignmentPropertyPanel +#define RID_PROPERTYPANEL_SC_ALIGNMENT (SC_DIALOGS_START + 155) + +// defines for CellAppearancePropertyPanel +#define RID_PROPERTYPANEL_SC_APPEAR (SC_DIALOGS_START + 156) +#define RID_POPUPPANEL_CELLAPPEARANCE_FILLCOLOR (SC_DIALOGS_START + 157) +#define RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR (SC_DIALOGS_START + 158) +#define RID_POPUPPANEL_APPEARANCE_CELL_LINESTYLE (SC_DIALOGS_START + 159) +#define RID_POPUPPANEL_APPEARANCE_CELL_BORDERSTYLE (SC_DIALOGS_START + 160) +#define RID_PROPERTYPANEL_SC_NUMBERFORMAT (SC_DIALOGS_START + 161) + +#define SC_DIALOGS_END (RID_PROPERTYPANEL_SC_NUMBERFORMAT+1) #ifndef STD_MASKCOLOR #define STD_MASKCOLOR Color { Red = 0xFF00; Green = 0x0000; Blue = 0xFF00; } diff --git a/sc/prj/build.lst b/sc/prj/build.lst index f124dafb90a2..8656d1b63057 100644 --- a/sc/prj/build.lst +++ b/sc/prj/build.lst @@ -27,6 +27,7 @@ sc sc\source\ui\namedlg nmake - all sc_name sc_sdi sc_inc NULL sc sc\source\ui\navipi nmake - all sc_nvipi sc_sdi sc_inc NULL sc sc\source\ui\optdlg nmake - all sc_opt sc_sdi sc_inc NULL sc sc\source\ui\pagedlg nmake - all sc_page sc_sdi sc_inc NULL +sc sc\source\ui\sidebar nmake - all sc_sidebar sc_sdi sc_inc NULL sc sc\source\ui\src nmake - all sc_uisrc sc_sdi sc_inc NULL sc sc\source\ui\styleui nmake - all sc_style sc_sdi sc_inc NULL sc sc\source\ui\undo nmake - all sc_undo sc_sdi sc_inc NULL @@ -47,7 +48,7 @@ sc sc\addin nmake - all sc_add sc_sdi sc_inc NULL sc sc\addin\datefunc nmake - all sc_addfu sc_add sc_sdi sc_inc NULL sc sc\addin\rot13 nmake - all sc_adrot sc_add sc_sdi sc_inc NULL sc sc\addin\util nmake - all sc_adutil sc_addfu sc_adrot sc_sdi sc_inc NULL -sc sc\util nmake - all sc_util sc_addfu sc_adrot sc_adutil sc_app sc_attr sc_cctrl sc_cosrc sc_data sc_dbgui sc_dif sc_docsh sc_drfnc sc_excel sc_form sc_html sc_lotus sc_qpro sc_misc sc_name sc_nvipi sc_opt sc_page sc_rtf sc_scalc sc_style sc_tool sc_uisrc sc_undo sc_unobj sc_view sc_xcl97 sc_xml sc_acc sc_ftools sc_inc sc_vba NULL +sc sc\util nmake - all sc_util sc_addfu sc_adrot sc_adutil sc_app sc_attr sc_cctrl sc_cosrc sc_data sc_dbgui sc_dif sc_docsh sc_drfnc sc_excel sc_form sc_html sc_lotus sc_qpro sc_misc sc_name sc_nvipi sc_opt sc_page sc_rtf sc_scalc sc_style sc_tool sc_uisrc sc_sidebar sc_undo sc_unobj sc_view sc_xcl97 sc_xml sc_acc sc_ftools sc_inc sc_vba NULL # remarked due to the fact, key press is need in this test. # sc sc\qa\complex\calcPreview nmake - all qa_calcpreview NULL diff --git a/sc/sdi/cellsh.sdi b/sc/sdi/cellsh.sdi index a4dad13b7a26..7c18762b9f3f 100644 --- a/sc/sdi/cellsh.sdi +++ b/sc/sdi/cellsh.sdi @@ -89,6 +89,8 @@ interface CellSelection SID_SELECT_SCENARIO [ ExecMethod = ExecuteEdit; StateMethod = GetState; ] FID_CELL_FORMAT [ ExecMethod = Execute; StateMethod = GetBlockState; ] SID_ENABLE_HYPHENATION [ ExecMethod = Execute; StateMethod = GetBlockState; ] + SID_CELL_FORMAT_BORDER [ ExecMethod = Execute; ] + SID_CHAR_DLG_EFFECT [ ExecMethod = Execute; ] FID_ROW_HEIGHT [ ExecMethod = Execute; StateMethod = GetState; ] FID_ROW_OPT_HEIGHT [ ExecMethod = Execute; StateMethod = GetState; ] FID_ROW_HIDE [ ExecMethod = Execute; StateMethod = GetState; ] diff --git a/sc/sdi/drawsh.sdi b/sc/sdi/drawsh.sdi index aa92e337d679..7bb3fa496cd1 100644 --- a/sc/sdi/drawsh.sdi +++ b/sc/sdi/drawsh.sdi @@ -64,6 +64,7 @@ interface TableDraw SID_BITMAP_LIST [ StateMethod = GetDrawAttrState; Export = FALSE; ] SID_DASH_LIST [ StateMethod = GetDrawAttrState; Export = FALSE; ] SID_LINEEND_LIST [ StateMethod = GetDrawAttrState; Export = FALSE; ] + // Flaechen-Attribute SID_ATTR_FILL_STYLE [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] @@ -79,15 +80,37 @@ interface TableDraw SID_ATTR_FILL_GRADIENT [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] SID_ATTR_FILL_HATCH [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] SID_ATTR_FILL_BITMAP [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] + SID_ATTR_FILL_TRANSPARENCE [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] + SID_ATTR_FILL_FLOATTRANSPARENCE [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] + // ---- Linien-Attribute: SID_ATTR_LINE_STYLE [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] SID_ATTR_LINEEND_STYLE [ ExecMethod = ExecDrawAttr; StateMethod = GetAttrFuncState; Export = FALSE; ] + SID_ATTR_LINE_START [ ExecMethod = ExecDrawAttr; StateMethod = GetAttrFuncState; Export = FALSE; ] + SID_ATTR_LINE_END [ ExecMethod = ExecDrawAttr; StateMethod = GetAttrFuncState; Export = FALSE; ] SID_ATTR_LINE_DASH [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] SID_ATTR_LINE_WIDTH [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] SID_ATTR_LINE_COLOR [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] + SID_ATTR_LINE_TRANSPARENCE [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] + SID_ATTR_LINE_JOINT [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] + SID_ATTR_LINE_CAP [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ] SID_ATTRIBUTES_AREA [ ExecMethod = ExecDrawAttr; StateMethod = GetAttrFuncState; Export = FALSE; ] SID_ATTRIBUTES_LINE [ ExecMethod = ExecDrawAttr; StateMethod = GetAttrFuncState; Export = FALSE; ] SID_ATTR_TRANSFORM [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawFuncState; Export = FALSE; ] + + // For the sidebar + SID_ATTR_TRANSFORM_WIDTH [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_HEIGHT [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_POS_X [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_POS_Y [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_ANGLE [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_ROT_X [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_ROT_Y [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_PROTECT_POS [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_PROTECT_SIZE [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_AUTOWIDTH [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + SID_ATTR_TRANSFORM_AUTOHEIGHT [ StateMethod = GetDrawAttrStateForIFBX; Export = FALSE; ] + // ---- Ausrichtungs - Funktionen: //! PseudoSlots gibt Aerger mit Referenz-Dialogen ??? SID_OBJECT_ALIGN @@ -161,6 +184,8 @@ interface TableDraw ] */ SID_MIRROR_VERTICAL [ ExecMethod = ExecDrawFunc; StateMethod = GetDrawFuncState; Export = FALSE; ] + SID_FLIP_HORIZONTAL [ ExecMethod = ExecDrawFunc; StateMethod = GetDrawFuncState; Export = FALSE; ] + SID_FLIP_VERTICAL [ ExecMethod = ExecDrawFunc; StateMethod = GetDrawFuncState; Export = FALSE; ] SID_ANCHOR_PAGE [ ExecMethod = ExecDrawFunc; StateMethod = GetState; Export = FALSE; ] SID_ANCHOR_TOGGLE [ ExecMethod = ExecDrawFunc; StateMethod = GetDrawFuncState; Export = FALSE; ] SID_ANCHOR_CELL [ ExecMethod = ExecDrawFunc; StateMethod = GetState; Export = FALSE; ] diff --git a/sc/sdi/drtxtob.sdi b/sc/sdi/drtxtob.sdi index 1cbf90760a2c..5285bd07b5e2 100644 --- a/sc/sdi/drtxtob.sdi +++ b/sc/sdi/drtxtob.sdi @@ -83,12 +83,23 @@ interface TableDrawText SID_ALIGNCENTERHOR [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_ALIGNRIGHT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_ALIGNBLOCK [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + + SID_ATTR_PARA_ADJUST_LEFT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_PARA_ADJUST_CENTER [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_PARA_ADJUST_RIGHT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_PARA_ADJUST_BLOCK [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_PARA_LRSPACE [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_PARA_LINESPACE [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_PARA_ULSPACE [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_PARA_LINESPACE_10 [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_ATTR_PARA_LINESPACE_15 [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_ATTR_PARA_LINESPACE_20 [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_SET_SUPER_SCRIPT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_SET_SUB_SCRIPT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_CHAR_KERNING [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_CHAR_DLG [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_CHAR_DLG_EFFECT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_PARA_DLG [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] // ---- FontWork: SID_FONTWORK [ ExecMethod = ExecuteExtra; StateMethod = GetState; Export = FALSE; ] @@ -132,6 +143,10 @@ interface TableDrawText SID_TRANSLITERATE_FULLWIDTH [ ExecMethod = ExecuteTrans; StateMethod = GetState; Export = FALSE; ] SID_TRANSLITERATE_HIRAGANA [ ExecMethod = ExecuteTrans; StateMethod = GetState; Export = FALSE; ] SID_TRANSLITERATE_KATAGANA [ ExecMethod = ExecuteTrans; StateMethod = GetState; Export = FALSE; ] + + SID_TABLE_VERT_NONE [ExecMethod = ExecuteAttr ;StateMethod = GetStatePropPanelAttr ;] + SID_TABLE_VERT_CENTER [ExecMethod = ExecuteAttr ;StateMethod = GetStatePropPanelAttr ;] + SID_TABLE_VERT_BOTTOM [ExecMethod = ExecuteAttr ;StateMethod = GetStatePropPanelAttr ;] } diff --git a/sc/sdi/editsh.sdi b/sc/sdi/editsh.sdi index 0ddb0ef2ecf0..96160af08f8a 100644 --- a/sc/sdi/editsh.sdi +++ b/sc/sdi/editsh.sdi @@ -69,8 +69,10 @@ interface TableText SID_ATTR_CHAR_CONTOUR [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_SET_SUPER_SCRIPT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_SET_SUB_SCRIPT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] + SID_ATTR_CHAR_KERNING [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; Export = FALSE; ] SID_CELL_FORMAT_RESET [ ExecMethod = Execute; StateMethod = GetState; Export = FALSE; ] SID_CHAR_DLG [ ExecMethod = Execute; StateMethod = GetState; Export = FALSE; ] + SID_CHAR_DLG_EFFECT [ ExecMethod = Execute; StateMethod = GetState; Export = FALSE; ] SID_TOGGLE_REL [ ExecMethod = Execute; StateMethod = GetState; Export = FALSE; ] SID_HYPERLINK_SETLINK [ ExecMethod = Execute; Export = FALSE; ] diff --git a/sc/sdi/formatsh.sdi b/sc/sdi/formatsh.sdi index 66b6c295ec8c..e606af54c31f 100644 --- a/sc/sdi/formatsh.sdi +++ b/sc/sdi/formatsh.sdi @@ -70,6 +70,7 @@ interface FormatForSelection SID_ATTR_ALIGN_INDENT [ ExecMethod = ExecuteAlignment; StateMethod = GetAttrState; ] SID_ATTR_ALIGN_HYPHENATION [ ExecMethod = ExecuteAlignment; StateMethod = GetAttrState; ] SID_ATTR_ALIGN_DEGREES [ ExecMethod = ExecuteAlignment; StateMethod = GetAttrState; ] + SID_ATTR_ALIGN_STACKED [ ExecMethod = ExecuteAlignment; StateMethod = GetAttrState; ] SID_ATTR_ALIGN_LOCKPOS [ ExecMethod = ExecuteAlignment; StateMethod = GetAttrState; ] SID_ATTR_ALIGN_MARGIN [ ExecMethod = ExecuteAlignment; StateMethod = GetAttrState; ] @@ -99,6 +100,7 @@ interface FormatForSelection SID_ALIGNCENTERVER [ ExecMethod = ExecuteTextAttr; StateMethod = GetTextAttrState; ] SID_ALIGNBLOCK [ ExecMethod = ExecuteTextAttr; StateMethod = GetTextAttrState; ] SID_ALIGNCENTERHOR [ ExecMethod = ExecuteTextAttr; StateMethod = GetTextAttrState; ] + SID_SCGRIDSHOW [ ExecMethod = ExecViewOptions; StateMethod = GetViewOptions; ] SID_V_ALIGNCELL [ ExecMethod = ExecuteAlignment; StateMethod = GetAlignState; ] SID_H_ALIGNCELL [ ExecMethod = ExecuteAlignment; StateMethod = GetAlignState; ] @@ -122,6 +124,8 @@ interface FormatForSelection SID_NUMBER_INCDEC [ ExecMethod = ExecuteNumFormat;] SID_NUMBER_DECDEC [ ExecMethod = ExecuteNumFormat;] + SID_NUMBER_TYPE_FORMAT [ ExecMethod = ExecuteNumFormat;StateMethod = GetNumFormatState; ] + SID_ATTR_BORDER [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ] //XXX SID_ATTR_BORDER_INNER [ StateMethod = GetBorderState; ] // status() SID_ATTR_BORDER_OUTER [ ExecMethod = ExecuteAttr; StateMethod = GetBorderState; ] @@ -129,6 +133,8 @@ interface FormatForSelection SID_ATTR_ALIGN_LINEBREAK [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ] SID_FRAME_LINESTYLE [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ] SID_FRAME_LINECOLOR [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ] + SID_ATTR_BORDER_DIAG_TLBR [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ] + SID_ATTR_BORDER_DIAG_BLTR [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ] SID_FORMATPAINTBRUSH [ ExecMethod = ExecFormatPaintbrush; StateMethod = StateFormatPaintbrush; ] } diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi index 18a806d793e1..853ad6c33ac7 100644 --- a/sc/sdi/scalc.sdi +++ b/sc/sdi/scalc.sdi @@ -7822,3 +7822,53 @@ SfxVoidItem SetTabBgColor FID_TAB_MENU_SET_TAB_BG_COLOR GroupId = GID_FORMAT; ] +//-------------------------------------------------------------------------- +SfxBoolItem ViewOption SID_SCGRIDSHOW +[ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, //TRUE + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config */ + AccelConfig = FALSE, //TRUE + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, //FALSE + GroupId = GID_DATA; +] + +//-------------------------------------------------------------------------- +SfxUInt16Item NumberType SID_NUMBER_TYPE_FORMAT +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_VIEW; +] diff --git a/sc/source/core/data/docpool.cxx b/sc/source/core/data/docpool.cxx index 30f284ef05c7..be806260f43f 100644 --- a/sc/source/core/data/docpool.cxx +++ b/sc/source/core/data/docpool.cxx @@ -181,7 +181,8 @@ static SfxItemInfo __READONLY_DATA aItemInfos[] = { SID_ATTR_PAGE_FOOTERSET, SFX_ITEM_POOLABLE }, // ATTR_PAGE_FOOTERSET { SID_SCATTR_PAGE_FORMULAS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_FORMULAS { SID_SCATTR_PAGE_NULLVALS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_NULLVALS - { SID_SCATTR_PAGE_SCALETO, SFX_ITEM_POOLABLE } // ATTR_PAGE_SCALETO + { SID_SCATTR_PAGE_SCALETO, SFX_ITEM_POOLABLE }, // ATTR_PAGE_SCALETO + { SID_SCGRIDSHOW, SFX_ITEM_POOLABLE } }; // ----------------------------------------------------------------------- diff --git a/sc/source/core/data/documen9.cxx b/sc/source/core/data/documen9.cxx index 353816dbb400..9d3737ff7b02 100644 --- a/sc/source/core/data/documen9.cxx +++ b/sc/source/core/data/documen9.cxx @@ -89,7 +89,7 @@ void ScDocument::EndDrawUndo() delete pDrawLayer->GetCalcUndo(); } -XColorTable* ScDocument::GetColorTable() +XColorList* ScDocument::GetColorTable() { if (pDrawLayer) return pDrawLayer->GetColorTable(); @@ -98,7 +98,7 @@ XColorTable* ScDocument::GetColorTable() if (!pColorTable) { SvtPathOptions aPathOpt; - pColorTable = new XColorTable( aPathOpt.GetPalettePath() ); + pColorTable = new XColorList( aPathOpt.GetPalettePath() ); } return pColorTable; diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx index 391e0cc08961..c901d87c1980 100644 --- a/sc/source/core/data/drwlayer.cxx +++ b/sc/source/core/data/drwlayer.cxx @@ -225,11 +225,11 @@ ScDrawLayer::ScDrawLayer( ScDocument* pDocument, const String& rName ) : // set color table SvxColorTableItem* pColItem = (SvxColorTableItem*) pObjSh->GetItem( SID_COLOR_TABLE ); - XColorTable* pXCol = pColItem ? pColItem->GetColorTable() : XColorTable::GetStdColorTable(); + XColorList* pXCol = pColItem ? pColItem->GetColorTable() : XColorList::GetStdColorList(); SetColorTable( pXCol ); } else - SetColorTable( XColorTable::GetStdColorTable() ); + SetColorTable( XColorList::GetStdColorList() ); SetSwapGraphics(sal_True); // SetSwapAsynchron(sal_True); // an der View diff --git a/sc/source/filter/excel/xiescher.cxx b/sc/source/filter/excel/xiescher.cxx index f58056853984..1941807272d5 100644 --- a/sc/source/filter/excel/xiescher.cxx +++ b/sc/source/filter/excel/xiescher.cxx @@ -648,7 +648,7 @@ void XclImpDrawObjBase::ConvertLineStyle( SdrObject& rSdrObj, const XclObjLineDa long nLineWidth = 35 * ::std::min( rLineData.mnWidth, EXC_OBJ_LINE_THICK ); rSdrObj.SetMergedItem( XLineWidthItem( nLineWidth ) ); rSdrObj.SetMergedItem( XLineColorItem( EMPTY_STRING, GetPalette().GetColor( rLineData.mnColorIdx ) ) ); - rSdrObj.SetMergedItem( XLineJointItem( XLINEJOINT_MITER ) ); + rSdrObj.SetMergedItem( XLineJointItem( com::sun::star::drawing::LineJoint_MITER ) ); sal_uLong nDotLen = ::std::max< sal_uLong >( 70 * rLineData.mnWidth, 35 ); sal_uLong nDashLen = 3 * nDotLen; diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx index d8d6f8fb8d2f..75bf867dd2bd 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -2282,6 +2282,12 @@ void ScInputHandler::InvalidateAttribs() rBindings.Invalidate( SID_ULINE_VAL_DOTTED ); rBindings.Invalidate( SID_HYPERLINK_GETLINK ); + + rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); + rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); + rBindings.Invalidate( SID_SET_SUB_SCRIPT ); + rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); + rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); } } diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx index 8752473775b1..ca35774cef28 100644 --- a/sc/source/ui/app/scdll.cxx +++ b/sc/source/ui/app/scdll.cxx @@ -37,6 +37,7 @@ #include <sot/clsids.hxx> #include <sfx2/taskpane.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> #include <sfx2/docfilt.hxx> #include <sfx2/fcontnr.hxx> #include <sfx2/docfile.hxx> @@ -262,6 +263,7 @@ void ScDLL::Init() // common SFX controller ::sfx2::TaskPaneWrapper::RegisterChildWindow( sal_False, pMod ); + ::sfx2::sidebar::SidebarChildWindow::RegisterChildWindow(NULL, pMod); // Svx-StatusBar-Controller SvxInsertStatusBarControl ::RegisterControl(SID_ATTR_INSERT, pMod); diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index 746de4d80838..d4b3b188bc18 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -1034,7 +1034,10 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet ) } SetViewOptions( rNewOpt ); if (pBindings) + { pBindings->Invalidate(SID_HELPLINES_MOVE); + pBindings->Invalidate(SID_SCGRIDSHOW); + } } //============================================ diff --git a/sc/source/ui/app/typemap.cxx b/sc/source/ui/app/typemap.cxx index c0050ec617c0..077364ea0f2e 100644 --- a/sc/source/ui/app/typemap.cxx +++ b/sc/source/ui/app/typemap.cxx @@ -107,6 +107,10 @@ #include <editeng/crsditem.hxx> #include <editeng/brkitem.hxx> #include <editeng/charreliefitem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/lspcitem.hxx> +#include <editeng/ulspitem.hxx> +#include <editeng/kernitem.hxx> #include <svx/rotmodit.hxx> #include <svx/drawitem.hxx> #include <svl/ilstitem.hxx> @@ -127,5 +131,10 @@ #define SvxChooseControlItem SfxEnumItem #define avmedia_MediaItem ::avmedia::MediaItem +#include <svx/xflftrit.hxx> +#include <svx/xlncapit.hxx> +#include <svx/xlinjoit.hxx> +#include <svx/AffineMatrixItem.hxx> + #define SFX_TYPEMAP #include "scslots.hxx" diff --git a/sc/source/ui/dbgui/scendlg.cxx b/sc/source/ui/dbgui/scendlg.cxx index b39f505f0400..e047188812a2 100644 --- a/sc/source/ui/dbgui/scendlg.cxx +++ b/sc/source/ui/dbgui/scendlg.cxx @@ -78,7 +78,7 @@ ScNewScenarioDlg::ScNewScenarioDlg( Window* pParent, const String& rName, sal_Bo const SfxPoolItem* pItem = pDocSh->GetItem( SID_COLOR_TABLE ); if ( pItem ) { - XColorTable* pColorTable = ((SvxColorTableItem*)pItem)->GetColorTable(); + XColorList* pColorTable = ((SvxColorTableItem*)pItem)->GetColorTable(); if (pColorTable) { aLbColor.SetUpdateMode( sal_False ); diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 1303c26f71c4..15d4f71ad907 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -3668,6 +3668,11 @@ sal_Bool ScDocFunc::ChangeIndent( const ScMarkData& rMark, sal_Bool bIncrement, pBindings->Invalidate( SID_ALIGNRIGHT ); pBindings->Invalidate( SID_ALIGNBLOCK ); pBindings->Invalidate( SID_ALIGNCENTERHOR ); + pBindings->Invalidate( SID_ATTR_LRSPACE ); + pBindings->Invalidate( SID_ATTR_PARA_ADJUST_LEFT ); + pBindings->Invalidate( SID_ATTR_PARA_ADJUST_RIGHT ); + pBindings->Invalidate( SID_ATTR_PARA_ADJUST_BLOCK ); + pBindings->Invalidate( SID_ATTR_PARA_ADJUST_CENTER); // pseudo slots for Format menu pBindings->Invalidate( SID_ALIGN_ANY_HDEFAULT ); pBindings->Invalidate( SID_ALIGN_ANY_LEFT ); diff --git a/sc/source/ui/docshell/docsh2.cxx b/sc/source/ui/docshell/docsh2.cxx index cbcf6bb3df77..1fae841765de 100644 --- a/sc/source/ui/docshell/docsh2.cxx +++ b/sc/source/ui/docshell/docsh2.cxx @@ -169,7 +169,7 @@ void ScDocShell::InitItems() else { // always use global color table instead of local copy - PutItem( SvxColorTableItem( XColorTable::GetStdColorTable(), SID_COLOR_TABLE ) ); + PutItem( SvxColorTableItem( XColorList::GetStdColorList(), SID_COLOR_TABLE ) ); } if ( !aDocument.GetForbiddenCharacters().isValid() || diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx index e6def167913b..4093b76ebe46 100644 --- a/sc/source/ui/docshell/docsh4.cxx +++ b/sc/source/ui/docshell/docsh4.cxx @@ -568,7 +568,7 @@ void ScDocShell::Execute( SfxRequest& rReq ) { // passende ColorTable ist per PutItem gesetzt worden SvxColorTableItem* pColItem = (SvxColorTableItem*)GetItem(SID_COLOR_TABLE); - XColorTable* pTable = pColItem->GetColorTable(); + XColorList* pTable = pColItem->GetColorTable(); rReq.SetReturnValue(OfaPtrItem(SID_GET_COLORTABLE, pTable)); } break; diff --git a/sc/source/ui/drawfunc/chartsh.cxx b/sc/source/ui/drawfunc/chartsh.cxx index e445499604ac..33e2b5023fd6 100644 --- a/sc/source/ui/drawfunc/chartsh.cxx +++ b/sc/source/ui/drawfunc/chartsh.cxx @@ -49,6 +49,7 @@ #include "drawview.hxx" #include "scresid.hxx" #include <svx/svdobj.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #define ScChartShell #include "scslots.hxx" @@ -69,6 +70,7 @@ ScChartShell::ScChartShell(ScViewData* pData) : { SetHelpId(HID_SCSHELL_CHARTSH); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("ChartObject"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Chart)); } ScChartShell::~ScChartShell() @@ -76,4 +78,8 @@ ScChartShell::~ScChartShell() } - +void ScChartShell::HandleSelectionChange (void) +{ + // Do not call the implementation in the base class. Let + // Activate()/Deactivate() handle context switches. +} diff --git a/sc/source/ui/drawfunc/drawsh.cxx b/sc/source/ui/drawfunc/drawsh.cxx index 1142dc4194bf..312a0e629737 100644 --- a/sc/source/ui/drawfunc/drawsh.cxx +++ b/sc/source/ui/drawfunc/drawsh.cxx @@ -58,6 +58,8 @@ #include <svx/dialogs.hrc> #include <svx/drawitem.hxx> #include <svx/xtable.hxx> +#include "tabvwsh.hxx" +#include <sfx2/bindings.hxx> #define ScDrawShell #include "scslots.hxx" @@ -139,14 +141,21 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq ) case SID_ATTR_LINE_STYLE: case SID_ATTR_LINEEND_STYLE: + case SID_ATTR_LINE_START: + case SID_ATTR_LINE_END: case SID_ATTR_LINE_DASH: case SID_ATTR_LINE_WIDTH: case SID_ATTR_LINE_COLOR: + case SID_ATTR_LINE_TRANSPARENCE: + case SID_ATTR_LINE_JOINT: + case SID_ATTR_LINE_CAP: case SID_ATTR_FILL_STYLE: case SID_ATTR_FILL_COLOR: case SID_ATTR_FILL_GRADIENT: case SID_ATTR_FILL_HATCH: case SID_ATTR_FILL_BITMAP: + case SID_ATTR_FILL_TRANSPARENCE: + case SID_ATTR_FILL_FLOATTRANSPARENCE: // #i25616# case SID_ATTR_FILL_SHADOW: @@ -160,6 +169,9 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq ) case SID_ATTR_LINE_DASH: case SID_ATTR_LINE_WIDTH: case SID_ATTR_LINE_COLOR: + case SID_ATTR_LINE_TRANSPARENCE: + case SID_ATTR_LINE_JOINT: + case SID_ATTR_LINE_CAP: ExecuteLineDlg( rReq ); break; @@ -168,6 +180,8 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq ) case SID_ATTR_FILL_GRADIENT: case SID_ATTR_FILL_HATCH: case SID_ATTR_FILL_BITMAP: + case SID_ATTR_FILL_TRANSPARENCE: + case SID_ATTR_FILL_FLOATTRANSPARENCE: // #i25616# case SID_ATTR_FILL_SHADOW: @@ -235,6 +249,7 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq ) #endif case SID_ATTR_TRANSFORM: + { { if ( pView->AreObjectsMarked() ) { @@ -302,7 +317,20 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq ) pView->SetGeoAttrToMarked( *pArgs ); } } + + ScTabViewShell* pViewShell = pViewData->GetViewShell(); + SfxBindings& rBindings=pViewShell->GetViewFrame()->GetBindings(); + rBindings.Invalidate(SID_ATTR_TRANSFORM_WIDTH); + rBindings.Invalidate(SID_ATTR_TRANSFORM_HEIGHT); + rBindings.Invalidate(SID_ATTR_TRANSFORM_POS_X); + rBindings.Invalidate(SID_ATTR_TRANSFORM_POS_Y); + rBindings.Invalidate(SID_ATTR_TRANSFORM_ANGLE); + rBindings.Invalidate(SID_ATTR_TRANSFORM_ROT_X); + rBindings.Invalidate(SID_ATTR_TRANSFORM_ROT_Y); + rBindings.Invalidate(SID_ATTR_TRANSFORM_AUTOWIDTH); + rBindings.Invalidate(SID_ATTR_TRANSFORM_AUTOHEIGHT); break; + } default: break; @@ -438,7 +466,7 @@ void ScDrawShell::ExecuteAreaDlg( SfxRequest& rReq, sal_uInt16 nTabPage ) // (see SwDrawShell::ExecDrawDlg) const SvxColorTableItem* pColorItem = static_cast<const SvxColorTableItem*>( pViewData->GetSfxDocShell()->GetItem(SID_COLOR_TABLE) ); - if (pColorItem->GetColorTable() == XColorTable::GetStdColorTable()) + if (pColorItem->GetColorTable() == XColorList::GetStdColorList()) pDlg->DontDeleteColorTable(); if ( nTabPage != 0xffff ) diff --git a/sc/source/ui/drawfunc/drawsh2.cxx b/sc/source/ui/drawfunc/drawsh2.cxx index 6c33e2109f61..a7414af5a93e 100644 --- a/sc/source/ui/drawfunc/drawsh2.cxx +++ b/sc/source/ui/drawfunc/drawsh2.cxx @@ -41,6 +41,8 @@ #include <svx/svdouno.hxx> #include <svx/extrusionbar.hxx> #include <svx/fontworkbar.hxx> +#include <svx/sidebar/SelectionChangeHandler.hxx> +#include <svx/sidebar/SelectionAnalyzer.hxx> #include "drawsh.hxx" #include "drawview.hxx" @@ -53,15 +55,23 @@ #include <svx/svdoole2.hxx> #include <svx/svdocapt.hxx> +#include <boost/bind.hpp> + + sal_uInt16 ScGetFontWorkId(); // in drtxtob using namespace com::sun::star; + //------------------------------------------------------------------ ScDrawShell::ScDrawShell( ScViewData* pData ) : SfxShell(pData->GetViewShell()), - pViewData( pData ) + pViewData( pData ), + mpSelectionChangeHandler(new svx::sidebar::SelectionChangeHandler( + ::boost::bind(&ScDrawShell::GetContextForSelection, this), + GetFrame()->GetFrame().GetController(), + sfx2::sidebar::EnumContext::Context_Cell)) { SetPool( &pViewData->GetScDrawView()->GetModel()->GetItemPool() ); ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager(); @@ -72,10 +82,13 @@ ScDrawShell::ScDrawShell( ScViewData* pData ) : } SetHelpId( HID_SCSHELL_DRAWSH ); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Drawing"))); + + mpSelectionChangeHandler->Connect(); } ScDrawShell::~ScDrawShell() { + mpSelectionChangeHandler->Disconnect(); } void ScDrawShell::GetState( SfxItemSet& rSet ) // Zustaende / Toggles @@ -138,6 +151,8 @@ void ScDrawShell::GetDrawFuncState( SfxItemSet& rSet ) // Funktionen disabl { rSet.DisableItem( SID_MIRROR_HORIZONTAL ); rSet.DisableItem( SID_MIRROR_VERTICAL ); + rSet.DisableItem( SID_FLIP_HORIZONTAL ); + rSet.DisableItem( SID_FLIP_VERTICAL ); } const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); @@ -392,4 +407,20 @@ sal_Bool ScDrawShell::AreAllObjectsOnLayer(sal_uInt16 nLayerNo,const SdrMarkList return bResult; } +void ScDrawShell::GetDrawAttrStateForIFBX( SfxItemSet& rSet ) +{ + ScDrawView* pView = pViewData->GetScDrawView(); + const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); + if( rMarkList.GetMark(0) != 0 ) + { + SfxItemSet aNewAttr(pView->GetGeoAttrFromMarked()); + rSet.Put(aNewAttr, sal_False); + } +} + +sfx2::sidebar::EnumContext::Context ScDrawShell::GetContextForSelection (void) +{ + return ::svx::sidebar::SelectionAnalyzer::GetContextForSelection_SC( + GetDrawView()->GetMarkedObjectList()); +} diff --git a/sc/source/ui/drawfunc/drawsh4.cxx b/sc/source/ui/drawfunc/drawsh4.cxx index 9035fc89601a..100ff0764f3b 100644 --- a/sc/source/ui/drawfunc/drawsh4.cxx +++ b/sc/source/ui/drawfunc/drawsh4.cxx @@ -93,7 +93,7 @@ void ScDrawShell::GetFormTextState(SfxItemSet& rSet) if ( pDocSh ) { const SfxPoolItem* pItem = pDocSh->GetItem( SID_COLOR_TABLE ); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; if ( pItem ) pColorTable = ((SvxColorTableItem*)pItem)->GetColorTable(); diff --git a/sc/source/ui/drawfunc/drawsh5.cxx b/sc/source/ui/drawfunc/drawsh5.cxx index e2b1dcbd7238..3c7907a84ba6 100644 --- a/sc/source/ui/drawfunc/drawsh5.cxx +++ b/sc/source/ui/drawfunc/drawsh5.cxx @@ -324,10 +324,14 @@ void ScDrawShell::ExecDrawFunc( SfxRequest& rReq ) break; case SID_MIRROR_HORIZONTAL: + case SID_FLIP_HORIZONTAL: pView->MirrorAllMarkedHorizontal(); + rBindings.Invalidate( SID_ATTR_TRANSFORM_ANGLE ); break; case SID_MIRROR_VERTICAL: + case SID_FLIP_VERTICAL: pView->MirrorAllMarkedVertical(); + rBindings.Invalidate( SID_ATTR_TRANSFORM_ANGLE ); break; case SID_OBJECT_ALIGN_LEFT: diff --git a/sc/source/ui/drawfunc/drformsh.cxx b/sc/source/ui/drawfunc/drformsh.cxx index c4ab05526dc8..a159a85eb3b1 100644 --- a/sc/source/ui/drawfunc/drformsh.cxx +++ b/sc/source/ui/drawfunc/drformsh.cxx @@ -50,6 +50,7 @@ #include "drawview.hxx" #include "scresid.hxx" #include <svx/svdobj.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #define ScDrawFormShell #include "scslots.hxx" @@ -69,11 +70,9 @@ ScDrawFormShell::ScDrawFormShell(ScViewData* pData) : { SetHelpId(HID_SCSHELL_DRAWFORMSH); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("DrawForm"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Form)); } ScDrawFormShell::~ScDrawFormShell() { } - - - diff --git a/sc/source/ui/drawfunc/drtxtob.cxx b/sc/source/ui/drawfunc/drtxtob.cxx index fa22a356a711..f8c2981546f7 100644 --- a/sc/source/ui/drawfunc/drtxtob.cxx +++ b/sc/source/ui/drawfunc/drtxtob.cxx @@ -42,6 +42,9 @@ #include <editeng/flditem.hxx> #include <editeng/fontitem.hxx> #include <editeng/frmdiritem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/lspcitem.hxx> +#include <editeng/ulspitem.hxx> #include <svx/hlnkitem.hxx> #include <editeng/lspcitem.hxx> #include <svx/svdoutl.hxx> @@ -68,6 +71,7 @@ #include <svx/svxdlg.hxx> #include <svx/dialogs.hrc> +#include <sfx2/sidebar/EnumContext.hxx> #include "sc.hrc" #include "globstr.hrc" @@ -132,6 +136,7 @@ ScDrawTextObjectBar::ScDrawTextObjectBar(ScViewData* pData) : SetHelpId( HID_SCSHELL_DRTXTOB ); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("DrawText"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_DrawText)); } __EXPORT ScDrawTextObjectBar::~ScDrawTextObjectBar() @@ -643,7 +648,7 @@ void lcl_RemoveFields( OutlinerView& rOutView ) { SvUShorts aPortions; rEditEng.GetPortions( (sal_uInt16)nPar, aPortions ); - //! GetPortions should use xub_StrLen instead of USHORT + //! GetPortions should use xub_StrLen instead of sal_uInt16 for ( sal_uInt16 nPos = aPortions.Count(); nPos; ) { @@ -731,10 +736,11 @@ void __EXPORT ScDrawTextObjectBar::ExecuteAttr( SfxRequest &rReq ) } break; + case SID_CHAR_DLG_EFFECT: case SID_CHAR_DLG: // Dialog-Button case SID_ATTR_CHAR_FONT: // Controller nicht angezeigt case SID_ATTR_CHAR_FONTHEIGHT: - bDone = ExecuteCharDlg( aEditAttr, aNewAttr ); + bDone = ExecuteCharDlg( aEditAttr, aNewAttr , nSlot); break; case SID_PARA_DLG: @@ -851,6 +857,11 @@ void __EXPORT ScDrawTextObjectBar::ExecuteAttr( SfxRequest &rReq ) aNewAttr.Put( *pDlg->GetOutputItemSet() ); delete pDlg; + + SfxBindings& rBindings = pViewData->GetBindings(); + rBindings.Invalidate( SID_TABLE_VERT_NONE ); + rBindings.Invalidate( SID_TABLE_VERT_CENTER ); + rBindings.Invalidate( SID_TABLE_VERT_BOTTOM ); } break; } @@ -882,6 +893,122 @@ void __EXPORT ScDrawTextObjectBar::ExecuteAttr( SfxRequest &rReq ) pView->SetAttributes( aSetItem.GetItemSet() ); } + else if( nSlot == SID_ATTR_PARA_LRSPACE ) + { + sal_uInt16 nId = SID_ATTR_PARA_LRSPACE; + const SvxLRSpaceItem& rItem = (const SvxLRSpaceItem&) + pArgs->Get( nId ); + SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE ); + nId = EE_PARA_LRSPACE; + SvxLRSpaceItem aLRSpaceItem( rItem.GetLeft(), + rItem.GetRight(), rItem.GetTxtLeft(), + rItem.GetTxtFirstLineOfst(), nId ); + aEditAttr.Put( aLRSpaceItem ); +// rReq.Done( aEditAttr ); +// pArgs = rReq.GetArgs(); +// pView->SetAttributes( *pArgs ); + pView->SetAttributes( aEditAttr ); +// Invalidate(SID_ATTR_PARA_LRSPACE); + } + else if( nSlot == SID_ATTR_PARA_LINESPACE ) + { + sal_uInt16 nId = SID_ATTR_PARA_LINESPACE; + SvxLineSpacingItem aLineSpaceItem = (const SvxLineSpacingItem&)pArgs->Get( + GetPool().GetWhich(nSlot)); + SfxItemSet aEditAttr( GetPool(), EE_PARA_SBL, EE_PARA_SBL ); + aEditAttr.Put( aLineSpaceItem ); +// rReq.Done( aEditAttr ); +// pArgs = rReq.GetArgs(); +// pView->SetAttributes( *pArgs ); + pView->SetAttributes( aEditAttr ); +// Invalidate(SID_ATTR_PARA_LINESPACE); + } + else if( nSlot == SID_ATTR_PARA_ULSPACE ) + { + sal_uInt16 nId = SID_ATTR_PARA_ULSPACE; + SvxULSpaceItem aULSpaceItem = (const SvxULSpaceItem&)pArgs->Get( + GetPool().GetWhich(nSlot)); + SfxItemSet aEditAttr( GetPool(), EE_PARA_ULSPACE, EE_PARA_ULSPACE ); + aULSpaceItem.SetWhich(EE_PARA_ULSPACE); + aEditAttr.Put( aULSpaceItem ); +// rReq.Done( aEditAttr ); +// pArgs = rReq.GetArgs(); +// pView->SetAttributes( *pArgs ); + pView->SetAttributes( aEditAttr ); +// Invalidate(SID_ATTR_PARA_ULSPACE); + } + else if(nSlot == SID_SET_SUPER_SCRIPT ) + { + SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); + pView->GetAttributes(aEditAttr); + SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); + + SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); + SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) + aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + + if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) + aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); + else + aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); + aNewAttr.Put( aItem ); + pView->SetAttributes( aNewAttr ); + } + else if( nSlot == SID_SET_SUB_SCRIPT ) + { + SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); + pView->GetAttributes(aEditAttr); + SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); + + SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); + SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) + aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + + if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) + aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); + else + aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); + aNewAttr.Put( aItem ); + pView->SetAttributes( aNewAttr ); + } + + else if (bArgsInReq && + ( nSlot == SID_TABLE_VERT_NONE || nSlot == SID_TABLE_VERT_CENTER || + nSlot == SID_TABLE_VERT_BOTTOM ) ) + { + SdrTextVertAdjust eTVA = SDRTEXTVERTADJUST_TOP; + if (nSlot == SID_TABLE_VERT_CENTER) + eTVA = SDRTEXTVERTADJUST_CENTER; + else if (nSlot == SID_TABLE_VERT_BOTTOM) + eTVA = SDRTEXTVERTADJUST_BOTTOM; + + SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); + SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); + aNewAttr.Put(SdrTextVertAdjustItem(eTVA)); + pView->SetAttributes(aNewAttr); + } + else if (bArgsInReq && + (nSlot == SID_ATTR_PARA_ADJUST_LEFT || nSlot == SID_ATTR_PARA_ADJUST_CENTER || nSlot == SID_ATTR_PARA_ADJUST_RIGHT || nSlot == SID_ATTR_PARA_ADJUST_BLOCK )) + { + SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); + SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); + switch ( nSlot ) + { + case SID_ATTR_PARA_ADJUST_LEFT: + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) ); + break; + case SID_ATTR_PARA_ADJUST_CENTER: + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) ); + break; + case SID_ATTR_PARA_ADJUST_RIGHT: + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); + break; + case SID_ATTR_PARA_ADJUST_BLOCK: + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) ); + break; + } + pView->SetAttributes(aNewAttr); + } else { // use args directly @@ -934,24 +1061,35 @@ void __EXPORT ScDrawTextObjectBar::GetAttrState( SfxItemSet& rDestSet ) ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_WEIGHT, nScript ); if ( rDestSet.GetItemState( EE_CHAR_ITALIC ) != SFX_ITEM_UNKNOWN ) ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_ITALIC, nScript ); - // Ausrichtung SvxAdjust eAdj = ((const SvxAdjustItem&)aAttrSet.Get(EE_PARA_JUST)).GetAdjust(); switch( eAdj ) { - case SVX_ADJUST_LEFT: + case SVX_ADJUST_LEFT: + { rDestSet.Put( SfxBoolItem( SID_ALIGNLEFT, sal_True ) ); - break; - case SVX_ADJUST_CENTER: + rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, sal_True ) ); + } + break; + case SVX_ADJUST_CENTER: + { rDestSet.Put( SfxBoolItem( SID_ALIGNCENTERHOR, sal_True ) ); - break; - case SVX_ADJUST_RIGHT: + rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True ) ); + } + break; + case SVX_ADJUST_RIGHT: + { rDestSet.Put( SfxBoolItem( SID_ALIGNRIGHT, sal_True ) ); - break; - case SVX_ADJUST_BLOCK: + rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True ) ); + } + break; + case SVX_ADJUST_BLOCK: + { rDestSet.Put( SfxBoolItem( SID_ALIGNBLOCK, sal_True ) ); - break; + rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True ) ); + } + break; default: { // added to avoid warnings @@ -963,6 +1101,32 @@ void __EXPORT ScDrawTextObjectBar::GetAttrState( SfxItemSet& rDestSet ) rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_RIGHT, eAdj == SVX_ADJUST_RIGHT ) ); rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_JUSTIFIED, eAdj == SVX_ADJUST_BLOCK ) ); + SvxLRSpaceItem aLR = ((const SvxLRSpaceItem&)aAttrSet.Get( EE_PARA_LRSPACE )); + aLR.SetWhich(SID_ATTR_PARA_LRSPACE); + rDestSet.Put(aLR); + Invalidate( SID_ATTR_PARA_LRSPACE ); + SfxItemState eState = aAttrSet.GetItemState( EE_PARA_LRSPACE ); + if ( eState == SFX_ITEM_DONTCARE ) + rDestSet.InvalidateItem(SID_ATTR_PARA_LRSPACE); + //xuxu for Line Space + SvxLineSpacingItem aLineSP = ((const SvxLineSpacingItem&)aAttrSet. + Get( EE_PARA_SBL )); + aLineSP.SetWhich(SID_ATTR_PARA_LINESPACE); + rDestSet.Put(aLineSP); + Invalidate(SID_ATTR_PARA_LINESPACE); + eState = aAttrSet.GetItemState( EE_PARA_SBL ); + if ( eState == SFX_ITEM_DONTCARE ) + rDestSet.InvalidateItem(SID_ATTR_PARA_LINESPACE); + //xuxu for UL Space + SvxULSpaceItem aULSP = ((const SvxULSpaceItem&)aAttrSet. + Get( EE_PARA_ULSPACE )); + aULSP.SetWhich(SID_ATTR_PARA_ULSPACE); + rDestSet.Put(aULSP); + Invalidate(SID_ATTR_PARA_ULSPACE); + eState = aAttrSet.GetItemState( EE_PARA_ULSPACE ); + if ( eState == SFX_ITEM_DONTCARE ) + rDestSet.InvalidateItem(SID_ATTR_PARA_ULSPACE); + // Zeilenabstand sal_uInt16 nLineSpace = (sal_uInt16) @@ -992,7 +1156,7 @@ void __EXPORT ScDrawTextObjectBar::GetAttrState( SfxItemSet& rDestSet ) // Unterstreichung - SfxItemState eState = aAttrSet.GetItemState( EE_CHAR_UNDERLINE, sal_True ); + eState = aAttrSet.GetItemState( EE_CHAR_UNDERLINE, sal_True ); if ( eState == SFX_ITEM_DONTCARE ) { rDestSet.InvalidateItem( SID_ULINE_VAL_NONE ); @@ -1089,3 +1253,54 @@ void ScDrawTextObjectBar::ExecuteTrans( SfxRequest& rReq ) } } +void ScDrawTextObjectBar::GetStatePropPanelAttr(SfxItemSet &rSet) +{ + SfxWhichIter aIter( rSet ); + sal_uInt16 nWhich = aIter.FirstWhich(); + + SdrView* pView = pViewData->GetScDrawView(); + + SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); + pView->GetAttributes(aEditAttr); + //SfxItemSet aAttrs( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); + + while ( nWhich ) + { + sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich) + ? GetPool().GetSlotId(nWhich) + : nWhich; + switch ( nSlotId ) + { + case SID_TABLE_VERT_NONE: + case SID_TABLE_VERT_CENTER: + case SID_TABLE_VERT_BOTTOM: + sal_Bool bContour = sal_False; + SfxItemState eConState = aEditAttr.GetItemState( SDRATTR_TEXT_CONTOURFRAME ); + if( eConState != SFX_ITEM_DONTCARE ) + { + bContour = ( ( const SdrTextContourFrameItem& )aEditAttr.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue(); + } + if (bContour) break; + + SfxItemState eVState = aEditAttr.GetItemState( SDRATTR_TEXT_VERTADJUST ); + //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ); + + //if(SFX_ITEM_DONTCARE != eVState && SFX_ITEM_DONTCARE != eHState) + if(SFX_ITEM_DONTCARE != eVState) + { + SdrTextVertAdjust eTVA = (SdrTextVertAdjust)((const SdrTextVertAdjustItem&)aEditAttr.Get(SDRATTR_TEXT_VERTADJUST)).GetValue(); + sal_Bool bSet = nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP|| + nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER || + nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM; + rSet.Put(SfxBoolItem(nSlotId, bSet)); + } + else + { + rSet.Put(SfxBoolItem(nSlotId, sal_False)); + } + break; + } + nWhich = aIter.NextWhich(); + } +} + diff --git a/sc/source/ui/drawfunc/drtxtob1.cxx b/sc/source/ui/drawfunc/drtxtob1.cxx index 667efb0520ec..4ee43a36ad61 100644 --- a/sc/source/ui/drawfunc/drtxtob1.cxx +++ b/sc/source/ui/drawfunc/drtxtob1.cxx @@ -53,7 +53,7 @@ //------------------------------------------------------------------------ sal_Bool ScDrawTextObjectBar::ExecuteCharDlg( const SfxItemSet& rArgs, - SfxItemSet& rOutSet ) + SfxItemSet& rOutSet , sal_uInt16 nSlot) { //CHINA001 ScCharDlg* pDlg = new ScCharDlg( pViewData->GetDialogParent(), //CHINA001 &rArgs, @@ -65,6 +65,10 @@ sal_Bool ScDrawTextObjectBar::ExecuteCharDlg( const SfxItemSet& rArgs, SfxAbstractTabDialog* pDlg = pFact->CreateScCharDlg( pViewData->GetDialogParent(), &rArgs, pViewData->GetSfxDocShell(),RID_SCDLG_CHAR ); DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 + if (nSlot == SID_CHAR_DLG_EFFECT) + { + pDlg->SetCurPageId(RID_SVXPAGE_CHAR_EFFECTS); + } sal_Bool bRet = ( pDlg->Execute() == RET_OK ); if ( bRet ) diff --git a/sc/source/ui/drawfunc/drtxtob2.cxx b/sc/source/ui/drawfunc/drtxtob2.cxx index 0700b4b54dd6..66df37c73084 100644 --- a/sc/source/ui/drawfunc/drtxtob2.cxx +++ b/sc/source/ui/drawfunc/drtxtob2.cxx @@ -257,7 +257,7 @@ void ScDrawTextObjectBar::GetFormTextState(SfxItemSet& rSet) if ( pDocSh ) { const SfxPoolItem* pItem = pDocSh->GetItem( SID_COLOR_TABLE ); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; if ( pItem ) pColorTable = ((SvxColorTableItem*)pItem)->GetColorTable(); diff --git a/sc/source/ui/drawfunc/futext.cxx b/sc/source/ui/drawfunc/futext.cxx index 61e2ebedec26..d14e6ecdef4a 100644 --- a/sc/source/ui/drawfunc/futext.cxx +++ b/sc/source/ui/drawfunc/futext.cxx @@ -67,6 +67,10 @@ void lcl_InvalidateAttribs( SfxBindings& rBindings ) rBindings.Invalidate( SID_ATTR_CHAR_COLOR ); rBindings.Invalidate( SID_ATTR_CHAR_FONT ); rBindings.Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER); rBindings.Invalidate( SID_ALIGNLEFT ); rBindings.Invalidate( SID_ALIGNCENTERHOR ); rBindings.Invalidate( SID_ALIGNRIGHT ); @@ -86,6 +90,11 @@ void lcl_InvalidateAttribs( SfxBindings& rBindings ) rBindings.Invalidate( SID_ALIGN_ANY_HCENTER ); rBindings.Invalidate( SID_ALIGN_ANY_RIGHT ); rBindings.Invalidate( SID_ALIGN_ANY_JUSTIFIED ); + rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); + rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); + rBindings.Invalidate( SID_SET_SUB_SCRIPT ); + rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); + rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); } void lcl_UpdateHyphenator( Outliner& rOutliner, SdrObject* pObj ) diff --git a/sc/source/ui/drawfunc/graphsh.cxx b/sc/source/ui/drawfunc/graphsh.cxx index 0be5cc1bb904..a13c070d94ea 100644 --- a/sc/source/ui/drawfunc/graphsh.cxx +++ b/sc/source/ui/drawfunc/graphsh.cxx @@ -35,6 +35,7 @@ #include <svx/svdograf.hxx> #include <svx/grfflt.hxx> #include <svx/grafctrl.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include "graphsh.hxx" #include "sc.hrc" @@ -62,6 +63,7 @@ ScGraphicShell::ScGraphicShell(ScViewData* pData) : { SetHelpId(HID_SCSHELL_GRAPHIC); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("GraphicObject"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Graphic)); } ScGraphicShell::~ScGraphicShell() @@ -141,4 +143,3 @@ void ScGraphicShell::ExecuteFilter( SfxRequest& rReq ) Invalidate(); } - diff --git a/sc/source/ui/drawfunc/mediash.cxx b/sc/source/ui/drawfunc/mediash.cxx index 05af38da9ed6..3484db14bcf6 100644 --- a/sc/source/ui/drawfunc/mediash.cxx +++ b/sc/source/ui/drawfunc/mediash.cxx @@ -31,6 +31,7 @@ #include <svl/whiter.hxx> #include <svx/svdomedia.hxx> #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include "mediash.hxx" #include "sc.hrc" @@ -57,6 +58,7 @@ ScMediaShell::ScMediaShell(ScViewData* pData) : { SetHelpId(HID_SCSHELL_MEDIA); SetName( String( ScResId( SCSTR_MEDIASHELL ) ) ); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Media)); } ScMediaShell::~ScMediaShell() diff --git a/sc/source/ui/drawfunc/oleobjsh.cxx b/sc/source/ui/drawfunc/oleobjsh.cxx index d98a919a78fc..eab864cb6c7c 100644 --- a/sc/source/ui/drawfunc/oleobjsh.cxx +++ b/sc/source/ui/drawfunc/oleobjsh.cxx @@ -50,6 +50,7 @@ #include "drawview.hxx" #include "scresid.hxx" #include <svx/svdobj.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #define ScOleObjectShell #include "scslots.hxx" @@ -69,6 +70,7 @@ ScOleObjectShell::ScOleObjectShell(ScViewData* pData) : { SetHelpId(HID_SCSHELL_OLEOBEJCTSH); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("OleObject"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_OLE)); } ScOleObjectShell::~ScOleObjectShell() @@ -76,4 +78,8 @@ ScOleObjectShell::~ScOleObjectShell() } - +void ScOleObjectShell::HandleSelectionChange (void) +{ + // Do not call the implementation in the base class. Let + // Activate()/Deactivate() handle context switches. +} diff --git a/sc/source/ui/formdlg/dwfunctr.cxx b/sc/source/ui/formdlg/dwfunctr.cxx index 11611faabb1d..9e6f2270c89e 100644 --- a/sc/source/ui/formdlg/dwfunctr.cxx +++ b/sc/source/ui/formdlg/dwfunctr.cxx @@ -118,7 +118,10 @@ ScFunctionDockWin::ScFunctionDockWin( SfxBindings* pBindingsP, aTimer.SetTimeout(200); aTimer.SetTimeoutHdl(LINK( this, ScFunctionDockWin, TimerHdl)); - eSfxNewAlignment=GetAlignment(); + if (pCW != NULL) + eSfxNewAlignment=GetAlignment(); + else + eSfxNewAlignment=SFX_ALIGN_RIGHT; eSfxOldAlignment=eSfxNewAlignment; aFiFuncDesc.SetUpdateMode(sal_True); pAllFuncList=&aFuncList; diff --git a/sc/source/ui/inc/chartsh.hxx b/sc/source/ui/inc/chartsh.hxx index 2091e0092b91..1cb83ac40350 100644 --- a/sc/source/ui/inc/chartsh.hxx +++ b/sc/source/ui/inc/chartsh.hxx @@ -42,7 +42,7 @@ public: ScChartShell(ScViewData* pData); virtual ~ScChartShell(); - + virtual void HandleSelectionChange (void); }; #endif diff --git a/sc/source/ui/inc/drawsh.hxx b/sc/source/ui/inc/drawsh.hxx index bae217487f1b..f9c5c91d86e8 100644 --- a/sc/source/ui/inc/drawsh.hxx +++ b/sc/source/ui/inc/drawsh.hxx @@ -27,16 +27,22 @@ #include <sfx2/shell.hxx> #include "shellids.hxx" #include <sfx2/module.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svx/svdmark.hxx> #include <tools/link.hxx> +#include <rtl/ref.hxx> class AbstractSvxNameDialog; //CHINA001 class SvxNameDialog; class ScViewData; class ScDrawView; +namespace svx { namespace sidebar { +class SelectionChangeHandler; +} } class ScDrawShell : public SfxShell { ScViewData* pViewData; + ::rtl::Reference<svx::sidebar::SelectionChangeHandler> mpSelectionChangeHandler; DECL_LINK( NameObjectHdl, AbstractSvxNameDialog* ); @@ -81,6 +87,9 @@ public: ScDrawView* GetDrawView(); sal_Bool AreAllObjectsOnLayer(sal_uInt16 nLayerNo,const SdrMarkList& rMark); + + void GetDrawAttrStateForIFBX( SfxItemSet& rSet ); + ::sfx2::sidebar::EnumContext::Context GetContextForSelection (void); }; diff --git a/sc/source/ui/inc/drformsh.hxx b/sc/source/ui/inc/drformsh.hxx index 5bcfac330bd5..f0d914832225 100644 --- a/sc/source/ui/inc/drformsh.hxx +++ b/sc/source/ui/inc/drformsh.hxx @@ -43,9 +43,6 @@ public: ScDrawFormShell(ScViewData* pData); virtual ~ScDrawFormShell(); - -// void Execute(SfxRequest &); -// void GetState(SfxItemSet &); }; #endif diff --git a/sc/source/ui/inc/drtxtob.hxx b/sc/source/ui/inc/drtxtob.hxx index acd63a0cbedb..b4fce7831d58 100644 --- a/sc/source/ui/inc/drtxtob.hxx +++ b/sc/source/ui/inc/drtxtob.hxx @@ -64,8 +64,9 @@ public: void ExecuteAttr( SfxRequest &rReq ); void GetAttrState( SfxItemSet& rSet ); void ExecuteToggle( SfxRequest &rReq ); + void GetStatePropPanelAttr(SfxItemSet &); - sal_Bool ExecuteCharDlg( const SfxItemSet& rArgs, SfxItemSet& rOutSet ); + sal_Bool ExecuteCharDlg( const SfxItemSet& rArgs, SfxItemSet& rOutSet , sal_uInt16 nSlot); sal_Bool ExecuteParaDlg( const SfxItemSet& rArgs, SfxItemSet& rOutSet ); void ExecuteExtra( SfxRequest &rReq ); diff --git a/sc/source/ui/inc/formatsh.hxx b/sc/source/ui/inc/formatsh.hxx index 06501dfabc3b..2756aa5f4ff2 100644 --- a/sc/source/ui/inc/formatsh.hxx +++ b/sc/source/ui/inc/formatsh.hxx @@ -70,6 +70,9 @@ public: void ExecFormatPaintbrush( SfxRequest& rReq ); void StateFormatPaintbrush( SfxItemSet& rSet ); + + void ExecViewOptions( SfxRequest& rReq ); + void GetViewOptions( SfxItemSet& rSet ); }; #endif diff --git a/sc/source/ui/inc/navipi.hxx b/sc/source/ui/inc/navipi.hxx index f98a250b199c..71f1556205b9 100644 --- a/sc/source/ui/inc/navipi.hxx +++ b/sc/source/ui/inc/navipi.hxx @@ -273,6 +273,7 @@ private: SCROW nCurRow; SCTAB nCurTab; sal_Bool bFirstBig; + bool mbUseStyleSettingsBackground; ScNavigatorControllerItem** ppBoundItems; @@ -325,7 +326,8 @@ protected: virtual void Resizing( Size& rSize ); public: - ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Window* pParent ); + ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Window* pParent, + const bool bUseStyleSettingsBackground); ~ScNavigatorDlg(); using Window::Notify; diff --git a/sc/source/ui/inc/oleobjsh.hxx b/sc/source/ui/inc/oleobjsh.hxx index fa03eac9e8b3..01702cd4ea20 100644 --- a/sc/source/ui/inc/oleobjsh.hxx +++ b/sc/source/ui/inc/oleobjsh.hxx @@ -43,6 +43,7 @@ public: ScOleObjectShell(ScViewData* pData); virtual ~ScOleObjectShell(); + virtual void HandleSelectionChange (void); }; #endif diff --git a/sc/source/ui/miscdlgs/tabbgcolordlg.cxx b/sc/source/ui/miscdlgs/tabbgcolordlg.cxx index de1074a4c8fc..f92a8b916e3e 100644 --- a/sc/source/ui/miscdlgs/tabbgcolordlg.cxx +++ b/sc/source/ui/miscdlgs/tabbgcolordlg.cxx @@ -89,8 +89,8 @@ void ScTabBgColorDlg::FillColorValueSets_Impl() { SfxObjectShell* pDocSh = SfxObjectShell::Current(); const SfxPoolItem* pItem = NULL; - XColorTable* pColorTable = NULL; - ::boost::scoped_ptr<XColorTable> pOwnColorTable; // locally instantiated in case the doc shell doesn't have one. + XColorList* pColorTable = NULL; + ::boost::scoped_ptr< XColorList > pOwnColorTable; // locally instantiated in case the doc shell doesn't have one. const Size aSize15x15 = Size( 15, 15 ); const Size aSize10x10 = Size( 10, 10 ); @@ -103,7 +103,7 @@ void ScTabBgColorDlg::FillColorValueSets_Impl() pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable(); if ( !pColorTable ) { - pOwnColorTable.reset(new XColorTable(SvtPathOptions().GetPalettePath())); + pOwnColorTable.reset(new XColorList(SvtPathOptions().GetPalettePath())); pColorTable = pOwnColorTable.get(); } if ( pColorTable ) diff --git a/sc/source/ui/navipi/navipi.cxx b/sc/source/ui/navipi/navipi.cxx index 772be87c3b9b..71b2767f0b19 100644 --- a/sc/source/ui/navipi/navipi.cxx +++ b/sc/source/ui/navipi/navipi.cxx @@ -576,7 +576,7 @@ ScNavigatorDialogWrapper::ScNavigatorDialogWrapper( SfxChildWinInfo* /* pInfo */ ) : SfxChildWindowContext( nId ) { - pNavigator = new ScNavigatorDlg( pBind, this, pParent ); + pNavigator = new ScNavigatorDlg( pBind, this, pParent, true ); SetWindow( pNavigator ); // Einstellungen muessen anderswo gemerkt werden, @@ -652,7 +652,8 @@ void __EXPORT ScNavigatorDialogWrapper::Resizing( Size& rSize ) #define REGISTER_SLOT(i,id) \ ppBoundItems[i]=new ScNavigatorControllerItem(id,*this,rBindings); -ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Window* pParent ) : +ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Window* pParent, + const bool bUseStyleSettingsBackground) : Window( pParent, ScResId(RID_SCDLG_NAVIGATOR) ), rBindings ( *pB ), // is used in CommandToolBox ctor aCmdImageList( ScResId( IL_CMD ) ), @@ -678,7 +679,8 @@ ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Win nCurCol ( 0 ), nCurRow ( 0 ), nCurTab ( 0 ), - bFirstBig ( sal_False ) + bFirstBig ( sal_False ), + mbUseStyleSettingsBackground(bUseStyleSettingsBackground) { ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg(); nDropMode = rCfg.GetDragMode(); @@ -767,6 +769,16 @@ ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Win aLbEntries.SetAccessibleRelationLabeledBy(&aLbEntries); aTbxCmd.SetAccessibleRelationLabeledBy(&aTbxCmd); aLbDocuments.SetAccessibleName(aStrActiveWin); + + if (pContextWin == NULL) + { + // When the context window is missing then the navigator is + // displayed in the sidebar and has the whole deck to fill. + // Therefore hide the button that hides all controls below the + // top two rows of buttons. + aTbxCmd.Select(IID_ZOOMOUT); + aTbxCmd.RemoveItem(aTbxCmd.GetItemPos(IID_ZOOMOUT)); + } } //------------------------------------------------------------------------ @@ -790,7 +802,7 @@ __EXPORT ScNavigatorDlg::~ScNavigatorDlg() void __EXPORT ScNavigatorDlg::Resizing( Size& rNewSize ) // Size = Outputsize? { - FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); + FloatingWindow* pFloat = pContextWin!=NULL ? pContextWin->GetFloatingWindow() : NULL; if ( pFloat ) { Size aMinOut = pFloat->GetMinOutputSizePixel(); @@ -814,13 +826,21 @@ void __EXPORT ScNavigatorDlg::Resizing( Size& rNewSize ) // Size = Outputsize? void ScNavigatorDlg::Paint( const Rectangle& rRec ) { - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color aBgColor = rStyleSettings.GetFaceColor(); - Wallpaper aBack( aBgColor ); + if (mbUseStyleSettingsBackground) + { + const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); + Color aBgColor = rStyleSettings.GetFaceColor(); + Wallpaper aBack( aBgColor ); - SetBackground( aBack ); - aFtCol.SetBackground( aBack ); - aFtRow.SetBackground( aBack ); + SetBackground( aBack ); + aFtCol.SetBackground( aBack ); + aFtRow.SetBackground( aBack ); + } + else + { + aFtCol.SetBackground(Wallpaper()); + aFtRow.SetBackground(Wallpaper()); + } Window::Paint( rRec ); } @@ -897,9 +917,12 @@ void ScNavigatorDlg::DoResize() //@@ 03.11.97 end sal_Bool bListMode = (eListMode != NAV_LMODE_NONE); - FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); - if ( pFloat && bListMode ) - nListModeHeight = nTotalHeight; + if (pContextWin != NULL) + { + FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); + if ( pFloat && bListMode ) + nListModeHeight = nTotalHeight; + } } //------------------------------------------------------------------------ @@ -1233,7 +1256,7 @@ void ScNavigatorDlg::SetListMode( NavListMode eMode, sal_Bool bSetSize ) void ScNavigatorDlg::ShowList( sal_Bool bShow, sal_Bool bSetSize ) { - FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); + FloatingWindow* pFloat = pContextWin!=NULL ? pContextWin->GetFloatingWindow() : NULL; Size aSize = GetParent()->GetOutputSizePixel(); if ( bShow ) @@ -1267,10 +1290,13 @@ void ScNavigatorDlg::ShowList( sal_Bool bShow, sal_Bool bSetSize ) } else { - SfxNavigator* pNav = (SfxNavigator*)GetParent(); - Size aFloating = pNav->GetFloatingSize(); - aFloating.Height() = aSize.Height(); - pNav->SetFloatingSize( aFloating ); + SfxNavigator* pNav = dynamic_cast<SfxNavigator*>(GetParent()); + if (pNav != NULL) + { + Size aFloating = pNav->GetFloatingSize(); + aFloating.Height() = aSize.Height(); + pNav->SetFloatingSize( aFloating ); + } } } @@ -1278,7 +1304,7 @@ void ScNavigatorDlg::ShowList( sal_Bool bShow, sal_Bool bSetSize ) void ScNavigatorDlg::ShowScenarios( sal_Bool bShow, sal_Bool bSetSize ) { - FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); + FloatingWindow* pFloat = pContextWin!=NULL ? pContextWin->GetFloatingWindow() : NULL; Size aSize = GetParent()->GetOutputSizePixel(); if ( bShow ) diff --git a/sc/source/ui/optdlg/opredlin.cxx b/sc/source/ui/optdlg/opredlin.cxx index a55ec9e02589..bb73f18a56f4 100644 --- a/sc/source/ui/optdlg/opredlin.cxx +++ b/sc/source/ui/optdlg/opredlin.cxx @@ -171,7 +171,7 @@ sal_Bool __EXPORT ScRedlineOptionsTabPage::FillItemSet( SfxItemSet& /* rSet */ ) void __EXPORT ScRedlineOptionsTabPage::Reset( const SfxItemSet& /* rSet */ ) { - XColorTable* pColorTbl = XColorTable::GetStdColorTable(); + XColorList* pColorTbl = XColorList::GetStdColorList(); aContentColorLB.InsertEntry(aAuthorStr); aMoveColorLB.InsertEntry(aAuthorStr); aInsertColorLB.InsertEntry(aAuthorStr); diff --git a/sc/source/ui/optdlg/tpview.cxx b/sc/source/ui/optdlg/tpview.cxx index 31e8d61cc27d..c16dda6d829a 100644 --- a/sc/source/ui/optdlg/tpview.cxx +++ b/sc/source/ui/optdlg/tpview.cxx @@ -351,7 +351,7 @@ void ScTpContentOptions::InitGridOpt() // hier koennte auch eine andere DocShell kommen! pDocSh = PTR_CAST(ScDocShell, pDocSh); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; if ( pDocSh ) { @@ -361,7 +361,7 @@ void ScTpContentOptions::InitGridOpt() pColorTable = ((SvxColorTableItem*)pItem)->GetColorTable(); } else - pColorTable = XColorTable::GetStdColorTable(); + pColorTable = XColorList::GetStdColorList(); if ( !pColorTable ) return; diff --git a/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx b/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx new file mode 100755 index 000000000000..bec91e03c526 --- /dev/null +++ b/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx @@ -0,0 +1,636 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <AlignmentPropertyPanel.hxx> +#include <AlignmentPropertyPanel.hrc> +#include <svx/dialmgr.hxx> +#include "sc.hrc" +#include "scresid.hxx" +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <svx/algitem.hxx> +#include <svx/dlgutil.hxx> +#include <vcl/toolbox.hxx> +#include <svx/sidebar/SidebarDialControl.hxx> + +using namespace css; +using namespace cssu; +using ::sfx2::sidebar::ControlFactory; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +////////////////////////////////////////////////////////////////////////////// +// namespace open + +namespace sc { namespace sidebar { + +////////////////////////////////////////////////////////////////////////////// + +AlignmentPropertyPanel::AlignmentPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) + : Control( + pParent, + ScResId(RID_PROPERTYPANEL_SC_ALIGNMENT)), + mpTBHorizontalBackground(ControlFactory::CreateToolBoxBackground(this)), + mpTBHorizontal(ControlFactory::CreateToolBox( + mpTBHorizontalBackground.get(), + ScResId(TBX_HORIZONTAL_ALIGNMENT))), + mpTBVerticalBackground(ControlFactory::CreateToolBoxBackground(this)), + mpTBVertical(ControlFactory::CreateToolBox( + mpTBVerticalBackground.get(), + ScResId(TBX_VERTICAL_ALIGN))), + mpFTLeftIndent(new FixedText(this, ScResId(FT_LEFT_INDENT))), + mpMFLeftIndent(new MetricField(this, ScResId(MF_LEFT_INDENT))), + mpCBXWrapText(new CheckBox(this, ScResId(CBX_WRAP))), + mpCBXMergeCell(new CheckBox(this, ScResId(CBX_MERGE))), + mpFtRotate(new FixedText(this, ScResId(FT_ORIENT))), + mpCtrlDial(new svx::sidebar::SidebarDialControl(this, ScResId(DIAL_CONTROL))), // , true)), + mpMtrAngle(new MetricBox(this, ScResId(CBOX_ANGLE))), + mpCbStacked(new CheckBox(this, ScResId(CBX_VERT))), + maAlignHorControl(SID_H_ALIGNCELL, *pBindings, *this), + maAlignVerControl(SID_V_ALIGNCELL, *pBindings, *this), + maLeftIndentControl(SID_ATTR_ALIGN_INDENT, *pBindings, *this), + maMergeCellControl(FID_MERGE_TOGGLE, *pBindings, *this), + maWrapTextControl(SID_ATTR_ALIGN_LINEBREAK, *pBindings, *this), + maAngleControl(SID_ATTR_ALIGN_DEGREES, *pBindings, *this), + maStackControl(SID_ATTR_ALIGN_STACKED, *pBindings, *this), + maIMGAlignLeft(ScResId(IMG_ALIGN_LEFT)), + maIMGAlignCenter(ScResId(IMG_ALIGN_CENTER)), + maIMGAlignRight(ScResId(IMG_ALIGN_RIGHT)), + maIMGAlignJust(ScResId(IMG_ALIGN_JUST)), + maIMGAlignTop(ScResId(IMG_ALIGN_TOP)), + maIMGAlignCenterV(ScResId(IMG_ALIGN_CENTER_V)), + maIMGAlignBottom(ScResId(IMG_ALIGN_BOTTOM)), + meHorAlignState(SVX_HOR_JUSTIFY_STANDARD), + meVerAlignState(SVX_VER_JUSTIFY_STANDARD), + mbMultiDisable(false), + mxFrame(rxFrame), + maContext(), + mpBindings(pBindings) +{ + Initialize(); + FreeResource(); + + mpFTLeftIndent->SetBackground(Wallpaper()); + mpFtRotate->SetBackground(Wallpaper()); +} + +////////////////////////////////////////////////////////////////////////////// + +AlignmentPropertyPanel::~AlignmentPropertyPanel() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +void AlignmentPropertyPanel::Initialize() +{ + mpTBHorizontal->SetItemImage(ID_SUBSTLEFT, maIMGAlignLeft); + mpTBHorizontal->SetItemImage(ID_SUBSTCENTER, maIMGAlignCenter); + mpTBHorizontal->SetItemImage(ID_SUBSTRIGHT, maIMGAlignRight); + mpTBHorizontal->SetItemImage(ID_SUBSTJUSTIFY, maIMGAlignJust); + Size aTbxSize( mpTBHorizontal->CalcWindowSizePixel() ); + mpTBHorizontal->SetOutputSizePixel( aTbxSize ); + mpTBHorizontal->SetBackground(Wallpaper()); + mpTBHorizontal->SetPaintTransparent(true); + Link aLink = LINK(this, AlignmentPropertyPanel, TbxHorAlignSelectHdl); + mpTBHorizontal->SetSelectHdl ( aLink ); + + mpTBVertical->SetItemImage(IID_VERT_TOP, maIMGAlignTop); + mpTBVertical->SetItemImage(IID_VERT_CENTER, maIMGAlignCenterV); + mpTBVertical->SetItemImage(IID_VERT_BOTTOM, maIMGAlignBottom); + Size aTbxSize2( mpTBVertical->CalcWindowSizePixel() ); + mpTBVertical->SetOutputSizePixel( aTbxSize2 ); + mpTBVertical->SetBackground(Wallpaper()); + mpTBVertical->SetPaintTransparent(true); + aLink = LINK(this, AlignmentPropertyPanel, TbxVerAlignSelectHdl); + mpTBVertical->SetSelectHdl ( aLink ); + + mpFTLeftIndent->Disable(); + mpMFLeftIndent->Disable(); + mpMFLeftIndent->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Left Indent"))); //wj acc + aLink = LINK(this, AlignmentPropertyPanel, MFLeftIndentMdyHdl); + mpMFLeftIndent->SetModifyHdl ( aLink ); + + aLink = LINK(this, AlignmentPropertyPanel, CBOXMergnCellClkHdl); + mpCBXMergeCell->SetClickHdl ( aLink ); + + aLink = LINK(this, AlignmentPropertyPanel, CBOXWrapTextClkHdl); + mpCBXWrapText->SetClickHdl ( aLink ); + + //rotation control + mpCtrlDial->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Text Orientation"))); //wj acc + mpCtrlDial->SetModifyHdl(LINK( this, AlignmentPropertyPanel, RotationHdl)); + + //rotation + mpMtrAngle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Text Orientation"))); //wj acc + mpMtrAngle->SetModifyHdl(LINK( this, AlignmentPropertyPanel, AngleModifiedHdl)); + mpMtrAngle->EnableAutocomplete( false ); + + //Vertical stacked + mpCbStacked->SetClickHdl( LINK( this, AlignmentPropertyPanel, ClickStackHdl ) ); + + mpMtrAngle->InsertValue(0, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(45, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(90, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(135, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(180, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(225, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(270, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(315, FUNIT_CUSTOM); + mpMtrAngle->SetDropDownLineCount(mpMtrAngle->GetEntryCount()); + + mpTBHorizontal->SetAccessibleRelationLabeledBy(mpTBHorizontal.get()); + mpTBVertical->SetAccessibleRelationLabeledBy(mpTBVertical.get()); + mpMFLeftIndent->SetAccessibleRelationLabeledBy(mpFTLeftIndent.get()); + mpMtrAngle->SetAccessibleRelationLabeledBy(mpFtRotate.get()); +#ifdef HAS_IA2 + mpMtrAngle->SetMpSubEditAccLableBy(mpFtRotate.get()); +#endif +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( AlignmentPropertyPanel, AngleModifiedHdl, void *, EMPTYARG ) +{ + String sTmp = mpMtrAngle->GetText(); + + sal_Unicode nChar = sTmp.GetChar( 0 ); + if((sTmp.Len()== 1 && nChar == '-') || + (nChar != '-' && ((nChar < '0') || (nChar > '9') ) )) ////modify + return 0; + + double dTmp = sTmp.ToDouble(); + FormatDegrees(dTmp); + + sal_Int64 nTmp = (sal_Int64)dTmp*100; + SfxInt32Item aAngleItem( SID_ATTR_ALIGN_DEGREES,(sal_uInt32) nTmp); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_ALIGN_DEGREES, SFX_CALLMODE_RECORD, &aAngleItem, 0L ); + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( AlignmentPropertyPanel, RotationHdl, void *, EMPTYARG ) +{ + sal_Int32 nTmp = mpCtrlDial->GetRotation(); + SfxInt32Item aAngleItem( SID_ATTR_ALIGN_DEGREES,(sal_uInt32) nTmp); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_ALIGN_DEGREES, SFX_CALLMODE_RECORD, &aAngleItem, 0L ); + + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( AlignmentPropertyPanel, ClickStackHdl, void *, EMPTYARG ) +{ + bool bVertical = mpCbStacked->IsChecked() ? true : false; + SfxBoolItem aStackItem( SID_ATTR_ALIGN_STACKED, bVertical ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_ALIGN_STACKED, SFX_CALLMODE_RECORD, &aStackItem, 0L ); + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(AlignmentPropertyPanel, TbxHorAlignSelectHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + + if(nId == ID_SUBSTLEFT) + { + if(meHorAlignState != SVX_HOR_JUSTIFY_LEFT) + meHorAlignState = SVX_HOR_JUSTIFY_LEFT; + else + meHorAlignState = SVX_HOR_JUSTIFY_STANDARD; + } + else if( nId == ID_SUBSTCENTER ) + { + if(meHorAlignState != SVX_HOR_JUSTIFY_CENTER) + meHorAlignState = SVX_HOR_JUSTIFY_CENTER; + else + meHorAlignState = SVX_HOR_JUSTIFY_STANDARD; + } + else if( nId == ID_SUBSTRIGHT ) + { + if(meHorAlignState != SVX_HOR_JUSTIFY_RIGHT) + meHorAlignState = SVX_HOR_JUSTIFY_RIGHT; + else + meHorAlignState = SVX_HOR_JUSTIFY_STANDARD; + } + else if( nId == ID_SUBSTJUSTIFY ) + { + if(meHorAlignState != SVX_HOR_JUSTIFY_BLOCK) + meHorAlignState = SVX_HOR_JUSTIFY_BLOCK; + else + meHorAlignState = SVX_HOR_JUSTIFY_STANDARD; + } + SvxHorJustifyItem aHorItem(meHorAlignState, SID_H_ALIGNCELL); + GetBindings()->GetDispatcher()->Execute(SID_H_ALIGNCELL, SFX_CALLMODE_RECORD, &aHorItem, 0L); + UpdateHorAlign(); + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(AlignmentPropertyPanel, TbxVerAlignSelectHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + + //Bold + if(nId == IID_VERT_TOP) + { + if(meVerAlignState != SVX_VER_JUSTIFY_TOP) + meVerAlignState = SVX_VER_JUSTIFY_TOP; + else + meVerAlignState = SVX_VER_JUSTIFY_STANDARD; + } + else if( nId == IID_VERT_CENTER ) + { + if(meVerAlignState != SVX_VER_JUSTIFY_CENTER) + meVerAlignState = SVX_VER_JUSTIFY_CENTER; + else + meVerAlignState = SVX_VER_JUSTIFY_STANDARD; + } + else if( nId == IID_VERT_BOTTOM ) + { + if(meVerAlignState != SVX_VER_JUSTIFY_BOTTOM) + meVerAlignState = SVX_VER_JUSTIFY_BOTTOM; + else + meVerAlignState = SVX_VER_JUSTIFY_STANDARD; + } + SvxVerJustifyItem aVerItem(meVerAlignState, SID_V_ALIGNCELL); + GetBindings()->GetDispatcher()->Execute(SID_V_ALIGNCELL, SFX_CALLMODE_RECORD, &aVerItem, 0L); + UpdateVerAlign(); + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(AlignmentPropertyPanel, MFLeftIndentMdyHdl, void*, EMPTYARG) +{ + mpCBXWrapText->EnableTriState(false); + sal_uInt16 nVal = (sal_uInt16)mpMFLeftIndent->GetValue(); + SfxUInt16Item aItem( SID_ATTR_ALIGN_INDENT, (sal_uInt16)CalcToUnit( nVal, SFX_MAPUNIT_TWIP ) ); + + GetBindings()->GetDispatcher()->Execute(SID_ATTR_ALIGN_INDENT, SFX_CALLMODE_RECORD, &aItem, 0L); + return( 0L ); +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(AlignmentPropertyPanel, CBOXMergnCellClkHdl, void*, EMPTYARG) +{ + bool bState = mpCBXMergeCell->IsChecked(); + + //Modified + //SfxBoolItem aItem( FID_MERGE_TOGGLE , bState); + //GetBindings()->GetDispatcher()->Execute(FID_MERGE_TOGGLE, SFX_CALLMODE_RECORD, &aItem, false, 0L); + if(bState) + GetBindings()->GetDispatcher()->Execute(FID_MERGE_ON, SFX_CALLMODE_RECORD); + else + GetBindings()->GetDispatcher()->Execute(FID_MERGE_OFF, SFX_CALLMODE_RECORD); + GetBindings()->Invalidate(FID_MERGE_TOGGLE,true,false); + //modified end + + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(AlignmentPropertyPanel, CBOXWrapTextClkHdl, void*, EMPTYARG) +{ + bool bState = mpCBXWrapText->IsChecked(); + SfxBoolItem aItem( SID_ATTR_ALIGN_LINEBREAK , bState); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_ALIGN_LINEBREAK, SFX_CALLMODE_RECORD, &aItem, 0L); + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +AlignmentPropertyPanel* AlignmentPropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to AlignmentPropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to AlignmentPropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to AlignmentPropertyPanel::Create"), NULL, 2); + + return new AlignmentPropertyPanel( + pParent, + rxFrame, + pBindings); +} + +////////////////////////////////////////////////////////////////////////////// + +void AlignmentPropertyPanel::DataChanged( + const DataChangedEvent& rEvent) +{ + (void)rEvent; +} + +////////////////////////////////////////////////////////////////////////////// + +void AlignmentPropertyPanel::HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext) +{ + if(maContext == aContext) + { + // Nothing to do. + return; + } + + maContext = aContext; + + + + // todo +} + +////////////////////////////////////////////////////////////////////////////// + +void AlignmentPropertyPanel::NotifyItemUpdate( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + switch(nSID) + { + case SID_H_ALIGNCELL: + if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxHorJustifyItem) ) + { + const SvxHorJustifyItem* pItem = (const SvxHorJustifyItem*)pState; + meHorAlignState = (SvxCellHorJustify)pItem->GetValue(); + } + else + { + meHorAlignState = SVX_HOR_JUSTIFY_STANDARD; + } + UpdateHorAlign(); + break; + case SID_V_ALIGNCELL: + if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxVerJustifyItem) ) + { + const SvxVerJustifyItem* pItem = (const SvxVerJustifyItem*)pState; + meVerAlignState = (SvxCellVerJustify)pItem->GetValue(); + } + else + { + meVerAlignState = SVX_VER_JUSTIFY_STANDARD; + } + UpdateVerAlign(); + break; + case SID_ATTR_ALIGN_INDENT: + if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SfxUInt16Item) ) + { + const SfxUInt16Item* pItem = (const SfxUInt16Item*)pState; + sal_uInt16 nVal = pItem->GetValue(); + mpMFLeftIndent->SetValue( CalcToPoint(nVal, SFX_MAPUNIT_TWIP, 1) ); + } + else + { + mpMFLeftIndent->SetValue(0); + mpMFLeftIndent->SetText(String()); + } + break; + case FID_MERGE_TOGGLE: + if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SfxBoolItem) ) + { + mpCBXMergeCell->Enable(); + const SfxBoolItem* pItem = (const SfxBoolItem*)pState; + bool bVal = pItem->GetValue(); + if(bVal) + mpCBXMergeCell->Check(true); + else + mpCBXMergeCell->Check(false); + } + else + { + mpCBXMergeCell->Check(false); + mpCBXMergeCell->Disable(); + } + break; + + case SID_ATTR_ALIGN_LINEBREAK: + if(eState == SFX_ITEM_DISABLED) + { + mpCBXWrapText->EnableTriState(false); + mpCBXWrapText->Check(false); + mpCBXWrapText->Disable(); + } + else + { + mpCBXWrapText->Enable(); + if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SfxBoolItem) ) + { + mpCBXWrapText->EnableTriState(false); + const SfxBoolItem* pItem = (const SfxBoolItem*)pState; + bool bVal = pItem->GetValue(); + if(bVal) + mpCBXWrapText->Check(true); + else + mpCBXWrapText->Check(false); + } + else if(eState == SFX_ITEM_DONTCARE) + { + mpCBXWrapText->EnableTriState(true); + mpCBXWrapText->SetState(STATE_DONTKNOW); + } + } + break; + case SID_ATTR_ALIGN_DEGREES: + if (eState >= SFX_ITEM_AVAILABLE) + { + long nTmp = ((const SfxInt32Item*)pState)->GetValue(); + mpMtrAngle->SetValue( nTmp / 100); //wj + mpCtrlDial->SetRotation( nTmp ); + switch(nTmp) + { + case 0: + mpMtrAngle->SelectEntryPos(0); + break; + case 4500: + mpMtrAngle->SelectEntryPos(1); + break; + case 9000: + mpMtrAngle->SelectEntryPos(2); + break; + case 13500: + mpMtrAngle->SelectEntryPos(3); + break; + case 18000: + mpMtrAngle->SelectEntryPos(4); + break; + case 22500: + mpMtrAngle->SelectEntryPos(5); + break; + case 27000: + mpMtrAngle->SelectEntryPos(6); + break; + case 31500: + mpMtrAngle->SelectEntryPos(7); + } + } + else + { + mpMtrAngle->SetText( String() ); + mpCtrlDial->SetRotation( 0 ); + } + break; + case SID_ATTR_ALIGN_STACKED: + if (eState >= SFX_ITEM_AVAILABLE) + { + mpCbStacked->EnableTriState(false); + const SfxBoolItem* aStackItem = (const SfxBoolItem*)pState; + bool IsChecked = (bool)aStackItem->GetValue(); + if(IsChecked) + { + mpCbStacked->Check(IsChecked); + mpFtRotate->Disable(); + mpMtrAngle->Disable(); + mpCtrlDial->Disable(); + mbMultiDisable = true; + } + else + { + mpCbStacked->Check(IsChecked); + mpFtRotate->Enable(); + mpMtrAngle->Enable(); + mpCtrlDial->Enable(); + mbMultiDisable = false; + } + } + else + { + mbMultiDisable = true; + mpFtRotate->Disable(); + mpMtrAngle->Disable(); + mpCtrlDial->Disable(); + mpCbStacked->EnableTriState(true); + mpCbStacked->SetState(STATE_DONTKNOW); + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +SfxBindings* AlignmentPropertyPanel::GetBindings() +{ + return mpBindings; +} + +////////////////////////////////////////////////////////////////////////////// + +void AlignmentPropertyPanel::FormatDegrees(double& dTmp) +{ + while(dTmp<0) + dTmp += 360; + while (dTmp > 359) //modify + dTmp = 359; +} + +////////////////////////////////////////////////////////////////////////////// + +void AlignmentPropertyPanel::UpdateHorAlign() +{ + mpTBHorizontal->SetItemState(ID_SUBSTLEFT, STATE_NOCHECK); + mpTBHorizontal->SetItemState(ID_SUBSTCENTER, STATE_NOCHECK); + mpTBHorizontal->SetItemState(ID_SUBSTRIGHT, STATE_NOCHECK); + mpTBHorizontal->SetItemState(ID_SUBSTJUSTIFY,STATE_NOCHECK); + mpFTLeftIndent->Disable(); + mpMFLeftIndent->Disable(); + if(meHorAlignState==SVX_HOR_JUSTIFY_REPEAT) + { + mpFtRotate->Disable(); + mpCtrlDial->Disable(); + mpMtrAngle->Disable(); + mpCbStacked->Disable(); + } + else + { + if(!mbMultiDisable) + { + mpFtRotate->Enable(); + mpCtrlDial->Enable(); + mpMtrAngle->Enable(); + } + else + { + mpFtRotate->Disable(); + mpCtrlDial->Disable(); + mpMtrAngle->Disable(); + } + mpCbStacked->Enable(); + } + switch(meHorAlignState) + { + case SVX_HOR_JUSTIFY_LEFT: + mpTBHorizontal->SetItemState(ID_SUBSTLEFT, STATE_CHECK); + mpFTLeftIndent->Enable(); + mpMFLeftIndent->Enable(); + break; + case SVX_HOR_JUSTIFY_CENTER:mpTBHorizontal->SetItemState(ID_SUBSTCENTER, STATE_CHECK);break; + case SVX_HOR_JUSTIFY_RIGHT: mpTBHorizontal->SetItemState(ID_SUBSTRIGHT, STATE_CHECK);break; + case SVX_HOR_JUSTIFY_BLOCK: mpTBHorizontal->SetItemState(ID_SUBSTJUSTIFY,STATE_CHECK);break; + default:; + } +} + +////////////////////////////////////////////////////////////////////////////// + +void AlignmentPropertyPanel::UpdateVerAlign() +{ + mpTBVertical->SetItemState(IID_VERT_TOP, STATE_NOCHECK); + mpTBVertical->SetItemState(IID_VERT_CENTER, STATE_NOCHECK); + mpTBVertical->SetItemState(IID_VERT_BOTTOM, STATE_NOCHECK); + + switch(meVerAlignState) + { + case SVX_VER_JUSTIFY_TOP: mpTBVertical->SetItemState(IID_VERT_TOP, STATE_CHECK);break; + case SVX_VER_JUSTIFY_CENTER:mpTBVertical->SetItemState(IID_VERT_CENTER, STATE_CHECK);break; + case SVX_VER_JUSTIFY_BOTTOM: mpTBVertical->SetItemState(IID_VERT_BOTTOM, STATE_CHECK);break; + default:; + } +} + +////////////////////////////////////////////////////////////////////////////// +// namespace close + +}} // end of namespace ::sc::sidebar + +////////////////////////////////////////////////////////////////////////////// +// eof diff --git a/sc/source/ui/sidebar/AlignmentPropertyPanel.hrc b/sc/source/ui/sidebar/AlignmentPropertyPanel.hrc new file mode 100755 index 000000000000..15b3d901dc8c --- /dev/null +++ b/sc/source/ui/sidebar/AlignmentPropertyPanel.hrc @@ -0,0 +1,88 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +// RID_PROPERTYPANEL_SC_ALIGNMENT-------------------------------------------------------------- +#define FT_ORIENT 1 +#define CBX_WRAP 5 +#define FT_LEFT_INDENT 7 +#define MF_LEFT_INDENT 8 +#define CBX_MERGE 9 +#define CBX_VERT 10 +#define CTL_SBSHAPE_POSREFERENCE 12 +#define CBOX_ANGLE 14 +#define TBX_HORIZONTAL_ALIGNMENT 15 +#define TBX_VERTICAL_ALIGN 16 +#define DIAL_CONTROL 17 +#define ID_SUBSTLEFT 20 +#define ID_SUBSTCENTER 21 +#define ID_SUBSTRIGHT 22 +#define ID_SUBSTJUSTIFY 23 +#define IID_VERT_TOP 24 +#define IID_VERT_CENTER 25 +#define IID_VERT_BOTTOM 26 + +#define MBOX_WIDTH 45 +#define TEXT_WIDTH 40 +#define FLIP_BUTTON_SIZE 13 +#define ALIGNMENT_TBX_HEIGHT 17 +#define ALIGNMENT_TBX_WIDTH 13 + +#define IMG_ALIGN_LEFT 50 +#define IMG_ALIGN_CENTER 51 +#define IMG_ALIGN_RIGHT 52 +#define IMG_ALIGN_JUST 53 +#define IMG_ALIGN_TOP 54 +#define IMG_ALIGN_CENTER_V 55 +#define IMG_ALIGN_BOTTOM 56 + +//---------------position----------------- + +#define ALIGNMENT_X SECTIONPAGE_MARGIN_HORIZONTAL +#define ALIGNMENT_Y SECTIONPAGE_MARGIN_VERTICAL_TOP +#define ALIGNMENT_VERT_X (ALIGNMENT_X + TBX_OUT_BORDER_OFFSET_X*2 + TOOLBOX_ITEM_WIDTH * 4 + CONTROL_SPACING_HORIZONTAL) +#define ALIGNMENT_VERT_Y ALIGNMENT_Y + +#define FT_LEFTINDENT_X ALIGNMENT_X +#define FT_LEFTINDENT_Y (ALIGNMENT_Y + TOOLBOX_ITEM_HEIGHT + TBX_OUT_BORDER_OFFSET_Y + CONTROL_SPACING_VERTICAL) +#define MTR_LEFTINDENT_X ALIGNMENT_X +#define MTR_LEFTINDENT_Y (FT_LEFTINDENT_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) + +#define CBX_WRAP_X (ALIGNMENT_X + TEXT_WIDTH + 10 + CONTROL_SPACING_HORIZONTAL) +#define CBX_WRAP_Y (FT_LEFTINDENT_Y + 2) + +#define CBX_MERGE_X CBX_WRAP_X +#define CBX_MERGE_Y CBX_WRAP_Y + CBOX_HEIGHT + 2 + +#define FT_ORIENT_X ALIGNMENT_X +#define FT_ORIENT_Y MTR_LEFTINDENT_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + +#define COMOBX_ROTATION_X FT_ORIENT_X + 30 + CONTROL_SPACING_HORIZONTAL +#define COMOBX_ROTATION_Y FT_ORIENT_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + 5 + +#define ROTATE_CONTROL_X FT_ORIENT_X +#define ROTATE_CONTROL_Y COMOBX_ROTATION_Y - 3 + +#define CBX_VERT_X COMOBX_ROTATION_X +#define CBX_VERT_Y COMOBX_ROTATION_Y + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL + 2 + +#define PANEL_HEIGHT CBX_VERT_Y + 6 + SECTIONPAGE_MARGIN_VERTICAL_BOT + +// eof diff --git a/sc/source/ui/sidebar/AlignmentPropertyPanel.hxx b/sc/source/ui/sidebar/AlignmentPropertyPanel.hxx new file mode 100755 index 000000000000..7f02847a6d5e --- /dev/null +++ b/sc/source/ui/sidebar/AlignmentPropertyPanel.hxx @@ -0,0 +1,130 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_PROPERTYPANEL_ALIGNMENT_HXX +#define SC_PROPERTYPANEL_ALIGNMENT_HXX + +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/IContextChangeReceiver.hxx> +#include <vcl/fixed.hxx> +#include <boost/scoped_ptr.hpp> +#include <editeng/svxenum.hxx> + +class ToolBox; +class MetricField; +class MetricBox; +class CheckBox; +namespace svx { namespace sidebar { class SidebarDialControl; }} + +namespace sc { namespace sidebar { + +class AlignmentPropertyPanel +: public Control, + public ::sfx2::sidebar::IContextChangeReceiver, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: + static AlignmentPropertyPanel* Create( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + + virtual void DataChanged( + const DataChangedEvent& rEvent); + + virtual void HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + SfxBindings* GetBindings(); + +private: + //ui controls + ::boost::scoped_ptr<Window> mpTBHorizontalBackground; + ::boost::scoped_ptr< ToolBox > mpTBHorizontal; + ::boost::scoped_ptr<Window> mpTBVerticalBackground; + ::boost::scoped_ptr< ToolBox > mpTBVertical; + ::boost::scoped_ptr< FixedText > mpFTLeftIndent; + ::boost::scoped_ptr< MetricField > mpMFLeftIndent; + ::boost::scoped_ptr< CheckBox > mpCBXWrapText; + ::boost::scoped_ptr< CheckBox > mpCBXMergeCell; + ::boost::scoped_ptr< FixedText > mpFtRotate; + ::boost::scoped_ptr< svx::sidebar::SidebarDialControl > mpCtrlDial; + ::boost::scoped_ptr< MetricBox > mpMtrAngle; + ::boost::scoped_ptr< CheckBox > mpCbStacked; + + ::sfx2::sidebar::ControllerItem maAlignHorControl; + ::sfx2::sidebar::ControllerItem maAlignVerControl; + ::sfx2::sidebar::ControllerItem maLeftIndentControl; + ::sfx2::sidebar::ControllerItem maMergeCellControl; + ::sfx2::sidebar::ControllerItem maWrapTextControl; + ::sfx2::sidebar::ControllerItem maAngleControl; + ::sfx2::sidebar::ControllerItem maStackControl; + + Image maIMGAlignLeft; + Image maIMGAlignCenter; + Image maIMGAlignRight; + Image maIMGAlignJust; + Image maIMGAlignTop; + Image maIMGAlignCenterV; + Image maIMGAlignBottom; + + SvxCellHorJustify meHorAlignState; + SvxCellVerJustify meVerAlignState; + + /// bitfield + bool mbMultiDisable : 1; + + cssu::Reference<css::frame::XFrame> mxFrame; + ::sfx2::sidebar::EnumContext maContext; + SfxBindings* mpBindings; + + DECL_LINK( TbxHorAlignSelectHdl, ToolBox* ); + DECL_LINK( TbxVerAlignSelectHdl, ToolBox* ); + DECL_LINK( MFLeftIndentMdyHdl, void * ); + DECL_LINK( CBOXMergnCellClkHdl, void * ); + DECL_LINK( CBOXWrapTextClkHdl, void * ); + DECL_LINK( AngleModifiedHdl, void * ); + DECL_LINK( RotationHdl, void * ); + DECL_LINK( ClickStackHdl, void * ); + + // constructor/destuctor + AlignmentPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + virtual ~AlignmentPropertyPanel(); + + void Initialize(); + void UpdateHorAlign(); + void UpdateVerAlign(); + void FormatDegrees(double& dTmp); +}; + +} } // end of namespace ::sc::sidebar + +#endif +// eof diff --git a/sc/source/ui/sidebar/AlignmentPropertyPanel.src b/sc/source/ui/sidebar/AlignmentPropertyPanel.src new file mode 100755 index 000000000000..520cc08ce3d6 --- /dev/null +++ b/sc/source/ui/sidebar/AlignmentPropertyPanel.src @@ -0,0 +1,217 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "AlignmentPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include "sc.hrc" +#include "helpids.h" + +Control RID_PROPERTYPANEL_SC_ALIGNMENT +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, PANEL_HEIGHT ); + HelpID = HID_PROPERTYPANEL_SC_ALIGN_SECTION; + Text [ en-US ] = "Alignment"; + + //------------ Alignment ------------- + ToolBox TBX_HORIZONTAL_ALIGNMENT + { + Pos = MAP_APPFONT ( ALIGNMENT_X , ALIGNMENT_Y ); + Size = MAP_APPFONT ( ALIGNMENT_TBX_WIDTH*4 ,ALIGNMENT_TBX_HEIGHT); + SVLook = TRUE ; + Border = FALSE ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBX_HOR; + Text [ en-US ] = "Horizontal Alignment" ; + ItemList = + { + ToolBoxItem + { + Identifier = ID_SUBSTLEFT ; + Text [ en-US ] = "Align Left" ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBI_HOR_L; + }; + ToolBoxItem + { + Identifier = ID_SUBSTCENTER ; + Text [ en-US ] = "Align Center" ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBI_HOR_C; + }; + ToolBoxItem + { + Identifier = ID_SUBSTRIGHT ; + Text [ en-US ] = "Align Right" ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBI_HOR_R; + }; + ToolBoxItem + { + Identifier = ID_SUBSTJUSTIFY ; + Text [ en-US ] = "Align Justified" ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBI_HOR_J; + }; + }; + }; + ToolBox TBX_VERTICAL_ALIGN + { + SVLook = TRUE ; + Border = FALSE ; + Pos = MAP_APPFONT ( ALIGNMENT_VERT_X, ALIGNMENT_VERT_Y ) ; + Size = MAP_APPFONT ( TOOLBOX_ITEM_WIDTH * 3 , TOOLBOX_ITEM_HEIGHT) ; + TabStop = TRUE ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBX_VER; + Text [ en-US ] = "Vertical Alignment" ; + ItemList = + { + ToolBoxItem + { + Identifier = IID_VERT_TOP ; + Text [ en-US ] = "Align Top" ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBI_VER_T; + }; + + ToolBoxItem + { + Identifier = IID_VERT_CENTER ; + Text [ en-US ] = "Align Center Vertically" ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBI_VER_C; + }; + + ToolBoxItem + { + Identifier = IID_VERT_BOTTOM ; + Text [ en-US ] = "Align Bottom" ; + HelpID = HID_PROPERTY_PANEL_ALIGN_TBI_VER_B; + }; + }; + }; + //------------ Left indent ------------ + FixedText FT_LEFT_INDENT + { + Pos = MAP_APPFONT ( FT_LEFTINDENT_X, FT_LEFTINDENT_Y ); + Size = MAP_APPFONT (CBX_WRAP_X - FT_LEFTINDENT_X - 1 , TEXT_HEIGHT) ; //MBOX_WIDTH + Text [ en-US ] = "Left ~indent:"; + }; + MetricField MF_LEFT_INDENT + { + Border = TRUE; + Pos = MAP_APPFONT ( MTR_LEFTINDENT_X , MTR_LEFTINDENT_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, MBOX_HEIGHT ) ; + TabStop = TRUE; + Repeat = TRUE; + Spin = TRUE; + Minimum = 0; + Maximum = 990; + Unit = FUNIT_POINT; + SpinSize = 10; + QuickHelpText [ en-US ] = "Indents from the left edge."; + HelpID = HID_PROPERTY_PANEL_ALIGN_MBX_INDENT; + }; + CheckBox CBX_WRAP + { + Pos = MAP_APPFONT ( CBX_WRAP_X , CBX_WRAP_Y ) ; + Size = MAP_APPFONT (PROPERTYPAGE_WIDTH - CBX_WRAP_X - 1 , CBOX_HEIGHT ) ;// + TabStop = TRUE ; + Text [ en-US ] = "~Wrap text" ; + QuickHelpText [ en-US ] = "Wrap texts automatically."; + HelpID = HID_PROPERTY_PANEL_ALIGN_CBX_WRAP; + }; + CheckBox CBX_MERGE + { + Pos = MAP_APPFONT ( CBX_MERGE_X , CBX_MERGE_Y ) ; + Size = MAP_APPFONT ( PROPERTYPAGE_WIDTH - CBX_WRAP_X - 1 , CBOX_HEIGHT ) ;// + TabStop = TRUE ; + Text [ en-US ] = "~Merge cells" ; + QuickHelpText [ en-US ] = "Joins the selected cells into one."; + HelpID = HID_PROPERTY_PANEL_ALIGN_CBX_MERGE; + }; + //------------ Text orientation ------------ + FixedText FT_ORIENT + { + Pos = MAP_APPFONT ( FT_ORIENT_X, FT_ORIENT_Y ); + Size = MAP_APPFONT ( TEXT_WIDTH + 50, TEXT_HEIGHT) ; + Text [ en-US ] = "Text ~orientation:"; + }; + MetricBox CBOX_ANGLE + { + Border = TRUE ; + Pos = MAP_APPFONT ( COMOBX_ROTATION_X , COMOBX_ROTATION_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH + 20, MBOX_HEIGHT ) ; + Unit = FUNIT_CUSTOM ; + CustomUnitText [ en-US ] = " degrees"; + DecimalDigits = 0; + Minimum = 0; + Maximum = 359; + TabStop = TRUE ; + DropDown = TRUE ; + QuickHelpText [ en-US ] = "Select the angle for rotation."; + HelpID = HID_PROPERTY_PANEL_ALIGN_MBX_ANGLE; + }; + + Control DIAL_CONTROL + { + Pos = MAP_APPFONT ( ROTATE_CONTROL_X , ROTATE_CONTROL_Y ); + Size = MAP_PIXEL( 50, 50 ); + HelpID = HID_PROPERTY_PANEL_ALIGN_DIAL_CONTROL; + QuickHelpText [ en-US ] = "Drag to change the rotation value."; + }; + CheckBox CBX_VERT + { + Pos = MAP_APPFONT ( CBX_VERT_X , CBX_VERT_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH + 20 , CBOX_HEIGHT + 5 ) ; + TabStop = TRUE ; + Text [ en-US ] = "~Vertically stacked" ; + QuickHelpText [ en-US ] = "Aligns text vertically."; + HelpID = HID_PROPERTY_PANEL_ALIGN_CBX_VERT; + }; + + Image IMG_ALIGN_LEFT + { + ImageBitmap = Bitmap{File = "sidebar/sc_alignleft.png";}; + }; + Image IMG_ALIGN_CENTER + { + ImageBitmap = Bitmap{File = "sidebar/sc_aligncenter.png";}; + }; + Image IMG_ALIGN_RIGHT + { + ImageBitmap = Bitmap{File = "sidebar/sc_alignright.png";}; + }; + Image IMG_ALIGN_JUST + { + ImageBitmap = Bitmap{File = "sidebar/sc_alignjust.png";}; + }; + Image IMG_ALIGN_TOP + { + ImageBitmap = Bitmap{File = "sidebar/sc_aligntop.png";}; + }; + Image IMG_ALIGN_CENTER_V + { + ImageBitmap = Bitmap{File = "sidebar/sc_aligncenter_v.png";}; + }; + Image IMG_ALIGN_BOTTOM + { + ImageBitmap = Bitmap{File = "sidebar/sc_alignbottom.png";}; + }; +}; + +// eof diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx b/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx new file mode 100755 index 000000000000..9bfe39041e4d --- /dev/null +++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx @@ -0,0 +1,879 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <CellAppearancePropertyPanel.hxx> +#include <CellAppearancePropertyPanel.hrc> +#include "sc.hrc" +#include "scresid.hxx" +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <vcl/fixed.hxx> +#include <svx/tbxcolorupdate.hxx> +#include <svl/eitem.hxx> +#include <editeng/bolnitem.hxx> +#include <editeng/boxitem.hxx> +#include <editeng/colritem.hxx> +#include <vcl/svapp.hxx> +#include <svx/sidebar/ColorControl.hxx> +#include <boost/bind.hpp> +#include <svx/sidebar/PopupContainer.hxx> +#include <CellLineStyleControl.hxx> +#include <CellLineStylePopup.hxx> +#include <CellBorderUpdater.hxx> +#include <CellBorderStyleControl.hxx> +#include <CellBorderStylePopup.hxx> + +using namespace css; +using namespace cssu; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +////////////////////////////////////////////////////////////////////////////// +// helpers + +namespace +{ + Color GetTransparentColor(void) + { + return COL_TRANSPARENT; + } +} // end of anonymous namespace + +////////////////////////////////////////////////////////////////////////////// +// namespace open + +namespace sc { namespace sidebar { + +////////////////////////////////////////////////////////////////////////////// + +svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateFillColorPopupControl(svx::sidebar::PopupContainer* pParent) +{ + const ScResId aResId(VS_NOFILLCOLOR); + + return new svx::sidebar::ColorControl( + pParent, + mpBindings, + ScResId(RID_POPUPPANEL_CELLAPPEARANCE_FILLCOLOR), + ScResId(VS_FILLCOLOR), + ::boost::bind(GetTransparentColor), + ::boost::bind(&CellAppearancePropertyPanel::SetFillColor, this, _1, _2), + pParent, + &aResId); +} + +void CellAppearancePropertyPanel::SetFillColor( + const String& /*rsColorName*/, + const Color aColor) +{ + const SvxColorItem aColorItem(aColor, SID_BACKGROUND_COLOR); + mpBindings->GetDispatcher()->Execute(SID_BACKGROUND_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L); + maBackColor = aColor; +} + +////////////////////////////////////////////////////////////////////////////// + +svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateLineColorPopupControl(svx::sidebar::PopupContainer* pParent) +{ + return new svx::sidebar::ColorControl( + pParent, + mpBindings, + ScResId(RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR), + ScResId(VS_LINECOLOR), + ::boost::bind(GetTransparentColor), + ::boost::bind(&CellAppearancePropertyPanel::SetLineColor, this, _1, _2), + pParent, + 0); +} + +void CellAppearancePropertyPanel::SetLineColor( + const String& /*rsColorName*/, + const Color aColor) +{ + const SvxColorItem aColorItem(aColor, SID_FRAME_LINECOLOR); + mpBindings->GetDispatcher()->Execute(SID_FRAME_LINECOLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L); + maLineColor = aColor; +} + +////////////////////////////////////////////////////////////////////////////// + +svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellLineStylePopupControl(svx::sidebar::PopupContainer* pParent) +{ + return new CellLineStyleControl(pParent, *this); +} + +void CellAppearancePropertyPanel::EndCellLineStylePopupMode(void) +{ + if(mpCellLineStylePopup.get()) + { + mpCellLineStylePopup->Hide(); + } +} + +////////////////////////////////////////////////////////////////////////////// + +svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellBorderStylePopupControl(svx::sidebar::PopupContainer* pParent) +{ + return new CellBorderStyleControl(pParent, *this); +} + +void CellAppearancePropertyPanel::EndCellBorderStylePopupMode(void) +{ + if(mpCellBorderStylePopup.get()) + { + mpCellBorderStylePopup->Hide(); + } +} + +////////////////////////////////////////////////////////////////////////////// + +CellAppearancePropertyPanel::CellAppearancePropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +: Control( + pParent, + ScResId(RID_PROPERTYPANEL_SC_APPEAR)), + + mpFTFillColor(new FixedText(this, ScResId(FT_BK_COLOR))), + mpTBFillColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpTBFillColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBFillColorBackground.get(), ScResId(TB_BK_COLOR))), + mpFillColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_BRUSH, TBI_BK_COLOR, mpTBFillColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)), + + mpFTCellBorder(new FixedText(this, ScResId(FT_BORDER))), + mpTBCellBorderBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpTBCellBorder(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBCellBorderBackground.get(), ScResId(TB_APP_BORDER))), + mpCellBorderUpdater(new CellBorderUpdater(TBI_BORDER, *mpTBCellBorder)), + + mpTBLineStyleBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpTBLineStyle(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineStyleBackground.get(), ScResId(TB_BORDER_LINE_STYLE))), + + mpTBLineColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpTBLineColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineColorBackground.get(), ScResId(TB_BORDER_LINE_COLOR))), + mpLineColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_FRAME_LINECOLOR, TBI_LINE_COLOR, mpTBLineColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)), + + mpCBXShowGrid(new CheckBox(this, ScResId(CBX_SHOW_GRID))), + + maBackColorControl(SID_BACKGROUND_COLOR, *pBindings, *this), + maLineColorControl(SID_FRAME_LINECOLOR, *pBindings, *this), + maLineStyleControl(SID_FRAME_LINESTYLE, *pBindings, *this), + maBorderOuterControl(SID_ATTR_BORDER_OUTER, *pBindings, *this), + maBorderInnerControl(SID_ATTR_BORDER_INNER, *pBindings, *this), + maGridShowControl(SID_SCGRIDSHOW, *pBindings, *this), + maBorderTLBRControl(SID_ATTR_BORDER_DIAG_TLBR, *pBindings, *this), + maBorderBLTRControl(SID_ATTR_BORDER_DIAG_BLTR, *pBindings, *this), + + maIMGBKColor(ScResId(IMG_BK_COLOR)), + maIMGCellBorder(ScResId(IMG_CELL_BORDER)), + maIMGLineColor(ScResId(IMG_LINE_COLOR)), + maIMGLineStyle1(ScResId(IMG_LINE_STYLE1)), + maIMGLineStyle2(ScResId(IMG_LINE_STYLE2)), + maIMGLineStyle3(ScResId(IMG_LINE_STYLE3)), + maIMGLineStyle4(ScResId(IMG_LINE_STYLE4)), + maIMGLineStyle5(ScResId(IMG_LINE_STYLE5)), + maIMGLineStyle6(ScResId(IMG_LINE_STYLE6)), + maIMGLineStyle7(ScResId(IMG_LINE_STYLE7)), + maIMGLineStyle8(ScResId(IMG_LINE_STYLE8)), + maIMGLineStyle9(ScResId(IMG_LINE_STYLE9)), + + maIMGBKColorH(ScResId(IMG_BK_COLOR_H)), + maIMGLineStyle1H(ScResId(IMG_LINE_STYLE1_H)), + maIMGLineStyle2H(ScResId(IMG_LINE_STYLE2_H)), + maIMGLineStyle3H(ScResId(IMG_LINE_STYLE3_H)), + maIMGLineStyle4H(ScResId(IMG_LINE_STYLE4_H)), + maIMGLineStyle5H(ScResId(IMG_LINE_STYLE5_H)), + maIMGLineStyle6H(ScResId(IMG_LINE_STYLE6_H)), + maIMGLineStyle7H(ScResId(IMG_LINE_STYLE7_H)), + maIMGLineStyle8H(ScResId(IMG_LINE_STYLE8_H)), + maIMGLineStyle9H(ScResId(IMG_LINE_STYLE9_H)), + + maBackColor(COL_TRANSPARENT), + maLineColor(COL_BLACK), + maTLBRColor(COL_BLACK), + maBLTRColor(COL_BLACK), + mnIn(0), + mnOut(0), + mnDis(0), + mnTLBRIn(0), + mnTLBROut(0), + mnTLBRDis(0), + mnBLTRIn(0), + mnBLTROut(0), + mnBLTRDis(0), + mbBackColorAvailable(true), + mbLineColorAvailable(true), + mbBorderStyleAvailable(true), + mbLeft(false), + mbRight(false), + mbTop(false), + mbBottom(false), + mbVer(false), + mbHor(false), + mbOuterBorder(false), + mbInnerBorder(false), + mbTLBR(false), + mbBLTR(false), + + maFillColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateFillColorPopupControl, this, _1)), + maLineColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateLineColorPopupControl, this, _1)), + mpCellLineStylePopup(), + mpCellBorderStylePopup(), + + mxFrame(rxFrame), + maContext(), + mpBindings(pBindings) +{ + Initialize(); + FreeResource(); +} + +////////////////////////////////////////////////////////////////////////////// + +CellAppearancePropertyPanel::~CellAppearancePropertyPanel() +{ + // Destroy the toolboxes, then their background windows. + mpTBFillColor.reset(); + mpTBCellBorder.reset(); + mpTBLineStyle.reset(); + mpTBLineColor.reset(); + + mpTBFillColorBackground.reset(); + mpTBCellBorderBackground.reset(); + mpTBLineStyleBackground.reset(); + mpTBLineColorBackground.reset(); +} + +////////////////////////////////////////////////////////////////////////////// + +void CellAppearancePropertyPanel::Initialize() +{ + mpTBFillColor->SetItemImage(TBI_BK_COLOR, GetDisplayBackground().GetColor().IsDark() ? maIMGBKColorH : maIMGBKColor); + mpTBFillColor->SetItemBits( TBI_BK_COLOR, mpTBFillColor->GetItemBits( TBI_BK_COLOR ) | TIB_DROPDOWNONLY ); + mpTBFillColor->SetQuickHelpText(TBI_BK_COLOR,String(ScResId(STR_QH_BK_COLOR))); //Add + Size aTbxSize1( mpTBFillColor->CalcWindowSizePixel() ); + mpTBFillColor->SetOutputSizePixel( aTbxSize1 ); + mpTBFillColor->SetBackground(Wallpaper()); + mpTBFillColor->SetPaintTransparent(true); + Link aLink = LINK(this, CellAppearancePropertyPanel, TbxBKColorSelectHdl); + mpTBFillColor->SetDropdownClickHdl ( aLink ); + mpTBFillColor->SetSelectHdl ( aLink ); + + mpTBCellBorder->SetItemImage(TBI_BORDER, maIMGCellBorder); + mpTBCellBorder->SetItemBits( TBI_BORDER, mpTBCellBorder->GetItemBits( TBI_BORDER ) | TIB_DROPDOWNONLY ); + mpTBCellBorder->SetQuickHelpText(TBI_BORDER,String(ScResId(STR_QH_BORDER))); //Add + Size aTbxSize2( mpTBCellBorder->CalcWindowSizePixel() ); + mpTBCellBorder->SetOutputSizePixel( aTbxSize2 ); + mpTBCellBorder->SetBackground(Wallpaper()); + mpTBCellBorder->SetPaintTransparent(true); + aLink = LINK(this, CellAppearancePropertyPanel, TbxCellBorderSelectHdl); + mpTBCellBorder->SetDropdownClickHdl ( aLink ); + mpTBCellBorder->SetSelectHdl ( aLink ); + + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle1); + mpTBLineStyle->SetItemBits( TBI_LINE_STYLE, mpTBLineStyle->GetItemBits( TBI_LINE_STYLE ) | TIB_DROPDOWNONLY ); + mpTBLineStyle->SetQuickHelpText(TBI_LINE_STYLE,String(ScResId(STR_QH_BORDER_LINE_STYLE))); //Add + Size aTbxSize3( mpTBLineStyle->CalcWindowSizePixel() ); + mpTBLineStyle->SetOutputSizePixel( aTbxSize3 ); + mpTBLineStyle->SetBackground(Wallpaper()); + mpTBLineStyle->SetPaintTransparent(true); + aLink = LINK(this, CellAppearancePropertyPanel, TbxLineStyleSelectHdl); + mpTBLineStyle->SetDropdownClickHdl ( aLink ); + mpTBLineStyle->SetSelectHdl ( aLink ); + mpTBLineStyle->Disable(); + + mpTBLineColor->SetItemImage(TBI_LINE_COLOR, maIMGLineColor); + mpTBLineColor->SetItemBits( TBI_LINE_COLOR, mpTBLineColor->GetItemBits( TBI_LINE_COLOR ) | TIB_DROPDOWNONLY ); + mpTBLineColor->SetQuickHelpText(TBI_LINE_COLOR,String(ScResId(STR_QH_BORDER_LINE_COLOR))); //Add + Size aTbxSize4( mpTBLineColor->CalcWindowSizePixel() ); + mpTBLineColor->SetOutputSizePixel( aTbxSize4 ); + mpTBLineColor->SetBackground(Wallpaper()); + mpTBLineColor->SetPaintTransparent(true); + aLink = LINK(this, CellAppearancePropertyPanel, TbxLineColorSelectHdl); + mpTBLineColor->SetDropdownClickHdl ( aLink ); + mpTBLineColor->SetSelectHdl ( aLink ); + mpTBLineColor->Disable(); + + aLink = LINK(this, CellAppearancePropertyPanel, CBOXGridShowClkHdl); + mpCBXShowGrid->SetClickHdl ( aLink ); + + mpTBFillColor->SetAccessibleRelationLabeledBy(mpFTFillColor.get()); + mpTBLineColor->SetAccessibleRelationLabeledBy(mpTBLineColor.get()); + mpTBCellBorder->SetAccessibleRelationLabeledBy(mpFTCellBorder.get()); + mpTBLineStyle->SetAccessibleRelationLabeledBy(mpTBLineStyle.get()); +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(CellAppearancePropertyPanel, TbxBKColorSelectHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + if(nId == TBI_BK_COLOR) + { + maFillColorPopup.Show(*pToolBox); + maFillColorPopup.SetCurrentColor(maBackColor, mbBackColorAvailable); + } + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(CellAppearancePropertyPanel, TbxLineColorSelectHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + if(nId == TBI_LINE_COLOR) + { + maLineColorPopup.Show(*pToolBox); + maLineColorPopup.SetCurrentColor(maLineColor, mbLineColorAvailable); + } + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(CellAppearancePropertyPanel, TbxCellBorderSelectHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + + if(nId == TBI_BORDER) + { + // create popup on demand + if(!mpCellBorderStylePopup.get()) + { + mpCellBorderStylePopup.reset( + new CellBorderStylePopup( + this, + ::boost::bind(&CellAppearancePropertyPanel::CreateCellBorderStylePopupControl, this, _1))); + } + + if(mpCellBorderStylePopup.get()) + { + mpCellBorderStylePopup->Show(*pToolBox); + } + } + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(CellAppearancePropertyPanel, TbxLineStyleSelectHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + if(nId == TBI_LINE_STYLE) + { + // create popup on demand + if(!mpCellLineStylePopup.get()) + { + mpCellLineStylePopup.reset( + new CellLineStylePopup( + this, + ::boost::bind(&CellAppearancePropertyPanel::CreateCellLineStylePopupControl, this, _1))); + } + + if(mpCellLineStylePopup.get()) + { + mpCellLineStylePopup->SetLineStyleSelect(mnOut, mnIn, mnDis); + mpCellLineStylePopup->Show(*pToolBox); + } + } + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(CellAppearancePropertyPanel, CBOXGridShowClkHdl, void*, EMPTYARG) +{ + bool bState = mpCBXShowGrid->IsChecked(); + SfxBoolItem aItem( SID_SCGRIDSHOW , bState); + GetBindings()->GetDispatcher()->Execute(SID_SCGRIDSHOW, SFX_CALLMODE_RECORD, &aItem, false, 0L); + return 0; +} + +////////////////////////////////////////////////////////////////////////////// + +CellAppearancePropertyPanel* CellAppearancePropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to CellAppearancePropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to CellAppearancePropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to CellAppearancePropertyPanel::Create"), NULL, 2); + + return new CellAppearancePropertyPanel( + pParent, + rxFrame, + pBindings); +} + +////////////////////////////////////////////////////////////////////////////// + +void CellAppearancePropertyPanel::DataChanged( + const DataChangedEvent& rEvent) +{ + (void)rEvent; +} + +////////////////////////////////////////////////////////////////////////////// + +void CellAppearancePropertyPanel::HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext) +{ + if(maContext == aContext) + { + // Nothing to do. + return; + } + + maContext = aContext; + + + + // todo +} + +////////////////////////////////////////////////////////////////////////////// + +void CellAppearancePropertyPanel::NotifyItemUpdate( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + switch(nSID) + { + case SID_BACKGROUND_COLOR: + if(eState >= SFX_ITEM_DEFAULT) + { + const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState); + + if(pSvxColorItem) + { + maBackColor = ((const SvxColorItem*)pState)->GetValue(); + mbBackColorAvailable = true; + mpFillColorUpdater->Update(maBackColor); + break; + } + } + + mbBackColorAvailable = false; + maBackColor.SetColor(COL_TRANSPARENT); + mpFillColorUpdater->Update(COL_TRANSPARENT); + break; + case SID_FRAME_LINECOLOR: + if( eState == SFX_ITEM_DONTCARE) + { + mbLineColorAvailable = true; + maLineColor.SetColor( COL_TRANSPARENT ); + UpdateControlState(); + break; + } + + if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxColorItem) ) + { + const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState); + + if(pSvxColorItem) + { + maLineColor = ((const SvxColorItem*)pState)->GetValue(); + if(maLineColor == COL_AUTO) + mbLineColorAvailable = false; + else + { + mbLineColorAvailable = true; + // mpLineColorUpdater->Update(maLineColor); + } + + UpdateControlState(); + break; + } + } + + mbLineColorAvailable = false; + maLineColor.SetColor(COL_AUTO); + // mpLineColorUpdater->Update(maLineColor); + UpdateControlState(); + break; + case SID_FRAME_LINESTYLE: + if( eState == SFX_ITEM_DONTCARE ) + { + mbBorderStyleAvailable = true; + mnIn = 0; + mnOut = 0; + mnDis = 0; + SetStyleIcon(); + break; + } + + if(eState >= SFX_ITEM_DEFAULT) + { + const SvxLineItem* pSvxLineItem = dynamic_cast< const SvxLineItem* >(pState); + + if(pSvxLineItem) + { + const SvxBorderLine* mbLineItem = pSvxLineItem->GetLine(); + mnIn = mbLineItem->GetInWidth(); + mnOut = mbLineItem->GetOutWidth(); + mnDis = mbLineItem->GetDistance(); + + if(mnIn == 0 && mnOut == 0 && mnDis == 0) + mbBorderStyleAvailable = false; + else + mbBorderStyleAvailable = true; + + SetStyleIcon(); + break; + } + } + + mbBorderStyleAvailable = false; + SetStyleIcon(); + break; + case SID_ATTR_BORDER_OUTER: + if(eState >= SFX_ITEM_DEFAULT) + { + const SvxBoxItem* pBoxItem = dynamic_cast< const SvxBoxItem* >(pState); + + if(pBoxItem) + { + mbLeft=false, mbRight=false, mbTop=false, mbBottom=false; + + if(pBoxItem->GetLeft()) + mbLeft = true; + + if(pBoxItem->GetRight()) + mbRight = true; + + if(pBoxItem->GetTop()) + mbTop = true; + + if(pBoxItem->GetBottom()) + mbBottom = true; + + if(!Application::GetSettings().GetLayoutRTL()) + mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, maIMGCellBorder, mbVer, mbHor); + else + mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbRight, mbLeft, maIMGCellBorder, mbVer, mbHor); + + if(mbLeft || mbRight || mbTop || mbBottom) + mbOuterBorder = true; + else + mbOuterBorder = false; + + UpdateControlState(); + } + } + break; + case SID_ATTR_BORDER_INNER: + if(eState >= SFX_ITEM_DEFAULT) + { + const SvxBoxInfoItem* pBoxInfoItem = dynamic_cast< const SvxBoxInfoItem* >(pState); + + if(pBoxInfoItem) + { + bool bLeft(false), bRight(false), bTop(false), bBottom(false); + + mbVer = false, mbHor = false; + + if(!pBoxInfoItem->IsValid( VALID_VERT ) || pBoxInfoItem->GetVert()) + mbVer = true; + + if(!pBoxInfoItem->IsValid( VALID_HORI ) || pBoxInfoItem->GetHori()) + mbHor = true; + + if(!pBoxInfoItem->IsValid( VALID_LEFT ) || mbLeft) + bLeft = true; + + if(!pBoxInfoItem->IsValid( VALID_RIGHT ) || mbRight) + bRight = true; + + if(!pBoxInfoItem->IsValid( VALID_TOP ) || mbTop) + bTop = true; + + if(!pBoxInfoItem->IsValid( VALID_BOTTOM ) || mbBottom) + bBottom = true; + + if(!Application::GetSettings().GetLayoutRTL()) + mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bLeft, bRight, maIMGCellBorder, mbVer, mbHor); + else + mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bRight, bLeft, maIMGCellBorder, mbVer, mbHor); + + if(mbVer || mbHor || bLeft || bRight || bTop || bBottom) + mbInnerBorder = true; + else + mbInnerBorder = false; + + UpdateControlState(); + } + } + break; + case SID_ATTR_BORDER_DIAG_TLBR: + if( eState == SFX_ITEM_DONTCARE ) + { + mbTLBR = true; + maTLBRColor.SetColor(COL_TRANSPARENT); + mnTLBRIn = mnTLBROut = mnTLBRDis = 0; + UpdateControlState(); + break; + } + + if(eState >= SFX_ITEM_DEFAULT) + { + const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState); + + if(pItem) + { + const SvxBorderLine* aLine = pItem->GetLine(); + + if(!aLine) + { + mbTLBR = false; + } + else + { + mbTLBR = true; + maTLBRColor = aLine->GetColor(); + mnTLBRIn = aLine->GetInWidth(); + mnTLBROut = aLine->GetOutWidth(); + mnTLBRDis = aLine->GetDistance(); + + if(mnTLBRIn == 0 && mnTLBROut == 0 && mnTLBRDis == 0) + mbTLBR = false; + } + + UpdateControlState(); + break; + } + } + + mbTLBR = false; + UpdateControlState(); + break; + case SID_ATTR_BORDER_DIAG_BLTR: + if( eState == SFX_ITEM_DONTCARE ) + { + mbBLTR = true; + maBLTRColor.SetColor( COL_TRANSPARENT ); + mnBLTRIn = mnBLTROut = mnBLTRDis = 0; + UpdateControlState(); + break; + } + + if(eState >= SFX_ITEM_DEFAULT) + { + const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState); + + if(pItem) + { + const SvxBorderLine* aLine = pItem->GetLine(); + + if(!aLine) + { + mbBLTR = false; + } + else + { + mbBLTR = true; + maBLTRColor = aLine->GetColor(); + mnBLTRIn = aLine->GetInWidth(); + mnBLTROut = aLine->GetOutWidth(); + mnBLTRDis = aLine->GetDistance(); + + if(mnBLTRIn == 0 && mnBLTROut == 0 && mnBLTRDis == 0) + mbBLTR = false; + } + + UpdateControlState(); + } + break; + } + + mbBLTR = false; + UpdateControlState(); + break; + case SID_SCGRIDSHOW: + if(eState >= SFX_ITEM_DEFAULT) + { + const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); + + if(pItem) + { + const bool bVal = pItem->GetValue(); + + if(bVal) + mpCBXShowGrid->Check(true); + else + mpCBXShowGrid->Check(false); + } + } + break; + } +} + +////////////////////////////////////////////////////////////////////////////// + +SfxBindings* CellAppearancePropertyPanel::GetBindings() +{ + return mpBindings; +} + +////////////////////////////////////////////////////////////////////////////// + +void CellAppearancePropertyPanel::SetStyleIcon() +{ + if(mnOut == DEF_LINE_WIDTH_0 && mnIn == 0 && mnDis == 0) //1 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H : maIMGLineStyle1); + else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == 0 && mnDis == 0) //2 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle2H :maIMGLineStyle2); + else if(mnOut == DEF_LINE_WIDTH_3 && mnIn == 0 && mnDis == 0) //3 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle3H :maIMGLineStyle3); + else if(mnOut == DEF_LINE_WIDTH_4 && mnIn == 0 && mnDis == 0) //4 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle4H :maIMGLineStyle4); + else if(mnOut == DEF_DOUBLE_LINE0_OUT && mnIn == DEF_DOUBLE_LINE0_IN && mnDis == DEF_DOUBLE_LINE0_DIST) //5 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle5H :maIMGLineStyle5); + else if(mnOut == DEF_DOUBLE_LINE7_OUT && mnIn == DEF_DOUBLE_LINE7_IN && mnDis == DEF_DOUBLE_LINE7_DIST) //6 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle6H :maIMGLineStyle6); + else if(mnOut == DEF_DOUBLE_LINE4_OUT && mnIn == DEF_DOUBLE_LINE4_IN && mnDis == DEF_DOUBLE_LINE4_DIST) //7 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle7H :maIMGLineStyle7); + else if(mnOut == DEF_DOUBLE_LINE9_OUT && mnIn == DEF_DOUBLE_LINE9_IN && mnDis == DEF_DOUBLE_LINE9_DIST) //8 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle8H :maIMGLineStyle8); + else if(mnOut == DEF_DOUBLE_LINE2_OUT && mnIn == DEF_DOUBLE_LINE2_IN && mnDis == DEF_DOUBLE_LINE2_DIST) //9 + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle9H :maIMGLineStyle9); + else + mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H :maIMGLineStyle1); +} + +////////////////////////////////////////////////////////////////////////////// + +void CellAppearancePropertyPanel::UpdateControlState() +{ + if(mbOuterBorder || mbInnerBorder || mbTLBR || mbBLTR) + { + mpTBLineColor->Enable(); + mpTBLineStyle->Enable(); + + //set line color state + if( mbLineColorAvailable && !mbTLBR && !mbBLTR ) + mpLineColorUpdater->Update(maLineColor); + else if( !mbLineColorAvailable && mbTLBR && !mbBLTR ) + mpLineColorUpdater->Update(maTLBRColor); + else if ( !mbLineColorAvailable && !mbTLBR && mbBLTR ) + mpLineColorUpdater->Update(maBLTRColor); + else if( !mbLineColorAvailable && mbTLBR && mbBLTR) + { + if( maTLBRColor == maBLTRColor) + mpLineColorUpdater->Update(maBLTRColor); + else + mpLineColorUpdater->Update(COL_TRANSPARENT); + } + else if( mbLineColorAvailable && mbTLBR && !mbBLTR ) + { + if( maTLBRColor == maLineColor) + mpLineColorUpdater->Update(maLineColor); + else + mpLineColorUpdater->Update(COL_TRANSPARENT); + } + else if( mbLineColorAvailable && !mbTLBR && mbBLTR ) + { + if( maBLTRColor == maLineColor) + mpLineColorUpdater->Update(maLineColor); + else + mpLineColorUpdater->Update(COL_TRANSPARENT); + } + else + mpLineColorUpdater->Update(COL_TRANSPARENT); + + //set line style state + if( mbBorderStyleAvailable && !mbTLBR && !mbBLTR ) + { + } + else if( !mbBorderStyleAvailable && mbTLBR && !mbBLTR ) + { + mnIn = mnTLBRIn; + mnOut = mnTLBROut; + mnDis = mnTLBRDis; + } + else if ( !mbBorderStyleAvailable && !mbTLBR && mbBLTR ) + { + mnIn = mnBLTRIn; + mnOut = mnBLTROut; + mnDis = mnBLTRDis; + } + else if( !mbBorderStyleAvailable && mbTLBR && mbBLTR) + { + if( mnTLBRIn == mnBLTRIn && mnTLBROut == mnBLTROut && mnTLBRDis == mnBLTRDis) + { + mnIn = mnTLBRIn; + mnOut = mnTLBROut; + mnDis = mnTLBRDis; + } + else + { + mnIn = 0; + mnOut = 0; + mnDis = 0; + } + } + else if( mbBorderStyleAvailable && mbTLBR && !mbBLTR ) + { + if( mnTLBRIn != mnIn || mnTLBROut != mnOut || mnTLBRDis != mnDis) + { + mnIn = 0; + mnOut = 0; + mnDis = 0; + } + } + else if( mbBorderStyleAvailable && !mbTLBR && mbBLTR ) + { + if( mnBLTRIn != mnIn || mnBLTROut != mnOut || mnBLTRDis != mnDis ) + { + mnIn = 0; + mnOut = 0; + mnDis = 0; + } + } + else + { + mnIn = 0; + mnOut = 0; + mnDis = 0; + } + SetStyleIcon(); + } + else + { + mpTBLineColor->Disable(); + mpTBLineStyle->Disable(); + } +} + +////////////////////////////////////////////////////////////////////////////// +// namespace close + +}} // end of namespace ::sc::sidebar + +////////////////////////////////////////////////////////////////////////////// +// eof diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.hrc b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hrc new file mode 100755 index 000000000000..069a5784ce4d --- /dev/null +++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hrc @@ -0,0 +1,149 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#define FT_BK_COLOR 1 +#define TB_BK_COLOR 2 +#define TBI_BK_COLOR 3 +#define FT_BORDER 4 +#define TB_APP_BORDER 5 +#define TBI_BORDER 6 +#define TB_BORDER_LINE_STYLE 7 +#define TBI_LINE_STYLE 8 +#define TB_BORDER_LINE_COLOR 9 +#define TBI_LINE_COLOR 10 +#define CBX_SHOW_GRID 11 + +#define STR_QH_BK_COLOR 12 +#define STR_QH_BORDER 13 +#define STR_QH_BORDER_LINE_STYLE 14 +#define STR_QH_BORDER_LINE_COLOR 15 + +#define IMG_BK_COLOR 21 +#define IMG_CELL_BORDER 22 +#define IMG_LINE_COLOR 23 +#define IMG_LINE_STYLE1 25 +#define IMG_LINE_STYLE2 26 +#define IMG_LINE_STYLE3 27 +#define IMG_LINE_STYLE4 28 +#define IMG_LINE_STYLE5 29 +#define IMG_LINE_STYLE6 30 +#define IMG_LINE_STYLE7 31 +#define IMG_LINE_STYLE8 32 +#define IMG_LINE_STYLE9 33 + +//high contrast +#define IMG_BK_COLOR_H 41 +#define IMG_LINE_STYLE1_H 45 +#define IMG_LINE_STYLE2_H 46 +#define IMG_LINE_STYLE3_H 47 +#define IMG_LINE_STYLE4_H 48 +#define IMG_LINE_STYLE5_H 49 +#define IMG_LINE_STYLE6_H 50 +#define IMG_LINE_STYLE7_H 51 +#define IMG_LINE_STYLE8_H 52 +#define IMG_LINE_STYLE9_H 53 + +//BACK_COLOR PAGE +#define VS_BACK_COLOR 1 +#define STR_AUTOMATICE 2 + +//LINE COLOR PAGE +#define VS_LINE_COLOR 1 + +//line style page +#define VS_STYLE 1 +#define PB_OPTIONS 2 +#define BMP_UNDERLINE_MORE 3 +#define BMP_UNDERLINE_MORE_H 4 + +//line border page +#define TB_BORDER1 1 +#define TB_BORDER2 2 +#define TB_BORDER3 3 + +#define TBI_BORDER1_NONE 7 +#define TBI_BORDER1_ALL 8 +#define TBI_BORDER1_OUTER 9 +#define TBI_BORDER1_OUTERBOLD 10 +#define TBI_BORDER2_LEFT 11 +#define TBI_BORDER2_RIGHT 12 +#define TBI_BORDER2_TOP 13 +#define TBI_BORDER2_BOT 14 +#define TBI_BORDER2_BLTR 15 +#define TBI_BORDER2_TLBR 16 +#define TBI_BORDER2_TOPBOT 17 +#define TBI_BORDER2_LEFTRIGHT 18 +#define TBI_BORDER3_S1 19 +#define TBI_BORDER3_S2 20 +#define TBI_BORDER3_S3 21 +#define TBI_BORDER3_S4 22 +#define FL_1 23 +#define FL_2 24 + +#define IMG_BORDER1 25 +#define IMG_BORDER2 26 +#define IMG_BORDER3 27 +#define IMG_BORDER4 28 +#define IMG_BORDER5 29 +#define IMG_BORDER6 30 +#define IMG_BORDER7 31 +#define IMG_BORDER8 32 +#define IMG_BORDER9 33 +#define IMG_BORDER10 34 +#define IMG_BORDER11 35 +#define IMG_BORDER12 36 +#define IMG_BORDER13 37 +#define IMG_BORDER14 38 +#define IMG_BORDER15 39 +#define IMG_BORDER16 40 + +#define STR_BORDER_1 41 +#define STR_BORDER_2 42 +#define STR_BORDER_3 43 +#define STR_BORDER_4 44 +#define STR_BORDER_5 45 +#define STR_BORDER_6 46 +#define STR_BORDER_7 47 +#define STR_BORDER_8 48 + +//high contrast +#define IMG_BORDER1_H 65 +#define IMG_BORDER2_H 66 +#define IMG_BORDER3_H 67 +#define IMG_BORDER4_H 68 +#define IMG_BORDER5_H 69 +#define IMG_BORDER6_H 70 +#define IMG_BORDER7_H 71 +#define IMG_BORDER8_H 72 +#define IMG_BORDER9_H 73 +#define IMG_BORDER10_H 74 +#define IMG_BORDER11_H 75 +#define IMG_BORDER12_H 76 +#define IMG_BORDER13_H 77 +#define IMG_BORDER14_H 78 +#define IMG_BORDER15_H 79 +#define IMG_BORDER16_H 80 + +#define VS_FILLCOLOR 1 +#define VS_NOFILLCOLOR 2 +#define VS_LINECOLOR 1 + +// eof diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx new file mode 100755 index 000000000000..bb5bc321796e --- /dev/null +++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx @@ -0,0 +1,214 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_PROPERTYPANEL_APPEARANCE_HXX +#define SC_PROPERTYPANEL_APPEARANCE_HXX + +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/IContextChangeReceiver.hxx> +#include <boost/scoped_ptr.hpp> +#include <svx/sidebar/ColorPopup.hxx> + +class FixedText; +namespace svx { class ToolboxButtonColorUpdater; } +namespace sc { namespace sidebar { + class CellLineStylePopup; + class CellBorderStylePopup; + class CellLineStyleControl; + class CellBorderUpdater; +}} +class ToolBox; +class CheckBox; + +namespace sc { namespace sidebar { + +class CellAppearancePropertyPanel +: public Control, + public ::sfx2::sidebar::IContextChangeReceiver, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +private: + friend class CellLineStyleControl; + friend class CellBorderStyleControl; + +public: + static CellAppearancePropertyPanel* Create( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + + virtual void DataChanged( + const DataChangedEvent& rEvent); + + virtual void HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + SfxBindings* GetBindings(); + +private: + //ui controls + ::boost::scoped_ptr< FixedText > mpFTFillColor; + ::boost::scoped_ptr< Window > mpTBFillColorBackground; + ::boost::scoped_ptr< ToolBox > mpTBFillColor; + ::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > mpFillColorUpdater; + + ::boost::scoped_ptr< FixedText > mpFTCellBorder; + ::boost::scoped_ptr< Window > mpTBCellBorderBackground; + ::boost::scoped_ptr< ToolBox > mpTBCellBorder; + ::boost::scoped_ptr< CellBorderUpdater > mpCellBorderUpdater; + + ::boost::scoped_ptr< Window > mpTBLineStyleBackground; + ::boost::scoped_ptr< ToolBox > mpTBLineStyle; + + ::boost::scoped_ptr< Window > mpTBLineColorBackground; + ::boost::scoped_ptr< ToolBox > mpTBLineColor; + ::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > mpLineColorUpdater; + + ::boost::scoped_ptr< CheckBox > mpCBXShowGrid; + + ::sfx2::sidebar::ControllerItem maBackColorControl; + ::sfx2::sidebar::ControllerItem maLineColorControl; + ::sfx2::sidebar::ControllerItem maLineStyleControl; + ::sfx2::sidebar::ControllerItem maBorderOuterControl; + ::sfx2::sidebar::ControllerItem maBorderInnerControl; + ::sfx2::sidebar::ControllerItem maGridShowControl; + ::sfx2::sidebar::ControllerItem maBorderTLBRControl; + ::sfx2::sidebar::ControllerItem maBorderBLTRControl; + + // images + Image maIMGBKColor; + Image maIMGCellBorder; + Image maIMGLineColor; + Image maIMGLineStyle1; + Image maIMGLineStyle2; + Image maIMGLineStyle3; + Image maIMGLineStyle4; + Image maIMGLineStyle5; + Image maIMGLineStyle6; + Image maIMGLineStyle7; + Image maIMGLineStyle8; + Image maIMGLineStyle9; + + // high contrast images + Image maIMGBKColorH; + Image maIMGLineStyle0H; + Image maIMGLineStyle1H; + Image maIMGLineStyle2H; + Image maIMGLineStyle3H; + Image maIMGLineStyle4H; + Image maIMGLineStyle5H; + Image maIMGLineStyle6H; + Image maIMGLineStyle7H; + Image maIMGLineStyle8H; + Image maIMGLineStyle9H; + + // cell background color + Color maBackColor; + + // cell line color(s) + Color maLineColor; + Color maTLBRColor; + Color maBLTRColor; + + // BorderStyle defines + sal_uInt16 mnIn; + sal_uInt16 mnOut; + sal_uInt16 mnDis; + sal_uInt16 mnTLBRIn; + sal_uInt16 mnTLBROut; + sal_uInt16 mnTLBRDis; + sal_uInt16 mnBLTRIn; + sal_uInt16 mnBLTROut; + sal_uInt16 mnBLTRDis; + + /// bitfield + bool mbBackColorAvailable : 1; + bool mbLineColorAvailable : 1; + bool mbBorderStyleAvailable : 1; + + // CellBorder defines + bool mbLeft : 1; + bool mbRight : 1; + bool mbTop : 1; + bool mbBottom : 1; + bool mbVer : 1; + bool mbHor : 1; + + bool mbOuterBorder : 1; // mbLeft || mbRight || mbTop || mbBottom + bool mbInnerBorder : 1; // mbVer || mbHor || bLeft || bRight || bTop || bBottom + + bool mbTLBR : 1; + bool mbBLTR : 1; + + // popups + svx::sidebar::ColorPopup maFillColorPopup; + svx::sidebar::ColorPopup maLineColorPopup; + ::boost::scoped_ptr< CellLineStylePopup > mpCellLineStylePopup; + ::boost::scoped_ptr< CellBorderStylePopup > mpCellBorderStylePopup; + + cssu::Reference<css::frame::XFrame> mxFrame; + ::sfx2::sidebar::EnumContext maContext; + SfxBindings* mpBindings; + + DECL_LINK(TbxBKColorSelectHdl, ToolBox*); + DECL_LINK(TbxLineColorSelectHdl, ToolBox*); + DECL_LINK(TbxCellBorderSelectHdl, ToolBox*); + DECL_LINK(TbxLineStyleSelectHdl, ToolBox*); + DECL_LINK(CBOXGridShowClkHdl, void*); + + // for fill color picker + svx::sidebar::PopupControl* CreateFillColorPopupControl(svx::sidebar::PopupContainer* pParent); + void SetFillColor(const String& rsColorName, const Color aColor); + + // for line color picker + svx::sidebar::PopupControl* CreateLineColorPopupControl(svx::sidebar::PopupContainer* pParent); + void SetLineColor(const String& rsColorName, const Color aColor); + + // for CellLineStyle popup + svx::sidebar::PopupControl* CreateCellLineStylePopupControl(svx::sidebar::PopupContainer* pParent); + void EndCellLineStylePopupMode(void); + + // for CellBorderStyle popup + svx::sidebar::PopupControl* CreateCellBorderStylePopupControl(svx::sidebar::PopupContainer* pParent); + void EndCellBorderStylePopupMode(void); + + // constructor/destuctor + CellAppearancePropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + virtual ~CellAppearancePropertyPanel(); + + void Initialize(); + void SetStyleIcon(); + void UpdateControlState(); +}; + +} } // end of namespace ::sc::sidebar + +#endif +// eof diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.src b/sc/source/ui/sidebar/CellAppearancePropertyPanel.src new file mode 100755 index 000000000000..a6ae7eb65272 --- /dev/null +++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.src @@ -0,0 +1,612 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "CellAppearancePropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include "sc.hrc" +#include "helpids.h" + +#define TOOLBOX_WIDTH 50 +#define TOOLBOX_HEIGHT 15 + +#define TOOLBOX_WIDTH_2 34 +#define TOOLBOX_HEIGHT_2 30 + +#define TOOLBOX_BORDER_WIDTH 107 +#define PB_BORDER_MOREBTN 57 +#define POPUPPANEL_MARGIN_SMALL_PIXEL 8 + +////////////////////////////////////////////////////////////////////////////// +// the basic propertypanel + +Control RID_PROPERTYPANEL_SC_APPEAR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 + TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT_2 + CBOX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT - 2); + HelpID = HID_PROPERTYPANEL_SC_CELL_SECTION ; + Text [ en-US ] = "Cell Appearance"; + + FixedText FT_BK_COLOR + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT ( PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL * 2 , TEXT_HEIGHT) ; + Text [ en-US ] = "~Cell background:"; + }; + ToolBox TB_BK_COLOR + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT ) ; + TabStop = TRUE ; + HelpID = HID_PROPERTYPANEL_SC_TBX_BKCOLOR ; + Text [ en-US ] = "Cell Background"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_BK_COLOR ; + DropDown = TRUE ; + Text [ en-US ] = "Cell background" ; + HelpID = HID_PROPERTYPANEL_SC_TBI_BKCOLOR; + }; + }; + }; + String STR_QH_BK_COLOR + { + Text [ en-US ] = "Select the background color of the selected cells." ; + }; + FixedText FT_BORDER + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL); + Size = MAP_APPFONT ( PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL * 2 , TEXT_HEIGHT) ; + Text [ en-US ] = "Cell ~border:"; + }; + ToolBox TB_APP_BORDER + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 + TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH_2 ,TOOLBOX_HEIGHT_2 ) ; + TabStop = TRUE ; + HelpID = HID_PROPERTYPANEL_SC_TBX_BORDER ; + Text [ en-US ] = "Cell Border"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_BORDER ; + DropDown = TRUE ; + Text [ en-US ] = "Cell border" ; + HelpID = HID_PROPERTYPANEL_SC_TBI_BORDER; + }; + }; + }; + String STR_QH_BORDER + { + Text [ en-US ] = "Specify the borders of the selected cells." ; + }; + ToolBox TB_BORDER_LINE_STYLE + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH_2 + 3, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 + TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL ) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT) ; + TabStop = TRUE ; + HelpID = HID_PROPERTYPANEL_SC_TBX_STYLE ; + Text [ en-US ] = "Line Style"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_LINE_STYLE ; + DropDown = TRUE ; + Text [ en-US ] = "Line style" ; + HelpID = HID_PROPERTYPANEL_SC_TBI_STYLE; + }; + }; + }; + String STR_QH_BORDER_LINE_STYLE + { + Text [ en-US ] = "Select the line style of the borders." ; + }; + ToolBox TB_BORDER_LINE_COLOR + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH_2 + 3, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 + TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT * 2 + CONTROL_SPACING_VERTICAL + 3) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT ) ; + TabStop = TRUE ; + HelpID = HID_PROPERTYPANEL_SC_TBX_LINECOLOR ; + Text [ en-US ] = "Line Color"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_LINE_COLOR ; + DropDown = TRUE ; + Text [ en-US ] = "Line color" ; + HelpID = HID_PROPERTYPANEL_SC_TBI_LINECOLOR; + }; + }; + }; + String STR_QH_BORDER_LINE_COLOR + { + Text [ en-US ] = "Select the line color of the borders." ; + }; + CheckBox CBX_SHOW_GRID + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT * 2 + TEXT_CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL * 2 + TOOLBOX_HEIGHT_2 + 2) ; + Size = MAP_APPFONT ( 90 , CBOX_HEIGHT ) ; + TabStop = TRUE ; + Text [ en-US ] = "Show cell ~grid lines" ; + QuickHelpText [ en-US ] = "Show the grid lines of the cells in the entire spreadsheet."; + HelpID = HID_PROPERTYPANEL_SC_CBOX_SHOWGRID; + }; + + Image IMG_BK_COLOR + { + ImageBitmap = Bitmap{File = "sidebar/fill_color.png";}; + }; + Image IMG_CELL_BORDER + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder.png";}; + //MaskColor = STD_MASKCOLOR ; + }; + Image IMG_LINE_COLOR + { + ImageBitmap = Bitmap{File = "sidebar/Line_color.png";}; + }; + Image IMG_LINE_STYLE1 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_005.png";}; + }; + Image IMG_LINE_STYLE2 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_250.png";}; + }; + Image IMG_LINE_STYLE3 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_400.png";}; + }; + Image IMG_LINE_STYLE4 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_500.png";}; + }; + Image IMG_LINE_STYLE5 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_110.png";}; + }; + Image IMG_LINE_STYLE6 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_260.png";}; + }; + Image IMG_LINE_STYLE7 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_450.png";}; + }; + Image IMG_LINE_STYLE8 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_505.png";}; + }; + Image IMG_LINE_STYLE9 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_750.png";}; + }; + + //high contrast + Image IMG_BK_COLOR_H + { + ImageBitmap = Bitmap{File = "sidebar/fill_color_h.png";}; + }; + Image IMG_LINE_STYLE1_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_005_h.png";}; + }; + Image IMG_LINE_STYLE2_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_250_h.png";}; + }; + Image IMG_LINE_STYLE3_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_400_h.png";}; + }; + Image IMG_LINE_STYLE4_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_500_h.png";}; + }; + Image IMG_LINE_STYLE5_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_110_h.png";}; + }; + Image IMG_LINE_STYLE6_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_260_h.png";}; + }; + Image IMG_LINE_STYLE7_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_450_h.png";}; + }; + Image IMG_LINE_STYLE8_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_505_h.png";}; + }; + Image IMG_LINE_STYLE9_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorderLineStyle_750_h.png";}; + }; + +}; + +////////////////////////////////////////////////////////////////////////////// +// fill color popup + +Control RID_POPUPPANEL_CELLAPPEARANCE_FILLCOLOR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT ); + + Control VS_FILLCOLOR + { + HelpID = HID_PROPERTYPANEL_FILL_COLOR_VS; + Hide = TRUE ; + Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y ); + Size = MAP_APPFONT ( POPUP_COLOR_PICKER_WIDTH - OFFSET_X * 2, POPUP_COLOR_PICKER_HEIGHT - OFFSET_Y * 2); + TabStop = TRUE ; + Text [ en-US ] = "Color"; + }; + + String VS_NOFILLCOLOR + { + Text [ en-US ] = "No Color" ; + }; +}; + +////////////////////////////////////////////////////////////////////////////// +// line color popup + +Control RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT ); + + Control VS_LINECOLOR + { + HelpID = HID_PROPERTYPANEL_LINE_COLOR_VS; + Hide = TRUE ; + Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y ); + Size = MAP_APPFONT ( POPUP_COLOR_PICKER_WIDTH - OFFSET_X * 2, POPUP_COLOR_PICKER_HEIGHT - OFFSET_Y * 2); + TabStop = TRUE ; + Text [ en-US ] = "Color"; + }; +}; + +////////////////////////////////////////////////////////////////////////////// +// cell line style popup + +Control RID_POPUPPANEL_APPEARANCE_CELL_LINESTYLE +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( + POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + 80, + 13 + POPUP_BORDER_HEIGHT + POPUPPANEL_MARGIN_SMALL * 2 + POPUPPANEL_MARGIN_LARGE + 12*9); + + Control VS_STYLE + { + HelpID = HID_PROPERTYPANEL_SC_STYLE_VS ; + Hide = TRUE ; + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); + Size = MAP_APPFONT ( 80 , 12 * 9); + TabStop = TRUE ; + Text [ en-US ] = "Line Style"; + }; + PushButton PB_OPTIONS + { + HelpID = HID_PROPERTYPANEL_SC_STYLE_PB; + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_LARGE + OFFSET_X , POPUPPANEL_MARGIN_SMALL * 2 + OFFSET_Y + 12 * 9); + Size = MAP_APPFONT ( 75 , 12 ); + TabStop = TRUE; + Text [ en-US ] = "~More Options..."; + }; + Bitmap BMP_UNDERLINE_MORE + { + File = "sidebar/morebutton.png"; + }; + Bitmap BMP_UNDERLINE_MORE_H + { + File = "sidebar/morebutton_h.png"; + }; +}; + +////////////////////////////////////////////////////////////////////////////// +// cell border style popup + +Control RID_POPUPPANEL_APPEARANCE_CELL_BORDERSTYLE +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_PIXEL( POPUPPANEL_MARGIN_SMALL_PIXEL * 2 + 108, POPUPPANEL_MARGIN_SMALL_PIXEL * 2 + 138); + + ToolBox TB_BORDER1 + { + SVLook = TRUE ; + Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL); //MAP_APPFONT (POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1, POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 1) ; + Size = MAP_PIXEL(TOOLBOX_BORDER_WIDTH, 31); //MAP_APPFONT (TOOLBOX_BORDER_WIDTH ,20) ; + TabStop = TRUE ; + HelpID = HID_PROPERTYPANEL_SC_BORDER1_TBX; + Text [ en-US ] = "Cell Border 1"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_BORDER1_NONE ; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_NONE; + Text [ en-US ] = "No Border" ; + }; + ToolBoxItem + { + Identifier = TBI_BORDER1_ALL ; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_ALL; + Text [ en-US ] = "All Borders" ; + }; + ToolBoxItem + { + Identifier = TBI_BORDER1_OUTER ; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_OUTER; + Text [ en-US ] = "Outside Borders" ; + }; + ToolBoxItem + { + Identifier = TBI_BORDER1_OUTERBOLD ; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_OUTERBOLD; + Text [ en-US ] = "Thick Box Border" ; + }; + }; + }; + FixedLine FL_1 + { + Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31); //MAP_APPFONT ( POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1 , POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 1) ; + Size = MAP_PIXEL(TOOLBOX_BORDER_WIDTH, 8); // MAP_APPFONT ( TOOLBOX_BORDER_WIDTH , 5 ) ; + }; + ToolBox TB_BORDER2 + { + SVLook = TRUE ; + Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31 + 8); // MAP_APPFONT (POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1, POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 5 + 1) ; + Size = MAP_PIXEL (TOOLBOX_BORDER_WIDTH ,61) ; + TabStop = TRUE ; + HelpID = HID_PROPERTYPANEL_SC_BORDER2_TBX; + Text [ en-US ] = "Cell Border 2"; + }; + FixedLine FL_2 + { + Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31 + 8 + 61); // MAP_APPFONT ( POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1 , POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 38 + 5 + 1) ; + Size = MAP_PIXEL ( TOOLBOX_BORDER_WIDTH , 8 ) ; + }; + ToolBox TB_BORDER3 + { + SVLook = TRUE ; + Pos = MAP_PIXEL(POPUPPANEL_MARGIN_SMALL_PIXEL, POPUPPANEL_MARGIN_SMALL_PIXEL + 31 +8 + 61 + 8); // MAP_APPFONT (POPUPPANEL_MARGIN_SMALL + OFFSET_X + 1, POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 20 + 38 + 10 + 1) ; + Size = MAP_PIXEL (TOOLBOX_BORDER_WIDTH ,31) ; + TabStop = TRUE ; + HelpID = HID_PROPERTYPANEL_SC_BORDER3_TBX; + Text [ en-US ] = "Cell Border 3"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_BORDER3_S1; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S1; + Text [ en-US ] = "Thick Bottom Border" ; + }; + ToolBoxItem + { + Identifier = TBI_BORDER3_S2 ; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S2; + Text [ en-US ] = "Double Bottom Border" ; + }; + ToolBoxItem + { + Identifier = TBI_BORDER3_S3 ; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S3; + Text [ en-US ] = "Top and Thick Bottom Borders" ; + }; + ToolBoxItem + { + Identifier = TBI_BORDER3_S4 ; + HelpID = HID_PROPERTYPANEL_SC_BORDER_TBI_S4; + Text [ en-US ] = "Top and Double Bottom Borders" ; + }; + }; + }; + + Image IMG_BORDER1 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Empty_18x18.png";}; + }; + Image IMG_BORDER2 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_All_18x18.png";}; + }; + Image IMG_BORDER3 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_18x18.png";}; + }; + Image IMG_BORDER4 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_Thick_18x18.png";}; + }; + Image IMG_BORDER5 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Left_18x18.png";}; + }; + Image IMG_BORDER6 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Right_18x18.png";}; + }; + Image IMG_BORDER7 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Top_18x18.png";}; + }; + Image IMG_BORDER8 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_18x18.png";}; + }; + Image IMG_BORDER9 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_RightDiagonal_18x18.png";}; + }; + Image IMG_BORDER10 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftDiagonal_18x18.png";}; + }; + Image IMG_BORDER11 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopAndBottom_18x18.png";}; + }; + Image IMG_BORDER12 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftAndRight_18x18.png";}; + }; + Image IMG_BORDER13 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Thick_18x18.png";}; + }; + Image IMG_BORDER14 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Double_18x18.png";}; + }; + Image IMG_BORDER15 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopThin_BottomThick_18x18.png";}; + }; + Image IMG_BORDER16 + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopSingle_BottomDouble_18x18.png";}; + }; + String STR_BORDER_1 + { + Text [ en-US ] = "Left Border"; + }; + String STR_BORDER_2 + { + Text [ en-US ] = "Right Border"; + }; + String STR_BORDER_3 + { + Text [ en-US ] = "Top Border"; + }; + String STR_BORDER_4 + { + Text [ en-US ] = "Bottom Border"; + }; + String STR_BORDER_5 + { + Text [ en-US ] = "Diagonal Up Border"; + }; + String STR_BORDER_6 + { + Text [ en-US ] = "Diagonal Down Border"; + }; + String STR_BORDER_7 + { + Text [ en-US ] = "Top and Bottom Borders"; + }; + String STR_BORDER_8 + { + Text [ en-US ] = "Left and Right Borders"; + }; + + //high contrast + Image IMG_BORDER1_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Empty_18x18_h.png";}; + }; + Image IMG_BORDER2_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_All_18x18_h.png";}; + }; + Image IMG_BORDER3_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_18x18_h.png";}; + }; + Image IMG_BORDER4_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_FourBorders_Thick_18x18_h.png";}; + }; + Image IMG_BORDER5_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Left_18x18_h.png";}; + }; + Image IMG_BORDER6_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Right_18x18_h.png";}; + }; + Image IMG_BORDER7_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Top_18x18_h.png";}; + }; + Image IMG_BORDER8_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_18x18_h.png";}; + }; + Image IMG_BORDER9_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_RightDiagonal_18x18_h.png";}; + }; + Image IMG_BORDER10_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftDiagonal_18x18_h.png";}; + }; + Image IMG_BORDER11_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopAndBottom_18x18_h.png";}; + }; + Image IMG_BORDER12_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_LeftAndRight_18x18_h.png";}; + }; + Image IMG_BORDER13_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Thick_18x18_h.png";}; + }; + Image IMG_BORDER14_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_Bottom_Double_18x18_h.png";}; + }; + Image IMG_BORDER15_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopThin_BottomThick_18x18_h.png";}; + }; + Image IMG_BORDER16_H + { + ImageBitmap = Bitmap{File = "sidebar/CellBorder_TopSingle_BottomDouble_18x18_h.png";}; + }; +}; + +// eof diff --git a/sc/source/ui/sidebar/CellBorderStyleControl.cxx b/sc/source/ui/sidebar/CellBorderStyleControl.cxx new file mode 100755 index 000000000000..1503b26d603d --- /dev/null +++ b/sc/source/ui/sidebar/CellBorderStyleControl.cxx @@ -0,0 +1,364 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include <CellBorderStyleControl.hxx> +#include "sc.hrc" +#include "scresid.hxx" +#include <CellAppearancePropertyPanel.hrc> +#include <editeng/boxitem.hxx> +#include <editeng/bolnitem.hxx> +#include <CellAppearancePropertyPanel.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <vcl/svapp.hxx> + +namespace sc { namespace sidebar { + +#define FRM_VALID_LEFT 0x01 +#define FRM_VALID_RIGHT 0x02 +#define FRM_VALID_TOP 0x04 +#define FRM_VALID_BOTTOM 0x08 +#define FRM_VALID_HINNER 0x10 +#define FRM_VALID_VINNER 0x20 +#define FRM_VALID_OUTER 0x0f +#define FRM_VALID_ALL 0xff + +CellBorderStyleControl::CellBorderStyleControl(Window* pParent, CellAppearancePropertyPanel& rPanel) +: svx::sidebar::PopupControl(pParent, ScResId(RID_POPUPPANEL_APPEARANCE_CELL_BORDERSTYLE)), + mrCellAppearancePropertyPanel(rPanel), + maTBBorder1(this, ScResId(TB_BORDER1)), + maTBBorder2(this, ScResId(TB_BORDER2)), + maTBBorder3(this, ScResId(TB_BORDER3)), + maFL1(this, ScResId(FL_1)), + maFL2(this, ScResId(FL_2)), + mpImageList(0), + mpImageListH(0) +{ + Initialize(); + FreeResource(); +} + +CellBorderStyleControl::~CellBorderStyleControl(void) +{ + delete[] mpImageList; + delete[] mpImageListH; +} + +void CellBorderStyleControl::Initialize() +{ + mpImageList = new Image[16]; + mpImageList[0] = Image(ScResId(IMG_BORDER1)); + mpImageList[1] = Image(ScResId(IMG_BORDER2)); + mpImageList[2] = Image(ScResId(IMG_BORDER3)); + mpImageList[3] = Image(ScResId(IMG_BORDER4)); + mpImageList[4] = Image(ScResId(IMG_BORDER5)); + mpImageList[5] = Image(ScResId(IMG_BORDER6)); + mpImageList[6] = Image(ScResId(IMG_BORDER7)); + mpImageList[7] = Image(ScResId(IMG_BORDER8)); + mpImageList[8] = Image(ScResId(IMG_BORDER9)); + mpImageList[9] = Image(ScResId(IMG_BORDER10)); + mpImageList[10] = Image(ScResId(IMG_BORDER11)); + mpImageList[11] = Image(ScResId(IMG_BORDER12)); + mpImageList[12] = Image(ScResId(IMG_BORDER13)); + mpImageList[13] = Image(ScResId(IMG_BORDER14)); + mpImageList[14] = Image(ScResId(IMG_BORDER15)); + mpImageList[15] = Image(ScResId(IMG_BORDER16)); + + //high contrast + mpImageListH = new Image[16]; + mpImageListH[0] = Image(ScResId(IMG_BORDER1_H)); + mpImageListH[1] = Image(ScResId(IMG_BORDER2_H)); + mpImageListH[2] = Image(ScResId(IMG_BORDER3_H)); + mpImageListH[3] = Image(ScResId(IMG_BORDER4_H)); + mpImageListH[4] = Image(ScResId(IMG_BORDER5_H)); + mpImageListH[5] = Image(ScResId(IMG_BORDER6_H)); + mpImageListH[6] = Image(ScResId(IMG_BORDER7_H)); + mpImageListH[7] = Image(ScResId(IMG_BORDER8_H)); + mpImageListH[8] = Image(ScResId(IMG_BORDER9_H)); + mpImageListH[9] = Image(ScResId(IMG_BORDER10_H)); + mpImageListH[10] = Image(ScResId(IMG_BORDER11_H)); + mpImageListH[11] = Image(ScResId(IMG_BORDER12_H)); + mpImageListH[12] = Image(ScResId(IMG_BORDER13_H)); + mpImageListH[13] = Image(ScResId(IMG_BORDER14_H)); + mpImageListH[14] = Image(ScResId(IMG_BORDER15_H)); + mpImageListH[15] = Image(ScResId(IMG_BORDER16_H)); + + maTBBorder1.SetItemImage(TBI_BORDER1_NONE, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[0] : mpImageList[0]); + maTBBorder1.SetItemImage(TBI_BORDER1_ALL, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[1] : mpImageList[1]); + maTBBorder1.SetItemImage(TBI_BORDER1_OUTER, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[2] : mpImageList[2]); + maTBBorder1.SetItemImage(TBI_BORDER1_OUTERBOLD, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[3] : mpImageList[3]); + maTBBorder1.SetBackground(Wallpaper()); + maTBBorder1.SetPaintTransparent(true); + Size aTbxSize( maTBBorder1.CalcWindowSizePixel() ); + maTBBorder1.SetOutputSizePixel( aTbxSize ); + Link aLink = LINK(this, CellBorderStyleControl, TB1SelectHdl); + maTBBorder1.SetSelectHdl ( aLink ); + + maTBBorder2.SetLineCount(2); + maTBBorder2.InsertItem(TBI_BORDER2_LEFT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[4] : mpImageList[4]); + maTBBorder2.InsertItem(TBI_BORDER2_RIGHT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[5] : mpImageList[5]); + maTBBorder2.InsertItem(TBI_BORDER2_TOP, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[6] : mpImageList[6]); + maTBBorder2.InsertItem(TBI_BORDER2_BOT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[7] : mpImageList[7]); + maTBBorder2.InsertBreak(); + maTBBorder2.InsertItem(TBI_BORDER2_BLTR, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[8] : mpImageList[8]); + maTBBorder2.InsertItem(TBI_BORDER2_TLBR, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[9] : mpImageList[9]); + maTBBorder2.InsertItem(TBI_BORDER2_TOPBOT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[10] : mpImageList[10]); + maTBBorder2.InsertItem(TBI_BORDER2_LEFTRIGHT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[11] : mpImageList[11]); + maTBBorder2.SetBackground(Wallpaper()); + maTBBorder2.SetPaintTransparent(true); + aTbxSize = maTBBorder2.CalcWindowSizePixel() ; + maTBBorder2.SetOutputSizePixel( aTbxSize ); + maTBBorder2.SetHelpId(TBI_BORDER2_LEFT, HID_PROPERTYPANEL_SC_BORDER_TBI_LEFT); + maTBBorder2.SetHelpId(TBI_BORDER2_RIGHT, HID_PROPERTYPANEL_SC_BORDER_TBI_RIGHT); + maTBBorder2.SetHelpId(TBI_BORDER2_TOP, HID_PROPERTYPANEL_SC_BORDER_TBI_TOP); + maTBBorder2.SetHelpId(TBI_BORDER2_BOT, HID_PROPERTYPANEL_SC_BORDER_TBI_BOT); + maTBBorder2.SetHelpId(TBI_BORDER2_BLTR, HID_PROPERTYPANEL_SC_BORDER_TBI_BLTR); + maTBBorder2.SetHelpId(TBI_BORDER2_TLBR, HID_PROPERTYPANEL_SC_BORDER_TBI_TLBR); + maTBBorder2.SetHelpId(TBI_BORDER2_TOPBOT, HID_PROPERTYPANEL_SC_BORDER_TBI_TOPBOT); + maTBBorder2.SetHelpId(TBI_BORDER2_LEFTRIGHT, HID_PROPERTYPANEL_SC_BORDER_TBI_LEFTRIGHT); + maTBBorder2.SetItemText(TBI_BORDER2_LEFT, ScResId(STR_BORDER_1)); + maTBBorder2.SetItemText(TBI_BORDER2_RIGHT, ScResId(STR_BORDER_2)); + maTBBorder2.SetItemText(TBI_BORDER2_TOP, ScResId(STR_BORDER_3)); + maTBBorder2.SetItemText(TBI_BORDER2_BOT, ScResId(STR_BORDER_4)); + maTBBorder2.SetItemText(TBI_BORDER2_BLTR, ScResId(STR_BORDER_5)); + maTBBorder2.SetItemText(TBI_BORDER2_TLBR, ScResId(STR_BORDER_6)); + maTBBorder2.SetItemText(TBI_BORDER2_TOPBOT, ScResId(STR_BORDER_7)); + maTBBorder2.SetItemText(TBI_BORDER2_LEFTRIGHT, ScResId(STR_BORDER_8)); + aLink = LINK(this, CellBorderStyleControl, TB2SelectHdl); + maTBBorder2.SetSelectHdl ( aLink ); + + maTBBorder3.SetItemImage(TBI_BORDER3_S1, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[12] : mpImageList[12]); + maTBBorder3.SetItemImage(TBI_BORDER3_S2, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[13] : mpImageList[13]); + maTBBorder3.SetItemImage(TBI_BORDER3_S3, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[14] : mpImageList[14]); + maTBBorder3.SetItemImage(TBI_BORDER3_S4, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[15] : mpImageList[15]); + maTBBorder3.SetBackground(Wallpaper()); + maTBBorder3.SetPaintTransparent(true); + aTbxSize = maTBBorder3.CalcWindowSizePixel() ; + maTBBorder3.SetOutputSizePixel( aTbxSize ); + aLink = LINK(this, CellBorderStyleControl, TB3SelectHdl); + maTBBorder3.SetSelectHdl ( aLink ); +} + +IMPL_LINK(CellBorderStyleControl, TB1SelectHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + ::Color aColBlack( COL_BLACK ); + SvxBoxItem aBorderOuter( SID_ATTR_BORDER_OUTER ); + SvxBoxInfoItem aBorderInner( SID_ATTR_BORDER_INNER ); + SvxBorderLine theDefLine(NULL,1, 0, 0); + SvxBorderLine *pLeft = 0, *pRight = 0, *pTop = 0, *pBottom = 0; + sal_uInt8 nValidFlags = 0; + switch ( nId ) + { + case TBI_BORDER1_NONE: + { + nValidFlags |= FRM_VALID_ALL; + SvxLineItem aLineItem1( SID_ATTR_BORDER_DIAG_BLTR ); + SvxLineItem aLineItem2( SID_ATTR_BORDER_DIAG_TLBR ); + aLineItem1.SetLine( NULL ); //modify + aLineItem2.SetLine( NULL ); //modify + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_BLTR, SFX_CALLMODE_RECORD, &aLineItem1, 0L); + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_TLBR, SFX_CALLMODE_RECORD, &aLineItem2, 0L); + } + break; + case TBI_BORDER1_ALL: + pLeft = pRight = pTop = pBottom = &theDefLine; + aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_HORI ); + aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_VERT ); + nValidFlags |= FRM_VALID_ALL; + break; + case TBI_BORDER1_OUTER: + pLeft = pRight = pTop = pBottom = &theDefLine; + nValidFlags |= FRM_VALID_OUTER; + break; + case TBI_BORDER1_OUTERBOLD: + theDefLine.SetOutWidth(DEF_LINE_WIDTH_2); + pLeft = pRight = pTop = pBottom = &theDefLine; + nValidFlags |= FRM_VALID_OUTER; + break; + } + + aBorderOuter.SetLine( pLeft, BOX_LINE_LEFT ); + aBorderOuter.SetLine( pRight, BOX_LINE_RIGHT ); + aBorderOuter.SetLine( pTop, BOX_LINE_TOP ); + aBorderOuter.SetLine( pBottom, BOX_LINE_BOTTOM ); + + aBorderInner.SetValid( VALID_TOP, 0 != (nValidFlags&FRM_VALID_TOP )); + aBorderInner.SetValid( VALID_BOTTOM, 0 != (nValidFlags&FRM_VALID_BOTTOM )); + aBorderInner.SetValid( VALID_LEFT, 0 != (nValidFlags&FRM_VALID_LEFT)); + aBorderInner.SetValid( VALID_RIGHT, 0 != (nValidFlags&FRM_VALID_RIGHT )); + aBorderInner.SetValid( VALID_HORI, 0 != (nValidFlags&FRM_VALID_HINNER )); + aBorderInner.SetValid( VALID_VERT, 0 != (nValidFlags&FRM_VALID_VINNER)); + aBorderInner.SetValid( VALID_DISTANCE, true ); + aBorderInner.SetValid( VALID_DISABLE, false ); + + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER, SFX_CALLMODE_RECORD, &aBorderOuter, &aBorderInner, 0L); + mrCellAppearancePropertyPanel.EndCellBorderStylePopupMode(); + return 0; +} + +IMPL_LINK(CellBorderStyleControl, TB2SelectHdl, ToolBox *, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + + if( nId != TBI_BORDER2_BLTR && nId != TBI_BORDER2_TLBR ) + { + ::Color aColBlack( COL_BLACK ); + SvxBoxItem aBorderOuter( SID_ATTR_BORDER_OUTER ); + SvxBoxInfoItem aBorderInner( SID_ATTR_BORDER_INNER ); + SvxBorderLine theDefLine(NULL, 1, 0, 0); + SvxBorderLine *pLeft = 0, + *pRight = 0, + *pTop = 0, + *pBottom = 0; + sal_uInt8 nValidFlags = 0; + switch ( nId ) + { + case TBI_BORDER2_LEFT: + pLeft = &theDefLine; + nValidFlags |= FRM_VALID_LEFT; + break; + case TBI_BORDER2_RIGHT: + // + if(!Application::GetSettings().GetLayoutRTL()) + { + pRight = &theDefLine; + nValidFlags |= FRM_VALID_RIGHT; + } + else + { + pLeft = &theDefLine; + nValidFlags |= FRM_VALID_LEFT; + } + break; + case TBI_BORDER2_TOP: + pTop = &theDefLine; + nValidFlags |= FRM_VALID_TOP; + break; + case TBI_BORDER2_BOT: + pBottom = &theDefLine; + nValidFlags |= FRM_VALID_BOTTOM; + break; + case TBI_BORDER2_TOPBOT: + pTop = pBottom = &theDefLine; + nValidFlags |= FRM_VALID_BOTTOM|FRM_VALID_TOP; + break; + case TBI_BORDER2_LEFTRIGHT: + pLeft = pRight = &theDefLine; + nValidFlags |= FRM_VALID_RIGHT|FRM_VALID_LEFT; + break; + } + aBorderOuter.SetLine( pLeft, BOX_LINE_LEFT ); + aBorderOuter.SetLine( pRight, BOX_LINE_RIGHT ); + aBorderOuter.SetLine( pTop, BOX_LINE_TOP ); + aBorderOuter.SetLine( pBottom, BOX_LINE_BOTTOM ); + + aBorderInner.SetValid( VALID_TOP, 0 != (nValidFlags&FRM_VALID_TOP )); + aBorderInner.SetValid( VALID_BOTTOM, 0 != (nValidFlags&FRM_VALID_BOTTOM )); + aBorderInner.SetValid( VALID_LEFT, 0 != (nValidFlags&FRM_VALID_LEFT)); + aBorderInner.SetValid( VALID_RIGHT, 0 != (nValidFlags&FRM_VALID_RIGHT )); + aBorderInner.SetValid( VALID_HORI, 0 != (nValidFlags&FRM_VALID_HINNER )); + aBorderInner.SetValid( VALID_VERT, 0 != (nValidFlags&FRM_VALID_VINNER)); + aBorderInner.SetValid( VALID_DISTANCE, true ); + aBorderInner.SetValid( VALID_DISABLE, false ); + + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER, SFX_CALLMODE_RECORD, &aBorderOuter, &aBorderInner, 0L); + } + else if(nId == TBI_BORDER2_BLTR) + { + SvxBorderLine aTmp( NULL, 1, 0, 0 ); + SvxLineItem aLineItem( SID_ATTR_BORDER_DIAG_BLTR ); + aLineItem.SetLine( &aTmp ); + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_BLTR, SFX_CALLMODE_RECORD, &aLineItem, 0L); + } + else if(nId == TBI_BORDER2_TLBR) + { + SvxBorderLine aTmp( NULL, 1, 0, 0 ); + SvxLineItem aLineItem( SID_ATTR_BORDER_DIAG_TLBR ); + aLineItem.SetLine( &aTmp ); + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_TLBR, SFX_CALLMODE_RECORD, &aLineItem, 0L); + } + + mrCellAppearancePropertyPanel.EndCellBorderStylePopupMode(); + return 0; +} + +IMPL_LINK(CellBorderStyleControl, TB3SelectHdl, ToolBox *, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + + ::Color aColBlack( COL_BLACK ); + SvxBoxItem aBorderOuter( SID_ATTR_BORDER_OUTER ); + SvxBoxInfoItem aBorderInner( SID_ATTR_BORDER_INNER ); + SvxBorderLine *pTop = 0 , + *pBottom = 0 ; + sal_uInt8 nValidFlags = 0; + + switch ( nId ) + { + case TBI_BORDER3_S1: + pBottom = new SvxBorderLine(NULL, DEF_LINE_WIDTH_2, 0, 0); + nValidFlags |= FRM_VALID_BOTTOM; + break; + case TBI_BORDER3_S2: + pBottom = new SvxBorderLine(NULL, DEF_DOUBLE_LINE0_OUT, DEF_DOUBLE_LINE0_IN, DEF_DOUBLE_LINE0_DIST); + nValidFlags |= FRM_VALID_BOTTOM; + break; + case TBI_BORDER3_S3: + pBottom = new SvxBorderLine(NULL, DEF_LINE_WIDTH_2, 0, 0); + pTop = new SvxBorderLine(NULL, 1, 0, 0); + nValidFlags |= FRM_VALID_BOTTOM|FRM_VALID_TOP; + break; + case TBI_BORDER3_S4: + pBottom = new SvxBorderLine(NULL, DEF_DOUBLE_LINE0_OUT, DEF_DOUBLE_LINE0_IN, DEF_DOUBLE_LINE0_DIST); + pTop = new SvxBorderLine(NULL, 1, 0, 0); + nValidFlags |= FRM_VALID_BOTTOM|FRM_VALID_TOP; + break; + } + + aBorderOuter.SetLine( pTop, BOX_LINE_TOP ); + aBorderOuter.SetLine( pBottom, BOX_LINE_BOTTOM ); + aBorderOuter.SetLine( NULL, BOX_LINE_LEFT ); + aBorderOuter.SetLine( NULL, BOX_LINE_RIGHT ); + + aBorderInner.SetValid( VALID_TOP, 0 != (nValidFlags&FRM_VALID_TOP )); + aBorderInner.SetValid( VALID_BOTTOM, 0 != (nValidFlags&FRM_VALID_BOTTOM )); + aBorderInner.SetValid( VALID_LEFT, 0 != (nValidFlags&FRM_VALID_LEFT )); + aBorderInner.SetValid( VALID_RIGHT, 0 != (nValidFlags&FRM_VALID_RIGHT )); + aBorderInner.SetValid( VALID_HORI, 0 != (nValidFlags&FRM_VALID_HINNER )); + aBorderInner.SetValid( VALID_VERT, 0 != (nValidFlags&FRM_VALID_VINNER)); + aBorderInner.SetValid( VALID_DISTANCE, true ); + aBorderInner.SetValid( VALID_DISABLE, false ); + + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER, SFX_CALLMODE_RECORD, &aBorderOuter, &aBorderInner, 0L); + + delete pTop; + delete pBottom; + + mrCellAppearancePropertyPanel.EndCellBorderStylePopupMode(); + return 0; +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/sc/source/ui/sidebar/CellBorderStyleControl.hxx b/sc/source/ui/sidebar/CellBorderStyleControl.hxx new file mode 100755 index 000000000000..0dfd82c3598a --- /dev/null +++ b/sc/source/ui/sidebar/CellBorderStyleControl.hxx @@ -0,0 +1,61 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_SIDEBAR_CELL_BORDER_STYLE_CONTROL_HXX +#define SC_SIDEBAR_CELL_BORDER_STYLE_CONTROL_HXX + +#include <svx/sidebar/PopupControl.hxx> +#include <vcl/button.hxx> +#include <vcl/toolbox.hxx> +#include <vcl/fixed.hxx> + +namespace sc { namespace sidebar { + +class CellAppearancePropertyPanel; + +class CellBorderStyleControl : public svx::sidebar::PopupControl +{ +private: + CellAppearancePropertyPanel& mrCellAppearancePropertyPanel; + ToolBox maTBBorder1; + ToolBox maTBBorder2; + ToolBox maTBBorder3; + FixedLine maFL1; + FixedLine maFL2; + Image* mpImageList; + Image* mpImageListH; //high contrast + + void Initialize(); + + DECL_LINK(TB1SelectHdl, ToolBox *); + DECL_LINK(TB2SelectHdl, ToolBox *); + DECL_LINK(TB3SelectHdl, ToolBox *); + +public: + CellBorderStyleControl(Window* pParent, CellAppearancePropertyPanel& rPanel); + virtual ~CellBorderStyleControl(void); +}; + +} } // end of namespace svx::sidebar + +#endif // SC_SIDEBAR_CELL_BORDER_STYLE_CONTROL_HXX + +// eof diff --git a/sc/source/ui/sidebar/CellBorderStylePopup.cxx b/sc/source/ui/sidebar/CellBorderStylePopup.cxx new file mode 100755 index 000000000000..1e2fe1d74b1f --- /dev/null +++ b/sc/source/ui/sidebar/CellBorderStylePopup.cxx @@ -0,0 +1,42 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include "CellBorderStylePopup.hxx" +#include "CellLineStyleControl.hxx" + +namespace sc { namespace sidebar { + +CellBorderStylePopup::CellBorderStylePopup ( + Window* pParent, + const ::boost::function<svx::sidebar::PopupControl*(svx::sidebar::PopupContainer*)>& rControlCreator) +: Popup(pParent, rControlCreator, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CellBorderStyle"))) +{ +} + +CellBorderStylePopup::~CellBorderStylePopup (void) +{ +} + +} } // end of namespace sc::sidebar + +// eof diff --git a/sc/source/ui/sidebar/CellBorderStylePopup.hxx b/sc/source/ui/sidebar/CellBorderStylePopup.hxx new file mode 100755 index 000000000000..4ae62ccb7916 --- /dev/null +++ b/sc/source/ui/sidebar/CellBorderStylePopup.hxx @@ -0,0 +1,43 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SC_SIDEBAR_CELL_BORDER_STYLE_POPUP_HXX_ +#define _SC_SIDEBAR_CELL_BORDER_STYLE_POPUP_HXX_ + +#include <svx/sidebar/Popup.hxx> +#include <boost/function.hpp> + +namespace sc { namespace sidebar { + +class CellBorderStylePopup : public svx::sidebar::Popup +{ +public : + CellBorderStylePopup( + Window* pParent, + const ::boost::function<svx::sidebar::PopupControl*(svx::sidebar::PopupContainer*)>& rControlCreator); + virtual ~CellBorderStylePopup(void); +}; + +} } // end of namespace sc::sidebar + +#endif // _SC_SIDEBAR_CELL_BORDER_STYLE_POPUP_HXX_ + +// eof diff --git a/sc/source/ui/sidebar/CellBorderUpdater.cxx b/sc/source/ui/sidebar/CellBorderUpdater.cxx new file mode 100755 index 000000000000..73fdee94a36e --- /dev/null +++ b/sc/source/ui/sidebar/CellBorderUpdater.cxx @@ -0,0 +1,127 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include <CellBorderUpdater.hxx> +#include <vcl/bmpacc.hxx> +#include <vcl/svapp.hxx> + +namespace sc { namespace sidebar { + +CellBorderUpdater::CellBorderUpdater( + sal_uInt16 nTbxBtnId, + ToolBox& rTbx) +: mnBtnId(nTbxBtnId), + mrTbx(rTbx) +{ +} + +CellBorderUpdater::~CellBorderUpdater() +{ +} + +void CellBorderUpdater::UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight, Image aImg, bool bVer, bool bHor) +{ + BitmapEx aBmpEx( aImg.GetBitmapEx() ); + Bitmap aBmp( aBmpEx.GetBitmap() ); + BitmapWriteAccess* pBmpAcc = aBmp.AcquireWriteAccess(); + const Size maBmpSize = aBmp.GetSizePixel(); + + if( pBmpAcc ) + { + Bitmap aMsk; + BitmapWriteAccess* pMskAcc; + + if( aBmpEx.IsAlpha() ) + pMskAcc = ( aMsk = aBmpEx.GetAlpha().GetBitmap() ).AcquireWriteAccess(); + else if( aBmpEx.IsTransparent() ) + pMskAcc = ( aMsk = aBmpEx.GetMask() ).AcquireWriteAccess(); + else + pMskAcc = NULL; + + pBmpAcc->SetLineColor( ::Application::GetSettings().GetStyleSettings().GetFieldTextColor() ) ; + pBmpAcc->SetFillColor( COL_BLACK); + + if(maBmpSize.Width() == 43 && maBmpSize.Height() == 43) + { + Point aTL(2, 1), aTR(42,1), aBL(2, 41), aBR(42, 41), aHL(2,21), aHR(42, 21), aVT(22,1), aVB(22, 41); + if( pMskAcc ) + { + pMskAcc->SetLineColor( COL_BLACK ); + pMskAcc->SetFillColor( COL_BLACK ); + } + if(bLeft) + { + pBmpAcc->DrawLine( aTL,aBL ); + if( pMskAcc ) + pMskAcc->DrawLine( aTL,aBL ); + } + if(bRight) + { + pBmpAcc->DrawLine( aTR,aBR ); + if( pMskAcc ) + pMskAcc->DrawLine( aTR,aBR ); + } + if(bTop) + { + pBmpAcc->DrawLine( aTL,aTR ); + if( pMskAcc ) + pMskAcc->DrawLine( aTL,aTR ); + } + if(bBot) + { + pBmpAcc->DrawLine( aBL,aBR ); + if( pMskAcc ) + pMskAcc->DrawLine( aBL,aBR ); + } + if(bVer) + { + pBmpAcc->DrawLine( aVT,aVB ); + if( pMskAcc ) + pMskAcc->DrawLine( aVT,aVB ); + } + if(bHor) + { + pBmpAcc->DrawLine( aHL,aHR ); + if( pMskAcc ) + pMskAcc->DrawLine( aHL,aHR ); + } + } + + aBmp.ReleaseAccess( pBmpAcc ); + if( pMskAcc ) + aMsk.ReleaseAccess( pMskAcc ); + + if( aBmpEx.IsAlpha() ) + aBmpEx = BitmapEx( aBmp, AlphaMask( aMsk ) ); + else if( aBmpEx.IsTransparent() ) + aBmpEx = BitmapEx( aBmp, aMsk ); + else + aBmpEx = aBmp; + + mrTbx.SetItemImage( mnBtnId, Image( aBmpEx ) ); + } +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/sc/source/ui/sidebar/CellBorderUpdater.hxx b/sc/source/ui/sidebar/CellBorderUpdater.hxx new file mode 100755 index 000000000000..fac1e88e696d --- /dev/null +++ b/sc/source/ui/sidebar/CellBorderUpdater.hxx @@ -0,0 +1,46 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_SIDEBAR_CELL_BORDER_UPDATER_HXX +#define SC_SIDEBAR_CELL_BORDER_UPDATER_HXX + +#include <vcl/toolbox.hxx> + +namespace sc { namespace sidebar { + +class CellBorderUpdater +{ +private: + sal_uInt16 mnBtnId; + ToolBox& mrTbx; + +public: + CellBorderUpdater(sal_uInt16 nTbxBtnId, ToolBox& rTbx); + ~CellBorderUpdater(); + + void UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight, Image aImg, bool bVer, bool bHor); +}; + +} } // end of namespace svx::sidebar + +#endif // SC_SIDEBAR_CELL_BORDER_UPDATER_HXX + +// eof diff --git a/sc/source/ui/sidebar/CellLineStyleControl.cxx b/sc/source/ui/sidebar/CellLineStyleControl.cxx new file mode 100755 index 000000000000..c529cca0f469 --- /dev/null +++ b/sc/source/ui/sidebar/CellLineStyleControl.cxx @@ -0,0 +1,246 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include <CellLineStyleControl.hxx> +#include "sc.hrc" +#include "scresid.hxx" +#include <CellAppearancePropertyPanel.hrc> +#include <CellLineStyleValueSet.hxx> +#include <vcl/i18nhelp.hxx> +#include <editeng/boxitem.hxx> +#include <editeng/bolnitem.hxx> +#include <CellAppearancePropertyPanel.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> + +namespace sc { namespace sidebar { + +CellLineStyleControl::CellLineStyleControl(Window* pParent, CellAppearancePropertyPanel& rPanel) +: svx::sidebar::PopupControl(pParent, ScResId(RID_POPUPPANEL_APPEARANCE_CELL_LINESTYLE)), + mrCellAppearancePropertyPanel(rPanel), + maPushButtonMoreOptions(this, ScResId(PB_OPTIONS)), + maCellLineStyleValueSet(this, ScResId(VS_STYLE)), + mpStr(0), + mbVSfocus(true) +{ + Initialize(); + FreeResource(); +} + +CellLineStyleControl::~CellLineStyleControl(void) +{ + delete[] mpStr; +} + +void CellLineStyleControl::Initialize() +{ + //maPushButtonMoreOptions.SetIcoPosX(2); + Link aLink = LINK(this, CellLineStyleControl, PBClickHdl); + maPushButtonMoreOptions.SetClickHdl(aLink); + + maCellLineStyleValueSet.SetStyle(maCellLineStyleValueSet.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT); + maCellLineStyleValueSet.SetControlBackground(GetSettings().GetStyleSettings().GetMenuColor()); + maCellLineStyleValueSet.SetColor(GetSettings().GetStyleSettings().GetMenuColor()); + + for(sal_uInt16 i = 1 ; i <= 9 ; i++) + { + maCellLineStyleValueSet.InsertItem(i); + } + + mpStr = new XubString[9]; + mpStr[0] = GetSettings().GetLocaleI18nHelper().GetNum( 5, 2 ).AppendAscii("pt"); + mpStr[1] = GetSettings().GetLocaleI18nHelper().GetNum( 250, 2 ).AppendAscii("pt"); + mpStr[2] = GetSettings().GetLocaleI18nHelper().GetNum( 400, 2 ).AppendAscii("pt"); + mpStr[3] = GetSettings().GetLocaleI18nHelper().GetNum( 500, 2 ).AppendAscii("pt"); + mpStr[4] = GetSettings().GetLocaleI18nHelper().GetNum( 110, 2 ).AppendAscii("pt"); + mpStr[5] = GetSettings().GetLocaleI18nHelper().GetNum( 260, 2 ).AppendAscii("pt"); + mpStr[6] = GetSettings().GetLocaleI18nHelper().GetNum( 450, 2 ).AppendAscii("pt"); + mpStr[7] = GetSettings().GetLocaleI18nHelper().GetNum( 505, 2 ).AppendAscii("pt"); + mpStr[8] = GetSettings().GetLocaleI18nHelper().GetNum( 750, 2 ).AppendAscii("pt"); + maCellLineStyleValueSet.SetUnit(mpStr); + + for(sal_uInt16 i = 1 ; i <= 9 ; i++) + { + maCellLineStyleValueSet.SetItemText(i, mpStr[i-1]); + } + + SetAllNoSel(); + aLink = LINK(this, CellLineStyleControl, VSSelectHdl); + maCellLineStyleValueSet.SetSelectHdl(aLink); + maCellLineStyleValueSet.StartSelection(); + maCellLineStyleValueSet.Show(); +} + +void CellLineStyleControl::GetFocus() +{ + if(!mbVSfocus) + { + maPushButtonMoreOptions.GrabFocus(); + } + else + { + maCellLineStyleValueSet.GrabFocus(); + } +} + +void CellLineStyleControl::SetAllNoSel() +{ + maCellLineStyleValueSet.SelectItem(0); + maCellLineStyleValueSet.SetNoSelection(); + maCellLineStyleValueSet.Format(); + Invalidate(); + maCellLineStyleValueSet.StartSelection(); +} + +IMPL_LINK(CellLineStyleControl, VSSelectHdl, void *, pControl) +{ + if(pControl == &maCellLineStyleValueSet) + { + const sal_uInt16 iPos(maCellLineStyleValueSet.GetSelectItemId()); + SvxLineItem aLineItem(SID_FRAME_LINESTYLE); + sal_uInt16 n1 = 0; + sal_uInt16 n2 = 0; + sal_uInt16 n3 = 0; + + switch(iPos) + { + case 1: + n1 = DEF_LINE_WIDTH_0; + break; + case 2: + n1 = DEF_LINE_WIDTH_2; + break; + case 3: + n1 = DEF_LINE_WIDTH_3; + break; + case 4: + n1 = DEF_LINE_WIDTH_4; + break; + case 5: + n1 = DEF_DOUBLE_LINE0_OUT; + n2 = DEF_DOUBLE_LINE0_IN; + n3 = DEF_DOUBLE_LINE0_DIST; + break; + case 6: + n1 = DEF_DOUBLE_LINE7_OUT; + n2 = DEF_DOUBLE_LINE7_IN; + n3 = DEF_DOUBLE_LINE7_DIST; + break; + case 7: + n1 = DEF_DOUBLE_LINE4_OUT; + n2 = DEF_DOUBLE_LINE4_IN; + n3 = DEF_DOUBLE_LINE4_DIST; + break; + case 8: + n1 = DEF_DOUBLE_LINE9_OUT; + n2 = DEF_DOUBLE_LINE9_IN; + n3 = DEF_DOUBLE_LINE9_DIST; + break; + case 9: + n1 = DEF_DOUBLE_LINE2_OUT; + n2 = DEF_DOUBLE_LINE2_IN; + n3 = DEF_DOUBLE_LINE2_DIST; + break; + default: + break; + } + + SvxBorderLine aTmp( NULL, n1, n2, n3 ); + aLineItem.SetLine( &aTmp ); + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_FRAME_LINESTYLE, SFX_CALLMODE_RECORD, &aLineItem, 0L); + SetAllNoSel(); + mrCellAppearancePropertyPanel.EndCellLineStylePopupMode(); + } + + return(0L); +} + +IMPL_LINK(CellLineStyleControl, PBClickHdl, PushButton *, pPBtn) +{ + if(pPBtn == &maPushButtonMoreOptions) + { + if(mrCellAppearancePropertyPanel.GetBindings()) + { + mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_CELL_FORMAT_BORDER, SFX_CALLMODE_ASYNCHRON); + } + + mrCellAppearancePropertyPanel.EndCellLineStylePopupMode(); + } + + return 0; +} + +void CellLineStyleControl::SetLineStyleSelect(sal_uInt16 out, sal_uInt16 in, sal_uInt16 dis) +{ + SetAllNoSel(); + mbVSfocus = true; + + if(out == DEF_LINE_WIDTH_0 && in == 0 && dis == 0) //1 + { + maCellLineStyleValueSet.SetSelItem(1); + } + else if(out == DEF_LINE_WIDTH_2 && in == 0 && dis == 0) //2 + { + maCellLineStyleValueSet.SetSelItem(2); + } + else if(out == DEF_LINE_WIDTH_3 && in == 0 && dis == 0) //3 + { + maCellLineStyleValueSet.SetSelItem(3); + } + else if(out == DEF_LINE_WIDTH_4 && in == 0 && dis == 0) //4 + { + maCellLineStyleValueSet.SetSelItem(4); + } + else if(out == DEF_DOUBLE_LINE0_OUT && in == DEF_DOUBLE_LINE0_IN && dis == DEF_DOUBLE_LINE0_DIST) //5 + { + maCellLineStyleValueSet.SetSelItem(5); + } + else if(out == DEF_DOUBLE_LINE7_OUT && in == DEF_DOUBLE_LINE7_IN && dis == DEF_DOUBLE_LINE7_DIST) //6 + { + maCellLineStyleValueSet.SetSelItem(6); + } + else if(out == DEF_DOUBLE_LINE4_OUT && in == DEF_DOUBLE_LINE4_IN && dis == DEF_DOUBLE_LINE4_DIST) //7 + { + maCellLineStyleValueSet.SetSelItem(7); + } + else if(out == DEF_DOUBLE_LINE9_OUT && in == DEF_DOUBLE_LINE9_IN && dis == DEF_DOUBLE_LINE9_DIST) //8 + { + maCellLineStyleValueSet.SetSelItem(8); + } + else if(out == DEF_DOUBLE_LINE2_OUT && in == DEF_DOUBLE_LINE2_IN && dis == DEF_DOUBLE_LINE2_DIST) //9 + { + maCellLineStyleValueSet.SetSelItem(9); + } + else + { + maCellLineStyleValueSet.SetSelItem(0); + mbVSfocus = false; + } + + maCellLineStyleValueSet.Format(); + maCellLineStyleValueSet.StartSelection(); +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/sc/source/ui/sidebar/CellLineStyleControl.hxx b/sc/source/ui/sidebar/CellLineStyleControl.hxx new file mode 100755 index 000000000000..1157c931ca19 --- /dev/null +++ b/sc/source/ui/sidebar/CellLineStyleControl.hxx @@ -0,0 +1,72 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_SIDEBAR_CELL_LINE_STYLE_CONTROL_HXX +#define SC_SIDEBAR_CELL_LINE_STYLE_CONTROL_HXX + +#include <svx/sidebar/PopupControl.hxx> +#include <vcl/button.hxx> +#include <CellLineStyleValueSet.hxx> + +namespace sc { namespace sidebar { + +class CellAppearancePropertyPanel; + +class CellLineStyleControl : public svx::sidebar::PopupControl +{ +private: + CellAppearancePropertyPanel& mrCellAppearancePropertyPanel; + PushButton maPushButtonMoreOptions; + CellLineStyleValueSet maCellLineStyleValueSet; + XubString* mpStr; + + /// bitfield + bool mbVSfocus : 1; + + void Initialize(); + void SetAllNoSel(); + + DECL_LINK(VSSelectHdl, void*); + DECL_LINK(PBClickHdl, PushButton*); + +public: + CellLineStyleControl(Window* pParent, CellAppearancePropertyPanel& rPanel); + virtual ~CellLineStyleControl(void); + + void GetFocus(); + void SetLineStyleSelect(sal_uInt16 out, sal_uInt16 in, sal_uInt16 dis); + + ValueSet& GetValueSet() + { + return maCellLineStyleValueSet; + } + + Control& GetPushButton() + { + return maPushButtonMoreOptions; + } +}; + +} } // end of namespace svx::sidebar + +#endif // SC_SIDEBAR_CELL_LINE_STYLE_CONTROL_HXX + +// eof diff --git a/sc/source/ui/sidebar/CellLineStylePopup.cxx b/sc/source/ui/sidebar/CellLineStylePopup.cxx new file mode 100755 index 000000000000..dc5ccda719b0 --- /dev/null +++ b/sc/source/ui/sidebar/CellLineStylePopup.cxx @@ -0,0 +1,54 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include "CellLineStylePopup.hxx" +#include "CellLineStyleControl.hxx" + +namespace sc { namespace sidebar { + +CellLineStylePopup::CellLineStylePopup ( + Window* pParent, + const ::boost::function<svx::sidebar::PopupControl*(svx::sidebar::PopupContainer*)>& rControlCreator) +: Popup(pParent, rControlCreator, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CellLineStyle"))) +{ +} + +CellLineStylePopup::~CellLineStylePopup (void) +{ +} + +void CellLineStylePopup::SetLineStyleSelect(sal_uInt16 out, sal_uInt16 in, sal_uInt16 dis) +{ + ProvideContainerAndControl(); + + CellLineStyleControl* pControl = dynamic_cast< CellLineStyleControl* >(mpControl.get()); + + if(pControl) + { + pControl->SetLineStyleSelect(out, in, dis); + } +} + +} } // end of namespace sc::sidebar + +// eof diff --git a/sc/source/ui/sidebar/CellLineStylePopup.hxx b/sc/source/ui/sidebar/CellLineStylePopup.hxx new file mode 100755 index 000000000000..08214f584307 --- /dev/null +++ b/sc/source/ui/sidebar/CellLineStylePopup.hxx @@ -0,0 +1,45 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SC_SIDEBAR_CELL_LINE_STYLE_POPUP_HXX_ +#define _SC_SIDEBAR_CELL_LINE_STYLE_POPUP_HXX_ + +#include <svx/sidebar/Popup.hxx> +#include <boost/function.hpp> + +namespace sc { namespace sidebar { + +class CellLineStylePopup : public svx::sidebar::Popup +{ +public : + CellLineStylePopup( + Window* pParent, + const ::boost::function<svx::sidebar::PopupControl*(svx::sidebar::PopupContainer*)>& rControlCreator); + virtual ~CellLineStylePopup(void); + + void SetLineStyleSelect(sal_uInt16 out, sal_uInt16 in, sal_uInt16 dis); +}; + +} } // end of namespace sc::sidebar + +#endif // _SC_SIDEBAR_CELL_LINE_STYLE_POPUP_HXX_ + +// eof diff --git a/sc/source/ui/sidebar/CellLineStyleValueSet.cxx b/sc/source/ui/sidebar/CellLineStyleValueSet.cxx new file mode 100755 index 000000000000..283554bee3de --- /dev/null +++ b/sc/source/ui/sidebar/CellLineStyleValueSet.cxx @@ -0,0 +1,184 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include <CellLineStyleValueSet.hxx> +#include <i18npool/mslangid.hxx> + +namespace sc { namespace sidebar { + +CellLineStyleValueSet::CellLineStyleValueSet( Window* pParent, const ResId& rResId) +: ValueSet( pParent, rResId ), + pVDev(NULL), + nSelItem(0), + bCusEnable(false) +{ + strUnit = new XubString[9]; + SetColCount( 1 ); + SetLineCount( 9); +} + +CellLineStyleValueSet::~CellLineStyleValueSet() +{ + delete pVDev; + delete[] strUnit; +} + +void CellLineStyleValueSet::SetUnit(XubString* str) +{ + for(int i = 0; i < 9; i++) + { + strUnit[i] = str[i]; + } +} + +void CellLineStyleValueSet::SetSelItem(sal_uInt16 nSel) +{ + nSelItem = nSel; + if(nSel == 0) + { + SelectItem(1); + SetNoSelection(); + } + else + { + SelectItem(nSelItem); + GrabFocus(); + } +} + +sal_uInt16 CellLineStyleValueSet::GetSelItem() +{ + return nSelItem; +} + +void CellLineStyleValueSet::SetImage(Image img) +{ + imgCus = img; +} + +void CellLineStyleValueSet::SetCusEnable(bool bEnable) +{ + bCusEnable = bEnable; +} + +void CellLineStyleValueSet::UserDraw( const UserDrawEvent& rUDEvt ) +{ + Rectangle aRect = rUDEvt.GetRect(); + OutputDevice* pDev = rUDEvt.GetDevice(); + sal_uInt16 nItemId = rUDEvt.GetItemId(); + + long nRectHeight = aRect.GetHeight(); + long nRectWidth = aRect.GetWidth(); + Point aBLPos = aRect.TopLeft(); + + Font aOldFont = pDev->GetFont(); + Color aOldColor = pDev->GetLineColor(); + Color aOldFillColor = pDev->GetFillColor(); + + Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); + Size aSize = aFont.GetSize(); + aSize.Height() = nRectHeight*3/5; + aFont.SetSize( aSize ); + + Point aLineStart(aBLPos.X() + 5, aBLPos.Y() + ( nRectHeight - nItemId )/2); + Point aLineEnd(aBLPos.X() + nRectWidth * 7 / 9 - 15, aBLPos.Y() + ( nRectHeight - nItemId )/2); + long nTLX = aBLPos.X() + 5, nTLY = aBLPos.Y() + ( nRectHeight - nItemId )/2; + long nTRX = aBLPos.X() + nRectWidth * 7 / 9 - 15, nTRY = aBLPos.Y() + ( nRectHeight - nItemId )/2; + + if( nSelItem == nItemId ) + { + Color aBackColor(50,107,197); + Rectangle aBackRect = aRect; + aBackRect.Top() += 3; + aBackRect.Bottom() -= 2; + pDev->SetFillColor(aBackColor); + pDev->DrawRect(aBackRect); + } + else + { + pDev->SetFillColor( COL_TRANSPARENT ); + pDev->DrawRect(aRect); + } + + //draw text + if(nSelItem == nItemId ) + aFont.SetColor(COL_WHITE); + else + aFont.SetColor(GetSettings().GetStyleSettings().GetFieldTextColor()); //high contrast + + pDev->SetFont(aFont); + Point aStart(aBLPos.X() + nRectWidth * 7 / 9 - 5 , aBLPos.Y() + nRectHeight/6); + pDev->DrawText(aStart, strUnit[ nItemId - 1 ]); //can't set TEXT_DRAW_ENDELLIPSIS here, or the text will disapear + + //draw line + if( nSelItem == nItemId ) + { + pDev->SetFillColor(COL_WHITE); + pDev->SetLineColor(COL_WHITE); + } + else + { + pDev->SetFillColor(GetSettings().GetStyleSettings().GetFieldTextColor()); //high contrast + pDev->SetLineColor(GetSettings().GetStyleSettings().GetFieldTextColor()); //high contrast + } + + switch( nItemId ) + { + case 1: + case 2: + case 3: + case 4: + pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + nItemId * 2 - 1 )); + break; + case 5: + pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 )); + pDev->DrawRect(Rectangle(nTLX, nTLY + 3 , nTRX, nTRY + 4 )); + break; + case 6: + pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 )); + pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 6 )); + break; + case 7: + pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 )); + pDev->DrawRect(Rectangle(nTLX, nTLY + 3 , nTRX, nTRY + 6 )); + break; + case 8: + pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 3 )); + pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 6 )); + break; + case 9: + pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 3 )); + pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 8 )); + break; + } + + Invalidate( aRect ); + pDev->SetLineColor(aOldColor); + pDev->SetFillColor(aOldFillColor); + pDev->SetFont(aOldFont); + +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/sc/source/ui/sidebar/CellLineStyleValueSet.hxx b/sc/source/ui/sidebar/CellLineStyleValueSet.hxx new file mode 100755 index 000000000000..ccf3b669aa85 --- /dev/null +++ b/sc/source/ui/sidebar/CellLineStyleValueSet.hxx @@ -0,0 +1,54 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_SIDEBAR_CELL_LINE_STYLE_VALUE_SET_HXX +#define SC_SIDEBAR_CELL_LINE_STYLE_VALUE_SET_HXX + +#include <svtools/valueset.hxx> +#include <vcl/image.hxx> + +namespace sc { namespace sidebar { + +class CellLineStyleValueSet : public ValueSet +{ +private: + VirtualDevice* pVDev; + sal_uInt16 nSelItem; + XubString* strUnit; + Image imgCus; + bool bCusEnable; +public: + CellLineStyleValueSet( Window* pParent, const ResId& rResId); + virtual ~CellLineStyleValueSet(); + + void SetUnit(XubString* str); + void SetSelItem(sal_uInt16 nSel); + sal_uInt16 GetSelItem(); + void SetImage(Image img); + void SetCusEnable(bool bEnable); + virtual void UserDraw( const UserDrawEvent& rUDEvt ); +}; + +} } // end of namespace svx::sidebar + +#endif // SC_SIDEBAR_CELL_LINE_STYLE_VALUE_SET_HXX + +// eof diff --git a/sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx b/sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx new file mode 100755 index 000000000000..c714f04acd8b --- /dev/null +++ b/sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx @@ -0,0 +1,389 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <NumberFormatPropertyPanel.hxx> +#include <NumberFormatPropertyPanel.hrc> +#include "sc.hrc" +#include "scresid.hxx" +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <vcl/fixed.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/field.hxx> +#include <vcl/toolbox.hxx> +#include <svl/intitem.hxx> +#include <svl/stritem.hxx> + +using namespace css; +using namespace cssu; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +////////////////////////////////////////////////////////////////////////////// +// namespace open + +namespace sc { namespace sidebar { + +////////////////////////////////////////////////////////////////////////////// + +NumberFormatPropertyPanel::NumberFormatPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +: Control( + pParent, + ScResId(RID_PROPERTYPANEL_SC_NUMBERFORMAT)), + mpFtCategory(new FixedText(this, ScResId(FT_CATEGORY))), + mpLbCategory(new ListBox(this, ScResId(LB_CATEGORY))), + mpTBCategoryBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpTBCategory(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBCategoryBackground.get(), ScResId(TBX_CATEGORY))), + mpFtDecimals(new FixedText(this, ScResId(FT_DECIMALS))), + mpEdDecimals(new NumericField(this, ScResId(ED_DECIMALS))), + mpFtLeadZeroes(new FixedText(this, ScResId(FT_LEADZEROES))), + mpEdLeadZeroes(new NumericField(this, ScResId(ED_LEADZEROES))), + mpBtnNegRed(new CheckBox(this, ScResId(BTN_NEGRED))), + mpBtnThousand(new CheckBox(this, ScResId(BTN_THOUSAND))), + maNumFormatControl(SID_NUMBER_TYPE_FORMAT, *pBindings, *this), + + // Caution! SID_NUMBER_FORMAT is reworked in symphony code, may be needed (!) If + // yes, grep for it in SC and symphony (!) + maFormatControl(SID_NUMBER_FORMAT, *pBindings, *this), + + maImgNumber(ScResId(IMG_NUMBER)), + maImgPercent(ScResId(IMG_PERCENT)), + maImgCurrency(ScResId(IMG_CURRENCY)), + maImgDate(ScResId(IMG_DATE)), + maImgText(ScResId(IMG_TEXT)), + mnCategorySelected(0), + mxFrame(rxFrame), + maContext(), + mpBindings(pBindings) +{ + Initialize(); + FreeResource(); +} + +////////////////////////////////////////////////////////////////////////////// + +NumberFormatPropertyPanel::~NumberFormatPropertyPanel() +{ + // Destroy the toolboxes, then their background windows. + mpTBCategory.reset(); + mpTBCategoryBackground.reset(); +} + +////////////////////////////////////////////////////////////////////////////// + +void NumberFormatPropertyPanel::Initialize() +{ + Link aLink = LINK(this, NumberFormatPropertyPanel, NumFormatSelectHdl); + mpLbCategory->SetSelectHdl ( aLink ); + mpLbCategory->SelectEntryPos(0); + mpLbCategory->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Category"))); //wj acc + mpLbCategory->SetDropDownLineCount(mpLbCategory->GetEntryCount()); + + mpTBCategory->SetItemImage(ID_NUMBER, maImgNumber); + mpTBCategory->SetItemImage(ID_PERCENT, maImgPercent); + mpTBCategory->SetItemImage(ID_CURRENCY, maImgCurrency); + mpTBCategory->SetItemImage(ID_DATE, maImgDate); + mpTBCategory->SetItemImage(ID_TEXT, maImgText); + Size aTbxSize( mpTBCategory->CalcWindowSizePixel() ); + mpTBCategory->SetOutputSizePixel( aTbxSize ); + mpTBCategory->SetBackground(Wallpaper()); + mpTBCategory->SetPaintTransparent(true); + aLink = LINK(this, NumberFormatPropertyPanel, NumFormatHdl); + mpTBCategory->SetSelectHdl ( aLink ); + + aLink = LINK(this, NumberFormatPropertyPanel, NumFormatValueHdl); + + mpEdDecimals->SetModifyHdl( aLink ); + mpEdLeadZeroes->SetModifyHdl( aLink ); + mpEdDecimals->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Decimal Places"))); //wj acc + mpEdLeadZeroes->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Leading Zeroes"))); //wj acc + mpBtnNegRed->SetClickHdl( aLink ); + mpBtnThousand->SetClickHdl( aLink ); + + mpLbCategory->SetAccessibleRelationLabeledBy(mpFtCategory.get()); + mpTBCategory->SetAccessibleRelationLabeledBy(mpTBCategory.get()); + mpEdDecimals->SetAccessibleRelationLabeledBy(mpFtDecimals.get()); + mpEdLeadZeroes->SetAccessibleRelationLabeledBy(mpFtLeadZeroes.get()); +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( NumberFormatPropertyPanel, NumFormatHdl, ToolBox*, pBox ) +{ + sal_uInt16 nVal = pBox->GetCurItemId(); + sal_uInt16 nId = 0; + switch(nVal) + { + case ID_NUMBER: + nId = 1; + break; + case ID_PERCENT: + nId = 2; + break; + case ID_CURRENCY: + nId = 3; + break; + case ID_DATE: + nId = 4; + break; + case ID_TEXT: + nId = 9; + break; + default: + ; + } + if( nId != mnCategorySelected ) + { + SfxUInt16Item aItem( SID_NUMBER_TYPE_FORMAT, nId ); + GetBindings()->GetDispatcher()->Execute(SID_NUMBER_TYPE_FORMAT, SFX_CALLMODE_RECORD, &aItem, 0L); + } + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( NumberFormatPropertyPanel, NumFormatSelectHdl, ListBox*, pBox ) +{ + sal_uInt16 nVal = pBox->GetSelectEntryPos(); + if( nVal != mnCategorySelected ) + { + SfxUInt16Item aItem( SID_NUMBER_TYPE_FORMAT, nVal ); + GetBindings()->GetDispatcher()->Execute(SID_NUMBER_TYPE_FORMAT, SFX_CALLMODE_RECORD, &aItem, 0L); + mnCategorySelected = nVal; + } + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( NumberFormatPropertyPanel, NumFormatValueHdl, void*, EMPTYARG ) +{ + String aFormat; + String sBreak = String::CreateFromAscii(","); + bool bThousand = mpBtnThousand->IsEnabled() + && mpBtnThousand->IsChecked(); + bool bNegRed = mpBtnNegRed->IsEnabled() + && mpBtnNegRed->IsChecked(); + sal_uInt16 nPrecision = (mpEdDecimals->IsEnabled()) + ? (sal_uInt16)mpEdDecimals->GetValue() + : (sal_uInt16)0; + sal_uInt16 nLeadZeroes = (mpEdLeadZeroes->IsEnabled()) + ? (sal_uInt16)mpEdLeadZeroes->GetValue() + : (sal_uInt16)0; + + String sThousand = String::CreateFromInt32(bThousand); + String sNegRed = String::CreateFromInt32(bNegRed); + String sPrecision = String::CreateFromInt32(nPrecision); + String sLeadZeroes = String::CreateFromInt32(nLeadZeroes); + + aFormat += sThousand; + aFormat += sBreak; + aFormat += sNegRed; + aFormat += sBreak; + aFormat += sPrecision; + aFormat += sBreak; + aFormat += sLeadZeroes; + aFormat += sBreak; + + SfxStringItem aItem( SID_NUMBER_FORMAT, aFormat ); + GetBindings()->GetDispatcher()->Execute(SID_NUMBER_FORMAT, SFX_CALLMODE_RECORD, &aItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +NumberFormatPropertyPanel* NumberFormatPropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to NumberFormatPropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to NumberFormatPropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to NumberFormatPropertyPanel::Create"), NULL, 2); + + return new NumberFormatPropertyPanel( + pParent, + rxFrame, + pBindings); +} + +////////////////////////////////////////////////////////////////////////////// + +void NumberFormatPropertyPanel::DataChanged( + const DataChangedEvent& rEvent) +{ + (void)rEvent; +} + +////////////////////////////////////////////////////////////////////////////// + +void NumberFormatPropertyPanel::HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext) +{ + if(maContext == aContext) + { + // Nothing to do. + return; + } + + maContext = aContext; + + + + // todo +} + +////////////////////////////////////////////////////////////////////////////// + +void NumberFormatPropertyPanel::NotifyItemUpdate( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + switch(nSID) + { + case SID_NUMBER_TYPE_FORMAT: + { + if( eState >= SFX_ITEM_AVAILABLE) + { + const SfxInt16Item* pItem = (const SfxInt16Item*)pState; + sal_uInt16 nVal = pItem->GetValue(); + mnCategorySelected = nVal; + mpLbCategory->SelectEntryPos(nVal); + if( nVal < 4 ) + { + mpBtnThousand->Enable(); + mpBtnNegRed->Enable(); + mpEdDecimals->Enable(); + mpEdLeadZeroes->Enable(); + } + else + { + mpBtnThousand->Disable(); + mpBtnNegRed->Disable(); + mpEdDecimals->Disable(); + mpEdLeadZeroes->Disable(); + } + } + else + { + mpLbCategory->SetNoSelection(); + mnCategorySelected = 0; + mpBtnThousand->Disable(); + mpBtnNegRed->Disable(); + mpEdDecimals->Disable(); + mpEdLeadZeroes->Disable(); + } + } + break; + case SID_NUMBER_FORMAT: + { + bool bThousand = 0; + bool bNegRed = 0; + sal_uInt16 nPrecision = 0; + sal_uInt16 nLeadZeroes = 0; + if( eState >= SFX_ITEM_AVAILABLE) + { + const SfxStringItem* pItem = (const SfxStringItem*)pState; + String aCode = pItem->GetValue(); + /* if(aCode.Equals(String::CreateFromAscii("General"))) + { + mnCategorySelected = 0; + mpLbCategory->SelectEntryPos(0); + mpBtnThousand->Check(0); + mpBtnNegRed->Check(0); + mpEdDecimals->SetValue(0); + mpEdLeadZeroes->SetValue(1); + break; + } + else if( mpLbCategory->GetSelectEntryPos() == 0 ) + { + mnCategorySelected = 1; + mpLbCategory->SelectEntryPos(1); + }*/ + sal_uInt16 aLen = aCode.Len(); + String* sFormat = new String[4]; + String sTmpStr = String::CreateFromAscii(""); + sal_uInt16 nCount = 0; + sal_uInt16 nStrCount = 0; + while( nCount < aLen ) + { + sal_Unicode cChar = aCode.GetChar(nCount); + if(cChar == sal_Unicode(',')) + { + sFormat[nStrCount] = sTmpStr; + sTmpStr = String::CreateFromAscii(""); + nStrCount++; + } + else + { + sTmpStr += cChar; + } + nCount++; + } + bThousand = sFormat[0].ToInt32(); + bNegRed = sFormat[1].ToInt32(); + nPrecision = (sal_uInt16)sFormat[2].ToInt32(); + nLeadZeroes = (sal_uInt16)sFormat[3].ToInt32(); + delete[] sFormat; + } + else + { + bThousand = 0; + bNegRed = 0; + nPrecision = 0; + nLeadZeroes = 1; + } + mpBtnThousand->Check(bThousand); + mpBtnNegRed->Check(bNegRed); + mpEdDecimals->SetValue(nPrecision); + mpEdLeadZeroes->SetValue(nLeadZeroes); + } + default: + ; + } +} + +////////////////////////////////////////////////////////////////////////////// + +SfxBindings* NumberFormatPropertyPanel::GetBindings() +{ + return mpBindings; +} + +////////////////////////////////////////////////////////////////////////////// +// namespace close + +}} // end of namespace ::sc::sidebar + +////////////////////////////////////////////////////////////////////////////// +// eof diff --git a/sc/source/ui/sidebar/NumberFormatPropertyPanel.hrc b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hrc new file mode 100755 index 000000000000..9fb5cef06f53 --- /dev/null +++ b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hrc @@ -0,0 +1,74 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#define FT_CATEGORY 1 +#define LB_CATEGORY 2 +#define FT_DECIMALS 3 +#define ED_DECIMALS 4 +#define FT_LEADZEROES 5 +#define ED_LEADZEROES 6 +#define BTN_NEGRED 7 +#define BTN_THOUSAND 8 +#define TBX_CATEGORY 9 +#define ID_NUMBER 10 +#define ID_PERCENT 11 +#define ID_CURRENCY 12 +#define ID_DATE 13 +#define ID_TEXT 14 +#define IMG_NUMBER 15 +#define IMG_PERCENT 16 +#define IMG_CURRENCY 17 +#define IMG_DATE 18 +#define IMG_TEXT 19 + +//===============================================================position============================================= + +#define MBOX_WIDTH 28 +#define TOOLBOX_ITEM_HEIGHT 12 +#define CHECKBOX_HEIGHT 10 + +#define FT_CATEGORY_X SECTIONPAGE_MARGIN_HORIZONTAL +#define FT_CATEGORY_Y SECTIONPAGE_MARGIN_VERTICAL_TOP +#define LB_CATEGORY_X FT_CATEGORY_X +#define LB_CATEGORY_Y FT_CATEGORY_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define TBX_CATEGORY_X SECTIONPAGE_MARGIN_HORIZONTAL + 1 +#define TBX_CATEGORY_Y LB_CATEGORY_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + +#define FT_DECIMALS_X SECTIONPAGE_MARGIN_HORIZONTAL +#define FT_DECIMALS_Y TBX_CATEGORY_Y + TOOLBOX_ITEM_HEIGHT + 4 + CONTROL_SPACING_VERTICAL +#define LB_DECIMALS_X FT_CATEGORY_X +#define LB_DECIMALS_Y FT_DECIMALS_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define FT_LEADZEROES_X SECTIONPAGE_MARGIN_HORIZONTAL + MBOX_WIDTH*2 + CONTROL_SPACING_HORIZONTAL +#define FT_LEADZEROES_Y FT_DECIMALS_Y +#define LB_LEADZEROES_X FT_LEADZEROES_X +#define LB_LEADZEROES_Y FT_LEADZEROES_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define BTN_NEGRED_X SECTIONPAGE_MARGIN_HORIZONTAL +#define BTN_NEGRED_Y LB_LEADZEROES_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + +#define BTN_THOUSAND_X SECTIONPAGE_MARGIN_HORIZONTAL +#define BTN_THOUSAND_Y BTN_NEGRED_Y + CHECKBOX_HEIGHT + CONTROL_SPACING_VERTICAL - 3 + +#define PROPERTYPAGE_HEIGHT BTN_THOUSAND_Y + CHECKBOX_HEIGHT + 2 + +// eof diff --git a/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx new file mode 100755 index 000000000000..13ca80c2b946 --- /dev/null +++ b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx @@ -0,0 +1,108 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SC_PROPERTYPANEL_NUMFORMAT_HXX +#define SC_PROPERTYPANEL_NUMFORMAT_HXX + +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/IContextChangeReceiver.hxx> +#include <boost/scoped_ptr.hpp> + +class FixedText; +class ListBox; +class NumericField; + +namespace sc { namespace sidebar { + +class NumberFormatPropertyPanel +: public Control, + public ::sfx2::sidebar::IContextChangeReceiver, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: +public: + static NumberFormatPropertyPanel* Create( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + + virtual void DataChanged( + const DataChangedEvent& rEvent); + + virtual void HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + SfxBindings* GetBindings(); + +private: + //ui controls + ::boost::scoped_ptr< FixedText > mpFtCategory; + ::boost::scoped_ptr< ListBox > mpLbCategory; + ::boost::scoped_ptr< Window > mpTBCategoryBackground; + ::boost::scoped_ptr< ToolBox > mpTBCategory; + ::boost::scoped_ptr< FixedText > mpFtDecimals; + ::boost::scoped_ptr< NumericField > mpEdDecimals; + ::boost::scoped_ptr< FixedText > mpFtLeadZeroes; + ::boost::scoped_ptr< NumericField > mpEdLeadZeroes; + ::boost::scoped_ptr< CheckBox > mpBtnNegRed; + ::boost::scoped_ptr< CheckBox > mpBtnThousand; + + ::sfx2::sidebar::ControllerItem maNumFormatControl; + ::sfx2::sidebar::ControllerItem maFormatControl; + + // images + Image maImgNumber; + Image maImgPercent; + Image maImgCurrency; + Image maImgDate; + Image maImgText; + + sal_uInt16 mnCategorySelected; + + cssu::Reference<css::frame::XFrame> mxFrame; + ::sfx2::sidebar::EnumContext maContext; + SfxBindings* mpBindings; + + DECL_LINK(NumFormatHdl, ToolBox*); + DECL_LINK(NumFormatSelectHdl, ListBox*); + DECL_LINK(NumFormatValueHdl, void*); + + // constructor/destuctor + NumberFormatPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + virtual ~NumberFormatPropertyPanel(); + + void Initialize(); +}; + +} } // end of namespace ::sc::sidebar + +#endif SC_PROPERTYPANEL_NUMFORMAT_HXX + +// eof diff --git a/sc/source/ui/sidebar/NumberFormatPropertyPanel.src b/sc/source/ui/sidebar/NumberFormatPropertyPanel.src new file mode 100755 index 000000000000..5da3953149ea --- /dev/null +++ b/sc/source/ui/sidebar/NumberFormatPropertyPanel.src @@ -0,0 +1,187 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "NumberFormatPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include "sc.hrc" +#include "helpids.h" + +Control RID_PROPERTYPANEL_SC_NUMBERFORMAT +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, PROPERTYPAGE_HEIGHT ); + HelpID = HID_PROPERTYPANEL_SC_NUM_SECTION ; + Text = "Number Format"; + + FixedText FT_CATEGORY + { + Pos = MAP_APPFONT ( FT_CATEGORY_X , FT_CATEGORY_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH*4 , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Category:" ; + }; + ListBox LB_CATEGORY + { + Border = TRUE ; + Pos = MAP_APPFONT ( LB_CATEGORY_X , LB_CATEGORY_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH *2 , MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_LB_CATEGORY; + QuickHelpText [ en-US ] = "Select a category of contents."; + TabStop = TRUE ; + DropDown = TRUE ; + StringList [ en-US ] = + { + < "General" ; Default ; > ; + < "Number" ;> ; + < "Percent" ;> ; + < "Currency" ;> ; + < "Date" ;> ; + < "Time" ;> ; + < "Scientific" ;> ; + < "Fraction" ;> ; + < "Boolean Value" ;> ; + < "Text" ;> ; + }; + }; + ToolBox TBX_CATEGORY + { + Pos = MAP_APPFONT ( TBX_CATEGORY_X , TBX_CATEGORY_Y ); + SVLook = TRUE ; + Border = FALSE ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_TBX_CATEGORY; + Text = "Format"; + ItemList = + { + ToolBoxItem + { + Identifier = ID_NUMBER ; + Text [ en-US ] = "Number" ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_ID_NUMBER; + }; + ToolBoxItem + { + Identifier = ID_PERCENT ; + Text [ en-US ] = "Percent" ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_ID_PERCENT; + }; + ToolBoxItem + { + Identifier = ID_CURRENCY ; + Text [ en-US ] = "Currency" ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_ID_CURRENCY; + }; + ToolBoxItem + { + Identifier = ID_DATE ; + Text [ en-US ] = "Date" ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_ID_DATE; + }; + ToolBoxItem + { + Identifier = ID_TEXT ; + Text [ en-US ] = "Text" ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_ID_TEXT; + }; + }; + }; + FixedText FT_DECIMALS + { + Pos = MAP_APPFONT ( FT_DECIMALS_X , FT_DECIMALS_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH *2, TEXT_HEIGHT ) ; + Text [ en-US ] = "~Decimal places:" ; + }; + NumericField ED_DECIMALS + { + Border = TRUE ; + Pos = MAP_APPFONT ( LB_DECIMALS_X , LB_DECIMALS_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_ED_DECIMALS; + QuickHelpText [ en-US ] = "Enter the number of decimal places that you want to display."; + Spin = TRUE ; + Maximum = 20 ; + Last = 15 ; + First = 0 ; + StrictFormat = TRUE ; + SpinSize = 1 ; + Repeat = TRUE ; + }; + FixedText FT_LEADZEROES + { + Pos = MAP_APPFONT ( FT_LEADZEROES_X , FT_LEADZEROES_Y ) ; + Size = MAP_APPFONT (PROPERTYPAGE_WIDTH - MBOX_WIDTH *2 - SECTIONPAGE_MARGIN_HORIZONTAL * 2, TEXT_HEIGHT ) ; // + Text [ en-US ] = "Leading ~zeroes:" ; + }; + NumericField ED_LEADZEROES + { + Border = TRUE ; + Pos = MAP_APPFONT ( LB_LEADZEROES_X , LB_LEADZEROES_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_ED_LEADZEROES; + QuickHelpText [ en-US ] = "Enter the maximum number of zeroes to display before the decimal point."; + Spin = TRUE ; + Maximum = 20 ; + Last = 15 ; + First = 0 ; + StrictFormat = TRUE ; + SpinSize = 1 ; + Repeat = TRUE ; + }; + CheckBox BTN_NEGRED + { + Pos = MAP_APPFONT ( BTN_NEGRED_X , BTN_NEGRED_Y ) ; + Size = MAP_APPFONT ( 100 , CHECKBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_BTN_NEGRED; + QuickHelpText [ en-US ] = "Changes the font color of negative numbers to red."; + Text [ en-US ] = "~Negative numbers red" ; + }; + CheckBox BTN_THOUSAND + { + Pos = MAP_APPFONT ( BTN_THOUSAND_X , BTN_THOUSAND_Y ) ; + Size = MAP_APPFONT ( 100 , CHECKBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_NUMFMT_BTN_THOUSAND; + QuickHelpText [ en-US ] = "Inserts a separator between thousands."; + Text [ en-US ] = "~Thousands separator" ; + }; + Image IMG_NUMBER + { + ImageBitmap = Bitmap{File = "sidebar/123.png";}; + }; + Image IMG_PERCENT + { + ImageBitmap = Bitmap{File = "sidebar/percent.png";}; + }; + Image IMG_CURRENCY + { + ImageBitmap = Bitmap{File = "sidebar/money.png";}; + }; + Image IMG_DATE + { + ImageBitmap = Bitmap{File = "sidebar/canlendar.png";}; + }; + Image IMG_TEXT + { + ImageBitmap = Bitmap{File = "sidebar/ABC.png";}; + }; +}; + +// eof diff --git a/sc/source/ui/sidebar/ScPanelFactory.cxx b/sc/source/ui/sidebar/ScPanelFactory.cxx new file mode 100755 index 000000000000..30ad47432355 --- /dev/null +++ b/sc/source/ui/sidebar/ScPanelFactory.cxx @@ -0,0 +1,173 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sc.hxx" + +#include "ScPanelFactory.hxx" + +#include <AlignmentPropertyPanel.hxx> +#include <CellAppearancePropertyPanel.hxx> +#include <NumberFormatPropertyPanel.hxx> +#include <navipi.hxx> +#include <dwfunctr.hxx> +#include "sc.hrc" + +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sfxbasecontroller.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <vcl/window.hxx> +#include <rtl/ref.hxx> +#include <comphelper/namedvaluecollection.hxx> + +#include <boost/bind.hpp> + + +using namespace css; +using namespace cssu; +using ::rtl::OUString; + + +namespace sc { namespace sidebar { + +#define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) +#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.sc.sidebar.ScPanelFactory" +#define SERVICE_NAME "com.sun.star.ui.UIElementFactory" + + +::rtl::OUString SAL_CALL ScPanelFactory::getImplementationName (void) +{ + return A2S(IMPLEMENTATION_NAME); +} + + +cssu::Reference<cssu::XInterface> SAL_CALL ScPanelFactory::createInstance( + const uno::Reference<lang::XMultiServiceFactory>& ) +{ + ::rtl::Reference<ScPanelFactory> pPanelFactory (new ScPanelFactory()); + cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pPanelFactory.get()), cssu::UNO_QUERY); + return xService; +} + + +cssu::Sequence<OUString> SAL_CALL ScPanelFactory::getSupportedServiceNames (void) +{ + cssu::Sequence<OUString> aServiceNames (1); + aServiceNames[0] = A2S(SERVICE_NAME); + return aServiceNames; + +} + + +ScPanelFactory::ScPanelFactory (void) + : PanelFactoryInterfaceBase(m_aMutex) +{ +} + + +ScPanelFactory::~ScPanelFactory (void) +{ +} + + +Reference<ui::XUIElement> SAL_CALL ScPanelFactory::createUIElement ( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + container::NoSuchElementException, + lang::IllegalArgumentException, + RuntimeException) +{ + Reference<ui::XUIElement> xElement; + + const ::comphelper::NamedValueCollection aArguments (rArguments); + Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); + Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); + const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0))); + SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue); + + ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); + if ( ! xParentWindow.is() || pParentWindow==NULL) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without ParentWindow"), + NULL); + if ( ! xFrame.is()) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without Frame"), + NULL); + if (pBindings == NULL) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without SfxBindings"), + NULL); + +#define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s)) + if (DoesResourceEndWith("/AlignmentPropertyPanel")) + { + AlignmentPropertyPanel* pPanel = AlignmentPropertyPanel::Create( pParentWindow, xFrame, pBindings ); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(-1,-1,-1)); + } + else if (DoesResourceEndWith("/CellAppearancePropertyPanel")) + { + CellAppearancePropertyPanel* pPanel = CellAppearancePropertyPanel::Create( pParentWindow, xFrame, pBindings ); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(-1,-1,-1)); + } + else if (DoesResourceEndWith("/NumberFormatPropertyPanel")) + { + NumberFormatPropertyPanel* pPanel = NumberFormatPropertyPanel::Create( pParentWindow, xFrame, pBindings ); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(-1,-1,-1)); + } + else if (DoesResourceEndWith("/NavigatorPanel")) + { + Window* pPanel = new ScNavigatorDlg(pBindings, NULL, pParentWindow, false); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(0,-1,-1)); + } + else if (DoesResourceEndWith("/FunctionsPanel")) + { + Window* pPanel = new ScFunctionDockWin(pBindings, NULL, pParentWindow, ScResId(FID_FUNCTION_BOX)); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(0,-1,-1)); + } +#undef DoesResourceEndWith + + return xElement; +} + +} } // end of namespace sc::sidebar + +// eof diff --git a/sd/source/ui/toolpanel/makefile.mk b/sc/source/ui/sidebar/makefile.mk index 7ba8276fb21e..4c20fec5986f 100644..100755 --- a/sd/source/ui/toolpanel/makefile.mk +++ b/sc/source/ui/sidebar/makefile.mk @@ -19,17 +19,11 @@ # #************************************************************** - - PRJ=..$/..$/.. -PROJECTPCH=sd -PROJECTPCHSOURCE=$(PRJ)$/util$/sd -PRJNAME=sd -TARGET=toolpanel +PRJNAME=sc +TARGET=sidebar ENABLE_EXCEPTIONS=TRUE -AUTOSEG=true -PRJINC=..$/slidesorter # --- Settings ----------------------------------------------------- @@ -38,27 +32,23 @@ PRJINC=..$/slidesorter # --- Files -------------------------------------------------------- -SLOFILES = \ - $(SLO)$/ControlContainer.obj \ - $(SLO)$/ScrollPanel.obj \ - $(SLO)$/SubToolPanel.obj \ - $(SLO)$/TitleBar.obj \ - $(SLO)$/TitledControl.obj \ - $(SLO)$/TaskPaneControlFactory.obj \ - $(SLO)$/TaskPaneFocusManager.obj \ - $(SLO)$/TaskPaneShellManager.obj \ - $(SLO)$/TaskPaneTreeNode.obj \ - $(SLO)$/ToolPanel.obj \ - $(SLO)$/ToolPanelViewShell.obj \ - $(SLO)$/ToolPanelFactory.obj \ - $(SLO)$/ToolPanelUIElement.obj \ - \ - $(SLO)$/LayoutMenu.obj \ - $(SLO)$/TestMenu.obj \ - $(SLO)$/TestPanel.obj \ - $(SLO)$/SlideSorterCacheDisplay.obj - -EXCEPTIONSFILES= +SRS1NAME=$(TARGET) +SRC1FILES = \ + AlignmentPropertyPanel.src \ + CellAppearancePropertyPanel.src \ + NumberFormatPropertyPanel.src + +SLOFILES = \ + $(SLO)$/ScPanelFactory.obj \ + $(SLO)$/AlignmentPropertyPanel.obj \ + $(SLO)$/CellLineStyleControl.obj \ + $(SLO)$/CellLineStylePopup.obj \ + $(SLO)$/CellLineStyleValueSet.obj \ + $(SLO)$/CellBorderUpdater.obj \ + $(SLO)$/CellAppearancePropertyPanel.obj \ + $(SLO)$/CellBorderStyleControl.obj \ + $(SLO)$/CellBorderStylePopup.obj \ + $(SLO)$/NumberFormatPropertyPanel.obj # --- Tagets ------------------------------------------------------- diff --git a/sc/source/ui/unoobj/appluno.cxx b/sc/source/ui/unoobj/appluno.cxx index 0c775bb25252..d251532ebf80 100644 --- a/sc/source/ui/unoobj/appluno.cxx +++ b/sc/source/ui/unoobj/appluno.cxx @@ -45,6 +45,7 @@ #include "unonames.hxx" #include "funcdesc.hxx" #include <com/sun/star/sheet/FunctionArgument.hpp> +#include "ScPanelFactory.hxx" using namespace com::sun::star; @@ -198,154 +199,189 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( rtl::OUString aImpl(rtl::OUString::createFromAscii(pImplName)); if ( aImpl == ScSpreadsheetSettings::getImplementationName_Static() ) + { xFactory.set(cppu::createOneInstanceFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScSpreadsheetSettings::getImplementationName_Static(), ScSpreadsheetSettings_CreateInstance, ScSpreadsheetSettings::getSupportedServiceNames_Static() )); - - if ( aImpl == ScRecentFunctionsObj::getImplementationName_Static() ) + } + else if ( aImpl == ScRecentFunctionsObj::getImplementationName_Static() ) + { xFactory.set(cppu::createOneInstanceFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScRecentFunctionsObj::getImplementationName_Static(), ScRecentFunctionsObj_CreateInstance, ScRecentFunctionsObj::getSupportedServiceNames_Static() )); - - if ( aImpl == ScFunctionListObj::getImplementationName_Static() ) + } + else if ( aImpl == ScFunctionListObj::getImplementationName_Static() ) + { xFactory.set(cppu::createOneInstanceFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScFunctionListObj::getImplementationName_Static(), ScFunctionListObj_CreateInstance, ScFunctionListObj::getSupportedServiceNames_Static() )); - - if ( aImpl == ScAutoFormatsObj::getImplementationName_Static() ) + } + else if ( aImpl == ScAutoFormatsObj::getImplementationName_Static() ) + { xFactory.set(cppu::createOneInstanceFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScAutoFormatsObj::getImplementationName_Static(), ScAutoFormatsObj_CreateInstance, ScAutoFormatsObj::getSupportedServiceNames_Static() )); - - if ( aImpl == ScFunctionAccess::getImplementationName_Static() ) + } + else if ( aImpl == ScFunctionAccess::getImplementationName_Static() ) + { xFactory.set(cppu::createOneInstanceFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScFunctionAccess::getImplementationName_Static(), ScFunctionAccess_CreateInstance, ScFunctionAccess::getSupportedServiceNames_Static() )); - - if ( aImpl == ScFilterOptionsObj::getImplementationName_Static() ) + } + else if ( aImpl == ScFilterOptionsObj::getImplementationName_Static() ) + { xFactory.set(cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScFilterOptionsObj::getImplementationName_Static(), ScFilterOptionsObj_CreateInstance, ScFilterOptionsObj::getSupportedServiceNames_Static() )); - - if ( aImpl == ScXMLImport_getImplementationName() ) + } + else if ( aImpl == ScXMLImport_getImplementationName() ) + { xFactory.set(cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLImport_getImplementationName(), ScXMLImport_createInstance, ScXMLImport_getSupportedServiceNames() )); - - if ( aImpl == ScXMLImport_Meta_getImplementationName() ) + } + else if ( aImpl == ScXMLImport_Meta_getImplementationName() ) + { xFactory.set(cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLImport_Meta_getImplementationName(), ScXMLImport_Meta_createInstance, ScXMLImport_Meta_getSupportedServiceNames() )); - - if ( aImpl == ScXMLImport_Styles_getImplementationName() ) + } + else if ( aImpl == ScXMLImport_Styles_getImplementationName() ) + { xFactory.set(cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLImport_Styles_getImplementationName(), ScXMLImport_Styles_createInstance, ScXMLImport_Styles_getSupportedServiceNames() )); - - if ( aImpl == ScXMLImport_Content_getImplementationName() ) + } + else if ( aImpl == ScXMLImport_Content_getImplementationName() ) + { xFactory.set(cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLImport_Content_getImplementationName(), ScXMLImport_Content_createInstance, ScXMLImport_Content_getSupportedServiceNames() )); - - if ( aImpl == ScXMLImport_Settings_getImplementationName() ) + } + else if ( aImpl == ScXMLImport_Settings_getImplementationName() ) + { xFactory.set(cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLImport_Settings_getImplementationName(), ScXMLImport_Settings_createInstance, ScXMLImport_Settings_getSupportedServiceNames() )); - - if ( aImpl == ScXMLOOoExport_getImplementationName() ) + } + else if ( aImpl == ScXMLOOoExport_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOOoExport_getImplementationName(), ScXMLOOoExport_createInstance, ScXMLOOoExport_getSupportedServiceNames() ); - - if ( aImpl == ScXMLOOoExport_Meta_getImplementationName() ) + } + else if ( aImpl == ScXMLOOoExport_Meta_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOOoExport_Meta_getImplementationName(), ScXMLOOoExport_Meta_createInstance, ScXMLOOoExport_Meta_getSupportedServiceNames() ); - - if ( aImpl == ScXMLOOoExport_Styles_getImplementationName() ) + } + else if ( aImpl == ScXMLOOoExport_Styles_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOOoExport_Styles_getImplementationName(), ScXMLOOoExport_Styles_createInstance, ScXMLOOoExport_Styles_getSupportedServiceNames() ); - - if ( aImpl == ScXMLOOoExport_Content_getImplementationName() ) + } + else if ( aImpl == ScXMLOOoExport_Content_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOOoExport_Content_getImplementationName(), ScXMLOOoExport_Content_createInstance, ScXMLOOoExport_Content_getSupportedServiceNames() ); - - if ( aImpl == ScXMLOOoExport_Settings_getImplementationName() ) + } + else if ( aImpl == ScXMLOOoExport_Settings_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOOoExport_Settings_getImplementationName(), ScXMLOOoExport_Settings_createInstance, ScXMLOOoExport_Settings_getSupportedServiceNames() ); - - if ( aImpl == ScXMLOasisExport_getImplementationName() ) + } + else if ( aImpl == ScXMLOasisExport_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOasisExport_getImplementationName(), ScXMLOasisExport_createInstance, ScXMLOasisExport_getSupportedServiceNames() ); - if ( aImpl == ScXMLOasisExport_Meta_getImplementationName() ) + } + else if ( aImpl == ScXMLOasisExport_Meta_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOasisExport_Meta_getImplementationName(), ScXMLOasisExport_Meta_createInstance, ScXMLOasisExport_Meta_getSupportedServiceNames() ); - if ( aImpl == ScXMLOasisExport_Styles_getImplementationName() ) + } + else if ( aImpl == ScXMLOasisExport_Styles_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOasisExport_Styles_getImplementationName(), ScXMLOasisExport_Styles_createInstance, ScXMLOasisExport_Styles_getSupportedServiceNames() ); - if ( aImpl == ScXMLOasisExport_Content_getImplementationName() ) + } + else if ( aImpl == ScXMLOasisExport_Content_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOasisExport_Content_getImplementationName(), ScXMLOasisExport_Content_createInstance, ScXMLOasisExport_Content_getSupportedServiceNames() ); - if ( aImpl == ScXMLOasisExport_Settings_getImplementationName() ) + } + else if ( aImpl == ScXMLOasisExport_Settings_getImplementationName() ) + { xFactory = cppu::createSingleFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScXMLOasisExport_Settings_getImplementationName(), ScXMLOasisExport_Settings_createInstance, ScXMLOasisExport_Settings_getSupportedServiceNames() ); - - if ( aImpl == ScDocument_getImplementationName() ) + } + else if ( aImpl == ScDocument_getImplementationName() ) + { xFactory.set(sfx2::createSfxModelFactory( reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), ScDocument_getImplementationName(), ScDocument_createInstance, ScDocument_getSupportedServiceNames() )); + } + else if ( aImpl == ::sc::sidebar::ScPanelFactory::getImplementationName() ) + { + xFactory = ::cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ::sc::sidebar::ScPanelFactory::getImplementationName(), + ::sc::sidebar::ScPanelFactory::createInstance, + ::sc::sidebar::ScPanelFactory::getSupportedServiceNames() ); + } void* pRet = NULL; if (xFactory.is()) diff --git a/sc/source/ui/view/auditsh.cxx b/sc/source/ui/view/auditsh.cxx index 2fb72ac8a3cf..5a768ac832a9 100644 --- a/sc/source/ui/view/auditsh.cxx +++ b/sc/source/ui/view/auditsh.cxx @@ -34,6 +34,7 @@ #include <sfx2/objface.hxx> #include <sfx2/objsh.hxx> #include <sfx2/request.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include "auditsh.hxx" #include "tabvwsh.hxx" @@ -72,6 +73,7 @@ ScAuditingShell::ScAuditingShell(ScViewData* pData) : } SetHelpId( HID_SCSHELL_AUDIT ); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Auditing"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Auditing)); } //------------------------------------------------------------------------ @@ -147,5 +149,3 @@ void ScAuditingShell::GetState( SfxItemSet& rSet ) { rSet.Put( SfxBoolItem( nFunction, sal_True ) ); // aktive Funktion markieren } - - diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx index f8c544bc2003..1324797d0066 100644 --- a/sc/source/ui/view/cellsh.cxx +++ b/sc/source/ui/view/cellsh.cxx @@ -42,7 +42,9 @@ #include <sfx2/objface.hxx> #include <sfx2/request.hxx> #include <sfx2/viewfrm.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svx/clipfmtitem.hxx> +#include <svx/sidebar/ContextChangeEventMultiplexer.hxx> #include <editeng/langitem.hxx> #include "cellsh.hxx" @@ -85,6 +87,7 @@ ScCellShell::ScCellShell(ScViewData* pData) : { SetHelpId(HID_SCSHELL_CELLSH); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Cell"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Cell)); } ScCellShell::~ScCellShell() diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx index 56f52d2bbdd1..208cfe7b9aa0 100644 --- a/sc/source/ui/view/cellsh3.cxx +++ b/sc/source/ui/view/cellsh3.cxx @@ -360,6 +360,14 @@ void ScCellShell::Execute( SfxRequest& rReq ) pTabViewShell->ExecuteCellFormatDlg( rReq, TP_ALIGNMENT ); break; + case SID_CELL_FORMAT_BORDER: + pTabViewShell->ExecuteCellFormatDlg( rReq, TP_BORDER ); + break; + + case SID_CHAR_DLG_EFFECT: + pTabViewShell->ExecuteCellFormatDlg( rReq, TP_FONTEFF ); + break; + case SID_OPENDLG_SOLVE: { sal_uInt16 nId = ScSolverDlgWrapper::GetChildWindowId(); diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx index 851447e946d3..2c993ccbc184 100644 --- a/sc/source/ui/view/drawview.cxx +++ b/sc/source/ui/view/drawview.cxx @@ -225,6 +225,10 @@ void ScDrawView::InvalidateDrawTextAttrs() rBindings.Invalidate( SID_ULINE_VAL_DOTTED ); rBindings.Invalidate( SID_ATTR_CHAR_OVERLINE ); rBindings.Invalidate( SID_ATTR_CHAR_COLOR ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER); rBindings.Invalidate( SID_ALIGNLEFT ); rBindings.Invalidate( SID_ALIGNCENTERHOR ); rBindings.Invalidate( SID_ALIGNRIGHT ); @@ -234,6 +238,9 @@ void ScDrawView::InvalidateDrawTextAttrs() rBindings.Invalidate( SID_ATTR_PARA_LINESPACE_20 ); rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); rBindings.Invalidate( SID_SET_SUB_SCRIPT ); + rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); + rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); + rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); rBindings.Invalidate( SID_TEXTDIRECTION_LEFT_TO_RIGHT ); rBindings.Invalidate( SID_TEXTDIRECTION_TOP_TO_BOTTOM ); rBindings.Invalidate( SID_ATTR_PARA_LEFT_TO_RIGHT ); diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx index 65e973aecc5e..ab0b6e315a06 100644 --- a/sc/source/ui/view/editsh.cxx +++ b/sc/source/ui/view/editsh.cxx @@ -45,6 +45,7 @@ #include <editeng/flditem.hxx> #include <editeng/fontitem.hxx> #include <svx/hlnkitem.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <editeng/postitem.hxx> #include <editeng/scripttypeitem.hxx> #include <editeng/shdditem.hxx> @@ -113,6 +114,7 @@ ScEditShell::ScEditShell(EditView* pView, ScViewData* pData) : SetPool( pEditView->GetEditEngine()->GetEmptyItemSet().GetPool() ); SetUndoManager( &pEditView->GetEditEngine()->GetUndoManager() ); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("EditCell"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_EditCell)); } ScEditShell::~ScEditShell() @@ -331,6 +333,17 @@ void ScEditShell::Execute( SfxRequest& rReq ) pTableView->SetSelection(ESelection(0,0,nPar-1,nLen)); if (pTopView) pTopView->SetSelection(ESelection(0,0,nPar-1,nLen)); + rBindings.Invalidate( SID_ATTR_CHAR_FONT ); + rBindings.Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); + rBindings.Invalidate( SID_ATTR_CHAR_WEIGHT ); + rBindings.Invalidate( SID_ATTR_CHAR_POSTURE ); + rBindings.Invalidate( SID_ATTR_CHAR_UNDERLINE ); + rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); + rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); + rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); + rBindings.Invalidate( SID_ATTR_CHAR_COLOR ); + rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); + rBindings.Invalidate( SID_SET_SUB_SCRIPT ); } bSetModified = sal_False; } @@ -453,6 +466,7 @@ void ScEditShell::Execute( SfxRequest& rReq ) } break; + case SID_CHAR_DLG_EFFECT: case SID_CHAR_DLG: { SfxItemSet aAttrs( pTableView->GetAttribs() ); @@ -466,6 +480,10 @@ void ScEditShell::Execute( SfxRequest& rReq ) SfxAbstractTabDialog* pDlg = pFact->CreateScCharDlg( pViewData->GetDialogParent(), &aAttrs, pObjSh, RID_SCDLG_CHAR ); DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 + if (nSlot == SID_CHAR_DLG_EFFECT) + { + pDlg->SetCurPageId(RID_SVXPAGE_CHAR_EFFECTS); + } short nRet = pDlg->Execute(); // pDlg is needed below @@ -988,6 +1006,15 @@ void ScEditShell::ExecuteAttr(SfxRequest& rReq) rBindings.Invalidate( nSlot ); } break; + case SID_ATTR_CHAR_KERNING: + { + if(pArgs) + { + aSet.Put ( pArgs->Get(pArgs->GetPool()->GetWhich(nSlot))); + rBindings.Invalidate( nSlot ); + } + } + break; } // @@ -1074,6 +1101,27 @@ void ScEditShell::GetAttrState(SfxItemSet &rSet) ScInputHandler* pHdl = GetMyInputHdl(); if ( pHdl && pHdl->IsFormulaMode() ) rSet.ClearItem( EE_CHAR_WEIGHT ); // hervorgehobene Klammern hier nicht + + SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) + aAttribs.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) + { + rSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, sal_True ) ); + } + else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) + { + rSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, sal_True ) ); + } + pViewData->GetBindings().Invalidate( SID_SET_SUPER_SCRIPT ); + pViewData->GetBindings().Invalidate( SID_SET_SUB_SCRIPT ); + + eState = aAttribs.GetItemState( EE_CHAR_KERNING, sal_True ); + pViewData->GetBindings().Invalidate( SID_ATTR_CHAR_KERNING ); + if ( eState == SFX_ITEM_DONTCARE ) + { + // rSet.InvalidateItem( SID_ATTR_CHAR_KERNING ); + rSet.InvalidateItem(EE_CHAR_KERNING); + } } String ScEditShell::GetSelectionText( sal_Bool bWholeWord ) @@ -1202,4 +1250,3 @@ void ScEditShell::ExecuteTrans( SfxRequest& rReq ) pHdl->DataChanged(); } } - diff --git a/sc/source/ui/view/formatsh.cxx b/sc/source/ui/view/formatsh.cxx index 2c68c31d9c4f..28e39e66673d 100644 --- a/sc/source/ui/view/formatsh.cxx +++ b/sc/source/ui/view/formatsh.cxx @@ -990,13 +990,97 @@ void ScFormatShell::ExecuteNumFormat( SfxRequest& rReq ) break; case SID_NUMBER_FORMAT: - if ( pReqArgs ) + //if ( pReqArgs ) + //{ + // const SfxPoolItem* pItem; + // if(pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET) + // { + // String aCode = ((const SfxStringItem*)pItem)->GetValue(); + // pTabViewShell->SetNumFmtByStr( aCode ); + // } + //} + + // symphony version with format interpretation + if(pReqArgs) { const SfxPoolItem* pItem; - if(pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET) + ScDocument* pDoc = pViewData->GetDocument(); + SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); + LanguageType eLanguage = ScGlobal::eLnge; + sal_Int16 eType = -1; + sal_uInt32 nCurrentNumberFormat; + + pDoc->GetNumberFormat(pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo(), nCurrentNumberFormat); + const SvNumberformat* pEntry = pFormatter->GetEntry(nCurrentNumberFormat); + + if(pEntry) + { + eLanguage = pEntry->GetLanguage(); + eType = pEntry->GetType(); + } + + //Just use eType to judge whether the command is fired for NUMBER/PERCENT/CURRENCY + //In sidebar, users can fire SID_NUMBER_FORMAT command by operating the related UI controls before they are disable + switch(eType) + { + case NUMBERFORMAT_ALL: + case NUMBERFORMAT_NUMBER: + case NUMBERFORMAT_NUMBER| NUMBERFORMAT_DEFINED: + case NUMBERFORMAT_PERCENT: + case NUMBERFORMAT_PERCENT| NUMBERFORMAT_DEFINED: + case NUMBERFORMAT_CURRENCY: + case NUMBERFORMAT_CURRENCY|NUMBERFORMAT_DEFINED: + eType = 0; + break; + default: + eType =-1; + } + + if(SFX_ITEM_SET == pReqArgs->GetItemState(nSlot, true, &pItem) && eType != -1) { String aCode = ((const SfxStringItem*)pItem)->GetValue(); - pTabViewShell->SetNumFmtByStr( aCode ); + sal_uInt16 aLen = aCode.Len(); + String* sFormat = new String[4]; + String sTmpStr = String::CreateFromAscii(""); + sal_uInt16 nCount(0); + sal_uInt16 nStrCount(0); + + while(nCount < aLen) + { + sal_Unicode cChar = aCode.GetChar(nCount); + + if(cChar == sal_Unicode(',')) + { + sFormat[nStrCount] = sTmpStr; + sTmpStr = String::CreateFromAscii(""); + nStrCount++; + } + else + { + sTmpStr += cChar; + } + + nCount++; + + if(nStrCount > 3) + break; + } + + const sal_Bool bThousand = (sal_Bool)sFormat[0].ToInt32(); + const sal_Bool bNegRed = (sal_Bool)sFormat[1].ToInt32(); + const sal_uInt16 nPrecision = (sal_uInt16)sFormat[2].ToInt32(); + const sal_uInt16 nLeadZeroes = (sal_uInt16)sFormat[3].ToInt32(); + + pFormatter->GenerateFormat( + aCode, + nCurrentNumberFormat,//modify + eLanguage, + bThousand, + bNegRed, + nPrecision, + nLeadZeroes); + pTabViewShell->SetNumFmtByStr(aCode); + delete[] sFormat; } } break; @@ -1020,6 +1104,49 @@ void ScFormatShell::ExecuteNumFormat( SfxRequest& rReq ) } break; + case SID_NUMBER_TYPE_FORMAT: + { + SfxInt16Item aFormatItem((const SfxInt16Item&)rReq.GetArgs()->Get(nSlot)); + sal_uInt16 nFormat = aFormatItem.GetValue(); + switch(nFormat) + { + case 0: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER); //Modify + break; + case 1: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER, 2 ); //Modify + break; + case 2: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_PERCENT ); + break; + case 3: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_CURRENCY ); + break; + case 4: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_DATE ); + break; + case 5: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_TIME ); + break; + case 6: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_SCIENTIFIC ); + break; + case 7: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_FRACTION ); + break; + case 8: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_LOGICAL ); + break; + case 9: + pTabViewShell->SetNumberFormat( NUMBERFORMAT_TEXT ); + break; + default: + ; + } + rReq.Done(); + } + break; + default: DBG_ERROR("falscher Slot bei ExecuteEdit"); break; @@ -1109,7 +1236,10 @@ void ScFormatShell::ExecuteAlignment( SfxRequest& rReq ) } } } - + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER); rBindings.Invalidate( SID_ALIGNLEFT ); rBindings.Invalidate( SID_ALIGNRIGHT ); rBindings.Invalidate( SID_ALIGNCENTERHOR ); @@ -1622,6 +1752,44 @@ void ScFormatShell::ExecuteAttr( SfxRequest& rReq ) } break; + case SID_ATTR_BORDER_DIAG_TLBR: + case SID_ATTR_BORDER_DIAG_BLTR: + { + ScDocument* pDoc = GetViewData()->GetDocument(); + const ScPatternAttr* pOldAttrs = pTabViewShell->GetSelectionPattern(); + SfxItemSet* pOldSet = new SfxItemSet(pOldAttrs->GetItemSet()); + SfxItemSet* pNewSet = new SfxItemSet(pOldAttrs->GetItemSet()); + const SfxPoolItem* pItem = 0; + + if(SID_ATTR_BORDER_DIAG_TLBR == nSlot) + { + if(SFX_ITEM_SET == pNewAttrs->GetItemState(ATTR_BORDER_TLBR, true, &pItem)) + { + SvxLineItem aItem(ATTR_BORDER_TLBR); + aItem.SetLine(((const SvxLineItem&)pNewAttrs->Get(ATTR_BORDER_TLBR)).GetLine()); + pNewSet->Put(aItem); + rReq.AppendItem(aItem); + pTabViewShell->ApplyAttributes(pNewSet, pOldSet); + } + } + else // if( nSlot == SID_ATTR_BORDER_DIAG_BLTR ) + { + if(SFX_ITEM_SET == pNewAttrs->GetItemState(ATTR_BORDER_BLTR, true, &pItem )) + { + SvxLineItem aItem(ATTR_BORDER_BLTR); + aItem.SetLine(((const SvxLineItem&)pNewAttrs->Get(ATTR_BORDER_BLTR)).GetLine()); + pNewSet->Put(aItem); + rReq.AppendItem(aItem); + pTabViewShell->ApplyAttributes(pNewSet, pOldSet); + } + } + + delete pOldSet; + delete pNewSet; + rBindings.Invalidate(nSlot); + } + break; + // ATTR_BACKGROUND (=SID_ATTR_BRUSH) muss ueber zwei IDs // gesetzt werden: case SID_BACKGROUND_COLOR: @@ -1700,11 +1868,184 @@ void ScFormatShell::GetAttrState( SfxItemSet& rSet ) case SID_BACKGROUND_COLOR: { rSet.Put( SvxColorItem( rBrushItem.GetColor(), SID_BACKGROUND_COLOR ) ); + + if(SFX_ITEM_DONTCARE == rAttrSet.GetItemState(ATTR_BACKGROUND)) + { + rSet.InvalidateItem(SID_BACKGROUND_COLOR); + } } break; + case SID_FRAME_LINESTYLE: case SID_FRAME_LINECOLOR: { - rSet.Put( SvxColorItem( pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR ) ); + // handled together because both need the cell border information for decisions + // rSet.Put( SvxColorItem( pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR ) ); + Color aCol = 0; + sal_uInt16 nOut = 0, nIn = 0, nDis = 0; + SvxBorderLine aLine(0,0,0,0); + bool bCol = 0; + bool bColDisable = 0, bStyleDisable = 0; + SvxBoxItem aBoxItem(ATTR_BORDER); + SvxBoxInfoItem aInfoItem(ATTR_BORDER_INNER); + + pTabViewShell->GetSelectionFrame(aBoxItem, aInfoItem); + + if( aBoxItem.GetTop() ) + { + bCol = 1; + aCol = aBoxItem.GetTop()->GetColor() ; + aLine.SetColor(aCol); + aLine.SetOutWidth( aBoxItem.GetTop()->GetOutWidth()); + aLine.SetInWidth( aBoxItem.GetTop()->GetInWidth()); + aLine.SetDistance( aBoxItem.GetTop()->GetDistance()); + } + + if( aBoxItem.GetBottom() ) + { + if(bCol == 0) + { + bCol = 1; + aCol = aBoxItem.GetBottom()->GetColor() ; + aLine.SetColor(aCol); + aLine.SetOutWidth( aBoxItem.GetBottom()->GetOutWidth()); + aLine.SetInWidth( aBoxItem.GetBottom()->GetInWidth()); + aLine.SetDistance( aBoxItem.GetBottom()->GetDistance()); + } + else + { + if(aCol != aBoxItem.GetBottom()->GetColor() ) + bColDisable = 1; + if(!( aLine == *(aBoxItem.GetBottom())) ) + bStyleDisable = 1; + } + } + + if( aBoxItem.GetLeft() ) + { + if(bCol == 0) + { + bCol = 1; + aCol = aBoxItem.GetLeft()->GetColor() ; + aLine.SetColor(aCol); + aLine.SetOutWidth( aBoxItem.GetLeft()->GetOutWidth()); + aLine.SetInWidth( aBoxItem.GetLeft()->GetInWidth()); + aLine.SetDistance( aBoxItem.GetLeft()->GetDistance()); + } + else + { + if(aCol != aBoxItem.GetLeft()->GetColor() ) + bColDisable = 1; + if(!( aLine == *(aBoxItem.GetLeft())) ) + bStyleDisable = 1; + } + } + + if( aBoxItem.GetRight() ) + { + if(bCol == 0) + { + bCol = 1; + aCol = aBoxItem.GetRight()->GetColor() ; + aLine.SetColor(aCol); + aLine.SetOutWidth( aBoxItem.GetRight()->GetOutWidth()); + aLine.SetInWidth( aBoxItem.GetRight()->GetInWidth()); + aLine.SetDistance( aBoxItem.GetRight()->GetDistance()); + } + else + { + if(aCol != aBoxItem.GetRight()->GetColor() ) + bColDisable = 1; + if(!( aLine == *(aBoxItem.GetRight())) ) + bStyleDisable = 1; + } + } + + if( aInfoItem.GetVert()) + { + if(bCol == 0) + { + bCol = 1; + aCol = aInfoItem.GetVert()->GetColor() ; + aLine.SetColor(aCol); + aLine.SetOutWidth( aInfoItem.GetVert()->GetOutWidth()); + aLine.SetInWidth( aInfoItem.GetVert()->GetInWidth()); + aLine.SetDistance( aInfoItem.GetVert()->GetDistance()); + } + else + { + if(aCol != aInfoItem.GetVert()->GetColor() ) + bColDisable = 1; + if(!( aLine == *(aInfoItem.GetVert())) ) + bStyleDisable = 1; + } + } + + if( aInfoItem.GetHori()) + { + if(bCol == 0) + { + bCol = 1; + aCol = aInfoItem.GetHori()->GetColor() ; + aLine.SetColor(aCol); + aLine.SetOutWidth( aInfoItem.GetHori()->GetOutWidth()); + aLine.SetInWidth( aInfoItem.GetHori()->GetInWidth()); + aLine.SetDistance( aInfoItem.GetHori()->GetDistance()); + } + else + { + if(aCol != aInfoItem.GetHori()->GetColor() ) + bColDisable = 1; + if(!( aLine == *(aInfoItem.GetHori())) ) + bStyleDisable = 1; + } + } + + if( !aInfoItem.IsValid( VALID_VERT ) + || !aInfoItem.IsValid( VALID_HORI ) + || !aInfoItem.IsValid( VALID_LEFT ) + || !aInfoItem.IsValid( VALID_RIGHT ) + || !aInfoItem.IsValid( VALID_TOP ) + || !aInfoItem.IsValid( VALID_BOTTOM ) ) + { + bColDisable = 1; + bStyleDisable = 1; + } + + if(SID_FRAME_LINECOLOR == nWhich) + { + if(bColDisable) // if different lines have differernt colors + { + aCol = COL_TRANSPARENT; + rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) ); + rSet.InvalidateItem(SID_FRAME_LINECOLOR); + } + else if( bCol == 0 && bColDisable == 0) // if no line available + { + aCol = COL_AUTO; + rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) ); + } + else + rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) ); + } + else // if( nWhich == SID_FRAME_LINESTYLE) + { + if(bStyleDisable) // if have several lines but don't have same style + { + aLine.SetOutWidth( 1 ); + aLine.SetInWidth( 0 ); + aLine.SetDistance( 0 ); + SvxLineItem aItem(SID_FRAME_LINESTYLE); + aItem.SetLine(&aLine); + rSet.Put( aItem ); + rSet.InvalidateItem(SID_FRAME_LINESTYLE); + } + else // all the lines have same style or no line availavle, use initial value (0,0,0,0) + { + SvxLineItem aItem(SID_FRAME_LINESTYLE); + aItem.SetLine(&aLine); + rSet.Put( aItem ); + } + } } break; case SID_ATTR_BRUSH: @@ -1722,6 +2063,13 @@ void ScFormatShell::GetAttrState( SfxItemSet& rSet ) } nWhich = aIter.NextWhich(); } + + if(nWhich) + { + // stuff for sidebar panels + Invalidate(SID_ATTR_ALIGN_DEGREES); + Invalidate(SID_ATTR_ALIGN_STACKED); + } } //------------------------------------------------------------------ @@ -1999,25 +2347,141 @@ void ScFormatShell::GetNumFormatState( SfxItemSet& rSet ) switch ( nWhich ) { case SID_NUMBER_FORMAT: + //{ + // String aFormatCode; // bleibt leer, wenn dont-care + // + // const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet(); + // if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) != SFX_ITEM_DONTCARE ) + // { + // sal_uLong nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get( + // ATTR_VALUE_FORMAT )).GetValue(); + // + // SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); + // const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat ); + // if ( pFormatEntry ) + // aFormatCode = pFormatEntry->GetFormatstring(); + // } + // + // rSet.Put( SfxStringItem( nWhich, aFormatCode ) ); + //} + + // symphony version with format interpretation { - String aFormatCode; // bleibt leer, wenn dont-care + const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet(); - const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet(); - if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) != SFX_ITEM_DONTCARE ) + if(SFX_ITEM_DONTCARE != rAttrSet.GetItemState(ATTR_VALUE_FORMAT)) { - sal_uLong nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get( - ATTR_VALUE_FORMAT )).GetValue(); + SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); + sal_uInt32 nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get(ATTR_VALUE_FORMAT)).GetValue(); + sal_Bool bThousand(false); + sal_Bool bNegRed(false); + sal_uInt16 nPrecision(0); + sal_uInt16 nLeadZeroes(0); + + pFormatter->GetFormatSpecialInfo(nNumberFormat,bThousand, bNegRed, nPrecision, nLeadZeroes); + String aFormat; + static String sBreak = String::CreateFromAscii(","); + const String sThousand = String::CreateFromInt32(bThousand); + const String sNegRed = String::CreateFromInt32(bNegRed); + const String sPrecision = String::CreateFromInt32(nPrecision); + const String sLeadZeroes = String::CreateFromInt32(nLeadZeroes); + + aFormat += sThousand; + aFormat += sBreak; + aFormat += sNegRed; + aFormat += sBreak; + aFormat += sPrecision; + aFormat += sBreak; + aFormat += sLeadZeroes; + aFormat += sBreak; + + rSet.Put(SfxStringItem(nWhich, aFormat)); + } + else + { + rSet.InvalidateItem( nWhich ); + } + } + break; + case SID_NUMBER_TYPE_FORMAT: + { + sal_Int16 aFormatCode = -1; + const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet(); + if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) >= SFX_ITEM_AVAILABLE ) //Modify for more robust + { SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); + sal_uInt32 nNumberFormat = pTabViewShell->GetSelectionPattern()->GetNumberFormat( pFormatter ); const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat ); + bool bStandard = false; + if ( pFormatEntry ) - aFormatCode = pFormatEntry->GetFormatstring(); + { + aFormatCode = pFormatEntry->GetType(); + bStandard = pFormatEntry->IsStandard(); + } + + switch(aFormatCode) + { + case NUMBERFORMAT_NUMBER: + case NUMBERFORMAT_NUMBER| NUMBERFORMAT_DEFINED: + //use format code and standard format code to judge whether it is General, + //if (nNumberFormat == nStandardNumberFormat) + if (bStandard) + aFormatCode = 0; + else + aFormatCode = 1; + break; + case NUMBERFORMAT_PERCENT: + case NUMBERFORMAT_PERCENT| NUMBERFORMAT_DEFINED: + aFormatCode = 2; + break; + case NUMBERFORMAT_CURRENCY: + case NUMBERFORMAT_CURRENCY| NUMBERFORMAT_DEFINED: + aFormatCode = 3; + break; + case NUMBERFORMAT_DATE: + case NUMBERFORMAT_DATE| NUMBERFORMAT_DEFINED: + //Add + case NUMBERFORMAT_DATETIME: + case NUMBERFORMAT_DATETIME | NUMBERFORMAT_DEFINED: + aFormatCode = 4; + break; + case NUMBERFORMAT_TIME: + case NUMBERFORMAT_TIME| NUMBERFORMAT_DEFINED: + aFormatCode = 5; + break; + case NUMBERFORMAT_SCIENTIFIC: + case NUMBERFORMAT_SCIENTIFIC| NUMBERFORMAT_DEFINED: + aFormatCode = 6; + break; + case NUMBERFORMAT_FRACTION: + case NUMBERFORMAT_FRACTION| NUMBERFORMAT_DEFINED: + aFormatCode = 7; + break; + case NUMBERFORMAT_LOGICAL: + case NUMBERFORMAT_LOGICAL| NUMBERFORMAT_DEFINED: + aFormatCode = 8; + break; + case NUMBERFORMAT_TEXT: + case NUMBERFORMAT_TEXT| NUMBERFORMAT_DEFINED: + aFormatCode = 9; + break; + default: + aFormatCode = -1; //for more roburst + } + if( aFormatCode == -1 ) + rSet.InvalidateItem( nWhich ); + else + rSet.Put( SfxInt16Item( nWhich, aFormatCode ) ); + } + else + { + rSet.InvalidateItem( nWhich ); } - rSet.Put( SfxStringItem( nWhich, aFormatCode ) ); } break; - } nWhich = aIter.NextWhich(); } @@ -2168,3 +2632,52 @@ void ScFormatShell::StateFormatPaintbrush( SfxItemSet& rSet ) rSet.Put( SfxBoolItem( SID_FORMATPAINTBRUSH, pViewData->GetView()->HasPaintBrush() ) ); } +void ScFormatShell::ExecViewOptions( SfxRequest& rReq ) +{ + ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell(); + SfxBindings& rBindings = pViewData->GetBindings(); + const SfxItemSet* pNewAttrs = rReq.GetArgs(); + + if ( pNewAttrs ) + { + sal_uInt16 nSlot = rReq.GetSlot(); + + if( nSlot == SID_SCGRIDSHOW) + { + + ScViewData* pViewData = pTabViewShell->GetViewData(); + const ScViewOptions& rOldOpt = pViewData->GetOptions(); + ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current()); + bool bState = ((const SfxBoolItem &)pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich( nSlot ) )).GetValue(); + + if ( (bool)rOldOpt.GetOption( VOPT_GRID ) != bState) + { + ScViewOptions rNewOpt(rOldOpt); + rNewOpt.SetOption( VOPT_GRID, bState); + pViewData->SetOptions( rNewOpt ); + pViewData->GetDocument()->SetViewOptions( rNewOpt ); + pDocSh->SetDocumentModified(); + //add , write the change to sc view config + ScModule* pScMod = SC_MOD(); + pScMod->SetViewOptions( rNewOpt ); + //add end + rBindings.Invalidate( nSlot ); + } + } + } + +} + +void ScFormatShell::GetViewOptions( SfxItemSet& rSet ) +{ + ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell(); + if( pTabViewShell ) + { + ScViewOptions aViewOpt = pTabViewShell->GetViewData()->GetOptions(); + rSet.ClearItem(SID_SCGRIDSHOW); + SfxBoolItem aItem( SID_SCGRIDSHOW, aViewOpt.GetOption( VOPT_GRID ) ); + rSet.Put(aItem); + } +} + +// eof diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 0c54806c218d..108525c1cd4a 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -1903,7 +1903,20 @@ void __EXPORT ScGridWindow::MouseButtonUp( const MouseEvent& rMEvt ) } if (DrawMouseButtonUp(rMEvt)) // includes format paint brush handling for drawing objects + { + ScTabViewShell* pViewShell = pViewData->GetViewShell(); + SfxBindings& rBindings=pViewShell->GetViewFrame()->GetBindings(); + rBindings.Invalidate(SID_ATTR_TRANSFORM_WIDTH); + rBindings.Invalidate(SID_ATTR_TRANSFORM_HEIGHT); + rBindings.Invalidate(SID_ATTR_TRANSFORM_POS_X); + rBindings.Invalidate(SID_ATTR_TRANSFORM_POS_Y); + rBindings.Invalidate(SID_ATTR_TRANSFORM_ANGLE); + rBindings.Invalidate(SID_ATTR_TRANSFORM_ROT_X); + rBindings.Invalidate(SID_ATTR_TRANSFORM_ROT_Y); + rBindings.Invalidate(SID_ATTR_TRANSFORM_AUTOWIDTH); + rBindings.Invalidate(SID_ATTR_TRANSFORM_AUTOHEIGHT); return; + } rMark.SetMarking(sal_False); @@ -3078,7 +3091,20 @@ void __EXPORT ScGridWindow::KeyInput(const KeyEvent& rKEvt) return; if (DrawKeyInput(rKEvt)) + { + const KeyCode& rKeyCode = rKEvt.GetKeyCode(); + if (rKeyCode.GetCode() == KEY_DOWN + || rKeyCode.GetCode() == KEY_UP + || rKeyCode.GetCode() == KEY_LEFT + || rKeyCode.GetCode() == KEY_RIGHT) + { + ScTabViewShell* pViewShell = pViewData->GetViewShell(); + SfxBindings& rBindings = pViewShell->GetViewFrame()->GetBindings(); + rBindings.Invalidate(SID_ATTR_TRANSFORM_POS_X); + rBindings.Invalidate(SID_ATTR_TRANSFORM_POS_Y); + } return; + } if (!pViewData->GetView()->IsDrawSelMode() && !DrawHasMarkedObj()) // keine Eingaben im Zeichenmodus { //! DrawShell abfragen !!! diff --git a/sc/source/ui/view/pivotsh.cxx b/sc/source/ui/view/pivotsh.cxx index c156557a4f92..d3630a322a3a 100644 --- a/sc/source/ui/view/pivotsh.cxx +++ b/sc/source/ui/view/pivotsh.cxx @@ -36,6 +36,7 @@ #include <sfx2/request.hxx> #include <svl/whiter.hxx> #include <vcl/msgbox.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include "sc.hrc" #include "pivotsh.hxx" @@ -80,6 +81,7 @@ ScPivotShell::ScPivotShell( ScTabViewShell* pViewSh ) : } SetHelpId( HID_SCSHELL_PIVOTSH ); SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Pivot"))); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Pivot)); } //------------------------------------------------------------------------ @@ -197,4 +199,3 @@ ScDPObject* ScPivotShell::GetCurrDPObject() return rViewData.GetDocument()->GetDPAtCursor( rViewData.GetCurX(), rViewData.GetCurY(), rViewData.GetTabNo() ); } - diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx index bf1782bdc465..ffb4ebcd0cac 100644 --- a/sc/source/ui/view/tabview3.cxx +++ b/sc/source/ui/view/tabview3.cxx @@ -230,6 +230,18 @@ void ScTabView::InvalidateAttribs() rBindings.Invalidate( SID_ATTR_CHAR_OVERLINE ); + rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); + rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); + rBindings.Invalidate( SID_SET_SUB_SCRIPT ); + rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); + rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); + + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK ); + rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER); + rBindings.Invalidate( SID_NUMBER_TYPE_FORMAT); + rBindings.Invalidate( SID_ALIGNLEFT ); rBindings.Invalidate( SID_ALIGNRIGHT ); rBindings.Invalidate( SID_ALIGNBLOCK ); @@ -239,6 +251,21 @@ void ScTabView::InvalidateAttribs() rBindings.Invalidate( SID_ALIGNBOTTOM ); rBindings.Invalidate( SID_ALIGNCENTERVER ); + // stuff for sidebar panels + { + rBindings.Invalidate( SID_H_ALIGNCELL ); + rBindings.Invalidate( SID_V_ALIGNCELL ); + rBindings.Invalidate( SID_ATTR_ALIGN_INDENT ); + rBindings.Invalidate( SID_FRAME_LINECOLOR ); + rBindings.Invalidate( SID_FRAME_LINESTYLE ); + rBindings.Invalidate( SID_ATTR_BORDER_OUTER ); + rBindings.Invalidate( SID_ATTR_BORDER_INNER ); + rBindings.Invalidate( SID_SCGRIDSHOW ); + rBindings.Invalidate( SID_ATTR_BORDER_DIAG_TLBR ); + rBindings.Invalidate( SID_ATTR_BORDER_DIAG_BLTR ); + rBindings.Invalidate( SID_NUMBER_TYPE_FORMAT ); + } + rBindings.Invalidate( SID_BACKGROUND_COLOR ); rBindings.Invalidate( SID_ATTR_ALIGN_LINEBREAK ); diff --git a/sc/source/ui/view/tabvwsh.cxx b/sc/source/ui/view/tabvwsh.cxx index e31f2cc0748a..2c3c6f180319 100644 --- a/sc/source/ui/view/tabvwsh.cxx +++ b/sc/source/ui/view/tabvwsh.cxx @@ -38,6 +38,7 @@ #include <sfx2/viewfrm.hxx> #include <sfx2/bindings.hxx> #include <sfx2/app.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> #include <avmedia/mediaplayer.hxx> #include "tabvwsh.hxx" @@ -65,6 +66,7 @@ SFX_IMPL_INTERFACE(ScTabViewShell,SfxViewShell,ScResId(SCSTR_TABVIEWSHELL)) SFX_CHILDWINDOW_REGISTRATION(SfxTemplateDialogWrapper::GetChildWindowId()); SFX_CHILDWINDOW_CONTEXT_REGISTRATION(SID_NAVIGATOR); SFX_CHILDWINDOW_REGISTRATION(SID_TASKPANE); + SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(ScNameDlgWrapper::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(ScSolverDlgWrapper::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(ScOptSolverDlgWrapper::GetChildWindowId()); diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index 92a05c51ed87..1845779131df 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -39,6 +39,7 @@ #include <editeng/sizeitem.hxx> #include <editeng/boxitem.hxx> #include <svx/prtqry.hxx> +#include <svx/sidebar/ContextChangeEventMultiplexer.hxx> #include <sfx2/request.hxx> #include <sfx2/printer.hxx> #include <sfx2/dispatch.hxx> @@ -220,6 +221,10 @@ void __EXPORT ScTabViewShell::Activate(sal_Bool bMDI) // Wenn Referenzeingabe-Tip-Hilfe hier wieder angezeigt werden soll (ShowRefTip), // muss sie beim Verschieben der View angepasst werden (gibt sonst Probleme unter OS/2 // beim Umschalten zwischen Dokumenten) + + ContextChangeEventMultiplexer::NotifyContextChange( + GetController(), + ::sfx2::sidebar::EnumContext::Context_Default); } void __EXPORT ScTabViewShell::Deactivate(sal_Bool bMDI) diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index 0b642020babb..7b421faceb46 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -2868,6 +2868,11 @@ void ScViewFunc::ChangeIndent( sal_Bool bIncrement ) { pDocSh->UpdateOle(pViewData); StartFormatArea(); + + // stuff for sidebar panels + SfxBindings& rBindings = GetViewData()->GetBindings(); + rBindings.Invalidate( SID_H_ALIGNCELL ); + rBindings.Invalidate( SID_ATTR_ALIGN_INDENT ); } } diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml index c406d3264ad2..969cdefcab4e 100644 --- a/sc/uiconfig/scalc/menubar/menubar.xml +++ b/sc/uiconfig/scalc/menubar/menubar.xml @@ -144,6 +144,7 @@ <menu:menuitem menu:id=".uno:ViewDataSourceBrowser"/> <menu:menuitem menu:id=".uno:Navigator"/> <menu:menuitem menu:id=".uno:TaskPane"/> + <menu:menuitem menu:id=".uno:Sidebar"/> <menu:menuseparator/> <menu:menuitem menu:id=".uno:FullScreen"/> <menu:menuitem menu:id=".uno:Zoom"/> diff --git a/sc/util/makefile.mk b/sc/util/makefile.mk index 72e0d91fde48..06919ed52651 100644 --- a/sc/util/makefile.mk +++ b/sc/util/makefile.mk @@ -41,6 +41,7 @@ RESLIB1LIST=\ $(SRS)$/ui.srs \ $(SRS)$/dbgui.srs \ $(SRS)$/drawfunc.srs \ + $(SRS)$/sidebar.srs \ $(SRS)$/core.srs \ $(SRS)$/styleui.srs \ $(SRS)$/formdlgs.srs \ @@ -125,6 +126,7 @@ LIB3FILES= \ $(SLB)$/dbgui.lib \ $(SLB)$/pagedlg.lib \ $(SLB)$/drawfunc.lib \ + $(SLB)$/sidebar.lib \ $(SLB)$/navipi.lib LIB3FILES+= \ diff --git a/sc/util/sc.component b/sc/util/sc.component index 76b5b2af3421..e5df04cd2608 100644 --- a/sc/util/sc.component +++ b/sc/util/sc.component @@ -90,4 +90,7 @@ <implementation name="stardiv.StarCalc.ScSpreadsheetSettings"> <service name="com.sun.star.sheet.GlobalSheetSettings"/> </implementation> + <implementation name="org.apache.openoffice.comp.sc.sidebar.ScPanelFactory"> + <service name="com.sun.star.ui.UIElementFactory"/> + </implementation> </component> diff --git a/sd/inc/glob.hrc b/sd/inc/glob.hrc index 7b1c8c43c479..c3301037488f 100644 --- a/sd/inc/glob.hrc +++ b/sd/inc/glob.hrc @@ -127,15 +127,14 @@ #define STR_3DOBJECTBARSHELL RID_GLOB_START+104 #define STR_FONTWORKOBJECTBARSHELL RID_GLOB_START+105 #define STR_SLIDESORTERVIEWSHELL RID_GLOB_START+106 -#define STR_TASKPANEVIEWSHELL RID_GLOB_START+107 +#define STR_SIDEBARVIEWSHELL RID_GLOB_START+107 #define STR_MASTERPAGESSELECTOR RID_GLOB_START+108 -#define STR_TASKPANELAYOUTMENU RID_GLOB_START+109 +#define STR_SIDEBAR_LAYOUTMENU RID_GLOB_START+109 #define STR_MEDIAOBJECTBARSHELL RID_GLOB_START+110 #define STR_PAGE_NAME RID_GLOB_START+111 #define STR_SLIDE_NAME RID_GLOB_START+112 #define STR_LEFT_IMPRESS_PANE_SHELL RID_GLOB_START+113 #define STR_LEFT_DRAW_PANE_SHELL RID_GLOB_START+114 -#define STR_RIGHT_PANE_SHELL RID_GLOB_START+115 #define STR_TOOL_PANEL_SHELL RID_GLOB_START+116 #define RID_CUSTOMANIMATION_START RID_GLOB_START+120 diff --git a/sd/inc/glob.hxx b/sd/inc/glob.hxx index 1075494bc6cd..ba6ba2caedf5 100644 --- a/sd/inc/glob.hxx +++ b/sd/inc/glob.hxx @@ -53,7 +53,7 @@ #define SD_IF_SD3DOBJECTBAR SFX_INTERFACE_SD_START + 17 #define SD_IF_SDFONTWORKOBJECTBAR SFX_INTERFACE_SD_START + 18 #define SD_IF_SDSLIDESORTERVIEWSHELL SFX_INTERFACE_SD_START + 19 -#define SD_IF_SDTASKPANEVIEWSHELL SFX_INTERFACE_SD_START + 20 +#define SD_IF_SDSIDEBARVIEWSHELL SFX_INTERFACE_SD_START + 20 #define SD_IF_SDMASTERPAGESSELECTOR SFX_INTERFACE_SD_START + 21 #define SD_IF_SDLAYOUTMENU SFX_INTERFACE_SD_START + 22 #define SD_IF_SDDRAWMEDIAOBJECTBAR SFX_INTERFACE_SD_START + 23 diff --git a/sd/inc/sdabstdlg.hxx b/sd/inc/sdabstdlg.hxx index 932cf0c39826..ead17cc3aeb5 100644 --- a/sd/inc/sdabstdlg.hxx +++ b/sd/inc/sdabstdlg.hxx @@ -51,7 +51,7 @@ class SfxObjectShell; class SfxObjectShellLock; class SvxFieldData; class GDIMetaFile; -class XColorTable; +class XColorList; class SdDrawDocument; class SfxMedium; class SdrObject; @@ -182,7 +182,7 @@ public: static SdAbstractDialogFactory* Create(); virtual VclAbstractDialog* CreateBreakDlg(::Window* pWindow, ::sd::DrawView* pDrView, ::sd::DrawDocShell* pShell, sal_uLong nSumActionCount, sal_uLong nObjCount ) = 0; - virtual AbstractCopyDlg* CreateCopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, XColorTable* pColTab, ::sd::View* pView ) = 0; + virtual AbstractCopyDlg* CreateCopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, XColorList* pColTab, ::sd::View* pView ) = 0; virtual AbstractSdCustomShowDlg* CreateSdCustomShowDlg( ::Window* pWindow, SdDrawDocument& rDrawDoc ) = 0; virtual SfxAbstractTabDialog* CreateSdTabCharDialog( ::Window* pParent, const SfxItemSet* pAttr, SfxObjectShell* pDocShell ) = 0; virtual SfxAbstractTabDialog* CreateSdTabPageDialog( ::Window* pParent, const SfxItemSet* pAttr, SfxObjectShell* pDocShell, sal_Bool bAreaPage = sal_True ) = 0; diff --git a/sd/prj/build.lst b/sd/prj/build.lst index 72ee2777a8f8..c38be3fad94e 100644 --- a/sd/prj/build.lst +++ b/sd/prj/build.lst @@ -18,9 +18,8 @@ sd sd\source\core\annotations nmake - all sd_annotations sd_inc NULL sd sd\source\ui\docshell nmake - all sd_docsh sd_sdi sd_inc NULL sd sd\source\ui\unoidl nmake - all sd_unid sd_sdi sd_inc NULL sd sd\source\ui\accessibility nmake - all sd_accessibility sd_inc NULL -sd sd\source\ui\toolpanel nmake - all sd_toolpanel sd_sdi sd_inc NULL -sd sd\source\ui\toolpanel\controls nmake - all sd_toolpanel_controls sd_sdi sd_inc NULL sd sd\source\ui\tools nmake - all sd_tools sd_inc NULL +sd sd\source\ui\sidebar nmake - all sd_sidebar sd_sdi sd_inc NULL sd sd\source\ui\slidesorter\shell nmake - all sd_slsshell sd_sdi sd_inc NULL sd sd\source\ui\slidesorter\model nmake - all sd_slsmodel sd_inc NULL sd sd\source\ui\slidesorter\view nmake - all sd_slsview sd_inc NULL @@ -44,5 +43,5 @@ sd sd\source\ui\framework\module nmake - all sd_framework_module sd_inc N sd sd\source\ui\framework\factories nmake - all sd_framework_factories sd_inc NULL sd sd\source\ui\framework\tools nmake - all sd_framework_tools sd_inc NULL sd sd\source\ui\annotations nmake - all sd_uiannotations sd_inc NULL -sd sd\util nmake - all sd_util sd_app sd_cgm sd_core sd_dlg sd_docsh sd_eppt sd_filt sd_func sd_grf sd_unid sd_view sd_xml sd_html sd_ppt sd_accessibility sd_animations sd_toolpanel sd_toolpanel_controls sd_tools sd_slsshell sd_slsmodel sd_slsview sd_slscontroller sd_slscache sd_notes sd_controller sd_table sd_slideshow sd_presenter sd_undo sd_helper sd_framework_configuration sd_framework_module sd_framework_tools sd_framework_factories sd_text sd_annotations sd_uiannotations NULL +sd sd\util nmake - all sd_util sd_app sd_cgm sd_core sd_dlg sd_docsh sd_eppt sd_filt sd_func sd_grf sd_unid sd_view sd_xml sd_html sd_ppt sd_accessibility sd_animations sd_tools sd_slsshell sd_slsmodel sd_slsview sd_slscontroller sd_slscache sd_notes sd_controller sd_table sd_slideshow sd_presenter sd_undo sd_helper sd_framework_configuration sd_framework_module sd_framework_tools sd_framework_factories sd_text sd_annotations sd_uiannotations sd_sidebar NULL sd sd\qa\unoapi nmake - all sd_qa_unoapi NULL diff --git a/sd/sdi/ToolPanelViewShell.sdi b/sd/sdi/ToolPanelViewShell.sdi deleted file mode 100644 index b6666db2ed0b..000000000000 --- a/sd/sdi/ToolPanelViewShell.sdi +++ /dev/null @@ -1,127 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -interface MasterPagesSelectorInterface -{ - SID_TP_APPLY_TO_ALL_SLIDES - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_TP_APPLY_TO_SELECTED_SLIDES - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_TP_USE_FOR_NEW_PRESENTATIONS - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_TP_SHOW_SMALL_PREVIEW - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_TP_SHOW_LARGE_PREVIEW - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - - SID_TP_EDIT_MASTER - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - - // The copy and paste slots are included here so that they later can be - // disabled in order to remove them from context menus. - SID_CUT - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_COPY - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_PASTE - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_DELETE_MASTER_PAGE - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] -} - -interface TaskPaneLayoutMenuInterface -{ - SID_TP_APPLY_TO_SELECTED_SLIDES - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_INSERTPAGE_LAYOUT_MENU - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - - // The copy and paste slots are included here so that they later can be - // disabled in order to remove them from context menus. - SID_CUT - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_COPY - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] - SID_PASTE - [ - ExecMethod = Execute ; - StateMethod = GetState ; - ] -} - -shell MasterPagesSelector -{ - import MasterPagesSelectorInterface[Automation]; -} - -shell LayoutMenu -{ - import TaskPaneLayoutMenuInterface[Automation]; -} - -shell ToolPanelViewShell -{ -} - diff --git a/sd/sdi/_drvwsh.sdi b/sd/sdi/_drvwsh.sdi index 9ef90ca71c1d..54283b65c0f8 100644 --- a/sd/sdi/_drvwsh.sdi +++ b/sd/sdi/_drvwsh.sdi @@ -211,12 +211,72 @@ interface DrawView ExecMethod = FuTemporary ; StateMethod = GetMenuState ; ] + + SID_ATTR_TRANSFORM_WIDTH // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_HEIGHT // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_POS_X // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_POS_Y // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_ANGLE + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_ROT_X + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_ROT_Y + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_PROTECT_POS + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_PROTECT_SIZE + [ + ExecMethod = FuTemporary ; + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_AUTOWIDTH + [ + StateMethod = GetDrawAttrState ; + ] + SID_ATTR_TRANSFORM_AUTOHEIGHT + [ + StateMethod = GetDrawAttrState ; + ] + /// !? SID_CHAR_DLG // ole : no, status : ? [ ExecMethod = FuTemporary ; StateMethod = GetMenuState ; ] + SID_CHAR_DLG_EFFECT // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetMenuState ; + ] /* -> SVX SID_PARA_DLG // ole : no, status : ? [ @@ -639,12 +699,42 @@ interface DrawView ExecMethod = FuTemporary ; StateMethod = GetMenuState ; ] + FN_NUM_BULLET_ON + [ + ExecMethod = FuTemporary; + StateMethod = GetAttrState; + ] + FN_NUM_NUMBERING_ON + [ + ExecMethod = FuTemporary; + StateMethod = GetAttrState; + ] SID_OUTLINE_BULLET // ole : no, status : ? [ ExecMethod = FuTemporary ; StateMethod = GetMenuState ; MenuConfig = TRUE; ] + FN_SVX_SET_BULLET + [ + ExecMethod = FuTemporary ; + ] + FN_SVX_SET_NUMBER + [ + ExecMethod = FuTemporary ; + ] + FN_BUL_NUM_RULE_INDEX + [ + ExecMethod = FuTemporary; + StateMethod = GetAttrState; + Asynchron , AutoUpdate ; + ] + FN_NUM_NUM_RULE_INDEX + [ + ExecMethod = FuTemporary; + StateMethod = GetAttrState; + Asynchron , AutoUpdate ; + ] SID_ATTR_CHAR // ole : no, status : ? [ ExecMethod = FuPermanent ; @@ -1268,11 +1358,36 @@ interface DrawView ExecMethod = FuTemporary ; StateMethod = GetAttrState ; ] + SID_ATTR_FILL_TRANSPARENCE // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetAttrState ; + ] + SID_ATTR_FILL_FLOATTRANSPARENCE // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetAttrState ; + ] SID_ATTR_LINE_STYLE // ole : no, status : ? [ ExecMethod = FuTemporary ; StateMethod = GetAttrState ; ] + SID_ATTR_LINE_JOINT // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetAttrState ; + ] + SID_ATTR_LINE_CAP // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetAttrState ; + ] + SID_ATTR_LINE_TRANSPARENCE // ole : no, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetAttrState ; + ] SID_ATTR_LINE_DASH // ole : no, status : ? [ ExecMethod = FuTemporary ; @@ -1317,6 +1432,16 @@ interface DrawView ExecMethod = FuTemporary ; StateMethod = GetAttrState ; ] + SID_ATTR_LINE_START // ole : no, status : play rec + [ + ExecMethod = FuTemporary ; + StateMethod = GetAttrState ; + ] + SID_ATTR_LINE_END // ole : no, status : play rec + [ + ExecMethod = FuTemporary ; + StateMethod = GetAttrState ; + ] SID_DELETE_PAGE // ole : no, status : play rec [ ExecMethod = FuTemporary ; @@ -1452,7 +1577,37 @@ interface DrawView SID_ATTR_PARA_LRSPACE // ole : no, status : ? [ ExecMethod = ExecRuler ; - StateMethod = GetRulerState ; + StateMethod = GetAttrState ; + ] + SID_ATTR_PARA_LINESPACE + [ + ExecMethod = ExecRuler ; + StateMethod = GetAttrState ; + ] + SID_ATTR_PARA_ULSPACE + [ + ExecMethod = ExecRuler ; + StateMethod = GetAttrState ; + ] + SID_ATTR_PARA_ADJUST_LEFT + [ + ExecMethod = ExecRuler ; + StateMethod = GetAttrState ; + ] + SID_ATTR_PARA_ADJUST_CENTER + [ + ExecMethod = ExecRuler ; + StateMethod = GetAttrState ; + ] + SID_ATTR_PARA_ADJUST_RIGHT + [ + ExecMethod = ExecRuler ; + StateMethod = GetAttrState ; + ] + SID_ATTR_PARA_ADJUST_BLOCK + [ + ExecMethod = ExecRuler ; + StateMethod = GetAttrState ; ] SID_ATTR_POSITION // ole : no, status : ? [ @@ -1640,11 +1795,21 @@ interface DrawView ExecMethod = FuTemporary ; StateMethod = GetMenuState ; ] + SID_FLIP_HORIZONTAL + [ + ExecMethod = FuTemporary ; + StateMethod = GetMenuState ; + ] SID_VERTICAL // ole : no, status : ? [ ExecMethod = FuTemporary ; StateMethod = GetMenuState ; ] + SID_FLIP_VERTICAL + [ + ExecMethod = FuTemporary ; + StateMethod = GetMenuState ; + ] SID_ATTR_FILL_SHADOW // ole : no, status : ? [ ExecMethod = FuTemporary ; @@ -2504,4 +2669,84 @@ interface DrawView ExecMethod = FuTable ; StateMethod = GetTableMenuState ; ] + SID_ATTR_CHAR_FONT + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_FONTHEIGHT + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_WEIGHT + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_POSTURE + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_UNDERLINE + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_SHADOWED + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_STRIKEOUT + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_COLOR + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_ATTR_CHAR_KERNING + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_SET_SUB_SCRIPT + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_SET_SUPER_SCRIPT + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_SHRINK_FONT_SIZE + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_GROW_FONT_SIZE + [ + ExecMethod = ExecChar ; + StateMethod = GetAttrState ; + ] + SID_TABLE_VERT_NONE + [ + ExecMethod = ExecutePropPanelAttr ; + StateMethod = GetStatePropPanelAttr ; + ] + SID_TABLE_VERT_CENTER + [ + ExecMethod = ExecutePropPanelAttr ; + StateMethod = GetStatePropPanelAttr ; + ] + SID_TABLE_VERT_BOTTOM + [ + ExecMethod = ExecutePropPanelAttr ; + StateMethod = GetStatePropPanelAttr ; + ] } diff --git a/sd/sdi/drtxtob.sdi b/sd/sdi/drtxtob.sdi index 78ccd33cd8fb..bf16a829486f 100644 --- a/sd/sdi/drtxtob.sdi +++ b/sd/sdi/drtxtob.sdi @@ -166,6 +166,12 @@ shell TextObjectBar StateMethod = GetAttrState; ] + SID_ATTR_CHAR_KERNING + [ + ExecMethod = Execute; + StateMethod = GetCharState; + ] + SID_PARASPACE_INCREASE // ole : ?, status : ? [ ExecMethod = Execute; @@ -178,6 +184,20 @@ shell TextObjectBar StateMethod = GetAttrState; ] + SID_ATTR_PARA_LRSPACE + [ + ExecMethod = Execute ; + StateMethod = GetAttrState; + ] + SID_ATTR_PARA_RIGHT + [ + ExecMethod = Execute ; + ] + SID_ATTR_PARA_LEFT + [ + ExecMethod = Execute ; + ] + SID_OUTLINE_LEFT // ole : no, status : ? [ ExecMethod = Execute ; diff --git a/sd/sdi/makefile.mk b/sd/sdi/makefile.mk index ad2912700f28..3ddc0d5c37f6 100644 --- a/sd/sdi/makefile.mk +++ b/sd/sdi/makefile.mk @@ -62,7 +62,6 @@ SVSDI1DEPEND= \ outlnvsh.sdi \ SlideSorterController.sdi \ ViewShellBase.sdi \ - ToolPanelViewShell.sdi \ sdslots.hrc \ $(PRJ)$/inc$/app.hrc @@ -84,7 +83,6 @@ SVSDI2DEPEND= \ mediaob.sdi \ outlnvsh.sdi \ ViewShellBase.sdi \ - ToolPanelViewShell.sdi \ sdslots.hrc \ $(PRJ)$/inc$/app.hrc diff --git a/sd/sdi/outlnvsh.sdi b/sd/sdi/outlnvsh.sdi index da8f15f6c336..a56a71a4cd3b 100644 --- a/sd/sdi/outlnvsh.sdi +++ b/sd/sdi/outlnvsh.sdi @@ -174,7 +174,14 @@ interface OutlineView ExecMethod = FuTemporaryModify ; StateMethod = GetMenuState ; ] - + FN_SVX_SET_BULLET + [ + ExecMethod = FuTemporaryModify ; + ] + FN_SVX_SET_NUMBER + [ + ExecMethod = FuTemporaryModify ; + ] SID_OUTLINE_BULLET // ole : no, status : ? [ ExecMethod = FuTemporaryModify ; @@ -187,6 +194,12 @@ interface OutlineView StateMethod = GetMenuState ; // Cachable , HasDialog , Export ; ] + SID_CHAR_DLG_EFFECT // wj for sym2_1876 + [ + ExecMethod = FuTemporaryModify ; + StateMethod = GetMenuState ; + // Cachable , HasDialog , Export ; + ] SID_SELECTALL // ole : no, status : ? [ ExecMethod = FuTemporary ; diff --git a/sd/sdi/sdslots.sdi b/sd/sdi/sdslots.sdi index 286c08575a56..347c15f29650 100644 --- a/sd/sdi/sdslots.sdi +++ b/sd/sdi/sdslots.sdi @@ -100,5 +100,4 @@ ModulePrefix( "Sd" ) include "ViewShellBase.sdi" include "mediaob.sdi" include "tables.sdi" - include "ToolPanelViewShell.sdi" -} + } diff --git a/sd/source/core/typemap.cxx b/sd/source/core/typemap.cxx index 5e755d8b8eaa..8f92369a2c71 100644 --- a/sd/source/core/typemap.cxx +++ b/sd/source/core/typemap.cxx @@ -38,6 +38,9 @@ #include <editeng/fontitem.hxx> #include <svl/poolitem.hxx> #include <editeng/tstpitem.hxx> +#include <editeng/kernitem.hxx> +#include <editeng/lspcitem.hxx> +#include <editeng/ulspitem.hxx> #include <editeng/lrspitem.hxx> #include <editeng/protitem.hxx> #include <svx/chrtitem.hxx> @@ -125,6 +128,10 @@ #include <svl/rectitem.hxx> #include <sfx2/frame.hxx> +#include <svx/xlncapit.hxx> +#include <svx/xflftrit.hxx> +#include <svx/xlinjoit.hxx> +#include <svx/AffineMatrixItem.hxx> #define SFX_TYPEMAP #include "sdslots.hxx" diff --git a/sd/source/ui/accessibility/makefile.mk b/sd/source/ui/accessibility/makefile.mk index d32623ff2d6a..5df7638042b8 100644 --- a/sd/source/ui/accessibility/makefile.mk +++ b/sd/source/ui/accessibility/makefile.mk @@ -49,12 +49,13 @@ SLOFILES = \ $(SLO)$/AccessibleViewForwarder.obj \ $(SLO)$/AccessibleOutlineEditSource.obj \ $(SLO)$/AccessiblePageShape.obj \ - $(SLO)$/AccessibleScrollPanel.obj \ $(SLO)$/AccessibleSlideSorterView.obj \ $(SLO)$/AccessibleSlideSorterObject.obj \ - $(SLO)$/AccessibleTreeNode.obj \ $(SLO)$/SdShapeTypes.obj +#SIDEBAR_TO_BE_REMOVED +# $(SLO)$/AccessibleScrollPanel.obj \ +# $(SLO)$/AccessibleTreeNode.obj \ EXCEPTIONSFILES= diff --git a/sd/source/ui/animations/CustomAnimationDialog.cxx b/sd/source/ui/animations/CustomAnimationDialog.cxx index ac9bd015a43e..f098dd51aec3 100644 --- a/sd/source/ui/animations/CustomAnimationDialog.cxx +++ b/sd/source/ui/animations/CustomAnimationDialog.cxx @@ -230,7 +230,7 @@ ColorPropertyBox::ColorPropertyBox( sal_Int32 nControlType, Window* pParent, con SfxObjectShell* pDocSh = SfxObjectShell::Current(); DBG_ASSERT( pDocSh, "DocShell not found!" ); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; bool bKillTable = false; const SfxPoolItem* pItem = NULL; @@ -239,7 +239,7 @@ ColorPropertyBox::ColorPropertyBox( sal_Int32 nControlType, Window* pParent, con if ( !pColorTable ) { - pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); bKillTable = sal_True; } @@ -1250,7 +1250,7 @@ CustomAnimationEffectTabPage::CustomAnimationEffectTabPage( Window* pParent, con // fill the color box SfxObjectShell* pDocSh = SfxObjectShell::Current(); DBG_ASSERT( pDocSh, "DocShell not found!" ); - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; bool bKillTable = false; const SfxPoolItem* pItem = NULL; @@ -1259,7 +1259,7 @@ CustomAnimationEffectTabPage::CustomAnimationEffectTabPage( Window* pParent, con if ( !pColorTable ) { - pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); bKillTable = sal_True; } diff --git a/sd/source/ui/animations/CustomAnimationPane.cxx b/sd/source/ui/animations/CustomAnimationPane.cxx index e23512708704..ca68a134e66a 100644 --- a/sd/source/ui/animations/CustomAnimationPane.cxx +++ b/sd/source/ui/animations/CustomAnimationPane.cxx @@ -59,6 +59,7 @@ #include <comphelper/sequence.hxx> #include <sfx2/frame.hxx> +#include <sfx2/sidebar/Theme.hxx> #include <svx/unoapi.hxx> #include <svx/svxids.hrc> @@ -246,6 +247,8 @@ CustomAnimationPane::CustomAnimationPane( ::Window* pParent, ViewShellBase& rBas maLateInitTimer.SetTimeout(100); maLateInitTimer.SetTimeoutHdl(LINK(this, CustomAnimationPane, lateInitCallback)); maLateInitTimer.Start(); + + UpdateLook(); } CustomAnimationPane::~CustomAnimationPane() @@ -1073,6 +1076,42 @@ void CustomAnimationPane::onContextMenu( sal_uInt16 nSelectedPopupEntry ) updateControls(); } + + + +void CustomAnimationPane::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + UpdateLook(); +} + + + + +void CustomAnimationPane::UpdateLook (void) +{ + SetBackground(::sfx2::sidebar::Theme::GetWallpaper(::sfx2::sidebar::Theme::Paint_PanelBackground)); + if (mpFLModify != NULL) + mpFLModify->SetBackground(Wallpaper()); + if (mpFLEffect != NULL) + mpFLEffect->SetBackground(Wallpaper()); + if (mpFTStart != NULL) + mpFTStart->SetBackground(Wallpaper()); + if (mpFTProperty != NULL) + mpFTProperty->SetBackground(Wallpaper()); + if (mpFTSpeed != NULL) + mpFTSpeed->SetBackground(Wallpaper()); + if (mpFTChangeOrder != NULL) + mpFTChangeOrder->SetBackground(Wallpaper()); + if (mpFLSeperator1 != NULL) + mpFLSeperator1->SetBackground(Wallpaper()); + if (mpFLSeperator2 != NULL) + mpFLSeperator2->SetBackground(Wallpaper()); +} + + + + void addValue( STLPropertySet* pSet, sal_Int32 nHandle, const Any& rValue ) { switch( pSet->getPropertyState( nHandle ) ) @@ -2540,8 +2579,10 @@ void CustomAnimationPane::updatePathFromMotionPathTag( const rtl::Reference< Mot if( pDocSh ) { pWindow = new DialogListBox( pParent, WB_CLIPCHILDREN|WB_TABSTOP|WB_AUTOHSCROLL ); + const Size aMinSize( pWindow->LogicToPixel( Size( 80, 256 ), MAP_APPFONT ) ); + pWindow->SetSizePixel(aMinSize); + pWindow->SetBackground(Wallpaper(Color(COL_BLUE))); - Size aMinSize( pWindow->LogicToPixel( Size( 80, 256 ), MAP_APPFONT ) ); ::Window* pPaneWindow = new CustomAnimationPane( pWindow, rBase, aMinSize ); pWindow->SetChildWindow( pPaneWindow, aMinSize ); pWindow->SetText( pPaneWindow->GetText() ); @@ -2552,4 +2593,13 @@ void CustomAnimationPane::updatePathFromMotionPathTag( const rtl::Reference< Mot + +sal_Int32 getCustomAnimationPanelMinimumHeight (::Window* pDialog) +{ + if (pDialog != NULL) + return pDialog->LogicToPixel(Size( 80, 256 ), MAP_APPFONT).Height(); + else + return 0; +} + } diff --git a/sd/source/ui/animations/CustomAnimationPane.hxx b/sd/source/ui/animations/CustomAnimationPane.hxx index 443ce2fc01ee..7fe349ac470a 100644 --- a/sd/source/ui/animations/CustomAnimationPane.hxx +++ b/sd/source/ui/animations/CustomAnimationPane.hxx @@ -93,6 +93,9 @@ public: virtual void onDoubleClick(); virtual void onContextMenu( sal_uInt16 nSelectedPopupEntry ); + // Window + virtual void DataChanged (const DataChangedEvent& rEvent); + void addUndo(); void updatePathFromMotionPathTag( const rtl::Reference< MotionPathTag >& xTag ); @@ -116,6 +119,7 @@ private: ::com::sun::star::uno::Any getProperty1Value( sal_Int32 nType, CustomAnimationEffectPtr pEffect ); bool setProperty1Value( sal_Int32 nType, CustomAnimationEffectPtr pEffect, const ::com::sun::star::uno::Any& rValue ); + void UpdateLook (void); DECL_LINK( implControlHdl, Control* ); DECL_LINK( implPropertyHdl, Control* ); diff --git a/sd/source/ui/animations/SlideTransitionPane.cxx b/sd/source/ui/animations/SlideTransitionPane.cxx index a2c67b47865d..257af3c5fd14 100644 --- a/sd/source/ui/animations/SlideTransitionPane.cxx +++ b/sd/source/ui/animations/SlideTransitionPane.cxx @@ -57,6 +57,7 @@ #include "framework/FrameworkHelper.hxx" #include "DialogListBox.hxx" +#include <sfx2/sidebar/Theme.hxx> #include <algorithm> #include <memory> @@ -515,6 +516,8 @@ SlideTransitionPane::SlideTransitionPane( maLateInitTimer.SetTimeout(200); maLateInitTimer.SetTimeoutHdl(LINK(this, SlideTransitionPane, LateInitCallback)); maLateInitTimer.Start(); + + UpdateLook(); } SlideTransitionPane::~SlideTransitionPane() @@ -528,6 +531,33 @@ void SlideTransitionPane::Resize() updateLayout(); } + + + +void SlideTransitionPane::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + UpdateLook(); +} + + + + +void SlideTransitionPane::UpdateLook (void) +{ + SetBackground(::sfx2::sidebar::Theme::GetWallpaper(::sfx2::sidebar::Theme::Paint_PanelBackground)); + maFL_APPLY_TRANSITION.SetBackground(Wallpaper()); + maFL_MODIFY_TRANSITION.SetBackground(Wallpaper());; + maFT_SPEED.SetBackground(Wallpaper()); + maFT_SOUND.SetBackground(Wallpaper()); + maFL_ADVANCE_SLIDE.SetBackground(Wallpaper()); + maFL_EMPTY1.SetBackground(Wallpaper()); + maFL_EMPTY2.SetBackground(Wallpaper()); +} + + + + void SlideTransitionPane::onSelectionChanged() { updateControls(); @@ -1314,4 +1344,15 @@ IMPL_LINK( SlideTransitionPane, LateInitCallback, Timer*, EMPTYARG ) } + + +sal_Int32 getSlideTransitionPanelMinimumHeight (::Window* pDialog) +{ + if (pDialog != NULL) + return pDialog->LogicToPixel(Size( 72, 216 ), MAP_APPFONT).Height(); + else + return 0; +} + + } // namespace sd diff --git a/sd/source/ui/animations/SlideTransitionPane.hxx b/sd/source/ui/animations/SlideTransitionPane.hxx index 2d52c66d8380..b0489e75046d 100644 --- a/sd/source/ui/animations/SlideTransitionPane.hxx +++ b/sd/source/ui/animations/SlideTransitionPane.hxx @@ -61,7 +61,9 @@ public: SdDrawDocument* pDoc ); virtual ~SlideTransitionPane(); + // Window virtual void Resize(); + virtual void DataChanged (const DataChangedEvent& rEvent); void onSelectionChanged(); void onChangeCurrentPage(); @@ -84,6 +86,8 @@ private: ::sd::slidesorter::SharedPageSelection getSelectedPages (void) const; + void UpdateLook (void); + DECL_LINK( ApplyToAllButtonClicked, void * ); DECL_LINK( PlayButtonClicked, void * ); DECL_LINK( SlideShowButtonClicked, void * ); @@ -98,7 +102,6 @@ private: DECL_LINK(EventMultiplexerListener, tools::EventMultiplexerEvent*); DECL_LINK(LateInitCallback, Timer*); -private: ViewShellBase & mrBase; SdDrawDocument * mpDrawDoc; Size maMinSize; diff --git a/sd/source/ui/app/sddll1.cxx b/sd/source/ui/app/sddll1.cxx index 28741ae3a3bf..313b36a0bdb3 100644 --- a/sd/source/ui/app/sddll1.cxx +++ b/sd/source/ui/app/sddll1.cxx @@ -45,7 +45,6 @@ #include "DrawDocShell.hxx" #include "GraphicDocShell.hxx" #include "SlideSorterViewShell.hxx" -#include "taskpane/ToolPanelViewShell.hxx" #include "FactoryIds.hxx" #include "sdmod.hxx" #include "app.hrc" @@ -123,8 +122,4 @@ void SdDLL::RegisterInterfaces() // View shells for the side panes. ::sd::slidesorter::SlideSorterViewShell::RegisterInterface (pMod); - ::sd::toolpanel::ToolPanelViewShell::RegisterInterface(pMod); - // Tell the tool panel view shell to register the interfaces of its - // controls. - ::sd::toolpanel::ToolPanelViewShell::RegisterControls(); } diff --git a/sd/source/ui/app/sddll2.cxx b/sd/source/ui/app/sddll2.cxx index 16e4745b3285..65435c0365ca 100644 --- a/sd/source/ui/app/sddll2.cxx +++ b/sd/source/ui/app/sddll2.cxx @@ -63,6 +63,7 @@ #include <svx/layctrl.hxx> #include <svx/subtoolboxcontrol.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> #include "sddll.hxx" #define _SD_DIACTRL_CXX @@ -136,7 +137,7 @@ void SdDLL::RegisterControllers() ::avmedia::MediaPlayer::RegisterChildWindow(0, pMod); ::sd::LeftPaneImpressChildWindow::RegisterChildWindow(0, pMod); ::sd::LeftPaneDrawChildWindow::RegisterChildWindow(0, pMod); - ::sd::ToolPanelChildWindow::RegisterChildWindow(0, pMod); + ::sfx2::sidebar::SidebarChildWindow::RegisterChildWindow(NULL, pMod); SvxFillToolBoxControl::RegisterControl(0, pMod); SvxLineStyleToolBoxControl::RegisterControl(0, pMod); diff --git a/sd/source/ui/app/sdmod1.cxx b/sd/source/ui/app/sdmod1.cxx index 3297c586bc06..5b9901cb262a 100644 --- a/sd/source/ui/app/sdmod1.cxx +++ b/sd/source/ui/app/sdmod1.cxx @@ -753,7 +753,7 @@ SfxFrame* SdModule::ExecuteNewDocument( SfxRequest& rReq ) ::sd::ViewShellBase* pBase = ::sd::ViewShellBase::GetViewShellBase(pViewFrame); if (pBase != NULL) { - FrameworkHelper::Instance(*pBase)->RequestTaskPanel( + FrameworkHelper::Instance(*pBase)->RequestSidebarPanel( FrameworkHelper::msLayoutTaskPanelURL); } } diff --git a/sd/source/ui/dlg/NavigatorChildWindow.cxx b/sd/source/ui/dlg/NavigatorChildWindow.cxx index 262757b7233e..b0dc681c61df 100644 --- a/sd/source/ui/dlg/NavigatorChildWindow.cxx +++ b/sd/source/ui/dlg/NavigatorChildWindow.cxx @@ -29,11 +29,31 @@ #include "app.hrc" #include "navigatr.hrc" #include <sfx2/app.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <svl/eitem.hxx> +#include <boost/bind.hpp> + namespace sd { SFX_IMPL_CHILDWINDOWCONTEXT(NavigatorChildWindow, SID_NAVIGATOR) +void RequestNavigatorUpdate (SfxBindings* pBindings) +{ + if (pBindings != NULL + && pBindings->GetDispatcher() != NULL) + { + SfxBoolItem aItem (SID_NAVIGATOR_INIT, sal_True); + pBindings->GetDispatcher()->Execute( + SID_NAVIGATOR_INIT, + SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, + &aItem, + 0L); + } +} + + NavigatorChildWindow::NavigatorChildWindow ( ::Window* pParent, sal_uInt16 nId, @@ -41,8 +61,12 @@ NavigatorChildWindow::NavigatorChildWindow ( SfxChildWinInfo* ) : SfxChildWindowContext( nId ) { - SdNavigatorWin* pNavWin = new SdNavigatorWin( pParent, this, - SdResId( FLT_NAVIGATOR ), pBindings ); + SdNavigatorWin* pNavWin = new SdNavigatorWin( + pParent, + this, + SdResId( FLT_NAVIGATOR ), + pBindings, + ::boost::bind(RequestNavigatorUpdate, pBindings)); SetWindow( pNavWin ); } diff --git a/sd/source/ui/dlg/PaneChildWindows.cxx b/sd/source/ui/dlg/PaneChildWindows.cxx index 92067843a1d0..c1787de31056 100644 --- a/sd/source/ui/dlg/PaneChildWindows.cxx +++ b/sd/source/ui/dlg/PaneChildWindows.cxx @@ -28,7 +28,6 @@ #include "PaneDockingWindow.hxx" #include "ViewShellBase.hxx" #include "framework/FrameworkHelper.hxx" -#include "taskpane/ToolPanelViewShell.hxx" #include "app.hrc" #include "strings.hrc" #include "sdresid.hxx" @@ -52,7 +51,6 @@ using ::com::sun::star::drawing::framework::ResourceActivationMode_REPLACE; SFX_IMPL_DOCKINGWINDOW(LeftPaneImpressChildWindow, SID_LEFT_PANE_IMPRESS) SFX_IMPL_DOCKINGWINDOW(LeftPaneDrawChildWindow, SID_LEFT_PANE_DRAW) -SFX_IMPL_DOCKINGWINDOW( ToolPanelChildWindow, SID_TASKPANE) //===== PaneChildWindow ======================================================= @@ -142,89 +140,4 @@ LeftPaneDrawChildWindow::LeftPaneDrawChildWindow ( } - - -//====================================================================================================================== -//= ToolPanelChildWindow -//====================================================================================================================== -//---------------------------------------------------------------------------------------------------------------------- -ToolPanelChildWindow::ToolPanelChildWindow( ::Window* i_pParentWindow, sal_uInt16 i_nId, SfxBindings* i_pBindings, - SfxChildWinInfo* i_pChildWindowInfo ) - :PaneChildWindow( i_pParentWindow, i_nId, i_pBindings, i_pChildWindowInfo, - FLT_TOOL_PANEL_DOCKING_WINDOW, STR_RIGHT_PANE_TITLE, SFX_ALIGN_RIGHT ) -{ - // just in case this window has been created by SFX, instead our resource framework: Ensure that the resource framework - // activates the task pane, so it is really filled with content (in opposite to the other SFX applications, the - // child window registered for SID_TASKPANE is not responsible for its content, but here in SD, it's the ToolPanelViewShell - // which has this responsibility. And this view shell is created implicitly via the resource framework.) - // #i113788# / 2010-09-03 / frank.schoenheit@oracle.com - SfxDockingWindow* pDockingWindow = dynamic_cast< SfxDockingWindow* >( GetWindow() ); - ViewShellBase* pViewShellBase = ViewShellBase::GetViewShellBase( pDockingWindow->GetBindings().GetDispatcher()->GetFrame() ); - ENSURE_OR_RETURN_VOID( pViewShellBase != NULL, "ToolPanelChildWindow::ToolPanelChildWindow: no view shell access!" ); - - const ::boost::shared_ptr< framework::FrameworkHelper > pFrameworkHelper( framework::FrameworkHelper::Instance( *pViewShellBase ) ); - ENSURE_OR_RETURN_VOID( pFrameworkHelper.get(), "ToolPanelChildWindow::ToolPanelChildWindow: no framework helper for the view shell!" ); - Reference<XConfigurationController> xConfigController( pFrameworkHelper->GetConfigurationController() ); - ENSURE_OR_RETURN_VOID( xConfigController.is(), "ToolPanelChildWindow::ToolPanelChildWindow: no config controller!" ); - xConfigController->requestResourceActivation( - framework::FrameworkHelper::CreateResourceId( framework::FrameworkHelper::msRightPaneURL ), - ResourceActivationMode_ADD ); - xConfigController->requestResourceActivation( - framework::FrameworkHelper::CreateResourceId( framework::FrameworkHelper::msTaskPaneURL, framework::FrameworkHelper::msRightPaneURL ), - ResourceActivationMode_REPLACE - ); -} - -//---------------------------------------------------------------------------------------------------------------------- -struct DelayedToolPanelActivation -{ - DelayedToolPanelActivation( ToolPanelChildWindow& i_rToolPanelWindow, const ::rtl::OUString& i_rPanelURL ) - :m_rToolPanelWindow( i_rToolPanelWindow ) - ,m_sPanelURL( i_rPanelURL ) - { - } - - void operator() (bool) - { - m_rToolPanelWindow.ActivateToolPanel( m_sPanelURL ); - } - -private: - ToolPanelChildWindow& m_rToolPanelWindow; - const ::rtl::OUString m_sPanelURL; -}; - -//---------------------------------------------------------------------------------------------------------------------- -void ToolPanelChildWindow::ActivateToolPanel( const ::rtl::OUString& i_rPanelURL ) -{ - SfxDockingWindow* pDockingWindow = dynamic_cast< SfxDockingWindow* >( GetWindow() ); - ViewShellBase* pViewShellBase = ViewShellBase::GetViewShellBase( pDockingWindow->GetBindings().GetDispatcher()->GetFrame() ); - ENSURE_OR_RETURN_VOID( pViewShellBase != NULL, "ToolPanelChildWindow::ActivateToolPanel: no view shell access!" ); - - const ::boost::shared_ptr< framework::FrameworkHelper > pFrameworkHelper( framework::FrameworkHelper::Instance( *pViewShellBase ) ); - - if ( i_rPanelURL.indexOf( framework::FrameworkHelper::msTaskPanelURLPrefix ) == 0 ) - { - // it's one of our standard panels known to the drawing framework - pFrameworkHelper->RequestTaskPanel( i_rPanelURL ); - } - else - { - // TODO: it would be nice if the drawing framework were able to handle non-standard panels, installed by - // extensions, too. As long as this is not the case, we need to take the direct way ... - ::boost::shared_ptr< ViewShell > pViewShell = pFrameworkHelper->GetViewShell( framework::FrameworkHelper::msRightPaneURL ); - toolpanel::ToolPanelViewShell* pToolPanelViewShell = dynamic_cast< toolpanel::ToolPanelViewShell* >( pViewShell.get() ); - if ( pToolPanelViewShell ) - { - pToolPanelViewShell->ActivatePanel( i_rPanelURL ); - } - else - { - Reference< XResourceId > xTaskPaneResource = pFrameworkHelper->RequestView( - framework::FrameworkHelper::msTaskPaneURL, framework::FrameworkHelper::msRightPaneURL ); - pFrameworkHelper->RunOnResourceActivation( xTaskPaneResource, DelayedToolPanelActivation( *this, i_rPanelURL ) ); - } - } -} - } // end of namespace ::sd diff --git a/sd/source/ui/dlg/PaneShells.cxx b/sd/source/ui/dlg/PaneShells.cxx index 199aa1a4dc83..8ee7d51d3f9c 100644 --- a/sd/source/ui/dlg/PaneShells.cxx +++ b/sd/source/ui/dlg/PaneShells.cxx @@ -103,33 +103,4 @@ LeftDrawPaneShell::~LeftDrawPaneShell (void) } - - -//===== ToolPanelPaneShell ======================================================== - -#undef ShellClass -#define ShellClass ToolPanelPaneShell - -SFX_SLOTMAP( ToolPanelPaneShell ) -{ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -}; - -SFX_IMPL_INTERFACE( ToolPanelPaneShell, SfxShell, SdResId( STR_TOOL_PANEL_SHELL ) ) -{ - SFX_CHILDWINDOW_REGISTRATION( ::sd::ToolPanelChildWindow::GetChildWindowId() ); -} - -TYPEINIT1( ToolPanelPaneShell, SfxShell ); - -ToolPanelPaneShell::ToolPanelPaneShell() - :SfxShell() -{ - SetName( ::rtl::OUString::createFromAscii( "ToolPanel" ) ); -} - -ToolPanelPaneShell::~ToolPanelPaneShell(void) -{ -} - } // end of namespace ::sd diff --git a/sd/source/ui/dlg/copydlg.cxx b/sd/source/ui/dlg/copydlg.cxx index 7605f4f1ed4f..4efb7a576b17 100644 --- a/sd/source/ui/dlg/copydlg.cxx +++ b/sd/source/ui/dlg/copydlg.cxx @@ -62,7 +62,7 @@ namespace sd { CopyDlg::CopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, - XColorTable* pColTab, + XColorList* pColTab, ::sd::View* pInView ) : SfxModalDialog ( pWindow, SdResId( DLG_COPY ) ), maFtCopies ( this, SdResId( FT_COPIES ) ), diff --git a/sd/source/ui/dlg/navigatr.cxx b/sd/source/ui/dlg/navigatr.cxx index 32f03af155ed..390726ad80ae 100644 --- a/sd/source/ui/dlg/navigatr.cxx +++ b/sd/source/ui/dlg/navigatr.cxx @@ -72,18 +72,19 @@ SdNavigatorWin::SdNavigatorWin( ::Window* pParent, ::sd::NavigatorChildWindow* pChWinCtxt, const SdResId& rSdResId, - SfxBindings* pInBindings ) -: ::Window( pParent, rSdResId ) -, maToolbox ( this, SdResId( 1 ) ) -, maTlbObjects( this, SdResId( TLB_OBJECTS ) ) -, maLbDocs ( this, SdResId( LB_DOCS ) ) -, mpChildWinContext( pChWinCtxt ) -, mbDocImported ( sal_False ) - // Bei Aenderung des DragTypes: SelectionMode der TLB anpassen! -, meDragType ( NAVIGATOR_DRAGTYPE_EMBEDDED ) -, mpBindings ( pInBindings ) -, maImageList ( SdResId( IL_NAVIGATR ) ) -, maImageListH ( SdResId( ILH_NAVIGATR ) ) + SfxBindings* pInBindings, + const UpdateRequestFunctor& rUpdateRequest) + : ::Window( pParent, rSdResId ), + maToolbox ( this, SdResId( 1 ) ), + maTlbObjects( this, SdResId( TLB_OBJECTS ) ), + maLbDocs ( this, SdResId( LB_DOCS ) ), + mpChildWinContext( pChWinCtxt ), + mbDocImported ( sal_False ), + // Bei Aenderung des DragTypes: SelectionMode der TLB anpassen! + meDragType ( NAVIGATOR_DRAGTYPE_EMBEDDED ), + mpBindings ( pInBindings ), + maImageList ( SdResId( IL_NAVIGATR ) ), + maImageListH ( SdResId( ILH_NAVIGATR ) ) { maTlbObjects.SetViewFrame( mpBindings->GetDispatcher()->GetFrame() ); @@ -91,8 +92,8 @@ SdNavigatorWin::SdNavigatorWin( maTlbObjects.SetAccessibleName(String(SdResId(STR_OBJECTS_TREE))); - mpNavigatorCtrlItem = new SdNavigatorControllerItem( SID_NAVIGATOR_STATE, this, mpBindings ); - mpPageNameCtrlItem = new SdPageNameControllerItem( SID_NAVIGATOR_PAGENAME, this, mpBindings ); + mpNavigatorCtrlItem = new SdNavigatorControllerItem( SID_NAVIGATOR_STATE, this, mpBindings, rUpdateRequest); + mpPageNameCtrlItem = new SdPageNameControllerItem( SID_NAVIGATOR_PAGENAME, this, mpBindings, rUpdateRequest); mpDocList = new List(); ApplyImageList(); // load images *before* calculating sizes to get something useful !!! @@ -137,13 +138,13 @@ SdNavigatorWin::SdNavigatorWin( if( nMinWidth > maMinSize.Width() ) maMinSize.Width() = nMinWidth; maMinSize.Height() -= 40; - ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel( maMinSize ); + SfxDockingWindow* pDockingParent = dynamic_cast<SfxDockingWindow*>(GetParent()); + if (pDockingParent != NULL) + pDockingParent->SetMinOutputSizePixel( maMinSize ); // InitTlb; Wird ueber Slot initiiert - SfxBoolItem aItem( SID_NAVIGATOR_INIT, sal_True ); - mpBindings->GetDispatcher()->Execute( - SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); - + if (rUpdateRequest) + rUpdateRequest(); } // ----------------------------------------------------------------------- @@ -882,11 +883,14 @@ void SdNavigatorWin::ApplyImageList() |* \************************************************************************/ -SdNavigatorControllerItem::SdNavigatorControllerItem( sal_uInt16 _nId, - SdNavigatorWin* pNavWin, - SfxBindings* _pBindings) : - SfxControllerItem( _nId, *_pBindings ), - pNavigatorWin( pNavWin ) +SdNavigatorControllerItem::SdNavigatorControllerItem( + sal_uInt16 _nId, + SdNavigatorWin* pNavWin, + SfxBindings* _pBindings, + const SdNavigatorWin::UpdateRequestFunctor& rUpdateRequest) + : SfxControllerItem( _nId, *_pBindings ), + pNavigatorWin( pNavWin ), + maUpdateRequest(rUpdateRequest) { } @@ -954,9 +958,8 @@ void SdNavigatorControllerItem::StateChanged( sal_uInt16 nSId, if( nState & NAVTLB_UPDATE ) { // InitTlb; Wird ueber Slot initiiert - SfxBoolItem aItem( SID_NAVIGATOR_INIT, sal_True ); - GetBindings().GetDispatcher()->Execute( - SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); + if (maUpdateRequest) + maUpdateRequest(); } } } @@ -968,11 +971,14 @@ void SdNavigatorControllerItem::StateChanged( sal_uInt16 nSId, |* \************************************************************************/ -SdPageNameControllerItem::SdPageNameControllerItem( sal_uInt16 _nId, - SdNavigatorWin* pNavWin, - SfxBindings* _pBindings) : - SfxControllerItem( _nId, *_pBindings ), - pNavigatorWin( pNavWin ) +SdPageNameControllerItem::SdPageNameControllerItem( + sal_uInt16 _nId, + SdNavigatorWin* pNavWin, + SfxBindings* _pBindings, + const SdNavigatorWin::UpdateRequestFunctor& rUpdateRequest) + : SfxControllerItem( _nId, *_pBindings ), + pNavigatorWin( pNavWin ), + maUpdateRequest(rUpdateRequest) { } diff --git a/sd/source/ui/dlg/sddlgfact.cxx b/sd/source/ui/dlg/sddlgfact.cxx index be71806bbb38..f8f00cba2de0 100644 --- a/sd/source/ui/dlg/sddlgfact.cxx +++ b/sd/source/ui/dlg/sddlgfact.cxx @@ -391,7 +391,7 @@ VclAbstractDialog * SdAbstractDialogFactory_Impl::CreateBreakDlg( //add for CopyDlg begin AbstractCopyDlg * SdAbstractDialogFactory_Impl::CreateCopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, - XColorTable* pColTab, ::sd::View* pView ) //add for CopyDlg + XColorList* pColTab, ::sd::View* pView ) //add for CopyDlg { return new AbstractCopyDlg_Impl( new ::sd::CopyDlg( pWindow, rInAttrs, pColTab, pView ) ); } diff --git a/sd/source/ui/dlg/sddlgfact.hxx b/sd/source/ui/dlg/sddlgfact.hxx index 71ca7de2a0ca..aabb19d784b1 100644 --- a/sd/source/ui/dlg/sddlgfact.hxx +++ b/sd/source/ui/dlg/sddlgfact.hxx @@ -255,7 +255,7 @@ class SdAbstractDialogFactory_Impl : public SdAbstractDialogFactory public: virtual VclAbstractDialog* CreateBreakDlg(::Window* pWindow, ::sd::DrawView* pDrView, ::sd::DrawDocShell* pShell, sal_uLong nSumActionCount, sal_uLong nObjCount ); - virtual AbstractCopyDlg* CreateCopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, XColorTable* pColTab, ::sd::View* pView ); + virtual AbstractCopyDlg* CreateCopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, XColorList* pColTab, ::sd::View* pView ); virtual AbstractSdCustomShowDlg* CreateSdCustomShowDlg( ::Window* pWindow, SdDrawDocument& rDrawDoc ); virtual SfxAbstractTabDialog* CreateSdTabCharDialog( ::Window* pParent, const SfxItemSet* pAttr, SfxObjectShell* pDocShell ); virtual SfxAbstractTabDialog* CreateSdTabPageDialog( ::Window* pParent, const SfxItemSet* pAttr, SfxObjectShell* pDocShell, sal_Bool bAreaPage = sal_True ); diff --git a/sd/source/ui/docshell/docshel3.cxx b/sd/source/ui/docshell/docshel3.cxx index 70148e8df615..51fe0cb0ff17 100644 --- a/sd/source/ui/docshell/docshel3.cxx +++ b/sd/source/ui/docshell/docshel3.cxx @@ -192,7 +192,7 @@ void DrawDocShell::Execute( SfxRequest& rReq ) { // passende ColorTable ist per PutItem gesetzt worden SvxColorTableItem* pColItem = (SvxColorTableItem*) GetItem( SID_COLOR_TABLE ); - XColorTable* pTable = pColItem->GetColorTable(); + XColorList* pTable = pColItem->GetColorTable(); rReq.SetReturnValue( OfaPtrItem( SID_GET_COLORTABLE, pTable ) ); } break; diff --git a/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx b/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx index 27ea6d53c4c7..b182a3b4656f 100644 --- a/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx +++ b/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx @@ -143,7 +143,7 @@ void ConfigurationControllerResourceManager::ActivateResource ( if ( ! xFactory.is()) { #if defined VERBOSE && VERBOSE>=1 - OSL_TRACE(" no factory found fo %s\n", + OSL_TRACE(" no factory found for %s\n", OUStringToOString(sResourceURL, RTL_TEXTENCODING_UTF8).getStr()); #endif return; @@ -163,9 +163,9 @@ void ConfigurationControllerResourceManager::ActivateResource ( // of registered factories. mpResourceFactoryContainer->RemoveFactoryForReference(xFactory); } - catch(Exception&) + catch (Exception& e) { - DBG_UNHANDLED_EXCEPTION(); + (void)e; } if (xResource.is()) @@ -204,9 +204,10 @@ void ConfigurationControllerResourceManager::ActivateResource ( /* In this method we do following steps. 1. Remove the resource from the URL->Object map of the configuration controller. - 2. Notify listeners. + 2. Notify listeners that deactivation has started. 3. Remove the resource id from the current configuration. 4. Release the resource. + 5. Notify listeners about that deactivation is completed. */ void ConfigurationControllerResourceManager::DeactivateResource ( const Reference<XResourceId>& rxResourceId, @@ -257,6 +258,12 @@ void ConfigurationControllerResourceManager::DeactivateResource ( DBG_UNHANDLED_EXCEPTION(); } + // 5. Notifiy listeners that the resource is being deactivated. + mpBroadcaster->NotifyListeners( + FrameworkHelper::msResourceDeactivationEndEvent, + rxResourceId, + NULL); + #if defined VERBOSE && VERBOSE>=1 if (bSuccess) OSL_TRACE("successfully deactivated %s\n", OUStringToOString( diff --git a/sd/source/ui/framework/configuration/ResourceFactoryManager.cxx b/sd/source/ui/framework/configuration/ResourceFactoryManager.cxx index 51ea957897ef..86cf8b8aacd7 100644 --- a/sd/source/ui/framework/configuration/ResourceFactoryManager.cxx +++ b/sd/source/ui/framework/configuration/ResourceFactoryManager.cxx @@ -37,6 +37,9 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; using ::rtl::OUString; +#undef VERBOSE +//#define VERBOSE 1 + namespace sd { namespace framework { ResourceFactoryManager::ResourceFactoryManager (const Reference<XControllerManager>& rxManager) @@ -84,10 +87,22 @@ void ResourceFactoryManager::AddFactory ( { // The URL is a URL pattern not an single URL. maFactoryPatternList.push_back(FactoryPatternList::value_type(rsURL, rxFactory)); + +#if defined VERBOSE && VERBOSE>=1 + OSL_TRACE("ResourceFactoryManager::AddFactory pattern %s %x\n", + OUStringToOString(rsURL, RTL_TEXTENCODING_UTF8).getStr(), + rxFactory.get()); +#endif } else { maFactoryMap[rsURL] = rxFactory; + +#if defined VERBOSE && VERBOSE>=1 + OSL_TRACE("ResourceFactoryManager::AddFactory fixed %s %x\n", + OUStringToOString(rsURL, RTL_TEXTENCODING_UTF8).getStr(), + rxFactory.get()); +#endif } } diff --git a/sd/source/ui/framework/factories/BasicPaneFactory.cxx b/sd/source/ui/framework/factories/BasicPaneFactory.cxx index 47d06a6e605c..eef89fd631c0 100644 --- a/sd/source/ui/framework/factories/BasicPaneFactory.cxx +++ b/sd/source/ui/framework/factories/BasicPaneFactory.cxx @@ -51,8 +51,7 @@ namespace { CenterPaneId, FullScreenPaneId, LeftImpressPaneId, - LeftDrawPaneId, - RightPaneId + LeftDrawPaneId }; static const sal_Int32 gnConfigurationUpdateStartEvent(0); @@ -205,7 +204,7 @@ void SAL_CALL BasicPaneFactory::initialize (const Sequence<Any>& aArguments) mxConfigurationControllerWeak = xCC; // Add pane factories for the two left panes (one for Impress and one for - // Draw), the center pane, and the right pane. + // Draw) and the center pane. if (xController.is() && xCC.is()) { PaneDescriptor aDescriptor; @@ -231,11 +230,6 @@ void SAL_CALL BasicPaneFactory::initialize (const Sequence<Any>& aArguments) aDescriptor.mePaneId = LeftDrawPaneId; mpPaneContainer->push_back(aDescriptor); xCC->addResourceFactory(aDescriptor.msPaneURL, this); - - aDescriptor.msPaneURL = FrameworkHelper::msRightPaneURL; - aDescriptor.mePaneId = RightPaneId; - mpPaneContainer->push_back(aDescriptor); - xCC->addResourceFactory(aDescriptor.msPaneURL, this); } // Register as configuration change listener. @@ -304,7 +298,6 @@ Reference<XResource> SAL_CALL BasicPaneFactory::createResource ( case LeftImpressPaneId: case LeftDrawPaneId: - case RightPaneId: xPane = CreateChildWindowPane( rxPaneId, *iDescriptor); @@ -524,11 +517,6 @@ Reference<XResource> BasicPaneFactory::CreateChildWindowPane ( nChildWindowId = ::sd::LeftPaneDrawChildWindow::GetChildWindowId(); break; - case RightPaneId: - pShell.reset(new ToolPanelPaneShell()); - nChildWindowId = ::sd::ToolPanelChildWindow::GetChildWindowId(); - break; - default: break; } diff --git a/sd/source/ui/framework/factories/BasicPaneFactory.hxx b/sd/source/ui/framework/factories/BasicPaneFactory.hxx index 3feff87322fb..4a31a9d77231 100644 --- a/sd/source/ui/framework/factories/BasicPaneFactory.hxx +++ b/sd/source/ui/framework/factories/BasicPaneFactory.hxx @@ -67,7 +67,6 @@ namespace sd { namespace framework { private:resource/pane/FullScreenPane private:resource/pane/LeftImpressPane private:resource/pane/LeftDrawPane - private:resource/pane/RightPane There are two left panes because this is (seems to be) the only way to show different titles for the left pane in Draw and Impress. */ diff --git a/sd/source/ui/framework/factories/BasicViewFactory.cxx b/sd/source/ui/framework/factories/BasicViewFactory.cxx index 1b0e892eafa5..70fabe2ab94d 100644 --- a/sd/source/ui/framework/factories/BasicViewFactory.cxx +++ b/sd/source/ui/framework/factories/BasicViewFactory.cxx @@ -38,7 +38,6 @@ #include "DrawViewShell.hxx" #include "GraphicViewShell.hxx" #include "OutlineViewShell.hxx" -#include "taskpane/ToolPanelViewShell.hxx" #include "PresentationViewShell.hxx" #include "SlideSorterViewShell.hxx" #include "FrameView.hxx" @@ -327,7 +326,6 @@ void SAL_CALL BasicViewFactory::initialize (const Sequence<Any>& aArguments) mxConfigurationController->addResourceFactory(FrameworkHelper::msNotesViewURL, this); mxConfigurationController->addResourceFactory(FrameworkHelper::msHandoutViewURL, this); mxConfigurationController->addResourceFactory(FrameworkHelper::msPresentationViewURL, this); - mxConfigurationController->addResourceFactory(FrameworkHelper::msTaskPaneURL, this); mxConfigurationController->addResourceFactory(FrameworkHelper::msSlideSorterURL, this); } catch (RuntimeException&) @@ -445,15 +443,6 @@ void SAL_CALL BasicViewFactory::initialize (const Sequence<Any>& aArguments) &rWindow, pFrameView)); } - else if (rsViewURL.equals(FrameworkHelper::msTaskPaneURL)) - { - pViewShell.reset( - new ::sd::toolpanel::ToolPanelViewShell( - &rFrame, - *mpBase, - &rWindow, - pFrameView)); - } else if (rsViewURL.equals(FrameworkHelper::msSlideSorterURL)) { pViewShell = ::sd::slidesorter::SlideSorterViewShell::Create ( @@ -529,8 +518,6 @@ bool BasicViewFactory::IsCacheable (const ::boost::shared_ptr<ViewDescriptor>& r FrameworkHelper::msSlideSorterURL, FrameworkHelper::msLeftDrawPaneURL)); maCacheableResources.push_back(pHelper->CreateResourceId( FrameworkHelper::msSlideSorterURL, FrameworkHelper::msLeftImpressPaneURL)); - maCacheableResources.push_back(pHelper->CreateResourceId( - FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL)); } ::std::vector<Reference<XResourceId> >::const_iterator iId; diff --git a/sd/source/ui/framework/factories/Pane.cxx b/sd/source/ui/framework/factories/Pane.cxx index c6b75cc8bdaf..80a3f489eb98 100644 --- a/sd/source/ui/framework/factories/Pane.cxx +++ b/sd/source/ui/framework/factories/Pane.cxx @@ -81,6 +81,16 @@ void Pane::disposing (void) +void Pane::SetWindow (::Window* pWindow) +{ + OSL_TRACE("setting Pane::mpWindow to %x", pWindow); + mpWindow = pWindow; + mxWindow = VCLUnoHelper::GetInterface(mpWindow); +} + + + + //----- XPane ----------------------------------------------------------------- Reference<awt::XWindow> SAL_CALL Pane::getWindow (void) diff --git a/sd/source/ui/framework/factories/TaskPanelFactory.cxx b/sd/source/ui/framework/factories/TaskPanelFactory.cxx deleted file mode 100644 index 34f0ee3dd71d..000000000000 --- a/sd/source/ui/framework/factories/TaskPanelFactory.cxx +++ /dev/null @@ -1,319 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#include "precompiled_sd.hxx" -#include "TaskPanelFactory.hxx" -#include "taskpane/ToolPanelViewShell.hxx" -#include "DrawController.hxx" -#include "framework/FrameworkHelper.hxx" -#include <cppuhelper/compbase1.hxx> -#include <tools/diagnose_ex.h> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::drawing::framework; - -using ::rtl::OUString; -using ::sd::framework::FrameworkHelper; - -namespace sd { namespace framework { - -Reference<XInterface> SAL_CALL TaskPanelFactory_createInstance ( - const Reference<XComponentContext>& rxContext) -{ - return Reference<XInterface>(static_cast<XWeak*>(new TaskPanelFactory(rxContext))); -} - - - - -::rtl::OUString TaskPanelFactory_getImplementationName (void) throw(RuntimeException) -{ - return ::rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Draw.framework.TaskPanelFactory")); -} - - - - -Sequence<rtl::OUString> SAL_CALL TaskPanelFactory_getSupportedServiceNames (void) - throw (RuntimeException) -{ - static const OUString sServiceName( - OUString::createFromAscii("com.sun.star.drawing.framework.TaskPanelFactory")); - return Sequence<rtl::OUString>(&sServiceName, 1); -} - - - - -//===== ToolPanelResource ===================================================== - -namespace { - -typedef ::cppu::WeakComponentImplHelper1 < - css::drawing::framework::XResource - > TaskPanelResourceInterfaceBase; - -class TaskPanelResource - : private ::cppu::BaseMutex, - public TaskPanelResourceInterfaceBase -{ -public: - TaskPanelResource ( - const Reference<XResourceId>& rxResourceId ); - virtual ~TaskPanelResource (); - - virtual void SAL_CALL disposing (); - - // XResource - - virtual Reference<XResourceId> SAL_CALL getResourceId (void) - throw (css::uno::RuntimeException); - - virtual sal_Bool SAL_CALL isAnchorOnly () throw (RuntimeException) - { return false; } - -private: - const Reference<XResourceId> mxResourceId; -}; - -} // end of anonymous namespace. - - - - -//===== TaskPanelFactory ======================================================= - -TaskPanelFactory::TaskPanelFactory ( - const ::com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>& rxContext) - : TaskPanelFactoryInterfaceBase(m_aMutex), - mpViewShellBase(NULL) -{ - (void)rxContext; -} - - - - -TaskPanelFactory::~TaskPanelFactory (void) -{ -} - - - - -void SAL_CALL TaskPanelFactory::disposing (void) -{ -} - - - - -//===== XInitialization ======================================================= - -void SAL_CALL TaskPanelFactory::initialize( - const ::com::sun::star::uno::Sequence<com::sun::star::uno::Any>& aArguments) - throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException) -{ - if (aArguments.getLength() > 0) - { - try - { - // Get the XController from the first argument. - Reference<frame::XController> xController (aArguments[0], UNO_QUERY_THROW); - - // Tunnel through the controller to obtain access to the ViewShellBase. - try - { - Reference<lang::XUnoTunnel> xTunnel (xController, UNO_QUERY_THROW); - DrawController* pController - = reinterpret_cast<DrawController*>( - sal::static_int_cast<sal_uIntPtr>( - xTunnel->getSomething(DrawController::getUnoTunnelId()))); - if (pController != NULL) - mpViewShellBase = pController->GetViewShellBase(); - - } - catch(RuntimeException&) - {} - - - Reference<XControllerManager> xCM (xController, UNO_QUERY_THROW); - Reference<XConfigurationController> xCC ( - xCM->getConfigurationController(), UNO_QUERY_THROW); - xCC->addResourceFactory(FrameworkHelper::msMasterPagesTaskPanelURL, this); - xCC->addResourceFactory(FrameworkHelper::msLayoutTaskPanelURL, this); - xCC->addResourceFactory(FrameworkHelper::msTableDesignPanelURL, this); - xCC->addResourceFactory(FrameworkHelper::msCustomAnimationTaskPanelURL, this); - xCC->addResourceFactory(FrameworkHelper::msSlideTransitionTaskPanelURL, this); - } - catch (RuntimeException&) - { - } - } -} - - -//===== XResourceController =================================================== - -namespace -{ - void lcl_collectResourceURLs( const Reference< XResourceId >& i_rResourceId, ::std::vector< ::rtl::OUString >& o_rResourceURLs ) - { - ENSURE_OR_RETURN_VOID( i_rResourceId.is(), "illegal resource ID" ); - o_rResourceURLs.resize(0); - - Reference< XResourceId > xResourceId( i_rResourceId ); - ::rtl::OUString sResourceURL = xResourceId->getResourceURL(); - while ( sResourceURL.getLength() > 0 ) - { - o_rResourceURLs.push_back( sResourceURL ); - xResourceId = xResourceId->getAnchor(); - sResourceURL = xResourceId->getResourceURL(); - } - } -} - -Reference<XResource> SAL_CALL TaskPanelFactory::createResource ( - const Reference<XResourceId>& rxResourceId) - throw (RuntimeException, IllegalArgumentException, WrappedTargetException) -{ - Reference<XResource> xResource; - - if ( ! rxResourceId.is()) - return NULL; - - OUString sResourceURL (rxResourceId->getResourceURL()); - - if ( sResourceURL.match( FrameworkHelper::msTaskPanelURLPrefix ) ) - { - toolpanel::PanelId ePanelId( toolpanel::GetStandardPanelId( sResourceURL ) ); - - if ( ( ePanelId != toolpanel::PID_UNKNOWN ) && ( mpViewShellBase != NULL ) ) - { - ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( *mpViewShellBase ) ); - - // assume that the top-level anchor is the URL of the pane - ::std::vector< ::rtl::OUString > aResourceURLs; - lcl_collectResourceURLs( rxResourceId, aResourceURLs ); - - const ::rtl::OUString sPaneURL = aResourceURLs[ aResourceURLs.size() - 1 ]; - const ::boost::shared_ptr< ViewShell > pPaneViewShell( pFrameworkHelper->GetViewShell( sPaneURL ) ); - - toolpanel::ToolPanelViewShell* pToolPanel = dynamic_cast< toolpanel::ToolPanelViewShell* >( pPaneViewShell.get() ); - if ( pToolPanel != NULL ) - xResource = new TaskPanelResource( rxResourceId ); - - OSL_POSTCOND( xResource.is(), "TaskPanelFactory::createResource: did not find the given resource!" ); - } - } - - return xResource; -} - - - - -void SAL_CALL TaskPanelFactory::releaseResource ( - const Reference<XResource>& rxResource) - throw (RuntimeException) -{ - ENSURE_OR_RETURN_VOID( rxResource.is(), "illegal resource" ); - const Reference< XResourceId > xResourceId( rxResource->getResourceId(), UNO_SET_THROW ); - - // assume that the top-level anchor is the URL of the pane - ::std::vector< ::rtl::OUString > aResourceURLs; - lcl_collectResourceURLs( xResourceId, aResourceURLs ); - - OSL_ENSURE( !aResourceURLs.empty(), "TaskPanelFactory::releaseResource: illegal resource/URL!" ); - if ( !aResourceURLs.empty() ) - { - const ::rtl::OUString sPaneURL = aResourceURLs[ aResourceURLs.size() - 1 ]; - ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( *mpViewShellBase ) ); - const ::boost::shared_ptr< ViewShell > pPaneViewShell( pFrameworkHelper->GetViewShell( sPaneURL ) ); - if ( pPaneViewShell != NULL ) - { - const ::rtl::OUString sPanelResourceURL( xResourceId->getResourceURL() ); - const toolpanel::PanelId ePanelId( toolpanel::GetStandardPanelId( sPanelResourceURL ) ); - toolpanel::ToolPanelViewShell* pToolPanel = dynamic_cast< toolpanel::ToolPanelViewShell* >( pPaneViewShell.get() ); - - if ( ( ePanelId != toolpanel::PID_UNKNOWN ) - && ( pToolPanel != NULL ) - ) - { - pToolPanel->DeactivatePanel( sPanelResourceURL ); - } - else - { - OSL_ENSURE( false, "TaskPanelFactory::releaseResource: don't know what to do with this resource!" ); - } - } - } - - Reference<XComponent> xComponent (rxResource, UNO_QUERY); - if (xComponent.is()) - xComponent->dispose(); -} - - - - -//===== ToolPanelResource ===================================================== - -namespace { - -TaskPanelResource::TaskPanelResource ( - const Reference<XResourceId>& rxResourceId) - : TaskPanelResourceInterfaceBase(m_aMutex), - mxResourceId(rxResourceId) -{ -} - - - - -TaskPanelResource::~TaskPanelResource (void) -{ -} - - - - -void SAL_CALL TaskPanelResource::disposing () -{ -} - - - - -Reference<XResourceId> SAL_CALL TaskPanelResource::getResourceId () - throw (css::uno::RuntimeException) -{ - return mxResourceId; -} - -} // end of anonymous namespace - -} } // end of namespace sd::framework diff --git a/sd/source/ui/framework/factories/TaskPanelFactory.hxx b/sd/source/ui/framework/factories/TaskPanelFactory.hxx deleted file mode 100644 index 7ab8b1ec75e7..000000000000 --- a/sd/source/ui/framework/factories/TaskPanelFactory.hxx +++ /dev/null @@ -1,92 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_FRAMEWORK_TASK_PANEL_FACTORY_HXX -#define SD_FRAMEWORK_TASK_PANEL_FACTORY_HXX - -#include <com/sun/star/drawing/framework/XResourceFactory.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/uno/XComponentContext.hpp> -#include <osl/mutex.hxx> -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase2.hxx> - -#include <boost/scoped_ptr.hpp> - -namespace css = ::com::sun::star; - -namespace { - -typedef ::cppu::WeakComponentImplHelper2 < - css::lang::XInitialization, - css::drawing::framework::XResourceFactory - > TaskPanelFactoryInterfaceBase; - -} // end of anonymous namespace. - - -namespace sd { class ViewShellBase; } - -namespace sd { namespace framework { - -/** This class creates panels for the task pane. -*/ -class TaskPanelFactory - : private ::cppu::BaseMutex, - public TaskPanelFactoryInterfaceBase -{ -public: - TaskPanelFactory ( - const css::uno::Reference<css::uno::XComponentContext>& rxContext); - virtual ~TaskPanelFactory (void); - - virtual void SAL_CALL disposing (void); - - - // XInitialization - - virtual void SAL_CALL initialize( - const css::uno::Sequence<css::uno::Any>& aArguments) - throw (css::uno::Exception, css::uno::RuntimeException); - - - // XResourceFactory - - virtual css::uno::Reference<css::drawing::framework::XResource> - SAL_CALL createResource ( - const css::uno::Reference< - css::drawing::framework::XResourceId>& rxResourcesId) - throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException); - - virtual void SAL_CALL releaseResource ( - const css::uno::Reference< - css::drawing::framework::XResource>& rxResource) - throw (css::uno::RuntimeException); - -private: - ViewShellBase* mpViewShellBase; -}; - -} } // end of namespace sd::framework - -#endif diff --git a/sd/source/ui/framework/factories/TaskPanelResource.cxx b/sd/source/ui/framework/factories/TaskPanelResource.cxx new file mode 100644 index 000000000000..8964359907b0 --- /dev/null +++ b/sd/source/ui/framework/factories/TaskPanelResource.cxx @@ -0,0 +1,133 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "framework/TaskPanelResource.hxx" + +#include <vcl/window.hxx> +#include <toolkit/helper/vclunohelper.hxx> + + +using namespace css; +using namespace cssu; +using namespace cssdf; + + +namespace sd { namespace framework { + +namespace { + ::Window* GetWindowForResource ( + ViewShellBase& rViewShellBase, + const cssu::Reference<cssdf::XResourceId>& rxResourceId) + { + ::Window* pWindow = NULL; + if (rxResourceId.is() && rxResourceId->getAnchor().is()) + { + ::boost::shared_ptr<FrameworkHelper> pFrameworkHelper (FrameworkHelper::Instance(rViewShellBase)); + Reference<awt::XWindow> xWindow ( + pFrameworkHelper->GetPaneWindow(rxResourceId->getAnchor()->getAnchor())); + pWindow = VCLUnoHelper::GetWindow(xWindow); + } + return pWindow; + } +} + + + + +TaskPanelResource::TaskPanelResource ( + sidebar::SidebarViewShell& rSidebarViewShell, + sidebar::PanelId ePanelId, + const Reference<XResourceId>& rxResourceId) + : TaskPanelResourceInterfaceBase(m_aMutex), + mxResourceId(rxResourceId), + mpControl(rSidebarViewShell.CreatePanel( + GetWindowForResource(rSidebarViewShell.GetViewShellBase(), rxResourceId), + ePanelId)) +{ + if (mpControl.get() != NULL) + { + mpControl->Show(); + mpControl->GetParent()->Show(); + mpControl->AddEventListener(LINK(this,TaskPanelResource,WindowEventHandler)); + } +} + + + + +TaskPanelResource::~TaskPanelResource (void) +{ + mpControl.reset(); +} + + + + +void SAL_CALL TaskPanelResource::disposing () +{ + mpControl.reset(); +} + + + + +Reference<XResourceId> SAL_CALL TaskPanelResource::getResourceId () + throw (css::uno::RuntimeException) +{ + return mxResourceId; +} + + + + +sal_Bool SAL_CALL TaskPanelResource::isAnchorOnly (void) + throw (RuntimeException) +{ + return false; +} + + + + +::Window* TaskPanelResource::GetControl (void) const +{ + return mpControl.get(); +} + + + + +IMPL_LINK(TaskPanelResource,WindowEventHandler,VclWindowEvent*,pEvent) +{ + if (pEvent!=NULL && pEvent->GetId()==SFX_HINT_DYING) + { + // Somebody else deleted the window. Release our reference so + // that we do not delete it again. + mpControl.release(); + return sal_True; + } + else + return sal_False; +} + +} } // end of namespace sd::framework diff --git a/sd/source/ui/framework/factories/ViewShellWrapper.cxx b/sd/source/ui/framework/factories/ViewShellWrapper.cxx index 826467c99fd1..5aec3f2906e0 100644 --- a/sd/source/ui/framework/factories/ViewShellWrapper.cxx +++ b/sd/source/ui/framework/factories/ViewShellWrapper.cxx @@ -25,7 +25,6 @@ #include "framework/ViewShellWrapper.hxx" #include "framework/Pane.hxx" -#include "taskpane/ToolPanelViewShell.hxx" #include "ViewShell.hxx" #include "Window.hxx" @@ -50,7 +49,6 @@ using ::com::sun::star::rendering::XCanvas; using ::com::sun::star::lang::DisposedException; using ::rtl::OUString; -using ::sd::toolpanel::ToolPanelViewShell; namespace sd { namespace framework { diff --git a/sd/source/ui/framework/factories/makefile.mk b/sd/source/ui/framework/factories/makefile.mk index 9699a5892daa..d92741419fba 100644 --- a/sd/source/ui/framework/factories/makefile.mk +++ b/sd/source/ui/framework/factories/makefile.mk @@ -47,7 +47,6 @@ SLOFILES = \ $(SLO)$/FullScreenPane.obj \ $(SLO)$/Pane.obj \ $(SLO)$/PresentationFactory.obj \ - $(SLO)$/TaskPanelFactory.obj \ $(SLO)$/ViewShellWrapper.obj # --- Tagets ------------------------------------------------------- diff --git a/sd/source/ui/framework/module/ImpressModule.cxx b/sd/source/ui/framework/module/ImpressModule.cxx index caba74aa51a5..79c87d06fa61 100644 --- a/sd/source/ui/framework/module/ImpressModule.cxx +++ b/sd/source/ui/framework/module/ImpressModule.cxx @@ -29,7 +29,6 @@ #include "ViewTabBarModule.hxx" #include "CenterViewFocusModule.hxx" #include "SlideSorterModule.hxx" -#include "ToolPanelModule.hxx" #include "ToolBarModule.hxx" #include "ShellStackGuard.hxx" @@ -50,7 +49,6 @@ void ImpressModule::Initialize (Reference<frame::XController>& rxController) new SlideSorterModule( rxController, FrameworkHelper::msLeftImpressPaneURL); - ToolPanelModule::Initialize(rxController); new ToolBarModule(rxController); new ShellStackGuard(rxController); } diff --git a/sd/source/ui/framework/module/ModuleController.cxx b/sd/source/ui/framework/module/ModuleController.cxx index 77922bfefd44..3bb93aa86058 100644 --- a/sd/source/ui/framework/module/ModuleController.cxx +++ b/sd/source/ui/framework/module/ModuleController.cxx @@ -304,9 +304,18 @@ void SAL_CALL ModuleController::requestResource (const OUString& rsResourceURL) // Create the factory service. Sequence<Any> aArguments(1); aArguments[0] <<= mxController; - xFactory = xGlobalFactory->createInstanceWithArguments( - iFactory->second, - aArguments); + OSL_TRACE("creating resource %s", + OUStringToOString(iFactory->second, RTL_TEXTENCODING_ASCII_US).getStr()); + try + { + xFactory = xGlobalFactory->createInstanceWithArguments( + iFactory->second, + aArguments); + } + catch(Exception&e) + { + OSL_TRACE("caught exception while creating factory."); + } // Remember that this factory has been instanced. (*mpLoadedFactories)[iFactory->second] = xFactory; diff --git a/sd/source/ui/framework/module/ToolPanelModule.cxx b/sd/source/ui/framework/module/ToolPanelModule.cxx index 007f34501e38..cf72e1d12560 100644 --- a/sd/source/ui/framework/module/ToolPanelModule.cxx +++ b/sd/source/ui/framework/module/ToolPanelModule.cxx @@ -142,8 +142,8 @@ void ToolPanelModule::Initialize (const Reference<frame::XController>& rxControl new ResourceManager( rxController, FrameworkHelper::CreateResourceId( - FrameworkHelper::msTaskPaneURL, - FrameworkHelper::msRightPaneURL))); + FrameworkHelper::msSidebarViewURL, + FrameworkHelper::msSidebarPaneURL))); pResourceManager->AddActiveMainView(FrameworkHelper::msImpressViewURL); pResourceManager->AddActiveMainView(FrameworkHelper::msNotesViewURL); pResourceManager->AddActiveMainView(FrameworkHelper::msHandoutViewURL); diff --git a/sd/source/ui/framework/tools/FrameworkHelper.cxx b/sd/source/ui/framework/tools/FrameworkHelper.cxx index 33535330b231..5f79903401b2 100644 --- a/sd/source/ui/framework/tools/FrameworkHelper.cxx +++ b/sd/source/ui/framework/tools/FrameworkHelper.cxx @@ -19,8 +19,6 @@ * *************************************************************/ - - #include "precompiled_sd.hxx" #include <osl/time.h> @@ -37,6 +35,7 @@ #include "DrawController.hxx" #include "app.hrc" #include <com/sun/star/drawing/framework/XControllerManager.hpp> +#include <com/sun/star/drawing/framework/XPane.hpp> #include <cppuhelper/compbase1.hxx> #include <svl/lstner.hxx> @@ -102,8 +101,10 @@ public: virtual ~CallbackCaller (void); virtual void SAL_CALL disposing (void); + // XEventListener virtual void SAL_CALL disposing (const lang::EventObject& rEvent) throw (RuntimeException); + // XConfigurationChangeListener virtual void SAL_CALL notifyConfigurationChange (const ConfigurationChangeEvent& rEvent) throw (RuntimeException); @@ -179,8 +180,8 @@ const OUString FrameworkHelper::msLeftImpressPaneURL( msPaneURLPrefix + OUString::createFromAscii("LeftImpressPane")); const OUString FrameworkHelper::msLeftDrawPaneURL( msPaneURLPrefix + OUString::createFromAscii("LeftDrawPane")); -const OUString FrameworkHelper::msRightPaneURL( - msPaneURLPrefix + OUString::createFromAscii("RightPane")); +const OUString FrameworkHelper::msSidebarPaneURL( + msPaneURLPrefix + OUString::createFromAscii("SidebarPane")); // View URLs. @@ -201,8 +202,8 @@ const OUString FrameworkHelper::msSlideSorterURL( msViewURLPrefix + OUString::createFromAscii("SlideSorter")); const OUString FrameworkHelper::msPresentationViewURL( msViewURLPrefix + OUString::createFromAscii("PresentationView")); -const OUString FrameworkHelper::msTaskPaneURL( - msViewURLPrefix + OUString::createFromAscii("TaskPane")); +const OUString FrameworkHelper::msSidebarViewURL( + msViewURLPrefix + OUString::createFromAscii("SidebarView")); // Tool bar URLs. @@ -215,9 +216,13 @@ const OUString FrameworkHelper::msViewTabBarURL( // Task panel URLs. const ::rtl::OUString FrameworkHelper::msTaskPanelURLPrefix( - OUString::createFromAscii("private:resource/toolpanel/DrawingFramework/")); -const ::rtl::OUString FrameworkHelper::msMasterPagesTaskPanelURL( - msTaskPanelURLPrefix + OUString::createFromAscii("MasterPages")); + OUString::createFromAscii("private:resource/toolpanel/")); +const ::rtl::OUString FrameworkHelper::msAllMasterPagesTaskPanelURL( + msTaskPanelURLPrefix + OUString::createFromAscii("AllMasterPages")); +const ::rtl::OUString FrameworkHelper::msRecentMasterPagesTaskPanelURL( + msTaskPanelURLPrefix + OUString::createFromAscii("RecentMasterPages")); +const ::rtl::OUString FrameworkHelper::msUsedMasterPagesTaskPanelURL( + msTaskPanelURLPrefix + OUString::createFromAscii("UsedMasterPages")); const ::rtl::OUString FrameworkHelper::msLayoutTaskPanelURL( msTaskPanelURLPrefix + OUString::createFromAscii("Layouts")); const ::rtl::OUString FrameworkHelper::msTableDesignPanelURL( @@ -237,6 +242,8 @@ const OUString FrameworkHelper::msResourceActivationEvent( OUString::createFromAscii("ResourceActivation")); const OUString FrameworkHelper::msResourceDeactivationEvent( OUString::createFromAscii("ResourceDeactivation")); +const OUString FrameworkHelper::msResourceDeactivationEndEvent( + OUString::createFromAscii("ResourceDeactivationEnd")); const OUString FrameworkHelper::msConfigurationUpdateStartEvent( OUString::createFromAscii("ConfigurationUpdateStart")); const OUString FrameworkHelper::msConfigurationUpdateEndEvent( @@ -337,6 +344,20 @@ private: +//----- FrameworkHelper::Deleter ---------------------------------------------- + +class FrameworkHelper::Deleter +{ +public: + void operator()(FrameworkHelper* pObject) + { + delete pObject; + } +}; + + + + //----- FrameworkHelper ------------------------------------------------------- ::boost::scoped_ptr<FrameworkHelper::ViewURLMap> FrameworkHelper::mpViewURLMap(new ViewURLMap()); @@ -381,7 +402,9 @@ FrameworkHelper::InstanceMap FrameworkHelper::maInstanceMap; ::osl::MutexGuard aGuard (aMutexFunctor()); if (iHelper == maInstanceMap.end()) { - pHelper = ::boost::shared_ptr<FrameworkHelper>(new FrameworkHelper(rBase)); + pHelper = ::boost::shared_ptr<FrameworkHelper>( + new FrameworkHelper(rBase), + FrameworkHelper::Deleter()); pHelper->Initialize(); OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); maInstanceMap[&rBase] = pHelper; @@ -524,6 +547,61 @@ Reference<XView> FrameworkHelper::GetView (const Reference<XResourceId>& rxPaneO +Reference<awt::XWindow> FrameworkHelper::GetPaneWindow (const Reference<XResourceId>& rxPaneId) +{ + Reference<awt::XWindow> xWindow; + + if (rxPaneId.is() && mxConfigurationController.is()) + { + try + { + if (rxPaneId->getResourceURL().match(msPaneURLPrefix)) + { + Reference<XPane> xPane (mxConfigurationController->getResource(rxPaneId), UNO_QUERY); + if (xPane.is()) + xWindow = xPane->getWindow(); + } + } + catch (lang::DisposedException&) + { + Dispose(); + } + catch (RuntimeException&) + { + } + } + + return xWindow; +} + + + + +Reference<XResource> FrameworkHelper::GetResource (const Reference<XResourceId>& rxResourceId) +{ + Reference<XResource> xResource; + + if (rxResourceId.is() && mxConfigurationController.is()) + { + try + { + return mxConfigurationController->getResource(rxResourceId); + } + catch (lang::DisposedException&) + { + Dispose(); + } + catch (RuntimeException&) + { + } + } + + return NULL; +} + + + + Reference<XResourceId> FrameworkHelper::RequestView ( const OUString& rsResourceURL, const OUString& rsAnchorURL) @@ -559,7 +637,7 @@ Reference<XResourceId> FrameworkHelper::RequestView ( -void FrameworkHelper::RequestTaskPanel ( +Reference<XResourceId> FrameworkHelper::RequestSidebarPanel ( const OUString& rsTaskPanelURL, const bool bEnsureTaskPaneIsVisible) { @@ -572,26 +650,29 @@ void FrameworkHelper::RequestTaskPanel ( { Reference<XConfiguration> xConfiguration ( mxConfigurationController->getCurrentConfiguration()); - if (xConfiguration.is()) - if ( ! xConfiguration->hasResource( - CreateResourceId(msTaskPaneURL, msRightPaneURL))) - { - // Task pane does is not active. Do not force it. - return; - } + if (xConfiguration.is()) + if ( ! xConfiguration->hasResource( + CreateResourceId(msSidebarViewURL, msSidebarPaneURL))) + { + // Task pane is not active. Do not force it. + return NULL; + } } - // Create the resource id from URLs for the pane, the task pane - // view, and the task panel. + // Create the resource id from URLs for the sidebar pane + // and view and the requested panel. mxConfigurationController->requestResourceActivation( - CreateResourceId(msRightPaneURL), + CreateResourceId(msSidebarPaneURL), ResourceActivationMode_ADD); mxConfigurationController->requestResourceActivation( - CreateResourceId(msTaskPaneURL, msRightPaneURL), + CreateResourceId(msSidebarViewURL, msSidebarPaneURL), ResourceActivationMode_REPLACE); + Reference<XResourceId> xPanelId (CreateResourceId(rsTaskPanelURL, msSidebarViewURL, msSidebarPaneURL)); mxConfigurationController->requestResourceActivation( - CreateResourceId(rsTaskPanelURL, msTaskPaneURL, msRightPaneURL), + xPanelId, ResourceActivationMode_REPLACE); + + return xPanelId; } } catch (lang::DisposedException&) @@ -600,6 +681,26 @@ void FrameworkHelper::RequestTaskPanel ( } catch (RuntimeException&) {} + + return NULL; +} + + + + +void FrameworkHelper::RequestResourceDeactivation (const cssu::Reference<cssdf::XResourceId>& rxResourceId) +{ + try + { + if (mxConfigurationController.is() && rxResourceId.is()) + mxConfigurationController->requestResourceDeactivation(rxResourceId); + } + catch (lang::DisposedException&) + { + Dispose(); + } + catch (RuntimeException&) + {} } @@ -616,7 +717,7 @@ ViewShell::ShellType FrameworkHelper::GetViewId (const rtl::OUString& rsViewURL) (*mpViewURLMap)[msHandoutViewURL] = ViewShell::ST_HANDOUT; (*mpViewURLMap)[msSlideSorterURL] = ViewShell::ST_SLIDE_SORTER; (*mpViewURLMap)[msPresentationViewURL] = ViewShell::ST_PRESENTATION; - (*mpViewURLMap)[msTaskPaneURL] = ViewShell::ST_TASK_PANE; + (*mpViewURLMap)[msSidebarViewURL] = ViewShell::ST_SIDEBAR; } ViewURLMap::const_iterator iView (mpViewURLMap->find(rsViewURL)); if (iView != mpViewURLMap->end()) @@ -639,7 +740,7 @@ ViewShell::ShellType FrameworkHelper::GetViewId (const rtl::OUString& rsViewURL) case ViewShell::ST_HANDOUT : return msHandoutViewURL; case ViewShell::ST_SLIDE_SORTER : return msSlideSorterURL; case ViewShell::ST_PRESENTATION : return msPresentationViewURL; - case ViewShell::ST_TASK_PANE : return msTaskPaneURL; + case ViewShell::ST_SIDEBAR : return msSidebarViewURL; default: return OUString(); } @@ -788,6 +889,30 @@ void FrameworkHelper::RunOnResourceActivation( +void FrameworkHelper::RunOnResourceDeactivation( + const css::uno::Reference<css::drawing::framework::XResourceId>& rxResourceId, + const Callback& rCallback, + const bool bRunOnDeactivationEnd) +{ + if (mxConfigurationController.is() + && ! mxConfigurationController->getResource(rxResourceId).is()) + { + rCallback(false); + } + else + { + RunOnEvent( + bRunOnDeactivationEnd + ? msResourceDeactivationEndEvent + : msResourceDeactivationEvent, + FrameworkHelperResourceIdFilter(rxResourceId), + rCallback); + } +} + + + + /** A callback that sets a flag to a specified value when the callback is called. */ diff --git a/sd/source/ui/func/fuarea.cxx b/sd/source/ui/func/fuarea.cxx index ce3a5202c111..96cf766a9ead 100644 --- a/sd/source/ui/func/fuarea.cxx +++ b/sd/source/ui/func/fuarea.cxx @@ -91,6 +91,8 @@ void FuArea::DoExecute( SfxRequest& rReq ) SID_ATTR_FILL_GRADIENT, SID_ATTR_FILL_HATCH, SID_ATTR_FILL_BITMAP, + SID_ATTR_FILL_TRANSPARENCE, + SID_ATTR_FILL_FLOATTRANSPARENCE, 0 }; mpViewShell->GetViewFrame()->GetBindings().Invalidate( SidArray ); diff --git a/sd/source/ui/func/fuchar.cxx b/sd/source/ui/func/fuchar.cxx index 9ed3e12c2efc..9bc2e307ebed 100644 --- a/sd/source/ui/func/fuchar.cxx +++ b/sd/source/ui/func/fuchar.cxx @@ -26,7 +26,7 @@ #include "fuchar.hxx" - +#include <svx/dialogs.hrc> #include <sfx2/viewfrm.hxx> #include <editeng/editdata.hxx> @@ -87,6 +87,10 @@ void FuChar::DoExecute( SfxRequest& rReq ) SfxAbstractTabDialog* pDlg = pFact ? pFact->CreateSdTabCharDialog( NULL, &aNewAttr, mpDoc->GetDocSh() ) : 0; if( pDlg ) { + if (rReq.GetSlot() == SID_CHAR_DLG_EFFECT) + { + pDlg->SetCurPageId(RID_SVXPAGE_CHAR_EFFECTS); + } sal_uInt16 nResult = pDlg->Execute(); if( nResult == RET_OK ) @@ -110,9 +114,12 @@ void FuChar::DoExecute( SfxRequest& rReq ) SID_ATTR_CHAR_FONT, SID_ATTR_CHAR_POSTURE, SID_ATTR_CHAR_WEIGHT, + SID_ATTR_CHAR_SHADOWED, + SID_ATTR_CHAR_STRIKEOUT, SID_ATTR_CHAR_UNDERLINE, SID_ATTR_CHAR_FONTHEIGHT, SID_ATTR_CHAR_COLOR, + SID_ATTR_CHAR_KERNING, SID_SET_SUPER_SCRIPT, SID_SET_SUB_SCRIPT, 0 }; diff --git a/sd/source/ui/func/fuline.cxx b/sd/source/ui/func/fuline.cxx index d7e4108b5d94..7f7f70760406 100644 --- a/sd/source/ui/func/fuline.cxx +++ b/sd/source/ui/func/fuline.cxx @@ -99,11 +99,16 @@ void FuLine::DoExecute( SfxRequest& rReq ) // Attribute wurden geaendert, Listboxes in Objectbars muessen aktualisiert werden static sal_uInt16 SidArray[] = { - SID_ATTR_LINE_STYLE, - SID_ATTR_LINE_DASH, - SID_ATTR_LINE_WIDTH, - SID_ATTR_LINE_COLOR, - 0 }; + SID_ATTR_LINE_STYLE, // ( SID_SVX_START + 169 ) + SID_ATTR_LINE_DASH, // ( SID_SVX_START + 170 ) + SID_ATTR_LINE_WIDTH, // ( SID_SVX_START + 171 ) + SID_ATTR_LINE_COLOR, // ( SID_SVX_START + 172 ) + SID_ATTR_LINE_START, // ( SID_SVX_START + 173 ) + SID_ATTR_LINE_END, // ( SID_SVX_START + 174 ) + SID_ATTR_LINE_TRANSPARENCE, // (SID_SVX_START+1107) + SID_ATTR_LINE_JOINT, // (SID_SVX_START+1110) + SID_ATTR_LINE_CAP, // (SID_SVX_START+1111) + 0 }; mpViewShell->GetViewFrame()->GetBindings().Invalidate( SidArray ); diff --git a/sd/source/ui/func/fuolbull.cxx b/sd/source/ui/func/fuolbull.cxx index e96979b1818d..e8b31a725382 100644 --- a/sd/source/ui/func/fuolbull.cxx +++ b/sd/source/ui/func/fuolbull.cxx @@ -32,6 +32,9 @@ #include <editeng/eeitem.hxx> #include <sfx2/request.hxx> #include <svl/intitem.hxx> +#include <editeng/numitem.hxx> +#include "sdresid.hxx" +#include "glob.hrc" #include <editeng/editdata.hxx> #include <svx/svxids.hrc> @@ -43,7 +46,10 @@ #endif #include "drawdoc.hxx" #include "sdabstdlg.hxx" - +#include <svx/nbdtmg.hxx> +#include <svx/nbdtmgfact.hxx> +#include <svx/svdoutl.hxx> +using namespace svx::sidebar; namespace sd { TYPEINIT1( FuOutlineBullet, FuPoor ); @@ -70,6 +76,16 @@ FunctionReference FuOutlineBullet::Create( ViewShell* pViewSh, ::sd::Window* pWi void FuOutlineBullet::DoExecute( SfxRequest& rReq ) { + sal_uInt16 nSId = rReq.GetSlot(); + if (nSId == FN_SVX_SET_BULLET){ + SetCurrentBullet(rReq); + return; + } + else if (nSId == FN_SVX_SET_NUMBER){ + SetCurrentNumbering(rReq); + return; + } + const SfxItemSet* pArgs = rReq.GetArgs(); if( !pArgs ) @@ -137,6 +153,390 @@ void FuOutlineBullet::DoExecute( SfxRequest& rReq ) */ } +void FuOutlineBullet::SetCurrentNumbering(SfxRequest& rReq) +{ + if (!mpDoc || !mpView) + return; + + SfxItemSet aEditAttr( mpDoc->GetPool() ); + mpView->GetAttributes( aEditAttr ); + + SfxItemSet aNewAttr( mpViewShell->GetPool(), + EE_ITEMS_START, EE_ITEMS_END ); + aNewAttr.Put( aEditAttr, sal_False ); + + SfxItemSet aSetAttr( mpViewShell->GetPool(), + EE_ITEMS_START, EE_ITEMS_END ); + + //Init bullet level in "Customize" tab page in bullet dialog in master page view + if( mpView && mpViewShell && mpViewShell->ISA(DrawViewShell) + && ((DrawViewShell *)mpViewShell)->GetEditMode() == EM_MASTERPAGE ) + { + SdrObject* pObj = mpView->GetTextEditObject(); + if( pObj && pObj->GetObjIdentifier() == OBJ_OUTLINETEXT ) + { + sal_uInt16 nLevel = mpView->GetSelectionLevel(); + if( nLevel != 0xFFFF ) + { + + SfxItemSet aStoreSet( aNewAttr ); + aNewAttr.ClearItem(); + //extend range + aNewAttr.MergeRange( SID_PARAM_NUM_PRESET, SID_PARAM_CUR_NUM_LEVEL ); + aNewAttr.Put( aStoreSet ); + //put current level user selected + aNewAttr.Put( SfxUInt16Item( SID_PARAM_CUR_NUM_LEVEL, nLevel ) ); + } + } + } + //End of add + + sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF; + SvxNumRule* pNumRule = NULL; + const SfxPoolItem* pTmpItem=NULL; + sal_uInt32 nNumItemId = SID_ATTR_NUMBERING_RULE; + + if(SFX_ITEM_SET == aNewAttr.GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pTmpItem)) + nActNumLvl = ((const SfxUInt16Item*)pTmpItem)->GetValue(); + + pTmpItem=GetNumBulletItem(aNewAttr, nNumItemId); + + if (pTmpItem) + pNumRule = new SvxNumRule(*((SvxNumBulletItem*)pTmpItem)->GetNumRule()); + + SFX_REQUEST_ARG( rReq, pItem, SfxUInt16Item, FN_SVX_SET_NUMBER , sal_False ); + if (pItem && pNumRule) + { + sal_uInt16 nIdx = pItem->GetValue(); + // If the nIdx is (sal_uInt16)0xFFFF, means set bullet status to on/off + // And the bullet default status is 1. + bool bBulletSwitch = false; + sal_Bool isRemoveNum =false; + if( nIdx == (sal_uInt16)0xFFFF ) + { + nIdx = 1; + bBulletSwitch = true; + } + if (nIdx == DEFAULT_NONE) + { + bBulletSwitch = false; + isRemoveNum = true; + } + nIdx--; + + NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING); + if ( pNumbering ) + { + //Sym3_2508, set unit attribute to NB Manager + pNumbering->SetItems(&aNewAttr); + SvxNumRule aTmpRule( *pNumRule ); + pNumbering->ApplyNumRule(aTmpRule,nIdx,nActNumLvl); + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < pNumRule->GetLevelCount(); i++) + { + if(nActNumLvl & nMask) + { + SvxNumberFormat aFmt(aTmpRule.GetLevel(i)); + pNumRule->SetLevel(i, aFmt); + } + nMask <<= 1 ; + } + aSetAttr.Put(SvxNumBulletItem( *pNumRule ), nNumItemId); + OutlinerView* pOLV = mpView->GetTextEditOutlinerView(); + + std::auto_ptr< OutlineViewModelChangeGuard > aGuard; + + if (mpView->ISA(OutlineView)) + { + pOLV = static_cast<OutlineView*>(mpView) + ->GetViewByWindow(mpViewShell->GetActiveWindow()); + + aGuard.reset( new OutlineViewModelChangeGuard( static_cast<OutlineView&>(*mpView) ) ); + } + + SdrOutliner* pOwner = mpView->GetTextEditOutliner(); + bool bMasterView = false; + + DrawViewShell* pDrawViewShell = static_cast< DrawViewShell* >(mpViewShell); + + if ( pOwner && pDrawViewShell && pDrawViewShell->GetEditMode() == EM_MASTERPAGE ) + bMasterView = !pOwner->IsInUndo() && pOwner->IsUndoEnabled(); + + if( bMasterView ) + { + pOwner->UndoActionStart( OLUNDO_ATTR ); + pOLV->ToggleBullets( bBulletSwitch, sal_False, bMasterView, pNumRule,isRemoveNum); + mpView->SetAttributes(aSetAttr); //Modify for Sym2_3151 + pOwner->UndoActionEnd( OLUNDO_ATTR ); + } + else if( pOLV ) + pOLV->ToggleBullets( bBulletSwitch, sal_False, bMasterView, pNumRule ,isRemoveNum); + else + { + sal_Bool bInMasterView = pDrawViewShell && pDrawViewShell->GetEditMode() == EM_MASTERPAGE; + SdrModel* pSdrModel = mpView->GetModel(); + sal_Bool bModelUndoEnabled = pSdrModel ? pSdrModel->IsUndoEnabled() : sal_False; + if (bInMasterView && bModelUndoEnabled) + { + pSdrModel->BegUndo(); + } + mpView->ToggleMarkedObjectsBullets(bBulletSwitch, sal_False, bInMasterView, pNumRule,isRemoveNum); + if (bInMasterView) + { + mpView->SetAttributes(aSetAttr); + } + if (bInMasterView && bModelUndoEnabled) + { + pSdrModel->EndUndo(); + } + } + } + //End + } + delete pNumRule; + rReq.Done(); +} + +void FuOutlineBullet::SetCurrentBullet(SfxRequest& rReq) +{ + if (!mpDoc || !mpView) + return; + + SfxItemSet aEditAttr( mpDoc->GetPool() ); + mpView->GetAttributes( aEditAttr ); + + SfxItemSet aNewAttr( mpViewShell->GetPool(), + EE_ITEMS_START, EE_ITEMS_END ); + aNewAttr.Put( aEditAttr, sal_False ); + + //Add for Sym2_3151, should add new attributes in an empty item set, then use this item set as parameter in SetAttributes() + SfxItemSet aSetAttr( mpViewShell->GetPool(), + EE_ITEMS_START, EE_ITEMS_END ); + + //Init bullet level in "Customize" tab page in bullet dialog in master page view + if( mpView && mpViewShell && mpViewShell->ISA(DrawViewShell) + && ((DrawViewShell *)mpViewShell)->GetEditMode() == EM_MASTERPAGE ) + { + SdrObject* pObj = mpView->GetTextEditObject(); + if( pObj && pObj->GetObjIdentifier() == OBJ_OUTLINETEXT ) + { + sal_uInt16 nLevel = mpView->GetSelectionLevel(); + if( nLevel != 0xFFFF ) + { + //aNewAttr.MergeRange( SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL ); + //aNewAttr.Put( SfxUInt16Item( SID_PARAM_CUR_NUM_LEVEL, nLevel ) ); + //save the itemset value + SfxItemSet aStoreSet( aNewAttr ); + aNewAttr.ClearItem(); + //extend range + aNewAttr.MergeRange( SID_PARAM_NUM_PRESET, SID_PARAM_CUR_NUM_LEVEL ); + aNewAttr.Put( aStoreSet ); + //put current level user selected + aNewAttr.Put( SfxUInt16Item( SID_PARAM_CUR_NUM_LEVEL, nLevel ) ); + } + } + } + //End of add + + sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF; + SvxNumRule* pNumRule = NULL; + const SfxPoolItem* pTmpItem=NULL; + sal_uInt32 nNumItemId = SID_ATTR_NUMBERING_RULE; + + if(SFX_ITEM_SET == aNewAttr.GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pTmpItem)) + nActNumLvl = ((const SfxUInt16Item*)pTmpItem)->GetValue(); + + pTmpItem=GetNumBulletItem(aNewAttr, nNumItemId); + + if (pTmpItem) + pNumRule = new SvxNumRule(*((SvxNumBulletItem*)pTmpItem)->GetNumRule()); + + SFX_REQUEST_ARG( rReq, pItem, SfxUInt16Item, FN_SVX_SET_BULLET , sal_False ); + if (pItem && pNumRule) + { + sal_uInt16 nIdx = pItem->GetValue(); + // If the nIdx is (sal_uInt16)0xFFFF, means set bullet status to on/off + // And the bullet default status is 2. + bool bBulletSwitch = false; + sal_Bool isRemoveNum =false; + if( nIdx == (sal_uInt16)0xFFFF ) + { + nIdx = 1; + bBulletSwitch = true; + } + if (nIdx == DEFAULT_NONE) + { + bBulletSwitch = false; + isRemoveNum = true; + } + + nIdx--; + //Modified for Numbering&Bullets Dialog UX Enh(Story 992) by chengjh,2011.8.7 + + NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); + if ( pBullets ) + { + //Sym3_2508, set unit attribute to NB Manager + pBullets->SetItems(&aNewAttr); + SvxNumRule aTmpRule( *pNumRule ); + //Sym3_3423 Always apply the "." if wants a default numbering rule + if (bBulletSwitch==true && nIdx==0) //want to reset bullet + { + pBullets->ApplyNumRule(aTmpRule,nIdx,nActNumLvl,true); + } + else { + pBullets->ApplyNumRule(aTmpRule,nIdx,nActNumLvl); + } + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < pNumRule->GetLevelCount(); i++) + { + if(nActNumLvl & nMask) + { + SvxNumberFormat aFmt(aTmpRule.GetLevel(i)); + pNumRule->SetLevel(i, aFmt); + } + nMask <<= 1; + } + aSetAttr.Put(SvxNumBulletItem( *pNumRule ), nNumItemId); + + OutlinerView* pOLV = mpView->GetTextEditOutlinerView(); + + std::auto_ptr< OutlineViewModelChangeGuard > aGuard; + + if (mpView->ISA(OutlineView)) + { + pOLV = static_cast<OutlineView*>(mpView) + ->GetViewByWindow(mpViewShell->GetActiveWindow()); + + aGuard.reset( new OutlineViewModelChangeGuard( static_cast<OutlineView&>(*mpView) ) ); + } + + SdrOutliner* pOwner = mpView->GetTextEditOutliner(); + bool bMasterView = false; + + DrawViewShell* pDrawViewShell = static_cast< DrawViewShell* >(mpViewShell); + + if ( pOwner && pDrawViewShell && pDrawViewShell->GetEditMode() == EM_MASTERPAGE ) + bMasterView = !pOwner->IsInUndo() && pOwner->IsUndoEnabled(); + + if( bMasterView ) + { + pOwner->UndoActionStart( OLUNDO_ATTR ); + pOLV->ToggleBullets( bBulletSwitch, sal_True, bMasterView, pNumRule, isRemoveNum ); + mpView->SetAttributes(aSetAttr); //Modify for Sym2_3151 + pOwner->UndoActionEnd( OLUNDO_ATTR ); + } + else if( pOLV ) + pOLV->ToggleBullets( bBulletSwitch, sal_True, bMasterView, pNumRule, isRemoveNum ); + else + { + sal_Bool bInMasterView = pDrawViewShell && pDrawViewShell->GetEditMode() == EM_MASTERPAGE; + SdrModel* pSdrModel = mpView->GetModel(); + sal_Bool bModelUndoEnabled = pSdrModel ? pSdrModel->IsUndoEnabled() : sal_False; + if (bInMasterView && bModelUndoEnabled) + { + pSdrModel->BegUndo(); + } + mpView->ToggleMarkedObjectsBullets(bBulletSwitch, sal_True, bInMasterView, pNumRule, isRemoveNum ); + if (bInMasterView) + { + mpView->SetAttributes(aSetAttr); + } + if (bInMasterView && bModelUndoEnabled) + { + pSdrModel->EndUndo(); + } + } + } + //End + } + delete pNumRule; + rReq.Done(); +} + +const SfxPoolItem* FuOutlineBullet::GetNumBulletItem(SfxItemSet& aNewAttr, sal_uInt32& nNumItemId) +{ + //SvxNumBulletItem* pRetItem = NULL; + const SfxPoolItem* pTmpItem = NULL; + + if(aNewAttr.GetItemState(nNumItemId, sal_False, &pTmpItem) == SFX_ITEM_SET) + { + return pTmpItem; + } + else + { + nNumItemId = aNewAttr.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); + SfxItemState eState = aNewAttr.GetItemState(nNumItemId, sal_False, &pTmpItem); + if (eState == SFX_ITEM_SET) + return pTmpItem; + else + { + sal_Bool bOutliner = sal_False; + sal_Bool bTitle = sal_False; + + if( mpView ) + { + const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); + const sal_uInt32 nCount = rMarkList.GetMarkCount(); + for(sal_uInt32 nNum = 0; nNum < nCount; nNum++) + { + SdrObject* pObj = rMarkList.GetMark(nNum)->GetMarkedSdrObj(); + if( pObj->GetObjInventor() == SdrInventor ) + { + switch(pObj->GetObjIdentifier()) + { + case OBJ_TITLETEXT: + bTitle = sal_True; + break; + case OBJ_OUTLINETEXT: + bOutliner = sal_True; + break; + } + } + } + } + + const SvxNumBulletItem *pItem = NULL; + if(bOutliner) + { + SfxStyleSheetBasePool* pSSPool = mpView->GetDocSh()->GetStyleSheetPool(); + String aStyleName((SdResId((sal_uInt16)STR_LAYOUT_OUTLINE))); + aStyleName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " 1" ) ); + SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( aStyleName, SD_STYLE_FAMILY_PSEUDO); + if( pFirstStyleSheet ) + pFirstStyleSheet->GetItemSet().GetItemState(EE_PARA_NUMBULLET, sal_False, (const SfxPoolItem**)&pItem); + } + + if( pItem == NULL ) + pItem = (SvxNumBulletItem*) aNewAttr.GetPool()->GetSecondaryPool()->GetPoolDefaultItem(EE_PARA_NUMBULLET); + + //DBG_ASSERT( pItem, "Kein EE_PARA_NUMBULLET im Pool! [CL]" ); + + aNewAttr.Put(*pItem, EE_PARA_NUMBULLET); + + if(bTitle && aNewAttr.GetItemState(EE_PARA_NUMBULLET,sal_True) == SFX_ITEM_ON ) + { + SvxNumBulletItem* pItem = (SvxNumBulletItem*)aNewAttr.GetItem(EE_PARA_NUMBULLET,sal_True); + SvxNumRule* pRule = pItem->GetNumRule(); + if(pRule) + { + SvxNumRule aNewRule( *pRule ); + aNewRule.SetFeatureFlag( NUM_NO_NUMBERS, sal_True ); + + SvxNumBulletItem aNewItem( aNewRule, EE_PARA_NUMBULLET ); + aNewAttr.Put(aNewItem); + } + } + + SfxItemState eState = aNewAttr.GetItemState(nNumItemId, sal_False, &pTmpItem); + if (eState == SFX_ITEM_SET) + return pTmpItem; + + } + //DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!") + } + return pTmpItem; +} } // end of namespace sd diff --git a/sd/source/ui/func/fuoltext.cxx b/sd/source/ui/func/fuoltext.cxx index 82010cbe5d6e..922d02923052 100644 --- a/sd/source/ui/func/fuoltext.cxx +++ b/sd/source/ui/func/fuoltext.cxx @@ -61,9 +61,12 @@ static sal_uInt16 SidArray[] = { SID_ATTR_CHAR_FONT, SID_ATTR_CHAR_POSTURE, SID_ATTR_CHAR_WEIGHT, + SID_ATTR_CHAR_SHADOWED, + SID_ATTR_CHAR_STRIKEOUT, SID_ATTR_CHAR_UNDERLINE, SID_ATTR_CHAR_FONTHEIGHT, SID_ATTR_CHAR_COLOR, + SID_ATTR_CHAR_KERNING, SID_OUTLINE_UP, SID_OUTLINE_DOWN, SID_OUTLINE_LEFT, diff --git a/sd/source/ui/func/fuparagr.cxx b/sd/source/ui/func/fuparagr.cxx index 65f08860860f..650ac325ba79 100644 --- a/sd/source/ui/func/fuparagr.cxx +++ b/sd/source/ui/func/fuparagr.cxx @@ -154,6 +154,8 @@ void FuParagraph::DoExecute( SfxRequest& rReq ) // invalidieren der Slots static sal_uInt16 SidArray[] = { SID_ATTR_TABSTOP, + SID_ATTR_PARA_LINESPACE, + SID_ATTR_PARA_ULSPACE, SID_ATTR_PARA_ADJUST_LEFT, SID_ATTR_PARA_ADJUST_RIGHT, SID_ATTR_PARA_ADJUST_CENTER, diff --git a/sd/source/ui/func/futext.cxx b/sd/source/ui/func/futext.cxx index 3cb88f4530a1..10969efbc1d2 100644 --- a/sd/source/ui/func/futext.cxx +++ b/sd/source/ui/func/futext.cxx @@ -93,9 +93,12 @@ static sal_uInt16 SidArray[] = { SID_ATTR_CHAR_FONT, // 10007 SID_ATTR_CHAR_POSTURE, // 10008 SID_ATTR_CHAR_WEIGHT, // 10009 + SID_ATTR_CHAR_SHADOWED, //10010 + SID_ATTR_CHAR_STRIKEOUT, //10013 SID_ATTR_CHAR_UNDERLINE, // 10014 SID_ATTR_CHAR_FONTHEIGHT, // 10015 SID_ATTR_CHAR_COLOR, // 10017 + SID_ATTR_CHAR_KERNING, //10018 SID_ATTR_PARA_ADJUST_LEFT, // 10028 SID_ATTR_PARA_ADJUST_RIGHT, // 10029 SID_ATTR_PARA_ADJUST_CENTER, // 10030 @@ -103,14 +106,26 @@ static sal_uInt16 SidArray[] = { SID_ATTR_PARA_LINESPACE_10, // 10034 SID_ATTR_PARA_LINESPACE_15, // 10035 SID_ATTR_PARA_LINESPACE_20, // 10036 + SID_ATTR_PARA_ULSPACE, // 10042 SID_ATTR_PARA_LRSPACE, // 10043 + SID_ATTR_TRANSFORM_POS_X, // 10088 + SID_ATTR_TRANSFORM_POS_Y, // 10089 + SID_ATTR_TRANSFORM_WIDTH, // 10090 + SID_ATTR_TRANSFORM_HEIGHT,// 10091 + SID_ATTR_TRANSFORM_ROT_X, // 10093 + SID_ATTR_TRANSFORM_ROT_Y, // 10094 + SID_ATTR_TRANSFORM_ANGLE, // 10095 //Added SID_OUTLINE_UP, // 10150 SID_OUTLINE_DOWN, // 10151 SID_OUTLINE_LEFT, // 10152 SID_OUTLINE_RIGHT, // 10153 + SID_ATTR_TRANSFORM_PROTECT_POS,// 10236 + SID_ATTR_TRANSFORM_PROTECT_SIZE,// 10237 //Added SID_FORMTEXT_STYLE, // 10257 SID_SET_SUPER_SCRIPT, // 10294 SID_SET_SUB_SCRIPT, // 10295 + SID_ATTR_TRANSFORM_AUTOWIDTH,// 10310 + SID_ATTR_TRANSFORM_AUTOHEIGHT,// 10311 //Added SID_HYPERLINK_GETLINK, // 10361 SID_CHARMAP, // 10503 SID_TEXTDIRECTION_LEFT_TO_RIGHT, // 10907 @@ -1183,7 +1198,8 @@ void FuText::SetInEditMode(const MouseEvent& rMEvt, sal_Bool bQuickDrag) { // #98198# Move cursor to end of text ESelection aNewSelection(EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND, EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND); - pOLV->SetSelection(aNewSelection); + if (pOLV != NULL) + pOLV->SetSelection(aNewSelection); } } else diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx index 90e66012b0fe..7dc873bdad61 100644 --- a/sd/source/ui/inc/DrawViewShell.hxx +++ b/sd/source/ui/inc/DrawViewShell.hxx @@ -28,8 +28,10 @@ #include "tools/AsynchronousCall.hxx" #include <sfx2/viewfac.hxx> #include <sfx2/viewsh.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include "TabControl.hxx" #include "pres.hxx" +#include <svx/sidebar/SelectionChangeHandler.hxx> #include <com/sun/star/lang/XEventListener.hpp> #include <com/sun/star/scanner/XScannerManager.hpp> @@ -164,6 +166,7 @@ public: void ExecCtrl(SfxRequest& rReq); void GetCtrlState(SfxItemSet& rSet); + void GetDrawAttrState(SfxItemSet& rSet); void GetMenuState(SfxItemSet& rSet); void GetTableMenuState(SfxItemSet& rSet); /** Set the items of the given item set that are related to @@ -196,6 +199,9 @@ public: void ExecNavigatorWin(SfxRequest& rReq); void GetNavigatorWinState(SfxItemSet& rSet); + void ExecutePropPanelAttr (SfxRequest& rReq); + void GetStatePropPanelAttr(SfxItemSet& rSet); + void ExecEffectWin(SfxRequest& rReq); void Update3DWindow(); @@ -218,6 +224,8 @@ public: void AttrExec (SfxRequest& rReq); void AttrState (SfxItemSet& rSet); + void ExecChar(SfxRequest& rReq); + void ExecuteAnnotation (SfxRequest& rRequest); void GetAnnotationState (SfxItemSet& rItemSet); @@ -430,6 +438,10 @@ private: */ bool mbIsInSwitchPage; + /** Listen for selection changes and broadcast context changes for the sidebar. + */ + ::rtl::Reference<svx::sidebar::SelectionChangeHandler> mpSelectionChangeHandler; + void Construct (DrawDocShell* pDocSh, PageKind ePageKind); /** Depending on the given request create a new page or duplicate an @@ -483,6 +495,8 @@ private: const sal_uInt16 nSnapLineIndex, const Point& rMouseLocation); + ::sfx2::sidebar::EnumContext::Context GetContextForSelection (void) const; + using ViewShell::Notify; ::std::auto_ptr< AnnotationManager > mpAnnotationManager; diff --git a/sd/source/ui/inc/PaneChildWindows.hxx b/sd/source/ui/inc/PaneChildWindows.hxx index b69cff505aa7..f3d7aedd9119 100644 --- a/sd/source/ui/inc/PaneChildWindows.hxx +++ b/sd/source/ui/inc/PaneChildWindows.hxx @@ -69,28 +69,6 @@ public: }; - - -//====================================================================================================================== -//= ToolPanelChildWindow -//====================================================================================================================== -class ToolPanelChildWindow :public PaneChildWindow - ,public ::sfx2::ITaskPaneToolPanelAccess -{ -public: - ToolPanelChildWindow( - ::Window* i_pParentWindow, - sal_uInt16 i_nId, - SfxBindings* i_pBindings, - SfxChildWinInfo* i_pChildWindowInfo ); - - SFX_DECL_CHILDWINDOW( ToolPanelChildWindow ); - - // ::sfx2::ITaskPaneToolPanelAccess - virtual void ActivateToolPanel( const ::rtl::OUString& i_rPanelURL ); -}; - - } // end of namespace ::sd #endif diff --git a/sd/source/ui/inc/SidebarPanelId.hxx b/sd/source/ui/inc/SidebarPanelId.hxx new file mode 100644 index 000000000000..ada38b6f2d99 --- /dev/null +++ b/sd/source/ui/inc/SidebarPanelId.hxx @@ -0,0 +1,53 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_PANEL_ID_HXX +#define SD_SIDEBAR_PANEL_ID_HXX + +namespace rtl +{ + class OUString; +} + + +namespace sd { namespace sidebar { + +/** List of top level panels that can be shown in the task pane. +*/ +enum PanelId +{ + PID__START = 0, + PID_UNKNOWN = PID__START, + PID_MASTER_PAGES_ALL, + PID_MASTER_PAGES_RECENT, + PID_MASTER_PAGES_USED, + PID_LAYOUT, + PID_TABLE_DESIGN, + PID_ANIMATION_SCHEMES, + PID_CUSTOM_ANIMATION, + PID_SLIDE_TRANSITION, + PID__END = PID_SLIDE_TRANSITION +}; + +} } // namespace sd::sidebar + + +#endif diff --git a/sd/source/ui/inc/SlideSorterViewShell.hxx b/sd/source/ui/inc/SlideSorterViewShell.hxx index b088c8fb1e49..5591d3d873e2 100644 --- a/sd/source/ui/inc/SlideSorterViewShell.hxx +++ b/sd/source/ui/inc/SlideSorterViewShell.hxx @@ -115,6 +115,7 @@ public: virtual void ArrangeGUIElements (void); virtual void Activate (sal_Bool IsMDIActivate); + virtual void Deactivate (sal_Bool IsMDIActivate); //===== Drag and Drop ===================================================== diff --git a/sd/source/ui/inc/TextObjectBar.hxx b/sd/source/ui/inc/TextObjectBar.hxx index a86512808d26..05c348c42754 100644 --- a/sd/source/ui/inc/TextObjectBar.hxx +++ b/sd/source/ui/inc/TextObjectBar.hxx @@ -51,6 +51,7 @@ public: virtual ~TextObjectBar (void); void GetAttrState( SfxItemSet& rSet ); + void GetCharState( SfxItemSet& rSet ); void Execute( SfxRequest &rReq ); virtual void Command( const CommandEvent& rCEvt ); diff --git a/sd/source/ui/inc/View.hxx b/sd/source/ui/inc/View.hxx index abe3811df04a..c541fbbadd05 100644 --- a/sd/source/ui/inc/View.hxx +++ b/sd/source/ui/inc/View.hxx @@ -36,6 +36,7 @@ #include "fupoor.hxx" #include "smarttag.hxx" +#include <editeng/numitem.hxx> class SdDrawDocument; class SdrOle2Obj; @@ -190,6 +191,8 @@ public: virtual void CheckPossibilities(); virtual sal_Bool MarkPoints(const ::Rectangle* pRect, sal_Bool bUnmark); using SdrMarkView::MarkPoints; + sal_Bool ShouldToggleOn(sal_Bool bBulletOnOffMode, sal_Bool bNormalBullet); + void ToggleMarkedObjectsBullets(sal_Bool bBulletOnOffMode, sal_Bool bNormalBullet, sal_Bool bMasterView, SvxNumRule* pNumRule = NULL, sal_Bool bForceBulletOnOff = false); void SetPossibilitiesDirty() { bPossibilitiesDirty = true; } void SetMoveAllowed( bool bSet ) { bMoveAllowed = bSet; } diff --git a/sd/source/ui/inc/ViewShell.hxx b/sd/source/ui/inc/ViewShell.hxx index 264ae75d175d..d744a57d9572 100644 --- a/sd/source/ui/inc/ViewShell.hxx +++ b/sd/source/ui/inc/ViewShell.hxx @@ -35,9 +35,7 @@ #include "glob.hxx" #include "pres.hxx" #include "cfgids.hxx" -#ifndef _SD_VIEW_HXX #include "View.hxx" -#endif #include "sddllapi.h" #include <com/sun/star/drawing/XDrawSubController.hpp> @@ -111,7 +109,7 @@ public: ST_OUTLINE, ST_SLIDE_SORTER, ST_PRESENTATION, - ST_TASK_PANE + ST_SIDEBAR }; static const int MAX_HSPLIT_CNT = 1; static const int MAX_VSPLIT_CNT = 1; @@ -212,6 +210,8 @@ public: virtual void SetUIUnit(FieldUnit eUnit); virtual void SetDefTabHRuler( sal_uInt16 nDefTab ); + const SfxPoolItem* GetNumBulletItem(SfxItemSet& aNewAttr, sal_uInt16& nNumItemId); + sal_Bool HasRuler (void); void SetRuler(sal_Bool bRuler); diff --git a/sd/source/ui/inc/celltempl.hxx b/sd/source/ui/inc/celltempl.hxx index 26f7d8be3cec..7cb005c1c1ee 100644 --- a/sd/source/ui/inc/celltempl.hxx +++ b/sd/source/ui/inc/celltempl.hxx @@ -26,7 +26,7 @@ #include <sfx2/styledlg.hxx> -class XColorTable; +class XColorList; class XGradientList; class XHatchList; class XBitmapList; @@ -36,7 +36,7 @@ class SdrModel; class SdPresCellTemplateDlg : public SfxStyleDialog { private: - XColorTable* mpColorTab; + XColorList* mpColorTab; XGradientList* mpGradientList; XHatchList* mpHatchingList; XBitmapList* mpBitmapList; diff --git a/sd/source/ui/inc/copydlg.hxx b/sd/source/ui/inc/copydlg.hxx index 3ba88505cbc8..467f48b6ad47 100644 --- a/sd/source/ui/inc/copydlg.hxx +++ b/sd/source/ui/inc/copydlg.hxx @@ -33,7 +33,7 @@ #include <vcl/fixed.hxx> #include <sfx2/basedlgs.hxx> -class XColorTable; +class XColorList; namespace sd { @@ -49,7 +49,7 @@ class CopyDlg { public: CopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, - XColorTable* pColTab, ::sd::View* pView ); + XColorList* pColTab, ::sd::View* pView ); ~CopyDlg(); void GetAttr( SfxItemSet& rOutAttrs ); @@ -86,7 +86,7 @@ private: PushButton maBtnSetDefault; const SfxItemSet& mrOutAttrs; - XColorTable* mpColorTab; + XColorList* mpColorTab; Fraction maUIScale; ::sd::View* mpView; diff --git a/sd/source/ui/inc/dlgpage.hxx b/sd/source/ui/inc/dlgpage.hxx index 0e6408dd0a27..27116933a605 100644 --- a/sd/source/ui/inc/dlgpage.hxx +++ b/sd/source/ui/inc/dlgpage.hxx @@ -29,7 +29,7 @@ #include "dlgpage.hrc" class SfxObjectShell; -class XColorTable; +class XColorList; class XGradientList; class XHatchList; class XBitmapList; @@ -48,7 +48,7 @@ private: const SfxObjectShell* mpDocShell; - XColorTable* mpColorTab; + XColorList* mpColorTab; XGradientList* mpGradientList; XHatchList* mpHatchingList; XBitmapList* mpBitmapList; diff --git a/sd/source/ui/inc/framework/FrameworkHelper.hxx b/sd/source/ui/inc/framework/FrameworkHelper.hxx index 9c9c642b98a2..d8ac6a321c44 100644 --- a/sd/source/ui/inc/framework/FrameworkHelper.hxx +++ b/sd/source/ui/inc/framework/FrameworkHelper.hxx @@ -48,6 +48,8 @@ class OUString; } namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; +namespace cssdf = ::com::sun::star::drawing::framework; namespace sd { namespace framework { @@ -56,10 +58,10 @@ namespace sd { namespace framework { It has three main tasks: 1. Provide frequently used strings of resource URLs and event names. 2. Provide shortcuts for accessing the sd framework. - 3. Easy the migration to the drawing framwork. + 3. Ease the migration to the drawing framwork. Note that a FrameworkHelper disposes itself when one of the resource - controllers called by it throw a DisposedException. + controllers called by it throws a DisposedException. */ class FrameworkHelper : public ::boost::enable_shared_from_this<FrameworkHelper>, @@ -72,7 +74,7 @@ public: static const ::rtl::OUString msFullScreenPaneURL; static const ::rtl::OUString msLeftImpressPaneURL; static const ::rtl::OUString msLeftDrawPaneURL; - static const ::rtl::OUString msRightPaneURL; + static const ::rtl::OUString msSidebarPaneURL; // URLs of frequently used views. static const ::rtl::OUString msViewURLPrefix; @@ -83,7 +85,7 @@ public: static const ::rtl::OUString msHandoutViewURL; static const ::rtl::OUString msSlideSorterURL; static const ::rtl::OUString msPresentationViewURL; - static const ::rtl::OUString msTaskPaneURL; + static const ::rtl::OUString msSidebarViewURL; // URLs of frequently used tool bars. static const ::rtl::OUString msToolBarURLPrefix; @@ -91,7 +93,9 @@ public: // URLs of task panels. static const ::rtl::OUString msTaskPanelURLPrefix; - static const ::rtl::OUString msMasterPagesTaskPanelURL; + static const ::rtl::OUString msAllMasterPagesTaskPanelURL; + static const ::rtl::OUString msRecentMasterPagesTaskPanelURL; + static const ::rtl::OUString msUsedMasterPagesTaskPanelURL; static const ::rtl::OUString msLayoutTaskPanelURL; static const ::rtl::OUString msTableDesignPanelURL; static const ::rtl::OUString msCustomAnimationTaskPanelURL; @@ -102,6 +106,7 @@ public: static const ::rtl::OUString msResourceDeactivationRequestEvent; static const ::rtl::OUString msResourceActivationEvent; static const ::rtl::OUString msResourceDeactivationEvent; + static const ::rtl::OUString msResourceDeactivationEndEvent; static const ::rtl::OUString msConfigurationUpdateStartEvent; static const ::rtl::OUString msConfigurationUpdateEndEvent; @@ -116,7 +121,7 @@ public: static ::boost::shared_ptr<FrameworkHelper> Instance (ViewShellBase& rBase); static ::boost::shared_ptr<FrameworkHelper> Instance ( - const css::uno::Reference<css::frame::XController>& rxController); + const cssu::Reference<css::frame::XController>& rxController); /** Mark the FrameworkHelper object for the given ViewShellBase as disposed. A following ReleaseInstance() call will destroy the @@ -153,17 +158,15 @@ public: reference then an empty pointer is returned. */ static ::boost::shared_ptr<ViewShell> GetViewShell ( - const css::uno::Reference<css::drawing::framework::XView>& rxView); + const cssu::Reference<cssdf::XView>& rxView); - ~FrameworkHelper (void); - - typedef ::boost::function<bool(const css::drawing::framework::ConfigurationChangeEvent&)> + typedef ::boost::function<bool(const cssdf::ConfigurationChangeEvent&)> ConfigurationChangeEventFilter; typedef ::boost::function<void(bool bEventSeen)> Callback; typedef ::boost::function< void( - const css::uno::Reference< - css::drawing::framework::XResourceId>&) + const cssu::Reference< + cssdf::XResourceId>&) > ResourceFunctor; /** Test whether the called FrameworkHelper object is valid. @@ -196,10 +199,19 @@ public: of the involved objects does not support XTunnel (where necessary). */ - css::uno::Reference<css::drawing::framework::XView> - GetView ( - const css::uno::Reference< - css::drawing::framework::XResourceId>& rxPaneOrViewId); + cssu::Reference<cssdf::XView> GetView ( + const cssu::Reference<cssdf::XResourceId>& rxPaneOrViewId); + + /** Return the XWindow that is represented by the pane with the + given resource id. + */ + cssu::Reference<css::awt::XWindow> GetPaneWindow ( + const cssu::Reference<cssdf::XResourceId>& rxPaneId); + + /** Return the XResource object with the given resource id. + */ + cssu::Reference<cssdf::XResource> GetResource ( + const cssu::Reference<cssdf::XResourceId>& rxResourceId); /** Request the specified view to be displayed in the specified pane. When the pane is not visible its creation is also requested. The @@ -213,25 +225,34 @@ public: the caller can, for example, call RunOnResourceActivation() to do some initialization after the requested view becomes active. */ - css::uno::Reference<css::drawing::framework::XResourceId> RequestView ( + cssu::Reference<cssdf::XResourceId> RequestView ( const ::rtl::OUString& rsResourceURL, const ::rtl::OUString& rsAnchorURL); - /** Request the activation of the specified task panel in the standard - task pane. - @param rsTaskPanelURL + /** Request the activation of the specified panel in the + sidebar. + @param rsSidebarPanelURL The panel that is to be activated. - @param bEnsureTaskPaneIsVisible - When this is <TRUE/> then the task pane is activated when not + @param bEnsurePaneIsVisible + When this is <TRUE/> then the sidebar pane is activated when not yet active. When this flag is <FALSE/> then the requested panel is activated only when the task pane is already active. When it is not active then this call is silently ignored. + @return + The resource id of the requested sidebar panel is returned. With that + the caller can, for example, call RunOnResourceActivation() to + do some initialization after the requested view becomes active. */ - void RequestTaskPanel ( - const ::rtl::OUString& rsTaskPanelURL, + cssu::Reference<cssdf::XResourceId> RequestSidebarPanel ( + const ::rtl::OUString& rsSidebarPanelURL, const bool bEnsureTaskPaneIsVisible = true); + /** Request the deactivation of the specified resource. + */ + void RequestResourceDeactivation ( + const cssu::Reference<cssdf::XResourceId>& rxResourceId); + /** Process a slot call that requests a view shell change. */ void HandleModeChangeSlot ( @@ -260,9 +281,30 @@ public: */ void RunOnResourceActivation( - const css::uno::Reference<css::drawing::framework::XResourceId>& rxResourceId, + const cssu::Reference<cssdf::XResourceId>& rxResourceId, const Callback& rCallback); + /** Run the given callback when the specified resource has been + deactivated. When the resource is not active already when + this method is called then rCallback is called before this + method returns. + @param rxResourceId + Wait for the deactivation of this resource before calling + rCallback. + @param rCallback + The callback to be called when the resource is + deactivated. + @param bRunOnDeactivationEnd + The callback is run either when the deactivation starts + and the callback can still access the resource or when the + deactivatio is complete and the resource is no longer available. + + */ + void RunOnResourceDeactivation( + const cssu::Reference<cssdf::XResourceId>& rxResourceId, + const Callback& rCallback, + const bool bRunOnDeactivationEnd); + /** Normally the requested changes of the configuration are executed asynchronously. However, there is at least one situation (searching with the Outliner) where the surrounding code does not cope with @@ -296,21 +338,21 @@ public: /** Return a string representation of the given XResourceId object. */ static ::rtl::OUString ResourceIdToString ( - const css::uno::Reference< - css::drawing::framework::XResourceId>& rxResourceId); + const cssu::Reference< + cssdf::XResourceId>& rxResourceId); /** Create a new XResourceId object for the given resource URL. */ - static css::uno::Reference< - css::drawing::framework::XResourceId> + static cssu::Reference< + cssdf::XResourceId> CreateResourceId ( const ::rtl::OUString& rsResourceURL); /** Create a new XResourceId object for the given resource URL and a single anchor URL. */ - static css::uno::Reference< - css::drawing::framework::XResourceId> + static cssu::Reference< + cssdf::XResourceId> CreateResourceId ( const ::rtl::OUString& rsResourceURL, const ::rtl::OUString& rsAnchorURL); @@ -318,8 +360,8 @@ public: /** Create a new XResourceId object for the given resource URL and the two given anchor URLs. */ - static css::uno::Reference< - css::drawing::framework::XResourceId> + static cssu::Reference< + cssdf::XResourceId> CreateResourceId ( const ::rtl::OUString& rsResourceURL, const ::rtl::OUString& rsFirstAnchorURL, @@ -327,14 +369,14 @@ public: /** Create a new XResourceId object for the given resource URL. */ - static css::uno::Reference< - css::drawing::framework::XResourceId> + static cssu::Reference< + cssdf::XResourceId> CreateResourceId ( const ::rtl::OUString& rsResourceURL, - const css::uno::Reference< - css::drawing::framework::XResourceId>& rxAnchor); + const cssu::Reference< + cssdf::XResourceId>& rxAnchor); - css::uno::Reference<css::drawing::framework::XConfigurationController> + cssu::Reference<cssdf::XConfigurationController> GetConfigurationController (void) const; @@ -350,16 +392,18 @@ private: static ::boost::scoped_ptr<ViewURLMap> mpViewURLMap; ViewShellBase& mrBase; - css::uno::Reference<css::drawing::framework::XConfigurationController> + cssu::Reference<cssdf::XConfigurationController> mxConfigurationController; class DisposeListener; friend class DisposeListener; - css::uno::Reference<css::lang::XComponent> + cssu::Reference<css::lang::XComponent> mxDisposeListener; FrameworkHelper (ViewShellBase& rBase); FrameworkHelper (const FrameworkHelper& rHelper); // Not implemented. + ~FrameworkHelper (void); + class Deleter; friend class Deleter; FrameworkHelper& operator= (const FrameworkHelper& rHelper); // Not implemented. void Initialize (void); @@ -399,7 +443,7 @@ namespace { class FrameworkHelperAllPassFilter { public: - bool operator() (const css::drawing::framework::ConfigurationChangeEvent&) { return true; } + bool operator() (const cssdf::ConfigurationChangeEvent&) { return true; } }; @@ -407,12 +451,12 @@ namespace { { public: FrameworkHelperResourceIdFilter ( - const css::uno::Reference<css::drawing::framework::XResourceId>& rxResourceId); - bool operator() (const css::drawing::framework::ConfigurationChangeEvent& rEvent) + const cssu::Reference<cssdf::XResourceId>& rxResourceId); + bool operator() (const cssdf::ConfigurationChangeEvent& rEvent) { return mxResourceId.is() && rEvent.ResourceId.is() && mxResourceId->compareTo(rEvent.ResourceId) == 0; } private: - css::uno::Reference<css::drawing::framework::XResourceId> mxResourceId; + cssu::Reference<cssdf::XResourceId> mxResourceId; }; } // end of anonymous namespace diff --git a/sd/source/ui/inc/framework/Pane.hxx b/sd/source/ui/inc/framework/Pane.hxx index 7e85559f929d..bb3f20f58036 100644 --- a/sd/source/ui/inc/framework/Pane.hxx +++ b/sd/source/ui/inc/framework/Pane.hxx @@ -94,6 +94,7 @@ public: */ virtual ::Window* GetWindow (void); + void SetWindow (::Window* pWindow); //----- XPane ------------------------------------------------------------- diff --git a/sd/source/ui/inc/framework/TaskPanelResource.hxx b/sd/source/ui/inc/framework/TaskPanelResource.hxx new file mode 100644 index 000000000000..230a230a7a79 --- /dev/null +++ b/sd/source/ui/inc/framework/TaskPanelResource.hxx @@ -0,0 +1,85 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include "SidebarPanelId.hxx" + +#include <com/sun/star/drawing/framework/XResource.hpp> +#include <boost/scoped_ptr.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; +namespace cssdf = ::com::sun::star::drawing::framework; + +class Window; + +namespace sd { namespace sidebar { + class SidebarViewShell; +} } + + +namespace sd { namespace framework { + +typedef ::cppu::WeakComponentImplHelper1 < + cssdf::XResource + > TaskPanelResourceInterfaceBase; + + +/** A simple wrapper around a legacy task pane control that gives + access to that control (via GetControl()). +*/ +class TaskPanelResource + : private ::cppu::BaseMutex, + public TaskPanelResourceInterfaceBase +{ +public: + /** Create a resource object that represents the legacy taskpane + panel. + @param rxResourceId + drawing framework resource id + @param pControl + The new TaskPanelResource object takes ownership for this control. + */ + TaskPanelResource ( + sidebar::SidebarViewShell& rSidebarViewShell, + sidebar::PanelId ePanelId, + const cssu::Reference<cssdf::XResourceId>& rxResourceId); + virtual ~TaskPanelResource (void); + virtual void SAL_CALL disposing (void); + + // XResource + virtual cssu::Reference<cssdf::XResourceId> SAL_CALL getResourceId (void) throw (cssu::RuntimeException); + virtual sal_Bool SAL_CALL isAnchorOnly () throw (cssu::RuntimeException); + + ::Window* GetControl (void) const; + +private: + const cssu::Reference<cssdf::XResourceId> mxResourceId; + // Using auto_ptr because it has release(), what scoped_ptr doesn't. + ::std::auto_ptr< ::Window> mpControl; + + DECL_LINK(WindowEventHandler,VclWindowEvent*); +}; + +} } // end of namespace sd::framework diff --git a/sd/source/ui/inc/fuolbull.hxx b/sd/source/ui/inc/fuolbull.hxx index d7683506b357..9b7deb15dcd6 100644 --- a/sd/source/ui/inc/fuolbull.hxx +++ b/sd/source/ui/inc/fuolbull.hxx @@ -28,6 +28,8 @@ class SdDrawDocument; class SfxRequest; +class SfxItemSet; +class SfxPoolItem; namespace sd { @@ -49,6 +51,8 @@ public: static FunctionReference Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ); virtual void DoExecute( SfxRequest& rReq ); + void SetCurrentBullet(SfxRequest& rReq); + void SetCurrentNumbering(SfxRequest& rReq); private: FuOutlineBullet ( @@ -57,8 +61,11 @@ private: ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq); + + const SfxPoolItem* GetNumBulletItem(SfxItemSet& aNewAttr, sal_uInt32& nNumItemId); }; + } // end of namespace sd #endif diff --git a/sd/source/ui/inc/navigatr.hxx b/sd/source/ui/inc/navigatr.hxx index 4967b7dbdd84..74ca3e71f608 100644 --- a/sd/source/ui/inc/navigatr.hxx +++ b/sd/source/ui/inc/navigatr.hxx @@ -88,11 +88,21 @@ class SdNavigatorWin : public Window { public: + typedef ::boost::function<void(void)> UpdateRequestFunctor; + + /** Create a new instance of the navigator. + @param bUseActiveUpdate + When <TRUE/>, the default, then the SdNavigatorWin object + will make a SID_NAVIGATOR_INIT call whenever it thinks an + update is necessary. When <FALSE/> the navigator will + rely on others to trigger updates. + */ SdNavigatorWin( ::Window* pParent, ::sd::NavigatorChildWindow* pChildWinContext, const SdResId& rSdResId, - SfxBindings* pBindings ); + SfxBindings* pBindings, + const UpdateRequestFunctor& rUpdateRequest); virtual ~SdNavigatorWin(); virtual void KeyInput( const KeyEvent& rKEvt ); @@ -137,7 +147,7 @@ private: /** This flag controls whether all shapes or only the named shapes are shown. */ - bool mbShowAllShapes; + // bool mbShowAllShapes; sal_uInt16 GetDragTypeSdResId( NavigatorDragType eDT, sal_Bool bImage = sal_False ); NavDocInfo* GetDocInfo(); @@ -169,7 +179,8 @@ private: class SdNavigatorControllerItem : public SfxControllerItem { public: - SdNavigatorControllerItem( sal_uInt16, SdNavigatorWin*, SfxBindings* ); + SdNavigatorControllerItem( sal_uInt16, SdNavigatorWin*, SfxBindings*, + const SdNavigatorWin::UpdateRequestFunctor& rUpdateRequest); protected: virtual void StateChanged( sal_uInt16 nSId, SfxItemState eState, @@ -177,6 +188,7 @@ protected: private: SdNavigatorWin* pNavigatorWin; + const SdNavigatorWin::UpdateRequestFunctor maUpdateRequest; }; @@ -190,7 +202,8 @@ private: class SdPageNameControllerItem : public SfxControllerItem { public: - SdPageNameControllerItem( sal_uInt16, SdNavigatorWin*, SfxBindings* ); + SdPageNameControllerItem( sal_uInt16, SdNavigatorWin*, SfxBindings*, + const SdNavigatorWin::UpdateRequestFunctor& rUpdateRequest); protected: virtual void StateChanged( sal_uInt16 nSId, SfxItemState eState, @@ -198,6 +211,7 @@ protected: private: SdNavigatorWin* pNavigatorWin; + const SdNavigatorWin::UpdateRequestFunctor maUpdateRequest; }; #endif diff --git a/sd/source/ui/inc/prltempl.hxx b/sd/source/ui/inc/prltempl.hxx index 724425060ebb..c556703989bb 100644 --- a/sd/source/ui/inc/prltempl.hxx +++ b/sd/source/ui/inc/prltempl.hxx @@ -34,7 +34,7 @@ #include "prlayout.hxx" // fuer enum PresentationObjects -class XColorTable; +class XColorList; class XGradientList; class XHatchList; class XBitmapList; @@ -54,7 +54,7 @@ class SdPresLayoutTemplateDlg : public SfxTabDialog private: const SfxObjectShell* mpDocShell; - XColorTable* pColorTab; + XColorList* pColorTab; XGradientList* pGradientList; XHatchList* pHatchingList; XBitmapList* pBitmapList; diff --git a/sd/source/ui/inc/tabtempl.hxx b/sd/source/ui/inc/tabtempl.hxx index 51071a526ded..0c114fc8ab27 100644 --- a/sd/source/ui/inc/tabtempl.hxx +++ b/sd/source/ui/inc/tabtempl.hxx @@ -30,7 +30,7 @@ class SdrModel; class SfxObjectShell; class SdrView; -class XColorTable; +class XColorList; class XGradientList; class XBitmapList; class XDashList; @@ -49,7 +49,7 @@ private: const SfxObjectShell& rDocShell; SdrView* pSdrView; - XColorTable* pColorTab; + XColorList* pColorTab; XGradientList* pGradientList; XHatchList* pHatchingList; XBitmapList* pBitmapList; diff --git a/sd/source/ui/inc/taskpane/ILayoutableWindow.hxx b/sd/source/ui/inc/taskpane/ILayoutableWindow.hxx deleted file mode 100644 index 1a50aa6a0029..000000000000 --- a/sd/source/ui/inc/taskpane/ILayoutableWindow.hxx +++ /dev/null @@ -1,98 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TOOLPANEL_I_LAYOUTABLE_WINDOW_HXX -#define SD_TOOLPANEL_I_LAYOUTABLE_WINDOW_HXX - -#include <tools/gen.hxx> -#include <sal/types.h> - -class Window; - -namespace sd { namespace toolpanel { - - -class ILayouter -{ -public: - /** This method is called by layoutable controls when they have to be - resized. - */ - virtual void RequestResize (void) = 0; -}; - - - -/** This interface has to be implemented by windows that want to be - layouted by a SubToolPanel or ScrollablePanel object. -*/ -class ILayoutableWindow -{ -public: - virtual ~ILayoutableWindow (void) {}; - - /** Return the preferred size without constraints on either the - height or the width. - The size the window will later be set to may but does not have - to be equal to this size. - */ - virtual Size GetPreferredSize (void) = 0; - - /** Return the preferred width with the constraint, that the - window will be set to the given height. - The width the window will later be set to may but does not have - to be equal to this width. - */ - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeight) = 0; - - /** Return the preferred height with the constraint, that the - window will be set to the given width. - The height the window will later be set to may but does not have - to be equal to this height. - */ - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth) = 0; - - /** Return wether the window is generally resizable. When used by - a VerticalLayouter then the width will always be resized and - the return value of this method determines whether the height - may be modified as well. - */ - virtual bool IsResizable (void) = 0; - - /** Return the window so that its size and position can be set. - @return - Returns the window which is layouted or NULL to indicate - that the object is in an invalid state. - */ - virtual ::Window* GetWindow (void) = 0; - - /** Return the minimal width of the window. - */ - virtual sal_Int32 GetMinimumWidth (void) = 0; -}; - - - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/inc/taskpane/PanelId.hxx b/sd/source/ui/inc/taskpane/PanelId.hxx deleted file mode 100644 index 2ed3424b1160..000000000000 --- a/sd/source/ui/inc/taskpane/PanelId.hxx +++ /dev/null @@ -1,59 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_UI_TASKPANE_PANELID_HXX -#define SD_UI_TASKPANE_PANELID_HXX - -namespace rtl -{ - class OUString; -} - -//...................................................................................................................... -namespace sd { namespace toolpanel -{ -//...................................................................................................................... - - //================================================================================================================== - //= PanelId - //================================================================================================================== - /** List of top level panels that can be shown in the task pane. - */ - enum PanelId - { - PID_MASTER_PAGES = 0, - PID_LAYOUT = 1, - PID_TABLE_DESIGN = 2, - PID_CUSTOM_ANIMATION = 3, - PID_SLIDE_TRANSITION = 4, - - PID_UNKNOWN = 5 - }; - - PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL ); - -//...................................................................................................................... -} } // namespace sd::toolpanel -//...................................................................................................................... - -#endif // SD_UI_TASKPANE_PANELID_HXX diff --git a/sd/source/ui/inc/tpaction.hxx b/sd/source/ui/inc/tpaction.hxx index 029899f6dabf..75c4cb6ffc66 100644 --- a/sd/source/ui/inc/tpaction.hxx +++ b/sd/source/ui/inc/tpaction.hxx @@ -89,7 +89,7 @@ private: const SfxItemSet& rOutAttrs; const ::sd::View* mpView; SdDrawDocument* mpDoc; - XColorTable* pColTab; + XColorList* pColTab; sal_Bool bTreeUpdated; List* pCurrentActions; diff --git a/sd/source/ui/presenter/PresenterHelper.hxx b/sd/source/ui/presenter/PresenterHelper.hxx index d978cc62ad02..ffbdc2548847 100644 --- a/sd/source/ui/presenter/PresenterHelper.hxx +++ b/sd/source/ui/presenter/PresenterHelper.hxx @@ -47,7 +47,7 @@ namespace { /** Implementation of the XPresenterHelper interface: functionality that can not be implemented in an extension. */ - class PresenterHelper +class PresenterHelper : private ::boost::noncopyable, private ::cppu::BaseMutex, public PresenterHelperInterfaceBase diff --git a/sd/source/ui/toolpanel/controls/AllMasterPagesSelector.cxx b/sd/source/ui/sidebar/AllMasterPagesSelector.cxx index ea0a234026b6..dbeb63f0b0b8 100644 --- a/sd/source/ui/toolpanel/controls/AllMasterPagesSelector.cxx +++ b/sd/source/ui/sidebar/AllMasterPagesSelector.cxx @@ -19,22 +19,23 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "AllMasterPagesSelector.hxx" #include "PreviewValueSet.hxx" -#include "app.hrc" +#include "ViewShellBase.hxx" +#include "SidebarShellManager.hxx" #include "MasterPageContainer.hxx" #include "MasterPageDescriptor.hxx" +#include "app.hrc" +#include "helpids.h" + #include <tools/link.hxx> #include <set> namespace { -using namespace sd::toolpanel::controls; +using namespace sd::sidebar; int GetURLPriority (const SharedMasterPageDescriptor& rpDescriptor) { @@ -56,8 +57,9 @@ int GetURLPriority (const SharedMasterPageDescriptor& rpDescriptor) class MasterPageDescriptorOrder { public: - bool operator() (const sd::toolpanel::controls::SharedMasterPageDescriptor& rp1, - const sd::toolpanel::controls::SharedMasterPageDescriptor& rp2) + bool operator() ( + const SharedMasterPageDescriptor& rp1, + const SharedMasterPageDescriptor& rp2) { if (rp1->meOrigin == MasterPageContainer::DEFAULT) return true; @@ -74,7 +76,7 @@ public: -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { class AllMasterPagesSelector::SortedMasterPageDescriptorList : public ::std::set<SharedMasterPageDescriptor,MasterPageDescriptorOrder> @@ -86,17 +88,42 @@ public: +MasterPagesSelector* AllMasterPagesSelector::Create ( + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) +{ + SdDrawDocument* pDocument = rViewShellBase.GetDocument(); + if (pDocument == NULL) + return NULL; + + ::boost::shared_ptr<MasterPageContainer> pContainer (new MasterPageContainer()); + + MasterPagesSelector* pSelector( + new AllMasterPagesSelector ( + pParent, + *pDocument, + rViewShellBase, + pContainer, + rxSidebar)); + pSelector->LateInit(); + pSelector->SetHelpId(HID_SD_TASK_PANE_PREVIEW_ALL); + + return pSelector; +} + + + + AllMasterPagesSelector::AllMasterPagesSelector ( - TreeNode* pParent, + ::Window* pParent, SdDrawDocument& rDocument, ViewShellBase& rBase, - DrawViewShell& rViewShell, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer) - : MasterPagesSelector(pParent, rDocument, rBase, rpContainer), - mrViewShell(rViewShell), + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) + : MasterPagesSelector(pParent, rDocument, rBase, rpContainer, rxSidebar), mpSortedMasterPages(new SortedMasterPageDescriptorList()) { - SetName (String(RTL_CONSTASCII_USTRINGPARAM("AllMasterPagesSelector"))); MasterPagesSelector::Fill(); } @@ -192,7 +219,7 @@ void AllMasterPagesSelector::UpdatePageSet (ItemList& rItemList) void AllMasterPagesSelector::GetState (SfxItemSet& rItemSet) { - MasterPagesSelector::GetState(rItemSet); + // MasterPagesSelector::GetState(rItemSet); if (rItemSet.GetItemState(SID_TP_EDIT_MASTER) == SFX_ITEM_AVAILABLE) rItemSet.DisableItem(SID_TP_EDIT_MASTER); @@ -201,4 +228,4 @@ void AllMasterPagesSelector::GetState (SfxItemSet& rItemSet) -} } } // end of namespace ::sd::toolpanel::control +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/AllMasterPagesSelector.hxx b/sd/source/ui/sidebar/AllMasterPagesSelector.hxx index ecbf497c0143..f5e79015d207 100644 --- a/sd/source/ui/toolpanel/controls/AllMasterPagesSelector.hxx +++ b/sd/source/ui/sidebar/AllMasterPagesSelector.hxx @@ -19,16 +19,14 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_ALL_MASTER_PAGES_SELECTOR_HXX -#define SD_TOOLPANEL_CONTROLS_ALL_MASTER_PAGES_SELECTOR_HXX +#ifndef SD_SIDEBAR_PANELS_ALL_MASTER_PAGES_SELECTOR_HXX +#define SD_SIDEBAR_PANELS_ALL_MASTER_PAGES_SELECTOR_HXX #include "MasterPagesSelector.hxx" #include <memory> -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** Show a list of all available master pages so that the user can assign @@ -38,13 +36,10 @@ class AllMasterPagesSelector : public MasterPagesSelector { public: - AllMasterPagesSelector ( - TreeNode* pParent, - SdDrawDocument& rDocument, - ViewShellBase& rBase, - DrawViewShell& rViewShell, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer); - virtual ~AllMasterPagesSelector (void); + static MasterPagesSelector* Create ( + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); /** Scan the set of templates for the ones whose first master pages are shown by this control and store them in the MasterPageContainer. @@ -57,13 +52,19 @@ protected: virtual void NotifyContainerChangeEvent (const MasterPageContainerChangeEvent& rEvent); private: - DrawViewShell& mrViewShell; - /** The list of master pages displayed by this class. */ class SortedMasterPageDescriptorList; ::std::auto_ptr<SortedMasterPageDescriptorList> mpSortedMasterPages; + AllMasterPagesSelector ( + ::Window* pParent, + SdDrawDocument& rDocument, + ViewShellBase& rBase, + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + virtual ~AllMasterPagesSelector (void); + void AddTemplate (const TemplateEntry& rEntry); /** This filter returns <TRUE/> when the master page specified by the @@ -82,9 +83,9 @@ private: */ void UpdateMasterPageList (void); - using sd::toolpanel::controls::MasterPagesSelector::Fill; + using MasterPagesSelector::Fill; }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/CurrentMasterPagesSelector.cxx b/sd/source/ui/sidebar/CurrentMasterPagesSelector.cxx index e4d073727704..4d4ff45f0c0c 100644 --- a/sd/source/ui/toolpanel/controls/CurrentMasterPagesSelector.cxx +++ b/sd/source/ui/sidebar/CurrentMasterPagesSelector.cxx @@ -19,14 +19,12 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "CurrentMasterPagesSelector.hxx" #include "PreviewValueSet.hxx" #include "ViewShellBase.hxx" +#include "SidebarShellManager.hxx" #include "DrawViewShell.hxx" #include "drawdoc.hxx" #include "sdpage.hxx" @@ -38,6 +36,7 @@ #include "DrawViewShell.hxx" #include "res_bmp.hrc" #include "sdresid.hxx" +#include "helpids.h" #include <vcl/image.hxx> #include <svx/svdmodel.hxx> @@ -48,18 +47,43 @@ using namespace ::com::sun::star; -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { + +MasterPagesSelector* CurrentMasterPagesSelector::Create ( + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) +{ + SdDrawDocument* pDocument = rViewShellBase.GetDocument(); + if (pDocument == NULL) + return NULL; + + ::boost::shared_ptr<MasterPageContainer> pContainer (new MasterPageContainer()); + + MasterPagesSelector* pSelector( + new CurrentMasterPagesSelector ( + pParent, + *pDocument, + rViewShellBase, + pContainer, + rxSidebar)); + pSelector->LateInit(); + pSelector->SetHelpId( HID_SD_TASK_PANE_PREVIEW_CURRENT ); + + return pSelector; +} + + CurrentMasterPagesSelector::CurrentMasterPagesSelector ( - TreeNode* pParent, + ::Window* pParent, SdDrawDocument& rDocument, ViewShellBase& rBase, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer) - : MasterPagesSelector (pParent, rDocument, rBase, rpContainer) + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) + : MasterPagesSelector (pParent, rDocument, rBase, rpContainer, rxSidebar) { - SetName(String(RTL_CONSTASCII_USTRINGPARAM("CurrentMasterPagesSelector"))); - // For this master page selector only we change the default action for // left clicks. mnDefaultClickAction = SID_TP_APPLY_TO_SELECTED_SLIDES; @@ -199,13 +223,13 @@ void CurrentMasterPagesSelector::UpdateSelection (void) } // Find the items for the master pages in the set. - sal_uInt16 nItemCount (mpPageSet->GetItemCount()); + sal_uInt16 nItemCount (PreviewValueSet::GetItemCount()); for (nIndex=1; nIndex<=nItemCount && bLoop; nIndex++) { - String sName (mpPageSet->GetItemText (nIndex)); + String sName (PreviewValueSet::GetItemText (nIndex)); if (aNames.find(sName) != aNames.end()) { - mpPageSet->SelectItem (nIndex); + PreviewValueSet::SelectItem (nIndex); } } } @@ -213,54 +237,48 @@ void CurrentMasterPagesSelector::UpdateSelection (void) -void CurrentMasterPagesSelector::Execute (SfxRequest& rRequest) +void CurrentMasterPagesSelector::ExecuteCommand (const sal_Int32 nCommandId) { - switch (rRequest.GetSlot()) + if (nCommandId == SID_DELETE_MASTER_PAGE) { - case SID_DELETE_MASTER_PAGE: + // Check once again that the master page can safely be deleted, + // i.e. is not used. + SdPage* pMasterPage = GetSelectedMasterPage(); + if (pMasterPage != NULL + && mrDocument.GetMasterPageUserCount(pMasterPage) == 0) { - // Check once again that the master page can safely be deleted, - // i.e. is not used. - SdPage* pMasterPage = GetSelectedMasterPage(); - if (pMasterPage != NULL - && mrDocument.GetMasterPageUserCount(pMasterPage) == 0) - { - // Removing the precious flag so that the following call to - // RemoveUnnessesaryMasterPages() will remove this master page. - pMasterPage->SetPrecious(false); - mrDocument.RemoveUnnecessaryMasterPages(pMasterPage, sal_False, sal_True); - } + // Removing the precious flag so that the following call to + // RemoveUnnessesaryMasterPages() will remove this master page. + pMasterPage->SetPrecious(false); + mrDocument.RemoveUnnecessaryMasterPages(pMasterPage, sal_False, sal_True); } - break; - - default: - MasterPagesSelector::Execute(rRequest); - break; } + else + MasterPagesSelector::ExecuteCommand(nCommandId); } -void CurrentMasterPagesSelector::GetState (SfxItemSet& rItemSet) +void CurrentMasterPagesSelector::ProcessPopupMenu (Menu& rMenu) { // Disable the SID_DELTE_MASTER slot when there is only one master page. - if (rItemSet.GetItemState(SID_DELETE_MASTER_PAGE) == SFX_ITEM_AVAILABLE - && mrDocument.GetMasterPageUserCount(GetSelectedMasterPage()) > 0) + if (mrDocument.GetMasterPageUserCount(GetSelectedMasterPage()) > 0) { - rItemSet.DisableItem(SID_DELETE_MASTER_PAGE); + if (rMenu.GetItemPos(SID_DELETE_MASTER_PAGE) != MENU_ITEM_NOTFOUND) + rMenu.EnableItem(SID_DELETE_MASTER_PAGE, sal_False); } ::boost::shared_ptr<DrawViewShell> pDrawViewShell ( ::boost::dynamic_pointer_cast<DrawViewShell>(mrBase.GetMainViewShell())); - if (rItemSet.GetItemState(SID_TP_EDIT_MASTER) == SFX_ITEM_AVAILABLE - && pDrawViewShell + if (pDrawViewShell && pDrawViewShell->GetEditMode() == EM_MASTERPAGE) { - rItemSet.DisableItem (SID_TP_EDIT_MASTER); + if (rMenu.GetItemPos(SID_TP_EDIT_MASTER) != MENU_ITEM_NOTFOUND) + rMenu.EnableItem(SID_TP_EDIT_MASTER, sal_False); } - MasterPagesSelector::GetState(rItemSet); + MasterPagesSelector::ProcessPopupMenu(rMenu); } @@ -334,6 +352,4 @@ void CurrentMasterPagesSelector::Notify (SfxBroadcaster&, const SfxHint& rHint) } - - -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/CurrentMasterPagesSelector.hxx b/sd/source/ui/sidebar/CurrentMasterPagesSelector.hxx index e0b926f6287c..45f1b2018a8b 100644 --- a/sd/source/ui/toolpanel/controls/CurrentMasterPagesSelector.hxx +++ b/sd/source/ui/sidebar/CurrentMasterPagesSelector.hxx @@ -19,18 +19,21 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_CURRENT_MASTER_PAGES_SELECTOR_HXX -#define SD_TOOLPANEL_CONTROLS_CURRENT_MASTER_PAGES_SELECTOR_HXX +#ifndef SD_SIDEBAR_PANELS_CURRENT_MASTER_PAGES_SELECTOR_HXX +#define SD_SIDEBAR_PANELS_CURRENT_MASTER_PAGES_SELECTOR_HXX #include "MasterPagesSelector.hxx" #include <com/sun/star/lang/XComponent.hpp> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + namespace sd { namespace tools { class EventMultiplexerEvent; } } -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** Show the master pages currently used by a SdDrawDocument. @@ -40,14 +43,10 @@ class CurrentMasterPagesSelector public SfxListener { public: - CurrentMasterPagesSelector ( - TreeNode* pParent, - SdDrawDocument& rDocument, - ViewShellBase& rBase, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer); - virtual ~CurrentMasterPagesSelector (void); - - virtual void LateInit (void); + static MasterPagesSelector* Create ( + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); /** Set the selection so that the master page is selected that is used by the currently selected page of the document in the @@ -59,21 +58,31 @@ public: */ virtual void Fill (ItemList& rItemList); - using sd::toolpanel::controls::MasterPagesSelector::Fill; + using MasterPagesSelector::Fill; protected: virtual ResId GetContextMenuResId (void) const; - virtual void Execute (SfxRequest& rRequest); - virtual void GetState (SfxItemSet& rItemSet); + + virtual void ProcessPopupMenu (Menu& rMenu); + virtual void ExecuteCommand (const sal_Int32 nCommandId); private: - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent> - mxListener; + cssu::Reference<css::lang::XComponent> mxListener; + + CurrentMasterPagesSelector ( + ::Window* pParent, + SdDrawDocument& rDocument, + ViewShellBase& rBase, + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + virtual ~CurrentMasterPagesSelector (void); + + virtual void LateInit (void); DECL_LINK(EventMultiplexerListener,sd::tools::EventMultiplexerEvent*); void Notify (SfxBroadcaster&, const SfxHint& rHint); }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/sidebar/CustomAnimationPanel.cxx b/sd/source/ui/sidebar/CustomAnimationPanel.cxx new file mode 100644 index 000000000000..5fd87d2a2a00 --- /dev/null +++ b/sd/source/ui/sidebar/CustomAnimationPanel.cxx @@ -0,0 +1,79 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "CustomAnimationPanel.hxx" + +#include "ViewShellBase.hxx" + + +namespace sd { + extern ::Window * createCustomAnimationPanel (::Window* pParent, ViewShellBase& rBase); + extern sal_Int32 getCustomAnimationPanelMinimumHeight (::Window* pParent); +} + + + + +namespace sd { namespace sidebar { + + +CustomAnimationPanel::CustomAnimationPanel ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) + : PanelBase( + pParentWindow, + rViewShellBase) +{ +#ifdef DEBUG + SetText(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sd:CustomAnimationPanel"))); +#endif +} + + + + +CustomAnimationPanel::~CustomAnimationPanel (void) +{ +} + + + + +::Window* CustomAnimationPanel::CreateWrappedControl ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) +{ + return createCustomAnimationPanel(pParentWindow, rViewShellBase); +} + + + + +css::ui::LayoutSize CustomAnimationPanel::GetHeightForWidth (const sal_Int32 nWidth) +{ + const sal_Int32 nMinimumHeight(getCustomAnimationPanelMinimumHeight(mpWrappedControl.get())); + return css::ui::LayoutSize(nMinimumHeight,-1, nMinimumHeight); +} + + +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/sidebar/CustomAnimationPanel.hxx b/sd/source/ui/sidebar/CustomAnimationPanel.hxx new file mode 100644 index 000000000000..12f2316c63c9 --- /dev/null +++ b/sd/source/ui/sidebar/CustomAnimationPanel.hxx @@ -0,0 +1,50 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_CUSTOM_ANIMATION_PANEL_HXX +#define SD_SIDEBAR_CUSTOM_ANIMATION_PANEL_HXX + +#include "PanelBase.hxx" + + +namespace sd { namespace sidebar { + +class CustomAnimationPanel + : public PanelBase +{ +public: + CustomAnimationPanel ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase); + virtual ~CustomAnimationPanel (void); + + // ILayoutableWindow + virtual css::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); + +protected: + virtual ::Window* CreateWrappedControl ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase); +}; + +} } // end of namespace sd::sidebar + +#endif diff --git a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx b/sd/source/ui/sidebar/DocumentHelper.cxx index b3148bb2a946..1ae5a2154865 100644 --- a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx +++ b/sd/source/ui/sidebar/DocumentHelper.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "DocumentHelper.hxx" @@ -44,7 +41,7 @@ using namespace ::com::sun::star; -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { SdPage* DocumentHelper::CopyMasterPageToLocalDocument ( SdDrawDocument& rTargetDocument, @@ -286,7 +283,7 @@ void DocumentHelper::ProvideStyles ( // Add an undo action for the copied style sheets. if( !aCreatedStyles.empty() ) { - ::svl::IUndoManager* pUndoManager = rTargetDocument.GetDocSh()->GetUndoManager(); + ::svl::IUndoManager* pUndoManager = rTargetDocument.GetDocSh()->GetUndoManager(); if (pUndoManager != NULL) { SdMoveStyleSheetsUndoAction* pMovStyles = @@ -578,4 +575,4 @@ SdPage* DocumentHelper::ProvideMasterPage ( -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/DocumentHelper.hxx b/sd/source/ui/sidebar/DocumentHelper.hxx index 6c1b2193a8e5..a5f7d8b35950 100644 --- a/sd/source/ui/toolpanel/controls/DocumentHelper.hxx +++ b/sd/source/ui/sidebar/DocumentHelper.hxx @@ -19,10 +19,8 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_DCUMENT_HELPER_HXX -#define SD_TOOLPANEL_CONTROLS_DCUMENT_HELPER_HXX +#ifndef SD_SIDEBAR_PANELS_DCUMENT_HELPER_HXX +#define SD_SIDEBAR_PANELS_DCUMENT_HELPER_HXX #include <tools/solar.h> #include <boost/shared_ptr.hpp> @@ -32,7 +30,7 @@ class SdDrawDocument; class SdPage; class String; -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** A collection of methods supporting the handling of master pages. */ @@ -107,6 +105,6 @@ private: }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/sidebar/IDisposable.hxx b/sd/source/ui/sidebar/IDisposable.hxx new file mode 100644 index 000000000000..f7cb3448626e --- /dev/null +++ b/sd/source/ui/sidebar/IDisposable.hxx @@ -0,0 +1,44 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + + +#ifndef SD_SIDEBAR_DISPOSABLE_INTERFACE_HXX +#define SD_SIDEBAR_DISPOSABLE_INTERFACE_HXX + +#include <tools/gen.hxx> +#include <sal/types.h> + +class Window; + +namespace sd { namespace sidebar { + + +class IDisposable +{ +public: + virtual void Dispose (void) = 0; +}; + + +} } // end of namespace ::sd::sidebar + +#endif diff --git a/sd/source/ui/sidebar/ISidebarReceiver.hxx b/sd/source/ui/sidebar/ISidebarReceiver.hxx new file mode 100644 index 000000000000..1755ad681aa7 --- /dev/null +++ b/sd/source/ui/sidebar/ISidebarReceiver.hxx @@ -0,0 +1,40 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_RECEIVER_INTERFACE_HXX +#define SD_SIDEBAR_RECEIVER_INTERFACE_HXX + +#include <com/sun/star/ui/XSidebar.hpp> + +namespace sd { namespace sidebar { + + +class ISidebarReceiver +{ +public: + virtual void SetSidebar (const ::com::sun::star::uno::Reference< + ::com::sun::star::ui::XSidebar>& rxSidebar) = 0; +}; + + +} } // end of namespace ::sd::sidebar + +#endif diff --git a/sd/source/ui/toolpanel/LayoutMenu.cxx b/sd/source/ui/sidebar/LayoutMenu.cxx index 9fb6e4c2c5ab..e775f426121f 100644 --- a/sd/source/ui/toolpanel/LayoutMenu.cxx +++ b/sd/source/ui/sidebar/LayoutMenu.cxx @@ -19,58 +19,48 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "LayoutMenu.hxx" -#include "TaskPaneShellManager.hxx" -#include "pres.hxx" +#include "SidebarShellManager.hxx" +#include "app.hrc" #include "drawdoc.hxx" -#include "DrawDocShell.hxx" -#include "sdpage.hxx" -#include "glob.hxx" +#include "framework/FrameworkHelper.hxx" #include "glob.hrc" -#include "app.hrc" +#include "glob.hxx" #include "helpids.h" +#include "pres.hxx" #include "res_bmp.hrc" +#include "sdpage.hxx" +#include "sdresid.hxx" #include "strings.hrc" -#include "ViewShellBase.hxx" -#include "DrawViewShell.hxx" -#include "SlideSorterViewShell.hxx" -#include "controller/SlideSorterController.hxx" -#include "controller/SlsPageSelector.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" -#include "taskpane/ToolPanelViewShell.hxx" -#include "taskpane/ScrollPanel.hxx" #include "tools/SlotStateListener.hxx" -#include "EventMultiplexer.hxx" #include "DrawController.hxx" -#include "framework/FrameworkHelper.hxx" +#include "DrawDocShell.hxx" +#include "DrawViewShell.hxx" +#include "EventMultiplexer.hxx" +#include "SlideSorterViewShell.hxx" +#include "ViewShellBase.hxx" +#include <sfx2/sidebar/Theme.hxx> -#include <vector> -#include <memory> -#include <sfx2/objface.hxx> -#include "sdresid.hxx" -#include <vcl/image.hxx> -#include <svl/languageoptions.hxx> +#include <comphelper/processfactory.hxx> #include <sfx2/app.hxx> -#include "taskpane/TitledControl.hxx" #include <sfx2/dispatch.hxx> +#include <sfx2/objface.hxx> #include <sfx2/request.hxx> -#include <comphelper/processfactory.hxx> #include <sfx2/viewfrm.hxx> +#include <svl/languageoptions.hxx> +#include <vcl/image.hxx> +#include <vcl/floatwin.hxx> #include <com/sun/star/frame/XController.hpp> #include <com/sun/star/drawing/framework/XControllerManager.hpp> #include <com/sun/star/drawing/framework/XView.hpp> #include <com/sun/star/drawing/framework/ResourceId.hpp> -using namespace ::sd::toolpanel; -#define LayoutMenu -#include "sdslots.hxx" +#include <vector> +#include <memory> using namespace ::com::sun::star; using namespace ::com::sun::star::text; @@ -79,41 +69,9 @@ using namespace ::com::sun::star::drawing::framework; using namespace ::sd::slidesorter; using ::sd::framework::FrameworkHelper; -namespace sd { namespace toolpanel { +namespace sd { namespace sidebar { -class LayoutMenuRootFactory - : public ControlFactory -{ -public: - LayoutMenuRootFactory (ToolPanelViewShell& i_rPanelViewShell) - :mrPanelViewShell(i_rPanelViewShell) - { - } - -protected: - virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) - { - ScrollPanel* pScrollPanel = new ScrollPanel (i_rParent); - ::std::auto_ptr<TreeNode> pMenu ( - new LayoutMenu ( - pScrollPanel, - mrPanelViewShell)); - pScrollPanel->AddControl(pMenu); - return pScrollPanel; - } - -private: - ToolPanelViewShell& mrPanelViewShell; -}; - - -SFX_IMPL_INTERFACE(LayoutMenu, SfxShell, - SdResId(STR_TASKPANELAYOUTMENU)) -{ - SFX_POPUPMENU_REGISTRATION(SdResId(RID_TASKPANE_LAYOUTMENU_POPUP)); -} -TYPEINIT1(LayoutMenu, SfxShell); struct snewfoil_value_info { @@ -171,23 +129,41 @@ static snewfoil_value_info standard[] = {0, 0, 0, WritingMode_LR_TB, AUTOLAYOUT_NONE} }; -LayoutMenu::LayoutMenu( TreeNode* pParent, ToolPanelViewShell& i_rPanelViewShell ) - : ValueSet (pParent->GetWindow()), - TreeNode(pParent), + + + +LayoutMenu::LayoutMenu ( + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) + : ValueSet (pParent), DragSourceHelper(this), DropTargetHelper(this), - mrBase( i_rPanelViewShell.GetViewShellBase() ), - mpShellManager (&i_rPanelViewShell.GetSubShellManager()), - mbUseOwnScrollBar( false ), + mrBase(rViewShellBase), + mbUseOwnScrollBar(false), mnPreferredColumnCount(3), mxListener(NULL), mbSelectionUpdatePending(true), - mbIsMainViewChangePending(false) + mbIsMainViewChangePending(false), + mxSidebar(rxSidebar), + mbIsDisposed(false) { implConstruct( *mrBase.GetDocument()->GetDocSh() ); + OSL_TRACE("created LayoutMenu at %x", this); + + SetStyle(GetStyle() | WB_ITEMBORDER | WB_FLATVALUESET | WB_TABSTOP); + + SetBackground(sfx2::sidebar::Theme::GetWallpaper(sfx2::sidebar::Theme::Paint_PanelBackground)); + SetColor(sfx2::sidebar::Theme::GetColor(sfx2::sidebar::Theme::Paint_PanelBackground)); + +#ifdef DEBUG + SetText(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sd:LayoutMenu"))); +#endif } + + void LayoutMenu::implConstruct( DrawDocShell& rDocumentShell ) { OSL_ENSURE( mrBase.GetDocument()->GetDocSh() == &rDocumentShell, @@ -197,14 +173,13 @@ void LayoutMenu::implConstruct( DrawDocShell& rDocumentShell ) SetStyle ( ( GetStyle() & ~(WB_ITEMBORDER) ) | WB_TABSTOP + | WB_MENUSTYLEVALUESET | WB_NO_DIRECTSELECT ); if (mbUseOwnScrollBar) SetStyle (GetStyle() | WB_VSCROLL); SetExtraSpacing(2); SetSelectHdl (LINK(this, LayoutMenu, ClickHandler)); - SetPool (&rDocumentShell.GetDoc()->GetPool()); - SetName(String(RTL_CONSTASCII_USTRINGPARAM("LayoutMenu"))); InvalidateContent(); Link aEventListenerLink (LINK(this,LayoutMenu,EventMultiplexerListener)); @@ -226,17 +201,31 @@ void LayoutMenu::implConstruct( DrawDocShell& rDocumentShell ) Reference<frame::XDispatchProvider>(mrBase.GetController()->getFrame(), UNO_QUERY), ::rtl::OUString::createFromAscii(".uno:VerticalTextState")); - // Add this new object as shell to the shell factory. - GetShellManager()->AddSubShell(SHELLID_SD_TASK_PANE_PREVIEW_LAYOUTS,this,this); + SetSizePixel(GetParent()->GetSizePixel()); + Link aWindowEventHandlerLink (LINK(this,LayoutMenu,WindowEventHandler)); + GetParent()->AddEventListener(aWindowEventHandlerLink); } + LayoutMenu::~LayoutMenu (void) { - // Tell the shell factory that this object is no longer available. - if (GetShellManager() != NULL) - GetShellManager()->RemoveSubShell(this); + OSL_TRACE("destroying LayoutMenu at %x", this); + Dispose(); +} + + + + +void LayoutMenu::Dispose (void) +{ + if (mbIsDisposed) + return; + + OSL_TRACE("disposing LayoutMenu at %x", this); + + mbIsDisposed = true; Reference<lang::XComponent> xComponent (mxListener, UNO_QUERY); if (xComponent.is()) @@ -245,15 +234,9 @@ LayoutMenu::~LayoutMenu (void) Clear(); Link aLink (LINK(this,LayoutMenu,EventMultiplexerListener)); mrBase.GetEventMultiplexer()->RemoveEventListener (aLink); -} - - - -::std::auto_ptr<ControlFactory> LayoutMenu::CreateControlFactory ( - ToolPanelViewShell& i_rPanelViewShell ) -{ - return ::std::auto_ptr<ControlFactory>(new LayoutMenuRootFactory(i_rPanelViewShell)); + Link aWindowEventHandlerLink (LINK(this,LayoutMenu,WindowEventHandler)); + GetParent()->RemoveEventListener(aWindowEventHandlerLink); } @@ -315,7 +298,7 @@ sal_Int32 LayoutMenu::GetPreferredWidth (sal_Int32 nHeight) -sal_Int32 LayoutMenu::GetPreferredHeight (sal_Int32 nWidth) +ui::LayoutSize LayoutMenu::GetHeightForWidth (const sal_Int32 nWidth) { sal_Int32 nPreferredHeight = 200; if ( ! mbUseOwnScrollBar && GetItemCount()>0) @@ -335,7 +318,7 @@ sal_Int32 LayoutMenu::GetPreferredHeight (sal_Int32 nWidth) nPreferredHeight = nRowCount * aItemSize.Height(); } } - return nPreferredHeight; + return ui::LayoutSize(nPreferredHeight,nPreferredHeight,nPreferredHeight); } @@ -356,14 +339,6 @@ sal_Int32 LayoutMenu::GetMinimumWidth (void) -bool LayoutMenu::IsResizable (void) -{ - return true; -} - - - - void LayoutMenu::UpdateEnabledState (const MasterMode eMode) { bool bIsEnabled (false); @@ -376,7 +351,7 @@ void LayoutMenu::UpdateEnabledState (const MasterMode eMode) case ViewShell::ST_NONE: case ViewShell::ST_OUTLINE: case ViewShell::ST_PRESENTATION: - case ViewShell::ST_TASK_PANE: + case ViewShell::ST_SIDEBAR: // The complete task pane is disabled for these values or // not even visible. Disabling the LayoutMenu would be // logical but unnecessary. The main disadvantage is that @@ -416,42 +391,20 @@ void LayoutMenu::UpdateEnabledState (const MasterMode eMode) bIsEnabled = true; break; } - - TreeNode* pParentNode = GetParentNode(); - if (pParentNode != NULL) - { - TitledControl* pGrandParentNode - = dynamic_cast<TitledControl*>(pParentNode->GetParentNode()); - if (pGrandParentNode != NULL) - pGrandParentNode->SetEnabledState(bIsEnabled); - } - } } -::Window* LayoutMenu::GetWindow (void) -{ - return this; -} - - - - void LayoutMenu::Paint (const Rectangle& rRect) { - SetBackground (GetSettings().GetStyleSettings().GetWindowColor()); - if (mbSelectionUpdatePending) { mbSelectionUpdatePending = false; UpdateSelection(); } ValueSet::Paint (rRect); - - SetBackground (Wallpaper()); } @@ -507,46 +460,6 @@ void LayoutMenu::MouseButtonDown (const MouseEvent& rEvent) -void LayoutMenu::Execute (SfxRequest& rRequest) -{ - switch (rRequest.GetSlot()) - { - case SID_TP_APPLY_TO_SELECTED_SLIDES: - AssignLayoutToSelectedSlides(GetSelectedAutoLayout()); - rRequest.Done(); - break; - - case SID_INSERTPAGE_LAYOUT_MENU: - // Add arguments to this slot and forward it to the main view - // shell. - InsertPageWithLayout(GetSelectedAutoLayout()); - break; - } -} - - - - -void LayoutMenu::GetState (SfxItemSet& rItemSet) -{ - // Cut and paste is not supported. The SID_(CUT,COPY,PASTE) entries - // therefore must not show up in the context menu. - rItemSet.DisableItem (SID_CUT); - rItemSet.DisableItem (SID_COPY); - rItemSet.DisableItem (SID_PASTE); - - // The SID_INSERTPAGE_LAYOUT_MENU slot depends on the SID_INSERTPAGE - // slot being supported elsewhere. - const SfxPoolItem* pItem = NULL; - const SfxItemState aState ( - mrBase.GetViewFrame()->GetDispatcher()->QueryState(SID_INSERTPAGE, pItem)); - if (aState == SFX_ITEM_DISABLED) - rItemSet.DisableItem(SID_INSERTPAGE_LAYOUT_MENU); -} - - - - void LayoutMenu::InsertPageWithLayout (AutoLayout aLayout) { ViewShell* pViewShell = mrBase.GetMainViewShell().get(); @@ -577,22 +490,14 @@ void LayoutMenu::InsertPageWithLayout (AutoLayout aLayout) -TaskPaneShellManager* LayoutMenu::GetShellManager() -{ - if ( mpShellManager ) - return mpShellManager; - return TreeNode::GetShellManager(); -} - void LayoutMenu::InvalidateContent (void) { - // The number of items may have changed. Request a resize so that the - // vertical size of this control can be adapted. - RequestResize(); - // Throw away the current set and fill the menu anew according to the // current settings (this includes the support for vertical writing.) Fill(); + + if (mxSidebar.is()) + mxSidebar->requestLayout(); } @@ -865,31 +770,40 @@ void LayoutMenu::Command (const CommandEvent& rEvent) case COMMAND_CONTEXTMENU: if ( ! SD_MOD()->GetWaterCan()) { - if (GetShellManager() != NULL) - GetShellManager()->MoveToTop(this); + // Determine the position where to show the menu. + Point aMenuPosition; if (rEvent.IsMouseEvent()) { - // Do not show the context menu when the mouse was not - // pressed over an item. - if (GetItemId(rEvent.GetMousePosPixel()) > 0) - mrBase.GetViewFrame()->GetDispatcher()->ExecutePopup( - SdResId(RID_TASKPANE_LAYOUTMENU_POPUP)); + if (GetItemId(rEvent.GetMousePosPixel()) <= 0) + return; + aMenuPosition = rEvent.GetMousePosPixel(); } else { - // When the command event was not caused by a mouse - // event (for example a key press instead) then show the - // popup menu at the center of the current item. - if (GetSelectItemId() != (sal_uInt16)-1) - { - Rectangle aBBox (GetItemRect(GetSelectItemId())); - Point aPosition (aBBox.Center()); - mrBase.GetViewFrame()->GetDispatcher()->ExecutePopup( - SdResId(RID_TASKPANE_LAYOUTMENU_POPUP), - this, - &aPosition); - } + if (GetSelectItemId() == (sal_uInt16)-1) + return; + Rectangle aBBox (GetItemRect(GetSelectItemId())); + aMenuPosition = aBBox.Center(); } + + // Setup the menu. + ::boost::shared_ptr<PopupMenu> pMenu (new PopupMenu(SdResId(RID_TASKPANE_LAYOUTMENU_POPUP))); + FloatingWindow* pMenuWindow = dynamic_cast<FloatingWindow*>(pMenu->GetWindow()); + if (pMenuWindow != NULL) + pMenuWindow->SetPopupModeFlags( + pMenuWindow->GetPopupModeFlags() | FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE); + pMenu->SetSelectHdl(LINK(this, LayoutMenu, OnMenuItemSelected)); + + // Disable the SID_INSERTPAGE_LAYOUT_MENU item when + // the document is read-only. + const SfxPoolItem* pItem = NULL; + const SfxItemState aState ( + mrBase.GetViewFrame()->GetDispatcher()->QueryState(SID_INSERTPAGE, pItem)); + if (aState == SFX_ITEM_DISABLED) + pMenu->EnableItem(SID_INSERTPAGE_LAYOUT_MENU, sal_False); + + // Show the menu. + pMenu->Execute(this, Rectangle(aMenuPosition,Size(1,1)), POPUPMENU_EXECUTE_DOWN); } break; @@ -911,6 +825,34 @@ IMPL_LINK(LayoutMenu, StateChangeHandler, ::rtl::OUString*, EMPTYARG) +IMPL_LINK(LayoutMenu, OnMenuItemSelected, Menu*, pMenu) +{ + if (pMenu == NULL) + { + OSL_ENSURE(pMenu!=NULL, "LayoutMenu::OnMenuItemSelected: illegal menu!"); + return 0; + } + + pMenu->Deactivate(); + const sal_Int32 nIndex (pMenu->GetCurItemId()); + + if (nIndex == SID_TP_APPLY_TO_SELECTED_SLIDES) + { + AssignLayoutToSelectedSlides(GetSelectedAutoLayout()); + } + else if (nIndex == SID_INSERTPAGE_LAYOUT_MENU) + { + // Add arguments to this slot and forward it to the main view + // shell. + InsertPageWithLayout(GetSelectedAutoLayout()); + } + + return 0; +} + + + + void LayoutMenu::UpdateSelection (void) { bool bItemSelected = false; @@ -998,11 +940,45 @@ IMPL_LINK(LayoutMenu, EventMultiplexerListener, ::sd::tools::EventMultiplexerEve +IMPL_LINK(LayoutMenu, WindowEventHandler, VclWindowEvent*, pEvent) +{ + if (pEvent != NULL) + { + switch (pEvent->GetId()) + { + case VCLEVENT_WINDOW_SHOW: + case VCLEVENT_WINDOW_RESIZE: + SetSizePixel(GetParent()->GetSizePixel()); + return sal_True; + + default: + return sal_False; + } + + const SfxSimpleHint* pSimpleHint = PTR_CAST(SfxSimpleHint, pEvent); + if (pSimpleHint != NULL + && pSimpleHint->GetId() == SFX_HINT_DYING) + { + return sal_True; + } + } + + return sal_False; +} + + + + void LayoutMenu::DataChanged (const DataChangedEvent& rEvent) { Fill(); ValueSet::DataChanged(rEvent); + SetBackground(sfx2::sidebar::Theme::GetWallpaper(sfx2::sidebar::Theme::Paint_PanelBackground)); + SetColor(sfx2::sidebar::Theme::GetColor(sfx2::sidebar::Theme::Paint_PanelBackground)); } -} } // end of namespace ::sd::toolpanel + + + +} } // end of namespace ::sd::sidebar diff --git a/sd/source/ui/toolpanel/LayoutMenu.hxx b/sd/source/ui/sidebar/LayoutMenu.hxx index fe276d0ab50c..f8deb8fc312f 100644 --- a/sd/source/ui/toolpanel/LayoutMenu.hxx +++ b/sd/source/ui/sidebar/LayoutMenu.hxx @@ -19,27 +19,29 @@ * *************************************************************/ +#ifndef SD_SIDEBAR_LAYOUT_MENU_HXX +#define SD_SIDEBAR_LAYOUT_MENU_HXX - -#ifndef SD_TASKPANE_LAYOUT_MENU_HXX -#define SD_TASKPANE_LAYOUT_MENU_HXX - -#include "taskpane/TaskPaneTreeNode.hxx" - -#ifndef _COM_SUN_STAR_FRAME_XSTATUS_LISTENER_HPP_ -#include <com/sun/star/frame/XStatusListener.hpp> -#endif +#include "IDisposable.hxx" +#include "ISidebarReceiver.hxx" +#include <sfx2/sidebar/ILayoutableWindow.hxx> #include "glob.hxx" #include "pres.hxx" + #include <vcl/ctrl.hxx> #include <svtools/valueset.hxx> #include <svtools/transfer.hxx> #include <sfx2/shell.hxx> +#include <com/sun/star/frame/XStatusListener.hpp> +#include <com/sun/star/ui/XSidebar.hpp> + class SfxModule; +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; namespace sd { class DrawDocShell; @@ -53,23 +55,20 @@ class EventMultiplexerEvent; } } -namespace sd { namespace toolpanel { +namespace sd { namespace sidebar { class ControlFactory; -class ToolPanelViewShell; +class SidebarViewShell; +class SidebarShellManager; class LayoutMenu : public ValueSet, - public TreeNode, - public SfxShell, public DragSourceHelper, - public DropTargetHelper + public DropTargetHelper, + public sfx2::sidebar::ILayoutableWindow { public: - TYPEINFO(); - SFX_DECL_INTERFACE(SD_IF_SDLAYOUTMENU) - /** Create a new layout menu. Depending on the given flag it displays its own scroll bar or lets a surrounding window handle that. @@ -79,26 +78,24 @@ public: the view shell of the task pane. */ LayoutMenu ( - TreeNode* i_pParent, - ToolPanelViewShell& i_rPanelViewShell); + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); virtual ~LayoutMenu (void); - static std::auto_ptr<ControlFactory> CreateControlFactory ( - ToolPanelViewShell& i_rPanelViewShell ); + virtual void Dispose (void); /** Return a numerical value representing the currently selected layout. */ AutoLayout GetSelectedAutoLayout (void); + Size GetPreferredSize (void); + sal_Int32 GetPreferredWidth (sal_Int32 nHeight); + sal_Int32 GetMinimumWidth (void); // From ILayoutableWindow - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeight); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual sal_Int32 GetMinimumWidth (void); - virtual bool IsResizable (void); - virtual ::Window* GetWindow (void); + virtual css::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); // From ::Window virtual void Paint (const Rectangle& rRect); @@ -108,9 +105,6 @@ public: */ virtual void MouseButtonDown (const MouseEvent& rEvent); - void Execute (SfxRequest& rRequest); - void GetState (SfxItemSet& rItemSet); - /** The LayoutMenu does not support some main views. In this case the LayoutMenu is disabled. This state is updated in this method. @param eMode @@ -123,9 +117,6 @@ public: enum MasterMode { MM_NORMAL, MM_MASTER, MM_UNKNOWN }; void UpdateEnabledState (const MasterMode eMode); - // TreeNode overridables - virtual TaskPaneShellManager* GetShellManager (void); - /** Call this method when the set of displayed layouts is not up-to-date anymore. It will re-assemple this set according to the current settings. @@ -154,8 +145,6 @@ public: private: ViewShellBase& mrBase; - TaskPaneShellManager* mpShellManager; - /** Do we use our own scroll bar or is viewport handling done by our parent? */ @@ -165,12 +154,11 @@ private: many columns for the calculation. */ const int mnPreferredColumnCount; - - ::com::sun::star::uno::Reference<com::sun::star::frame::XStatusListener> mxListener; - + cssu::Reference<css::frame::XStatusListener> mxListener; bool mbSelectionUpdatePending; - bool mbIsMainViewChangePending; + cssu::Reference<css::ui::XSidebar> mxSidebar; + bool mbIsDisposed; /** Calculate the number of displayed rows. This depends on the given item size, the given number of columns, and the size of the @@ -228,6 +216,8 @@ private: DECL_LINK(RightClickHandler, MouseEvent*); DECL_LINK(StateChangeHandler, ::rtl::OUString*); DECL_LINK(EventMultiplexerListener, ::sd::tools::EventMultiplexerEvent*); + DECL_LINK(WindowEventHandler, VclWindowEvent*); + DECL_LINK(OnMenuItemSelected, Menu*); }; } } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainer.cxx b/sd/source/ui/sidebar/MasterPageContainer.cxx index 1d5144336d5b..d32629419245 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainer.cxx +++ b/sd/source/ui/sidebar/MasterPageContainer.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "MasterPageContainer.hxx" @@ -63,16 +60,15 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; -using namespace ::sd::toolpanel::controls; namespace { -typedef ::std::vector<SharedMasterPageDescriptor> MasterPageContainerType; +typedef ::std::vector<sd::sidebar::SharedMasterPageDescriptor> MasterPageContainerType; } // end of anonymous namespace -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** Inner implementation class of the MasterPageContainer. @@ -1213,4 +1209,4 @@ void MasterPageContainer::Implementation::FillingDone (void) -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainer.hxx b/sd/source/ui/sidebar/MasterPageContainer.hxx index 336ecf851f4c..e1502082b743 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainer.hxx +++ b/sd/source/ui/sidebar/MasterPageContainer.hxx @@ -19,10 +19,8 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_HXX -#define SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_HXX +#ifndef SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_HXX +#define SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_HXX #include "MasterPageContainerProviders.hxx" @@ -45,7 +43,7 @@ namespace sd { class DrawDocShell; } -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { class MasterPageDescriptor; @@ -211,6 +209,6 @@ public: }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerFiller.cxx b/sd/source/ui/sidebar/MasterPageContainerFiller.cxx index 591bc322ea14..2ace8e2f781f 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainerFiller.cxx +++ b/sd/source/ui/sidebar/MasterPageContainerFiller.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "MasterPageContainerFiller.hxx" @@ -32,10 +29,9 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; -using namespace ::sd::toolpanel::controls; -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { MasterPageContainerFiller::MasterPageContainerFiller (ContainerAdapter& rpAdapter) : mrContainerAdapter(rpAdapter), @@ -192,4 +188,4 @@ MasterPageContainerFiller::State MasterPageContainerFiller::AddTemplate (void) -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerFiller.hxx b/sd/source/ui/sidebar/MasterPageContainerFiller.hxx index 847eb49eb487..e475d84ffe67 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainerFiller.hxx +++ b/sd/source/ui/sidebar/MasterPageContainerFiller.hxx @@ -19,10 +19,8 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_FILLER_HXX -#define SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_FILLER_HXX +#ifndef SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_FILLER_HXX +#define SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_FILLER_HXX #include "MasterPageContainer.hxx" #include "MasterPageDescriptor.hxx" @@ -33,7 +31,7 @@ class TemplateScanner; class TemplateEntry; } -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** Fill a MasterPageContainer with information about the available master pages. These are provided by one default page and from the existing @@ -86,6 +84,6 @@ private: State AddTemplate (void); }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx b/sd/source/ui/sidebar/MasterPageContainerProviders.cxx index 5ddf82d3884b..2a583185f937 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx +++ b/sd/source/ui/sidebar/MasterPageContainerProviders.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "MasterPageContainerProviders.hxx" @@ -40,10 +37,8 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; -using namespace ::sd::toolpanel::controls; - -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { //===== PagePreviewProvider =================================================== @@ -422,4 +417,4 @@ bool ExistingPageProvider::operator== (const PageObjectProvider& rProvider) } -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.hxx b/sd/source/ui/sidebar/MasterPageContainerProviders.hxx index 78b6b1029912..eaf6fc9de9d9 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.hxx +++ b/sd/source/ui/sidebar/MasterPageContainerProviders.hxx @@ -19,10 +19,8 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX -#define SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX +#ifndef SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX +#define SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX #include <rtl/ustring.hxx> #include <sfx2/objsh.hxx> @@ -34,7 +32,7 @@ namespace sd { class PreviewRenderer; } namespace sd { class DrawDocShell; } -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** Interface for a provider of page objects. It is used by the @@ -169,7 +167,7 @@ public: /** This implementation of the PageObjectProvider simply returns an already existing master page object. */ -class ExistingPageProvider : public ::sd::toolpanel::controls::PageObjectProvider +class ExistingPageProvider : public PageObjectProvider { public: ExistingPageProvider (SdPage* pPage); @@ -180,6 +178,6 @@ private: SdPage* mpPage; }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerQueue.cxx b/sd/source/ui/sidebar/MasterPageContainerQueue.cxx index d7d78dfaae1c..c55354d8b62a 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainerQueue.cxx +++ b/sd/source/ui/sidebar/MasterPageContainerQueue.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "MasterPageContainerQueue.hxx" @@ -30,7 +27,7 @@ #include <set> -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { const sal_Int32 MasterPageContainerQueue::snDelayedCreationTimeout (15); const sal_Int32 MasterPageContainerQueue::snDelayedCreationTimeoutWhenNotIdle (100); @@ -297,4 +294,4 @@ void MasterPageContainerQueue::ProcessAllRequests (void) } -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerQueue.hxx b/sd/source/ui/sidebar/MasterPageContainerQueue.hxx index 7348da644644..48f048de14ed 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageContainerQueue.hxx +++ b/sd/source/ui/sidebar/MasterPageContainerQueue.hxx @@ -19,10 +19,8 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_QUEUE_HXX -#define SD_TOOLPANEL_CONTROLS_MASTER_PAGE_CONTAINER_QUEUE_HXX +#ifndef SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_QUEUE_HXX +#define SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_QUEUE_HXX #include "MasterPageContainer.hxx" #include "MasterPageDescriptor.hxx" @@ -30,7 +28,7 @@ #include <boost/scoped_ptr.hpp> #include <boost/weak_ptr.hpp> -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** The queue stores and processes all requests from a MasterPageContainer @@ -127,6 +125,6 @@ private: DECL_LINK(DelayedPreviewCreation, Timer *); }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/MasterPageDescriptor.cxx b/sd/source/ui/sidebar/MasterPageDescriptor.cxx index 99387405c04a..310838180430 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageDescriptor.cxx +++ b/sd/source/ui/sidebar/MasterPageDescriptor.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "MasterPageDescriptor.hxx" @@ -30,7 +27,7 @@ #include "sdpage.hxx" #include <tools/urlobj.hxx> -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { //===== MasterPageDescriptor ================================================== @@ -416,4 +413,4 @@ bool MasterPageDescriptor::AllComparator::operator() (const SharedMasterPageDesc } -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/MasterPageDescriptor.hxx b/sd/source/ui/sidebar/MasterPageDescriptor.hxx index 49a761cd1ed4..a3f3b73c9551 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageDescriptor.hxx +++ b/sd/source/ui/sidebar/MasterPageDescriptor.hxx @@ -19,15 +19,13 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_MASTER_PAGE_DESCRIPTOR_HXX -#define SD_TOOLPANEL_CONTROLS_MASTER_PAGE_DESCRIPTOR_HXX +#ifndef SD_SIDEBAR_PANELS_MASTER_PAGE_DESCRIPTOR_HXX +#define SD_SIDEBAR_PANELS_MASTER_PAGE_DESCRIPTOR_HXX #include "MasterPageContainer.hxx" #include <boost/shared_ptr.hpp> -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { class PageObjectProvider; class PreviewProvider; @@ -231,6 +229,6 @@ public: }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/MasterPageObserver.cxx b/sd/source/ui/sidebar/MasterPageObserver.cxx index c2e40748fd46..328493a91f24 100644 --- a/sd/source/ui/toolpanel/controls/MasterPageObserver.cxx +++ b/sd/source/ui/sidebar/MasterPageObserver.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "MasterPageObserver.hxx" diff --git a/sd/source/ui/toolpanel/controls/MasterPagesSelector.cxx b/sd/source/ui/sidebar/MasterPagesSelector.cxx index 576284bf6a4a..694ee21b404b 100644 --- a/sd/source/ui/toolpanel/controls/MasterPagesSelector.cxx +++ b/sd/source/ui/sidebar/MasterPagesSelector.cxx @@ -19,15 +19,13 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "MasterPagesSelector.hxx" #include "MasterPageContainer.hxx" #include "DocumentHelper.hxx" +#include "SidebarShellManager.hxx" #include "pres.hxx" #include "drawdoc.hxx" #include "DrawDocShell.hxx" @@ -42,18 +40,11 @@ #include "SlideSorterViewShell.hxx" #include "PreviewValueSet.hxx" #include "ViewShellBase.hxx" -#include "../TaskPaneShellManager.hxx" -#include "taskpane/TitledControl.hxx" -#include "taskpane/ControlContainer.hxx" -#include "controller/SlideSorterController.hxx" -#include "controller/SlsPageSelector.hxx" #include <sfx2/objface.hxx> #include "sdresid.hxx" -#include "TemplateScanner.hxx" -#ifndef _SD_DRAWVIEW_HXX #include "drawview.hxx" -#endif #include <vcl/image.hxx> +#include <vcl/floatwin.hxx> #include <svl/languageoptions.hxx> #include <sfx2/app.hxx> #include <sfx2/dispatch.hxx> @@ -69,57 +60,44 @@ #include "unmovss.hxx" #include <sfx2/request.hxx> #include <svl/itempool.hxx> +#include <sfx2/sidebar/Theme.hxx> -using namespace ::sd::toolpanel::controls; -#define MasterPagesSelector -#include "sdslots.hxx" using namespace ::com::sun::star::text; -namespace sd { namespace toolpanel { namespace controls { - - -SFX_IMPL_INTERFACE(MasterPagesSelector, SfxShell, - SdResId(STR_MASTERPAGESSELECTOR)) -{ - SFX_POPUPMENU_REGISTRATION( SdResId(RID_TASKPANE_MASTERPAGESSELECTOR_POPUP) ); -} - -TYPEINIT1(MasterPagesSelector, SfxShell); - +namespace sd { namespace sidebar { MasterPagesSelector::MasterPagesSelector ( - TreeNode* pParent, + ::Window* pParent, SdDrawDocument& rDocument, ViewShellBase& rBase, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer) - : TreeNode (pParent), - SfxShell(), + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) + : PreviewValueSet(pParent), maMutex(), mpContainer(rpContainer), mrDocument(rDocument), - mpPageSet (new PreviewValueSet(pParent)), mrBase(rBase), mnDefaultClickAction(SID_TP_APPLY_TO_ALL_SLIDES), maPreviewUpdateQueue(), maCurrentItemList(), maTokenToValueSetIndex(), - maLockedMasterPages() + maLockedMasterPages(), + mxSidebar(rxSidebar) { - SetPool (&rDocument.GetPool()); - - mpPageSet->SetSelectHdl ( + PreviewValueSet::SetSelectHdl ( LINK(this, MasterPagesSelector, ClickHandler)); - mpPageSet->SetRightMouseClickHandler ( + PreviewValueSet::SetRightMouseClickHandler ( LINK(this, MasterPagesSelector, RightClickHandler)); - mpPageSet->SetContextMenuCallback ( - LINK(this, MasterPagesSelector, ContextMenuCallback)); - mpPageSet->SetStyle(mpPageSet->GetStyle() | WB_NO_DIRECTSELECT); - mpPageSet->SetPreviewSize(mpContainer->GetPreviewSizePixel()); - mpPageSet->Show(); + PreviewValueSet::SetStyle(PreviewValueSet::GetStyle() | WB_NO_DIRECTSELECT); + PreviewValueSet::SetPreviewSize(mpContainer->GetPreviewSizePixel()); + PreviewValueSet::Show(); + + SetBackground(sfx2::sidebar::Theme::GetWallpaper(sfx2::sidebar::Theme::Paint_PanelBackground)); + SetColor(sfx2::sidebar::Theme::GetColor(sfx2::sidebar::Theme::Paint_PanelBackground)); Link aChangeListener (LINK(this,MasterPagesSelector,ContainerChangeListener)); mpContainer->AddChangeListener(aChangeListener); @@ -131,12 +109,8 @@ MasterPagesSelector::MasterPagesSelector ( MasterPagesSelector::~MasterPagesSelector (void) { Clear(); - mpPageSet.reset(); UpdateLocks(ItemList()); - if (GetShellManager() != NULL) - GetShellManager()->RemoveSubShell (this); - Link aChangeListener (LINK(this,MasterPagesSelector,ContainerChangeListener)); mpContainer->RemoveChangeListener(aChangeListener); } @@ -155,7 +129,7 @@ sal_Int32 MasterPagesSelector::GetPreferredWidth (sal_Int32 nHeight) { const ::osl::MutexGuard aGuard (maMutex); - return mpPageSet->GetPreferredWidth (nHeight); + return PreviewValueSet::GetPreferredWidth (nHeight); } @@ -165,7 +139,7 @@ sal_Int32 MasterPagesSelector::GetPreferredHeight (sal_Int32 nWidth) { const ::osl::MutexGuard aGuard (maMutex); - return mpPageSet->GetPreferredHeight (nWidth); + return PreviewValueSet::GetPreferredHeight (nWidth); } @@ -174,7 +148,7 @@ sal_Int32 MasterPagesSelector::GetPreferredHeight (sal_Int32 nWidth) Size MasterPagesSelector::GetPreferredSize (void) { int nPreferredWidth = GetPreferredWidth( - mpPageSet->GetOutputSizePixel().Height()); + PreviewValueSet::GetOutputSizePixel().Height()); int nPreferredHeight = GetPreferredHeight(nPreferredWidth); return Size (nPreferredWidth, nPreferredHeight); @@ -239,16 +213,7 @@ IMPL_LINK(MasterPagesSelector, ClickHandler, PreviewValueSet*, EMPTYARG) // We use the framework to assign the clicked-on master page because we // so use the same mechanism as the context menu does (where we do not // have the option to call the assignment method directly.) - if (GetShellManager() != NULL) - GetShellManager()->MoveToTop (this); - - SfxViewFrame* pViewFrame = mrBase.GetViewFrame(); - if (pViewFrame != NULL) - { - SfxDispatcher* pDispatcher = pViewFrame->GetDispatcher(); - if (pDispatcher != NULL) - pDispatcher->Execute(mnDefaultClickAction); - } + ExecuteCommand(mnDefaultClickAction); return 0; } @@ -262,13 +227,18 @@ IMPL_LINK(MasterPagesSelector, RightClickHandler, MouseEvent*, pEvent) // the mouse is selected. The actual display of the context menu is // done in ContextMenuCallback which is called indirectly through // PreviewValueSet::Command(). - mpPageSet->GrabFocus (); - mpPageSet->ReleaseMouse(); - if (GetDispatcher() != NULL && pEvent != NULL) + PreviewValueSet::GrabFocus (); + PreviewValueSet::ReleaseMouse(); + SfxViewFrame* pViewFrame = mrBase.GetViewFrame(); + if (pViewFrame != NULL) { - sal_uInt16 nIndex = mpPageSet->GetItemId (pEvent->GetPosPixel()); - if (nIndex > 0) - mpPageSet->SelectItem (nIndex); + SfxDispatcher* pDispatcher = pViewFrame->GetDispatcher(); + if (pDispatcher != NULL && pEvent != NULL) + { + sal_uInt16 nIndex = PreviewValueSet::GetItemId (pEvent->GetPosPixel()); + if (nIndex > 0) + PreviewValueSet::SelectItem (nIndex); + } } return 0; } @@ -276,39 +246,144 @@ IMPL_LINK(MasterPagesSelector, RightClickHandler, MouseEvent*, pEvent) -IMPL_LINK(MasterPagesSelector, ContextMenuCallback, CommandEvent*, pEvent) +void MasterPagesSelector::Command (const CommandEvent& rEvent) { - // Use the currently selected item and show the popup menu in its - // center. - if (GetShellManager() != NULL) - GetShellManager()->MoveToTop (this); - const sal_uInt16 nIndex = mpPageSet->GetSelectItemId(); - if (nIndex > 0 && pEvent!=NULL) + switch (rEvent.GetCommand()) { - // The position of the upper left corner of the context menu is - // taken either from the mouse position (when the command was sent - // as reaction to a right click) or in the center of the selected - // item (when the command was sent as reaction to Shift+F10.) - Point aPosition (pEvent->GetMousePosPixel()); - if ( ! pEvent->IsMouseEvent()) + case COMMAND_CONTEXTMENU: { - Rectangle aBBox (mpPageSet->GetItemRect(nIndex)); - aPosition = aBBox.Center(); + // Use the currently selected item and show the popup menu in its + // center. + const sal_uInt16 nIndex = PreviewValueSet::GetSelectItemId(); + if (nIndex > 0) + { + // The position of the upper left corner of the context menu is + // taken either from the mouse position (when the command was sent + // as reaction to a right click) or in the center of the selected + // item (when the command was sent as reaction to Shift+F10.) + Point aPosition (rEvent.GetMousePosPixel()); + if ( ! rEvent.IsMouseEvent()) + { + Rectangle aBBox (PreviewValueSet::GetItemRect(nIndex)); + aPosition = aBBox.Center(); + } + + // Setup the menu. + ::boost::scoped_ptr<PopupMenu> pMenu (new PopupMenu(GetContextMenuResId())); + FloatingWindow* pMenuWindow = dynamic_cast<FloatingWindow*>(pMenu->GetWindow()); + if (pMenuWindow != NULL) + pMenuWindow->SetPopupModeFlags( + pMenuWindow->GetPopupModeFlags() | FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE); + pMenu->SetSelectHdl(LINK(this, MasterPagesSelector, OnMenuItemSelected)); + + ProcessPopupMenu(*pMenu); + + // Show the menu. + pMenu->Execute(this, Rectangle(aPosition,Size(1,1)), POPUPMENU_EXECUTE_DOWN); + } + break; } + } +} + - const ResId aPopupResId (GetContextMenuResId()); - mrBase.GetViewFrame()->GetDispatcher()->ExecutePopup( - aPopupResId, - mpPageSet.get(), - &aPosition); + + +void MasterPagesSelector::ProcessPopupMenu (Menu& rMenu) +{ + // Disable some entries. + if (mpContainer->GetPreviewSize() == MasterPageContainer::SMALL) + rMenu.EnableItem(SID_TP_SHOW_SMALL_PREVIEW, sal_False); + else + rMenu.EnableItem(SID_TP_SHOW_LARGE_PREVIEW, sal_False); +} + + + + +IMPL_LINK(MasterPagesSelector, OnMenuItemSelected, Menu*, pMenu) +{ + if (pMenu == NULL) + { + OSL_ENSURE(pMenu!=NULL, "MasterPagesSelector::OnMenuItemSelected: illegal menu!"); + return 0; } + pMenu->Deactivate(); + ExecuteCommand(pMenu->GetCurItemId()); return 0; } +void MasterPagesSelector::ExecuteCommand (const sal_Int32 nCommandId) +{ + switch (nCommandId) + { + case SID_TP_APPLY_TO_ALL_SLIDES: + mrBase.SetBusyState (true); + AssignMasterPageToAllSlides (GetSelectedMasterPage()); + mrBase.SetBusyState (false); + break; + + case SID_TP_APPLY_TO_SELECTED_SLIDES: + mrBase.SetBusyState (true); + AssignMasterPageToSelectedSlides (GetSelectedMasterPage()); + mrBase.SetBusyState (false); + break; + + case SID_TP_USE_FOR_NEW_PRESENTATIONS: + DBG_ASSERT (false, + "Using slides as default for new presentations" + " is not yet implemented"); + break; + + case SID_TP_SHOW_SMALL_PREVIEW: + case SID_TP_SHOW_LARGE_PREVIEW: + { + mrBase.SetBusyState (true); + mpContainer->SetPreviewSize( + nCommandId==SID_TP_SHOW_SMALL_PREVIEW + ? MasterPageContainer::SMALL + : MasterPageContainer::LARGE); + mrBase.SetBusyState (false); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + break; + } + + case SID_TP_EDIT_MASTER: + { + using namespace ::com::sun::star; + uno::Reference<drawing::XDrawPage> xSelectedMaster ( + GetSelectedMasterPage()->getUnoPage(), uno::UNO_QUERY); + SfxViewFrame* pViewFrame = mrBase.GetViewFrame(); + if (pViewFrame != NULL && xSelectedMaster.is()) + { + SfxDispatcher* pDispatcher = pViewFrame->GetDispatcher(); + if (pDispatcher != NULL) + { + sal_uInt16 nIndex = PreviewValueSet::GetSelectItemId(); + pDispatcher->Execute(SID_MASTERPAGE, SFX_CALLMODE_SYNCHRON); + PreviewValueSet::SelectItem (nIndex); + mrBase.GetDrawController().setCurrentPage(xSelectedMaster); + } + } + break; + } + + case SID_CUT: + case SID_COPY: + case SID_PASTE: + // Cut, copy, and paste are not supported and thus are ignored. + break; + } +} + + + + IMPL_LINK(MasterPagesSelector, ContainerChangeListener, MasterPageContainerChangeEvent*, pEvent) { if (pEvent) @@ -324,7 +399,7 @@ SdPage* MasterPagesSelector::GetSelectedMasterPage (void) const ::osl::MutexGuard aGuard (maMutex); SdPage* pMasterPage = NULL; - sal_uInt16 nIndex = mpPageSet->GetSelectItemId(); + sal_uInt16 nIndex = PreviewValueSet::GetSelectItemId(); UserData* pData = GetUserData(nIndex); if (pData != NULL) { @@ -427,7 +502,7 @@ void MasterPagesSelector::NotifyContainerChangeEvent (const MasterPageContainerC switch (rEvent.meEventType) { case MasterPageContainerChangeEvent::SIZE_CHANGED: - mpPageSet->SetPreviewSize(mpContainer->GetPreviewSizePixel()); + PreviewValueSet::SetPreviewSize(mpContainer->GetPreviewSizePixel()); UpdateAllPreviews(); break; @@ -436,10 +511,10 @@ void MasterPagesSelector::NotifyContainerChangeEvent (const MasterPageContainerC int nIndex (GetIndexForToken(rEvent.maChildToken)); if (nIndex >= 0) { - mpPageSet->SetItemImage ( + PreviewValueSet::SetItemImage ( (sal_uInt16)nIndex, mpContainer->GetPreviewForToken(rEvent.maChildToken)); - mpPageSet->Invalidate(mpPageSet->GetItemRect((sal_uInt16)nIndex)); + PreviewValueSet::Invalidate(PreviewValueSet::GetItemRect((sal_uInt16)nIndex)); } } break; @@ -473,8 +548,8 @@ MasterPagesSelector::UserData* MasterPagesSelector::GetUserData (int nIndex) con { const ::osl::MutexGuard aGuard (maMutex); - if (nIndex>0 && nIndex<=mpPageSet->GetItemCount()) - return reinterpret_cast<UserData*>(mpPageSet->GetItemData((sal_uInt16)nIndex)); + if (nIndex>0 && nIndex<=PreviewValueSet::GetItemCount()) + return reinterpret_cast<UserData*>(PreviewValueSet::GetItemData((sal_uInt16)nIndex)); else return NULL; } @@ -486,12 +561,12 @@ void MasterPagesSelector::SetUserData (int nIndex, UserData* pData) { const ::osl::MutexGuard aGuard (maMutex); - if (nIndex>0 && nIndex<=mpPageSet->GetItemCount()) + if (nIndex>0 && nIndex<=PreviewValueSet::GetItemCount()) { UserData* pOldData = GetUserData(nIndex); if (pOldData!=NULL && pOldData!=pData) delete pOldData; - mpPageSet->SetItemData((sal_uInt16)nIndex, pData); + PreviewValueSet::SetItemData((sal_uInt16)nIndex, pData); } } @@ -508,7 +583,7 @@ bool MasterPagesSelector::IsResizable (void) ::Window* MasterPagesSelector::GetWindow (void) { - return mpPageSet.get(); + return this; } @@ -529,87 +604,6 @@ void MasterPagesSelector::UpdateSelection (void) -void MasterPagesSelector::Execute (SfxRequest& rRequest) -{ - switch (rRequest.GetSlot()) - { - case SID_TP_APPLY_TO_ALL_SLIDES: - mrBase.SetBusyState (true); - AssignMasterPageToAllSlides (GetSelectedMasterPage()); - mrBase.SetBusyState (false); - break; - - case SID_TP_APPLY_TO_SELECTED_SLIDES: - mrBase.SetBusyState (true); - AssignMasterPageToSelectedSlides (GetSelectedMasterPage()); - mrBase.SetBusyState (false); - break; - - case SID_TP_USE_FOR_NEW_PRESENTATIONS: - DBG_ASSERT (false, - "Using slides as default for new presentations" - " is not yet implemented"); - break; - - case SID_TP_SHOW_SMALL_PREVIEW: - case SID_TP_SHOW_LARGE_PREVIEW: - { - mrBase.SetBusyState (true); - mpContainer->SetPreviewSize( - rRequest.GetSlot()==SID_TP_SHOW_SMALL_PREVIEW - ? MasterPageContainer::SMALL - : MasterPageContainer::LARGE); - mrBase.SetBusyState (false); - break; - } - - case SID_TP_EDIT_MASTER: - { - using namespace ::com::sun::star; - uno::Reference<drawing::XDrawPage> xSelectedMaster ( - GetSelectedMasterPage()->getUnoPage(), uno::UNO_QUERY); - SfxViewFrame* pViewFrame = mrBase.GetViewFrame(); - if (pViewFrame != NULL && xSelectedMaster.is()) - { - SfxDispatcher* pDispatcher = pViewFrame->GetDispatcher(); - if (pDispatcher != NULL) - { - sal_uInt16 nIndex = mpPageSet->GetSelectItemId(); - pDispatcher->Execute(SID_MASTERPAGE, SFX_CALLMODE_SYNCHRON); - mpPageSet->SelectItem (nIndex); - mrBase.GetDrawController().setCurrentPage(xSelectedMaster); - } - } - break; - } - - case SID_CUT: - case SID_COPY: - case SID_PASTE: - // Cut, copy, and paste are not supported and thus are ignored. - break; - } -} - - - - -void MasterPagesSelector::GetState (SfxItemSet& rItemSet) -{ - if (mpContainer->GetPreviewSize() == MasterPageContainer::SMALL) - rItemSet.DisableItem (SID_TP_SHOW_SMALL_PREVIEW); - else - rItemSet.DisableItem (SID_TP_SHOW_LARGE_PREVIEW); - - // Cut and paste is not supported so do not show the menu entries. - rItemSet.DisableItem (SID_CUT); - rItemSet.DisableItem (SID_COPY); - rItemSet.DisableItem (SID_PASTE); -} - - - - void MasterPagesSelector::SetItem ( sal_uInt16 nIndex, MasterPageContainer::Token aToken) @@ -627,14 +621,14 @@ void MasterPagesSelector::SetItem ( if (aPreview.GetSizePixel().Width()>0) { - if (mpPageSet->GetItemPos(nIndex) != VALUESET_ITEM_NOTFOUND) + if (PreviewValueSet::GetItemPos(nIndex) != VALUESET_ITEM_NOTFOUND) { - mpPageSet->SetItemImage(nIndex,aPreview); - mpPageSet->SetItemText(nIndex, mpContainer->GetPageNameForToken(aToken)); + PreviewValueSet::SetItemImage(nIndex,aPreview); + PreviewValueSet::SetItemText(nIndex, mpContainer->GetPageNameForToken(aToken)); } else { - mpPageSet->InsertItem ( + PreviewValueSet::InsertItem ( nIndex, aPreview, mpContainer->GetPageNameForToken(aToken), @@ -650,7 +644,7 @@ void MasterPagesSelector::SetItem ( } else { - mpPageSet->RemoveItem(nIndex); + PreviewValueSet::RemoveItem(nIndex); } } @@ -698,7 +692,7 @@ void MasterPagesSelector::InvalidatePreview (const SdPage* pPage) { const ::osl::MutexGuard aGuard (maMutex); - for (sal_uInt16 nIndex=1; nIndex<=mpPageSet->GetItemCount(); nIndex++) + for (sal_uInt16 nIndex=1; nIndex<=PreviewValueSet::GetItemCount(); nIndex++) { UserData* pData = GetUserData(nIndex); if (pData != NULL) @@ -718,20 +712,20 @@ void MasterPagesSelector::UpdateAllPreviews (void) { const ::osl::MutexGuard aGuard (maMutex); - for (sal_uInt16 nIndex=1; nIndex<=mpPageSet->GetItemCount(); nIndex++) + for (sal_uInt16 nIndex=1; nIndex<=PreviewValueSet::GetItemCount(); nIndex++) { UserData* pData = GetUserData(nIndex); if (pData != NULL) { MasterPageContainer::Token aToken (pData->second); - mpPageSet->SetItemImage( + PreviewValueSet::SetItemImage( nIndex, mpContainer->GetPreviewForToken(aToken)); if (mpContainer->GetPreviewState(aToken) == MasterPageContainer::PS_CREATABLE) mpContainer->RequestPreview(aToken); } } - mpPageSet->Rearrange(true); + PreviewValueSet::Rearrange(true); } @@ -741,13 +735,13 @@ void MasterPagesSelector::ClearPageSet (void) { const ::osl::MutexGuard aGuard (maMutex); - for (sal_uInt16 nIndex=1; nIndex<=mpPageSet->GetItemCount(); nIndex++) + for (sal_uInt16 nIndex=1; nIndex<=PreviewValueSet::GetItemCount(); nIndex++) { UserData* pData = GetUserData(nIndex); if (pData != NULL) delete pData; } - mpPageSet->Clear(); + PreviewValueSet::Clear(); } @@ -757,7 +751,7 @@ void MasterPagesSelector::SetHelpId( const rtl::OString& aId ) { const ::osl::MutexGuard aGuard (maMutex); - mpPageSet->SetHelpId( aId ); + PreviewValueSet::SetHelpId( aId ); } @@ -838,13 +832,18 @@ void MasterPagesSelector::UpdateItemList (::std::auto_ptr<ItemList> pNewItemList maCurrentItemList.swap(*pNewItemList); - mpPageSet->Rearrange(); - if (GetParentNode() != NULL) - GetParentNode()->RequestResize(); + PreviewValueSet::Rearrange(); + if (mxSidebar.is()) + mxSidebar->requestLayout(); } +css::ui::LayoutSize MasterPagesSelector::GetHeightForWidth (const sal_Int32 nWidth) +{ + const sal_Int32 nHeight (GetPreferredHeight(nWidth)); + return css::ui::LayoutSize(nHeight,nHeight,nHeight); +} -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/MasterPagesSelector.hxx b/sd/source/ui/sidebar/MasterPagesSelector.hxx index c7d4edf754f1..f58ddefffae1 100644 --- a/sd/source/ui/toolpanel/controls/MasterPagesSelector.hxx +++ b/sd/source/ui/sidebar/MasterPagesSelector.hxx @@ -19,23 +19,27 @@ * *************************************************************/ +#ifndef SD_SIDEBAR_PANELS_MASTER_PAGES_SELECTOR_HXX +#define SD_SIDEBAR_PANELS_MASTER_PAGES_SELECTOR_HXX - -#ifndef SD_TASKPANE_CONTROLS_MASTER_PAGES_SELECTOR_HXX -#define SD_TASKPANE_CONTROLS_MASTER_PAGES_SELECTOR_HXX - -#include "taskpane/TaskPaneTreeNode.hxx" #include "MasterPageContainer.hxx" #include "SlideSorterViewShell.hxx" +#include "PreviewValueSet.hxx" +#include "ISidebarReceiver.hxx" +#include <sfx2/sidebar/ILayoutableWindow.hxx> #include "pres.hxx" #include <sfx2/shell.hxx> #include <vcl/image.hxx> #include "glob.hxx" #include <osl/mutex.hxx> +#include <com/sun/star/ui/XSidebar.hpp> #include <queue> +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + class MouseEvent; class SdDrawDocument; class SdPage; @@ -48,26 +52,26 @@ class TemplateDir; class ViewShellBase; } -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { class PreviewValueSet; +class SidebarShellManager; + /** Base class of a menu that lets the user select from a list of templates or designs that are loaded from files. */ class MasterPagesSelector - : public TreeNode, - public SfxShell + : public PreviewValueSet, + public sfx2::sidebar::ILayoutableWindow { public: - TYPEINFO(); - SFX_DECL_INTERFACE(SD_IF_SDMASTERPAGESSELECTOR) - MasterPagesSelector ( - TreeNode* pParent, + ::Window* pParent, SdDrawDocument& rDocument, ViewShellBase& rBase, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer); + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); virtual ~MasterPagesSelector (void); virtual void LateInit (void); @@ -92,9 +96,6 @@ public: virtual ::Window* GetWindow (void); virtual sal_Int32 GetMinimumWidth (void); - virtual void Execute (SfxRequest& rRequest); - virtual void GetState (SfxItemSet& rItemSet); - /** Update the selection of previews according to whatever influences them appart from mouse and keyboard. If, for example, the current page of the main pane changes, then call @@ -117,7 +118,6 @@ public: */ void ClearPageSet (void); - using SfxShell::SetHelpId; void SetHelpId( const rtl::OString& aId ); /** Mark the preview that belongs to the given index as not up-to-date @@ -132,12 +132,14 @@ public: void UpdateAllPreviews (void); + // ILayoutableWindow + virtual css::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); + protected: mutable ::osl::Mutex maMutex; ::boost::shared_ptr<MasterPageContainer> mpContainer; SdDrawDocument& mrDocument; - ::std::auto_ptr<PreviewValueSet> mpPageSet; bool mbSmallPreviewSize; ViewShellBase& mrBase; /** Slot that is executed as default action when the left mouse button is @@ -206,7 +208,14 @@ protected: */ virtual ResId GetContextMenuResId (void) const; + virtual void Command (const CommandEvent& rEvent); + + virtual void ProcessPopupMenu (Menu& rMenu); + virtual void ExecuteCommand (const sal_Int32 nCommandId); + private: + cssu::Reference<css::ui::XSidebar> mxSidebar; + /** The offset between ValueSet index and MasterPageContainer::Token last seen. This value is used heuristically to speed up the lookup of an index for a token. @@ -215,6 +224,7 @@ private: DECL_LINK(RightClickHandler, MouseEvent*); DECL_LINK(ContextMenuCallback, CommandEvent*); DECL_LINK(ContainerChangeListener, MasterPageContainerChangeEvent*); + DECL_LINK(OnMenuItemSelected, Menu*); void SetItem ( sal_uInt16 nIndex, @@ -227,6 +237,6 @@ private: MasterPageContainer::Token aToken); }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/sidebar/NavigatorWrapper.cxx b/sd/source/ui/sidebar/NavigatorWrapper.cxx new file mode 100644 index 000000000000..6a4f3bc104cb --- /dev/null +++ b/sd/source/ui/sidebar/NavigatorWrapper.cxx @@ -0,0 +1,89 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "NavigatorWrapper.hxx" +#include "navigatr.hrc" +#include "ViewShellBase.hxx" + +#include <sfx2/sidebar/Theme.hxx> + +#include <boost/bind.hpp> + + +namespace sd { namespace sidebar { + +NavigatorWrapper::NavigatorWrapper ( + ::Window* pParent, + sd::ViewShellBase& rViewShellBase, + SfxBindings* pBindings) + : Control(pParent, 0), + mrViewShellBase(rViewShellBase), + maNavigator( + this, + NULL, + SdResId(FLT_NAVIGATOR), + pBindings, + ::boost::bind(&NavigatorWrapper::UpdateNavigator, this)) +{ + maNavigator.SetPosSizePixel( + Point(0,0), + GetSizePixel()); + maNavigator.SetBackground(sfx2::sidebar::Theme::GetWallpaper(sfx2::sidebar::Theme::Paint_PanelBackground)); + maNavigator.Show(); +} + + + + +NavigatorWrapper::~NavigatorWrapper (void) +{ +} + + + + +void NavigatorWrapper::Resize (void) +{ + maNavigator.SetSizePixel(GetSizePixel()); +} + + + + +css::ui::LayoutSize NavigatorWrapper::GetHeightForWidth (const sal_Int32 nWidth) +{ + (void)nWidth; + + return css::ui::LayoutSize(-1,-1,-1); +} + + + + +void NavigatorWrapper::UpdateNavigator (void) +{ + maNavigator.InitTreeLB(mrViewShellBase.GetDocument()); +} + + +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/sidebar/NavigatorWrapper.hxx b/sd/source/ui/sidebar/NavigatorWrapper.hxx new file mode 100644 index 000000000000..83370d1da444 --- /dev/null +++ b/sd/source/ui/sidebar/NavigatorWrapper.hxx @@ -0,0 +1,72 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_NAVIGATOR_WRAPPER_HXX +#define SD_SIDEBAR_NAVIGATOR_WRAPPER_HXX + +#include <sfx2/sidebar/ILayoutableWindow.hxx> +#include <vcl/ctrl.hxx> +#include "navigatr.hxx" + + +class SfxBindings; +namespace sd { class ViewShellBase; } + +namespace css = ::com::sun::star; + +namespace sd { namespace sidebar { + +/** Present the navigator as control that can be displayed inside the + sidebar. + This wrapper has two main responsibilities: + - Watch for document changes and update the navigator when one + happens. + - Forward size changes from sidebar to navigator. +*/ +class NavigatorWrapper + : public Control, + public sfx2::sidebar::ILayoutableWindow +{ +public: + NavigatorWrapper ( + ::Window* pParent, + sd::ViewShellBase& rViewShellBase, + SfxBindings* pBindings); + + virtual ~NavigatorWrapper (void); + + // Control + virtual void Resize (void); + + // From ILayoutableWindow + virtual css::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); + +private: + ViewShellBase& mrViewShellBase; + SdNavigatorWin maNavigator; + + void UpdateNavigator (void); +}; + + +} } // end of namespace sd::sidebar + +#endif diff --git a/sd/source/ui/sidebar/PanelBase.cxx b/sd/source/ui/sidebar/PanelBase.cxx new file mode 100644 index 000000000000..ba2519c67712 --- /dev/null +++ b/sd/source/ui/sidebar/PanelBase.cxx @@ -0,0 +1,130 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "TableDesignPanel.hxx" + + + +namespace sd { namespace sidebar { + + +PanelBase::PanelBase ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) + : Control(pParentWindow), + mpWrappedControl(NULL), + mxSidebar(), + mrViewShellBase(rViewShellBase) +{ + OSL_TRACE("created PanelBase at %x for parent %x", this, pParentWindow); + +#ifdef DEBUG + SetText(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sd:PanelBase"))); +#endif +} + + + + +PanelBase::~PanelBase (void) +{ + OSL_TRACE("deleting wrapped control at %x", mpWrappedControl.get()); + mpWrappedControl.reset(); + OSL_TRACE("deleting PanelBase at %x from parent %x", this, GetParent()); +} + + + + + +void PanelBase::Dispose (void) +{ + OSL_TRACE("PanelBase::DisposeL: deleting wrapped control at %x", mpWrappedControl.get()); + mpWrappedControl.reset(); +} + + + + +css::ui::LayoutSize PanelBase::GetHeightForWidth (const sal_Int32 nWidth) +{ + sal_Int32 nHeight (0); + if (ProvideWrappedControl()) + nHeight = mpWrappedControl->GetSizePixel().Height(); + return css::ui::LayoutSize(nHeight,nHeight,nHeight); +} + + + + +void PanelBase::Resize (void) +{ + if (ProvideWrappedControl()) + { + Size aNewSize (GetSizePixel()); + mpWrappedControl->SetOutputSizePixel(aNewSize); + } +} + + + + +::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible> PanelBase::CreateAccessibleObject ( + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible>& ) +{ + if (ProvideWrappedControl()) + return mpWrappedControl->GetAccessible(); + else + return NULL; +} + + + + +void PanelBase::SetSidebar (const cssu::Reference<css::ui::XSidebar>& rxSidebar) +{ + mxSidebar = rxSidebar; + if (mxSidebar.is() && mpWrappedControl!=NULL) + mxSidebar->requestLayout(); +} + + + + +bool PanelBase::ProvideWrappedControl (void) +{ + if ( ! mpWrappedControl) + { + mpWrappedControl.reset(CreateWrappedControl(this, mrViewShellBase)); + OSL_TRACE("created wrapped control at %x for parent PanelBase at %x", mpWrappedControl.get(), this); + if (mpWrappedControl) + mpWrappedControl->Show(); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + } + return mpWrappedControl.get() != NULL; +} + +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/sidebar/PanelBase.hxx b/sd/source/ui/sidebar/PanelBase.hxx new file mode 100644 index 000000000000..3deddc81f1a6 --- /dev/null +++ b/sd/source/ui/sidebar/PanelBase.hxx @@ -0,0 +1,90 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_PANELS_PANEL_BASE_HXX +#define SD_SIDEBAR_PANELS_PANEL_BASE_HXX + +#include "IDisposable.hxx" +#include "ISidebarReceiver.hxx" +#include <sfx2/sidebar/ILayoutableWindow.hxx> + +#include <vcl/ctrl.hxx> + +#include <boost/scoped_ptr.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace sd { + class ViewShellBase; +} + + + + +namespace sd { namespace sidebar { + + +class PanelBase + : public Control, + public sfx2::sidebar::ILayoutableWindow, + public IDisposable, + public ISidebarReceiver +{ +public: + PanelBase ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase); + virtual ~PanelBase (void); + + virtual void Resize (void); + + // IDisposable + virtual void Dispose (void); + + // ILayoutableWindow + virtual css::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); + + // ISidebarReceiver + virtual void SetSidebar (const cssu::Reference<css::ui::XSidebar>& rxSidebar); + + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible > CreateAccessibleObject ( + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible>& rxParent); + +protected: + ::boost::scoped_ptr< ::Window> mpWrappedControl; + virtual ::Window* CreateWrappedControl ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) = 0; + +private: + cssu::Reference<css::ui::XSidebar> mxSidebar; + ViewShellBase& mrViewShellBase; + + bool ProvideWrappedControl (void); +}; + +} } // end of namespace sd::sidebar + +#endif diff --git a/sd/source/ui/sidebar/PanelFactory.cxx b/sd/source/ui/sidebar/PanelFactory.cxx new file mode 100644 index 000000000000..7dba3eea3afa --- /dev/null +++ b/sd/source/ui/sidebar/PanelFactory.cxx @@ -0,0 +1,212 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "PanelFactory.hxx" +#include "framework/Pane.hxx" +#include "ViewShellBase.hxx" +#include "DrawController.hxx" +#include "LayoutMenu.hxx" +#include "CurrentMasterPagesSelector.hxx" +#include "RecentMasterPagesSelector.hxx" +#include "AllMasterPagesSelector.hxx" +#include "CustomAnimationPanel.hxx" +#include "SlideTransitionPanel.hxx" +#include "NavigatorWrapper.hxx" + +#include <sfx2/viewfrm.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <vcl/window.hxx> +#include <toolkit/helper/vclunohelper.hxx> + +using namespace css; +using namespace cssu; +using namespace ::sd::framework; +using ::rtl::OUString; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +namespace sd { + extern ::Window * createTableDesignPanel (::Window* pParent, ViewShellBase& rBase); +} + +namespace sd { namespace sidebar { + +namespace { + /** Note that these names have to be identical to (the tail of) + the entries in officecfg/registry/data/org/openoffice/Office/Impress.xcu + for the TaskPanelFactory. + */ + const static char* gsResourceNameCustomAnimations = "/CustomAnimations"; + const static char* gsResourceNameLayouts = "/Layouts"; + const static char* gsResourceNameAllMasterPages = "/AllMasterPages"; + const static char* gsResourceNameRecentMasterPages = "/RecentMasterPages"; + const static char* gsResourceNameUsedMasterPages = "/UsedMasterPages"; + const static char* gsResourceNameSlideTransitions = "/SlideTransitions"; + const static char* gsResourceNameTableDesign = "/TableDesign"; + const static char* gsResourceNameNavigator = "/NavigatorPanel"; +} + +Reference<lang::XEventListener> mxControllerDisposeListener; + + + +// ----- Service functions ---------------------------------------------------- + +Reference<XInterface> SAL_CALL PanelFactory_createInstance ( + const Reference<XComponentContext>& rxContext) +{ + return Reference<XInterface>(static_cast<XWeak*>(new PanelFactory(rxContext))); +} + + + + +::rtl::OUString PanelFactory_getImplementationName (void) throw(RuntimeException) +{ + return ::rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.Draw.framework.PanelFactory")); +} + + + + +Sequence<rtl::OUString> SAL_CALL PanelFactory_getSupportedServiceNames (void) + throw (RuntimeException) +{ + static const ::rtl::OUString sServiceName( + ::rtl::OUString::createFromAscii("com.sun.star.drawing.framework.PanelFactory")); + return Sequence<rtl::OUString>(&sServiceName, 1); +} + + + + +//----- PanelFactory -------------------------------------------------------- + +PanelFactory::PanelFactory( + const css::uno::Reference<css::uno::XComponentContext>& rxContext) + : PanelFactoryInterfaceBase(m_aMutex) +{ +} + + + + +PanelFactory::~PanelFactory (void) +{ +} + + + + +void SAL_CALL PanelFactory::disposing (void) +{ +} + + + + +// XUIElementFactory + +Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement ( + const ::rtl::OUString& rsUIElementResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException) +{ + // Process arguments. + const ::comphelper::NamedValueCollection aArguments (rArguments); + Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); + Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); + Reference<ui::XSidebar> xSidebar (aArguments.getOrDefault("Sidebar", Reference<ui::XSidebar>())); + + // Throw exceptions when the arguments are not as expected. + ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); + if ( ! xParentWindow.is() || pParentWindow==NULL) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without ParentWindow"), + NULL); + if ( ! xFrame.is()) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without XFrame"), + NULL); + + // Tunnel through the controller to obtain a ViewShellBase. + ViewShellBase* pBase = NULL; + Reference<lang::XUnoTunnel> xTunnel (xFrame->getController(), UNO_QUERY); + if (xTunnel.is()) + { + ::sd::DrawController* pController = reinterpret_cast<sd::DrawController*>( + xTunnel->getSomething(sd::DrawController::getUnoTunnelId())); + if (pController != NULL) + pBase = pController->GetViewShellBase(); + } + if (pBase == NULL) + throw RuntimeException(A2S("can not get ViewShellBase for frame"), NULL); + + // Get bindings from given arguments. + const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0))); + SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue); + + // Create a framework view. + ::Window* pControl = NULL; + css::ui::LayoutSize aLayoutSize (-1,-1,-1); + +#define EndsWith(s,t) s.endsWithAsciiL(t,strlen(t)) + if (EndsWith(rsUIElementResourceURL, gsResourceNameCustomAnimations)) + pControl = new CustomAnimationPanel(pParentWindow, *pBase); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameLayouts)) + pControl = new LayoutMenu(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameAllMasterPages)) + pControl = AllMasterPagesSelector::Create(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameRecentMasterPages)) + pControl = RecentMasterPagesSelector::Create(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameUsedMasterPages)) + pControl = CurrentMasterPagesSelector::Create(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameSlideTransitions)) + pControl = new SlideTransitionPanel(pParentWindow, *pBase); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameTableDesign)) + pControl = createTableDesignPanel(pParentWindow, *pBase); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameNavigator)) + pControl = new NavigatorWrapper(pParentWindow, *pBase, pBindings); +#undef EndsWith + + if (pControl == NULL) + throw lang::IllegalArgumentException(); + + // Create a wrapper around the control that implements the + // necessary UNO interfaces. + return sfx2::sidebar::SidebarPanelBase::Create( + rsUIElementResourceURL, + xFrame, + pControl, + aLayoutSize); +} + + + + +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/sidebar/PanelFactory.hxx b/sd/source/ui/sidebar/PanelFactory.hxx new file mode 100644 index 000000000000..392b0dc1a0cb --- /dev/null +++ b/sd/source/ui/sidebar/PanelFactory.hxx @@ -0,0 +1,88 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_PANEL_FACTORY_HXX +#define SD_SIDEBAR_PANEL_FACTORY_HXX + +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> +#include <rtl/ref.hxx> +#include "framework/Pane.hxx" + +#include <com/sun/star/ui/XUIElementFactory.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/lang/XInitialization.hpp> + +#include <map> +#include <boost/noncopyable.hpp> +#include <boost/shared_ptr.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sd { + class ViewShellBase; +} + +namespace sd { namespace sidebar { + +namespace +{ + typedef ::cppu::WeakComponentImplHelper1 < + css::ui::XUIElementFactory + > PanelFactoryInterfaceBase; +} + + +class PanelFactory + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public PanelFactoryInterfaceBase +{ +public: + static ::rtl::OUString SAL_CALL getImplementationName (void); + static cssu::Reference<cssu::XInterface> SAL_CALL createInstance ( + const cssu::Reference<css::lang::XMultiServiceFactory>& rxFactory); + static cssu::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames (void); + + PanelFactory (const cssu::Reference<cssu::XComponentContext>& rxContext); + virtual ~PanelFactory (void); + + virtual void SAL_CALL disposing (void); + + + // XUIElementFactory + + cssu::Reference<css::ui::XUIElement> SAL_CALL createUIElement ( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException); +}; + + +} } // end of namespace sd::sidebar + +#endif diff --git a/sd/source/ui/toolpanel/controls/PreviewValueSet.cxx b/sd/source/ui/sidebar/PreviewValueSet.cxx index 2604db18b122..556073f242e5 100644 --- a/sd/source/ui/toolpanel/controls/PreviewValueSet.cxx +++ b/sd/source/ui/sidebar/PreviewValueSet.cxx @@ -19,21 +19,17 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "PreviewValueSet.hxx" #include <vcl/image.hxx> -#include "taskpane/TaskPaneTreeNode.hxx" -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { -PreviewValueSet::PreviewValueSet (TreeNode* pParent) - : ValueSet (pParent->GetWindow(), WB_TABSTOP), - mpParent(pParent), + +PreviewValueSet::PreviewValueSet (::Window* pParent) + : ValueSet (pParent, WB_TABSTOP), maPreviewSize(10,10), mnBorderWidth(3), mnBorderHeight(3), @@ -44,9 +40,7 @@ PreviewValueSet::PreviewValueSet (TreeNode* pParent) & ~(WB_ITEMBORDER)// | WB_MENUSTYLEVALUESET) // | WB_FLATVALUESET); ); - SetColCount(2); - // SetLineCount(1); SetExtraSpacing (2); } @@ -89,18 +83,6 @@ void PreviewValueSet::MouseButtonDown (const MouseEvent& rEvent) -void PreviewValueSet::Paint (const Rectangle& rRect) -{ - SetBackground (GetSettings().GetStyleSettings().GetWindowColor()); - - ValueSet::Paint (rRect); - - SetBackground (Wallpaper()); -} - - - - void PreviewValueSet::Resize (void) { ValueSet::Resize (); @@ -115,26 +97,6 @@ void PreviewValueSet::Resize (void) -void PreviewValueSet::Command (const CommandEvent& rEvent) -{ - switch (rEvent.GetCommand()) - { - case COMMAND_CONTEXTMENU: - { - CommandEvent aNonConstEventCopy (rEvent); - maContextMenuCallback.Call(&aNonConstEventCopy); - } - break; - - default: - ValueSet::Command(rEvent); - break; - } -} - - - - void PreviewValueSet::Rearrange (bool bForceRequestResize) { sal_uInt16 nOldColumnCount (GetColCount()); @@ -146,19 +108,6 @@ void PreviewValueSet::Rearrange (bool bForceRequestResize) SetColCount(nNewColumnCount); SetLineCount(nNewRowCount); - - if (bForceRequestResize - || nOldColumnCount != nNewColumnCount - || nOldRowCount != nNewRowCount) - mpParent->RequestResize(); -} - - - - -void PreviewValueSet::SetContextMenuCallback (const Link& rLink) -{ - maContextMenuCallback = rLink; } @@ -233,4 +182,4 @@ sal_Int32 PreviewValueSet::GetPreferredHeight (sal_Int32 nWidth) -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/PreviewValueSet.hxx b/sd/source/ui/sidebar/PreviewValueSet.hxx index bf0bdfa9a3eb..5a0c55c18d10 100644 --- a/sd/source/ui/toolpanel/controls/PreviewValueSet.hxx +++ b/sd/source/ui/sidebar/PreviewValueSet.hxx @@ -19,19 +19,13 @@ * *************************************************************/ - - -#ifndef SD_TOOLPANEL_PREVIEW_VALUE_SET_HXX -#define SD_TOOLPANEL_PREVIEW_VALUE_SET_HXX +#ifndef SD_SIDEBAR_PANELS_PREVIEW_VALUE_SET_HXX +#define SD_SIDEBAR_PANELS_PREVIEW_VALUE_SET_HXX #include <svtools/valueset.hxx> -namespace sd { namespace toolpanel { -class TreeNode; -} } - -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** Adapt the svtools valueset to the needs of the master page controlls. @@ -40,21 +34,12 @@ class PreviewValueSet : public ValueSet { public: - PreviewValueSet (TreeNode* pParent); + PreviewValueSet (::Window* pParent); ~PreviewValueSet (void); void SetRightMouseClickHandler (const Link& rLink); - virtual void Paint (const Rectangle& rRect); virtual void Resize (void); - /** When a request for the display of a context menu is made to this - method then that request is forwarded via the ContextMenuCallback. - This way the owning class can handle the context menu without having - to be derived from this class. - Use SetContextMenuCallback to set or rest the handler. - */ - virtual void Command (const CommandEvent& rEvent); - void SetPreviewSize (const Size& rSize); sal_Int32 GetPreferredWidth (sal_Int32 nHeight); @@ -65,19 +50,11 @@ public: */ void Rearrange (bool bForceRequestResize = false); - /** Set the callback function to which requests for context menus are - forewarded. Call with an empty Link to reset the callback - function. - */ - void SetContextMenuCallback (const Link& rLink); - protected: virtual void MouseButtonDown (const MouseEvent& rEvent); private: Link maRightMouseClickHandler; - Link maContextMenuCallback; - TreeNode* mpParent; Size maPreviewSize; const int mnBorderWidth; const int mnBorderHeight; @@ -87,6 +64,6 @@ private: sal_uInt16 CalculateRowCount (sal_uInt16 nColumnCount) const; }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/RecentMasterPagesSelector.cxx b/sd/source/ui/sidebar/RecentMasterPagesSelector.cxx index 87cffd4bd33a..c107a5e43384 100644 --- a/sd/source/ui/toolpanel/controls/RecentMasterPagesSelector.cxx +++ b/sd/source/ui/sidebar/RecentMasterPagesSelector.cxx @@ -19,34 +19,61 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "RecentMasterPagesSelector.hxx" -#include "PreviewValueSet.hxx" +#include "ViewShellBase.hxx" #include "RecentlyUsedMasterPages.hxx" #include "MasterPageContainerProviders.hxx" #include "MasterPageObserver.hxx" +#include "SidebarShellManager.hxx" #include "sdpage.hxx" #include "drawdoc.hxx" #include "app.hrc" +#include "helpids.h" + #include <vcl/bitmap.hxx> #include <tools/color.hxx> -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { + + +MasterPagesSelector* RecentMasterPagesSelector::Create ( + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) +{ + SdDrawDocument* pDocument = rViewShellBase.GetDocument(); + if (pDocument == NULL) + return NULL; + + ::boost::shared_ptr<MasterPageContainer> pContainer (new MasterPageContainer()); + + MasterPagesSelector* pSelector( + new RecentMasterPagesSelector ( + pParent, + *pDocument, + rViewShellBase, + pContainer, + rxSidebar)); + pSelector->LateInit(); + pSelector->SetHelpId(HID_SD_TASK_PANE_PREVIEW_RECENT); + + return pSelector; +} + + RecentMasterPagesSelector::RecentMasterPagesSelector ( - TreeNode* pParent, + ::Window* pParent, SdDrawDocument& rDocument, ViewShellBase& rBase, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer) - : MasterPagesSelector (pParent, rDocument, rBase, rpContainer) + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) + : MasterPagesSelector (pParent, rDocument, rBase, rpContainer, rxSidebar) { - SetName (String(RTL_CONSTASCII_USTRINGPARAM("RecentMasterPagesSelector"))); } @@ -125,31 +152,30 @@ void RecentMasterPagesSelector::AssignMasterPageToPageList ( SdPage* pMasterPage, const ::boost::shared_ptr<std::vector<SdPage*> >& rpPageList) { - sal_uInt16 nSelectedItemId = mpPageSet->GetSelectItemId(); + sal_uInt16 nSelectedItemId = PreviewValueSet::GetSelectItemId(); MasterPagesSelector::AssignMasterPageToPageList(pMasterPage, rpPageList); // Restore the selection. - if (mpPageSet->GetItemCount() > 0) + if (PreviewValueSet::GetItemCount() > 0) { - if (mpPageSet->GetItemCount() >= nSelectedItemId) - mpPageSet->SelectItem(nSelectedItemId); + if (PreviewValueSet::GetItemCount() >= nSelectedItemId) + PreviewValueSet::SelectItem(nSelectedItemId); else - mpPageSet->SelectItem(mpPageSet->GetItemCount()); + PreviewValueSet::SelectItem(PreviewValueSet::GetItemCount()); } } -void RecentMasterPagesSelector::GetState (SfxItemSet& rItemSet) +void RecentMasterPagesSelector::ProcessPopupMenu (Menu& rMenu) { - MasterPagesSelector::GetState (rItemSet); - if (rItemSet.GetItemState(SID_TP_EDIT_MASTER) == SFX_ITEM_AVAILABLE) - rItemSet.DisableItem (SID_TP_EDIT_MASTER); + if (rMenu.GetItemPos(SID_TP_EDIT_MASTER) != MENU_ITEM_NOTFOUND) + rMenu.EnableItem(SID_TP_EDIT_MASTER, sal_False); } -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/RecentMasterPagesSelector.hxx b/sd/source/ui/sidebar/RecentMasterPagesSelector.hxx index c5c2dd5b798b..da9bcc90fbd5 100644 --- a/sd/source/ui/toolpanel/controls/RecentMasterPagesSelector.hxx +++ b/sd/source/ui/sidebar/RecentMasterPagesSelector.hxx @@ -21,12 +21,12 @@ -#ifndef SD_TOOLPANEL_CONTROLS_RECENT_MASTER_PAGES_SELECTOR_HXX -#define SD_TOOLPANEL_CONTROLS_RECENT_MASTER_PAGES_SELECTOR_HXX +#ifndef SD_SIDEBAR_PANELS_RECENT_MASTER_PAGES_SELECTOR_HXX +#define SD_SIDEBAR_PANELS_RECENT_MASTER_PAGES_SELECTOR_HXX #include "MasterPagesSelector.hxx" -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** Show the recently used master pages (that are not currently used). @@ -35,22 +35,16 @@ class RecentMasterPagesSelector : public MasterPagesSelector { public: - RecentMasterPagesSelector ( - TreeNode* pParent, - SdDrawDocument& rDocument, - ViewShellBase& rBase, - const ::boost::shared_ptr<MasterPageContainer>& rpContainer); - virtual ~RecentMasterPagesSelector (void); - - virtual void LateInit (void); - - virtual void GetState (SfxItemSet& rItemSet); + static MasterPagesSelector* Create ( + ::Window* pParent, + ViewShellBase& rViewShellBase, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); protected: DECL_LINK(MasterPageListListener, void*); virtual void Fill (ItemList& rItemList); - using sd::toolpanel::controls::MasterPagesSelector::Fill; + using sd::sidebar::MasterPagesSelector::Fill; /** Forward this call to the base class but save and restore the currently selected item. @@ -65,8 +59,21 @@ protected: virtual void AssignMasterPageToPageList ( SdPage* pMasterPage, const ::boost::shared_ptr<std::vector<SdPage*> >& rpPageList); + + virtual void ProcessPopupMenu (Menu& rMenu); + +private: + RecentMasterPagesSelector ( + ::Window* pParent, + SdDrawDocument& rDocument, + ViewShellBase& rBase, + const ::boost::shared_ptr<MasterPageContainer>& rpContainer, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + virtual ~RecentMasterPagesSelector (void); + + virtual void LateInit (void); }; -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/toolpanel/controls/RecentlyUsedMasterPages.cxx b/sd/source/ui/sidebar/RecentlyUsedMasterPages.cxx index f56477b8804c..9c71f68f4b10 100644 --- a/sd/source/ui/toolpanel/controls/RecentlyUsedMasterPages.cxx +++ b/sd/source/ui/sidebar/RecentlyUsedMasterPages.cxx @@ -19,9 +19,6 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "RecentlyUsedMasterPages.hxx" @@ -78,13 +75,13 @@ class Descriptor public: ::rtl::OUString msURL; ::rtl::OUString msName; - ::sd::toolpanel::controls::MasterPageContainer::Token maToken; + ::sd::sidebar::MasterPageContainer::Token maToken; Descriptor (const ::rtl::OUString& rsURL, const ::rtl::OUString& rsName) : msURL(rsURL), msName(rsName), - maToken(::sd::toolpanel::controls::MasterPageContainer::NIL_TOKEN) + maToken(::sd::sidebar::MasterPageContainer::NIL_TOKEN) {} - Descriptor (::sd::toolpanel::controls::MasterPageContainer::Token aToken, + Descriptor (::sd::sidebar::MasterPageContainer::Token aToken, const ::rtl::OUString& rsURL, const ::rtl::OUString& rsName) : msURL(rsURL), msName(rsName), @@ -92,11 +89,11 @@ public: {} class TokenComparator { public: - TokenComparator(::sd::toolpanel::controls::MasterPageContainer::Token aToken) + TokenComparator(::sd::sidebar::MasterPageContainer::Token aToken) : maToken(aToken) {} bool operator () (const Descriptor& rDescriptor) { return maToken==rDescriptor.maToken; } - private: ::sd::toolpanel::controls::MasterPageContainer::Token maToken; + private: ::sd::sidebar::MasterPageContainer::Token maToken; }; }; @@ -105,7 +102,7 @@ public: -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { class RecentlyUsedMasterPages::MasterPageList : public ::std::vector<Descriptor> { @@ -494,4 +491,4 @@ void RecentlyUsedMasterPages::ResolveList (void) } -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/controls/RecentlyUsedMasterPages.hxx b/sd/source/ui/sidebar/RecentlyUsedMasterPages.hxx index 22439c1c45a5..936c2ef2e1a0 100644 --- a/sd/source/ui/toolpanel/controls/RecentlyUsedMasterPages.hxx +++ b/sd/source/ui/sidebar/RecentlyUsedMasterPages.hxx @@ -21,8 +21,8 @@ -#ifndef SD_TOOLPANEL_CONTROLS_RECENTLY_USED_MASTER_PAGES_HXX -#define SD_TOOLPANEL_CONTROLS_RECENTLY_USED_MASTER_PAGES_HXX +#ifndef SD_SIDEBAR_PANELS_RECENTLY_USED_MASTER_PAGES_HXX +#define SD_SIDEBAR_PANELS_RECENTLY_USED_MASTER_PAGES_HXX #include "tools/SdGlobalResourceContainer.hxx" #include <osl/mutex.hxx> @@ -42,7 +42,7 @@ class MasterPageObserverEvent; } -namespace sd { namespace toolpanel { namespace controls { +namespace sd { namespace sidebar { /** This singleton holds a list of the most recently used master pages. */ @@ -119,6 +119,6 @@ private: -} } } // end of namespace ::sd::toolpanel::controls +} } // end of namespace sd::sidebar #endif diff --git a/sd/source/ui/sidebar/SidebarFactory.cxx b/sd/source/ui/sidebar/SidebarFactory.cxx new file mode 100644 index 000000000000..7eb2b6b65b30 --- /dev/null +++ b/sd/source/ui/sidebar/SidebarFactory.cxx @@ -0,0 +1,240 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "SidebarFactory.hxx" +#include "framework/Pane.hxx" +#include "ViewShellBase.hxx" +#include "DrawController.hxx" +#include "LayoutMenu.hxx" +#include "CurrentMasterPagesSelector.hxx" +#include "RecentMasterPagesSelector.hxx" +#include "AllMasterPagesSelector.hxx" +#include "CustomAnimationPanel.hxx" +#include "TableDesignPanel.hxx" +#include "SlideTransitionPanel.hxx" + +#include <sfx2/viewfrm.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <vcl/window.hxx> +#include <toolkit/helper/vclunohelper.hxx> + +using namespace css; +using namespace cssu; +using namespace ::sd::framework; +using ::rtl::OUString; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +namespace sd { namespace sidebar { + +namespace { + /** Note that these names have to be identical to (the tail of) + the entries in officecfg/registry/data/org/openoffice/Office/Impress.xcu + for the TaskPanelFactory. + */ + const static char* gsResourceNameCustomAnimations = "/CustomAnimations"; + const static char* gsResourceNameLayouts = "/Layouts"; + const static char* gsResourceNameAllMasterPages = "/AllMasterPages"; + const static char* gsResourceNameRecentMasterPages = "/RecentMasterPages"; + const static char* gsResourceNameUsedMasterPages = "/UsedMasterPages"; + const static char* gsResourceNameSlideTransitions = "/SlideTransitions"; + const static char* gsResourceNameTableDesign = "/TableDesign"; +} + +Reference<lang::XEventListener> mxControllerDisposeListener; + + + +// ----- Service functions ---------------------------------------------------- + +Reference<XInterface> SAL_CALL SidebarFactory_createInstance ( + const Reference<XComponentContext>& rxContext) +{ + return Reference<XInterface>(static_cast<XWeak*>(new SidebarFactory(rxContext))); +} + + + + +::rtl::OUString SidebarFactory_getImplementationName (void) throw(RuntimeException) +{ + return ::rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.Draw.framework.SidebarFactory")); +} + + + + +Sequence<rtl::OUString> SAL_CALL SidebarFactory_getSupportedServiceNames (void) + throw (RuntimeException) +{ + static const ::rtl::OUString sServiceName( + ::rtl::OUString::createFromAscii("com.sun.star.drawing.framework.SidebarFactory")); + return Sequence<rtl::OUString>(&sServiceName, 1); +} + + + + +//----- SidebarFactory -------------------------------------------------------- + +SidebarFactory::SidebarFactory( + const css::uno::Reference<css::uno::XComponentContext>& rxContext) + : SidebarFactoryInterfaceBase(m_aMutex) +{ +} + + + + +SidebarFactory::~SidebarFactory (void) +{ +} + + + + +void SAL_CALL SidebarFactory::disposing (void) +{ +} + + + + +// XInitialization + +void SAL_CALL SidebarFactory::initialize (const Sequence<Any>& aArguments) + throw (Exception, RuntimeException) +{ +} + + + + +// XUIElementFactory + +Reference<ui::XUIElement> SAL_CALL SidebarFactory::createUIElement ( + const ::rtl::OUString& rsUIElementResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException) +{ + // Process arguments. + const ::comphelper::NamedValueCollection aArguments (rArguments); + Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); + Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); + Reference<ui::XSidebar> xSidebar (aArguments.getOrDefault("Sidebar", Reference<ui::XSidebar>())); + + // Throw exceptions when the arguments are not as expected. + ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); + if ( ! xParentWindow.is() || pParentWindow==NULL) + throw RuntimeException( + A2S("SidebarFactory::createUIElement called without ParentWindow"), + NULL); + if ( ! xFrame.is()) + throw RuntimeException( + A2S("SidebarFactory::createUIElement called without XFrame"), + NULL); + + // Tunnel through the controller to obtain a ViewShellBase. + ViewShellBase* pBase = NULL; + Reference<lang::XUnoTunnel> xTunnel (xFrame->getController(), UNO_QUERY); + if (xTunnel.is()) + { + ::sd::DrawController* pController = reinterpret_cast<sd::DrawController*>( + xTunnel->getSomething(sd::DrawController::getUnoTunnelId())); + if (pController != NULL) + pBase = pController->GetViewShellBase(); + } + if (pBase == NULL) + throw RuntimeException(A2S("can not get ViewShellBase for frame"), NULL); + + // Create a framework view. + ::Window* pControl = NULL; + +#define EndsWith(s,t) s.endsWithAsciiL(t,strlen(t)) + if (EndsWith(rsUIElementResourceURL, gsResourceNameCustomAnimations)) + pControl = new CustomAnimationPanel(pParentWindow, *pBase); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameLayouts)) + pControl = new LayoutMenu(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameAllMasterPages)) + pControl = AllMasterPagesSelector::Create(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameRecentMasterPages)) + pControl = RecentMasterPagesSelector::Create(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameUsedMasterPages)) + pControl = CurrentMasterPagesSelector::Create(pParentWindow, *pBase, xSidebar); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameSlideTransitions)) + pControl = new SlideTransitionPanel(pParentWindow, *pBase); + else if (EndsWith(rsUIElementResourceURL, gsResourceNameTableDesign)) + pControl = new TableDesignPanel(pParentWindow, *pBase); +#undef EndsWith + + if (pControl == NULL) + throw lang::IllegalArgumentException(); + + // Create a wrapper around pane and view and return it as + // XUIElement. + Reference<ui::XUIElement> xUIElement; + try + { + xUIElement.set( + sfx2::sidebar::SidebarPanelBase::Create( + rsUIElementResourceURL, + xFrame, + pControl, + ui::LayoutSize(-1,-1,-1))); + } + catch(Exception& rException) + { + // Creation of XUIElement failed. mxUIElement remains empty. + } + + Reference<lang::XComponent> xComponent (xUIElement, UNO_QUERY); + if (xComponent.is()) + xComponent->addEventListener(this); + + return xUIElement; +} + + + + +void SAL_CALL SidebarFactory::disposing (const ::css::lang::EventObject& rEvent) + throw(cssu::RuntimeException) +{ + /* + if (mpImplementation + && rEvent.Source == mpImplementation->mxUIElement) + { + mpImplementation->mxUIElement.clear(); + } + */ +} + + + + +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/sidebar/SidebarFactory.hxx b/sd/source/ui/sidebar/SidebarFactory.hxx new file mode 100644 index 000000000000..0b4ae9542bf6 --- /dev/null +++ b/sd/source/ui/sidebar/SidebarFactory.hxx @@ -0,0 +1,120 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_FACTORY_HXX +#define SD_SIDEBAR_FACTORY_HXX + +#include <cppuhelper/compbase4.hxx> +#include <cppuhelper/basemutex.hxx> +#include <rtl/ref.hxx> +#include "framework/Pane.hxx" + +#include <com/sun/star/ui/XUIElementFactory.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/lang/XInitialization.hpp> + +#include <map> +#include <boost/noncopyable.hpp> +#include <boost/shared_ptr.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sd { + class ViewShellBase; +} + +namespace sd { namespace sidebar { + +namespace +{ + typedef ::cppu::WeakComponentImplHelper3 < + css::lang::XInitialization, + css::ui::XUIElementFactory, + css::lang::XEventListener + > SidebarFactoryInterfaceBase; +} + + +/** This factory creates both XUIElements (for sidebar panels) and + a drawing framework pane. + + The drawing framework pane is a container for the SidebarViewShell + which is necessary to run the legacy implementations of the task + pane panels. + + Control and information flow is like this: + + When one of the old task panels is requested to be displayed in + the sidebar this factory is called for + XUIElementFactory::createUIElement(). + One of the arguments, the window, is then exported into the + drawing framework as pane. After this the drawing framework is + used to create the SidebarViewShell (once known as + TaskPaneViewShell or ToolPanelViewShell) and the requested panel. +*/ +class SidebarFactory + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public SidebarFactoryInterfaceBase +{ +public: + static ::rtl::OUString SAL_CALL getImplementationName (void); + static cssu::Reference<cssu::XInterface> SAL_CALL createInstance ( + const cssu::Reference<css::lang::XMultiServiceFactory>& rxFactory); + static cssu::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames (void); + + SidebarFactory (const cssu::Reference<cssu::XComponentContext>& rxContext); + virtual ~SidebarFactory (void); + + virtual void SAL_CALL disposing (void); + + + // XInitialization + + virtual void SAL_CALL initialize( + const css::uno::Sequence<css::uno::Any>& aArguments) + throw (css::uno::Exception, css::uno::RuntimeException); + + + // XUIElementFactory + + cssu::Reference<css::ui::XUIElement> SAL_CALL createUIElement ( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException); + + + // XEventListener + + virtual void SAL_CALL disposing (const ::css::lang::EventObject& rEvent) + throw(cssu::RuntimeException); +}; + + +} } // end of namespace sd::sidebar + +#endif diff --git a/sd/source/ui/toolpanel/TaskPaneFocusManager.hxx b/sd/source/ui/sidebar/SidebarFocusManager.hxx index c77b5a96126d..c77b5a96126d 100644 --- a/sd/source/ui/toolpanel/TaskPaneFocusManager.hxx +++ b/sd/source/ui/sidebar/SidebarFocusManager.hxx diff --git a/sd/source/ui/toolpanel/TaskPaneShellManager.cxx b/sd/source/ui/sidebar/SidebarShellManager.cxx index fe3ef0ba80ab..ffecd014c5f9 100644 --- a/sd/source/ui/toolpanel/TaskPaneShellManager.cxx +++ b/sd/source/ui/sidebar/SidebarShellManager.cxx @@ -19,12 +19,9 @@ * *************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" -#include "TaskPaneShellManager.hxx" +#include "SidebarShellManager.hxx" #include "ViewShellManager.hxx" #include <tools/diagnose_ex.h> @@ -32,9 +29,9 @@ #include <algorithm> -namespace sd { namespace toolpanel { +namespace sd { namespace sidebar { -TaskPaneShellManager::TaskPaneShellManager ( +SidebarShellManager::SidebarShellManager ( const ::boost::shared_ptr<ViewShellManager>& rpViewShellManager, const ViewShell& rViewShell) : mpViewShellManager(rpViewShellManager), @@ -46,7 +43,7 @@ TaskPaneShellManager::TaskPaneShellManager ( -TaskPaneShellManager::~TaskPaneShellManager (void) +SidebarShellManager::~SidebarShellManager (void) { while ( ! maSubShells.empty()) RemoveSubShell(maSubShells.begin()->second.mpShell); @@ -55,7 +52,7 @@ TaskPaneShellManager::~TaskPaneShellManager (void) -SfxShell* TaskPaneShellManager::CreateShell( ShellId nId, ::Window* , FrameView* ) +SfxShell* SidebarShellManager::CreateShell( ShellId nId, ::Window* , FrameView* ) { SubShells::const_iterator iShell (maSubShells.find(nId)); if (iShell != maSubShells.end()) @@ -67,12 +64,12 @@ SfxShell* TaskPaneShellManager::CreateShell( ShellId nId, ::Window* , FrameView* -void TaskPaneShellManager::ReleaseShell (SfxShell* ) +void SidebarShellManager::ReleaseShell (SfxShell* ) { // Nothing to do. } -void TaskPaneShellManager::AddSubShell ( +void SidebarShellManager::AddSubShell ( ShellId nId, SfxShell* pShell, ::Window* pWindow) @@ -82,7 +79,7 @@ void TaskPaneShellManager::AddSubShell ( maSubShells[nId] = ShellDescriptor(pShell,pWindow); if (pWindow != NULL) { - pWindow->AddEventListener(LINK(this,TaskPaneShellManager,WindowCallback)); + pWindow->AddEventListener(LINK(this,SidebarShellManager,WindowCallback)); if (pWindow->IsReallyVisible()) mpViewShellManager->ActivateSubShell(mrViewShell, nId); } @@ -94,13 +91,13 @@ void TaskPaneShellManager::AddSubShell ( -void TaskPaneShellManager::RemoveSubShell (const ShellId i_nShellId) +void SidebarShellManager::RemoveSubShell (const ShellId i_nShellId) { SubShells::iterator pos = maSubShells.find( i_nShellId ); ENSURE_OR_RETURN_VOID( pos != maSubShells.end(), "no shell for this ID" ); if ( pos->second.mpWindow != NULL ) { - pos->second.mpWindow->RemoveEventListener( LINK( this, TaskPaneShellManager, WindowCallback ) ); + pos->second.mpWindow->RemoveEventListener( LINK( this, SidebarShellManager, WindowCallback ) ); } mpViewShellManager->DeactivateSubShell( mrViewShell, pos->first ); maSubShells.erase( pos ); @@ -109,7 +106,7 @@ void TaskPaneShellManager::RemoveSubShell (const ShellId i_nShellId) -void TaskPaneShellManager::RemoveSubShell (const SfxShell* pShell) +void SidebarShellManager::RemoveSubShell (const SfxShell* pShell) { if (pShell != NULL) { @@ -119,7 +116,7 @@ void TaskPaneShellManager::RemoveSubShell (const SfxShell* pShell) { if (iShell->second.mpWindow != NULL) iShell->second.mpWindow->RemoveEventListener( - LINK(this,TaskPaneShellManager,WindowCallback)); + LINK(this,SidebarShellManager,WindowCallback)); mpViewShellManager->DeactivateSubShell(mrViewShell,iShell->first); maSubShells.erase(iShell); break; @@ -130,7 +127,7 @@ void TaskPaneShellManager::RemoveSubShell (const SfxShell* pShell) -void TaskPaneShellManager::MoveToTop (SfxShell* pShell) +void SidebarShellManager::MoveToTop (SfxShell* pShell) { SubShells::const_iterator iShell; for (iShell=maSubShells.begin(); iShell!=maSubShells.end(); ++iShell) @@ -146,7 +143,7 @@ void TaskPaneShellManager::MoveToTop (SfxShell* pShell) -IMPL_LINK(TaskPaneShellManager, WindowCallback, VclWindowEvent*, pEvent) +IMPL_LINK(SidebarShellManager, WindowCallback, VclWindowEvent*, pEvent) { if (pEvent != NULL) { @@ -176,4 +173,4 @@ IMPL_LINK(TaskPaneShellManager, WindowCallback, VclWindowEvent*, pEvent) } -} } // end of namespace ::sd::toolpanel +} } // end of namespace ::sd::sidebar diff --git a/sd/source/ui/toolpanel/TaskPaneShellManager.hxx b/sd/source/ui/sidebar/SidebarShellManager.hxx index 5f34ed1fd280..809f8ecf883e 100644 --- a/sd/source/ui/toolpanel/TaskPaneShellManager.hxx +++ b/sd/source/ui/sidebar/SidebarShellManager.hxx @@ -21,8 +21,8 @@ -#ifndef SD_TOOLPANEL_TASK_PANE_SHELL_MANAGER_HXX -#define SD_TOOLPANEL_TASK_PANE_SHELL_MANAGER_HXX +#ifndef SD_SIDEBAR_SHELL_MANAGER_HXX +#define SD_SIDEBAR_SHELL_MANAGER_HXX #include "ShellFactory.hxx" #include "ViewShellManager.hxx" @@ -37,7 +37,7 @@ namespace sd { class ViewShell; } -namespace sd { namespace toolpanel { +namespace sd { namespace sidebar { /** The TaskPaneShellManager implements the ViewShellManager::ShellFactory interface. However, it does not create or delete shells. It only @@ -45,17 +45,17 @@ namespace sd { namespace toolpanel { ToolPanelViewShell. Life time control of the sub shells is managed by the sub shells themselves. */ -class TaskPaneShellManager +class SidebarShellManager : public ShellFactory<SfxShell> { public: /** Create a shell manager that manages the stacked shells for the given view shell. It works together with the given view shell manager. */ - TaskPaneShellManager ( + SidebarShellManager ( const ::boost::shared_ptr<ViewShellManager>& rpViewShellManager, const ViewShell& rViewShell); - ~TaskPaneShellManager (void); + ~SidebarShellManager (void); /** Return the requested sub shell. @param nId @@ -112,6 +112,6 @@ private: SubShells maSubShells; }; -} } // end of namespace ::sd::toolpanel +} } // end of namespace ::sd::sidebar #endif diff --git a/sd/source/ui/sidebar/SlideTransitionPanel.cxx b/sd/source/ui/sidebar/SlideTransitionPanel.cxx new file mode 100644 index 000000000000..c23ebc135c7c --- /dev/null +++ b/sd/source/ui/sidebar/SlideTransitionPanel.cxx @@ -0,0 +1,76 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "SlideTransitionPanel.hxx" + +#include "ViewShellBase.hxx" + + +namespace sd { + extern ::Window* createSlideTransitionPanel (::Window* pParent, ViewShellBase& rBase); + extern sal_Int32 getSlideTransitionPanelMinimumHeight (::Window* pParent); +} + + + + +namespace sd { namespace sidebar { + + +SlideTransitionPanel::SlideTransitionPanel ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) + : PanelBase(pParentWindow, rViewShellBase) +{ +#ifdef DEBUG + SetText(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sd:SlideTransitionPanel"))); +#endif +} + + + + +SlideTransitionPanel::~SlideTransitionPanel (void) +{ +} + + + + +::Window* SlideTransitionPanel::CreateWrappedControl ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) +{ + return createSlideTransitionPanel(pParentWindow, rViewShellBase); +} + + + + +css::ui::LayoutSize SlideTransitionPanel::GetHeightForWidth (const sal_Int32 nWidth) +{ + const sal_Int32 nMinimumHeight(getSlideTransitionPanelMinimumHeight(mpWrappedControl.get())); + return css::ui::LayoutSize(nMinimumHeight,-1, nMinimumHeight); +} + +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/toolpanel/ControlList.hxx b/sd/source/ui/sidebar/SlideTransitionPanel.hxx index e6061d1e7b8a..f3843bc26b14 100644 --- a/sd/source/ui/toolpanel/ControlList.hxx +++ b/sd/source/ui/sidebar/SlideTransitionPanel.hxx @@ -20,36 +20,32 @@ *************************************************************/ +#ifndef SD_SIDEBAR_PANELS_SLIDE_TRANSITION_PANEL_HXX +#define SD_SIDEBAR_PANELS_SLIDE_TRANSITION_PANEL_HXX -#ifndef SD_TOOLPANEL_CONTROL_LIST_HXX -#define SD_TOOLPANEL_CONTROL_LIST_HXX +#include "PanelBase.hxx" -#include "ConstrainedIterator.hxx" -#include "ConstrainedIterator.cxx" -#include "TitledControl.hxx" +namespace sd { namespace sidebar { -#include <vector> - -namespace sd { namespace toolpanel { - - -typedef ::std::vector<TitledControl*> ControlList; -typedef ConstrainedIterator<ControlList> ControlIterator; - - -class VisibilityConstraint - : public Constraint<ControlList> +class SlideTransitionPanel + : public PanelBase { public: - virtual bool operator() ( - const ControlList& rContainer, - const ControlList::iterator& rIterator) const - { - return (**rIterator).GetWindow()->IsVisible(); - } + SlideTransitionPanel ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase); + virtual ~SlideTransitionPanel (void); + + // ILayoutableWindow + virtual css::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); + +protected: + virtual ::Window* CreateWrappedControl ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase); }; +} } // end of namespace sd::sidebar -} } // end of namespace ::sd::toolpanel #endif diff --git a/sd/source/ui/sidebar/TableDesignPanel.cxx b/sd/source/ui/sidebar/TableDesignPanel.cxx new file mode 100644 index 000000000000..27df5b584a65 --- /dev/null +++ b/sd/source/ui/sidebar/TableDesignPanel.cxx @@ -0,0 +1,73 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sd.hxx" + +#include "TableDesignPanel.hxx" + +#include "ViewShellBase.hxx" + + +namespace sd { + extern ::Window * createTableDesignPanel (::Window* pParent, ViewShellBase& rBase); +} + + +namespace sd { namespace sidebar { + + +TableDesignPanel::TableDesignPanel ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) + : PanelBase(pParentWindow, rViewShellBase) +{ +#ifdef DEBUG + SetText(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sd:TableDesignPanel"))); +#endif +} + + + + +TableDesignPanel::~TableDesignPanel (void) +{ +} + + + + +::Window* TableDesignPanel::CreateWrappedControl ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase) +{ + return createTableDesignPanel(pParentWindow, rViewShellBase); +} + + + + +css::ui::LayoutSize TableDesignPanel::GetHeightForWidth (const sal_Int32 nWidth) +{ + //TODO: make the sizes depend on the font size. + return css::ui::LayoutSize(350,-1, 400); +} + +} } // end of namespace sd::sidebar diff --git a/sd/source/ui/sidebar/TableDesignPanel.hxx b/sd/source/ui/sidebar/TableDesignPanel.hxx new file mode 100644 index 000000000000..75bf411640d3 --- /dev/null +++ b/sd/source/ui/sidebar/TableDesignPanel.hxx @@ -0,0 +1,49 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SD_SIDEBAR_PANELS_TABLE_DESIGN_PANEL_HXX +#define SD_SIDEBAR_PANELS_TABLE_DESIGN_PANEL_HXX + +#include "PanelBase.hxx" + +namespace sd { namespace sidebar { + +class TableDesignPanel + : public PanelBase +{ +public: + TableDesignPanel ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase); + virtual ~TableDesignPanel (void); + + // ILayoutableWindow + virtual css::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); + +protected: + virtual ::Window* CreateWrappedControl ( + ::Window* pParentWindow, + ViewShellBase& rViewShellBase); +}; + +} } // end of namespace sd::sidebar + +#endif diff --git a/sd/source/ui/toolpanel/controls/makefile.mk b/sd/source/ui/sidebar/makefile.mk index 82d3d6c431ee..eb23504bebe1 100644 --- a/sd/source/ui/toolpanel/controls/makefile.mk +++ b/sd/source/ui/sidebar/makefile.mk @@ -21,15 +21,15 @@ -PRJ=..$/..$/..$/.. +PRJ=..$/..$/.. PROJECTPCH=sd PROJECTPCHSOURCE=$(PRJ)$/util$/sd PRJNAME=sd -TARGET=tpcontrols +TARGET=sidebar ENABLE_EXCEPTIONS=TRUE AUTOSEG=true -PRJINC=..$/..$/ ..$/..$/slidesorter +PRJINC=.. # --- Settings ----------------------------------------------------- @@ -41,21 +41,23 @@ PRJINC=..$/..$/ ..$/..$/slidesorter SLOFILES = \ $(SLO)$/AllMasterPagesSelector.obj \ $(SLO)$/CurrentMasterPagesSelector.obj \ + $(SLO)$/CustomAnimationPanel.obj \ $(SLO)$/DocumentHelper.obj \ - $(SLO)$/MasterPageObserver.obj \ - $(SLO)$/MasterPagesPanel.obj \ - $(SLO)$/MasterPagesSelector.obj \ + $(SLO)$/LayoutMenu.obj \ $(SLO)$/MasterPageContainer.obj \ $(SLO)$/MasterPageContainerFiller.obj \ $(SLO)$/MasterPageContainerProviders.obj\ $(SLO)$/MasterPageContainerQueue.obj \ $(SLO)$/MasterPageDescriptor.obj \ + $(SLO)$/MasterPageObserver.obj \ + $(SLO)$/MasterPagesSelector.obj \ + $(SLO)$/NavigatorWrapper.obj \ + $(SLO)$/PanelBase.obj \ + $(SLO)$/PanelFactory.obj \ $(SLO)$/PreviewValueSet.obj \ $(SLO)$/RecentlyUsedMasterPages.obj \ $(SLO)$/RecentMasterPagesSelector.obj \ - $(SLO)$/CustomAnimationPanel.obj \ - $(SLO)$/SlideTransitionPanel.obj \ - $(SLO)$/TableDesignPanel.obj + $(SLO)$/SlideTransitionPanel.obj # --- Tagets ------------------------------------------------------- diff --git a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx index 22d6dcdbd673..2fd7549fdbbd 100644 --- a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx +++ b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx @@ -191,7 +191,8 @@ void SlotManager::FuTemporary (SfxRequest& rRequest) // in the tool pane. if (mrSlideSorter.GetViewShellBase() != NULL) framework::FrameworkHelper::Instance(*mrSlideSorter.GetViewShellBase()) - ->RequestTaskPanel(sd::framework::FrameworkHelper::msSlideTransitionTaskPanelURL); + ->RequestSidebarPanel( + sd::framework::FrameworkHelper::msSlideTransitionTaskPanelURL); rRequest.Ignore (); break; } diff --git a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx b/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx index 0cd00699140f..cec62e8ce11f 100644 --- a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx +++ b/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx @@ -51,6 +51,7 @@ #include "sdresid.hxx" #include "AccessibleSlideSorterView.hxx" #include "DrawDocShell.hxx" +#include "DrawViewShell.hxx" #include "FrameView.hxx" #include "SdUnoSlideView.hxx" #include "ViewShellManager.hxx" @@ -62,7 +63,10 @@ #include <sfx2/bindings.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/request.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> #include <svx/svxids.hrc> +#include <sfx2/sidebar/EnumContext.hxx> +#include <svx/sidebar/ContextChangeEventMultiplexer.hxx> #include <com/sun/star/drawing/framework/XControllerManager.hpp> #include <com/sun/star/drawing/framework/ResourceId.hpp> #include <cppuhelper/bootstrap.hxx> @@ -77,12 +81,14 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; using ::sd::framework::FrameworkHelper; +using ::sfx2::sidebar::EnumContext; namespace sd { namespace slidesorter { SFX_IMPL_INTERFACE(SlideSorterViewShell, SfxShell, SdResId(STR_SLIDESORTERVIEWSHELL)) { + SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId()); } @@ -220,12 +226,11 @@ SlideSorterViewShell* SlideSorterViewShell::GetSlideSorter (ViewShellBase& rBase { SlideSorterViewShell* pViewShell = NULL; - // Test the center, left, and then the right pane for showing a slide sorter. + // Test the center and left pane for showing a slide sorter. ::rtl::OUString aPaneURLs[] = { FrameworkHelper::msCenterPaneURL, FrameworkHelper::msFullScreenPaneURL, FrameworkHelper::msLeftImpressPaneURL, - FrameworkHelper::msRightPaneURL, ::rtl::OUString()}; try @@ -547,6 +552,50 @@ void SlideSorterViewShell::Activate (sal_Bool bIsMDIActivate) ViewShell::Activate(bIsMDIActivate); if (mbIsArrangeGUIElementsPending) ArrangeGUIElements(); + + // Determine and broadcast the context that belongs to the main view shell. + EnumContext::Context eContext = EnumContext::Context_Unknown; + ::boost::shared_ptr<ViewShell> pMainViewShell (GetViewShellBase().GetMainViewShell()); + ViewShell::ShellType eMainViewShellType ( + pMainViewShell + ? pMainViewShell->GetShellType() + : ViewShell::ST_NONE); + switch (eMainViewShellType) + { + case ViewShell::ST_IMPRESS: + eContext = EnumContext::Context_DrawPage; + if (pMainViewShell->ISA(DrawViewShell)) + { + DrawViewShell* pDrawViewShell = static_cast<DrawViewShell*>(pMainViewShell.get()); + if (pDrawViewShell && (pDrawViewShell->GetEditMode()== EM_MASTERPAGE)) + eContext = EnumContext::Context_MasterPage; + } + break; + + case ViewShell::ST_SLIDE_SORTER: + eContext = EnumContext::Context_SlidesorterPage; + break; + + case ViewShell::ST_NOTES: + eContext = EnumContext::Context_NotesPage; + break; + + default: + break; + } + ContextChangeEventMultiplexer::NotifyContextChange( + &GetViewShellBase(), + eContext); +} + + + + +void SlideSorterViewShell::Deactivate (sal_Bool bIsMDIActivate) +{ + ContextChangeEventMultiplexer::NotifyContextChange( + &GetViewShellBase(), + EnumContext::Context_Default); } diff --git a/sd/source/ui/table/TableDesignPane.cxx b/sd/source/ui/table/TableDesignPane.cxx index e49cffbaecdf..3f363d53dd19 100644 --- a/sd/source/ui/table/TableDesignPane.cxx +++ b/sd/source/ui/table/TableDesignPane.cxx @@ -105,7 +105,7 @@ TableDesignPane::TableDesignPane( ::Window* pParent, ViewShellBase& rBase, bool { Window* pControlParent = mbModal ? pParent : this; - mxControls[FL_TABLE_STYLES].reset( new FixedLine( pControlParent, SdResId( FL_TABLE_STYLES + 1 ) ) ); + // mxControls[FL_TABLE_STYLES].reset( new FixedLine( pControlParent, SdResId( FL_TABLE_STYLES + 1 ) ) ); ValueSet* pValueSet = new ValueSet( pControlParent, SdResId( CT_TABLE_STYLES+1 ) ); mxControls[CT_TABLE_STYLES].reset( pValueSet ); @@ -122,7 +122,7 @@ TableDesignPane::TableDesignPane( ::Window* pParent, ViewShellBase& rBase, bool } pValueSet->SetSelectHdl (LINK(this, TableDesignPane, implValueSetHdl)); - mxControls[FL_STYLE_OPTIONS].reset( new FixedLine( pControlParent, SdResId( FL_STYLE_OPTIONS + 1 ) ) ); + // mxControls[FL_STYLE_OPTIONS].reset( new FixedLine( pControlParent, SdResId( FL_STYLE_OPTIONS + 1 ) ) ); sal_uInt16 i; for( i = CB_HEADER_ROW; i <= CB_BANDED_COLUMNS; ++i ) { @@ -132,7 +132,14 @@ TableDesignPane::TableDesignPane( ::Window* pParent, ViewShellBase& rBase, bool } for( i = 0; i < DESIGNPANE_CONTROL_COUNT; i++ ) - mnOrgOffsetY[i] = mxControls[i]->GetPosPixel().Y(); + { + if (mxControls[i]) + mnOrgOffsetY[i] = mxControls[i]->GetPosPixel().Y(); + else if (i > 0) + mnOrgOffsetY[i] = mnOrgOffsetY[i-1]; + else + mnOrgOffsetY[i] = 0; + } // get current controller and initialize listeners try @@ -180,6 +187,60 @@ void TableDesignPane::Resize() updateLayout(); } + + + +LayoutSize TableDesignPane::GetHeightForWidth (const sal_Int32 nWidth) +{ + if ( ! IsVisible() || nWidth<=0) + return LayoutSize(0,0,0); + + // Initialize the height with the offset above and below the value + // set and below the check boxes. + const Point aOffset (LogicToPixel( Point(3,3), MAP_APPFONT)); + sal_Int32 nHeight (3 * aOffset.Y()); + + // Add the height for the check boxes. + nHeight += mnOrgOffsetY[CB_BANDED_COLUMNS] - mnOrgOffsetY[CB_HEADER_ROW] + + mxControls[CB_BANDED_COLUMNS]->GetSizePixel().Height(); + + // Setup minimal and maximal heights that include all check boxes + // and a small or large value set. + const sal_Int32 nMinimalHeight (nHeight+100); + const sal_Int32 nMaximalHeight (nHeight+450); + + // Calculate the number of rows and columns and then add the + // preferred size of the value set. + ValueSet* pValueSet = static_cast< ValueSet* >( mxControls[CT_TABLE_STYLES].get() ); + if (pValueSet->GetItemCount() > 0) + { + Image aImage = pValueSet->GetItemImage(pValueSet->GetItemId(0)); + Size aItemSize = pValueSet->CalcItemSizePixel(aImage.GetSizePixel()); + aItemSize.Width() += 10; + aItemSize.Height() += 10; + + int nColumnCount = (pValueSet->GetSizePixel().Width() - pValueSet->GetScrollWidth()) / aItemSize.Width(); + if (nColumnCount < 1) + nColumnCount = 1; + + int nRowCount = (pValueSet->GetItemCount() + nColumnCount - 1) / nColumnCount; + if (nRowCount < 1) + nRowCount = 1; + + nHeight += nRowCount * aItemSize.Height(); + } + + // Clip the requested height. + if (nHeight<nMinimalHeight) + nHeight = nMinimalHeight; + else if (nHeight>nMaximalHeight) + nHeight = nMaximalHeight; + return LayoutSize(nMinimalHeight, nMaximalHeight, nHeight); +} + + + + // -------------------------------------------------------------------- static SfxBindings* getBindings( ViewShellBase& rBase ) @@ -378,16 +439,19 @@ void TableDesignPane::updateLayout() const long nStylesHeight = aPaneSize.Height() - nOptionsHeight; - // set with of controls to size of pane + // set width of controls to size of pane for( sal_Int32 nId = 0; nId < DESIGNPANE_CONTROL_COUNT; ++nId ) { - Size aSize( mxControls[nId]->GetSizePixel() ); - aSize.Width() = aPaneSize.Width() - aOffset.X() - mxControls[nId]->GetPosPixel().X(); - mxControls[nId]->SetSizePixel( aSize ); - mxControls[nId]->SetPaintTransparent(sal_True); - mxControls[nId]->SetBackground(); + if (mxControls[nId]) + { + Size aSize( mxControls[nId]->GetSizePixel() ); + aSize.Width() = aPaneSize.Width() - aOffset.X() - mxControls[nId]->GetPosPixel().X(); + mxControls[nId]->SetSizePixel( aSize ); + mxControls[nId]->SetPaintTransparent(sal_True); + mxControls[nId]->SetBackground(); + } } - aValueSetSize = Size( pValueSet->GetSizePixel().Width(), nStylesHeight - mxControls[FL_TABLE_STYLES]->GetSizePixel().Height() - mnOrgOffsetY[FL_TABLE_STYLES] ); + aValueSetSize = Size( pValueSet->GetSizePixel().Width(), nStylesHeight ); } else { @@ -449,18 +513,22 @@ void TableDesignPane::updateLayout() // shift show options section down const long nOptionsPos = aPos.Y() + aValueSetSize.Height(); - for( sal_Int32 nId = FL_STYLE_OPTIONS; nId <= CB_BANDED_COLUMNS; ++nId ) + sal_Int32 nMaxY (0); + for( sal_Int32 nId = FL_STYLE_OPTIONS+1; nId <= CB_BANDED_COLUMNS; ++nId ) { - Point aCPos( mxControls[nId]->GetPosPixel() ); - aCPos.X() = ( nId == FL_STYLE_OPTIONS ? 1 : 2 ) * aOffset.X(); - aCPos.Y() = mnOrgOffsetY[nId] + nOptionsPos; - mxControls[nId]->SetPosPixel( aCPos ); + if (mxControls[nId]) + { + Point aCPos( mxControls[nId]->GetPosPixel() ); + aCPos.X() = ( nId == FL_STYLE_OPTIONS ? 1 : 2 ) * aOffset.X(); + aCPos.Y() = mnOrgOffsetY[nId] + nOptionsPos; + mxControls[nId]->SetPosPixel( aCPos ); + const sal_Int32 nBottom (aCPos.Y() + mxControls[nId]->GetSizePixel().Height()); + if (nBottom > nMaxY) + nMaxY = nBottom; + } } } } - - if( !mbModal ) - SetBackground( GetSettings().GetStyleSettings().GetWindowColor() ); } // -------------------------------------------------------------------- diff --git a/sd/source/ui/table/TableDesignPane.hxx b/sd/source/ui/table/TableDesignPane.hxx index dc4c8c2f156d..02d674f0160f 100644 --- a/sd/source/ui/table/TableDesignPane.hxx +++ b/sd/source/ui/table/TableDesignPane.hxx @@ -26,6 +26,7 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/ui/XUIElement.hpp> +#include <com/sun/star/ui/LayoutSize.hpp> #include <com/sun/star/drawing/XDrawView.hpp> #include <com/sun/star/container/XIndexAccess.hpp> @@ -33,6 +34,7 @@ #include <vcl/fixed.hxx> #include <vcl/button.hxx> #include <svtools/valueset.hxx> +#include <sfx2/sidebar/ILayoutableWindow.hxx> #include <boost/scoped_ptr.hpp> @@ -49,7 +51,7 @@ class ViewShellBase; // -------------------------------------------------------------------- -class TableDesignPane : public Control +class TableDesignPane : public Control, public sfx2::sidebar::ILayoutableWindow { public: TableDesignPane( ::Window* pParent, ViewShellBase& rBase, bool bModal ); @@ -61,6 +63,9 @@ public: // Control virtual void Resize(); + // ILayoutableWindow + virtual ::com::sun::star::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); void ApplyOptions(); diff --git a/sd/source/ui/table/TableDesignPane.src b/sd/source/ui/table/TableDesignPane.src index 6e584d2ac59d..afae1bcd1418 100644 --- a/sd/source/ui/table/TableDesignPane.src +++ b/sd/source/ui/table/TableDesignPane.src @@ -30,7 +30,7 @@ Control DLG_TABLEDESIGNPANE DialogControl = TRUE; Border = FALSE; - Size = MAP_APPFONT( 264, 160 ); + Size = MAP_APPFONT( 264, 134 ); Text [ en-US ] = "Table Design"; FixedLine FL_STYLE_OPTIONS+1 @@ -43,7 +43,7 @@ Control DLG_TABLEDESIGNPANE CheckBox CB_HEADER_ROW+1 { - Pos = MAP_APPFONT ( 146, 16 ) ; + Pos = MAP_APPFONT ( 146, 3 ) ; Size = MAP_APPFONT ( 120 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Header Row" ; @@ -51,7 +51,7 @@ Control DLG_TABLEDESIGNPANE CheckBox CB_TOTAL_ROW+1 { - Pos = MAP_APPFONT ( 146, 29 ) ; + Pos = MAP_APPFONT ( 146, 16 ) ; Size = MAP_APPFONT ( 120 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Total Row" ; @@ -59,7 +59,7 @@ Control DLG_TABLEDESIGNPANE CheckBox CB_BANDED_ROWS+1 { - Pos = MAP_APPFONT ( 146, 42 ) ; + Pos = MAP_APPFONT ( 146, 29 ) ; Size = MAP_APPFONT ( 120 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Banded Rows" ; @@ -67,7 +67,7 @@ Control DLG_TABLEDESIGNPANE CheckBox CB_FIRST_COLUMN+1 { - Pos = MAP_APPFONT ( 146, 55 ) ; + Pos = MAP_APPFONT ( 146, 42 ) ; Size = MAP_APPFONT ( 120 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "First Column" ; @@ -75,7 +75,7 @@ Control DLG_TABLEDESIGNPANE CheckBox CB_LAST_COLUMN+1 { - Pos = MAP_APPFONT ( 146, 68 ) ; + Pos = MAP_APPFONT ( 146, 55 ) ; Size = MAP_APPFONT ( 120 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Last Column" ; @@ -83,7 +83,7 @@ Control DLG_TABLEDESIGNPANE CheckBox CB_BANDED_COLUMNS+1 { - Pos = MAP_APPFONT ( 146, 82 ) ; + Pos = MAP_APPFONT ( 146, 68 ) ; Size = MAP_APPFONT ( 120 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Banded Columns" ; @@ -99,7 +99,7 @@ Control DLG_TABLEDESIGNPANE Control CT_TABLE_STYLES+1 { - Pos = MAP_APPFONT ( 6, 14 ) ; + Pos = MAP_APPFONT ( 4, 3 ) ; Size = MAP_APPFONT( 120, 143 ); Border = TRUE ; TabStop = TRUE ; diff --git a/sd/source/ui/table/tablefunction.cxx b/sd/source/ui/table/tablefunction.cxx index b78238337678..69760a93d243 100644 --- a/sd/source/ui/table/tablefunction.cxx +++ b/sd/source/ui/table/tablefunction.cxx @@ -206,7 +206,7 @@ SfxViewShell* pViewShell = GetViewShell(); { // Make the slide transition panel visible (expand it) in the // tool pane. - framework::FrameworkHelper::Instance(GetViewShellBase())->RequestTaskPanel( + framework::FrameworkHelper::Instance(GetViewShellBase())->RequestSidebarPanel( framework::FrameworkHelper::msTableDesignPanelURL); } diff --git a/sd/source/ui/table/tableobjectbar.cxx b/sd/source/ui/table/tableobjectbar.cxx index 60f65856d889..022ef1e32a99 100644 --- a/sd/source/ui/table/tableobjectbar.cxx +++ b/sd/source/ui/table/tableobjectbar.cxx @@ -32,6 +32,7 @@ #include <sfx2/viewfrm.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/msgpool.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svl/whiter.hxx> #include <svl/itempool.hxx> #include <svx/svdomedia.hxx> @@ -104,6 +105,7 @@ TableObjectBar::TableObjectBar( ViewShell* pSdViewShell, ::sd::View* pSdView ) SetRepeatTarget( mpView ); SetHelpId( SD_IF_SDDRAWTABLEOBJECTBAR ); SetName( String( SdResId( RID_DRAW_TABLE_TOOLBOX ) ) ); + SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Table)); } // ----------------------------------------------------------------------------- @@ -203,6 +205,8 @@ void TableObjectBar::Execute( SfxRequest& rReq ) pBindings->Invalidate( SID_FRAME_LINECOLOR ); pBindings->Invalidate( SID_ATTR_BORDER ); pBindings->Invalidate( SID_ATTR_FILL_STYLE ); + pBindings->Invalidate( SID_ATTR_FILL_TRANSPARENCE ); + pBindings->Invalidate( SID_ATTR_FILL_FLOATTRANSPARENCE ); pBindings->Invalidate( SID_TABLE_MERGE_CELLS ); pBindings->Invalidate( SID_TABLE_SPLIT_CELLS ); pBindings->Invalidate( SID_OPTIMIZE_TABLE ); diff --git a/sd/source/ui/toolpanel/ConstrainedIterator.cxx b/sd/source/ui/toolpanel/ConstrainedIterator.cxx deleted file mode 100644 index 1747a5ad4f50..000000000000 --- a/sd/source/ui/toolpanel/ConstrainedIterator.cxx +++ /dev/null @@ -1,263 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -// This is a definition file of a template class. It is therefore -// included by other files and thus has to be guarded against multiple -// inclusion. - -#ifndef SD_TOOLPANEL_CONSTRAINED_ITERATOR_CXX -#define SD_TOOLPANEL_CONSTRAINED_ITERATOR_CXX - -namespace sd { namespace toolpanel { - - -template <class Container> -ConstrainedIterator<Container>::value_type& - ConstrainedIterator<Container>::operator* (void) -{ - return *maIterator; -} - - - - -template <class Container> -const ConstrainedIterator<Container>::value_type& - ConstrainedIterator<Container>::operator* (void) - const -{ - return *maIterator; -} - - - - -template <class Container> -ConstrainedIterator<Container>::value_type& - ConstrainedIterator<Container>::operator-> (void) -{ - return *maIterator; -} - - - - -template <class Container> -const ConstrainedIterator<Container>::value_type& - ConstrainedIterator<Container>::operator-> (void) - const -{ - return *maIterator; -} - - - - - -template <class Container> -ConstrainedIterator<Container> - ::ConstrainedIterator (void) - : mpContainer (NULL) -{ -} - - - - -template <class Container> -ConstrainedIterator<Container>::ConstrainedIterator ( - const Container& rContainer, - const Container::iterator& rIterator) - : mpContainer(&rContainer), - maIterator (rIterator), - mpConstraint (NULL) -{ - AdvanceToNextValidElement(); -} - - - - -template <class Container> -ConstrainedIterator<Container>::ConstrainedIterator ( - const Container& rContainer, - const Container::iterator& rIterator, - const Constraint<Container>& rConstraint) - : mpContainer(&rContainer), - maIterator (rIterator), - mpConstraint (&rConstraint) -{ - AdvanceToNextValidElement(); -} - - - - -template <class Container> -ConstrainedIterator<Container>::ConstrainedIterator ( - const ConstrainedIterator& rIterator) - : mpContainer (rIterator.mpContainer), - maIterator (rIterator.maIterator), - mpConstraint (rIterator.mpConstraint) -{ - // Everything has been done in the initializer -} - - - - -template <class Container> -ConstrainedIterator<Container>& - ConstrainedIterator<Container> - ::operator= (const ConstrainedIterator& rIterator) -{ - mpContainer = rIterator.mpContainer; - maIterator = rIterator.maIterator; - mpConstraint = rIterator.mpConstraint; - - AdvanceToNextValidElement(); - - return *this; -} - - - - -template <class Container> -bool ConstrainedIterator<Container>::operator== ( - const ConstrainedIterator& aIterator) const -{ - return ! operator!=(aIterator); -} - - - - -template <class Container> -bool ConstrainedIterator<Container>::operator!= ( - const ConstrainedIterator& aIterator) const -{ - return maIterator != aIterator.maIterator; -} - - - - -template <class Container> -ConstrainedIterator<Container>& - ConstrainedIterator<Container>::operator++ (void) -{ - maIterator++; - AdvanceToNextValidElement(); - return *this; -} - - - - -template <class Container> -ConstrainedIterator<Container> - ConstrainedIterator<Container>::operator++ (int) -{ - ConstrainedIterator aIterator (*this); - ++(*this); - return aIterator; -} - - - - -template <class Container> -ConstrainedIterator<Container>& - ConstrainedIterator<Container>::operator-- (void) -{ - maIterator--; - AdvanceToPreviousValidElement(); - return *this; -} - - - - -template <class Container> -ConstrainedIterator<Container> - ConstrainedIterator<Container>::operator-- (int) -{ - ConstrainedIterator aIterator (*this); - --(*this); - return aIterator; -} - - - - -template <class Container> -ConstrainedIterator<Container> - ConstrainedIterator<Container>::operator+ (int nValue) const -{ - return ConstrainedIterator (*mpContainer, maIterator+nValue); -} - - - -template <class Container> -ConstrainedIterator<Container> - ConstrainedIterator<Container>::operator- (int nValue) const -{ - return ConstrainedIterator (*mpContainer, maIterator-nValue); -} - - - -template <class Container> -void ConstrainedIterator<Container>::AdvanceToNextValidElement (void) -{ - if (mpContainer!=NULL && mpConstraint!=NULL) - { - while (maIterator != mpContainer->end() - && ! mpConstraint->operator()(*mpContainer, maIterator)) - ++maIterator; - } -} - - - - -template <class Container> -void ConstrainedIterator<Container>::AdvanceToPreviousValidElement (void) -{ - if (mpContainer!=NULL && mpConstraint!=NULL) - { - while (maIterator != mpContainer->begin() - && ! mpConstraint->operator()(*mpContainer, maIterator)) - --maIterator; - } -} - - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/toolpanel/ConstrainedIterator.hxx b/sd/source/ui/toolpanel/ConstrainedIterator.hxx deleted file mode 100644 index d40f0fc5319a..000000000000 --- a/sd/source/ui/toolpanel/ConstrainedIterator.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TOOLPANEL_CONSTRAINED_ITERATOR_HXX -#define SD_TOOLPANEL_CONSTRAINED_ITERATOR_HXX - -#include <iterator> - -namespace sd { namespace toolpanel { - - -template <class Container> -class Constraint -{ -public: - virtual bool operator() ( - const Container& rContainer, - const Container::iterator& rIterator) const = 0; -}; - - - - -/** This iterator is a bidirectional iterator with something of random - access thrown in. It uses a constraint object to jump over - elements in the underlying container that do not meet the - constraint. -*/ -template <class Container> -class ConstrainedIterator - : public ::std::bidirectional_iterator_tag -{ -public: - typedef Container::value_type value_type; - typedef value_type& reference; - typedef const value_type& const_reference; - - ConstrainedIterator (void); - ConstrainedIterator ( - const Container& rContainer, - const Container::iterator& rIterator); - ConstrainedIterator ( - const Container& rContainer, - const Container::iterator& rIterator, - const Constraint<Container>& pConstraint); - ConstrainedIterator ( - const ConstrainedIterator& rIterator); - - ConstrainedIterator& operator= ( - const ConstrainedIterator& aIterator); - - reference operator* (void); - const_reference operator* (void) const; - reference operator-> (void); - const_reference operator-> (void) const; - - bool operator== (const ConstrainedIterator& aIterator) const; - bool operator!= (const ConstrainedIterator& aIterator) const; - - ConstrainedIterator& operator++ (void); - ConstrainedIterator operator++ (int); - ConstrainedIterator& operator-- (void); - ConstrainedIterator operator-- (int); - - ConstrainedIterator operator+ (int nValue) const; - ConstrainedIterator operator- (int nValue) const; - - -private: - const Container* mpContainer; - Container::iterator maIterator; - const Constraint<Container>* mpConstraint; - - void AdvanceToNextValidElement (void); - void AdvanceToPreviousValidElement (void); -}; - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/toolpanel/ControlContainer.cxx b/sd/source/ui/toolpanel/ControlContainer.cxx deleted file mode 100644 index 21ab98868708..000000000000 --- a/sd/source/ui/toolpanel/ControlContainer.cxx +++ /dev/null @@ -1,441 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/ControlContainer.hxx" - -#include "taskpane/TaskPaneTreeNode.hxx" - -#include <vcl/window.hxx> -#include <vcl/svapp.hxx> - -namespace sd { namespace toolpanel { - - -ControlContainer::ControlContainer (TreeNode* pNode) - : mpNode(pNode), - mnActiveControlIndex((sal_uInt32)-1), - mbMultiSelection(false) -{ -} - - - - -ControlContainer::~ControlContainer (void) -{ - // Set mpNode to NULL so that no one calls it from now on. - mpNode = NULL; - DeleteChildren(); -} - - - - -void ControlContainer::DeleteChildren (void) -{ - // Deleting the children may lead to calls back to the container. To - // prevent the container from accessing the just deleted children, the - // maControlList member is first cleared (by transferring its content to - // a local list) before the children are destroyed. - ControlList maList; - maList.swap(maControlList); - ControlList::iterator I; - ControlList::iterator Iend (maList.end()); - for (I=maList.begin(); I!=Iend; ++I) - delete *I; - - if (mpNode != NULL) - mpNode->FireStateChangeEvent(EID_ALL_CHILDREN_REMOVED); -} - - - -sal_uInt32 ControlContainer::AddControl (::std::auto_ptr<TreeNode> pControl) -{ - ::osl::MutexGuard aGuard (maMutex); - - pControl->GetWindow()->Show(); - sal_uInt32 nIndex = maControlList.size(); - maControlList.push_back (pControl.get()); - pControl.release(); - - ListHasChanged (); - - if (mpNode != NULL) - mpNode->FireStateChangeEvent(EID_CHILD_ADDED, pControl.get()); - - return nIndex; -} - - - - -void ControlContainer::SetExpansionState ( - sal_uInt32 nIndex, - ExpansionState aState) -{ - ::osl::MutexGuard aGuard (maMutex); - - bool bResizeNecessary (false); - - if (mbMultiSelection) - { - TreeNode* pControl = GetControl(nIndex); - switch (aState) - { - case ES_TOGGLE: - bResizeNecessary = pControl->Expand( ! pControl->IsExpanded()); - break; - - case ES_EXPAND: - bResizeNecessary = pControl->Expand(true); - break; - - case ES_COLLAPSE: - bResizeNecessary = pControl->Expand(false); - break; - } - } - else - { - // When bExpansionState is true then the control to expand is the - // one with the given index. If bExpansionState is false and the - // given index points to the active control then then following - // control (in cyclic order) it is expanded. When there is only one - // control then that is always expanded. - do - { - // Ignore a call with an invalid index. (The seperate comparison - // with -1 is not strictly necessary but it is here just in - // case.) - if (nIndex>=GetControlCount() || nIndex==(sal_uInt32)-1) - break; - - bool bExpand; - switch (aState) - { - default: - case ES_TOGGLE: - bExpand = ! GetControl(nIndex)->IsExpanded(); - break; - - case ES_EXPAND: - bExpand = true; - break; - - case ES_COLLAPSE: - bExpand = false; - break; - } - if (bExpand) - { - // Make the specified control the active one and expand it. - mnActiveControlIndex = nIndex; - } - else - { - if (nIndex == mnActiveControlIndex) - { - // We have to determine a new active control since the - // current one is about to be collapsed. Choose the - // previous one for the last and the next one for all - // other. - if (mnActiveControlIndex+1 == GetControlCount()) - mnActiveControlIndex - = GetPreviousIndex(mnActiveControlIndex); - else - mnActiveControlIndex - = GetNextIndex (mnActiveControlIndex); - } - } - - // Update the expansion state of all controls. - for (sal_uInt32 i=0; i<GetControlCount(); i=GetNextIndex(i)) - { - TreeNode* pControl = GetControl(i); - bResizeNecessary |= pControl->Expand(i == mnActiveControlIndex); - } - } - while (false); - } - - if (bResizeNecessary && mpNode != NULL) - mpNode->RequestResize(); -} - - - - -void ControlContainer::SetExpansionState ( - TreeNode* pControl, - ExpansionState aState) -{ - SetExpansionState (GetControlIndex(pControl), aState); -} - - - - -sal_uInt32 ControlContainer::GetControlIndex (TreeNode* pControlToExpand) const -{ - sal_uInt32 nIndex; - for (nIndex=0; nIndex<GetControlCount(); nIndex++) - { - TreeNode* pControl = GetControl(nIndex); - if (pControl == pControlToExpand) - break; - } - return nIndex; -} - - - - -void ControlContainer::ListHasChanged (void) -{ -} - - - - -sal_uInt32 ControlContainer::GetControlCount (void) const -{ - return maControlList.size(); -} - - - - -sal_uInt32 ControlContainer::GetVisibleControlCount (void) const -{ - sal_uInt32 nCount (0); - - sal_uInt32 nIndex; - sal_uInt32 nAllCount (maControlList.size()); - for (nIndex=0; nIndex<nAllCount; nIndex=GetNextIndex(nIndex,true)) - { - if (maControlList[nIndex]->GetWindow()->IsVisible()) - nCount += 1; - } - - return nCount; -} - - - - -TreeNode* ControlContainer::GetControl (sal_uInt32 nIndex) const -{ - if (nIndex<maControlList.size() && nIndex!=(sal_uInt32)-1) - return maControlList[nIndex]; - else - return NULL; -} - - - - -sal_uInt32 ControlContainer::GetPreviousIndex ( - sal_uInt32 nIndex, - bool bIncludeHidden, - bool bCycle) const -{ - sal_uInt32 nCandidate (nIndex); - - while (true) - { - if (nCandidate==0) - if ( ! bCycle) - { - // We have reached the head of the list of controls and must - // not cycle to its end. - nCandidate = maControlList.size(); - break; - } - else - { - // Cycle to the end of the list. - nCandidate = maControlList.size() - 1; - } - else - // Go to the regular predecessor. - nCandidate -= 1; - - if (nCandidate == nIndex) - { - // Made one full loop and found no valid control. - nCandidate = maControlList.size(); - break; - } - else if (bIncludeHidden) - { - // Return the candidate index regardless of whether the control - // is hidden or not. - break; - } - else if (maControlList[nCandidate]->GetWindow()->IsVisible()) - { - // Found a visible control. - break; - } - - // The candidate does not meet our constraints so do one more loop. - } - - return nCandidate; -} - - - -sal_uInt32 ControlContainer::GetNextIndex ( - sal_uInt32 nIndex, - bool bIncludeHidden, - bool bCycle) const -{ - sal_uInt32 nCandidate (nIndex); - - while (true) - { - // Go to the regular successor. - nCandidate += 1; - if (nCandidate==maControlList.size()) - { - if ( ! bCycle) - { - // We have reached the end of the list of controls and must - // not cycle to its head. - break; - } - else - { - // Cycle to the head of the list. - nCandidate = 0; - } - } - - if (nCandidate == nIndex) - { - // Made one full loop and found no valid control. - nCandidate = maControlList.size(); - break; - } - else if (bIncludeHidden) - { - // Return the candidate index regardless of whether the control - // is hidden or not. - break; - } - else if (maControlList[nCandidate]->GetWindow()->IsVisible()) - { - // Found a visible control. - break; - } - - // The candidate does not meet our constraints so do one more loop. - } - - return nCandidate; -} - - - - -void ControlContainer::SetMultiSelection (bool bFlag) -{ - mbMultiSelection = bFlag; -} - - - - -void ControlContainer::SetVisibilityState ( - sal_uInt32 nControlIndex, - VisibilityState aState) -{ - TreeNode* pControl = GetControl (nControlIndex); - if (pControl != NULL) - { - bool bShow; - switch (aState) - { - default: - case VS_TOGGLE: - bShow = ! pControl->IsShowing(); - break; - case VS_SHOW: - bShow = true; - break; - case VS_HIDE: - bShow = false; - break; - } - - bool bControlWasExpanded = pControl->IsExpanded(); - if (bShow != pControl->IsShowing()) - { - pControl->Show (bShow); - - if (bShow) - { - // If we just turned on the first control then expand it, too. - // If we turned on another control collapse it. - if (GetVisibleControlCount() == 1) - SetExpansionState (nControlIndex, ES_EXPAND); - else - SetExpansionState (nControlIndex, ES_COLLAPSE); - } - else - { - if (GetVisibleControlCount() > 0) - { - if (bControlWasExpanded) - { - // We turned off an expanded control. Make sure that - // one of the still visible ones is expanded. - sal_uInt32 nIndex = GetNextIndex( - nControlIndex, - false, - false); - if (nIndex == GetControlCount()) - nIndex = GetPreviousIndex( - nControlIndex, - false, - false); - SetExpansionState (nIndex, ES_EXPAND); - } - } - } - - if (mpNode != NULL) - mpNode->RequestResize(); - } - } -} - - - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/ControlContainerDescriptor.hxx b/sd/source/ui/toolpanel/ControlContainerDescriptor.hxx deleted file mode 100644 index afdf0799ed64..000000000000 --- a/sd/source/ui/toolpanel/ControlContainerDescriptor.hxx +++ /dev/null @@ -1,135 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TASKPANE_CONTROL_CONTAINER_DESCRIPTOR_HXX -#define SD_TASKPANE_CONTROL_CONTAINER_DESCRIPTOR_HXX - -#include "taskpane/ILayoutableWindow.hxx" -#include "taskpane/TitleBar.hxx" -#include <tools/string.hxx> -#include <tools/gen.hxx> -#ifndef SD_WINDOW_HXX -#include <vcl/window.hxx> -#endif -#include <memory> - -class Window; - -namespace sd { namespace toolpanel { - -class ControlContainer; - -/** Collection of information the describes entries of the tool - panel. A descriptor owns the control it is associated with. -*/ -class ControlContainerDescriptor - : public ::Window, - public virtual ILayoutableWindow -{ -public: - /** Create a new descriptor for the given control. - @param rContainer - The container to inform about selection (caused by mouse - clicks or keyboard.) - @param pParent - The parent window of the new descriptor. - @param pControl - The control that is shown when being in the expanded - state. - @param rTitle - String that is shown as title in the title area above the - control. - @param eType - Type of the title bar. This specifies how the title bar - will be formated. For more information see TitleBar. - - */ - ControlContainerDescriptor ( - ControlContainer& rContainer, - ::Window* pParent, - ::std::auto_ptr<ILayoutableWindow> pControl, - const String& rTitle, - TitleBar::TitleBarType eType); - - virtual ~ControlContainerDescriptor (void); - - - virtual Size GetPreferredSize (void); - virtual int GetPreferredWidth (int nHeight); - virtual int GetPreferredHeight (int nWidth); - virtual bool IsResizable (void); - virtual ::Window* GetWindow (void); - - virtual void Resize (void); - virtual void GetFocus (void); - virtual void LoseFocus (void); - virtual void MouseButtonUp (const MouseEvent& rMouseEvent); - virtual void KeyInput (const KeyEvent& rEvent); - - void Select (bool bExpansionState); - - // const Rectangle& GetTitleBarBox (void) const; - - Window* GetControl (void) const; - const String& GetTitle (void) const; - - void Expand (bool bExpanded = true); - void Collapse (void); - bool IsExpanded (void) const; - - /** Ownership of the given data remains with the caller. The data - is thus not destroyed when the destructor of this class is - called. - */ - void SetUserData (void* pUserData); - void* GetUserData (void) const; - - bool IsVisible (void) const; - void SetVisible (bool bVisible); - - using Window::GetWindow; - using sd::toolpanel::ILayoutableWindow::GetPreferredWidth; - using sd::toolpanel::ILayoutableWindow::GetPreferredHeight; - -private: - ControlContainer& mrContainer; - ::std::auto_ptr<TitleBar> mpTitleBar; - ::std::auto_ptr<ILayoutableWindow> mpControl; - String msTitle; - bool mbExpanded; - bool mbVisible; - void* mpUserData; - bool mnVisible; - - /// Do not use! Assignment operator is not supported. - const ControlContainerDescriptor& operator= ( - const ControlContainerDescriptor& aDescriptor); - - void UpdateStates (void); - - DECL_LINK(WindowEventListener, VclSimpleEvent*); -}; - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/toolpanel/MethodGuard.hxx b/sd/source/ui/toolpanel/MethodGuard.hxx deleted file mode 100644 index eb43204daa0d..000000000000 --- a/sd/source/ui/toolpanel/MethodGuard.hxx +++ /dev/null @@ -1,64 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_METHODGUARD_HXX -#define SD_METHODGUARD_HXX - -#include <osl/mutex.hxx> - -//...................................................................................................................... -namespace sd { namespace toolpanel -{ -//...................................................................................................................... - - //================================================================================================================== - //= MethodGuard - //================================================================================================================== - template < class COMPONENT > - class MethodGuard - { - public: - MethodGuard( COMPONENT& i_rComponent ) - :m_aGuard( i_rComponent.getMutex() ) - { - i_rComponent.checkDisposed(); - } - - ~MethodGuard() - { - } - - inline void clear() - { - m_aGuard.clear(); - } - - private: - ::osl::ClearableMutexGuard m_aGuard; - }; - -//...................................................................................................................... -} } // namespace sd::toolpanel -//...................................................................................................................... - -#endif // SD_METHODGUARD_HXX diff --git a/sd/source/ui/toolpanel/ScrollPanel.cxx b/sd/source/ui/toolpanel/ScrollPanel.cxx deleted file mode 100644 index c32d8bb21df0..000000000000 --- a/sd/source/ui/toolpanel/ScrollPanel.cxx +++ /dev/null @@ -1,811 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/ScrollPanel.hxx" - -#include "taskpane/ControlContainer.hxx" -#include "TaskPaneFocusManager.hxx" -#include "taskpane/TitledControl.hxx" -#include "AccessibleScrollPanel.hxx" - -#include <vcl/svapp.hxx> -#include <svtools/valueset.hxx> - -namespace sd { namespace toolpanel { - -ScrollPanel::ScrollPanel ( - ::Window& i_rParentWindow) - : Control (&i_rParentWindow, WB_DIALOGCONTROL), - TreeNode(NULL), - maScrollWindow(this, WB_DIALOGCONTROL), - maVerticalScrollBar(this, WB_VERT), - maHorizontalScrollBar(this, WB_HORZ), - maScrollBarFiller(this), - maScrollWindowFiller(&maScrollWindow), - mbIsRearrangePending(true), - mbIsLayoutPending(true), - mnChildrenWidth(0), - mnVerticalBorder(2), - mnVerticalGap(3), - mnHorizontalBorder(2) -{ - Construct(); -} - -void ScrollPanel::Construct() -{ - SetAccessibleName ( - ::rtl::OUString::createFromAscii("Sub Task Panel")); - mpControlContainer->SetMultiSelection (true); - - SetBorderStyle (WINDOW_BORDER_NORMAL); - SetMapMode (MapMode(MAP_PIXEL)); - - // To reduce flickering during repaints make the container windows - // transparent and rely on their children to paint the whole area. - SetBackground(Wallpaper()); - maScrollWindow.SetBackground(Wallpaper()); - maScrollWindowFiller.SetBackground( - Application::GetSettings().GetStyleSettings().GetWindowColor()); - - maScrollWindow.Show(); - - // Initialize the scroll bars. - maVerticalScrollBar.SetScrollHdl ( - LINK(this, ScrollPanel, ScrollBarHandler)); - maVerticalScrollBar.EnableDrag (sal_True); - maHorizontalScrollBar.SetScrollHdl ( - LINK(this, ScrollPanel, ScrollBarHandler)); - maHorizontalScrollBar.EnableDrag (sal_True); -} - - - - -ScrollPanel::~ScrollPanel (void) -{ - sal_uInt32 nCount = mpControlContainer->GetControlCount(); - for (sal_uInt32 nIndex=0; nIndex<nCount; nIndex++) - { - TreeNode* pNode = mpControlContainer->GetControl(nIndex); - TreeNode* pControl = pNode; - // When the node has been created as TitledControl then use its - // control instead of pNode directly. - TitledControl* pTitledControl = static_cast<TitledControl*>(pNode); - if (pTitledControl != NULL) - pControl = pTitledControl->GetControl(); - - // Remove this object as listener from the control. - if (pControl != NULL && pControl->GetWindow()!=NULL) - { - pControl->GetWindow()->RemoveEventListener( - LINK(this,ScrollPanel,WindowEventListener)); - } - } - mpControlContainer->DeleteChildren(); -} - - - - -TitledControl* ScrollPanel::AddControl ( - ::std::auto_ptr<TreeNode> pControl, - const String& rTitle, - const rtl::OString& rHelpId) -{ - // We are interested only in the title. The control itself is - // managed by the content object. - TitledControl* pTitledControl = new TitledControl( - this, - pControl, - rTitle, - TitledControlStandardClickHandler(GetControlContainer(), ControlContainer::ES_TOGGLE), - TitleBar::TBT_SUB_CONTROL_HEADLINE); - pTitledControl->GetTitleBar()->SetHelpId(rHelpId); - - AddControl(::std::auto_ptr<TreeNode>(pTitledControl)); - - return pTitledControl; -} - - - - -void ScrollPanel::AddControl (::std::auto_ptr<TreeNode> pControl) -{ - if (pControl.get() != NULL) - { - // Add a window event listener which does two things: - // 1. Listen for controls being shown or hidden so that the layout - // can be adapted. - // 2. Track selection changes in order to make the selected elements - // visible. - const Link aWindowListener(LINK(this,ScrollPanel,WindowEventListener)); - OSL_ASSERT(pControl->GetWindow()!=NULL); - pControl->GetWindow()->AddEventListener(aWindowListener); - - TitledControl* pTitledControl = dynamic_cast<TitledControl*>(pControl.get()); - if (pTitledControl != NULL) - { - OSL_ASSERT(pTitledControl->GetControl()!=NULL); - OSL_ASSERT(pTitledControl->GetControl()->GetWindow()!=NULL); - pTitledControl->GetControl()->GetWindow()->AddEventListener(aWindowListener); - } - - FocusManager& rFocusManager (FocusManager::Instance()); - int nControlCount (mpControlContainer->GetControlCount()); - // Replace the old links for cycling between first and last child by - // current ones. - if (nControlCount > 0) - { - ::Window* pFirst = mpControlContainer->GetControl(0)->GetWindow(); - ::Window* pLast = mpControlContainer->GetControl(nControlCount-1)->GetWindow(); - rFocusManager.RemoveLinks(pFirst,pLast); - rFocusManager.RemoveLinks(pLast,pFirst); - - rFocusManager.RegisterLink(pFirst,pControl->GetWindow(), KEY_UP); - rFocusManager.RegisterLink(pControl->GetWindow(),pFirst, KEY_DOWN); - } - - - // Add a down link only for the first control so that when entering - // the sub tool panel the focus is set to the first control. - if (nControlCount == 0) - rFocusManager.RegisterDownLink(GetParent(), pControl->GetWindow()); - rFocusManager.RegisterUpLink(pControl->GetWindow(), GetParent()); - - pControl->GetWindow()->SetParent(&maScrollWindow); - mpControlContainer->AddControl (pControl); - mpControlContainer->SetExpansionState( - mpControlContainer->GetControlCount()-1, - ControlContainer::ES_EXPAND); - } -} - - - - -void ScrollPanel::Paint (const Rectangle& rRect) -{ - if (mbIsRearrangePending) - Rearrange(); - if (mbIsLayoutPending) - LayoutChildren(); - ::Window::Paint (rRect); - - // Paint the outer border and the space between every two children. - Color aOriginalLineColor (maScrollWindow.GetLineColor()); - Color aOriginalFillColor (maScrollWindow.GetFillColor()); - - maScrollWindow.SetLineColor (); - maScrollWindow.SetFillColor ( - GetSettings().GetStyleSettings().GetWindowColor()); - - Size aSize (maScrollWindow.GetOutputSizePixel()); - // Paint left and right vertical border. - Rectangle aVerticalArea ( - Point(0,0), - Size(mnHorizontalBorder,aSize.Height())); - maScrollWindow.DrawRect (aVerticalArea); - aVerticalArea.Right() += mnHorizontalBorder + mnChildrenWidth - 1; - aVerticalArea.Left() = aVerticalArea.Right() + mnHorizontalBorder; - maScrollWindow.DrawRect (aVerticalArea); - - // Paint horizontal stripes. - Rectangle aStripeArea ( - Point (mnHorizontalBorder,0), - Size(mnChildrenWidth,0)); - StripeList::const_iterator iStripe; - for (iStripe=maStripeList.begin(); iStripe!=maStripeList.end(); iStripe++) - { - aStripeArea.Top() = iStripe->first; - aStripeArea.Bottom() = iStripe->second; - if (aStripeArea.Bottom() < 0) - continue; - if (aStripeArea.Top() >= aSize.Height()) - break; - maScrollWindow.DrawRect (aStripeArea); - } - - maScrollWindow.SetLineColor (aOriginalLineColor); - maScrollWindow.SetFillColor (aOriginalFillColor); -} - - - - -void ScrollPanel::Resize (void) -{ - ::Window::Resize(); - mbIsRearrangePending = true; - mbIsLayoutPending = true; -} - - - - -void ScrollPanel::RequestResize (void) -{ - mbIsRearrangePending = true; - mbIsLayoutPending = true; - Invalidate(); -} - - - - -Size ScrollPanel::GetPreferredSize (void) -{ - return GetRequiredSize(); -} - - - - -sal_Int32 ScrollPanel::GetPreferredWidth (sal_Int32 ) -{ - return GetPreferredSize().Width(); -} - - - - -sal_Int32 ScrollPanel::GetPreferredHeight (sal_Int32 ) -{ - return GetPreferredSize().Height(); -} - - - - -bool ScrollPanel::IsResizable (void) -{ - return true; -} - - - - -::Window* ScrollPanel::GetWindow (void) -{ - return this; -} - - - - -sal_Int32 ScrollPanel::GetMinimumWidth (void) -{ - return TreeNode::GetMinimumWidth(); -} - - - - -void ScrollPanel::ExpandControl ( - TreeNode* pControl, - bool bExpansionState) -{ - // Toggle expand status. - pControl->Expand (bExpansionState); - - Rearrange (); - Invalidate (); -} - - - - -bool ScrollPanel::IsVerticalScrollBarVisible (void) const -{ - return maVerticalScrollBar.IsReallyVisible(); -} - - - - -bool ScrollPanel::IsHorizontalScrollBarVisible (void) const -{ - return maHorizontalScrollBar.IsReallyVisible(); -} - - - - -ScrollBar& ScrollPanel::GetVerticalScrollBar (void) -{ - return maVerticalScrollBar; -} - - - - -ScrollBar& ScrollPanel::GetHorizontalScrollBar (void) -{ - return maHorizontalScrollBar; -} - - - - -/** This control shows an expansion bar for every control and in a - separate area below that expansion area it shows all controls each - with its title bar. When there is not enough space then show a - scroll bar in the control area. -*/ -void ScrollPanel::Rearrange (void) -{ - Size aRequiredSize (GetRequiredSize()); - if (aRequiredSize.Width()>0 && aRequiredSize.Height()>0) - { - Size aAvailableSize (SetupScrollBars (aRequiredSize)); - maScrollWindow.SetPosSizePixel( - Point(0,0), - aAvailableSize); - - // Make the children at least as wide as the sub tool panel. - if (aRequiredSize.Width() < aAvailableSize.Width()) - aRequiredSize.Width() = aAvailableSize.Width(); - mnChildrenWidth = -2*mnHorizontalBorder; - if (maHorizontalScrollBar.IsVisible()) - mnChildrenWidth += aRequiredSize.Width(); - else - mnChildrenWidth += aAvailableSize.Width(); - - sal_Int32 nChildrenHeight (LayoutChildren()); - maVerticalScrollBar.SetRangeMax ( - nChildrenHeight + mnVerticalBorder); - - mbIsRearrangePending = false; - } -} - - - - -Size ScrollPanel::GetRequiredSize (void) -{ - // First determine the width of the children. This is the maximum of - // the current window width and the individual minimum widths of the - // children. - int nChildrenWidth (GetSizePixel().Width()); - unsigned int nCount = mpControlContainer->GetControlCount(); - unsigned int nIndex; - for (nIndex=0; nIndex<nCount; nIndex++) - { - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - int nMinimumWidth (pChild->GetMinimumWidth()); - if (nMinimumWidth > nChildrenWidth) - nChildrenWidth = nMinimumWidth; - } - - // Determine the accumulated width of all children when scaled to the - // minimum width. - nChildrenWidth -= 2*mnHorizontalBorder; - Size aTotalSize (nChildrenWidth, - 2*mnVerticalBorder + (nCount-1) * mnVerticalGap); - for (nIndex=0; nIndex<nCount; nIndex++) - { - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - sal_Int32 nHeight = pChild->GetPreferredHeight(nChildrenWidth); - aTotalSize.Height() += nHeight; - } - - return aTotalSize; -} - - - - -sal_Int32 ScrollPanel::LayoutChildren (void) -{ - maStripeList.clear(); - - Point aPosition (maScrollOffset); - aPosition.X() += mnHorizontalBorder; - maStripeList.push_back( ::std::pair<int,int>( - aPosition.Y(), - aPosition.Y() + mnVerticalBorder - 1)); - aPosition.Y() += mnVerticalBorder; - - // Place the controls one over the other. - unsigned int nCount (mpControlContainer->GetControlCount()); - for (unsigned int nIndex=0; nIndex<nCount; nIndex++) - { - if (nIndex > 0) - { - maStripeList.push_back( ::std::pair<int,int>( - aPosition.Y(), - aPosition.Y() + mnVerticalGap - 1)); - aPosition.Y() += mnVerticalGap; - } - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - int nControlHeight = pChild->GetPreferredHeight(mnChildrenWidth); - pChild->GetWindow()->SetPosSizePixel( - aPosition, - Size(mnChildrenWidth, nControlHeight)); - aPosition.Y() += nControlHeight; - } - - // If the children do not cover their parent window completely - // (regarding the height) we put a filler below that is responsible for - // painting the remaining space. - int nWindowHeight = maScrollWindow.GetSizePixel().Height(); - if (aPosition.Y() < nWindowHeight) - { - maScrollWindowFiller.SetPosSizePixel ( - aPosition, - Size(mnChildrenWidth, nWindowHeight-aPosition.Y())); - maStripeList.push_back( ::std::pair<int,int>( - aPosition.Y(), - nWindowHeight-1)); - // maScrollWindowFiller.Show(); - aPosition.Y() = nWindowHeight; - } - else - maScrollWindowFiller.Hide(); - - aPosition.Y() += mnVerticalBorder; - mbIsLayoutPending = false; - - return aPosition.Y()-maScrollOffset.Y(); -} - - - - -Size ScrollPanel::SetupScrollBars (const Size& rRequiredSize) -{ - Size aWindowSize (GetSizePixel()); - Size aScrollBarSize ( - maVerticalScrollBar.GetSizePixel().Width(), - maHorizontalScrollBar.GetSizePixel().Height()); - Size aRemainingSize (aWindowSize); - - // Determine which scroll bars have to be shown. - bool bShowHorizontal = false; - if (rRequiredSize.Width() > aWindowSize.Width()) - bShowHorizontal = true; - bool bShowVertical = false; - if (rRequiredSize.Height() > aWindowSize.Height()) - bShowVertical = true; - // Showing one scroll bar may reduce the available size so that the - // other one has to be shown as well. - if (bShowHorizontal && ! bShowVertical) - { - if ((rRequiredSize.Height() + aScrollBarSize.Height()) - > aWindowSize.Height()) - bShowVertical = true; - } - else if (bShowVertical && ! bShowHorizontal) - { - if (GetMinimumWidth() + aScrollBarSize.Width() > aWindowSize.Width()) - bShowHorizontal = true; - } - - // Setup the scroll bars. - aRemainingSize.Width() - = SetupVerticalScrollBar (bShowVertical, rRequiredSize.Height()); - aRemainingSize.Height() - = SetupHorizontalScrollBar (bShowHorizontal, rRequiredSize.Width()); - - // Place the filler. - if (bShowHorizontal && bShowVertical) - { - maScrollBarFiller.SetPosSizePixel ( - Point(aWindowSize.Width(), aWindowSize.Height()), - aScrollBarSize); - maScrollBarFiller.Show(); - } - else - maScrollBarFiller.Hide(); - - - return aRemainingSize; -} - - - - -sal_Int32 ScrollPanel::SetupVerticalScrollBar (bool bShow, sal_Int32 nRange) -{ - Size aScrollBarSize ( - maVerticalScrollBar.GetSizePixel().Width(), - maHorizontalScrollBar.GetSizePixel().Height()); - Size aWindowSize (GetOutputSizePixel()); - sal_Int32 nRemainingWidth (aWindowSize.Width()); - - // Setup the verical scroll bar. - if (bShow) - { - int nWidth = aScrollBarSize.Width(); - int nHeight = aWindowSize.Height(); - maVerticalScrollBar.SetPosSizePixel( - Point(aWindowSize.Width()-nWidth,0), - Size(nWidth, nHeight)); - maVerticalScrollBar.Show(); - - // Set the scroll bar range and thumb size. - maVerticalScrollBar.SetRangeMin (0); - maVerticalScrollBar.SetRangeMax ( - nRange + 2*mnVerticalBorder); - maVerticalScrollBar.SetVisibleSize (aWindowSize.Height()); - // Make page size approx. 10% of visible area. - maVerticalScrollBar.SetLineSize (aWindowSize.Height()/10); - // Make page size approx. 100% of visible area. - maVerticalScrollBar.SetPageSize (aWindowSize.Height()); - // Make sure that thumb is inside the valid range. - maVerticalScrollBar.SetThumbPos(-maScrollOffset.Y()); - long nMinPos = maVerticalScrollBar.GetRangeMin(); - if (maVerticalScrollBar.GetThumbPos() < nMinPos) - maVerticalScrollBar.SetThumbPos(nMinPos); - long nMaxPos = maVerticalScrollBar.GetRangeMax() - - maVerticalScrollBar.GetVisibleSize(); - if (maVerticalScrollBar.GetThumbPos() >= nMaxPos) - maVerticalScrollBar.SetThumbPos(nMaxPos); - // Set offset to match thumb pos. - maScrollOffset.Y() = -maVerticalScrollBar.GetThumbPos(); - - nRemainingWidth -= aScrollBarSize.Width(); - } - else - { - maVerticalScrollBar.Hide(); - maScrollOffset.Y() = 0; - } - - return nRemainingWidth; -} - - - - -sal_Int32 ScrollPanel::SetupHorizontalScrollBar (bool bShow, sal_Int32 nRange) -{ - Size aScrollBarSize ( - maVerticalScrollBar.GetSizePixel().Width(), - maHorizontalScrollBar.GetSizePixel().Height()); - Size aWindowSize (GetOutputSizePixel()); - sal_Int32 nRemainingHeight (aWindowSize.Height()); - - // Setup the horizontal scroll bar. - if (bShow) - { - int nHeight = aScrollBarSize.Height(); - int nWidth = GetOutputSizePixel().Width(); - maHorizontalScrollBar.SetPosSizePixel( - Point(0, aWindowSize.Height()-nHeight), - Size(nWidth,nHeight)); - maHorizontalScrollBar.Show(); - - // Set the scroll bar range and thumb size. - maHorizontalScrollBar.SetRangeMin (0); - maHorizontalScrollBar.SetRangeMax ( - nRange + 2*mnHorizontalBorder); - maHorizontalScrollBar.SetVisibleSize (aWindowSize.Width()); - // Make page size approx. 5% of visible area. - maHorizontalScrollBar.SetLineSize (aWindowSize.Width()/20+1); - // Make page size approx. 50% of visible area. - maHorizontalScrollBar.SetPageSize (aWindowSize.Width()/2+1); - // Make sure that thumb is inside the valid range. - maHorizontalScrollBar.SetThumbPos(-maScrollOffset.X()); - long nMinPos = maHorizontalScrollBar.GetRangeMin(); - if (maHorizontalScrollBar.GetThumbPos() < nMinPos) - maHorizontalScrollBar.SetThumbPos(nMinPos); - long nMaxPos = maHorizontalScrollBar.GetRangeMax() - - maHorizontalScrollBar.GetVisibleSize(); - if (maHorizontalScrollBar.GetThumbPos() >= nMaxPos) - maHorizontalScrollBar.SetThumbPos(nMaxPos); - // Set offset to match thumb pos. - maScrollOffset.X() = -maHorizontalScrollBar.GetThumbPos(); - - nRemainingHeight -= aScrollBarSize.Height(); - } - else - { - maHorizontalScrollBar.Hide(); - maScrollOffset.X() = 0; - } - - return nRemainingHeight; -} - - -IMPL_LINK(ScrollPanel, ScrollBarHandler, ScrollBar*, EMPTYARG) -{ - maScrollOffset.X() -= maHorizontalScrollBar.GetDelta(); - maScrollOffset.Y() -= maVerticalScrollBar.GetDelta(); - - // Scrolling is done by moving the child windows up or down. - mbIsLayoutPending = true; - Invalidate(); - // LayoutChildren(); - - return 0; -} - - - - -long ScrollPanel::Notify( NotifyEvent& rNEvt ) -{ - long nRet = sal_False; - if( rNEvt.GetType() == EVENT_COMMAND ) - { - // note: dynamic_cast is not possible as GetData() returns a void* - CommandEvent* pCmdEvent = reinterpret_cast< CommandEvent* >(rNEvt.GetData()); - DBG_ASSERT( pCmdEvent!=0 && - ( pCmdEvent->IsMouseEvent() == sal_True || - pCmdEvent->IsMouseEvent() == sal_False ), - "Invalid CommandEvent" ); - if (pCmdEvent) - switch (pCmdEvent->GetCommand()) - { - case COMMAND_WHEEL: - case COMMAND_STARTAUTOSCROLL: - case COMMAND_AUTOSCROLL: - { - nRet = HandleScrollCommand (*pCmdEvent, &maHorizontalScrollBar, &maVerticalScrollBar); - break; - } - } - } - - if( ! nRet ) - nRet = ::Window::Notify( rNEvt ); - - return nRet; -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> ScrollPanel::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - return new ::accessibility::AccessibleScrollPanel ( - *this, - ::rtl::OUString::createFromAscii("Scroll Panel"), - ::rtl::OUString::createFromAscii("Scroll Panel")); -} - - - - -void ScrollPanel::MakeRectangleVisible ( - Rectangle& aRectangle, - ::Window* pWindow) -{ - if (maVerticalScrollBar.IsVisible() && aRectangle.GetWidth()>0 && aRectangle.GetHeight()>0) - { - const Rectangle aRelativeBox (pWindow->GetWindowExtentsRelative(&maScrollWindow)); - - aRectangle.Move( - -maScrollOffset.X() + aRelativeBox.Left(), - -maScrollOffset.Y() + aRelativeBox.Top()); - - const int nVisibleHeight (maVerticalScrollBar.GetVisibleSize()); - const int nVisibleTop (maVerticalScrollBar.GetThumbPos()); - if (aRectangle.Bottom() >= nVisibleTop+nVisibleHeight) - maVerticalScrollBar.DoScroll(aRectangle.Bottom() - nVisibleHeight); - else if (aRectangle.Top() < nVisibleTop) - maVerticalScrollBar.DoScroll(aRectangle.Top()); - } -} - - - - -IMPL_LINK(ScrollPanel,WindowEventListener,VclSimpleEvent*,pEvent) -{ - VclWindowEvent* pWindowEvent = dynamic_cast<VclWindowEvent*>(pEvent); - if (pWindowEvent != NULL) - { - switch (pWindowEvent->GetId()) - { - case VCLEVENT_WINDOW_KEYUP: - case VCLEVENT_WINDOW_MOUSEBUTTONUP: - { - // Make the currently selected item visible. - ValueSet* pControl = dynamic_cast<ValueSet*>(pWindowEvent->GetWindow()); - if (pControl != NULL) - { - // Get the bounding box of the currently selected item - // and enlarge this so that the selection frame is - // inside as well. - Rectangle aBox (pControl->GetItemRect(pControl->GetSelectItemId())); - aBox.Top()-=4; - aBox.Bottom()+=4; - - MakeRectangleVisible(aBox, pControl); - } - } - break; - - case VCLEVENT_WINDOW_MOUSEBUTTONDOWN: - { - // Make the item under the mouse visible. We need this case - // for right clicks that open context menus. For these we - // only get the mouse down event. The following mouse up - // event is sent to the context menu. - ValueSet* pControl = dynamic_cast<ValueSet*>(pWindowEvent->GetWindow()); - if (pControl != NULL) - { - // Get the bounding box of the item at the mouse - // position and enlarge this so that the selection frame - // is inside as well. - MouseEvent* pMouseEvent - = reinterpret_cast<MouseEvent*>(pWindowEvent->GetData()); - if (pMouseEvent != NULL) - { - Point aPosition (pMouseEvent->GetPosPixel()); - Rectangle aBox (pControl->GetItemRect(pControl->GetItemId(aPosition))); - aBox.Top()-=4; - aBox.Bottom()+=4; - - MakeRectangleVisible(aBox, pControl); - } - } - } - break; - - - case VCLEVENT_WINDOW_GETFOCUS: - { - // Move title bars into the visible area when they get the - // focus (::Window wise their enclosing TitledControl gets - // the focus.) - TitledControl* pTitledControl = dynamic_cast<TitledControl*>(pWindowEvent->GetWindow()); - if (pTitledControl!=NULL && pTitledControl->GetTitleBar()!=NULL) - { - ::Window* pTitleBarWindow = pTitledControl->GetTitleBar()->GetWindow(); - Rectangle aBox(pTitleBarWindow->GetPosPixel(),pTitleBarWindow->GetSizePixel()); - MakeRectangleVisible( - aBox, - pTitleBarWindow); - } - } - break; - - case VCLEVENT_WINDOW_SHOW: - case VCLEVENT_WINDOW_HIDE: - case VCLEVENT_WINDOW_ACTIVATE: - case VCLEVENT_WINDOW_RESIZE: - // Rearrange the children of the scroll panel when one of - // the children changes its size or visibility. - RequestResize(); - break; - } - } - return 0; -} - - - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx b/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx deleted file mode 100644 index 009a3e5a4094..000000000000 --- a/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx +++ /dev/null @@ -1,368 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/SlideSorterCacheDisplay.hxx" - -#ifdef USE_SLIDE_SORTER_CACHE_DISPLAY - -#include "taskpane/ScrollPanel.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" - -#include <vcl/window.hxx> -#include <vcl/lstbox.hxx> -#include <vcl/button.hxx> - -namespace { - -static const Color maBackgroundColor (255,250,245); - -class PageCacheWindow : public ::Window -{ -public: - PageCacheWindow ( - ::Window* pParentWindow, - ::sd::toolpanel::SlideSorterCacheDisplay* pDisplay) - : ::Window(pParentWindow), - mpDisplay(pDisplay) - { - SetBackground(Wallpaper(maBackgroundColor)); - } - - virtual void Paint (const Rectangle& rBoundingBox) - { mpDisplay->Paint(rBoundingBox); ::Window::Paint(rBoundingBox); } - virtual void Resize (void) { mpDisplay->Resize(); ::Window::Resize(); } - -private: - ::sd::toolpanel::SlideSorterCacheDisplay* mpDisplay; -}; - -} - - - -namespace sd { namespace toolpanel { - -::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*> SlideSorterCacheDisplay::maDisplays; - -SlideSorterCacheDisplay::SlideSorterCacheDisplay (const SdDrawDocument* pDocument) - : TreeNode(NULL), - mpWindow(NULL), - mnPageCount(0), - mnColumnCount(0), - mnRowCount(0), - maCellSize(0,0), - mnHorizontalBorder(0), - mnVerticalBorder(0) -{ - SlideSorterCacheDisplay::AddInstance(pDocument,this); -} - - - - -SlideSorterCacheDisplay::~SlideSorterCacheDisplay (void) -{ - if (mpWindow != NULL) - delete mpWindow; - SlideSorterCacheDisplay::RemoveInstance(this); -} - - - - -void SlideSorterCacheDisplay::SetParentWindow (::Window* pParentWindow) -{ - mpWindow = new PageCacheWindow(pParentWindow, this); -} - - - - -void SlideSorterCacheDisplay::Paint (const Rectangle& rBoundingBox) -{ - if (maCellSize.Width()>0 && maCellSize.Height()>0 && mpWindow!=NULL) - { - Color maSavedFillColor (mpWindow->GetFillColor()); - Color maSavedLineColor (mpWindow->GetLineColor()); - sal_Int32 nC0 = (rBoundingBox.Left() - mnHorizontalBorder) / maCellSize.Width(); - sal_Int32 nC1 = (rBoundingBox.Right() - mnHorizontalBorder) / maCellSize.Width(); - sal_Int32 nR0 = (rBoundingBox.Top() - mnVerticalBorder) / maCellSize.Height(); - sal_Int32 nR1 = (rBoundingBox.Bottom() - mnVerticalBorder) / maCellSize.Height(); - for (sal_Int32 nC=nC0; nC<=nC1; ++nC) - for (sal_Int32 nR=nR0; nR<=nR1; ++nR) - { - sal_Int32 nPageIndex (nC + nR*mnColumnCount); - if (nPageIndex < mnPageCount) - { - Rectangle aBox (GetPageBox(nPageIndex)); - if ( ! maPageDescriptors[nPageIndex].mbVisible) - { - mpWindow->SetLineColor(); - mpWindow->SetFillColor(maBackgroundColor); - mpWindow->DrawRect(aBox); - - aBox.Left() += maCellSize.Width()/4; - aBox.Right() -= maCellSize.Width()/4; - aBox.Top() += maCellSize.Height()/4; - aBox.Bottom() -= maCellSize.Height()/4; - } - - switch (maPageDescriptors[nPageIndex].meStatus) - { - case NONE : mpWindow->SetFillColor (Color(95,255,128)); break; - case RENDERING : mpWindow->SetFillColor (Color(236,125,128)); break; - case IN_QUEUE_PRIORITY_0 : mpWindow->SetFillColor (Color(255,243,0)); break; - case IN_QUEUE_PRIORITY_1 : mpWindow->SetFillColor (Color(255,199,0)); break; - case IN_QUEUE_PRIORITY_2 : mpWindow->SetFillColor (Color(20,255,128)); break; - default : mpWindow->SetFillColor (COL_BLACK); break; - } - mpWindow->SetLineColor(COL_BLACK); - mpWindow->DrawRect(aBox); - - if ( ! maPageDescriptors[nPageIndex].mbUpToDate) - mpWindow->DrawLine(aBox.TopLeft(), aBox.BottomRight()); - } - } - mpWindow->SetLineColor(maSavedLineColor); - mpWindow->SetFillColor(maSavedFillColor); - } -} - - - - -void SlideSorterCacheDisplay::Resize (void) -{ - if (mpWindow != NULL) - { - double nW = mpWindow->GetSizePixel().Width(); - double nH = mpWindow->GetSizePixel().Height(); - if (nH > 0) - { - double nAspect = nW / nH; - sal_Int32 nR = 1; - sal_Int32 nC = 1; - while (nR * nC < mnPageCount) - { - if (double(nC) / double(nR) > nAspect) - ++nR; - else - ++nC; - } - double nAspect2 = double(nC) / double(nR); - - mnRowCount = nR; - mnColumnCount = nC; - mnHorizontalGap = 2; - mnVerticalGap = 2; - maCellSize = Size( - (int)((nW-(nC-1)*mnHorizontalGap) / nC), - (int)((nH-(nR-1)*mnVerticalGap) / nR)); - mnHorizontalBorder = (int)(nW - nC*maCellSize.Width() - ((nC-1)*mnHorizontalGap))/2; - mnVerticalBorder = (int)(nH - nR*maCellSize.Height() - ((nR-1)*mnVerticalGap))/2; - } - } -} - - - - -SlideSorterCacheDisplay* SlideSorterCacheDisplay::Instance (const SdDrawDocument* pDocument) -{ - SlideSorterCacheDisplay* pDisplay = NULL; - ::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*>::iterator iDisplay; - for (iDisplay=maDisplays.begin(); iDisplay!=maDisplays.end(); ++iDisplay) - if (iDisplay->first == pDocument) - pDisplay = iDisplay->second; - - if (pDisplay == NULL) - { - pDisplay = new SlideSorterCacheDisplay(pDocument); - } - - return pDisplay; -} - - - - -void SlideSorterCacheDisplay::SetPageCount (sal_Int32 nPageCount) -{ - mnPageCount = nPageCount; - maPageDescriptors.resize(nPageCount); - Resize(); - if (mpWindow != NULL) - mpWindow->Invalidate(); -} - - - - -void SlideSorterCacheDisplay::SetPageStatus (sal_Int32 nPageIndex, PageStatus eStatus) -{ - ProvideSize(nPageIndex); - maPageDescriptors[nPageIndex].meStatus = eStatus; - PaintPage(nPageIndex); -} - - - - -void SlideSorterCacheDisplay::SetPageVisibility (sal_Int32 nPageIndex, bool bVisible) -{ - ProvideSize(nPageIndex); - maPageDescriptors[nPageIndex].mbVisible = bVisible; - PaintPage(nPageIndex); -} - - - - -void SlideSorterCacheDisplay::SetUpToDate (sal_Int32 nPageIndex, bool bUpToDate) -{ - ProvideSize(nPageIndex); - maPageDescriptors[nPageIndex].mbUpToDate = bUpToDate; - PaintPage(nPageIndex); -} - - - - -Rectangle SlideSorterCacheDisplay::GetPageBox (sal_Int32 nPageIndex) -{ - sal_Int32 nRow = nPageIndex / mnColumnCount; - sal_Int32 nColumn = nPageIndex % mnColumnCount; - return Rectangle( - Point(mnHorizontalBorder + nColumn * maCellSize.Width() + nColumn*mnHorizontalGap, - mnVerticalBorder + nRow * maCellSize.Height() + nRow*mnVerticalGap), - maCellSize); -} - - - - -void SlideSorterCacheDisplay::AddInstance ( - const SdDrawDocument* pDocument, - SlideSorterCacheDisplay* pControl) -{ - maDisplays[pDocument] = pControl; -} - - - - -void SlideSorterCacheDisplay::RemoveInstance (SlideSorterCacheDisplay* pControl) -{ - ::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*>::iterator iDisplay; - for (iDisplay=maDisplays.begin(); iDisplay!=maDisplays.end(); ++iDisplay) - if (iDisplay->second == pControl) - { - maDisplays.erase(iDisplay); - break; - } -} - - - - -void SlideSorterCacheDisplay::ProvideSize (sal_Int32 nPageIndex) -{ - if (maPageDescriptors.size() <= (sal_uInt32)nPageIndex) - maPageDescriptors.resize(nPageIndex+1); - if (mnPageCount <= nPageIndex) - mnPageCount = nPageIndex; -} - - - - -Size SlideSorterCacheDisplay::GetPreferredSize (void) -{ - return Size(100,100); -} - - - - -sal_Int32 SlideSorterCacheDisplay::GetPreferredWidth (sal_Int32 nHeigh) -{ - return GetPreferredSize().Width(); -} - - - - -sal_Int32 SlideSorterCacheDisplay::GetPreferredHeight (sal_Int32 nWidth) -{ - return GetPreferredSize().Height(); -} - - - -::Window* SlideSorterCacheDisplay::GetWindow (void) -{ - return mpWindow; -} - - - - -bool SlideSorterCacheDisplay::IsResizable (void) -{ - return true; -} - - - - -bool SlideSorterCacheDisplay::IsExpandable (void) const -{ - return true; -} - - - - -bool SlideSorterCacheDisplay::IsExpanded (void) const -{ - return true; -} - - - - -void SlideSorterCacheDisplay::PaintPage (sal_Int32 nPageIndex) -{ - if (mpWindow != NULL) - { - Paint(GetPageBox(nPageIndex)); - } -} - - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/toolpanel/SubToolPanel.cxx b/sd/source/ui/toolpanel/SubToolPanel.cxx deleted file mode 100644 index 18807152c2a0..000000000000 --- a/sd/source/ui/toolpanel/SubToolPanel.cxx +++ /dev/null @@ -1,386 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/SubToolPanel.hxx" - -#include "TaskPaneFocusManager.hxx" -#include "taskpane/TitleBar.hxx" -#include "taskpane/TitledControl.hxx" -#include "taskpane/ControlContainer.hxx" -#include "AccessibleTreeNode.hxx" -#include <vcl/decoview.hxx> -#include <vcl/svapp.hxx> - -namespace sd { namespace toolpanel { - - -SubToolPanel::SubToolPanel ( - Window& i_rParentWindow) - : Control (&i_rParentWindow, WB_DIALOGCONTROL), - TreeNode(NULL), - maWindowFiller(this), - mbIsRearrangePending(true), - mbIsLayoutPending(true), - mnChildrenWidth(0), - mnVerticalBorder(0), - mnVerticalGap(3), - mnHorizontalBorder(2) -{ - SetAccessibleName ( - ::rtl::OUString::createFromAscii("Sub Task Panel")); - mpControlContainer->SetMultiSelection (true); - - SetBorderStyle (WINDOW_BORDER_NORMAL); - SetMapMode (MapMode(MAP_PIXEL)); - - // To reduce flickering during repaints make the container windows - // transparent and rely on their children to paint the whole area. - SetBackground(Wallpaper()); - maWindowFiller.SetBackground( - Application::GetSettings().GetStyleSettings().GetWindowColor()); -} - - - - -SubToolPanel::~SubToolPanel (void) -{ - sal_uInt32 nCount = mpControlContainer->GetControlCount(); - for (sal_uInt32 nIndex=0; nIndex<nCount; nIndex++) - { - TitledControl* pControl = static_cast<TitledControl*>( - mpControlContainer->GetControl(nIndex)); - pControl->GetControl()->GetWindow()->RemoveEventListener( - LINK(this,SubToolPanel,WindowEventListener)); - } - mpControlContainer->DeleteChildren(); -} - - - - -void SubToolPanel::Paint (const Rectangle& rRect) -{ - if (mbIsRearrangePending) - Rearrange(); - if (mbIsLayoutPending) - LayoutChildren(); - ::Window::Paint (rRect); - - // Paint the outer border and the space between every two children. - Color aOriginalLineColor (GetLineColor()); - Color aOriginalFillColor (GetFillColor()); - - SetLineColor (); - SetFillColor (GetSettings().GetStyleSettings().GetWindowColor()); - - Size aSize (GetOutputSizePixel()); - // Paint left and right vertical border. - Rectangle aVerticalArea ( - Point(0,0), - Size(mnHorizontalBorder,aSize.Height())); - DrawRect (aVerticalArea); - aVerticalArea.Right() += mnHorizontalBorder + mnChildrenWidth - 1; - aVerticalArea.Left() = aVerticalArea.Right() + mnHorizontalBorder; - DrawRect (aVerticalArea); - - // Paint horizontal stripes. - Rectangle aStripeArea ( - Point (mnHorizontalBorder,0), - Size(mnChildrenWidth,0)); - StripeList::const_iterator iStripe; - for (iStripe=maStripeList.begin(); iStripe!=maStripeList.end(); iStripe++) - { - aStripeArea.Top() = iStripe->first; - aStripeArea.Bottom() = iStripe->second; - if (aStripeArea.Bottom() < 0) - continue; - if (aStripeArea.Top() >= aSize.Height()) - break; - DrawRect (aStripeArea); - } - - SetLineColor (aOriginalLineColor); - SetFillColor (aOriginalFillColor); -} - - - - -void SubToolPanel::Resize (void) -{ - ::Window::Resize(); - mbIsRearrangePending = true; - mbIsLayoutPending = true; -} - - - - -void SubToolPanel::RequestResize (void) -{ - mbIsRearrangePending = true; - mbIsLayoutPending = true; - Invalidate(); -} - - - - -Size SubToolPanel::GetPreferredSize (void) -{ - return GetRequiredSize(); -} - - - - -sal_Int32 SubToolPanel::GetPreferredWidth (sal_Int32 ) -{ - return GetPreferredSize().Width(); -} - - - - -sal_Int32 SubToolPanel::GetPreferredHeight (sal_Int32 ) -{ - return GetPreferredSize().Height(); -} - - - - -bool SubToolPanel::IsResizable (void) -{ - return true; -} - - - - -::Window* SubToolPanel::GetWindow (void) -{ - return this; -} - - - - -sal_Int32 SubToolPanel::GetMinimumWidth (void) -{ - return TreeNode::GetMinimumWidth(); -} - - - - -void SubToolPanel::ExpandControl ( - TreeNode* pControl, - bool bExpansionState) -{ - // Toggle expand status. - pControl->Expand (bExpansionState); - - Rearrange (); - Invalidate (); -} - - - - -/** This control shows an expansion bar for every control and in a - separate area below that expansion area it shows all controls each - with its title bar. When there is not enough space then show a - scroll bar in the control area. -*/ -void SubToolPanel::Rearrange (void) -{ - Size aRequiredSize (GetRequiredSize()); - if (aRequiredSize.Width()>0 && aRequiredSize.Height()>0) - { - Size aAvailableSize (GetOutputSizePixel()); - - // Make the children at least as wide as the sub tool panel. - if (aRequiredSize.Width() < aAvailableSize.Width()) - aRequiredSize.Width() = aAvailableSize.Width(); - mnChildrenWidth = -2*mnHorizontalBorder; - mnChildrenWidth += aAvailableSize.Width(); - - LayoutChildren(); - - mbIsRearrangePending = false; - } -} - - - - -Size SubToolPanel::GetRequiredSize (void) -{ - // First determine the width of the children. This is the maximum of - // the current window width and the individual minimum widths of the - // children. - int nChildrenWidth (GetSizePixel().Width()); - unsigned int nCount = mpControlContainer->GetControlCount(); - unsigned int nIndex; - for (nIndex=0; nIndex<nCount; nIndex++) - { - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - int nMinimumWidth (pChild->GetMinimumWidth()); - if (nMinimumWidth > nChildrenWidth) - nChildrenWidth = nMinimumWidth; - } - - // Determine the accumulated width of all children when scaled to the - // minimum width. - nChildrenWidth -= 2*mnHorizontalBorder; - Size aTotalSize (nChildrenWidth, - 2*mnVerticalBorder + (nCount-1) * mnVerticalGap); - for (nIndex=0; nIndex<nCount; nIndex++) - { - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - sal_Int32 nHeight = pChild->GetPreferredHeight(nChildrenWidth); - aTotalSize.Height() += nHeight; - } - - return aTotalSize; -} - - - - -sal_Int32 SubToolPanel::LayoutChildren (void) -{ - // Determine vertical space that can be distributed to sizable children. - unsigned int nCount (mpControlContainer->GetControlCount()); - unsigned int nResizableCount = 0; - int nAvailableHeight = GetSizePixel().Height() - 2*mnVerticalBorder; - unsigned int nIndex; - for (nIndex=0; nIndex<nCount; nIndex++) - { - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - int nControlHeight = pChild->GetPreferredHeight(mnChildrenWidth); - if (pChild->IsResizable()) - nResizableCount++; - else - nAvailableHeight -= nControlHeight; - } - - maStripeList.clear(); - - Point aPosition (0,0); - aPosition.X() += mnHorizontalBorder; - maStripeList.push_back( ::std::pair<int,int>( - aPosition.Y(), - aPosition.Y() + mnVerticalBorder - 1)); - aPosition.Y() += mnVerticalBorder; - - // Place the controls one over the other. - for (nIndex=0; nIndex<nCount; nIndex++) - { - if (nIndex > 0) - { - maStripeList.push_back( ::std::pair<int,int>( - aPosition.Y(), - aPosition.Y() + mnVerticalGap - 1)); - aPosition.Y() += mnVerticalGap; - } - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - int nControlHeight = pChild->GetPreferredHeight(mnChildrenWidth); - if (pChild->IsResizable()) - { - nControlHeight = nAvailableHeight / nResizableCount; - nResizableCount--; - } - nAvailableHeight -= nControlHeight; - pChild->GetWindow()->SetPosSizePixel( - aPosition, - Size(mnChildrenWidth, nControlHeight)); - aPosition.Y() += nControlHeight; - } - - // If the children do not cover their parent window completely - // (regarding the height) we put a filler below that is responsible for - // painting the remaining space. - int nWindowHeight = GetSizePixel().Height(); - if (aPosition.Y() < nWindowHeight) - { - maWindowFiller.SetPosSizePixel ( - aPosition, - Size(mnChildrenWidth, nWindowHeight-aPosition.Y())); - maStripeList.push_back( ::std::pair<int,int>( - aPosition.Y(), - nWindowHeight-1)); - // maScrollWindowFiller.Show(); - aPosition.Y() = nWindowHeight; - } - else - maWindowFiller.Hide(); - - aPosition.Y() += mnVerticalBorder; - mbIsLayoutPending = false; - - return aPosition.Y(); -} - - - - -IMPL_LINK(SubToolPanel, WindowEventListener, VclSimpleEvent*, pEvent) -{ - if (pEvent!=NULL && pEvent->ISA(VclWindowEvent)) - { - VclWindowEvent* pWindowEvent = static_cast<VclWindowEvent*>(pEvent); - switch (pWindowEvent->GetId()) - { - case VCLEVENT_WINDOW_SHOW: - case VCLEVENT_WINDOW_HIDE: - case VCLEVENT_WINDOW_ACTIVATE: - case VCLEVENT_WINDOW_RESIZE: - RequestResize(); - break; - } - } - return 0; -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> SubToolPanel::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - return new ::accessibility::AccessibleTreeNode ( - *this, - ::rtl::OUString::createFromAscii("Sub Task Panel"), - ::rtl::OUString::createFromAscii("Sub Task Panel"), - ::com::sun::star::accessibility::AccessibleRole::PANEL); -} - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TaskPaneFocusManager.cxx b/sd/source/ui/toolpanel/TaskPaneFocusManager.cxx deleted file mode 100644 index 79ed39912751..000000000000 --- a/sd/source/ui/toolpanel/TaskPaneFocusManager.cxx +++ /dev/null @@ -1,328 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "TaskPaneFocusManager.hxx" - -#include <vcl/window.hxx> -#include <vcl/svapp.hxx> -#include <vcl/event.hxx> -#include <rtl/instance.hxx> -#include <hash_map> - -namespace { - -class WindowHash -{ -public: - size_t operator()(const ::Window* argument) const - { return reinterpret_cast<unsigned long>(argument); } -}; - -class EventDescriptor -{ -public: - EventDescriptor (const KeyCode& rKey, ::Window* pWindow) - : maKeyCode(rKey), mpTargetWindow(pWindow) {} - KeyCode maKeyCode; - ::Window* mpTargetWindow; -}; - -} // end of anonymous namespace - - - - -namespace sd { namespace toolpanel { - - - -class FocusManager::LinkMap - : public ::std::hash_multimap< ::Window*, EventDescriptor, WindowHash> -{ -}; - - - -FocusManager& FocusManager::Instance (void) -{ - static FocusManager* spInstance = NULL; - - if (spInstance == NULL) - { - ::osl::MutexGuard aGuard (::osl::Mutex::getGlobalMutex()); - if (spInstance == NULL) - { - static FocusManager aInstance; - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - spInstance = &aInstance; - } - } - else - { - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - } - return *spInstance; -} - - - - -FocusManager::FocusManager (void) - : mpLinks(new LinkMap()) -{ -} - - - - -FocusManager::~FocusManager (void) -{ - Clear(); -} - - - - -void FocusManager::Clear (void) -{ - if (mpLinks.get() != NULL) - { - while ( ! mpLinks->empty()) - { - ::Window* pWindow = mpLinks->begin()->first; - if (pWindow == NULL) - { - mpLinks->erase(mpLinks->begin()); - } - else - { - RemoveLinks(pWindow); - } - } - } -} - - - - -void FocusManager::RegisterUpLink (::Window* pSource, ::Window* pTarget) -{ - RegisterLink(pSource, pTarget, KEY_ESCAPE); -} - - - - -void FocusManager::RegisterDownLink (::Window* pSource, ::Window* pTarget) -{ - RegisterLink(pSource, pTarget, KEY_RETURN); -} - - - - -void FocusManager::RegisterLink ( - ::Window* pSource, - ::Window* pTarget, - const KeyCode& rKey) -{ - OSL_ASSERT(pSource!=NULL); - OSL_ASSERT(pTarget!=NULL); - - if (pSource==NULL || pTarget==NULL) - return; - - // Register this focus manager as event listener at the source window. - if (mpLinks->equal_range(pSource).first == mpLinks->end()) - pSource->AddEventListener (LINK (this, FocusManager, WindowEventListener)); - mpLinks->insert(LinkMap::value_type(pSource, EventDescriptor(rKey,pTarget))); -} - - - - -void FocusManager::RemoveLinks ( - ::Window* pSourceWindow, - ::Window* pTargetWindow) -{ - OSL_ASSERT(pSourceWindow!=NULL); - OSL_ASSERT(pTargetWindow!=NULL); - - if (pSourceWindow==NULL || pTargetWindow==NULL) - { - // This method was called with invalid arguments. To avoid - // referencing windows that will soon be deleted we clear *all* - // links as an emergency fallback. - Clear(); - return; - } - - ::std::pair<LinkMap::iterator,LinkMap::iterator> aCandidates; - LinkMap::iterator iCandidate; - bool bLoop (mpLinks->size() > 0); - while (bLoop) - { - aCandidates = mpLinks->equal_range(pSourceWindow); - if (aCandidates.first == mpLinks->end()) - { - // No links for the source window found -> nothing more to do. - bLoop = false; - } - else - { - // Set the loop control to false so that when no candidate for - // deletion is found the loop is left. - bLoop = false; - for (iCandidate=aCandidates.first; iCandidate!=aCandidates.second; ++iCandidate) - if (iCandidate->second.mpTargetWindow == pTargetWindow) - { - mpLinks->erase(iCandidate); - // One link erased. The iterators have become invalid so - // start the search for links to delete anew. - bLoop = true; - break; - } - } - } - - RemoveUnusedEventListener(pSourceWindow); -} - - - - -void FocusManager::RemoveLinks (::Window* pWindow) -{ - OSL_ASSERT(pWindow!=NULL); - - if (pWindow == NULL) - { - // This method was called with invalid arguments. To avoid - // referencing windows that will soon be deleted we clear *all* - // links as an emergency fallback. - Clear(); - return; - } - - // Make sure that we are not called back for the window. - pWindow->RemoveEventListener (LINK (this, FocusManager, WindowEventListener)); - - // Remove the links from the given window. - ::std::pair<LinkMap::iterator,LinkMap::iterator> aCandidates(mpLinks->equal_range(pWindow)); - mpLinks->erase(aCandidates.first, aCandidates.second); - - // Remove links to the given window. - bool bLinkRemoved; - do - { - bLinkRemoved = false; - LinkMap::iterator iLink; - for (iLink=mpLinks->begin(); iLink!=mpLinks->end(); ++iLink) - { - if (iLink->second.mpTargetWindow == pWindow) - { - RemoveUnusedEventListener(iLink->first); - mpLinks->erase(iLink); - bLinkRemoved = true; - break; - } - } - } - while (bLinkRemoved); -} - - - - -void FocusManager::RemoveUnusedEventListener (::Window* pWindow) -{ - OSL_ASSERT(pWindow!=NULL); - - if (pWindow == NULL) - return; - - // When there are no more links from the window to another window - // then remove the event listener from the window. - if (mpLinks->find(pWindow) == mpLinks->end()) - pWindow->RemoveEventListener (LINK (this, FocusManager, WindowEventListener)); -} - - - - -bool FocusManager::TransferFocus ( - ::Window* pSourceWindow, - const KeyCode& rKeyCode) -{ - bool bSuccess (false); - - OSL_ASSERT(pSourceWindow!=NULL); - if (pSourceWindow == NULL) - return bSuccess; - - ::std::pair<LinkMap::iterator,LinkMap::iterator> aCandidates ( - mpLinks->equal_range(pSourceWindow)); - LinkMap::const_iterator iCandidate; - for (iCandidate=aCandidates.first; iCandidate!=aCandidates.second; ++iCandidate) - if (iCandidate->second.maKeyCode == rKeyCode) - { - OSL_ASSERT(iCandidate->second.mpTargetWindow != NULL); - iCandidate->second.mpTargetWindow->GrabFocus(); - bSuccess = true; - break; - } - - return bSuccess; -} - - - - -IMPL_LINK(FocusManager, WindowEventListener, VclSimpleEvent*, pEvent) -{ - if (pEvent!=NULL && pEvent->ISA(VclWindowEvent)) - { - VclWindowEvent* pWindowEvent = static_cast<VclWindowEvent*>(pEvent); - switch (pWindowEvent->GetId()) - { - case VCLEVENT_WINDOW_KEYINPUT: - { - ::Window* pSource = pWindowEvent->GetWindow(); - KeyEvent* pKeyEvent = static_cast<KeyEvent*>(pWindowEvent->GetData()); - TransferFocus(pSource, pKeyEvent->GetKeyCode()); - } - break; - - case VCLEVENT_OBJECT_DYING: - RemoveLinks(pWindowEvent->GetWindow()); - break; - } - } - return 1; -} - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx b/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx deleted file mode 100644 index 271953d46b08..000000000000 --- a/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx +++ /dev/null @@ -1,288 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/TaskPaneTreeNode.hxx" - -#include "taskpane/ControlContainer.hxx" -#include "taskpane/TitledControl.hxx" - -#include <vector> -#include <algorithm> - -namespace sd { namespace toolpanel { - -TreeNode::TreeNode( TreeNode* pParent) -: mpControlContainer (new ControlContainer(this)) -, mpParent (pParent) -, maStateChangeListeners() -{ -} - - - - -TreeNode::~TreeNode (void) -{ -} - - - - -void TreeNode::SetParentNode (TreeNode* pNewParent) -{ - mpParent = pNewParent; - GetWindow()->SetParent (pNewParent->GetWindow()); -} - - - - -TreeNode* TreeNode::GetParentNode (void) -{ - return mpParent; -} - - - - -::Window* TreeNode::GetWindow (void) -{ - return NULL; -} - - - - -const ::Window* TreeNode::GetConstWindow (void) const -{ - return const_cast<TreeNode*>(this)->GetWindow(); -} - - - - -sal_Int32 TreeNode::GetMinimumWidth (void) -{ - sal_Int32 nTotalMinimumWidth = 0; - unsigned int nCount = mpControlContainer->GetControlCount(); - for (unsigned int nIndex=0; nIndex<nCount; nIndex++) - { - TreeNode* pChild = mpControlContainer->GetControl (nIndex); - sal_Int32 nMinimumWidth = pChild->GetMinimumWidth (); - if (nMinimumWidth > nTotalMinimumWidth) - nTotalMinimumWidth = nMinimumWidth; - } - - return nTotalMinimumWidth;; -} - - - - -bool TreeNode::IsResizable (void) -{ - return false; -} - - - - -void TreeNode::RequestResize (void) -{ - if (mpParent != NULL) - mpParent->RequestResize(); -} - - - - -ControlContainer& TreeNode::GetControlContainer (void) -{ - return *mpControlContainer.get(); -} - - - - -bool TreeNode::Expand (bool bExpansionState) -{ - bool bExpansionStateChanged (false); - - if (IsExpandable() && IsExpanded()!=bExpansionState) - { - if (bExpansionState) - GetWindow()->Show(); - else - GetWindow()->Hide(); - bExpansionStateChanged = true; - - FireStateChangeEvent (EID_EXPANSION_STATE_CHANGED); - } - - return bExpansionStateChanged; -} - - - - -bool TreeNode::IsExpanded (void) const -{ - if (GetConstWindow()!=NULL) - return GetConstWindow()->IsVisible(); - else - return false; -} - - - - -bool TreeNode::IsExpandable (void) const -{ - return GetConstWindow()!=NULL; -} - - - - -void TreeNode::Show (bool bExpansionState) -{ - if (GetWindow() != NULL) - { - bool bWasShowing (IsShowing()); - GetWindow()->Show (bExpansionState); - if (bWasShowing != bExpansionState) - FireStateChangeEvent (EID_SHOWING_STATE_CHANGED); - } -} - - - - -bool TreeNode::IsShowing (void) const -{ - const ::Window* pWindow = const_cast<TreeNode*>(this)->GetWindow(); - if (pWindow != NULL) - return pWindow->IsVisible(); - else - return false; -} - - - - -TaskPaneShellManager* TreeNode::GetShellManager (void) -{ - if (mpParent != NULL) - return mpParent->GetShellManager(); - else - return NULL; -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> TreeNode::GetAccessibleObject (void) -{ - ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> xAccessible; - ::Window* pWindow = GetWindow(); - if (pWindow != NULL) - { - xAccessible = pWindow->GetAccessible(sal_False); - if ( ! xAccessible.is()) - { - ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> xParent; - if (pWindow!=NULL && pWindow->GetAccessibleParentWindow()!=NULL) - xParent = pWindow->GetAccessibleParentWindow()->GetAccessible(); - xAccessible = CreateAccessibleObject(xParent); - pWindow->SetAccessible(xAccessible); - } - } - return xAccessible; -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> TreeNode::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - if (GetWindow() != NULL) - return GetWindow()->CreateAccessible(); - else - return NULL; -} - - - - -void TreeNode::AddStateChangeListener (const Link& rListener) -{ - if (::std::find ( - maStateChangeListeners.begin(), - maStateChangeListeners.end(), - rListener) == maStateChangeListeners.end()) - { - maStateChangeListeners.push_back(rListener); - } -} - - - - -void TreeNode::FireStateChangeEvent ( - TreeNodeStateChangeEventId eEventId, - TreeNode* pChild) const -{ - TreeNodeStateChangeEvent aEvent (*this, eEventId, pChild); - StateChangeListenerContainer aContainerCopy(maStateChangeListeners); - StateChangeListenerContainer::iterator aLink (aContainerCopy.begin()); - StateChangeListenerContainer::iterator aEnd (aContainerCopy.end()); - while (aLink!=aEnd) - { - aLink->Call (&aEvent); - ++aLink; - } -} - - - -TreeNodeStateChangeEvent::TreeNodeStateChangeEvent ( - const TreeNode& rNode, - TreeNodeStateChangeEventId eEventId, - TreeNode* pChild) - : mrSource(rNode), - meEventId(eEventId), - mpChild(pChild) -{ -} - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TestMenu.cxx b/sd/source/ui/toolpanel/TestMenu.cxx deleted file mode 100644 index da9ef821cc8b..000000000000 --- a/sd/source/ui/toolpanel/TestMenu.cxx +++ /dev/null @@ -1,314 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "TestMenu.hxx" - -#include "taskpane/TaskPaneControlFactory.hxx" - -#include <vcl/image.hxx> -#include <vcl/svapp.hxx> - -namespace sd { namespace toolpanel { - -#ifdef SHOW_COLOR_MENU -/** This factory class is used to create instances of ColorMenu. It can be - extended so that its constructor stores arguments that later are passed - to new ColorMenu objects. -*/ -class ColorMenuFactory - : public ControlFactory -{ -protected: - virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) - { - return new ColorMenu (&i_rParent); - } -}; - - -ColorMenu::ColorMenu (::Window* i_pParent) - : Window (i_pParent), - TreeNode(NULL), - maSet (this), - mnPreferredColumnCount(2) -{ - WinBits aStyle = - WB_ITEMBORDER - | WB_DOUBLEBORDER - | WB_NAMEFIELD - | WB_FLATVALUESET - | WB_TABSTOP - | WB_VSCROLL; - - maSet.SetStyle (maSet.GetStyle() | aStyle); - maSet.SetExtraSpacing(2); - - Fill (); - maSet.Show(); - i_pParent->Resize(); -} - - - - -ColorMenu::~ColorMenu (void) -{ -} - - -::std::auto_ptr<ControlFactory> ColorMenu::CreateControlFactory (void) -{ - return ::std::auto_ptr<ControlFactory>(new ColorMenuFactory()); -} - - -/** The preferred size depends on the preferred number of columns, the - number of items, and the size of the items. -*/ -Size ColorMenu::GetPreferredSize (void) -{ - Size aItemSize = maSet.CalcItemSizePixel (Size()); - Size aPreferredWindowSize = maSet.CalcWindowSizePixel ( - aItemSize, - (sal_uInt16)mnPreferredColumnCount, - (sal_uInt16)CalculateRowCount (aItemSize, (sal_uInt16)mnPreferredColumnCount)); - return aPreferredWindowSize; -} - - - - -sal_Int32 ColorMenu::GetPreferredWidth (sal_Int32 nHeight) -{ - sal_Int32 nPreferredWidth = 0; - if (maSet.GetItemCount() > 0) - { - Image aImage = maSet.GetItemImage(maSet.GetItemId(0)); - Size aItemSize = maSet.CalcItemSizePixel (aImage.GetSizePixel()); - if (nHeight>0 && aItemSize.Height()>0) - { - int nRowCount = nHeight / aItemSize.Height(); - if (nRowCount <= 0) - nRowCount = 1; - int nColumnCount = (maSet.GetItemCount() + nRowCount-1) - / nRowCount; - nPreferredWidth = nColumnCount * aItemSize.Width(); - } - } - - return nPreferredWidth; -} - - - - -sal_Int32 ColorMenu::GetPreferredHeight (sal_Int32 nWidth) -{ - sal_Int32 nPreferredHeight = 0; - if (maSet.GetItemCount()>0) - { - Image aImage = maSet.GetItemImage(maSet.GetItemId(0)); - Size aItemSize = maSet.CalcItemSizePixel (aImage.GetSizePixel()); - if (nWidth>0 && aItemSize.Width()>0) - { - int nColumnCount = nWidth / aItemSize.Width(); - if (nColumnCount <= 0) - nColumnCount = 1; - else if (nColumnCount > 4) - nColumnCount = 4; - int nRowCount = (maSet.GetItemCount() + nColumnCount-1) - / nColumnCount; - nPreferredHeight = nRowCount * aItemSize.Height(); - } - } - return nPreferredHeight; -} - - - - -bool ColorMenu::IsResizable (void) -{ - return true; -} - - - - -::Window* ColorMenu::GetWindow (void) -{ - return this; -} - - - - -void ColorMenu::Resize (void) -{ - ::Window::Resize(); - Size aWindowSize = GetOutputSizePixel(); - maSet.SetPosSizePixel (Point(0,0), aWindowSize); - if (IsVisible() && aWindowSize.Width() > 0) - { - // maSet.SetPosSizePixel ( - // Point (0,0), - // aWindowSize); - - // Calculate the number of rows and columns. - if (maSet.GetItemCount() > 0) - { - Image aImage = maSet.GetItemImage(maSet.GetItemId(0)); - Size aItemSize = maSet.CalcItemSizePixel ( - aImage.GetSizePixel()); - int nColumnCount = aWindowSize.Width() / 30; - if (nColumnCount < 1) - nColumnCount = 1; - else if (nColumnCount > 4) - nColumnCount = 4; - - sal_uInt16 nRowCount = (sal_uInt16)CalculateRowCount (aItemSize, nColumnCount); - - maSet.SetColCount ((sal_uInt16)nColumnCount); - maSet.SetLineCount (nRowCount); - } - } - -} - - - - -int ColorMenu::CalculateRowCount (const Size&, int nColumnCount) -{ - int nRowCount = 0; - - if (maSet.GetItemCount()>0 && nColumnCount>0) - { - nRowCount = GetOutputSizePixel().Height() / 30; - if (nRowCount < 1) - nRowCount = 1; - } - - return nRowCount; -} - - - - -void ColorMenu::Fill (void) -{ - const StyleSettings& rSettings ( - Application::GetSettings().GetStyleSettings()); - maSet.Clear(); - maSet.SetItemWidth (30); - maSet.SetItemHeight (30); - sal_uInt16 i = 0; - maSet.InsertItem (++i, rSettings.GetFaceColor()); - maSet.SetItemText (i, String::CreateFromAscii("FaceColor")); - maSet.InsertItem (++i, rSettings.GetCheckedColor()); - maSet.SetItemText (i, String::CreateFromAscii("CheckedColor")); - maSet.InsertItem (++i, rSettings.GetLightColor()); - maSet.SetItemText (i, String::CreateFromAscii("LightColor")); - maSet.InsertItem (++i, rSettings.GetLightBorderColor()); - maSet.SetItemText (i, String::CreateFromAscii("LightBorderColor")); - maSet.InsertItem (++i, rSettings.GetShadowColor()); - maSet.SetItemText (i, String::CreateFromAscii("ShadowColor")); - maSet.InsertItem (++i, rSettings.GetDarkShadowColor()); - maSet.SetItemText (i, String::CreateFromAscii("DarkShadowColor")); - maSet.InsertItem (++i, rSettings.GetButtonTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("ButtonTextColor")); - maSet.InsertItem (++i, rSettings.GetRadioCheckTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("RadioCheckTextColor")); - maSet.InsertItem (++i, rSettings.GetGroupTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("GroupTextColor")); - maSet.InsertItem (++i, rSettings.GetLabelTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("LabelTextColor")); - maSet.InsertItem (++i, rSettings.GetInfoTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("InfoTextColor")); - maSet.InsertItem (++i, rSettings.GetWindowColor()); - maSet.SetItemText (i, String::CreateFromAscii("WindowColor")); - maSet.InsertItem (++i, rSettings.GetWindowTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("WindowTextColor")); - maSet.InsertItem (++i, rSettings.GetDialogColor()); - maSet.SetItemText (i, String::CreateFromAscii("DialogColor")); - maSet.InsertItem (++i, rSettings.GetDialogTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("DialogTextColor")); - maSet.InsertItem (++i, rSettings.GetWorkspaceColor()); - maSet.SetItemText (i, String::CreateFromAscii("WorkspaceColor")); - maSet.InsertItem (++i, rSettings.GetFieldColor()); - maSet.SetItemText (i, String::CreateFromAscii("FieldColor")); - maSet.InsertItem (++i, rSettings.GetFieldTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("FieldTextColor")); - maSet.InsertItem (++i, rSettings.GetActiveColor()); - maSet.SetItemText (i, String::CreateFromAscii("ActiveColor")); - maSet.InsertItem (++i, rSettings.GetActiveColor2()); - maSet.SetItemText (i, String::CreateFromAscii("ActiveColor2")); - maSet.InsertItem (++i, rSettings.GetActiveTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("ActiveTextColor")); - maSet.InsertItem (++i, rSettings.GetActiveBorderColor()); - maSet.SetItemText (i, String::CreateFromAscii("ActiveBorderColor")); - maSet.InsertItem (++i, rSettings.GetDeactiveColor()); - maSet.SetItemText (i, String::CreateFromAscii("DeactiveColor")); - maSet.InsertItem (++i, rSettings.GetDeactiveColor2()); - maSet.SetItemText (i, String::CreateFromAscii("DeactiveColor2")); - maSet.InsertItem (++i, rSettings.GetDeactiveTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("DeactiveTextColor")); - maSet.InsertItem (++i, rSettings.GetDeactiveBorderColor()); - maSet.SetItemText (i, String::CreateFromAscii("DeactiveBorderColor")); - maSet.InsertItem (++i, rSettings.GetHighlightColor()); - maSet.SetItemText (i, String::CreateFromAscii("HighlightColor")); - maSet.InsertItem (++i, rSettings.GetHighlightTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("HighlightTextColor")); - maSet.InsertItem (++i, rSettings.GetDisableColor()); - maSet.SetItemText (i, String::CreateFromAscii("DisableColor")); - maSet.InsertItem (++i, rSettings.GetHelpColor()); - maSet.SetItemText (i, String::CreateFromAscii("HelpColor")); - maSet.InsertItem (++i, rSettings.GetHelpTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("HelpTextColor")); - maSet.InsertItem (++i, rSettings.GetMenuColor()); - maSet.SetItemText (i, String::CreateFromAscii("MenuColor")); - maSet.InsertItem (++i, rSettings.GetMenuBarColor()); - maSet.SetItemText (i, String::CreateFromAscii("MenuBarColor")); - maSet.InsertItem (++i, rSettings.GetMenuBorderColor()); - maSet.SetItemText (i, String::CreateFromAscii("MenuBorderColor")); - maSet.InsertItem (++i, rSettings.GetMenuTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("MenuTextColor")); - maSet.InsertItem (++i, rSettings.GetMenuHighlightColor()); - maSet.SetItemText (i, String::CreateFromAscii("MenuHighlightColor")); - maSet.InsertItem (++i, rSettings.GetMenuHighlightTextColor()); - maSet.SetItemText (i, String::CreateFromAscii("MenuHighlightTextColor")); - maSet.InsertItem (++i, rSettings.GetLinkColor()); - maSet.SetItemText (i, String::CreateFromAscii("LinkColor")); - maSet.InsertItem (++i, rSettings.GetVisitedLinkColor()); - maSet.SetItemText (i, String::CreateFromAscii("VisitedLinkColor")); - maSet.InsertItem (++i, rSettings.GetHighlightLinkColor()); - maSet.SetItemText (i, String::CreateFromAscii("HighlightLinkColor")); - maSet.InsertItem (++i, rSettings.GetFontColor()); - maSet.SetItemText (i, String::CreateFromAscii("FontColor")); -} -#endif - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TestPanel.cxx b/sd/source/ui/toolpanel/TestPanel.cxx deleted file mode 100644 index 1162f69e35e5..000000000000 --- a/sd/source/ui/toolpanel/TestPanel.cxx +++ /dev/null @@ -1,170 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "TestPanel.hxx" -#include "taskpane/ScrollPanel.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" - -#include <vcl/lstbox.hxx> -#include <vcl/button.hxx> - -namespace sd { namespace toolpanel { - -#ifdef SHOW_TEST_PANEL -/** This factory class is used to create instances of TestPanel. It can be - extended so that its constructor stores arguments that later are passed - to new TestPanel objects. -*/ -class TestPanelFactory - : public ControlFactory -{ -protected: - virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) - { - return new TestPanel (i_rParent); - } -}; - - -class Wrapper - : public TreeNode -{ -public: - Wrapper ( - TreeNode* pParent, - Size aPreferredSize, - ::Window* pWrappedControl, - bool bIsResizable) - : TreeNode (pParent), - maPreferredSize(aPreferredSize), - mpWrappedControl(pWrappedControl), - mbIsResizable(bIsResizable) - { - mpWrappedControl->Show(); - } - virtual ~Wrapper (void) - { - delete mpWrappedControl; - } - - virtual Size GetPreferredSize (void) - { - return maPreferredSize; - } - virtual sal_Int32 GetPreferredWidth (sal_Int32 ) - { - return maPreferredSize.Width(); - } - virtual sal_Int32 GetPreferredHeight (sal_Int32 ) - { - return maPreferredSize.Height(); - } - virtual ::Window* GetWindow (void) - { - return mpWrappedControl; - } - virtual bool IsResizable (void) - { - return mbIsResizable; - } - virtual bool IsExpandable (void) const - { - return false; - } - virtual bool IsExpanded (void) const - { - return true; - } - -private: - Size maPreferredSize; - ::Window* mpWrappedControl; - bool mbIsResizable; -}; - - -TestPanel::TestPanel (::Window& i_rParent) - : SubToolPanel (i_rParent) -{ - // Create a scrollable panel with two list boxes. - ScrollPanel* pScrollPanel = new ScrollPanel (this); - - ListBox* pBox = new ListBox (pScrollPanel->GetWindow()); - int i; - for (i=1; i<=20; i++) - { - XubString aString (XubString::CreateFromAscii("Text ")); - aString.Append (XubString::CreateFromInt32(i)); - aString.Append (XubString::CreateFromAscii("/20")); - pBox->InsertEntry (aString); - } - pScrollPanel->AddControl ( - ::std::auto_ptr<TreeNode>(new Wrapper ( - pScrollPanel, Size (200,300), pBox, true)), - String::CreateFromAscii ("First ListBox"), - ""); - - pBox = new ListBox (pScrollPanel->GetWindow()); - for (i=1; i<=20; i++) - { - XubString aString (XubString::CreateFromAscii("More Text ")); - aString.Append (XubString::CreateFromInt32(i)); - aString.Append (XubString::CreateFromAscii("/20")); - pBox->InsertEntry (aString); - } - pScrollPanel->AddControl ( - ::std::auto_ptr<TreeNode>(new Wrapper ( - pScrollPanel, Size (200,300), pBox, true)), - String::CreateFromAscii ("Second ListBox"), - ""); - - AddControl (::std::auto_ptr<TreeNode>(pScrollPanel)); - - // Add a fixed size button. - Button* pButton = new OKButton (this); - AddControl ( - ::std::auto_ptr<TreeNode>(new Wrapper ( - this, Size (100,30), pButton, false)), - String::CreateFromAscii ("Button Area"), - ""); -} - - - - - -TestPanel::~TestPanel (void) -{ -} - -std::auto_ptr<ControlFactory> TestPanel::CreateControlFactory (void) -{ - return std::auto_ptr<ControlFactory>(new TestPanelFactory()); -} -#endif - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TitleBar.cxx b/sd/source/ui/toolpanel/TitleBar.cxx deleted file mode 100644 index 9e9bc28eb7f4..000000000000 --- a/sd/source/ui/toolpanel/TitleBar.cxx +++ /dev/null @@ -1,581 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/TitleBar.hxx" - -#include "ControlContainerDescriptor.hxx" -#include "tools/IconCache.hxx" -#include "AccessibleTreeNode.hxx" -#include <vcl/decoview.hxx> -#include <vcl/window.hxx> -#include <vcl/virdev.hxx> -#include <vos/mutex.hxx> -#include <vcl/svapp.hxx> -#include "sdresid.hxx" -#include <vcl/bitmap.hxx> -#include <vcl/lineinfo.hxx> -#include <vcl/bitmapex.hxx> -#include <tools/color.hxx> -#include <svx/xdash.hxx> -#include <svl/itemset.hxx> -#include <svx/xlndsit.hxx> -#include <svx/xlineit0.hxx> -#include <svx/svdobj.hxx> -#include <svx/svdpool.hxx> -#include <svtools/colorcfg.hxx> -#include <svx/xlnclit.hxx> -#include <svx/xfillit0.hxx> -#include "res_bmp.hrc" - - -namespace sd { namespace toolpanel { - -const int TitleBar::snIndentationWidth = 16; - -TitleBar::TitleBar ( ::Window* pParent, const String& rsTitle, TitleBarType eType, bool bIsExpandable) -: ::Window (pParent, WB_TABSTOP) -, TreeNode(this) -, meType(eType) -, msTitle(rsTitle) -, mbExpanded(false) -, mbFocused(false) -, mpDevice(new VirtualDevice (*this)) -, mbIsExpandable (bIsExpandable) -{ - EnableMapMode (sal_False); - - SetBackground (Wallpaper()); - - // Change the mouse pointer shape so that it acts as a mouse over effect. - switch (meType) - { - case TBT_SUB_CONTROL_HEADLINE: - if (mbIsExpandable) - SetPointer (POINTER_REFHAND); - break; - } -} - - - - -TitleBar::~TitleBar (void) -{ -} - - - - -Size TitleBar::GetPreferredSize (void) -{ - int nWidth = GetOutputSizePixel().Width(); - Rectangle aTitleBarBox ( - CalculateTitleBarBox( - CalculateTextBoundingBox(nWidth, true), - nWidth)); - - return aTitleBarBox.GetSize(); -} - - - - -sal_Int32 TitleBar::GetPreferredWidth (sal_Int32 ) -{ - Rectangle aTitleBarBox ( - CalculateTitleBarBox( - CalculateTextBoundingBox(0, true), - 0)); - return aTitleBarBox.GetWidth(); -} - - - - -sal_Int32 TitleBar::GetPreferredHeight (sal_Int32 nWidth) -{ - Rectangle aTitleBarBox ( - CalculateTitleBarBox( - CalculateTextBoundingBox(nWidth, true), - nWidth)); - - return aTitleBarBox.GetHeight(); -} - - - - -bool TitleBar::IsResizable (void) -{ - return true; -} - - - - -::Window* TitleBar::GetWindow (void) -{ - return this; -} - - - - -sal_Int32 TitleBar::GetMinimumWidth (void) -{ - return 20; -} - - - - -void TitleBar::Paint (const Rectangle& rBoundingBox) -{ - mpDevice->SetMapMode(GetMapMode()); - mpDevice->SetOutputSize (GetOutputSizePixel()); - mpDevice->SetSettings(GetSettings()); - mpDevice->SetDrawMode(GetDrawMode()); - - switch (meType) - { - case TBT_SUB_CONTROL_HEADLINE: - PaintSubPanelHeadLineBar (); - break; - } - - DrawOutDev ( - Point(0,0), - GetOutputSizePixel(), - Point(0,0), - GetOutputSizePixel(), - *mpDevice); - - ::Window::Paint (rBoundingBox); -} - - - - -bool TitleBar::Expand (bool bFlag) -{ - bool bExpansionStateChanged (bFlag!=IsExpanded()); - mbExpanded = bFlag; - Invalidate (); - return bExpansionStateChanged; -} - - - - -bool TitleBar::IsExpanded (void) const -{ - return mbExpanded; -} - - -void TitleBar::SetEnabledState(bool bFlag) -{ - if(bFlag) - Enable(); - else - Disable(); - Invalidate (); -} - - - - -void TitleBar::GetFocus() -{ - mbFocused = true; - Invalidate(); -} - - - - -void TitleBar::LoseFocus() -{ - mbFocused = false; - Invalidate(); -} - - - - -bool TitleBar::HasExpansionIndicator (void) const -{ - bool bHasExpansionIndicator (false); - if (mbIsExpandable) - { - switch (meType) - { - case TBT_SUB_CONTROL_HEADLINE: - bHasExpansionIndicator = true; - break; - } - } - return bHasExpansionIndicator; -} - - - - -Image TitleBar::GetExpansionIndicator (void) const -{ - Image aIndicator; - bool bHighContrastMode (GetSettings().GetStyleSettings().GetHighContrastMode() != 0); - if (mbIsExpandable) - { - sal_uInt16 nResourceId = 0; - switch (meType) - { - case TBT_SUB_CONTROL_HEADLINE: - if (mbExpanded) - if (bHighContrastMode) - nResourceId = BMP_COLLAPSE_H; - else - nResourceId = BMP_COLLAPSE; - else - if (bHighContrastMode) - nResourceId = BMP_EXPAND_H; - else - nResourceId = BMP_EXPAND; - - aIndicator = IconCache::Instance().GetIcon(nResourceId); - break; - } - } - - return aIndicator; -} - - - - -void TitleBar::PaintSubPanelHeadLineBar (void) -{ - int nWidth (GetOutputSizePixel().Width()); - Rectangle aTextBox (CalculateTextBoundingBox (nWidth, true)); - - Rectangle aTitleBarBox (CalculateTitleBarBox(aTextBox, nWidth)); - int nVerticalOffset = -aTitleBarBox.Top(); - aTitleBarBox.Top() += nVerticalOffset; - aTitleBarBox.Bottom() += nVerticalOffset; - aTextBox.Top() += nVerticalOffset; - aTextBox.Bottom() += nVerticalOffset; - - PaintBackground (aTitleBarBox); - Rectangle aFocusBox (PaintExpansionIndicator (aTextBox)); - PaintText (aTextBox); - - aFocusBox.Union (aTextBox); - aFocusBox.Left() -= 2; - aFocusBox.Right() += 1; - PaintFocusIndicator (aFocusBox); -} - - - - -void TitleBar::PaintFocusIndicator (const Rectangle& rTextBox) -{ - if (mbFocused) - { - Rectangle aTextPixelBox (mpDevice->LogicToPixel (rTextBox)); - mpDevice->EnableMapMode (sal_False); - Rectangle aBox (rTextBox); - aBox.Top() -= 1; - aBox.Bottom() += 1; - - mpDevice->SetFillColor (); - - mpDevice->DrawRect (aTextPixelBox); - - LineInfo aDottedStyle (LINE_DASH); - aDottedStyle.SetDashCount (0); - aDottedStyle.SetDotCount (1); - aDottedStyle.SetDotLen (1); - aDottedStyle.SetDistance (1); - - mpDevice->SetLineColor (COL_BLACK); - mpDevice->DrawPolyLine (Polygon(aTextPixelBox), aDottedStyle); - mpDevice->EnableMapMode (sal_False); - } - else - HideFocus (); -} - - - - -Rectangle TitleBar::PaintExpansionIndicator (const Rectangle& rTextBox) -{ - Rectangle aExpansionIndicatorArea; - - if (HasExpansionIndicator()) - { - Image aImage = GetExpansionIndicator(); - int nHeight (aImage.GetSizePixel().Height()); - if (nHeight > 0) - { - Point aPosition ( - 0, - rTextBox.Top() + (GetTextHeight() - nHeight) / 2); - if (meType == TBT_SUB_CONTROL_HEADLINE) - aPosition.X() += 3; - mpDevice->DrawImage (aPosition, aImage); - - aExpansionIndicatorArea = Rectangle ( - aPosition, aImage.GetSizePixel()); - } - } - - return aExpansionIndicatorArea; -} - - - - -void TitleBar::PaintText (const Rectangle& rTextBox) -{ - mpDevice->DrawText (rTextBox, msTitle, GetTextStyle()); -} - - - - -sal_uInt16 TitleBar::GetTextStyle (void) -{ - if(IsEnabled()) - { - return TEXT_DRAW_LEFT - | TEXT_DRAW_TOP - | TEXT_DRAW_MULTILINE - | TEXT_DRAW_WORDBREAK; - } - else - { - return TEXT_DRAW_DISABLE; - } -} - - - -void TitleBar::PaintBackground (const Rectangle& rTitleBarBox) -{ - // Fill a slightly rounded rectangle. - Color aFillColor (GetFillColor()); - Color aLineColor (GetLineColor()); - - switch (meType) - { - case TBT_SUB_CONTROL_HEADLINE: - { - Color aColor (GetSettings().GetStyleSettings().GetDialogColor()); - if (mbExpanded) - { - // Make the color a little bit darker. - aColor.SetRed(sal_uInt8(((sal_uInt16)aColor.GetRed()) * 8 / 10)); - aColor.SetGreen(sal_uInt8(((sal_uInt16)aColor.GetGreen()) * 8 / 10)); - aColor.SetBlue(sal_uInt8(((sal_uInt16)aColor.GetBlue()) * 8 / 10)); - } - - mpDevice->SetFillColor (aColor); - mpDevice->SetLineColor (); - mpDevice->DrawRect (rTitleBarBox); - - // Erase the four corner pixels to make the rectangle appear - // rounded. - mpDevice->SetLineColor ( - GetSettings().GetStyleSettings().GetWindowColor()); - mpDevice->DrawPixel ( - rTitleBarBox.TopLeft()); - mpDevice->DrawPixel ( - Point(rTitleBarBox.Right(), rTitleBarBox.Top())); - mpDevice->DrawPixel ( - Point(rTitleBarBox.Left(), rTitleBarBox.Bottom())); - mpDevice->DrawPixel ( - Point(rTitleBarBox.Right(), rTitleBarBox.Bottom())); - } - break; - } -} - - - - -Rectangle TitleBar::CalculateTextBoundingBox ( - int nAvailableWidth, - bool bEmphasizeExpanded) -{ - // Show the title of expanded controls in bold font. - const Font& rOriginalFont (GetFont()); - Font aFont (rOriginalFont); - if (bEmphasizeExpanded && mbExpanded) - aFont.SetWeight (WEIGHT_BOLD); - else - aFont.SetWeight (WEIGHT_NORMAL); - mpDevice->SetFont (aFont); - - // Use the natural width of the text when no width is given. - if (nAvailableWidth == 0) - nAvailableWidth = GetTextWidth (msTitle); - - Rectangle aTextBox ( - Point(0,0), - Size (nAvailableWidth, - GetSettings().GetStyleSettings().GetTitleHeight())); - aTextBox.Top() += (aTextBox.GetHeight() - GetTextHeight()) / 2; - if (HasExpansionIndicator()) - aTextBox.Left() += snIndentationWidth; - else - aTextBox.Left() += 3; - aTextBox.Right() -= 1; - - aTextBox = mpDevice->GetTextRect (aTextBox, msTitle, GetTextStyle()); - - return aTextBox; -} - - - - -Rectangle TitleBar::CalculateTitleBarBox ( - const Rectangle& rTextBox, - int nWidth) -{ - Rectangle aTitleBarBox (rTextBox); - - switch (meType) - { - case TBT_SUB_CONTROL_HEADLINE: - aTitleBarBox.Top() -= 3; - aTitleBarBox.Bottom() += 3; - break; - - } - aTitleBarBox.Left() = 0; - if (aTitleBarBox.GetWidth() < nWidth) - aTitleBarBox.Right() = nWidth-1; - - return aTitleBarBox; -} - - - - -void TitleBar::MouseMove (const MouseEvent& ) -{ -} - - - - -void TitleBar::MouseButtonDown (const MouseEvent& ) -{ - // Do not forward to parent window so that the mouse button handler of - // the docking window is not invoked. -} - - - - -void TitleBar::MouseButtonUp (const MouseEvent& ) -{ - // Do not forward to parent window so that the mouse button handler of - // the docking window is not invoked. -} - - - - -void TitleBar::DataChanged (const DataChangedEvent& rEvent) -{ - ::Window::DataChanged (rEvent); - - switch (rEvent.GetType()) - { - case DATACHANGED_SETTINGS: - if ((rEvent.GetFlags() & SETTINGS_STYLE) == 0) - break; - SetSettings(Application::GetSettings()); - mpDevice.reset(new VirtualDevice (*this)); - - // fall through. - - case DATACHANGED_FONTS: - case DATACHANGED_FONTSUBSTITUTION: - { - const StyleSettings& rStyleSettings (GetSettings().GetStyleSettings()); - - // Font. - Font aFont = rStyleSettings.GetAppFont(); - if (IsControlFont()) - aFont.Merge(GetControlFont()); - SetZoomedPointFont(aFont); - - // Color. - Color aColor; - if (IsControlForeground()) - aColor = GetControlForeground(); - else - aColor = rStyleSettings.GetButtonTextColor(); - SetTextColor(aColor); - SetTextFillColor(); - - Resize(); - Invalidate(); - } - break; - } -} - - - - -String TitleBar::GetTitle (void) const -{ - return msTitle; -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible > TitleBar::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - return new ::accessibility::AccessibleTreeNode( - *this, - GetTitle(), - GetTitle(), - ::com::sun::star::accessibility::AccessibleRole::LABEL); -} - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TitledControl.cxx b/sd/source/ui/toolpanel/TitledControl.cxx deleted file mode 100644 index bdd90ceb8fa7..000000000000 --- a/sd/source/ui/toolpanel/TitledControl.cxx +++ /dev/null @@ -1,428 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/TitledControl.hxx" - -#include "AccessibleTreeNode.hxx" -#include "taskpane/ControlContainer.hxx" -#include "TaskPaneFocusManager.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" -#include <vcl/ctrl.hxx> -#include <vcl/svapp.hxx> - - -namespace sd { namespace toolpanel { - - -TitledControl::TitledControl ( - TreeNode* pParent, - ::std::auto_ptr<TreeNode> pControl, - const String& rTitle, - const ClickHandler& rClickHandler, - TitleBar::TitleBarType eType) - : ::Window (pParent->GetWindow(), WB_TABSTOP), - TreeNode(pParent), - msTitle(rTitle), - mbVisible(true), - mpUserData(NULL), - mpClickHandler(new ClickHandler(rClickHandler)) -{ - mpControlContainer->AddControl (::std::auto_ptr<TreeNode> ( - new TitleBar (this, rTitle, eType, pControl->IsExpandable()))); - pControl->SetParentNode (this); - mpControlContainer->AddControl (pControl); - - FocusManager::Instance().RegisterDownLink( GetTitleBar()->GetWindow(), GetControl()->GetWindow() ); - FocusManager::Instance().RegisterUpLink( GetControl()->GetWindow(), GetTitleBar()->GetWindow() ); - - SetBackground (Wallpaper()); - - GetTitleBar()->GetWindow()->Show (); - GetTitleBar()->GetWindow()->AddEventListener ( - LINK(this,TitledControl,WindowEventListener)); - - UpdateStates (); -} - - - - -TitledControl::~TitledControl (void) -{ - GetTitleBar()->GetWindow()->RemoveEventListener ( - LINK(this,TitledControl,WindowEventListener)); -} - - - - -Size TitledControl::GetPreferredSize (void) -{ - Size aPreferredSize; - if (GetControl() != NULL) - { - aPreferredSize = GetControl()->GetPreferredSize(); - if ( ! IsExpanded()) - aPreferredSize.Height() = 0; - } - else - aPreferredSize = Size (GetSizePixel().Width(), 0); - if (aPreferredSize.Width() == 0) - aPreferredSize.Width() = 300; - aPreferredSize.Height() += GetTitleBar()->GetPreferredHeight( - aPreferredSize.Width()); - - return aPreferredSize; -} - - - - -sal_Int32 TitledControl::GetPreferredWidth (sal_Int32 nHeight) -{ - int nPreferredWidth = 0; - if (GetControl() != NULL) - nPreferredWidth = GetControl()->GetPreferredWidth( - nHeight - GetTitleBar()->GetWindow()->GetSizePixel().Height()); - else - nPreferredWidth = GetSizePixel().Width(); - if (nPreferredWidth == 0) - nPreferredWidth = 300; - - return nPreferredWidth; -} - - - - -sal_Int32 TitledControl::GetPreferredHeight (sal_Int32 nWidth) -{ - int nPreferredHeight = 0; - if (IsExpanded() && GetControl()!=NULL) - nPreferredHeight = GetControl()->GetPreferredHeight(nWidth); - nPreferredHeight += GetTitleBar()->GetPreferredHeight(nWidth); - - return nPreferredHeight; -} - - - - -bool TitledControl::IsResizable (void) -{ - return IsExpanded() - && GetControl()->IsResizable(); -} - - - - -::Window* TitledControl::GetWindow (void) -{ - return this; -} - - - - -void TitledControl::Resize (void) -{ - Size aWindowSize (GetOutputSizePixel()); - - int nTitleBarHeight - = GetTitleBar()->GetPreferredHeight(aWindowSize.Width()); - GetTitleBar()->GetWindow()->SetPosSizePixel ( - Point (0,0), - Size (aWindowSize.Width(), nTitleBarHeight)); - - - TreeNode* pControl = GetControl(); - if (pControl != NULL - && pControl->GetWindow() != NULL - && pControl->GetWindow()->IsVisible()) - { - pControl->GetWindow()->SetPosSizePixel ( - Point (0,nTitleBarHeight), - Size (aWindowSize.Width(), aWindowSize.Height()-nTitleBarHeight)); - } -} - - - - -void TitledControl::GetFocus (void) -{ - ::Window::GetFocus(); - if (GetTitleBar() != NULL) - GetTitleBar()->GrabFocus(); -} - - - - -void TitledControl::KeyInput (const KeyEvent& rEvent) -{ - KeyCode nCode = rEvent.GetKeyCode(); - if (nCode == KEY_SPACE) - { - // Toggle the expansion state of the control (when toggling is - // supported.) The focus remains on this control. - GetParentNode()->GetControlContainer().SetExpansionState ( - this, - ControlContainer::ES_TOGGLE); - } - else if (nCode == KEY_RETURN) - { - // Return, also called enter, enters the control and puts the - // focus to the first child. If the control is not yet - // expanded then do that first. - GetParentNode()->GetControlContainer().SetExpansionState ( - this, - ControlContainer::ES_EXPAND); - - if ( ! FocusManager::Instance().TransferFocus(this,nCode)) - { - // When already expanded then put focus on first child. - TreeNode* pControl = GetControl(); - if (pControl!=NULL && IsExpanded()) - if (pControl->GetWindow() != NULL) - pControl->GetWindow()->GrabFocus(); - } - } - else if (nCode == KEY_ESCAPE) - { - if ( ! FocusManager::Instance().TransferFocus(this,nCode)) - // Put focus to parent. - GetParent()->GrabFocus(); - } - else - Window::KeyInput (rEvent); -} - - - - -const String& TitledControl::GetTitle (void) const -{ - return msTitle; -} - - - - -bool TitledControl::Expand (bool bExpanded) -{ - bool bExpansionStateChanged (false); - - if (IsExpandable() && IsEnabled()) - { - if (GetTitleBar()->IsExpanded() != bExpanded) - bExpansionStateChanged |= GetTitleBar()->Expand (bExpanded); - // Get the control. Use the bExpanded parameter as argument to - // indicate that a control is created via its factory only when it - // is to be expanded. When it is collapsed this is not necessary. - TreeNode* pControl = GetControl(); - if (pControl != NULL - && GetControl()->IsExpanded() != bExpanded) - { - bExpansionStateChanged |= pControl->Expand (bExpanded); - } - if (bExpansionStateChanged) - UpdateStates(); - } - - return bExpansionStateChanged; -} - - - - -bool TitledControl::IsExpandable (void) const -{ - const TreeNode* pControl = GetConstControl(); - if (pControl != NULL) - return pControl->IsExpandable(); - else - // When a control factory is given but the control has not yet been - // created we assume that the control is expandable. - return true; -} - - - - -bool TitledControl::IsExpanded (void) const -{ - const TreeNode* pControl = GetConstControl(); - if (pControl != NULL) - return pControl->IsExpanded(); - else - return false; -} - -void TitledControl::SetEnabledState(bool bFlag) -{ - if (!bFlag) - { - GetParentNode()->GetControlContainer().SetExpansionState ( - this, - ControlContainer::ES_COLLAPSE); - Disable(); - } - else - { -/* - GetParentNode()->GetControlContainer().SetExpansionState ( - this, - ControlContainer::ES_EXPAND); -*/ - Enable(); - } - - GetTitleBar()->SetEnabledState(bFlag); -} - - - -bool TitledControl::IsShowing (void) const -{ - return mbVisible; -} - - - - -void TitledControl::Show (bool bVisible) -{ - if (mbVisible != bVisible) - { - mbVisible = bVisible; - UpdateStates (); - } -} - - - - -void TitledControl::UpdateStates (void) -{ - if (mbVisible) - GetWindow()->Show(); - else - GetWindow()->Hide(); - - TreeNode* pControl = GetControl(); - if (pControl!=NULL && pControl->GetWindow() != NULL) - { - if (IsVisible() && IsExpanded()) - pControl->GetWindow()->Show(); - else - pControl->GetWindow()->Hide(); - } -} - - - - -IMPL_LINK(TitledControl, WindowEventListener, - VclSimpleEvent*, pEvent) -{ - if (pEvent!=NULL && pEvent->ISA(VclWindowEvent)) - { - VclWindowEvent* pWindowEvent = static_cast<VclWindowEvent*>(pEvent); - switch (pWindowEvent->GetId()) - { - case VCLEVENT_WINDOW_MOUSEBUTTONUP: - if (IsEnabled()) - (*mpClickHandler)(*this); - break; - } - } - return 0; -} - - - - -TreeNode* TitledControl::GetControl (void) -{ - return mpControlContainer->GetControl(1); -} - - - - -const TreeNode* TitledControl::GetConstControl () const -{ - return const_cast<TitledControl*>(this)->GetControl(); -} - - - - -TitleBar* TitledControl::GetTitleBar (void) -{ - return static_cast<TitleBar*>(mpControlContainer->GetControl(0)); -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> TitledControl::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - return new ::accessibility::AccessibleTreeNode( - *this, - GetTitle(), - GetTitle(), - ::com::sun::star::accessibility::AccessibleRole::LIST_ITEM); -} - - - - -//===== TitledControlStandardClickHandler ===================================== - -TitledControlStandardClickHandler::TitledControlStandardClickHandler ( - ControlContainer& rControlContainer, - ControlContainer::ExpansionState eExpansionState) - : mrControlContainer(rControlContainer), - meExpansionState(eExpansionState) -{ -} - - - - -void TitledControlStandardClickHandler::operator () (TitledControl& rTitledControl) -{ - // Toggle expansion. - mrControlContainer.SetExpansionState (&rTitledControl, meExpansionState); -} - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/ToolPanel.cxx b/sd/source/ui/toolpanel/ToolPanel.cxx deleted file mode 100644 index 3e229cda9776..000000000000 --- a/sd/source/ui/toolpanel/ToolPanel.cxx +++ /dev/null @@ -1,110 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#include "precompiled_sd.hxx" - -#include "ToolPanel.hxx" -#include "MethodGuard.hxx" -#include <taskpane/TaskPaneTreeNode.hxx> - -/** === begin UNO includes === **/ -#include <com/sun/star/lang/DisposedException.hpp> -/** === end UNO includes === **/ - -#include <vcl/window.hxx> - -//...................................................................................................................... -namespace sd { namespace toolpanel -{ -//...................................................................................................................... - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::UNO_SET_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Type; - using ::com::sun::star::lang::DisposedException; - using ::com::sun::star::awt::XWindow; - using ::com::sun::star::accessibility::XAccessible; - /** === end UNO using === **/ - - typedef MethodGuard< ToolPanel > ToolPanelGuard; - - //================================================================================================================== - //= ToolPanel - //================================================================================================================== - //------------------------------------------------------------------------------------------------------------------ - ToolPanel::ToolPanel( ::std::auto_ptr< TreeNode >& i_rControl ) - :ToolPanel_Base( m_aMutex ) - ,m_pControl( i_rControl ) - { - } - - //------------------------------------------------------------------------------------------------------------------ - ToolPanel::~ToolPanel() - { - } - - //------------------------------------------------------------------------------------------------------------------ - void ToolPanel::checkDisposed() - { - if ( m_pControl.get() == NULL ) - throw DisposedException( ::rtl::OUString(), *this ); - } - - //------------------------------------------------------------------------------------------------------------------ - Reference< XWindow > SAL_CALL ToolPanel::getWindow() throw (RuntimeException) - { - ToolPanelGuard aGuard( *this ); - return Reference< XWindow >( m_pControl->GetWindow()->GetComponentInterface(), UNO_QUERY_THROW ); - } - - //------------------------------------------------------------------------------------------------------------------ - Reference< XAccessible > SAL_CALL ToolPanel::createAccessible( const Reference< XAccessible >& i_rParentAccessible ) throw (RuntimeException) - { - ToolPanelGuard aGuard( *this ); - Reference< XAccessible > xAccessible( m_pControl->GetWindow()->GetAccessible( sal_False ) ); - if ( !xAccessible.is() ) - { - xAccessible.set( m_pControl->CreateAccessibleObject( i_rParentAccessible ) ); - m_pControl->GetWindow()->SetAccessible( xAccessible ); - } - return xAccessible; - } - - //------------------------------------------------------------------------------------------------------------------ - void SAL_CALL ToolPanel::disposing() - { - m_pControl.reset(); - } - -//...................................................................................................................... -} } // namespace sd::toolpanel -//...................................................................................................................... diff --git a/sd/source/ui/toolpanel/ToolPanel.hxx b/sd/source/ui/toolpanel/ToolPanel.hxx deleted file mode 100644 index ffaba793feb8..000000000000 --- a/sd/source/ui/toolpanel/ToolPanel.hxx +++ /dev/null @@ -1,77 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TOOLPANEL_HXX -#define SD_TOOLPANEL_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/ui/XToolPanel.hpp> -/** === end UNO includes === **/ - -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase1.hxx> - -#include <memory> - -//...................................................................................................................... -namespace sd { namespace toolpanel -{ -//...................................................................................................................... - - class TreeNode; - - //================================================================================================================== - //= ToolPanel - //================================================================================================================== - typedef ::cppu::WeakComponentImplHelper1 < ::com::sun::star::ui::XToolPanel - > ToolPanel_Base; - class ToolPanel :public ::cppu::BaseMutex - ,public ToolPanel_Base - { - public: - ToolPanel( - ::std::auto_ptr< TreeNode >& i_rControl - ); - - // XToolPanel - virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL getWindow() throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL createAccessible( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& ParentAccessible ) throw (::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - ::osl::Mutex& getMutex() { return m_aMutex; } - void checkDisposed(); - - protected: - ~ToolPanel(); - - private: - ::std::auto_ptr< TreeNode > m_pControl; - }; - -//...................................................................................................................... -} } // namespace sd::toolpanel -//...................................................................................................................... - -#endif // SD_TOOLPANEL_HXX diff --git a/sd/source/ui/toolpanel/ToolPanelDescriptor.hxx b/sd/source/ui/toolpanel/ToolPanelDescriptor.hxx deleted file mode 100644 index f418fcf3d728..000000000000 --- a/sd/source/ui/toolpanel/ToolPanelDescriptor.hxx +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TOOL_PANEL_DESCRIPTOR_HXX -#define SD_TOOL_PANEL_DESCRIPTOR_HXX - -#include <tools/string.hxx> -#include <tools/gen.hxx> -#include <memory> - -class Window; - -namespace sd { namespace toolpanel { - - -/** Collection of information the describes entries of the tool - panel. A descriptor owns the control it is associated with. -*/ -class ToolPanelDescriptor -{ -public: - /** Create a new descriptor for the given control. - @param pControl - */ - ToolPanelDescriptor (::std::auto_ptr< ::Window> pControl, - const String& rTitle); - - ~ToolPanelDescriptor (void); - - /** Return the height of the title bar. - @return - The title bar height is returned in pixels. - */ - int GetTitleBarHeight (void) const; - - - void SetPositionAndSize (const Point& aPosition, - const Size& aSize); - void SetPositionAndSize (const Rectangle& aBox); - void SetWeight (double nWeight); - - Window* GetControl (void) const; - const String& GetTitle (void) const; - const Rectangle& GetTitleBox (void) const; - Rectangle GetPositionAndSize (void) const; - double GetWeight (void) const; - - int GetTotalHeight (void) const; - int GetWindowHeight (void) const; - -private: - ::std::auto_ptr< ::Window> mpControl; - String msTitle; - Rectangle maTitleBox; - double mnWeight; - int mnTotalHeight; - - /// Do not use! Assignment operator is not supported. - const ToolPanelDescriptor& operator= ( - const ToolPanelDescriptor& aDescriptor); -}; - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/toolpanel/ToolPanelFactory.cxx b/sd/source/ui/toolpanel/ToolPanelFactory.cxx deleted file mode 100644 index dafab6cd88bc..000000000000 --- a/sd/source/ui/toolpanel/ToolPanelFactory.cxx +++ /dev/null @@ -1,252 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#include "precompiled_sd.hxx" - -#include "taskpane/ToolPanelViewShell.hxx" -#include "framework/FrameworkHelper.hxx" -#include "PaneChildWindows.hxx" -#include "ViewShellBase.hxx" -#include "app.hrc" - -/** === begin UNO includes === **/ -#include <com/sun/star/ui/XUIElementFactory.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/uno/XComponentContext.hpp> -#include <com/sun/star/frame/XFrame.hpp> -#include <com/sun/star/awt/XWindow.hpp> -/** === end UNO includes === **/ - -#include <sfx2/frame.hxx> -#include <vcl/svapp.hxx> -#include <vos/mutex.hxx> -#include <sfx2/viewfrm.hxx> -#include <cppuhelper/implbase3.hxx> -#include <comphelper/namedvaluecollection.hxx> -#include <toolkit/helper/vclunohelper.hxx> - -//...................................................................................................................... -namespace sd { namespace toolpanel -{ -//...................................................................................................................... - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::UNO_SET_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Type; - using ::com::sun::star::uno::XComponentContext; - using ::com::sun::star::ui::XUIElementFactory; - using ::com::sun::star::ui::XUIElement; - using ::com::sun::star::beans::PropertyValue; - using ::com::sun::star::container::NoSuchElementException; - using ::com::sun::star::lang::IllegalArgumentException; - using ::com::sun::star::lang::XServiceInfo; - using ::com::sun::star::lang::XInitialization; - using ::com::sun::star::frame::XFrame; - using ::com::sun::star::awt::XWindow; - /** === end UNO using === **/ - - //================================================================================================================== - //= ToolPanelFactory - //================================================================================================================== - typedef ::cppu::WeakImplHelper3 < XUIElementFactory - , XServiceInfo - , XInitialization - > ToolPanelFactory_Base; - class ToolPanelFactory : public ToolPanelFactory_Base - { - public: - ToolPanelFactory( const Reference< XComponentContext >& i_rContext ); - - // XUIElementFactory - virtual Reference< XUIElement > SAL_CALL createUIElement( const ::rtl::OUString& ResourceURL, const Sequence< PropertyValue >& Args ) throw (NoSuchElementException, IllegalArgumentException, RuntimeException); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException); - virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException); - virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); - - // XInitialization - virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException); - - protected: - virtual ~ToolPanelFactory(); - - private: - const Reference< XComponentContext > m_xContext; - }; - - //------------------------------------------------------------------------------------------------------------------ - Reference< XInterface > SAL_CALL ToolPanelFactory_createInstance( const Reference< XComponentContext >& i_rContext ) - { - return Reference< XInterface >( *new ToolPanelFactory( i_rContext ) ); - } - - //------------------------------------------------------------------------------------------------------------------ - ::rtl::OUString ToolPanelFactory_getImplementationName() throw(RuntimeException) - { - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.drawing.ToolPanelFactory" ) ); - } - - //------------------------------------------------------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ToolPanelFactory_getSupportedServiceNames (void) - throw (RuntimeException) - { - const ::rtl::OUString sServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.DefaultToolPanelFactory" ) ); - return Sequence< ::rtl::OUString >( &sServiceName, 1 ); - } - - //------------------------------------------------------------------------------------------------------------------ - ToolPanelFactory::ToolPanelFactory( const Reference< XComponentContext >& i_rContext ) - :m_xContext( i_rContext ) - { - } - - //------------------------------------------------------------------------------------------------------------------ - ToolPanelFactory::~ToolPanelFactory() - { - } - - //------------------------------------------------------------------------------------------------------------------ - Reference< XUIElement > SAL_CALL ToolPanelFactory::createUIElement( const ::rtl::OUString& i_rResourceURL, const Sequence< PropertyValue >& i_rArgs ) throw (NoSuchElementException, IllegalArgumentException, RuntimeException) - { - ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); - - const PanelId ePanelId( toolpanel::GetStandardPanelId( i_rResourceURL ) ); - if ( ePanelId == PID_UNKNOWN ) - throw NoSuchElementException( i_rResourceURL, *this ); - - const ::comphelper::NamedValueCollection aArgs( i_rArgs ); - const Reference< XFrame > xDocFrame( aArgs.getOrDefault( "Frame", Reference< XFrame >() ) ); - const Reference< XWindow > xParentWindow( aArgs.getOrDefault( "ParentWindow", Reference< XWindow >() ) ); - if ( !xDocFrame.is() || !xParentWindow.is() ) - throw IllegalArgumentException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "For creating a standard tool panel, a Frame and a Parent window are needed." ) ), - *this, - 2 - ); - - // look up the Sfx(View)Frame for the given XFrame - SfxViewFrame* pViewFrame = NULL; - for ( SfxFrame* pFrame = SfxFrame::GetFirst(); - pFrame != NULL; - pFrame = SfxFrame::GetNext( *pFrame ) - ) - { - if ( pFrame->GetFrameInterface() == xDocFrame ) - { - pViewFrame = pFrame->GetCurrentViewFrame(); - break; - } - } - - if ( !pViewFrame || !pViewFrame->HasChildWindow( SID_TASKPANE ) ) - throw IllegalArgumentException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Illegal frame." ) ), - *this, - 2 - ); - - // retrieve the task pane - ToolPanelChildWindow* pToolPanelWindow( dynamic_cast< ToolPanelChildWindow* >( pViewFrame->GetChildWindow( SID_TASKPANE ) ) ); - if ( !pToolPanelWindow ) - throw IllegalArgumentException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No Impress document, or no Impress Task Pane." ) ), - *this, - 2 - ); - - // retrieve the ViewShellBase, and the view shell of the task pane - ViewShellBase* pViewShellBase = dynamic_cast< ViewShellBase* >( pViewFrame->GetViewShell() ); - ::boost::shared_ptr< framework::FrameworkHelper > pFrameworkHelper; - if ( pViewShellBase ) - pFrameworkHelper = framework::FrameworkHelper::Instance( *pViewShellBase ); - ::boost::shared_ptr< ViewShell > pViewShell; - if ( pFrameworkHelper.get() ) - pViewShell = pFrameworkHelper->GetViewShell( framework::FrameworkHelper::msRightPaneURL ); - ToolPanelViewShell* pToolPanelShell = dynamic_cast< ToolPanelViewShell* >( pViewShell.get() ); - - if ( !pToolPanelShell ) - throw IllegalArgumentException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Wrong document type." ) ), - *this, - 2 - ); - - ::Window* pParentWindow = VCLUnoHelper::GetWindow( xParentWindow ); - if ( !pParentWindow || !pToolPanelShell->IsPanelAnchorWindow( *pParentWindow ) ) - throw IllegalArgumentException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported parent window." ) ), - *this, - 2 - ); - - return pToolPanelShell->CreatePanelUIElement( xDocFrame, i_rResourceURL ); - } - - //------------------------------------------------------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ToolPanelFactory::getImplementationName( ) throw (RuntimeException) - { - return ToolPanelFactory_getImplementationName(); - } - - //------------------------------------------------------------------------------------------------------------------ - ::sal_Bool SAL_CALL ToolPanelFactory::supportsService( const ::rtl::OUString& i_rServiceName ) throw (RuntimeException) - { - const Sequence< ::rtl::OUString > aSupported( getSupportedServiceNames() ); - for ( const ::rtl::OUString* pSupported = aSupported.getConstArray(); - pSupported != aSupported.getConstArray() + aSupported.getLength(); - ++pSupported - ) - if ( *pSupported == i_rServiceName ) - return sal_True; - - return sal_False; - } - - //------------------------------------------------------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ToolPanelFactory::getSupportedServiceNames( ) throw (RuntimeException) - { - return ToolPanelFactory_getSupportedServiceNames(); - } - - //------------------------------------------------------------------------------------------------------------------ - void SAL_CALL ToolPanelFactory::initialize( const Sequence< Any >& i_rArguments ) throw (Exception, RuntimeException) - { - ::comphelper::NamedValueCollection aArgs( i_rArguments ); - (void)aArgs; - // TODO - } - -//...................................................................................................................... -} } // namespace sd::toolpanel -//...................................................................................................................... diff --git a/sd/source/ui/toolpanel/ToolPanelUIElement.cxx b/sd/source/ui/toolpanel/ToolPanelUIElement.cxx deleted file mode 100644 index 4b795ee2a6c6..000000000000 --- a/sd/source/ui/toolpanel/ToolPanelUIElement.cxx +++ /dev/null @@ -1,131 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#include "precompiled_sd.hxx" - -#include "ToolPanelUIElement.hxx" -#include "MethodGuard.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/ui/UIElementType.hpp> -#include <com/sun/star/lang/XComponent.hpp> -/** === end UNO includes === **/ - -#include <tools/diagnose_ex.h> - -//...................................................................................................................... -namespace sd { namespace toolpanel -{ -//...................................................................................................................... - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::UNO_SET_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Type; - using ::com::sun::star::frame::XFrame; - using ::com::sun::star::lang::XComponent; - using ::com::sun::star::ui::XToolPanel; - using ::com::sun::star::lang::DisposedException; - /** === end UNO using === **/ - namespace UIElementType = ::com::sun::star::ui::UIElementType; - - typedef MethodGuard< ToolPanelUIElement > UIElementMethodGuard; - - //================================================================================================================== - //= ToolPanelUIElement - //================================================================================================================== - //------------------------------------------------------------------------------------------------------------------ - ToolPanelUIElement::ToolPanelUIElement( const Reference< XFrame >& i_rFrame, const ::rtl::OUString& i_rResourceURL, - const Reference< XToolPanel >& i_rToolPanel ) - :ToolPanelUIElement_Base( m_aMutex ) - ,m_xFrame( i_rFrame ) - ,m_sResourceURL( i_rResourceURL ) - ,m_xToolPanel( i_rToolPanel ) - { - } - - //------------------------------------------------------------------------------------------------------------------ - ToolPanelUIElement::~ToolPanelUIElement() - { - } - - //------------------------------------------------------------------------------------------------------------------ - void ToolPanelUIElement::checkDisposed() - { - if ( !m_xToolPanel.is() ) - throw DisposedException( ::rtl::OUString(), *this ); - } - - //------------------------------------------------------------------------------------------------------------------ - Reference< XFrame > SAL_CALL ToolPanelUIElement::getFrame() throw (RuntimeException) - { - UIElementMethodGuard aGuard( *this ); - return m_xFrame; - } - - //------------------------------------------------------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ToolPanelUIElement::getResourceURL() throw (RuntimeException) - { - UIElementMethodGuard aGuard( *this ); - return m_sResourceURL; - } - - //------------------------------------------------------------------------------------------------------------------ - ::sal_Int16 SAL_CALL ToolPanelUIElement::getType() throw (RuntimeException) - { - UIElementMethodGuard aGuard( *this ); - return UIElementType::TOOLPANEL; - } - - //------------------------------------------------------------------------------------------------------------------ - Reference< XInterface > SAL_CALL ToolPanelUIElement::getRealInterface( ) throw (RuntimeException) - { - UIElementMethodGuard aGuard( *this ); - return m_xToolPanel.get(); - } - - //------------------------------------------------------------------------------------------------------------------ - void SAL_CALL ToolPanelUIElement::disposing() - { - try - { - Reference< XComponent > xPanelComponent( m_xToolPanel, UNO_QUERY_THROW ); - xPanelComponent->dispose(); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - -//...................................................................................................................... -} } // namespace sd::toolpanel -//...................................................................................................................... diff --git a/sd/source/ui/toolpanel/ToolPanelUIElement.hxx b/sd/source/ui/toolpanel/ToolPanelUIElement.hxx deleted file mode 100644 index 0354e01f7039..000000000000 --- a/sd/source/ui/toolpanel/ToolPanelUIElement.hxx +++ /dev/null @@ -1,84 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TOOLPANELUIELEMENT_HXX -#define SD_TOOLPANELUIELEMENT_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/ui/XUIElement.hpp> -#include <com/sun/star/ui/XToolPanel.hpp> -/** === end UNO includes === **/ - -#include <cppuhelper/compbase1.hxx> -#include <cppuhelper/basemutex.hxx> - -#include <memory> - -//...................................................................................................................... -namespace sd { namespace toolpanel -{ -//...................................................................................................................... - - class TreeNode; - - //================================================================================================================== - //= ToolPanelUIElement - //================================================================================================================== - typedef ::cppu::WeakComponentImplHelper1 < ::com::sun::star::ui::XUIElement - > ToolPanelUIElement_Base; - class ToolPanelUIElement :public ::cppu::BaseMutex - ,public ToolPanelUIElement_Base - { - public: - ToolPanelUIElement( - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& i_rFrame, - const ::rtl::OUString& i_rResourceURL, - const ::com::sun::star::uno::Reference< ::com::sun::star::ui::XToolPanel >& i_rToolPanel - ); - - // XUIElement - virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > SAL_CALL getFrame() throw (::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getResourceURL() throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int16 SAL_CALL getType() throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getRealInterface( ) throw (::com::sun::star::uno::RuntimeException); - - void checkDisposed(); - ::osl::Mutex& getMutex() { return m_aMutex; } - - protected: - virtual ~ToolPanelUIElement(); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - private: - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > m_xFrame; - const ::rtl::OUString m_sResourceURL; - const ::com::sun::star::uno::Reference< ::com::sun::star::ui::XToolPanel > m_xToolPanel; - }; - -//...................................................................................................................... -} } // namespace sd::toolpanel -//...................................................................................................................... - -#endif // SD_TOOLPANELUIELEMENT_HXX diff --git a/sd/source/ui/toolpanel/ToolPanelViewShell.cxx b/sd/source/ui/toolpanel/ToolPanelViewShell.cxx deleted file mode 100644 index ba49bac8f0d7..000000000000 --- a/sd/source/ui/toolpanel/ToolPanelViewShell.cxx +++ /dev/null @@ -1,900 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/ToolPanelViewShell.hxx" - -#include "TaskPaneShellManager.hxx" -#include "TaskPaneFocusManager.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" -#include "controls/MasterPagesPanel.hxx" -#include "LayoutMenu.hxx" -#include "DrawDocShell.hxx" -#include "controls/TableDesignPanel.hxx" -#include "controls/CustomAnimationPanel.hxx" -#include "controls/SlideTransitionPanel.hxx" -#include "controls/MasterPagesSelector.hxx" -#include "ToolPanel.hxx" -#include "ToolPanelUIElement.hxx" -#include "PaneDockingWindow.hxx" -#include "FrameView.hxx" -#include "Window.hxx" -#include "sdmod.hxx" -#include "app.hrc" -#include "glob.hrc" -#include "res_bmp.hrc" -#include "helpids.h" -#include "strings.hrc" -#include "sdresid.hxx" -#include "framework/FrameworkHelper.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/drawing/framework/XResourceId.hpp> -#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp> -#include <com/sun/star/drawing/framework/AnchorBindingMode.hpp> -#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp> -#include <com/sun/star/drawing/XDrawSubController.hpp> -/** === end UNO includes === **/ - -#include <svtools/toolpanel/toolpanel.hxx> -#include <svtools/toolpanel/toolpaneldeck.hxx> -#include <svx/dlgctrl.hxx> -#include <sfx2/taskpane.hxx> -#include <sfx2/imagemgr.hxx> -#include <sfx2/bindings.hxx> -#include <sfx2/dispatch.hxx> -#include <sfx2/viewfrm.hxx> -#include <sfx2/msg.hxx> -#include <sfx2/objface.hxx> -#include <svx/colrctrl.hxx> -#include <svx/xtable.hxx> -#include <vcl/dockwin.hxx> -#include "sdtreelb.hxx" -#include "DrawViewShell.hxx" -#include "drawdoc.hxx" -#include "ViewShellBase.hxx" -#include <svx/ruler.hxx> -#include <vcl/svapp.hxx> -#include <vcl/toolbox.hxx> -#include <tools/diagnose_ex.h> -#include <unotools/confignode.hxx> -#include <comphelper/processfactory.hxx> -#include <comphelper/componentcontext.hxx> -#include <cppuhelper/implbase1.hxx> -#include <cppuhelper/basemutex.hxx> - -#include <vector> - -using namespace ::sd::toolpanel; - -#define ToolPanelViewShell -#include "sdslots.hxx" - -/** === begin UNO using === **/ -using ::com::sun::star::uno::Reference; -using ::com::sun::star::uno::XInterface; -using ::com::sun::star::uno::UNO_QUERY; -using ::com::sun::star::uno::UNO_QUERY_THROW; -using ::com::sun::star::uno::UNO_SET_THROW; -using ::com::sun::star::uno::Exception; -using ::com::sun::star::uno::RuntimeException; -using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::makeAny; -using ::com::sun::star::uno::Sequence; -using ::com::sun::star::uno::Type; -using ::com::sun::star::accessibility::XAccessible; -using ::com::sun::star::drawing::XDrawSubController; -using ::com::sun::star::frame::XFrame; -using ::com::sun::star::drawing::framework::XResourceId; -using ::com::sun::star::drawing::framework::XConfigurationChangeListener; -using ::com::sun::star::drawing::framework::ConfigurationChangeEvent; -using ::com::sun::star::lang::EventObject; -using ::com::sun::star::lang::DisposedException; -using ::com::sun::star::drawing::framework::XConfigurationControllerBroadcaster; -using ::com::sun::star::drawing::framework::XConfigurationController; -using ::com::sun::star::drawing::framework::XConfiguration; -using ::com::sun::star::drawing::framework::AnchorBindingMode_DIRECT; -using ::com::sun::star::ui::XUIElement; -using ::com::sun::star::ui::XToolPanel; -using ::com::sun::star::drawing::framework::ResourceActivationMode_REPLACE; -/** === end UNO using === **/ - -using ::sd::framework::FrameworkHelper; - -namespace sd { namespace toolpanel { - -// ===================================================================================================================== -// = misc helper -// ===================================================================================================================== -// --------------------------------------------------------------------------------------------------------------------- -PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL, const bool i_bIgnoreUnknown ) -{ - PanelId ePanelId( PID_UNKNOWN ); - - if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msMasterPagesTaskPanelURL ) ) - { - ePanelId = PID_MASTER_PAGES; - } - else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msLayoutTaskPanelURL ) ) - { - ePanelId = PID_LAYOUT; - } - else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msTableDesignPanelURL ) ) - { - ePanelId = PID_TABLE_DESIGN; - } - else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msCustomAnimationTaskPanelURL ) ) - { - ePanelId = PID_CUSTOM_ANIMATION; - } - else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msSlideTransitionTaskPanelURL ) ) - { - ePanelId = PID_SLIDE_TRANSITION; - } - else - { - OSL_ENSURE( i_bIgnoreUnknown, "GetStandardPanelId: cannot translate the given resource URL!" ); - (void)i_bIgnoreUnknown; - } - - return ePanelId; -} - -// --------------------------------------------------------------------------------------------------------------------- -PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL ) -{ - return GetStandardPanelId( i_rTaskPanelResourceURL, false ); -} - -// ===================================================================================================================== -// = ConfigurationListener - declaration -// ===================================================================================================================== -typedef ::cppu::WeakImplHelper1 < XConfigurationChangeListener - > ConfigurationListener_Base; - -class ConfigurationListener :public ::cppu::BaseMutex - ,public ConfigurationListener_Base -{ -public: - ConfigurationListener( ToolPanelViewShell_Impl& i_rShellImpl ); - - // XConfigurationChangeListener - virtual void SAL_CALL notifyConfigurationChange( const ConfigurationChangeEvent& aEvent ) throw (RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing( const EventObject& Source ) throw (RuntimeException); - - // XComponent equivalents (not available per UNO interface) - void dispose(); - -protected: - ~ConfigurationListener(); - - void impl_checkDisposed_throw() - { - if ( !m_pShellImpl ) - throw DisposedException( ::rtl::OUString(), *this ); - } - -private: - ToolPanelViewShell_Impl* m_pShellImpl; -}; - -// ===================================================================================================================== -// = ToolPanelViewShell_Impl - declaration -// ===================================================================================================================== -/** Inner implementation class of ToolPanelViewShell. -*/ -class ToolPanelViewShell_Impl :public ::boost::noncopyable - ,public ::svt::IToolPanelDeckListener - ,public ::sfx2::IToolPanelCompare -{ -public: - static const size_t mnInvalidId = static_cast< size_t >( -1 ); - - ToolPanelViewShell_Impl( ToolPanelViewShell& i_rPanelViewShell, ::Window& i_rPanelDeckParent ); - ~ToolPanelViewShell_Impl(); - - ToolPanelViewShell& GetAntiImpl() { return m_rPanelViewShell; } - - /** Here the panels are created that are shown in the task pane. - */ - void Setup(); - - /** clean up the instance - */ - void Cleanup(); - - /** activates the panel which has the given resource URL - */ - void ActivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL ); - - /** de-activates the panel given by its resource URL, bypassing the configuration controller - - If the panel is not active currently, nothing happens. - */ - void DeactivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL ); - - /** provides access to the the VCL window of the panel deck - */ - ::sfx2::ModuleTaskPane& GetTaskPane() { return *m_pTaskPane; } - const ::sfx2::ModuleTaskPane& GetTaskPane() const { return *m_pTaskPane; } - - ::svt::ToolPanelDeck& GetToolPanelDeck() { return GetTaskPane().GetPanelDeck(); } - const ::svt::ToolPanelDeck& GetToolPanelDeck() const { return GetTaskPane().GetPanelDeck(); } - - Reference< XAccessible > - CreateAccessible( ::sd::Window& i_rWindow ); - - void ConnectToDockingWindow(); - -private: - // IToolPanelDeckListener overridables - virtual void PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition ); - virtual void PanelRemoved( const size_t i_nPosition ); - virtual void ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive ); - virtual void LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter ); - virtual void Dying(); - - // IToolPanelCompare overridables - virtual short compareToolPanelsURLs( const ::rtl::OUString& i_rLHS, const ::rtl::OUString& i_rRHS ) const; - -private: - struct InitialPanel - { - ::rtl::OUString sPanelResourceURL; - bool bActivateDirectly; - InitialPanel() - :sPanelResourceURL() - ,bActivateDirectly( true ) - { - } - }; - InitialPanel impl_determineInitialPanel(); - ::rtl::OUString impl_getPanelURL( const ::boost::optional< size_t >& i_rPanel ); - -private: - ToolPanelViewShell& m_rPanelViewShell; - ::boost::scoped_ptr< ::sfx2::ModuleTaskPane > m_pTaskPane; - ::std::auto_ptr< ::sfx2::TaskPaneController > m_pTaskPaneController; - ::rtl::Reference< ConfigurationListener > m_pConfigListener; - bool m_bInitialized; -}; - -// ===================================================================================================================== -// = ConfigurationListener - implementation -// ===================================================================================================================== -// --------------------------------------------------------------------------------------------------------------------- -ConfigurationListener::ConfigurationListener( ToolPanelViewShell_Impl& i_rShellImpl ) - :m_pShellImpl( &i_rShellImpl ) -{ - ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( i_rShellImpl.GetAntiImpl().GetViewShellBase() ) ); - Reference< XConfigurationControllerBroadcaster > xBroadcaster; - if ( pFrameworkHelper.get() ) - xBroadcaster.set( pFrameworkHelper->GetConfigurationController().get() ); - ENSURE_OR_THROW( pFrameworkHelper.get(), "no access to the config controller" ); - - osl_incrementInterlockedCount( &m_refCount ); - { - xBroadcaster->addConfigurationChangeListener( this, ::rtl::OUString(), Any() ); - } - osl_decrementInterlockedCount( &m_refCount ); -} - -// --------------------------------------------------------------------------------------------------------------------- -ConfigurationListener::~ConfigurationListener() -{ -} - -// --------------------------------------------------------------------------------------------------------------------- -void SAL_CALL ConfigurationListener::notifyConfigurationChange( const ConfigurationChangeEvent& i_rEvent ) throw (RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - impl_checkDisposed_throw(); - - // is this an event we're interested in? - if ( i_rEvent.Type != FrameworkHelper::msResourceActivationEvent ) - return; - - // is this a resource we're interested in? Must be anchored in the task pane ... - Reference< XResourceId > xAnchorId; - if ( i_rEvent.ResourceId.is() ) - xAnchorId = i_rEvent.ResourceId->getAnchor(); - if ( !xAnchorId.is() ) - return; - const ::rtl::OUString sAnchorURL( xAnchorId->getResourceURL() ); - if ( sAnchorURL != FrameworkHelper::msTaskPaneURL ) - return; - - m_pShellImpl->ActivatePanelByResource( i_rEvent.ResourceId->getResourceURL() ); -} - -// --------------------------------------------------------------------------------------------------------------------- -void SAL_CALL ConfigurationListener::disposing( const EventObject& i_rEvent ) throw (RuntimeException) -{ - (void)i_rEvent; - { - ::osl::MutexGuard aGuard( m_aMutex ); - impl_checkDisposed_throw(); - } - - dispose(); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ConfigurationListener::dispose() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - m_pShellImpl = NULL; -} - -// ===================================================================================================================== -// = ToolPanelViewShell -// ===================================================================================================================== -// --------------------------------------------------------------------------------------------------------------------- -SFX_IMPL_INTERFACE(ToolPanelViewShell, SfxShell, SdResId(STR_TASKPANEVIEWSHELL)) -{ -} - -// --------------------------------------------------------------------------------------------------------------------- -TYPEINIT1(ToolPanelViewShell, ViewShell); - -// --------------------------------------------------------------------------------------------------------------------- -ToolPanelViewShell_Impl::InitialPanel ToolPanelViewShell_Impl::impl_determineInitialPanel() -{ - InitialPanel aPanelToActivate; - if ( GetAntiImpl().GetViewShellBase().GetDocShell()->GetDocumentType() == DOCUMENT_TYPE_DRAW ) - // for Draw, rely on SFX's default handling, which is to activate the previously active panel - return aPanelToActivate; - - // Default to Layout panel, but check whether the requested configuration already contains a tool panel, in this case, - // use that one. - aPanelToActivate.sPanelResourceURL = FrameworkHelper::msLayoutTaskPanelURL; - aPanelToActivate.bActivateDirectly = false; - try - { - ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( m_rPanelViewShell.GetViewShellBase() ) ); - const Reference< XResourceId > xToolPanelId( pFrameworkHelper->CreateResourceId( FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL ) ); - Reference< XConfigurationController > xCC( pFrameworkHelper->GetConfigurationController(), UNO_QUERY_THROW ); - Reference< XConfiguration > xConfiguration( xCC->getRequestedConfiguration(), UNO_QUERY_THROW ); - Sequence< Reference< XResourceId > > aViewIds( xConfiguration->getResources( - FrameworkHelper::CreateResourceId( FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL ), - FrameworkHelper::msTaskPanelURLPrefix, AnchorBindingMode_DIRECT ) ); - - if ( aViewIds.getLength() > 0 ) - { - const ::rtl::OUString sResourceURL( aViewIds[0]->getResourceURL() ); - PanelId nRequestedPanel = GetStandardPanelId( sResourceURL ); - if ( nRequestedPanel != PID_UNKNOWN ) - { - aPanelToActivate.sPanelResourceURL = sResourceURL; - aPanelToActivate.bActivateDirectly = true; - } - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return aPanelToActivate; -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::Setup() -{ - if ( m_bInitialized ) - return; - m_bInitialized = true; - - // initially activate a panel - const InitialPanel aInitialPanel = impl_determineInitialPanel(); - if ( aInitialPanel.sPanelResourceURL.getLength() ) - { - if ( aInitialPanel.bActivateDirectly ) - { - ActivatePanelByResource( aInitialPanel.sPanelResourceURL ); - } - else - { - ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( GetAntiImpl().GetViewShellBase() ) ); - pFrameworkHelper->RequestTaskPanel( aInitialPanel.sPanelResourceURL ); - } - } - - // listen at the configuration - m_pConfigListener.set( new ConfigurationListener( *this ) ); - - m_pTaskPane->Show(); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::Cleanup() -{ - if ( m_bInitialized ) - { - if ( m_pConfigListener.is() ) - m_pConfigListener->dispose(); - } - GetToolPanelDeck().RemoveListener( *this ); - m_pTaskPaneController.reset(); - m_pTaskPane.reset(); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::ActivatePanelByResource( const ::rtl::OUString& i_rResourceURL ) -{ - // determine position of the requested panel - ::boost::optional< size_t > aPanelPos = GetTaskPane().GetPanelPos( i_rResourceURL ); - OSL_ENSURE( !!aPanelPos, "ToolPanelViewShell_Impl::ActivatePanelByResource: illegal panel resource, or illegal panel deck setup!" ); - if ( !!aPanelPos ) - GetToolPanelDeck().ActivatePanel( *aPanelPos ); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::DeactivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL ) -{ - // determine position of the requested panel - ::boost::optional< size_t > aPanelPos = GetTaskPane().GetPanelPos( i_rPanelResourceURL ); - OSL_ENSURE( !!aPanelPos, "ToolPanelViewShell_Impl::DeactivatePanelByResource: illegal panel resource, or illegal panel deck setup!" ); - if ( !!aPanelPos ) - { - if ( GetToolPanelDeck().GetActivePanel() == *aPanelPos ) - GetToolPanelDeck().ActivatePanel( ::boost::optional< size_t >() ); - } -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell::Initialize() -{ - mpImpl->Setup(); -} - -// --------------------------------------------------------------------------------------------------------------------- -ToolPanelViewShell::ToolPanelViewShell( SfxViewFrame* pFrame, ViewShellBase& rViewShellBase, ::Window* pParentWindow, - FrameView* pFrameViewArgument ) - :ViewShell(pFrame, pParentWindow, rViewShellBase) - ,mpImpl( new ToolPanelViewShell_Impl( *this, *mpContentWindow.get() ) ) - ,mpSubShellManager() - ,mnMenuId(0) -{ - meShellType = ST_TASK_PANE; - - mpContentWindow->SetCenterAllowed( false ); - pParentWindow->SetStyle( pParentWindow->GetStyle() | WB_DIALOGCONTROL ); - - GetParentWindow()->SetBackground( Wallpaper() ); - mpContentWindow->SetBackground( Wallpaper() ); - - GetParentWindow()->SetHelpId(HID_SD_TASK_PANE); - - mpImpl->ConnectToDockingWindow(); - - SetPool( &GetDoc()->GetPool() ); - - if ( pFrameViewArgument ) - mpFrameView = pFrameViewArgument; - else - mpFrameView = new FrameView( GetDoc() ); - GetFrameView()->Connect(); - - // Hide or delete unused controls that we have inherited from the - // ViewShell base class. - mpHorizontalScrollBar.reset(); - mpVerticalScrollBar.reset(); - mpScrollBarBox.reset(); - mpHorizontalRuler.reset(); - mpVerticalRuler.reset(); - - SetName( String( RTL_CONSTASCII_USTRINGPARAM( "ToolPanelViewShell" ) ) ); - - // enforce the creation of the Accessible object here. - // In some not-always-to-reproduce situations, creating the accessible on demand only leads to some - // cycliy parenthood references between the involved objects, which make some AT tools (accerciser, in particular) - // loop (which is /not/ a bug in the tool, of course). - // However, since those situations were not reproducible anymore, we deliberately leave the Accessible creation - // (which originally was intended as a workaround) herein. Better to be safe ... - // Note that this is not a performance problem: The implementation of the ToolPanelDeck's Accessible - // is separated from the implementation of its AccessibleContext (which even is in a separate library) - we only - // create the former here, the latter is still created on demand, when somebody requests it. - // #i113671# / 2010-09-17 / frank.schoenheit@oracle.com - if (mpContentWindow.get()) - mpContentWindow->GetAccessible( sal_True ); - - // For accessibility we have to shortly hide the content window. This - // triggers the construction of a new accessibility object for the new - // view shell. (One is created earlier while the construtor of the base - // class is executed. At that time the correct accessibility object can - // not be constructed.) - if (mpContentWindow.get()) - { - mpContentWindow->Hide(); - mpContentWindow->Show(); - } - - // Register the shell manager as factory at the ViewShellManager. - mpSubShellManager.reset( new TaskPaneShellManager( - GetViewShellBase().GetViewShellManager(), - *this - ) ); - GetViewShellBase().GetViewShellManager()->AddSubShellFactory( this, mpSubShellManager ); -} - -// --------------------------------------------------------------------------------------------------------------------- -ToolPanelViewShell::~ToolPanelViewShell() -{ - mpImpl->Cleanup(); - - // reset our impl before destroying the panel deck, to ensure the hidden panels are properly - // disposed/destroyed, too - mpImpl.reset(); - GetViewShellBase().GetViewShellManager()->RemoveSubShellFactory(this, mpSubShellManager); - - GetFrameView()->Disconnect(); // i120663, release the FrameView object -} - -// --------------------------------------------------------------------------------------------------------------------- -// static -void ToolPanelViewShell::RegisterControls() -{ - SfxModule* pModule = SD_MOD(); - controls::MasterPagesSelector::RegisterInterface( pModule ); - LayoutMenu::RegisterInterface( pModule ); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell::ArrangeGUIElements() -{ - ViewShell::ArrangeGUIElements(); - - Initialize(); - - mpImpl->GetTaskPane().SetPosSizePixel( Point(), maViewSize ); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell::GetFocus() -{ - Invalidate(); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell::LoseFocus() -{ - Invalidate(); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell::KeyInput( const KeyEvent& i_rKeyEvent ) -{ - const KeyCode nCode = i_rKeyEvent.GetKeyCode(); - if ( nCode == KEY_RETURN ) - { - if ( !mpImpl->GetTaskPane().HasChildPathFocus() ) - mpImpl->GetTaskPane().GrabFocus(); - } - else - ViewShell::KeyInput( i_rKeyEvent, NULL ); -} - -// --------------------------------------------------------------------------------------------------------------------- -SdPage* ToolPanelViewShell::GetActualPage() -{ - return NULL; -} - -// --------------------------------------------------------------------------------------------------------------------- -SdPage* ToolPanelViewShell::getCurrentPage() const -{ - return NULL; -} - -// --------------------------------------------------------------------------------------------------------------------- -TaskPaneShellManager& ToolPanelViewShell::GetSubShellManager() const -{ - return *mpSubShellManager.get(); -} - -// --------------------------------------------------------------------------------------------------------------------- -DockingWindow* ToolPanelViewShell::GetDockingWindow() -{ - ::Window* pParentWindow = GetParentWindow(); - DockingWindow* pDockingWindow = NULL; - while (pParentWindow!=NULL && pDockingWindow==NULL) - { - pDockingWindow = dynamic_cast<DockingWindow*>(pParentWindow); - pParentWindow = pParentWindow->GetParent(); - } - return pDockingWindow; -} - -// --------------------------------------------------------------------------------------------------------------------- -Reference< XAccessible > ToolPanelViewShell::CreateAccessibleDocumentView( ::sd::Window* i_pWindow ) -{ - ENSURE_OR_RETURN( i_pWindow, "ToolPanelViewShell::CreateAccessibleDocumentView: illegal window!", NULL ); - return mpImpl->CreateAccessible( *i_pWindow ); -} - -// --------------------------------------------------------------------------------------------------------------------- -Reference< XDrawSubController > ToolPanelViewShell::CreateSubController() -{ - // This view shell is not designed to be the main view shell and thus - // does not support a UNO sub controller. - return Reference< XDrawSubController >(); -} - -// --------------------------------------------------------------------------------------------------------------------- -bool ToolPanelViewShell::RelocateToParentWindow( ::Window* pParentWindow ) -{ - ::Window* pOldParentWindow = GetParentWindow(); - FocusManager::Instance().RemoveLinks( pOldParentWindow, &mpImpl->GetTaskPane() ); - FocusManager::Instance().RemoveLinks( &mpImpl->GetTaskPane(), pOldParentWindow ); - - PaneDockingWindow* pDockingWindow = dynamic_cast< PaneDockingWindow* >( GetDockingWindow() ); - if ( pDockingWindow != NULL ) - { - pDockingWindow->SetEndDockingHdl( Link() ); - } - - ViewShell::RelocateToParentWindow(pParentWindow); - - mpImpl->ConnectToDockingWindow(); - - Resize(); - - return true; -} - -//--------------------------------------------------------------------------------------------------------------------- -bool ToolPanelViewShell::IsPanelAnchorWindow( const ::Window& i_rWindow ) const -{ - return &mpImpl->GetToolPanelDeck().GetPanelWindowAnchor() == &i_rWindow; -} - -//--------------------------------------------------------------------------------------------------------------------- -namespace -{ - typedef std::auto_ptr< ControlFactory > (*ControlFactoryFactory)( ToolPanelViewShell& i_rToolPanelShell ); - - struct PanelFactory - { - ControlFactoryFactory pFactory; - rtl::OString sHelpID; - PanelFactory( const ControlFactoryFactory i_pFactory, const rtl::OString& i_nHelpID ) - :pFactory( i_pFactory ) - ,sHelpID( i_nHelpID ) - { - } - }; - - const PanelFactory lcl_describePanel( const PanelId i_ePanelId ) - { - switch ( i_ePanelId ) - { - case PID_MASTER_PAGES: - return PanelFactory( &controls::MasterPagesPanel::CreateControlFactory, HID_SD_SLIDE_DESIGNS ); - case PID_LAYOUT: - return PanelFactory( &LayoutMenu::CreateControlFactory, HID_SD_SLIDE_LAYOUTS ); - case PID_TABLE_DESIGN: - return PanelFactory( &controls::TableDesignPanel::CreateControlFactory, HID_SD_TABLE_DESIGN ); - case PID_CUSTOM_ANIMATION: - return PanelFactory( &controls::CustomAnimationPanel::CreateControlFactory, HID_SD_CUSTOM_ANIMATIONS ); - case PID_SLIDE_TRANSITION: - return PanelFactory( &controls::SlideTransitionPanel::CreateControlFactory, HID_SD_SLIDE_TRANSITIONS ); - default: - break; - } - throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "illegal panel ID" ) ), NULL ); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -Reference< XUIElement > ToolPanelViewShell::CreatePanelUIElement( const Reference< XFrame >& i_rDocFrame, const ::rtl::OUString& i_rPanelResourceURL ) -{ - const PanelId ePanelId( GetStandardPanelId( i_rPanelResourceURL ) ); - ENSURE_OR_RETURN( ePanelId != PID_UNKNOWN, "ToolPanelViewShell::CreatePanelUIElement: illegal panel URL!", NULL ); - - // a TreeNode which will resemble the panel - const PanelFactory aPanelFactory( lcl_describePanel( ePanelId ) ); - ::std::auto_ptr< ControlFactory > pControlFactory( (*aPanelFactory.pFactory)( *this ) ); - ::std::auto_ptr< TreeNode > pNode( pControlFactory->CreateControl( mpImpl->GetToolPanelDeck().GetPanelWindowAnchor() ) ); - ENSURE_OR_THROW( ( pNode.get() != NULL ) && ( pNode->GetWindow() != NULL ), - "illegal node returned by the control factory" ); - pNode->GetWindow()->SetHelpId( aPanelFactory.sHelpID ); - - // create an XToolPanel - Reference< XToolPanel > xPanel( new ToolPanel( pNode ) ); - - // create an XUIElement providing this panel - const Reference< XUIElement > xUIElement( new ToolPanelUIElement( i_rDocFrame, i_rPanelResourceURL, xPanel ) ); - - return xUIElement; -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell::ActivatePanel( const ::rtl::OUString& i_rPanelResourceURL ) -{ - OSL_ENSURE( i_rPanelResourceURL.indexOf( FrameworkHelper::msTaskPanelURLPrefix ) < 0, - "ToolPanelViewShell::ActivatePanel: for drawing-framework-controller panels, please use FrameworkHelper::RequestTaskPanel!" ); - mpImpl->ActivatePanelByResource( i_rPanelResourceURL ); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell::DeactivatePanel( const ::rtl::OUString& i_rPanelResourceURL ) -{ - mpImpl->DeactivatePanelByResource( i_rPanelResourceURL ); -} - -// ===================================================================================================================== -// = ToolPanelViewShell_Impl - implementation -// ===================================================================================================================== -// --------------------------------------------------------------------------------------------------------------------- -ToolPanelViewShell_Impl::ToolPanelViewShell_Impl( ToolPanelViewShell& i_rPanelViewShell, ::Window& i_rPanelDeckParent ) - :m_rPanelViewShell( i_rPanelViewShell ) - ,m_pTaskPane( new ::sfx2::ModuleTaskPane( i_rPanelDeckParent, i_rPanelViewShell.GetViewShellBase().GetViewFrame()->GetFrame().GetFrameInterface(), *this ) ) - ,m_bInitialized( false ) -{ - const String sPaneTitle( SdResId( STR_RIGHT_PANE_TITLE ) ); - GetToolPanelDeck().SetAccessibleName( sPaneTitle ); - GetToolPanelDeck().SetAccessibleDescription( sPaneTitle ); - - GetToolPanelDeck().AddListener( *this ); -} - -// --------------------------------------------------------------------------------------------------------------------- -ToolPanelViewShell_Impl::~ToolPanelViewShell_Impl() -{ -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition ) -{ - // not interested in - (void)i_pPanel; - (void)i_nPosition; -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::PanelRemoved( const size_t i_nPosition ) -{ - // not interested in - (void)i_nPosition; -} - -// --------------------------------------------------------------------------------------------------------------------- -::rtl::OUString ToolPanelViewShell_Impl::impl_getPanelURL( const ::boost::optional< size_t >& i_rPanel ) -{ - ::rtl::OUString sPanelURL; - if ( !!i_rPanel ) - { - sPanelURL = GetTaskPane().GetPanelResourceURL( *i_rPanel ); - const PanelId ePanelId( GetStandardPanelId( sPanelURL, true ) ); - if ( ePanelId == PID_UNKNOWN ) - sPanelURL = ::rtl::OUString(); - } - return sPanelURL; -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive ) -{ - // update the configuration controller, since this change in the active panel might have been triggered by means other - // than the drawing framework, so it does not yet know about it. - - const ::rtl::OUString sOldPanelURL( impl_getPanelURL( i_rOldActive ) ); - const ::rtl::OUString sNewPanelURL( impl_getPanelURL( i_rNewActive ) ); - - const ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( GetAntiImpl().GetViewShellBase() ) ); - if ( sNewPanelURL.getLength() ) - { - // activate the resource belonging to the new panel. This will automatically de-activate the previously active - // panel resource (since ResourceActivationMode_REPLACE is used) - pFrameworkHelper->RequestTaskPanel( sNewPanelURL ); - } - else if ( sOldPanelURL.getLength() ) - { - // there is no new active panel, or it is not one of our standard panels, i.e. it is not covered by the - // resource framework. => Deactivate the old resource. - try - { - Reference< XConfigurationController > xConfigController( pFrameworkHelper->GetConfigurationController(), UNO_QUERY_THROW ); - xConfigController->requestResourceDeactivation( - pFrameworkHelper->CreateResourceId( - sOldPanelURL, - FrameworkHelper::msTaskPaneURL, - FrameworkHelper::msRightPaneURL - ) - ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter ) -{ - // not interested in - (void)i_rNewLayouter; -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::Dying() -{ - // not interested in -} - -// --------------------------------------------------------------------------------------------------------------------- -short ToolPanelViewShell_Impl::compareToolPanelsURLs( const ::rtl::OUString& i_rLHS, const ::rtl::OUString& i_rRHS ) const -{ - const PanelId eLHS( GetStandardPanelId( i_rLHS, true ) ); - const PanelId eRHS( GetStandardPanelId( i_rRHS, true ) ); - if ( eLHS < eRHS ) - return -1; - if ( eLHS == eRHS ) - return 0; - return 1; -} - -// --------------------------------------------------------------------------------------------------------------------- -void ToolPanelViewShell_Impl::ConnectToDockingWindow() -{ - m_pTaskPaneController.reset(); - DockingWindow* pDockingWindow( GetAntiImpl().GetDockingWindow() ); - if ( pDockingWindow ) - { - PaneDockingWindow* pPaneDockingWindow = dynamic_cast< PaneDockingWindow* >( pDockingWindow ); - OSL_ENSURE( pPaneDockingWindow, "ToolPanelViewShell_Impl::ConnectToDockingWindow: unsupported docking window type!" ); - if ( pPaneDockingWindow != NULL ) - m_pTaskPaneController.reset( new ::sfx2::TaskPaneController( GetTaskPane(), *pPaneDockingWindow ) ); - } - - // Tell the focus manager that we want to pass the focus to our - // child. - FocusManager::Instance().RegisterDownLink( GetAntiImpl().GetParentWindow(), &GetTaskPane() ); -} - -// --------------------------------------------------------------------------------------------------------------------- -Reference< XAccessible > ToolPanelViewShell_Impl::CreateAccessible( ::sd::Window& i_rWindow ) -{ - Reference< XAccessible > xAccessible( GetToolPanelDeck().GetAccessible( sal_False ) ); - if ( !xAccessible.is() ) - { - // determine the XAccessible which is the parent of the to-be-created object - ::Window* pAccessibleParent = i_rWindow.GetAccessibleParentWindow(); - OSL_ENSURE( pAccessibleParent, "ToolPanelViewShell_Impl::CreateAccessible: illegal accessible parent provided by the sd::Window!" ); - GetToolPanelDeck().SetAccessibleParentWindow( pAccessibleParent ); - - xAccessible = GetToolPanelDeck().GetAccessible( sal_True ); - ENSURE_OR_RETURN( xAccessible.is(), "ToolPanelViewShell_Impl::CreateAccessible: illegal ToolPanelDeck accessible!", NULL ); - OSL_ENSURE( xAccessible->getAccessibleContext().is() - && xAccessible->getAccessibleContext()->getAccessibleParent() == pAccessibleParent->GetAccessible(), - "ToolPanelViewShell_Impl::CreateAccessible: illegal parenthood!" ); - } - return xAccessible; -} - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/controls/AnimationSchemesPanel.cxx b/sd/source/ui/toolpanel/controls/AnimationSchemesPanel.cxx deleted file mode 100644 index 79c9a01f2154..000000000000 --- a/sd/source/ui/toolpanel/controls/AnimationSchemesPanel.cxx +++ /dev/null @@ -1,135 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" -#include "AnimationSchemesPanel.hxx" - -#include "strings.hrc" -#include "sdresid.hxx" -#include <com/sun/star/frame/XModel.hpp> - -namespace sd -{ - - class ViewShellBase; - extern ::Window * createAnimationSchemesPanel( ::Window* pParent, ViewShellBase& rBase ); - -namespace toolpanel { namespace controls { - - -AnimationSchemesPanel::AnimationSchemesPanel(TreeNode* pParent, ViewShellBase& rBase) - : SubToolPanel (pParent), - maPreferredSize( 100, 200 ) -{ - mpWrappedControl = createAnimationSchemesPanel( pParent->GetWindow(), rBase ); - mpWrappedControl->Show(); -} - -AnimationSchemesPanel::~AnimationSchemesPanel() -{ - delete mpWrappedControl; -} - -Size AnimationSchemesPanel::GetPreferredSize() -{ - return maPreferredSize; -} -sal_Int32 AnimationSchemesPanel::GetPreferredWidth(sal_Int32 ) -{ - return maPreferredSize.Width(); -} -sal_Int32 AnimationSchemesPanel::GetPreferredHeight(sal_Int32 ) -{ - return maPreferredSize.Height(); -} -::Window* AnimationSchemesPanel::GetWindow() -{ - return mpWrappedControl; -} -bool AnimationSchemesPanel::IsResizable() -{ - return true; -} -bool AnimationSchemesPanel::IsExpandable() const -{ - return true; -} - - -} } } // end of namespace ::sd::toolpanel::controls -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" -#include "AnimationSchemesPanel.hxx" - -#include "strings.hrc" -#include "sdresid.hxx" -#include <com/sun/star/frame/XModel.hpp> - -namespace sd -{ - - class ViewShellBase; - extern ::Window * createAnimationSchemesPanel( ::Window* pParent, ViewShellBase& rBase ); - -namespace toolpanel { namespace controls { - - -AnimationSchemesPanel::AnimationSchemesPanel(TreeNode* pParent, ViewShellBase& rBase) - : SubToolPanel (pParent), - maPreferredSize( 100, 200 ) -{ - mpWrappedControl = createAnimationSchemesPanel( pParent->GetWindow(), rBase ); - mpWrappedControl->Show(); -} - -AnimationSchemesPanel::~AnimationSchemesPanel() -{ - delete mpWrappedControl; -} - -Size AnimationSchemesPanel::GetPreferredSize() -{ - return maPreferredSize; -} -sal_Int32 AnimationSchemesPanel::GetPreferredWidth(sal_Int32 ) -{ - return maPreferredSize.Width(); -} -sal_Int32 AnimationSchemesPanel::GetPreferredHeight(sal_Int32 ) -{ - return maPreferredSize.Height(); -} -::Window* AnimationSchemesPanel::GetWindow() -{ - return mpWrappedControl; -} -bool AnimationSchemesPanel::IsResizable() -{ - return true; -} -bool AnimationSchemesPanel::IsExpandable() const -{ - return true; -} - - -} } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/AnimationSchemesPanel.hxx b/sd/source/ui/toolpanel/controls/AnimationSchemesPanel.hxx deleted file mode 100644 index aa5e8080d7a2..000000000000 --- a/sd/source/ui/toolpanel/controls/AnimationSchemesPanel.hxx +++ /dev/null @@ -1,104 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - -#ifndef SD_TASKPANE_CONTROLS_ANIMATION_SCHEMES_PANEL_HXX -#define SD_TASKPANE_CONTROLS_ANIMATION_SCHEMES_PANEL_HXX - -#include "taskpane/SubToolPanel.hxx" - -namespace sd { -class ViewShellBase; -} - -namespace sd { namespace toolpanel { -class TreeNode; -} } - -namespace sd { namespace toolpanel { namespace controls { - -class AnimationSchemesPanel - : public SubToolPanel -{ -public: - AnimationSchemesPanel ( - TreeNode* pParent, - ViewShellBase& rBase); - virtual ~AnimationSchemesPanel (void); - - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual ::Window* GetWindow (void); - virtual bool IsResizable (void); - virtual bool IsExpandable (void) const; - - using Window::GetWindow; - -private: - Size maPreferredSize; - ::Window* mpWrappedControl; -}; - -} } } // end of namespace ::sd::toolpanel::controls - -#endif -#ifndef SD_TASKPANE_CONTROLS_ANIMATION_SCHEMES_PANEL_HXX -#define SD_TASKPANE_CONTROLS_ANIMATION_SCHEMES_PANEL_HXX - -#include "taskpane/SubToolPanel.hxx" - -namespace sd { -class ViewShellBase; -} - -namespace sd { namespace toolpanel { -class TreeNode; -} } - -namespace sd { namespace toolpanel { namespace controls { - -class AnimationSchemesPanel - : public SubToolPanel -{ -public: - AnimationSchemesPanel ( - TreeNode* pParent, - ViewShellBase& rBase); - virtual ~AnimationSchemesPanel (void); - - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual ::Window* GetWindow (void); - virtual bool IsResizable (void); - virtual bool IsExpandable (void) const; - - using Window::GetWindow; - -private: - Size maPreferredSize; - ::Window* mpWrappedControl; -}; - -} } } // end of namespace ::sd::toolpanel::controls - -#endif diff --git a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx deleted file mode 100644 index ccb9db835d6e..000000000000 --- a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx +++ /dev/null @@ -1,109 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "CustomAnimationPanel.hxx" - -#include "taskpane/TaskPaneControlFactory.hxx" -#include "taskpane/ToolPanelViewShell.hxx" - -#include "strings.hrc" -#include "sdresid.hxx" - -namespace sd -{ - - class ViewShellBase; - extern ::Window * createCustomAnimationPanel( ::Window* pParent, ViewShellBase& rBase ); - -namespace toolpanel { namespace controls { - - -CustomAnimationPanel::CustomAnimationPanel(Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell) - :SubToolPanel( i_rParentWindow ) - ,m_pPanelViewShell( &i_rPanelViewShell ) -{ - mpWrappedControl = createCustomAnimationPanel( &i_rParentWindow, i_rPanelViewShell.GetViewShellBase() ); - mpWrappedControl->Show(); -} - -CustomAnimationPanel::~CustomAnimationPanel() -{ - delete mpWrappedControl; -} - -std::auto_ptr< ControlFactory > CustomAnimationPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) -{ - return std::auto_ptr< ControlFactory >( - new RootControlFactoryWithArg< CustomAnimationPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); -} - -TaskPaneShellManager* CustomAnimationPanel::GetShellManager() -{ - if ( m_pPanelViewShell ) - return &m_pPanelViewShell->GetSubShellManager(); - return SubToolPanel::GetShellManager(); -} - -Size CustomAnimationPanel::GetPreferredSize() -{ - return maPreferredSize; -} -sal_Int32 CustomAnimationPanel::GetPreferredWidth(sal_Int32 ) -{ - return maPreferredSize.Width(); -} -sal_Int32 CustomAnimationPanel::GetPreferredHeight(sal_Int32 ) -{ - return maPreferredSize.Height(); -} -::Window* CustomAnimationPanel::GetWindow() -{ - return mpWrappedControl; -} -bool CustomAnimationPanel::IsResizable() -{ - return true; -} -bool CustomAnimationPanel::IsExpandable() const -{ - return true; -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> CustomAnimationPanel::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - if (GetWindow() != NULL) - return GetWindow()->GetAccessible(); - else - return NULL; -} - -} } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx deleted file mode 100644 index 8a1c28f594ab..000000000000 --- a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx +++ /dev/null @@ -1,77 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TOOLPANEL_CONTROLS_CUSTOM_ANIMATION_PANEL_HXX -#define SD_TOOLPANEL_CONTROLS_CUSTOM_ANIMATION_PANEL_HXX - -#include "taskpane/SubToolPanel.hxx" - -namespace sd { -class ViewShellBase; -} - -namespace sd { namespace toolpanel { -class TreeNode; -class ControlFactory; -class ToolPanelViewShell; -} } - -namespace sd { namespace toolpanel { namespace controls { - -class CustomAnimationPanel - : public SubToolPanel -{ -public: - CustomAnimationPanel ( - Window& i_rParentWindow, - ToolPanelViewShell& i_rPanelViewShell); - virtual ~CustomAnimationPanel (void); - - static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rPanelViewShell); - - // TreeNode overridables - virtual TaskPaneShellManager* GetShellManager(); - - // ILayoutableWindow overridables - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual ::Window* GetWindow (void); - virtual bool IsResizable (void); - virtual bool IsExpandable (void) const; - - virtual ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible > CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& rxParent); - - using Window::GetWindow; -private: - Size maPreferredSize; - ::Window* mpWrappedControl; - ToolPanelViewShell* m_pPanelViewShell; -}; - -} } } // end of namespace ::sd::toolpanel::controls - -#endif diff --git a/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx b/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx deleted file mode 100644 index f5d7218963e7..000000000000 --- a/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx +++ /dev/null @@ -1,154 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "MasterPagesPanel.hxx" -#include "taskpane/ScrollPanel.hxx" -#include "CurrentMasterPagesSelector.hxx" -#include "RecentMasterPagesSelector.hxx" -#include "AllMasterPagesSelector.hxx" -#include "taskpane/ToolPanelViewShell.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" -#include "taskpane/TitledControl.hxx" -#include "../TaskPaneShellManager.hxx" - -#include "DrawViewShell.hxx" -#include "ViewShellBase.hxx" - -#include "strings.hrc" -#include "sdresid.hxx" -#include "helpids.h" -#include <svtools/valueset.hxx> -#include "app.hrc" - -namespace sd { namespace toolpanel { namespace controls { - - -MasterPagesPanel::MasterPagesPanel (::Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell) - :ScrollPanel (i_rParentWindow) - ,m_pPanelViewShell( &i_rPanelViewShell ) -{ - impl_construct( m_pPanelViewShell->GetViewShellBase() ); -} - -void MasterPagesPanel::impl_construct( ViewShellBase& rBase ) -{ - SdDrawDocument* pDocument = rBase.GetDocument(); - ::std::auto_ptr<controls::MasterPagesSelector> pSelector; - TitledControl* pTitledControl; - - ::boost::shared_ptr<MasterPageContainer> pContainer (new MasterPageContainer()); - - // Create a panel with the master pages that are in use by the currently - // edited document. - DrawViewShell* pDrawViewShell = dynamic_cast<DrawViewShell*>(rBase.GetMainViewShell().get()); - pSelector.reset(new controls::CurrentMasterPagesSelector ( - this, - *pDocument, - rBase, - pContainer)); - pSelector->LateInit(); - pSelector->SetHelpId( HID_SD_TASK_PANE_PREVIEW_CURRENT ); - GetShellManager()->AddSubShell( - SHELLID_SD_TASK_PANE_PREVIEW_CURRENT, - pSelector.get(), - pSelector->GetWindow()); - pTitledControl = AddControl ( - ::std::auto_ptr<TreeNode>(pSelector.release()), - SdResId(STR_TASKPANEL_CURRENT_MASTER_PAGES_TITLE), - HID_SD_CURRENT_MASTERS); - - // Create a panel with the most recently used master pages. - pSelector.reset(new controls::RecentMasterPagesSelector ( - this, - *pDocument, - rBase, - pContainer)); - pSelector->LateInit(); - pSelector->SetHelpId( HID_SD_TASK_PANE_PREVIEW_RECENT ); - GetShellManager()->AddSubShell( - SHELLID_SD_TASK_PANE_PREVIEW_RECENT, - pSelector.get(), - pSelector->GetWindow()); - pTitledControl = AddControl ( - ::std::auto_ptr<TreeNode>(pSelector.release()), - SdResId(STR_TASKPANEL_RECENT_MASTER_PAGES_TITLE), - HID_SD_RECENT_MASTERS); - - // Create a panel with all available master pages. - pSelector.reset(new controls::AllMasterPagesSelector ( - this, - *pDocument, - rBase, - *pDrawViewShell, - pContainer)); - pSelector->LateInit(); - pSelector->SetHelpId( HID_SD_TASK_PANE_PREVIEW_ALL ); - GetShellManager()->AddSubShell( - SHELLID_SD_TASK_PANE_PREVIEW_ALL, - pSelector.get(), - pSelector->GetWindow()); - pTitledControl = AddControl ( - ::std::auto_ptr<TreeNode>(pSelector.release()), - SdResId(STR_TASKPANEL_ALL_MASTER_PAGES_TITLE), - HID_SD_ALL_MASTERS); -} - - - - - -MasterPagesPanel::~MasterPagesPanel (void) -{ - TaskPaneShellManager* pShellManager( GetShellManager() ); - OSL_ENSURE( pShellManager, "MasterPagesPanel::~MasterPagesPanel: no shell manager anymore - cannot remove sub shells!" ); - if ( pShellManager ) - { - pShellManager->RemoveSubShell( SHELLID_SD_TASK_PANE_PREVIEW_CURRENT ); - pShellManager->RemoveSubShell( SHELLID_SD_TASK_PANE_PREVIEW_RECENT ); - pShellManager->RemoveSubShell( SHELLID_SD_TASK_PANE_PREVIEW_ALL ); - } -} - - - - -TaskPaneShellManager* MasterPagesPanel::GetShellManager() -{ - if ( m_pPanelViewShell ) - return &m_pPanelViewShell->GetSubShellManager(); - return TreeNode::GetShellManager(); -} - - - - -std::auto_ptr< ControlFactory > MasterPagesPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) -{ - return std::auto_ptr< ControlFactory >( - new RootControlFactoryWithArg< MasterPagesPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); -} - -} } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx b/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx deleted file mode 100644 index aeaf97180c24..000000000000 --- a/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx +++ /dev/null @@ -1,68 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TASKPANE_CONTROLS_MASTER_PAGES_PANEL_HXX -#define SD_TASKPANE_CONTROLS_MASTER_PAGES_PANEL_HXX - -#include "taskpane/ScrollPanel.hxx" - -namespace sd { -class ViewShellBase; -} - -namespace sd { namespace toolpanel { -class ControlFactory; -class TreeNode; -class ToolPanelViewShell; -} } - -namespace sd { namespace toolpanel { namespace controls { - -/** The master pages panel combines three master page related panels into - one. This has the benefit that creation of the task pane becomes a - little bit simpler and that common scroll bars can be displayed. -*/ -class MasterPagesPanel - : public ScrollPanel -{ -public: - MasterPagesPanel ( - ::Window& i_rParentWindow, - ToolPanelViewShell& i_rPanelViewShell); - virtual ~MasterPagesPanel (void); - - // TreeNode overridables - virtual TaskPaneShellManager* GetShellManager (void); - - static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell); - -private: - void impl_construct( ViewShellBase& rBase ); - -private: - ToolPanelViewShell* m_pPanelViewShell; -}; - -} } } // end of namespace ::sd::toolpanel::controls - -#endif diff --git a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx deleted file mode 100644 index a55f18caf41e..000000000000 --- a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx +++ /dev/null @@ -1,112 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" -#include "SlideTransitionPanel.hxx" - -#include "taskpane/TaskPaneControlFactory.hxx" -#include "taskpane/ToolPanelViewShell.hxx" - -#include "strings.hrc" -#include "sdresid.hxx" -#include <com/sun/star/frame/XModel.hpp> - -namespace sd -{ - - class ViewShellBase; - extern ::Window * createSlideTransitionPanel( ::Window* pParent, ViewShellBase& rBase ); - -namespace toolpanel { namespace controls { - - - -SlideTransitionPanel::SlideTransitionPanel(Window& i_rParentWindow, ToolPanelViewShell& i_rToolPanelShell) - :SubToolPanel( i_rParentWindow ) - ,maPreferredSize( 100, 200 ) - ,m_pPanelViewShell( &i_rToolPanelShell ) -{ - mpWrappedControl = createSlideTransitionPanel( &i_rParentWindow, i_rToolPanelShell.GetViewShellBase() ); - mpWrappedControl->Show(); -} - -SlideTransitionPanel::~SlideTransitionPanel() -{ - delete mpWrappedControl; -} - -std::auto_ptr< ControlFactory > SlideTransitionPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) -{ - return std::auto_ptr< ControlFactory >( - new RootControlFactoryWithArg< SlideTransitionPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); -} - -TaskPaneShellManager* SlideTransitionPanel::GetShellManager() -{ - if ( m_pPanelViewShell ) - return &m_pPanelViewShell->GetSubShellManager(); - return SubToolPanel::GetShellManager(); -} - -Size SlideTransitionPanel::GetPreferredSize() -{ - return maPreferredSize; -} -sal_Int32 SlideTransitionPanel::GetPreferredWidth(sal_Int32 ) -{ - return maPreferredSize.Width(); -} -sal_Int32 SlideTransitionPanel::GetPreferredHeight(sal_Int32 ) -{ - return maPreferredSize.Height(); -} -::Window* SlideTransitionPanel::GetWindow() -{ - return mpWrappedControl; -} -bool SlideTransitionPanel::IsResizable() -{ - return true; -} -bool SlideTransitionPanel::IsExpandable() const -{ - return true; -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> SlideTransitionPanel::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - if (GetWindow() != NULL) - return GetWindow()->GetAccessible(); - else - return NULL; -} - - -} } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx deleted file mode 100644 index f29a3b02786a..000000000000 --- a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx +++ /dev/null @@ -1,77 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - -#ifndef SD_TOOLPANEL_CONTROLS_SLIDE_TRANSITION_PANEL_HXX -#define SD_TOOLPANEL_CONTROLS_SLIDE_TRANSITION_PANEL_HXX - -#include "taskpane/SubToolPanel.hxx" - -namespace sd { -class ViewShellBase; -} - -namespace sd { namespace toolpanel { -class ControlFactory; -class TreeNode; -class ToolPanelViewShell; -} } - -namespace sd { namespace toolpanel { namespace controls { - -class SlideTransitionPanel - : public SubToolPanel -{ -public: - SlideTransitionPanel ( - Window& i_rParentWindow, - ToolPanelViewShell& i_rToolPanelShell); - virtual ~SlideTransitionPanel (void); - - static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell); - - // TreeNode overridables - virtual TaskPaneShellManager* GetShellManager(); - - // ILayoutableWindow overridables - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual ::Window* GetWindow (void); - virtual bool IsResizable (void); - virtual bool IsExpandable (void) const; - - virtual ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible > CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& rxParent); - - using Window::GetWindow; - -private: - Size maPreferredSize; - ::Window* mpWrappedControl; - ToolPanelViewShell* m_pPanelViewShell; -}; - -} } } // end of namespace ::sd::toolpanel::controls - -#endif diff --git a/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx b/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx deleted file mode 100644 index 161b6165005d..000000000000 --- a/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx +++ /dev/null @@ -1,106 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "TableDesignPanel.hxx" - -#include "taskpane/TaskPaneControlFactory.hxx" -#include "taskpane/ToolPanelViewShell.hxx" - -#include "strings.hrc" -#include "sdresid.hxx" - -namespace sd -{ - - class ViewShellBase; - extern ::Window * createTableDesignPanel( ::Window* pParent, ViewShellBase& rBase ); - -namespace toolpanel { namespace controls { - - -TableDesignPanel::TableDesignPanel( ::Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell ) - :SubToolPanel( i_rParentWindow ) - ,m_pPanelViewShell( &i_rPanelViewShell ) -{ - mpWrappedControl = createTableDesignPanel( &i_rParentWindow, i_rPanelViewShell.GetViewShellBase() ); - mpWrappedControl->Show(); -} - -TableDesignPanel::~TableDesignPanel() -{ - delete mpWrappedControl; -} - -std::auto_ptr< ControlFactory > TableDesignPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) -{ - return std::auto_ptr< ControlFactory >( - new RootControlFactoryWithArg< TableDesignPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); -} - -TaskPaneShellManager* TableDesignPanel::GetShellManager() -{ - if ( m_pPanelViewShell ) - return &m_pPanelViewShell->GetSubShellManager(); - return SubToolPanel::GetShellManager(); -} - -Size TableDesignPanel::GetPreferredSize() -{ - return maPreferredSize; -} -sal_Int32 TableDesignPanel::GetPreferredWidth(sal_Int32 ) -{ - return maPreferredSize.Width(); -} -sal_Int32 TableDesignPanel::GetPreferredHeight(sal_Int32 ) -{ - return maPreferredSize.Height(); -} -::Window* TableDesignPanel::GetWindow() -{ - return mpWrappedControl; -} -bool TableDesignPanel::IsResizable() -{ - return true; -} -bool TableDesignPanel::IsExpandable() const -{ - return true; -} - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> TableDesignPanel::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& ) -{ - if (GetWindow() != NULL) - return GetWindow()->GetAccessible(); - else - return NULL; -} - -} } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx b/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx deleted file mode 100644 index 73b347ca58fa..000000000000 --- a/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx +++ /dev/null @@ -1,77 +0,0 @@ -/************************************************************** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - *************************************************************/ - - - -#ifndef SD_TOOLPANEL_CONTROLS_TABLE_DESIGN_PANEL_HXX -#define SD_TOOLPANEL_CONTROLS_TABLE_DESIGN_PANEL_HXX - -#include "taskpane/SubToolPanel.hxx" - -namespace sd { -class ViewShellBase; -} - -namespace sd { namespace toolpanel { -class TreeNode; -class ControlFactory; -class ToolPanelViewShell; -} } - -namespace sd { namespace toolpanel { namespace controls { - -class TableDesignPanel - : public SubToolPanel -{ -public: - TableDesignPanel ( - ::Window& i_rParentWindow, - ToolPanelViewShell& i_rPanelViewShell); - virtual ~TableDesignPanel (void); - - static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell); - - // TreeNode overridables - virtual TaskPaneShellManager* GetShellManager(); - - // ILayoutableWindow overridables - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual ::Window* GetWindow (void); - virtual bool IsResizable (void); - virtual bool IsExpandable (void) const; - - virtual ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible > CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& rxParent); - - using Window::GetWindow; -private: - Size maPreferredSize; - ::Window* mpWrappedControl; - ToolPanelViewShell* m_pPanelViewShell; -}; - -} } } // end of namespace ::sd::toolpanel::controls - -#endif diff --git a/sd/source/ui/unoidl/UnoDocumentSettings.cxx b/sd/source/ui/unoidl/UnoDocumentSettings.cxx index 1c14255c2362..d6f4185b7897 100644 --- a/sd/source/ui/unoidl/UnoDocumentSettings.cxx +++ b/sd/source/ui/unoidl/UnoDocumentSettings.cxx @@ -278,7 +278,7 @@ void DocumentSettings::_setPropertyValues( const PropertyMapEntry** ppEntries, c aPathURL.removeSegment(); aPathURL.removeFinalSlash(); - XColorTable* pColTab = new XColorTable( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); + XColorList* pColTab = new XColorList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); pColTab->SetName( aURL.getName() ); if( pColTab->Load() ) { diff --git a/sd/source/ui/unoidl/facreg.cxx b/sd/source/ui/unoidl/facreg.cxx index 90774f68da76..8901dca17fa6 100644 --- a/sd/source/ui/unoidl/facreg.cxx +++ b/sd/source/ui/unoidl/facreg.cxx @@ -122,13 +122,6 @@ extern OUString BasicViewFactory_getImplementationName(void) throw (uno::Runtime extern uno::Sequence<OUString> SAL_CALL BasicViewFactory_getSupportedServiceNames (void) throw (uno::RuntimeException); -extern uno::Reference<uno::XInterface> SAL_CALL TaskPanelFactory_createInstance( - const uno::Reference<uno::XComponentContext>& rxContext) - throw(uno::Exception); -extern OUString TaskPanelFactory_getImplementationName(void) throw (uno::RuntimeException); -extern uno::Sequence<OUString> SAL_CALL TaskPanelFactory_getSupportedServiceNames (void) - throw (uno::RuntimeException); - extern uno::Reference<uno::XInterface> SAL_CALL ResourceId_createInstance( const uno::Reference<uno::XComponentContext>& rxContext) throw(uno::Exception); @@ -145,14 +138,13 @@ extern uno::Sequence<OUString> SAL_CALL PresentationFactoryProvider_getSupported throw (uno::RuntimeException); } } +namespace sd { namespace sidebar { -namespace sd { namespace toolpanel { - -extern uno::Reference<uno::XInterface> SAL_CALL ToolPanelFactory_createInstance( +extern uno::Reference<uno::XInterface> SAL_CALL PanelFactory_createInstance( const uno::Reference<uno::XComponentContext>& rxContext) throw(uno::Exception); -extern OUString ToolPanelFactory_getImplementationName(void) throw (uno::RuntimeException); -extern uno::Sequence<OUString> SAL_CALL ToolPanelFactory_getSupportedServiceNames (void) +extern OUString PanelFactory_getImplementationName(void) throw (uno::RuntimeException); +extern uno::Sequence<OUString> SAL_CALL PanelFactory_getSupportedServiceNames (void) throw (uno::RuntimeException); } } @@ -214,7 +206,7 @@ using namespace ::sd; using namespace ::sd::framework; using namespace ::sd::presenter; using namespace ::sd::slidesorter; -using namespace ::sd::toolpanel; +using namespace ::sd::sidebar; @@ -237,8 +229,7 @@ enum FactoryId BasicPaneFactoryFactoryId, BasicToolBarFactoryFactoryId, BasicViewFactoryFactoryId, - TaskPanelFactoryFactoryId, - ToolPanelFactoryFactoryId, + PanelFactoryFactoryId, ResourceIdFactoryId, PresentationFactoryProviderFactoryId, SlideRendererFactoryId, @@ -271,8 +262,7 @@ static ::boost::shared_ptr<FactoryMap> spFactoryMap; (*spFactoryMap)[BasicPaneFactory_getImplementationName()] = BasicPaneFactoryFactoryId; (*spFactoryMap)[BasicToolBarFactory_getImplementationName()] = BasicToolBarFactoryFactoryId; (*spFactoryMap)[BasicViewFactory_getImplementationName()] = BasicViewFactoryFactoryId; - (*spFactoryMap)[TaskPanelFactory_getImplementationName()] = TaskPanelFactoryFactoryId; - (*spFactoryMap)[ToolPanelFactory_getImplementationName()] = ToolPanelFactoryFactoryId; + (*spFactoryMap)[sidebar::PanelFactory_getImplementationName()] = PanelFactoryFactoryId; (*spFactoryMap)[ResourceId_getImplementationName()] = ResourceIdFactoryId; (*spFactoryMap)[PresentationFactoryProvider_getImplementationName()] = PresentationFactoryProviderFactoryId; (*spFactoryMap)[SlideRenderer_getImplementationName()] = SlideRendererFactoryId; @@ -402,18 +392,11 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( sd::framework::BasicViewFactory_getSupportedServiceNames()); break; - case TaskPanelFactoryFactoryId: - xComponentFactory = ::cppu::createSingleComponentFactory( - sd::framework::TaskPanelFactory_createInstance, - sd::framework::TaskPanelFactory_getImplementationName(), - sd::framework::TaskPanelFactory_getSupportedServiceNames()); - break; - - case ToolPanelFactoryFactoryId: + case PanelFactoryFactoryId: xComponentFactory = ::cppu::createSingleComponentFactory( - sd::toolpanel::ToolPanelFactory_createInstance, - sd::toolpanel::ToolPanelFactory_getImplementationName(), - sd::toolpanel::ToolPanelFactory_getSupportedServiceNames()); + sd::sidebar::PanelFactory_createInstance, + sd::sidebar::PanelFactory_getImplementationName(), + sd::sidebar::PanelFactory_getSupportedServiceNames()); break; case ResourceIdFactoryId: diff --git a/sd/source/ui/view/ToolBarManager.cxx b/sd/source/ui/view/ToolBarManager.cxx index 73ea33ddc795..282f7fca565f 100644 --- a/sd/source/ui/view/ToolBarManager.cxx +++ b/sd/source/ui/view/ToolBarManager.cxx @@ -1230,7 +1230,7 @@ void ToolBarRules::MainViewShellChanged (ViewShell::ShellType nShellType) case ViewShell::ST_NONE: case ViewShell::ST_PRESENTATION: - case ViewShell::ST_TASK_PANE: + case ViewShell::ST_SIDEBAR: default: break; } diff --git a/sd/source/ui/view/ViewShellBase.cxx b/sd/source/ui/view/ViewShellBase.cxx index a9898e40d935..6704a2127059 100644 --- a/sd/source/ui/view/ViewShellBase.cxx +++ b/sd/source/ui/view/ViewShellBase.cxx @@ -62,7 +62,7 @@ #include "PresentationViewShell.hxx" #include "FormShellManager.hxx" #include "ToolBarManager.hxx" -#include "taskpane/PanelId.hxx" +#include "SidebarPanelId.hxx" #include "Window.hxx" #include "framework/ConfigurationController.hxx" #include "DocumentRenderer.hxx" @@ -729,13 +729,6 @@ void ViewShellBase::Execute (SfxRequest& rRequest) framework::FrameworkHelper::msSlideSorterURL); break; - case SID_TASKPANE: - mpImpl->SetPaneVisibility( - rRequest, - framework::FrameworkHelper::msRightPaneURL, - framework::FrameworkHelper::msTaskPaneURL); - break; - case SID_NORMAL_MULTI_PANE_GUI: case SID_SLIDE_SORTER_MULTI_PANE_GUI: case SID_DRAWINGMODE: @@ -1449,11 +1442,6 @@ void ViewShellBase::Implementation::GetSlotState (SfxItemSet& rSet) xContext, FrameworkHelper::msLeftDrawPaneURL); break; - case SID_TASKPANE: - xResourceId = ResourceId::create( - xContext, FrameworkHelper::msRightPaneURL); - break; - case SID_NORMAL_MULTI_PANE_GUI: xResourceId = ResourceId::createWithAnchorURL( xContext, @@ -1553,8 +1541,7 @@ void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) // Set the visibility state of the toolpanel and one of its top // level panels. sal_Bool bShowToolPanel = sal_True; - toolpanel::PanelId nPanelId ( - toolpanel::PID_UNKNOWN); + sidebar::PanelId nPanelId (sidebar::PID_UNKNOWN); bool bPanelIdGiven = false; // Extract the given arguments. @@ -1574,9 +1561,7 @@ void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) ID_VAL_PANEL_INDEX, sal_False); if (pPanelId != NULL) { - nPanelId = static_cast< - toolpanel::PanelId>( - pPanelId->GetValue()); + nPanelId = static_cast<sidebar::PanelId>(pPanelId->GetValue()); bPanelIdGiven = true; } } @@ -1585,11 +1570,11 @@ void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) // Ignore the request for some combinations of panels and view // shell types. if (bPanelIdGiven - && ! (nPanelId==toolpanel::PID_LAYOUT + && ! (nPanelId==sidebar::PID_LAYOUT && mrBase.GetMainViewShell()!=NULL && mrBase.GetMainViewShell()->GetShellType()==ViewShell::ST_OUTLINE)) { - framework::FrameworkHelper::Instance(mrBase)->RequestTaskPanel( + framework::FrameworkHelper::Instance(mrBase)->RequestSidebarPanel( framework::FrameworkHelper::msLayoutTaskPanelURL); } } diff --git a/sd/source/ui/view/ViewShellImplementation.cxx b/sd/source/ui/view/ViewShellImplementation.cxx index b9a2cb9721b9..c507d00cafd2 100644 --- a/sd/source/ui/view/ViewShellImplementation.cxx +++ b/sd/source/ui/view/ViewShellImplementation.cxx @@ -47,7 +47,7 @@ #include "FrameView.hxx" #include "DrawViewShell.hxx" #include "ViewShellHint.hxx" -#include "taskpane/PanelId.hxx" +#include "SidebarPanelId.hxx" #include "framework/FrameworkHelper.hxx" #include <sfx2/bindings.hxx> @@ -148,8 +148,7 @@ void ViewShell::Implementation::ProcessModifyPageSlot ( // Make the layout menu visible in the tool pane. SfxBoolItem aMakeToolPaneVisible (ID_VAL_ISVISIBLE, sal_True); - SfxUInt32Item aPanelId (ID_VAL_PANEL_INDEX, - ::sd::toolpanel::PID_LAYOUT); + SfxUInt32Item aPanelId (ID_VAL_PANEL_INDEX, sidebar::PID_LAYOUT); SfxViewFrame* pFrame = mrViewShell.GetViewFrame(); if (pFrame!=NULL && pFrame->GetDispatcher()!=NULL) { @@ -349,7 +348,7 @@ sal_uInt16 ViewShell::Implementation::GetViewId (void) // Since we have to return a view id for every possible shell type // and there is not (yet) a proper ViewShellBase sub class for the // remaining types we chose the Impress factory as a fall back. - case ViewShell::ST_TASK_PANE: + case ViewShell::ST_SIDEBAR: case ViewShell::ST_NONE: default: return IMPRESS_FACTORY_ID; diff --git a/sd/source/ui/view/ViewShellManager.cxx b/sd/source/ui/view/ViewShellManager.cxx index 0872e034a814..e8b31a17f63f 100644 --- a/sd/source/ui/view/ViewShellManager.cxx +++ b/sd/source/ui/view/ViewShellManager.cxx @@ -61,6 +61,8 @@ public: SfxShell* mpShell; ShellId mnId; ViewShellManager::SharedShellFactory mpFactory; + bool mbIsListenerAddedToWindow; + ShellDescriptor (); ShellDescriptor (SfxShell* pShell, ShellId nId); ShellDescriptor (const ShellDescriptor& rDescriptor); @@ -241,7 +243,7 @@ private: ShellId nShellId, ::Window* pParentWindow, FrameView* pFrameView); - void DestroyViewShell (const ShellDescriptor& rDescriptor); + void DestroyViewShell (ShellDescriptor& rDescriptor); void DestroySubShell ( const SfxShell& rViewShell, const ShellDescriptor& rDescriptor); @@ -519,8 +521,11 @@ void ViewShellManager::Implementation::ActivateViewShell (ViewShell* pViewShell) { ::Window* pWindow = aResult.GetWindow(); if (pWindow != NULL) + { pWindow->AddEventListener( LINK(this, ViewShellManager::Implementation, WindowEventHandler)); + aResult.mbIsListenerAddedToWindow = true; + } else { DBG_ASSERT(false, @@ -1181,6 +1186,23 @@ IMPL_LINK(ViewShellManager::Implementation, WindowEventHandler, VclWindowEvent*, case VCLEVENT_WINDOW_LOSEFOCUS: break; + + case VCLEVENT_OBJECT_DYING: + // Remember that we do not have to remove the window + // listener for this window. + for (ActiveShellList::iterator + iShell(maActiveViewShells.begin()), + iEnd(maActiveViewShells.end()); + iShell!=iEnd; + ++iShell) + { + if (iShell->GetWindow() == pEventWindow) + { + iShell->mbIsListenerAddedToWindow = false; + break; + } + } + break; } } return sal_True; @@ -1225,15 +1247,19 @@ ShellDescriptor ViewShellManager::Implementation::CreateSubShell ( void ViewShellManager::Implementation::DestroyViewShell ( - const ShellDescriptor& rDescriptor) + ShellDescriptor& rDescriptor) { OSL_ASSERT(rDescriptor.mpShell != NULL); - ::Window* pWindow = rDescriptor.GetWindow(); - if (pWindow != NULL) + if (rDescriptor.mbIsListenerAddedToWindow) { - pWindow->RemoveEventListener( - LINK(this, ViewShellManager::Implementation, WindowEventHandler)); + rDescriptor.mbIsListenerAddedToWindow = false; + ::Window* pWindow = rDescriptor.GetWindow(); + if (pWindow != NULL) + { + pWindow->RemoveEventListener( + LINK(this, ViewShellManager::Implementation, WindowEventHandler)); + } } // Destroy the sub shell factories. @@ -1395,7 +1421,8 @@ namespace { ShellDescriptor::ShellDescriptor (void) : mpShell(NULL), mnId(0), - mpFactory() + mpFactory(), + mbIsListenerAddedToWindow(false) { } @@ -1407,7 +1434,8 @@ ShellDescriptor::ShellDescriptor ( ShellId nId) : mpShell(pShell), mnId(nId), - mpFactory() + mpFactory(), + mbIsListenerAddedToWindow(false) { } @@ -1415,9 +1443,10 @@ ShellDescriptor::ShellDescriptor ( ShellDescriptor::ShellDescriptor (const ShellDescriptor& rDescriptor) - : mpShell(rDescriptor.mpShell), - mnId(rDescriptor.mnId), - mpFactory(rDescriptor.mpFactory) + : mpShell(rDescriptor.mpShell), + mnId(rDescriptor.mnId), + mpFactory(rDescriptor.mpFactory), + mbIsListenerAddedToWindow(rDescriptor.mbIsListenerAddedToWindow) { } @@ -1426,9 +1455,13 @@ ShellDescriptor::ShellDescriptor (const ShellDescriptor& rDescriptor) ShellDescriptor& ShellDescriptor::operator= (const ShellDescriptor& rDescriptor) { - mpShell = rDescriptor.mpShell; - mnId = rDescriptor.mnId; - mpFactory = rDescriptor.mpFactory; + if (this != &rDescriptor) + { + mpShell = rDescriptor.mpShell; + mnId = rDescriptor.mnId; + mpFactory = rDescriptor.mpFactory; + mbIsListenerAddedToWindow = rDescriptor.mbIsListenerAddedToWindow; + } return *this; } diff --git a/sd/source/ui/view/drtxtob.cxx b/sd/source/ui/view/drtxtob.cxx index e6bc04110ed4..343a5dfd3cae 100644 --- a/sd/source/ui/view/drtxtob.cxx +++ b/sd/source/ui/view/drtxtob.cxx @@ -39,6 +39,7 @@ #include <editeng/ulspitem.hxx> #include <editeng/lspcitem.hxx> #include <editeng/adjitem.hxx> +#include <editeng/kernitem.hxx> #include <vcl/vclenum.hxx> #include <sfx2/app.hxx> #include <svl/whiter.hxx> @@ -153,6 +154,27 @@ TextObjectBar::~TextObjectBar() SetRepeatTarget(NULL); } +void TextObjectBar::GetCharState( SfxItemSet& rSet ) +{ + SfxItemSet aCharAttrSet( mpView->GetDoc()->GetPool() ); + mpView->GetAttributes( aCharAttrSet ); + + SfxItemSet aNewAttr( mpViewShell->GetPool(),EE_ITEMS_START,EE_ITEMS_END); + + aNewAttr.Put(aCharAttrSet, sal_False); + rSet.Put(aNewAttr, sal_False); + + SvxKerningItem aKern = ( (const SvxKerningItem&) aCharAttrSet.Get( EE_CHAR_KERNING ) ); + //aKern.SetWhich(SID_ATTR_CHAR_KERNING); + rSet.Put(aKern); + + SfxItemState eState = aCharAttrSet.GetItemState( EE_CHAR_KERNING, sal_True ); + if ( eState == SFX_ITEM_DONTCARE ) + { + rSet.InvalidateItem(EE_CHAR_KERNING); + } +} + /************************************************************************* |* |* Status der Attribut-Items @@ -183,6 +205,8 @@ void TextObjectBar::GetAttrState( SfxItemSet& rSet ) case SID_ATTR_CHAR_FONTHEIGHT: case SID_ATTR_CHAR_WEIGHT: case SID_ATTR_CHAR_POSTURE: + case SID_ATTR_CHAR_SHADOWED: + case SID_ATTR_CHAR_STRIKEOUT: { SvxScriptSetItem aSetItem( nSlotId, GetPool() ); aSetItem.GetItemSet().Put( aAttrSet, sal_False ); @@ -464,6 +488,8 @@ void TextObjectBar::GetAttrState( SfxItemSet& rSet ) } // Absatzausrichtung + SvxLRSpaceItem aLR = ( (const SvxLRSpaceItem&) aAttrSet.Get( EE_PARA_LRSPACE ) ); + rSet.Put(aLR); SvxAdjust eAdj = ( (const SvxAdjustItem&) aAttrSet.Get( EE_PARA_JUST ) ).GetAdjust(); switch( eAdj ) { @@ -483,6 +509,13 @@ void TextObjectBar::GetAttrState( SfxItemSet& rSet ) break; } + Invalidate(SID_ATTR_PARA_ADJUST_LEFT); + Invalidate(SID_ATTR_PARA_ADJUST_CENTER); + Invalidate(SID_ATTR_PARA_ADJUST_RIGHT); + Invalidate(SID_ATTR_PARA_ADJUST_BLOCK); + Invalidate(SID_ATTR_PARA_LINESPACE); + Invalidate(SID_ATTR_PARA_ULSPACE); + // paragraph text direction if( bDisableParagraphTextDirection ) { @@ -547,6 +580,17 @@ void TextObjectBar::GetAttrState( SfxItemSet& rSet ) } } */ + SvxLRSpaceItem aLRSpace = ( (const SvxLRSpaceItem&) aAttrSet.Get( EE_PARA_LRSPACE ) ); + aLRSpace.SetWhich(SID_ATTR_PARA_LRSPACE); + rSet.Put(aLRSpace); + Invalidate(SID_ATTR_PARA_LRSPACE); + //Added by xuxu + SfxItemState eState = aAttrSet.GetItemState( EE_PARA_LRSPACE ); + if ( eState == SFX_ITEM_DONTCARE ) + { + rSet.InvalidateItem(EE_PARA_LRSPACE); + rSet.InvalidateItem(SID_ATTR_PARA_LRSPACE); + } sal_uInt16 nLineSpace = (sal_uInt16) ( (const SvxLineSpacingItem&) aAttrSet. Get( EE_PARA_SBL ) ).GetPropLineSpace(); switch( nLineSpace ) diff --git a/sd/source/ui/view/drtxtob1.cxx b/sd/source/ui/view/drtxtob1.cxx index eeffc210fa89..275ceee0526a 100644 --- a/sd/source/ui/view/drtxtob1.cxx +++ b/sd/source/ui/view/drtxtob1.cxx @@ -241,6 +241,7 @@ void TextObjectBar::Execute( SfxRequest &rReq ) break; case SID_OUTLINE_LEFT: + case SID_ATTR_PARA_LEFT: { if (pOLV) { @@ -256,6 +257,7 @@ void TextObjectBar::Execute( SfxRequest &rReq ) break; case SID_OUTLINE_RIGHT: + case SID_ATTR_PARA_RIGHT: { if (pOLV) { @@ -270,6 +272,22 @@ void TextObjectBar::Execute( SfxRequest &rReq ) } break; + case SID_ATTR_PARA_LRSPACE: + { + sal_uInt16 nSlot = SID_ATTR_PARA_LRSPACE; + SvxLRSpaceItem aLRSpace = (const SvxLRSpaceItem&)pArgs->Get( + GetPool().GetWhich(nSlot)); + + SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE ); + aLRSpace.SetWhich( EE_PARA_LRSPACE ); + + aEditAttr.Put( aLRSpace ); + mpView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_LRSPACE); + } + break; + case SID_OUTLINE_UP: { if (pOLV) @@ -585,6 +603,71 @@ void TextObjectBar::Execute( SfxRequest &rReq ) rReq.Done( aNewAttr ); pArgs = rReq.GetArgs(); } + else if (nSlot == SID_ATTR_PARA_ADJUST_LEFT || + nSlot == SID_ATTR_PARA_ADJUST_CENTER || + nSlot == SID_ATTR_PARA_ADJUST_RIGHT || + nSlot == SID_ATTR_PARA_ADJUST_BLOCK) + { + switch( nSlot ) + { + case SID_ATTR_PARA_ADJUST_LEFT: + { + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) ); + } + break; + case SID_ATTR_PARA_ADJUST_CENTER: + { + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) ); + } + break; + case SID_ATTR_PARA_ADJUST_RIGHT: + { + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); + } + break; + case SID_ATTR_PARA_ADJUST_BLOCK: + { + aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) ); + } + break; + } + rReq.Done( aNewAttr ); + pArgs = rReq.GetArgs(); + } + else if(nSlot == SID_ATTR_CHAR_KERNING) + { + aNewAttr.Put(pArgs->Get(pArgs->GetPool()->GetWhich(nSlot))); + rReq.Done( aNewAttr ); + pArgs = rReq.GetArgs(); + } + else if(nSlot == SID_SET_SUPER_SCRIPT ) + { + SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); + SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) + aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + + if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) + aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); + else + aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); + aNewAttr.Put( aItem ); + rReq.Done( aNewAttr ); + pArgs = rReq.GetArgs(); + } + else if( nSlot == SID_SET_SUB_SCRIPT ) + { + SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); + SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) + aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + + if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) + aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); + else + aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); + aNewAttr.Put( aItem ); + rReq.Done( aNewAttr ); + pArgs = rReq.GetArgs(); + } mpView->SetAttributes(*pArgs); diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index 7cc906faa92b..cea20a02f767 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -63,6 +63,26 @@ #include <svx/xlnedwit.hxx> #include <svx/fontworkbar.hxx> +#include <editeng/escpitem.hxx> +#include <editeng/kernitem.hxx> +#include <editeng/wghtitem.hxx> +#include <editeng/postitem.hxx> +#include <editeng/udlnitem.hxx> +#include <editeng/crsditem.hxx> +#include <editeng/cntritem.hxx> +#include <editeng/shdditem.hxx> +#include <svx/xtable.hxx> +#include <svx/svdobj.hxx> +#include <editeng/outlobj.hxx> +#include <editeng/flstitem.hxx> +#include <editeng/scripttypeitem.hxx> +#include <editeng/fontitem.hxx> +#include <editeng/fhgtitem.hxx> +#include <editeng/colritem.hxx> +#include <editeng/brshitem.hxx> + +#include <svl/whiter.hxx> + #include <svx/svxdlg.hxx> #include <svx/dialogs.hrc> @@ -84,6 +104,7 @@ #include "unmodpg.hxx" #include "slideshow.hxx" #include "fuvect.hxx" +#include "futext.hxx" #include "stlpool.hxx" // #90356# @@ -135,12 +156,19 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) case SID_ATTR_FILL_HATCH: case SID_ATTR_FILL_BITMAP: case SID_ATTR_FILL_SHADOW: + case SID_ATTR_FILL_TRANSPARENCE: + case SID_ATTR_FILL_FLOATTRANSPARENCE: case SID_ATTR_LINE_STYLE: case SID_ATTR_LINE_DASH: case SID_ATTR_LINE_WIDTH: case SID_ATTR_LINE_COLOR: case SID_ATTR_LINEEND_STYLE: + case SID_ATTR_LINE_START: + case SID_ATTR_LINE_END: + case SID_ATTR_LINE_TRANSPARENCE: + case SID_ATTR_LINE_JOINT: + case SID_ATTR_LINE_CAP: case SID_ATTR_TEXT_FITTOSIZE: { @@ -287,12 +315,17 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) case SID_ATTR_FILL_GRADIENT: case SID_ATTR_FILL_HATCH: case SID_ATTR_FILL_BITMAP: + case SID_ATTR_FILL_TRANSPARENCE: + case SID_ATTR_FILL_FLOATTRANSPARENCE: GetViewFrame()->GetDispatcher()->Execute( SID_ATTRIBUTES_AREA, SFX_CALLMODE_ASYNCHRON ); break; case SID_ATTR_LINE_STYLE: case SID_ATTR_LINE_DASH: case SID_ATTR_LINE_WIDTH: case SID_ATTR_LINE_COLOR: + case SID_ATTR_LINE_TRANSPARENCE: + case SID_ATTR_LINE_JOINT: + case SID_ATTR_LINE_CAP: GetViewFrame()->GetDispatcher()->Execute( SID_ATTRIBUTES_LINE, SFX_CALLMODE_ASYNCHRON ); break; case SID_ATTR_TEXT_FITTOSIZE: @@ -985,7 +1018,176 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) } } +void DrawViewShell::ExecChar( SfxRequest &rReq ) +{ + SdDrawDocument* pDoc = GetDoc(); + if (!pDoc || !mpDrawView) + return; + + SfxItemSet aEditAttr( pDoc->GetPool() ); + mpDrawView->GetAttributes( aEditAttr ); + + //modified by wj for sym2_1580, if put old itemset into new set, + //when mpDrawView->SetAttributes(aNewAttr) it will invalidate all the item + // and use old attr to update all the attributes +// SfxItemSet aNewAttr( GetPool(), +// EE_ITEMS_START, EE_ITEMS_END ); +// aNewAttr.Put( aEditAttr, sal_False ); + SfxItemSet aNewAttr( pDoc->GetPool() ); + //modified end + + sal_uInt16 nSId = rReq.GetSlot(); + + MapSlot( nSId ); + + switch ( nSId ) + { + case SID_ATTR_CHAR_FONT: + if( rReq.GetArgs() ) + { + SFX_REQUEST_ARG( rReq, pItem, SvxFontItem, SID_ATTR_CHAR_FONT , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_ATTR_CHAR_FONTHEIGHT: + if( rReq.GetArgs() ) + { + SFX_REQUEST_ARG( rReq, pItem, SvxFontHeightItem, SID_ATTR_CHAR_FONTHEIGHT , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_ATTR_CHAR_WEIGHT: + if( rReq.GetArgs() ) + { + //const SvxWeightItem *pItem = (const SvxWeightItem*) rReq.GetArg( SID_ATTR_CHAR_WEIGHT, sal_False, TYPE(SvxWeightItem) ); + SFX_REQUEST_ARG( rReq, pItem, SvxWeightItem, SID_ATTR_CHAR_WEIGHT , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_ATTR_CHAR_POSTURE: + if( rReq.GetArgs() ) + { + //const SvxPostureItem *pItem = (const SvxPostureItem*) rReq.GetArg( SID_ATTR_CHAR_POSTURE, sal_False, TYPE(SvxPostureItem) ); + SFX_REQUEST_ARG( rReq, pItem, SvxPostureItem, SID_ATTR_CHAR_POSTURE , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_ATTR_CHAR_UNDERLINE: + if( rReq.GetArgs() ) + { + //<<modify by wj for sym2_1873 + //SFX_REQUEST_ARG( rReq, pItem, SvxTextLineItem, SID_ATTR_CHAR_UNDERLINE , sal_False ); + SFX_REQUEST_ARG( rReq, pItem, SvxUnderlineItem, SID_ATTR_CHAR_UNDERLINE , sal_False ); + //end>> + if (pItem) + { + aNewAttr.Put(*pItem); + } + else + { + FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr.Get( EE_CHAR_UNDERLINE ) ).GetLineStyle(); + aNewAttr.Put( SvxUnderlineItem( eFU != UNDERLINE_NONE ?UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE ) ); + }//aNewAttr.Put( (const SvxUnderlineItem&)aEditAttr.Get( EE_CHAR_UNDERLINE ) ); + } + break; + case SID_ATTR_CHAR_SHADOWED: + if( rReq.GetArgs() ) + { + SFX_REQUEST_ARG( rReq, pItem, SvxShadowedItem, SID_ATTR_CHAR_SHADOWED , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_ATTR_CHAR_STRIKEOUT: + if( rReq.GetArgs() ) + { + SFX_REQUEST_ARG( rReq, pItem, SvxCrossedOutItem, SID_ATTR_CHAR_STRIKEOUT , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_ATTR_CHAR_COLOR: + if( rReq.GetArgs() ) + { + SFX_REQUEST_ARG( rReq, pItem, SvxColorItem, SID_ATTR_CHAR_COLOR , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_ATTR_CHAR_KERNING: + if( rReq.GetArgs() ) + { + SFX_REQUEST_ARG( rReq, pItem, SvxKerningItem, SID_ATTR_CHAR_KERNING , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + } + break; + case SID_SET_SUB_SCRIPT: + if( rReq.GetArgs() ) + { + SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT ); + SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&) + aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) + aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); + else + aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); + aNewAttr.Put( aItem ); + } + break; + case SID_SET_SUPER_SCRIPT: + if( rReq.GetArgs() ) + { + SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT ); + SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&) + aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) + aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); + else + aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); + aNewAttr.Put( aItem ); + } + break; + case SID_SHRINK_FONT_SIZE: + case SID_GROW_FONT_SIZE: + //if (rReq.GetArgs()) + { + const SvxFontListItem* pFonts = dynamic_cast<const SvxFontListItem*>(GetDocSh()->GetItem( SID_ATTR_CHAR_FONTLIST ) ); + const FontList* pFontList = pFonts->GetFontList(); + if( pFontList ) + { + FuText::ChangeFontSize( nSId == SID_GROW_FONT_SIZE, NULL, pFontList, mpView ); + GetViewFrame()->GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); + } + } + default: + ; + } + mpDrawView->SetAttributes(aNewAttr); + rReq.Done(); + Cancel(); +} /** This method consists basically of three parts: @@ -1011,4 +1213,86 @@ SdPage* DrawViewShell::CreateOrDuplicatePage ( return pNewPage; } +void DrawViewShell::ExecutePropPanelAttr (SfxRequest& rReq) +{ + if(SlideShow::IsRunning( GetViewShellBase() )) + return; + + SdDrawDocument* pDoc = GetDoc(); + if (!pDoc || !mpDrawView) + return; + + sal_uInt16 nSId = rReq.GetSlot(); + SfxItemSet aAttrs( pDoc->GetPool() ); + + switch ( nSId ) + { + case SID_TABLE_VERT_NONE: + case SID_TABLE_VERT_CENTER: + case SID_TABLE_VERT_BOTTOM: + SdrTextVertAdjust eTVA = SDRTEXTVERTADJUST_TOP; + if (nSId == SID_TABLE_VERT_CENTER) + eTVA = SDRTEXTVERTADJUST_CENTER; + else if (nSId == SID_TABLE_VERT_BOTTOM) + eTVA = SDRTEXTVERTADJUST_BOTTOM; + + aAttrs.Put( SdrTextVertAdjustItem(eTVA) ); + mpDrawView->SetAttributes(aAttrs); + + break; + } +} + +void DrawViewShell::GetStatePropPanelAttr(SfxItemSet& rSet) +{ + SfxWhichIter aIter( rSet ); + sal_uInt16 nWhich = aIter.FirstWhich(); + + SdDrawDocument* pDoc = GetDoc(); + if (!pDoc || !mpDrawView) + return; + + SfxItemSet aAttrs( pDoc->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + + while ( nWhich ) + { + sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich) + ? GetPool().GetSlotId(nWhich) + : nWhich; + switch ( nSlotId ) + { + case SID_TABLE_VERT_NONE: + case SID_TABLE_VERT_CENTER: + case SID_TABLE_VERT_BOTTOM: + sal_Bool bContour = sal_False; + SfxItemState eConState = aAttrs.GetItemState( SDRATTR_TEXT_CONTOURFRAME ); + if( eConState != SFX_ITEM_DONTCARE ) + { + bContour = ( ( const SdrTextContourFrameItem& )aAttrs.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue(); + } + if (bContour) break; + + SfxItemState eVState = aAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST ); + //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ); + + //if(SFX_ITEM_DONTCARE != eVState && SFX_ITEM_DONTCARE != eHState) + if(SFX_ITEM_DONTCARE != eVState) + { + SdrTextVertAdjust eTVA = (SdrTextVertAdjust)((const SdrTextVertAdjustItem&)aAttrs.Get(SDRATTR_TEXT_VERTADJUST)).GetValue(); + sal_Bool bSet = nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP|| + nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER || + nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM; + rSet.Put(SfxBoolItem(nSlotId, bSet)); + } + else + { + rSet.Put(SfxBoolItem(nSlotId, sal_False)); + } + break; + } + nWhich = aIter.NextWhich(); + } +} + } // end of namespace sd diff --git a/sd/source/ui/view/drviews3.cxx b/sd/source/ui/view/drviews3.cxx index af25326bc0d5..5fee5118459f 100644 --- a/sd/source/ui/view/drviews3.cxx +++ b/sd/source/ui/view/drviews3.cxx @@ -32,6 +32,7 @@ #include <editeng/lrspitem.hxx> #include <editeng/protitem.hxx> #include <editeng/frmdiritem.hxx> +#include <editeng/adjitem.hxx> #include <svx/ruler.hxx> #ifndef _SVX_RULERITEM_HXX #include <svx/rulritem.hxx> @@ -96,7 +97,8 @@ #include <com/sun/star/drawing/framework/XConfigurationController.hpp> #include <com/sun/star/drawing/framework/XConfiguration.hpp> #include <com/sun/star/frame/XFrame.hpp> - +#include <editeng/lspcitem.hxx> +#include <editeng/ulspitem.hxx> using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; using ::com::sun::star::frame::XFrame; @@ -677,17 +679,106 @@ void DrawViewShell::ExecRuler(SfxRequest& rReq) break; } + case SID_ATTR_PARA_LINESPACE: + { + sal_uInt16 nSlot = SID_ATTR_PARA_LINESPACE; + SvxLineSpacingItem aParaLineSP = (const SvxLineSpacingItem&)pArgs->Get( + GetPool().GetWhich(nSlot)); + + SfxItemSet aEditAttr( GetPool(), EE_PARA_SBL, EE_PARA_SBL ); + aParaLineSP.SetWhich( EE_PARA_SBL ); + + aEditAttr.Put( aParaLineSP ); + mpDrawView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_LINESPACE); + } + break; + case SID_ATTR_PARA_ADJUST_LEFT: + { + SvxAdjustItem aItem( SVX_ADJUST_LEFT, EE_PARA_JUST ); + SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST ); + + aEditAttr.Put( aItem ); + mpDrawView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_ADJUST_LEFT); + } + break; + case SID_ATTR_PARA_ADJUST_CENTER: + { + SvxAdjustItem aItem( SVX_ADJUST_CENTER, EE_PARA_JUST ); + SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST ); + + aEditAttr.Put( aItem ); + mpDrawView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_ADJUST_CENTER); + } + break; + case SID_ATTR_PARA_ADJUST_RIGHT: + { + SvxAdjustItem aItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ); + SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST ); + + aEditAttr.Put( aItem ); + mpDrawView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_ADJUST_RIGHT); + } + break; + case SID_ATTR_PARA_ADJUST_BLOCK: + { + SvxAdjustItem aItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ); + SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST ); + + aEditAttr.Put( aItem ); + mpDrawView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_ADJUST_BLOCK); + } + break; + case SID_ATTR_PARA_ULSPACE: + { + sal_uInt16 nSlot = SID_ATTR_PARA_ULSPACE; + SvxULSpaceItem aULSP = (const SvxULSpaceItem&)pArgs->Get( + GetPool().GetWhich(nSlot)); + SfxItemSet aEditAttr( GetPool(), EE_PARA_ULSPACE, EE_PARA_ULSPACE ); + aULSP.SetWhich( EE_PARA_ULSPACE ); + + aEditAttr.Put( aULSP ); + mpDrawView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_ULSPACE); + } + break; + case SID_ATTR_PARA_LRSPACE: { + sal_uInt16 nSlot = SID_ATTR_PARA_LRSPACE; + SvxLRSpaceItem aLRSpace = (const SvxLRSpaceItem&)pArgs->Get( + GetPool().GetWhich(nSlot)); + + SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE ); + aLRSpace.SetWhich( EE_PARA_LRSPACE ); + + aEditAttr.Put( aLRSpace ); + mpDrawView->SetAttributes( aEditAttr ); + + Invalidate(SID_ATTR_PARA_LRSPACE); + break; + } + case SID_ATTR_LRSPACE: + { if( mpDrawView->IsTextEdit() ) { sal_uInt16 nId = SID_ATTR_PARA_LRSPACE; const SvxLRSpaceItem& rItem = (const SvxLRSpaceItem&) pArgs->Get( nId ); - SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE ); + SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE ); - nId = EE_PARA_LRSPACE; + nId = EE_PARA_LRSPACE; SvxLRSpaceItem aLRSpaceItem( rItem.GetLeft(), rItem.GetRight(), rItem.GetTxtLeft(), rItem.GetTxtFirstLineOfst(), nId ); diff --git a/sd/source/ui/view/drviews6.cxx b/sd/source/ui/view/drviews6.cxx index b8926729cf82..daa02e452083 100644 --- a/sd/source/ui/view/drviews6.cxx +++ b/sd/source/ui/view/drviews6.cxx @@ -577,7 +577,7 @@ void DrawViewShell::FuTemp04(SfxRequest& rReq) { // Make the slide transition panel visible (expand it) in the // tool pane. - framework::FrameworkHelper::Instance(GetViewShellBase())->RequestTaskPanel( + framework::FrameworkHelper::Instance(GetViewShellBase())->RequestSidebarPanel( framework::FrameworkHelper::msCustomAnimationTaskPanelURL); Cancel(); @@ -589,7 +589,7 @@ void DrawViewShell::FuTemp04(SfxRequest& rReq) { // Make the slide transition panel visible (expand it) in the // tool pane. - framework::FrameworkHelper::Instance(GetViewShellBase())->RequestTaskPanel( + framework::FrameworkHelper::Instance(GetViewShellBase())->RequestSidebarPanel( framework::FrameworkHelper::msSlideTransitionTaskPanelURL); Cancel(); diff --git a/sd/source/ui/view/drviews7.cxx b/sd/source/ui/view/drviews7.cxx index cb1423cc359d..38176d4551c9 100644 --- a/sd/source/ui/view/drviews7.cxx +++ b/sd/source/ui/view/drviews7.cxx @@ -206,6 +206,20 @@ IMPL_LINK( DrawViewShell, ClipboardChanged, TransferableDataHelper*, pDataHelper return 0; } + + + +void DrawViewShell::GetDrawAttrState(SfxItemSet& rSet) +{ + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + + SfxItemSet aSet( mpDrawView->GetGeoAttrFromMarked() ); + rSet.Put(aSet,sal_False); +} + + + + /************************************************************************* |* |* Status (Enabled/Disabled) von Menue-SfxSlots setzen @@ -512,6 +526,8 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet ) { rSet.DisableItem( SID_HORIZONTAL ); rSet.DisableItem( SID_VERTICAL ); + rSet.DisableItem( SID_FLIP_HORIZONTAL ); + rSet.DisableItem( SID_FLIP_VERTICAL ); } if( !mpDrawView->IsMirrorAllowed() ) diff --git a/sd/source/ui/view/drviews8.cxx b/sd/source/ui/view/drviews8.cxx index 4fb718846b2a..19f42f6af338 100644 --- a/sd/source/ui/view/drviews8.cxx +++ b/sd/source/ui/view/drviews8.cxx @@ -118,6 +118,7 @@ void DrawViewShell::FuTemp01(SfxRequest& rReq) } break; + case SID_CHAR_DLG_EFFECT: case SID_CHAR_DLG: // BASIC { SetCurrentFunction( FuChar::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); @@ -131,8 +132,24 @@ void DrawViewShell::FuTemp01(SfxRequest& rReq) Cancel(); } break; + case FN_NUM_BULLET_ON: + { + // The value (sal_uInt16)0xFFFF means set bullet on/off. + SfxUInt16Item aItem(FN_SVX_SET_BULLET, (sal_uInt16)0xFFFF); + GetViewFrame()->GetDispatcher()->Execute( FN_SVX_SET_BULLET, SFX_CALLMODE_RECORD, &aItem, 0L ); + } + break; + case FN_NUM_NUMBERING_ON: + { + // The value (sal_uInt16)0xFFFF means set bullet on/off. + SfxUInt16Item aItem(FN_SVX_SET_NUMBER, (sal_uInt16)0xFFFF); + GetViewFrame()->GetDispatcher()->Execute( FN_SVX_SET_NUMBER, SFX_CALLMODE_RECORD, &aItem, 0L ); + } + break; case SID_OUTLINE_BULLET: + case FN_SVX_SET_BULLET: + case FN_SVX_SET_NUMBER: { SetCurrentFunction( FuOutlineBullet::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); Cancel(); diff --git a/sd/source/ui/view/drviewsa.cxx b/sd/source/ui/view/drviewsa.cxx index 8ecc12b695e6..48cf6e595f2a 100644 --- a/sd/source/ui/view/drviewsa.cxx +++ b/sd/source/ui/view/drviewsa.cxx @@ -57,6 +57,7 @@ #include <sfx2/dispatch.hxx> #include <svtools/cliplistener.hxx> #include <svx/float3d.hxx> +#include <svx/sidebar/SelectionAnalyzer.hxx> #include "helpids.h" #include "view/viewoverlaymanager.hxx" @@ -80,9 +81,12 @@ #include "ToolBarManager.hxx" #include "annotationmanager.hxx" +#include <boost/bind.hpp> + using namespace ::rtl; using namespace ::com::sun::star; using namespace ::com::sun::star::uno; +using sfx2::sidebar::EnumContext; namespace { static const ::rtl::OUString MASTER_VIEW_TOOL_BAR_NAME( @@ -137,13 +141,20 @@ void SAL_CALL ScannerEventListener::disposing( const ::com::sun::star::lang::Eve DrawViewShell::DrawViewShell( SfxViewFrame* pFrame, ViewShellBase& rViewShellBase, ::Window* pParentWindow, PageKind ePageKind, FrameView* pFrameViewArgument ) : ViewShell (pFrame, pParentWindow, rViewShellBase) , maTabControl(this, pParentWindow) -, mbIsInSwitchPage(false) +, mbIsInSwitchPage(false), + mpSelectionChangeHandler(new svx::sidebar::SelectionChangeHandler( + ::boost::bind(&DrawViewShell::GetContextForSelection, this), + uno::Reference<frame::XController>(&rViewShellBase.GetDrawController()), + sfx2::sidebar::EnumContext::Context_Default)) + { if (pFrameViewArgument != NULL) mpFrameView = pFrameViewArgument; else mpFrameView = new FrameView(GetDoc()); Construct(GetDocSh(), ePageKind); + + mpSelectionChangeHandler->Connect(); } /************************************************************************* @@ -154,6 +165,8 @@ DrawViewShell::DrawViewShell( SfxViewFrame* pFrame, ViewShellBase& rViewShellBas DrawViewShell::~DrawViewShell() { + mpSelectionChangeHandler->Disconnect(); + mpAnnotationManager.reset(); mpViewOverlayManager.reset(); @@ -853,4 +866,20 @@ void DrawViewShell::GetAnnotationState (SfxItemSet& rItemSet ) } +EnumContext::Context DrawViewShell::GetContextForSelection (void) const +{ + if (mpDrawView->GetMarkedObjectList().GetMarkCount() == 1) + if (mpDrawView->GetTextEditObject() != NULL) + if (mpDrawView->GetTextEditOutlinerView() != NULL) + return EnumContext::Context_DrawText; + + // All other cases are handled by the SelectionAnalyzer. + return ::svx::sidebar::SelectionAnalyzer::GetContextForSelection_SD( + mpDrawView->GetMarkedObjectList(), + meEditMode == EM_MASTERPAGE, + mePageKind == PK_HANDOUT, + mePageKind == PK_NOTES); +} + + } // end of namespace sd diff --git a/sd/source/ui/view/drviewsc.cxx b/sd/source/ui/view/drviewsc.cxx index e325dc721991..23f63c667775 100644 --- a/sd/source/ui/view/drviewsc.cxx +++ b/sd/source/ui/view/drviewsc.cxx @@ -472,6 +472,7 @@ void DrawViewShell::FuTemp03(SfxRequest& rReq) break; case SID_HORIZONTAL: // BASIC + case SID_FLIP_HORIZONTAL: { mpDrawView->MirrorAllMarkedHorizontal(); Cancel(); @@ -480,6 +481,7 @@ void DrawViewShell::FuTemp03(SfxRequest& rReq) break; case SID_VERTICAL: // BASIC + case SID_FLIP_VERTICAL: { mpDrawView->MirrorAllMarkedVertical(); Cancel(); diff --git a/sd/source/ui/view/drviewsf.cxx b/sd/source/ui/view/drviewsf.cxx index 91909d60dc64..6e947e03f08e 100644 --- a/sd/source/ui/view/drviewsf.cxx +++ b/sd/source/ui/view/drviewsf.cxx @@ -73,6 +73,16 @@ #include "cfgids.hxx" #include "anminfo.hxx" +#include <editeng/lspcitem.hxx> +#include <editeng/ulspitem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/escpitem.hxx> +#include <editeng/numitem.hxx> +#include <editeng/adjitem.hxx> +#include <svx/nbdtmgfact.hxx> +#include <svx/nbdtmg.hxx> + +using namespace svx::sidebar; using ::rtl::OUString; using namespace ::com::sun::star; @@ -302,17 +312,133 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet ) : nWhich; switch ( nSlotId ) { + case SID_ATTR_PARA_ADJUST_LEFT: + { + SfxItemSet aAttrs( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + + SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); + SvxAdjust eAdj = aItem.GetAdjust(); + if ( eAdj == SVX_ADJUST_LEFT) + { + rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, sal_True ) ); + } + + bAttr = sal_True; + + Invalidate(nSlotId); + } + break; + case SID_ATTR_PARA_ADJUST_CENTER: + { + SfxItemSet aAttrs( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + + SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); + SvxAdjust eAdj = aItem.GetAdjust(); + if ( eAdj == SVX_ADJUST_CENTER) + { + rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True ) ); + } + + bAttr = sal_True; + + Invalidate(nSlotId); + } + break; + case SID_ATTR_PARA_ADJUST_RIGHT: + { + SfxItemSet aAttrs( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + + SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); + SvxAdjust eAdj = aItem.GetAdjust(); + if ( eAdj == SVX_ADJUST_RIGHT) + { + rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True ) ); + } + + bAttr = sal_True; + + Invalidate(nSlotId); + } + break; + case SID_ATTR_PARA_ADJUST_BLOCK: + { + SfxItemSet aAttrs( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + + SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); + SvxAdjust eAdj = aItem.GetAdjust(); + if ( eAdj == SVX_ADJUST_BLOCK) + { + rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True ) ); + } + + bAttr = sal_True; + + Invalidate(nSlotId); + } + break; + case SID_ATTR_PARA_LRSPACE: + { + SfxItemSet aAttrs( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + SvxLRSpaceItem aLRSpace = ( (const SvxLRSpaceItem&) aAttrs.Get( EE_PARA_LRSPACE ) ); + aLRSpace.SetWhich(SID_ATTR_PARA_LRSPACE); + rSet.Put(aLRSpace); + bAttr = sal_True; + Invalidate(SID_ATTR_PARA_LRSPACE); + } + break; + case SID_ATTR_PARA_LINESPACE: + { + SfxItemSet aAttrs( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + SvxLineSpacingItem aLineLR = ( (const SvxLineSpacingItem&) aAttrs.Get( EE_PARA_SBL ) ); + rSet.Put(aLineLR); + bAttr = sal_True; + Invalidate(SID_ATTR_PARA_LINESPACE); + } + break; + case SID_ATTR_PARA_ULSPACE: + { + SfxItemSet aAttrs( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aAttrs ); + SvxULSpaceItem aULSP = ( (const SvxULSpaceItem&) aAttrs.Get( EE_PARA_ULSPACE ) ); + aULSP.SetWhich(SID_ATTR_PARA_ULSPACE); + rSet.Put(aULSP); + bAttr = sal_True; + Invalidate(SID_ATTR_PARA_ULSPACE); + } + break; case SID_ATTR_FILL_STYLE: case SID_ATTR_FILL_COLOR: case SID_ATTR_FILL_GRADIENT: case SID_ATTR_FILL_HATCH: case SID_ATTR_FILL_BITMAP: case SID_ATTR_FILL_SHADOW: + case SID_ATTR_FILL_TRANSPARENCE: + case SID_ATTR_FILL_FLOATTRANSPARENCE: case SID_ATTR_LINE_STYLE: case SID_ATTR_LINE_DASH: case SID_ATTR_LINE_WIDTH: case SID_ATTR_LINE_COLOR: + case SID_ATTR_LINE_TRANSPARENCE: + case SID_ATTR_LINE_JOINT: + case SID_ATTR_LINE_CAP: case SID_ATTR_TEXT_FITTOSIZE: + case SID_ATTR_CHAR_FONT: + case SID_ATTR_CHAR_FONTHEIGHT: + case SID_ATTR_CHAR_SHADOWED: + case SID_ATTR_CHAR_POSTURE: + case SID_ATTR_CHAR_UNDERLINE: + case SID_ATTR_CHAR_STRIKEOUT: + case SID_ATTR_CHAR_WEIGHT: + case SID_ATTR_CHAR_COLOR: + case SID_ATTR_CHAR_KERNING: + case SID_SET_SUB_SCRIPT: + case SID_SET_SUPER_SCRIPT: { bAttr = sal_True; } @@ -454,6 +580,118 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet ) } } break; + case FN_BUL_NUM_RULE_INDEX: + case FN_NUM_NUM_RULE_INDEX: + { + SfxItemSet aEditAttr( GetDoc()->GetPool() ); + mpDrawView->GetAttributes( aEditAttr ); + + SfxItemSet aNewAttr( GetPool(), EE_ITEMS_START, EE_ITEMS_END ); + aNewAttr.Put( aEditAttr, sal_False ); + + + sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF; + SvxNumRule* pNumRule = NULL; + const SfxPoolItem* pTmpItem=NULL; + sal_uInt16 nNumItemId = SID_ATTR_NUMBERING_RULE; + + //if(SFX_ITEM_SET == aNewAttr.GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pTmpItem)) + // nActNumLvl = ((const SfxUInt16Item*)pTmpItem)->GetValue(); + rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,DEFAULT_NONE)); + rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,DEFAULT_NONE)); + nActNumLvl = mpDrawView->GetSelectionLevel(); + pTmpItem=GetNumBulletItem(aNewAttr, nNumItemId); + + if (pTmpItem) + pNumRule = new SvxNumRule(*((SvxNumBulletItem*)pTmpItem)->GetNumRule()); + + if ( pNumRule ) + { + sal_uInt16 nMask = 1; + sal_uInt16 nCount = 0; + sal_uInt16 nCurLevel = (sal_uInt16)0xFFFF; + for(sal_uInt16 i = 0; i < pNumRule->GetLevelCount(); i++) + { + if(nActNumLvl & nMask) + { + nCount++; + nCurLevel = i; + } + nMask <<= 1; + } + if ( nCount == 1 ) + { + sal_Bool bBullets = sal_False; + const SvxNumberFormat* pNumFmt = pNumRule->Get(nCurLevel); + if ( pNumFmt ) + { + switch(pNumFmt->GetNumberingType()) + { + case SVX_NUM_CHAR_SPECIAL: + case SVX_NUM_BITMAP: + bBullets = sal_True; + break; + + default: + bBullets = sal_False; + } + + rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); + rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); + if ( bBullets ) + { + NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); + if ( pBullets ) + { + sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(*pNumRule,nActNumLvl); + rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,nBulIndex)); + } + }else + { + NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING); + if ( pNumbering ) + { + sal_uInt16 nBulIndex = pNumbering->GetNBOIndexForNumRule(*pNumRule,nActNumLvl); + rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,nBulIndex)); + } + } + } + } + } + } + break; + //End + // Added by Li Hui for story 179. + case FN_NUM_BULLET_ON: + case FN_NUM_NUMBERING_ON: + { + sal_Bool bEnable = sal_False; + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + const sal_uInt32 nMarkCount = rMarkList.GetMarkCount(); + for (sal_uInt32 nIndex = 0; nIndex < nMarkCount; nIndex++) + { + SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(rMarkList.GetMark(nIndex)->GetMarkedSdrObj()); + if (pTextObj && pTextObj->GetObjInventor() == SdrInventor) + { + if (pTextObj->GetObjIdentifier() != OBJ_OLE2) + { + bEnable = sal_True; + break; + } + } + } + if (bEnable) + { + rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON, sal_False)); + rSet.Put(SfxBoolItem(FN_NUM_NUMBERING_ON, sal_False)); + } + else + { + rSet.DisableItem(FN_NUM_BULLET_ON); + rSet.DisableItem(FN_NUM_NUMBERING_ON); + } + } + break; } nWhich = aIter.NextWhich(); } @@ -488,25 +726,45 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet ) nWhich = aNewIter.NextWhich(); } } + + SfxItemState eState = pSet->GetItemState( EE_PARA_LRSPACE ); + if ( eState == SFX_ITEM_DONTCARE ) + { + rSet.InvalidateItem(EE_PARA_LRSPACE); + rSet.InvalidateItem(SID_ATTR_PARA_LRSPACE); + } + eState = pSet->GetItemState( EE_PARA_SBL ); + if ( eState == SFX_ITEM_DONTCARE ) + { + rSet.InvalidateItem(EE_PARA_SBL); + rSet.InvalidateItem(SID_ATTR_PARA_LINESPACE); + } + eState = pSet->GetItemState( EE_PARA_ULSPACE ); + if ( eState == SFX_ITEM_DONTCARE ) + { + rSet.InvalidateItem(EE_PARA_ULSPACE); + rSet.InvalidateItem(SID_ATTR_PARA_ULSPACE); + } + + SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) + pSet->Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); + if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) + { + rSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, sal_True ) ); + } + else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) + { + rSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, sal_True ) ); + } + + eState = pSet->GetItemState( EE_CHAR_KERNING, sal_True ); + if ( eState == SFX_ITEM_DONTCARE ) + { + rSet.InvalidateItem(EE_CHAR_KERNING); + rSet.InvalidateItem(SID_ATTR_CHAR_KERNING); + } delete pSet; } - -// const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); -// sal_uLong nMarkCount = rMarkList.GetMarkCount(); -// sal_Bool bDisabled = sal_False; -// -// for (sal_uLong i = 0; -// i < nMarkCount && !bDisabled && i < 50; i++) -// { -// SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); -// -// if (pObj->GetObjInventor() == E3dInventor) -// { -// bDisabled = sal_True; -// rSet.ClearItem(SDRATTR_SHADOW); -// rSet.DisableItem(SDRATTR_SHADOW); -// } -// } } diff --git a/sd/source/ui/view/drviewsj.cxx b/sd/source/ui/view/drviewsj.cxx index 40366a4ee555..a94fc9e0370a 100644 --- a/sd/source/ui/view/drviewsj.cxx +++ b/sd/source/ui/view/drviewsj.cxx @@ -91,6 +91,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet ) SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_OBJECT_TITLE_DESCRIPTION ) || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_FILL_STYLE ) || + SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_FILL_TRANSPARENCE ) || + SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_FILL_FLOATTRANSPARENCE ) || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CHANGEBEZIER ) || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CHANGEPOLYGON ) || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_LINEEND_POLYGON ) || @@ -189,6 +191,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet ) { //rSet.DisableItem( SID_ATTRIBUTES_AREA ); // wieder raus! rSet.DisableItem( SID_ATTR_FILL_STYLE ); + rSet.DisableItem( SID_ATTR_FILL_TRANSPARENCE ); + rSet.DisableItem( SID_ATTR_FILL_FLOATTRANSPARENCE ); } if( (!pObj->ISA( SdrPathObj ) && !aInfoRec.bCanConvToPath) || pObj->ISA( SdrObjGroup ) ) // Solange es JOE fehlerhaft behandelt! { // JOE: Ein Gruppenobjekt kann eben u.U. in ein PathObj gewandelt werden @@ -411,6 +415,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet ) { //rSet.DisableItem( SID_ATTRIBUTES_AREA ); rSet.DisableItem( SID_ATTR_FILL_STYLE ); + rSet.DisableItem( SID_ATTR_FILL_TRANSPARENCE ); + rSet.DisableItem( SID_ATTR_FILL_FLOATTRANSPARENCE ); } if( !bEdgeObj ) rSet.DisableItem( SID_CONNECTION_DLG ); @@ -532,6 +538,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet ) rSet.DisableItem( SID_COPYOBJECTS ); rSet.DisableItem( SID_HORIZONTAL ); rSet.DisableItem( SID_VERTICAL ); + rSet.DisableItem( SID_FLIP_HORIZONTAL ); + rSet.DisableItem( SID_FLIP_VERTICAL ); rSet.DisableItem( SID_GROUP ); rSet.DisableItem( SID_UNGROUP ); rSet.DisableItem( SID_NAME_GROUP ); diff --git a/sd/source/ui/view/drvwshrg.cxx b/sd/source/ui/view/drvwshrg.cxx index d6183f3fa066..a07d20018f0f 100644 --- a/sd/source/ui/view/drvwshrg.cxx +++ b/sd/source/ui/view/drvwshrg.cxx @@ -33,6 +33,7 @@ #include <svx/imapdlg.hxx> #include <svx/colrctrl.hxx> #include <sfx2/objface.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> #include <svx/f3dchild.hxx> #include <svx/tbxcustomshapes.hxx> @@ -89,6 +90,7 @@ SFX_IMPL_INTERFACE(DrawViewShell, SfxShell, SdResId(STR_DRAWVIEWSHELL)) SFX_CHILDWINDOW_REGISTRATION( ::sd::SpellDialogChildWindow::GetChildWindowId() ); SFX_CHILDWINDOW_REGISTRATION( SID_SEARCH_DLG ); SFX_CHILDWINDOW_REGISTRATION( ::avmedia::MediaPlayer::GetChildWindowId() ); + SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId()); } @@ -115,6 +117,7 @@ SFX_IMPL_INTERFACE(GraphicViewShell, SfxShell, SdResId(STR_DRAWVIEWSHELL)) //SOH SFX_CHILDWINDOW_REGISTRATION( ::sd::SpellDialogChildWindow::GetChildWindowId() ); SFX_CHILDWINDOW_REGISTRATION( SID_SEARCH_DLG ); SFX_CHILDWINDOW_REGISTRATION( ::avmedia::MediaPlayer::GetChildWindowId() ); + SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId()); } TYPEINIT1( GraphicViewShell, DrawViewShell ); diff --git a/sd/source/ui/view/outlnvs2.cxx b/sd/source/ui/view/outlnvs2.cxx index 5c598a814aa8..9b2a81eac98e 100644 --- a/sd/source/ui/view/outlnvs2.cxx +++ b/sd/source/ui/view/outlnvs2.cxx @@ -330,12 +330,16 @@ void OutlineViewShell::FuTemporary(SfxRequest &rReq) void OutlineViewShell::FuTemporaryModify(SfxRequest &rReq) { - OutlineViewModelChangeGuard aGuard( *pOlView ); - + sal_uInt16 nSId = rReq.GetSlot(); + std::auto_ptr< OutlineViewModelChangeGuard > aGuard; + if (nSId != SID_OUTLINE_BULLET && nSId != FN_SVX_SET_BULLET && nSId != FN_SVX_SET_NUMBER) + { + aGuard.reset( new OutlineViewModelChangeGuard(*pOlView) ); + } DeactivateCurrentFunction(); OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() ); - sal_uInt16 nSId = rReq.GetSlot(); + //sal_uInt16 nSId = rReq.GetSlot(); switch( nSId ) { @@ -380,6 +384,8 @@ void OutlineViewShell::FuTemporaryModify(SfxRequest &rReq) break; case SID_OUTLINE_BULLET: + case FN_SVX_SET_BULLET: + case FN_SVX_SET_NUMBER: { SetCurrentFunction( FuOutlineBullet::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) ); Cancel(); @@ -394,6 +400,7 @@ void OutlineViewShell::FuTemporaryModify(SfxRequest &rReq) } break; + case SID_CHAR_DLG_EFFECT: case SID_CHAR_DLG: { SetCurrentFunction( FuChar::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) ); diff --git a/sd/source/ui/view/outlnvsh.cxx b/sd/source/ui/view/outlnvsh.cxx index d856c94b0163..37ac1664edf2 100644 --- a/sd/source/ui/view/outlnvsh.cxx +++ b/sd/source/ui/view/outlnvsh.cxx @@ -52,6 +52,8 @@ #include <editeng/editstat.hxx> #include <svl/itempool.hxx> #include <sfx2/tplpitem.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svx/svdorect.hxx> #include <sot/formats.hxx> #include <com/sun/star/linguistic2/XThesaurus.hpp> @@ -128,6 +130,7 @@ SFX_IMPL_INTERFACE(OutlineViewShell, SfxShell, SdResId(STR_OUTLINEVIEWSHELL)) SFX_CHILDWINDOW_REGISTRATION( SvxHlinkDlgWrapper::GetChildWindowId() ); SFX_CHILDWINDOW_REGISTRATION( ::sd::SpellDialogChildWindow::GetChildWindowId() ); SFX_CHILDWINDOW_REGISTRATION( SID_SEARCH_DLG ); + SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId()); } @@ -230,6 +233,8 @@ OutlineViewShell::OutlineViewShell ( mpFrameView->Connect(); Construct(GetDocSh()); + + SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_OutlineText)); } /************************************************************************* diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx index cf096a396b27..8b2a8a888f7c 100644 --- a/sd/source/ui/view/sdview.cxx +++ b/sd/source/ui/view/sdview.cxx @@ -51,11 +51,13 @@ #include <svx/dialogs.hrc> #include <sfx2/viewfrm.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svx/svdopage.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <svx/xlndsit.hxx> #include <svx/xlineit0.hxx> #include <svx/xlnclit.hxx> +#include <svx/sidebar/ContextChangeEventMultiplexer.hxx> #include <vcl/virdev.hxx> #include "app.hrc" @@ -79,6 +81,7 @@ #include <svx/sdr/contact/viewobjectcontact.hxx> #include <svx/sdr/contact/viewcontact.hxx> #include <svx/sdr/contact/displayinfo.hxx> +#include <svx/svdotable.hxx> #include "EventMultiplexer.hxx" #include "ViewShellBase.hxx" #include "ViewShellManager.hxx" @@ -89,6 +92,7 @@ #include <drawinglayer/primitive2d/textlayoutdevice.hxx> #include <drawinglayer/primitive2d/groupprimitive2d.hxx> #include <svx/sdr/contact/objectcontact.hxx> +#include <svx/sdr/table/tablecontroller.hxx> #include <basegfx/matrix/b2dhommatrix.hxx> #include <drawinglayer/primitive2d/textprimitive2d.hxx> #include <svx/unoapi.hxx> @@ -98,6 +102,7 @@ using namespace com::sun::star; using namespace com::sun::star::uno; +using namespace sdr::table; namespace sd { #ifndef SO2_DECL_SVINPLACEOBJECT_DEFINED @@ -775,6 +780,10 @@ sal_Bool View::SdrBeginTextEdit( pGivenOutlinerView, bDontDeleteOutliner, bOnlyOneView, bGrabFocus); + ContextChangeEventMultiplexer::NotifyContextChange( + &GetViewShell()->GetViewShellBase(), + ::sfx2::sidebar::EnumContext::Context_DrawText); + if (bReturn) { ::Outliner* pOL = GetTextEditOutliner(); @@ -790,11 +799,15 @@ sal_Bool View::SdrBeginTextEdit( { aBackground = pObj->GetPage()->GetPageBackgroundColor(pPV); } - pOL->SetBackgroundColor( aBackground ); + if (pOL != NULL) + pOL->SetBackgroundColor( aBackground ); } - pOL->SetParaInsertedHdl(LINK(this, View, OnParagraphInsertedHdl)); - pOL->SetParaRemovingHdl(LINK(this, View, OnParagraphRemovingHdl)); + if (pOL != NULL) + { + pOL->SetParaInsertedHdl(LINK(this, View, OnParagraphInsertedHdl)); + pOL->SetParaRemovingHdl(LINK(this, View, OnParagraphRemovingHdl)); + } } return(bReturn); @@ -831,10 +844,16 @@ SdrEndTextEditKind View::SdrEndTextEdit(sal_Bool bDontDeleteReally ) } } - GetViewShell()->GetViewShellBase().GetEventMultiplexer()->MultiplexEvent(sd::tools::EventMultiplexerEvent::EID_END_TEXT_EDIT, (void*)xObj.get() ); + GetViewShell()->GetViewShellBase().GetEventMultiplexer()->MultiplexEvent( + sd::tools::EventMultiplexerEvent::EID_END_TEXT_EDIT, + (void*)xObj.get() ); if( xObj.is() ) { + ContextChangeEventMultiplexer::NotifyContextChange( + &GetViewShell()->GetViewShellBase(), + ::sfx2::sidebar::EnumContext::Context_Default); + SdPage* pPage = dynamic_cast< SdPage* >( xObj->GetPage() ); if( pPage ) pPage->onEndTextEdit( xObj.get() ); @@ -1314,4 +1333,167 @@ void View::OnEndPasteOrDrop( PasteOrDropInfos* pInfos ) } } +sal_Bool View::ShouldToggleOn(sal_Bool bBulletOnOffMode, sal_Bool bNormalBullet) +{ + // If setting bullets/numbering by the dialog, always should toggle on. + if (!bBulletOnOffMode) + return sal_True; + SdrModel* pSdrModel = GetModel(); + if (!pSdrModel) + return sal_False; + + sal_Bool bToggleOn = sal_False; + SdrOutliner* pOutliner = SdrMakeOutliner(OUTLINERMODE_TEXTOBJECT, pSdrModel); + sal_uInt32 nMarkCount = GetMarkedObjectCount(); + for (sal_uInt32 nIndex = 0; nIndex < nMarkCount && !bToggleOn; nIndex++) + { + SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(GetMarkedObjectByIndex(nIndex)); + if (!pTextObj || pTextObj->IsTextEditActive()) + continue; + if (pTextObj->ISA(SdrTableObj)) + { + SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >(pTextObj); + if (!pTableObj) + continue; + CellPos aStart, aEnd; + SvxTableController* pTableController = dynamic_cast< SvxTableController* >(getSelectionController().get()); + if (pTableController) + { + pTableController->getSelectedCells(aStart, aEnd); + } + else + { + aStart = pTableObj->getFirstCell(); + aEnd = pTableObj->getLastCell(); + } + sal_Int32 nColCount = pTableObj->getColumnCount(); + for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow && !bToggleOn; nRow++) + { + for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol && !bToggleOn; nCol++) + { + sal_Int32 nIndex = nRow * nColCount + nCol; + SdrText* pText = pTableObj->getText(nIndex); + if (!pText || !pText->GetOutlinerParaObject()) + continue; + pOutliner->SetText(*(pText->GetOutlinerParaObject())); + sal_Int16 nStatus = pOutliner->GetBulletsNumberingStatus(); + bToggleOn = ((bNormalBullet && nStatus != 0) || (!bNormalBullet && nStatus != 1)) ? sal_True : bToggleOn; + pOutliner->Clear(); + } + } + } + else + { + OutlinerParaObject* pParaObj = pTextObj->GetOutlinerParaObject(); + if (!pParaObj) + continue; + pOutliner->SetText(*pParaObj); + sal_Int16 nStatus = pOutliner->GetBulletsNumberingStatus(); + bToggleOn = ((bNormalBullet && nStatus != 0) || (!bNormalBullet && nStatus != 1)) ? sal_True : bToggleOn; + pOutliner->Clear(); + } + } + delete pOutliner; + return bToggleOn; +} + +void View::ToggleMarkedObjectsBullets(sal_Bool bBulletOnOffMode, sal_Bool bNormalBullet, sal_Bool bMasterView, SvxNumRule* pNumRule, sal_Bool bForceBulletOnOff) +{ + SdrModel* pSdrModel = GetModel(); + Window* pWindow = dynamic_cast< Window* >(GetFirstOutputDevice()); + if (!pSdrModel || !pWindow) + return; + + sal_Bool bUndoEnabled = pSdrModel->IsUndoEnabled(); + sal_Bool bToggleOn = ShouldToggleOn(bBulletOnOffMode, bNormalBullet); + if ( bForceBulletOnOff ) { + bToggleOn = bBulletOnOffMode; + } + SdrUndoGroup* pUndoGroup = new SdrUndoGroup(*pSdrModel); + SdrOutliner* pOutliner = SdrMakeOutliner(OUTLINERMODE_TEXTOBJECT, pSdrModel); + OutlinerView* pOutlinerView = new OutlinerView(pOutliner, pWindow); + + sal_uInt32 nMarkCount = GetMarkedObjectCount(); + for (sal_uInt32 nIndex = 0; nIndex < nMarkCount; nIndex++) + { + SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(GetMarkedObjectByIndex(nIndex)); + if (!pTextObj || pTextObj->IsTextEditActive()) + continue; + if (pTextObj->ISA(SdrTableObj)) + { + SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >(pTextObj); + if (!pTableObj) + continue; + CellPos aStart, aEnd; + SvxTableController* pTableController = dynamic_cast< SvxTableController* >(getSelectionController().get()); + if (pTableController) + { + pTableController->getSelectedCells(aStart, aEnd); + } + else + { + aStart = pTableObj->getFirstCell(); + aEnd = pTableObj->getLastCell(); + } + sal_Int32 nColCount = pTableObj->getColumnCount(); + for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++) + { + for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++) + { + sal_Int32 nIndex = nRow * nColCount + nCol; + SdrText* pText = pTableObj->getText(nIndex); + if (!pText || !pText->GetOutlinerParaObject()) + continue; + + pOutliner->SetText(*(pText->GetOutlinerParaObject())); + if (bUndoEnabled) + { + SdrUndoObjSetText* pTxtUndo = dynamic_cast< SdrUndoObjSetText* >(pSdrModel->GetSdrUndoFactory().CreateUndoObjectSetText(*pTextObj, nIndex)); + pUndoGroup->AddAction(pTxtUndo); + } + pOutlinerView->ToggleAllParagraphsBullets(bBulletOnOffMode, bNormalBullet, bToggleOn, bMasterView, pNumRule); + sal_uInt32 nParaCount = pOutliner->GetParagraphCount(); + pText->SetOutlinerParaObject(pOutliner->CreateParaObject(0, (sal_uInt16)nParaCount)); + pOutliner->Clear(); + } + } + // Broadcast the object change event. + if (!pTextObj->AdjustTextFrameWidthAndHeight()) + { + pTextObj->SetChanged(); + pTextObj->BroadcastObjectChange(); + } + } + else + { + OutlinerParaObject* pParaObj = pTextObj->GetOutlinerParaObject(); + if (!pParaObj) + continue; + pOutliner->SetText(*pParaObj); + if (bUndoEnabled) + { + SdrUndoObjSetText* pTxtUndo = dynamic_cast< SdrUndoObjSetText* >(pSdrModel->GetSdrUndoFactory().CreateUndoObjectSetText(*pTextObj, 0)); + pUndoGroup->AddAction(pTxtUndo); + } + pOutlinerView->ToggleAllParagraphsBullets(bBulletOnOffMode, bNormalBullet, bToggleOn, bMasterView, pNumRule); + sal_uInt32 nParaCount = pOutliner->GetParagraphCount(); + pTextObj->SetOutlinerParaObject(pOutliner->CreateParaObject(0, (sal_uInt16)nParaCount)); + pOutliner->Clear(); + } + } + + if (pUndoGroup->GetActionCount() > 0 && bUndoEnabled) + { + pSdrModel->BegUndo(); + pSdrModel->AddUndo(pUndoGroup); + pSdrModel->EndUndo(); + } + else + { + delete pUndoGroup; + } + delete pOutliner; + delete pOutlinerView; +} + } // end of namespace sd diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx index b758d1bbe7bd..bc4979369437 100644 --- a/sd/source/ui/view/viewshel.cxx +++ b/sd/source/ui/view/viewshel.cxx @@ -91,6 +91,11 @@ #include "Window.hxx" #include "fupoor.hxx" +#include <editeng/numitem.hxx> +#include <editeng/eeitem.hxx> +#include <svl/poolitem.hxx> +#include <glob.hrc> + #ifndef SO2_DECL_SVINPLACEOBJECT_DEFINED #define SO2_DECL_SVINPLACEOBJECT_DEFINED SO2_DECL_REF(SvInPlaceObject) @@ -174,7 +179,8 @@ ViewShell::~ViewShell() { // Keep the content window from accessing in its destructor the // WindowUpdater. - mpContentWindow->SetViewShell(NULL); + if (mpContentWindow) + mpContentWindow->SetViewShell(NULL); delete mpZoomList; @@ -183,6 +189,13 @@ ViewShell::~ViewShell() if (mpImpl->mpSubShellFactory.get() != NULL) GetViewShellBase().GetViewShellManager()->RemoveSubShellFactory( this,mpImpl->mpSubShellFactory); + + if (mpContentWindow) + { + OSL_TRACE("destroying mpContentWindow at %x with parent %x", mpContentWindow.get(), + mpContentWindow->GetParent()); + mpContentWindow.reset(); + } } @@ -794,7 +807,86 @@ void ViewShell::SetupRulers (void) } } +const SfxPoolItem* ViewShell::GetNumBulletItem(SfxItemSet& aNewAttr, sal_uInt16& nNumItemId) +{ + const SfxPoolItem* pTmpItem = NULL; + + if(aNewAttr.GetItemState(nNumItemId, sal_False, &pTmpItem) == SFX_ITEM_SET) + { + return pTmpItem; + } + else + { + nNumItemId = aNewAttr.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); + SfxItemState eState = aNewAttr.GetItemState(nNumItemId, sal_False, &pTmpItem); + if (eState == SFX_ITEM_SET) + return pTmpItem; + else + { + sal_Bool bOutliner = sal_False; + sal_Bool bTitle = sal_False; + + if( mpView ) + { + const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); + const sal_uInt32 nCount = rMarkList.GetMarkCount(); + + for(sal_uInt32 nNum = 0; nNum < nCount; nNum++) + { + SdrObject* pObj = rMarkList.GetMark(nNum)->GetMarkedSdrObj(); + if( pObj->GetObjInventor() == SdrInventor ) + { + switch(pObj->GetObjIdentifier()) + { + case OBJ_TITLETEXT: + bTitle = sal_True; + break; + case OBJ_OUTLINETEXT: + bOutliner = sal_True; + break; + } + } + } + } + + const SvxNumBulletItem *pItem = NULL; + if(bOutliner) + { + SfxStyleSheetBasePool* pSSPool = mpView->GetDocSh()->GetStyleSheetPool(); + String aStyleName((SdResId(STR_LAYOUT_OUTLINE))); + aStyleName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " 1" ) ); + SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( aStyleName, SD_STYLE_FAMILY_PSEUDO); + if( pFirstStyleSheet ) + pFirstStyleSheet->GetItemSet().GetItemState(EE_PARA_NUMBULLET, sal_False, (const SfxPoolItem**)&pItem); + } + + if( pItem == NULL ) + pItem = (SvxNumBulletItem*) aNewAttr.GetPool()->GetSecondaryPool()->GetPoolDefaultItem(EE_PARA_NUMBULLET); + + aNewAttr.Put(*pItem, EE_PARA_NUMBULLET); + + if(bTitle && aNewAttr.GetItemState(EE_PARA_NUMBULLET,sal_True) == SFX_ITEM_ON ) + { + SvxNumBulletItem* pItem = (SvxNumBulletItem*)aNewAttr.GetItem(EE_PARA_NUMBULLET,sal_True); + SvxNumRule* pRule = pItem->GetNumRule(); + if(pRule) + { + SvxNumRule aNewRule( *pRule ); + aNewRule.SetFeatureFlag( NUM_NO_NUMBERS, sal_True ); + + SvxNumBulletItem aNewItem( aNewRule, EE_PARA_NUMBULLET ); + aNewAttr.Put(aNewItem); + } + } + SfxItemState eState = aNewAttr.GetItemState(nNumItemId, sal_False, &pTmpItem); + if (eState == SFX_ITEM_SET) + return pTmpItem; + + } + } + return pTmpItem; +} sal_Bool ViewShell::HasRuler (void) @@ -964,9 +1056,10 @@ void ViewShell::ArrangeGUIElements (void) { OSL_ASSERT (GetViewShell()!=NULL); - mpContentWindow->SetPosSizePixel( - Point(nLeft,nTop), - Size(nRight-nLeft,nBottom-nTop)); + if (mpContentWindow) + mpContentWindow->SetPosSizePixel( + Point(nLeft,nTop), + Size(nRight-nLeft,nBottom-nTop)); } // Windows in the center and rulers at the left and top side. diff --git a/sd/uiconfig/sdraw/menubar/menubar.xml b/sd/uiconfig/sdraw/menubar/menubar.xml index f33bf1271b47..3907ff919915 100644 --- a/sd/uiconfig/sdraw/menubar/menubar.xml +++ b/sd/uiconfig/sdraw/menubar/menubar.xml @@ -129,6 +129,7 @@ <menu:menuseparator/> <menu:menuitem menu:id=".uno:Navigator"/> <menu:menuitem menu:id=".uno:TaskPane"/> + <menu:menuitem menu:id=".uno:Sidebar"/> <menu:menuseparator/> <menu:menuitem menu:id=".uno:Zoom"/> </menu:menupopup> diff --git a/sd/uiconfig/simpress/menubar/menubar.xml b/sd/uiconfig/simpress/menubar/menubar.xml index ba54639b092f..63b30b3e7497 100644 --- a/sd/uiconfig/simpress/menubar/menubar.xml +++ b/sd/uiconfig/simpress/menubar/menubar.xml @@ -120,6 +120,7 @@ </menu:menu> <menu:menuseparator/> <menu:menuitem menu:id=".uno:TaskPane"/> + <menu:menuitem menu:id=".uno:Sidebar"/> <menu:menuitem menu:id=".uno:LeftPaneImpress"/> <menu:menuitem menu:id=".uno:AvailableToolbars"/> <menu:menuitem menu:id=".uno:StatusBarVisible"/> diff --git a/sd/util/makefile.mk b/sd/util/makefile.mk index c625fef4b683..f1f3ca4d05b0 100644 --- a/sd/util/makefile.mk +++ b/sd/util/makefile.mk @@ -125,15 +125,14 @@ LIB3FILES= \ $(SLB)$/controller.lib LIB5TARGET=$(SLB)$/sdraw3_2.lib -LIB5FILES= \ - $(SLB)$/html.lib \ - $(SLB)$/filter.lib \ - $(SLB)$/unoidl.lib \ - $(SLB)$/animui.lib \ +LIB5FILES= \ + $(SLB)$/html.lib \ + $(SLB)$/filter.lib \ + $(SLB)$/unoidl.lib \ + $(SLB)$/animui.lib \ $(SLB)$/accessibility.lib \ - $(SLB)$/toolpanel.lib \ $(SLB)$/uitools.lib \ - $(SLB)$/tpcontrols.lib + $(SLB)$/sidebar.lib LIB6TARGET=$(SLB)$/sdraw3_3.lib LIB6FILES= \ diff --git a/sd/util/sd.component b/sd/util/sd.component index 1cc2099e7056..ecb900d66001 100644 --- a/sd/util/sd.component +++ b/sd/util/sd.component @@ -68,8 +68,8 @@ <implementation name="com.sun.star.comp.Draw.framework.ResourceId"> <service name="com.sun.star.drawing.framework.ResourceId"/> </implementation> - <implementation name="com.sun.star.comp.Draw.framework.TaskPanelFactory"> - <service name="com.sun.star.drawing.framework.TaskPanelFactory"/> + <implementation name="org.openoffice.comp.Draw.framework.PanelFactory"> + <service name="com.sun.star.drawing.framework.PanelFactory"/> </implementation> <implementation name="com.sun.star.comp.Draw.framework.configuration.Configuration"> <service name="com.sun.star.drawing.framework.Configuration"/> @@ -83,9 +83,6 @@ <implementation name="com.sun.star.comp.draw.SdHtmlOptionsDialog"> <service name="com.sun.star.ui.dialog.FilterOptionsDialog"/> </implementation> - <implementation name="com.sun.star.comp.drawing.ToolPanelFactory"> - <service name="com.sun.star.drawing.DefaultToolPanelFactory"/> - </implementation> <implementation name="com.sun.star.comp.sd.InsertSlideController"> <service name="com.sun.star.frame.ToolbarController"/> </implementation> diff --git a/sfx2/AllLangResTarget_sfx2.mk b/sfx2/AllLangResTarget_sfx2.mk index c27c3404bda9..860fea31374c 100644 --- a/sfx2/AllLangResTarget_sfx2.mk +++ b/sfx2/AllLangResTarget_sfx2.mk @@ -72,6 +72,7 @@ $(eval $(call gb_SrsTarget_add_files,sfx/res,\ sfx2/source/doc/graphhelp.src \ sfx2/source/doc/new.src \ sfx2/source/menu/menu.src \ + sfx2/source/sidebar/Sidebar.src \ sfx2/source/view/view.src \ )) diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk index c06acfd3a667..145b9338dcc4 100755 --- a/sfx2/Library_sfx.mk +++ b/sfx2/Library_sfx.mk @@ -213,6 +213,37 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ sfx2/source/menu/virtmenu \ sfx2/source/notify/eventsupplier \ sfx2/source/notify/hintpost \ + sfx2/source/sidebar/SidebarChildWindow \ + sfx2/source/sidebar/SidebarDockingWindow \ + sfx2/source/sidebar/SidebarController \ + sfx2/source/sidebar/SidebarPanelBase \ + sfx2/source/sidebar/SidebarToolBox \ + sfx2/source/sidebar/AsynchronousCall \ + sfx2/source/sidebar/Context \ + sfx2/source/sidebar/ContextChangeBroadcaster \ + sfx2/source/sidebar/ContextList \ + sfx2/source/sidebar/ControlFactory \ + sfx2/source/sidebar/ControllerItem \ + sfx2/source/sidebar/CustomImageRadioButton \ + sfx2/source/sidebar/Deck \ + sfx2/source/sidebar/DeckDescriptor \ + sfx2/source/sidebar/DeckLayouter \ + sfx2/source/sidebar/DeckTitleBar \ + sfx2/source/sidebar/DrawHelper \ + sfx2/source/sidebar/EnumContext \ + sfx2/source/sidebar/FocusManager \ + sfx2/source/sidebar/MenuButton \ + sfx2/source/sidebar/Paint \ + sfx2/source/sidebar/Panel \ + sfx2/source/sidebar/PanelDescriptor \ + sfx2/source/sidebar/PanelTitleBar \ + sfx2/source/sidebar/ResourceManager \ + sfx2/source/sidebar/TabBar \ + sfx2/source/sidebar/TabItem \ + sfx2/source/sidebar/TitleBar \ + sfx2/source/sidebar/Theme \ + sfx2/source/sidebar/Tools \ + sfx2/source/sidebar/ToolBoxBackground \ sfx2/source/statbar/stbitem \ sfx2/source/toolbox/imgmgr \ sfx2/source/toolbox/tbxitem \ diff --git a/sfx2/Package_inc.mk b/sfx2/Package_inc.mk index dc65b7823624..1d8c541918b5 100644 --- a/sfx2/Package_inc.mk +++ b/sfx2/Package_inc.mk @@ -131,3 +131,13 @@ $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/userinputinterception.hxx,sf $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/viewfac.hxx,sfx2/viewfac.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/viewfrm.hxx,sfx2/viewfrm.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/viewsh.hxx,sfx2/viewsh.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/SidebarChildWindow.hxx,sfx2/sidebar/SidebarChildWindow.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/SidebarPanelBase.hxx,sfx2/sidebar/SidebarPanelBase.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/ControllerItem.hxx,sfx2/sidebar/ControllerItem.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/propertypanel.hrc,sfx2/sidebar/propertypanel.hrc)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/EnumContext.hxx,sfx2/sidebar/EnumContext.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/ControlFactory.hxx,sfx2/sidebar/ControlFactory.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/Theme.hxx,sfx2/sidebar/Theme.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/ILayoutableWindow.hxx,sfx2/sidebar/ILayoutableWindow.hxx)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/IContextChangeReceiver.hxx,sfx2/sidebar/IContextChangeReceiver.hxx)) + diff --git a/sfx2/inc/sfx2/navigat.hxx b/sfx2/inc/sfx2/navigat.hxx index 4960fd417ea8..6be20605bc5d 100644 --- a/sfx2/inc/sfx2/navigat.hxx +++ b/sfx2/inc/sfx2/navigat.hxx @@ -41,7 +41,7 @@ public: SFX_DECL_CHILDWINDOW(SfxNavigatorWrapper); }; -class SfxNavigator : public SfxDockingWindow +class SFX2_DLLPUBLIC SfxNavigator : public SfxDockingWindow { SfxChildWindow* pWrapper; diff --git a/sfx2/inc/sfx2/sfx.hrc b/sfx2/inc/sfx2/sfx.hrc index 05979e1c2ecc..65d1d7a6933a 100644 --- a/sfx2/inc/sfx2/sfx.hrc +++ b/sfx2/inc/sfx2/sfx.hrc @@ -126,6 +126,7 @@ #define RID_SFX_SFXLOCAL_START (RID_SFX_START + 3082) #define RID_SFX_VIEW_START (RID_SFX_START + 4096) +#define RID_SFX_SIDEBAR_START (RID_SFX_START + 4150) #define RID_SFX_NODES_START (RID_SFX_START + 4500) #define RID_CNT_START2 (RID_SFX_NODES_START) #define RID_SFX_CHAOSDOC_START (RID_SFX_START + 5120) diff --git a/sfx2/inc/sfx2/sfxsids.hrc b/sfx2/inc/sfx2/sfxsids.hrc index 62dae9f469ca..2b5e8044a706 100644 --- a/sfx2/inc/sfx2/sfxsids.hrc +++ b/sfx2/inc/sfx2/sfxsids.hrc @@ -853,6 +853,7 @@ #define SID_ZOOM (SID_SVX_START + 289) #define SID_SEARCH_ITEM (SID_SVX_START + 291) #define SID_ATTR_CHAR_FONTWIDTH (SID_SVX_START + 303) +#define SID_SIDEBAR (SID_SVX_START + 336) #define SID_HYPERLINK_INSERT (SID_SVX_START + 360) #define SID_HYPERLINK_GETLINK (SID_SVX_START + 361) #define SID_HYPERLINK_SETLINK (SID_SVX_START + 362) diff --git a/sfx2/inc/sfx2/shell.hxx b/sfx2/inc/sfx2/shell.hxx index 90f6db0d2e28..f1b06fdf2c57 100644 --- a/sfx2/inc/sfx2/shell.hxx +++ b/sfx2/inc/sfx2/shell.hxx @@ -254,6 +254,8 @@ public: virtual SfxItemSet* CreateItemSet( sal_uInt16 nId ); virtual void ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet ); + void SetContextName (const ::rtl::OUString& rsContextName); + #ifndef _SFXSH_HXX SAL_DLLPRIVATE bool CanExecuteSlot_Impl( const SfxSlot &rSlot ); SAL_DLLPRIVATE void DoActivate_Impl( SfxViewFrame *pFrame, sal_Bool bMDI); diff --git a/sfx2/inc/sfx2/sidebar/ContextChangeBroadcaster.hxx b/sfx2/inc/sfx2/sidebar/ContextChangeBroadcaster.hxx new file mode 100644 index 000000000000..c103ece0d099 --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/ContextChangeBroadcaster.hxx @@ -0,0 +1,62 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CONTEXT_CHANGE_BROADCASTER_HXX +#define SFX_SIDEBAR_CONTEXT_CHANGE_BROADCASTER_HXX + +#include <com/sun/star/frame/XFrame.hpp> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace sfx2 { namespace sidebar { + + +/** This class is a helper for broadcasting context changes that are + tied to shells being activated or deactivated. +*/ +class ContextChangeBroadcaster +{ +public: + ContextChangeBroadcaster (void); + ~ContextChangeBroadcaster (void); + + void Initialize (const ::rtl::OUString& rsContextName); + + void Activate (const cssu::Reference<css::frame::XFrame>& rxFrame); + void Deactivate (const cssu::Reference<css::frame::XFrame>& rxFrame); + +private: + rtl::OUString msContextName; + bool mbIsContextActive; + + void BroadcastContextChange ( + const cssu::Reference<css::frame::XFrame>& rxFrame, + const ::rtl::OUString& rsModuleName, + const ::rtl::OUString& rsContextName); + ::rtl::OUString GetModuleName ( + const cssu::Reference<css::frame::XFrame>& rxFrame); +}; + + +} } // end of namespace ::sd::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/ControlFactory.hxx b/sfx2/inc/sfx2/sidebar/ControlFactory.hxx new file mode 100644 index 000000000000..f873889f9984 --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/ControlFactory.hxx @@ -0,0 +1,50 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CONTROL_FACTORY_HXX +#define SFX_SIDEBAR_CONTROL_FACTORY_HXX + +#include <sfx2/dllapi.h> +#include <vcl/button.hxx> + +class ToolBox; + +namespace sfx2 { namespace sidebar { + +class ToolBoxBackground; + + +class SFX2_DLLPUBLIC ControlFactory +{ +public: + static CheckBox* CreateMenuButton (Window* pParentWindow); + static ImageRadioButton* CreateTabItem (Window* pParentWindow); + static ToolBox* CreateToolBox (Window* pParentWindow, const ResId& rResId); + static Window* CreateToolBoxBackground (Window* pParentWindow); + static ImageRadioButton* CreateCustomImageRadionButton( + Window* pParentWindow, + const ResId& rResId ); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/ControllerItem.hxx b/sfx2/inc/sfx2/sidebar/ControllerItem.hxx new file mode 100644 index 000000000000..c9bdbeaee71b --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/ControllerItem.hxx @@ -0,0 +1,58 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_CONTROLLER_ITEM_HXX +#define SVX_SIDEBAR_CONTROLLER_ITEM_HXX + +#include <sfx2/ctrlitem.hxx> + +#include <boost/function.hpp> + + +namespace sfx2 { namespace sidebar { + +class SFX2_DLLPUBLIC ControllerItem + : public SfxControllerItem +{ +public: + class ItemUpdateReceiverInterface + { + public: + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState) = 0; + }; + ControllerItem ( + const sal_uInt16 nId, + SfxBindings &rBindings, + ItemUpdateReceiverInterface& rItemUpdateReceiver); + virtual ~ControllerItem (void); + + virtual void StateChanged (sal_uInt16 nSId, SfxItemState eState, const SfxPoolItem* pState); + +private: + ItemUpdateReceiverInterface& mrItemUpdateReceiver; +}; + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/EnumContext.hxx b/sfx2/inc/sfx2/sidebar/EnumContext.hxx new file mode 100644 index 000000000000..ad436d84d261 --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/EnumContext.hxx @@ -0,0 +1,173 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_ENUM_CONTEXT_HXX +#define SFX_SIDEBAR_ENUM_CONTEXT_HXX + +#include "sfx2/dllapi.h" + +#include <rtl/ustring.hxx> + +#include <vector> + + +namespace sfx2 { namespace sidebar { + +class SFX2_DLLPUBLIC EnumContext +{ +public: + enum Application + { + Application_Writer, + Application_WriterWeb, + Application_Calc, + Application_Draw, + Application_Impress, + + // For your convenience to avoid duplicate code in the common + // case that Draw and Impress use identical context configurations. + Application_DrawImpress, + + // Also for your convenience for either Writer or WriterWeb. + Application_WriterAndWeb, + + // Used only by deck or panel descriptors. Matches any + // application. + Application_Any, + + // Use this only in special circumstances. One might be the + // wish to disable a deck or panel during debugging. + Application_None, + + __LastApplicationEnum = Application_None + }; + enum Context + { + Context_3DObject, + Context_Annotation, + Context_Auditing, + Context_Cell, + Context_Chart, + Context_Draw, + Context_DrawPage, + Context_DrawText, + Context_EditCell, + Context_Form, + Context_Frame, + Context_Graphic, + Context_HandoutPage, + Context_MasterPage, + Context_Media, + Context_MultiObject, + Context_NotesPage, + Context_OLE, + Context_OutlineText, + Context_Pivot, + Context_SlidesorterPage, + Context_Table, + Context_Text, + Context_TextObject, + + // Default context of an application. Do we need this? + Context_Default, + + // Used only by deck or panel descriptors. Matches any context. + Context_Any, + + // Special context name that is only used when a deck would + // otherwise be empty. + Context_Empty, + + Context_Unknown, + + __LastContextEnum = Context_Unknown + }; + + EnumContext (void); + EnumContext ( + const Application eApplication, + const Context eContext); + EnumContext ( + const ::rtl::OUString& rsApplicationName, + const ::rtl::OUString& rsContextName); + + /** Return a number that encodes both the application and context + enums. + Use the CombinedEnumContext macro in switch() statements and comparisons. + */ + sal_Int32 GetCombinedContext(void) const; + + /** This variant of the GetCombinedContext() method treats some + application names as identical to each other. Replacements + made are: + Draw or Impress -> DrawImpress + Writer or WriterWeb -> WriterAndWeb + Use the Application_DrawImpress or Application_WriterAndWeb values in the CombinedEnumContext macro. + */ + sal_Int32 GetCombinedContext_DI(void) const; + + const ::rtl::OUString& GetApplicationName (void) const; + const ::rtl::OUString& GetContextName (void) const; + + bool operator == (const EnumContext aOther); + bool operator != (const EnumContext aOther); + + /** When two contexts are matched against each other then + application or context name may have the wildcard value 'any'. + In order to prefer matches without wildcards over matches with + wildcards we introduce a integer evaluation for matches. + */ + const static sal_Int32 NoMatch; + const static sal_Int32 OptimalMatch; + + /** Return the numeric value that describes how good the match + between two contexts is. + Smaller values represent better matches. + */ + sal_Int32 EvaluateMatch (const EnumContext& rOther) const; + + /** Return the best match against the given list of contexts. + */ + sal_Int32 EvaluateMatch (const ::std::vector<EnumContext>& rOthers) const; + + static Application GetApplicationEnum (const ::rtl::OUString& rsApplicationName); + static const ::rtl::OUString& GetApplicationName (const Application eApplication); + + static Context GetContextEnum (const ::rtl::OUString& rsContextName); + static const ::rtl::OUString& GetContextName (const Context eContext); + +private: + Application meApplication; + Context meContext; + + static void ProvideApplicationContainers (void); + static void ProvideContextContainers (void); + static void AddEntry (const ::rtl::OUString& rsName, const Application eApplication); + static void AddEntry (const ::rtl::OUString& rsName, const Context eContext); +}; + + +#define CombinedEnumContext(a,e) ((static_cast<sal_uInt16>(::sfx2::sidebar::EnumContext::a)<<16)\ + | static_cast<sal_uInt16>(::sfx2::sidebar::EnumContext::e)) + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx b/sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx new file mode 100644 index 000000000000..e495e65ecaff --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/IContextChangeReceiver.hxx @@ -0,0 +1,40 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CONTEXT_CHANGE_RECEIVER_INTERFACE_HXX +#define SFX_SIDEBAR_CONTEXT_CHANGE_RECEIVER_INTERFACE_HXX + +#include "EnumContext.hxx" + + +namespace sfx2 { namespace sidebar { + + +class SFX2_DLLPUBLIC IContextChangeReceiver +{ +public: + virtual void HandleContextChange ( + const EnumContext aContext) = 0; +}; + +} } // end of namespace ::sd::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx b/sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx new file mode 100644 index 000000000000..22b0efc19fb8 --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/ILayoutableWindow.hxx @@ -0,0 +1,47 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_LAYOUTABLE_WINDOW_INTERFACE_HXX +#define SFX_SIDEBAR_LAYOUTABLE_WINDOW_INTERFACE_HXX + +#include <tools/gen.hxx> +#include <sal/types.h> + +#include <com/sun/star/ui/LayoutSize.hpp> + +class Window; + +namespace sfx2 { namespace sidebar { + + +class ILayoutableWindow +{ +public: + /** Return the preferred height with the constraint, that the + window will be set to the given width. + */ + virtual ::com::sun::star::ui::LayoutSize GetHeightForWidth (const sal_Int32 nWidth) = 0; +}; + + +} } // end of namespace ::sd::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/PopupContainer.hxx b/sfx2/inc/sfx2/sidebar/PopupContainer.hxx new file mode 100755 index 000000000000..2d3c240ba06e --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/PopupContainer.hxx @@ -0,0 +1,41 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_POPUP_CONTAINER_HXX +#define SFX_SIDEBAR_POPUP_CONTAINER_HXX + +#include "sfx2/dllapi.h" +#include <vcl/floatwin.hxx> + +namespace sfx2 { namespace sidebar { + +class SFX2_DLLPUBLIC PopupContainer : public FloatingWindow +{ +public: + PopupContainer (Window* pParent); + virtual ~PopupContainer (void); + + virtual long Notify (NotifyEvent& rNEvt); +}; + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/SidebarChildWindow.hxx b/sfx2/inc/sfx2/sidebar/SidebarChildWindow.hxx new file mode 100644 index 000000000000..e825f3dfb6ef --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/SidebarChildWindow.hxx @@ -0,0 +1,52 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CHILD_WINDOW_HXX +#define SFX_SIDEBAR_CHILD_WINDOW_HXX + +#include "sfx2/childwin.hxx" + + +namespace sfx2 { namespace sidebar { + +/** Outer container of the sidbar window. + + Has to be registered for every application via the + RegisterChildWindow() method from the RegisterControllers() method + of the applications DLL. +*/ +class SFX2_DLLPUBLIC SidebarChildWindow + : public SfxChildWindow +{ +public: + SidebarChildWindow( + Window* pParent, + sal_uInt16 nId, + SfxBindings* pBindings, + SfxChildWinInfo* pInfo); + + SFX_DECL_CHILDWINDOW(SidebarChildWindow); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx b/sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx new file mode 100644 index 000000000000..9f894e08119e --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/SidebarPanelBase.hxx @@ -0,0 +1,128 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_PANEL_BASE_HXX +#define SFX_SIDEBAR_PANEL_BASE_HXX + +#include "EnumContext.hxx" + +#include <cppuhelper/compbase4.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/ui/XContextChangeEventListener.hpp> +#include <com/sun/star/ui/XUIElement.hpp> +#include <com/sun/star/ui/XToolPanel.hpp> +#include <com/sun/star/ui/XSidebarPanel.hpp> + +#include <boost/noncopyable.hpp> +#include <boost/function.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +class Window; + +namespace sfx2 { namespace sidebar { + +namespace +{ + typedef ::cppu::WeakComponentImplHelper4 < + css::ui::XContextChangeEventListener, + css::ui::XUIElement, + css::ui::XToolPanel, + css::ui::XSidebarPanel + > SidebarPanelBaseInterfaceBase; +} + +/** Base class for sidebar panels that provides some convenience + functionality. +*/ +class SFX2_DLLPUBLIC SidebarPanelBase + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public SidebarPanelBaseInterfaceBase +{ +public: + static cssu::Reference<css::ui::XUIElement> Create ( + const ::rtl::OUString& rsResourceURL, + const cssu::Reference<css::frame::XFrame>& rxFrame, + Window* mpWindow, + const css::ui::LayoutSize& rLayoutSize); + + // XContextChangeEventListener + virtual void SAL_CALL notifyContextChangeEvent ( + const css::ui::ContextChangeEventObject& rEvent) + throw (cssu::RuntimeException); + + // XEventListener + virtual void SAL_CALL disposing ( + const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException); + + // XUIElement + virtual cssu::Reference<css::frame::XFrame> SAL_CALL getFrame (void) + throw(cssu::RuntimeException); + virtual ::rtl::OUString SAL_CALL getResourceURL (void) + throw(cssu::RuntimeException); + virtual sal_Int16 SAL_CALL getType (void) + throw(cssu::RuntimeException); + virtual cssu::Reference<cssu::XInterface> SAL_CALL getRealInterface (void) + throw(cssu::RuntimeException); + + // XToolPanel + virtual cssu::Reference<css::accessibility::XAccessible> SAL_CALL createAccessible ( + const cssu::Reference<css::accessibility::XAccessible>& rxParentAccessible) + throw(cssu::RuntimeException); + virtual cssu::Reference<css::awt::XWindow> SAL_CALL getWindow (void) + throw(cssu::RuntimeException); + + // XSidebarPanel + virtual css::ui::LayoutSize SAL_CALL getHeightForWidth (sal_Int32 nWidth) + throw(cssu::RuntimeException); + +protected: + cssu::Reference<css::frame::XFrame> mxFrame; + + SidebarPanelBase ( + const ::rtl::OUString& rsResourceURL, + const cssu::Reference<css::frame::XFrame>& rxFrame, + Window* pWindow, + const css::ui::LayoutSize& rLayoutSize); + virtual ~SidebarPanelBase (void); + + virtual void SAL_CALL disposing (void) + throw (cssu::RuntimeException); + + void SetControl (::Window* pControl); + ::Window* GetControl (void) const; + +private: + Window* mpControl; + const ::rtl::OUString msResourceURL; + const css::ui::LayoutSize maLayoutSize; +}; + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/Theme.hxx b/sfx2/inc/sfx2/sidebar/Theme.hxx new file mode 100644 index 000000000000..03952229e31d --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/Theme.hxx @@ -0,0 +1,282 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_THEME_HXX +#define SFX_SIDEBAR_THEME_HXX + +#include "sfx2/dllapi.h" + +#include <tools/color.hxx> +#include <vcl/image.hxx> +#include <cppuhelper/compbase2.hxx> +#include <cppuhelper/basemutex.hxx> +#include <tools/gen.hxx> +#include <rtl/ref.hxx> +#include <vcl/wall.hxx> + +#include <com/sun/star/beans/XPropertySet.hpp> + +#include <hash_map> +#include <map> +#include <boost/optional.hpp> + + +class SvBorder; + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + + +namespace +{ + typedef ::cppu::WeakComponentImplHelper2 < + css::beans::XPropertySet, + css::beans::XPropertySetInfo + > ThemeInterfaceBase; +} + +class Paint; + +/** Simple collection of colors, gradients, fonts that define the + look of the sidebar and its controls. +*/ +class SFX2_DLLPUBLIC Theme + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public ThemeInterfaceBase +{ +public: + enum ThemeItem + { + __Begin, + __Pre_Image = __Begin, + + __AnyItem = __Pre_Image, + + Image_Grip, + Image_Expand, + Image_Collapse, + Image_TabBarMenu, + Image_PanelMenu, + Image_ToolBoxItemSeparator, + Image_Closer, + + __Image_Color, + + Color_DeckTitleFont, + Color_PanelTitleFont, + Color_TabMenuSeparator, + Color_TabItemBorder, + Color_DropDownBorder, + Color_Highlight, + Color_HighlightText, + + __Color_Paint, + + Paint_DeckBackground, + Paint_DeckTitleBarBackground, + Paint_PanelBackground, + Paint_PanelTitleBarBackground, + Paint_TabBarBackground, + Paint_TabItemBackgroundNormal, + Paint_TabItemBackgroundHighlight, + Paint_HorizontalBorder, + Paint_VerticalBorder, + Paint_ToolBoxBackground, + Paint_ToolBoxBorderTopLeft, + Paint_ToolBoxBorderCenterCorners, + Paint_ToolBoxBorderBottomRight, + Paint_DropDownBackground, + + __Paint_Int, + + Int_DeckTitleBarHeight, + Int_DeckBorderSize, + Int_DeckSeparatorHeight, + Int_PanelTitleBarHeight, + Int_TabMenuPadding, + Int_TabMenuSeparatorPadding, + Int_TabItemWidth, + Int_TabItemHeight, + Int_DeckLeftPadding, + Int_DeckTopPadding, + Int_DeckRightPadding, + Int_DeckBottomPadding, + Int_TabBarLeftPadding, + Int_TabBarTopPadding, + Int_TabBarRightPadding, + Int_TabBarBottomPadding, + Int_ButtonCornerRadius, + + __Int_Bool, + + Bool_UseSymphonyIcons, + Bool_UseSystemColors, + Bool_UseToolBoxItemSeparator, + Bool_IsHighContrastModeActive, + + __Bool_Rect, + + Rect_ToolBoxPadding, + Rect_ToolBoxBorder, + + __Post_Rect, + __End=__Post_Rect + }; + + static Image GetImage (const ThemeItem eItem); + static Color GetColor (const ThemeItem eItem); + static const Paint& GetPaint (const ThemeItem eItem); + static const Wallpaper GetWallpaper (const ThemeItem eItem); + static sal_Int32 GetInteger (const ThemeItem eItem); + static bool GetBoolean (const ThemeItem eItem); + static Rectangle GetRectangle (const ThemeItem eItem); + + static bool IsHighContrastMode (void); + + static void HandleDataChange (void); + + Theme (void); + virtual ~Theme (void); + + virtual void SAL_CALL disposing (void); + + static cssu::Reference<css::beans::XPropertySet> GetPropertySet (void); + + // beans::XPropertySet + virtual cssu::Reference<css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo (void) + throw(cssu::RuntimeException); + virtual void SAL_CALL setPropertyValue ( + const ::rtl::OUString& rsPropertyName, + const cssu::Any& rValue) + throw(cssu::RuntimeException); + virtual cssu::Any SAL_CALL getPropertyValue ( + const ::rtl::OUString& rsPropertyName) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException); + virtual void SAL_CALL addPropertyChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException); + virtual void SAL_CALL removePropertyChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException); + virtual void SAL_CALL addVetoableChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException); + virtual void SAL_CALL removeVetoableChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException); + + // beans::XPropertySetInfo + virtual cssu::Sequence<css::beans::Property> SAL_CALL getProperties (void) + throw(cssu::RuntimeException); + virtual css::beans::Property SAL_CALL getPropertyByName (const ::rtl::OUString& rsName) + throw(css::beans::UnknownPropertyException, + cssu::RuntimeException); + virtual sal_Bool SAL_CALL hasPropertyByName (const ::rtl::OUString& rsName) + throw(cssu::RuntimeException); + +private: + static ::rtl::Reference<Theme> mpInstance; + static Theme& GetCurrentTheme (void); + + ::std::vector<Image> maImages; + ::std::vector<Color> maColors; + ::std::vector<Paint> maPaints; + ::std::vector<sal_Int32> maIntegers; + ::std::vector<bool> maBooleans; + ::std::vector<Rectangle> maRectangles; + bool mbIsHighContrastMode; + bool mbIsHighContrastModeSetManually; + + typedef ::std::hash_map<rtl::OUString,ThemeItem, rtl::OUStringHash> PropertyNameToIdMap; + PropertyNameToIdMap maPropertyNameToIdMap; + typedef ::std::vector<rtl::OUString> PropertyIdToNameMap; + PropertyIdToNameMap maPropertyIdToNameMap; + typedef ::std::vector<cssu::Any> RawValueContainer; + RawValueContainer maRawValues; + + typedef ::std::vector<cssu::Reference<css::beans::XPropertyChangeListener> > ChangeListenerContainer; + typedef ::std::map<ThemeItem,ChangeListenerContainer> ChangeListeners; + ChangeListeners maChangeListeners; + typedef ::std::vector<cssu::Reference<css::beans::XVetoableChangeListener> > VetoableListenerContainer; + typedef ::std::map<ThemeItem,VetoableListenerContainer> VetoableListeners; + VetoableListeners maVetoableListeners; + + enum PropertyType + { + PT_Image, + PT_Color, + PT_Paint, + PT_Integer, + PT_Boolean, + PT_Rectangle, + PT_Invalid + }; + + void SetupPropertyMaps (void); + void InitializeTheme (void); + void UpdateTheme (void); + static PropertyType GetPropertyType (const ThemeItem eItem); + static cssu::Type GetCppuType (const PropertyType eType); + static sal_Int32 GetIndex ( + const ThemeItem eItem, + const PropertyType eType); + + VetoableListenerContainer* GetVetoableListeners ( + const ThemeItem eItem, + const bool bCreate); + ChangeListenerContainer* GetChangeListeners ( + const ThemeItem eItem, + const bool bCreate); + bool DoVetoableListenersVeto ( + const VetoableListenerContainer* pListeners, + const css::beans::PropertyChangeEvent& rEvent) const; + void BroadcastPropertyChange ( + const ChangeListenerContainer* pListeners, + const css::beans::PropertyChangeEvent& rEvent) const; + void ProcessNewValue ( + const cssu::Any& rValue, + const ThemeItem eItem, + const PropertyType eType); +}; + + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/inc/sfx2/sidebar/propertypanel.hrc b/sfx2/inc/sfx2/sidebar/propertypanel.hrc new file mode 100644 index 000000000000..21e1736b4ffc --- /dev/null +++ b/sfx2/inc/sfx2/sidebar/propertypanel.hrc @@ -0,0 +1,132 @@ +/************************************************************************ + * + * Licensed Materials - Property of IBM. + * (C) Copyright IBM Corporation 2003, 2012. All Rights Reserved. + * U.S. Government Users Restricted Rights: + * Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. + * + ************************************************************************/ + +#ifndef _SFX_PROPERTYPANEL_HRC +#define _SFX_PROPERTYPANEL_HRC + +#include <sfx2/sfx.hrc> + +//section page RID +#define RC_PROPERTYPANEL_START RID_SFX_PROPERTYPANEL_START +#define DLG_PROPERTY_DOCKING_WINDOW ( RC_PROPERTYPANEL_START + 0 ) +#define BMP_PROPERTYPANEL_EXPAND ( RC_PROPERTYPANEL_START + 1 ) +#define BMP_PROPERTYPANEL_COLLAPSE ( RC_PROPERTYPANEL_START + 2 ) +#define BMP_PROPERTYPANEL_EXPAND_HC ( RC_PROPERTYPANEL_START + 3 ) +#define BMP_PROPERTYPANEL_COLLAPSE_HC ( RC_PROPERTYPANEL_START + 4 ) +#define BMP_PROPERTYPANEL_MOREPROPERTY ( RC_PROPERTYPANEL_START + 5 ) +#define BMP_PROPERTYPANEL_MOREPROPERTY_HC ( RC_PROPERTYPANEL_START + 6 ) +#define FT_PROPERTYPANEL_NOTSUPPORT_DESC ( RC_PROPERTYPANEL_START + 7 ) + +#define RID_PROPERTYPANEL_TEXTPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 8 ) +#define RID_PROPERTYPANEL_PARAGRAPHPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 9 ) +#define RID_PROPERTYPANEL_AREAPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 10 ) +#define RID_PROPERTYPANEL_TBLDESIGNPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 11 ) +#define RID_PROPERTYPANEL_LINEPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 12 ) +#define RID_PROPERTYPANEL_POSIZEPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 13 ) +#define RID_PROPERTYPANEL_GRAPHICPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 14 ) +#define RID_PROPERTYPANEL_CELLAPPEARPAGE_TITLEBAR ( RC_PROPERTYPANEL_START + 15 ) +#define RID_PROPERTYPANEL_SWPAGE_PAGE_TITLEBAR (RC_PROPERTYPANEL_START + 16) +#define RID_PROPERTYPANEL_SWOBJWRAP_PAGE_TITLEBAR (RC_PROPERTYPANEL_START + 17) +#define RID_PROPERTYPANEL_SCCELL_PAGE_TITLEBAR (RC_PROPERTYPANEL_START + 18) +#define RID_PROPERTYPANEL_SCALIGNMENT_PAGE_TITLEBAR (RC_PROPERTYPANEL_START + 19) +#define RID_PROPERTYPANEL_SD_PAGELAYOUT_TITLEBAR (RC_PROPERTYPANEL_START+20) +#define RID_PROPERTYPANEL_SD_PAGEPROPERTY_TITLEBAR (RC_PROPERTYPANEL_START+21) +#define RID_PROPERTYPANEL_SD_TABLEDESIGN_TITLEBAR (RC_PROPERTYPANEL_START+22) +#define RID_PROPERTYPANEL_NUMFORMAT_PAGE_TITLEBAR (RC_PROPERTYPANEL_START+23) + +#define RID_PANELDOCK_WINDOW ( RC_PROPERTYPANEL_START + 24 ) +#define STR_TITLE_DISCRIPTION ( RC_PROPERTYPANEL_START + 25 ) // + +#ifndef STD_MASKCOLOR +#define STD_MASKCOLOR Color { Red = 0xFF00; Green = 0x0000; Blue = 0xFF00; } +#endif + +//unit pixel +//panel common +#define PROPERTYPAGE_WIDTH 109 + +//about titlebar + +#define FI_EXPANSION_INDICATOR 1 +#define FT_TITLE 2 +#define STR_MOREPROPERTY_QUICKHELP 3 + +#define TITLEBAR_WIDTH PROPERTYPAGE_WIDTH +#define TITLEBAR_HEIGHT 13 + +#define TITLEBAR_MARGIN_HORIZONTAL 3 +#define TITLEBAR_CONTROL_SPACING_HORIZONTAL 3 + +#define FI_EXPANSION_INDICATOR_WIDTH 6 +#define FI_EXPANSION_INDICATOR_HEIGTH 6 +#define FI_EXPANSION_INDICATOR_X TITLEBAR_MARGIN_HORIZONTAL +#define FI_EXPANSION_INDICATOR_Y (TITLEBAR_HEIGHT - FI_EXPANSION_INDICATOR_HEIGTH)/2 + +#define FT_TITLE_WIDTH 85 +#define FT_TITLE_HEIGHT 10 +#define FT_TITLE_X FI_EXPANSION_INDICATOR_X + FI_EXPANSION_INDICATOR_WIDTH + TITLEBAR_CONTROL_SPACING_HORIZONTAL +#define FT_TITLE_Y (TITLEBAR_HEIGHT - FT_TITLE_HEIGHT)/2 + 1 + + +//about section page +#define SECTIONPAGE_MARGIN_VERTICAL 12 +#define SECTIONPAGE_MARGIN_VERTICAL_TOP 1 +#define SECTIONPAGE_MARGIN_VERTICAL_BOT 5 +#define SECTIONPAGE_MARGIN_HORIZONTAL 3 +#define CONTROL_SPACING_VERTICAL 5 +#define CONTROL_SPACING_HORIZONTAL 3 +#define TEXT_CONTROL_SPACING_VERTICAL 2 + +#define TEXT_HEIGHT 8 +#define CBOX_HEIGHT 12 +#define MBOX_HEIGHT 12 + +#define TBX_OUT_BORDER_OFFSET_X 2 +#define TBX_OUT_BORDER_OFFSET_Y 1 + +//for 16*16 pixel bmp +#define TOOLBOX_ITEM_HEIGHT 15 +#define TOOLBOX_ITEM_WIDTH 13 +#define TOOLBOX_ITEM_DD_WIDTH 19 + +//for 24*16 pixel bmp +#define TOOLBOX_24_16_ITEM_HEIGHT 15 +#define TOOLBOX_24_16_ITEM_DD_WIDTH 23 + +//for 24*24 pixel bmp +#define TOOLBOX_24_24_ITEM_HEIGHT 18 +#define TOOLBOX_24_24_ITEM_DD_WIDTH 24 + +//about popup panel +#define POPUPPANEL_MARGIN_VERTICAL 7 +#define POPUPPANEL_MARGIN_HORIZONTAL 7 + +//for 42*42 pixel bmp +#define TOOLBOX_42_42_ITEM_HEIGHT 30 +#define TOOLBOX_42_42_ITEM_DD_WIDTH 27 +#define TB_BORDER 2 + +#define POPUPPANEL_SEP_VERTICAL_1 10 +#define POPUPPANEL_SEP_VERTICAL_2 6 +#define POPUPPANEL_SEP_HEIGHT 1 + +#define POPUP_BORDER_WIDTH 2 +#define POPUP_BORDER_HEIGHT 3 +#define OFFSET_X 1 +#define OFFSET_Y 1 + +#define POPUP_TOP_GRADIENT_HEIGHT 4 +#define POPUP_BOT_GRADIENT_HEIGHT 6 + +#define POPUP_COLOR_PICKER_WIDTH 97 +#define POPUP_COLOR_PICKER_HEIGHT 114 +//new +#define POPUPPANEL_MARGIN_SMALL 2 +#define POPUPPANEL_MARGIN_LARGE 5 +#endif diff --git a/sfx2/inc/sfx2/templdlg.hxx b/sfx2/inc/sfx2/templdlg.hxx index 58388f82e4f0..e86e458302f1 100644 --- a/sfx2/inc/sfx2/templdlg.hxx +++ b/sfx2/inc/sfx2/templdlg.hxx @@ -25,7 +25,7 @@ #include "sal/config.h" #include "sfx2/dllapi.h" - +#include <vcl/ctrl.hxx> #include <rsc/rscsfx.hxx> #include <sfx2/dockwin.hxx> @@ -94,5 +94,29 @@ public: void SetParagraphFamily(); }; +// class SfxTemplatePanelControl ----------------------------------------- + +class SFX2_DLLPUBLIC SfxTemplatePanelControl : public DockingWindow +{ +public: + SfxTemplatePanelControl (SfxBindings* pBindings, Window* pParentWindow); + ~SfxTemplatePanelControl (void); + + virtual void Update(); + virtual void DataChanged( const DataChangedEvent& _rDCEvt ); + virtual void Resize(); + virtual SfxChildAlignment CheckAlignment( SfxChildAlignment, SfxChildAlignment ); + virtual void StateChanged( StateChangedType nStateChange ); + virtual void FreeResource (void); + + ISfxTemplateCommon* GetISfxTemplateCommon(); + void SetParagraphFamily(); + +private: + SfxTemplateDialog_Impl* pImpl; + SfxBindings* mpBindings; +}; + + #endif diff --git a/sfx2/sdi/frmslots.sdi b/sfx2/sdi/frmslots.sdi index eb2cc5435bcc..f5bae1a9ccb8 100644 --- a/sfx2/sdi/frmslots.sdi +++ b/sfx2/sdi/frmslots.sdi @@ -51,6 +51,11 @@ interface Window ExecMethod = ChildWindowExecute ; StateMethod = ChildWindowState ; ] + SID_SIDEBAR // status(final|play) + [ + ExecMethod = ChildWindowExecute ; + StateMethod = ChildWindowState ; + ] SID_SHOW_BROWSER // ole(no) api(final/play/rec) [ ExecMethod = ChildWindowExecute ; diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi index 57e834030da7..6a33bfb8b479 100644 --- a/sfx2/sdi/sfx.sdi +++ b/sfx2/sdi/sfx.sdi @@ -3983,6 +3983,32 @@ SfxBoolItem TaskPane SID_TASKPANE ] //-------------------------------------------------------------------------- +SfxBoolItem Sidebar SID_SIDEBAR +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Asynchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_VIEW; +] + +//-------------------------------------------------------------------------- SfxVoidItem RestoreEditingView SID_RESTORE_EDITING_VIEW [ diff --git a/sfx2/source/control/bindings.cxx b/sfx2/source/control/bindings.cxx index 11c9e997dcb9..c9b3304416a1 100644 --- a/sfx2/source/control/bindings.cxx +++ b/sfx2/source/control/bindings.cxx @@ -1035,7 +1035,7 @@ void SfxBindings::Register( SfxControllerItem& rItem ) void SfxBindings::Register_Impl( SfxControllerItem& rItem, sal_Bool bInternal ) { DBG_MEMTEST(); - DBG_ASSERT( nRegLevel > 0, "registration without EnterRegistrations" ); + // DBG_ASSERT( nRegLevel > 0, "registration without EnterRegistrations" ); DBG_ASSERT( !pImp->bInNextJob, "SfxBindings::Register while status-updating" ); // insert new cache if it does not already exist diff --git a/sfx2/source/control/shell.cxx b/sfx2/source/control/shell.cxx index eaa1d96c3044..55f26c107ba5 100644 --- a/sfx2/source/control/shell.cxx +++ b/sfx2/source/control/shell.cxx @@ -51,6 +51,7 @@ #include <sfx2/mnumgr.hxx> #include "statcach.hxx" #include <sfx2/msgpool.hxx> +#include <sfx2/sidebar/ContextChangeBroadcaster.hxx> //==================================================================== @@ -86,6 +87,8 @@ struct SfxShell_Impl: public SfxBroadcaster svtools::AsynchronLink* pUpdater; SfxVerbSlotArr_Impl aSlotArr; com::sun::star::uno::Sequence < com::sun::star::embed::VerbDescriptor > aVerbList; + ::sfx2::sidebar::ContextChangeBroadcaster maContextChangeBroadcaster; + SfxShell_Impl() : pExecuter( 0 ), pUpdater( 0 ) {} ~SfxShell_Impl() { delete pExecuter; delete pUpdater;} }; @@ -189,6 +192,8 @@ SfxShell::~SfxShell() { DBG_DTOR(SfxShell, 0); + + delete pImp; } @@ -764,6 +769,9 @@ void SfxShell::Activate */ { + SfxViewFrame* pViewFrame = GetFrame(); + if (pViewFrame != NULL) + pImp->maContextChangeBroadcaster.Activate(pViewFrame->GetFrame().GetFrameInterface()); } //-------------------------------------------------------------------- @@ -797,6 +805,9 @@ void SfxShell::Deactivate */ { + SfxViewFrame* pViewFrame = GetFrame(); + if (pViewFrame != NULL) + pImp->maContextChangeBroadcaster.Deactivate(pViewFrame->GetFrame().GetFrameInterface()); } void SfxShell::ParentActivate @@ -1275,6 +1286,11 @@ void SfxShell::ApplyItemSet( sal_uInt16, const SfxItemSet& ) { } +void SfxShell::SetContextName (const ::rtl::OUString& rsContextName) +{ + pImp->maContextChangeBroadcaster.Initialize(rsContextName); +} + void SfxShell::SetViewShell_Impl( SfxViewShell* pView ) { pImp->pViewSh = pView; diff --git a/sfx2/source/dialog/dialog.src b/sfx2/source/dialog/dialog.src index 242b235eb518..c635c9ed0251 100644 --- a/sfx2/source/dialog/dialog.src +++ b/sfx2/source/dialog/dialog.src @@ -103,6 +103,10 @@ String SID_TASKPANE { Text [ en-US ] = "Task Pane"; }; +String SID_SIDEBAR +{ + Text [ en-US ] = "Sidebar"; +}; ErrorBox MSG_ERROR_WRONG_CONFIRM { diff --git a/sfx2/source/dialog/dockwin.cxx b/sfx2/source/dialog/dockwin.cxx index 4cd6aa5f4953..1171521492d3 100644 --- a/sfx2/source/dialog/dockwin.cxx +++ b/sfx2/source/dialog/dockwin.cxx @@ -1859,11 +1859,12 @@ long SfxDockingWindow::Notify( NotifyEvent& rEvt ) { if ( rEvt.GetType() == EVENT_GETFOCUS ) { - pBindings->SetActiveFrame( pMgr->GetFrame() ); + if (pMgr != NULL) + pBindings->SetActiveFrame( pMgr->GetFrame() ); if ( pImp->pSplitWin ) pImp->pSplitWin->SetActiveWindow_Impl( this ); - else + else if (pMgr != NULL) pMgr->Activate_Impl(); Window* pWindow = rEvt.GetWindow(); @@ -1894,7 +1895,8 @@ long SfxDockingWindow::Notify( NotifyEvent& rEvt ) else if ( rEvt.GetType() == EVENT_LOSEFOCUS && !HasChildPathFocus() ) { pBindings->SetActiveFrame( NULL ); - pMgr->Deactivate_Impl(); + if (pMgr != NULL) + pMgr->Deactivate_Impl(); } return DockingWindow::Notify( rEvt ); diff --git a/sfx2/source/dialog/taskpane.cxx b/sfx2/source/dialog/taskpane.cxx index 3a5e54c7a8ca..46eb973b7f75 100644 --- a/sfx2/source/dialog/taskpane.cxx +++ b/sfx2/source/dialog/taskpane.cxx @@ -944,7 +944,7 @@ namespace sfx2 LINK( this, TaskPaneController_Impl, OnToolboxClicked ) ); m_rDockingWindow.SetEndDockingHdl( LINK( this, TaskPaneController_Impl, DockingChanged ) ); - impl_setLayout( LAYOUT_DRAWERS, true ); + impl_setLayout(LAYOUT_TABS_RIGHT, true); m_rTaskPane.GetPanelDeck().AddListener( *this ); diff --git a/sfx2/source/dialog/templdlg.cxx b/sfx2/source/dialog/templdlg.cxx index c962dce8d23f..f571daf786f2 100644 --- a/sfx2/source/dialog/templdlg.cxx +++ b/sfx2/source/dialog/templdlg.cxx @@ -125,7 +125,7 @@ SfxTemplateDialog::SfxTemplateDialog */ : SfxDockingWindow( pBind, pCW, pParent, SfxResId(DLG_STYLE_DESIGNER) ), - pImpl( new SfxTemplateDialog_Impl( pParent, pBind, this ) ) + pImpl( new SfxTemplateDialog_Impl( pBind, this ) ) { pImpl->updateNonFamilyImages(); @@ -405,6 +405,135 @@ void SfxTemplateDialogWrapper::SetParagraphFamily() static_cast< SfxTemplateDialog* >( GetWindow() )->SetParagraphFamily(); } + + +//===== SfxTemplatePanelControl =============================================== + +SfxTemplatePanelControl::SfxTemplatePanelControl ( + SfxBindings* pBindings, + Window* pParentWindow) + : DockingWindow(pParentWindow, SfxResId(DLG_STYLE_DESIGNER) ), + pImpl(new SfxTemplateDialog_Impl(pBindings, this)), + mpBindings(pBindings) +{ + OSL_ASSERT(mpBindings!=NULL); + + pImpl->updateNonFamilyImages(); +} + + + + +SfxTemplatePanelControl::~SfxTemplatePanelControl (void) +{ + delete pImpl; +} + + + + +ISfxTemplateCommon* SfxTemplatePanelControl::GetISfxTemplateCommon() +{ + return pImpl->GetISfxTemplateCommon(); +} + + + + +void SfxTemplatePanelControl::SetParagraphFamily() +{ + // first select the paragraph family + pImpl->FamilySelect( SFX_STYLE_FAMILY_PARA ); + // then select the automatic filter + pImpl->SetAutomaticFilter(); +} + + + + +void SfxTemplatePanelControl::DataChanged( const DataChangedEvent& _rDCEvt ) +{ + if ( ( DATACHANGED_SETTINGS == _rDCEvt.GetType() ) && + ( 0 != ( SETTINGS_STYLE & _rDCEvt.GetFlags() ) ) ) + { + pImpl->updateFamilyImages(); + pImpl->updateNonFamilyImages(); + } + + DockingWindow::DataChanged( _rDCEvt ); +} + + + + +void SfxTemplatePanelControl::Update() +{ + pImpl->Update(); +} + + + + +void SfxTemplatePanelControl::Resize() +{ + if(pImpl) + pImpl->Resize(); + DockingWindow::Resize(); +} + + +void SfxTemplatePanelControl::FreeResource (void) +{ + DockingWindow::FreeResource(); +} + + +SfxChildAlignment SfxTemplatePanelControl::CheckAlignment(SfxChildAlignment eActAlign,SfxChildAlignment eAlign) +{ + switch (eAlign) + { + case SFX_ALIGN_TOP: + case SFX_ALIGN_HIGHESTTOP: + case SFX_ALIGN_LOWESTTOP: + case SFX_ALIGN_BOTTOM: + case SFX_ALIGN_LOWESTBOTTOM: + case SFX_ALIGN_HIGHESTBOTTOM: + return eActAlign; + + case SFX_ALIGN_LEFT: + case SFX_ALIGN_RIGHT: + case SFX_ALIGN_FIRSTLEFT: + case SFX_ALIGN_LASTLEFT: + case SFX_ALIGN_FIRSTRIGHT: + case SFX_ALIGN_LASTRIGHT: + return eAlign; + + default: + return eAlign; + } +} + + +void SfxTemplatePanelControl::StateChanged( StateChangedType nStateChange ) +{ + if ( nStateChange == STATE_CHANGE_INITSHOW ) + { + SfxViewFrame *pFrame = mpBindings->GetDispatcher_Impl()->GetFrame(); + Window* pEditWin = pFrame->GetViewShell()->GetWindow(); + + Size aSize = pEditWin->GetSizePixel(); + Point aPoint = pEditWin->OutputToScreenPixel( pEditWin->GetPosPixel() ); + aPoint = GetParent()->ScreenToOutputPixel( aPoint ); + Size aWinSize = GetSizePixel(); + aPoint.X() += aSize.Width() - aWinSize.Width() - 20; + aPoint.Y() += aSize.Height() / 2 - aWinSize.Height() / 2; + // SetFloatingPos( aPoint ); + } + + DockingWindow::StateChanged( nStateChange ); +} + + //========================================================================= SV_DECL_PTRARR_DEL(ExpandedEntries, StringPtr,16,8) SV_IMPL_PTRARR(ExpandedEntries, StringPtr) @@ -740,7 +869,7 @@ SvLBoxEntry* FillBox_Impl(SvTreeListBox *pBox, // Konstruktor -SfxCommonTemplateDialog_Impl::SfxCommonTemplateDialog_Impl( SfxBindings* pB, SfxDockingWindow* pW ) : +SfxCommonTemplateDialog_Impl::SfxCommonTemplateDialog_Impl( SfxBindings* pB, Window* pW, bool ) : aISfxTemplateCommon ( this ), pBindings ( pB ), @@ -788,7 +917,7 @@ SfxCommonTemplateDialog_Impl::SfxCommonTemplateDialog_Impl( SfxBindings* pB, Sfx //------------------------------------------------------------------------- -SfxCommonTemplateDialog_Impl::SfxCommonTemplateDialog_Impl( SfxBindings* pB, ModalDialog* pW ) : +SfxCommonTemplateDialog_Impl::SfxCommonTemplateDialog_Impl( SfxBindings* pB, Window* pW ) : aISfxTemplateCommon ( this ), pBindings ( pB ), @@ -2321,10 +2450,11 @@ PopupMenu* SfxCommonTemplateDialog_Impl::CreateContextMenu( void ) // ------------------------------------------------------------------------ + SfxTemplateDialog_Impl::SfxTemplateDialog_Impl( - Window* /*pParent*/, SfxBindings* pB, SfxTemplateDialog* pDlgWindow ) : + SfxBindings* pB, SfxTemplateDialog* pDlgWindow ) : - SfxCommonTemplateDialog_Impl( pB, pDlgWindow ), + SfxCommonTemplateDialog_Impl( pB, pDlgWindow, true ), m_pFloat ( pDlgWindow ), m_bZoomIn ( sal_False ), @@ -2333,7 +2463,23 @@ SfxTemplateDialog_Impl::SfxTemplateDialog_Impl( { pDlgWindow->FreeResource(); + Initialize(); +} +SfxTemplateDialog_Impl::SfxTemplateDialog_Impl( + SfxBindings* pB, SfxTemplatePanelControl* pDlgWindow ) + : SfxCommonTemplateDialog_Impl( pB, pDlgWindow, true ), + m_pFloat ( pDlgWindow ), + m_bZoomIn ( sal_False ), + m_aActionTbL ( pDlgWindow, this ), + m_aActionTbR ( pDlgWindow, SfxResId( TB_ACTION ) ) +{ + pDlgWindow->FreeResource(); + Initialize(); +} + +void SfxTemplateDialog_Impl::Initialize (void) +{ // Read the filter stored in the configuration // This is already done in ReadResource(), invoked by Initialize() // and stored in nActFilter, but we can't rely on nActFilter's value @@ -2343,7 +2489,7 @@ SfxTemplateDialog_Impl::SfxTemplateDialog_Impl( const sal_uInt16 nConfigFilter = pCurObjShell ? static_cast< sal_uInt16 >( LoadFactoryStyleFilter( pCurObjShell ) ) : 0; - Initialize(); + SfxCommonTemplateDialog_Impl::Initialize(); m_aActionTbL.SetSelectHdl(LINK(this, SfxTemplateDialog_Impl, ToolBoxLSelect)); m_aActionTbR.SetSelectHdl(LINK(this, SfxTemplateDialog_Impl, ToolBoxRSelect)); @@ -2405,7 +2551,11 @@ void SfxTemplateDialog_Impl::updateFamilyImages() return; // let the families collection update the images - sal_Bool bIsHighContrast = m_pFloat->GetSettings().GetStyleSettings().GetHighContrastMode(); + sal_Bool bIsHighContrast; + if (m_pFloat != NULL) + bIsHighContrast = m_pFloat->GetSettings().GetStyleSettings().GetHighContrastMode(); + else + bIsHighContrast = false; pStyleFamilies->updateImages( *m_pStyleFamiliesId, bIsHighContrast ? BMP_COLOR_HIGHCONTRAST : BMP_COLOR_NORMAL ); // and set the new images on our toolbox @@ -2421,8 +2571,9 @@ void SfxTemplateDialog_Impl::updateFamilyImages() // ------------------------------------------------------------------------ void SfxTemplateDialog_Impl::updateNonFamilyImages() { - m_aActionTbR.SetImageList( ImageList( SfxResId( - m_pFloat->GetSettings().GetStyleSettings().GetHighContrastMode() ? IMG_LST_STYLE_DESIGNER_HC + if (m_pFloat != NULL) + m_aActionTbR.SetImageList( ImageList( SfxResId( + m_pFloat->GetSettings().GetStyleSettings().GetHighContrastMode() ? IMG_LST_STYLE_DESIGNER_HC : DLG_STYLE_DESIGNER ) ) ); } @@ -2477,7 +2628,8 @@ void SfxTemplateDialog_Impl::LoadedFamilies() // Die Groesse der Listboxen wird angepasst void SfxTemplateDialog_Impl::Resize() { - FloatingWindow *pF = m_pFloat->GetFloatingWindow(); + SfxDockingWindow* pDockingWindow = dynamic_cast<SfxDockingWindow*>(m_pFloat); + FloatingWindow *pF = pDockingWindow!=NULL ? pDockingWindow->GetFloatingWindow() : NULL; if ( pF ) { // if(pF->IsZoomedIn() && m_bZoomIn==sal_False) @@ -2489,6 +2641,8 @@ void SfxTemplateDialog_Impl::Resize() return; } + if (m_pFloat == NULL) + return; Size aDlgSize=m_pFloat->PixelToLogic(m_pFloat->GetOutputSizePixel()); Size aSizeATL=m_pFloat->PixelToLogic(m_aActionTbL.CalcWindowSizePixel()); Size aSizeATR=m_pFloat->PixelToLogic(m_aActionTbR.CalcWindowSizePixel()); @@ -2551,23 +2705,29 @@ void SfxTemplateDialog_Impl::Resize() Size SfxTemplateDialog_Impl::GetMinOutputSizePixel() { - Size aSizeATL=m_pFloat->PixelToLogic(m_aActionTbL.CalcWindowSizePixel()); - Size aSizeATR=m_pFloat->PixelToLogic(m_aActionTbR.CalcWindowSizePixel()); - Size aMinSize=Size( - aSizeATL.Width()+aSizeATR.Width()+ - 2*SFX_TEMPLDLG_HFRAME + SFX_TEMPLDLG_MIDHSPACE, - 4*aSizeATL.Height()+2*SFX_TEMPLDLG_MIDVSPACE); - return aMinSize; + if (m_pFloat != NULL) + { + Size aSizeATL=m_pFloat->PixelToLogic(m_aActionTbL.CalcWindowSizePixel()); + Size aSizeATR=m_pFloat->PixelToLogic(m_aActionTbR.CalcWindowSizePixel()); + Size aMinSize=Size( + aSizeATL.Width()+aSizeATR.Width()+ + 2*SFX_TEMPLDLG_HFRAME + SFX_TEMPLDLG_MIDHSPACE, + 4*aSizeATL.Height()+2*SFX_TEMPLDLG_MIDVSPACE); + return aMinSize; + } + else + return Size(0,0); } //------------------------------------------------------------------------- void SfxTemplateDialog_Impl::Command( const CommandEvent& rCEvt ) { - if(COMMAND_CONTEXTMENU == rCEvt.GetCommand()) - ExecuteContextMenu_Impl( rCEvt.GetMousePosPixel(), m_pFloat ); - else - m_pFloat->Command(rCEvt); + if (m_pFloat != NULL) + if(COMMAND_CONTEXTMENU == rCEvt.GetCommand()) + ExecuteContextMenu_Impl( rCEvt.GetMousePosPixel(), m_pFloat ); + else + m_pFloat->Command(rCEvt); } //------------------------------------------------------------------------- diff --git a/sfx2/source/inc/helpid.hrc b/sfx2/source/inc/helpid.hrc index 9745de74d82e..391b44687f84 100755 --- a/sfx2/source/inc/helpid.hrc +++ b/sfx2/source/inc/helpid.hrc @@ -332,6 +332,8 @@ #define HID_TASKPANE_VIEW_MENU "SFX2_HID_TASKPANE_VIEW_MENU" #define HID_DOCINFOSECURITY "SFX2_HID_DOCINFOSECURITY" +#define HID_SIDEBAR_WINDOW "SFX2_HID_SIDEBAR_WINDOW" + #endif // #ifndef _SFX_HELPID_HRC // ******************************************************************* EOF diff --git a/sfx2/source/inc/templdgi.hxx b/sfx2/source/inc/templdgi.hxx index b199c59f3351..dcfaef36c22d 100644 --- a/sfx2/source/inc/templdgi.hxx +++ b/sfx2/source/inc/templdgi.hxx @@ -241,8 +241,8 @@ protected: public: TYPEINFO(); - SfxCommonTemplateDialog_Impl( SfxBindings* pB, SfxDockingWindow* ); - SfxCommonTemplateDialog_Impl( SfxBindings* pB, ModalDialog* ); + SfxCommonTemplateDialog_Impl( SfxBindings* pB, Window*, bool ); + SfxCommonTemplateDialog_Impl( SfxBindings* pB, Window* ); ~SfxCommonTemplateDialog_Impl(); DECL_LINK( MenuSelectHdl, Menu * ); @@ -297,9 +297,10 @@ private: friend class SfxTemplateControllerItem; friend class SfxTemplateDialogWrapper; friend class DropToolBox_Impl; + friend class SfxTemplatePanelControl; - SfxTemplateDialog* m_pFloat; - sal_Bool m_bZoomIn; + Window* m_pFloat; + sal_Bool m_bZoomIn; DropToolBox_Impl m_aActionTbL; ToolBox m_aActionTbR; @@ -330,8 +331,11 @@ public: friend class SfxTemplateDialog; TYPEINFO(); - SfxTemplateDialog_Impl( Window* pParent, SfxBindings*, SfxTemplateDialog* pWindow ); + SfxTemplateDialog_Impl( SfxBindings*, SfxTemplateDialog* pDlgWindow ); + SfxTemplateDialog_Impl( SfxBindings*, SfxTemplatePanelControl* pDlgWindow ); ~SfxTemplateDialog_Impl(); + + void Initialize (void); }; // class SfxTemplateCatalog_Impl ----------------------------------------- diff --git a/sfx2/source/sidebar/AsynchronousCall.cxx b/sfx2/source/sidebar/AsynchronousCall.cxx new file mode 100755 index 000000000000..9704d989a731 --- /dev/null +++ b/sfx2/source/sidebar/AsynchronousCall.cxx @@ -0,0 +1,93 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "AsynchronousCall.hxx" + +#include <vcl/svapp.hxx> + + +namespace sfx2 { namespace sidebar { + +AsynchronousCall::AsynchronousCall (const Action& rAction) + : maAction(rAction), + mnCallId(0) +{ +} + + + + +AsynchronousCall::~AsynchronousCall (void) +{ + CancelRequest(); +} + + + + +void AsynchronousCall::RequestCall (const Action& rAction) +{ + CancelRequest(); + maAction = rAction; + RequestCall(); +} + + + + +void AsynchronousCall::RequestCall (void) +{ + if (mnCallId == 0) + { + Link aLink (LINK(this, AsynchronousCall, HandleUserCall)); + mnCallId = Application::PostUserEvent(aLink); + } +} + + + + +void AsynchronousCall::CancelRequest (void) +{ + if (mnCallId != 0) + { + Application::RemoveUserEvent(mnCallId); + mnCallId = -1; + } +} + + + + +IMPL_LINK(AsynchronousCall, HandleUserCall, void*, EMPTYARG ) +{ + mnCallId = 0; + if (maAction) + maAction(); + + return sal_True; +} + + +} } // end of namespace sfx2::sidebar + diff --git a/sfx2/source/sidebar/AsynchronousCall.hxx b/sfx2/source/sidebar/AsynchronousCall.hxx new file mode 100755 index 000000000000..f6366a061f89 --- /dev/null +++ b/sfx2/source/sidebar/AsynchronousCall.hxx @@ -0,0 +1,55 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_ASYNCHRONOUS_CALL_HXX +#define SFX_SIDEBAR_ASYNCHRONOUS_CALL_HXX + +#include <boost/function.hpp> +#include <tools/solar.h> +#include <tools/link.hxx> + +namespace sfx2 { namespace sidebar { + +/** A simple asynchronous call via Application::PostUserCall. +*/ +class AsynchronousCall +{ +public: + typedef ::boost::function<void(void)> Action; + + AsynchronousCall (const Action& rAction); + ~AsynchronousCall (void); + + void RequestCall (const Action& rAction); + void RequestCall (void); + void CancelRequest (void); + +private: + Action maAction; + sal_uLong mnCallId; + + DECL_LINK(HandleUserCall, void*); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Context.cxx b/sfx2/source/sidebar/Context.cxx new file mode 100644 index 000000000000..e2e02de8dc4a --- /dev/null +++ b/sfx2/source/sidebar/Context.cxx @@ -0,0 +1,122 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "Context.hxx" + +#define AnyApplicationName "any" +#define AnyContextName "any" + +namespace sfx2 { namespace sidebar { + +const sal_Int32 Context::NoMatch = 4; +const sal_Int32 Context::ApplicationWildcardMatch = 1; +const sal_Int32 Context::ContextWildcardMatch = 2; +const sal_Int32 Context::OptimalMatch = 0; // Neither application nor context name is "any". + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +Context::Context (void) + : msApplication(A2S(AnyApplicationName)), + msContext(A2S(AnyContextName)) +{ +} + + + + +Context::Context ( + const ::rtl::OUString& rsApplication, + const ::rtl::OUString& rsContext) + : msApplication(rsApplication), + msContext(rsContext) +{ +} + + + + +sal_Int32 Context::EvaluateMatch ( + const Context& rOther) const +{ + const bool bApplicationNameIsAny (rOther.msApplication.equalsAscii(AnyApplicationName)); + if (rOther.msApplication.equals(msApplication) || bApplicationNameIsAny) + { + // Application name matches. + const bool bContextNameIsAny (rOther.msContext.equalsAscii(AnyContextName)); + if (rOther.msContext.equals(msContext) || bContextNameIsAny) + { + // Context name matches. + return (bApplicationNameIsAny ? ApplicationWildcardMatch : 0) + + (bContextNameIsAny ? ContextWildcardMatch : 0); + } + } + return NoMatch; +} + + + + +sal_Int32 Context::EvaluateMatch (const ::std::vector<Context>& rOthers) const +{ + sal_Int32 nBestMatch (NoMatch); + + for (::std::vector<Context>::const_iterator + iContext(rOthers.begin()), + iEnd(rOthers.end()); + iContext!=iEnd; + ++iContext) + { + const sal_Int32 nMatch (EvaluateMatch(*iContext)); + if (nMatch < nBestMatch) + { + if (nMatch == OptimalMatch) + { + // We will find no better match so stop searching. + return OptimalMatch; + } + nBestMatch = nMatch; + } + } + return nBestMatch; +} + + + + +bool Context::operator== (const Context& rOther) const +{ + return msApplication.equals(rOther.msApplication) + && msContext.equals(rOther.msContext); +} + + + + +bool Context::operator!= (const Context& rOther) const +{ + return ( ! msApplication.equals(rOther.msApplication)) + || ( ! msContext.equals(rOther.msContext)); +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/Context.hxx b/sfx2/source/sidebar/Context.hxx new file mode 100644 index 000000000000..264f8b0e7e68 --- /dev/null +++ b/sfx2/source/sidebar/Context.hxx @@ -0,0 +1,69 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CONTEXT_HXX +#define SFX_SIDEBAR_CONTEXT_HXX + +#include "rtl/ustring.hxx" + +#include <vector> + +namespace sfx2 { namespace sidebar { + +class Context +{ +public: + ::rtl::OUString msApplication; + ::rtl::OUString msContext; + + Context (void); + Context ( + const ::rtl::OUString& rsApplication, + const ::rtl::OUString& rsContext); + + /** When two contexts are matched against each other then + application or context name may have the wildcard value 'any'. + In order to prefer matches without wildcards over matches with + wildcards we introduce a integer evaluation for matches. + */ + const static sal_Int32 NoMatch; + const static sal_Int32 OptimalMatch; + const static sal_Int32 ApplicationWildcardMatch; + const static sal_Int32 ContextWildcardMatch; + + /** Return the numeric value that describes how good the match + between two contexts is. + Smaller values represent better matches. + */ + sal_Int32 EvaluateMatch (const Context& rOther) const; + + /** Return the best match against the given list of contexts. + */ + sal_Int32 EvaluateMatch (const ::std::vector<Context>& rOthers) const; + + bool operator== (const Context& rOther) const; + bool operator!= (const Context& rOther) const; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/ContextChangeBroadcaster.cxx b/sfx2/source/sidebar/ContextChangeBroadcaster.cxx new file mode 100644 index 000000000000..dab1b3fa76fe --- /dev/null +++ b/sfx2/source/sidebar/ContextChangeBroadcaster.cxx @@ -0,0 +1,140 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sfx2/sidebar/ContextChangeBroadcaster.hxx" +#include "sfx2/sidebar/EnumContext.hxx" +#include <com/sun/star/ui/ContextChangeEventObject.hpp> +#include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp> +#include <com/sun/star/frame/XModuleManager.hpp> +#include <comphelper/componentcontext.hxx> +#include <comphelper/processfactory.hxx> + + +using ::rtl::OUString; +using namespace css; +using namespace cssu; + +namespace sfx2 { namespace sidebar { + + +ContextChangeBroadcaster::ContextChangeBroadcaster (void) + : msContextName(), + mbIsContextActive(false) +{ +} + + + +ContextChangeBroadcaster::~ContextChangeBroadcaster (void) +{ +} + + + + +void ContextChangeBroadcaster::Initialize (const ::rtl::OUString& rsContextName) +{ + OSL_ASSERT( ! mbIsContextActive); + + msContextName = rsContextName; +} + + + + +void ContextChangeBroadcaster::Activate (const cssu::Reference<css::frame::XFrame>& rxFrame) +{ + if (msContextName.getLength() > 0) + BroadcastContextChange(rxFrame, GetModuleName(rxFrame), msContextName); +} + + + + +void ContextChangeBroadcaster::Deactivate (const cssu::Reference<css::frame::XFrame>& rxFrame) +{ + if (msContextName.getLength() > 0) + { + BroadcastContextChange( + rxFrame, + GetModuleName(rxFrame), + EnumContext::GetContextName(EnumContext::Context_Default)); + } +} + + + + +void ContextChangeBroadcaster::BroadcastContextChange ( + const cssu::Reference<css::frame::XFrame>& rxFrame, + const ::rtl::OUString& rsModuleName, + const ::rtl::OUString& rsContextName) +{ + if (rsContextName.getLength() == 0) + return; + + if ( ! rxFrame.is() || ! rxFrame->getController().is()) + { + // Frame is (probably) being deleted. Broadcasting context + // changes is not necessary anymore. + return; + } + + const css::ui::ContextChangeEventObject aEvent( + rxFrame->getController(), + rsModuleName, + rsContextName); + + cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( + css::ui::ContextChangeEventMultiplexer::get( + ::comphelper::getProcessComponentContext())); + if (xMultiplexer.is()) + xMultiplexer->broadcastContextChangeEvent(aEvent, rxFrame->getController()); +} + + + + +OUString ContextChangeBroadcaster::GetModuleName (const cssu::Reference<css::frame::XFrame>& rxFrame) +{ + if ( ! rxFrame.is() || ! rxFrame->getController().is()) + return OUString(); + OUString sModuleName; + try + { + const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory()); + const Reference<frame::XModuleManager> xModuleManager ( + aContext.createComponent("com.sun.star.frame.ModuleManager" ), + UNO_QUERY_THROW ); + return xModuleManager->identify(rxFrame); + } + catch (const Exception&) + { + OSL_ENSURE(false, "can not determine module name"); + } + return OUString(); +} + + + +} } // end of namespace ::sd::sidebar diff --git a/sfx2/source/sidebar/ContextList.cxx b/sfx2/source/sidebar/ContextList.cxx new file mode 100644 index 000000000000..ebcda278d827 --- /dev/null +++ b/sfx2/source/sidebar/ContextList.cxx @@ -0,0 +1,111 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "ContextList.hxx" +#include "Context.hxx" + +using ::rtl::OUString; + +namespace sfx2 { namespace sidebar { + +namespace { + static const sal_Char* gsAny = "any"; +} + + + +ContextList::ContextList (void) + : maEntries() +{ +} + + + + +ContextList::~ContextList (void) +{ +} + + + + +const ContextList::Entry* ContextList::GetMatch (const Context& rContext) const +{ + const ::std::vector<Entry>::const_iterator iEntry = FindBestMatch(rContext); + if (iEntry != maEntries.end()) + return &*iEntry; + else + return NULL; +} + + + + +::std::vector<ContextList::Entry>::const_iterator ContextList::FindBestMatch (const Context& rContext) const +{ + sal_Int32 nBestMatch (Context::NoMatch); + ::std::vector<Entry>::const_iterator iBestMatch (maEntries.end()); + + for (::std::vector<Entry>::const_iterator + iEntry(maEntries.begin()), + iEnd(maEntries.end()); + iEntry!=iEnd; + ++iEntry) + { + const sal_Int32 nMatch (rContext.EvaluateMatch(iEntry->maContext)); + if (nMatch < nBestMatch) + { + nBestMatch = nMatch; + iBestMatch = iEntry; + } + if (nBestMatch == Context::OptimalMatch) + return iEntry; + } + + return iBestMatch; +} + + + + +void ContextList::AddContextDescription ( + const Context& rContext, + const bool bIsInitiallyVisible, + const OUString& rsMenuCommand) +{ + maEntries.push_back(Entry()); + maEntries.back().maContext = rContext; + maEntries.back().mbIsInitiallyVisible = bIsInitiallyVisible; + maEntries.back().msMenuCommand = rsMenuCommand; +} + + + + +bool ContextList::IsEmpty (void) +{ + return maEntries.empty(); +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/ContextList.hxx b/sfx2/source/sidebar/ContextList.hxx new file mode 100644 index 000000000000..3b98731a6900 --- /dev/null +++ b/sfx2/source/sidebar/ContextList.hxx @@ -0,0 +1,73 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CONTEXT_LIST_HXX +#define SFX_SIDEBAR_CONTEXT_LIST_HXX + +#include "Context.hxx" +#include <sal/types.h> +#include <rtl/ustring.hxx> + +#include <vector> + + +namespace sfx2 { namespace sidebar { + + +class ContextList +{ +public: + ContextList (void); + ~ContextList (void); + + class Entry + { + public: + Context maContext; + bool mbIsInitiallyVisible; + ::rtl::OUString msMenuCommand; + }; + + /** Return <TRUE/> when the given context matches any of the stored contexts. + */ + const Entry* GetMatch ( + const Context& rContext) const; + + void AddContextDescription ( + const Context& rContext, + const bool bIsInitiallyVisible, + const ::rtl::OUString& rsMenuCommand); + + /** Returns <TRUE/> when no call to AddContextDescription() was made before. + */ + bool IsEmpty (void); + + +private: + ::std::vector<Entry> maEntries; + + ::std::vector<Entry>::const_iterator FindBestMatch (const Context& rContext) const; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/ContextMatcher.cxx b/sfx2/source/sidebar/ContextMatcher.cxx new file mode 100644 index 000000000000..5afda42a1071 --- /dev/null +++ b/sfx2/source/sidebar/ContextMatcher.cxx @@ -0,0 +1,140 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "ContextMatcher.hxx" +#include "Context.hxx" + +using ::rtl::OUString; + +namespace sfx2 { namespace sidebar { + +namespace { + static const sal_Char* gsAny = "any"; +} + + + +ContextMatcher::ContextMatcher (void) + : maEntries() +{ +} + + + + +ContextMatcher::~ContextMatcher (void) +{ +} + + + + +sal_Int32 ContextMatcher::EvaluateMatch ( + const Context& rContext) const +{ + sal_Int32 nBestMatch (Context::NoMatch); + + for (::std::vector<Entry>::const_iterator + iEntry(maEntries.begin()), + iEnd(maEntries.end()); + iEntry!=iEnd; + ++iEntry) + { + const sal_Int32 nMatch (EvaluateMatch(rContext, *iEntry)); + if (nMatch < nBestMatch) + nBestMatch = nMatch; + if (nBestMatch == Context::OptimalMatch) + break; + } + + return nBestMatch; +} + + + + +sal_Int32 ContextMatcher::EvaluateMatch ( + const Context& rContext, + const Entry& rEntry) const +{ + sal_Int32 nApplicationMatch (Context::NoMatch); + if (rContext.msApplication.equals(rEntry.msApplicationName)) + nApplicationMatch = 0; + else if (rEntry.msApplicationName.equalsAscii(gsAny)) + nApplicationMatch = Context::ApplicationWildcardMatch; + else + return Context::NoMatch; + + sal_Int32 nBestContextMatch (Context::NoMatch); + for (::std::vector<OUString>::const_iterator + iContext(rEntry.maContextNames.begin()), + iEnd(rEntry.maContextNames.end()); + iContext!=iEnd; + ++iContext) + { + sal_Int32 nContextMatch (Context::NoMatch); + if (rContext.msContext.equals(*iContext)) + nContextMatch = 0; + else if (iContext->equalsAscii(gsAny)) + nContextMatch = Context::ContextWildcardMatch; + else + continue; + if (nContextMatch < nBestContextMatch) + nBestContextMatch = nContextMatch; + } + + if (rEntry.mbIsContextListNegated) + nBestContextMatch = Context::NoMatch - nBestContextMatch; + + return nApplicationMatch + nBestContextMatch; +} + + + + +void ContextMatcher::AddMatcher ( + const ::rtl::OUString& rsApplicationName, + const ::std::vector<rtl::OUString>& rContextNames, + const bool bIsContextListNegated) +{ + maEntries.push_back(Entry()); + maEntries.back().msApplicationName = rsApplicationName; + maEntries.back().maContextNames = rContextNames; + maEntries.back().mbIsContextListNegated = bIsContextListNegated; +} + + + + +void ContextMatcher::AddMatcher ( + const ::rtl::OUString& rsApplicationName, + const ::rtl::OUString& rsContextName) +{ + maEntries.push_back(Entry()); + maEntries.back().msApplicationName = rsApplicationName; + maEntries.back().maContextNames.push_back(rsContextName); + maEntries.back().mbIsContextListNegated = false; +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/ContextMatcher.hxx b/sfx2/source/sidebar/ContextMatcher.hxx new file mode 100644 index 000000000000..7daeb27b5e0a --- /dev/null +++ b/sfx2/source/sidebar/ContextMatcher.hxx @@ -0,0 +1,75 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CONTEXT_MATCHER_HXX +#define SFX_SIDEBAR_CONTEXT_MATCHER_HXX + +#include <sal/types.h> +#include <rtl/ustring.hxx> + +#include <vector> + + +namespace sfx2 { namespace sidebar { + +class Context; + + +/** Data read from the configuration for matching contexts. +*/ +class ContextMatcher +{ +public: + ContextMatcher (void); + ~ContextMatcher (void); + + sal_Int32 EvaluateMatch ( + const Context& rContext) const; + + void AddMatcher ( + const ::rtl::OUString& rsApplicationName, + const ::std::vector<rtl::OUString>& rContextNames, + const bool mbIsContextListNegated); + void AddMatcher ( + const ::rtl::OUString& rsApplicationName, + const ::rtl::OUString& rsContextName); + +private: + class Entry + { + public: + ::rtl::OUString msApplicationName; + ::std::vector<rtl::OUString> maContextNames; + bool mbIsContextListNegated; + }; + ::std::vector<Entry> maEntries; + + sal_Int32 EvaluateMatch ( + const Context& rContext, + const Entry& rEntry) const; + +}; +static bool IsMatchBetterThan (const sal_Int32 nMatchA, const sal_Int32 nMatchB); + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/ControlFactory.cxx b/sfx2/source/sidebar/ControlFactory.cxx new file mode 100644 index 000000000000..ccfdbaf17db0 --- /dev/null +++ b/sfx2/source/sidebar/ControlFactory.cxx @@ -0,0 +1,88 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sidebar/ControlFactory.hxx" + +#include "MenuButton.hxx" +#include "TabItem.hxx" +#include "SidebarToolBox.hxx" +#include "ToolBoxBackground.hxx" +#include "CustomImageRadioButton.hxx" +#include <vcl/toolbox.hxx> + + +namespace sfx2 { namespace sidebar { + + +CheckBox* ControlFactory::CreateMenuButton (Window* pParentWindow) +{ + return new MenuButton(pParentWindow); +} + + + + +ImageRadioButton* ControlFactory::CreateTabItem (Window* pParentWindow) +{ + return new TabItem(pParentWindow); +} + + + + +ToolBox* ControlFactory::CreateToolBox ( + Window* pParentWindow, + const ResId& rResId) +{ + SidebarToolBox* pToolBox = new SidebarToolBox(pParentWindow, rResId); + pToolBox->SetBorderWindow(pParentWindow); + + pToolBox->Invalidate(); + + return pToolBox; +} + + + + +Window* ControlFactory::CreateToolBoxBackground ( + Window* pParentWindow) +{ + ToolBoxBackground* pBorderWindow = new ToolBoxBackground(pParentWindow); + pBorderWindow->Show(); + return pBorderWindow; +} + + + + +ImageRadioButton* ControlFactory::CreateCustomImageRadionButton( + Window* pParentWindow, + const ResId& rResId ) +{ + return new CustomImageRadioButton( + pParentWindow, + rResId ); +} + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/ControllerItem.cxx b/sfx2/source/sidebar/ControllerItem.cxx new file mode 100644 index 000000000000..f3e023c7d9ba --- /dev/null +++ b/sfx2/source/sidebar/ControllerItem.cxx @@ -0,0 +1,58 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sidebar/ControllerItem.hxx" + +namespace sfx2 { namespace sidebar { + +ControllerItem::ControllerItem ( + const sal_uInt16 nId, + SfxBindings &rBindings, + ItemUpdateReceiverInterface& rItemUpdateReceiver) + : SfxControllerItem(nId, rBindings), + mrItemUpdateReceiver(rItemUpdateReceiver) +{ +} + + + + +ControllerItem::~ControllerItem (void) +{ +} + + + + +void ControllerItem::StateChanged ( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + mrItemUpdateReceiver.NotifyItemUpdate(nSID, eState, pState); +} + + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/CustomImageRadioButton.cxx b/sfx2/source/sidebar/CustomImageRadioButton.cxx new file mode 100644 index 000000000000..ed838eef516a --- /dev/null +++ b/sfx2/source/sidebar/CustomImageRadioButton.cxx @@ -0,0 +1,82 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "CustomImageRadioButton.hxx" + +#include "DrawHelper.hxx" +#include "Paint.hxx" +#include "Tools.hxx" + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + + +CustomImageRadioButton::CustomImageRadioButton ( + Window* pParentWindow, + const ResId& rResId ) + : ImageRadioButton( pParentWindow, rResId ) +{ + SetStyle( GetStyle() | WB_NOPOINTERFOCUS ); +} + + +CustomImageRadioButton::~CustomImageRadioButton (void) +{ +} + + +void CustomImageRadioButton::Paint (const Rectangle& rUpdateArea) +{ + Rectangle aPaintRect( Rectangle(Point(0,0), GetSizePixel() ) ); + SetMouseRect( aPaintRect ); + SetStateRect( aPaintRect ); + + const Theme::ThemeItem eBackground = + IsMouseOver() + ? Theme::Paint_TabItemBackgroundHighlight + : Theme::Paint_PanelBackground; + DrawHelper::DrawRoundedRectangle( + *this, + aPaintRect, + Theme::GetInteger(Theme::Int_ButtonCornerRadius), + IsChecked() || IsMouseOver() ? Theme::GetColor(Theme::Color_TabItemBorder) : Color(0xffffffff), + Theme::GetPaint( eBackground ) ); + + const Image aIcon (GetModeRadioImage(Theme::IsHighContrastMode() + ? BMP_COLOR_HIGHCONTRAST + : BMP_COLOR_NORMAL)); + const Size aIconSize (aIcon.GetSizePixel()); + const Point aIconLocation( + (GetSizePixel().Width() - aIconSize.Width())/2, + (GetSizePixel().Height() - aIconSize.Height())/2 ); + DrawImage( + aIconLocation, + aIcon, + IsEnabled() ? 0 : IMAGE_DRAW_DISABLE ); +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/CustomImageRadioButton.hxx b/sfx2/source/sidebar/CustomImageRadioButton.hxx new file mode 100644 index 000000000000..616e32c8660c --- /dev/null +++ b/sfx2/source/sidebar/CustomImageRadioButton.hxx @@ -0,0 +1,49 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CUSTOM_IMAGE_RADIO_BUTTON_HXX +#define SFX_SIDEBAR_CUSTOM_IMAGE_RADIO_BUTTON_HXX + +#include "vcl/button.hxx" + +#include "sfx2/sidebar/Theme.hxx" + +namespace sfx2 { namespace sidebar { + +/** A custom image radion button with more control over used colors for sidebar +*/ +class CustomImageRadioButton + : public ImageRadioButton +{ +public: + CustomImageRadioButton( + Window* pParentWindow, + const ResId& rResId ); + + virtual ~CustomImageRadioButton(void); + + virtual void Paint( const Rectangle& rUpdateArea ); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Deck.cxx b/sfx2/source/sidebar/Deck.cxx new file mode 100644 index 000000000000..e1fddbe0b503 --- /dev/null +++ b/sfx2/source/sidebar/Deck.cxx @@ -0,0 +1,389 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "Deck.hxx" +#include "DeckDescriptor.hxx" +#include "DeckLayouter.hxx" +#include "DrawHelper.hxx" +#include "DeckTitleBar.hxx" +#include "Paint.hxx" +#include "Panel.hxx" +#include "ToolBoxBackground.hxx" +#include "Tools.hxx" +#include "sfx2/sidebar/Theme.hxx" + +#include <vcl/dockwin.hxx> +#include <vcl/scrbar.hxx> +#include <tools/svborder.hxx> + +#include <boost/bind.hpp> + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + + +namespace { + static const sal_Int32 MinimalPanelHeight (25); +} + + +Deck::Deck ( + const DeckDescriptor& rDeckDescriptor, + Window* pParentWindow, + const ::boost::function<void(void)>& rCloserAction) + : Window(pParentWindow, 0), + msId(rDeckDescriptor.msId), + maIcon(), + msIconURL(rDeckDescriptor.msIconURL), + msHighContrastIconURL(rDeckDescriptor.msHighContrastIconURL), + maPanels(), + mpTitleBar(new DeckTitleBar(rDeckDescriptor.msTitle, this, rCloserAction)), + mpScrollClipWindow(new Window(this)), + mpScrollContainer(new ScrollContainerWindow(mpScrollClipWindow.get())), + mpFiller(new Window(this)), + mpVerticalScrollBar(new ScrollBar(this)) +{ + SetBackground(Wallpaper()); + + mpScrollClipWindow->SetBackground(Wallpaper()); + mpScrollClipWindow->Show(); + + mpScrollContainer->SetStyle(mpScrollContainer->GetStyle() | WB_DIALOGCONTROL); + mpScrollContainer->SetBackground(Wallpaper()); + mpScrollContainer->Show(); + + mpVerticalScrollBar->SetScrollHdl(LINK(this, Deck, HandleVerticalScrollBarChange)); + +#ifdef DEBUG + SetText(A2S("Deck")); + mpScrollClipWindow->SetText(A2S("ScrollClipWindow")); + mpFiller->SetText(A2S("Filler")); + mpVerticalScrollBar->SetText(A2S("VerticalScrollBar")); +#endif +} + + + + +Deck::~Deck (void) +{ + Dispose(); + + // We have to explicitly trigger the destruction of panels. + // Otherwise that is done by one of our base class destructors + // without updating maPanels. + maPanels.clear(); +} + + + + +void Deck::Dispose (void) +{ + SharedPanelContainer aPanels; + aPanels.swap(maPanels); + for (SharedPanelContainer::iterator + iPanel(aPanels.begin()), + iEnd(aPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + if (*iPanel) + { + (*iPanel)->Dispose(); + OSL_ASSERT(iPanel->unique()); + iPanel->reset(); + } + } + + mpTitleBar.reset(); + mpFiller.reset(); + mpVerticalScrollBar.reset(); +} + + + + +const ::rtl::OUString& Deck::GetId (void) const +{ + return msId; +} + + + + +DeckTitleBar* Deck::GetTitleBar (void) const +{ + return mpTitleBar.get(); +} + + + + +Rectangle Deck::GetContentArea (void) const +{ + const Size aWindowSize (GetSizePixel()); + const int nBorderSize (Theme::GetInteger(Theme::Int_DeckBorderSize)); + + return Rectangle( + Theme::GetInteger(Theme::Int_DeckLeftPadding) + nBorderSize, + Theme::GetInteger(Theme::Int_DeckTopPadding) + nBorderSize, + aWindowSize.Width() - 1 - Theme::GetInteger(Theme::Int_DeckRightPadding) - nBorderSize, + aWindowSize.Height() - 1 - Theme::GetInteger(Theme::Int_DeckBottomPadding) - nBorderSize); +} + + + + +::rtl::OUString Deck::GetIconURL (const bool bIsHighContrastModeActive) const +{ + if (bIsHighContrastModeActive) + return msHighContrastIconURL; + else + return msIconURL; +} + + + + +void Deck::Paint (const Rectangle& rUpdateArea) +{ + (void) rUpdateArea; + + const Size aWindowSize (GetSizePixel()); + const SvBorder aPadding ( + Theme::GetInteger(Theme::Int_DeckLeftPadding), + Theme::GetInteger(Theme::Int_DeckTopPadding), + Theme::GetInteger(Theme::Int_DeckRightPadding), + Theme::GetInteger(Theme::Int_DeckBottomPadding)); + + // Paint deck background outside the border. + Rectangle aBox( + 0, + 0, + aWindowSize.Width() - 1, + aWindowSize.Height() - 1); + DrawHelper::DrawBorder( + *this, + aBox, + aPadding, + Theme::GetPaint(Theme::Paint_DeckBackground), + Theme::GetPaint(Theme::Paint_DeckBackground)); + + // Paint the border. + const int nBorderSize (Theme::GetInteger(Theme::Int_DeckBorderSize)); + aBox.Left() += aPadding.Left(); + aBox.Top() += aPadding.Top(); + aBox.Right() -= aPadding.Right(); + aBox.Bottom() -= aPadding.Bottom(); + const sfx2::sidebar::Paint& rHorizontalBorderPaint (Theme::GetPaint(Theme::Paint_HorizontalBorder)); + DrawHelper::DrawBorder( + *this, + aBox, + SvBorder(nBorderSize, nBorderSize, nBorderSize, nBorderSize), + rHorizontalBorderPaint, + Theme::GetPaint(Theme::Paint_VerticalBorder)); +} + + + + +void Deck::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + RequestLayout(); +} + + + + +void Deck::SetPanels (const SharedPanelContainer& rPanels) +{ + maPanels = rPanels; + + RequestLayout(); +} + + + + +const SharedPanelContainer& Deck::GetPanels (void) const +{ + return maPanels; +} + + + + +void Deck::RequestLayout (void) +{ + // PrintWindowTree(); + + DeckLayouter::LayoutDeck( + GetContentArea(), + maPanels, + *GetTitleBar(), + *mpScrollClipWindow, + *mpScrollContainer, + *mpFiller, + *mpVerticalScrollBar); + + Invalidate(); +} + + + + +::Window* Deck::GetPanelParentWindow (void) +{ + return mpScrollContainer.get(); +} + + + + +const char* GetWindowClassification (const Window* pWindow) +{ + const String& rsName (pWindow->GetText()); + if (rsName.Len() > 0) + { + return ::rtl::OUStringToOString(rsName, RTL_TEXTENCODING_ASCII_US).getStr(); + } + else + { + static char msWindow[] = "window"; + return msWindow; + } +} + + +void Deck::PrintWindowSubTree (Window* pRoot, int nIndentation) +{ + static char* sIndentation = " "; + const Point aLocation (pRoot->GetPosPixel()); + const Size aSize (pRoot->GetSizePixel()); + const char* sClassification = GetWindowClassification(pRoot); + const char* sVisible = pRoot->IsVisible() ? "visible" : "hidden"; + OSL_TRACE("%s%x %s %s +%d+%d x%dx%d", + sIndentation+strlen(sIndentation)-nIndentation*4, + pRoot, + sClassification, + sVisible, + aLocation.X(),aLocation.Y(), + aSize.Width(),aSize.Height()); + + const sal_uInt16 nChildCount (pRoot->GetChildCount()); + for (sal_uInt16 nIndex=0; nIndex<nChildCount; ++nIndex) + PrintWindowSubTree(pRoot->GetChild(nIndex), nIndentation+1); +} + + + + +void Deck::PrintWindowTree (void) +{ + PrintWindowSubTree(this, 0); +} + + + + +void Deck::PrintWindowTree (const ::std::vector<Panel*>& rPanels) +{ + (void)rPanels; + + PrintWindowTree(); +} + + + + +IMPL_LINK(Deck, HandleVerticalScrollBarChange,void*, EMPTYARG) +{ + const sal_Int32 nYOffset (-mpVerticalScrollBar->GetThumbPos()); + mpScrollContainer->SetPosPixel( + Point( + mpScrollContainer->GetPosPixel().X(), + nYOffset)); + return sal_True; +} + + + + +//----- Deck::ScrollContainerWindow ------------------------------------------- + +Deck::ScrollContainerWindow::ScrollContainerWindow (Window* pParentWindow) + : Window(pParentWindow), + maSeparators() +{ +#ifdef DEBUG + SetText(A2S("ScrollContainerWindow")); +#endif +} + + + + +Deck::ScrollContainerWindow::~ScrollContainerWindow (void) +{ +} + + + + +void Deck::ScrollContainerWindow::Paint (const Rectangle& rUpdateArea) +{ + (void)rUpdateArea; + + // Paint the separators. + const sal_Int32 nSeparatorHeight (Theme::GetInteger(Theme::Int_DeckSeparatorHeight)); + const sal_Int32 nLeft (0); + const sal_Int32 nRight (GetSizePixel().Width()-1); + const sfx2::sidebar::Paint& rHorizontalBorderPaint (Theme::GetPaint(Theme::Paint_HorizontalBorder)); + for (::std::vector<sal_Int32>::const_iterator iY(maSeparators.begin()), iEnd(maSeparators.end()); + iY!=iEnd; + ++iY) + { + DrawHelper::DrawHorizontalLine( + *this, + nLeft, + nRight, + *iY, + nSeparatorHeight, + rHorizontalBorderPaint); + } +} + + + + +void Deck::ScrollContainerWindow::SetSeparators (const ::std::vector<sal_Int32>& rSeparators) +{ + maSeparators = rSeparators; +} + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/Deck.hxx b/sfx2/source/sidebar/Deck.hxx new file mode 100644 index 000000000000..a2dbff4f49f6 --- /dev/null +++ b/sfx2/source/sidebar/Deck.hxx @@ -0,0 +1,105 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_DECK_HXX +#define SFX_SIDEBAR_DECK_HXX + +#include "Panel.hxx" + +#include <vcl/window.hxx> +#include <vcl/image.hxx> +#include <com/sun/star/ui/LayoutSize.hpp> + +#include <boost/function.hpp> +#include <boost/scoped_ptr.hpp> + +class ScrollBar; + +namespace css = ::com::sun::star; + +namespace sfx2 { namespace sidebar { + +class DeckDescriptor; +class DeckTitleBar; + + +/** This is the parent window of the panels. + It displays the deck title. +*/ +class Deck + : public Window +{ +public: + Deck ( + const DeckDescriptor& rDeckDescriptor, + Window* pParentWindow, + const ::boost::function<void(void)>& rCloserAction); + virtual ~Deck (void); + + void Dispose (void); + + const ::rtl::OUString& GetId (void) const; + DeckTitleBar* GetTitleBar (void) const; + Rectangle GetContentArea (void) const; + ::rtl::OUString GetIconURL (const bool bIsHighContrastModeActive) const; + void SetPanels (const SharedPanelContainer& rPanels); + const SharedPanelContainer& GetPanels (void) const; + void RequestLayout (void); + ::Window* GetPanelParentWindow (void); + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void DataChanged (const DataChangedEvent& rEvent); + + void PrintWindowTree (void); + void PrintWindowTree (const ::std::vector<Panel*>& rPanels); + static void PrintWindowSubTree (Window* pRoot, int nIndentation); + + class ScrollContainerWindow : public Window + { + public: + ScrollContainerWindow (Window* pParentWindow); + virtual ~ScrollContainerWindow (void); + virtual void Paint (const Rectangle& rUpdateArea); + void SetSeparators (const ::std::vector<sal_Int32>& rSeparators); + private: + ::std::vector<sal_Int32> maSeparators; + }; + +private: + const ::rtl::OUString msTitle; + const ::rtl::OUString msId; + Image maIcon; + const ::rtl::OUString msIconURL; + const ::rtl::OUString msHighContrastIconURL; + SharedPanelContainer maPanels; + ::boost::scoped_ptr<DeckTitleBar> mpTitleBar; + ::boost::scoped_ptr<Window> mpScrollClipWindow; + ::boost::scoped_ptr<ScrollContainerWindow> mpScrollContainer; + ::boost::scoped_ptr<Window> mpFiller; + ::boost::scoped_ptr<ScrollBar> mpVerticalScrollBar; + + DECL_LINK(HandleVerticalScrollBarChange,void*); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/DeckConfiguration.cxx b/sfx2/source/sidebar/DeckConfiguration.cxx new file mode 100644 index 000000000000..1540d1b7f7d0 --- /dev/null +++ b/sfx2/source/sidebar/DeckConfiguration.cxx @@ -0,0 +1,55 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "DeckConfiguration.hxx" +#include "Deck.hxx" + + +namespace sfx2 { namespace sidebar { + +DeckConfiguration::DeckConfiguration (void) + : mpDeck(NULL), + maPanels() +{ +} + + + + +void DeckConfiguration::Dispose (void) +{ + if (mpDeck != NULL) + { + mpDeck->Dispose(); + + Deck* pDeck = mpDeck; + mpDeck = NULL; + OSL_TRACE("deleting deck window subtree"); + pDeck->PrintWindowTree(); + delete pDeck; + } +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/DeckConfiguration.hxx b/sfx2/source/sidebar/DeckConfiguration.hxx new file mode 100644 index 000000000000..11937a532df4 --- /dev/null +++ b/sfx2/source/sidebar/DeckConfiguration.hxx @@ -0,0 +1,49 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_DECK_CONFIGURATION_HXX +#define SFX_SIDEBAR_DECK_CONFIGURATION_HXX + +#include <vector> + +namespace sfx2 { namespace sidebar { + +class Deck; +class Panel; + + +class DeckConfiguration +{ +public: + Deck* mpDeck; + ::std::vector<Panel*> maPanels; + + DeckConfiguration (void); + + void Dispose (void); +}; + + + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/DeckDescriptor.cxx b/sfx2/source/sidebar/DeckDescriptor.cxx new file mode 100644 index 000000000000..87274021e1ab --- /dev/null +++ b/sfx2/source/sidebar/DeckDescriptor.cxx @@ -0,0 +1,62 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "DeckDescriptor.hxx" + +namespace sfx2 { namespace sidebar { + +DeckDescriptor::DeckDescriptor (void) + : msTitle(), + msId(), + msIconURL(), + msHighContrastIconURL(), + msHelpURL(), + msHelpText(), + maContextList(), + mnOrderIndex(10000) // Default value as defined in Sidebar.xcs +{ +} + + + + +DeckDescriptor::DeckDescriptor (const DeckDescriptor& rOther) + : msTitle(rOther.msTitle), + msId(rOther.msId), + msIconURL(rOther.msIconURL), + msHighContrastIconURL(rOther.msHighContrastIconURL), + msHelpURL(rOther.msHelpURL), + msHelpText(rOther.msHelpText), + maContextList(rOther.maContextList), + mnOrderIndex(rOther.mnOrderIndex) +{ +} + + + + +DeckDescriptor::~DeckDescriptor (void) +{ +} + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/DeckDescriptor.hxx b/sfx2/source/sidebar/DeckDescriptor.hxx new file mode 100644 index 000000000000..263c09cffd77 --- /dev/null +++ b/sfx2/source/sidebar/DeckDescriptor.hxx @@ -0,0 +1,53 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_DECK_DESCRIPTOR_HXX +#define SFX_SIDEBAR_DECK_DESCRIPTOR_HXX + +#include "sfx2/sidebar/EnumContext.hxx" +#include "ContextList.hxx" +#include <boost/shared_ptr.hpp> + + +namespace sfx2 { namespace sidebar { + +class DeckDescriptor +{ +public: + ::rtl::OUString msTitle; + ::rtl::OUString msId; + ::rtl::OUString msIconURL; + ::rtl::OUString msHighContrastIconURL; + ::rtl::OUString msHelpURL; + ::rtl::OUString msHelpText; + ContextList maContextList; + bool mbIsEnabled; + sal_Int32 mnOrderIndex; + + DeckDescriptor (void); + DeckDescriptor (const DeckDescriptor& rOther); + ~DeckDescriptor (void); +}; +typedef ::boost::shared_ptr<DeckDescriptor> SharedDeckDescriptor; + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/DeckLayouter.cxx b/sfx2/source/sidebar/DeckLayouter.cxx new file mode 100644 index 000000000000..5f68946fcc74 --- /dev/null +++ b/sfx2/source/sidebar/DeckLayouter.cxx @@ -0,0 +1,524 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "DeckLayouter.hxx" +#include "sfx2/sidebar/Theme.hxx" +#include "Panel.hxx" +#include "TitleBar.hxx" +#include "Deck.hxx" + +#include <vcl/window.hxx> +#include <vcl/scrbar.hxx> + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + + +namespace { + static const sal_Int32 MinimalPanelHeight (25); +} + +#define IterateLayoutItems(iterator_name,container) \ + for(::std::vector<LayoutItem>::iterator \ + iterator_name(container.begin()), \ + iEnd(container.end()); \ + iterator_name!=iEnd; \ + ++iterator_name) + + + +void DeckLayouter::LayoutDeck ( + const Rectangle aContentArea, + SharedPanelContainer& rPanels, + Window& rDeckTitleBar, + Window& rScrollClipWindow, + Window& rScrollContainer, + Window& rFiller, + ScrollBar& rVerticalScrollBar) +{ + if (aContentArea.GetWidth()<=0 || aContentArea.GetHeight()<=0) + return; + Rectangle aBox (PlaceDeckTitle(rDeckTitleBar, aContentArea)); + + if ( ! rPanels.empty()) + { + // Prepare the layout item container. + ::std::vector<LayoutItem> aLayoutItems; + aLayoutItems.resize(rPanels.size()); + for (sal_Int32 nIndex(0),nCount(rPanels.size()); nIndex<nCount; ++nIndex) + { + aLayoutItems[nIndex].mpPanel = rPanels[nIndex]; + aLayoutItems[nIndex].mnPanelIndex = nIndex; + } + aBox = LayoutPanels( + aBox, + aLayoutItems, + rScrollClipWindow, + rScrollContainer, + rVerticalScrollBar, + false); + } + UpdateFiller(rFiller, aBox); +} + + + + +Rectangle DeckLayouter::LayoutPanels ( + const Rectangle aContentArea, + ::std::vector<LayoutItem>& rLayoutItems, + Window& rScrollClipWindow, + Window& rScrollContainer, + ScrollBar& rVerticalScrollBar, + const bool bShowVerticalScrollBar) +{ + Rectangle aBox (PlaceVerticalScrollBar(rVerticalScrollBar, aContentArea, bShowVerticalScrollBar)); + + const sal_Int32 nWidth (aBox.GetWidth()); + const sal_Int32 nPanelTitleBarHeight (Theme::GetInteger(Theme::Int_PanelTitleBarHeight)); + + // Prepare the separators, horizontal lines above and below the + // panel titels. + const sal_Int32 nDeckSeparatorHeight (Theme::GetInteger(Theme::Int_DeckSeparatorHeight)); + + // Get the requested heights of the panels and the available + // height that is left when all panel titles and separators are + // taken into account. + sal_Int32 nAvailableHeight (aBox.GetHeight()); + GetRequestedSizes(rLayoutItems, nAvailableHeight, aBox); + const sal_Int32 nTotalDecorationHeight (aBox.GetHeight() - nAvailableHeight); + + // Analyze the requested heights. + // Determine the height that is available for panel content + // and count the different layouts. + sal_Int32 nTotalPreferredHeight (0); + sal_Int32 nTotalMinimumHeight (0); + IterateLayoutItems(iItem,rLayoutItems) + { + nTotalMinimumHeight += iItem->maLayoutSize.Minimum; + nTotalPreferredHeight += iItem->maLayoutSize.Preferred; + } + + if (nTotalMinimumHeight > nAvailableHeight + && ! bShowVerticalScrollBar) + { + // Not enough space, even when all panels are shrunk to their + // minimum height. + // Show a vertical scrollbar. + return LayoutPanels( + aContentArea, + rLayoutItems, + rScrollClipWindow, + rScrollContainer, + rVerticalScrollBar, + true); + } + + // We are now in one of three modes. + // - The preferred height fits into the available size: + // Use the preferred size, distribute the remaining height bei + // enlarging panels. + // - The total minimum height fits into the available size: + // Use the minimum size, distribute the remaining height bei + // enlarging panels. + // - The total minimum height does not fit into the available + // size: + // Use the unmodified preferred height for all panels. + + LayoutMode eMode (MinimumOrLarger); + if (bShowVerticalScrollBar) + eMode = Preferred; + else if (nTotalPreferredHeight <= nAvailableHeight) + eMode = PreferredOrLarger; + else + eMode = MinimumOrLarger; + + if (eMode != Preferred) + { + const sal_Int32 nTotalHeight (eMode==MinimumOrLarger ? nTotalMinimumHeight : nTotalPreferredHeight); + + DistributeHeights( + rLayoutItems, + nAvailableHeight-nTotalHeight, + aBox.GetHeight(), + eMode==MinimumOrLarger); + } + + // Set position and size of the mpScrollClipWindow to the available + // size. Its child, the mpScrollContainer, may have a bigger + // height. + rScrollClipWindow.SetPosSizePixel(aBox.Left(), aBox.Top(), aBox.GetWidth(), aBox.GetHeight()); + + const sal_Int32 nContentHeight ( + eMode==Preferred + ? nTotalPreferredHeight + nTotalDecorationHeight + : aBox.GetHeight()); + sal_Int32 nY = rVerticalScrollBar.GetThumbPos(); + if (nContentHeight-nY < aBox.GetHeight()) + nY = nContentHeight-aBox.GetHeight(); + if (nY < 0) + nY = 0; + rScrollContainer.SetPosSizePixel( + 0, + -nY, + nWidth, + nContentHeight); + + if (bShowVerticalScrollBar) + SetupVerticalScrollBar(rVerticalScrollBar, nContentHeight, aBox.GetHeight()); + + const sal_Int32 nUsedHeight (PlacePanels(rLayoutItems, nWidth, eMode, rScrollContainer)); + aBox.Top() += nUsedHeight; + return aBox; +} + + + + +sal_Int32 DeckLayouter::PlacePanels ( + ::std::vector<LayoutItem>& rLayoutItems, + const sal_Int32 nWidth, + const LayoutMode eMode, + Window& rScrollContainer) +{ + ::std::vector<sal_Int32> aSeparators; + const sal_Int32 nDeckSeparatorHeight (Theme::GetInteger(Theme::Int_DeckSeparatorHeight)); + const sal_Int32 nPanelTitleBarHeight (Theme::GetInteger(Theme::Int_PanelTitleBarHeight)); + sal_Int32 nY (0); + + // Assign heights and places. + IterateLayoutItems(iItem,rLayoutItems) + { + if (iItem->mpPanel == NULL) + continue; + + Panel& rPanel (*iItem->mpPanel); + + // Separator above the panel title bar. + aSeparators.push_back(nY); + nY += nDeckSeparatorHeight; + + // Place the title bar. + TitleBar* pTitleBar = rPanel.GetTitleBar(); + if (pTitleBar != NULL) + { + if (iItem->mbShowTitleBar) + { + pTitleBar->SetPosSizePixel(0, nY, nWidth, nPanelTitleBarHeight); + pTitleBar->Show(); + nY += nPanelTitleBarHeight; + } + else + { + pTitleBar->Hide(); + } + } + + if (rPanel.IsExpanded()) + { + rPanel.Show(); + + // Determine the height of the panel depending on layout + // mode and distributed heights. + sal_Int32 nPanelHeight (0); + switch(eMode) + { + case MinimumOrLarger: + nPanelHeight = iItem->maLayoutSize.Minimum + iItem->mnDistributedHeight; + break; + case PreferredOrLarger: + nPanelHeight = iItem->maLayoutSize.Preferred + iItem->mnDistributedHeight; + break; + case Preferred: + nPanelHeight = iItem->maLayoutSize.Preferred; + break; + default: + OSL_ASSERT(false); + break; + } + + // Place the panel. + rPanel.SetPosSizePixel(0, nY, nWidth, nPanelHeight); + + nY += nPanelHeight; + } + else + { + rPanel.Hide(); + + // Add a separator below the collapsed panel, if it is the + // last panel in the deck. + if (iItem == rLayoutItems.end()-1) + { + // Separator below the panel title bar. + aSeparators.push_back(nY); + nY += nDeckSeparatorHeight; + } + } + } + + Deck::ScrollContainerWindow* pScrollContainerWindow + = dynamic_cast<Deck::ScrollContainerWindow*>(&rScrollContainer); + if (pScrollContainerWindow != NULL) + pScrollContainerWindow->SetSeparators(aSeparators); + + return nY; +} + + + + +void DeckLayouter::GetRequestedSizes ( + ::std::vector<LayoutItem>& rLayoutItems, + sal_Int32& rAvailableHeight, + const Rectangle& rContentBox) +{ + rAvailableHeight = rContentBox.GetHeight(); + + const sal_Int32 nPanelTitleBarHeight (Theme::GetInteger(Theme::Int_PanelTitleBarHeight)); + const sal_Int32 nDeckSeparatorHeight (Theme::GetInteger(Theme::Int_DeckSeparatorHeight)); + + IterateLayoutItems(iItem,rLayoutItems) + { + ui::LayoutSize aLayoutSize (ui::LayoutSize(0,0,0)); + if (iItem->mpPanel != NULL) + { + if (rLayoutItems.size() == 1 + && iItem->mpPanel->IsTitleBarOptional()) + { + // There is only one panel and its title bar is + // optional => hide it. + rAvailableHeight -= nDeckSeparatorHeight; + iItem->mbShowTitleBar = false; + } + else + { + // Show the title bar and a separator above and below + // the title bar. + rAvailableHeight -= nPanelTitleBarHeight; + rAvailableHeight -= nDeckSeparatorHeight; + } + + if (iItem->mpPanel->IsExpanded()) + { + Reference<ui::XSidebarPanel> xPanel (iItem->mpPanel->GetPanelComponent()); + if (xPanel.is()) + aLayoutSize = xPanel->getHeightForWidth(rContentBox.GetWidth()); + else + aLayoutSize = ui::LayoutSize(MinimalPanelHeight, 0, -1); + } + } + iItem->maLayoutSize = aLayoutSize; + } +} + + + + +void DeckLayouter::DistributeHeights ( + ::std::vector<LayoutItem>& rLayoutItems, + const sal_Int32 nHeightToDistribute, + const sal_Int32 nContainerHeight, + const bool bMinimumHeightIsBase) +{ + if (nHeightToDistribute <= 0) + return; + + sal_Int32 nRemainingHeightToDistribute (nHeightToDistribute); + + // Compute the weights as difference between panel base height + // (either its minimum or preferred height) and the container height. + sal_Int32 nTotalWeight (0); + sal_Int32 nNoMaximumCount (0); + sal_Int32 nIndex (0); + IterateLayoutItems(iItem,rLayoutItems) + { + if (iItem->maLayoutSize.Maximum == 0) + continue; + if (iItem->maLayoutSize.Maximum < 0) + ++nNoMaximumCount; + + const sal_Int32 nBaseHeight ( + bMinimumHeightIsBase + ? iItem->maLayoutSize.Minimum + : iItem->maLayoutSize.Preferred); + if (nBaseHeight < nContainerHeight) + { + iItem->mnWeight = nContainerHeight - nBaseHeight; + nTotalWeight += iItem->mnWeight; + } + } + + if (nTotalWeight == 0) + return; + + // First pass of height distribution. + nIndex = 0; + IterateLayoutItems(iItem,rLayoutItems) + { + const sal_Int32 nBaseHeight ( + bMinimumHeightIsBase + ? iItem->maLayoutSize.Minimum + : iItem->maLayoutSize.Preferred); + sal_Int32 nDistributedHeight (iItem->mnWeight * nHeightToDistribute / nTotalWeight); + if (nBaseHeight+nDistributedHeight > iItem->maLayoutSize.Maximum + && iItem->maLayoutSize.Maximum >= 0) + { + nDistributedHeight = ::std::max<sal_Int32>(0,iItem->maLayoutSize.Maximum - nBaseHeight); + } + iItem->mnDistributedHeight = nDistributedHeight; + nRemainingHeightToDistribute -= nDistributedHeight; + } + + if (nRemainingHeightToDistribute == 0) + return; + OSL_ASSERT(nRemainingHeightToDistribute > 0); + + // It is possible that not all of the height could be distributed + // because of Maximum heights being smaller than expected. + // Distribute the remaining height between the panels that have no + // Maximum (ie Maximum==-1). + if (nNoMaximumCount == 0) + { + // There are no panels with unrestricted height. + return; + } + const sal_Int32 nAdditionalHeightPerPanel (nRemainingHeightToDistribute / nNoMaximumCount); + // Handle rounding error. + sal_Int32 nAdditionalHeightForFirstPanel (nRemainingHeightToDistribute + - nNoMaximumCount*nAdditionalHeightPerPanel); + nIndex = 0; + IterateLayoutItems(iItem,rLayoutItems) + { + if (iItem->maLayoutSize.Maximum < 0) + { + iItem->mnDistributedHeight += nAdditionalHeightPerPanel + nAdditionalHeightForFirstPanel; + nRemainingHeightToDistribute -= nAdditionalHeightPerPanel + nAdditionalHeightForFirstPanel; + } + } + + OSL_ASSERT(nRemainingHeightToDistribute==0); +} + + + + +Rectangle DeckLayouter::PlaceDeckTitle ( + Window& rDeckTitleBar, + const Rectangle& rAvailableSpace) +{ + if (static_cast<DockingWindow*>(rDeckTitleBar.GetParent()->GetParent())->IsFloatingMode()) + { + // When the side bar is undocked then the outer system window displays the deck title. + rDeckTitleBar.Hide(); + return rAvailableSpace; + } + else + { + const sal_Int32 nDeckTitleBarHeight (Theme::GetInteger(Theme::Int_DeckTitleBarHeight)); + rDeckTitleBar.SetPosSizePixel( + rAvailableSpace.Left(), + rAvailableSpace.Top(), + rAvailableSpace.GetWidth(), + nDeckTitleBarHeight); + rDeckTitleBar.Show(); + return Rectangle( + rAvailableSpace.Left(), + rAvailableSpace.Top() + nDeckTitleBarHeight, + rAvailableSpace.Right(), + rAvailableSpace.Bottom()); + } +} + + + + +Rectangle DeckLayouter::PlaceVerticalScrollBar ( + ScrollBar& rVerticalScrollBar, + const Rectangle& rAvailableSpace, + const bool bShowVerticalScrollBar) +{ + if (bShowVerticalScrollBar) + { + const sal_Int32 nScrollBarWidth (rVerticalScrollBar.GetSizePixel().Width()); + rVerticalScrollBar.SetPosSizePixel( + rAvailableSpace.Right() - nScrollBarWidth + 1, + rAvailableSpace.Top(), + nScrollBarWidth, + rAvailableSpace.GetHeight()); + rVerticalScrollBar.Show(); + return Rectangle( + rAvailableSpace.Left(), + rAvailableSpace.Top(), + rAvailableSpace.Right() - nScrollBarWidth, + rAvailableSpace.Bottom()); + } + else + { + rVerticalScrollBar.Hide(); + return rAvailableSpace; + } +} + + + + +void DeckLayouter::SetupVerticalScrollBar( + ScrollBar& rVerticalScrollBar, + const sal_Int32 nContentHeight, + const sal_Int32 nVisibleHeight) +{ + OSL_ASSERT(nContentHeight > nVisibleHeight); + + rVerticalScrollBar.SetRangeMin(0); + rVerticalScrollBar.SetRangeMax(nContentHeight-1); + rVerticalScrollBar.SetVisibleSize(nVisibleHeight); +} + + + + +void DeckLayouter::UpdateFiller ( + Window& rFiller, + const Rectangle& rBox) +{ + if (rBox.GetHeight() > 0) + { + // Show the filler. + rFiller.SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper()); + rFiller.SetPosSizePixel(rBox.TopLeft(), rBox.GetSize()); + rFiller.Show(); + } + else + { + // Hide the filler. + rFiller.Hide(); + } +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/DeckLayouter.hxx b/sfx2/source/sidebar/DeckLayouter.hxx new file mode 100644 index 000000000000..03790b23f932 --- /dev/null +++ b/sfx2/source/sidebar/DeckLayouter.hxx @@ -0,0 +1,123 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_DECK_LAYOUTER_HXX +#define SFX_SIDEBAR_DECK_LAYOUTER_HXX + +#include "Panel.hxx" + +#include <tools/gen.hxx> + +#include <com/sun/star/ui/LayoutSize.hpp> + +#include <vector> + +class ScrollBar; +class Window; + +namespace css = ::com::sun::star; + +namespace sfx2 { namespace sidebar { + +class Panel; + + +/** Helper class for layouting the direct and indirect children of a + deck like title bars, panels, and scroll bars. +*/ +class DeckLayouter +{ +public: + static void LayoutDeck ( + const Rectangle aContentArea, + SharedPanelContainer& rPanels, + Window& pDeckTitleBar, + Window& pScrollClipWindow, + Window& pScrollContainer, + Window& pFiller, + ScrollBar& pVerticalScrollBar); + +private: + // Do not use constructor or destructor. + DeckLayouter (void); + ~DeckLayouter (void); + + enum LayoutMode + { + MinimumOrLarger, + PreferredOrLarger, + Preferred + }; + class LayoutItem + { + public: + SharedPanel mpPanel; + css::ui::LayoutSize maLayoutSize; + sal_Int32 mnDistributedHeight; + sal_Int32 mnWeight; + sal_Int32 mnPanelIndex; + bool mbShowTitleBar; + + LayoutItem (void) + : mpPanel(),maLayoutSize(0,0,0),mnDistributedHeight(0),mnWeight(0),mnPanelIndex(0),mbShowTitleBar(true) + {} + }; + static Rectangle LayoutPanels ( + const Rectangle aContentArea, + ::std::vector<LayoutItem>& rLayoutItems, + Window& rScrollClipWindow, + Window& rScrollContainer, + ScrollBar& pVerticalScrollBar, + const bool bShowVerticalScrollBar); + static void GetRequestedSizes ( + ::std::vector<LayoutItem>& rLayoutItem, + sal_Int32& rAvailableHeight, + const Rectangle& rContentBox); + static void DistributeHeights ( + ::std::vector<LayoutItem>& rLayoutItems, + const sal_Int32 nHeightToDistribute, + const sal_Int32 nContainerHeight, + const bool bMinimumHeightIsBase); + static sal_Int32 PlacePanels ( + ::std::vector<LayoutItem>& rLayoutItems, + const sal_Int32 nWidth, + const LayoutMode eMode, + Window& rScrollContainer); + static Rectangle PlaceDeckTitle ( + Window& rTittleBar, + const Rectangle& rAvailableSpace); + static Rectangle PlaceVerticalScrollBar ( + ScrollBar& rVerticalScrollBar, + const Rectangle& rAvailableSpace, + const bool bShowVerticalScrollBar); + static void SetupVerticalScrollBar( + ScrollBar& rVerticalScrollBar, + const sal_Int32 nContentHeight, + const sal_Int32 nVisibleHeight); + static void UpdateFiller ( + Window& rFiller, + const Rectangle& rBox); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/DeckTitleBar.cxx b/sfx2/source/sidebar/DeckTitleBar.cxx new file mode 100644 index 000000000000..21a9f98e1c5b --- /dev/null +++ b/sfx2/source/sidebar/DeckTitleBar.cxx @@ -0,0 +1,148 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "DeckTitleBar.hxx" +#include "sfx2/sidebar/Theme.hxx" + +#include <vcl/image.hxx> + +#ifdef DEBUG +#include "Tools.hxx" +#endif + + +namespace sfx2 { namespace sidebar { + +static const sal_Int32 gaLeftGripPadding (3); +static const sal_Int32 gaRightGripPadding (3); + + +DeckTitleBar::DeckTitleBar ( + const ::rtl::OUString& rsTitle, + Window* pParentWindow, + const ::boost::function<void(void)>& rCloserAction) + : TitleBar(rsTitle, pParentWindow, GetBackgroundPaint()), + mnCloserItemIndex(1), + maCloserAction(rCloserAction), + mbIsCloserVisible(rCloserAction) +{ + OSL_ASSERT(pParentWindow != NULL); + + if (maCloserAction) + { + maToolBox.InsertItem( + mnCloserItemIndex, + Theme::GetImage(Theme::Image_Closer)); + } + +#ifdef DEBUG + SetText(A2S("DeckTitleBar")); +#endif +} + + + + +DeckTitleBar::~DeckTitleBar (void) +{ +} + + + + +void DeckTitleBar::SetCloserVisible (const bool bIsCloserVisible) +{ + if (mbIsCloserVisible != bIsCloserVisible) + { + mbIsCloserVisible = bIsCloserVisible; + + if (mbIsCloserVisible) + maToolBox.InsertItem( + mnCloserItemIndex, + Theme::GetImage(Theme::Image_Closer)); + else + maToolBox.RemoveItem( + maToolBox.GetItemPos(mnCloserItemIndex)); + } +} + + + + +Rectangle DeckTitleBar::GetTitleArea (const Rectangle& rTitleBarBox) +{ + Image aGripImage (Theme::GetImage(Theme::Image_Grip)); + return Rectangle( + aGripImage.GetSizePixel().Width() + gaLeftGripPadding + gaRightGripPadding, + rTitleBarBox.Top(), + rTitleBarBox.Right(), + rTitleBarBox.Bottom()); +} + + + + +void DeckTitleBar::PaintDecoration (const Rectangle& rTitleBarBox) +{ + (void)rTitleBarBox; +} + + + + +sidebar::Paint DeckTitleBar::GetBackgroundPaint (void) +{ + return Theme::GetPaint(Theme::Paint_DeckTitleBarBackground); +} + + + + +Color DeckTitleBar::GetTextColor (void) +{ + return Theme::GetColor(Theme::Color_DeckTitleFont); +} + + + + +void DeckTitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex) +{ + if (nItemIndex == mnCloserItemIndex) + if (maCloserAction) + maCloserAction(); +} + + + + +void DeckTitleBar::DataChanged (const DataChangedEvent& rEvent) +{ + maToolBox.SetItemImage( + mnCloserItemIndex, + Theme::GetImage(Theme::Image_Closer)); + TitleBar::DataChanged(rEvent); +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/DeckTitleBar.hxx b/sfx2/source/sidebar/DeckTitleBar.hxx new file mode 100644 index 000000000000..dfc5e9ccd6f1 --- /dev/null +++ b/sfx2/source/sidebar/DeckTitleBar.hxx @@ -0,0 +1,61 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_DECK_TITLE_BAR_HXX +#define SFX_SIDEBAR_DECK_TITLE_BAR_HXX + +#include "TitleBar.hxx" + +#include <boost/function.hpp> + + +namespace sfx2 { namespace sidebar { + +class DeckTitleBar + : public TitleBar +{ +public: + DeckTitleBar ( + const ::rtl::OUString& rsTitle, + Window* pParentWindow, + const ::boost::function<void(void)>& rCloserAction); + virtual ~DeckTitleBar (void); + + void SetCloserVisible (const bool bIsCloserVisible); + + virtual void DataChanged (const DataChangedEvent& rEvent); + +protected: + virtual Rectangle GetTitleArea (const Rectangle& rTitleBarBox); + virtual void PaintDecoration (const Rectangle& rTitleBarBox); + virtual sidebar::Paint GetBackgroundPaint (void); + virtual Color GetTextColor (void); + virtual void HandleToolBoxItemClick (const sal_uInt16 nItemIndex); + +private: + const sal_uInt16 mnCloserItemIndex; + const ::boost::function<void(void)> maCloserAction; + bool mbIsCloserVisible; +}; + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/DrawHelper.cxx b/sfx2/source/sidebar/DrawHelper.cxx new file mode 100644 index 000000000000..fcb201a86a43 --- /dev/null +++ b/sfx2/source/sidebar/DrawHelper.cxx @@ -0,0 +1,249 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "DrawHelper.hxx" +#include "Paint.hxx" + +#include <vcl/lineinfo.hxx> + + +namespace sfx2 { namespace sidebar { + +void DrawHelper::DrawBorder ( + OutputDevice& rDevice, + const Rectangle rBox, + const SvBorder aBorderSize, + const Paint& rHorizontalPaint, + const Paint& rVerticalPaint) +{ + // Draw top line. + DrawHorizontalLine( + rDevice, + rBox.Left(), + rBox.Right(), + rBox.Top(), + aBorderSize.Top(), + rHorizontalPaint); + // Draw bottom line. + DrawHorizontalLine( + rDevice, + rBox.Left()+aBorderSize.Left(), + rBox.Right(), + rBox.Bottom()-aBorderSize.Bottom()+1, + aBorderSize.Bottom(), + rHorizontalPaint); + // Draw left line. + DrawVerticalLine( + rDevice, + rBox.Top()+aBorderSize.Top(), + rBox.Bottom(), + rBox.Left(), + aBorderSize.Left(), + rVerticalPaint); + // Draw right line. + DrawVerticalLine( + rDevice, + rBox.Top()+aBorderSize.Top(), + rBox.Bottom()-aBorderSize.Bottom(), + rBox.Right()-aBorderSize.Right()+1, + aBorderSize.Right(), + rVerticalPaint); +} + + + + +void DrawHelper::DrawBevelBorder ( + OutputDevice& rDevice, + const Rectangle rBox, + const SvBorder aBorderSize, + const Paint& rTopLeftPaint, + const Paint& rCenterPaint, + const Paint& rBottomRightPaint) +{ + // Draw top line. + DrawHorizontalLine( + rDevice, + rBox.Left(), + rBox.Right() - aBorderSize.Right(), + rBox.Top(), + aBorderSize.Top(), + rTopLeftPaint); + // Draw bottom line. + DrawHorizontalLine( + rDevice, + rBox.Left()+aBorderSize.Left(), + rBox.Right(), + rBox.Bottom()-aBorderSize.Bottom()+1, + aBorderSize.Bottom(), + rBottomRightPaint); + // Draw left line. + DrawVerticalLine( + rDevice, + rBox.Top()+aBorderSize.Top(), + rBox.Bottom() - aBorderSize.Bottom(), + rBox.Left(), + aBorderSize.Left(), + rTopLeftPaint); + // Draw right line. + DrawVerticalLine( + rDevice, + rBox.Top()+aBorderSize.Top(), + rBox.Bottom()-aBorderSize.Bottom(), + rBox.Right()-aBorderSize.Right()+1, + aBorderSize.Right(), + rBottomRightPaint); + // Draw top right corner. + DrawVerticalLine( + rDevice, + rBox.Top(), + rBox.Top()+aBorderSize.Top()-1, + rBox.Right()-aBorderSize.Right()+1, + aBorderSize.Right(), + rCenterPaint); + // Draw bottom right corner. + DrawVerticalLine( + rDevice, + rBox.Bottom() - aBorderSize.Bottom()+1, + rBox.Bottom(), + rBox.Left(), + aBorderSize.Left(), + rCenterPaint); +} + + + + +void DrawHelper::DrawHorizontalLine( + OutputDevice& rDevice, + const sal_Int32 nLeft, + const sal_Int32 nRight, + const sal_Int32 nY, + const sal_Int32 nHeight, + const Paint& rPaint) +{ + switch (rPaint.GetType()) + { + case Paint::NoPaint: + default: + break; + + case Paint::ColorPaint: + { + const Color aColor (rPaint.GetColor()); + rDevice.SetLineColor(aColor); + for (sal_Int32 nYOffset=0; nYOffset<nHeight; ++nYOffset) + rDevice.DrawLine( + Point(nLeft,nY+nYOffset), + Point(nRight,nY+nYOffset)); + break; + } + case Paint::GradientPaint: + rDevice.DrawGradient( + Rectangle( + nLeft, + nY, + nRight, + nY+nHeight-1), + rPaint.GetGradient()); + break; + } +} + + + + +void DrawHelper::DrawVerticalLine( + OutputDevice& rDevice, + const sal_Int32 nTop, + const sal_Int32 nBottom, + const sal_Int32 nX, + const sal_Int32 nWidth, + const Paint& rPaint) +{ + switch (rPaint.GetType()) + { + case Paint::NoPaint: + default: + break; + + case Paint::ColorPaint: + { + const Color aColor (rPaint.GetColor()); + rDevice.SetLineColor(aColor); + for (sal_Int32 nXOffset=0; nXOffset<nWidth; ++nXOffset) + rDevice.DrawLine( + Point(nX+nXOffset, nTop), + Point(nX+nXOffset, nBottom)); + break; + } + case Paint::GradientPaint: + rDevice.DrawGradient( + Rectangle( + nX, + nTop, + nX+nWidth-1, + nBottom), + rPaint.GetGradient()); + break; + } +} + + + + +void DrawHelper::DrawRoundedRectangle ( + OutputDevice& rDevice, + const Rectangle& rBox, + const sal_Int32 nCornerRadius, + const Color& rBorderColor, + const Paint& rFillPaint) +{ + rDevice.SetLineColor(rBorderColor); + switch(rFillPaint.GetType()) + { + case Paint::NoPaint: + default: + rDevice.SetFillColor(); + rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius); + break; + + case Paint::ColorPaint: + rDevice.SetFillColor(rFillPaint.GetColor()); + rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius); + break; + + case Paint::GradientPaint: + rDevice.DrawGradient( + rBox, + rFillPaint.GetGradient()); + rDevice.SetFillColor(); + rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius); + break; + } +} + + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/DrawHelper.hxx b/sfx2/source/sidebar/DrawHelper.hxx new file mode 100644 index 000000000000..d321c2410b91 --- /dev/null +++ b/sfx2/source/sidebar/DrawHelper.hxx @@ -0,0 +1,78 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_DRAW_HELPER_HXX +#define SFX_SIDEBAR_DRAW_HELPER_HXX + +#include "vcl/window.hxx" + +#include <tools/svborder.hxx> + +class Color; + +namespace sfx2 { namespace sidebar { + +class Paint; + +/** Some convenience functions for painting backgrounds and borders. +*/ +class DrawHelper +{ +public: + static void DrawBorder ( + OutputDevice& rDevice, + const Rectangle rBox, + const SvBorder aBorderSize, + const Paint& rHorizontalPaint, + const Paint& rVerticalPaint); + static void DrawBevelBorder ( + OutputDevice& rDevice, + const Rectangle rBox, + const SvBorder aBorderSize, + const Paint& rTopLeftPaint, + const Paint& rCenterPaint, + const Paint& rBottomRightPaint); + static void DrawHorizontalLine( + OutputDevice& rDevice, + const sal_Int32 nLeft, + const sal_Int32 nRight, + const sal_Int32 nY, + const sal_Int32 nHeight, + const Paint& rPaint); + static void DrawVerticalLine( + OutputDevice& rDevice, + const sal_Int32 nTop, + const sal_Int32 nBottom, + const sal_Int32 nX, + const sal_Int32 nWidth, + const Paint& rPaint); + static void DrawRoundedRectangle ( + OutputDevice& rDevice, + const Rectangle& rBox, + const sal_Int32 nCornerRadius, + const Color& rBorderColor, + const Paint& rFillPaint); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/EnumContext.cxx b/sfx2/source/sidebar/EnumContext.cxx new file mode 100644 index 000000000000..8ee46dccff1b --- /dev/null +++ b/sfx2/source/sidebar/EnumContext.cxx @@ -0,0 +1,332 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sidebar/EnumContext.hxx" + +#include <map> + +namespace sfx2 { namespace sidebar { + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +namespace { + +typedef ::std::map<rtl::OUString,EnumContext::Application> ApplicationMap; +typedef ::std::vector<rtl::OUString> ApplicationVector; +static ApplicationMap maApplicationMap; +static ApplicationVector maApplicationVector; + +typedef ::std::map<rtl::OUString,EnumContext::Context> ContextMap; +typedef ::std::vector<rtl::OUString> ContextVector; +static ContextMap maContextMap; +static ContextVector maContextVector; + +} + +const sal_Int32 EnumContext::NoMatch = 4; +const sal_Int32 EnumContext::OptimalMatch = 0; // Neither application nor context name is "any". + + +EnumContext::EnumContext (void) + : meApplication(Application_None), + meContext(Context_Unknown) +{ +} + + + + +EnumContext::EnumContext ( + const Application eApplication, + const Context eContext) + : meApplication(eApplication), + meContext(eContext) +{ +} + + + + +EnumContext::EnumContext ( + const ::rtl::OUString& rsApplicationName, + const ::rtl::OUString& rsContextName) + : meApplication(GetApplicationEnum(rsApplicationName)), + meContext(GetContextEnum(rsContextName)) +{ +} + + + + +sal_Int32 EnumContext::GetCombinedContext (void) const +{ + return CombinedEnumContext(meApplication, meContext); +} + + + + +sal_Int32 EnumContext::GetCombinedContext_DI (void) const +{ + switch (meApplication) + { + case Application_Draw: + case Application_Impress: + return CombinedEnumContext(Application_DrawImpress, meContext); + + case Application_Writer: + case Application_WriterWeb: + return CombinedEnumContext(Application_WriterAndWeb, meContext); + + default: + return CombinedEnumContext(meApplication, meContext); + } +} + + + + +const ::rtl::OUString& EnumContext::GetApplicationName (void) const +{ + return EnumContext::GetApplicationName(meApplication); +} + + + + +const ::rtl::OUString& EnumContext::GetContextName (void) const +{ + return EnumContext::GetContextName(meContext); +} + + + + +bool EnumContext::operator== (const EnumContext aOther) +{ + return meApplication==aOther.meApplication + && meContext==aOther.meContext; +} + + + + +bool EnumContext::operator!= (const EnumContext aOther) +{ + return meApplication!=aOther.meApplication + || meContext!=aOther.meContext; +} + + + + +void EnumContext::AddEntry (const ::rtl::OUString& rsName, const Application eApplication) +{ + maApplicationMap[rsName] = eApplication; + OSL_ASSERT(eApplication<=__LastApplicationEnum); + if (maApplicationVector.size() <= size_t(eApplication)) + maApplicationVector.resize(eApplication+1); + maApplicationVector[eApplication]=rsName; +} + + + + +void EnumContext::ProvideApplicationContainers (void) +{ + if (maApplicationMap.empty()) + { + maApplicationVector.resize(static_cast<size_t>(EnumContext::__LastApplicationEnum)+1); + AddEntry(A2S("com.sun.star.text.TextDocument"), EnumContext::Application_Writer); + AddEntry(A2S("com.sun.star.text.WebDocument"), EnumContext::Application_WriterWeb); + AddEntry(A2S("com.sun.star.sheet.SpreadsheetDocument"), EnumContext::Application_Calc); + AddEntry(A2S("com.sun.star.drawing.DrawingDocument"), EnumContext::Application_Draw); + AddEntry(A2S("com.sun.star.presentation.PresentationDocument"), EnumContext::Application_Impress); + + AddEntry(A2S("any"), EnumContext::Application_Any); + AddEntry(A2S("none"), EnumContext::Application_None); + } +} + + + + +EnumContext::Application EnumContext::GetApplicationEnum (const ::rtl::OUString& rsApplicationName) +{ + ProvideApplicationContainers(); + + ApplicationMap::const_iterator iApplication( + maApplicationMap.find(rsApplicationName)); + if (iApplication != maApplicationMap.end()) + return iApplication->second; + else + return EnumContext::Application_None; +} + + + + +const ::rtl::OUString& EnumContext::GetApplicationName (const Application eApplication) +{ + ProvideApplicationContainers(); + + const sal_Int32 nIndex (eApplication); + if (nIndex<0 || nIndex>= __LastApplicationEnum) + return maApplicationVector[Application_None]; + else + return maApplicationVector[nIndex]; +} + + + + +void EnumContext::AddEntry (const ::rtl::OUString& rsName, const Context eApplication) +{ + maContextMap[rsName] = eApplication; + OSL_ASSERT(eApplication<=__LastContextEnum); + if (maContextVector.size() <= size_t(eApplication)) + maContextVector.resize(eApplication+1); + maContextVector[eApplication] = rsName; +} + + + + +void EnumContext::ProvideContextContainers (void) +{ + if (maContextMap.empty()) + { + maContextVector.resize(static_cast<size_t>(__LastContextEnum)+1); + AddEntry(A2S("any"), Context_Any); + AddEntry(A2S("default"), Context_Default); + AddEntry(A2S("empty"), Context_Empty); +#define AddContext(context) AddEntry(A2S(#context), Context_##context); + AddContext(3DObject); + AddContext(Annotation); + AddContext(Auditing); + AddContext(Cell); + AddContext(Chart); + AddContext(Chart); + AddContext(Draw); + AddContext(DrawPage); + AddContext(DrawText); + AddContext(EditCell); + AddContext(Form); + AddContext(Frame); + AddContext(Graphic); + AddContext(HandoutPage); + AddContext(MasterPage); + AddContext(Media); + AddContext(MultiObject); + AddContext(NotesPage); + AddContext(OLE); + AddContext(OutlineText); + AddContext(Pivot); + AddContext(SlidesorterPage); + AddContext(Table); + AddContext(Text); + AddContext(TextObject); +#undef AddContext + } +} + + + + +EnumContext::Context EnumContext::GetContextEnum (const ::rtl::OUString& rsContextName) +{ + ProvideContextContainers(); + + ContextMap::const_iterator iContext( + maContextMap.find(rsContextName)); + if (iContext != maContextMap.end()) + return iContext->second; + else + return EnumContext::Context_Unknown; +} + + + + +const ::rtl::OUString& EnumContext::GetContextName (const Context eContext) +{ + ProvideContextContainers(); + + const sal_Int32 nIndex (eContext); + if (nIndex<0 || nIndex>= __LastContextEnum) + return maContextVector[Context_Unknown]; + else + return maContextVector[nIndex]; +} + + + + +sal_Int32 EnumContext::EvaluateMatch ( + const EnumContext& rOther) const +{ + const bool bApplicationNameIsAny (rOther.meApplication == Application_Any); + if (rOther.meApplication==meApplication || bApplicationNameIsAny) + { + // Application name matches. + const bool bContextNameIsAny (rOther.meContext == Context_Any); + if (rOther.meContext==meContext || bContextNameIsAny) + { + // Context name matches. + return (bApplicationNameIsAny ? 1 : 0) + + (bContextNameIsAny ? 2 : 0); + } + } + return NoMatch; +} + + + + +sal_Int32 EnumContext::EvaluateMatch (const ::std::vector<EnumContext>& rOthers) const +{ + sal_Int32 nBestMatch (NoMatch); + + for (::std::vector<EnumContext>::const_iterator + iContext(rOthers.begin()), + iEnd(rOthers.end()); + iContext!=iEnd; + ++iContext) + { + const sal_Int32 nMatch (EvaluateMatch(*iContext)); + if (nMatch < nBestMatch) + { + if (nMatch == OptimalMatch) + { + // We will find no better match so stop searching. + return OptimalMatch; + } + nBestMatch = nMatch; + } + } + return nBestMatch; +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/FocusManager.cxx b/sfx2/source/sidebar/FocusManager.cxx new file mode 100644 index 000000000000..d751bc9c2d15 --- /dev/null +++ b/sfx2/source/sidebar/FocusManager.cxx @@ -0,0 +1,565 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "FocusManager.hxx" +#include "Panel.hxx" +#include "Tools.hxx" +#include "TitleBar.hxx" +#include <vcl/button.hxx> +#include <vcl/toolbox.hxx> +#include <toolkit/helper/vclunohelper.hxx> + + +namespace sfx2 { namespace sidebar { + +namespace +{ + enum PanelComponent + { + PC_TitleBar, + PC_ToolBox, + PC_Content, + PC_None + }; + + PanelComponent GetFocusedComponent (const Panel& rPanel) + { + if (rPanel.HasFocus()) + return PC_Content; + else if (rPanel.GetTitleBar() != NULL) + if (rPanel.GetTitleBar()->HasFocus()) + return PC_TitleBar; + else if (rPanel.GetTitleBar()->GetToolBox().HasFocus()) + return PC_ToolBox; + else + return PC_None; + } +} + + +FocusManager::FocusManager (void) + : maPanels(), + maButtons(), + mpTopLevelWindow(NULL) +{ +} + + + + +FocusManager::~FocusManager (void) +{ + Clear(); +} + + + + +void FocusManager::GrabFocus (void) +{ + if ( ! maPanels.empty()) + FocusPanel(0); +} + + + + +void FocusManager::Clear (void) +{ + ClearPanels(); + ClearButtons(); +} + + + +void FocusManager::ClearPanels (void) +{ + SetTopLevelWindow(NULL); + + ::std::vector<Panel*> aPanels; + aPanels.swap(maPanels); + for (::std::vector<Panel*>::iterator iPanel(aPanels.begin()),iEnd(aPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + UnregisterWindow(**iPanel); + if ((*iPanel)->GetTitleBar() != NULL) + { + UnregisterWindow(*(*iPanel)->GetTitleBar()); + UnregisterWindow((*iPanel)->GetTitleBar()->GetToolBox()); + } + } +} + + + + +void FocusManager::ClearButtons (void) +{ + ::std::vector<Window*> aButtons; + for (::std::vector<Window*>::iterator iButton(aButtons.begin()),iEnd(aButtons.end()); + iButton!=iEnd; + ++iButton) + { + UnregisterWindow(**iButton); + } +} + + + + +void FocusManager::SetPanels (const SharedPanelContainer& rPanels) +{ + ClearPanels(); + for(SharedPanelContainer::const_iterator iPanel(rPanels.begin()),iEnd(rPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + RegisterWindow(**iPanel); + if ((*iPanel)->GetTitleBar() != NULL) + { + RegisterWindow(*(*iPanel)->GetTitleBar()); + RegisterWindow((*iPanel)->GetTitleBar()->GetToolBox()); + } + maPanels.push_back(iPanel->get()); + } + + RegisterTopLevelListener(); +} + + + + +void FocusManager::SetButtons (const ::std::vector<Button*>& rButtons) +{ + ClearButtons(); + for (::std::vector<Button*>::const_iterator iButton(rButtons.begin()),iEnd(rButtons.end()); + iButton!=iEnd; + ++iButton) + { + RegisterWindow(**iButton); + maButtons.push_back(*iButton); + } +} + + + + +void FocusManager::RegisterWindow (Window& rWindow) +{ + rWindow.AddEventListener(LINK(this, FocusManager, WindowEventListener)); +} + + + + +void FocusManager::UnregisterWindow (Window& rWindow) +{ + rWindow.RemoveEventListener(LINK(this, FocusManager, WindowEventListener)); +} + + + + +void FocusManager::RegisterTopLevelListener (void) +{ + if (maPanels.empty()) + return; + Window* pWindow = maPanels.front(); + while (pWindow != NULL && pWindow->GetParent()!=NULL) + { + pWindow = pWindow->GetParent(); + } + SetTopLevelWindow(pWindow); +} + + + + +void FocusManager::SetTopLevelWindow (Window* pWindow) +{ + if (mpTopLevelWindow != pWindow) + { + if (mpTopLevelWindow != NULL) + { + UnregisterWindow(*mpTopLevelWindow); + mpTopLevelWindow->RemoveChildEventListener(LINK(this, FocusManager, WindowEventListener)); + } + mpTopLevelWindow = pWindow; + if (mpTopLevelWindow != NULL) + { + RegisterWindow(*mpTopLevelWindow); + mpTopLevelWindow->AddChildEventListener(LINK(this, FocusManager, WindowEventListener)); + } + } +} + + + + +sal_Int32 FocusManager::GetPanelIndex (const Window& rWindow) const +{ + for (sal_Int32 nIndex=0,nCount(maPanels.size()); nIndex<nCount; ++nIndex) + { + if (maPanels[nIndex] == &rWindow) + return nIndex; + TitleBar* pTitleBar = maPanels[nIndex]->GetTitleBar(); + if (pTitleBar == &rWindow) + return nIndex; + if (pTitleBar!=NULL && &pTitleBar->GetToolBox()==&rWindow) + return nIndex; + } + return -1; +} + + + + +sal_Int32 FocusManager::GetButtonIndex (const Window& rWindow) const +{ + for (sal_Int32 nIndex=0,nCount(maButtons.size()); nIndex<nCount; ++nIndex) + if (maButtons[nIndex] == &rWindow) + return nIndex; + return -1; +} + + + + +bool FocusManager::IsAnyPanelFocused (void) const +{ + for (::std::vector<Panel*>::const_iterator iPanel(maPanels.begin()),iEnd(maPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + if ((*iPanel)->HasFocus()) + return true; + else if ((*iPanel)->HasChildPathFocus()) + return true; + } + return false; +} + + + + +bool FocusManager::IsAnyButtonFocused (void) const +{ + for (::std::vector<Button*>::const_iterator iButton(maButtons.begin()),iEnd(maButtons.end()); + iButton!=iEnd; + ++iButton) + { + if ((*iButton)->HasFocus()) + return true; + } + return false; +} + + + + +void FocusManager::FocusPanel (const sal_Int32 nPanelIndex) +{ + Panel& rPanel (*maPanels[nPanelIndex]); + TitleBar* pTitleBar = rPanel.GetTitleBar(); + if (pTitleBar!=NULL && pTitleBar->IsVisible()) + { + rPanel.SetExpanded(true); + pTitleBar->GrabFocus(); + } + else + FocusPanelContent(nPanelIndex); +} + + + + +void FocusManager::FocusPanelContent (const sal_Int32 nPanelIndex) +{ + Window* pWindow = VCLUnoHelper::GetWindow(maPanels[nPanelIndex]->GetElementWindow()); + if (pWindow != NULL) + pWindow->GrabFocus(); +} + + + + +void FocusManager::FocusButton (const sal_Int32 nButtonIndex) +{ + maButtons[nButtonIndex]->GrabFocus(); + maButtons[nButtonIndex]->Invalidate(); +} + + + + +void FocusManager::ClickButton (const sal_Int32 nButtonIndex) +{ + maButtons[nButtonIndex]->Click(); + if (nButtonIndex > 0) + if ( ! maPanels.empty()) + FocusPanel(0); + maButtons[nButtonIndex]->GetParent()->Invalidate(); +} + + + + +void FocusManager::RemoveWindow (Window& rWindow) +{ + ::std::vector<Panel*>::iterator iPanel (::std::find(maPanels.begin(), maPanels.end(), &rWindow)); + if (iPanel != maPanels.end()) + { + UnregisterWindow(rWindow); + if ((*iPanel)->GetTitleBar() != NULL) + { + UnregisterWindow(*(*iPanel)->GetTitleBar()); + UnregisterWindow((*iPanel)->GetTitleBar()->GetToolBox()); + } + maPanels.erase(iPanel); + return; + } + + ::std::vector<Button*>::iterator iButton (::std::find(maButtons.begin(), maButtons.end(), &rWindow)); + if (iButton != maButtons.end()) + { + UnregisterWindow(rWindow); + maButtons.erase(iButton); + return; + } +} + + + + +bool FocusManager::MoveFocusInsidePanel ( + const sal_Int32 nPanelIndex, + const sal_Int32 nDirection) +{ + Panel& rPanel (*maPanels[nPanelIndex]); + switch (GetFocusedComponent(rPanel)) + { + case PC_TitleBar: + if (nDirection > 0) + rPanel.GetTitleBar()->GetToolBox().GrabFocus(); + else + FocusPanelContent(nPanelIndex); + return true; + + case PC_ToolBox: + if (nDirection > 0) + FocusPanelContent(nPanelIndex); + else + rPanel.GetTitleBar()->GrabFocus(); + return true; + + default: + return false; + } +} + + + + +long FocusManager::NotifyDockingWindowEvent (const KeyEvent& rKeyEvent) +{ + switch(rKeyEvent.GetKeyCode().GetCode()) + { + case KEY_F6: + if (rKeyEvent.GetKeyCode().IsShift()) + { + if (IsAnyButtonFocused()) + { + FocusPanel(0); + return 1; + } + } + else + { + if (IsAnyPanelFocused()) + { + FocusButton(0); + return 1; + } + } + break; + } + return 0; +} + + + + +void FocusManager::HandleKeyEvent ( + const KeyCode& rKeyCode, + const Window& rWindow) +{ + if (rKeyCode.GetModifier() != 0) + return; + + const sal_Int32 nPanelIndex (GetPanelIndex(rWindow)); + const bool bIsPanelTitleFocused (nPanelIndex>=0 && maPanels[nPanelIndex] != &rWindow); + const bool bIsPanelToolBoxFocused (nPanelIndex>=0 && maPanels[nPanelIndex] != &rWindow); + sal_Int32 nButtonIndex (nPanelIndex==-1 ? GetButtonIndex(rWindow) : -1); + + switch (rKeyCode.GetCode()) + { + case KEY_F6: + if (nPanelIndex >= 0) + FocusButton(0); + else + return; + break; + + case KEY_SPACE: + if (nPanelIndex >= 0) + { + if (GetFocusedComponent(*maPanels[nPanelIndex]) == PC_TitleBar) + { + // Toggle the expansion state. + maPanels[nPanelIndex]->SetExpanded( ! maPanels[nPanelIndex]->IsExpanded()); + } + } + else if (nButtonIndex >= 0) + { + // Activate the button. + ClickButton(nButtonIndex); + } + return; + + case KEY_RETURN: + if (nPanelIndex >= 0) + { + if (GetFocusedComponent(*maPanels[nPanelIndex]) == PC_TitleBar) + { + // Enter the panel. + FocusPanelContent(nPanelIndex); + } + } + else if (nButtonIndex >= 0) + { + // Activate the button. + ClickButton(nButtonIndex); + } + return; + + case KEY_TAB: + if (nPanelIndex >= 0) + { + if (rKeyCode.IsShift()) + MoveFocusInsidePanel(nPanelIndex, -1); + else + MoveFocusInsidePanel(nPanelIndex, +1); + } + break; + + case KEY_LEFT: + case KEY_UP: + // Go to previous element in focus ring. + if (nPanelIndex >= 0) + { + FocusPanel((nPanelIndex + maPanels.size() - 1) % maPanels.size()); + } + else if (nButtonIndex >= 0) + { + FocusButton((nButtonIndex + maButtons.size() - 1) % maButtons.size()); + } + break; + + case KEY_RIGHT: + case KEY_DOWN: + // Go to next element in focus ring. + if (nPanelIndex >= 0) + { + FocusPanel((nPanelIndex + 1) % maPanels.size()); + } + else if (nButtonIndex >= 0) + { + FocusButton((nButtonIndex + 1) % maButtons.size()); + } + break; + } +} + + + + +void FocusManager::HandleTopLevelEvent (VclWindowEvent& rEvent) +{ + switch (rEvent.GetId()) + { + case VCLEVENT_WINDOW_KEYINPUT: + { + KeyEvent* pKeyEvent = static_cast<KeyEvent*>(rEvent.GetData()); + switch (pKeyEvent->GetKeyCode().GetCode()) + { + case KEY_F6: + OSL_TRACE(""); + break; + } + } + } +} + + + + +IMPL_LINK(FocusManager, WindowEventListener, VclSimpleEvent*, pEvent) +{ + if (pEvent == NULL) + return 0; + + if ( ! pEvent->ISA(VclWindowEvent)) + return 0; + + VclWindowEvent* pWindowEvent = static_cast<VclWindowEvent*>(pEvent); + Window* pSource = pWindowEvent->GetWindow(); + if (pSource == NULL) + return 0; + + if (pSource == mpTopLevelWindow) + HandleTopLevelEvent(*pWindowEvent); + else + switch (pWindowEvent->GetId()) + { + case VCLEVENT_WINDOW_KEYINPUT: + { + KeyEvent* pKeyEvent = static_cast<KeyEvent*>(pWindowEvent->GetData()); + HandleKeyEvent(pKeyEvent->GetKeyCode(), *pSource); + return 1; + } + + case VCLEVENT_OBJECT_DYING: + RemoveWindow(*pSource); + return 1; + + case VCLEVENT_WINDOW_GETFOCUS: + case VCLEVENT_WINDOW_LOSEFOCUS: + pSource->Invalidate(); + } + return 0; +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/FocusManager.hxx b/sfx2/source/sidebar/FocusManager.hxx new file mode 100644 index 000000000000..1fb8898ab839 --- /dev/null +++ b/sfx2/source/sidebar/FocusManager.hxx @@ -0,0 +1,112 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_FOCUS_MANAGER_HXX +#define SFX_SIDEBAR_FOCUS_MANAGER_HXX + +#include "Panel.hxx" +#include <tools/link.hxx> + +class Button; +class KeyCode; +class VclSimpleEvent; + +namespace sfx2 { namespace sidebar { + +/** Concentrate all focus handling in this class. + There are two rings of windows that accept the input focus: panels + and tab bar buttons. + Arrow keys move the focus between them. Tab moves focus between rings. +*/ +class FocusManager +{ +public: + FocusManager (void); + ~FocusManager (void); + + /** Forget all panels and buttons. Remove all window listeners. + */ + void Clear (void); + + /** Transfer the focus into the sidebar tree of windows. This is + typically called from the SidebarChildWindow as result of + pressing the F6 key. + */ + void GrabFocus (void); + + /** Handle the key event that was sent to the docking window. + */ + long NotifyDockingWindowEvent (const KeyEvent& rKeyEvent); + + void SetPanels (const SharedPanelContainer& rPanels); + + void SetButtons (const ::std::vector<Button*>& rButtons); + +private: + ::std::vector<Panel*> maPanels; + ::std::vector<Button*> maButtons; + Window* mpTopLevelWindow; + + /** Listen for key events for panels and buttons. + */ + DECL_LINK(WindowEventListener, VclSimpleEvent*); + + void ClearPanels (void); + void ClearButtons (void); + + /** Let the focus manager listen for window events for the given + window. + */ + void RegisterWindow (Window& rWindow); + void UnregisterWindow (Window& rWindow); + void RegisterTopLevelListener (void); + + /** Remove the window from the panel or the button container. + */ + void RemoveWindow (Window& rWindow); + + sal_Int32 GetPanelIndex (const Window& rWindow) const; + sal_Int32 GetButtonIndex (const Window& rWindow) const; + bool IsAnyPanelFocused (void) const; + bool IsAnyButtonFocused (void) const; + + /** Set the focus to the title bar of the panel or, if the the + title bar is not visible, directly to the panel. + */ + void FocusPanel (const sal_Int32 nPanelIndex); + void FocusPanelContent (const sal_Int32 nPanelIndex); + void FocusButton (const sal_Int32 nButtonIndex); + void ClickButton (const sal_Int32 nButtonIndex); + bool MoveFocusInsidePanel ( + const sal_Int32 nPanelIndex, + const sal_Int32 nDirection); + + void HandleKeyEvent ( + const KeyCode& rKeyCode, + const Window& rWindow); + + void SetTopLevelWindow (Window* pWindow); + void HandleTopLevelEvent (VclWindowEvent& rEvent); +}; + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/MenuButton.cxx b/sfx2/source/sidebar/MenuButton.cxx new file mode 100644 index 000000000000..bb40c461cbd5 --- /dev/null +++ b/sfx2/source/sidebar/MenuButton.cxx @@ -0,0 +1,157 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "MenuButton.hxx" + +#include "DrawHelper.hxx" +#include "Paint.hxx" +#include "Tools.hxx" +#include "sfx2/sidebar/Theme.hxx" + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + + +MenuButton::MenuButton (Window* pParentWindow) + : CheckBox(pParentWindow), + mbIsLeftButtonDown(false), + mePaintType(PT_Theme) +{ +#ifdef DEBUG + SetText(A2S("MenuButton")); +#endif +} + + + + +MenuButton::~MenuButton (void) +{ +} + + + + +void MenuButton::Paint (const Rectangle& rUpdateArea) +{ + switch(mePaintType) + { + case PT_Theme: + default: + { + const bool bIsSelected (IsChecked()); + const bool bIsHighlighted (IsMouseOver() || HasFocus()); + DrawHelper::DrawRoundedRectangle( + *this, + Rectangle(Point(0,0), GetSizePixel()), + 3, + bIsHighlighted||bIsSelected + ? Theme::GetColor(Theme::Color_TabItemBorder) + : Color(0xffffffff), + bIsHighlighted + ? Theme::GetPaint(Theme::Paint_TabItemBackgroundHighlight) + : Theme::GetPaint(Theme::Paint_TabItemBackgroundNormal)); + + const Image aIcon (Button::GetModeImage(Theme::IsHighContrastMode() + ? BMP_COLOR_HIGHCONTRAST + : BMP_COLOR_NORMAL)); + const Size aIconSize (aIcon.GetSizePixel()); + const Point aIconLocation( + (GetSizePixel().Width() - aIconSize.Width())/2, + (GetSizePixel().Height() - aIconSize.Height())/2); + DrawImage( + aIconLocation, + aIcon); + break; + } + case PT_Native: + Button::Paint(rUpdateArea); + // DrawImage(maIconPosition, maIcon); + break; + } +} + + + + +void MenuButton::MouseMove (const MouseEvent& rEvent) +{ + if (rEvent.IsEnterWindow() || rEvent.IsLeaveWindow()) + Invalidate(); + CheckBox::MouseMove(rEvent); +} + + + + +void MenuButton::MouseButtonDown (const MouseEvent& rMouseEvent) +{ +#if 0 + Hide(); + CheckBox::MouseButtonDown(rMouseEvent); + Show(); +#else + if (rMouseEvent.IsLeft()) + { + mbIsLeftButtonDown = true; + CaptureMouse(); + Invalidate(); + } +#endif +} + + + + +void MenuButton::MouseButtonUp (const MouseEvent& rMouseEvent) +{ +#if 0 + Hide(); + CheckBox::MouseButtonUp(rMouseEvent); + Show(); +#else + if (IsMouseCaptured()) + ReleaseMouse(); + + if (rMouseEvent.IsLeft()) + { + if (mbIsLeftButtonDown) + { + Check(); + Click(); + GetParent()->Invalidate(); + } + } + if (mbIsLeftButtonDown) + { + mbIsLeftButtonDown = false; + Invalidate(); + } +#endif +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/MenuButton.hxx b/sfx2/source/sidebar/MenuButton.hxx new file mode 100644 index 000000000000..4fa07475237f --- /dev/null +++ b/sfx2/source/sidebar/MenuButton.hxx @@ -0,0 +1,56 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_MENU_BUTTON_HXX +#define SFX_SIDEBAR_MENU_BUTTON_HXX + +#include "vcl/button.hxx" + + +namespace sfx2 { namespace sidebar { + +class MenuButton + : public CheckBox +{ +public: + MenuButton (Window* pParentWindow); + virtual ~MenuButton (void); + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void MouseMove (const MouseEvent& rEvent); + virtual void MouseButtonDown (const MouseEvent& rMouseEvent); + virtual void MouseButtonUp (const MouseEvent& rMouseEvent); + +protected: + using CheckBox::FillLayoutData; + +private: + bool mbIsLeftButtonDown; + enum PaintType { + PT_Native, + PT_Theme + } mePaintType; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Paint.cxx b/sfx2/source/sidebar/Paint.cxx new file mode 100644 index 000000000000..1a3a9642a18e --- /dev/null +++ b/sfx2/source/sidebar/Paint.cxx @@ -0,0 +1,142 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "Paint.hxx" +#include "Tools.hxx" +#include <com/sun/star/awt/Gradient.hpp> + + +using namespace ::com::sun::star; + +namespace sfx2 { namespace sidebar { + +Paint::Paint (void) + : meType(NoPaint) +{ +} + + + + +Paint::Paint (const Color& rColor) + : meType(ColorPaint), + maValue(rColor) +{ +} + + + + +Paint::Paint (const Gradient& rGradient) + : meType(GradientPaint), + maValue(rGradient) +{ +} + + + + +Paint Paint::Create (const cssu::Any& rValue) +{ + ColorData aColor (0); + if (rValue >>= aColor) + return Paint(Color(aColor)); + + awt::Gradient aAwtGradient; + if (rValue >>= aAwtGradient) + return Paint(Tools::AwtToVclGradient(aAwtGradient)); + + return Paint(); +} + + + + +void Paint::Set (const Paint& rOther) +{ + meType = rOther.meType; + maValue = rOther.maValue; +} + + + + +Paint::Type Paint::GetType (void) const +{ + return meType; +} + + + + +const Color& Paint::GetColor (void) const +{ + if (meType != ColorPaint) + { + assert(meType==ColorPaint); + static Color aErrorColor; + return aErrorColor; + } + else + return ::boost::get<Color>(maValue); +} + + + + +const Gradient& Paint::GetGradient (void) const +{ + if (meType != GradientPaint) + { + assert(meType==GradientPaint); + static Gradient aErrorGradient; + return aErrorGradient; + } + else + return ::boost::get<Gradient>(maValue); +} + + + + +Wallpaper Paint::GetWallpaper (void) const +{ + switch (meType) + { + case Paint::NoPaint: + default: + return Wallpaper(); + break; + + case Paint::ColorPaint: + return Wallpaper(GetColor()); + break; + + case Paint::GradientPaint: + return Wallpaper(GetGradient()); + break; + } +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/Paint.hxx b/sfx2/source/sidebar/Paint.hxx new file mode 100644 index 000000000000..7ed18896a6cb --- /dev/null +++ b/sfx2/source/sidebar/Paint.hxx @@ -0,0 +1,84 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_PAINT_HXX +#define SFX_SIDEBAR_PAINT_HXX + +#include <tools/color.hxx> +#include <vcl/gradient.hxx> +#include <vcl/wall.hxx> +#include <com/sun/star/awt/Gradient.hpp> + +#include <boost/variant.hpp> + +namespace cssu = ::com::sun::star::uno; + +namespace sfx2 { namespace sidebar { + +/** Abstraction of different ways to fill outlines. + Can be + - none (empty: outline is not filled) + - singular color + - gradient +*/ +class Paint +{ +public: + enum Type + { + NoPaint, + ColorPaint, + GradientPaint + }; + + // Create a Paint object for an Any that may contain a color, a + // awt::Gradient, or nothing. + static Paint Create (const cssu::Any& rValue); + + // Create paint with type NoPaint. + explicit Paint (void); + + // Create a Paint object for the given color. + explicit Paint (const Color& rColor); + + // Create a Paint object for the given gradient. + explicit Paint (const Gradient& rGradient); + + void Set (const ::sfx2::sidebar::Paint& rOther); + + Type GetType (void) const; + const Color& GetColor (void) const; + const Gradient& GetGradient (void) const; + + Wallpaper GetWallpaper (void) const; + +private: + Type meType; + ::boost::variant< + Color, + Gradient + > maValue; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Panel.cxx b/sfx2/source/sidebar/Panel.cxx new file mode 100644 index 000000000000..6192a8971ce6 --- /dev/null +++ b/sfx2/source/sidebar/Panel.cxx @@ -0,0 +1,272 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "Panel.hxx" +#include "PanelTitleBar.hxx" +#include "PanelDescriptor.hxx" +#include "sfx2/sidebar/Theme.hxx" +#include "Paint.hxx" + +#ifdef DEBUG +#include "Tools.hxx" +#include "Deck.hxx" +#endif + +#include <tools/svborder.hxx> +#include <toolkit/helper/vclunohelper.hxx> + +#include <com/sun/star/awt/XWindowPeer.hpp> +#include <com/sun/star/awt/PosSize.hpp> +#include <com/sun/star/ui/XToolPanel.hpp> + +#include <boost/bind.hpp> + + +using namespace css; +using namespace cssu; + + + +namespace sfx2 { namespace sidebar { + +Panel::Panel ( + const PanelDescriptor& rPanelDescriptor, + Window* pParentWindow, + const ::boost::function<void(void)>& rDeckLayoutTrigger, + const ::boost::function<void(void)>& rShowMenuFunctor) + : Window(pParentWindow), + msPanelId(rPanelDescriptor.msId), + mpTitleBar(new PanelTitleBar( + rPanelDescriptor.msTitle, + pParentWindow, + this, + rShowMenuFunctor)), + mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional), + mxElement(), + mxPanelComponent(), + mbIsExpanded(true), + maDeckLayoutTrigger(rDeckLayoutTrigger) +{ + SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper()); + +#ifdef DEBUG + OSL_TRACE("creating Panel at %x", this); + SetText(A2S("Panel")); +#endif +} + + + + +Panel::~Panel (void) +{ + OSL_TRACE("destroying Panel at %x", this); + Dispose(); +} + + + + +void Panel::Dispose (void) +{ + mxPanelComponent = NULL; + + if (mxElement.is()) + { + Reference<lang::XComponent> xComponent (mxElement->getRealInterface(), UNO_QUERY); + if (xComponent.is()) + xComponent->dispose(); + } + + { + Reference<lang::XComponent> xComponent (mxElement, UNO_QUERY); + mxElement = NULL; + if (xComponent.is()) + xComponent->dispose(); + } + + { + Reference<lang::XComponent> xComponent (GetElementWindow(), UNO_QUERY); + if (xComponent.is()) + xComponent->dispose(); + } + + mpTitleBar.reset(); +} + + + + +TitleBar* Panel::GetTitleBar (void) const +{ + return mpTitleBar.get(); +} + + + + +bool Panel::IsTitleBarOptional (void) const +{ + return mbIsTitleBarOptional; +} + + + + +void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement) +{ + mxElement = rxElement; + if (mxElement.is()) + { + mxPanelComponent.set(mxElement->getRealInterface(), UNO_QUERY); + } +} + + + + +void Panel::SetExpanded (const bool bIsExpanded) +{ + if (mbIsExpanded != bIsExpanded) + { + mbIsExpanded = bIsExpanded; + maDeckLayoutTrigger(); + } +} + + + + +bool Panel::IsExpanded (void) const +{ + return mbIsExpanded; +} + + + + +bool Panel::HasIdPredicate (const ::rtl::OUString& rsId) const +{ + if (this == NULL) + return false; + else + return msPanelId.equals(rsId); +} + + + + +const ::rtl::OUString& Panel::GetId (void) const +{ + return msPanelId; +} + + + + +void Panel::Paint (const Rectangle& rUpdateArea) +{ + Window::Paint(rUpdateArea); +} + + + + +void Panel::Resize (void) +{ + Window::Resize(); + + // Forward new size to window of XUIElement. + Reference<awt::XWindow> xElementWindow (GetElementWindow()); + if (xElementWindow.is()) + { + const Size aSize (GetSizePixel()); + xElementWindow->setPosSize( + 0, + 0, + aSize.Width(), + aSize.Height(), + awt::PosSize::POSSIZE); + } +} + + + + +void Panel::Activate (void) +{ + Window::Activate(); +} + + + + + +void Panel::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper()); +} + + + + +Reference<ui::XSidebarPanel> Panel::GetPanelComponent (void) const +{ + return mxPanelComponent; +} + + + + +void Panel::PrintWindowTree (void) +{ +#ifdef DEBUG + Window* pElementWindow = VCLUnoHelper::GetWindow(GetElementWindow()); + if (pElementWindow != NULL) + { + OSL_TRACE("panel parent is %x", pElementWindow->GetParent()); + Deck::PrintWindowSubTree(pElementWindow, 2); + } + else + OSL_TRACE(" panel is empty"); +#endif +} + + + + +Reference<awt::XWindow> Panel::GetElementWindow (void) +{ + if (mxElement.is()) + { + Reference<ui::XToolPanel> xToolPanel(mxElement->getRealInterface(), UNO_QUERY); + if (xToolPanel.is()) + return xToolPanel->getWindow(); + } + + return NULL; +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/Panel.hxx b/sfx2/source/sidebar/Panel.hxx new file mode 100644 index 000000000000..6666315499e0 --- /dev/null +++ b/sfx2/source/sidebar/Panel.hxx @@ -0,0 +1,90 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_PANEL_HXX +#define SFX_SIDEBAR_PANEL_HXX + +#include <vcl/window.hxx> + +#include <com/sun/star/ui/XUIElement.hpp> +#include <com/sun/star/ui/XSidebarPanel.hpp> + +#include <boost/function.hpp> +#include <boost/scoped_ptr.hpp> +#include <boost/shared_ptr.hpp> +#include <vector> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace sfx2 { namespace sidebar { + +class PanelDescriptor; +class TitleBar; + + +class Panel + : public Window +{ +public: + Panel ( + const PanelDescriptor& rPanelDescriptor, + Window* pParentWindow, + const ::boost::function<void(void)>& rDeckLayoutTrigger, + const ::boost::function<void(void)>& rShowMenuFunctor); + virtual ~Panel (void); + + void Dispose (void); + + TitleBar* GetTitleBar (void) const; + bool IsTitleBarOptional (void) const; + void SetUIElement (const cssu::Reference<css::ui::XUIElement>& rxElement); + cssu::Reference<css::ui::XSidebarPanel> GetPanelComponent (void) const; + cssu::Reference<css::awt::XWindow> GetElementWindow (void); + void SetExpanded (const bool bIsExpanded); + bool IsExpanded (void) const; + bool HasIdPredicate (const ::rtl::OUString& rsId) const; + const ::rtl::OUString& GetId (void) const; + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void Resize (void); + virtual void DataChanged (const DataChangedEvent& rEvent); + virtual void Activate (void); + + void PrintWindowTree (void); + +private: + const ::rtl::OUString msPanelId; + ::boost::scoped_ptr<TitleBar> mpTitleBar; + const bool mbIsTitleBarOptional; + cssu::Reference<css::ui::XUIElement> mxElement; + cssu::Reference<css::ui::XSidebarPanel> mxPanelComponent; + bool mbIsExpanded; + const ::boost::function<void(void)> maDeckLayoutTrigger; + Rectangle maBoundingBox; +}; +typedef ::boost::shared_ptr<Panel> SharedPanel; +typedef ::std::vector<SharedPanel> SharedPanelContainer; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/PanelDescriptor.cxx b/sfx2/source/sidebar/PanelDescriptor.cxx new file mode 100644 index 000000000000..20a460f194d2 --- /dev/null +++ b/sfx2/source/sidebar/PanelDescriptor.cxx @@ -0,0 +1,65 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "PanelDescriptor.hxx" + + +namespace sfx2 { namespace sidebar { + +PanelDescriptor::PanelDescriptor (void) + : msTitle(), + mbIsTitleBarOptional(false), + msId(), + msDeckId(), + msHelpURL(), + maContextList(), + msImplementationURL(), + mnOrderIndex(10000), // Default value as defined in Sidebar.xcs + mbWantsCanvas(false) +{ +} + + + + +PanelDescriptor::PanelDescriptor (const PanelDescriptor& rOther) + : msTitle(rOther.msTitle), + mbIsTitleBarOptional(rOther.mbIsTitleBarOptional), + msId(rOther.msId), + msDeckId(rOther.msDeckId), + msHelpURL(rOther.msHelpURL), + maContextList(rOther.maContextList), + msImplementationURL(rOther.msImplementationURL), + mnOrderIndex(rOther.mnOrderIndex), + mbWantsCanvas(rOther.mbWantsCanvas) +{ +} + + + +PanelDescriptor::~PanelDescriptor (void) +{ +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/PanelDescriptor.hxx b/sfx2/source/sidebar/PanelDescriptor.hxx new file mode 100644 index 000000000000..9b54e994556d --- /dev/null +++ b/sfx2/source/sidebar/PanelDescriptor.hxx @@ -0,0 +1,53 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_PANEL_DESCRIPTOR_HXX +#define SFX_SIDEBAR_PANEL_DESCRIPTOR_HXX + +#include "sfx2/sidebar/EnumContext.hxx" +#include "ContextList.hxx" +#include <boost/shared_ptr.hpp> + + +namespace sfx2 { namespace sidebar { + +class PanelDescriptor +{ +public: + ::rtl::OUString msTitle; + sal_Bool mbIsTitleBarOptional; + ::rtl::OUString msId; + ::rtl::OUString msDeckId; + ::rtl::OUString msHelpURL; + ContextList maContextList; + ::rtl::OUString msImplementationURL; + sal_Int32 mnOrderIndex; + bool mbWantsCanvas; + + PanelDescriptor (void); + PanelDescriptor (const PanelDescriptor& rPanelDescriptor); + ~PanelDescriptor (void); +}; +typedef ::boost::shared_ptr<PanelDescriptor> SharedPanelDescriptor; + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/PanelTitleBar.cxx b/sfx2/source/sidebar/PanelTitleBar.cxx new file mode 100644 index 000000000000..5028a93eb267 --- /dev/null +++ b/sfx2/source/sidebar/PanelTitleBar.cxx @@ -0,0 +1,190 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "PanelTitleBar.hxx" + +#include "Paint.hxx" +#include "Panel.hxx" +#include "sfx2/sidebar/Theme.hxx" + +#include <tools/svborder.hxx> +#include <vcl/gradient.hxx> +#include <vcl/image.hxx> + +#ifdef DEBUG +#include "Tools.hxx" +#endif + + +namespace sfx2 { namespace sidebar { + + +static const sal_Int32 gaLeftIconPadding (5); +static const sal_Int32 gaRightIconPadding (5); + + +PanelTitleBar::PanelTitleBar ( + const ::rtl::OUString& rsTitle, + Window* pParentWindow, + Panel* pPanel, + const ::boost::function<void(void)>& rMenuAction) + : TitleBar(rsTitle, pParentWindow, GetBackgroundPaint()), + mbIsLeftButtonDown(false), + mpPanel(pPanel), + mnMenuItemIndex(1), + maMenuAction(rMenuAction) +{ + OSL_ASSERT(mpPanel != NULL); + + if (maMenuAction) + { + maToolBox.InsertItem( + mnMenuItemIndex, + Theme::GetImage(Theme::Image_PanelMenu)); + maToolBox.SetOutStyle(TOOLBOX_STYLE_FLAT); + } + +#ifdef DEBUG + SetText(A2S("PanelTitleBar")); +#endif +} + + + + +PanelTitleBar::~PanelTitleBar (void) +{ +} + + + + +Rectangle PanelTitleBar::GetTitleArea (const Rectangle& rTitleBarBox) +{ + if (mpPanel != NULL) + { + Image aImage (mpPanel->IsExpanded() + ? Theme::GetImage(Theme::Image_Expand) + : Theme::GetImage(Theme::Image_Collapse)); + return Rectangle( + aImage.GetSizePixel().Width() + gaLeftIconPadding + gaRightIconPadding, + rTitleBarBox.Top(), + rTitleBarBox.Right(), + rTitleBarBox.Bottom()); + } + else + return rTitleBarBox; +} + + + + +void PanelTitleBar::PaintDecoration (const Rectangle& rTitleBarBox) +{ + (void)rTitleBarBox; + + if (mpPanel != NULL) + { + Image aImage (mpPanel->IsExpanded() + ? Theme::GetImage(Theme::Image_Collapse) + : Theme::GetImage(Theme::Image_Expand)); + const Point aTopLeft ( + gaLeftIconPadding, + (GetSizePixel().Height()-aImage.GetSizePixel().Height())/2); + DrawImage(aTopLeft, aImage); + } +} + + + + +Paint PanelTitleBar::GetBackgroundPaint (void) +{ + return Theme::GetPaint(Theme::Paint_PanelTitleBarBackground); +} + + + + +Color PanelTitleBar::GetTextColor (void) +{ + return Theme::GetColor(Theme::Color_PanelTitleFont); +} + + + + +void PanelTitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex) +{ + if (nItemIndex == mnMenuItemIndex) + if (maMenuAction) + maMenuAction(); +} + + + + +void PanelTitleBar::MouseButtonDown (const MouseEvent& rMouseEvent) +{ + if (rMouseEvent.IsLeft()) + { + mbIsLeftButtonDown = true; + CaptureMouse(); + } +} + + + + +void PanelTitleBar::MouseButtonUp (const MouseEvent& rMouseEvent) +{ + if (IsMouseCaptured()) + ReleaseMouse(); + + if (rMouseEvent.IsLeft()) + { + if (mbIsLeftButtonDown) + { + if (mpPanel != NULL) + { + mpPanel->SetExpanded( ! mpPanel->IsExpanded()); + Invalidate(); + } + } + } + if (mbIsLeftButtonDown) + mbIsLeftButtonDown = false; +} + + + + +void PanelTitleBar::DataChanged (const DataChangedEvent& rEvent) +{ + maToolBox.SetItemImage( + mnMenuItemIndex, + Theme::GetImage(Theme::Image_PanelMenu)); + TitleBar::DataChanged(rEvent); +} + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/PanelTitleBar.hxx b/sfx2/source/sidebar/PanelTitleBar.hxx new file mode 100644 index 000000000000..fc772a95cee0 --- /dev/null +++ b/sfx2/source/sidebar/PanelTitleBar.hxx @@ -0,0 +1,66 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_PANEL_TITLE_BAR_HXX +#define SFX_SIDEBAR_PANEL_TITLE_BAR_HXX + +#include "TitleBar.hxx" + +#include <boost/function.hpp> + + +namespace sfx2 { namespace sidebar { + +class Panel; + +class PanelTitleBar + : public TitleBar +{ +public: + PanelTitleBar ( + const ::rtl::OUString& rsTitle, + Window* pParentWindow, + Panel* pPanel, + const ::boost::function<void(void)>& rMenuAction); + virtual ~PanelTitleBar (void); + + virtual void DataChanged (const DataChangedEvent& rEvent); + virtual void MouseButtonDown (const MouseEvent& rMouseEvent); + virtual void MouseButtonUp (const MouseEvent& rMouseEvent); + +protected: + virtual Rectangle GetTitleArea (const Rectangle& rTitleBarBox); + virtual void PaintDecoration (const Rectangle& rTitleBarBox); + virtual sidebar::Paint GetBackgroundPaint (void); + virtual Color GetTextColor (void); + virtual void HandleToolBoxItemClick (const sal_uInt16 nItemIndex); + +private: + bool mbIsLeftButtonDown; + Panel* mpPanel; + const sal_uInt16 mnMenuItemIndex; + const ::boost::function<void(void)> maMenuAction; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/PopupContainer.cxx b/sfx2/source/sidebar/PopupContainer.cxx new file mode 100755 index 000000000000..1f9df8974af0 --- /dev/null +++ b/sfx2/source/sidebar/PopupContainer.cxx @@ -0,0 +1,54 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sfx2/sidebar/PopupContainer.hxx" + +namespace sfx2 { namespace sidebar { + +PopupContainer::PopupContainer (Window* pParent) + : FloatingWindow(pParent, WB_SYSTEMWINDOW | WB_3DLOOK) +{ +} + + + + +PopupContainer::~PopupContainer (void) +{ +} + + + + +long PopupContainer::Notify (NotifyEvent& rEvent) +{ + if (rEvent.GetType() == EVENT_LOSEFOCUS) + { + if( ! HasChildPathFocus(sal_True)) + EndPopupMode(); + } + return FloatingWindow::Notify(rEvent); +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/ResourceManager.cxx b/sfx2/source/sidebar/ResourceManager.cxx new file mode 100644 index 000000000000..5f253a641bb4 --- /dev/null +++ b/sfx2/source/sidebar/ResourceManager.cxx @@ -0,0 +1,631 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "ResourceManager.hxx" +#include "Tools.hxx" + +#include <unotools/confignode.hxx> +#include <comphelper/componentcontext.hxx> +#include <comphelper/processfactory.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <comphelper/types.hxx> +#include <comphelper/stlunosequence.hxx> + +#include <rtl/ustrbuf.hxx> +#include <tools/diagnose_ex.h> + +#include <com/sun/star/frame/XModuleManager.hpp> + +#include <map> + + + +using ::rtl::OUString; +using namespace css; +using namespace cssu; + +namespace sfx2 { namespace sidebar { + +#define gsPrivateResourceToolpanelPrefix "private:resource/toolpanel/" + + + +class ResourceManager::Deleter +{ +public: + void operator() (ResourceManager* pObject) + { + delete pObject; + } +}; + + +ResourceManager& ResourceManager::Instance (void) +{ + static ResourceManager maInstance; + return maInstance; +} + + + + +ResourceManager::ResourceManager (void) + : maDecks(), + maPanels(), + maProcessedApplications() +{ + ReadDeckList(); + ReadPanelList(); +} + + + + +ResourceManager::~ResourceManager (void) +{ + maPanels.clear(); + maDecks.clear(); +} + + + + +const DeckDescriptor* ResourceManager::GetBestMatchingDeck ( + const Context& rContext, + const Reference<frame::XFrame>& rxFrame) +{ + ReadLegacyAddons(rxFrame); + + for (DeckContainer::const_iterator iDeck(maDecks.begin()), iEnd(maDecks.end()); + iDeck!=iEnd; + ++iDeck) + { + if (iDeck->maContextList.GetMatch(rContext) != NULL) + return &*iDeck; + } + return NULL; +} + + + + +const DeckDescriptor* ResourceManager::GetDeckDescriptor ( + const ::rtl::OUString& rsDeckId) const +{ + for (DeckContainer::const_iterator + iDeck(maDecks.begin()), + iEnd(maDecks.end()); + iDeck!=iEnd; + ++iDeck) + { + if (iDeck->msId.equals(rsDeckId)) + return &*iDeck; + } + return NULL; +} + + + + +const PanelDescriptor* ResourceManager::GetPanelDescriptor ( + const ::rtl::OUString& rsPanelId) const +{ + for (PanelContainer::const_iterator + iPanel(maPanels.begin()), + iEnd(maPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + if (iPanel->msId.equals(rsPanelId)) + return &*iPanel; + } + return NULL; +} + + + + +void ResourceManager::SetIsDeckEnabled ( + const ::rtl::OUString& rsDeckId, + const bool bIsEnabled) +{ + for (DeckContainer::iterator + iDeck(maDecks.begin()), + iEnd(maDecks.end()); + iDeck!=iEnd; + ++iDeck) + { + if (iDeck->msId.equals(rsDeckId)) + { + iDeck->mbIsEnabled = bIsEnabled; + return; + } + } +} + + + + +const ResourceManager::IdContainer& ResourceManager::GetMatchingDecks ( + IdContainer& rDeckIds, + const Context& rContext, + const Reference<frame::XFrame>& rxFrame) +{ + ReadLegacyAddons(rxFrame); + + ::std::multimap<sal_Int32,OUString> aOrderedIds; + for (DeckContainer::const_iterator + iDeck(maDecks.begin()), + iEnd (maDecks.end()); + iDeck!=iEnd; + ++iDeck) + { + const DeckDescriptor& rDeckDescriptor (*iDeck); + if (rDeckDescriptor.maContextList.GetMatch(rContext) != NULL) + aOrderedIds.insert(::std::multimap<sal_Int32,OUString>::value_type( + rDeckDescriptor.mnOrderIndex, + rDeckDescriptor.msId)); + } + + for (::std::multimap<sal_Int32,OUString>::const_iterator + iId(aOrderedIds.begin()), + iEnd(aOrderedIds.end()); + iId!=iEnd; + ++iId) + { + rDeckIds.push_back(iId->second); + } + + return rDeckIds; +} + + + + +const ResourceManager::PanelContextDescriptorContainer& ResourceManager::GetMatchingPanels ( + PanelContextDescriptorContainer& rPanelIds, + const Context& rContext, + const ::rtl::OUString& rsDeckId, + const Reference<frame::XFrame>& rxFrame) +{ + ReadLegacyAddons(rxFrame); + + ::std::multimap<sal_Int32,PanelContextDescriptor> aOrderedIds; + for (PanelContainer::const_iterator + iPanel(maPanels.begin()), + iEnd(maPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + const PanelDescriptor& rPanelDescriptor (*iPanel); + if (rPanelDescriptor.msDeckId.equals(rsDeckId)) + { + const ContextList::Entry* pEntry = rPanelDescriptor.maContextList.GetMatch(rContext); + if (pEntry != NULL) + { + PanelContextDescriptor aPanelContextDescriptor; + aPanelContextDescriptor.msId = rPanelDescriptor.msId; + aPanelContextDescriptor.msMenuCommand = pEntry->msMenuCommand; + aPanelContextDescriptor.mbIsInitiallyVisible = pEntry->mbIsInitiallyVisible; + aOrderedIds.insert(::std::multimap<sal_Int32,PanelContextDescriptor>::value_type( + rPanelDescriptor.mnOrderIndex, + aPanelContextDescriptor)); + } + } + } + + for (::std::multimap<sal_Int32,PanelContextDescriptor>::const_iterator + iId(aOrderedIds.begin()), + iEnd(aOrderedIds.end()); + iId!=iEnd; + ++iId) + { + rPanelIds.push_back(iId->second); + } + + return rPanelIds; +} + + + + +void ResourceManager::ReadDeckList (void) +{ + const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory()); + const ::utl::OConfigurationTreeRoot aDeckRootNode ( + aContext, + A2S("org.openoffice.Office.UI.Sidebar/Content/DeckList"), + false); + if ( ! aDeckRootNode.isValid() ) + return; + + const Sequence<OUString> aDeckNodeNames (aDeckRootNode.getNodeNames()); + const sal_Int32 nCount (aDeckNodeNames.getLength()); + maDecks.resize(nCount); + sal_Int32 nWriteIndex(0); + for (sal_Int32 nReadIndex(0); nReadIndex<nCount; ++nReadIndex) + { + const ::utl::OConfigurationNode aDeckNode (aDeckRootNode.openNode(aDeckNodeNames[nReadIndex])); + if ( ! aDeckNode.isValid()) + continue; + + DeckDescriptor& rDeckDescriptor (maDecks[nWriteIndex++]); + + rDeckDescriptor.msTitle = ::comphelper::getString( + aDeckNode.getNodeValue("Title")); + rDeckDescriptor.msId = ::comphelper::getString( + aDeckNode.getNodeValue("Id")); + rDeckDescriptor.msIconURL = ::comphelper::getString( + aDeckNode.getNodeValue("IconURL")); + rDeckDescriptor.msHighContrastIconURL = ::comphelper::getString( + aDeckNode.getNodeValue("HighContrastIconURL")); + rDeckDescriptor.msHelpURL = ::comphelper::getString( + aDeckNode.getNodeValue("HelpURL")); + rDeckDescriptor.msHelpText = rDeckDescriptor.msTitle; + rDeckDescriptor.mbIsEnabled = true; + rDeckDescriptor.mnOrderIndex = ::comphelper::getINT32( + aDeckNode.getNodeValue("OrderIndex")); + + ReadContextList( + aDeckNode, + rDeckDescriptor.maContextList, + OUString()); + } + + // When there where invalid nodes then we have to adapt the size + // of the deck vector. + if (nWriteIndex<nCount) + maDecks.resize(nWriteIndex); +} + + + + +void ResourceManager::ReadPanelList (void) +{ + const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory()); + const ::utl::OConfigurationTreeRoot aPanelRootNode ( + aContext, + A2S("org.openoffice.Office.UI.Sidebar/Content/PanelList"), + false); + if ( ! aPanelRootNode.isValid() ) + return; + + const Sequence<OUString> aPanelNodeNames (aPanelRootNode.getNodeNames()); + const sal_Int32 nCount (aPanelNodeNames.getLength()); + maPanels.resize(nCount); + sal_Int32 nWriteIndex (0); + for (sal_Int32 nReadIndex(0); nReadIndex<nCount; ++nReadIndex) + { + const ::utl::OConfigurationNode aPanelNode (aPanelRootNode.openNode(aPanelNodeNames[nReadIndex])); + if ( ! aPanelNode.isValid()) + continue; + + PanelDescriptor& rPanelDescriptor (maPanels[nWriteIndex++]); + + rPanelDescriptor.msTitle = ::comphelper::getString( + aPanelNode.getNodeValue("Title")); + rPanelDescriptor.mbIsTitleBarOptional = ::comphelper::getBOOL( + aPanelNode.getNodeValue("TitleBarIsOptional")); + rPanelDescriptor.msId = ::comphelper::getString( + aPanelNode.getNodeValue("Id")); + rPanelDescriptor.msDeckId = ::comphelper::getString( + aPanelNode.getNodeValue("DeckId")); + rPanelDescriptor.msHelpURL = ::comphelper::getString( + aPanelNode.getNodeValue("HelpURL")); + rPanelDescriptor.msImplementationURL = ::comphelper::getString( + aPanelNode.getNodeValue("ImplementationURL")); + rPanelDescriptor.mnOrderIndex = ::comphelper::getINT32( + aPanelNode.getNodeValue("OrderIndex")); + rPanelDescriptor.mbWantsCanvas = ::comphelper::getBOOL( + aPanelNode.getNodeValue("WantsCanvas")); + const OUString sDefaultMenuCommand (::comphelper::getString( + aPanelNode.getNodeValue("DefaultMenuCommand"))); + + ReadContextList( + aPanelNode, + rPanelDescriptor.maContextList, + sDefaultMenuCommand); + } + + // When there where invalid nodes then we have to adapt the size + // of the deck vector. + if (nWriteIndex<nCount) + maPanels.resize(nWriteIndex); +} + + + + +void ResourceManager::ReadContextList ( + const ::utl::OConfigurationNode& rParentNode, + ContextList& rContextList, + const OUString& rsDefaultMenuCommand) const +{ + const Any aValue = rParentNode.getNodeValue("ContextList"); + Sequence<OUString> aValues; + sal_Int32 nCount; + if (aValue >>= aValues) + nCount = aValues.getLength(); + else + nCount = 0; + + for (sal_Int32 nIndex=0; nIndex<nCount; ++nIndex) + { + const OUString sValue (aValues[nIndex]); + sal_Int32 nCharacterIndex (0); + const OUString sApplicationName (sValue.getToken(0, ',', nCharacterIndex).trim()); + if (nCharacterIndex < 0) + { + if (sApplicationName.getLength() == 0) + { + // This is a valid case: in the XML file the separator + // was used as terminator. Using it in the last line + // creates an additional but empty entry. + break; + } + else + { + OSL_ASSERT("expecting three or four values per ContextList entry, separated by comma"); + continue; + } + } + + const OUString sContextName (sValue.getToken(0, ',', nCharacterIndex).trim()); + if (nCharacterIndex < 0) + { + OSL_ASSERT("expecting three or four values per ContextList entry, separated by comma"); + continue; + } + + const OUString sInitialState (sValue.getToken(0, ',', nCharacterIndex).trim()); + + // The fourth argument is optional. + const OUString sMenuCommandOverride ( + nCharacterIndex<0 + ? OUString() + : sValue.getToken(0, ',', nCharacterIndex).trim()); + const OUString sMenuCommand ( + sMenuCommandOverride.getLength()>0 + ? (sMenuCommandOverride.equalsAscii("none") + ? OUString() + : sMenuCommandOverride) + : rsDefaultMenuCommand); + + EnumContext::Application eApplication (EnumContext::GetApplicationEnum(sApplicationName)); + EnumContext::Application eApplication2 (EnumContext::Application_None); + if (eApplication == EnumContext::Application_None + && !sApplicationName.equals(EnumContext::GetApplicationName(EnumContext::Application_None))) + { + // Handle some special names: abbreviations that make + // context descriptions more readable. + if (sApplicationName.equalsAscii("Writer")) + eApplication = EnumContext::Application_Writer; + else if (sApplicationName.equalsAscii("Calc")) + eApplication = EnumContext::Application_Calc; + else if (sApplicationName.equalsAscii("Draw")) + eApplication = EnumContext::Application_Draw; + else if (sApplicationName.equalsAscii("Impress")) + eApplication = EnumContext::Application_Impress; + else if (sApplicationName.equalsAscii("DrawImpress")) + { + // A special case among the special names: it is + // common to use the same context descriptions for + // both Draw and Impress. This special case helps to + // avoid duplication in the .xcu file. + eApplication = EnumContext::Application_Draw; + eApplication2 = EnumContext::Application_Impress; + } + else if (sApplicationName.equalsAscii("WriterAndWeb")) + { + // Another special case for Writer and WriterWeb. + eApplication = EnumContext::Application_Writer; + eApplication2 = EnumContext::Application_WriterWeb; + } + else + { + OSL_ASSERT("application name not recognized"); + continue; + } + } + + const EnumContext::Context eContext (EnumContext::GetContextEnum(sContextName)); + if (eContext == EnumContext::Context_Unknown) + { + OSL_ASSERT("context name not recognized"); + continue; + } + + bool bIsInitiallyVisible; + if (sInitialState.equalsAscii("visible")) + bIsInitiallyVisible = true; + else if (sInitialState.equalsAscii("hidden")) + bIsInitiallyVisible = false; + else + { + OSL_ASSERT("unrecognized state"); + continue; + } + + if (eApplication != EnumContext::Application_None) + rContextList.AddContextDescription( + Context( + EnumContext::GetApplicationName(eApplication), + EnumContext::GetContextName(eContext)), + bIsInitiallyVisible, + sMenuCommand); + if (eApplication2 != EnumContext::Application_None) + rContextList.AddContextDescription( + Context( + EnumContext::GetApplicationName(eApplication2), + EnumContext::GetContextName(eContext)), + bIsInitiallyVisible, + sMenuCommand); + } +} + + + + +void ResourceManager::ReadLegacyAddons (const Reference<frame::XFrame>& rxFrame) +{ + // Get module name for given frame. + ::rtl::OUString sModuleName (GetModuleName(rxFrame)); + if (sModuleName.getLength() == 0) + return; + if (maProcessedApplications.find(sModuleName) != maProcessedApplications.end()) + { + // Addons for this application have already been read. + // There is nothing more to do. + return; + } + + // Mark module as processed. Even when there is an error that + // prevents the configuration data from being read, this error + // will not be triggered a second time. + maProcessedApplications.insert(sModuleName); + + // Get access to the configuration root node for the application. + ::utl::OConfigurationTreeRoot aLegacyRootNode (GetLegacyAddonRootNode(sModuleName)); + if ( ! aLegacyRootNode.isValid()) + return; + + // Process child nodes. + ::std::vector<OUString> aMatchingNodeNames; + GetToolPanelNodeNames(aMatchingNodeNames, aLegacyRootNode); + const sal_Int32 nCount (aMatchingNodeNames.size()); + size_t nDeckWriteIndex (maDecks.size()); + size_t nPanelWriteIndex (maPanels.size()); + maDecks.resize(maDecks.size() + nCount); + maPanels.resize(maPanels.size() + nCount); + for (sal_Int32 nReadIndex(0); nReadIndex<nCount; ++nReadIndex) + { + const OUString& rsNodeName (aMatchingNodeNames[nReadIndex]); + const ::utl::OConfigurationNode aChildNode (aLegacyRootNode.openNode(rsNodeName)); + if ( ! aChildNode.isValid()) + continue; + + DeckDescriptor& rDeckDescriptor (maDecks[nDeckWriteIndex++]); + rDeckDescriptor.msTitle = ::comphelper::getString(aChildNode.getNodeValue("UIName")); + rDeckDescriptor.msId = rsNodeName; + rDeckDescriptor.msIconURL = ::comphelper::getString(aChildNode.getNodeValue("ImageURL")); + rDeckDescriptor.msHighContrastIconURL = rDeckDescriptor.msIconURL; + rDeckDescriptor.msHelpURL = ::comphelper::getString(aChildNode.getNodeValue("HelpURL")); + rDeckDescriptor.msHelpText = rDeckDescriptor.msTitle; + rDeckDescriptor.maContextList.AddContextDescription(Context(sModuleName, A2S("any")), true, OUString()); + rDeckDescriptor.mbIsEnabled = true; + + PanelDescriptor& rPanelDescriptor (maPanels[nPanelWriteIndex++]); + rPanelDescriptor.msTitle = ::comphelper::getString(aChildNode.getNodeValue("UIName")); + rPanelDescriptor.mbIsTitleBarOptional = true; + rPanelDescriptor.msId = rsNodeName; + rPanelDescriptor.msDeckId = rsNodeName; + rPanelDescriptor.msHelpURL = ::comphelper::getString(aChildNode.getNodeValue("HelpURL")); + rPanelDescriptor.maContextList.AddContextDescription(Context(sModuleName, A2S("any")), true, OUString()); + rPanelDescriptor.msImplementationURL = rsNodeName; + } + + // When there where invalid nodes then we have to adapt the size + // of the deck and panel vectors. + if (nDeckWriteIndex < maDecks.size()) + maDecks.resize(nDeckWriteIndex); + if (nPanelWriteIndex < maPanels.size()) + maPanels.resize(nPanelWriteIndex); +} + + + + +::rtl::OUString ResourceManager::GetModuleName ( + const cssu::Reference<css::frame::XFrame>& rxFrame) +{ + if ( ! rxFrame.is() || ! rxFrame->getController().is()) + return OUString(); + + try + { + const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory()); + const Reference<frame::XModuleManager> xModuleManager ( + aContext.createComponent("com.sun.star.frame.ModuleManager"), + UNO_QUERY_THROW); + return xModuleManager->identify(rxFrame); + } + catch (const Exception&) + { + DBG_UNHANDLED_EXCEPTION(); + } + return OUString(); +} + + + + +::utl::OConfigurationTreeRoot ResourceManager::GetLegacyAddonRootNode ( + const ::rtl::OUString& rsModuleName) const +{ + try + { + const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory()); + const Reference<container::XNameAccess> xModuleAccess ( + aContext.createComponent("com.sun.star.frame.ModuleManager"), + UNO_QUERY_THROW); + const ::comphelper::NamedValueCollection aModuleProperties (xModuleAccess->getByName(rsModuleName)); + const ::rtl::OUString sWindowStateRef (aModuleProperties.getOrDefault( + "ooSetupFactoryWindowStateConfigRef", + ::rtl::OUString())); + + ::rtl::OUStringBuffer aPathComposer; + aPathComposer.appendAscii("org.openoffice.Office.UI."); + aPathComposer.append(sWindowStateRef); + aPathComposer.appendAscii("/UIElements/States"); + + return ::utl::OConfigurationTreeRoot(aContext, aPathComposer.makeStringAndClear(), false); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + + return ::utl::OConfigurationTreeRoot(); +} + + + + +void ResourceManager::GetToolPanelNodeNames ( + ::std::vector<OUString>& rMatchingNames, + const ::utl::OConfigurationTreeRoot aRoot) const +{ + Sequence<OUString> aChildNodeNames (aRoot.getNodeNames()); + const sal_Int32 nCount (aChildNodeNames.getLength()); + for (sal_Int32 nIndex(0); nIndex<nCount; ++nIndex) + { + if (aChildNodeNames[nIndex].matchAsciiL( + RTL_CONSTASCII_STRINGPARAM( "private:resource/toolpanel/"))) + rMatchingNames.push_back(aChildNodeNames[nIndex]); + } +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/ResourceManager.hxx b/sfx2/source/sidebar/ResourceManager.hxx new file mode 100644 index 000000000000..0ed684721ba1 --- /dev/null +++ b/sfx2/source/sidebar/ResourceManager.hxx @@ -0,0 +1,125 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_RESOURCE_MANAGER_HXX +#define SFX_SIDEBAR_RESOURCE_MANAGER_HXX + +#include "DeckDescriptor.hxx" +#include "PanelDescriptor.hxx" +#include "Context.hxx" +#include <unotools/confignode.hxx> +#include <com/sun/star/frame/XFrame.hpp> +#include <set> +#include <boost/shared_ptr.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace sfx2 { namespace sidebar { + +class Context; +class ContextList; + +/** Read the content of the Sidebar.xcu file and provide access + methods so that the sidebar can easily decide which content panels + to display for a certain context. +*/ +class ResourceManager +{ +public: + static ResourceManager& Instance (void); + + const DeckDescriptor* GetBestMatchingDeck ( + const Context& rContext, + const cssu::Reference<css::frame::XFrame>& rxFrame); + + const DeckDescriptor* GetDeckDescriptor ( + const ::rtl::OUString& rsDeckId) const; + const PanelDescriptor* GetPanelDescriptor ( + const ::rtl::OUString& rsPanelId) const; + + /** Excluded or include a deck from being displayed in the tab + bar. + Note that this value is not persistent. + The flag can not be set directly at a DeckDescriptor object + because the ResourceManager gives access to to them only + read-only. + */ + void SetIsDeckEnabled ( + const ::rtl::OUString& rsDeckId, + const bool bIsEnabled); + + typedef ::std::vector<rtl::OUString> IdContainer; + class PanelContextDescriptor + { + public: + ::rtl::OUString msId; + ::rtl::OUString msMenuCommand; + bool mbIsInitiallyVisible; + }; + typedef ::std::vector<PanelContextDescriptor> PanelContextDescriptorContainer; + + const IdContainer& GetMatchingDecks ( + IdContainer& rDeckDescriptors, + const Context& rContext, + const cssu::Reference<css::frame::XFrame>& rxFrame); + + const PanelContextDescriptorContainer& GetMatchingPanels ( + PanelContextDescriptorContainer& rPanelDescriptors, + const Context& rContext, + const ::rtl::OUString& rsDeckId, + const cssu::Reference<css::frame::XFrame>& rxFrame); + + static ::rtl::OUString GetModuleName ( + const cssu::Reference<css::frame::XFrame>& rxFrame); + +private: + ResourceManager (void); + ~ResourceManager (void); + class Deleter; + friend class Deleter; + + typedef ::std::vector<DeckDescriptor> DeckContainer; + DeckContainer maDecks; + typedef ::std::vector<PanelDescriptor> PanelContainer; + PanelContainer maPanels; + mutable ::std::set<rtl::OUString> maProcessedApplications; + + void ReadDeckList (void); + void ReadPanelList (void); + void ReadContextList ( + const ::utl::OConfigurationNode& rNode, + ContextList& rContextList, + const ::rtl::OUString& rsDefaultMenuCommand) const; + void ReadLegacyAddons ( + const cssu::Reference<css::frame::XFrame>& rxFrame); + ::utl::OConfigurationTreeRoot GetLegacyAddonRootNode ( + const ::rtl::OUString& rsModuleName) const; + void GetToolPanelNodeNames ( + ::std::vector<rtl::OUString>& rMatchingNames, + const ::utl::OConfigurationTreeRoot aRoot) const; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Sidebar.cxx b/sfx2/source/sidebar/Sidebar.cxx new file mode 100644 index 000000000000..c6b6d763b1ff --- /dev/null +++ b/sfx2/source/sidebar/Sidebar.cxx @@ -0,0 +1,81 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "Sidebar.hxx" +#include "ResourceManager.hxx" + +using namespace css; +using namespace cssu; + +namespace sfx2 { namespace sidebar { + +Sidebar::Sidebar( + Window& rParentWindow, + const Reference<frame::XFrame>& rxDocumentFrame) + : Window(&rParentWindow, WB_DIALOGCONTROL) +{ + ContentPanelManager::Instance(); +} + + + + +Sidebar::~Sidebar (void) +{ +} + + + + +void Sidebar::Resize (void) +{ + Window::Resize(); + // m_pImpl->OnResize(); +} + + + + +void Sidebar::GetFocus (void) +{ + Window::GetFocus(); + // m_pImpl->OnGetFocus(); +} + + + + +void Sidebar::DataChanged (const DataChangedEvent& rDataChangedEvent) +{ + if (rDataChangedEvent.GetType() == DATACHANGED_SETTINGS + && (rDataChangedEvent.GetFlags() & SETTINGS_STYLE)!= 0) + { + Invalidate(); + } + else + Window::DataChanged(rDataChangedEvent); +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/Sidebar.hrc b/sfx2/source/sidebar/Sidebar.hrc new file mode 100644 index 000000000000..16d868f81dfc --- /dev/null +++ b/sfx2/source/sidebar/Sidebar.hrc @@ -0,0 +1,87 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + + +#include <sfx2/sfx.hrc> + +#define RID_SIDEBAR_RESOURCE (RID_SFX_SIDEBAR_START + 0) + +#define IMAGE_SIDEBAR_PLUS 1 +#define IMAGE_SIDEBAR_PLUS_HC 2 +#define IMAGE_SIDEBAR_MINUS 3 +#define IMAGE_SIDEBAR_MINUS_HC 4 +#define IMAGE_SIDEBAR_GRIP 5 +#define IMAGE_SIDEBAR_GRIP_HC 6 +#define IMAGE_SIDEBAR_MENU 7 +#define IMAGE_SIDEBAR_MENU_HC 8 +#define IMAGE_SIDEBAR_DETAIL_DIALOG 9 +#define IMAGE_SIDEBAR_DETAIL_DIALOG_HC 10 +#define IMAGE_SIDEBAR_TOOLBOX_SEPARATOR 11 +#define IMAGE_SIDEBAR_DECK_3D_LARGE 20 +#define IMAGE_SIDEBAR_DECK_3D_LARGE_HC 21 +#define IMAGE_SIDEBAR_DECK_3D_SMALL 22 +#define IMAGE_SIDEBAR_DECK_3D_SMALL_HC 23 +#define IMAGE_SIDEBAR_DECK_ANIMATION_LARGE 30 +#define IMAGE_SIDEBAR_DECK_ANIMATION_LARGE_HC 31 +#define IMAGE_SIDEBAR_DECK_ANIMATION_SMALL 32 +#define IMAGE_SIDEBAR_DECK_ANIMATION_SMALL_HC 33 +#define IMAGE_SIDEBAR_DECK_COLORS_LARGE 40 +#define IMAGE_SIDEBAR_DECK_COLORS_LARGE_HC 41 +#define IMAGE_SIDEBAR_DECK_COLORS_SMALL 42 +#define IMAGE_SIDEBAR_DECK_COLORS_SMALL_HC 43 +#define IMAGE_SIDEBAR_DECK_EYEDROPPER_LARGE 50 +#define IMAGE_SIDEBAR_DECK_EYEDROPPER_LARGE_HC 51 +#define IMAGE_SIDEBAR_DECK_EYEDROPPER_SMALL 52 +#define IMAGE_SIDEBAR_DECK_EYEDROPPER_SMALL_HC 53 +#define IMAGE_SIDEBAR_DECK_GALLERY_LARGE 60 +#define IMAGE_SIDEBAR_DECK_GALLERY_LARGE_HC 61 +#define IMAGE_SIDEBAR_DECK_GALLERY_SMALL 62 +#define IMAGE_SIDEBAR_DECK_GALLERY_SMALL_HC 63 +#define IMAGE_SIDEBAR_DECK_IMGANIM_LARGE 70 +#define IMAGE_SIDEBAR_DECK_IMGANIM_LARGE_HC 71 +#define IMAGE_SIDEBAR_DECK_IMGANIM_SMALL 72 +#define IMAGE_SIDEBAR_DECK_IMGANIM_SMALL_HC 73 +#define IMAGE_SIDEBAR_DECK_NAVIGATOR_LARGE 80 +#define IMAGE_SIDEBAR_DECK_NAVIGATOR_LARGE_HC 81 +#define IMAGE_SIDEBAR_DECK_NAVIGATOR_SMALL 82 +#define IMAGE_SIDEBAR_DECK_NAVIGATOR_SMALL_HC 83 +#define IMAGE_SIDEBAR_PROPERTIES_DECK_LARGE 90 +#define IMAGE_SIDEBAR_PROPERTIES_DECK_LARGE_HC 91 +#define IMAGE_SIDEBAR_PROPERTIES_DECK_SMALL 92 +#define IMAGE_SIDEBAR_PROPERTIES_DECK_SMALL_HC 93 +#define IMAGE_SIDEBAR_DECK_STYLE_LARGE 100 +#define IMAGE_SIDEBAR_DECK_STYLE_LARGE_HC 101 +#define IMAGE_SIDEBAR_DECK_STYLE_SMALL 102 +#define IMAGE_SIDEBAR_DECK_STYLE_SMALL_HC 103 +#define IMAGE_SIDEBAR_DECK_TEMPLATE_LARGE 110 +#define IMAGE_SIDEBAR_DECK_TEMPLATE_LARGE_HC 111 +#define IMAGE_SIDEBAR_DECK_TEMPLATE_SMALL 112 +#define IMAGE_SIDEBAR_DECK_TEMPLATE_SMALL_HC 113 +#define IMAGE_SIDEBAR_DECK_TRANSITION_LARGE 120 +#define IMAGE_SIDEBAR_DECK_TRANSITION_LARGE_HC 121 +#define IMAGE_SIDEBAR_DECK_TRANSITION_SMALL 122 +#define IMAGE_SIDEBAR_DECK_TRANSITION_SMALL_HC 123 +#define IMAGE_SIDEBAR_DECK_FUNCTIONS_LARGE 130 +#define IMAGE_SIDEBAR_DECK_FUNCTIONS_LARGE_HC 131 +#define IMAGE_SIDEBAR_DECK_FUNCTIONS_SMALL 132 +#define IMAGE_SIDEBAR_DECK_FUNCTIONS_SMALL_HC 133 +#define STRING_CUSTOMIZATION 200 +#define STRING_RESTORE 201 diff --git a/sfx2/source/sidebar/Sidebar.hxx b/sfx2/source/sidebar/Sidebar.hxx new file mode 100644 index 000000000000..c6c5a928ac22 --- /dev/null +++ b/sfx2/source/sidebar/Sidebar.hxx @@ -0,0 +1,68 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_HXX +#define SFX_SIDEBAR_HXX + +#include "sfx2/dllapi.h" +#include <vcl/window.hxx> +#include <com/sun/star/frame/XFrame.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace sfx2 { namespace sidebar { + + +/** SFX-less version of a module dependent task pane, filled with tool panels as specified in the respective + module's configuration +*/ +class SFX2_DLLPUBLIC Sidebar + : public Window +{ +public: + /** creates a new instance + @param i_rParentWindow + the parent window + @param i_rDocumentFrame + the frame to which the task pane belongs. Will be passed to any custom tool panels created + via an XUIElementFactory. Also, it is used to determine the module which the task pane is + responsible for, thus controlling which tool panels are actually available. + */ + Sidebar( + Window& rParentWindow, + const cssu::Reference<css::frame::XFrame>& rxDocumentFrame); + + + virtual ~Sidebar (void); + +protected: + virtual void Resize (void); + virtual void GetFocus (void); + +private: +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Sidebar.src b/sfx2/source/sidebar/Sidebar.src new file mode 100644 index 000000000000..6beb91ebd1a1 --- /dev/null +++ b/sfx2/source/sidebar/Sidebar.src @@ -0,0 +1,295 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "Sidebar.hrc" + +Resource RID_SIDEBAR_RESOURCE +{ + Image IMAGE_SIDEBAR_PLUS + { + ImageBitmap = Bitmap { File = "plus.png" ;}; + }; + + Image IMAGE_SIDEBAR_PLUS_HC + { + ImageBitmap = Bitmap { File = "plus_hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_MINUS + { + ImageBitmap = Bitmap { File = "minus.png" ;}; + }; + + Image IMAGE_SIDEBAR_MINUS_HC + { + ImageBitmap = Bitmap { File = "minus_hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_GRIP + { + ImageBitmap = Bitmap { File = "grip.png" ;}; + }; + + Image IMAGE_SIDEBAR_GRIP_HC + { + ImageBitmap = Bitmap { File = "grip_hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_MENU + { + ImageBitmap = Bitmap { File = "symphony/open_more.png" ;}; + }; + + Image IMAGE_SIDEBAR_MENU_HC + { + ImageBitmap = Bitmap { File = "menu_hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DETAIL_DIALOG + { + ImageBitmap = Bitmap { File = "symphony/morebutton.png" ;}; + }; + + Image IMAGE_SIDEBAR_DETAIL_DIALOG_HC + { + ImageBitmap = Bitmap { File = "symphony/morebutton_h.png" ;}; + }; + + Image IMAGE_SIDEBAR_TOOLBOX_SEPARATOR + { + ImageBitmap = Bitmap { File = "separator.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_3D_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-3d-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_3D_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-3d-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_3D_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-3d-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_3D_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-3d-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_ANIMATION_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-animation-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_ANIMATION_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-animation-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_ANIMATION_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-animation-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_ANIMATION_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-animation-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_COLORS_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-colors-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_COLORS_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-colors-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_COLORS_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-colors-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_COLORS_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-colors-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_EYEDROPPER_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-eyedropper-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_EYEDROPPER_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-eyedropper-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_EYEDROPPER_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-eyedropper-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_EYEDROPPER_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-eyedropper-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_GALLERY_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-gallery-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_GALLERY_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-gallery-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_GALLERY_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-gallery-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_GALLERY_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-gallery-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_IMGANIM_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-imganim-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_IMGANIM_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-imganim-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_IMGANIM_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-imganim-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_IMGANIM_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-imganim-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_NAVIGATOR_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-navigator-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_NAVIGATOR_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-navigator-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_NAVIGATOR_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-navigator-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_NAVIGATOR_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-navigator-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_PROPERTIES_DECK_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-property-large.png" ;}; + }; + Image IMAGE_SIDEBAR_PROPERTIES_DECK_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-property-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_PROPERTIES_DECK_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-property-small.png" ;}; + }; + Image IMAGE_SIDEBAR_PROPERTIES_DECK_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-property-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_STYLE_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-style-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_STYLE_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-style-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_STYLE_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-style-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_STYLE_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-style-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_TEMPLATE_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-template-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_TEMPLATE_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-template-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_TEMPLATE_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-template-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_TEMPLATE_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-template-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_TRANSITION_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-transition-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_TRANSITION_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-transition-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_TRANSITION_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-transition-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_TRANSITION_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-transition-small-hc.png" ;}; + }; + + Image IMAGE_SIDEBAR_DECK_FUNCTIONS_LARGE + { + ImageBitmap = Bitmap { File = "symphony/sidebar-functions-large.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_FUNCTIONS_LARGE_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-functions-large-hc.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_FUNCTIONS_SMALL + { + ImageBitmap = Bitmap { File = "symphony/sidebar-functions-small.png" ;}; + }; + Image IMAGE_SIDEBAR_DECK_FUNCTIONS_SMALL_HC + { + ImageBitmap = Bitmap { File = "symphony/sidebar-functions-small-hc.png" ;}; + }; + + String STRING_CUSTOMIZATION + { + Text [en-US] = "Customization"; + }; + String STRING_RESTORE + { + Text [en-US] = "Restore Default"; + }; +}; + + diff --git a/sfx2/source/sidebar/SidebarChildWindow.cxx b/sfx2/source/sidebar/SidebarChildWindow.cxx new file mode 100644 index 000000000000..f9f28ce3dcd9 --- /dev/null +++ b/sfx2/source/sidebar/SidebarChildWindow.cxx @@ -0,0 +1,61 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sfx2/sidebar/SidebarChildWindow.hxx" +#include "SidebarDockingWindow.hxx" +#include "sfx2/sfxsids.hrc" +#include "helpid.hrc" +#include "sfx2/dockwin.hxx" + + +namespace sfx2 { namespace sidebar { + + +SFX_IMPL_DOCKINGWINDOW(SidebarChildWindow, SID_SIDEBAR); + + +SidebarChildWindow::SidebarChildWindow ( + Window* pParent, + sal_uInt16 nId, + SfxBindings* pBindings, + SfxChildWinInfo* pInfo ) + : SfxChildWindow(pParent, nId) +{ + this->pWindow = new SidebarDockingWindow( + pBindings, + *this, + pParent, + WB_STDDOCKWIN | WB_OWNERDRAWDECORATION | WB_CLIPCHILDREN | WB_SIZEABLE | WB_3DLOOK | WB_ROLLABLE); + eChildAlignment = SFX_ALIGN_RIGHT; + + this->pWindow->SetHelpId(HID_SIDEBAR_WINDOW); + this->pWindow->SetOutputSizePixel(Size(300, 450)); + + dynamic_cast<SfxDockingWindow*>(pWindow)->Initialize(pInfo); + SetHideNotDelete(sal_True); + + this->pWindow->Show(); +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx new file mode 100644 index 000000000000..ef214a5b31a5 --- /dev/null +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -0,0 +1,934 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "SidebarController.hxx" +#include "Deck.hxx" +#include "DeckTitleBar.hxx" +#include "Panel.hxx" +#include "SidebarPanel.hxx" +#include "SidebarResource.hxx" +#include "TabBar.hxx" +#include "sfx2/sidebar/Theme.hxx" +#include "SidebarDockingWindow.hxx" +#include "Context.hxx" +#include "Tools.hxx" + +#include "sfxresid.hxx" +#include "sfx2/sfxsids.hrc" +#include "sfx2/titledockwin.hxx" +#include "sfxlocal.hrc" +#include <vcl/floatwin.hxx> +#include "splitwin.hxx" +#include <svl/smplhint.hxx> +#include <tools/link.hxx> +#include <comphelper/componentfactory.hxx> +#include <comphelper/processfactory.hxx> +#include <comphelper/componentcontext.hxx> +#include <comphelper/namedvaluecollection.hxx> + +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp> +#include <com/sun/star/ui/ContextChangeEventObject.hpp> +#include <com/sun/star/ui/XUIElementFactory.hpp> +#include <com/sun/star/util/XURLTransformer.hpp> +#include <com/sun/star/util/URL.hpp> + +#include <boost/bind.hpp> +#include <boost/function.hpp> +#include <boost/scoped_array.hpp> + + +using namespace css; +using namespace cssu; +using ::rtl::OUString; + + + +namespace sfx2 { namespace sidebar { + +namespace { + enum MenuId + { + MID_UNLOCK_TASK_PANEL = 1, + MID_LOCK_TASK_PANEL, + MID_CUSTOMIZATION, + MID_RESTORE_DEFAULT, + MID_FIRST_PANEL, + MID_FIRST_HIDE = 1000 + }; +} + + +SidebarController::SidebarController ( + SidebarDockingWindow* pParentWindow, + const cssu::Reference<css::frame::XFrame>& rxFrame) + : SidebarControllerInterfaceBase(m_aMutex), + mpCurrentDeck(), + mpParentWindow(pParentWindow), + mpTabBar(new TabBar( + mpParentWindow, + rxFrame, + ::boost::bind(&SidebarController::SwitchToDeck, this, _1), + ::boost::bind(&SidebarController::ShowPopupMenu, this, _1,_2,_3))), + mxFrame(rxFrame), + maCurrentContext(OUString(), OUString()), + msCurrentDeckId(A2S("PropertyDeck")), + maPropertyChangeForwarder(::boost::bind(&SidebarController::BroadcastPropertyChange, this)), + mbIsDeckClosed(false), + mnSavedSidebarWidth(pParentWindow->GetSizePixel().Width()) +{ + if (pParentWindow == NULL) + { + OSL_ASSERT(pParentWindow!=NULL); + return; + } + + // Listen for context change events. + cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( + css::ui::ContextChangeEventMultiplexer::get( + ::comphelper::getProcessComponentContext())); + if (xMultiplexer.is()) + xMultiplexer->addContextChangeEventListener( + static_cast<css::ui::XContextChangeEventListener*>(this), + mxFrame->getController()); + + // Listen for window events. + mpParentWindow->AddEventListener(LINK(this, SidebarController, WindowEventHandler)); + + // Listen for theme property changes. + Theme::GetPropertySet()->addPropertyChangeListener( + A2S(""), + static_cast<css::beans::XPropertyChangeListener*>(this)); + + SwitchToDeck(A2S("default")); +} + + + + +SidebarController::~SidebarController (void) +{ +} + + + + +void SAL_CALL SidebarController::disposing (void) +{ + maFocusManager.Clear(); + + cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( + css::ui::ContextChangeEventMultiplexer::get( + ::comphelper::getProcessComponentContext())); + if (xMultiplexer.is()) + xMultiplexer->removeAllContextChangeEventListeners( + static_cast<css::ui::XContextChangeEventListener*>(this)); + + if (mpParentWindow != NULL) + { + mpParentWindow->RemoveEventListener(LINK(this, SidebarController, WindowEventHandler)); + mpParentWindow = NULL; + } + + if (mpCurrentDeck) + { + mpCurrentDeck->Dispose(); + OSL_TRACE("deleting deck window subtree"); + mpCurrentDeck->PrintWindowTree(); + mpCurrentDeck.reset(); + } + + mpTabBar.reset(); + + Theme::GetPropertySet()->removePropertyChangeListener( + A2S(""), + static_cast<css::beans::XPropertyChangeListener*>(this)); +} + + + + +void SAL_CALL SidebarController::notifyContextChangeEvent (const css::ui::ContextChangeEventObject& rEvent) + throw(cssu::RuntimeException) +{ + UpdateConfigurations( + Context( + rEvent.ApplicationName, + rEvent.ContextName)); +} + + + + +void SAL_CALL SidebarController::disposing (const css::lang::EventObject& rEventObject) + throw(cssu::RuntimeException) +{ + (void)rEventObject; + + dispose(); +} + + + + +void SAL_CALL SidebarController::propertyChange (const css::beans::PropertyChangeEvent& rEvent) + throw(cssu::RuntimeException) +{ + (void)rEvent; + + maPropertyChangeForwarder.RequestCall(); +} + + + + +void SAL_CALL SidebarController::requestLayout (void) + throw(cssu::RuntimeException) +{ + if (mpCurrentDeck) + mpCurrentDeck->RequestLayout(); + RestrictWidth(); +} + + + + +void SidebarController::BroadcastPropertyChange (void) +{ + DataChangedEvent aEvent (DATACHANGED_USER); + mpParentWindow->NotifyAllChilds(aEvent); + mpParentWindow->Invalidate(INVALIDATE_CHILDREN); +} + + + + +void SidebarController::NotifyResize (void) +{ + if (mpTabBar == NULL) + { + OSL_ASSERT(mpTabBar!=NULL); + return; + } + + Window* pParentWindow = mpTabBar->GetParent(); + + const sal_Int32 nWidth (pParentWindow->GetSizePixel().Width()); + const sal_Int32 nHeight (pParentWindow->GetSizePixel().Height()); + + // Place the deck. + if (mpCurrentDeck) + { + mpCurrentDeck->SetPosSizePixel(0,0, nWidth-TabBar::GetDefaultWidth(), nHeight); + mpCurrentDeck->Show(); + mpCurrentDeck->RequestLayout(); + } + + // Place the tab bar. + mpTabBar->SetPosSizePixel(nWidth-TabBar::GetDefaultWidth(),0,TabBar::GetDefaultWidth(),nHeight); + mpTabBar->Show(); + + // Determine if the closer of the deck can be shown. + if (mpCurrentDeck) + { + DeckTitleBar* pTitleBar = mpCurrentDeck->GetTitleBar(); + if (pTitleBar != NULL && pTitleBar->IsVisible()) + pTitleBar->SetCloserVisible(CanModifyChildWindowWidth()); + } + + if (nWidth > TabBar::GetDefaultWidth()) + mnSavedSidebarWidth = nWidth; + + RestrictWidth(); +#ifdef DEBUG + if (mpCurrentDeck) + { + mpCurrentDeck->PrintWindowTree(); + sal_Int32 nPanelIndex (0); + for (SharedPanelContainer::const_iterator + iPanel(mpCurrentDeck->GetPanels().begin()), + iEnd(mpCurrentDeck->GetPanels().end()); + iPanel!=iEnd; + ++iPanel,++nPanelIndex) + { + OSL_TRACE("panel %d:", nPanelIndex); + (*iPanel)->PrintWindowTree(); + } + } +#endif +} + + + + +void SidebarController::UpdateConfigurations (const Context& rContext) +{ + if (maCurrentContext != rContext) + { + maCurrentContext = rContext; + + // Notify the tab bar about the updated set of decks. + ResourceManager::IdContainer aDeckIds; + ResourceManager::Instance().GetMatchingDecks ( + aDeckIds, + rContext, + mxFrame); + mpTabBar->SetDecks(aDeckIds); + + // Check if the current deck is among the matching decks. + bool bCurrentDeckMatches (false); + for (ResourceManager::IdContainer::const_iterator + iDeck(aDeckIds.begin()), + iEnd(aDeckIds.end()); + iDeck!=iEnd; + ++iDeck) + { + if (iDeck->equals(msCurrentDeckId)) + { + bCurrentDeckMatches = true; + break; + } + } + + DeckDescriptor const* pDeckDescriptor = NULL; + if ( ! bCurrentDeckMatches) + pDeckDescriptor = ResourceManager::Instance().GetBestMatchingDeck(rContext, mxFrame); + else + pDeckDescriptor = ResourceManager::Instance().GetDeckDescriptor(msCurrentDeckId); + if (pDeckDescriptor != NULL) + { + msCurrentDeckId = pDeckDescriptor->msId; + SwitchToDeck(*pDeckDescriptor, rContext); + } + +#ifdef DEBUG + // Show the context name in the deck title bar. + if (mpCurrentDeck) + { + DeckTitleBar* pTitleBar = mpCurrentDeck->GetTitleBar(); + if (pTitleBar != NULL) + pTitleBar->SetTitle(msCurrentDeckTitle+A2S(" (")+rContext.msContext+A2S(")")); + } +#endif + } +} + + + + +void SidebarController::SwitchToDeck ( + const ::rtl::OUString& rsDeckId) +{ + if ( ! msCurrentDeckId.equals(rsDeckId) || mbIsDeckClosed) + { + const DeckDescriptor* pDeckDescriptor = ResourceManager::Instance().GetDeckDescriptor(rsDeckId); + if (pDeckDescriptor != NULL) + SwitchToDeck(*pDeckDescriptor, maCurrentContext); + } +} + + + + +void SidebarController::SwitchToDeck ( + const DeckDescriptor& rDeckDescriptor, + const Context& rContext) +{ + maFocusManager.Clear(); + + if ( ! msCurrentDeckId.equals(rDeckDescriptor.msId)) + { + // When the deck changes then destroy the deck and all panels + // and create everything new. + if (mpCurrentDeck) + { + mpCurrentDeck->Dispose(); + mpCurrentDeck.reset(); + } + + msCurrentDeckId = rDeckDescriptor.msId; + } + + // Reopen the deck when necessary. + OpenDeck(); + + // Determine the panels to display in the deck. + ResourceManager::PanelContextDescriptorContainer aPanelContextDescriptors; + ResourceManager::Instance().GetMatchingPanels( + aPanelContextDescriptors, + rContext, + rDeckDescriptor.msId, + mxFrame); + + if (aPanelContextDescriptors.empty()) + { + // There are no panels to be displayed in the current context. + if (EnumContext::GetContextEnum(rContext.msContext) != EnumContext::Context_Empty) + { + // Switch to the "empty" context and try again. + SwitchToDeck( + rDeckDescriptor, + Context( + rContext.msApplication, + EnumContext::GetContextName(EnumContext::Context_Empty))); + return; + } + else + { + // This is already the "empty" context. Looks like we have + // to live with an empty deck. + } + } + + if (mpCurrentDeck + && ArePanelSetsEqual(mpCurrentDeck->GetPanels(), aPanelContextDescriptors)) + { + // Requested set of panels is identical to the current set of + // panels => Nothing to do. + return; + } + + // Provide a configuration and Deck object. + if ( ! mpCurrentDeck) + { + mpCurrentDeck.reset( + new Deck( + rDeckDescriptor, + mpParentWindow, + ::boost::bind(&SidebarController::CloseDeck, this))); + msCurrentDeckTitle = rDeckDescriptor.msTitle; + } + if ( ! mpCurrentDeck) + return; + + // Update the panel list. + const sal_Int32 nNewPanelCount (aPanelContextDescriptors.size()); + SharedPanelContainer aNewPanels; + const SharedPanelContainer& rCurrentPanels (mpCurrentDeck->GetPanels()); + aNewPanels.resize(nNewPanelCount); + sal_Int32 nWriteIndex (0); + bool bHasPanelSetChanged (false); + for (sal_Int32 nReadIndex=0; nReadIndex<nNewPanelCount; ++nReadIndex) + { + const ResourceManager::PanelContextDescriptor& rPanelContexDescriptor ( + aPanelContextDescriptors[nReadIndex]); + + // Find the corresponding panel among the currently active + // panels. + SharedPanelContainer::const_iterator iPanel (::std::find_if( + rCurrentPanels.begin(), + rCurrentPanels.end(), + ::boost::bind(&Panel::HasIdPredicate, _1, ::boost::cref(rPanelContexDescriptor.msId)))); + if (iPanel != rCurrentPanels.end()) + { + // Panel already exists in current deck. Reuse it. + aNewPanels[nWriteIndex] = *iPanel; + OSL_TRACE(" reusing panel %s", S2A(rPanelContexDescriptor.msId)); + } + else + { + // Panel does not yet exist. Create it. + aNewPanels[nWriteIndex] = CreatePanel( + rPanelContexDescriptor.msId, + mpCurrentDeck->GetPanelParentWindow(), + rPanelContexDescriptor.msMenuCommand); + OSL_TRACE(" creating panel %s", S2A(rPanelContexDescriptor.msId)); + bHasPanelSetChanged = true; + } + if (aNewPanels[nWriteIndex] != NULL) + { + // Depending on the context we have to collapse the panel. + aNewPanels[nWriteIndex]->SetExpanded(rPanelContexDescriptor.mbIsInitiallyVisible); + + ++nWriteIndex; + } + + } + aNewPanels.resize(nWriteIndex); + + // Activate the deck and the new set of panels. + mpCurrentDeck->SetPosSizePixel( + 0, + 0, + mpParentWindow->GetSizePixel().Width()-TabBar::GetDefaultWidth(), + mpParentWindow->GetSizePixel().Height()); + mpCurrentDeck->SetPanels(aNewPanels); + mpCurrentDeck->Show(); + + // Tell the tab bar to highlight the button associated with the + // deck. + mpTabBar->HighlightDeck(rDeckDescriptor.msId); + + mpParentWindow->SetText(rDeckDescriptor.msTitle); + + if (bHasPanelSetChanged) + NotifyResize(); + + // Tell the focus manager about the new panels and tab bar + // buttons. + maFocusManager.SetPanels(aNewPanels); + mpTabBar->UpdateFocusManager(maFocusManager); +} + + + + +bool SidebarController::ArePanelSetsEqual ( + const SharedPanelContainer& rCurrentPanels, + const ResourceManager::PanelContextDescriptorContainer& rRequestedPanels) +{ + OSL_TRACE("current panel list:"); + for (SharedPanelContainer::const_iterator + iPanel(rCurrentPanels.begin()), + iEnd(rCurrentPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + OSL_TRACE(" panel %s", S2A((*iPanel)->GetId())); + } + + OSL_TRACE("requested panels: "); + for (ResourceManager::PanelContextDescriptorContainer::const_iterator + iId(rRequestedPanels.begin()), + iEnd(rRequestedPanels.end()); + iId!=iEnd; + ++iId) + { + OSL_TRACE(" panel %s", S2A(iId->msId)); + } + + if (rCurrentPanels.size() != rRequestedPanels.size()) + return false; + for (sal_Int32 nIndex=0,nCount=rCurrentPanels.size(); nIndex<nCount; ++nIndex) + { + if (rCurrentPanels[nIndex] == NULL) + return false; + if ( ! rCurrentPanels[nIndex]->GetId().equals(rRequestedPanels[nIndex].msId)) + return false; + } + return true; +} + + + + +SharedPanel SidebarController::CreatePanel ( + const OUString& rsPanelId, + ::Window* pParentWindow, + const OUString& rsMenuCommand) +{ + const PanelDescriptor* pPanelDescriptor = ResourceManager::Instance().GetPanelDescriptor(rsPanelId); + if (pPanelDescriptor == NULL) + return SharedPanel(); + +#ifdef DEBUG + // Prevent the panel not being created in the same memory of an old panel. + ::boost::scoped_array<char> pUnused (new char[sizeof(Panel)]); + OSL_TRACE("allocated memory at %x", pUnused.get()); +#endif + + // Create the panel which is the parent window of the UIElement. + SharedPanel pPanel (new Panel( + *pPanelDescriptor, + pParentWindow, + ::boost::bind(&Deck::RequestLayout, mpCurrentDeck.get()), + rsMenuCommand.getLength()>0 + ? ::boost::bind(&SidebarController::ShowDetailMenu,this,rsMenuCommand) + : ::boost::function<void(void)>())); + + // Create the XUIElement. + Reference<ui::XUIElement> xUIElement (CreateUIElement( + pPanel->GetComponentInterface(), + pPanelDescriptor->msImplementationURL)); + if (xUIElement.is()) + { + // Initialize the panel and add it to the active deck. + pPanel->SetUIElement(xUIElement); + } + else + { + pPanel.reset(); + } + + return pPanel; +} + + + + +Reference<ui::XUIElement> SidebarController::CreateUIElement ( + const Reference<awt::XWindowPeer>& rxWindow, + const ::rtl::OUString& rsImplementationURL) +{ + try + { + const ::comphelper::ComponentContext aComponentContext (::comphelper::getProcessServiceFactory()); + const Reference<ui::XUIElementFactory> xUIElementFactory ( + aComponentContext.createComponent("com.sun.star.ui.UIElementFactoryManager"), + UNO_QUERY_THROW); + + // Create the XUIElement. + ::comphelper::NamedValueCollection aCreationArguments; + aCreationArguments.put("Frame", makeAny(mxFrame)); + aCreationArguments.put("ParentWindow", makeAny(rxWindow)); + SfxDockingWindow* pSfxDockingWindow = dynamic_cast<SfxDockingWindow*>(mpParentWindow); + if (pSfxDockingWindow != NULL) + aCreationArguments.put("SfxBindings", makeAny(sal_uInt64(&pSfxDockingWindow->GetBindings()))); + aCreationArguments.put("Theme", Theme::GetPropertySet()); + aCreationArguments.put("Sidebar", makeAny(Reference<ui::XSidebar>(static_cast<ui::XSidebar*>(this)))); + + Reference<ui::XUIElement> xUIElement( + xUIElementFactory->createUIElement( + rsImplementationURL, + Sequence<beans::PropertyValue>(aCreationArguments.getPropertyValues())), + UNO_QUERY_THROW); + + return xUIElement; + } + catch(Exception& rException) + { + OSL_TRACE("caught exception: %s", + OUStringToOString(rException.Message, RTL_TEXTENCODING_ASCII_US).getStr()); + // For some reason we can not create the actual panel. + // Probably because its factory was not properly registered. + // TODO: provide feedback to developer to better pinpoint the + // source of the error. + + return NULL; + } +} + + + + +IMPL_LINK(SidebarController, WindowEventHandler, VclWindowEvent*, pEvent) +{ + if (pEvent != NULL) + { + switch (pEvent->GetId()) + { + case VCLEVENT_WINDOW_GETFOCUS: + case VCLEVENT_WINDOW_LOSEFOCUS: + break; + + case VCLEVENT_WINDOW_SHOW: + case VCLEVENT_WINDOW_RESIZE: + NotifyResize(); + break; + + case VCLEVENT_WINDOW_DATACHANGED: + // Force an update of deck and tab bar to reflect + // changes in theme (high contrast mode). + Theme::HandleDataChange(); + mpParentWindow->Invalidate(); + break; + + case SFX_HINT_DYING: + dispose(); + break; + + default: + break; + } + } + + return sal_True; +} + + + + +void SidebarController::ShowPopupMenu ( + const Rectangle& rButtonBox, + const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData, + const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const +{ + ::boost::shared_ptr<PopupMenu> pMenu = CreatePopupMenu(rDeckSelectionData, rDeckShowData); + pMenu->SetSelectHdl(LINK(this, SidebarController, OnMenuItemSelected)); + + // pass toolbox button rect so the menu can stay open on button up + Rectangle aBox (rButtonBox); + aBox.Move(mpTabBar->GetPosPixel().X(), 0); + pMenu->Execute(mpParentWindow, aBox, POPUPMENU_EXECUTE_DOWN); +} + + + + +void SidebarController::ShowDetailMenu (const ::rtl::OUString& rsMenuCommand) const +{ + try + { + util::URL aURL; + aURL.Complete = rsMenuCommand; + + const ::comphelper::ComponentContext aComponentContext (::comphelper::getProcessServiceFactory()); + const Reference<util::XURLTransformer> xParser ( + aComponentContext.createComponent("com.sun.star.util.URLTransformer"), + UNO_QUERY_THROW); + xParser->parseStrict(aURL); + Reference<frame::XDispatchProvider> xProvider (mxFrame, UNO_QUERY_THROW); + Reference<frame::XDispatch> xDispatch (xProvider->queryDispatch(aURL, OUString(), 0)); + if (xDispatch.is()) + xDispatch->dispatch(aURL, Sequence<beans::PropertyValue>()); + } + catch(Exception& rException) + { + OSL_TRACE("caught exception: %s", + OUStringToOString(rException.Message, RTL_TEXTENCODING_ASCII_US).getStr()); + } +} + + + + +::boost::shared_ptr<PopupMenu> SidebarController::CreatePopupMenu ( + const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData, + const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const +{ + ::boost::shared_ptr<PopupMenu> pMenu (new PopupMenu()); + FloatingWindow* pMenuWindow = dynamic_cast<FloatingWindow*>(pMenu->GetWindow()); + if (pMenuWindow != NULL) + { + pMenuWindow->SetPopupModeFlags(pMenuWindow->GetPopupModeFlags() | FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE); + } + + SidebarResource aLocalResource; + + // Add one entry for every tool panel element to individually make + // them visible or hide them. + { + sal_Int32 nIndex (MID_FIRST_PANEL); + for(::std::vector<TabBar::DeckMenuData>::const_iterator + iItem(rDeckSelectionData.begin()), + iEnd(rDeckSelectionData.end()); + iItem!=iEnd; + ++iItem) + { + pMenu->InsertItem(nIndex, iItem->get<0>(), MIB_RADIOCHECK); + pMenu->CheckItem(nIndex, iItem->get<2>()); + ++nIndex; + } + } + + pMenu->InsertSeparator(); + + // Add entry for docking or un-docking the tool panel. + if (mpParentWindow->IsFloatingMode()) + pMenu->InsertItem(MID_LOCK_TASK_PANEL, String(SfxResId(STR_SFX_DOCK))); + else + pMenu->InsertItem(MID_UNLOCK_TASK_PANEL, String(SfxResId(STR_SFX_UNDOCK))); + + // Add sub menu for customization (hiding of deck tabs.) + PopupMenu* pCustomizationMenu = new PopupMenu(); + { + sal_Int32 nIndex (MID_FIRST_HIDE); + for(::std::vector<TabBar::DeckMenuData>::const_iterator + iItem(rDeckShowData.begin()), + iEnd(rDeckShowData.end()); + iItem!=iEnd; + ++iItem) + { + pCustomizationMenu->InsertItem(nIndex, iItem->get<0>(), MIB_CHECKABLE); + pCustomizationMenu->CheckItem(nIndex, iItem->get<2>()); + ++nIndex; + } + } + + pCustomizationMenu->InsertSeparator(); + pCustomizationMenu->InsertItem(MID_RESTORE_DEFAULT, String(SfxResId(STRING_RESTORE))); + + pMenu->InsertItem(MID_CUSTOMIZATION, String(SfxResId(STRING_CUSTOMIZATION))); + pMenu->SetPopupMenu(MID_CUSTOMIZATION, pCustomizationMenu); + + pMenu->RemoveDisabledEntries(sal_False, sal_False); + + return pMenu; +} + + + + +IMPL_LINK(SidebarController, OnMenuItemSelected, Menu*, pMenu) +{ + if (pMenu == NULL) + { + OSL_ENSURE(pMenu!=NULL, "sfx2::sidebar::SidebarController::OnMenuItemSelected: illegal menu!"); + return 0; + } + + pMenu->Deactivate(); + const sal_Int32 nIndex (pMenu->GetCurItemId()); + switch (nIndex) + { + case MID_UNLOCK_TASK_PANEL: + mpParentWindow->SetFloatingMode(sal_True); + break; + + case MID_LOCK_TASK_PANEL: + mpParentWindow->SetFloatingMode(sal_False); + break; + + case MID_RESTORE_DEFAULT: + mpTabBar->RestoreHideFlags(); + break; + + default: + { + try + { + if (nIndex >= MID_FIRST_PANEL && nIndex<MID_FIRST_HIDE) + SwitchToDeck(mpTabBar->GetDeckIdForIndex(nIndex - MID_FIRST_PANEL)); + else if (nIndex >=MID_FIRST_HIDE) + mpTabBar->ToggleHideFlag(nIndex-MID_FIRST_HIDE); + } + catch (RuntimeException&) + { + } + } + break; + } + + return 1; +} + + + + +void SidebarController::CloseDeck (void) +{ + if ( ! mbIsDeckClosed) + { + mbIsDeckClosed = true; + if ( ! mpParentWindow->IsFloatingMode()) + mnSavedSidebarWidth = SetChildWindowWidth(TabBar::GetDefaultWidth()); + mpParentWindow->SetStyle(mpParentWindow->GetStyle() & ~WB_SIZEABLE); + + if (mpCurrentDeck) + mpCurrentDeck->Hide(); + + NotifyResize(); + } +} + + + + +void SidebarController::OpenDeck (void) +{ + if (mbIsDeckClosed) + { + mbIsDeckClosed = false; + SetChildWindowWidth(mnSavedSidebarWidth); + + if (mpCurrentDeck) + mpCurrentDeck->Show(); + + NotifyResize(); + } +} + + + + +FocusManager& SidebarController::GetFocusManager (void) +{ + return maFocusManager; +} + + + + +bool SidebarController::CanModifyChildWindowWidth (void) const +{ + SfxSplitWindow* pSplitWindow = dynamic_cast<SfxSplitWindow*>(mpParentWindow->GetParent()); + if (pSplitWindow == NULL) + { + OSL_ASSERT(pSplitWindow!=NULL); + return 0; + } + + sal_uInt16 nRow (0xffff); + sal_uInt16 nColumn (0xffff); + pSplitWindow->GetWindowPos(mpParentWindow, nColumn, nRow); + + sal_uInt16 nRowCount (pSplitWindow->GetWindowCount(nColumn)); + + return nRowCount == 1; +} + + + + +sal_Int32 SidebarController::SetChildWindowWidth (const sal_Int32 nNewWidth) +{ + SfxSplitWindow* pSplitWindow = dynamic_cast<SfxSplitWindow*>(mpParentWindow->GetParent()); + if (pSplitWindow == NULL) + return 0; + + sal_uInt16 nRow (0xffff); + sal_uInt16 nColumn (0xffff); + pSplitWindow->GetWindowPos(mpParentWindow, nColumn, nRow); + const long nColumnWidth (pSplitWindow->GetLineSize(nColumn)); + + Window* pWindow = mpParentWindow; + const Point aWindowPosition (pWindow->GetPosPixel()); + const Size aWindowSize (pWindow->GetSizePixel()); + + pSplitWindow->MoveWindow( + mpParentWindow, + Size(nNewWidth, aWindowSize.Height()), + nColumn, + nRow); + + return static_cast<sal_Int32>(nColumnWidth); +} + + + + +void SidebarController::RestrictWidth (void) +{ + SfxSplitWindow* pSplitWindow = dynamic_cast<SfxSplitWindow*>(mpParentWindow->GetParent()); + if (pSplitWindow != NULL) + { + const sal_uInt16 nId (pSplitWindow->GetItemId(mpParentWindow)); + const sal_uInt16 nSetId (pSplitWindow->GetSet(nId)); + // Minimum width is always that of the tabbar. + const sal_Int32 nMinimumWidth (TabBar::GetDefaultWidth()); + // Maximum width depends on whether the deck is open or closed. + const sal_Int32 nMaximumWidth ( + mbIsDeckClosed + ? TabBar::GetDefaultWidth() + : 400); + pSplitWindow->SetItemSizeRange( + nSetId, + Range(nMinimumWidth, nMaximumWidth)); + if (nMinimumWidth == nMaximumWidth) + pSplitWindow->SetItemSize(nSetId, nMinimumWidth); + } +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarController.hxx b/sfx2/source/sidebar/SidebarController.hxx new file mode 100644 index 000000000000..e6dcf10aa868 --- /dev/null +++ b/sfx2/source/sidebar/SidebarController.hxx @@ -0,0 +1,169 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_CONTROLLER_HXX +#define SFX_SIDEBAR_CONTROLLER_HXX + +#include "AsynchronousCall.hxx" +#include "Context.hxx" +#include "FocusManager.hxx" +#include "Panel.hxx" +#include "ResourceManager.hxx" +#include "TabBar.hxx" + +#include <vcl/menu.hxx> + +#include <com/sun/star/awt/XWindowPeer.hpp> +#include <com/sun/star/beans/XPropertyChangeListener.hpp> +#include <com/sun/star/ui/XContextChangeEventListener.hpp> +#include <com/sun/star/ui/XUIElement.hpp> +#include <com/sun/star/ui/XSidebar.hpp> + +#include <boost/noncopyable.hpp> +#include <cppuhelper/compbase3.hxx> +#include <cppuhelper/basemutex.hxx> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace +{ + typedef ::cppu::WeakComponentImplHelper3 < + css::ui::XContextChangeEventListener, + css::beans::XPropertyChangeListener, + css::ui::XSidebar + > SidebarControllerInterfaceBase; +} + +namespace sfx2 { namespace sidebar { + +class ContentPanelDescriptor; +class Deck; +class DeckDescriptor; +class SidebarDockingWindow; +class TabBar; +class TabBarConfiguration; + +class SidebarController + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public SidebarControllerInterfaceBase +{ +public: + SidebarController( + SidebarDockingWindow* pParentWindow, + const cssu::Reference<css::frame::XFrame>& rxFrame); + virtual ~SidebarController (void); + + // ui::XContextChangeEventListener + virtual void SAL_CALL notifyContextChangeEvent (const css::ui::ContextChangeEventObject& rEvent) + throw(cssu::RuntimeException); + + // XEventListener + virtual void SAL_CALL disposing (const css::lang::EventObject& rEventObject) + throw(cssu::RuntimeException); + + // beans::XPropertyChangeListener + virtual void SAL_CALL propertyChange (const css::beans::PropertyChangeEvent& rEvent) + throw(cssu::RuntimeException); + + // ui::XSidebar + virtual void SAL_CALL requestLayout (void) + throw(cssu::RuntimeException); + + void NotifyResize (void); + + void SwitchToDeck ( + const ::rtl::OUString& rsDeckId); + + /** Show only the tab bar, not the deck. + */ + void CloseDeck (void); + + /** Open the deck area and restore the parent window to its old width. + */ + void OpenDeck (void); + + FocusManager& GetFocusManager (void); + +private: + ::boost::scoped_ptr<Deck> mpCurrentDeck; + SidebarDockingWindow* mpParentWindow; + ::boost::scoped_ptr<TabBar> mpTabBar; + cssu::Reference<css::frame::XFrame> mxFrame; + Context maCurrentContext; + ::rtl::OUString msCurrentDeckId; + ::rtl::OUString msCurrentDeckTitle; + AsynchronousCall maPropertyChangeForwarder; + bool mbIsDeckClosed; + /** Before the deck is closed the sidebar width is saved into this variable, + so that it can be restored when the deck is reopended. + */ + sal_Int32 mnSavedSidebarWidth; + FocusManager maFocusManager; + + DECL_LINK(WindowEventHandler, VclWindowEvent*); + void UpdateConfigurations (const Context& rContext); + bool ArePanelSetsEqual ( + const SharedPanelContainer& rCurrentPanels, + const ResourceManager::PanelContextDescriptorContainer& rRequestedPanels); + cssu::Reference<css::ui::XUIElement> CreateUIElement ( + const cssu::Reference<css::awt::XWindowPeer>& rxWindow, + const ::rtl::OUString& rsImplementationURL); + SharedPanel CreatePanel ( + const ::rtl::OUString& rsPanelId, + ::Window* pParentWindow, + const ::rtl::OUString& rsMenuCommand); + void SwitchToDeck ( + const DeckDescriptor& rDeckDescriptor, + const Context& rContext); + void ShowPopupMenu ( + const Rectangle& rButtonBox, + const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData, + const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const; + void ShowDetailMenu (const ::rtl::OUString& rsMenuCommand) const; + ::boost::shared_ptr<PopupMenu> CreatePopupMenu ( + const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData, + const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const; + DECL_LINK(OnMenuItemSelected, Menu*); + void BroadcastPropertyChange (void); + + /** The close of the deck changes the width of the child window. + That is only possible if there is no other docking window docked above or below the sidebar. + Return whether the width of the child window can be modified. + */ + bool CanModifyChildWindowWidth (void) const; + + /** Set the child window container to a new width. + Return the old width. + */ + sal_Int32 SetChildWindowWidth (const sal_Int32 nNewWidth); + + void RestrictWidth (void); + + virtual void SAL_CALL disposing (void); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/SidebarDockingWindow.cxx b/sfx2/source/sidebar/SidebarDockingWindow.cxx new file mode 100644 index 000000000000..cc6c20e0f1fa --- /dev/null +++ b/sfx2/source/sidebar/SidebarDockingWindow.cxx @@ -0,0 +1,136 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "SidebarDockingWindow.hxx" +#include "sfx2/sidebar/SidebarChildWindow.hxx" +#include "SidebarController.hxx" + +#include "sfx2/bindings.hxx" +#include "sfx2/dispatch.hxx" +#include <tools/link.hxx> + +using namespace css; +using namespace cssu; + + +namespace sfx2 { namespace sidebar { + + +SidebarDockingWindow::SidebarDockingWindow( + SfxBindings* pBindings, + SidebarChildWindow& rChildWindow, + Window* pParent, + WinBits nBits) + : SfxDockingWindow(pBindings, &rChildWindow, pParent, nBits), + mpSidebarController() +{ + // Get the XFrame from the bindings. + if (pBindings==NULL || pBindings->GetDispatcher()==NULL) + { + OSL_ASSERT(pBindings!=NULL); + OSL_ASSERT(pBindings->GetDispatcher()!=NULL); + } + else + { + const SfxViewFrame* pViewFrame = pBindings->GetDispatcher()->GetFrame(); + const SfxFrame& rFrame = pViewFrame->GetFrame(); + mpSidebarController.set(new sfx2::sidebar::SidebarController(this, rFrame.GetFrameInterface())); + } +} + + + + +SidebarDockingWindow::~SidebarDockingWindow (void) +{ + DoDispose(); +} + + + + +void SidebarDockingWindow::DoDispose (void) +{ +} + + + + +void SidebarDockingWindow::GetFocus() +{ + mpSidebarController->GetFocusManager().GrabFocus(); +} + + + + +long SidebarDockingWindow::PreNotify (NotifyEvent& rEvent) +{ + switch (rEvent.GetType()) + { + case EVENT_KEYINPUT: + { + const KeyEvent* pKeyEvent = rEvent.GetKeyEvent(); + if (pKeyEvent != NULL) + return mpSidebarController->GetFocusManager().NotifyDockingWindowEvent(*pKeyEvent); + else + break; + } + + case EVENT_GETFOCUS: + OSL_TRACE(""); + break; + + } + + return SfxDockingWindow::PreNotify(rEvent); +} + + + + +SfxChildWindow* SidebarDockingWindow::GetChildWindow (void) +{ + return GetChildWindow_Impl(); +} + + + + +sal_Bool SidebarDockingWindow::Close (void) +{ + if (mpSidebarController.is()) + { + // Do not close the floating window. + // Dock it and close just the deck instead. + mpSidebarController->CloseDeck(); + SetFloatingMode(sal_False); + mpSidebarController->NotifyResize(); + return sal_False; + } + else + return SfxDockingWindow::Close(); +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarDockingWindow.hxx b/sfx2/source/sidebar/SidebarDockingWindow.hxx new file mode 100644 index 000000000000..a4d0697ceea3 --- /dev/null +++ b/sfx2/source/sidebar/SidebarDockingWindow.hxx @@ -0,0 +1,67 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_DOCKING_WINDOW_HXX +#define SFX_SIDEBAR_DOCKING_WINDOW_HXX + +#include "sfx2/dockwin.hxx" +#include "sfx2/dockwin.hxx" +#include "Sidebar.hxx" + +#include <rtl/ref.hxx> + +namespace sfx2 { namespace sidebar { + +class SidebarChildWindow; + +class SidebarController; + +class SidebarDockingWindow + : public SfxDockingWindow +{ +public: + SidebarDockingWindow( + SfxBindings* pBindings, + SidebarChildWindow& rChildWindow, + Window* pParent, + WinBits nBits); + virtual ~SidebarDockingWindow (void); + + virtual sal_Bool Close (void); + + SfxChildWindow* GetChildWindow (void); + +protected: + // Window overridables + virtual void GetFocus (void); + virtual long PreNotify (NotifyEvent& rEvent); + +private: + ::rtl::Reference<sfx2::sidebar::SidebarController> mpSidebarController; + + void DoDispose (void); +}; + + +} } // end of namespace sfx2::sidebar + + +#endif diff --git a/sfx2/source/sidebar/SidebarPanel.cxx b/sfx2/source/sidebar/SidebarPanel.cxx new file mode 100644 index 000000000000..7e378c316a67 --- /dev/null +++ b/sfx2/source/sidebar/SidebarPanel.cxx @@ -0,0 +1,175 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "SidebarPanel.hxx" + +#include "Panel.hxx" +#include "sfx2/sidebar/Theme.hxx" + +#include <vos/mutex.hxx> +#include <vcl/svapp.hxx> +#include <svl/smplhint.hxx> +#include <comphelper/componentcontext.hxx> +#include <comphelper/processfactory.hxx> +#include <com/sun/star/awt/XWindowPeer.hpp> + + +using namespace css; +using namespace cssu; + +namespace sfx2 { namespace sidebar { + +Reference<css::ui::XSidebarPanel> SidebarPanel::Create (Panel* pPanel) +{ + return Reference<css::ui::XSidebarPanel>(new SidebarPanel(pPanel)); +} + + + + +SidebarPanel::SidebarPanel(Panel* pPanel) + : SidebarPanelInterfaceBase(m_aMutex), + mpPanel(pPanel), + mxCanvas() +{ + if (mpPanel != NULL) + mpPanel->AddEventListener(LINK(this, SidebarPanel, HandleWindowEvent)); + else + { + mpPanel = NULL; + dispose(); + } +} + + + + +SidebarPanel::~SidebarPanel (void) +{ +} + + + + +void SAL_CALL SidebarPanel::disposing (const css::lang::EventObject& rEventObject) + throw(cssu::RuntimeException) +{ + (void)rEventObject; +} + + + + +void SAL_CALL SidebarPanel::disposing (void) +{ + if (mpPanel != NULL) + { + mpPanel->RemoveEventListener(LINK(this, SidebarPanel, HandleWindowEvent)); + mpPanel = NULL; + } +} + + + + +cssu::Reference<css::rendering::XCanvas> SAL_CALL SidebarPanel::getCanvas (void) + throw (cssu::RuntimeException) +{ + if ( ! mxCanvas.is()) + { + Sequence<Any> aArg (5); + + // common: first any is VCL pointer to window (for VCL canvas) + aArg[0] = makeAny(reinterpret_cast<sal_Int64>(mpPanel)); + aArg[1] = Any(); + aArg[2] = makeAny(::com::sun::star::awt::Rectangle()); + aArg[3] = makeAny(sal_False); + aArg[4] = makeAny(mpPanel->GetComponentInterface()); + + const ::comphelper::ComponentContext aComponentContext (::comphelper::getProcessServiceFactory()); + mxCanvas = Reference<rendering::XCanvas>( + aComponentContext.createComponentWithArguments( + "com.sun.star.rendering.VCLCanvas", + aArg), + UNO_QUERY); + } + + return mxCanvas; + +} + + + + +awt::Point SAL_CALL SidebarPanel::getPositionOnScreen (void) + throw (cssu::RuntimeException) +{ + awt::Point aAwtPoint; + + if (mpPanel != NULL) + { + ::vos::OGuard aGuard (Application::GetSolarMutex()); + + // mpPanel->GetPosPixel() + const Point aLocationOnScreen (mpPanel->OutputToAbsoluteScreenPixel(Point(0,0))); + + aAwtPoint.X = aLocationOnScreen.X(); + aAwtPoint.Y = aLocationOnScreen.Y(); + } + + return aAwtPoint; +} + + + + +Reference<beans::XPropertySet> SAL_CALL SidebarPanel::getThemeProperties (void) + throw (RuntimeException) +{ + return Theme::GetPropertySet(); +} + + + + +IMPL_LINK(SidebarPanel, HandleWindowEvent, VclWindowEvent*, pEvent) +{ + if (pEvent != NULL) + { + switch (pEvent->GetId()) + { + case SFX_HINT_DYING: + dispose(); + break; + + default: + break; + } + } + + return sal_True; +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarPanel.hxx b/sfx2/source/sidebar/SidebarPanel.hxx new file mode 100644 index 000000000000..dd4162096f31 --- /dev/null +++ b/sfx2/source/sidebar/SidebarPanel.hxx @@ -0,0 +1,78 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_SIDEBAR_PANEL_HXX +#define SFX_SIDEBAR_SIDEBAR_PANEL_HXX + +#include <tools/link.hxx> +#include <com/sun/star/ui/XSidebarPanel.hpp> + +#include <boost/noncopyable.hpp> +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace +{ + typedef ::cppu::WeakComponentImplHelper1 < + css::ui::XSidebarPanel + > SidebarPanelInterfaceBase; +} + + +class DockingWindow; +class VclWindowEvent; + +namespace sfx2 { namespace sidebar { + +class Panel; + +class SidebarPanel + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public SidebarPanelInterfaceBase +{ +public: + static cssu::Reference<css::ui::XSidebarPanel> Create (Panel* pPanel); + +protected: + SidebarPanel( + Panel* pPanel); + virtual ~SidebarPanel (void); + + virtual void SAL_CALL disposing (const css::lang::EventObject& rEventObject) + throw(cssu::RuntimeException); + + virtual void SAL_CALL disposing (void); + +private: + Panel* mpPanel; + cssu::Reference<css::rendering::XCanvas> mxCanvas; + + DECL_LINK(HandleWindowEvent, VclWindowEvent*); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/SidebarPanelBase.cxx b/sfx2/source/sidebar/SidebarPanelBase.cxx new file mode 100644 index 000000000000..5c0ecd5961fb --- /dev/null +++ b/sfx2/source/sidebar/SidebarPanelBase.cxx @@ -0,0 +1,252 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sfx2/sidebar/SidebarPanelBase.hxx" +#include "sfx2/sidebar/Theme.hxx" +#include "sfx2/sidebar/ILayoutableWindow.hxx" +#include "sfx2/sidebar/IContextChangeReceiver.hxx" +#include "sfx2/imagemgr.hxx" +#include <vcl/ctrl.hxx> +#include <comphelper/processfactory.hxx> + +#include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp> +#include <com/sun/star/ui/UIElementType.hpp> + +using namespace css; +using namespace cssu; + + +namespace sfx2 { namespace sidebar { + +Reference<ui::XUIElement> SidebarPanelBase::Create ( + const ::rtl::OUString& rsResourceURL, + const cssu::Reference<css::frame::XFrame>& rxFrame, + Window* pWindow, + const css::ui::LayoutSize& rLayoutSize) +{ + Reference<ui::XUIElement> xUIElement ( + new SidebarPanelBase( + rsResourceURL, + rxFrame, + pWindow, + rLayoutSize)); + return xUIElement; +} + + + + +SidebarPanelBase::SidebarPanelBase ( + const ::rtl::OUString& rsResourceURL, + const cssu::Reference<css::frame::XFrame>& rxFrame, + Window* pWindow, + const css::ui::LayoutSize& rLayoutSize) + : SidebarPanelBaseInterfaceBase(m_aMutex), + mxFrame(rxFrame), + mpControl(pWindow), + msResourceURL(rsResourceURL), + maLayoutSize(rLayoutSize) +{ + if (mxFrame.is()) + { + cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( + css::ui::ContextChangeEventMultiplexer::get( + ::comphelper::getProcessComponentContext())); + if (xMultiplexer.is()) + xMultiplexer->addContextChangeEventListener(this, mxFrame->getController()); + } + if (mpControl != NULL) + { + mpControl->SetBackground(Theme::GetWallpaper(Theme::Paint_PanelBackground)); + mpControl->Show(); + } +} + + + + +SidebarPanelBase::~SidebarPanelBase (void) +{ +} + + + + +void SAL_CALL SidebarPanelBase::disposing (void) + throw (cssu::RuntimeException) +{ + if (mpControl != NULL) + { + delete mpControl; + mpControl = NULL; + } + + if (mxFrame.is()) + { + cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( + css::ui::ContextChangeEventMultiplexer::get( + ::comphelper::getProcessComponentContext())); + if (xMultiplexer.is()) + xMultiplexer->removeAllContextChangeEventListeners(this); + mxFrame = NULL; + } +} + + + + +void SidebarPanelBase::SetControl (::Window* pControl) +{ + mpControl = pControl; +} + + + + +::Window* SidebarPanelBase::GetControl (void) const +{ + return mpControl; +} + + + + +// XContextChangeEventListener +void SAL_CALL SidebarPanelBase::notifyContextChangeEvent ( + const ui::ContextChangeEventObject& rEvent) + throw (cssu::RuntimeException) +{ + IContextChangeReceiver* pContextChangeReceiver + = dynamic_cast<IContextChangeReceiver*>(mpControl); + if (pContextChangeReceiver != NULL) + { + const EnumContext aContext( + EnumContext::GetApplicationEnum(rEvent.ApplicationName), + EnumContext::GetContextEnum(rEvent.ContextName)); + pContextChangeReceiver->HandleContextChange(aContext); + } +} + + + + +void SAL_CALL SidebarPanelBase::disposing ( + const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException) +{ + (void)rEvent; + + mxFrame = NULL; + mpControl = NULL; +} + + + + +cssu::Reference<css::frame::XFrame> SAL_CALL SidebarPanelBase::getFrame (void) + throw(cssu::RuntimeException) +{ + return mxFrame; +} + + + + +::rtl::OUString SAL_CALL SidebarPanelBase::getResourceURL (void) + throw(cssu::RuntimeException) +{ + return msResourceURL; +} + + + + +sal_Int16 SAL_CALL SidebarPanelBase::getType (void) + throw(cssu::RuntimeException) +{ + return ui::UIElementType::TOOLPANEL; +} + + + + +Reference<XInterface> SAL_CALL SidebarPanelBase::getRealInterface (void) + throw(cssu::RuntimeException) +{ + return Reference<XInterface>(static_cast<XWeak*>(this)); +} + + + + +Reference<accessibility::XAccessible> SAL_CALL SidebarPanelBase::createAccessible ( + const Reference<accessibility::XAccessible>& rxParentAccessible) + throw(cssu::RuntimeException) +{ + (void)rxParentAccessible; + + // Not yet implemented. + return NULL; +} + + + + +Reference<awt::XWindow> SAL_CALL SidebarPanelBase::getWindow (void) + throw(cssu::RuntimeException) +{ + if (mpControl != NULL) + return Reference<awt::XWindow>( + mpControl->GetComponentInterface(), + UNO_QUERY); + else + return NULL; +} + + + + +ui::LayoutSize SAL_CALL SidebarPanelBase::getHeightForWidth (const sal_Int32 nWidth) + throw(cssu::RuntimeException) +{ + if (maLayoutSize.Minimum >= 0) + return maLayoutSize; + else + { + ILayoutableWindow* pLayoutableWindow = dynamic_cast<ILayoutableWindow*>(mpControl); + if (pLayoutableWindow != NULL) + return pLayoutableWindow->GetHeightForWidth(nWidth); + else if (mpControl != NULL) + { + const sal_Int32 nHeight (mpControl->GetSizePixel().Height()); + return ui::LayoutSize(nHeight,nHeight,nHeight); + } + } + + return ui::LayoutSize(0,0,0); +} + + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarResource.hxx b/sfx2/source/sidebar/SidebarResource.hxx new file mode 100644 index 000000000000..851987fa40dc --- /dev/null +++ b/sfx2/source/sidebar/SidebarResource.hxx @@ -0,0 +1,39 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_RESOURCE_HXX +#define SFX_SIDEBAR_RESOURCE_HXX + + +#include "Sidebar.hrc" +#include <sfx2/sfxresid.hxx> +#include <tools/rc.hxx> + + +class SidebarResource : public Resource +{ +public: + SidebarResource (void) : Resource(SfxResId(RID_SIDEBAR_RESOURCE)){} + ~SidebarResource (void) { FreeResource(); } +}; + + +#endif diff --git a/sfx2/source/sidebar/SidebarToolBox.cxx b/sfx2/source/sidebar/SidebarToolBox.cxx new file mode 100644 index 000000000000..d858b9a8d16c --- /dev/null +++ b/sfx2/source/sidebar/SidebarToolBox.cxx @@ -0,0 +1,159 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "SidebarToolBox.hxx" +#include "ToolBoxBackground.hxx" +#include "sfx2/sidebar/Theme.hxx" +#include "Tools.hxx" + +#include <vcl/gradient.hxx> + + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + + +SidebarToolBox::SidebarToolBox ( + Window* pParentWindow, + const ResId& rResId) + : ToolBox(pParentWindow, rResId), + mbParentIsBorder(false), + maItemSeparator(Theme::GetImage(Theme::Image_ToolBoxItemSeparator)) +{ + SetBackground(Wallpaper()); + SetPaintTransparent(true); +#ifdef DEBUG + SetText(A2S("SidebarToolBox")); +#endif +} + + + + +SidebarToolBox::~SidebarToolBox (void) +{ +} + + + + +void SidebarToolBox::SetBorderWindow (const Window* pBorderWindow) +{ + if (pBorderWindow != GetParent()) + { + OSL_ASSERT("SetBorderWindow can only handle parent as border window"); + return; + } + + if ( ! mbParentIsBorder) + { + mbParentIsBorder = true; + + SetPosSizePixel ( + GetPosPixel().X(), + GetPosPixel().Y(), + GetSizePixel().Width(), + GetSizePixel().Height(), + WINDOW_POSSIZE_ALL); + } +} + + + + +void SidebarToolBox::Paint (const Rectangle& rRect) +{ + ToolBox::Paint(rRect); + + if (Theme::GetBoolean(Theme::Bool_UseToolBoxItemSeparator)) + { + const sal_Int32 nSeparatorY ((GetSizePixel().Height() - maItemSeparator.GetSizePixel().Height())/2); + const sal_uInt16 nItemCount (GetItemCount()); + int nLastRight (-1); + for (sal_uInt16 nIndex=0; nIndex<nItemCount; ++nIndex) + { + const Rectangle aItemBoundingBox (GetItemPosRect(nIndex)); + if (nLastRight >= 0) + { + const int nSeparatorX ((nLastRight + aItemBoundingBox.Left() - 1) / 2); + DrawImage(Point(nSeparatorX,nSeparatorY), maItemSeparator); + } + + nLastRight = aItemBoundingBox.Right(); + } + } +} + + + + +Point SidebarToolBox::GetPosPixel (void) const +{ + if (mbParentIsBorder) + { + const Point aParentPoint (GetParent()->GetPosPixel()); + const Point aChildPoint (ToolBox::GetPosPixel()); + return Point( + aParentPoint.X() + aChildPoint.X(), + aParentPoint.Y() + aChildPoint.Y()); + } + else + return ToolBox::GetPosPixel(); +} + + + + +void SidebarToolBox::SetPosSizePixel ( + long nX, + long nY, + long nWidth, + long nHeight, + sal_uInt16 nFlags) +{ + if (mbParentIsBorder) + { + const Point aRelativePosition (static_cast<ToolBoxBackground*>(GetParent())->SetToolBoxChild( + this, + nX, + nY, + nWidth, + nHeight, + nFlags)); + ToolBox::SetPosSizePixel( + aRelativePosition.X(), + aRelativePosition.Y(), + nWidth, + nHeight, + nFlags); + } + else + ToolBox::SetPosSizePixel(nX, nY, nWidth, nHeight, nFlags); +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarToolBox.hxx b/sfx2/source/sidebar/SidebarToolBox.hxx new file mode 100644 index 000000000000..db9826c8ea52 --- /dev/null +++ b/sfx2/source/sidebar/SidebarToolBox.hxx @@ -0,0 +1,56 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_TOOLBOX_HXX +#define SFX_SIDEBAR_TOOLBOX_HXX + +#include "vcl/toolbox.hxx" + + +namespace sfx2 { namespace sidebar { + +class SidebarToolBox + : public ToolBox +{ +public: + SidebarToolBox (Window* pParentWindow, const ResId& rResId); + virtual ~SidebarToolBox (void); + + void SetBorderWindow (const Window* pBorderWindow); + virtual void Paint (const Rectangle& rRect); + + virtual Point GetPosPixel (void) const; + virtual void SetPosSizePixel ( + long nX, + long nY, + long nWidth, + long nHeight, + sal_uInt16 nFlags); + +private: + bool mbParentIsBorder; + Image maItemSeparator; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx new file mode 100644 index 000000000000..a0f513855af1 --- /dev/null +++ b/sfx2/source/sidebar/TabBar.cxx @@ -0,0 +1,401 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "TabBar.hxx" +#include "TabItem.hxx" +#include "sidebar/ControlFactory.hxx" +#include "DeckDescriptor.hxx" +#include "Paint.hxx" +#include "sfx2/sidebar/Theme.hxx" +#include "Tools.hxx" +#include "FocusManager.hxx" + +#include <vcl/gradient.hxx> +#include <vcl/image.hxx> +#include <vcl/wrkwin.hxx> +#include <comphelper/processfactory.hxx> +#include <comphelper/componentcontext.hxx> +#include <tools/svborder.hxx> + +#include <com/sun/star/graphic/XGraphicProvider.hpp> + + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + + + +namespace sfx2 { namespace sidebar { + +TabBar::TabBar ( + Window* pParentWindow, + const Reference<frame::XFrame>& rxFrame, + const ::boost::function<void(const ::rtl::OUString&)>& rDeckActivationFunctor, + const PopupMenuProvider& rPopupMenuProvider) + : Window(pParentWindow, WB_DIALOGCONTROL), + mxFrame(rxFrame), + mpMenuButton(ControlFactory::CreateMenuButton(this)), + maItems(), + maDeckActivationFunctor(rDeckActivationFunctor), + maPopupMenuProvider(rPopupMenuProvider) +{ + SetBackground(Theme::GetPaint(Theme::Paint_TabBarBackground).GetWallpaper()); + + mpMenuButton->SetModeImage( + Theme::GetImage(Theme::Image_TabBarMenu), + Theme::IsHighContrastMode() + ? BMP_COLOR_HIGHCONTRAST + : BMP_COLOR_NORMAL); + mpMenuButton->SetClickHdl(LINK(this, TabBar, OnToolboxClicked)); + Layout(); + +#ifdef DEBUG + SetText(A2S("TabBar")); +#endif +} + + + + +TabBar::~TabBar (void) +{ +} + + + + +void TabBar::Paint (const Rectangle& rUpdateArea) +{ + Window::Paint(rUpdateArea); + + const sal_Int32 nHorizontalPadding (Theme::GetInteger(Theme::Int_TabMenuSeparatorPadding)); + SetLineColor(Theme::GetColor(Theme::Color_TabMenuSeparator)); + DrawLine( + Point(nHorizontalPadding, mnMenuSeparatorY), + Point(GetSizePixel().Width()-nHorizontalPadding, mnMenuSeparatorY)); +} + + + + +sal_Int32 TabBar::GetDefaultWidth (void) +{ + return Theme::GetInteger(Theme::Int_TabItemWidth) + + Theme::GetInteger(Theme::Int_TabBarLeftPadding) + + Theme::GetInteger(Theme::Int_TabBarRightPadding); +} + + + + +void TabBar::SetDecks ( + const ResourceManager::IdContainer& rDeckIds) +{ + // Remove the current buttons. + { + for(ItemContainer::iterator + iItem(maItems.begin()), iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + iItem->mpButton.reset(); + } + maItems.clear(); + } + + maItems.resize(rDeckIds.size()); + sal_Int32 nIndex (0); + for (ResourceManager::IdContainer::const_iterator + iDeckId(rDeckIds.begin()), + iEnd(rDeckIds.end()); + iDeckId!=iEnd; + ++iDeckId) + { + const DeckDescriptor* pDescriptor = ResourceManager::Instance().GetDeckDescriptor(*iDeckId); + if (pDescriptor == NULL) + { + OSL_ASSERT(pDescriptor!=NULL); + continue; + } + + Item& rItem (maItems[nIndex++]); + rItem.msDeckId = pDescriptor->msId; + rItem.mpButton.reset(CreateTabItem(*pDescriptor)); + rItem.mpButton->SetClickHdl(LINK(&rItem, TabBar::Item, HandleClick)); + rItem.maDeckActivationFunctor = maDeckActivationFunctor; + rItem.mbIsHiddenByDefault = false; + rItem.mbIsHidden = ! pDescriptor->mbIsEnabled; + } + + UpdateButtonIcons(); + Layout(); +} + + + + +void TabBar::UpdateButtonIcons (void) +{ + const BmpColorMode eColorMode ( + Theme::IsHighContrastMode() + ? BMP_COLOR_HIGHCONTRAST + : BMP_COLOR_NORMAL); + + mpMenuButton->SetModeImage(Theme::GetImage(Theme::Image_TabBarMenu), eColorMode); + + for(ItemContainer::const_iterator + iItem(maItems.begin()), iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + const DeckDescriptor* pDeckDescriptor = ResourceManager::Instance().GetDeckDescriptor(iItem->msDeckId); + if (pDeckDescriptor != NULL) + iItem->mpButton->SetModeImage( + GetItemImage(*pDeckDescriptor), + eColorMode); + } + + Invalidate(); +} + + + + +void TabBar::Layout (void) +{ + const SvBorder aPadding ( + Theme::GetInteger(Theme::Int_TabBarLeftPadding), + Theme::GetInteger(Theme::Int_TabBarTopPadding), + Theme::GetInteger(Theme::Int_TabBarRightPadding), + Theme::GetInteger(Theme::Int_TabBarBottomPadding)); + sal_Int32 nX (aPadding.Top()); + sal_Int32 nY (aPadding.Left()); + const Size aTabItemSize ( + Theme::GetInteger(Theme::Int_TabItemWidth), + Theme::GetInteger(Theme::Int_TabItemHeight)); + + // Place the menu button and the separator. + if (mpMenuButton != NULL) + { + mpMenuButton->SetPosSizePixel( + Point(nX,nY), + aTabItemSize); + mpMenuButton->Show(); + nY += mpMenuButton->GetSizePixel().Height() + 1 + Theme::GetInteger(Theme::Int_TabMenuPadding); + mnMenuSeparatorY = nY - Theme::GetInteger(Theme::Int_TabMenuPadding)/2 - 1; + } + + // Place the deck selection buttons. + for(ItemContainer::const_iterator + iItem(maItems.begin()), iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + Button& rButton (*iItem->mpButton); + rButton.Show( ! iItem->mbIsHidden); + + if (iItem->mbIsHidden) + continue; + + // Place and size the icon. + rButton.SetPosSizePixel( + Point(nX,nY), + aTabItemSize); + rButton.Show(); + + nY += rButton.GetSizePixel().Height() + 1 + aPadding.Bottom(); + } + Invalidate(); +} + + + + +void TabBar::HighlightDeck (const ::rtl::OUString& rsDeckId) +{ + for (ItemContainer::const_iterator iItem(maItems.begin()),iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + if (iItem->msDeckId.equals(rsDeckId)) + { + iItem->mpButton->Check(); + break; + } + } +} + + + + +void TabBar::DataChanged (const DataChangedEvent& rDataChangedEvent) +{ + SetBackground(Theme::GetPaint(Theme::Paint_TabBarBackground).GetWallpaper()); + UpdateButtonIcons(); + + Window::DataChanged(rDataChangedEvent); +} + + + + +RadioButton* TabBar::CreateTabItem (const DeckDescriptor& rDeckDescriptor) +{ + RadioButton* pItem = ControlFactory::CreateTabItem(this); + pItem->SetHelpText(rDeckDescriptor.msHelpText); + pItem->SetQuickHelpText(rDeckDescriptor.msHelpText); + + return pItem; +} + + + +Image TabBar::GetItemImage (const DeckDescriptor& rDeckDescriptor) const +{ + return Tools::GetImage( + rDeckDescriptor.msIconURL, + rDeckDescriptor.msHighContrastIconURL, + mxFrame); +} + + + + + +IMPL_LINK(TabBar::Item, HandleClick, Button*, EMPTYARG) +{ + maDeckActivationFunctor(msDeckId); + return 1; +} + + + + +const ::rtl::OUString TabBar::GetDeckIdForIndex (const sal_Int32 nIndex) const +{ + if (nIndex<0 || static_cast<size_t>(nIndex)>=maItems.size()) + throw RuntimeException(); + else + return maItems[nIndex].msDeckId; +} + + + + +void TabBar::ToggleHideFlag (const sal_Int32 nIndex) +{ + if (nIndex<0 || static_cast<size_t>(nIndex)>=maItems.size()) + throw RuntimeException(); + else + { + maItems[nIndex].mbIsHidden = ! maItems[nIndex].mbIsHidden; + ResourceManager::Instance().SetIsDeckEnabled( + maItems[nIndex].msDeckId, + maItems[nIndex].mbIsHidden); + Layout(); + } +} + + + + +void TabBar::RestoreHideFlags (void) +{ + bool bNeedsLayout (false); + for(ItemContainer::iterator iItem(maItems.begin()),iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + if (iItem->mbIsHidden != iItem->mbIsHiddenByDefault) + { + iItem->mbIsHidden = iItem->mbIsHiddenByDefault; + bNeedsLayout = true; + } + } + if (bNeedsLayout) + Layout(); +} + + + + +void TabBar::UpdateFocusManager (FocusManager& rFocusManager) +{ + ::std::vector<Button*> aButtons; + aButtons.reserve(maItems.size()+1); + + aButtons.push_back(mpMenuButton.get()); + for(ItemContainer::const_iterator + iItem(maItems.begin()), iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + aButtons.push_back(iItem->mpButton.get()); + } + rFocusManager.SetButtons(aButtons); +} + + + + +IMPL_LINK(TabBar, OnToolboxClicked, void*, EMPTYARG) +{ + ::std::vector<DeckMenuData> aSelectionData; + ::std::vector<DeckMenuData> aShowData; + + for(ItemContainer::const_iterator iItem(maItems.begin()),iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + const DeckDescriptor* pDeckDescriptor = ResourceManager::Instance().GetDeckDescriptor(iItem->msDeckId); + if (pDeckDescriptor != NULL) + { + if ( ! iItem->mbIsHidden) + aSelectionData.push_back( + DeckMenuData( + pDeckDescriptor->msTitle, + pDeckDescriptor->msId, + iItem->mpButton->IsChecked())); + + aShowData.push_back( + DeckMenuData( + pDeckDescriptor->msTitle, + pDeckDescriptor->msId, + !iItem->mbIsHidden)); + } + } + + maPopupMenuProvider( + Rectangle( + mpMenuButton->GetPosPixel(), + mpMenuButton->GetSizePixel()), + aSelectionData, + aShowData); + + return 0; +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/TabBar.hxx b/sfx2/source/sidebar/TabBar.hxx new file mode 100644 index 000000000000..53db790b0d4a --- /dev/null +++ b/sfx2/source/sidebar/TabBar.hxx @@ -0,0 +1,124 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_TAB_BAR_HXX +#define SFX_SIDEBAR_TAB_BAR_HXX + +#include "DeckDescriptor.hxx" +#include "ResourceManager.hxx" + +#include <vcl/menu.hxx> +#include <vcl/window.hxx> + +#include <com/sun/star/frame/XFrame.hpp> +#include <boost/function.hpp> +#include <boost/tuple/tuple.hpp> +#include <boost/scoped_ptr.hpp> + +class Button; +class RadioButton; + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + +class FocusManager; +class TabBarConfiguration; +class TabItem; + +/** The tab bar is the container for the individual tabs. +*/ +class TabBar + : public Window +{ +public: + /** DeckMenuData has entries for display name, deck id, and a flag: + - isCurrentDeck for the deck selection data + - isEnabled for the show/hide menu + */ + typedef ::boost::tuple<rtl::OUString,rtl::OUString,bool> DeckMenuData; + typedef ::boost::function<void( + const Rectangle&, + const ::std::vector<DeckMenuData>& rDeckSelectionData, + const ::std::vector<DeckMenuData>& rDeckShowData)> PopupMenuProvider; + TabBar ( + Window* pParentWindow, + const cssu::Reference<css::frame::XFrame>& rxFrame, + const ::boost::function<void(const ::rtl::OUString&rsDeckId)>& rDeckActivationFunctor, + const PopupMenuProvider& rPopupMenuProvider); + virtual ~TabBar (void); + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void DataChanged (const DataChangedEvent& rDataChangedEvent); + + static sal_Int32 GetDefaultWidth (void); + + void SetDecks ( + const ResourceManager::IdContainer& rDeckIds); + void HighlightDeck (const ::rtl::OUString& rsDeckId); + void AddPopupMenuEntries ( + PopupMenu& rMenu, + const sal_Int32 nFirstIndex); + void AddCustomizationMenuEntries ( + PopupMenu& rMenu, + const sal_Int32 nFirstIndex); + const ::rtl::OUString GetDeckIdForIndex (const sal_Int32 nIndex) const; + void ToggleHideFlag (const sal_Int32 nIndex); + void RestoreHideFlags (void); + + void UpdateFocusManager (FocusManager& rFocusManager); + +private: + cssu::Reference<css::frame::XFrame> mxFrame; + ::boost::scoped_ptr<Button> mpMenuButton; + class Item + { + public: + DECL_LINK(HandleClick, Button*); + ::boost::shared_ptr<RadioButton> mpButton; + ::rtl::OUString msDeckId; + ::boost::function<void(const ::rtl::OUString&rsDeckId)> maDeckActivationFunctor; + bool mbIsHidden; + bool mbIsHiddenByDefault; + }; + typedef ::std::vector<Item> ItemContainer; + ItemContainer maItems; + const ::boost::function<void(const ::rtl::OUString&rsDeckId)> maDeckActivationFunctor; + sal_Int32 mnMenuSeparatorY; + PopupMenuProvider maPopupMenuProvider; + + RadioButton* CreateTabItem (const DeckDescriptor& rDeckDescriptor); + Image GetItemImage (const DeckDescriptor& rDeskDescriptor) const; + void Layout (void); + void UpdateButtonIcons (void); + + ::boost::shared_ptr<PopupMenu> CreatePopupMenu (void) const; + void ShowPopupMenu (void) const; + DECL_LINK(OnToolboxClicked, void*); + +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/TabItem.cxx b/sfx2/source/sidebar/TabItem.cxx new file mode 100644 index 000000000000..f60798f34720 --- /dev/null +++ b/sfx2/source/sidebar/TabItem.cxx @@ -0,0 +1,150 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "TabItem.hxx" + +#include "DrawHelper.hxx" +#include "Paint.hxx" +#include "Tools.hxx" + +#include "sfx2/sidebar/Theme.hxx" + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + + +TabItem::TabItem (Window* pParentWindow) + : ImageRadioButton(pParentWindow), + mbIsLeftButtonDown(false), + mePaintType(PT_Theme) +{ + SetStyle(GetStyle() | WB_TABSTOP | WB_DIALOGCONTROL | WB_NOPOINTERFOCUS); + SetBackground(Theme::GetPaint(Theme::Paint_TabBarBackground).GetWallpaper()); +#ifdef DEBUG + SetText(A2S("TabItem")); +#endif +} + + + + +TabItem::~TabItem (void) +{ +} + + + + +void TabItem::Paint (const Rectangle& rUpdateArea) +{ + OSL_TRACE("TabItem::Paint"); + switch(mePaintType) + { + case PT_Theme: + default: + { + const bool bIsSelected (IsChecked()); + const bool bIsHighlighted (IsMouseOver() || HasFocus()); + DrawHelper::DrawRoundedRectangle( + *this, + Rectangle(Point(0,0), GetSizePixel()), + Theme::GetInteger(Theme::Int_ButtonCornerRadius), + bIsHighlighted||bIsSelected + ? Theme::GetColor(Theme::Color_TabItemBorder) + : Color(0xffffffff), + bIsHighlighted + ? Theme::GetPaint(Theme::Paint_TabItemBackgroundHighlight) + : Theme::GetPaint(Theme::Paint_TabItemBackgroundNormal)); + + const Image aIcon (Button::GetModeImage(Theme::IsHighContrastMode() + ? BMP_COLOR_HIGHCONTRAST + : BMP_COLOR_NORMAL)); + const Size aIconSize (aIcon.GetSizePixel()); + const Point aIconLocation( + (GetSizePixel().Width() - aIconSize.Width())/2, + (GetSizePixel().Height() - aIconSize.Height())/2); + DrawImage( + aIconLocation, + aIcon); + break; + } + case PT_Native: + Button::Paint(rUpdateArea); + // DrawImage(maIconPosition, maIcon); + break; + } +} + + + + +void TabItem::MouseMove (const MouseEvent& rEvent) +{ + if (rEvent.IsEnterWindow() || rEvent.IsLeaveWindow()) + Invalidate(); + ImageRadioButton::MouseMove(rEvent); +} + + + + +void TabItem::MouseButtonDown (const MouseEvent& rMouseEvent) +{ + if (rMouseEvent.IsLeft()) + { + mbIsLeftButtonDown = true; + CaptureMouse(); + Invalidate(); + } +} + + + + +void TabItem::MouseButtonUp (const MouseEvent& rMouseEvent) +{ + if (IsMouseCaptured()) + ReleaseMouse(); + + if (rMouseEvent.IsLeft()) + { + if (mbIsLeftButtonDown) + { + Check(); + Click(); + GetParent()->Invalidate(); + } + } + if (mbIsLeftButtonDown) + { + mbIsLeftButtonDown = false; + Invalidate(); + } +} + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/TabItem.hxx b/sfx2/source/sidebar/TabItem.hxx new file mode 100644 index 000000000000..1938c86f33a1 --- /dev/null +++ b/sfx2/source/sidebar/TabItem.hxx @@ -0,0 +1,58 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_TAB_ITEM_HXX +#define SFX_SIDEBAR_TAB_ITEM_HXX + +#include "vcl/button.hxx" + +#include "DeckDescriptor.hxx" + +class Window; + +namespace sfx2 { namespace sidebar { + +/** A single button in the The tab bar. +*/ +class TabItem + : public ImageRadioButton +{ +public: + TabItem (Window* pParentWindow); + virtual ~TabItem (void); + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void MouseMove (const MouseEvent& rEvent); + virtual void MouseButtonDown (const MouseEvent& rMouseEvent); + virtual void MouseButtonUp (const MouseEvent& rMouseEvent); + +private: + bool mbIsLeftButtonDown; + enum PaintType { + PT_Native, + PT_Theme + } mePaintType; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Theme.cxx b/sfx2/source/sidebar/Theme.cxx new file mode 100644 index 000000000000..aa578f3ac035 --- /dev/null +++ b/sfx2/source/sidebar/Theme.cxx @@ -0,0 +1,1174 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "sfx2/sidebar/Theme.hxx" +#include "Paint.hxx" +#include "SidebarResource.hxx" +#include "Tools.hxx" + +#include <tools/svborder.hxx> +#include <tools/rc.hxx> +#include <vcl/svapp.hxx> + +using namespace css; +using namespace cssu; + + +namespace sfx2 { namespace sidebar { + +::rtl::Reference<Theme> Theme::mpInstance; + + + + +Theme& Theme::GetCurrentTheme (void) +{ + if ( ! mpInstance.is()) + { + mpInstance.set(new Theme()); + mpInstance->InitializeTheme(); + } + return *mpInstance; +} + + + + +Theme::Theme (void) + : ThemeInterfaceBase(m_aMutex), + maImages(), + maColors(), + maPaints(), + maIntegers(), + maBooleans(), + mbIsHighContrastMode(Application::GetSettings().GetStyleSettings().GetHighContrastMode()), + mbIsHighContrastModeSetManually(false), + maPropertyNameToIdMap(), + maPropertyIdToNameMap(), + maRawValues(), + maChangeListeners(), + maVetoableListeners() + +{ + SetupPropertyMaps(); +} + + + + +Theme::~Theme (void) +{ +} + + + + +Image Theme::GetImage (const ThemeItem eItem) +{ + const PropertyType eType (GetPropertyType(eItem)); + OSL_ASSERT(eType==PT_Image); + const sal_Int32 nIndex (GetIndex(eItem, eType)); + const Theme& rTheme (GetCurrentTheme()); + return rTheme.maImages[nIndex]; +} + + + + +Color Theme::GetColor (const ThemeItem eItem) +{ + const PropertyType eType (GetPropertyType(eItem)); + OSL_ASSERT(eType==PT_Color || eType==PT_Paint); + const sal_Int32 nIndex (GetIndex(eItem, eType)); + const Theme& rTheme (GetCurrentTheme()); + if (eType == PT_Color) + return rTheme.maColors[nIndex]; + else if (eType == PT_Paint) + return rTheme.maPaints[nIndex].GetColor(); + else + return COL_WHITE; +} + + + + +const Paint& Theme::GetPaint (const ThemeItem eItem) +{ + const PropertyType eType (GetPropertyType(eItem)); + OSL_ASSERT(eType==PT_Paint); + const sal_Int32 nIndex (GetIndex(eItem, eType)); + const Theme& rTheme (GetCurrentTheme()); + return rTheme.maPaints[nIndex]; +} + + + + +const Wallpaper Theme::GetWallpaper (const ThemeItem eItem) +{ + return GetPaint(eItem).GetWallpaper(); +} + + + + +sal_Int32 Theme::GetInteger (const ThemeItem eItem) +{ + const PropertyType eType (GetPropertyType(eItem)); + OSL_ASSERT(eType==PT_Integer); + const sal_Int32 nIndex (GetIndex(eItem, eType)); + const Theme& rTheme (GetCurrentTheme()); + return rTheme.maIntegers[nIndex]; +} + + + + +bool Theme::GetBoolean (const ThemeItem eItem) +{ + const PropertyType eType (GetPropertyType(eItem)); + OSL_ASSERT(eType==PT_Boolean); + const sal_Int32 nIndex (GetIndex(eItem, eType)); + const Theme& rTheme (GetCurrentTheme()); + return rTheme.maBooleans[nIndex]; +} + + + + +Rectangle Theme::GetRectangle (const ThemeItem eItem) +{ + const PropertyType eType (GetPropertyType(eItem)); + OSL_ASSERT(eType==PT_Rectangle); + const sal_Int32 nIndex (GetIndex(eItem, eType)); + const Theme& rTheme (GetCurrentTheme()); + return rTheme.maRectangles[nIndex]; +} + + + + +bool Theme::IsHighContrastMode (void) +{ + const Theme& rTheme (GetCurrentTheme()); + return rTheme.mbIsHighContrastMode; +} + + + + +void Theme::HandleDataChange (void) +{ + Theme& rTheme (GetCurrentTheme()); + + if ( ! rTheme.mbIsHighContrastModeSetManually) + { + // Do not modify mbIsHighContrastMode when it was manually set. + GetCurrentTheme().mbIsHighContrastMode = Application::GetSettings().GetStyleSettings().GetHighContrastMode(); + rTheme.maRawValues[Bool_IsHighContrastModeActive] = Any(GetCurrentTheme().mbIsHighContrastMode); + } + + GetCurrentTheme().UpdateTheme(); +} + + + + +void Theme::InitializeTheme (void) +{ + setPropertyValue( + maPropertyIdToNameMap[Bool_UseSymphonyIcons], + Any(false)); + setPropertyValue( + maPropertyIdToNameMap[Bool_UseSystemColors], + Any(false)); +} + + + + +void Theme::UpdateTheme (void) +{ + SidebarResource aLocalResource; + + try + { + const StyleSettings& rStyle (Application::GetSettings().GetStyleSettings()); + const bool bUseSystemColors (GetBoolean(Bool_UseSystemColors)); + +#define Alternatives(n,hc,sys) (mbIsHighContrastMode ? hc : (bUseSystemColors ? sys : n)) + + const Color aBaseBackgroundColor (rStyle.GetDialogColor()); + Color aBorderColor (aBaseBackgroundColor); + aBorderColor.DecreaseLuminance(15); + Color aSecondColor (aBaseBackgroundColor); + aSecondColor.DecreaseLuminance(15); + + setPropertyValue( + maPropertyIdToNameMap[Paint_DeckBackground], + Any(sal_Int32(rStyle.GetMenuColor().GetRGBColor()))); + + setPropertyValue( + maPropertyIdToNameMap[Paint_DeckTitleBarBackground], + Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); + setPropertyValue( + maPropertyIdToNameMap[Int_DeckLeftPadding], + Any(sal_Int32(2))); + setPropertyValue( + maPropertyIdToNameMap[Int_DeckTopPadding], + Any(sal_Int32(2))); + setPropertyValue( + maPropertyIdToNameMap[Int_DeckRightPadding], + Any(sal_Int32(2))); + setPropertyValue( + maPropertyIdToNameMap[Int_DeckBottomPadding], + Any(sal_Int32(2))); + setPropertyValue( + maPropertyIdToNameMap[Int_DeckBorderSize], + Any(sal_Int32(1))); + setPropertyValue( + maPropertyIdToNameMap[Int_DeckSeparatorHeight], + Any(sal_Int32(1))); + setPropertyValue( + maPropertyIdToNameMap[Int_ButtonCornerRadius], + Any(sal_Int32(3))); + setPropertyValue( + maPropertyIdToNameMap[Color_DeckTitleFont], + Any(sal_Int32(rStyle.GetFontColor().GetRGBColor()))); + setPropertyValue( + maPropertyIdToNameMap[Int_DeckTitleBarHeight], + Any(sal_Int32(Alternatives( + 26, + 26, + rStyle.GetFloatTitleHeight())))); + setPropertyValue( + maPropertyIdToNameMap[Paint_PanelBackground], + Any(sal_Int32(rStyle.GetDialogColor().GetRGBColor()))); + // Any(sal_Int32(mbIsHighContrastMode ? 0x000000 : + // 0xffffff))); + + setPropertyValue( + maPropertyIdToNameMap[Paint_PanelTitleBarBackground], + Any(Tools::VclToAwtGradient(Gradient( + GRADIENT_LINEAR, + aSecondColor.GetRGBColor(), + aBaseBackgroundColor.GetRGBColor() + )))); + setPropertyValue( + maPropertyIdToNameMap[Color_PanelTitleFont], + Any(sal_Int32(mbIsHighContrastMode ? 0x00ff00 : 0x262626))); + setPropertyValue( + maPropertyIdToNameMap[Int_PanelTitleBarHeight], + Any(sal_Int32(Alternatives( + 26, + 26, + rStyle.GetTitleHeight())))); + setPropertyValue( + maPropertyIdToNameMap[Paint_TabBarBackground], + Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); + setPropertyValue( + maPropertyIdToNameMap[Int_TabBarLeftPadding], + Any(sal_Int32(2))); + setPropertyValue( + maPropertyIdToNameMap[Int_TabBarTopPadding], + Any(sal_Int32(2))); + setPropertyValue( + maPropertyIdToNameMap[Int_TabBarRightPadding], + Any(sal_Int32(2))); + setPropertyValue( + maPropertyIdToNameMap[Int_TabBarBottomPadding], + Any(sal_Int32(2))); + + setPropertyValue( + maPropertyIdToNameMap[Int_TabMenuPadding], + Any(sal_Int32(6))); + setPropertyValue( + maPropertyIdToNameMap[Color_TabMenuSeparator], + Any(sal_Int32(aBorderColor.GetRGBColor()))); + setPropertyValue( + maPropertyIdToNameMap[Int_TabMenuSeparatorPadding], + Any(sal_Int32(7))); + + setPropertyValue( + maPropertyIdToNameMap[Int_TabItemWidth], + Any(sal_Int32(32))); + setPropertyValue( + maPropertyIdToNameMap[Int_TabItemHeight], + Any(sal_Int32(32))); + setPropertyValue( + maPropertyIdToNameMap[Color_TabItemBorder], + Any(sal_Int32(rStyle.GetActiveBorderColor().GetRGBColor()))); + // mbIsHighContrastMode ? 0x00ff00 : 0xbfbfbf))); + + setPropertyValue( + maPropertyIdToNameMap[Paint_DropDownBackground], + Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); + setPropertyValue( + maPropertyIdToNameMap[Color_DropDownBorder], + Any(sal_Int32(rStyle.GetActiveBorderColor().GetRGBColor()))); + + setPropertyValue( + maPropertyIdToNameMap[Color_Highlight], + Any(sal_Int32(rStyle.GetHighlightColor().GetRGBColor()))); + setPropertyValue( + maPropertyIdToNameMap[Color_HighlightText], + Any(sal_Int32(rStyle.GetHighlightTextColor().GetRGBColor()))); + + setPropertyValue( + maPropertyIdToNameMap[Paint_TabItemBackgroundNormal], + Any()); + setPropertyValue( + maPropertyIdToNameMap[Paint_TabItemBackgroundHighlight], + Any(sal_Int32(rStyle.GetActiveTabColor().GetRGBColor()))); + // mbIsHighContrastMode ? 0x000000 : 0x00ffffff))); + + setPropertyValue( + maPropertyIdToNameMap[Paint_HorizontalBorder], + Any(sal_Int32(aBorderColor.GetRGBColor()))); + // mbIsHighContrastMode ? 0x00ff00 : 0xe4e4e4))); + setPropertyValue( + maPropertyIdToNameMap[Paint_VerticalBorder], + Any(sal_Int32(aBorderColor.GetRGBColor()))); + // mbIsHighContrastMode ? 0x00ff00 : 0xe4e4e4))); + + setPropertyValue( + maPropertyIdToNameMap[Image_Grip], + Any( + mbIsHighContrastMode + ? A2S("private:graphicrepository/sfx2/res/grip_hc.png") + : A2S("private:graphicrepository/sfx2/res/grip.png"))); + setPropertyValue( + maPropertyIdToNameMap[Image_Expand], + Any( + mbIsHighContrastMode + ? A2S("private:graphicrepository/res/plus_sch.png") + : A2S("private:graphicrepository/res/plus.png"))); + setPropertyValue( + maPropertyIdToNameMap[Image_Collapse], + Any( + mbIsHighContrastMode + ? A2S("private:graphicrepository/res/minus_sch.png") + : A2S("private:graphicrepository/res/minus.png"))); + setPropertyValue( + maPropertyIdToNameMap[Image_TabBarMenu], + Any( + mbIsHighContrastMode + ? A2S("private:graphicrepository/sfx2/res/menu_hc.png") + : A2S("private:graphicrepository/sfx2/res/symphony/open_more.png"))); + setPropertyValue( + maPropertyIdToNameMap[Image_PanelMenu], + Any( + mbIsHighContrastMode + ? A2S("private:graphicrepository/sfx2/res/symphony/morebutton.png") + : A2S("private:graphicrepository/sfx2/res/symphony/morebutton_h.png"))); + setPropertyValue( + maPropertyIdToNameMap[Image_Closer], + Any(A2S("private:graphicrepository/sfx2/res/closedoc.png"))); + setPropertyValue( + maPropertyIdToNameMap[Image_ToolBoxItemSeparator], + Any( + A2S("private:graphicrepository/sfx2/res/separator.png"))); + + // ToolBox + + /* + // Separator style + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBackground], + Any(sal_Int32(rStyle.GetMenuColor().GetRGBColor()))); + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBorderTopLeft], + Any()); + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBorderCenterCorners], + Any()); + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBorderBottomRight], + Any()); + setPropertyValue( + maPropertyIdToNameMap[Rect_ToolBoxPadding], + Any(awt::Rectangle(2,2,2,2))); + setPropertyValue( + maPropertyIdToNameMap[Rect_ToolBoxBorder], + Any(awt::Rectangle(0,0,0,0))); + setPropertyValue( + maPropertyIdToNameMap[Bool_UseToolBoxItemSeparator], + Any(true)); + + */ + + // Gradient style + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBackground], + Any(Tools::VclToAwtGradient(Gradient( + GRADIENT_LINEAR, + Color(0xf2f2f2), + Color(0xfefefe) + )))); + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBorderTopLeft], + mbIsHighContrastMode + ? Any(util::Color(sal_uInt32(0x00ff00))) + : Any(util::Color(sal_uInt32(0xf2f2f2)))); + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBorderCenterCorners], + mbIsHighContrastMode + ? Any(util::Color(sal_uInt32(0x00ff00))) + : Any(util::Color(sal_uInt32(0xf2f2f2)))); + setPropertyValue( + maPropertyIdToNameMap[Paint_ToolBoxBorderBottomRight], + mbIsHighContrastMode + ? Any(util::Color(sal_uInt32(0x00ff00))) + : Any(util::Color(sal_uInt32(0xf2f2f2)))); + setPropertyValue( + maPropertyIdToNameMap[Rect_ToolBoxPadding], + Any(awt::Rectangle(2,2,2,2))); + setPropertyValue( + maPropertyIdToNameMap[Rect_ToolBoxBorder], + Any(awt::Rectangle(1,1,1,1))); + setPropertyValue( + maPropertyIdToNameMap[Bool_UseToolBoxItemSeparator], + Any(false)); + } + catch(beans::UnknownPropertyException& rException) + { + OSL_TRACE("unknown property: %s", + OUStringToOString( + rException.Message, + RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_ASSERT(false); + } +} + + + + +void SAL_CALL Theme::disposing (void) +{ + ChangeListeners aListeners; + maChangeListeners.swap(aListeners); + + const lang::EventObject aEvent (static_cast<XWeak*>(this)); + + for (ChangeListeners::const_iterator + iContainer(maChangeListeners.begin()), + iContainerEnd(maChangeListeners.end()); + iContainerEnd!=iContainerEnd; + ++iContainerEnd) + { + for (ChangeListenerContainer::const_iterator + iListener(iContainer->second.begin()), + iEnd(iContainer->second.end()); + iListener!=iEnd; + ++iListener) + { + try + { + (*iListener)->disposing(aEvent); + } + catch(const Exception&) + { + } + } + } +} + + + + +Reference<beans::XPropertySet> Theme::GetPropertySet (void) +{ + return Reference<beans::XPropertySet>(static_cast<XWeak*>(&GetCurrentTheme()), UNO_QUERY); +} + + + + +Reference<beans::XPropertySetInfo> SAL_CALL Theme::getPropertySetInfo (void) + throw(cssu::RuntimeException) +{ + return Reference<beans::XPropertySetInfo>(this); +} + + + + +void SAL_CALL Theme::setPropertyValue ( + const ::rtl::OUString& rsPropertyName, + const cssu::Any& rValue) + throw(cssu::RuntimeException) +{ + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + throw beans::UnknownPropertyException(rsPropertyName, NULL); + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + throw beans::UnknownPropertyException(rsPropertyName, NULL); + + const ThemeItem eItem (iId->second); + + if (rValue == maRawValues[eItem]) + { + // Value is not different from the one in the property + // set => nothing to do. + return; + } + + const Any aOldValue (maRawValues[eItem]); + + const beans::PropertyChangeEvent aEvent( + static_cast<XWeak*>(this), + rsPropertyName, + sal_False, + eItem, + aOldValue, + rValue); + + if (DoVetoableListenersVeto(GetVetoableListeners(__AnyItem, false), aEvent)) + return; + if (DoVetoableListenersVeto(GetVetoableListeners(eItem, false), aEvent)) + return; + + maRawValues[eItem] = rValue; + ProcessNewValue(rValue, eItem, eType); + + BroadcastPropertyChange(GetChangeListeners(__AnyItem, false), aEvent); + BroadcastPropertyChange(GetChangeListeners(eItem, false), aEvent); +} + + + + +Any SAL_CALL Theme::getPropertyValue ( + const ::rtl::OUString& rsPropertyName) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException) +{ + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + throw beans::UnknownPropertyException(); + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + throw beans::UnknownPropertyException(); + + const ThemeItem eItem (iId->second); + + return maRawValues[eItem]; +} + + + + +void SAL_CALL Theme::addPropertyChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException) +{ + ThemeItem eItem (__AnyItem); + if (rsPropertyName.getLength() > 0) + { + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + throw beans::UnknownPropertyException(); + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + throw beans::UnknownPropertyException(); + + eItem = iId->second; + } + ChangeListenerContainer* pListeners = GetChangeListeners(eItem, true); + if (pListeners != NULL) + pListeners->push_back(rxListener); +} + + + + +void SAL_CALL Theme::removePropertyChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException) +{ + ThemeItem eItem (__AnyItem); + if (rsPropertyName.getLength() > 0) + { + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + throw beans::UnknownPropertyException(); + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + throw beans::UnknownPropertyException(); + + eItem = iId->second; + } + ChangeListenerContainer* pContainer = GetChangeListeners(eItem, false); + if (pContainer != NULL) + { + ChangeListenerContainer::iterator iListener (::std::find(pContainer->begin(), pContainer->end(), rxListener)); + if (iListener != pContainer->end()) + { + pContainer->erase(iListener); + + // Remove the listener container when empty. + if (pContainer->empty()) + maChangeListeners.erase(eItem); + } + } +} + + + + +void SAL_CALL Theme::addVetoableChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException) +{ + ThemeItem eItem (__AnyItem); + if (rsPropertyName.getLength() > 0) + { + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + throw beans::UnknownPropertyException(); + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + throw beans::UnknownPropertyException(); + + eItem = iId->second; + } + VetoableListenerContainer* pListeners = GetVetoableListeners(eItem, true); + if (pListeners != NULL) + pListeners->push_back(rxListener); +} + + + + +void SAL_CALL Theme::removeVetoableChangeListener( + const ::rtl::OUString& rsPropertyName, + const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener) + throw(css::beans::UnknownPropertyException, + css::lang::WrappedTargetException, + cssu::RuntimeException) +{ + ThemeItem eItem (__AnyItem); + if (rsPropertyName.getLength() > 0) + { + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + throw beans::UnknownPropertyException(); + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + throw beans::UnknownPropertyException(); + + eItem = iId->second; + } + VetoableListenerContainer* pContainer = GetVetoableListeners(eItem, false); + if (pContainer != NULL) + { + VetoableListenerContainer::iterator iListener (::std::find(pContainer->begin(), pContainer->end(), rxListener)); + if (iListener != pContainer->end()) + { + pContainer->erase(iListener); + // Remove container when empty. + if (pContainer->empty()) + maVetoableListeners.erase(eItem); + } + } +} + + + + +cssu::Sequence<css::beans::Property> SAL_CALL Theme::getProperties (void) + throw(cssu::RuntimeException) +{ + ::std::vector<beans::Property> aProperties; + + for (sal_Int32 nItem(__Begin),nEnd(__End); nItem!=nEnd; ++nItem) + { + const ThemeItem eItem (static_cast<ThemeItem>(nItem)); + const PropertyType eType (GetPropertyType(eItem)); + if (eType == PT_Invalid) + continue; + + const beans::Property aProperty( + maPropertyIdToNameMap[eItem], + eItem, + GetCppuType(eType), + 0); + aProperties.push_back(aProperty); + } + + return cssu::Sequence<css::beans::Property>( + &aProperties.front(), + aProperties.size()); +} + + + + +beans::Property SAL_CALL Theme::getPropertyByName (const ::rtl::OUString& rsPropertyName) + throw(css::beans::UnknownPropertyException, + cssu::RuntimeException) +{ + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + throw beans::UnknownPropertyException(); + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + throw beans::UnknownPropertyException(); + + const ThemeItem eItem (iId->second); + + return beans::Property( + rsPropertyName, + eItem, + GetCppuType(eType), + 0); +} + + + + +sal_Bool SAL_CALL Theme::hasPropertyByName (const ::rtl::OUString& rsPropertyName) + throw(cssu::RuntimeException) +{ + PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); + if (iId == maPropertyNameToIdMap.end()) + return sal_False; + + const PropertyType eType (GetPropertyType(iId->second)); + if (eType == PT_Invalid) + return sal_False; + + return sal_True; +} + + + + +void Theme::SetupPropertyMaps (void) +{ + maPropertyIdToNameMap.resize(__Post_Rect); + maImages.resize(__Image_Color - __Pre_Image - 1); + maColors.resize(__Color_Paint - __Image_Color - 1); + maPaints.resize(__Paint_Int - __Color_Paint - 1); + maIntegers.resize(__Int_Bool - __Paint_Int - 1); + maBooleans.resize(__Bool_Rect - __Int_Bool - 1); + maRectangles.resize(__Post_Rect - __Bool_Rect - 1); + + #define AddEntry(e) maPropertyNameToIdMap[A2S(#e)]=e; maPropertyIdToNameMap[e]=A2S(#e) + + AddEntry(Image_Grip); + AddEntry(Image_Expand); + AddEntry(Image_Collapse); + AddEntry(Image_TabBarMenu); + AddEntry(Image_PanelMenu); + AddEntry(Image_ToolBoxItemSeparator); + AddEntry(Image_Closer); + + AddEntry(Color_DeckTitleFont); + AddEntry(Color_PanelTitleFont); + AddEntry(Color_TabMenuSeparator); + AddEntry(Color_TabItemBorder); + AddEntry(Color_DropDownBorder); + AddEntry(Color_Highlight); + AddEntry(Color_HighlightText); + + AddEntry(Paint_DeckBackground); + AddEntry(Paint_DeckTitleBarBackground); + AddEntry(Paint_PanelBackground); + AddEntry(Paint_PanelTitleBarBackground); + AddEntry(Paint_TabBarBackground); + AddEntry(Paint_TabItemBackgroundNormal); + AddEntry(Paint_TabItemBackgroundHighlight); + AddEntry(Paint_HorizontalBorder); + AddEntry(Paint_VerticalBorder); + AddEntry(Paint_ToolBoxBackground); + AddEntry(Paint_ToolBoxBorderTopLeft); + AddEntry(Paint_ToolBoxBorderCenterCorners); + AddEntry(Paint_ToolBoxBorderBottomRight); + AddEntry(Paint_DropDownBackground); + + AddEntry(Int_DeckTitleBarHeight); + AddEntry(Int_DeckBorderSize); + AddEntry(Int_DeckSeparatorHeight); + AddEntry(Int_PanelTitleBarHeight); + AddEntry(Int_TabMenuPadding); + AddEntry(Int_TabMenuSeparatorPadding); + AddEntry(Int_TabItemWidth); + AddEntry(Int_TabItemHeight); + AddEntry(Int_DeckLeftPadding); + AddEntry(Int_DeckTopPadding); + AddEntry(Int_DeckRightPadding); + AddEntry(Int_DeckBottomPadding); + AddEntry(Int_TabBarLeftPadding); + AddEntry(Int_TabBarTopPadding); + AddEntry(Int_TabBarRightPadding); + AddEntry(Int_TabBarBottomPadding); + AddEntry(Int_ButtonCornerRadius); + + AddEntry(Bool_UseSymphonyIcons); + AddEntry(Bool_UseSystemColors); + AddEntry(Bool_UseToolBoxItemSeparator); + AddEntry(Bool_IsHighContrastModeActive); + + AddEntry(Rect_ToolBoxPadding); + AddEntry(Rect_ToolBoxBorder); + + #undef AddEntry + + maRawValues.resize(maPropertyIdToNameMap.size()); +} + + + + +Theme::PropertyType Theme::GetPropertyType (const ThemeItem eItem) +{ + switch(eItem) + { + case Image_Grip: + case Image_Expand: + case Image_Collapse: + case Image_TabBarMenu: + case Image_PanelMenu: + case Image_ToolBoxItemSeparator: + case Image_Closer: + return PT_Image; + + case Color_DeckTitleFont: + case Color_PanelTitleFont: + case Color_TabMenuSeparator: + case Color_TabItemBorder: + case Color_DropDownBorder: + case Color_Highlight: + case Color_HighlightText: + return PT_Color; + + case Paint_DeckBackground: + case Paint_DeckTitleBarBackground: + case Paint_PanelBackground: + case Paint_PanelTitleBarBackground: + case Paint_TabBarBackground: + case Paint_TabItemBackgroundNormal: + case Paint_TabItemBackgroundHighlight: + case Paint_HorizontalBorder: + case Paint_VerticalBorder: + case Paint_ToolBoxBackground: + case Paint_ToolBoxBorderTopLeft: + case Paint_ToolBoxBorderCenterCorners: + case Paint_ToolBoxBorderBottomRight: + case Paint_DropDownBackground: + return PT_Paint; + + case Int_DeckTitleBarHeight: + case Int_DeckBorderSize: + case Int_DeckSeparatorHeight: + case Int_PanelTitleBarHeight: + case Int_TabMenuPadding: + case Int_TabMenuSeparatorPadding: + case Int_TabItemWidth: + case Int_TabItemHeight: + case Int_DeckLeftPadding: + case Int_DeckTopPadding: + case Int_DeckRightPadding: + case Int_DeckBottomPadding: + case Int_TabBarLeftPadding: + case Int_TabBarTopPadding: + case Int_TabBarRightPadding: + case Int_TabBarBottomPadding: + case Int_ButtonCornerRadius: + return PT_Integer; + + case Bool_UseSymphonyIcons: + case Bool_UseSystemColors: + case Bool_UseToolBoxItemSeparator: + case Bool_IsHighContrastModeActive: + return PT_Boolean; + + case Rect_ToolBoxBorder: + case Rect_ToolBoxPadding: + return PT_Rectangle; + + default: + return PT_Invalid; + } +} + + + + +cssu::Type Theme::GetCppuType (const PropertyType eType) +{ + switch(eType) + { + case PT_Image: + return getCppuType((rtl::OUString*)NULL); + + case PT_Color: + return getCppuType((sal_uInt32*)NULL); + + case PT_Paint: + return getCppuVoidType(); + + case PT_Integer: + return getCppuType((sal_Int32*)NULL); + + case PT_Boolean: + return getCppuType((sal_Bool*)NULL); + + case PT_Rectangle: + return getCppuType((awt::Rectangle*)NULL); + + case PT_Invalid: + default: + return getCppuVoidType(); + } +} + + + + +sal_Int32 Theme::GetIndex (const ThemeItem eItem, const PropertyType eType) +{ + switch(eType) + { + case PT_Image: + return eItem - __Pre_Image-1; + case PT_Color: + return eItem - __Image_Color-1; + case PT_Paint: + return eItem - __Color_Paint-1; + case PT_Integer: + return eItem - __Paint_Int-1; + case PT_Boolean: + return eItem - __Int_Bool-1; + case PT_Rectangle: + return eItem - __Bool_Rect-1; + + default: + OSL_ASSERT(false); + return 0; + } +} + + + + +Theme::VetoableListenerContainer* Theme::GetVetoableListeners ( + const ThemeItem eItem, + const bool bCreate) +{ + VetoableListeners::iterator iContainer (maVetoableListeners.find(eItem)); + if (iContainer != maVetoableListeners.end()) + return &iContainer->second; + else if (bCreate) + { + maVetoableListeners[eItem] = VetoableListenerContainer(); + return &maVetoableListeners[eItem]; + } + else + return NULL; +} + + + + +Theme::ChangeListenerContainer* Theme::GetChangeListeners ( + const ThemeItem eItem, + const bool bCreate) +{ + ChangeListeners::iterator iContainer (maChangeListeners.find(eItem)); + if (iContainer != maChangeListeners.end()) + return &iContainer->second; + else if (bCreate) + { + maChangeListeners[eItem] = ChangeListenerContainer(); + return &maChangeListeners[eItem]; + } + else + return NULL; +} + + + + +bool Theme::DoVetoableListenersVeto ( + const VetoableListenerContainer* pListeners, + const beans::PropertyChangeEvent& rEvent) const +{ + if (pListeners == NULL) + return false; + + VetoableListenerContainer aListeners (*pListeners); + try + { + for (VetoableListenerContainer::const_iterator + iListener(aListeners.begin()), + iEnd(aListeners.end()); + iListener!=iEnd; + ++iListener) + { + (*iListener)->vetoableChange(rEvent); + } + } + catch(const beans::PropertyVetoException&) + { + return true; + } + catch(const Exception&) + { + // Ignore any other errors (such as disposed listeners). + } + return false; +} + + + + +void Theme::BroadcastPropertyChange ( + const ChangeListenerContainer* pListeners, + const beans::PropertyChangeEvent& rEvent) const +{ + if (pListeners == NULL) + return; + + const ChangeListenerContainer aListeners (*pListeners); + try + { + for (ChangeListenerContainer::const_iterator + iListener(aListeners.begin()), + iEnd(aListeners.end()); + iListener!=iEnd; + ++iListener) + { + (*iListener)->propertyChange(rEvent); + } + } + catch(const Exception&) + { + // Ignore any errors (such as disposed listeners). + } +} + + + + +void Theme::ProcessNewValue ( + const Any& rValue, + const ThemeItem eItem, + const PropertyType eType) +{ + const sal_Int32 nIndex (GetIndex (eItem, eType)); + switch (eType) + { + case PT_Image: + { + ::rtl::OUString sURL; + if (rValue >>= sURL) + { + maImages[nIndex] = Tools::GetImage(sURL, NULL); + } + break; + } + case PT_Color: + { + sal_Int32 nColorValue (0); + if (rValue >>= nColorValue) + { + maColors[nIndex] = Color(nColorValue); + } + break; + } + case PT_Paint: + { + maPaints[nIndex] = Paint::Create(rValue); + break; + } + case PT_Integer: + { + sal_Int32 nValue (0); + if (rValue >>= nValue) + { + maIntegers[nIndex] = nValue; + } + break; + } + case PT_Boolean: + { + sal_Bool nValue (0); + if (rValue >>= nValue) + { + maBooleans[nIndex] = (nValue==sal_True); + if (eItem == Bool_IsHighContrastModeActive) + { + mbIsHighContrastModeSetManually = true; + mbIsHighContrastMode = maBooleans[nIndex]; + HandleDataChange(); + } + else if (eItem == Bool_UseSystemColors) + { + HandleDataChange(); + } + } + break; + } + case PT_Rectangle: + { + awt::Rectangle aBox; + if (rValue >>= aBox) + { + maRectangles[nIndex] = Rectangle( + aBox.X, + aBox.Y, + aBox.Width, + aBox.Height); + } + break; + } + case PT_Invalid: + OSL_ASSERT(eType != PT_Invalid); + throw RuntimeException(); + } +} + + + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/TitleBar.cxx b/sfx2/source/sidebar/TitleBar.cxx new file mode 100644 index 000000000000..9a94f20cc54f --- /dev/null +++ b/sfx2/source/sidebar/TitleBar.cxx @@ -0,0 +1,198 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "TitleBar.hxx" +#include "Paint.hxx" + +#include <tools/svborder.hxx> +#include <vcl/gradient.hxx> +#include <vcl/lineinfo.hxx> + +ToolbarValue::~ToolbarValue (void) {} + + +namespace sfx2 { namespace sidebar { + +TitleBar::TitleBar ( + const ::rtl::OUString& rsTitle, + Window* pParentWindow, + const sidebar::Paint& rInitialBackgroundPaint) + : Window(pParentWindow), + maToolBox(this), + msTitle(rsTitle) +{ + SetBackground(rInitialBackgroundPaint.GetWallpaper()); + + maToolBox.SetSelectHdl(LINK(this, TitleBar, SelectionHandler)); +} + + + + +TitleBar::~TitleBar (void) +{ +} + + + + +void TitleBar::SetTitle (const ::rtl::OUString& rsTitle) +{ + msTitle = rsTitle; + Invalidate(); +} + + + + +void TitleBar::Paint (const Rectangle& rUpdateArea) +{ + (void)rUpdateArea; + + // Paint title bar background. + Size aWindowSize (GetOutputSizePixel()); + Rectangle aTitleBarBox( + 0, + 0, + aWindowSize.Width(), + aWindowSize.Height() + ); + + PaintDecoration(aTitleBarBox); + const Rectangle aTitleBox (GetTitleArea(aTitleBarBox)); + PaintTitle(aTitleBox); + if (HasFocus()) + PaintFocus(aTitleBox); +} + + + + +void TitleBar::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetBackground(GetBackgroundPaint().GetWallpaper()); +} + + + + +void TitleBar::SetPosSizePixel ( + long nX, + long nY, + long nWidth, + long nHeight, + sal_uInt16 nFlags) +{ + Window::SetPosSizePixel(nX,nY,nWidth,nHeight,nFlags); + + // Place the toolbox. + const sal_Int32 nToolBoxWidth (maToolBox.GetItemPosRect(0).GetWidth()); + maToolBox.SetPosSizePixel(nWidth-nToolBoxWidth,0,nToolBoxWidth,nHeight); + maToolBox.Show(); +} + + + + +ToolBox& TitleBar::GetToolBox (void) +{ + return maToolBox; +} + + + + +void TitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex) +{ + (void)nItemIndex; + // Any real processing has to be done in derived class. +} + + + + +void TitleBar::PaintTitle (const Rectangle& rTitleBox) +{ + Push(PUSH_FONT | PUSH_TEXTCOLOR); + + Font aFont(GetFont()); + SetFont(aFont); + + // Paint title bar text. + SetTextColor(GetTextColor()); + DrawText( + rTitleBox, + msTitle, + TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER); + + Pop(); +} + + + + +void TitleBar::PaintFocus (const Rectangle& rFocusBox) +{ + Push(PUSH_FONT | PUSH_TEXTCOLOR | PUSH_LINECOLOR | PUSH_FILLCOLOR); + + const Rectangle aTextBox ( + GetTextRect( + rFocusBox, + msTitle, + TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER)); + const Rectangle aLargerTextBox ( + aTextBox.Left() - 2, + aTextBox.Top() - 2, + aTextBox.Right() + 2, + aTextBox.Bottom() + 2); + + LineInfo aDottedStyle (LINE_DASH); + aDottedStyle.SetDashCount(0); + aDottedStyle.SetDotCount(1); + aDottedStyle.SetDotLen(1); + aDottedStyle.SetDistance(1); + + SetFillColor(); + SetLineColor(COL_BLACK); + DrawPolyLine(Polygon(aLargerTextBox), aDottedStyle); + + Pop(); +} + + + + +IMPL_LINK(TitleBar, SelectionHandler, ToolBox*, pToolBox) +{ + (void)pToolBox; + OSL_ASSERT(&maToolBox==pToolBox); + const sal_uInt16 nItemId (maToolBox.GetHighlightItemId()); + + HandleToolBoxItemClick(nItemId); + + return sal_True; +} + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/TitleBar.hxx b/sfx2/source/sidebar/TitleBar.hxx new file mode 100644 index 000000000000..a1136414183a --- /dev/null +++ b/sfx2/source/sidebar/TitleBar.hxx @@ -0,0 +1,76 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_TITLE_BAR_HXX +#define SFX_SIDEBAR_TITLE_BAR_HXX + +#include "Paint.hxx" + +#include <vcl/window.hxx> +#include <vcl/toolbox.hxx> + + +namespace sfx2 { namespace sidebar { + +class TitleBar + : public Window +{ +public: + TitleBar ( + const ::rtl::OUString& rsTitle, + Window* pParentWindow, + const sidebar::Paint& rInitialBackgroundPaint); + virtual ~TitleBar (void); + + void SetTitle (const ::rtl::OUString& rsTitle); + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void DataChanged (const DataChangedEvent& rEvent); + virtual void SetPosSizePixel ( + long nX, + long nY, + long nWidth, + long nHeight, + sal_uInt16 nFlags = WINDOW_POSSIZE_ALL); + + ToolBox& GetToolBox (void); + +protected: + ToolBox maToolBox; + + virtual Rectangle GetTitleArea (const Rectangle& rTitleBarBox) = 0; + virtual void PaintDecoration (const Rectangle& rTitleBarBox) = 0; + virtual void PaintFocus (const Rectangle& rFocusBox); + virtual sidebar::Paint GetBackgroundPaint (void) = 0; + virtual Color GetTextColor (void) = 0; + virtual void HandleToolBoxItemClick (const sal_uInt16 nItemIndex); + +private: + ::rtl::OUString msTitle; + + void PaintTitle (const Rectangle& rTitleBox); + DECL_LINK(SelectionHandler, ToolBox*); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/ToolBox.hxx b/sfx2/source/sidebar/ToolBox.hxx new file mode 100755 index 000000000000..259fa5dfbe5b --- /dev/null +++ b/sfx2/source/sidebar/ToolBox.hxx @@ -0,0 +1,56 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_TOOLBOX_HXX +#define SFX_SIDEBAR_TOOLBOX_HXX + +#include "vcl/toolbox.hxx" + + +namespace sfx2 { namespace sidebar { + +class ToolBox + : public ::ToolBox +{ +public: + MenuButton (Window* pParentWindow); + virtual ~MenuButton (void); + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void MouseMove (const MouseEvent& rEvent); + virtual void MouseButtonDown (const MouseEvent& rMouseEvent); + virtual void MouseButtonUp (const MouseEvent& rMouseEvent); + +protected: + using CheckBox::FillLayoutData; + +private: + bool mbIsLeftButtonDown; + enum PaintType { + PT_Native, + PT_Theme + } mePaintType; +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/ToolBoxBackground.cxx b/sfx2/source/sidebar/ToolBoxBackground.cxx new file mode 100755 index 000000000000..c182c2cb0740 --- /dev/null +++ b/sfx2/source/sidebar/ToolBoxBackground.cxx @@ -0,0 +1,154 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "ToolBoxBackground.hxx" +#include "Paint.hxx" +#include "DrawHelper.hxx" +#include "Tools.hxx" +#include "sfx2/sidebar/Theme.hxx" + +#include <vcl/toolbox.hxx> +#include <vcl/gradient.hxx> +#include <svl/smplhint.hxx> + + +namespace sfx2 { namespace sidebar { + +ToolBoxBackground::ToolBoxBackground (Window* pParentWindow) + : Window(pParentWindow, WB_DIALOGCONTROL), + maPadding(Tools::RectangleToSvBorder(Theme::GetRectangle(Theme::Rect_ToolBoxPadding))) +{ + SetBackground(Theme::GetPaint(Theme::Paint_ToolBoxBackground).GetWallpaper()); + +#ifdef DEBUG + SetText(A2S("ToolBoxBackground")); +#endif +} + + + + +ToolBoxBackground::~ToolBoxBackground (void) +{ + Link aEventListener (LINK(this, ToolBoxBackground, WindowEventHandler)); + if (GetChildCount() > 0) + GetChild(0)->RemoveEventListener(aEventListener); +} + + + + +Point ToolBoxBackground::SetToolBoxChild ( + ToolBox* pChild, + long nX, + long nY, + long nWidth, + long nHeight, + sal_uInt16 nFlags) +{ + if (pChild == NULL) + { + OSL_ASSERT(pChild!=NULL); + return Point(nX, nY); + } + + Link aEventListener (LINK(this, ToolBoxBackground, WindowEventHandler)); + pChild->AddEventListener(aEventListener); + + SetPosSizePixel( + nX - maPadding.Left(), + nY - maPadding.Top(), + nWidth + maPadding.Left() + maPadding.Right(), + nHeight + maPadding.Top() + maPadding.Bottom(), + nFlags); + return Point( + maPadding.Left(), + maPadding.Top()); +} + + + + +void ToolBoxBackground::Paint (const Rectangle& rRect) +{ + Window::Paint(rRect); + + Rectangle aBox (Point(0,0), GetSizePixel()); + + const sidebar::Paint aTopLeftBorderPaint (Theme::GetPaint(Theme::Paint_ToolBoxBorderTopLeft)); + const sidebar::Paint aCenterBorderPaint (Theme::GetPaint(Theme::Paint_ToolBoxBorderCenterCorners)); + const sidebar::Paint aBottomRightBorderPaint (Theme::GetPaint(Theme::Paint_ToolBoxBorderBottomRight)); + const Rectangle aBorderSize (Theme::GetRectangle(Theme::Rect_ToolBoxBorder)); + DrawHelper::DrawBevelBorder ( + *this, + aBox, + Tools::RectangleToSvBorder(aBorderSize), + aTopLeftBorderPaint, + aCenterBorderPaint, + aBottomRightBorderPaint); +} + + + + +void ToolBoxBackground::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetBackground(Theme::GetPaint(Theme::Paint_ToolBoxBackground).GetWallpaper()); + maPadding = Tools::RectangleToSvBorder(Theme::GetRectangle(Theme::Rect_ToolBoxPadding)); +} + + + + +IMPL_LINK(ToolBoxBackground, WindowEventHandler, VclWindowEvent*, pEvent) +{ + if (pEvent != NULL) + { + switch (pEvent->GetId()) + { + case VCLEVENT_WINDOW_SHOW: + if (GetChild(0)->IsVisible()) + Show(); + break; + + case VCLEVENT_WINDOW_HIDE: + if ( ! GetChild(0)->IsVisible()) + Hide(); + break; + + case SFX_HINT_DYING: + doLazyDelete(); + break; + + default: + break; + } + } + + return sal_True; +} + + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/ToolBoxBackground.hxx b/sfx2/source/sidebar/ToolBoxBackground.hxx new file mode 100755 index 000000000000..387384b533d6 --- /dev/null +++ b/sfx2/source/sidebar/ToolBoxBackground.hxx @@ -0,0 +1,68 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_TOOLBOX_BACKGROUND_HXX +#define SFX_SIDEBAR_TOOLBOX_BACKGROUND_HXX + +#include "vcl/window.hxx" + +#include <tools/svborder.hxx> + + +class ToolBox; + +namespace sfx2 { namespace sidebar { + +class ToolBoxBackground + : public Window +{ +public: + ToolBoxBackground (Window* pParentWindow); + virtual ~ToolBoxBackground (void); + + /** Call this method once to + a) let the ToolBoxBackground object know which ToolBox to + monitor and + b) so that position and sizes can be set up. + @return + The relative position of the child. + */ + Point SetToolBoxChild ( + ToolBox* pChild, + long nX, + long nY, + long nWidth, + long nHeight, + sal_uInt16 nFlags); + + virtual void Paint (const Rectangle& rRect); + virtual void DataChanged (const DataChangedEvent& rEvent); + +private: + SvBorder maPadding; + + DECL_LINK(WindowEventHandler, VclWindowEvent*); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/sidebar/Tools.cxx b/sfx2/source/sidebar/Tools.cxx new file mode 100644 index 000000000000..5cd84b7c0b35 --- /dev/null +++ b/sfx2/source/sidebar/Tools.cxx @@ -0,0 +1,156 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sfx2.hxx" + +#include "Tools.hxx" + +#include "sfx2/sidebar/Theme.hxx" + +#include "sfx2/imagemgr.hxx" +#include <comphelper/processfactory.hxx> +#include <comphelper/componentcontext.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <vcl/gradient.hxx> + +#include <com/sun/star/graphic/XGraphicProvider.hpp> + +#include <cstring> + +using namespace css; +using namespace cssu; + + +namespace sfx2 { namespace sidebar { + +Image Tools::GetImage ( + const ::rtl::OUString& rsImageURL, + const ::rtl::OUString& rsHighContrastImageURL, + const Reference<frame::XFrame>& rxFrame) +{ + if (Theme::IsHighContrastMode()) + return GetImage(rsHighContrastImageURL, rxFrame); + else + return GetImage(rsImageURL, rxFrame); +} + + + + +Image Tools::GetImage ( + const ::rtl::OUString& rsURL, + const Reference<frame::XFrame>& rxFrame) +{ + if (rsURL.getLength() > 0) + { + static const sal_Char* sUnoCommandPrefix = ".uno:"; + static const sal_Int32 nUnoCommandPrefixLength = strlen(sUnoCommandPrefix); + static const sal_Char* sCommandImagePrefix = "private:commandimage/"; + static const sal_Int32 nCommandImagePrefixLength = strlen(sCommandImagePrefix); + + if (rsURL.compareToAscii(sUnoCommandPrefix, nUnoCommandPrefixLength) == 0) + { + const Image aPanelImage (::GetImage(rxFrame, rsURL, sal_False, Theme::IsHighContrastMode())); + return aPanelImage; + } + else if (rsURL.compareToAscii(sCommandImagePrefix, nCommandImagePrefixLength) == 0) + { + ::rtl::OUStringBuffer aCommandName; + aCommandName.appendAscii(sUnoCommandPrefix); + aCommandName.append(rsURL.copy(nCommandImagePrefixLength)); + const ::rtl::OUString sCommandName (aCommandName.makeStringAndClear()); + + const Image aPanelImage (::GetImage(rxFrame, sCommandName, sal_False, Theme::IsHighContrastMode())); + return aPanelImage; + } + else + { + const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory()); + const Reference<graphic::XGraphicProvider> xGraphicProvider ( + aContext.createComponent("com.sun.star.graphic.GraphicProvider"), + UNO_QUERY); + if ( xGraphicProvider.is()) + { + ::comphelper::NamedValueCollection aMediaProperties; + aMediaProperties.put("URL", rsURL); + const Reference<graphic::XGraphic> xGraphic ( + xGraphicProvider->queryGraphic(aMediaProperties.getPropertyValues()), + UNO_QUERY); + if (xGraphic.is()) + return Image(xGraphic); + } + } + } + return Image(); +} + + + + +css::awt::Gradient Tools::VclToAwtGradient (const Gradient aVclGradient) +{ + css::awt::Gradient aAwtGradient ( + awt::GradientStyle(aVclGradient.GetStyle()), + aVclGradient.GetStartColor().GetRGBColor(), + aVclGradient.GetEndColor().GetRGBColor(), + aVclGradient.GetAngle(), + aVclGradient.GetBorder(), + aVclGradient.GetOfsX(), + aVclGradient.GetOfsY(), + aVclGradient.GetStartIntensity(), + aVclGradient.GetEndIntensity(), + aVclGradient.GetSteps()); + return aAwtGradient; +} + + + + +Gradient Tools::AwtToVclGradient (const css::awt::Gradient aAwtGradient) +{ + Gradient aVclGradient ( + GradientStyle(aAwtGradient.Style), + aAwtGradient.StartColor, + aAwtGradient.EndColor); + aVclGradient.SetAngle(aAwtGradient.Angle); + aVclGradient.SetBorder(aAwtGradient.Border); + aVclGradient.SetOfsX(aAwtGradient.XOffset); + aVclGradient.SetOfsY(aAwtGradient.YOffset); + aVclGradient.SetStartIntensity(aAwtGradient.StartIntensity); + aVclGradient.SetEndIntensity(aAwtGradient.EndIntensity); + aVclGradient.SetSteps(aAwtGradient.StepCount); + + return aVclGradient; +} + + + + +SvBorder Tools::RectangleToSvBorder (const Rectangle aBox) +{ + return SvBorder( + aBox.Left(), + aBox.Top(), + aBox.Right(), + aBox.Bottom()); +} + +} } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/Tools.hxx b/sfx2/source/sidebar/Tools.hxx new file mode 100644 index 000000000000..155881bad10f --- /dev/null +++ b/sfx2/source/sidebar/Tools.hxx @@ -0,0 +1,63 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_TOOLS_HXX +#define SFX_SIDEBAR_TOOLS_HXX + +#include <vcl/image.hxx> +#include <vcl/gradient.hxx> +#include <tools/svborder.hxx> + +#include <com/sun/star/awt/Gradient.hpp> +#include <com/sun/star/frame/XFrame.hpp> + + +#define A2S(s) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))) +#define S2A(s) rtl::OUStringToOString(s, RTL_TEXTENCODING_ASCII_US).getStr() + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + +class Tools +{ +public: + static Image GetImage ( + const ::rtl::OUString& rsImageURL, + const ::rtl::OUString& rsHighContrastImageURL, + const cssu::Reference<css::frame::XFrame>& rxFrame); + + static Image GetImage ( + const ::rtl::OUString& rsURL, + const cssu::Reference<css::frame::XFrame>& rxFrame); + + static css::awt::Gradient VclToAwtGradient (const Gradient aGradient); + static Gradient AwtToVclGradient (const css::awt::Gradient aGradient); + + static SvBorder RectangleToSvBorder (const Rectangle aBox); +}; + + +} } // end of namespace sfx2::sidebar + +#endif diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index 3f5bf596a817..c3bf716ce4f8 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -3458,6 +3458,18 @@ void SfxViewFrame::ChildWindowState( SfxItemSet& rState ) rState.Put( SfxBoolItem( nSID, HasChildWindow( nSID ) ) ); } } + else if ( nSID == SID_SIDEBAR ) + { + if ( !KnowsChildWindow( nSID ) ) + { + OSL_ENSURE( false, "SID_TASKPANE state requested, but no task pane child window exists for this ID!" ); + rState.DisableItem( nSID ); + } + else + { + rState.Put( SfxBoolItem( nSID, HasChildWindow( nSID ) ) ); + } + } else if ( KnowsChildWindow(nSID) ) rState.Put( SfxBoolItem( nSID, HasChildWindow(nSID) ) ); else diff --git a/svx/AllLangResTarget_svx.mk b/svx/AllLangResTarget_svx.mk index 11bd8424b0eb..e51f4210d306 100644 --- a/svx/AllLangResTarget_svx.mk +++ b/svx/AllLangResTarget_svx.mk @@ -77,6 +77,13 @@ $(eval $(call gb_SrsTarget_add_files,svx/res,\ svx/source/items/svxerr.src \ svx/source/items/svxitems.src \ svx/source/mnuctrls/mnuctrls.src \ + svx/source/sidebar/EmptyPanel.src \ + svx/source/sidebar/area/AreaPropertyPanel.src \ + svx/source/sidebar/graphic/GraphicPropertyPanel.src \ + svx/source/sidebar/line/LinePropertyPanel.src \ + svx/source/sidebar/possize/PosSizePropertyPanel.src \ + svx/source/sidebar/text/TextPropertyPanel.src \ + svx/source/sidebar/paragraph/ParaPropertyPanel.src \ svx/source/stbctrls/stbctrls.src \ svx/source/svdraw/svdstr.src \ svx/source/table/table.src \ @@ -85,7 +92,6 @@ $(eval $(call gb_SrsTarget_add_files,svx/res,\ svx/source/tbxctrls/fontworkgallery.src \ svx/source/tbxctrls/grafctrl.src \ svx/source/tbxctrls/lboxctrl.src \ - svx/source/tbxctrls/linectrl.src \ svx/source/tbxctrls/tbcontrl.src \ svx/source/tbxctrls/tbunosearchcontrollers.src \ svx/source/toolbars/extrusionbar.src \ diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk index 6319a7713350..c6f7acb54b77 100644 --- a/svx/Library_svx.mk +++ b/svx/Library_svx.mk @@ -169,6 +169,47 @@ $(eval $(call gb_Library_add_exception_objects,svx,\ svx/source/mnuctrls/fntctl \ svx/source/mnuctrls/fntszctl \ svx/source/mnuctrls/SmartTagCtl \ + svx/source/sidebar/ContextChangeEventMultiplexer \ + svx/source/sidebar/EmptyPanel \ + svx/source/sidebar/nbdtmg \ + svx/source/sidebar/nbdtmgfact \ + svx/source/sidebar/PanelFactory \ + svx/source/sidebar/SelectionAnalyzer \ + svx/source/sidebar/SelectionChangeHandler \ + svx/source/sidebar/debug/ColorPanel \ + svx/source/sidebar/debug/ContextPanel \ + svx/source/sidebar/debug/NotYetImplementedPanel \ + svx/source/sidebar/text/SvxSBFontNameBox \ + svx/source/sidebar/text/TextCharacterSpacingControl \ + svx/source/sidebar/text/TextCharacterSpacingPopup \ + svx/source/sidebar/text/TextUnderlineControl \ + svx/source/sidebar/text/TextUnderlinePopup \ + svx/source/sidebar/text/TextPropertyPanel \ + svx/source/sidebar/paragraph/ParaNumberingControl \ + svx/source/sidebar/paragraph/ParaNumberingPopup \ + svx/source/sidebar/paragraph/ParaBulletsControl \ + svx/source/sidebar/paragraph/ParaBulletsPopup \ + svx/source/sidebar/paragraph/ParaLineSpacingControl \ + svx/source/sidebar/paragraph/ParaLineSpacingPopup \ + svx/source/sidebar/paragraph/ParaPropertyPanel \ + svx/source/sidebar/area/AreaPropertyPanel \ + svx/source/sidebar/area/AreaTransparencyGradientControl \ + svx/source/sidebar/area/AreaTransparencyGradientPopup \ + svx/source/sidebar/graphic/GraphicPropertyPanel \ + svx/source/sidebar/line/LinePropertyPanel \ + svx/source/sidebar/line/LineStyleValueSet \ + svx/source/sidebar/line/LineWidthControl \ + svx/source/sidebar/line/LineWidthValueSet \ + svx/source/sidebar/line/LineWidthPopup \ + svx/source/sidebar/possize/PosSizePropertyPanel \ + svx/source/sidebar/possize/SidebarDialControl \ + svx/source/sidebar/possize/SidebarDialControlBmp \ + svx/source/sidebar/tools/ColorControl \ + svx/source/sidebar/tools/ColorPopup \ + svx/source/sidebar/tools/PopupControl \ + svx/source/sidebar/tools/PopupContainer \ + svx/source/sidebar/tools/Popup \ + svx/source/sidebar/tools/ValueSetWithTextControl \ svx/source/stbctrls/pszctrl \ svx/source/stbctrls/insctrl \ svx/source/stbctrls/selctrl \ diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk index fba496cabf51..27e3f96191b5 100644 --- a/svx/Library_svxcore.mk +++ b/svx/Library_svxcore.mk @@ -177,6 +177,8 @@ $(eval $(call gb_Library_add_exception_objects,svxcore,\ svx/source/gallery2/galmisc \ svx/source/gallery2/galobj \ svx/source/gallery2/galtheme \ + svx/source/gallery2/GalleryControl \ + svx/source/gallery2/GallerySplitter \ svx/source/items/chrtitem \ svx/source/items/clipfmtitem \ svx/source/items/customshapeitem \ @@ -424,6 +426,7 @@ $(eval $(call gb_Library_add_exception_objects,svxcore,\ svx/source/xoutdev/xtabgrdt \ svx/source/xoutdev/xtabhtch \ svx/source/xoutdev/xtable \ + svx/source/xoutdev/XPropertyEntry \ svx/source/xoutdev/xtablend \ )) diff --git a/svx/Package_inc.mk b/svx/Package_inc.mk index 440e78259e1a..ba1115a14725 100644 --- a/svx/Package_inc.mk +++ b/svx/Package_inc.mk @@ -173,6 +173,7 @@ $(eval $(call gb_Package_add_file,svx_inc,inc/svx/unomaster.hxx,svx/unomaster.hx $(eval $(call gb_Package_add_file,svx_inc,inc/svx/svdedtv.hxx,svx/svdedtv.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/xlinjoit.hxx,svx/xlinjoit.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/xlncapit.hxx,svx/xlncapit.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/AffineMatrixItem.hxx,svx/AffineMatrixItem.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sxmbritm.hxx,svx/sxmbritm.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/AccessibleGraphicShape.hxx,svx/AccessibleGraphicShape.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/xlnstit.hxx,svx/xlnstit.hxx)) @@ -221,6 +222,7 @@ $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/properties/e3dcompoundprop $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/properties/e3dsceneproperties.hxx,svx/sdr/properties/e3dsceneproperties.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/properties/measureproperties.hxx,svx/sdr/properties/measureproperties.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/table/tabledesign.hxx,svx/sdr/table/tabledesign.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/table/tablecontroller.hxx,svx/sdr/table/tablecontroller.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/primitive2d/primitiveFactory2d.hxx,svx/sdr/primitive2d/primitiveFactory2d.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/primitive2d/sdrpathprimitive2d.hxx,svx/sdr/primitive2d/sdrpathprimitive2d.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdr/primitive2d/sdrtextprimitive2d.hxx,svx/sdr/primitive2d/sdrtextprimitive2d.hxx)) @@ -410,6 +412,7 @@ $(eval $(call gb_Package_add_file,svx_inc,inc/svx/svdobj.hxx,svx/svdobj.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sxmtaitm.hxx,svx/sxmtaitm.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/clipboardctl.hxx,svx/clipboardctl.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/xtable.hxx,svx/xtable.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/XPropertyEntry.hxx,svx/XPropertyEntry.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdgcoitm.hxx,svx/sdgcoitm.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/svdovirt.hxx,svx/svdovirt.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/fmshell.hxx,svx/fmshell.hxx)) @@ -553,4 +556,15 @@ $(eval $(call gb_Package_add_file,svx_inc,inc/svx/colrctrl.hxx,svx/colrctrl.hxx) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/fmdpage.hxx,svx/fmdpage.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sxmtpitm.hxx,svx/sxmtpitm.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/globlmn.hrc,globlmn_tmpl.hrc)) - +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/ColorControl.hxx,svx/sidebar/ColorControl.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/ColorPopup.hxx,svx/sidebar/ColorPopup.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/ContextChangeEventMultiplexer.hxx,svx/sidebar/ContextChangeEventMultiplexer.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/Popup.hxx,svx/sidebar/Popup.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/SidebarDialControl.hxx,svx/sidebar/SidebarDialControl.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/PopupContainer.hxx,svx/sidebar/PopupContainer.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/PopupControl.hxx,svx/sidebar/PopupControl.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/SelectionAnalyzer.hxx,svx/sidebar/SelectionAnalyzer.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/SelectionChangeHandler.hxx,svx/sidebar/SelectionChangeHandler.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/sidebar/ValueSetWithTextControl.hxx,svx/sidebar/ValueSetWithTextControl.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/nbdtmgfact.hxx,svx/nbdtmgfact.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/nbdtmg.hxx,svx/nbdtmg.hxx)) diff --git a/svx/inc/GalleryControl.hxx b/svx/inc/GalleryControl.hxx new file mode 100644 index 000000000000..9bc820bbbff9 --- /dev/null +++ b/svx/inc/GalleryControl.hxx @@ -0,0 +1,80 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_GALLERY_CONTROL_HXX +#define SVX_SIDEBAR_GALLERY_CONTROL_HXX + +#include <vcl/window.hxx> +#include <vcl/graph.hxx> +#include <tools/urlobj.hxx> +#include "svx/svxdllapi.h" + +#include <boost/scoped_ptr.hpp> + +class SfxBindings; + +class Gallery; +class GallerySplitter; +class GalleryBrowser1; +class GalleryBrowser2; +class FmFormModel; + +namespace svx { namespace sidebar { + + +class SVX_DLLPUBLIC GalleryControl : public Window +{ +public: + GalleryControl ( + SfxBindings* pBindings, + Window* pParentWindow); + virtual ~GalleryControl (void); + + sal_Bool KeyInput( const KeyEvent& rKEvt, Window* pWindow); + +private: + Gallery* mpGallery; + ::boost::scoped_ptr<GallerySplitter> mpSplitter; + ::boost::scoped_ptr<GalleryBrowser1> mpBrowser1; + ::boost::scoped_ptr<GalleryBrowser2> mpBrowser2; + Size maLastSize; + bool mbIsInitialResize; + + void InitSettings (void); + + virtual void Resize (void); + virtual void GetFocus (void); + + DECL_LINK(SplitHdl, void*); + +protected: + void ThemeSelectionHasChanged (void); + + INetURLObject GetURL (void) const; + String GetFilterName (void) const; + Graphic GetGraphic (void) const; + sal_Bool GetVCDrawModel (FmFormModel& rModel) const; + sal_Bool IsLinkage (void) const; +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/galbrws2.hxx b/svx/inc/galbrws2.hxx index e1c6844afee0..27e49c551a75 100644 --- a/svx/inc/galbrws2.hxx +++ b/svx/inc/galbrws2.hxx @@ -95,9 +95,12 @@ class GalleryPreview; class Menu; class SgaObject; +namespace svx { namespace sidebar { class GalleryControl; } } + class GalleryBrowser2 : public Control, public SfxListener { friend class GalleryBrowser; + friend class svx::sidebar::GalleryControl; using Control::Notify; using Window::KeyInput; @@ -148,7 +151,7 @@ public: public: - GalleryBrowser2( GalleryBrowser* pParent, const ResId& rResId, Gallery* pGallery ); + GalleryBrowser2( Window* pParent, const ResId& rResId, Gallery* pGallery ); ~GalleryBrowser2(); void SelectTheme( const String& rThemeName ); diff --git a/svx/inc/helpid.hrc b/svx/inc/helpid.hrc index 947341a86bfa..5c6056d25b0e 100644 --- a/svx/inc/helpid.hrc +++ b/svx/inc/helpid.hrc @@ -275,5 +275,127 @@ #define HID_SVX_TP_DESKTOP "SVX_HID_SVX_TP_DESKTOP" #define HID_CT_THES_ALTERNATIVES "SVX_HID_CT_THES_ALTERNATIVES" +#define HID_PROPERTYPANEL_SECTIONPAGE_BEGIN "SVX_HID_PROPERTYPANEL_SECTIONPAGE_BEGIN" +#define HID_PROPERTYPANEL_TEXT_SECTION "SVX_HID_PROPERTYPANEL_TEXT_SECTION" +#define HID_PROPERTYPANEL_PARA_SECTION "SVX_HID_PROPERTYPANEL_PARA_SECTION" +#define HID_PROPERTYPANEL_AREA_SECTION "SVX_HID_PROPERTYPANEL_AREA_SECTION" +#define HID_PROPERTYPANEL_LINE_SECTION "SVX_HID_PROPERTYPANEL_LINE_SECTION" +#define HID_PPROPERTYPANEL_AREA_LB_TRGR_TYPES "SVX_HID_PPROPERTYPANEL_AREA_LB_TRGR_TYPES" +#define HID_PPROPERTYPANEL_AREA_MTR_TRANSPARENT "SVX_HID_PPROPERTYPANEL_AREA_MTR_TRANSPARENT" +#define HID_PPROPERTYPANEL_AREA_LB_FILL_TYPES "SVX_HID_PPROPERTYPANEL_AREA_LB_FILL_TYPES" +#define HID_PPROPERTYPANEL_AREA_LB_FILL_ATTR "SVX_HID_PPROPERTYPANEL_AREA_LB_FILL_ATTR" +#define HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_X "SVX_HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_X" +#define HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_Y "SVX_HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_Y" +#define HID_PPROPERTYPANEL_AREA_MTR_TRGR_ANGLE "SVX_HID_PPROPERTYPANEL_AREA_MTR_TRGR_ANGLE" +#define HID_PPROPERTYPANEL_AREA_MTR_TRGR_SVALUE "SVX_HID_PPROPERTYPANEL_AREA_MTR_TRGR_SVALUE" +#define HID_PPROPERTYPANEL_AREA_MTR_TRGR_EVALUE "SVX_HID_PPROPERTYPANEL_AREA_MTR_TRGR_EVALUE" +#define HID_PPROPERTYPANEL_AREA_MTR_TRGR_BORDER "SVX_HID_PPROPERTYPANEL_AREA_MTR_TRGR_BORDER" +#define HID_PPROPERTYPANEL_AREA_BTN_LEFT_SECOND "SVX_HID_PPROPERTYPANEL_AREA_BTN_LEFT_SECOND" +#define HID_PPROPERTYPANEL_AREA_BTN_RIGHT_FIRST "SVX_HID_PPROPERTYPANEL_AREA_BTN_RIGHT_FIRST" +#define HID_PPROPERTYPANEL_TEXT_TBX_FONT "SVX_HID_PPROPERTYPANEL_TEXT_TBX_FONT" +#define HID_PPROPERTYPANEL_TEXT_TBI_BOLD "SVX_HID_PPROPERTYPANEL_TEXT_TBI_BOLD" +#define HID_PPROPERTYPANEL_TEXT_TBI_ITALIC "SVX_HID_PPROPERTYPANEL_TEXT_TBI_ITALIC" +#define HID_PPROPERTYPANEL_TEXT_TBI_UNDERLINE "SVX_HID_PPROPERTYPANEL_TEXT_TBI_UNDERLINE" +#define HID_PPROPERTYPANEL_TEXT_TBI_STRIKEOUT "SVX_HID_PPROPERTYPANEL_TEXT_TBI_STRIKEOUT" +#define HID_PPROPERTYPANEL_TEXT_TBI_SHADOWED "SVX_HID_PPROPERTYPANEL_TEXT_TBI_SHADOWED" +#define HID_PPROPERTYPANEL_TEXT_TBX_FONTSIZE_INDE "SVX_HID_PPROPERTYPANEL_TEXT_TBX_FONTSIZE_INDE" +#define HID_PPROPERTYPANEL_TEXT_TBI_INCREASE "SVX_HID_PPROPERTYPANEL_TEXT_TBI_INCREASE" +#define HID_PPROPERTYPANEL_TEXT_TBI_DECREASE "SVX_HID_PPROPERTYPANEL_TEXT_TBI_DECREASE" +#define HID_PPROPERTYPANEL_TEXT_TBX_FONT_COLOR "SVX_HID_PPROPERTYPANEL_TEXT_TBX_FONT_COLOR" +#define HID_PPROPERTYPANEL_TEXT_TBI_FONT_COLOR "SVX_HID_PPROPERTYPANEL_TEXT_TBI_FONT_COLOR" +#define HID_PPROPERTYPANEL_TEXT_TBX_HIGHLIGHT_COLOR "SVX_HID_PPROPERTYPANEL_TEXT_TBX_HIGHLIGHT_COLOR" +#define HID_PPROPERTYPANEL_TEXT_TBI_HIGHLIGHT_COLOR "SVX_HID_PPROPERTYPANEL_TEXT_TBI_HIGHLIGHT_COLOR" +#define HID_PPROPERTYPANEL_TEXT_TBX_SCRIPT_SW "SVX_HID_PPROPERTYPANEL_TEXT_TBX_SCRIPT_SW" +#define HID_PPROPERTYPANEL_TEXT_TBI_SUPER_SW "SVX_HID_PPROPERTYPANEL_TEXT_TBI_SUPER_SW" +#define HID_PPROPERTYPANEL_TEXT_TBI_SUB_SW "SVX_HID_PPROPERTYPANEL_TEXT_TBI_SUB_SW" +#define HID_PPROPERTYPANEL_TEXT_TBX_SCRIPT "SVX_HID_PPROPERTYPANEL_TEXT_TBX_SCRIPT" +#define HID_PPROPERTYPANEL_TEXT_TBI_SUPER "SVX_HID_PPROPERTYPANEL_TEXT_TBI_SUPER" +#define HID_PPROPERTYPANEL_TEXT_TBI_SUB "SVX_HID_PPROPERTYPANEL_TEXT_TBI_SUB" +#define HID_PPROPERTYPANEL_TEXT_UNDERLINE_VS "SVX_HID_PPROPERTYPANEL_TEXT_UNDERLINE_VS" +#define HID_PPROPERTYPANEL_TEXT_COLOR_VS "SVX_HID_PPROPERTYPANEL_TEXT_COLOR_VS" +#define HID_PPROPERTYPANEL_PARA_TBX_HALIGN "SVX_HID_PPROPERTYPANEL_PARA_TBX_HALIGN" +#define HID_PPROPERTYPANEL_PARA_TBI_HALIGN_LEFT "SVX_HID_PPROPERTYPANEL_PARA_TBI_HALIGN_LEFT" +#define HID_PPROPERTYPANEL_PARA_TBI_HALIGN_CENTER "SVX_HID_PPROPERTYPANEL_PARA_TBI_HALIGN_CENTER" +#define HID_PPROPERTYPANEL_PARA_TBI_HALIGN_RIGHT "SVX_HID_PPROPERTYPANEL_PARA_TBI_HALIGN_RIGHT" +#define HID_PPROPERTYPANEL_PARA_TBI_HALIGN_JUSTIFY "SVX_HID_PPROPERTYPANEL_PARA_TBI_HALIGN_JUSTIFY" +#define HID_PPROPERTYPANEL_PARA_TBX_VALIGN "SVX_HID_PPROPERTYPANEL_PARA_TBX_VALIGN" +#define HID_PPROPERTYPANEL_PARA_TBI_VALIGN_TOP "SVX_HID_PPROPERTYPANEL_PARA_TBI_VALIGN_TOP" +#define HID_PPROPERTYPANEL_PARA_TBI_VALIGN_CENTER "SVX_HID_PPROPERTYPANEL_PARA_TBI_VALIGN_CENTER" +#define HID_PPROPERTYPANEL_PARA_TBI_VALIGN_BOT "SVX_HID_PPROPERTYPANEL_PARA_TBI_VALIGN_BOT" +#define HID_PPROPERTYPANEL_PARA_TBX_BACK_COLOR "SVX_HID_PPROPERTYPANEL_PARA_TBX_BACK_COLOR" +#define HID_PPROPERTYPANEL_PARA_TBI_BACK_COLOR "SVX_HID_PPROPERTYPANEL_PARA_TBI_BACK_COLOR" +#define HID_PPROPERTYPANEL_PARA_BACK_COLOR_VS "SVX_HID_PPROPERTYPANEL_PARA_BACK_COLOR_VS" +#define HID_PPROPERTYPANEL_LINE_TBX_WIDTH "SVX_HID_PPROPERTYPANEL_LINE_TBX_WIDTH" +#define HID_PPROPERTYPANEL_LINE_TBI_WIDTH "SVX_HID_PPROPERTYPANEL_LINE_TBI_WIDTH" +#define HID_PPROPERTYPANEL_LINE_TBX_COLOR "SVX_HID_PPROPERTYPANEL_LINE_TBX_COLOR" +#define HID_PPROPERTYPANEL_LINE_TBI_COLOR "SVX_HID_PPROPERTYPANEL_LINE_TBI_COLOR" +#define HID_PPROPERTYPANEL_LINE_TBX_STYLE "SVX_HID_PPROPERTYPANEL_LINE_TBX_STYLE" +#define HID_PPROPERTYPANEL_LINE_TBI_STYLE "SVX_HID_PPROPERTYPANEL_LINE_TBI_STYLE" +#define HID_PPROPERTYPANEL_LINE_MTR_TRANCEPARENCE "SVX_HID_PPROPERTYPANEL_LINE_MTR_TRANCEPARENCE" +#define HID_PPROPERTYPANEL_LINE_LB_START "SVX_HID_PPROPERTYPANEL_LINE_LB_START" +#define HID_PPROPERTYPANEL_LINE_LB_END "SVX_HID_PPROPERTYPANEL_LINE_LB_END" +#define HID_PPROPERTYPANEL_LINE_VS_WIDTH "SVX_HID_PPROPERTYPANEL_LINE_VS_WIDTH" +#define HID_PPROPERTYPANEL_LINE_MTR_WIDTH "SVX_HID_PPROPERTYPANEL_LINE_MTR_WIDTH" +#define HID_PPROPERTYPANEL_LINE_VS_COLOR "SVX_HID_PPROPERTYPANEL_LINE_VS_COLOR" +#define HID_PPROPERTYPANEL_LINE_VS_STYLE "SVX_HID_PPROPERTYPANEL_LINE_VS_STYLE" +#define HID_PPROPERTYPANEL_LINE_BTN_STYLE "SVX_HID_PPROPERTYPANEL_LINE_BTN_STYLE" +#define HID_PPROPERTYPANEL_TEXT_SPACING_VS "SVX_HID_PPROPERTYPANEL_TEXT_SPACING_VS" +#define HID_PPROPERTYPANEL_LINE_LB_EDGESTYLE "SVX_HID_PPROPERTYPANEL_LINE_LB_EDGESTYLE" +#define HID_PPROPERTYPANEL_LINE_LB_CAPSTYLE "SVX_HID_PPROPERTYPANEL_LINE_LB_CAPSTYLE" +//add for position and size +#define HID_PROPERTY_PANEL_POSIZE_MTR_FLD_WIDTH "SVX_HID_PROPERTY_PANEL_POSIZE_MTR_FLD_WIDTH" +#define HID_PROPERTY_PANEL_POSIZE_MTR_FLD_HEIGHT "SVX_HID_PROPERTY_PANEL_POSIZE_MTR_FLD_HEIGHT" +#define HID_PROPERTY_PANEL_POSIZE_CBX_SCALE "SVX_HID_PROPERTY_PANEL_POSIZE_CBX_SCALE" +#define HID_PROPERTY_PANEL_POSIZE_MF_HORIZONTAL "SVX_HID_PROPERTY_PANEL_POSIZE_MF_HORIZONTAL" +#define HID_PROPERTY_PANEL_POSIZE_MF_VERTICAL "SVX_HID_PROPERTY_PANEL_POSIZE_MF_VERTICAL" +#define HID_PROPERTY_PANEL_POSIZE_MTR_FLD_ANGLE "SVX_HID_PROPERTY_PANEL_POSIZE_MTR_FLD_ANGLE" +#define HID_PROPERTY_PANEL_POSIZE_TBX_FLIP "SVX_HID_PROPERTY_PANEL_POSIZE_TBX_FLIP" +#define HID_PROPERTY_PANEL_POSIZE_FLIP_VERTICAL "SVX_HID_PROPERTY_PANEL_POSIZE_FLIP_VERTICAL" +#define HID_PROPERTY_PANEL_POSIZE_FLIP_HORIZONTAL "SVX_HID_PROPERTY_PANEL_POSIZE_FLIP_HORIZONTAL" +#define HID_PROPERTY_PANEL_POSIZE_DIAL_CONTROL "SVX_HID_PROPERTY_PANEL_POSIZE_DIAL_CONTROL" +//end +//add for graphic +#define HID_PROPERTY_PANEL_GRAPHIC_MTR_BRIGHT "SVX_HID_PROPERTY_PANEL_GRAPHIC_MTR_BRIGHT" +#define HID_PROPERTY_PANEL_GRAPHIC_MTR_CONTRAST "SVX_HID_PROPERTY_PANEL_GRAPHIC_MTR_CONTRAST" +#define HID_PROPERTY_PANEL_GRAPHIC_LB_COLORMODE "SVX_HID_PROPERTY_PANEL_GRAPHIC_LB_COLORMODE" +#define HID_PROPERTY_PANEL_GRAPHIC_MTR_TRANSP "SVX_HID_PROPERTY_PANEL_GRAPHIC_MTR_TRANSP" +#define HID_PROPERTY_PANEL_GRAPHIC_MTR_RED "SVX_HID_PROPERTY_PANEL_GRAPHIC_MTR_RED" +#define HID_PROPERTY_PANEL_GRAPHIC_MTR_GREEN "SVX_HID_PROPERTY_PANEL_GRAPHIC_MTR_GREEN" +#define HID_PROPERTY_PANEL_GRAPHIC_MTR_BLUE "SVX_HID_PROPERTY_PANEL_GRAPHIC_MTR_BLUE" +#define HID_PROPERTY_PANEL_GRAPHIC_MTR_GAMMA "SVX_HID_PROPERTY_PANEL_GRAPHIC_MTR_GAMMA" +//end + +#define HID_PROPERTYPANEL_POSIZE_SECTION "SVX_HID_PROPERTYPANEL_POSIZE_SECTION" +#define HID_PROPERTYPANEL_GRAPHIC_SECTION "SVX_HID_PROPERTYPANEL_GRAPHIC_SECTION" + + +#define HID_PPROPERTYPANEL_PARA_TBX_NUM_BULLET "SVX_HID_PPROPERTYPANEL_PARA_TBX_NUM_BULLET" +#define HID_PPROPERTYPANEL_PARA_TBI_NUM "SVX_HID_PPROPERTYPANEL_PARA_TBI_NUM" +#define HID_PPROPERTYPANEL_PARA_TBI_BULLET "SVX_HID_PPROPERTYPANEL_PARA_TBI_BULLET" +#define HID_PPROPERTYPANEL_PARA_TBX_INC_DEC "SVX_HID_PPROPERTYPANEL_PARA_TBX_INC_DEC" +#define HID_PPROPERTYPANEL_PARA_TBI_INC "SVX_HID_PPROPERTYPANEL_PARA_TBI_INC" +#define HID_PPROPERTYPANEL_PARA_TBI_DEC "SVX_HID_PPROPERTYPANEL_PARA_TBI_DEC" +#define HID_PPROPERTYPANEL_PARA_TBX_INDENT_INC_DEC "SVX_HID_PPROPERTYPANEL_PARA_TBX_INDENT_INC_DEC" +#define HID_PPROPERTYPANEL_PARA_TBI_INDENT_INC "SVX_HID_PPROPERTYPANEL_PARA_TBI_INDENT_INC" +#define HID_PPROPERTYPANEL_PARA_TBI_INDENT_DEC "SVX_HID_PPROPERTYPANEL_PARA_TBI_INDENT_DEC" +#define HID_PPROPERTYPANEL_PARA_TBI_INDENT_HANG "SVX_HID_PPROPERTYPANEL_PARA_TBI_INDENT_HANG" +#define HID_PPROPERTYPANEL_PARA_TBX_INDENTP_INC_DEC "SVX_HID_PPROPERTYPANEL_PARA_TBX_INDENTP_INC_DEC" +#define HID_PPROPERTYPANEL_PARA_TBI_INDENTP_INC "SVX_HID_PPROPERTYPANEL_PARA_TBI_INDENTP_INC" +#define HID_PPROPERTYPANEL_PARA_TBI_INDENTP_DEC "SVX_HID_PPROPERTYPANEL_PARA_TBI_INDENTP_DEC" +#define HID_PPROPERTYPANEL_PARA_TBI_INDENTP_HANG "SVX_HID_PPROPERTYPANEL_PARA_TBI_INDENTP_HANG" +#define HID_PPROPERTYPANEL_PARA_TBX_LINESP "SVX_HID_PPROPERTYPANEL_PARA_TBX_LINESP" +#define HID_PPROPERTYPANEL_PARA_TBI_LINESP "SVX_HID_PPROPERTYPANEL_PARA_TBI_LINESP" +#define HID_PPROPERTYPANEL_AREA_TBX_COLOR "SVX_HID_PPROPERTYPANEL_AREA_TBX_COLOR" +#define HID_PPROPERTYPANEL_AREA_TBI_COLOR "SVX_HID_PPROPERTYPANEL_AREA_TBI_COLOR" +#define HID_PPROPERTYPANEL_AREA_COLOR_VS "SVX_HID_PPROPERTYPANEL_AREA_COLOR_VS" +//add end + +#define HID_PPROPERTYPANEL_AREA_TBX_GRADIENT "SVX_HID_PPROPERTYPANEL_AREA_TBX_GRADIENT" +#define HID_PPROPERTYPANEL_AREA_TBI_GRADIENT "SVX_HID_PPROPERTYPANEL_AREA_TBI_GRADIENT" +#define HID_PROPERTYPANEL_SECTIONPAGE_END "SVX_HID_PROPERTYPANEL_SECTIONPAGE_END" + +#define HID_PPROPERTYPANEL_AREA_LB_FILL_TYPES "SVX_HID_PPROPERTYPANEL_AREA_LB_FILL_TYPES" +#define HID_PPROPERTYPANEL_AREA_LB_FILL_ATTR "SVX_HID_PPROPERTYPANEL_AREA_LB_FILL_ATTR" + #endif diff --git a/svx/inc/sidebar/PanelFactory.hxx b/svx/inc/sidebar/PanelFactory.hxx new file mode 100644 index 000000000000..a23c0a46b5a8 --- /dev/null +++ b/svx/inc/sidebar/PanelFactory.hxx @@ -0,0 +1,74 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_PANEL_FACTORY_HXX +#define SVX_SIDEBAR_PANEL_FACTORY_HXX + +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <com/sun/star/ui/XUIElementFactory.hpp> + +#include <boost/noncopyable.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace svx { namespace sidebar { + +namespace +{ + typedef ::cppu::WeakComponentImplHelper1 < + css::ui::XUIElementFactory + > PanelFactoryInterfaceBase; +} + + +class PanelFactory + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public PanelFactoryInterfaceBase +{ +public: + static ::rtl::OUString SAL_CALL getImplementationName (void); + static cssu::Reference<cssu::XInterface> SAL_CALL createInstance ( + const cssu::Reference<css::lang::XMultiServiceFactory>& rxFactory); + static cssu::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames (void); + + PanelFactory (void); + virtual ~PanelFactory (void); + + // XUIElementFactory + cssu::Reference<css::ui::XUIElement> SAL_CALL createUIElement ( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException); +}; + + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/AffineMatrixItem.hxx b/svx/inc/svx/AffineMatrixItem.hxx new file mode 100755 index 000000000000..0ad7623ab9d7 --- /dev/null +++ b/svx/inc/svx/AffineMatrixItem.hxx @@ -0,0 +1,58 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_AFFINEMATRIXITEM_HXX +#define _SVX_AFFINEMATRIXITEM_HXX + +#include <svx/svxdllapi.h> +#include <svl/poolitem.hxx> +#include <com/sun/star/geometry/AffineMatrix2D.hpp> + +//--------------------- +// class AffineMatrixItem +//--------------------- + +class SVX_DLLPUBLIC AffineMatrixItem : public SfxPoolItem +{ +private: + com::sun::star::geometry::AffineMatrix2D maMatrix; + +public: + TYPEINFO(); + AffineMatrixItem(const com::sun::star::geometry::AffineMatrix2D* pMatrix = 0); + AffineMatrixItem(SvStream& rIn); + AffineMatrixItem(const AffineMatrixItem&); + virtual ~AffineMatrixItem(); + + virtual int operator==(const SfxPoolItem&) const; + virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + virtual SvStream& Store(SvStream &, sal_uInt16 nItemVersion ) const; + + virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); + + const com::sun::star::geometry::AffineMatrix2D& GetAffineMatrix2D() const; +}; + +#endif // _SVX_AFFINEMATRIXITEM_HXX + +// eof diff --git a/svx/inc/svx/XPropertyEntry.hxx b/svx/inc/svx/XPropertyEntry.hxx new file mode 100755 index 000000000000..c91183b42668 --- /dev/null +++ b/svx/inc/svx/XPropertyEntry.hxx @@ -0,0 +1,51 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _XPROPERTYENTRY_HXX +#define _XPROPERTYENTRY_HXX + +#include <svx/svxdllapi.h> +#include <tools/string.hxx> +#include <vcl/bitmap.hxx> + +// --------------------- +// class XPropertyEntry + +class SVX_DLLPUBLIC XPropertyEntry +{ +private: + String maName; + Bitmap maUiBitmap; + +protected: + XPropertyEntry(const String& rName); + XPropertyEntry(const XPropertyEntry& rOther); + +public: + virtual ~XPropertyEntry(); + + void SetName(const String& rName) { maName = rName; } + const String& GetName() const { return maName; } + void SetUiBitmap(const Bitmap& rUiBitmap) { maUiBitmap = rUiBitmap; } + const Bitmap& GetUiBitmap() const { return maUiBitmap; } +}; + +#endif // _XPROPERTYENTRY_HXX diff --git a/svx/inc/svx/XPropertyTable.hxx b/svx/inc/svx/XPropertyTable.hxx index efe01418bdaf..73253e324b72 100644 --- a/svx/inc/svx/XPropertyTable.hxx +++ b/svx/inc/svx/XPropertyTable.hxx @@ -28,7 +28,7 @@ #include "svx/svxdllapi.h" #include <svx/xtable.hxx> -SVX_DLLPUBLIC ::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXColorTable_createInstance( XPropertyTable* pTable ) throw(); +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXColorTable_createInstance( XPropertyList* pTable ) throw(); SVX_DLLPUBLIC ::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXLineEndTable_createInstance( XPropertyList* pList ) throw(); SVX_DLLPUBLIC ::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXDashTable_createInstance( XPropertyList* pList ) throw(); SVX_DLLPUBLIC ::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXHatchTable_createInstance( XPropertyList* pList ) throw(); diff --git a/svx/inc/svx/bmpmask.hxx b/svx/inc/svx/bmpmask.hxx index 3604f23a9085..c3e110a49314 100644 --- a/svx/inc/svx/bmpmask.hxx +++ b/svx/inc/svx/bmpmask.hxx @@ -119,7 +119,7 @@ class SVX_DLLPUBLIC SvxBmpMask : public SfxDockingWindow CheckBox aCbxTrans; ColorLB aLbColorTrans; - const XColorTable* pColTab; + const XColorList* pColTab; Color aPipetteColor; SvxBmpMaskSelectItem aSelItem; @@ -161,7 +161,7 @@ public: void PipetteClicked(); sal_Bool NeedsColorTable() const; - void SetColorTable( const XColorTable* pColorTable ); + void SetColorTable( const XColorList* pColorTable ); void SetExecState( sal_Bool bEnable ); diff --git a/svx/inc/svx/colrctrl.hxx b/svx/inc/svx/colrctrl.hxx index d9ab7ff5b1fc..3519d1060da4 100644 --- a/svx/inc/svx/colrctrl.hxx +++ b/svx/inc/svx/colrctrl.hxx @@ -30,7 +30,7 @@ #include <svl/lstner.hxx> #include "svx/svxdllapi.h" -class XColorTable; +class XColorList; class SvData; /************************************************************************* @@ -95,7 +95,7 @@ class SvxColorDockingWindow : public SfxDockingWindow, public SfxListener friend class SvxColorChildWindow; private: - XColorTable* pColorTable; + XColorList* pColorTable; SvxColorValueSet aColorSet; sal_uInt16 nLeftSlot; sal_uInt16 nRightSlot; diff --git a/svx/inc/svx/dialcontrol.hxx b/svx/inc/svx/dialcontrol.hxx index 8234abe797af..2e80ad289666 100644 --- a/svx/inc/svx/dialcontrol.hxx +++ b/svx/inc/svx/dialcontrol.hxx @@ -29,13 +29,42 @@ #include <sfx2/itemconnect.hxx> #include "svx/svxdllapi.h" +#include <boost/scoped_ptr.hpp> + class NumericField; namespace svx { // ============================================================================ -struct DialControl_Impl; +class DialControlBmp : public VirtualDevice +{ +public: + explicit DialControlBmp( Window& rParent ); + + void InitBitmap( const Size& rSize, const Font& rFont ); + void CopyBackground( const DialControlBmp& rSrc ); + void DrawBackground( const Size& rSize, bool bEnabled ); + virtual void DrawBackground(); + virtual void DrawElements( const String& rText, sal_Int32 nAngle ); + +protected: + Rectangle maRect; + bool mbEnabled; + +private: + const Color& GetBackgroundColor() const; + const Color& GetTextColor() const; + const Color& GetScaleLineColor() const; + const Color& GetButtonLineColor() const; + const Color& GetButtonFillColor( bool bMain ) const; + + void Init( const Size& rSize ); + + Window& mrParent; + long mnCenterX; + long mnCenterY; +}; /** This control allows to input a rotation angle, visualized by a dial. @@ -90,20 +119,42 @@ public: /** Returns the current modify handler. */ const Link& GetModifyHdl() const; -private: +protected: + struct DialControl_Impl + { + ::boost::scoped_ptr<DialControlBmp> mpBmpEnabled; + ::boost::scoped_ptr<DialControlBmp> mpBmpDisabled; + ::boost::scoped_ptr<DialControlBmp> mpBmpBuffered; + Link maModifyHdl; + NumericField* mpLinkField; + Size maWinSize; + Font maWinFont; + sal_Int32 mnAngle; + sal_Int32 mnOldAngle; + long mnCenterX; + long mnCenterY; + bool mbNoRot; + + explicit DialControl_Impl( Window& rParent ); + void Init( const Size& rWinSize, const Font& rWinFont ); + }; + std::auto_ptr< DialControl_Impl > mpImpl; + + virtual void HandleMouseEvent( const Point& rPos, bool bInitial ); + virtual void HandleEscapeEvent(); + + void SetRotation( sal_Int32 nAngle, bool bBroadcast ); + void Init( const Size& rWinSize, const Font& rWinFont ); void Init( const Size& rWinSize ); + +private: void InvalidateControl(); - void ImplSetRotation( sal_Int32 nAngle, bool bBroadcast ); void ImplSetFieldLink( const Link& rLink ); - void HandleMouseEvent( const Point& rPos, bool bInitial ); - void HandleEscapeEvent(); DECL_LINK( LinkedFieldModifyHdl, NumericField* ); - - std::auto_ptr< DialControl_Impl > mpImpl; }; // ============================================================================ diff --git a/svx/inc/svx/dialogs.hrc b/svx/inc/svx/dialogs.hrc index a1e1835d0c0d..d95bc5515a45 100644 --- a/svx/inc/svx/dialogs.hrc +++ b/svx/inc/svx/dialogs.hrc @@ -30,8 +30,8 @@ // Resource-Id's ------------------------------------------------------------ -// Bitte FIRSTFREE pflegen!!! (gilt nicht f"ur Strings) -#define RID_SVX_FIRSTFREE 305 +// !!! IMPORTANT: consider and update FIRSTFREE when introducing new RIDs !!! (not for RIDs for Strings - they have there own) +#define RID_SVX_FIRSTFREE 323 // some strings also used in CUI #define RID_SVXERRCTX (RID_SVX_START + 351) @@ -56,7 +56,6 @@ #define RID_SVXSTR_GALLERY_PREVIEW (RID_SVX_START + 255) //-----IAccessibility2 Implementation 2009 - // factory IDs of tabpages implemented in CUI #define RID_SVXPAGE_CHAR_TWOLINES (RID_SVX_START + 242) #define RID_SVXPAGE_EXT_PARAGRAPH (RID_SVX_START + 7) @@ -353,7 +352,33 @@ #define RID_SVXDLG_TEXTCONTROL_CHARATTR (RID_SVX_START + 286) #define RID_SVXDLG_TEXTCONTROL_PARAATTR (RID_SVX_START + 287) -// !!! please update RID_SVX_FIRSTFREE !!! see line 46 +#define RID_SIDEBAR_TEXT_PANEL (RID_SVX_START + 305) +#define RID_POPUPPANEL_TEXTPAGE_UNDERLINE (RID_SVX_START + 306) +#define RID_POPUPPANEL_TEXTPAGE_FONT_COLOR (RID_SVX_START + 307) +#define RID_POPUPPANEL_TEXTPAGE_SPACING (RID_SVX_START + 308) + +#define RID_SIDEBAR_AREA_PANEL (RID_SVX_START + 309) +#define RID_POPUPPANEL_AERAPAGE_COLOR (RID_SVX_START + 310) +#define RID_POPUPPANEL_AREAPAGE_TRGR (RID_SVX_START + 311) + +#define RID_SIDEBAR_LINE_PANEL (RID_SVX_START + 312) +#define RID_POPUPPANEL_LINEPAGE_COLOR (RID_SVX_START + 313) +#define RID_POPUPPANEL_LINEPAGE_STYLE (RID_SVX_START + 314) +#define RID_POPUPPANEL_LINEPAGE_WIDTH (RID_SVX_START + 315) + +#define RID_SIDEBAR_POSSIZE_PANEL (RID_SVX_START + 316) +#define RID_SIDEBAR_GRAPHIC_PANEL (RID_SVX_START + 317) +#define RID_SIDEBAR_EMPTY_PANEL (RID_SVX_START + 318) + +#define RID_SIDEBAR_PARA_PANEL (RID_SVX_START + 319) +#define RID_POPUPPANEL_PARAPAGE_LINESPACING (RID_SVX_START + 320) +#define RID_POPUPPANEL_PARAPAGE_BULLETS (RID_SVX_START + 321) +#define RID_POPUPPANEL_PARAPAGE_NUMBERING (RID_SVX_START + 322) + +// !!! IMPORTANT: consider and update RID_SVX_FIRSTFREE when introducing new RIDs !!! (see above) + + + // Strings ------------------------------------------------------------------ @@ -597,7 +622,7 @@ #define RID_SVXSTR_LINECAP_ROUND (RID_SVX_START + 587 ) #define RID_SVXSTR_LINECAP_SQUARE (RID_SVX_START + 588 ) -// string resources for XLineJoint item +// string resources for com::sun::star::drawing::LineJoint item #define RID_SVXSTR_LINEJOINT_NONE RID_SVXSTR_NONE #define RID_SVXSTR_LINEJOINT_MIDDLE (RID_SVX_START + 589 ) #define RID_SVXSTR_LINEJOINT_BEVEL (RID_SVX_START + 590 ) @@ -919,14 +944,67 @@ #define RID_SVXSTR_OUTLINENUM_DESCRIPTION_5 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 5)//? #define RID_SVXSTR_OUTLINENUM_DESCRIPTION_6 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 6)//? #define RID_SVXSTR_OUTLINENUM_DESCRIPTION_7 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 7)//? - -#define RID_SVXSTR_FINDBAR_FIND (RID_SVX_START + 1190) - -#define RID_SVXSTR_NEXTFREE (RID_SVX_START + 1191) +#define RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS (RID_SVX_START + 1172) +#define RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_0 (RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS + 0) +#define RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_1 (RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS + 1) +#define RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_2 (RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS + 2) +#define RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_3 (RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS + 3) +#define RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_4 (RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS + 4) //IAccessibility2 Implementation 2009----- #define RID_SVXSTR_TEXTCOLOR (RID_SVX_START + 1178) //-----IAccessibility2 Implementation 2009 + +#define RID_SVXSTR_FINDBAR_FIND (RID_SVX_START + 1190) + +#define RID_SVXSTR_NUMBULLET_NONE (RID_SVX_START + 1191) +#define RID_SVXSTR_NUMBULLET_CURRENT_LIST_DESCRIPTION (RID_SVX_START + 1192) +#define RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION (RID_SVX_START + 1193) +#define RID_SVXSTR_NUMBULLET_CUSTOM_NUMBERING_DESCRIPTION (RID_SVX_START + 1194) +#define RID_SVXSTR_NUMBULLET_CUSTOM_MULTILEVEL_DESCRIPTION (RID_SVX_START + 1195) +#define RID_SVXSTR_NUMBULLET_CUSTOMIZED_WATERMARK (RID_SVX_START + 1196) +#define RID_SVXSTR_BULLET_RTL_DESCRIPTION_4 (RID_SVX_START + 1197) +#define RID_SVXSTR_BULLET_RTL_DESCRIPTION_5 (RID_SVX_START + 1198) +#define RID_SVXSTR_OUTLINENUM_RTL_DESCRIPTION_7 (RID_SVX_START + 1199) + +#define RID_SVXSTR_GRAPHICS_DESCRIPTIONS (RID_SVX_START + 1200) +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_0 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 0) // 1200 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_1 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 1) // 1201 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_2 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 2) // 1202 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_3 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 3) // 1203 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_4 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 4) // 1204 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_5 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 5) // 1205 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_6 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 6) // 1206 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_7 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 7) // 1207 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_8 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 8) // 1208 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_9 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 9) // 1209 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_10 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 10) // 1210 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_11 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 11) // 1211 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_12 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 12) // 1212 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_13 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 13) // 1213 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_14 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 14) // 1214 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_15 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 15) // 1215 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_16 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 16) // 1216 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_17 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 17) // 1217 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_18 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 18) // 1218 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_19 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 19) // 1219 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_20 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 20) // 1220 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_21 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 21) // 1221 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_22 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 22) // 1222 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_23 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 23) // 1223 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_24 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 24) // 1224 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_25 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 25) // 1225 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_26 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 26) // 1226 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_27 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 27) // 1227 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_28 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 28) // 1228 +#define RID_SVXSTR_GRAPHICS_DESCRIPTION_29 (RID_SVXSTR_GRAPHICS_DESCRIPTIONS + 29) // 1229 + +// !!! IMPORTANT: consider and update RID_SVXSTR_NEXTFREE when introducing new RIDs for Strings !!! +#define RID_SVXSTR_NEXTFREE (RID_SVX_START + 1230) + + + + // ---------------------------------------------------------------------------- // if we have _a_lot_ time, we should group the resource ids by type, instead // of grouping them by semantics. The reason is that resource ids have to be diff --git a/svx/inc/svx/dlgctrl.hxx b/svx/inc/svx/dlgctrl.hxx index f7593c252813..c15a948ef166 100644 --- a/svx/inc/svx/dlgctrl.hxx +++ b/svx/inc/svx/dlgctrl.hxx @@ -34,7 +34,7 @@ class XBitmapEntry; class XBitmapList; class XColorEntry; -class XColorTable; +class XColorList; class XDash; class XDashEntry; class XDashList; @@ -259,7 +259,7 @@ public: ColorLB( Window* pParent, ResId Id ) : ColorListBox( pParent, Id ) {} ColorLB( Window* pParent, WinBits aWB ) : ColorListBox( pParent, aWB ) {} - virtual void Fill( const XColorTable* pTab ); + virtual void Fill( const XColorList* pTab ); void Append( XColorEntry* pEntry, Bitmap* pBmp = NULL ); void Modify( XColorEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL ); @@ -327,8 +327,8 @@ public: virtual void Fill(const XBitmapList* pList); virtual void UserDraw(const UserDrawEvent& rUDEvt); - void Append(XBitmapEntry* pEntry, BitmapEx* pBmpEx = 0); - void Modify(XBitmapEntry* pEntry, sal_uInt16 nPos, BitmapEx* pBmpEx = 0); + void Append(const Size& rSize, const XBitmapEntry& rEntry, BitmapEx* pBmpEx = 0); + void Modify(const Size& rSize, const XBitmapEntry& rEntry, sal_uInt16 nPos, BitmapEx* pBmpEx = 0); void SelectEntryByList(const XBitmapList* pList, const String& rStr); private: @@ -338,7 +338,7 @@ private: XBitmapList* mpList; bool mbUserDraw; - SVX_DLLPRIVATE void SetVirtualDevice(); + SVX_DLLPRIVATE void SetVirtualDevice(const Size& rSize); }; /************************************************************************* @@ -352,13 +352,13 @@ private: VirtualDevice maVD; BitmapEx maBitmapEx; - void SetVirtualDevice(); + void SetVirtualDevice(const Size& rSize); public: FillAttrLB( Window* pParent, ResId Id ); FillAttrLB( Window* pParent, WinBits aWB ); - virtual void Fill( const XColorTable* pTab ); + virtual void Fill( const XColorList* pTab ); virtual void Fill( const XHatchList* pList ); virtual void Fill( const XGradientList* pList ); virtual void Fill( const XBitmapList* pList ); @@ -395,11 +395,11 @@ public: virtual void Fill( const XDashList* pList ); - void Append( XDashEntry* pEntry, Bitmap* pBmp = NULL ); - void Modify( XDashEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL ); + void Append( XDashEntry* pEntry, const Bitmap* pBmp = NULL ); + void Modify( XDashEntry* pEntry, sal_uInt16 nPos, const Bitmap* pBmp = NULL ); void SelectEntryByList( const XDashList* pList, const String& rStr, const XDash& rDash, sal_uInt16 nDist = 0 ); - void FillStyles(); + // void FillStyles(); }; /************************************************************************* @@ -411,14 +411,15 @@ class SVX_DLLPUBLIC LineEndLB : public ListBox { public: - LineEndLB( Window* pParent, ResId Id ) : ListBox( pParent, Id ) {} - LineEndLB( Window* pParent, WinBits aWB ) : ListBox( pParent, aWB ) {} + LineEndLB( Window* pParent, ResId Id ); + LineEndLB( Window* pParent, WinBits aWB ); + virtual ~LineEndLB (void); virtual void Fill( const XLineEndList* pList, sal_Bool bStart = sal_True ); - void Append( XLineEndEntry* pEntry, Bitmap* pBmp = NULL, + void Append( XLineEndEntry* pEntry, const Bitmap* pBmp = NULL, sal_Bool bStart = sal_True ); - void Modify( XLineEndEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL, + void Modify( XLineEndEntry* pEntry, sal_uInt16 nPos, const Bitmap* pBmp = NULL, sal_Bool bStart = sal_True ); }; diff --git a/svx/inc/svx/dlgutil.hxx b/svx/inc/svx/dlgutil.hxx index e42efd6b398b..0edab504b2dd 100644 --- a/svx/inc/svx/dlgutil.hxx +++ b/svx/inc/svx/dlgutil.hxx @@ -34,7 +34,8 @@ // Functions ------------------------------------------------------------- class SfxItemSet; -SVX_DLLPUBLIC FieldUnit GetModuleFieldUnit( const SfxItemSet& ); +SVX_DLLPUBLIC FieldUnit GetModuleFieldUnit(const SfxItemSet&); +SVX_DLLPUBLIC FieldUnit GetModuleFieldUnit(); #define OUTPUT_DRAWMODE_COLOR (DRAWMODE_DEFAULT) #define OUTPUT_DRAWMODE_CONTRAST (DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT) diff --git a/svx/inc/svx/drawitem.hxx b/svx/inc/svx/drawitem.hxx index c0de777b2657..a5a683801956 100644 --- a/svx/inc/svx/drawitem.hxx +++ b/svx/inc/svx/drawitem.hxx @@ -34,16 +34,16 @@ // SvxColorTableItem //================================================================== -class XColorTable; +class XColorList; class SVX_DLLPUBLIC SvxColorTableItem: public SfxPoolItem { - XColorTable* pColorTable; + XColorList* pColorTable; public: TYPEINFO(); SvxColorTableItem(); - SvxColorTableItem( XColorTable* pTable, + SvxColorTableItem( XColorList* pTable, sal_uInt16 nWhich ); SvxColorTableItem( const SvxColorTableItem& ); @@ -57,8 +57,8 @@ public: virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ); - XColorTable* GetColorTable() const { return pColorTable; } - void SetColorTable( XColorTable* pTable ) { + XColorList* GetColorTable() const { return pColorTable; } + void SetColorTable( XColorList* pTable ) { pColorTable = pTable; } }; diff --git a/svx/inc/svx/fontwork.hxx b/svx/inc/svx/fontwork.hxx index 9a97b2472c71..323297dcfc66 100644 --- a/svx/inc/svx/fontwork.hxx +++ b/svx/inc/svx/fontwork.hxx @@ -132,7 +132,7 @@ class SVX_DLLPUBLIC SvxFontWorkDialog : public SfxDockingWindow ImageList maImageList; ImageList maImageListH; - const XColorTable* pColorTable; + const XColorList* pColorTable; #ifdef _SVX_FONTWORK_CXX friend class SvxFontWorkChildWindow; @@ -175,7 +175,7 @@ class SVX_DLLPUBLIC SvxFontWorkDialog : public SfxDockingWindow const ResId& rResId ); ~SvxFontWorkDialog(); - void SetColorTable(const XColorTable* pTable); + void SetColorTable(const XColorList* pTable); void SetActive(sal_Bool bActivate = sal_True); }; diff --git a/svx/inc/svx/galbrws.hxx b/svx/inc/svx/galbrws.hxx index b7ad3ccec64c..834c5659ed84 100644 --- a/svx/inc/svx/galbrws.hxx +++ b/svx/inc/svx/galbrws.hxx @@ -19,8 +19,6 @@ * *************************************************************/ - - #ifndef _SVX_GALBRWS_HXX_ #define _SVX_GALBRWS_HXX_ @@ -64,7 +62,7 @@ class GalleryBrowser2; class GallerySplitter; class Gallery; -class GalleryBrowser : public SfxDockingWindow +class SVX_DLLPUBLIC GalleryBrowser : public SfxDockingWindow { friend class GalleryBrowser1; friend class GalleryBrowser2; @@ -72,19 +70,16 @@ class GalleryBrowser : public SfxDockingWindow using Window::KeyInput; private: - Size maLastSize; GallerySplitter* mpSplitter; GalleryBrowser1* mpBrowser1; GalleryBrowser2* mpBrowser2; Gallery* mpGallery; - long mnDummy1; - long mnDummy2; - long mnDummy3; + /// bitfield void InitSettings(); - virtual sal_Bool Close(); + virtual sal_Bool Close(); virtual void Resize(); virtual void GetFocus(); diff --git a/svx/inc/svx/nbdtmg.hxx b/svx/inc/svx/nbdtmg.hxx new file mode 100755 index 000000000000..047fcb508644 --- /dev/null +++ b/svx/inc/svx/nbdtmg.hxx @@ -0,0 +1,390 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _NBDTMG_HXX +#define _NBDTMG_HXX +#include "svx/svxdllapi.h" + +#ifndef _SVX_NUMITEM_HXX +#include <editeng/numitem.hxx> +#endif +#define _SVSTDARR_USHORTS +#include <svl/svstdarr.hxx> +#include <svl/svarray.hxx> +#ifndef _LIST_HXX +#include <tools/list.hxx> +#endif +#ifndef _SV_FONT_HXX +#include <vcl/font.hxx> +#endif + +namespace svx { namespace sidebar { + +#define DEFAULT_BULLET_TYPES 8 +#define DEFAULT_NONE 10 +#define DEFAULT_NUM_TYPE_MEMBER 5 +#define DEFAULT_NUM_VALUSET_COUNT 8 +#define DEFAULT_NUMBERING_CACHE_FORMAT_VERSION 0x10 + +typedef sal_uInt16 NBOType; +namespace eNBOType +{ + const NBOType BULLETS = 0x01; + const NBOType GRAPHICBULLETS = 0x02; + const NBOType NUMBERING = 0x03; + const NBOType OUTLINE = 0x04; + const NBOType MIXBULLETS = 0x05; +} + +typedef sal_uInt16 NBType; +namespace eNBType +{ + const NBOType BULLETS = 0x01; + const NBOType GRAPHICBULLETS = 0x02; +} + +class SVX_DLLPUBLIC NumSettings_Impl +{ + public: + short nNumberType; + short nParentNumbering; + SvxNumberFormat::SvxNumLabelFollowedBy eLabelFollowedBy; + long nTabValue; + SvxAdjust eNumAlign; + long nNumAlignAt; + long nNumIndentAt; + rtl::OUString sPrefix; + rtl::OUString sSuffix; + rtl::OUString sBulletChar; + rtl::OUString sBulletFont; + SvxBrushItem *pBrushItem; + Size aSize; + + public: + NumSettings_Impl() : + nNumberType(0), + pBrushItem(0), + aSize(0,0), + nParentNumbering(0) + {} + ~NumSettings_Impl(){} +}; +/* +typedef NumSettings_Impl* NumSettings_ImplPtr; +SV_DECL_PTRARR_DEL(NumSettingsArr_Impl,NumSettings_ImplPtr,8,4) +SV_IMPL_PTRARR( NumSettingsArr_Impl, NumSettings_ImplPtr )*/ + +class NumSettingsArr_Impl; + +class SVX_DLLPUBLIC BulletsSettings +{ + public: + sal_Bool bIsCustomized; + rtl::OUString sDescription; + NBType eType; + public: + BulletsSettings(NBType eTy) : + bIsCustomized(sal_False), + eType(eTy) + {} + virtual ~BulletsSettings(){} +}; + +class SVX_DLLPUBLIC BulletsSettings_Impl:public BulletsSettings +{ + public: + sal_Unicode cBulletChar; + //rtl::OUString sBulletFont; + Font aFont; + + public: + BulletsSettings_Impl(NBType eTy) : + BulletsSettings(eTy) + {} + virtual ~BulletsSettings_Impl(){} +}; + +class SVX_DLLPUBLIC GrfBulDataRelation: public BulletsSettings +{ + public: + String sGrfName; + sal_uInt16 nTabIndex; + sal_uInt16 nGallaryIndex; + const Graphic* pGrfObj; + Size aSize; + GrfBulDataRelation(NBType eTy): + BulletsSettings(eTy), + nTabIndex((sal_uInt16)0xFFFF), + nGallaryIndex((sal_uInt16)0xFFFF), + aSize(0,0), + pGrfObj(0) + {} + virtual ~GrfBulDataRelation(){} +}; + +class SVX_DLLPUBLIC MixBulletsSettings_Impl +{ + public: + NBType eType; + sal_uInt16 nIndex; //index in the tab page display + sal_uInt16 nIndexDefault; + BulletsSettings* pBullets; + public: + MixBulletsSettings_Impl(NBType eTy) : + eType(eTy), + nIndex((sal_uInt16)0xFFFF), + nIndexDefault((sal_uInt16)0xFFFF), + pBullets(0) + {} + ~MixBulletsSettings_Impl(){} +}; + +class SVX_DLLPUBLIC NumberSettings_Impl +{ + public: + sal_Bool bIsCustomized; + rtl::OUString sDescription; + sal_uInt16 nIndex; //index in the tab page display + sal_uInt16 nIndexDefault; + NumSettings_Impl *pNumSetting; + public: + NumberSettings_Impl() : + bIsCustomized(sal_False), + nIndex((sal_uInt16)0xFFFF), + nIndexDefault((sal_uInt16)0xFFFF), + pNumSetting(NULL) + {} + ~NumberSettings_Impl(){} +}; + +class NumberSettingsArr_Impl; + +class SVX_DLLPUBLIC OutlineSettings_Impl +{ + public: + sal_Bool bIsCustomized; + rtl::OUString sDescription; + NumSettingsArr_Impl *pNumSettingsArr; + public: + OutlineSettings_Impl() : + bIsCustomized(sal_False), + pNumSettingsArr(NULL) + {} + ~OutlineSettings_Impl(){ + } +}; + +class SVX_DLLPUBLIC NBOTypeMgrBase +{ + public: + NBOType eType; + private: + const SfxItemSet* pSet; + SfxMapUnit eCoreUnit; + //Sym3_2508 store the attributes passed from pSet + String aNumCharFmtName; + void StoreBulCharFmtName_impl(); + void StoreMapUnit_impl(); + + public: + NBOTypeMgrBase(const NBOType aType):eType(aType),pSet(0),eCoreUnit(SFX_MAPUNIT_TWIP),aNumCharFmtName(String()){} + NBOTypeMgrBase(const NBOType aType,const SfxItemSet* pArg):eType(aType),pSet(pArg),eCoreUnit(SFX_MAPUNIT_TWIP),aNumCharFmtName(String()){} + NBOTypeMgrBase(const NBOTypeMgrBase& aTypeMgr){eType = aTypeMgr.eType;pSet = aTypeMgr.pSet;eCoreUnit = aTypeMgr.eCoreUnit;aNumCharFmtName = aTypeMgr.aNumCharFmtName; } + virtual ~NBOTypeMgrBase() {} + virtual void Init()=0; + virtual sal_uInt16 GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex=0)=0; + virtual sal_Bool RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF)=0; + virtual sal_Bool ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF, sal_Bool isDefault=false,sal_Bool isResetSize=false)=0; + virtual String GetDescription(sal_uInt16 nIndex,sal_Bool isDefault=false)=0; + virtual sal_Bool IsCustomized(sal_uInt16 nIndex)=0; + sal_uInt16 IsSingleLevel(sal_uInt16 nCurLevel); + const SfxItemSet* GetItems() { return pSet;} + //Sym3_2508 store the attributes passed from pSet + void SetItems(const SfxItemSet* pArg) { pSet = pArg;StoreBulCharFmtName_impl();StoreMapUnit_impl();} + protected: + String GetBulCharFmtName(); + SfxMapUnit GetMapUnit(); + protected: + sal_Bool bIsLoading; + void ImplLoad(String filename); + void ImplStore(String filename); + +}; + + +class SVX_DLLPUBLIC BulletsTypeMgr: public NBOTypeMgrBase +{ + friend class OutlineTypeMgr; + friend class NumberingTypeMgr; + public: + static sal_Unicode aDynamicBulletTypes[DEFAULT_BULLET_TYPES]; + static sal_Unicode aDynamicRTLBulletTypes[DEFAULT_BULLET_TYPES]; + static BulletsSettings_Impl* pActualBullets[DEFAULT_BULLET_TYPES]; + static BulletsTypeMgr* _instance; + public: + BulletsTypeMgr(const NBOType aType); + BulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg); + BulletsTypeMgr(const BulletsTypeMgr& aTypeMgr); + virtual ~BulletsTypeMgr() {} + virtual void Init(); + virtual sal_uInt16 GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex=0); + virtual sal_Bool RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF); + virtual sal_Bool ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF,sal_Bool isDefault=false,sal_Bool isResetSize=false); + virtual String GetDescription(sal_uInt16 nIndex,sal_Bool isDefault=false); + virtual sal_Bool IsCustomized(sal_uInt16 nIndex); + sal_Unicode GetBulChar(sal_uInt16 nIndex); + Font GetBulCharFont(sal_uInt16 nIndex); + static BulletsTypeMgr* GetInstance() + { + if ( _instance == 0 ) + { + _instance = new BulletsTypeMgr(eNBOType::BULLETS); + } + + return _instance; + } + +}; + +class SVX_DLLPUBLIC GraphyicBulletsTypeMgr: public NBOTypeMgrBase +{ + friend class OutlineTypeMgr; + friend class NumberingTypeMgr; + public: + List aGrfDataLst; + static GraphyicBulletsTypeMgr* _instance; + public: + GraphyicBulletsTypeMgr(const NBOType aType); + GraphyicBulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg); + GraphyicBulletsTypeMgr(const GraphyicBulletsTypeMgr& aTypeMgr); + virtual ~GraphyicBulletsTypeMgr() {} + virtual void Init(); + virtual sal_uInt16 GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex=0); + virtual sal_Bool RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF); + virtual sal_Bool ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF,sal_Bool isDefault=false,sal_Bool isResetSize=false); + virtual String GetDescription(sal_uInt16 nIndex,sal_Bool isDefault=false); + virtual sal_Bool IsCustomized(sal_uInt16 nIndex); + String GetGrfName(sal_uInt16 nIndex); + static GraphyicBulletsTypeMgr* GetInstance() + { + if ( _instance == 0 ) + { + _instance = new GraphyicBulletsTypeMgr(eNBOType::BULLETS); + } + + return _instance; + } + +}; + +class SVX_DLLPUBLIC MixBulletsTypeMgr: public NBOTypeMgrBase +{ + friend class OutlineTypeMgr; + friend class NumberingTypeMgr; + public: + static MixBulletsSettings_Impl* pActualBullets[DEFAULT_BULLET_TYPES]; + static MixBulletsSettings_Impl* pDefaultActualBullets[DEFAULT_BULLET_TYPES]; + static MixBulletsTypeMgr* _instance; + public: + MixBulletsTypeMgr(const NBOType aType); + MixBulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg); + MixBulletsTypeMgr(const MixBulletsTypeMgr& aTypeMgr); + virtual ~MixBulletsTypeMgr() {} + virtual void Init(); + virtual sal_uInt16 GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex=0); + virtual sal_Bool RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF); + virtual sal_Bool ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF,sal_Bool isDefault=false,sal_Bool isResetSize=false); + virtual String GetDescription(sal_uInt16 nIndex,sal_Bool isDefault=false); + virtual sal_Bool IsCustomized(sal_uInt16 nIndex); + static MixBulletsTypeMgr* GetInstance() + { + if ( _instance == 0 ) + { + _instance = new MixBulletsTypeMgr(eNBOType::MIXBULLETS); + } + + return _instance; + } + +}; + +class SVX_DLLPUBLIC NumberingTypeMgr: public NBOTypeMgrBase +{ + public: + //NumSettingsArr_Impl* pNumSettingsArr; + NumberSettingsArr_Impl* pNumberSettingsArr; + NumberSettingsArr_Impl* pDefaultNumberSettingsArr; + static NumberingTypeMgr* _instance; + public: + NumberingTypeMgr(const NBOType aType); + NumberingTypeMgr(const NBOType aType,const SfxItemSet* pArg); + NumberingTypeMgr(const NumberingTypeMgr& aTypeMgr); + virtual ~NumberingTypeMgr() {} + virtual void Init(); + virtual sal_uInt16 GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex=0); + virtual sal_Bool RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF); + virtual sal_Bool ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF,sal_Bool isDefault=false,sal_Bool isResetSize=false); + virtual String GetDescription(sal_uInt16 nIndex,sal_Bool isDefault=false); + virtual sal_Bool IsCustomized(sal_uInt16 nIndex); + sal_uInt16 GetNumCount() const; + NumberSettings_Impl* GetNumSettingByIndex(sal_uInt16 nIndex) const; + static NumberingTypeMgr* GetInstance() + { + if ( _instance == 0 ) + { + _instance = new NumberingTypeMgr(eNBOType::NUMBERING); + } + + return _instance; + } +}; + +class SVX_DLLPUBLIC OutlineTypeMgr: public NBOTypeMgrBase +{ + public: + //NumSettingsArr_Impl* pNumSettingsArrs[DEFAULT_NUM_VALUSET_COUNT]; + OutlineSettings_Impl* pOutlineSettingsArrs[DEFAULT_NUM_VALUSET_COUNT]; + OutlineSettings_Impl* pDefaultOutlineSettingsArrs[DEFAULT_NUM_VALUSET_COUNT]; + static OutlineTypeMgr* _instance; + public: + OutlineTypeMgr(const NBOType aType); + OutlineTypeMgr(const NBOType aType,const SfxItemSet* pArg); + OutlineTypeMgr(const OutlineTypeMgr& aTypeMgr); + virtual ~OutlineTypeMgr() {} + virtual void Init(); + virtual sal_uInt16 GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex=0); + virtual sal_Bool RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF); + virtual sal_Bool ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel=(sal_uInt16)0xFFFF,sal_Bool isDefault=false,sal_Bool isResetSize=false); + virtual String GetDescription(sal_uInt16 nIndex,sal_Bool isDefault=false); + virtual sal_Bool IsCustomized(sal_uInt16 nIndex); + static OutlineTypeMgr* GetInstance() + { + if ( _instance == 0 ) + { + _instance = new OutlineTypeMgr(eNBOType::OUTLINE); + } + + return _instance; + } +}; +}} +#endif + diff --git a/svx/inc/svx/nbdtmgfact.hxx b/svx/inc/svx/nbdtmgfact.hxx new file mode 100755 index 000000000000..7aedc5116e8b --- /dev/null +++ b/svx/inc/svx/nbdtmgfact.hxx @@ -0,0 +1,37 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _NBDTMGFACT_HXX +#define _NBDTMGFACT_HXX +#ifndef _NBDTMG_HXX +#include "nbdtmg.hxx" +#endif +namespace svx { namespace sidebar { +class SVX_DLLPUBLIC NBOutlineTypeMgrFact +{ +public: + static NBOTypeMgrBase* CreateInstance(const NBOType aType); + NBOutlineTypeMgrFact(); + virtual ~NBOutlineTypeMgrFact() {} +}; +}} +#endif + diff --git a/svx/source/table/tablecontroller.hxx b/svx/inc/svx/sdr/table/tablecontroller.hxx index d8fd1d9c831b..f6494ed6027e 100644..100755 --- a/svx/source/table/tablecontroller.hxx +++ b/svx/inc/svx/sdr/table/tablecontroller.hxx @@ -32,7 +32,7 @@ #include <svx/selectioncontroller.hxx> #include <svx/svdotable.hxx> #include <svx/svdview.hxx> -#include <tablemodel.hxx> +//#include <tablemodel.hxx> class SdrObjEditView; class SdrObject; @@ -40,6 +40,8 @@ class SfxItemSet; namespace sdr { namespace table { +class TableModel; + const sal_Int16 SELTYPE_NONE = 0; const sal_Int16 SELTYPE_MOUSE = 1; const sal_Int16 SELTYPE_KEYS = 2; @@ -142,7 +144,8 @@ private: DECL_LINK( UpdateHdl, void * ); - TableModelRef mxTable; + //TableModelRef mxTable; + rtl::Reference< TableModel > mxTable; CellPos maCursorFirstPos; CellPos maCursorLastPos; diff --git a/svx/inc/svx/sidebar/ColorControl.hxx b/svx/inc/svx/sidebar/ColorControl.hxx new file mode 100644 index 000000000000..de84aab91723 --- /dev/null +++ b/svx/inc/svx/sidebar/ColorControl.hxx @@ -0,0 +1,86 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/PopupControl.hxx" + +#include <svtools/valueset.hxx> +#include <boost/function.hpp> + +class Window; +class SfxBindings; +class RedId; +class FloatingWindow; + + +namespace svx { namespace sidebar { + +/** The ColorControl uses a ValueSet control for displaying all named + colors in a matrix. +*/ +class SVX_DLLPUBLIC ColorControl + : public PopupControl +{ +public: + /** Create a new ColorControl object. + @param rControlResId + The resource id for the whole color control. + @param rNoColorGetter + A functor for getting the color which will be returned when the + WB_NONEFIELD is used and got selected + @param rColorSetter + A functor for setting the color that is selected by the + user. + @param pNoColorStringResId + Resource id of an optional string for the "no color" + string. When a value is given then a + field/button is created above the color matrix for + selecting "no color" ie. transparent. + When zero is given then no such field is created. + */ + ColorControl ( + Window* pParent, + SfxBindings* pBindings, + const ResId& rControlResId, + const ResId& rValueSetResId, + const ::boost::function<Color(void)>& rNoColorGetter, + const ::boost::function<void(String&,Color)>& rColorSetter, + FloatingWindow* pFloatingWindow, + const ResId* pNoColorStringResId); + virtual ~ColorControl (void); + + void GetFocus (void); + void SetCurColorSelect ( + const Color aCol, + const bool bAvl); + +private: + SfxBindings* mpBindings; + ValueSet maVSColor; + FloatingWindow* mpFloatingWindow; + const String msNoColorString; + ::boost::function<Color(void)> maNoColorGetter; + ::boost::function<void(String&,Color)> maColorSetter; + + void FillColors (void); + DECL_LINK(VSSelectHdl, void *); +}; + +} } // end of namespace svx::sidebar diff --git a/svx/inc/svx/sidebar/ColorPopup.hxx b/svx/inc/svx/sidebar/ColorPopup.hxx new file mode 100644 index 000000000000..f4c9ef4fa971 --- /dev/null +++ b/svx/inc/svx/sidebar/ColorPopup.hxx @@ -0,0 +1,55 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_COLOR_POPUP_HXX_ +#define _SVX_SIDEBAR_COLOR_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <tools/color.hxx> + + +namespace svx { namespace sidebar { + +/** Popup control that displays all named colors in a matrix. + The number of rows and columns of the matrix are computed from + the number of named colors so that both have roughly the same + value. + + The ColorPopup uses ColorControl as control for its content. +*/ +class SVX_DLLPUBLIC ColorPopup + : public Popup +{ +public : + ColorPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + virtual ~ColorPopup (void); + + void SetCurrentColor ( + const Color aCurrentColor, + const bool bIsColorAvailable); +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/sidebar/ContextChangeEventMultiplexer.hxx b/svx/inc/svx/sidebar/ContextChangeEventMultiplexer.hxx new file mode 100644 index 000000000000..1d661d8f0a58 --- /dev/null +++ b/svx/inc/svx/sidebar/ContextChangeEventMultiplexer.hxx @@ -0,0 +1,69 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ +#define _SVX_SIDEBAR_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ + +#include "svx/svxdllapi.h" +#include <sfx2/sidebar/EnumContext.hxx> +#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/frame/XFrame.hpp> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +class SfxViewShell; + +/** Convenience frontend for com::sun::star::ui::ContextChangeEventMultiplexer +*/ +class SVX_DLLPUBLIC ContextChangeEventMultiplexer +{ +public: + /** Notify the activation of a context. + @param rxController + This controller is used to determine the module (ie + application like Writer or Calc). + @param eContext + The activated context. + */ + static void NotifyContextChange ( + const cssu::Reference<css::frame::XController>& rxController, + const ::sfx2::sidebar::EnumContext::Context eContext); + + /** Notify the activation of a context. + @param pViewShell + This view shell is used to determine the module (ie + application like Writer or Calc). When <NULL/> then no + notification is made. + @param eContext + The activated context. + */ + static void NotifyContextChange ( + SfxViewShell* pViewShell, + const ::sfx2::sidebar::EnumContext::Context eContext); + +private: + static ::rtl::OUString GetModuleName ( + const cssu::Reference<css::frame::XFrame>& rxFrame); +}; + +#endif + diff --git a/svx/inc/svx/sidebar/Popup.hxx b/svx/inc/svx/sidebar/Popup.hxx new file mode 100644 index 000000000000..00d48af259e0 --- /dev/null +++ b/svx/inc/svx/sidebar/Popup.hxx @@ -0,0 +1,107 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_POPUP_HXX_ +#define _SVX_SIDEBAR_POPUP_HXX_ + +#include "svx/svxdllapi.h" +#include <rtl/ustring.hxx> +#include <tools/link.hxx> + +#include <boost/function.hpp> +#include <boost/scoped_ptr.hpp> + +class Window; +class ToolBox; + +namespace svx { namespace sidebar { + +class PopupContainer; +class PopupControl; + +/** A wrapper around a PopupContainer and a PopupControl object. + Usually used as drop down for a toolbox. Use Show() to start + drop down mode and Hide() to end it. +*/ +class SVX_DLLPUBLIC Popup +{ +public : + /** Create a Popup wrapper object. + @param pParent + Parent window of the PopupContainer, which in turn is the + parent of the PopupControl. + @param rControlCreator + A functor that is called to create the PopupControl object + (usually an instance of a class derived from + PopupControl). + */ + Popup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator, + const ::rtl::OUString& rsAccessibleName); + virtual ~Popup (void); + + /** Show the popup. + @rToolBox + The tool box is used to determine the position at which + the popup is displayed. + */ + void Show (ToolBox& rToolBox); + + /** Hide the popup. + This method is called automatically when eg. the user clicks + outside the popup or when the ESC-key is pressed. The + application can call Hide() when the popup should be closed + for other, non-standard reasons. + */ + void Hide (void); + + /** If you want to be informed when the popup closes then add a + callback that is called after that. + */ + void SetPopupModeEndHandler (const ::boost::function<void(void)>& rCallback); + +protected: + ::boost::scoped_ptr<PopupControl> mpControl; + + /** Make sure that both PopupContainer and PopupControl objects + exist. Calls the maControlCreator functor if necessary. + */ + void ProvideContainerAndControl (void); + + /** A derived specialisation class can override this method to do + additional work. + */ + virtual void CreateContainerAndControl (void); + +private: + Window* mpParent; + ::boost::function<PopupControl*(PopupContainer*)> maControlCreator; + ::boost::function<void(void)> maPopupModeEndCallback; + const ::rtl::OUString msAccessibleName; + ::boost::scoped_ptr<PopupContainer> mpContainer; + + DECL_LINK(PopupModeEndHandler, void*); +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/sidebar/PopupContainer.hxx b/svx/inc/svx/sidebar/PopupContainer.hxx new file mode 100644 index 000000000000..99c94236fd0f --- /dev/null +++ b/svx/inc/svx/sidebar/PopupContainer.hxx @@ -0,0 +1,48 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_POPUP_CONTAINER_HXX_ +#define _SVX_SIDEBAR_POPUP_CONTAINER_HXX_ + +#include "svx/svxdllapi.h" +#include <vcl/floatwin.hxx> + +namespace svx { namespace sidebar { + +/** Simple base class for popup container windows used by sidebar + related drop downs. + It initializes the underlying floating window with the right + flags and closes the drop down when appropriate. +*/ +class SVX_DLLPUBLIC PopupContainer + : public FloatingWindow +{ +public: + PopupContainer (Window* pParent); + virtual ~PopupContainer (void); + + virtual long Notify (NotifyEvent& rNEvt); +}; + + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/sidebar/PopupControl.hxx b/svx/inc/svx/sidebar/PopupControl.hxx new file mode 100644 index 000000000000..449c7c13364c --- /dev/null +++ b/svx/inc/svx/sidebar/PopupControl.hxx @@ -0,0 +1,51 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_POPUP_CONTROL_HXX_ +#define _SVX_SIDEBAR_POPUP_CONTROL_HXX_ + +#include "svx/svxdllapi.h" +#include <vcl/ctrl.hxx> + +namespace svx { namespace sidebar { + +/** Base class for sidebar related popup controls. + A PopupControl is typically a child of a PopupContainer and + provides the actual content of a popup. + This base class takes care of painting the proper background and + border for sidebar popups. + Specialize by derivation. +*/ +class SVX_DLLPUBLIC PopupControl + : public Control +{ +public : + PopupControl ( + Window* pParent, + const ResId& rResId); + virtual ~PopupControl (void); + + virtual void Paint (const Rectangle& rect); +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/sidebar/SelectionAnalyzer.hxx b/svx/inc/svx/sidebar/SelectionAnalyzer.hxx new file mode 100644 index 000000000000..3f4fa14af8ef --- /dev/null +++ b/svx/inc/svx/sidebar/SelectionAnalyzer.hxx @@ -0,0 +1,66 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_SELECTION_ANALYZER_HXX_ +#define _SVX_SIDEBAR_SELECTION_ANALYZER_HXX_ + +#include <sfx2/sidebar/EnumContext.hxx> +#include "svx/svxdllapi.h" + +class SdrMarkList; +class SdrObject; + + +namespace svx { namespace sidebar { + +class SVX_DLLPUBLIC SelectionAnalyzer +{ +public : + static sfx2::sidebar::EnumContext::Context GetContextForSelection_SC ( + const SdrMarkList& rMarkList); + static sfx2::sidebar::EnumContext::Context GetContextForSelection_SD ( + const SdrMarkList& rMarkList, + const bool bIsMasterPage, + const bool bIsHandoutPage, + const bool bIsNotesPage); + +private: + static sfx2::sidebar::EnumContext::Context GetContextForObjectId_SC ( + const sal_uInt16 nObjectId); + static sfx2::sidebar::EnumContext::Context GetContextForObjectId_SD ( + const sal_uInt16 nObjectId, + const bool bIsHandoutPage, + const bool bIsNotesPage); + static sal_uInt32 GetInventorTypeFromMark ( + const SdrMarkList& rMarkList); + static sal_uInt16 GetObjectTypeFromMark ( + const SdrMarkList& rMarkList); + static sal_uInt16 GetObjectTypeFromGroup ( + const SdrObject* pObj); + static bool IsShapeType ( + const sal_uInt16 nType); + static bool IsTextObjType ( + const sal_uInt16 nType); +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/sidebar/SelectionChangeHandler.hxx b/svx/inc/svx/sidebar/SelectionChangeHandler.hxx new file mode 100644 index 000000000000..1815414e4f9b --- /dev/null +++ b/svx/inc/svx/sidebar/SelectionChangeHandler.hxx @@ -0,0 +1,89 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_SELECTION_CHANGE_HANDLER_HXX_ +#define _SVX_SIDEBAR_SELECTION_CHANGE_HANDLER_HXX_ + +#include "svx/svxdllapi.h" +#include <sfx2/sidebar/EnumContext.hxx> +#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/view/XSelectionSupplier.hpp> +#include <com/sun/star/view/XSelectionChangeListener.hpp> + +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <boost/noncopyable.hpp> +#include <boost/function.hpp> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +class SdrMarkView; + + +namespace svx { namespace sidebar { + +namespace { + typedef ::cppu::WeakComponentImplHelper1 < + css::view::XSelectionChangeListener + > SelectionChangeHandlerInterfaceBase; +} + + +class SVX_DLLPUBLIC SelectionChangeHandler + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public SelectionChangeHandlerInterfaceBase +{ +public: + SelectionChangeHandler ( + const boost::function<sfx2::sidebar::EnumContext::Context(void)>& rSelectionChangeCallback, + const cssu::Reference<css::frame::XController>& rxController, + const sfx2::sidebar::EnumContext::Context eDefaultContext); + virtual ~SelectionChangeHandler (void); + + virtual void SAL_CALL selectionChanged (const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException); + + virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException); + + virtual void SAL_CALL disposing (void) + throw (cssu::RuntimeException); + + void Connect (void); + void Disconnect (void); + +private: + const boost::function<sfx2::sidebar::EnumContext::Context(void)> maSelectionChangeCallback; + cssu::Reference<css::frame::XController> mxController; + const sfx2::sidebar::EnumContext::Context meDefaultContext; + bool mbIsConnected; +}; + + +} } // end of namespace svx::sidebar + + +#endif + diff --git a/svx/inc/svx/sidebar/SidebarDialControl.hxx b/svx/inc/svx/sidebar/SidebarDialControl.hxx new file mode 100644 index 000000000000..49d6d5f1ee1b --- /dev/null +++ b/svx/inc/svx/sidebar/SidebarDialControl.hxx @@ -0,0 +1,45 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_DIAL_CONTROL_HXX +#define SVX_SIDEBAR_DIAL_CONTROL_HXX + +#include <svx/dialcontrol.hxx> + +namespace svx { namespace sidebar { + +/** Provide some improvements over the standard DialControl. +*/ +class SVX_DLLPUBLIC SidebarDialControl : public svx::DialControl +{ +public: + SidebarDialControl (Window* pParent, const ResId& rResId); + virtual ~SidebarDialControl (void); + + virtual void MouseButtonDown (const MouseEvent& rMEvt); + +protected: + virtual void HandleMouseEvent (const Point& rPos, bool bInitial); +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/sidebar/ValueSetWithTextControl.hxx b/svx/inc/svx/sidebar/ValueSetWithTextControl.hxx new file mode 100644 index 000000000000..03531521c5e7 --- /dev/null +++ b/svx/inc/svx/sidebar/ValueSetWithTextControl.hxx @@ -0,0 +1,161 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_VALUESETWITHTEXT_CONTROL_HXX_ +#define _SVX_SIDEBAR_VALUESETWITHTEXT_CONTROL_HXX_ + +#include "svx/svxdllapi.h" + +#include <svtools/valueset.hxx> +#include <limits.h> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/uno/Sequence.h> +#include <com/sun/star/lang/Locale.hpp> + +#include <vcl/image.hxx> + +#include <vector> + +namespace com{namespace sun{ namespace star{ + namespace container{ + class XIndexAccess; + } + namespace beans{ + struct PropertyValue; + } + namespace text{ + class XNumberingFormatter; + } +}}} + +namespace svx { namespace sidebar { + +/** Specialization of class <ValueSet>. + This specialization allows is a one-columned ValueSet which allow + items containing an image and a text or a text and a second text. + + Especially, used for sidebar related controls. +*/ +class SVX_DLLPUBLIC ValueSetWithTextControl : public ValueSet +{ +public: + // control type of specialized <ValueSet>: + // - image + text + // - text + text + enum tControlType + { + IMAGE_TEXT, + TEXT_TEXT + }; + + ValueSetWithTextControl( + const tControlType eControlType, + Window* pParent, + const ResId& rResId); + + virtual ~ValueSetWithTextControl(void); + + // add item for control type IMAGE_TEXT + // if control type does not match IMAGE_TEXT no item is added. + // @param pSelectedItemImage + // selection item image is optional. if not provided, it is the same as the image item + // @param pItemHelpText + // help text is optional. if not provided, it is the same as the item text + void AddItem( + const Image& rItemImage, + const Image* pSelectedItemImage, + const XubString& rItemText, + const XubString* pItemHelpText ); + + // replace item images for control type IMAGE_TEXT + void ReplaceItemImages( + const sal_uInt16 nItemId, + const Image& rItemImage, + const Image* pSelectedItemImage ); + + // add item for control type TEXT_TEXT + // if control type does not match TEXT_TEXT no item is added. + // @param pItemHelpText + // help text is optional. if not provided, it is the same as the item text + void AddItem( + const XubString& rItemText, + const XubString& rItemText2, + const XubString* pItemHelpText ); + + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + +private: + struct ValueSetWithTextItem + { + Image maItemImage; + Image maSelectedItemImage; + XubString maItemText; + XubString maItemText2; + }; + + typedef ::std::vector< ValueSetWithTextItem > tItemList; + + const tControlType meControlType; + tItemList maItems; +}; + +class SVX_DLLPUBLIC SvxNumValueSet2 : public ValueSet +{ + Color aLineColor; + Rectangle aOrgRect; + VirtualDevice* pVDev; + + com::sun::star::uno::Reference<com::sun::star::text::XNumberingFormatter> xFormatter; + com::sun::star::lang::Locale aLocale; + + com::sun::star::uno::Sequence< + com::sun::star::uno::Sequence< + com::sun::star::beans::PropertyValue> > aNumSettings; + + + public: + SvxNumValueSet2( Window* pParent, const ResId& rResId); + ~SvxNumValueSet2(); + + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + + + void SetNumberingSettings( + const com::sun::star::uno::Sequence< + com::sun::star::uno::Sequence< + com::sun::star::beans::PropertyValue> >& aNum, + com::sun::star::uno::Reference<com::sun::star::text::XNumberingFormatter>& xFormatter, + const com::sun::star::lang::Locale& rLocale ); +}; + +class SVX_DLLPUBLIC SvxNumValueSet3 : public ValueSet +{ + public: + SvxNumValueSet3( Window* pParent, const ResId& rResId); + ~SvxNumValueSet3(); + + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/inc/svx/svdedtv.hxx b/svx/inc/svx/svdedtv.hxx index 5ba95fcb25c9..879dcbd26ace 100644 --- a/svx/inc/svx/svdedtv.hxx +++ b/svx/inc/svx/svdedtv.hxx @@ -243,6 +243,7 @@ public: void SetMarkedObjRect(const Rectangle& rRect, sal_Bool bCopy=sal_False); void MoveMarkedObj(const Size& rSiz, bool bCopy=false); void ResizeMarkedObj(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bCopy=false); + void ResizeMultMarkedObj(const Point& rRef, const Fraction& xFact, const Fraction& yFact, const bool bCopy, const bool bWdh, const bool bHgt); long GetMarkedObjRotate() const; void RotateMarkedObj(const Point& rRef, long nWink, bool bCopy=false); void MirrorMarkedObj(const Point& rRef1, const Point& rRef2, bool bCopy=false); diff --git a/svx/inc/svx/svdedxv.hxx b/svx/inc/svx/svdedxv.hxx index 6d8203b0d325..e7d6b7cbdb08 100644 --- a/svx/inc/svx/svdedxv.hxx +++ b/svx/inc/svx/svdedxv.hxx @@ -270,6 +270,9 @@ public: virtual void AddWindowToPaintView(OutputDevice* pNewWin); virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin); + sal_uInt16 GetSelectionLevel() const; + + //************************************************************************ // Object-MacroModus (z.B. Rect als Button oder sowas): //************************************************************************ diff --git a/svx/inc/svx/svdmodel.hxx b/svx/inc/svx/svdmodel.hxx index 05814e23330e..5418a4527ab6 100644 --- a/svx/inc/svx/svdmodel.hxx +++ b/svx/inc/svx/svdmodel.hxx @@ -78,16 +78,11 @@ class SfxStyleSheet; class SfxUndoAction; class SfxUndoManager; class XBitmapList; -class XBitmapTable; -class XColorTable; +class XColorList; class XDashList; -class XDashTable; class XGradientList; -class XGradientTable; class XHatchList; -class XHatchTable; class XLineEndList; -class XLineEndTable; class SvxForbiddenCharactersTable; class SvNumberFormatter; class SotStorage; @@ -282,7 +277,7 @@ public: FASTBOOL mbInDestruction; // Zeiger auf Paletten, Listen und Tabellen - XColorTable* pColorTable; + XColorList* pColorTable; XDashList* pDashList; XLineEndList* pLineEndList; XHatchList* pHatchList; @@ -658,8 +653,8 @@ public: const Link& GetIOProgressHdl() const { return aIOProgressLink; } // Zugriffsmethoden fuer Paletten, Listen und Tabellen - void SetColorTable(XColorTable* pTable) ; - XColorTable* GetColorTable() const { return pColorTable; } + void SetColorTable(XColorList* pTable) ; + XColorList* GetColorTable() const { return pColorTable; } void SetDashList(XDashList* pList) ; XDashList* GetDashList() const { return pDashList; } void SetLineEndList(XLineEndList* pList) ; diff --git a/svx/inc/svx/svdobj.hxx b/svx/inc/svx/svdobj.hxx index dd18589bc9d9..14a9301148e1 100644 --- a/svx/inc/svx/svdobj.hxx +++ b/svx/inc/svx/svdobj.hxx @@ -40,6 +40,7 @@ #include <svx/sdrobjectuser.hxx> #include "svx/svxdllapi.h" #include "svx/shapeproperty.hxx" +#include <svl/poolitem.hxx> //************************************************************ // Vorausdeklarationen @@ -855,6 +856,9 @@ protected: void SetObjectItemSet(const SfxItemSet& rSet); const SfxPoolItem& GetObjectItem(const sal_uInt16 nWhich) const; + // get SfxMapUnit the object is using + SfxMapUnit GetObjectMapUnit() const; + public: // syntactical sugar for ItemSet accesses void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False); diff --git a/svx/inc/svx/svdogrp.hxx b/svx/inc/svx/svdogrp.hxx index b32c44096ef9..3b70be0218f9 100644 --- a/svx/inc/svx/svdogrp.hxx +++ b/svx/inc/svx/svdogrp.hxx @@ -48,9 +48,6 @@ protected: virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); SdrObjList* pSub; // Subliste (Kinder) - long nDrehWink; - long nShearWink; - Point aRefPoint; // Referenzpunkt innerhalb der Objektgruppe FASTBOOL bRefPoint; // Ist ein RefPoint gesetzt? diff --git a/svx/inc/svx/svdstr.hrc b/svx/inc/svx/svdstr.hrc index 60225090efc4..a78cf826b4b9 100644 --- a/svx/inc/svx/svdstr.hrc +++ b/svx/inc/svx/svdstr.hrc @@ -785,8 +785,11 @@ #define SIP_SA_CROP_MARKERS (SIP_Begin + 276) #define SIP_SA_CROP_FINE_MARKERS (SIP_Begin + 277) #define SIP_SA_ACCESSIBILITY_CROP_MARKERS (SIP_Begin + 278) +#define IMG_DIACONTROL_NORMAL (SIP_Begin + 279) +#define IMG_DIACONTROL_H (SIP_Begin + 280) -#define SIP_End (SIP_SA_ACCESSIBILITY_CROP_MARKERS) + +#define SIP_End (IMG_DIACONTROL_H) #define SDR_ResourceEnd (SIP_End) diff --git a/svx/inc/svx/svxids.hrc b/svx/inc/svx/svxids.hrc index 3a31540fcfe2..a864e41381da 100755 --- a/svx/inc/svx/svxids.hrc +++ b/svx/inc/svx/svxids.hrc @@ -373,6 +373,8 @@ #define FN_NUM_BULLET_OFF (FN_EDIT + 37) /* Numerierung aus */ #define FN_NUM_BULLET_ON (FN_EDIT + 38) /* Numerierung mit Bullets an */ #define FN_NUM_NUMBERING_ON (FN_EDIT + 44) /* Numerierung an */ +#define FN_BUL_NUM_RULE_INDEX (FN_EDIT + 120) /* Achieving num rule index */ +#define FN_NUM_NUM_RULE_INDEX (FN_EDIT + 121) #define FN_INSERT (SID_SW_START + 300) #define FN_DELETE_BOOKMARK (FN_INSERT + 1) @@ -682,6 +684,9 @@ #define SID_TWAIN_TRANSFER ( SID_SVX_START + 332 ) #define SID_CONTOUR_DLG ( SID_SVX_START + 334 ) #define SID_CONTOUR_EXEC ( SID_SVX_START + 335 ) + +//#define SID_SIDEBAR ( SID_SVX_START + 336 ) -> sfxsids.hrc + #define SID_BORDER_OBJECT ( SID_SVX_START + 340 ) #define SID_BORDER_LEFTLINE ( SID_SVX_START + 341 ) #define SID_BORDER_RIGHTLINE ( SID_SVX_START + 342 ) @@ -748,6 +753,8 @@ #define SID_ATTR_3D_AMBIENTCOLOR ( SID_SVX_START + 411 ) #define SID_IMPORT_GRAPH_LINK ( SID_SVX_START + 412 ) +//#define SID_ATTR_PARA_REGISTER ( SID_SVX_START + 413 ) -> editids.hrc + //! moved to sfx2, still in use: //#define SID_HTML_MODE ( SID_SVX_START + 414 ) @@ -1257,8 +1264,26 @@ #define SID_TRANSLITERATE_TITLE_CASE (SID_SVX_START+1103) #define SID_TRANSLITERATE_TOGGLE_CASE (SID_SVX_START+1104) +// new slots for panels +#define SID_ATTR_FILL_TRANSPARENCE (SID_SVX_START+1105) +#define SID_ATTR_FILL_FLOATTRANSPARENCE (SID_SVX_START+1106) +#define SID_ATTR_LINE_TRANSPARENCE (SID_SVX_START+1107) +#define SID_FLIP_HORIZONTAL (SID_SVX_START+1108) +#define SID_FLIP_VERTICAL (SID_SVX_START+1109) +#define SID_ATTR_LINE_JOINT (SID_SVX_START+1110) +#define SID_ATTR_LINE_CAP (SID_SVX_START+1111) +#define SID_ATTR_TRANSFORM_MATRIX (SID_SVX_START+1112) + +#define SID_CELL_FORMAT_BORDER (SID_SVX_START+1113) +#define SID_CHAR_DLG_EFFECT (SID_SVX_START+1114) +#define SID_ATTR_PARA_LEFT (SID_SVX_START + 1115) +#define SID_ATTR_PARA_RIGHT (SID_SVX_START + 1116) + +#define FN_SVX_SET_NUMBER (SID_SVX_START + 1117) +#define FN_SVX_SET_BULLET (SID_SVX_START + 1118) + // IMPORTANT NOTE: adjust SID_SVX_FIRSTFREE, when adding new slot id -#define SID_SVX_FIRSTFREE (SID_TRANSLITERATE_TOGGLE_CASE + 1) +#define SID_SVX_FIRSTFREE (FN_SVX_SET_BULLET + 1) // -------------------------------------------------------------------------- // Overflow check for slot IDs diff --git a/svx/inc/svx/svxitems.hrc b/svx/inc/svx/svxitems.hrc index d6f035c62607..f001e4107c6e 100644 --- a/svx/inc/svx/svxitems.hrc +++ b/svx/inc/svx/svxitems.hrc @@ -70,6 +70,9 @@ #define RID_SVXITEMS_BRUSHSTYLE_75 (RID_SVXITEMS_START + 55) #define RID_SVXITEMS_BRUSHSTYLE_BITMAP (RID_SVXITEMS_START + 56) +// enum ColorName ----------------------------------------------------------- +#define RID_SVXITEMS_COLOR_WHITE (RID_SVXITEMS_START + 76) + // enum FontFamily ------------------------------------------------------- #define RID_SVXITEMS_FONTFAMILY_BEGIN (RID_SVXITEMS_START + 100) #define RID_SVXITEMS_FONTFAMILY_DONTKNOW (RID_SVXITEMS_START + 100) diff --git a/svx/inc/svx/xattr.hxx b/svx/inc/svx/xattr.hxx index 6dea0ad2cbcf..357a8c68c0e2 100644 --- a/svx/inc/svx/xattr.hxx +++ b/svx/inc/svx/xattr.hxx @@ -24,26 +24,12 @@ #define _XATTR_HXX // include --------------------------------------------------------------- - -#ifndef _XDEF_HXX -//#include <svx/xdef.hxx> -#endif -#ifndef _XENUM_HXX -//#include <svx/xenum.hxx> -#endif -#ifndef _XPOLY_HXX -//#include <svx/xpoly.hxx> -#endif -#ifndef _SVX_RECTENUM_HXX -//#include <svx/rectenum.hxx> -#endif - -class XColorTable; -class XDashTable; -class XLineEndTable; -class XHatchTable; -class XBitmapTable; -class XGradientTable; +class XColorList; +class XDashList; +class XLineEndList; +class XHatchList; +class XBitmapList; +class XGradientList; #include <svx/xit.hxx> #include <svx/xcolit.hxx> diff --git a/svx/inc/svx/xcolit.hxx b/svx/inc/svx/xcolit.hxx index 0c6f4b843e2e..82855e350d28 100644 --- a/svx/inc/svx/xcolit.hxx +++ b/svx/inc/svx/xcolit.hxx @@ -29,7 +29,7 @@ #include <svx/xit.hxx> -class XColorTable; +class XColorList; //----------------- // class XColorItem @@ -55,7 +55,7 @@ public: virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) const; - const Color& GetColorValue(const XColorTable* pTable = 0) const; + const Color& GetColorValue(const XColorList* pTable = 0) const; void SetColorValue(const Color& rNew) { aColor = rNew; Detach(); } }; diff --git a/svx/inc/svx/xenum.hxx b/svx/inc/svx/xenum.hxx index f615cf78a1f9..d23302bd78d4 100644 --- a/svx/inc/svx/xenum.hxx +++ b/svx/inc/svx/xenum.hxx @@ -25,14 +25,6 @@ #define _XENUM_HXX enum XLineStyle { XLINE_NONE, XLINE_SOLID, XLINE_DASH }; -enum XLineJoint -{ - XLINEJOINT_NONE, // no rounding - XLINEJOINT_MIDDLE, // calc middle value between joints - XLINEJOINT_BEVEL, // join edges with line - XLINEJOINT_MITER, // extend till cut - XLINEJOINT_ROUND // create arc -}; enum XDashStyle { XDASH_RECT, XDASH_ROUND, XDASH_RECTRELATIVE, XDASH_ROUNDRELATIVE }; enum XFillStyle { XFILL_NONE, XFILL_SOLID, XFILL_GRADIENT, XFILL_HATCH, diff --git a/svx/inc/svx/xflgrit.hxx b/svx/inc/svx/xflgrit.hxx index a55862f94389..3f5dd828a671 100644 --- a/svx/inc/svx/xflgrit.hxx +++ b/svx/inc/svx/xflgrit.hxx @@ -59,7 +59,7 @@ public: SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, String &rText, const IntlWrapper * = 0 ) const; - const XGradient& GetGradientValue(const XGradientTable* pTable = 0) const; // GetValue -> GetGradientValue + const XGradient& GetGradientValue(const XGradientList* pTable = 0) const; // GetValue -> GetGradientValue void SetGradientValue(const XGradient& rNew) { aGradient = rNew; Detach(); } // SetValue -> SetGradientValue static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); diff --git a/svx/inc/svx/xflhtit.hxx b/svx/inc/svx/xflhtit.hxx index ddf367059949..b8b3e0a05bc7 100644 --- a/svx/inc/svx/xflhtit.hxx +++ b/svx/inc/svx/xflhtit.hxx @@ -61,7 +61,7 @@ public: virtual FASTBOOL HasMetrics() const; virtual FASTBOOL ScaleMetrics(long nMul, long nDiv); - const XHatch& GetHatchValue(const XHatchTable* pTable = 0) const; // GetValue -> GetHatchValue + const XHatch& GetHatchValue(const XHatchList* pTable = 0) const; // GetValue -> GetHatchValue void SetHatchValue(const XHatch& rNew) { aHatch = rNew; Detach(); } // SetValue -> SetHatchValue static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); diff --git a/svx/inc/svx/xit.hxx b/svx/inc/svx/xit.hxx index 67580505f21a..156c88258b72 100644 --- a/svx/inc/svx/xit.hxx +++ b/svx/inc/svx/xit.hxx @@ -30,12 +30,12 @@ /************************************************************************/ -class XColorTable; -class XDashTable; -class XLineEndTable; -class XHatchTable; -class XBitmapTable; -class XGradientTable; +class XColorList; +class XDashList; +class XLineEndList; +class XHatchList; +class XBitmapList; +class XGradientList; class SfxItemPool; class NameOrIndex; class XPropertyList; diff --git a/svx/inc/svx/xlineit.hxx b/svx/inc/svx/xlineit.hxx index ce58730b53ef..2491bed4aa15 100644 --- a/svx/inc/svx/xlineit.hxx +++ b/svx/inc/svx/xlineit.hxx @@ -32,7 +32,7 @@ #include <svl/eitem.hxx> class XDash; -class XDashTable; +class XDashList; class SvStream; #include <svx/xdash.hxx> diff --git a/svx/inc/svx/xlinjoit.hxx b/svx/inc/svx/xlinjoit.hxx index 7b45dbd0fd74..0a74c2740243 100644 --- a/svx/inc/svx/xlinjoit.hxx +++ b/svx/inc/svx/xlinjoit.hxx @@ -27,16 +27,17 @@ #include <svl/eitem.hxx> #include <svx/xenum.hxx> #include "svx/svxdllapi.h" +#include <com/sun/star/drawing/LineJoint.hpp> //--------------------- -// class LineStyleItem +// class XLineJointItem //--------------------- class SVX_DLLPUBLIC XLineJointItem : public SfxEnumItem { public: TYPEINFO(); - XLineJointItem( XLineJoint eLineJoint = XLINEJOINT_ROUND ); + XLineJointItem( com::sun::star::drawing::LineJoint eLineJoint = com::sun::star::drawing::LineJoint_ROUND ); XLineJointItem( SvStream& rIn ); virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) const; @@ -49,8 +50,8 @@ public: SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, String &rText, const IntlWrapper * = 0 ) const; - virtual sal_uInt16 GetValueCount() const; - XLineJoint GetValue() const { return (XLineJoint) SfxEnumItem::GetValue(); } + virtual sal_uInt16 GetValueCount() const; + com::sun::star::drawing::LineJoint GetValue() const { return (com::sun::star::drawing::LineJoint) SfxEnumItem::GetValue(); } }; #endif // _SVX_XLINJOIT_HXX diff --git a/svx/inc/svx/xlncapit.hxx b/svx/inc/svx/xlncapit.hxx index 1949e9fda419..bccbcaf5e8b8 100644 --- a/svx/inc/svx/xlncapit.hxx +++ b/svx/inc/svx/xlncapit.hxx @@ -28,7 +28,7 @@ #include <com/sun/star/drawing/LineCap.hpp> //--------------------- -// class LineStyleItem +// class XLineCapItem //--------------------- class SVX_DLLPUBLIC XLineCapItem : public SfxEnumItem diff --git a/svx/inc/svx/xlndsit.hxx b/svx/inc/svx/xlndsit.hxx index c7d83fed2396..9ef7b5a38e99 100644 --- a/svx/inc/svx/xlndsit.hxx +++ b/svx/inc/svx/xlndsit.hxx @@ -65,7 +65,7 @@ public: virtual FASTBOOL HasMetrics() const; virtual FASTBOOL ScaleMetrics(long nMul, long nDiv); - const XDash& GetDashValue(const XDashTable* pTable = 0) const; // GetValue -> GetDashValue + const XDash& GetDashValue(const XDashList* pTable = 0) const; // GetValue -> GetDashValue void SetDashValue(const XDash& rNew) { aDash = rNew; Detach(); } // SetValue -> SetDashValue static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); diff --git a/svx/inc/svx/xlnedit.hxx b/svx/inc/svx/xlnedit.hxx index 7b50ce8446d7..f0a62713cd31 100644 --- a/svx/inc/svx/xlnedit.hxx +++ b/svx/inc/svx/xlnedit.hxx @@ -59,7 +59,7 @@ public: SfxMapUnit ePresMetric, String &rText, const IntlWrapper * = 0 ) const; - basegfx::B2DPolyPolygon GetLineEndValue(const XLineEndTable* pTable = 0) const; + basegfx::B2DPolyPolygon GetLineEndValue(const XLineEndList* pTable = 0) const; void SetLineEndValue(const basegfx::B2DPolyPolygon& rPolyPolygon) { maPolyPolygon = rPolyPolygon; Detach(); } XLineEndItem* checkForUniqueItem( SdrModel* pModel ) const; diff --git a/svx/inc/svx/xlnstit.hxx b/svx/inc/svx/xlnstit.hxx index 270b0a509c44..3ab186106fa5 100644 --- a/svx/inc/svx/xlnstit.hxx +++ b/svx/inc/svx/xlnstit.hxx @@ -59,7 +59,7 @@ public: SfxMapUnit ePresMetric, String &rText, const IntlWrapper * = 0 ) const; - basegfx::B2DPolyPolygon GetLineStartValue(const XLineEndTable* pTable = 0) const; + basegfx::B2DPolyPolygon GetLineStartValue(const XLineEndList* pTable = 0) const; void SetLineStartValue(const basegfx::B2DPolyPolygon& rPolyPolygon) { maPolyPolygon = rPolyPolygon; Detach(); } XLineStartItem* checkForUniqueItem( SdrModel* pModel ) const; diff --git a/svx/inc/svx/xtable.hxx b/svx/inc/svx/xtable.hxx index 5a8a7060eed8..fc6d826b9182 100644 --- a/svx/inc/svx/xtable.hxx +++ b/svx/inc/svx/xtable.hxx @@ -33,19 +33,16 @@ #include <tools/color.hxx> #include <tools/string.hxx> #include <tools/table.hxx> -#include "svx/svxdllapi.h" +#include <svx/svxdllapi.h> #include <basegfx/polygon/b2dpolypolygon.hxx> #include <svtools/grfmgr.hxx> +#include <svx/XPropertyEntry.hxx> class Color; class Bitmap; class VirtualDevice; class XOutdevItemPool; -// Breite und Hoehe der LB-Bitmaps -#define BITMAP_WIDTH 32 -#define BITMAP_HEIGHT 12 - // Standard-Vergleichsstring extern sal_Unicode __FAR_DATA pszStandard[]; // "standard" @@ -53,24 +50,6 @@ extern sal_Unicode __FAR_DATA pszStandard[]; // "standard" // enum COL_NAME nicht verglichen werden kann. SVX_DLLPUBLIC Color RGB_Color( ColorData nColorName ); -// --------------------- -// class XPropertyEntry -// --------------------- - -class XPropertyEntry -{ -protected: - String aName; - - XPropertyEntry(const String& rName) : aName(rName) {} - XPropertyEntry(const XPropertyEntry& rOther): aName(rOther.aName) {} -public: - - virtual ~XPropertyEntry() {} - void SetName(const String& rName) { aName = rName; } - String& GetName() { return aName; } -}; - // ------------------ // class XColorEntry // ------------------ @@ -206,59 +185,6 @@ public: } }; -// --------------------- -// class XPropertyTable -// --------------------- - -class SVX_DLLPUBLIC XPropertyTable -{ -protected: - String aName; // nicht persistent ! - String aPath; - XOutdevItemPool* pXPool; - - Table aTable; - Table* pBmpTable; - - sal_Bool bTableDirty; - sal_Bool bBitmapsDirty; - sal_Bool bOwnPool; - - XPropertyTable( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - XPropertyTable( SvStream& rIn ); - void Clear(); - -public: - virtual ~XPropertyTable(); - - long Count() const; - - sal_Bool Insert(long nIndex, XPropertyEntry* pEntry); - XPropertyEntry* Replace(long nIndex, XPropertyEntry* pEntry); - XPropertyEntry* Remove(long nIndex, sal_uInt16 nDummy); - XPropertyEntry* Get( long nIndex, sal_uInt16 nDummy ) const; - - long Get(const String& rName); - Bitmap* GetBitmap( long nIndex ) const; - - const String& GetName() const { return aName; } - void SetName( const String& rString ); - const String& GetPath() const { return aPath; } - void SetPath( const String& rString ) { aPath = rString; } - sal_Bool IsDirty() const { return bTableDirty && bBitmapsDirty; } - void SetDirty( sal_Bool bDirty = sal_True ) - { bTableDirty = bDirty; bBitmapsDirty = bDirty; } - - virtual sal_Bool Load() = 0; - virtual sal_Bool Save() = 0; - virtual sal_Bool Create() = 0; - virtual sal_Bool CreateBitmapsForUI() = 0; - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ) = 0; -}; - // -------------------- // class XPropertyList // -------------------- @@ -266,23 +192,18 @@ public: class SVX_DLLPUBLIC XPropertyList { protected: - String aName; // nicht persistent ! - String aPath; - XOutdevItemPool* pXPool; - - List aList; - List* pBmpList; - - sal_Bool bListDirty; - sal_Bool bBitmapsDirty; - sal_Bool bOwnPool; - - XPropertyList( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - XPropertyList( SvStream& rIn ); + String maName; // nicht persistent ! + String maPath; + XOutdevItemPool* mpXPool; + + List maList; + + /// bitfield + bool mbListDirty : 1; + + XPropertyList( const String& rPath, XOutdevItemPool* pXPool = 0 ); void Clear(); + virtual Bitmap CreateBitmapForUI( long nIndex ) = 0; public: virtual ~XPropertyList(); @@ -295,63 +216,35 @@ public: XPropertyEntry* Get( long nIndex, sal_uInt16 nDummy ) const; long Get(const String& rName); - Bitmap* GetBitmap( long nIndex ) const; + Bitmap GetUiBitmap( long nIndex ) const; - const String& GetName() const { return aName; } + const String& GetName() const { return maName; } void SetName( const String& rString ); - const String& GetPath() const { return aPath; } - void SetPath( const String& rString ) { aPath = rString; } - sal_Bool IsDirty() const { return bListDirty && bBitmapsDirty; } - void SetDirty( sal_Bool bDirty = sal_True ) - { bListDirty = bDirty; bBitmapsDirty = bDirty; } + const String& GetPath() const { return maPath; } + void SetPath( const String& rString ) { maPath = rString; } + bool IsDirty() const { return mbListDirty; } + void SetDirty( bool bDirty = true ) { mbListDirty = bDirty; } virtual sal_Bool Load() = 0; virtual sal_Bool Save() = 0; virtual sal_Bool Create() = 0; - virtual sal_Bool CreateBitmapsForUI() = 0; - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ) = 0; -}; - -// ------------------ -// class XColorTable -// ------------------ - -class SVX_DLLPUBLIC XColorTable : public XPropertyTable -{ -public: - XColorTable( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - virtual ~XColorTable(); - - using XPropertyTable::Replace; - XColorEntry* Replace(long nIndex, XColorEntry* pEntry ); - using XPropertyTable::Remove; - XColorEntry* Remove(long nIndex); - using XPropertyTable::Get; - XColorEntry* GetColor(long nIndex) const; - virtual sal_Bool Load(); - virtual sal_Bool Save(); - virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); - - static XColorTable* GetStdColorTable(); + sal_uInt32 getUiBitmapWidth() const; + sal_uInt32 getUiBitmapHeight() const; + sal_uInt32 getUiBitmapLineWidth() const; }; // ------------------- // class XColorList // ------------------- -class XColorList : public XPropertyList +class SVX_DLLPUBLIC XColorList : public XPropertyList { +protected: + virtual Bitmap CreateBitmapForUI( long nIndex ); + public: - XColorList( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); + XColorList( const String& rPath, XOutdevItemPool* pXPool = 0 ); virtual ~XColorList(); using XPropertyList::Replace; @@ -364,35 +257,8 @@ public: virtual sal_Bool Load(); virtual sal_Bool Save(); virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); -}; -// -------------------- -// class XLineEndTable -// -------------------- - -class XLineEndTable : public XPropertyTable -{ -public: - XLineEndTable( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - virtual ~XLineEndTable(); - - using XPropertyTable::Replace; - XLineEndEntry* Replace(long nIndex, XLineEndEntry* pEntry ); - using XPropertyTable::Remove; - XLineEndEntry* Remove(long nIndex); - using XPropertyTable::Get; - XLineEndEntry* GetLineEnd(long nIndex) const; - - virtual sal_Bool Load(); - virtual sal_Bool Save(); - virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); + static XColorList* GetStdColorList(); }; // ------------------- @@ -408,8 +274,11 @@ private: void impCreate(); void impDestroy(); +protected: + virtual Bitmap CreateBitmapForUI(long nIndex); + public: - XLineEndList(const String& rPath, XOutdevItemPool* pXPool = 0, sal_uInt16 nInitSize = 16, sal_uInt16 nReSize = 16); + XLineEndList(const String& rPath, XOutdevItemPool* pXPool = 0); virtual ~XLineEndList(); using XPropertyList::Replace; @@ -422,35 +291,6 @@ public: virtual sal_Bool Load(); virtual sal_Bool Save(); virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); -}; - -// -------------------- -// class XDashTable -// -------------------- - -class XDashTable : public XPropertyTable -{ -public: - XDashTable( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - virtual ~XDashTable(); - - using XPropertyTable::Replace; - XDashEntry* Replace(long nIndex, XDashEntry* pEntry ); - using XPropertyTable::Remove; - XDashEntry* Remove(long nIndex); - using XPropertyTable::Get; - XDashEntry* GetDash(long nIndex) const; - - virtual sal_Bool Load(); - virtual sal_Bool Save(); - virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); }; // ------------------- @@ -462,12 +302,19 @@ class SVX_DLLPUBLIC XDashList : public XPropertyList { private: impXDashList* mpData; + Bitmap maBitmapSolidLine; + String maStringSolidLine; + String maStringNoLine; void impCreate(); void impDestroy(); +protected: + Bitmap ImpCreateBitmapForXDash(const XDash* pDash); + virtual Bitmap CreateBitmapForUI(long nIndex); + public: - XDashList(const String& rPath, XOutdevItemPool* pXPool = 0, sal_uInt16 nInitSize = 16, sal_uInt16 nReSize = 16); + XDashList(const String& rPath, XOutdevItemPool* pXPool = 0); virtual ~XDashList(); using XPropertyList::Replace; @@ -480,35 +327,16 @@ public: virtual sal_Bool Load(); virtual sal_Bool Save(); virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); -}; - -// -------------------- -// class XHatchTable -// -------------------- -class XHatchTable : public XPropertyTable -{ -public: - XHatchTable( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - virtual ~XHatchTable(); - - using XPropertyTable::Replace; - XHatchEntry* Replace(long nIndex, XHatchEntry* pEntry ); - using XPropertyTable::Remove; - XHatchEntry* Remove(long nIndex); - using XPropertyTable::Get; - XHatchEntry* GetHatch(long nIndex) const; + // Special call to get a bitmap for the solid line representation. It + // creates a bitmap fitting in size and style to the ones you get by + // using GetUiBitmap for existing entries. + Bitmap GetBitmapForUISolidLine() const; - virtual sal_Bool Load(); - virtual sal_Bool Save(); - virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); + // Special calls to get the translated strings for the UI entry for no + // line style (XLINE_NONE) and solid line style (XLINE_SOLID) for dialogs + String GetStringForUiSolidLine() const; + String GetStringForUiNoLine() const; }; // ------------------- @@ -524,8 +352,11 @@ private: void impCreate(); void impDestroy(); +protected: + virtual Bitmap CreateBitmapForUI(long nIndex); + public: - XHatchList(const String& rPath, XOutdevItemPool* pXPool = 0, sal_uInt16 nInitSize = 16, sal_uInt16 nReSize = 16); + XHatchList(const String& rPath, XOutdevItemPool* pXPool = 0); ~XHatchList(); using XPropertyList::Replace; @@ -538,35 +369,6 @@ public: virtual sal_Bool Load(); virtual sal_Bool Save(); virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); -}; - -// --------------------- -// class XGradientTable -// --------------------- - -class XGradientTable : public XPropertyTable -{ -public: - XGradientTable( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - virtual ~XGradientTable(); - - using XPropertyTable::Replace; - XGradientEntry* Replace(long nIndex, XGradientEntry* pEntry ); - using XPropertyTable::Remove; - XGradientEntry* Remove(long nIndex); - using XPropertyTable::Get; - XGradientEntry* GetGradient(long nIndex) const; - - virtual sal_Bool Load(); - virtual sal_Bool Save(); - virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); }; // ------------------- @@ -582,8 +384,11 @@ private: void impCreate(); void impDestroy(); +protected: + virtual Bitmap CreateBitmapForUI(long nIndex); + public: - XGradientList(const String& rPath, XOutdevItemPool* pXPool = 0, sal_uInt16 nInitSize = 16, sal_uInt16 nReSize = 16); + XGradientList(const String& rPath, XOutdevItemPool* pXPool = 0); virtual ~XGradientList(); using XPropertyList::Replace; @@ -596,35 +401,6 @@ public: virtual sal_Bool Load(); virtual sal_Bool Save(); virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); -}; - -// --------------------- -// class XBitmapTable -// --------------------- - -class XBitmapTable : public XPropertyTable -{ -public: - XBitmapTable( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); - virtual ~XBitmapTable(); - - using XPropertyTable::Replace; - XBitmapEntry* Replace(long nIndex, XBitmapEntry* pEntry ); - using XPropertyTable::Remove; - XBitmapEntry* Remove(long nIndex); - using XPropertyTable::Get; - XBitmapEntry* GetBitmap(long nIndex) const; - - virtual sal_Bool Load(); - virtual sal_Bool Save(); - virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); }; // ------------------- @@ -633,11 +409,11 @@ public: class SVX_DLLPUBLIC XBitmapList : public XPropertyList { +protected: + virtual Bitmap CreateBitmapForUI( long nIndex ); + public: - XBitmapList( const String& rPath, - XOutdevItemPool* pXPool = NULL, - sal_uInt16 nInitSize = 16, - sal_uInt16 nReSize = 16 ); + XBitmapList( const String& rPath, XOutdevItemPool* pXPool = 0); virtual ~XBitmapList(); using XPropertyList::Replace; @@ -650,8 +426,8 @@ public: virtual sal_Bool Load(); virtual sal_Bool Save(); virtual sal_Bool Create(); - virtual sal_Bool CreateBitmapsForUI(); - virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); }; #endif // _XTABLE_HXX + +// eof diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi index 6402ebc0bad3..20b0952f1f90 100644 --- a/svx/sdi/svx.sdi +++ b/svx/sdi/svx.sdi @@ -3883,6 +3883,30 @@ SfxVoidItem FontDialog SID_CHAR_DLG GroupId = GID_FORMAT; ] +SfxVoidItem FontDialogEff SID_CHAR_DLG_EFFECT +() +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = TRUE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerItem; + Asynchron; + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + //-------------------------------------------------------------------------- SvxFontHeightItem FontHeight SID_ATTR_CHAR_FONTHEIGHT @@ -4288,6 +4312,55 @@ XFormTextStyleItem FontWorkTextStyle SID_FORMTEXT_STYLE GroupId = GID_SPECIAL; ] +SvxLRSpaceItem ParaOutlineLeft SID_ATTR_PARA_LEFT + +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_VIEW; +] + +//-------------------------------------------------------------------------- +SvxLRSpaceItem ParaOutlineRight SID_ATTR_PARA_RIGHT +() +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_VIEW; +] + //-------------------------------------------------------------------------- SfxVoidItem FormatArea SID_ATTRIBUTES_AREA () @@ -6330,6 +6403,63 @@ SfxVoidItem DefaultNumbering FN_NUM_NUMBERING_ON GroupId = GID_ENUMERATION; ] +SfxBoolItem CurrentBulNumRule FN_BUL_NUM_RULE_INDEX +(SfxUInt16Item On FN_PARAM_1) +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = TRUE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + ImageRotation = TRUE; + ImageReflection = TRUE; + /* status: */ + SlotType = SfxBoolItem + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_ENUMERATION; +] +SfxBoolItem CurrentNumNumRule FN_NUM_NUM_RULE_INDEX +(SfxUInt16Item On FN_PARAM_1) +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = TRUE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + ImageRotation = TRUE; + ImageReflection = TRUE; + /* status: */ + SlotType = SfxBoolItem + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_ENUMERATION; +] + //-------------------------------------------------------------------------- SfxVoidItem InsertObject SID_INSERT_OBJECT ( SfxGlobalNameItem ClassId SID_INSERT_OBJECT ) @@ -7201,6 +7331,32 @@ SvxLineSpacingItem LineSpacing SID_ATTR_PARA_LINESPACE GroupId = GID_FORMAT; ] +SvxULSpaceItem ULSpacing SID_ATTR_PARA_ULSPACE + +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + //-------------------------------------------------------------------------- SvxLineItem LineStyle SID_FRAME_LINESTYLE @@ -7654,6 +7810,57 @@ SfxVoidItem OutlineBullet SID_OUTLINE_BULLET GroupId = GID_FORMAT; ] +SfxUInt16Item SetNumber FN_SVX_SET_NUMBER +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + +//-------------------------------------------------------------------------- +SfxUInt16Item SetBullet FN_SVX_SET_BULLET +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + //-------------------------------------------------------------------------- SfxVoidItem OutlineCollapse SID_OUTLINE_COLLAPSE () @@ -15105,3 +15312,669 @@ SfxVoidItem PrepareMailExport SID_MAIL_PREPAREEXPORT GroupId = GID_EXPLORER; ] +//-------------------------------------------------------------------------- + +SfxUInt16Item FillTransparence SID_ATTR_FILL_TRANSPARENCE +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +XFillFloatTransparenceItem FillFloatTransparence SID_ATTR_FILL_FLOATTRANSPARENCE +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxUInt16Item LineTransparence SID_ATTR_LINE_TRANSPARENCE +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------- + +XLineJointItem LineJoint SID_ATTR_LINE_JOINT +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +XLineCapItem LineCap SID_ATTR_LINE_CAP +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +XLineStartItem LineStart SID_ATTR_LINE_START +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +XLineEndItem LineEnd SID_ATTR_LINE_END +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxUInt32Item SvxTransFormPosX SID_ATTR_TRANSFORM_POS_X +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + +//-------------------------------------------------------------------------- + +SfxUInt32Item SvxTransFormPosY SID_ATTR_TRANSFORM_POS_Y +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + +//-------------------------------------------------------------------------- + +SfxUInt32Item SvxTransFormWidth SID_ATTR_TRANSFORM_WIDTH +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + +//-------------------------------------------------------------------------- + +SfxUInt32Item SvxTransFormHeight SID_ATTR_TRANSFORM_HEIGHT +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + +//-------------------------------------------------------------------------- + +SfxUInt32Item TransAngle SID_ATTR_TRANSFORM_ANGLE +[ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxUInt32Item TransRotX SID_ATTR_TRANSFORM_ROT_X +[ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxUInt32Item TransRotY SID_ATTR_TRANSFORM_ROT_Y +[ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxBoolItem ProtectPos SID_ATTR_TRANSFORM_PROTECT_POS +[ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxBoolItem ProtectSize SID_ATTR_TRANSFORM_PROTECT_SIZE +[ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxVoidItem SvxFlipHorizontal SID_FLIP_HORIZONTAL +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_EDIT; +] + +//-------------------------------------------------------------------------- + +SfxVoidItem SvxFlipVertical SID_FLIP_VERTICAL +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_EDIT; +] + +//-------------------------------------------------------------------------- + +SfxBoolItem SvxAutoWidth SID_ATTR_TRANSFORM_AUTOWIDTH +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_EDIT; +] + +//-------------------------------------------------------------------------- + +SfxVoidItem SvxFlipVertical SID_FLIP_VERTICAL +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_EDIT; +] + +//-------------------------------------------------------------------------- + +SfxBoolItem SvxAutoWidth SID_ATTR_TRANSFORM_AUTOWIDTH +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + +//-------------------------------------------------------------------------- + +SfxBoolItem SvxAutoHeight SID_ATTR_TRANSFORM_AUTOHEIGHT +[ + /* flags: */ + AutoUpdate = TRUE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_SPECIAL; +] + +//---------------------------------------------------------------------- +SvxLineItem BorderTLBR SID_ATTR_BORDER_DIAG_TLBR +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + +SvxLineItem BorderBLTR SID_ATTR_BORDER_DIAG_BLTR +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- + +SfxVoidItem SCDialogBorder SID_CELL_FORMAT_BORDER +() +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = TRUE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerItem; + Asynchron; + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + +//-------------------------------------------------------------------------- +// eof diff --git a/svx/sdi/xoitems.sdi b/svx/sdi/xoitems.sdi index 18b3db64a895..67572c27c6e0 100644 --- a/svx/sdi/xoitems.sdi +++ b/svx/sdi/xoitems.sdi @@ -142,6 +142,28 @@ enum SvxLineStyle item SvxLineStyle XLineStyleItem; +enum SvxLineJoint +{ + // com::sun::star::drawing::LineJoint + SVX_LINEJOINT_NONE, // no rounding + SVX_LINEJOINT_MIDDLE, // calc middle value between joints + SVX_LINEJOINT_BEVEL, // join edges with line + SVX_LINEJOINT_MITER, // extend till cut + SVX_LINEJOINT_ROUND // create arc +}; + +item SvxLineJoint XLineJointItem; + +enum SvxLineCap +{ + // com::sun::star::drawing::LineCap + SVX_LINECAP_BUTT, + SVX_LINECAP_ROUND, + SVX_LINECAP_SQUARE +}; + +item SvxLineCap XLineCapItem; + item INT32 XLineWidthItem; item INT32 XFormTextStyleItem; item INT32 XFormTextAdjustItem; @@ -156,3 +178,7 @@ item INT32 XFormTextShadowItem; // SfxEnumItem item INT32 XFormTextShadowColorItem; // XColorItem item INT32 XFormTextShadowXValItem; // SfxMetricItem/SfxInt32Item item INT32 XFormTextShadowYValItem; // SfxMetricItem/SfxInt32Item + +item XFillGradient XFillFloatTransparenceItem; // XFillGradient + +// eof diff --git a/svx/source/dialog/_bmpmask.cxx b/svx/source/dialog/_bmpmask.cxx index 73484ed512d6..da13a0d96c01 100644 --- a/svx/source/dialog/_bmpmask.cxx +++ b/svx/source/dialog/_bmpmask.cxx @@ -605,7 +605,7 @@ sal_Bool SvxBmpMask::NeedsColorTable() const //------------------------------------------------------------------------- -void SvxBmpMask::SetColorTable( const XColorTable* pTable ) +void SvxBmpMask::SetColorTable( const XColorList* pTable ) { if ( pTable && ( pTable != pColTab ) ) { diff --git a/svx/source/dialog/dialcontrol.cxx b/svx/source/dialog/dialcontrol.cxx index 0f88b1c1c201..782ddef27dc2 100644 --- a/svx/source/dialog/dialcontrol.cxx +++ b/svx/source/dialog/dialcontrol.cxx @@ -24,7 +24,9 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" #include "svx/dialcontrol.hxx" - +#include "bmpmask.hrc" +#include <svx/dialmgr.hxx> +#include <tools/rcid.h> #include <math.h> #include <vcl/virdev.hxx> #include <vcl/svapp.hxx> @@ -40,39 +42,13 @@ const long DIAL_OUTER_WIDTH = 8; // ============================================================================ -class DialControlBmp : public VirtualDevice -{ -public: - explicit DialControlBmp( Window& rParent ); - - void InitBitmap( const Size& rSize, const Font& rFont ); - void CopyBackground( const DialControlBmp& rSrc ); - void DrawBackground( const Size& rSize, bool bEnabled ); - void DrawElements( const String& rText, sal_Int32 nAngle ); - -private: - const Color& GetBackgroundColor() const; - const Color& GetTextColor() const; - const Color& GetScaleLineColor() const; - const Color& GetButtonLineColor() const; - const Color& GetButtonFillColor( bool bMain ) const; - - void Init( const Size& rSize ); - void DrawBackground(); - - Window& mrParent; - Rectangle maRect; - long mnCenterX; - long mnCenterY; - bool mbEnabled; -}; // ---------------------------------------------------------------------------- DialControlBmp::DialControlBmp( Window& rParent ) : VirtualDevice( rParent, 0, 0 ), - mrParent( rParent ), - mbEnabled( true ) + mbEnabled( true ), + mrParent( rParent ) { EnableRTL( sal_False ); } @@ -232,40 +208,23 @@ void DialControlBmp::DrawBackground() maRect.Right() - DIAL_OUTER_WIDTH, maRect.Bottom() - DIAL_OUTER_WIDTH ) ); } -// ============================================================================ -struct DialControl_Impl -{ - DialControlBmp maBmpEnabled; - DialControlBmp maBmpDisabled; - DialControlBmp maBmpBuffered; - Link maModifyHdl; - NumericField* mpLinkField; - Size maWinSize; - Font maWinFont; - sal_Int32 mnAngle; - sal_Int32 mnOldAngle; - long mnCenterX; - long mnCenterY; - bool mbNoRot; - - explicit DialControl_Impl( Window& rParent ); - void Init( const Size& rWinSize, const Font& rWinFont ); -}; + // ---------------------------------------------------------------------------- -DialControl_Impl::DialControl_Impl( Window& rParent ) : - maBmpEnabled( rParent ), - maBmpDisabled( rParent ), - maBmpBuffered( rParent ), +DialControl::DialControl_Impl::DialControl_Impl ( + Window& rParent ) : + mpBmpEnabled(new DialControlBmp(rParent)), + mpBmpDisabled(new DialControlBmp(rParent)), + mpBmpBuffered(new DialControlBmp(rParent)), mpLinkField( 0 ), mnAngle( 0 ), mbNoRot( false ) { } -void DialControl_Impl::Init( const Size& rWinSize, const Font& rWinFont ) +void DialControl::DialControl_Impl::Init( const Size& rWinSize, const Font& rWinFont ) { // "(x - 1) | 1" creates odd value <= x, to have a well-defined center pixel position maWinSize = Size( (rWinSize.Width() - 1) | 1, (rWinSize.Height() - 1) | 1 ); @@ -275,9 +234,9 @@ void DialControl_Impl::Init( const Size& rWinSize, const Font& rWinFont ) mnCenterY = maWinSize.Height() / 2; maWinFont.SetTransparent( sal_True ); - maBmpEnabled.DrawBackground( maWinSize, true ); - maBmpDisabled.DrawBackground( maWinSize, false ); - maBmpBuffered.InitBitmap( maWinSize, maWinFont ); + mpBmpEnabled->DrawBackground( maWinSize, true ); + mpBmpDisabled->DrawBackground( maWinSize, false ); + mpBmpBuffered->InitBitmap( maWinSize, maWinFont ); } // ============================================================================ @@ -313,7 +272,7 @@ DialControl::~DialControl() void DialControl::Paint( const Rectangle& ) { Point aPos; - DrawBitmapEx( aPos, mpImpl->maBmpBuffered.GetBitmapEx( aPos, mpImpl->maWinSize ) ); + DrawBitmapEx( aPos, mpImpl->mpBmpBuffered->GetBitmapEx( aPos, mpImpl->maWinSize ) ); } void DialControl::StateChanged( StateChangedType nStateChange ) @@ -414,7 +373,7 @@ sal_Int32 DialControl::GetRotation() const void DialControl::SetRotation( sal_Int32 nAngle ) { - ImplSetRotation( nAngle, false ); + SetRotation( nAngle, false ); } void DialControl::SetLinkedField( NumericField* pField ) @@ -461,13 +420,13 @@ void DialControl::Init( const Size& rWinSize ) void DialControl::InvalidateControl() { - mpImpl->maBmpBuffered.CopyBackground( IsEnabled() ? mpImpl->maBmpEnabled : mpImpl->maBmpDisabled ); + mpImpl->mpBmpBuffered->CopyBackground( IsEnabled() ? *mpImpl->mpBmpEnabled : *mpImpl->mpBmpDisabled ); if( !mpImpl->mbNoRot ) - mpImpl->maBmpBuffered.DrawElements( GetText(), mpImpl->mnAngle ); + mpImpl->mpBmpBuffered->DrawElements( GetText(), mpImpl->mnAngle ); Invalidate(); } -void DialControl::ImplSetRotation( sal_Int32 nAngle, bool bBroadcast ) +void DialControl::SetRotation( sal_Int32 nAngle, bool bBroadcast ) { bool bOldSel = mpImpl->mbNoRot; mpImpl->mbNoRot = false; @@ -512,7 +471,7 @@ void DialControl::HandleMouseEvent( const Point& rPos, bool bInitial ) nAngle = 36000 - nAngle; if( bInitial ) // round to entire 15 degrees nAngle = ((nAngle + 750) / 1500) * 1500; - ImplSetRotation( nAngle, true ); + SetRotation( nAngle, true ); } } @@ -521,7 +480,7 @@ void DialControl::HandleEscapeEvent() if( IsMouseCaptured() ) { ReleaseMouse(); - ImplSetRotation( mpImpl->mnOldAngle, true ); + SetRotation( mpImpl->mnOldAngle, true ); if( mpImpl->mpLinkField ) mpImpl->mpLinkField->GrabFocus(); } @@ -530,7 +489,7 @@ void DialControl::HandleEscapeEvent() IMPL_LINK( DialControl, LinkedFieldModifyHdl, NumericField*, pField ) { if( pField ) - ImplSetRotation( static_cast< sal_Int32 >( pField->GetValue() * 100 ), false ); + SetRotation( static_cast< sal_Int32 >( pField->GetValue() * 100 ), false ); return 0; } diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx index efa5f3f85b4b..597ecc2f9d50 100644 --- a/svx/source/dialog/dlgctrl.cxx +++ b/svx/source/dialog/dlgctrl.cxx @@ -47,7 +47,6 @@ #include <svx/svdopath.hxx> #include <svx/sdr/contact/objectcontactofobjlistpainter.hxx> #include <svx/sdr/contact/displayinfo.hxx> -#include <linectrl.hrc> #include <vcl/bmpacc.hxx> #include <svx/xbtmpit.hxx> @@ -1095,7 +1094,7 @@ BitmapEx SvxBitmapCtl::GetBitmapEx() |* \************************************************************************/ -void ColorLB::Fill( const XColorTable* pColorTab ) +void ColorLB::Fill( const XColorList* pColorTab ) { long nCount = pColorTab->Count(); XColorEntry* pEntry; @@ -1130,7 +1129,7 @@ void ColorLB::Modify( XColorEntry* pEntry, sal_uInt16 nPos, Bitmap* ) |* \************************************************************************/ -void FillAttrLB::Fill( const XColorTable* pColorTab ) +void FillAttrLB::Fill( const XColorList* pColorTab ) { long nCount = pColorTab->Count(); XColorEntry* pEntry; @@ -1184,9 +1183,9 @@ void HatchingLB::Fill( const XHatchList* pList ) for( long i = 0; i < nCount; i++ ) { pEntry = pList->GetHatch( i ); - Bitmap* pBitmap = pList->GetBitmap( i ); - if( pBitmap ) - InsertEntry( pEntry->GetName(), *pBitmap ); + const Bitmap aBitmap = pList->GetUiBitmap( i ); + if( !aBitmap.IsEmpty() ) + InsertEntry( pEntry->GetName(), aBitmap ); else InsertEntry( pEntry->GetName() ); } @@ -1294,9 +1293,9 @@ void FillAttrLB::Fill( const XHatchList* pList ) for( long i = 0; i < nCount; i++ ) { pEntry = pList->GetHatch( i ); - Bitmap* pBitmap = pList->GetBitmap( i ); - if( pBitmap ) - ListBox::InsertEntry( pEntry->GetName(), *pBitmap ); + const Bitmap aBitmap = pList->GetUiBitmap( i ); + if( !aBitmap.IsEmpty() ) + ListBox::InsertEntry( pEntry->GetName(), aBitmap ); else InsertEntry( pEntry->GetName() ); } @@ -1343,9 +1342,9 @@ void GradientLB::Fill( const XGradientList* pList ) for( long i = 0; i < nCount; i++ ) { pEntry = pList->GetGradient( i ); - Bitmap* pBitmap = pList->GetBitmap( i ); - if( pBitmap ) - InsertEntry( pEntry->GetName(), *pBitmap ); + const Bitmap aBitmap = pList->GetUiBitmap( i ); + if( !aBitmap.IsEmpty() ) + InsertEntry( pEntry->GetName(), aBitmap ); else InsertEntry( pEntry->GetName() ); } @@ -1466,9 +1465,9 @@ void FillAttrLB::Fill( const XGradientList* pList ) for( long i = 0; i < nCount; i++ ) { pEntry = pList->GetGradient( i ); - Bitmap* pBitmap = pList->GetBitmap( i ); - if( pBitmap ) - ListBox::InsertEntry( pEntry->GetName(), *pBitmap ); + const Bitmap aBitmap = pList->GetUiBitmap( i ); + if( !aBitmap.IsEmpty() ) + ListBox::InsertEntry( pEntry->GetName(), aBitmap ); else InsertEntry( pEntry->GetName() ); } @@ -1488,28 +1487,32 @@ BitmapLB::BitmapLB(Window* pParent, ResId Id, bool bUserDraw /*= false*/ ) mpList(NULL), mbUserDraw(bUserDraw) { - maVD.SetOutputSizePixel(Size(32, 16)); EnableUserDraw(mbUserDraw); } /************************************************************************/ -void BitmapLB::SetVirtualDevice() +void BitmapLB::SetVirtualDevice(const Size& rSize) { + maVD.SetOutputSizePixel(rSize); + if(maBitmapEx.GetSizePixel().Width() > 8 || maBitmapEx.GetSizePixel().Height() > 8) { - maVD.DrawBitmapEx(Point(0, 0), Size(32, 16), maBitmapEx); + maVD.DrawBitmapEx(Point(0, 0), rSize, maBitmapEx); } else { - maVD.DrawBitmapEx(Point(0, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(8, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(16, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(24, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(0, 8), maBitmapEx); - maVD.DrawBitmapEx(Point(8, 8), maBitmapEx); - maVD.DrawBitmapEx(Point(16, 8), maBitmapEx); - maVD.DrawBitmapEx(Point(24, 8), maBitmapEx); + const Size aBitmapSize(maBitmapEx.GetSizePixel()); + + for(sal_uInt32 y(0); y < rSize.Height(); y += aBitmapSize.Height()) + { + for(sal_uInt32 x(0); x < rSize.Width(); x += aBitmapSize.Width()) + { + maVD.DrawBitmapEx( + Point(x, y), + maBitmapEx); + } + } } } @@ -1536,8 +1539,12 @@ void BitmapLB::Fill(const XBitmapList* pList) { pEntry = pList->GetBitmap(i); maBitmapEx = pEntry->GetGraphicObject().GetGraphic().GetBitmapEx(); - SetVirtualDevice(); - InsertEntry(pEntry->GetName(), maVD.GetBitmap(Point(0, 2), Size(32, 12))); + const Size aSize(pList->getUiBitmapWidth(), pList->getUiBitmapHeight()); + SetVirtualDevice(aSize); + InsertEntry( + pEntry->GetName(), + maVD.GetBitmap(Point(0, 0), + aSize)); } } @@ -1588,35 +1595,41 @@ void BitmapLB::UserDraw(const UserDrawEvent& rUDEvt) /************************************************************************/ -void BitmapLB::Append(XBitmapEntry* pEntry, BitmapEx* pBmpEx) +void BitmapLB::Append(const Size& rSize, const XBitmapEntry& rEntry, BitmapEx* pBmpEx) { if(pBmpEx) { - maBitmapEx = pEntry->GetGraphicObject().GetGraphic().GetBitmapEx(); - SetVirtualDevice(); - InsertEntry(pEntry->GetName(), maVD.GetBitmap(Point(0, 2), Size(32, 12))); + maBitmapEx = rEntry.GetGraphicObject().GetGraphic().GetBitmapEx(); + SetVirtualDevice(rSize); + InsertEntry( + rEntry.GetName(), + maVD.GetBitmap(Point(0, 0), + rSize)); } else { - InsertEntry(pEntry->GetName()); + InsertEntry(rEntry.GetName()); } } /************************************************************************/ -void BitmapLB::Modify(XBitmapEntry* pEntry, sal_uInt16 nPos, BitmapEx* pBmpEx) +void BitmapLB::Modify(const Size& rSize, const XBitmapEntry& rEntry, sal_uInt16 nPos, BitmapEx* pBmpEx) { RemoveEntry(nPos); if(pBmpEx) { - maBitmapEx = pEntry->GetGraphicObject().GetGraphic().GetBitmapEx(); - SetVirtualDevice(); - InsertEntry(pEntry->GetName(), maVD.GetBitmap(Point(0, 2), Size(32, 12)), nPos); + maBitmapEx = rEntry.GetGraphicObject().GetGraphic().GetBitmapEx(); + SetVirtualDevice(rSize); + InsertEntry( + rEntry.GetName(), + maVD.GetBitmap(Point(0, 0), rSize), + nPos); } else { - InsertEntry(pEntry->GetName()); + InsertEntry(rEntry.GetName()); } } @@ -1657,7 +1670,6 @@ FillAttrLB::FillAttrLB( Window* pParent, ResId Id ) maVD(), maBitmapEx() { - maVD.SetOutputSizePixel(Size(32, 16)); } /************************************************************************/ @@ -1665,29 +1677,32 @@ FillAttrLB::FillAttrLB( Window* pParent, ResId Id ) FillAttrLB::FillAttrLB(Window* pParent, WinBits aWB) : ColorListBox(pParent, aWB) { - maVD.SetOutputSizePixel(Size(32, 16)); } /************************************************************************/ -void FillAttrLB::SetVirtualDevice() +void FillAttrLB::SetVirtualDevice(const Size& rSize) { + maVD.SetOutputSizePixel(rSize); maVD.Erase(); if(maBitmapEx.GetSizePixel().Width() > 8 || maBitmapEx.GetSizePixel().Height() > 8) { - maVD.DrawBitmapEx(Point(0, 0), Size(32, 16), maBitmapEx); + maVD.DrawBitmapEx(Point(0, 0), rSize, maBitmapEx); } else { - maVD.DrawBitmapEx(Point(0, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(8, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(16, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(24, 0), maBitmapEx); - maVD.DrawBitmapEx(Point(0, 8), maBitmapEx); - maVD.DrawBitmapEx(Point(8, 8), maBitmapEx); - maVD.DrawBitmapEx(Point(16, 8), maBitmapEx); - maVD.DrawBitmapEx(Point(24, 8), maBitmapEx); + const Size aBitmapSize(maBitmapEx.GetSizePixel()); + + for(sal_uInt32 y(0); y < rSize.Height(); y += aBitmapSize.Height()) + { + for(sal_uInt32 x(0); x < rSize.Width(); x += aBitmapSize.Width()) + { + maVD.DrawBitmapEx( + Point(x, y), + maBitmapEx); + } + } } } @@ -1704,8 +1719,12 @@ void FillAttrLB::Fill(const XBitmapList* pList) { pEntry = pList->GetBitmap( i ); maBitmapEx = pEntry->GetGraphicObject().GetGraphic().GetBitmapEx(); - SetVirtualDevice(); - ListBox::InsertEntry(pEntry->GetName(), maVD.GetBitmap(Point(0, 2), Size(32, 12))); + const Size aSize(pList->getUiBitmapWidth(), pList->getUiBitmapHeight()); + SetVirtualDevice(aSize); + ListBox::InsertEntry( + pEntry->GetName(), + maVD.GetBitmap(Point(0, 0), + aSize)); } ListBox::SetUpdateMode(true); @@ -1759,9 +1778,17 @@ void FillTypeLB::Fill() |* Fuellt die Listbox (vorlaeufig) mit Strings |* \************************************************************************/ - void LineLB::Fill( const XDashList* pList ) { + Clear(); + + // entry for 'none' + InsertEntry(pList->GetStringForUiNoLine()); + + // entry for solid line + InsertEntry(pList->GetStringForUiSolidLine(), pList->GetBitmapForUISolidLine()); + + // entries for dashed lines long nCount = pList->Count(); XDashEntry* pEntry; SetUpdateMode( sal_False ); @@ -1769,11 +1796,11 @@ void LineLB::Fill( const XDashList* pList ) for( long i = 0; i < nCount; i++ ) { pEntry = pList->GetDash( i ); - Bitmap* pBitmap = const_cast<XDashList*>(pList)->CreateBitmapForUI( i ); - if( pBitmap ) + const Bitmap aBitmap = const_cast< XDashList* >(pList)->GetUiBitmap( i ); + if( !aBitmap.IsEmpty() ) { - InsertEntry( pEntry->GetName(), *pBitmap ); - delete pBitmap; + InsertEntry( pEntry->GetName(), aBitmap ); + //delete pBitmap; } else InsertEntry( pEntry->GetName() ); @@ -1781,33 +1808,9 @@ void LineLB::Fill( const XDashList* pList ) SetUpdateMode( sal_True ); } -void LineLB::FillStyles() -{ - ResMgr& rMgr = DIALOG_MGR(); - - // Linienstile - Clear(); - InsertEntry( String( ResId( RID_SVXSTR_INVISIBLE, rMgr ) ) ); - - const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); - Bitmap aBitmap ( SVX_RES ( RID_SVXCTRL_LINECTRL ) ); - Color aSourceColors[2]; - Color aDestColors[2]; - - aSourceColors[0] = Color( COL_WHITE ); - aSourceColors[1] = Color( COL_BLACK ); - - aDestColors[0] = rStyles.GetFieldColor(); - aDestColors[1] = rStyles.GetFieldTextColor(); - - aBitmap.Replace ( aSourceColors, aDestColors, 2 ); - Image aSolidLine ( aBitmap ); - InsertEntry( String( ResId( RID_SVXSTR_SOLID, rMgr ) ), aSolidLine ); -} - /************************************************************************/ -void LineLB::Append( XDashEntry* pEntry, Bitmap* pBmp ) +void LineLB::Append( XDashEntry* pEntry, const Bitmap* pBmp ) { if( pBmp ) InsertEntry( pEntry->GetName(), *pBmp ); @@ -1817,7 +1820,7 @@ void LineLB::Append( XDashEntry* pEntry, Bitmap* pBmp ) /************************************************************************/ -void LineLB::Modify( XDashEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp ) +void LineLB::Modify( XDashEntry* pEntry, sal_uInt16 nPos, const Bitmap* pBmp ) { RemoveEntry( nPos ); @@ -1858,6 +1861,20 @@ void LineLB::SelectEntryByList( const XDashList* pList, const String& rStr, |* Fuellt die Listbox (vorlaeufig) mit Strings |* \************************************************************************/ +LineEndLB::LineEndLB( Window* pParent, ResId Id ) + : ListBox( pParent, Id ) +{ +} + +LineEndLB::LineEndLB( Window* pParent, WinBits aWB ) + : ListBox( pParent, aWB ) +{ +} + +LineEndLB::~LineEndLB(void) +{ +} + void LineEndLB::Fill( const XLineEndList* pList, sal_Bool bStart ) { @@ -1869,17 +1886,16 @@ void LineEndLB::Fill( const XLineEndList* pList, sal_Bool bStart ) for( long i = 0; i < nCount; i++ ) { pEntry = pList->GetLineEnd( i ); - Bitmap* pBitmap = const_cast<XLineEndList*>(pList)->CreateBitmapForUI( i ); - if( pBitmap ) + const Bitmap aBitmap = const_cast< XLineEndList* >(pList)->GetUiBitmap( i ); + if( !aBitmap.IsEmpty() ) { - Size aBmpSize( pBitmap->GetSizePixel() ); + Size aBmpSize( aBitmap.GetSizePixel() ); aVD.SetOutputSizePixel( aBmpSize, sal_False ); - aVD.DrawBitmap( Point(), *pBitmap ); + aVD.DrawBitmap( Point(), aBitmap ); InsertEntry( pEntry->GetName(), aVD.GetBitmap( bStart ? Point() : Point( aBmpSize.Width() / 2, 0 ), Size( aBmpSize.Width() / 2, aBmpSize.Height() ) ) ); - - delete pBitmap; + //delete pBitmap; } else InsertEntry( pEntry->GetName() ); @@ -1889,8 +1905,7 @@ void LineEndLB::Fill( const XLineEndList* pList, sal_Bool bStart ) /************************************************************************/ -void LineEndLB::Append( XLineEndEntry* pEntry, Bitmap* pBmp, - sal_Bool bStart ) +void LineEndLB::Append( XLineEndEntry* pEntry, const Bitmap* pBmp, sal_Bool bStart ) { if( pBmp ) { @@ -1909,8 +1924,7 @@ void LineEndLB::Append( XLineEndEntry* pEntry, Bitmap* pBmp, /************************************************************************/ -void LineEndLB::Modify( XLineEndEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp, - sal_Bool bStart ) +void LineEndLB::Modify( XLineEndEntry* pEntry, sal_uInt16 nPos, const Bitmap* pBmp, sal_Bool bStart ) { RemoveEntry( nPos ); diff --git a/svx/source/dialog/dlgutil.cxx b/svx/source/dialog/dlgutil.cxx index 6d72b7174f8e..dd05fb010711 100644 --- a/svx/source/dialog/dlgutil.cxx +++ b/svx/source/dialog/dlgutil.cxx @@ -48,3 +48,12 @@ FieldUnit GetModuleFieldUnit( const SfxItemSet& rSet ) return eUnit; } +// ----------------------------------------------------------------------- + +FieldUnit GetModuleFieldUnit() +{ + return SfxModule::GetCurrentFieldUnit(); +} + +// ----------------------------------------------------------------------- +// eof diff --git a/svx/source/dialog/fontwork.cxx b/svx/source/dialog/fontwork.cxx index 5e9264fc3c85..84cae7d15cd7 100644 --- a/svx/source/dialog/fontwork.cxx +++ b/svx/source/dialog/fontwork.cxx @@ -903,7 +903,7 @@ IMPL_LINK( SvxFontWorkDialog, ColorSelectHdl_Impl, void *, EMPTYARG ) |* \************************************************************************/ -void SvxFontWorkDialog::SetColorTable(const XColorTable* pTable) +void SvxFontWorkDialog::SetColorTable(const XColorList* pTable) { if ( pTable && pTable != pColorTable ) { diff --git a/svx/source/dialog/sdstring.src b/svx/source/dialog/sdstring.src index 319689163e73..ff27ca1f0aef 100644 --- a/svx/source/dialog/sdstring.src +++ b/svx/source/dialog/sdstring.src @@ -45,7 +45,7 @@ String RID_SVXSTR_LINESTYLE }; String RID_SVXSTR_INVISIBLE { - Text [ en-US ] = "Invisible" ; + Text [ en-US ] = "None" ; }; String RID_SVXSTR_COLOR { diff --git a/svx/source/dialog/svxbmpnumvalueset.src b/svx/source/dialog/svxbmpnumvalueset.src index 9832dbc4d2e9..482f06805448 100644 --- a/svx/source/dialog/svxbmpnumvalueset.src +++ b/svx/source/dialog/svxbmpnumvalueset.src @@ -57,7 +57,8 @@ String RID_SVXSTR_BULLET_DESCRIPTION_7 }; String RID_SVXSTR_SINGLENUM_DESCRIPTION_0 { - Text [en-US] = "Number 1) 2) 3)"; + //Text [en-US] = "Number 1) 2) 3)"; + Text [en-US] = "Number %NUMBERINGSAMPLE"; }; String RID_SVXSTR_SINGLENUM_DESCRIPTION_1 { diff --git a/svx/source/gallery2/GalleryControl.cxx b/svx/source/gallery2/GalleryControl.cxx new file mode 100644 index 000000000000..ac84b50c0240 --- /dev/null +++ b/svx/source/gallery2/GalleryControl.cxx @@ -0,0 +1,302 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "sidebar/PanelFactory.hxx" + +#include "GalleryControl.hxx" + +#include "gallery.hrc" +#include "svx/galmisc.hxx" +#include "svx/gallery1.hxx" +#include "galbrws1.hxx" +#include "galbrws2.hxx" +#include "GallerySplitter.hxx" +#include <vcl/svapp.hxx> +#include <sfx2/sidebar/Theme.hxx> + +#include <boost/bind.hpp> + +namespace svx { namespace sidebar { + +static const sal_Int32 gnInitialVerticalSplitPosition (150); + + +GalleryControl::GalleryControl ( + SfxBindings* pBindings, + Window* pParentWindow) + : Window(pParentWindow, GAL_RESID(RID_SVXDLG_GALLERYBROWSER)), + mpGallery (Gallery::GetGalleryInstance()), + mpBrowser1(new GalleryBrowser1( + this, + GAL_RESID(GALLERY_BROWSER1), + mpGallery, + ::boost::bind(&GalleryControl::KeyInput,this,_1,_2), + ::boost::bind(&GalleryControl::ThemeSelectionHasChanged, this))), + mpSplitter(new GallerySplitter( + this, + GAL_RESID(GALLERY_SPLITTER), + ::boost::bind(&GalleryControl::InitSettings, this))), + mpBrowser2(new GalleryBrowser2(this, GAL_RESID(GALLERY_BROWSER2), mpGallery)), + maLastSize(GetOutputSizePixel()), + mbIsInitialResize(true) +{ + FreeResource(); + + mpBrowser1->SelectTheme(0); + mpBrowser1->Show(sal_True); + + mpBrowser2->Show(sal_True); + + mpSplitter->SetHorizontal(false); + mpSplitter->SetSplitHdl( LINK( this, GalleryControl, SplitHdl ) ); + mpSplitter->Show( sal_True ); + + InitSettings(); +} + + + + +GalleryControl::~GalleryControl (void) +{ +} + + + + +void GalleryControl::InitSettings (void) +{ + SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + SetControlBackground( GALLERY_DLG_COLOR ); + SetControlForeground( GALLERY_DLG_COLOR ); + + mpSplitter->SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + mpSplitter->SetControlBackground( GALLERY_DLG_COLOR ); + mpSplitter->SetControlForeground( GALLERY_DLG_COLOR ); + + mpBrowser1->SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + mpBrowser1->SetControlBackground( GALLERY_DLG_COLOR ); + mpBrowser1->SetControlForeground( GALLERY_DLG_COLOR ); + + mpBrowser2->SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + mpBrowser2->SetControlBackground( GALLERY_DLG_COLOR ); + mpBrowser2->SetControlForeground( GALLERY_DLG_COLOR ); + + const Wallpaper aBackground (sfx2::sidebar::Theme::GetWallpaper(sfx2::sidebar::Theme::Paint_PanelBackground)); + mpSplitter->SetBackground(aBackground); + SetBackground(aBackground); + mpBrowser2->SetBackground(aBackground); +} + + + + +void GalleryControl::Resize (void) +{ + // call parent + Window::Resize(); + + // update hor/ver + const Size aNewSize( GetOutputSizePixel() ); + if (aNewSize.Width()<=0 || aNewSize.Height()<=0) + return; + + const bool bNewLayoutHorizontal(aNewSize.Width() > aNewSize.Height()); + const bool bOldLayoutHorizontal(mpSplitter->IsHorizontal()); + long nSplitPos( bOldLayoutHorizontal ? mpSplitter->GetPosPixel().X() : mpSplitter->GetPosPixel().Y()); + const long nSplitSize( bOldLayoutHorizontal ? mpSplitter->GetOutputSizePixel().Width() : mpSplitter->GetOutputSizePixel().Height()); + + if(bNewLayoutHorizontal != bOldLayoutHorizontal) + { + mpSplitter->SetHorizontal(bNewLayoutHorizontal); + } + else + { + if (mbIsInitialResize) + { + nSplitPos = gnInitialVerticalSplitPosition; + if (nSplitPos > aNewSize.Height()/2) + nSplitPos = aNewSize.Height()/2; + } + } + mbIsInitialResize = false; + + const long nFrameLen = LogicToPixel( Size( 3, 0 ), MAP_APPFONT ).Width(); + const long nFrameLen2 = nFrameLen << 1; + + if(bNewLayoutHorizontal) + { + mpBrowser1->SetPosSizePixel( + Point( nFrameLen, nFrameLen ), + Size(nSplitPos - nFrameLen, aNewSize.Height() - nFrameLen2) ); + + mpSplitter->SetPosSizePixel( + Point( nSplitPos, 0), + Size( nSplitSize, aNewSize.Height() ) ); + + mpSplitter->SetDragRectPixel( + Rectangle( + Point( nFrameLen2, 0 ), + Size( aNewSize.Width() - ( nFrameLen2 << 1 ) - nSplitSize, aNewSize.Height() ) ) ); + + mpBrowser2->SetPosSizePixel( + Point( nSplitPos + nSplitSize, nFrameLen ), + Size( aNewSize.Width() - nSplitSize - nSplitPos - nFrameLen, aNewSize.Height() - nFrameLen2 ) ); + } + else + { + mpBrowser1->SetPosSizePixel( + Point( nFrameLen, nFrameLen ), + Size(aNewSize.Width() - nFrameLen2, nSplitPos - nFrameLen)); + + mpSplitter->SetPosSizePixel( + Point( 0, nSplitPos), + Size( aNewSize.Width(), nSplitSize ) ); + + mpSplitter->SetDragRectPixel( + Rectangle( + Point( 0, nFrameLen2 ), + Size( aNewSize.Width(), aNewSize.Height() - ( nFrameLen2 << 1 ) - nSplitSize ) )); + + mpBrowser2->SetPosSizePixel( + Point( nFrameLen, nSplitPos + nSplitSize ), + Size( aNewSize.Width() - nFrameLen2, aNewSize.Height() - nSplitSize - nSplitPos - nFrameLen )); + } + + maLastSize = aNewSize; +} + + + + +sal_Bool GalleryControl::KeyInput( const KeyEvent& rKEvt, Window* ) +{ + const sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode(); + sal_Bool bRet = ( !rKEvt.GetKeyCode().IsMod1() && + ( ( KEY_TAB == nCode ) || ( KEY_F6 == nCode && rKEvt.GetKeyCode().IsMod2() ) ) ); + + if( bRet ) + { + if( !rKEvt.GetKeyCode().IsShift() ) + { + if( mpBrowser1->mpThemes->HasChildPathFocus( sal_True ) ) + mpBrowser2->GetViewWindow()->GrabFocus(); + else if( mpBrowser2->GetViewWindow()->HasFocus() ) + mpBrowser2->maViewBox.GrabFocus(); + else if( mpBrowser2->maViewBox.HasFocus() ) + mpBrowser1->maNewTheme.GrabFocus(); + else + mpBrowser1->mpThemes->GrabFocus(); + } + else + { + if( mpBrowser1->mpThemes->HasChildPathFocus( sal_True ) ) + mpBrowser1->maNewTheme.GrabFocus(); + else if( mpBrowser1->maNewTheme.HasFocus() ) + mpBrowser2->maViewBox.GrabFocus(); + else if( mpBrowser2->maViewBox.HasFocus() ) + mpBrowser2->GetViewWindow()->GrabFocus(); + else + mpBrowser1->mpThemes->GrabFocus(); + } + } + + return bRet; +} + + + + +void GalleryControl::GetFocus (void) +{ + Window::GetFocus(); + mpBrowser1->GrabFocus(); +} + + + + +void GalleryControl::ThemeSelectionHasChanged (void) +{ + mpBrowser2->SelectTheme(mpBrowser1->GetSelectedTheme()); +} + + + + +INetURLObject GalleryControl::GetURL (void) const +{ + return mpBrowser2->GetURL(); +} + + + + +String GalleryControl::GetFilterName (void) const +{ + return mpBrowser2->GetFilterName(); +} + + + + +Graphic GalleryControl::GetGraphic(void) const +{ + return mpBrowser2->GetGraphic(); +} + + + + +sal_Bool GalleryControl::GetVCDrawModel( FmFormModel& rModel ) const +{ + return mpBrowser2->GetVCDrawModel( rModel ); +} + + + + +sal_Bool GalleryControl::IsLinkage (void) const +{ + return mpBrowser2->IsLinkage(); +} + + + + +IMPL_LINK( GalleryControl, SplitHdl, void*, EMPTYARG ) +{ + if(mpSplitter->IsHorizontal()) + { + mpSplitter->SetPosPixel( Point( mpSplitter->GetSplitPosPixel(), mpSplitter->GetPosPixel().Y() ) ); + } + else + { + mpSplitter->SetPosPixel( Point( mpSplitter->GetPosPixel().X(), mpSplitter->GetSplitPosPixel() ) ); + } + + Resize(); + + return 0L; +} + + +} } // end of namespace svx::sidebar diff --git a/svx/source/gallery2/GallerySplitter.cxx b/svx/source/gallery2/GallerySplitter.cxx new file mode 100644 index 000000000000..b16abc21f166 --- /dev/null +++ b/svx/source/gallery2/GallerySplitter.cxx @@ -0,0 +1,55 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "GallerySplitter.hxx" + + +DBG_NAME(GallerySplitter) + +GallerySplitter::GallerySplitter( + Window* pParent, + const ResId& rResId, + const ::boost::function<void(void)>& rDataChangeFunctor) + : Splitter( pParent, rResId ), + maDataChangeFunctor(rDataChangeFunctor) +{ + DBG_CTOR(GallerySplitter,NULL); +} + + + + +GallerySplitter::~GallerySplitter() +{ + DBG_DTOR(GallerySplitter,NULL); +} + + + + +void GallerySplitter::DataChanged( const DataChangedEvent& rDCEvt ) +{ + Splitter::DataChanged( rDCEvt ); + if (maDataChangeFunctor) + maDataChangeFunctor(); +} diff --git a/svx/source/gallery2/GallerySplitter.hxx b/svx/source/gallery2/GallerySplitter.hxx new file mode 100644 index 000000000000..85e7041e9126 --- /dev/null +++ b/svx/source/gallery2/GallerySplitter.hxx @@ -0,0 +1,45 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_GALLERY_SPLITTER_HXX +#define SVX_GALLERY_SPLITTER_HXX + +#include <vcl/split.hxx> +#include <boost/function.hpp> + +class GallerySplitter : public Splitter +{ +public: + GallerySplitter ( + Window* pParent, + const ResId& rResId, + const ::boost::function<void(void)>& rDataChangeFunctor); + virtual ~GallerySplitter (void); + +protected: + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + +private: + ::boost::function<void(void)> maDataChangeFunctor; +}; + + +#endif diff --git a/svx/source/gallery2/galbrws.cxx b/svx/source/gallery2/galbrws.cxx index 2e1f0a578f28..6c92d797698c 100644 --- a/svx/source/gallery2/galbrws.cxx +++ b/svx/source/gallery2/galbrws.cxx @@ -19,8 +19,6 @@ * *************************************************************/ - - // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" @@ -35,48 +33,9 @@ #include "galbrws1.hxx" #include "galbrws2.hxx" #include "svx/galbrws.hxx" +#include "GallerySplitter.hxx" -// ------------------- -// - GallerySplitter - -// ------------------- - -class GallerySplitter : public Splitter -{ -protected: - - virtual void DataChanged( const DataChangedEvent& rDCEvt ); - -public: - - GallerySplitter( Window* pParent, const ResId& rResId ); - virtual ~GallerySplitter(); -}; - -// ----------------------------------------------------------------------------- -DBG_NAME(GallerySplitter) - -GallerySplitter::GallerySplitter( Window* pParent, const ResId& rResId ) : - Splitter( pParent, rResId ) -{ - DBG_CTOR(GallerySplitter,NULL); - -} - -// ----------------------------------------------------------------------------- - -GallerySplitter::~GallerySplitter() -{ - - DBG_DTOR(GallerySplitter,NULL); -} - -// ----------------------------------------------------------------------------- - -void GallerySplitter::DataChanged( const DataChangedEvent& rDCEvt ) -{ - Splitter::DataChanged( rDCEvt ); - static_cast< GalleryBrowser* >( GetParent() )->InitSettings(); -} +#include <boost/bind.hpp> // ------------------------- // - SvxGalleryChildWindow - @@ -110,24 +69,40 @@ SFX_IMPL_DOCKINGWINDOW( GalleryChildWindow, SID_GALLERY ) // ------------------ DBG_NAME(GalleryBrowser) -GalleryBrowser::GalleryBrowser( SfxBindings* _pBindings, SfxChildWindow* pCW, - Window* pParent, const ResId& rResId ) : - SfxDockingWindow( _pBindings, pCW, pParent, rResId ) +GalleryBrowser::GalleryBrowser( + SfxBindings* _pBindings, + SfxChildWindow* pCW, + Window* pParent, + const ResId& rResId) +: SfxDockingWindow(_pBindings, pCW, pParent, rResId), + maLastSize(GetOutputSizePixel()), + mpSplitter(0), + mpBrowser1(0), + mpBrowser2(0), + mpGallery(0) { DBG_CTOR(GalleryBrowser,NULL); mpGallery = Gallery::GetGalleryInstance(); - mpBrowser1 = new GalleryBrowser1( this, GAL_RESID( GALLERY_BROWSER1 ), mpGallery ); - mpSplitter = new GallerySplitter( this, GAL_RESID( GALLERY_SPLITTER ) ); + mpBrowser1 = new GalleryBrowser1( + this, + GAL_RESID( GALLERY_BROWSER1 ), + mpGallery, + ::boost::bind(&GalleryBrowser::KeyInput,this,_1,_2), + ::boost::bind(&GalleryBrowser::ThemeSelectionHasChanged, this)); + mpSplitter = new GallerySplitter( this, GAL_RESID( GALLERY_SPLITTER ), + ::boost::bind(&GalleryBrowser::InitSettings, this)); mpBrowser2 = new GalleryBrowser2( this, GAL_RESID( GALLERY_BROWSER2 ), mpGallery ); FreeResource(); - SetMinOutputSizePixel( maLastSize = GetOutputSizePixel() ); + SetMinOutputSizePixel(maLastSize); mpBrowser1->SelectTheme( 0 ); mpBrowser1->Show( sal_True ); mpBrowser2->Show( sal_True ); + const bool bLayoutHorizontal(maLastSize.Width() > maLastSize.Height()); + mpSplitter->SetHorizontal(bLayoutHorizontal); mpSplitter->SetSplitHdl( LINK( this, GalleryBrowser, SplitHdl ) ); mpSplitter->Show( sal_True ); @@ -170,23 +145,62 @@ void GalleryBrowser::InitSettings() void GalleryBrowser::Resize() { + // call parent SfxDockingWindow::Resize(); - const long nFrameWidth = LogicToPixel( Size( 3, 0 ), MAP_APPFONT ).Width(); - const long nFrameWidth2 = nFrameWidth << 1; - Size aMinSize( GetMinOutputSizePixel() ); - Size aNewSize( GetOutputSizePixel() ); - Point aSplitPos( mpSplitter->GetPosPixel() ); - const Size aSplitSize( mpSplitter->GetOutputSizePixel() ); + // update hor/ver + const Size aNewSize( GetOutputSizePixel() ); + const bool bNewLayoutHorizontal(aNewSize.Width() > aNewSize.Height()); + const bool bOldLayoutHorizontal(mpSplitter->IsHorizontal()); + const long nSplitPos( bOldLayoutHorizontal ? mpSplitter->GetPosPixel().X() : mpSplitter->GetPosPixel().Y()); + const long nSplitSize( bOldLayoutHorizontal ? mpSplitter->GetOutputSizePixel().Width() : mpSplitter->GetOutputSizePixel().Height()); - mpBrowser1->SetPosSizePixel( Point( nFrameWidth, nFrameWidth ), - Size( aSplitPos.X() - nFrameWidth, aNewSize.Height() - nFrameWidth2 ) ); + if(bNewLayoutHorizontal != bOldLayoutHorizontal) + { + mpSplitter->SetHorizontal(bNewLayoutHorizontal); + } - mpSplitter->SetPosSizePixel( aSplitPos, Size( aSplitSize.Width(), aNewSize.Height() ) ); - mpSplitter->SetDragRectPixel( Rectangle( Point( nFrameWidth2, 0 ), Size( aNewSize.Width() - ( nFrameWidth2 << 1 ) - aSplitSize.Width(), aNewSize.Height() ) ) ); + const long nFrameLen = LogicToPixel( Size( 3, 0 ), MAP_APPFONT ).Width(); + const long nFrameLen2 = nFrameLen << 1; - mpBrowser2->SetPosSizePixel( Point( aSplitPos.X() + aSplitSize.Width(), nFrameWidth ), - Size( aNewSize.Width() - aSplitSize.Width() - aSplitPos.X() - nFrameWidth, aNewSize.Height() - nFrameWidth2 ) ); + if(bNewLayoutHorizontal) + { + mpBrowser1->SetPosSizePixel( + Point( nFrameLen, nFrameLen ), + Size(nSplitPos - nFrameLen, aNewSize.Height() - nFrameLen2) ); + + mpSplitter->SetPosSizePixel( + Point( nSplitPos, 0), + Size( nSplitSize, aNewSize.Height() ) ); + + mpSplitter->SetDragRectPixel( + Rectangle( + Point( nFrameLen2, 0 ), + Size( aNewSize.Width() - ( nFrameLen2 << 1 ) - nSplitSize, aNewSize.Height() ) ) ); + + mpBrowser2->SetPosSizePixel( + Point( nSplitPos + nSplitSize, nFrameLen ), + Size( aNewSize.Width() - nSplitSize - nSplitPos - nFrameLen, aNewSize.Height() - nFrameLen2 ) ); + } + else + { + mpBrowser1->SetPosSizePixel( + Point( nFrameLen, nFrameLen ), + Size(aNewSize.Width() - nFrameLen2, nSplitPos - nFrameLen)); + + mpSplitter->SetPosSizePixel( + Point( 0, nSplitPos), + Size( aNewSize.Width(), nSplitSize ) ); + + mpSplitter->SetDragRectPixel( + Rectangle( + Point( 0, nFrameLen2 ), + Size( aNewSize.Width(), aNewSize.Height() - ( nFrameLen2 << 1 ) - nSplitSize ) )); + + mpBrowser2->SetPosSizePixel( + Point( nFrameLen, nSplitPos + nSplitSize ), + Size( aNewSize.Width() - nFrameLen2, aNewSize.Height() - nSplitSize - nSplitPos - nFrameLen )); + } maLastSize = aNewSize; } @@ -289,8 +303,19 @@ sal_Bool GalleryBrowser::IsLinkage() const IMPL_LINK( GalleryBrowser, SplitHdl, void*, EMPTYARG ) { - mpSplitter->SetPosPixel( Point( mpSplitter->GetSplitPosPixel(), mpSplitter->GetPosPixel().Y() ) ); + if(mpSplitter->IsHorizontal()) + { + mpSplitter->SetPosPixel( Point( mpSplitter->GetSplitPosPixel(), mpSplitter->GetPosPixel().Y() ) ); + } + else + { + mpSplitter->SetPosPixel( Point( mpSplitter->GetPosPixel().X(), mpSplitter->GetSplitPosPixel() ) ); + } + Resize(); return 0L; } + +// ----------------------------------------------------------------------------- +// eof diff --git a/svx/source/gallery2/galbrws1.cxx b/svx/source/gallery2/galbrws1.cxx index aae042f6c3e3..3ef6109694ec 100644 --- a/svx/source/gallery2/galbrws1.cxx +++ b/svx/source/gallery2/galbrws1.cxx @@ -147,7 +147,13 @@ long GalleryThemeListBox::PreNotify( NotifyEvent& rNEvt ) // ------------------- DBG_NAME(GalleryBrowser1) -GalleryBrowser1::GalleryBrowser1( GalleryBrowser* pParent, const ResId& rResId, Gallery* pGallery ) : +GalleryBrowser1::GalleryBrowser1( + Window* pParent, + const ResId& rResId, + Gallery* pGallery, + const ::boost::function<sal_Bool(const KeyEvent&,Window*)>& rKeyInputHandler, + const ::boost::function<void(void)>& rThemeSlectionHandler) + : Control ( pParent, rResId ), maNewTheme ( this, WB_3DLOOK ), mpThemes ( new GalleryThemeListBox( this, WB_TABSTOP | WB_3DLOOK | WB_BORDER | WB_HSCROLL | WB_VSCROLL | WB_AUTOHSCROLL | WB_SORT ) ), @@ -157,7 +163,9 @@ GalleryBrowser1::GalleryBrowser1( GalleryBrowser* pParent, const ResId& rResId, aImgNormal ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_NORMAL ) ), aImgDefault ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_DEFAULT ) ), aImgReadOnly ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_READONLY ) ), - aImgImported ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_IMPORTED ) ) + aImgImported ( GalleryResGetBitmapEx( RID_SVXBMP_THEME_IMPORTED ) ), + maKeyInputHandler(rKeyInputHandler), + maThemeSlectionHandler(rThemeSlectionHandler) { DBG_CTOR(GalleryBrowser1,NULL); @@ -591,7 +599,9 @@ void GalleryBrowser1::ShowContextMenu() sal_Bool GalleryBrowser1::KeyInput( const KeyEvent& rKEvt, Window* pWindow ) { - sal_Bool bRet = static_cast< GalleryBrowser* >( GetParent() )->KeyInput( rKEvt, pWindow ); + sal_Bool bRet (sal_False); + if (maKeyInputHandler) + bRet = maKeyInputHandler(rKEvt, pWindow); if( !bRet ) { @@ -699,7 +709,8 @@ IMPL_LINK( GalleryBrowser1, PopupMenuHdl, Menu*, pMenu ) IMPL_LINK( GalleryBrowser1, SelectThemeHdl, void*, EMPTYARG ) { - ( (GalleryBrowser*) GetParent() )->ThemeSelectionHasChanged(); + if (maThemeSlectionHandler) + maThemeSlectionHandler(); return 0L; } diff --git a/svx/source/gallery2/galbrws1.hxx b/svx/source/gallery2/galbrws1.hxx index ce36ba43faa8..6626ebe40a09 100644 --- a/svx/source/gallery2/galbrws1.hxx +++ b/svx/source/gallery2/galbrws1.hxx @@ -28,6 +28,8 @@ #include <vector> #include "svx/galbrws.hxx" +#include <boost/function.hpp> + // ----------------- // - GalleryButton - // ----------------- @@ -74,9 +76,12 @@ class VclAbstractDialog2; struct ExchangeData; class SfxItemSet; +namespace svx { namespace sidebar { class GalleryControl; } } + class GalleryBrowser1 : public Control, SfxListener { friend class GalleryBrowser; + friend class svx::sidebar::GalleryControl; friend class GalleryThemeListBox; using Control::Notify; using Window::KeyInput; @@ -94,6 +99,9 @@ private: Image aImgReadOnly; Image aImgImported; + ::boost::function<sal_Bool(const KeyEvent&,Window*)> maKeyInputHandler; + ::boost::function<void(void)> maThemeSlectionHandler; + void ImplAdjustControls(); sal_uIntPtr ImplInsertThemeEntry( const GalleryThemeEntry* pEntry ); void ImplFillExchangeData( const GalleryTheme* pThm, ExchangeData& rData ); @@ -119,7 +127,12 @@ private: public: - GalleryBrowser1( GalleryBrowser* pParent, const ResId& rResId, Gallery* pGallery ); + GalleryBrowser1( + Window* pParent, + const ResId& rResId, + Gallery* pGallery, + const ::boost::function<sal_Bool(const KeyEvent&,Window*)>& rKeyInputHandler, + const ::boost::function<void(void)>& rThemeSlectionHandler); ~GalleryBrowser1(); void SelectTheme( const String& rThemeName ) { mpThemes->SelectEntry( rThemeName ); SelectThemeHdl( NULL ); } diff --git a/svx/source/gallery2/galbrws2.cxx b/svx/source/gallery2/galbrws2.cxx index f1fd738b2501..26dc86f80131 100644 --- a/svx/source/gallery2/galbrws2.cxx +++ b/svx/source/gallery2/galbrws2.cxx @@ -53,6 +53,7 @@ #include <svx/dialmgr.hxx> #include <svx/svxdlg.hxx> #include <svx/dialogs.hrc> +#include "GalleryControl.hxx" // ----------- // - Defines - @@ -315,7 +316,7 @@ void GalleryToolBox::KeyInput( const KeyEvent& rKEvt ) // ------------------- DBG_NAME(GalleryBrowser2) -GalleryBrowser2::GalleryBrowser2( GalleryBrowser* pParent, const ResId& rResId, Gallery* pGallery ) : +GalleryBrowser2::GalleryBrowser2( Window* pParent, const ResId& rResId, Gallery* pGallery ) : Control ( pParent, rResId ), mpGallery ( pGallery ), mpCurTheme ( NULL ), @@ -574,7 +575,16 @@ sal_Bool GalleryBrowser2::KeyInput( const KeyEvent& rKEvt, Window* pWindow ) { Point aSelPos; const sal_uIntPtr nItemId = ImplGetSelectedItemId( NULL, aSelPos ); - sal_Bool bRet = static_cast< GalleryBrowser* >( GetParent() )->KeyInput( rKEvt, pWindow ); + GalleryBrowser* pParentBrowser = dynamic_cast<GalleryBrowser*>(GetParent()); + sal_Bool bRet = sal_False; + if (pParentBrowser != NULL) + bRet = pParentBrowser->KeyInput( rKEvt, pWindow ); + else + { + svx::sidebar::GalleryControl* pParentControl = dynamic_cast<svx::sidebar::GalleryControl*>(GetParent()); + if (pParentControl != NULL) + bRet = pParentControl->KeyInput(rKEvt, pWindow); + } if( !bRet && !maViewBox.HasFocus() && nItemId && mpCurTheme ) { diff --git a/svx/source/gallery2/gallery1.cxx b/svx/source/gallery2/gallery1.cxx index e2c880284e6d..254739e29c51 100644 --- a/svx/source/gallery2/gallery1.cxx +++ b/svx/source/gallery2/gallery1.cxx @@ -77,7 +77,12 @@ GalleryThemeEntry::GalleryThemeEntry( const INetURLObject& rBaseURL, const Strin SetModified( _bNewFile ); if( nId && bThemeNameFromResource ) - aName = String( GAL_RESID( RID_GALLERYSTR_THEME_START + (sal_uInt16) nId ) ); + { + const ResId aId (GAL_RESID( RID_GALLERYSTR_THEME_START + (sal_uInt16) nId)); + if (aId.GetpResource() == NULL) + OSL_TRACE(""); + aName = String(aId); + } if( !aName.Len() ) aName = rName; diff --git a/svx/source/items/drawitem.cxx b/svx/source/items/drawitem.cxx index 3378c697a058..2e10538612ce 100644 --- a/svx/source/items/drawitem.cxx +++ b/svx/source/items/drawitem.cxx @@ -55,7 +55,7 @@ SvxColorTableItem::SvxColorTableItem() // ----------------------------------------------------------------------- -SvxColorTableItem::SvxColorTableItem( XColorTable* pTable, sal_uInt16 nW ) : +SvxColorTableItem::SvxColorTableItem( XColorList* pTable, sal_uInt16 nW ) : SfxPoolItem( nW ), pColorTable( pTable ) { @@ -120,7 +120,7 @@ sal_Bool SvxColorTableItem::PutValue( const com::sun::star::uno::Any& rVal, sal_ sal_Int64 aValue = 0; if ( rVal >>= aValue ) { - pColorTable = (XColorTable *)(sal_uLong)aValue; + pColorTable = (XColorList*)(sal_uLong)aValue; return sal_True; } diff --git a/svx/source/items/svxitems.src b/svx/source/items/svxitems.src index 3fc0c3918d06..fc7c23624b16 100644 --- a/svx/source/items/svxitems.src +++ b/svx/source/items/svxitems.src @@ -211,7 +211,12 @@ String RID_SVXITEMS_BRUSHSTYLE_BITMAP { Text [ en-US ] = "Image" ; }; - +// enum ColorName ----------------------------------------------------------- +String RID_SVXITEMS_COLOR_WHITE +{ + Text [ en-US ] = "White" ; +}; +// end enum ColorName ----------------------------------------------------------- String RID_SVXITEMS_HORJUST_STANDARD { Text [ en-US ] = "Horizontal alignment default" ; diff --git a/svx/source/sdr/attribute/sdrformtextattribute.cxx b/svx/source/sdr/attribute/sdrformtextattribute.cxx index 1608b9524391..8b5d5122dcc3 100644 --- a/svx/source/sdr/attribute/sdrformtextattribute.cxx +++ b/svx/source/sdr/attribute/sdrformtextattribute.cxx @@ -56,27 +56,27 @@ namespace { - basegfx::B2DLineJoin impGetB2DLineJoin(XLineJoint eLineJoint) + basegfx::B2DLineJoin impGetB2DLineJoin(com::sun::star::drawing::LineJoint eLineJoint) { switch(eLineJoint) { - case XLINEJOINT_MIDDLE : + case com::sun::star::drawing::LineJoint_MIDDLE : { return basegfx::B2DLINEJOIN_MIDDLE; } - case XLINEJOINT_BEVEL : + case com::sun::star::drawing::LineJoint_BEVEL : { return basegfx::B2DLINEJOIN_BEVEL; } - case XLINEJOINT_MITER : + case com::sun::star::drawing::LineJoint_MITER : { return basegfx::B2DLINEJOIN_MITER; } - case XLINEJOINT_ROUND : + case com::sun::star::drawing::LineJoint_ROUND : { return basegfx::B2DLINEJOIN_ROUND; } - default : + default : // com::sun::star::drawing::LineJoint_NONE { return basegfx::B2DLINEJOIN_NONE; // XLINEJOINT_NONE } @@ -115,7 +115,7 @@ namespace } const sal_uInt32 nLineWidth = ((const XLineWidthItem&)(rSet.Get(XATTR_LINEWIDTH))).GetValue(); - const XLineJoint eLineJoint = ((const XLineJointItem&)(rSet.Get(XATTR_LINEJOINT))).GetValue(); + const com::sun::star::drawing::LineJoint eLineJoint = ((const XLineJointItem&)(rSet.Get(XATTR_LINEJOINT))).GetValue(); const com::sun::star::drawing::LineCap eLineCap = ((const XLineCapItem&)(rSet.Get(XATTR_LINECAP))).GetValue(); return drawinglayer::attribute::LineAttribute( diff --git a/svx/source/sdr/primitive2d/sdrattributecreator.cxx b/svx/source/sdr/primitive2d/sdrattributecreator.cxx index 20cb325ec062..a218bc9012d2 100644 --- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx +++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx @@ -137,29 +137,29 @@ namespace drawinglayer } } - basegfx::B2DLineJoin XLineJointtoB2DLineJoin(XLineJoint eLineJoint) + basegfx::B2DLineJoin LineJointToB2DLineJoin(com::sun::star::drawing::LineJoint eLineJoint) { switch(eLineJoint) { - case XLINEJOINT_MIDDLE : + case com::sun::star::drawing::LineJoint_MIDDLE : { return basegfx::B2DLINEJOIN_MIDDLE; } - case XLINEJOINT_BEVEL : + case com::sun::star::drawing::LineJoint_BEVEL : { return basegfx::B2DLINEJOIN_BEVEL; } - case XLINEJOINT_MITER : + case com::sun::star::drawing::LineJoint_MITER : { return basegfx::B2DLINEJOIN_MITER; } - case XLINEJOINT_ROUND : + case com::sun::star::drawing::LineJoint_ROUND : { return basegfx::B2DLINEJOIN_ROUND; } - default : + default : // com::sun::star::drawing::LineJoint_NONE { - return basegfx::B2DLINEJOIN_NONE; // XLINEJOINT_NONE + return basegfx::B2DLINEJOIN_NONE; } } } @@ -238,7 +238,7 @@ namespace drawinglayer { const sal_uInt32 nWidth(((const XLineWidthItem&)(rSet.Get(XATTR_LINEWIDTH))).GetValue()); const Color aColor(((const XLineColorItem&)(rSet.Get(XATTR_LINECOLOR))).GetColorValue()); - const XLineJoint eJoint(((const XLineJointItem&)(rSet.Get(XATTR_LINEJOINT))).GetValue()); + const com::sun::star::drawing::LineJoint eJoint(((const XLineJointItem&)(rSet.Get(XATTR_LINEJOINT))).GetValue()); const com::sun::star::drawing::LineCap eCap(((const XLineCapItem&)(rSet.Get(XATTR_LINECAP))).GetValue()); ::std::vector< double > aDotDashArray; double fFullDotDashLen(0.0); @@ -254,7 +254,7 @@ namespace drawinglayer } return attribute::SdrLineAttribute( - XLineJointtoB2DLineJoin(eJoint), + LineJointToB2DLineJoin(eJoint), (double)nWidth, (double)nTransparence * 0.01, aColor.getBColor(), @@ -399,6 +399,26 @@ namespace drawinglayer if(100 != nTransparence) { + // need to check XFillFloatTransparence, object fill may still be completely transparent + const SfxPoolItem* pGradientItem; + + if(SFX_ITEM_SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE, sal_True, &pGradientItem) + && ((XFillFloatTransparenceItem*)pGradientItem)->IsEnabled()) + { + const XGradient& rGradient = ((XFillFloatTransparenceItem*)pGradientItem)->GetGradientValue(); + const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance()); + const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance()); + const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance); + + if(bCompletelyTransparent) + { + nTransparence = 100; + } + } + } + + if(100 != nTransparence) + { const Color aColor(((const XFillColorItem&)(rSet.Get(XATTR_FILLCOLOR))).GetColorValue()); attribute::FillGradientAttribute aGradient; attribute::FillHatchAttribute aHatch; @@ -569,8 +589,13 @@ namespace drawinglayer const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance()); const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance()); const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance); + const bool bNotTransparent(0x00 == nStartLuminance && 0x00 == nEndLuminance); - if(!bCompletelyTransparent) + // create nothing when completely transparent: This case is already checked for the + // normal fill attributes, XFILL_NONE will be used. + // create nothing when not transparent: use normal fill, no need t create a FillGradientAttribute. + // Both cases are optimizations, always creating FillGradientAttribute will work, too + if(!bNotTransparent && !bCompletelyTransparent) { const double fStartLum(nStartLuminance / 255.0); const double fEndLum(nEndLuminance / 255.0); diff --git a/svx/source/sidebar/ColorPanel.cxx b/svx/source/sidebar/ColorPanel.cxx new file mode 100644 index 000000000000..42bf02cd339a --- /dev/null +++ b/svx/source/sidebar/ColorPanel.cxx @@ -0,0 +1,233 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "ColorPanel.hxx" + +#include <vcl/image.hxx> +#include <vcl/svapp.hxx> + +namespace svx { namespace sidebar { + +ColorPanel::ColorPanel (::Window* pParent) + : ValueSet(pParent), + mnPreferredColumnCount(2) +{ + WinBits aStyle = + WB_ITEMBORDER + | WB_DOUBLEBORDER + | WB_NAMEFIELD + | WB_FLATVALUESET + | WB_TABSTOP + | WB_VSCROLL; + + SetStyle(GetStyle() | aStyle); + SetExtraSpacing(2); + + Fill (); + Show(); +} + + + + +ColorPanel::~ColorPanel (void) +{ +} + + + + +sal_Int32 ColorPanel::GetPreferredHeight (sal_Int32 nWidth) +{ + sal_Int32 nPreferredHeight = 0; + if (GetItemCount()>0) + { + Image aImage = GetItemImage(GetItemId(0)); + Size aItemSize = CalcItemSizePixel (aImage.GetSizePixel()); + if (nWidth>0 && aItemSize.Width()>0) + { + int nColumnCount = nWidth / aItemSize.Width(); + if (nColumnCount <= 0) + nColumnCount = 1; + else if (nColumnCount > 4) + nColumnCount = 4; + int nRowCount = (GetItemCount() + nColumnCount-1) + / nColumnCount; + nPreferredHeight = nRowCount * aItemSize.Height(); + } + } + return nPreferredHeight; +} + + + + +void ColorPanel::Resize (void) +{ + ::Window::Resize(); + Size aWindowSize = GetOutputSizePixel(); + SetPosSizePixel(Point(0,0), aWindowSize); + if (IsVisible() && aWindowSize.Width() > 0) + { + // Calculate the number of rows and columns. + if (GetItemCount() > 0) + { + Image aImage = GetItemImage(GetItemId(0)); + Size aItemSize = CalcItemSizePixel ( + aImage.GetSizePixel()); + int nColumnCount = aWindowSize.Width() / 30; + if (nColumnCount < 1) + nColumnCount = 1; + else if (nColumnCount > 4) + nColumnCount = 4; + + sal_uInt16 nRowCount = (sal_uInt16)CalculateRowCount(aItemSize, nColumnCount); + + SetColCount((sal_uInt16)nColumnCount); + SetLineCount(nRowCount); + } + } + +} + + + + +int ColorPanel::CalculateRowCount (const Size&, int nColumnCount) +{ + int nRowCount = 0; + + if (GetItemCount()>0 && nColumnCount>0) + { + nRowCount = GetOutputSizePixel().Height() / 30; + if (nRowCount < 1) + nRowCount = 1; + } + + return nRowCount; +} + + + + +void ColorPanel::DataChanged (const DataChangedEvent& rEvent) +{ + Fill(); +} + + + + +void ColorPanel::Fill (void) +{ + const StyleSettings& rSettings ( + Application::GetSettings().GetStyleSettings()); + Clear(); + SetItemWidth (30); + SetItemHeight (30); + sal_uInt16 i = 0; + InsertItem (++i, rSettings.GetFaceColor()); + SetItemText (i, String::CreateFromAscii("FaceColor")); + InsertItem (++i, rSettings.GetCheckedColor()); + SetItemText (i, String::CreateFromAscii("CheckedColor")); + InsertItem (++i, rSettings.GetLightColor()); + SetItemText (i, String::CreateFromAscii("LightColor")); + InsertItem (++i, rSettings.GetLightBorderColor()); + SetItemText (i, String::CreateFromAscii("LightBorderColor")); + InsertItem (++i, rSettings.GetShadowColor()); + SetItemText (i, String::CreateFromAscii("ShadowColor")); + InsertItem (++i, rSettings.GetDarkShadowColor()); + SetItemText (i, String::CreateFromAscii("DarkShadowColor")); + InsertItem (++i, rSettings.GetButtonTextColor()); + SetItemText (i, String::CreateFromAscii("ButtonTextColor")); + InsertItem (++i, rSettings.GetRadioCheckTextColor()); + SetItemText (i, String::CreateFromAscii("RadioCheckTextColor")); + InsertItem (++i, rSettings.GetGroupTextColor()); + SetItemText (i, String::CreateFromAscii("GroupTextColor")); + InsertItem (++i, rSettings.GetLabelTextColor()); + SetItemText (i, String::CreateFromAscii("LabelTextColor")); + InsertItem (++i, rSettings.GetInfoTextColor()); + SetItemText (i, String::CreateFromAscii("InfoTextColor")); + InsertItem (++i, rSettings.GetWindowColor()); + SetItemText (i, String::CreateFromAscii("WindowColor")); + InsertItem (++i, rSettings.GetWindowTextColor()); + SetItemText (i, String::CreateFromAscii("WindowTextColor")); + InsertItem (++i, rSettings.GetDialogColor()); + SetItemText (i, String::CreateFromAscii("DialogColor")); + InsertItem (++i, rSettings.GetDialogTextColor()); + SetItemText (i, String::CreateFromAscii("DialogTextColor")); + InsertItem (++i, rSettings.GetWorkspaceColor()); + SetItemText (i, String::CreateFromAscii("WorkspaceColor")); + InsertItem (++i, rSettings.GetFieldColor()); + SetItemText (i, String::CreateFromAscii("FieldColor")); + InsertItem (++i, rSettings.GetFieldTextColor()); + SetItemText (i, String::CreateFromAscii("FieldTextColor")); + InsertItem (++i, rSettings.GetActiveColor()); + SetItemText (i, String::CreateFromAscii("ActiveColor")); + InsertItem (++i, rSettings.GetActiveColor2()); + SetItemText (i, String::CreateFromAscii("ActiveColor2")); + InsertItem (++i, rSettings.GetActiveTextColor()); + SetItemText (i, String::CreateFromAscii("ActiveTextColor")); + InsertItem (++i, rSettings.GetActiveBorderColor()); + SetItemText (i, String::CreateFromAscii("ActiveBorderColor")); + InsertItem (++i, rSettings.GetDeactiveColor()); + SetItemText (i, String::CreateFromAscii("DeactiveColor")); + InsertItem (++i, rSettings.GetDeactiveColor2()); + SetItemText (i, String::CreateFromAscii("DeactiveColor2")); + InsertItem (++i, rSettings.GetDeactiveTextColor()); + SetItemText (i, String::CreateFromAscii("DeactiveTextColor")); + InsertItem (++i, rSettings.GetDeactiveBorderColor()); + SetItemText (i, String::CreateFromAscii("DeactiveBorderColor")); + InsertItem (++i, rSettings.GetHighlightColor()); + SetItemText (i, String::CreateFromAscii("HighlightColor")); + InsertItem (++i, rSettings.GetHighlightTextColor()); + SetItemText (i, String::CreateFromAscii("HighlightTextColor")); + InsertItem (++i, rSettings.GetDisableColor()); + SetItemText (i, String::CreateFromAscii("DisableColor")); + InsertItem (++i, rSettings.GetHelpColor()); + SetItemText (i, String::CreateFromAscii("HelpColor")); + InsertItem (++i, rSettings.GetHelpTextColor()); + SetItemText (i, String::CreateFromAscii("HelpTextColor")); + InsertItem (++i, rSettings.GetMenuColor()); + SetItemText (i, String::CreateFromAscii("MenuColor")); + InsertItem (++i, rSettings.GetMenuBarColor()); + SetItemText (i, String::CreateFromAscii("MenuBarColor")); + InsertItem (++i, rSettings.GetMenuBorderColor()); + SetItemText (i, String::CreateFromAscii("MenuBorderColor")); + InsertItem (++i, rSettings.GetMenuTextColor()); + SetItemText (i, String::CreateFromAscii("MenuTextColor")); + InsertItem (++i, rSettings.GetMenuHighlightColor()); + SetItemText (i, String::CreateFromAscii("MenuHighlightColor")); + InsertItem (++i, rSettings.GetMenuHighlightTextColor()); + SetItemText (i, String::CreateFromAscii("MenuHighlightTextColor")); + InsertItem (++i, rSettings.GetLinkColor()); + SetItemText (i, String::CreateFromAscii("LinkColor")); + InsertItem (++i, rSettings.GetVisitedLinkColor()); + SetItemText (i, String::CreateFromAscii("VisitedLinkColor")); + InsertItem (++i, rSettings.GetHighlightLinkColor()); + SetItemText (i, String::CreateFromAscii("HighlightLinkColor")); + InsertItem (++i, rSettings.GetFontColor()); + SetItemText (i, String::CreateFromAscii("FontColor")); +} + +} } // end of namespace ::svx::sidebar diff --git a/sd/source/ui/toolpanel/TestMenu.hxx b/svx/source/sidebar/ColorPanel.hxx index 40bad7854661..91c2987ad241 100644 --- a/sd/source/ui/toolpanel/TestMenu.hxx +++ b/svx/source/sidebar/ColorPanel.hxx @@ -19,51 +19,31 @@ * *************************************************************/ +#ifndef SVX_SIDEBAR_COLOR_PANEL_HXX +#define SVX_SIDEBAR_COLOR_PANEL_HXX - -#ifndef SD_TASKPANE_COLOR_MENU_HXX -#define SD_TASKPANE_COLOR_MENU_HXX - -#include "taskpane/TaskPaneTreeNode.hxx" #include <svtools/valueset.hxx> #include <vcl/window.hxx> -#include <memory> - -namespace sd { namespace toolpanel { +namespace svx { namespace sidebar { -class ControlFactory; -#ifdef SHOW_COLOR_MENU - -/** This demo menu shows the colors that are available from the +/** This demo panel shows the colors that are available from the StyleSettings. */ -class ColorMenu - : public ::Window, - public TreeNode +class ColorPanel + : public ValueSet { public: - ColorMenu (::Window* i_pParent); - virtual ~ColorMenu (void); - - static ::std::auto_ptr<ControlFactory> CreateControlFactory (void); - - // From ILayoutableWindow - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeight); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual bool IsResizable (void); - virtual ::Window* GetWindow (void); + ColorPanel (::Window* pParent); + virtual ~ColorPanel (void); // From ::Window virtual void Resize (void); - - using Window::GetWindow; + virtual void DataChanged (const DataChangedEvent& rEvent); private: - ValueSet maSet; int mnPreferredColumnCount; /** Depending on the given number of columns and the item size @@ -72,9 +52,10 @@ private: */ int CalculateRowCount (const Size& rItemSize, int nColumnCount); void Fill (void); + + sal_Int32 GetPreferredHeight (sal_Int32 nWidth); }; -#endif -} } // end of namespace ::sd::toolpanel +} } // end of namespace ::svx::sidebar #endif diff --git a/svx/source/sidebar/ContextChangeEventMultiplexer.cxx b/svx/source/sidebar/ContextChangeEventMultiplexer.cxx new file mode 100644 index 000000000000..f9838ed86e4f --- /dev/null +++ b/svx/source/sidebar/ContextChangeEventMultiplexer.cxx @@ -0,0 +1,91 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "svx/sidebar/ContextChangeEventMultiplexer.hxx" + +#include <com/sun/star/ui/ContextChangeEventObject.hpp> +#include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp> +#include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp> +#include <com/sun/star/frame/XModuleManager.hpp> +#include <comphelper/processfactory.hxx> +#include <comphelper/componentcontext.hxx> +#include <sfx2/viewsh.hxx> +#include <tools/diagnose_ex.h> + +using namespace css; +using namespace cssu; + + +void ContextChangeEventMultiplexer::NotifyContextChange ( + const cssu::Reference<css::frame::XController>& rxController, + const ::sfx2::sidebar::EnumContext::Context eContext) +{ + if (rxController.is() && rxController->getFrame().is()) + { + const css::ui::ContextChangeEventObject aEvent( + rxController, + GetModuleName(rxController->getFrame()), + ::sfx2::sidebar::EnumContext::GetContextName(eContext)); + + cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( + css::ui::ContextChangeEventMultiplexer::get( + ::comphelper::getProcessComponentContext())); + if (xMultiplexer.is()) + xMultiplexer->broadcastContextChangeEvent(aEvent, rxController); + } +} + + + + +void ContextChangeEventMultiplexer::NotifyContextChange ( + SfxViewShell* pViewShell, + const ::sfx2::sidebar::EnumContext::Context eContext) +{ + if (pViewShell != NULL) + NotifyContextChange(pViewShell->GetController(), eContext); +} + + + + +::rtl::OUString ContextChangeEventMultiplexer::GetModuleName ( + const cssu::Reference<css::frame::XFrame>& rxFrame) +{ + try + { + const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory()); + const Reference<frame::XModuleManager> xModuleManager ( + aContext.createComponent("com.sun.star.frame.ModuleManager" ), + UNO_QUERY_THROW ); + return xModuleManager->identify(rxFrame); + } + catch (const Exception&) + { + // An exception typically means that a context change is notified + // during initialization or destruction of a view. + // Ignore it. + } + return ::sfx2::sidebar::EnumContext::GetApplicationName( + ::sfx2::sidebar::EnumContext::Application_None); +} diff --git a/svx/source/sidebar/EmptyPanel.cxx b/svx/source/sidebar/EmptyPanel.cxx new file mode 100644 index 000000000000..6b364aa549c3 --- /dev/null +++ b/svx/source/sidebar/EmptyPanel.cxx @@ -0,0 +1,80 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "EmptyPanel.hxx" +#include "EmptyPanel.hrc" +#include "area/AreaPropertyPanel.hrc" +#include "svx/dialogs.hrc" +#include "svx/dialmgr.hxx" + + +namespace svx { namespace sidebar { + +namespace +{ + class SidebarResource : public Resource + { + public: + SidebarResource (const ResId& rResId) : Resource(rResId) {} + ~SidebarResource (void) { FreeResource(); } + }; +} + + + + +EmptyPanel::EmptyPanel (::Window* pParent) + : Control(pParent, SVX_RES(RID_SIDEBAR_EMPTY_PANEL)), + maMessageControl(this, SVX_RES(FT_MESSAGE)) +{ + maMessageControl.SetPosSizePixel(5,5, 250,15); + maMessageControl.SetStyle(WB_WORDBREAK);// | WB_NOMNEMONICS); + //maMessageControl.GetStyle() + // & ~(WB_NOMULTILINE | WB_PATHELLIPSIS) + // | WB_WORDBREAK | WB_NOMNEMONICS); + FreeResource(); + + SetBackground(Wallpaper()); + + maMessageControl.Show(); + Show(); +} + + + + +EmptyPanel::~EmptyPanel (void) +{ +} + + + + +void EmptyPanel::Resize (void) +{ + const Size aSize (GetSizePixel()); + maMessageControl.SetSizePixel(aSize); +} + + +} } // end of namespace ::svx::sidebar diff --git a/svx/source/inc/linectrl.hrc b/svx/source/sidebar/EmptyPanel.hrc index eb0bf489be63..9380db7412d6 100644 --- a/svx/source/inc/linectrl.hrc +++ b/svx/source/sidebar/EmptyPanel.hrc @@ -19,6 +19,8 @@ * *************************************************************/ +#include <svx/dialogs.hrc> -#define RID_SVXCTRL_LINECTRL 257 +// For RID_SIDEBAR_EMPTY_PANEL +#define FT_MESSAGE 1 diff --git a/sd/source/ui/toolpanel/TestPanel.hxx b/svx/source/sidebar/EmptyPanel.hxx index 4fa768e70109..e6ef0b2beef6 100644 --- a/sd/source/ui/toolpanel/TestPanel.hxx +++ b/svx/source/sidebar/EmptyPanel.hxx @@ -19,35 +19,33 @@ * *************************************************************/ +#ifndef SVX_SIDEBAR_DEBUG_EMPTY_PANEL_HXX +#define SVX_SIDEBAR_DEBUG_EMPTY_PANEL_HXX +#include <vcl/window.hxx> +#include <vcl/ctrl.hxx> +#include <vcl/fixed.hxx> -#ifndef SD_TASKPANE_TEST_PANEL_HXX -#define SD_TASKPANE_TEST_PANEL_HXX -#include "taskpane/SubToolPanel.hxx" +namespace svx { namespace sidebar { -namespace sd { namespace toolpanel { - -class ControlFactory; -class TreeNode; - -#ifdef SHOW_TEST_PANEL - -/** This panel demonstrates how to create a panel for the task pane. +/** Display a panel that tells the user that the current deck is + intentionally empty. */ -class TestPanel - : public SubToolPanel +class EmptyPanel + : public Control { public: - TestPanel (::Window& i_rParent); - virtual ~TestPanel (void); + EmptyPanel (::Window* pParent); + virtual ~EmptyPanel (void); - static std::auto_ptr<ControlFactory> CreateControlFactory (void); -}; + virtual void Resize (void); -#endif +private: + FixedText maMessageControl; +}; -} } // end of namespace ::sd::toolpanel +} } // end of namespace ::svx::sidebar #endif diff --git a/svx/source/sidebar/EmptyPanel.src b/svx/source/sidebar/EmptyPanel.src new file mode 100644 index 000000000000..1a008f976b05 --- /dev/null +++ b/svx/source/sidebar/EmptyPanel.src @@ -0,0 +1,33 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "EmptyPanel.hrc" +#include <svx/dialogs.hrc> + +Control RID_SIDEBAR_EMPTY_PANEL +{ + FixedText FT_MESSAGE + { + Pos = MAP_APPFONT(2,2); + Size = MAP_APPFONT(100,24); + Text [en-US] = "Properties for the task that you are performing are not available in the sidebar at this time."; + }; +}; diff --git a/svx/source/sidebar/PanelFactory.cxx b/svx/source/sidebar/PanelFactory.cxx new file mode 100644 index 000000000000..ecc912ff0a1e --- /dev/null +++ b/svx/source/sidebar/PanelFactory.cxx @@ -0,0 +1,209 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "sidebar/PanelFactory.hxx" + +#include "text/TextPropertyPanel.hxx" +#include "paragraph/ParaPropertyPanel.hxx" +#include "area/AreaPropertyPanel.hxx" +#include "graphic/GraphicPropertyPanel.hxx" +#include "line/LinePropertyPanel.hxx" +#include "possize/PosSizePropertyPanel.hxx" +#include "GalleryControl.hxx" +#include "debug/ColorPanel.hxx" +#include "debug/ContextPanel.hxx" +#include "debug/NotYetImplementedPanel.hxx" +#include "EmptyPanel.hxx" +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sfxbasecontroller.hxx> +#include <sfx2/templdlg.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <vcl/window.hxx> +#include <rtl/ref.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <com/sun/star/ui/XSidebar.hpp> + +#include <boost/bind.hpp> + + +using namespace css; +using namespace cssu; +using ::rtl::OUString; + + +namespace svx { namespace sidebar { + +#define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) +#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.svx.sidebar.PanelFactory" +#define SERVICE_NAME "com.sun.star.ui.UIElementFactory" + + +::rtl::OUString SAL_CALL PanelFactory::getImplementationName (void) +{ + return A2S(IMPLEMENTATION_NAME); +} + + + + +cssu::Reference<cssu::XInterface> SAL_CALL PanelFactory::createInstance ( + const uno::Reference<lang::XMultiServiceFactory>& rxFactory) +{ + (void)rxFactory; + + ::rtl::Reference<PanelFactory> pPanelFactory (new PanelFactory()); + cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pPanelFactory.get()), cssu::UNO_QUERY); + return xService; +} + + + + +cssu::Sequence<OUString> SAL_CALL PanelFactory::getSupportedServiceNames (void) +{ + cssu::Sequence<OUString> aServiceNames (1); + aServiceNames[0] = A2S(SERVICE_NAME); + return aServiceNames; + +} + + + + +PanelFactory::PanelFactory (void) + : PanelFactoryInterfaceBase(m_aMutex) +{ +} + + + + +PanelFactory::~PanelFactory (void) +{ +} + + + + +Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement ( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + container::NoSuchElementException, + lang::IllegalArgumentException, + RuntimeException) +{ + const ::comphelper::NamedValueCollection aArguments (rArguments); + Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); + Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); + Reference<ui::XSidebar> xSidebar (aArguments.getOrDefault("Sidebar", Reference<ui::XSidebar>())); + const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0))); + SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue); + + ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); + if ( ! xParentWindow.is() || pParentWindow==NULL) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without ParentWindow"), + NULL); + if ( ! xFrame.is()) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without Frame"), + NULL); + if (pBindings == NULL) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without SfxBindings"), + NULL); + + Window* pControl = NULL; + ui::LayoutSize aLayoutSize (-1,-1,-1); + +#define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s)) + if (DoesResourceEndWith("/TextPropertyPanel")) + { + pControl = TextPropertyPanel::Create(pParentWindow, xFrame, pBindings, xSidebar); + } + else if (DoesResourceEndWith("/ParaPropertyPanel")) + { + pControl = ParaPropertyPanel::Create(pParentWindow, xFrame, pBindings, xSidebar); + } + else if (DoesResourceEndWith("/AreaPropertyPanel")) + { + pControl = AreaPropertyPanel::Create(pParentWindow, xFrame, pBindings); + } + else if (DoesResourceEndWith("/GraphicPropertyPanel")) + { + pControl = GraphicPropertyPanel::Create(pParentWindow, xFrame, pBindings); + } + else if (DoesResourceEndWith("/LinePropertyPanel")) + { + pControl = LinePropertyPanel::Create(pParentWindow, xFrame, pBindings); + } + else if (DoesResourceEndWith("/PosSizePropertyPanel")) + { + pControl = PosSizePropertyPanel::Create(pParentWindow, xFrame, pBindings, xSidebar); + } + else if (DoesResourceEndWith("/GalleryPanel")) + { + pControl = new GalleryControl(pBindings, pParentWindow); + aLayoutSize = ui::LayoutSize(300,-1,400); + } + else if (DoesResourceEndWith("/StyleListPanel")) + { + pControl = new SfxTemplatePanelControl(pBindings, pParentWindow); + aLayoutSize = ui::LayoutSize(0,-1,-1); + } + else if (DoesResourceEndWith("/Debug_ColorPanel")) + { + pControl = new ColorPanel(pParentWindow); + aLayoutSize = ui::LayoutSize(300,-1,400); + } + else if (DoesResourceEndWith("/Debug_ContextPanel")) + { + pControl = new ContextPanel(pParentWindow); + aLayoutSize = ui::LayoutSize(45,45,45); + } + else if (DoesResourceEndWith("/Debug_NotYetImplementedPanel")) + { + pControl = new NotYetImplementedPanel(pParentWindow); + aLayoutSize = ui::LayoutSize(20,25,25); + } + else if (DoesResourceEndWith("/EmptyPanel")) + { + pControl = new EmptyPanel(pParentWindow); + aLayoutSize = ui::LayoutSize(20,-1, 50); + } +#undef DoesResourceEndWith + + if (pControl != NULL) + { + return sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pControl, + aLayoutSize); + } + else + return Reference<ui::XUIElement>(); +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/SelectionAnalyzer.cxx b/svx/source/sidebar/SelectionAnalyzer.cxx new file mode 100644 index 000000000000..a5745bd8a860 --- /dev/null +++ b/svx/source/sidebar/SelectionAnalyzer.cxx @@ -0,0 +1,461 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "svx/sidebar/SelectionAnalyzer.hxx" +#include "svx/svdmrkv.hxx" +#include "svx/svdobj.hxx" +#include "svx/svdpage.hxx" +#include "svx/fmglob.hxx" +#include "svx/globl3d.hxx" + +using sfx2::sidebar::EnumContext; + + +namespace svx { namespace sidebar { + +EnumContext::Context SelectionAnalyzer::GetContextForSelection_SC (const SdrMarkList& rMarkList) +{ + EnumContext::Context eContext = EnumContext::Context_Unknown; + + switch (rMarkList.GetMarkCount()) + { + case 0: + // Empty selection. Return Context_Unknown to let the caller + // substitute it with the default context. + break; + + case 1: + { + SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + const sal_uInt32 nInv = pObj->GetObjInventor(); + const sal_uInt16 nObjId = pObj->GetObjIdentifier(); + if (nInv == SdrInventor) + eContext = GetContextForObjectId_SC(nObjId); + else if (nInv == FmFormInventor) + eContext = EnumContext::Context_Form; + break; + } + + default: + { + // Multi selection. + switch (GetInventorTypeFromMark(rMarkList)) + { + case SdrInventor: + { + const sal_uInt16 nObjId (GetObjectTypeFromMark(rMarkList)); + if (nObjId == 0) + eContext = EnumContext::Context_MultiObject; + else + eContext = GetContextForObjectId_SC(nObjId); + break; + } + + case FmFormInventor: + eContext = EnumContext::Context_Form; + break; + + case 0: + eContext = EnumContext::Context_MultiObject; + break; + } + } + } + + return eContext; +} + + + + +EnumContext::Context SelectionAnalyzer::GetContextForSelection_SD ( + const SdrMarkList& rMarkList, + const bool bIsMasterPage, + const bool bIsHandoutPage, + const bool bIsNotesPage) +{ + EnumContext::Context eContext = EnumContext::Context_Unknown; + + // Note that some cases are handled by the caller. They rely on + // sd specific data. + switch (rMarkList.GetMarkCount()) + { + case 0: + if (bIsHandoutPage) + eContext = EnumContext::Context_HandoutPage; + else if (bIsNotesPage) + eContext = EnumContext::Context_NotesPage; + else if (bIsMasterPage) + eContext = EnumContext::Context_MasterPage; + else + eContext = EnumContext::Context_DrawPage; + break; + + case 1: + { + SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + const sal_uInt32 nInv = pObj->GetObjInventor(); + sal_uInt16 nObjId = pObj->GetObjIdentifier(); + if (nInv == SdrInventor) + { + if (nObjId == OBJ_GRUP) + { + nObjId = GetObjectTypeFromGroup(pObj); + if (nObjId == 0) + nObjId = OBJ_GRUP; + } + eContext = GetContextForObjectId_SD(nObjId, bIsHandoutPage, bIsNotesPage); + } + else if (nInv == E3dInventor) + { + eContext = EnumContext::Context_3DObject; + } + else if (nInv == FmFormInventor) + { + eContext = EnumContext::Context_Form; + } + break; + } + + default: + { + switch (GetInventorTypeFromMark(rMarkList)) + { + case SdrInventor: + { + const sal_uInt16 nObjId = GetObjectTypeFromMark(rMarkList); + if (nObjId == 0) + eContext = EnumContext::Context_MultiObject; + else + eContext = GetContextForObjectId_SD(nObjId, bIsHandoutPage, bIsNotesPage); + break; + } + + case E3dInventor: + eContext = EnumContext::Context_3DObject; + break; + + case FmFormInventor: + eContext = EnumContext::Context_Form; + break; + + case 0: + eContext = EnumContext::Context_MultiObject; + break; + } + break; + } + } + + return eContext; +} + + + + +EnumContext::Context SelectionAnalyzer::GetContextForObjectId_SC (const sal_uInt16 nObjectId) +{ + switch (nObjectId) + { + case OBJ_CAPTION: + case OBJ_TITLETEXT: + case OBJ_OUTLINETEXT: + case OBJ_TEXT: + case OBJ_TEXTEXT: + case OBJ_PATHLINE: + case OBJ_PLIN: + case OBJ_FREELINE: + case OBJ_EDGE: + case OBJ_LINE: + case OBJ_MEASURE: + case OBJ_RECT: + case OBJ_CIRC: + case OBJ_FREEFILL: + case OBJ_PATHFILL: + case OBJ_POLY: + case OBJ_SECT: + case OBJ_CARC: + case OBJ_CCUT: + case OBJ_CUSTOMSHAPE: + case OBJ_GRUP: + return EnumContext::Context_Draw; + + case OBJ_GRAF: + return EnumContext::Context_Graphic; + + case OBJ_OLE2: + return EnumContext::Context_OLE; + + case OBJ_MEDIA: + return EnumContext::Context_Media; + break; + + default: + return EnumContext::Context_Unknown; + } +} + + + + +EnumContext::Context SelectionAnalyzer::GetContextForObjectId_SD ( + const sal_uInt16 nObjectId, + const bool bIsHandoutPage, + const bool bIsNotesPage) +{ + switch (nObjectId) + { + case OBJ_CAPTION: + case OBJ_PATHLINE: + case OBJ_PLIN: + case OBJ_FREELINE: + case OBJ_EDGE: + case OBJ_LINE: + case OBJ_MEASURE: + case OBJ_RECT: + case OBJ_CIRC: + case OBJ_FREEFILL: + case OBJ_PATHFILL: + case OBJ_POLY: + case OBJ_SECT: + case OBJ_CARC: + case OBJ_CCUT: + case OBJ_CUSTOMSHAPE: + case OBJ_GRUP: + return EnumContext::Context_Draw; + + case OBJ_TITLETEXT: + case OBJ_OUTLINETEXT: + case OBJ_TEXT: + case OBJ_TEXTEXT: + return EnumContext::Context_TextObject; + + case OBJ_GRAF: + return EnumContext::Context_Graphic; + + case OBJ_OLE2: + return EnumContext::Context_OLE; + + case OBJ_MEDIA: + return EnumContext::Context_Media; + + case OBJ_TABLE: + return EnumContext::Context_Table; + + case OBJ_PAGE: + if (bIsHandoutPage) + return EnumContext::Context_HandoutPage; + else if (bIsNotesPage) + return EnumContext::Context_NotesPage; + else + return EnumContext::Context_Unknown; + + default: + return EnumContext::Context_Unknown; + } +} + + + + +sal_uInt32 SelectionAnalyzer::GetInventorTypeFromMark (const SdrMarkList& rMarkList) +{ + const sal_uLong nMarkCount (rMarkList.GetMarkCount()); + + if (nMarkCount < 1) + return 0; + + SdrMark* pMark = rMarkList.GetMark(0); + SdrObject* pObj = pMark->GetMarkedSdrObj(); + const sal_uInt32 nFirstInv = pObj->GetObjInventor(); + + for (sal_uLong nIndex=1; nIndex<nMarkCount; ++nIndex) + { + pMark = rMarkList.GetMark(nIndex); + pObj = pMark->GetMarkedSdrObj(); + const sal_uInt32 nInv (pObj->GetObjInventor()); + + if (nInv != nFirstInv) + return 0; + } + + return nFirstInv; +} + + + + +sal_uInt16 SelectionAnalyzer::GetObjectTypeFromGroup (const SdrObject* pObj) +{ + SdrObjList* pObjList = pObj->GetSubList(); + if (pObjList) + { + const sal_uLong nSubObjCount (pObjList->GetObjCount()); + + if (nSubObjCount>0) + { + SdrObject* pObj = pObjList->GetObj(0); + sal_uInt16 nResultType = pObj->GetObjIdentifier(); + + if (nResultType == OBJ_GRUP) + nResultType = GetObjectTypeFromGroup(pObj); + + if (IsShapeType(nResultType)) + nResultType = OBJ_CUSTOMSHAPE; + + if (IsTextObjType(nResultType)) + nResultType = OBJ_TEXT; + + for (sal_uInt16 nIndex=1; nIndex<nSubObjCount; ++nIndex) + { + pObj = pObjList->GetObj(nIndex); + sal_uInt16 nType (pObj->GetObjIdentifier()); + + if(nType == OBJ_GRUP) + nType = GetObjectTypeFromGroup(pObj); + + if (IsShapeType(nType)) + nType = OBJ_CUSTOMSHAPE; + + if ((nType == OBJ_CUSTOMSHAPE) && (nResultType == OBJ_TEXT)) + nType = OBJ_TEXT; + + if (IsTextObjType(nType)) + nType = OBJ_TEXT; + + if ((nType == OBJ_TEXT) && (nResultType == OBJ_CUSTOMSHAPE)) + nResultType = OBJ_TEXT; + + if (nType != nResultType) + return 0; + } + + return nResultType; + } + } + + return 0; +} + + + + +sal_uInt16 SelectionAnalyzer::GetObjectTypeFromMark (const SdrMarkList& rMarkList) +{ + const sal_uLong nMarkCount (rMarkList.GetMarkCount()); + + if (nMarkCount < 1) + return 0; + + SdrMark* pMark = rMarkList.GetMark(0); + SdrObject* pObj = pMark->GetMarkedSdrObj(); + sal_uInt16 nResultType = pObj->GetObjIdentifier(); + + if(nResultType == OBJ_GRUP) + nResultType = GetObjectTypeFromGroup(pObj); + + if (IsShapeType(nResultType)) + nResultType = OBJ_CUSTOMSHAPE; + + if (IsTextObjType(nResultType)) + nResultType = OBJ_TEXT; + + for (sal_uLong nIndex=1; nIndex<nMarkCount; ++nIndex) + { + pMark = rMarkList.GetMark(nIndex); + pObj = pMark->GetMarkedSdrObj(); + sal_uInt16 nType = pObj->GetObjIdentifier(); + + if(nType == OBJ_GRUP) + nType = GetObjectTypeFromGroup(pObj); + + if (IsShapeType(nType)) + nType = OBJ_CUSTOMSHAPE; + + if ((nType == OBJ_CUSTOMSHAPE) && (nResultType == OBJ_TEXT)) + nType = OBJ_TEXT; + + if (IsTextObjType(nType)) + nType = OBJ_TEXT; + + if ((nType == OBJ_TEXT) && (nResultType == OBJ_CUSTOMSHAPE)) + nResultType = OBJ_TEXT; + + if (nType != nResultType) + return 0; + } + + return nResultType; +} + + + + +bool SelectionAnalyzer::IsShapeType (const sal_uInt16 nType) +{ + switch (nType) + { + case OBJ_LINE: + case OBJ_CARC: + case OBJ_PLIN: + case OBJ_PATHLINE: + case OBJ_RECT: + case OBJ_CIRC: + case OBJ_SECT: + case OBJ_CCUT: + case OBJ_PATHFILL: + case OBJ_CUSTOMSHAPE: + case OBJ_CAPTION: + case OBJ_MEASURE: + case OBJ_EDGE: + case OBJ_POLY: + case OBJ_FREELINE: + case OBJ_FREEFILL: + return true; + + default: + return false; + } +} + + + + +bool SelectionAnalyzer::IsTextObjType (const sal_uInt16 nType) +{ + switch(nType) + { + case OBJ_TEXT: + case OBJ_TEXTEXT: + case OBJ_TITLETEXT: + case OBJ_OUTLINETEXT: + return true; + + default: + return false; + } +} + + + +} } // end of namespace ::svx::sidebar diff --git a/svx/source/sidebar/SelectionChangeHandler.cxx b/svx/source/sidebar/SelectionChangeHandler.cxx new file mode 100644 index 000000000000..fb0ff011b6ac --- /dev/null +++ b/svx/source/sidebar/SelectionChangeHandler.cxx @@ -0,0 +1,119 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/SelectionChangeHandler.hxx" +#include "svx/sidebar/SelectionAnalyzer.hxx" +#include "svx/sidebar/ContextChangeEventMultiplexer.hxx" +#include "svx/svdmrkv.hxx" + +#include <sfx2/sidebar/EnumContext.hxx> +#include <sfx2/shell.hxx> + + +using namespace css; +using namespace cssu; + +using namespace sfx2::sidebar; + +namespace svx { namespace sidebar { + +SelectionChangeHandler::SelectionChangeHandler ( + const boost::function<sfx2::sidebar::EnumContext::Context(void)>& rSelectionChangeCallback, + const Reference<frame::XController>& rxController, + const EnumContext::Context eDefaultContext) + : SelectionChangeHandlerInterfaceBase(m_aMutex), + maSelectionChangeCallback(rSelectionChangeCallback), + mxController(rxController), + meDefaultContext(eDefaultContext), + mbIsConnected(false) +{ +} + + + + +SelectionChangeHandler::~SelectionChangeHandler (void) +{ +} + + + + +void SAL_CALL SelectionChangeHandler::selectionChanged (const lang::EventObject&) + throw (uno::RuntimeException) +{ + if (maSelectionChangeCallback) + { + const EnumContext::Context eContext (maSelectionChangeCallback()); + ContextChangeEventMultiplexer::NotifyContextChange( + mxController, + eContext==EnumContext::Context_Unknown + ? meDefaultContext + : eContext); + } +} + + + + +void SAL_CALL SelectionChangeHandler::disposing (const lang::EventObject&) + throw (uno::RuntimeException) +{ +} + + + + +void SAL_CALL SelectionChangeHandler::disposing (void) + throw (uno::RuntimeException) +{ + if (mbIsConnected) + Disconnect(); +} + + + + +void SelectionChangeHandler::Connect (void) +{ + uno::Reference<view::XSelectionSupplier> xSupplier (mxController, uno::UNO_QUERY); + if (xSupplier.is()) + { + mbIsConnected = true; + xSupplier->addSelectionChangeListener(this); + } +} + + + + +void SelectionChangeHandler::Disconnect (void) +{ + uno::Reference<view::XSelectionSupplier> xSupplier (mxController, uno::UNO_QUERY); + if (xSupplier.is()) + { + mbIsConnected = false; + xSupplier->removeSelectionChangeListener(this); + } +} + + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/area/AreaPropertyPanel.cxx b/svx/source/sidebar/area/AreaPropertyPanel.cxx new file mode 100644 index 000000000000..4b1472d3372f --- /dev/null +++ b/svx/source/sidebar/area/AreaPropertyPanel.cxx @@ -0,0 +1,1373 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/PopupContainer.hxx" +#include "AreaTransparencyGradientControl.hxx" + +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <AreaPropertyPanel.hxx> +#include <AreaPropertyPanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <sfx2/objsh.hxx> +#include <svx/xfltrit.hxx> +#include <svx/xflftrit.hxx> +#include <svx/xtable.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/bindings.hxx> +#include <helpid.hrc> +#include <svtools/valueset.hxx> +#include <unotools/pathoptions.hxx> +#include <svx/svxitems.hrc> +#include <vcl/toolbox.hxx> +#include <svtools/toolbarmenu.hxx> +#include <svx/sidebar/ColorControl.hxx> + +#include <boost/bind.hpp> + +using namespace css; +using namespace cssu; +using ::sfx2::sidebar::Theme; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + + + + +namespace svx { namespace sidebar { + +const sal_Int32 AreaPropertyPanel::DEFAULT_CENTERX = 50; +const sal_Int32 AreaPropertyPanel::DEFAULT_CENTERY = 50; +const sal_Int32 AreaPropertyPanel::DEFAULT_ANGLE = 0; +const sal_Int32 AreaPropertyPanel::DEFAULT_STARTVALUE = 0; +const sal_Int32 AreaPropertyPanel::DEFAULT_ENDVALUE = 16777215; +const sal_Int32 AreaPropertyPanel::DEFAULT_BORDER = 0; + + +AreaPropertyPanel::AreaPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) + : Control(pParent, SVX_RES(RID_SIDEBAR_AREA_PANEL)), + meLastXFS(-1), + maLastColor(Color(COL_DEFAULT_SHAPE_FILLING)), + mnLastPosGradient(0), + mnLastPosHatch(0), + mnLastPosBitmap(0), + mnLastTransSolid(50), + maGradientLinear(), + maGradientAxial(), + maGradientRadial(), + maGradientElliptical(), + maGradientSquare(), + maGradientRect(), + mpColorTextFT(new FixedText(this, SVX_RES(FT_COLOR_LIST))), + mpLbFillType(new SvxFillTypeBox(this)), + mpLbFillAttr(new SvxFillAttrBox(this)), + mpToolBoxColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpToolBoxColorBackground.get(), SVX_RES(TB_COLOR))), + mpTrspTextFT(new FixedText(this, SVX_RES(FL_TRSP_TEXT))), + mpLBTransType(new ListBox(this, SVX_RES(LB_TRGR_TYPES))), + mpMTRTransparent(new MetricField(this, SVX_RES(MTR_TRANSPARENT))), + mpBTNGradientBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpBTNGradient(sfx2::sidebar::ControlFactory::CreateToolBox(mpBTNGradientBackground.get(), SVX_RES(BTN_GRADIENT))), + mpColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_FILL_COLOR, TBI_COLOR, mpToolBoxColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)), + mpStyleItem(), + mpColorItem(), + mpFillGradientItem(), + mpHatchItem(), + mpBitmapItem(), + mpColorTableItem(), + mpGradientListItem(), + mpHatchListItem(), + mpBitmapListItem(), + maStyleControl(SID_ATTR_FILL_STYLE, *pBindings, *this), + maColorControl(SID_ATTR_FILL_COLOR, *pBindings, *this), + maGradientControl(SID_ATTR_FILL_GRADIENT, *pBindings, *this), + maHatchControl(SID_ATTR_FILL_HATCH, *pBindings, *this), + maBitmapControl(SID_ATTR_FILL_BITMAP, *pBindings, *this), + maColorTableControl(SID_COLOR_TABLE, *pBindings, *this), + maGradientListControl(SID_GRADIENT_LIST, *pBindings, *this), + maHatchListControl(SID_HATCH_LIST, *pBindings, *this), + maBitmapListControl(SID_BITMAP_LIST, *pBindings, *this), + maFillTransparenceController(SID_ATTR_FILL_TRANSPARENCE, *pBindings, *this), + maFillFloatTransparenceController(SID_ATTR_FILL_FLOATTRANSPARENCE, *pBindings, *this), + maImgAxial(SVX_RES(IMG_AXIAL)), + maImgElli(SVX_RES(IMG_ELLI)), + maImgQuad(SVX_RES(IMG_QUAD)), + maImgRadial(SVX_RES(IMG_RADIAL)), + maImgSquare(SVX_RES(IMG_SQUARE)), + maImgLinear(SVX_RES(IMG_LINEAR)), + maImgColor(SVX_RES(IMG_COLOR)), + maImgAxialH(SVX_RES(IMG_AXIAL_H)), + maImgElliH(SVX_RES(IMG_ELLI_H)), + maImgQuadH(SVX_RES(IMG_QUAD_H)), + maImgRadialH(SVX_RES(IMG_RADIAL_H)), + maImgSquareH(SVX_RES(IMG_SQUARE_H)), + maImgLinearH(SVX_RES(IMG_LINEAR_H)), + maImgColorH(SVX_RES(IMG_COLOR_H)), + msHelpFillType(SVX_RES(STR_HELP_TYPE)), + msHelpFillAttr(SVX_RES(STR_HELP_ATTR)), + maTrGrPopup(this, ::boost::bind(&AreaPropertyPanel::CreateTransparencyGradientControl, this, _1)), + maColorPopup(this, ::boost::bind(&AreaPropertyPanel::CreateColorPopupControl, this, _1)), + mpFloatTransparenceItem(), + mpTransparanceItem(), + mxFrame(rxFrame), + mpBindings(pBindings), + mbTBShow(true), + mbColorAvail(true) +{ + Initialize(); + FreeResource(); +} + + + +AreaPropertyPanel::~AreaPropertyPanel() +{ + // Destroy the toolboxes, then their background windows. + mpToolBoxColor.reset(); + mpBTNGradient.reset(); + mpToolBoxColorBackground.reset(); + mpBTNGradientBackground.reset(); +} + + + +void AreaPropertyPanel::Initialize() +{ + mpColorTextFT->SetBackground(Wallpaper()); + mpTrspTextFT->SetBackground(Wallpaper()); + + maGradientLinear.SetXOffset(DEFAULT_CENTERX); + maGradientLinear.SetYOffset(DEFAULT_CENTERY); + maGradientLinear.SetAngle(DEFAULT_ANGLE); + maGradientLinear.SetStartColor(Color(DEFAULT_STARTVALUE)); + maGradientLinear.SetEndColor(Color(DEFAULT_ENDVALUE)); + maGradientLinear.SetBorder(DEFAULT_BORDER); + maGradientLinear.SetGradientStyle(XGRAD_LINEAR); + + maGradientAxial = maGradientLinear; + maGradientAxial.SetGradientStyle(XGRAD_AXIAL); + + maGradientRadial = maGradientLinear; + maGradientRadial.SetGradientStyle(XGRAD_RADIAL); + + maGradientElliptical = maGradientLinear; + maGradientElliptical.SetGradientStyle(XGRAD_ELLIPTICAL); + + maGradientSquare = maGradientLinear; + maGradientSquare.SetGradientStyle(XGRAD_SQUARE); + + maGradientRect = maGradientLinear; + maGradientRect.SetGradientStyle(XGRAD_RECT); + + Size aLogicalFillSize(MBOX_WIDTH,LISTBOX_HEIGHT); + Size aLogicalAttrSize(MBOX_WIDTH + 1,LISTBOX_HEIGHT); + + Point aPoint(SECTIONPAGE_MARGIN_HORIZONTAL,SECTIONPAGE_MARGIN_VERTICAL_TOP + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL); + Point aPoint_Picker(SECTIONPAGE_MARGIN_HORIZONTAL + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL,SECTIONPAGE_MARGIN_VERTICAL_TOP + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL); + + Size aTypeSize(LogicToPixel(aLogicalFillSize, MAP_APPFONT)); + Size aAttrSize(LogicToPixel(aLogicalAttrSize, MAP_APPFONT)); + + Point aTypePoint(LogicToPixel(aPoint, MAP_APPFONT)); + Point aAttrPoint(LogicToPixel(aPoint_Picker, MAP_APPFONT)); + + mpLbFillType->SetPosSizePixel(aTypePoint,aTypeSize); + mpLbFillAttr->SetPosSizePixel(aAttrPoint,aAttrSize); + + mpLbFillType->SetHelpId(HID_PPROPERTYPANEL_AREA_LB_FILL_TYPES); + mpLbFillAttr->SetHelpId(HID_PPROPERTYPANEL_AREA_LB_FILL_ATTR); + + mpLbFillType->SetQuickHelpText(msHelpFillType); + mpLbFillAttr->SetQuickHelpText(msHelpFillAttr); + + mpLbFillType->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Fill"))); //wj acc + mpLbFillAttr->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Fill"))); //wj acc + + Link aLink = LINK( this, AreaPropertyPanel, SelectFillTypeHdl ); + mpLbFillType->SetSelectHdl( aLink ); + + aLink = LINK( this, AreaPropertyPanel, SelectFillAttrHdl ); + mpLbFillAttr->SetSelectHdl( aLink ); + + //add for new color picker + mpLbFillAttr->Hide(); + mpToolBoxColor->SetItemImage(TBI_COLOR, GetDisplayBackground().GetColor().IsDark()? maImgColorH : maImgColor); + Size aTbxSize( mpToolBoxColor->CalcWindowSizePixel() ); + mpToolBoxColor->SetOutputSizePixel( aTbxSize ); + mpToolBoxColor->SetItemBits( TBI_COLOR, mpToolBoxColor->GetItemBits( TBI_COLOR ) | TIB_DROPDOWNONLY ); + mpToolBoxColor->SetBackground(Wallpaper()); + mpToolBoxColor->SetPaintTransparent(true); + mpToolBoxColor->SetQuickHelpText(TBI_COLOR, String(SVX_RES(STR_HELP_COLOR))); //wj acc + //mpToolBoxColor->SetItemText(TBI_COLOR, msHelpFillAttr); + + long aHeightLBStyle = mpLbFillType->GetSizePixel().getHeight(); + long aLBPosY = mpLbFillType->GetPosPixel().getY(); + long aHeightTBAttr = mpToolBoxColor->GetSizePixel().getHeight(); + Point aPointTBAttr = mpToolBoxColor->GetPosPixel(); + aPointTBAttr.setY( aLBPosY + aHeightLBStyle / 2 - aHeightTBAttr / 2); + mpToolBoxColor->SetPosPixel(aPointTBAttr); + + aLink = LINK(this, AreaPropertyPanel, ToolBoxColorDropHdl); + mpToolBoxColor->SetDropdownClickHdl ( aLink ); + mpToolBoxColor->SetSelectHdl ( aLink ); + + //add end + mpLBTransType->SetSelectHdl(LINK(this, AreaPropertyPanel, ChangeTrgrTypeHdl_Impl)); + mpLBTransType->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); //wj acc + + mpMTRTransparent->SetValue( 50 ); + mpMTRTransparent->SetModifyHdl(LINK(this, AreaPropertyPanel, ModifyTransparentHdl_Impl)); + mpMTRTransparent->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); //wj acc + + mpBTNGradient->SetItemBits( TBI_BTX_GRADIENT, mpBTNGradient->GetItemBits( TBI_BTX_GRADIENT ) | TIB_DROPDOWNONLY ); + aLink = LINK( this, AreaPropertyPanel, ClickTrGrHdl_Impl ); + mpBTNGradient->SetDropdownClickHdl( aLink ); + mpBTNGradient->SetSelectHdl( aLink ); + aTbxSize = mpBTNGradient->CalcWindowSizePixel(); + mpBTNGradient->SetOutputSizePixel( aTbxSize ); + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,maImgLinear); + mpBTNGradient->SetQuickHelpText(TBI_BTX_GRADIENT, String(SVX_RES(STR_HELP_GRADIENT))); //wj acc + mpBTNGradient->Hide(); + + long aHeightLBTrans = mpLBTransType->GetSizePixel().getHeight(); + Point aPointLB = mpLBTransType->GetPosPixel(); + long aPosY = aPointLB.getY(); + + Point aPointMetric = mpMTRTransparent->GetPosPixel(); + Point aPointTB = mpMTRTransparent->GetPosPixel(); + long aHeightMetric = mpMTRTransparent->GetSizePixel().getHeight(); + long aHeightTool = mpBTNGradient->GetSizePixel().getHeight(); + aPointMetric.setY(aPosY+aHeightLBTrans/2-aHeightMetric/2); + aPointTB.setY(aPosY+aHeightLBTrans/2-aHeightTool/2); + aPointTB.setX(aPointTB.getX()+3); + mpMTRTransparent->SetPosPixel(aPointMetric); + mpBTNGradient->SetPosPixel(aPointTB); + + mpLbFillType->SetAccessibleRelationLabeledBy(mpColorTextFT.get()); + mpLbFillAttr->SetAccessibleRelationLabeledBy(mpLbFillAttr.get()); + mpToolBoxColor->SetAccessibleRelationLabeledBy(mpToolBoxColor.get()); + mpLBTransType->SetAccessibleRelationLabeledBy(mpTrspTextFT.get()); + mpMTRTransparent->SetAccessibleRelationLabeledBy(mpMTRTransparent.get()); + mpBTNGradient->SetAccessibleRelationLabeledBy(mpBTNGradient.get()); + + SetupIcons(); +} + + + +IMPL_LINK( AreaPropertyPanel, SelectFillTypeHdl, ListBox *, pToolBox ) +{ + XFillStyle eXFS = (XFillStyle)mpLbFillType->GetSelectEntryPos(); + + if( (XFillStyle) meLastXFS != eXFS ) + { + mpLbFillAttr->Clear(); + SfxObjectShell* pSh = SfxObjectShell::Current(); + XFillStyleItem aXFillStyleItem( eXFS ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_STYLE, SFX_CALLMODE_RECORD, &aXFillStyleItem, 0L); + + switch( eXFS ) + { + case XFILL_NONE: + { + mpLbFillAttr->Show(); + mpToolBoxColor->Hide(); + mbTBShow = false; + mpLbFillType->Selected(); + mpLbFillAttr->Disable(); + } + break; + + case XFILL_SOLID: + { + mpLbFillAttr->Hide(); + mpToolBoxColor->Show(); + mbTBShow = true; + String aTmpStr; + Color aColor = maLastColor; + XFillColorItem aXFillColorItem( aTmpStr, aColor ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, 0L); + } + break; + + case XFILL_GRADIENT: + { + mpLbFillAttr->Show(); + mpToolBoxColor->Hide(); + mbTBShow = false; + if ( pSh && pSh->GetItem( SID_GRADIENT_LIST ) ) + { + if(mpLbFillAttr->GetEntryCount() == 0) + { + SvxGradientListItem aItem( *(const SvxGradientListItem*)( + pSh->GetItem( SID_GRADIENT_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Clear(); + mpLbFillAttr->Fill( aItem.GetGradientList() ); + } + + mpLbFillAttr->SetDropDownLineCount(std::min(sal_uInt16(20), mpLbFillAttr->GetEntryCount())); + + if ( mnLastPosGradient != LISTBOX_ENTRY_NOTFOUND) + { + SvxGradientListItem aItem( *(const SvxGradientListItem*)( pSh->GetItem( SID_GRADIENT_LIST ) ) ); + if ( mnLastPosGradient < aItem.GetGradientList()->Count() ) + { + XGradient aGradient = aItem.GetGradientList()->GetGradient( mnLastPosGradient )->GetGradient(); + XFillGradientItem aXFillGradientItem( mpLbFillAttr->GetEntry(mnLastPosGradient), aGradient ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_GRADIENT, SFX_CALLMODE_RECORD, &aXFillGradientItem, 0L); + mpLbFillAttr->SelectEntryPos(mnLastPosGradient); //add + } + } + } + else + mpLbFillAttr->Disable(); + } + break; + + case XFILL_HATCH: + { + mpLbFillAttr->Show(); + mpToolBoxColor->Hide(); + mbTBShow = false; + if ( pSh && pSh->GetItem( SID_HATCH_LIST ) ) + { + if(mpLbFillAttr->GetEntryCount() == 0) + { + SvxHatchListItem aItem( *(const SvxHatchListItem*)( + pSh->GetItem( SID_HATCH_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Clear(); + mpLbFillAttr->Fill( aItem.GetHatchList() ); + } + + mpLbFillAttr->SetDropDownLineCount(std::min(sal_uInt16(20), mpLbFillAttr->GetEntryCount())); + + if ( mnLastPosHatch != LISTBOX_ENTRY_NOTFOUND ) + { + SvxHatchListItem aItem( *(const SvxHatchListItem*)( pSh->GetItem( SID_HATCH_LIST ) ) ); + if ( mnLastPosHatch < aItem.GetHatchList()->Count() ) + { + XHatch aHatch = aItem.GetHatchList()->GetHatch( mnLastPosHatch )->GetHatch(); + XFillHatchItem aXFillHatchItem( mpLbFillAttr->GetSelectEntry(), aHatch ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_HATCH, SFX_CALLMODE_RECORD, &aXFillHatchItem, 0L); + mpLbFillAttr->SelectEntryPos(mnLastPosHatch); //add + } + } + } + else + mpLbFillAttr->Disable(); + } + break; + + case XFILL_BITMAP: + { + mpLbFillAttr->Show(); + mpToolBoxColor->Hide(); + mbTBShow = false; + if ( pSh && pSh->GetItem( SID_BITMAP_LIST ) ) + { + if(mpLbFillAttr->GetEntryCount() == 0) + { + SvxBitmapListItem aItem( *(const SvxBitmapListItem*)( + pSh->GetItem( SID_BITMAP_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Clear(); + mpLbFillAttr->Fill( aItem.GetBitmapList() ); + } + + mpLbFillAttr->SetDropDownLineCount(std::min(sal_uInt16(20), mpLbFillAttr->GetEntryCount())); + + if ( mnLastPosBitmap != LISTBOX_ENTRY_NOTFOUND ) + { + SvxBitmapListItem aItem( *(const SvxBitmapListItem*)( pSh->GetItem( SID_BITMAP_LIST ) ) ); + if ( mnLastPosBitmap < aItem.GetBitmapList()->Count() ) + { + const XBitmapEntry* pXBitmapEntry = aItem.GetBitmapList()->GetBitmap(mnLastPosBitmap); + XFillBitmapItem aXFillBitmapItem( mpLbFillAttr->GetSelectEntry(), pXBitmapEntry->GetGraphicObject() ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_BITMAP, SFX_CALLMODE_RECORD, &aXFillBitmapItem, 0L); + mpLbFillAttr->SelectEntryPos(mnLastPosBitmap); //add + } + } + } + else + mpLbFillAttr->Disable(); + } + break; + } + meLastXFS = (sal_uInt16)eXFS; + if( eXFS != XFILL_NONE ) + { + if ( pToolBox ) + mpLbFillType->Selected(); + } + } + return 0; +} + + + +IMPL_LINK( AreaPropertyPanel, SelectFillAttrHdl, ListBox*, pToolBox ) +{ + XFillStyle eXFS = (XFillStyle)mpLbFillType->GetSelectEntryPos(); + XFillStyleItem aXFillStyleItem( eXFS ); + SfxObjectShell* pSh = SfxObjectShell::Current(); + + if(pToolBox) + { + if( (XFillStyle) meLastXFS != eXFS ) + { + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_STYLE, SFX_CALLMODE_RECORD, &aXFillStyleItem, 0L); //Added 20090909 + } + + switch( eXFS ) + { + case XFILL_SOLID: + //{ + // //String aTmpStr = mpLbFillAttr->GetSelectEntry(); + // //Color aColor = mpLbFillAttr->GetSelectEntryColor(); + // //if(aColor.GetColor() == 0 && aTmpStr.Equals(String::CreateFromAscii(""))) + // String aTmpStr; + // Color aColor = maLastColor; + // XFillColorItem aXFillColorItem( aTmpStr, aColor ); + // GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, 0L); + // maLastColor = aColor; + //} + break; + + case XFILL_GRADIENT: + { + sal_uInt16 nPos = mpLbFillAttr->GetSelectEntryPos(); + if( nPos == LISTBOX_ENTRY_NOTFOUND ) + nPos = mnLastPosGradient; + + if ( nPos != LISTBOX_ENTRY_NOTFOUND && pSh && pSh->GetItem( SID_GRADIENT_LIST ) ) + { + SvxGradientListItem aItem( *(const SvxGradientListItem*)( pSh->GetItem( SID_GRADIENT_LIST ) ) ); + if ( nPos < aItem.GetGradientList()->Count() ) + { + XGradient aGradient = aItem.GetGradientList()->GetGradient( nPos )->GetGradient(); + XFillGradientItem aXFillGradientItem( mpLbFillAttr->GetSelectEntry(), aGradient ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_GRADIENT, SFX_CALLMODE_RECORD, &aXFillGradientItem, 0L); + } + } + if(nPos != LISTBOX_ENTRY_NOTFOUND) + mnLastPosGradient = nPos; + } + break; + + case XFILL_HATCH: + { + sal_uInt16 nPos = mpLbFillAttr->GetSelectEntryPos(); + if( nPos == LISTBOX_ENTRY_NOTFOUND ) + nPos = mnLastPosHatch; + if ( nPos != LISTBOX_ENTRY_NOTFOUND && pSh && pSh->GetItem( SID_HATCH_LIST ) ) + { + SvxHatchListItem aItem( *(const SvxHatchListItem*)( pSh->GetItem( SID_HATCH_LIST ) ) ); + if ( nPos < aItem.GetHatchList()->Count() ) + { + XHatch aHatch = aItem.GetHatchList()->GetHatch( nPos )->GetHatch(); + XFillHatchItem aXFillHatchItem( mpLbFillAttr->GetSelectEntry(), aHatch ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_HATCH, SFX_CALLMODE_RECORD, &aXFillHatchItem, 0L); + } + } + if(nPos != LISTBOX_ENTRY_NOTFOUND) + mnLastPosHatch = nPos; + } + break; + + case XFILL_BITMAP: + { + sal_uInt16 nPos = mpLbFillAttr->GetSelectEntryPos(); + if( nPos == LISTBOX_ENTRY_NOTFOUND ) + nPos = mnLastPosBitmap; + if ( nPos != LISTBOX_ENTRY_NOTFOUND && pSh && pSh->GetItem( SID_BITMAP_LIST ) ) + { + SvxBitmapListItem aItem( *(const SvxBitmapListItem*)( pSh->GetItem( SID_BITMAP_LIST ) ) ); + if ( nPos < aItem.GetBitmapList()->Count() ) + { + const XBitmapEntry* pXBitmapEntry = aItem.GetBitmapList()->GetBitmap(nPos); + XFillBitmapItem aXFillBitmapItem( mpLbFillAttr->GetSelectEntry(), pXBitmapEntry->GetGraphicObject() ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_BITMAP, SFX_CALLMODE_RECORD, &aXFillBitmapItem, 0L); + } + } + if(nPos != LISTBOX_ENTRY_NOTFOUND) + mnLastPosBitmap = nPos; + } + break; + + default: + break; + } + } + return 0; +} + + +//add for color picker + +IMPL_LINK(AreaPropertyPanel, ToolBoxColorDropHdl, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + + if(nId == TBI_COLOR) + { + maColorPopup.Show(*pToolBox); + if (mpColorItem) + maColorPopup.SetCurrentColor(mpColorItem->GetColorValue(), mbColorAvail); + else + maColorPopup.SetCurrentColor(COL_WHITE, false); + } + + return 0; +} + + + +void AreaPropertyPanel::SetColor ( + const String& rsColorName, + const Color aColor) +{ + XFillColorItem aXFillColorItem (rsColorName, aColor); + mpBindings->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, 0L); + maLastColor = aColor; +} + + + + +PopupControl* AreaPropertyPanel::CreateTransparencyGradientControl (PopupContainer* pParent) +{ + return new AreaTransparencyGradientControl(pParent, *this); +} + + + + +PopupControl* AreaPropertyPanel::CreateColorPopupControl (PopupContainer* pParent) +{ + return new ColorControl( + pParent, + mpBindings, + SVX_RES(RID_POPUPPANEL_AERAPAGE_COLOR), + SVX_RES(VS_COLOR), + ::boost::bind(&AreaPropertyPanel::GetLastColor, this), + ::boost::bind(&AreaPropertyPanel::SetColor, this, _1,_2), + pParent, + 0); +} + + + + +void AreaPropertyPanel::SetupIcons(void) +{ + if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) + { + // todo + } + else + { + // todo + } +} + + + +AreaPropertyPanel* AreaPropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to AreaPropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to AreaPropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to AreaPropertyPanel::Create"), NULL, 2); + + return new AreaPropertyPanel( + pParent, + rxFrame, + pBindings); +} + + + +void AreaPropertyPanel::DataChanged( + const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetupIcons(); +} + + + +void AreaPropertyPanel::ImpUpdateTransparencies() +{ + if(mpTransparanceItem.get() || mpFloatTransparenceItem.get()) + { + bool bZeroValue(false); + + if(mpTransparanceItem.get()) + { + const sal_uInt16 nValue(mpTransparanceItem->GetValue()); + + if(!nValue) + { + bZeroValue = true; + } + else if(nValue <= 100) + { + mpLBTransType->Enable(); + mpLBTransType->SelectEntryPos(1); + mpBTNGradient->Hide(); + mpMTRTransparent->Show(); + mpMTRTransparent->Enable(); + mpMTRTransparent->SetValue(nValue); + } + + if(!bZeroValue) + { + maTrGrPopup.Hide(); + } + } + + if(bZeroValue && mpFloatTransparenceItem.get()) + { + if(mpFloatTransparenceItem->IsEnabled()) + { + const XGradient& rGradient = mpFloatTransparenceItem->GetGradientValue(); + const bool bHighContrast(GetSettings().GetStyleSettings().GetHighContrastMode()); + sal_uInt16 nEntryPos(0); + Image* pImage = 0; + + mpLBTransType->Enable(); + mpMTRTransparent->Hide(); + mpBTNGradient->Enable(); + mpBTNGradient->Show(); + + switch(rGradient.GetGradientStyle()) + { + case XGRAD_LINEAR: + { + nEntryPos = 2; + pImage = bHighContrast ? &maImgLinearH : &maImgLinear; + break; + } + case XGRAD_AXIAL: + { + nEntryPos = 3; + pImage = bHighContrast ? &maImgAxialH : &maImgAxial; + break; + } + case XGRAD_RADIAL: + { + nEntryPos = 4; + pImage = bHighContrast ? &maImgRadialH : &maImgRadial; + break; + } + case XGRAD_ELLIPTICAL: + { + nEntryPos = 5; + pImage = bHighContrast ? &maImgElliH : &maImgElli; + break; + } + case XGRAD_SQUARE: + { + nEntryPos = 6; + pImage = bHighContrast ? &maImgQuadH : &maImgQuad; + break; + } + case XGRAD_RECT: + { + nEntryPos = 7; + pImage = bHighContrast ? &maImgSquareH : &maImgSquare; + break; + } + } + + mpLBTransType->SelectEntryPos(nEntryPos); + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT, *pImage); + bZeroValue = false; + } + else + { + bZeroValue = true; + } + } + + if(bZeroValue) + { + mpLBTransType->Enable(); + mpLBTransType->SelectEntryPos(0); + mpBTNGradient->Hide(); + mpMTRTransparent->Enable(); + mpMTRTransparent->Show(); + mpMTRTransparent->SetValue(0); + } + } + else + { + // no transparency at all + mpLBTransType->SetNoSelection(); + mpMTRTransparent->Disable(); + mpMTRTransparent->Show(); + mpBTNGradient->Disable(); + mpBTNGradient->Hide(); + } +} + + + +void AreaPropertyPanel::NotifyItemUpdate( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + XFillStyle eXFS; + SfxObjectShell* pSh = SfxObjectShell::Current(); + bool bFillTransparenceChanged(false); + + if(SID_ATTR_FILL_TRANSPARENCE == nSID) + { + bFillTransparenceChanged = true; + + if(eState >= SFX_ITEM_AVAILABLE) + { + const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState); + + if(pItem && (!mpTransparanceItem || *pItem != *mpTransparanceItem)) + { + mpTransparanceItem.reset((SfxUInt16Item*)pItem->Clone()); + } + else + { + mpTransparanceItem.reset(); + } + } + else + { + mpTransparanceItem.reset(); + } + } + else if(SID_ATTR_FILL_FLOATTRANSPARENCE == nSID) + { + bFillTransparenceChanged = true; + + if(eState >= SFX_ITEM_AVAILABLE) + { + const XFillFloatTransparenceItem* pItem = dynamic_cast< const XFillFloatTransparenceItem* >(pState); + + if(pItem && (!mpFloatTransparenceItem || *pItem != *mpFloatTransparenceItem)) + { + mpFloatTransparenceItem.reset((XFillFloatTransparenceItem*)pItem->Clone()); + } + else + { + mpFloatTransparenceItem.reset(); + } + } + else + { + mpFloatTransparenceItem.reset(); + } + } + + if(bFillTransparenceChanged) + { + // update transparency settings dependent of mpTransparanceItem and mpFloatTransparenceItem + ImpUpdateTransparencies(); + } + + if (nSID == SID_ATTR_FILL_STYLE ) + { + if( eState == SFX_ITEM_DISABLED ) + { + mpLbFillType->Disable(); + mpLbFillType->SetNoSelection(); + mpLbFillAttr->Show(); + mpLbFillAttr->Disable(); + mpLbFillAttr->SetNoSelection(); + mpToolBoxColor->Hide(); + mbTBShow = false; + meLastXFS = -1; + mpStyleItem.reset(); + } + else if( SFX_ITEM_AVAILABLE == eState ) + { + mpStyleItem.reset(pState ? (XFillStyleItem*)pState->Clone() : 0); + mpLbFillType->Enable(); + + eXFS = (XFillStyle)mpStyleItem->GetValue(); + meLastXFS = eXFS; + mpLbFillType->SelectEntryPos( + sal::static_int_cast< sal_uInt16 >( eXFS ) ); + //Added for select invisable + if(eXFS == XFILL_NONE) + { + mpLbFillAttr->SetNoSelection(); + mpLbFillAttr->Disable(); + } + //else + // mpLbFillAttr->Enable(); + Update(); + //SelectFillTypeHdl( NULL ); + } + else + { + mpLbFillType->SetNoSelection(); + mpLbFillAttr->Show(); + mpLbFillAttr->Disable(); + mpLbFillAttr->SetNoSelection(); + mpToolBoxColor->Hide(); + mbTBShow = false; + meLastXFS = -1; //Added + mpStyleItem.reset(); + } + } + else if(nSID == SID_ATTR_FILL_COLOR) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpColorItem.reset(pState ? (XFillColorItem*)pState->Clone() : 0); + } + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue() == XFILL_SOLID) + { + mpLbFillAttr->Hide(); + mpToolBoxColor->Show(); + mbTBShow = true; + if( SFX_ITEM_AVAILABLE == eState) + { + mpToolBoxColor->Enable(); + mbColorAvail = true; // + // maLastColor = mpColorItem->GetColorValue(); + Update(); + } + else if(SFX_ITEM_DISABLED == eState ) + { + mpToolBoxColor->Disable(); + mbColorAvail = false; // + mpColorUpdater->Update(COL_WHITE); + } + else + { + mbColorAvail = false; // + mpColorUpdater->Update(COL_WHITE); + } + } + } + else if(nSID == SID_ATTR_FILL_GRADIENT) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpFillGradientItem.reset(pState ? (XFillGradientItem*)pState->Clone() : 0); + } + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue() == XFILL_GRADIENT ) + { + mpLbFillAttr->Show(); + mpToolBoxColor->Hide(); + mbTBShow = false; + if( SFX_ITEM_AVAILABLE == eState) + { + mpLbFillAttr->Enable(); + Update(); + } + + else if(SFX_ITEM_DISABLED == eState ) + { + mpLbFillAttr->Disable(); + mpLbFillAttr->SetNoSelection(); + } + else + mpLbFillAttr->SetNoSelection(); + } + } + else if(nSID == SID_ATTR_FILL_HATCH) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpHatchItem.reset(pState ? (XFillHatchItem*)pState->Clone() : 0); + } + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue() == XFILL_HATCH ) + { + mpLbFillAttr->Show(); + mpToolBoxColor->Hide(); + mbTBShow = false; + if( SFX_ITEM_AVAILABLE == eState) + { + mpLbFillAttr->Enable(); + Update(); + } + else if(SFX_ITEM_DISABLED == eState ) + { + mpLbFillAttr->Disable(); + mpLbFillAttr->SetNoSelection(); + } + else + mpLbFillAttr->SetNoSelection(); + } + } + else if(nSID == SID_ATTR_FILL_BITMAP) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpBitmapItem.reset(pState ? (XFillBitmapItem*)pState->Clone() : 0); + } + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue() == XFILL_BITMAP ) + { + mpLbFillAttr->Show(); + mpToolBoxColor->Hide(); + mbTBShow = false; + if( SFX_ITEM_AVAILABLE == eState) + { + mpLbFillAttr->Enable(); + Update(); + } + else if(SFX_ITEM_DISABLED == eState ) + { + mpLbFillAttr->Disable(); + mpLbFillAttr->SetNoSelection(); + } + else + mpLbFillAttr->SetNoSelection(); + } + } + else if(nSID == SID_COLOR_TABLE) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpColorTableItem.reset(pState ? (SvxColorTableItem*)pState->Clone() : 0); + + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue()== XFILL_SOLID) + { + if ( mpColorItem ) + { + String aString( mpColorItem->GetName() ); + Color aColor = mpColorItem->GetColorValue(); + mpLbFillAttr->Clear(); + SvxColorTableItem aItem( *(const SvxColorTableItem*)( + pSh->GetItem( SID_COLOR_TABLE ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Fill( aItem.GetColorTable() ); + mpLbFillAttr->SelectEntry( aColor ); + } + else + mpLbFillAttr->SetNoSelection(); + } + } + } + else if(nSID == SID_GRADIENT_LIST) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpGradientListItem.reset(pState ? (SvxGradientListItem*)pState->Clone() : 0); + + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue() == XFILL_GRADIENT) + { + if ( mpFillGradientItem ) + { + String aString( mpFillGradientItem->GetName() ); + mpLbFillAttr->Clear(); + SvxGradientListItem aItem( *(const SvxGradientListItem*)( + pSh->GetItem( SID_GRADIENT_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Fill( aItem.GetGradientList() ); + mpLbFillAttr->SelectEntry( aString ); + } + else + mpLbFillAttr->SetNoSelection(); + } + } + } + else if(nSID == SID_HATCH_LIST) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpHatchListItem.reset(pState ? (SvxHatchListItem*)pState->Clone() : 0); + + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue() == XFILL_HATCH ) + { + if ( mpHatchItem) + { + String aString( mpHatchItem->GetName() ); + mpLbFillAttr->Clear(); + SvxHatchListItem aItem( *(const SvxHatchListItem*)( + pSh->GetItem( SID_HATCH_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Fill( aItem.GetHatchList() ); + mpLbFillAttr->SelectEntry( aString ); + } + else + mpLbFillAttr->SetNoSelection(); + } + } + } + else if(nSID == SID_BITMAP_LIST) + { + if( SFX_ITEM_AVAILABLE == eState) + { + mpBitmapListItem.reset(pState ? (SvxBitmapListItem*)pState->Clone() : 0); + + if( mpStyleItem && (XFillStyle)mpStyleItem->GetValue() == XFILL_BITMAP ) + { + if ( mpBitmapItem ) + { + String aString( mpBitmapItem->GetName() ); + mpLbFillAttr->Clear(); + SvxBitmapListItem aItem( *(const SvxBitmapListItem*)( + pSh->GetItem( SID_BITMAP_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Fill( aItem.GetBitmapList() ); + mpLbFillAttr->SelectEntry( aString ); + } + else + mpLbFillAttr->SetNoSelection(); + } + } + } +} + + + +SfxBindings* AreaPropertyPanel::GetBindings() +{ + return mpBindings; +} + + + +void AreaPropertyPanel::Update() +{ + if ( mpStyleItem ) + { + XFillStyle eXFS = (XFillStyle)mpStyleItem->GetValue(); + SfxObjectShell* pSh = SfxObjectShell::Current(); + + switch( eXFS ) + { + case XFILL_NONE: + { + mpLbFillAttr->Show(); //wj for new color picker + mpToolBoxColor->Hide(); //wj for new color picker + mbTBShow = false; + } + break; + + case XFILL_SOLID: + { + if ( mpColorItem ) + { + mpLbFillAttr->Hide(); //wj for new color picker + mpToolBoxColor->Show(); //wj for new color picker + mbTBShow = true; + mpColorUpdater->Update(mpColorItem->GetColorValue()); + } + else + mpColorUpdater->Update(COL_WHITE); + } + break; + + case XFILL_GRADIENT: + { + mpLbFillAttr->Show(); //wj for new color picker + mpToolBoxColor->Hide(); //wj for new color picker + mbTBShow = false; + if ( pSh && pSh->GetItem( SID_GRADIENT_LIST ) ) + { + SvxGradientListItem aItem( *(const SvxGradientListItem*)( + pSh->GetItem( SID_GRADIENT_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Clear(); + mpLbFillAttr->Fill( aItem.GetGradientList() ); + if ( mpFillGradientItem ) + { + String aString( mpFillGradientItem->GetName() ); + mpLbFillAttr->SelectEntry( aString ); + } + else + mpLbFillAttr->SetNoSelection(); + } + else + mpLbFillAttr->SetNoSelection(); + } + break; + + case XFILL_HATCH: + { + mpLbFillAttr->Show(); //wj for new color picker + mpToolBoxColor->Hide(); //wj for new color picker + mbTBShow = false; + if ( pSh && pSh->GetItem( SID_HATCH_LIST ) ) + { + SvxHatchListItem aItem( *(const SvxHatchListItem*)( + pSh->GetItem( SID_HATCH_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Clear(); + mpLbFillAttr->Fill( aItem.GetHatchList() ); + if ( mpHatchItem ) + { + String aString( mpHatchItem->GetName() ); + mpLbFillAttr->SelectEntry( aString ); + } + else + mpLbFillAttr->SetNoSelection(); + } + else + mpLbFillAttr->SetNoSelection(); + } + break; + + case XFILL_BITMAP: + { + mpLbFillAttr->Show(); //wj for new color picker + mpToolBoxColor->Hide(); //wj for new color picker + mbTBShow = false; + //mpLbFillAttr->Fill( mpBitmapListItem->GetBitmapList() ); + if ( pSh && pSh->GetItem( SID_BITMAP_LIST ) ) + { + SvxBitmapListItem aItem( *(const SvxBitmapListItem*)( + pSh->GetItem( SID_BITMAP_LIST ) ) ); + mpLbFillAttr->Enable(); + mpLbFillAttr->Clear(); + mpLbFillAttr->Fill( aItem.GetBitmapList() ); + if ( mpBitmapItem ) + { + String aString( mpBitmapItem->GetName() ); + mpLbFillAttr->SelectEntry( aString ); + } + else + mpLbFillAttr->SetNoSelection(); + } + else + mpLbFillAttr->SetNoSelection(); + } + break; + + default: + DBG_ERROR( "Nicht unterstuetzter Flaechentyp" ); + break; + } + } +} + + + +IMPL_LINK( AreaPropertyPanel, ImplPopupModeEndHdl, FloatingWindow*, EMPTYARG ) +{ + return 0; +} + + + +IMPL_LINK( AreaPropertyPanel, ClickTrGrHdl_Impl, ToolBox*, pToolBox ) +{ + maTrGrPopup.Rearrange(mpFloatTransparenceItem.get()); + + OSL_ASSERT(pToolBox->GetCurItemId() == TBI_BTX_GRADIENT); + + maTrGrPopup.Show(*pToolBox); + + return (0L); +} + + + +IMPL_LINK(AreaPropertyPanel, ChangeTrgrTypeHdl_Impl, void *, EMPTYARG) +{ + sal_uInt16 nSelectType = mpLBTransType->GetSelectEntryPos(); + bool bGradient = false; + sal_uInt16 nTrans = 0; + + if (nSelectType == 0) + { + mpBTNGradient->Hide(); + mpMTRTransparent->Show(); + mpMTRTransparent->Enable(); + mpMTRTransparent->SetValue(0); + } + else if (nSelectType == 1) + { + mpBTNGradient->Hide(); + mpMTRTransparent->Show(); + nTrans = mnLastTransSolid; + mpMTRTransparent->SetValue(nTrans); + mpLBTransType->SelectEntryPos(1);// for multi-selected, choose solid no selection + mpMTRTransparent->Enable(); + } + else + { + mpBTNGradient->Show(); + //for beta1 + switch ( nSelectType ) + { + case 2: + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgLinearH : maImgLinear); // high contrast + break; + case 3: + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgAxialH : maImgAxial); + break; + case 4: + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgRadialH : maImgRadial); + break; + case 5: + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgElliH : maImgElli ); + break; + case 6: + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgQuadH : maImgQuad ); + break; + case 7: + mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSquareH : maImgSquare); + break; + } + //end of new code + mpMTRTransparent->Hide(); + mpBTNGradient->Enable(); + bGradient = true; + } + + XFillTransparenceItem aLinearItem(nTrans); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE, SFX_CALLMODE_RECORD, &aLinearItem, 0L ); + + if (nSelectType > 1) nSelectType = nSelectType-2; + + XGradient aTmpGradient; + + switch(nSelectType) + { + case XGRAD_LINEAR: + aTmpGradient = maGradientLinear; + break; + case XGRAD_AXIAL: + aTmpGradient = maGradientAxial; + break; + case XGRAD_RADIAL: + aTmpGradient = maGradientRadial; + break; + case XGRAD_ELLIPTICAL: + aTmpGradient = maGradientElliptical; + break; + case XGRAD_SQUARE: + aTmpGradient = maGradientSquare; + break; + case XGRAD_RECT: + aTmpGradient = maGradientRect; + break; + } + SfxItemPool* pPool = NULL; + bool bEnable = false; + if (bGradient) bEnable = true; + XFillFloatTransparenceItem aGradientItem(pPool,aTmpGradient, bEnable ); + + GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_FLOATTRANSPARENCE, SFX_CALLMODE_RECORD, &aGradientItem, 0L ); + + return( 0L ); +} + + + +IMPL_LINK(AreaPropertyPanel, ModifyTransparentHdl_Impl, void*, EMPTYARG) +{ + sal_uInt16 nTrans = (sal_uInt16)mpMTRTransparent->GetValue(); + mnLastTransSolid = nTrans; + sal_uInt16 nSelectType = mpLBTransType->GetSelectEntryPos(); + if (nTrans != 0 && nSelectType == 0) + mpLBTransType->SelectEntryPos(1); + XFillTransparenceItem aLinearItem(nTrans); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE, SFX_CALLMODE_RECORD, &aLinearItem, 0L ); + + return 0L; +} + + +Color AreaPropertyPanel::GetLastColor (void) const +{ + return maLastColor; +} + + + + +XGradient AreaPropertyPanel::GetGradient (const XGradientStyle eStyle) const +{ + switch (eStyle) + { + default: + case XGRAD_LINEAR: + return maGradientLinear; + case XGRAD_AXIAL: + return maGradientAxial; + case XGRAD_RADIAL: + return maGradientRadial; + case XGRAD_ELLIPTICAL: + return maGradientElliptical; + case XGRAD_SQUARE: + return maGradientSquare; + case XGRAD_RECT: + return maGradientRect; + } +} + + + + +void AreaPropertyPanel::SetGradient (const XGradient& rGradient) +{ + switch (rGradient.GetGradientStyle()) + { + case XGRAD_LINEAR: + maGradientLinear = rGradient; + break; + case XGRAD_AXIAL: + maGradientAxial = rGradient; + break; + case XGRAD_RADIAL: + maGradientRadial = rGradient; + break; + case XGRAD_ELLIPTICAL: + maGradientElliptical = rGradient; + break; + case XGRAD_SQUARE: + maGradientSquare = rGradient; + break; + case XGRAD_RECT: + maGradientRect = rGradient; + break; + } +} + + + + +sal_Int32 AreaPropertyPanel::GetSelectedTransparencyTypeIndex (void) const +{ + return mpLBTransType->GetSelectEntryPos(); +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/area/AreaPropertyPanel.hrc b/svx/source/sidebar/area/AreaPropertyPanel.hrc new file mode 100644 index 000000000000..4e1470b960b4 --- /dev/null +++ b/svx/source/sidebar/area/AreaPropertyPanel.hrc @@ -0,0 +1,96 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +// RID_SIDEBAR_AREA_PANEL-------------------------------------------------------------- +#define FT_COLOR_LIST 1 +#define TB_COLOR 2 +#define TBI_COLOR 3 +#define IMG_COLOR 5 + +#define VS_COLOR 1 + +#define TBI_LEFT 1 +#define TBI_RIGHT 1 +#define TBI_BTX_GRADIENT 51 +#define FL_TRSP_TEXT 4 + +#define LB_TRGR_TYPES 6 +#define MTR_TRANSPARENT 7 +#define BTN_GRADIENT 8 + +#define FT_TRGR_CENTER_X 9 +#define MTR_TRGR_CENTER_X 10 +#define FT_TRGR_CENTER_Y 11 +#define MTR_TRGR_CENTER_Y 12 +#define FT_TRGR_ANGLE 13 +#define MTR_TRGR_ANGLE 14 +#define FT_TRGR_START_VALUE 15 +#define MTR_TRGR_START_VALUE 16 +#define FT_TRGR_END_VALUE 17 +#define MTR_TRGR_END_VALUE 18 +#define FT_TRGR_BORDER 19 +#define MTR_TRGR_BORDER 20 +#define STR_HELP_LEFT 24 +#define STR_HELP_RIGHT 25 + +#define BTN_LEFT_SECOND 22 +#define BTN_RIGHT_FIRST 23 + +#define IMG_AXIAL 24 +#define IMG_ELLI 25 +#define IMG_QUAD 26 +#define IMG_RADIAL 27 +#define IMG_SQUARE 28 +#define IMG_LINEAR 29 +#define IMG_ROT_LEFT 30 +#define IMG_ROT_RIGHT 31 +#define STR_HELP_TYPE 32 +#define STR_HELP_ATTR 33 +#define STR_HELP_COLOR 41 +#define STR_HELP_GRADIENT 42 + +//high contrast +#define IMG_AXIAL_H 34 +#define IMG_ELLI_H 35 +#define IMG_QUAD_H 36 +#define IMG_RADIAL_H 37 +#define IMG_SQUARE_H 38 +#define IMG_LINEAR_H 39 +#define IMG_COLOR_H 40 + + +#define FIXED_TEXT_HEIGHT 9 +#define FIXED_TEXT_WIDTH 40 +#define MBOX_WIDTH 50 +#define CONTROL_HEIGHT 12 +#define CONTROL_WIDTH 45 +#define LISTBOX_HEIGHT 80 +#define ROTATE_BUTTON_WIDTH 13 +#define ROTATE_BUTTON_SPACING 15 +#define POP_WIDTH 2*POPUPPANEL_MARGIN_HORIZONTAL+2*CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL +#define POP_HEIGHT 2*POPUPPANEL_MARGIN_VERTICAL + 4*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + MBOX_HEIGHT ) + 3*CONTROL_SPACING_VERTICAL +#define POP_HEIGHT2 2*POPUPPANEL_MARGIN_VERTICAL + 3*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + MBOX_HEIGHT ) + 2*CONTROL_SPACING_VERTICAL +#define LEFT_RIGHT_X1 POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL + 1 +#define LEFT_RIGHT_Y1 POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL - 2 +#define LEFT_RIGHT_X2 POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL + ROTATE_BUTTON_SPACING +#define LEFT_RIGHT_Y2 POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL - 2 + +// eof diff --git a/svx/source/sidebar/area/AreaPropertyPanel.hxx b/svx/source/sidebar/area/AreaPropertyPanel.hxx new file mode 100644 index 000000000000..870705d5cadd --- /dev/null +++ b/svx/source/sidebar/area/AreaPropertyPanel.hxx @@ -0,0 +1,211 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_PROPERTYPANEL_AREAPAGE_HXX +#define SVX_PROPERTYPANEL_AREAPAGE_HXX + +#include <svx/sidebar/ColorPopup.hxx> +#include "AreaTransparencyGradientPopup.hxx" +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <svx/xgrad.hxx> +#include <svx/itemwin.hxx> +#include <svx/xfillit0.hxx> +#include <svx/xflclit.hxx> +#include <svx/xflgrit.hxx> +#include <svx/xflhtit.hxx> +#include <svx/xbtmpit.hxx> +#include <svx/drawitem.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/field.hxx> +#include <vcl/fixed.hxx> +#include <svl/intitem.hxx> +#include <svx/tbxcolorupdate.hxx> +#include <com/sun/star/ui/XUIElement.hpp> +#include <boost/scoped_ptr.hpp> + + +class XFillFloatTransparenceItem; +namespace svx { class ToolboxButtonColorUpdater; } + + +namespace svx { namespace sidebar { + +class PopupContainer; +class AreaTransparencyGradientControl; + +class AreaPropertyPanel +: public Control, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: + static AreaPropertyPanel* Create( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + + virtual void DataChanged( + const DataChangedEvent& rEvent); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + SfxBindings* GetBindings(); + + const static sal_Int32 DEFAULT_CENTERX; + const static sal_Int32 DEFAULT_CENTERY; + const static sal_Int32 DEFAULT_ANGLE; + const static sal_Int32 DEFAULT_STARTVALUE; + const static sal_Int32 DEFAULT_ENDVALUE; + const static sal_Int32 DEFAULT_BORDER; + + XGradient GetGradient (const XGradientStyle eStyle) const; + void SetGradient (const XGradient& rGradient); + sal_Int32 GetSelectedTransparencyTypeIndex (void) const; + +private: + sal_uInt16 meLastXFS; + Color maLastColor; + + sal_uInt16 mnLastPosGradient; + sal_uInt16 mnLastPosHatch; + sal_uInt16 mnLastPosBitmap; + sal_uInt16 mnLastTransSolid; + + XGradient maGradientLinear; + XGradient maGradientAxial; + XGradient maGradientRadial; + XGradient maGradientElliptical; + XGradient maGradientSquare; + XGradient maGradientRect; + + //ui controls + ::boost::scoped_ptr< FixedText > mpColorTextFT; + ::boost::scoped_ptr< SvxFillTypeBox > mpLbFillType; + ::boost::scoped_ptr< SvxFillAttrBox > mpLbFillAttr; + ::boost::scoped_ptr< Window > mpToolBoxColorBackground; + ::boost::scoped_ptr< ToolBox > mpToolBoxColor; // for new color picker + ::boost::scoped_ptr< FixedText > mpTrspTextFT; + ::boost::scoped_ptr< ListBox > mpLBTransType; + ::boost::scoped_ptr< MetricField > mpMTRTransparent; + ::boost::scoped_ptr< Window > mpBTNGradientBackground; + ::boost::scoped_ptr< ToolBox > mpBTNGradient; + + ::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > mpColorUpdater; + + ::boost::scoped_ptr< XFillStyleItem > mpStyleItem; + ::boost::scoped_ptr< XFillColorItem > mpColorItem; + ::boost::scoped_ptr< XFillGradientItem > mpFillGradientItem; + ::boost::scoped_ptr< XFillHatchItem > mpHatchItem; + ::boost::scoped_ptr< XFillBitmapItem > mpBitmapItem; + ::boost::scoped_ptr< SvxColorTableItem > mpColorTableItem; + ::boost::scoped_ptr< SvxGradientListItem > mpGradientListItem; + ::boost::scoped_ptr< SvxHatchListItem > mpHatchListItem; + ::boost::scoped_ptr< SvxBitmapListItem > mpBitmapListItem; + + ::sfx2::sidebar::ControllerItem maStyleControl; + ::sfx2::sidebar::ControllerItem maColorControl; + ::sfx2::sidebar::ControllerItem maGradientControl; + ::sfx2::sidebar::ControllerItem maHatchControl; + ::sfx2::sidebar::ControllerItem maBitmapControl; + ::sfx2::sidebar::ControllerItem maColorTableControl; + ::sfx2::sidebar::ControllerItem maGradientListControl; + ::sfx2::sidebar::ControllerItem maHatchListControl; + ::sfx2::sidebar::ControllerItem maBitmapListControl; + ::sfx2::sidebar::ControllerItem maFillTransparenceController; + ::sfx2::sidebar::ControllerItem maFillFloatTransparenceController; + + Image maImgAxial; + Image maImgElli; + Image maImgQuad; + Image maImgRadial; + Image maImgSquare; + Image maImgLinear; + Image maImgColor; + + //for high contract + Image maImgAxialH; + Image maImgElliH; + Image maImgQuadH; + Image maImgRadialH; + Image maImgSquareH; + Image maImgLinearH; + Image maImgColorH; + + String msHelpFillType; + String msHelpFillAttr; + + AreaTransparencyGradientPopup maTrGrPopup; + ColorPopup maColorPopup; + + ::boost::scoped_ptr< XFillFloatTransparenceItem > mpFloatTransparenceItem; + ::boost::scoped_ptr< SfxUInt16Item > mpTransparanceItem; + + cssu::Reference<css::frame::XFrame> mxFrame; + SfxBindings* mpBindings; + + /// bitfield + bool mbTBShow : 1; + bool mbColorAvail : 1; + + DECL_LINK(SelectFillTypeHdl, ListBox* ); + DECL_LINK(SelectFillAttrHdl, ListBox* ); + DECL_LINK(ChangeTrgrTypeHdl_Impl, void*); + DECL_LINK(ModifyTransparentHdl_Impl, void*); + DECL_LINK( ImplPopupModeEndHdl, FloatingWindow* ); + + // for transparency gradient + PopupControl* CreateTransparencyGradientControl (PopupContainer* pParent); + DECL_LINK( ClickTrGrHdl_Impl, ToolBox* ); + + // for color picker + PopupControl* CreateColorPopupControl (PopupContainer* pParent); + DECL_LINK(ToolBoxColorDropHdl, ToolBox *); //for new color picker + + // constructor/destuctor + AreaPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + virtual ~AreaPropertyPanel(void); + + void SetupIcons(void); + void Initialize(); + void Update(); + void ImpUpdateTransparencies(); + + Color GetLastColor (void) const; + void SetColor ( + const String& rsColorName, + const Color aColor); +}; + + +} } // end of namespace ::svx::sidebar + + + +#endif // SVX_PROPERTYPANEL_AREAPAGE_HXX + +// eof diff --git a/svx/source/sidebar/area/AreaPropertyPanel.src b/svx/source/sidebar/area/AreaPropertyPanel.src new file mode 100644 index 000000000000..a75c44a7fba2 --- /dev/null +++ b/svx/source/sidebar/area/AreaPropertyPanel.src @@ -0,0 +1,423 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "AreaPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include "helpid.hrc" + +#define TOOLBOX_WIDTH 50 +#define TOOLBOX_HEIGHT 17 + +Control RID_SIDEBAR_AREA_PANEL +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, SECTIONPAGE_MARGIN_VERTICAL_TOP + SECTIONPAGE_MARGIN_VERTICAL_BOT + 2*( FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + CBOX_HEIGHT) + CONTROL_SPACING_VERTICAL ); + HelpID = HID_PROPERTYPANEL_AREA_SECTION ; + Text [ en-US ] = "Area"; + + FixedText FT_COLOR_LIST + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP ) ; + Size = MAP_APPFONT ( FIXED_TEXT_WIDTH + 50, FIXED_TEXT_HEIGHT ) ; + Text [ en-US ] = "~Fill:"; + }; + FixedText FL_TRSP_TEXT + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL ) ; + Size = MAP_APPFONT ( FIXED_TEXT_WIDTH + 50, FIXED_TEXT_HEIGHT ) ; + Text [ en-US ] = "~Transparency:"; + }; + ToolBox TB_COLOR + { + HelpID = HID_PPROPERTYPANEL_AREA_TBX_COLOR; + SVLook = TRUE ; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + FIXED_TEXT_HEIGHT + 1) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT ) ; + TabStop = TRUE ; + Text = "Color"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_COLOR ; + HelpID = HID_PPROPERTYPANEL_AREA_TBI_COLOR; + DropDown = TRUE ; + Text = "Color" ; + }; + }; + }; + String STR_HELP_COLOR + { + Text [ en-US ] = "Select the color to apply." ; + }; + String STR_HELP_TYPE + { + Text [en-US] = "Select the fill type to apply."; + }; + String STR_HELP_ATTR + { + Text [en-US] = "Select the effect to apply."; + }; + Image IMG_AXIAL + { + ImageBitmap = Bitmap{File = "symphony/axial.png";}; + }; + Image IMG_ELLI + { + ImageBitmap = Bitmap{File = "symphony/ellipsoid.png";}; + }; + Image IMG_QUAD + { + ImageBitmap = Bitmap{File = "symphony/Quadratic.png";}; + }; + Image IMG_RADIAL + { + ImageBitmap = Bitmap{File = "symphony/radial.png";}; + }; + Image IMG_SQUARE + { + ImageBitmap = Bitmap{File = "symphony/Square.png";}; + }; + Image IMG_LINEAR + { + ImageBitmap = Bitmap{File = "symphony/linear.png";}; + }; + Image IMG_COLOR + { + ImageBitmap = Bitmap{File = "symphony/fill_color.png";}; + }; + + //high contract + Image IMG_AXIAL_H + { + ImageBitmap = Bitmap{File = "symphony/axial_h.png";}; + }; + Image IMG_ELLI_H + { + ImageBitmap = Bitmap{File = "symphony/ellipsoid_h.png";}; + }; + Image IMG_QUAD_H + { + ImageBitmap = Bitmap{File = "symphony/Quadratic_h.png";}; + }; + Image IMG_RADIAL_H + { + ImageBitmap = Bitmap{File = "symphony/radial_h.png";}; + }; + Image IMG_SQUARE_H + { + ImageBitmap = Bitmap{File = "symphony/Square_h.png";}; + }; + Image IMG_LINEAR_H + { + ImageBitmap = Bitmap{File = "symphony/linear_h.png";}; + }; + Image IMG_COLOR_H + { + ImageBitmap = Bitmap{File = "symphony/fill_color_h.png";}; + }; + + //===================================================================================================================================== + ListBox LB_TRGR_TYPES + { + Border = TRUE ; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL ) ; + Size = MAP_APPFONT ( MBOX_WIDTH , LISTBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Select the type of transparence to apply." ; + TabStop = TRUE ; + DropDown = TRUE ; + HelpID = HID_PPROPERTYPANEL_AREA_LB_TRGR_TYPES ; + StringList [ en-US ] = + { + < "None" ; Default ; > ; + < "Solid" ; Default ; > ; + < "Linear" ; Default ; > ; + < "Axial" ; Default ; > ; + < "Radial" ; Default ; > ; + < "Ellipsoid" ; Default ; > ; + < "Quadratic" ; Default ; > ; + < "Square" ; Default ; > ; + }; + }; + + MetricField MTR_TRANSPARENT + { + Border = TRUE ; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL ) ; + Size = MAP_APPFONT ( MBOX_WIDTH + 1 ,MBOX_HEIGHT ) ; + HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRANSPARENT ; + QuickHelpText [ en-US ] = "Specify 0% for fully opaque through 100% for fully transparent." ; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + Last = 100 ; + SpinSize = 5 ; + }; + + ToolBox BTN_GRADIENT + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL ) ; + HelpID = HID_PPROPERTYPANEL_AREA_TBX_GRADIENT ; + SVLook = TRUE ; + Border = FALSE ; + TabStop = TRUE ; + Text = "Gradient"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_BTX_GRADIENT ; + HelpID = HID_PPROPERTYPANEL_AREA_TBI_GRADIENT ; + ItemBitmap = Bitmap + { + File = "symphony/linear.png" ; + }; + DropDown = TRUE; + Text = "Gradient" ; + }; + }; + }; + String STR_HELP_GRADIENT + { + Text [ en-US ] = "Specify the variation of gradient transparency." ; + }; +}; + +Control RID_POPUPPANEL_AREAPAGE_TRGR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + +// Size = MAP_APPFONT( POP_WIDTH, POP_HEIGHT ); + + FixedText FT_TRGR_CENTER_X + { + Size = MAP_APPFONT ( CONTROL_WIDTH , FIXED_TEXT_HEIGHT ) ; + Text [ en-US ] = "Center ~X:"; + }; + MetricField MTR_TRGR_CENTER_X + { + Border = TRUE ; + Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_X ; + QuickHelpText [ en-US ] = "Specify the horizontal offset percentage from the center for the gradient shading style. 50% is the horizontal center." ; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + Last = 100 ; + SpinSize = 5 ; + }; + FixedText FT_TRGR_CENTER_Y + { + Size = MAP_APPFONT ( CONTROL_WIDTH + POPUPPANEL_MARGIN_HORIZONTAL, FIXED_TEXT_HEIGHT ) ;//wj + Text [ en-US ] = "Center ~Y:"; + }; + MetricField MTR_TRGR_CENTER_Y + { + Border = TRUE ; + Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_CENTER_Y ; + QuickHelpText [ en-US ] = "Specify the vertical offset percentage from the center for the gradient shading style. 50% is the vertical center." ; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + Last = 100 ; + SpinSize = 5 ; + }; + FixedText FT_TRGR_ANGLE + { + Size = MAP_APPFONT ( CONTROL_WIDTH * 2 + POPUPPANEL_MARGIN_HORIZONTAL + CONTROL_SPACING_HORIZONTAL, FIXED_TEXT_HEIGHT ) ;//wj + Text [ en-US ] = "~Angle:"; + }; + MetricField MTR_TRGR_ANGLE + { + Border = TRUE ; + Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_ANGLE ; + QuickHelpText [ en-US ] = "Specify the angle of rotation for the gradient shading style." ; + TabStop = FALSE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = -9999 ; + Maximum = 9999 ; + Unit = FUNIT_CUSTOM ; + SpinSize = 1 ; + CustomUnitText [ en-US ] = " degrees"; + }; + FixedText FT_TRGR_START_VALUE + { + Size = MAP_APPFONT ( CONTROL_WIDTH , FIXED_TEXT_HEIGHT ) ; + Text [ en-US ] = "~Start value:"; + }; + MetricField MTR_TRGR_START_VALUE + { + Border = TRUE ; + Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_SVALUE ; + QuickHelpText [ en-US ] = "Enter a transparency value for the beginning point of the gradient, where 0% is fully opaque and 100% is fully transparent." ; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + Last = 100 ; + SpinSize = 5 ; + }; + FixedText FT_TRGR_END_VALUE + { + Size = MAP_APPFONT (CONTROL_WIDTH + POPUPPANEL_MARGIN_HORIZONTAL, FIXED_TEXT_HEIGHT ) ; //wj + Text [ en-US ] = "~End value:"; + }; + MetricField MTR_TRGR_END_VALUE + { + Border = TRUE ; + Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_EVALUE ; + QuickHelpText [ en-US ] = "Enter a transparency value for the endpoint of the gradient, where 0% is fully opaque and 100% is fully transparent." ; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + Last = 100 ; + SpinSize = 5 ; + }; + FixedText FT_TRGR_BORDER + { + Size = MAP_APPFONT ( CONTROL_WIDTH * 2 + POPUPPANEL_MARGIN_HORIZONTAL + CONTROL_SPACING_HORIZONTAL, FIXED_TEXT_HEIGHT ) ; // + Text [ en-US ] = "~Border:"; + }; + MetricField MTR_TRGR_BORDER + { + Border = TRUE ; + Size = MAP_APPFONT ( CONTROL_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PPROPERTYPANEL_AREA_MTR_TRGR_BORDER ; + QuickHelpText [ en-US ] = "Specify the border value of gradient transparence." ; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + Last = 100 ; + SpinSize = 5 ; + }; + //===================================================================================================================================== + + ToolBox BTN_LEFT_SECOND + { + Border = FALSE ; + HelpID = HID_PPROPERTYPANEL_AREA_BTN_LEFT_SECOND ; + SVLook = TRUE ; + Border = FALSE ; + TabStop = TRUE ; + Text = "Rotate Left"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_LEFT ; + Text = "Rotate Left" ; + ItemBitmap = Bitmap + { + // File = "symphony/rotate_left.png" ; + }; + }; + }; + }; + ToolBox BTN_RIGHT_FIRST + { + Border = FALSE ; + HelpID = HID_PPROPERTYPANEL_AREA_BTN_RIGHT_FIRST ; + SVLook = TRUE ; + Border = FALSE ; + TabStop = TRUE ; + Text = "Rotate Right"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_RIGHT ; + Text = "Rotate Right" ; + ItemBitmap = Bitmap + { + // File = "symphony/rotate_right.png" ; + }; + }; + }; + }; + String STR_HELP_LEFT + { + Text [ en-US ] = "Rotate counterclockwise by 45 degrees." ; + }; + String STR_HELP_RIGHT + { + Text [ en-US ] = "Rotate clockwise by 45 degrees." ; + }; + Image IMG_ROT_LEFT + { + ImageBitmap = Bitmap{File = "symphony/rotate_left.png";}; + }; + Image IMG_ROT_RIGHT + { + ImageBitmap = Bitmap{File = "symphony/rotate_right.png";}; + }; +}; +Control RID_POPUPPANEL_AERAPAGE_COLOR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT ); + + Control VS_COLOR + { + HelpID = HID_PPROPERTYPANEL_AREA_COLOR_VS; + Hide = TRUE ; + Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y ); + Size = MAP_APPFONT ( POPUP_COLOR_PICKER_WIDTH - OFFSET_X * 2, POPUP_COLOR_PICKER_HEIGHT - OFFSET_Y * 2); + TabStop = TRUE ; + Text = "Color"; + }; +}; + +// eof diff --git a/svx/source/sidebar/area/AreaTransparencyGradientControl.cxx b/svx/source/sidebar/area/AreaTransparencyGradientControl.cxx new file mode 100644 index 000000000000..f59f382bddd0 --- /dev/null +++ b/svx/source/sidebar/area/AreaTransparencyGradientControl.cxx @@ -0,0 +1,349 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "AreaTransparencyGradientControl.hxx" +#include "AreaPropertyPanel.hxx" +#include "AreaPropertyPanel.hrc" + +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <svx/xflftrit.hxx> +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> + +namespace svx { namespace sidebar { + +// positioning helpers +#define APOS1_1 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL), MAP_APPFONT)) +#define APOS2_1 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL), MAP_APPFONT)) +#define APOS1_2 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL), MAP_APPFONT)) +#define APOS2_2 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL), MAP_APPFONT)) +#define APOS1_3 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) +#define APOS1_4 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) +#define APOS2_3 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) +#define APOS2_4 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL), MAP_APPFONT)) +#define APOS1_5 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) +#define APOS1_6 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 3*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+2*(MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) +#define APOS2_5 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 2*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) +#define APOS2_6 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL+CONTROL_WIDTH+CONTROL_SPACING_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 3*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+2*(MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) +#define APOS1_7 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 3*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL+MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) +#define APOS1_8 Point(LogicToPixel(Point(POPUPPANEL_MARGIN_HORIZONTAL,POPUPPANEL_MARGIN_VERTICAL + 4*(FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL)+3*(MBOX_HEIGHT+CONTROL_SPACING_VERTICAL)), MAP_APPFONT)) +#define APOS_Left_Right_1 Point(LogicToPixel(Point(LEFT_RIGHT_X1,LEFT_RIGHT_Y1), MAP_APPFONT)) +#define APOS_Left_Right_2 Point(LogicToPixel(Point(LEFT_RIGHT_X2,LEFT_RIGHT_Y1), MAP_APPFONT)) +#define APOS_Left_Right_3 Point(LogicToPixel(Point(LEFT_RIGHT_X1,LEFT_RIGHT_Y2), MAP_APPFONT)) +#define APOS_Left_Right_4 Point(LogicToPixel(Point(LEFT_RIGHT_X2,LEFT_RIGHT_Y2), MAP_APPFONT)) + + + + +AreaTransparencyGradientControl::AreaTransparencyGradientControl ( + Window* pParent, + AreaPropertyPanel& rPanel) + : PopupControl( pParent,SVX_RES(RID_POPUPPANEL_AREAPAGE_TRGR)), + maFtTrgrCenterX(this, SVX_RES(FT_TRGR_CENTER_X)), + maMtrTrgrCenterX(this, SVX_RES(MTR_TRGR_CENTER_X)), + maFtTrgrCenterY(this, SVX_RES(FT_TRGR_CENTER_Y)), + maMtrTrgrCenterY(this, SVX_RES(MTR_TRGR_CENTER_Y)), + maFtTrgrAngle(this, SVX_RES(FT_TRGR_ANGLE)), + maMtrTrgrAngle(this, SVX_RES(MTR_TRGR_ANGLE)), + maFtTrgrStartValue(this, SVX_RES(FT_TRGR_START_VALUE)), + maMtrTrgrStartValue(this, SVX_RES(MTR_TRGR_START_VALUE)), + maFtTrgrEndValue(this, SVX_RES(FT_TRGR_END_VALUE)), + maMtrTrgrEndValue(this, SVX_RES(MTR_TRGR_END_VALUE)), + maFtTrgrBorder(this, SVX_RES(FT_TRGR_BORDER)), + maMtrTrgrBorder(this, SVX_RES(MTR_TRGR_BORDER)), + maBtnLeft45(this, SVX_RES(BTN_LEFT_SECOND)), + maBtnRight45(this, SVX_RES(BTN_RIGHT_FIRST)), + maRotLeft( SVX_RES(IMG_ROT_LEFT)), + maRotRight( SVX_RES(IMG_ROT_RIGHT)), + mrAreaPropertyPanel(rPanel), + mpBindings(NULL) +{ + Link aLink = LINK( this, AreaTransparencyGradientControl, ModifiedTrgrHdl_Impl); + maMtrTrgrCenterX.SetModifyHdl( aLink ); + maMtrTrgrCenterY.SetModifyHdl( aLink ); + maMtrTrgrAngle.SetModifyHdl( aLink ); + maMtrTrgrBorder.SetModifyHdl( aLink ); + maMtrTrgrStartValue.SetModifyHdl( aLink ); + maMtrTrgrEndValue.SetModifyHdl( aLink ); + aLink = LINK( this, AreaTransparencyGradientControl, Left_Click45_Impl); + maBtnLeft45.SetSelectHdl( aLink ); + aLink = LINK( this, AreaTransparencyGradientControl, Right_Click45_Impl); + maBtnRight45.SetSelectHdl( aLink ); + maBtnLeft45.SetItemImage(1,maRotLeft); + Size aTbxSize = maBtnLeft45.CalcWindowSizePixel(); + maBtnLeft45.SetOutputSizePixel( aTbxSize ); + maBtnLeft45.SetQuickHelpText(1, String(SVX_RES(STR_HELP_LEFT))); //acc wj + + maBtnRight45.SetItemImage(1,maRotRight); + aTbxSize = maBtnRight45.CalcWindowSizePixel(); + maBtnRight45.SetOutputSizePixel( aTbxSize ); + maBtnRight45.SetQuickHelpText(1, String(SVX_RES(STR_HELP_RIGHT))); //acc wj + + maBtnLeft45.SetBackground(Wallpaper()); + maBtnLeft45.SetPaintTransparent(true); + maBtnRight45.SetBackground(Wallpaper()); + maBtnRight45.SetPaintTransparent(true); + + FreeResource(); + mpBindings = mrAreaPropertyPanel.GetBindings(); +} + + + + +AreaTransparencyGradientControl::~AreaTransparencyGradientControl (void) +{ +} + + + + +void AreaTransparencyGradientControl::ToGetFocus() +{ + if(maMtrTrgrCenterX.IsVisible()) + maMtrTrgrCenterX.GrabFocus(); + else + maMtrTrgrAngle.GrabFocus(); +} + + + + +void AreaTransparencyGradientControl::Rearrange(XFillFloatTransparenceItem* pGradientItem) +{ + InitStatus(pGradientItem); + const XGradient& rGradient = pGradientItem->GetGradientValue(); + XGradientStyle eXGS(rGradient.GetGradientStyle()); + Size aSize(POP_WIDTH,POP_HEIGHT); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + Size aSize2(POP_WIDTH,POP_HEIGHT2); + aSize2 = LogicToPixel( aSize2, MapMode(MAP_APPFONT) ); + long aPosY = 0; + Point aPointAngle; + Size aSizeAngle = maMtrTrgrAngle.GetSizePixel(); + Size aTbxSize = maBtnLeft45.CalcWindowSizePixel(); + + switch(eXGS) + { + case XGRAD_LINEAR: + case XGRAD_AXIAL: + maFtTrgrCenterX.Hide(); + maMtrTrgrCenterX.Hide(); + maFtTrgrCenterY.Hide(); + maMtrTrgrCenterY.Hide(); + maFtTrgrAngle.Show(); + maFtTrgrAngle.SetPosPixel(APOS1_1); + maMtrTrgrAngle.Show(); + maMtrTrgrAngle.SetPosPixel(APOS2_1); + maFtTrgrStartValue.SetPosPixel(APOS1_3); + maMtrTrgrStartValue.SetPosPixel(APOS1_4); + maFtTrgrEndValue.SetPosPixel(APOS2_3); + maMtrTrgrEndValue.SetPosPixel(APOS2_4); + maFtTrgrBorder.SetPosPixel(APOS1_5); + maMtrTrgrBorder.SetPosPixel(APOS1_6); + + maBtnLeft45.Show(); + maBtnRight45.Show(); + + aPointAngle = maMtrTrgrAngle.GetPosPixel(); + aPosY = aPointAngle.getY() + aSizeAngle.getHeight() - aTbxSize.getHeight(); + + maBtnLeft45.SetPosPixel(Point(APOS_Left_Right_1.getX(), aPosY)); + maBtnRight45.SetPosPixel(Point(APOS_Left_Right_2.getX(), aPosY)); + + SetSizePixel(aSize2); + break; + + case XGRAD_RADIAL: + maFtTrgrCenterX.Show(); + maFtTrgrCenterX.SetPosPixel(APOS1_1); + maMtrTrgrCenterX.Show(); + maMtrTrgrCenterX.SetPosPixel(APOS2_1); + maFtTrgrCenterY.Show(); + maFtTrgrCenterY.SetPosPixel(APOS1_2); + maMtrTrgrCenterY.Show(); + maMtrTrgrCenterY.SetPosPixel(APOS2_2); + maFtTrgrAngle.Hide(); + maMtrTrgrAngle.Hide(); + maFtTrgrStartValue.SetPosPixel(APOS1_3); + maMtrTrgrStartValue.SetPosPixel(APOS1_4); + maFtTrgrEndValue.SetPosPixel(APOS2_3); + maMtrTrgrEndValue.SetPosPixel(APOS2_4); + maFtTrgrBorder.SetPosPixel(APOS1_5); + maMtrTrgrBorder.SetPosPixel(APOS1_6); + + maBtnLeft45.Hide(); + maBtnRight45.Hide(); + + SetSizePixel(aSize2); + + break; + + case XGRAD_ELLIPTICAL: + case XGRAD_SQUARE: + case XGRAD_RECT: + maFtTrgrCenterX.Show(); + maFtTrgrCenterX.SetPosPixel(APOS1_1); + maMtrTrgrCenterX.Show(); + maMtrTrgrCenterX.SetPosPixel(APOS2_1); + maFtTrgrCenterY.Show(); + maFtTrgrCenterY.SetPosPixel(APOS1_2); + maMtrTrgrCenterY.Show(); + maMtrTrgrCenterY.SetPosPixel(APOS2_2); + maFtTrgrAngle.Show(); + maFtTrgrAngle.SetPosPixel(APOS1_3); + maMtrTrgrAngle.Show(); + maMtrTrgrAngle.SetPosPixel(APOS1_4); + + maFtTrgrStartValue.SetPosPixel(APOS1_5); + maMtrTrgrStartValue.SetPosPixel(APOS1_6); + maFtTrgrEndValue.SetPosPixel(APOS2_5); + maMtrTrgrEndValue.SetPosPixel(APOS2_6); + maFtTrgrBorder.SetPosPixel(APOS1_7); + maMtrTrgrBorder.SetPosPixel(APOS1_8); + + maBtnLeft45.Show(); + maBtnRight45.Show(); + + aPointAngle = maMtrTrgrAngle.GetPosPixel(); + aPosY = aPointAngle.getY() + aSizeAngle.getHeight() - aTbxSize.getHeight(); + + maBtnLeft45.SetPosPixel(Point(APOS_Left_Right_3.getX(), aPosY)); + maBtnRight45.SetPosPixel(Point(APOS_Left_Right_4.getX(), aPosY)); + + SetSizePixel(aSize); + + break; + } +} + + + + +void AreaTransparencyGradientControl::InitStatus(XFillFloatTransparenceItem* pGradientItem) +{ + const XGradient& rGradient = pGradientItem->GetGradientValue(); + + XGradient aGradient; + + if (rGradient.GetXOffset() == AreaPropertyPanel::DEFAULT_CENTERX + && rGradient.GetYOffset() == AreaPropertyPanel::DEFAULT_CENTERY + && (rGradient.GetAngle() / 10) == AreaPropertyPanel::DEFAULT_ANGLE + && ((sal_uInt16)((((sal_uInt16)rGradient.GetStartColor().GetRed() + 1) * 100) / 255)) + == AreaPropertyPanel::DEFAULT_STARTVALUE + && ((sal_uInt16)((((sal_uInt16)rGradient.GetEndColor().GetRed() + 1) * 100) / 255)) + == AreaPropertyPanel::DEFAULT_ENDVALUE + && rGradient.GetBorder() == AreaPropertyPanel::DEFAULT_BORDER) + { + aGradient = mrAreaPropertyPanel.GetGradient(rGradient.GetGradientStyle()); + } + else + { + aGradient = rGradient; + } + maMtrTrgrCenterX.SetValue(aGradient.GetXOffset()); + maMtrTrgrCenterY.SetValue(aGradient.GetYOffset()); + maMtrTrgrAngle.SetValue(aGradient.GetAngle() / 10); + maMtrTrgrStartValue.SetValue((sal_uInt16)((((sal_uInt16)aGradient.GetStartColor().GetRed() + 1) * 100) / 255)); + maMtrTrgrEndValue.SetValue((sal_uInt16)((((sal_uInt16)aGradient.GetEndColor().GetRed() + 1) * 100) / 255)); + maMtrTrgrBorder.SetValue(aGradient.GetBorder()); +} + + + + +void AreaTransparencyGradientControl::ExecuteValueModify( sal_uInt8 nStartCol, sal_uInt8 nEndCol ) +{ + //Added + sal_Int16 aMtrValue = (sal_Int16)maMtrTrgrAngle.GetValue(); + while(aMtrValue<0) + aMtrValue += 360; + sal_uInt16 nVal = aMtrValue/360; + nVal = aMtrValue - nVal*360; + maMtrTrgrAngle.SetValue(nVal); + //End of new code + XGradient aTmpGradient( + Color(nStartCol, nStartCol, nStartCol), + Color(nEndCol, nEndCol, nEndCol), + (XGradientStyle)(mrAreaPropertyPanel.GetSelectedTransparencyTypeIndex()-2), + (sal_uInt16)maMtrTrgrAngle.GetValue() * 10, + (sal_uInt16)maMtrTrgrCenterX.GetValue(), + (sal_uInt16)maMtrTrgrCenterY.GetValue(), + (sal_uInt16)maMtrTrgrBorder.GetValue(), + 100, 100); + + mrAreaPropertyPanel.SetGradient(aTmpGradient); + + SfxItemPool* pPool = NULL; + bool bEnable = true; + XFillFloatTransparenceItem aGradientItem(pPool,aTmpGradient, bEnable ); + + mpBindings->GetDispatcher()->Execute( SID_ATTR_FILL_FLOATTRANSPARENCE, SFX_CALLMODE_RECORD, &aGradientItem, 0L ); +} + + + + +IMPL_LINK(AreaTransparencyGradientControl, ModifiedTrgrHdl_Impl, void *, pControl) +{ + sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrStartValue.GetValue() * 255) / 100); + sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrEndValue.GetValue() * 255) / 100); + ExecuteValueModify( nStartCol, nEndCol ); + return( 0L ); +} + + + + +IMPL_LINK(AreaTransparencyGradientControl, Left_Click45_Impl, void *, pControl) +{ + sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrStartValue.GetValue() * 255) / 100); + sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrEndValue.GetValue() * 255) / 100); + sal_uInt16 aTemp = (sal_uInt16)maMtrTrgrAngle.GetValue(); + if(aTemp>=315) + aTemp -= 360; + aTemp += 45; + maMtrTrgrAngle.SetValue(aTemp); + ExecuteValueModify( nStartCol, nEndCol ); + return( 0L ); +} + + + + +IMPL_LINK(AreaTransparencyGradientControl, Right_Click45_Impl, void *, pControl) +{ + sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrStartValue.GetValue() * 255) / 100); + sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)maMtrTrgrEndValue.GetValue() * 255) / 100); + sal_uInt16 aTemp = (sal_uInt16)maMtrTrgrAngle.GetValue(); + if(aTemp<45) + aTemp += 360; + aTemp -= 45; + maMtrTrgrAngle.SetValue(aTemp); + ExecuteValueModify( nStartCol, nEndCol ); + return( 0L ); +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/area/AreaTransparencyGradientControl.hxx b/svx/source/sidebar/area/AreaTransparencyGradientControl.hxx new file mode 100644 index 000000000000..98322aa176c3 --- /dev/null +++ b/svx/source/sidebar/area/AreaTransparencyGradientControl.hxx @@ -0,0 +1,78 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/PopupControl.hxx" + +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include <vcl/toolbox.hxx> +#include <svx/xenum.hxx> + +class XFillFloatTransparenceItem; +class SfxBindings; + +namespace svx { namespace sidebar { + +class AreaPropertyPanel; + +class AreaTransparencyGradientControl : public PopupControl +{ +public: + AreaTransparencyGradientControl ( + Window* pParent, + AreaPropertyPanel& rPanel); + virtual ~AreaTransparencyGradientControl (void); + + void ToGetFocus(); + void Rearrange(XFillFloatTransparenceItem* pGradientItem); + void InitStatus(XFillFloatTransparenceItem* pGradientItem); + void ExecuteValueModify( sal_uInt8 nStartCol, sal_uInt8 nEndCol ); + void SetControlState_Impl(XGradientStyle eXGS); + +private: + FixedText maFtTrgrCenterX; + MetricField maMtrTrgrCenterX; + FixedText maFtTrgrCenterY; + MetricField maMtrTrgrCenterY; + FixedText maFtTrgrAngle; + MetricField maMtrTrgrAngle; + ToolBox maBtnLeft45; + ToolBox maBtnRight45; + FixedText maFtTrgrStartValue; + MetricField maMtrTrgrStartValue; + FixedText maFtTrgrEndValue; + MetricField maMtrTrgrEndValue; + FixedText maFtTrgrBorder; + MetricField maMtrTrgrBorder; + Image maRotLeft; + Image maRotRight; + + AreaPropertyPanel& mrAreaPropertyPanel; + SfxBindings* mpBindings; + DECL_LINK( ModifiedTrgrHdl_Impl, void* ); + DECL_LINK( Left_Click45_Impl, void* ); + DECL_LINK( Right_Click45_Impl, void* ); +}; + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx new file mode 100644 index 000000000000..be1f9f4af312 --- /dev/null +++ b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx @@ -0,0 +1,60 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "AreaTransparencyGradientPopup.hxx" +#include "AreaTransparencyGradientControl.hxx" + + +namespace svx { namespace sidebar { + +AreaTransparencyGradientPopup::AreaTransparencyGradientPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency and Gradient"))) +{ +} + + + + +AreaTransparencyGradientPopup::~AreaTransparencyGradientPopup (void) +{ +} + + + + +void AreaTransparencyGradientPopup::Rearrange (XFillFloatTransparenceItem* pItem) +{ + ProvideContainerAndControl(); + + AreaTransparencyGradientControl* pControl = dynamic_cast<AreaTransparencyGradientControl*>(mpControl.get()); + if (pControl != NULL) + pControl->Rearrange(pItem); +} + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/area/AreaTransparencyGradientPopup.hxx b/svx/source/sidebar/area/AreaTransparencyGradientPopup.hxx new file mode 100644 index 000000000000..04f79ff340ae --- /dev/null +++ b/svx/source/sidebar/area/AreaTransparencyGradientPopup.hxx @@ -0,0 +1,51 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_TRANSPARENCY_GRADIENT_POPUP_HXX_ +#define _SVX_SIDEBAR_TRANSPARENCY_GRADIENT_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <boost/function.hpp> + + +class XFillFloatTransparenceItem; + + +namespace svx { namespace sidebar { + +class AreaTransparencyGradientPopup + : public Popup +{ +public : + AreaTransparencyGradientPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + ~AreaTransparencyGradientPopup (void); + + void Rearrange (XFillFloatTransparenceItem* pItem); +}; + +} } // end of namespace svx::sidebar + +#endif + +// eof diff --git a/svx/source/sidebar/debug/ColorPanel.cxx b/svx/source/sidebar/debug/ColorPanel.cxx new file mode 100644 index 000000000000..42bf02cd339a --- /dev/null +++ b/svx/source/sidebar/debug/ColorPanel.cxx @@ -0,0 +1,233 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "ColorPanel.hxx" + +#include <vcl/image.hxx> +#include <vcl/svapp.hxx> + +namespace svx { namespace sidebar { + +ColorPanel::ColorPanel (::Window* pParent) + : ValueSet(pParent), + mnPreferredColumnCount(2) +{ + WinBits aStyle = + WB_ITEMBORDER + | WB_DOUBLEBORDER + | WB_NAMEFIELD + | WB_FLATVALUESET + | WB_TABSTOP + | WB_VSCROLL; + + SetStyle(GetStyle() | aStyle); + SetExtraSpacing(2); + + Fill (); + Show(); +} + + + + +ColorPanel::~ColorPanel (void) +{ +} + + + + +sal_Int32 ColorPanel::GetPreferredHeight (sal_Int32 nWidth) +{ + sal_Int32 nPreferredHeight = 0; + if (GetItemCount()>0) + { + Image aImage = GetItemImage(GetItemId(0)); + Size aItemSize = CalcItemSizePixel (aImage.GetSizePixel()); + if (nWidth>0 && aItemSize.Width()>0) + { + int nColumnCount = nWidth / aItemSize.Width(); + if (nColumnCount <= 0) + nColumnCount = 1; + else if (nColumnCount > 4) + nColumnCount = 4; + int nRowCount = (GetItemCount() + nColumnCount-1) + / nColumnCount; + nPreferredHeight = nRowCount * aItemSize.Height(); + } + } + return nPreferredHeight; +} + + + + +void ColorPanel::Resize (void) +{ + ::Window::Resize(); + Size aWindowSize = GetOutputSizePixel(); + SetPosSizePixel(Point(0,0), aWindowSize); + if (IsVisible() && aWindowSize.Width() > 0) + { + // Calculate the number of rows and columns. + if (GetItemCount() > 0) + { + Image aImage = GetItemImage(GetItemId(0)); + Size aItemSize = CalcItemSizePixel ( + aImage.GetSizePixel()); + int nColumnCount = aWindowSize.Width() / 30; + if (nColumnCount < 1) + nColumnCount = 1; + else if (nColumnCount > 4) + nColumnCount = 4; + + sal_uInt16 nRowCount = (sal_uInt16)CalculateRowCount(aItemSize, nColumnCount); + + SetColCount((sal_uInt16)nColumnCount); + SetLineCount(nRowCount); + } + } + +} + + + + +int ColorPanel::CalculateRowCount (const Size&, int nColumnCount) +{ + int nRowCount = 0; + + if (GetItemCount()>0 && nColumnCount>0) + { + nRowCount = GetOutputSizePixel().Height() / 30; + if (nRowCount < 1) + nRowCount = 1; + } + + return nRowCount; +} + + + + +void ColorPanel::DataChanged (const DataChangedEvent& rEvent) +{ + Fill(); +} + + + + +void ColorPanel::Fill (void) +{ + const StyleSettings& rSettings ( + Application::GetSettings().GetStyleSettings()); + Clear(); + SetItemWidth (30); + SetItemHeight (30); + sal_uInt16 i = 0; + InsertItem (++i, rSettings.GetFaceColor()); + SetItemText (i, String::CreateFromAscii("FaceColor")); + InsertItem (++i, rSettings.GetCheckedColor()); + SetItemText (i, String::CreateFromAscii("CheckedColor")); + InsertItem (++i, rSettings.GetLightColor()); + SetItemText (i, String::CreateFromAscii("LightColor")); + InsertItem (++i, rSettings.GetLightBorderColor()); + SetItemText (i, String::CreateFromAscii("LightBorderColor")); + InsertItem (++i, rSettings.GetShadowColor()); + SetItemText (i, String::CreateFromAscii("ShadowColor")); + InsertItem (++i, rSettings.GetDarkShadowColor()); + SetItemText (i, String::CreateFromAscii("DarkShadowColor")); + InsertItem (++i, rSettings.GetButtonTextColor()); + SetItemText (i, String::CreateFromAscii("ButtonTextColor")); + InsertItem (++i, rSettings.GetRadioCheckTextColor()); + SetItemText (i, String::CreateFromAscii("RadioCheckTextColor")); + InsertItem (++i, rSettings.GetGroupTextColor()); + SetItemText (i, String::CreateFromAscii("GroupTextColor")); + InsertItem (++i, rSettings.GetLabelTextColor()); + SetItemText (i, String::CreateFromAscii("LabelTextColor")); + InsertItem (++i, rSettings.GetInfoTextColor()); + SetItemText (i, String::CreateFromAscii("InfoTextColor")); + InsertItem (++i, rSettings.GetWindowColor()); + SetItemText (i, String::CreateFromAscii("WindowColor")); + InsertItem (++i, rSettings.GetWindowTextColor()); + SetItemText (i, String::CreateFromAscii("WindowTextColor")); + InsertItem (++i, rSettings.GetDialogColor()); + SetItemText (i, String::CreateFromAscii("DialogColor")); + InsertItem (++i, rSettings.GetDialogTextColor()); + SetItemText (i, String::CreateFromAscii("DialogTextColor")); + InsertItem (++i, rSettings.GetWorkspaceColor()); + SetItemText (i, String::CreateFromAscii("WorkspaceColor")); + InsertItem (++i, rSettings.GetFieldColor()); + SetItemText (i, String::CreateFromAscii("FieldColor")); + InsertItem (++i, rSettings.GetFieldTextColor()); + SetItemText (i, String::CreateFromAscii("FieldTextColor")); + InsertItem (++i, rSettings.GetActiveColor()); + SetItemText (i, String::CreateFromAscii("ActiveColor")); + InsertItem (++i, rSettings.GetActiveColor2()); + SetItemText (i, String::CreateFromAscii("ActiveColor2")); + InsertItem (++i, rSettings.GetActiveTextColor()); + SetItemText (i, String::CreateFromAscii("ActiveTextColor")); + InsertItem (++i, rSettings.GetActiveBorderColor()); + SetItemText (i, String::CreateFromAscii("ActiveBorderColor")); + InsertItem (++i, rSettings.GetDeactiveColor()); + SetItemText (i, String::CreateFromAscii("DeactiveColor")); + InsertItem (++i, rSettings.GetDeactiveColor2()); + SetItemText (i, String::CreateFromAscii("DeactiveColor2")); + InsertItem (++i, rSettings.GetDeactiveTextColor()); + SetItemText (i, String::CreateFromAscii("DeactiveTextColor")); + InsertItem (++i, rSettings.GetDeactiveBorderColor()); + SetItemText (i, String::CreateFromAscii("DeactiveBorderColor")); + InsertItem (++i, rSettings.GetHighlightColor()); + SetItemText (i, String::CreateFromAscii("HighlightColor")); + InsertItem (++i, rSettings.GetHighlightTextColor()); + SetItemText (i, String::CreateFromAscii("HighlightTextColor")); + InsertItem (++i, rSettings.GetDisableColor()); + SetItemText (i, String::CreateFromAscii("DisableColor")); + InsertItem (++i, rSettings.GetHelpColor()); + SetItemText (i, String::CreateFromAscii("HelpColor")); + InsertItem (++i, rSettings.GetHelpTextColor()); + SetItemText (i, String::CreateFromAscii("HelpTextColor")); + InsertItem (++i, rSettings.GetMenuColor()); + SetItemText (i, String::CreateFromAscii("MenuColor")); + InsertItem (++i, rSettings.GetMenuBarColor()); + SetItemText (i, String::CreateFromAscii("MenuBarColor")); + InsertItem (++i, rSettings.GetMenuBorderColor()); + SetItemText (i, String::CreateFromAscii("MenuBorderColor")); + InsertItem (++i, rSettings.GetMenuTextColor()); + SetItemText (i, String::CreateFromAscii("MenuTextColor")); + InsertItem (++i, rSettings.GetMenuHighlightColor()); + SetItemText (i, String::CreateFromAscii("MenuHighlightColor")); + InsertItem (++i, rSettings.GetMenuHighlightTextColor()); + SetItemText (i, String::CreateFromAscii("MenuHighlightTextColor")); + InsertItem (++i, rSettings.GetLinkColor()); + SetItemText (i, String::CreateFromAscii("LinkColor")); + InsertItem (++i, rSettings.GetVisitedLinkColor()); + SetItemText (i, String::CreateFromAscii("VisitedLinkColor")); + InsertItem (++i, rSettings.GetHighlightLinkColor()); + SetItemText (i, String::CreateFromAscii("HighlightLinkColor")); + InsertItem (++i, rSettings.GetFontColor()); + SetItemText (i, String::CreateFromAscii("FontColor")); +} + +} } // end of namespace ::svx::sidebar diff --git a/svx/source/sidebar/debug/ColorPanel.hxx b/svx/source/sidebar/debug/ColorPanel.hxx new file mode 100644 index 000000000000..91c2987ad241 --- /dev/null +++ b/svx/source/sidebar/debug/ColorPanel.hxx @@ -0,0 +1,61 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_COLOR_PANEL_HXX +#define SVX_SIDEBAR_COLOR_PANEL_HXX + +#include <svtools/valueset.hxx> +#include <vcl/window.hxx> + + +namespace svx { namespace sidebar { + + +/** This demo panel shows the colors that are available from the + StyleSettings. +*/ +class ColorPanel + : public ValueSet +{ +public: + ColorPanel (::Window* pParent); + virtual ~ColorPanel (void); + + // From ::Window + virtual void Resize (void); + virtual void DataChanged (const DataChangedEvent& rEvent); + +private: + int mnPreferredColumnCount; + + /** Depending on the given number of columns and the item size + calculate the number of rows that are necessary to display all + items. + */ + int CalculateRowCount (const Size& rItemSize, int nColumnCount); + void Fill (void); + + sal_Int32 GetPreferredHeight (sal_Int32 nWidth); +}; + +} } // end of namespace ::svx::sidebar + +#endif diff --git a/svx/source/sidebar/debug/ContextPanel.cxx b/svx/source/sidebar/debug/ContextPanel.cxx new file mode 100644 index 000000000000..d101bc34b2a6 --- /dev/null +++ b/svx/source/sidebar/debug/ContextPanel.cxx @@ -0,0 +1,69 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "ContextPanel.hxx" + +namespace svx { namespace sidebar { + +ContextPanel::ContextPanel (::Window* pParent) + : Window(pParent, 0), + maApplicationName(this, 0), + maContextName(this, 0) +{ + maApplicationName.SetPosSizePixel(5,5, 250,15); + maContextName.SetPosSizePixel(5,25, 250,15); + + maApplicationName.Show(); + maContextName.Show(); + Show(); +} + + + + +ContextPanel::~ContextPanel (void) +{ +} + + + + +sal_Int32 ContextPanel::GetPreferredHeight (sal_Int32 nWidth) +{ + const sal_Int32 nHeight (maContextName.GetPosPixel().Y() + maContextName.GetSizePixel().Height() + 5); + return nHeight; +} + + + + +void ContextPanel::HandleContextChange (const sfx2::sidebar::EnumContext aContext) +{ + maApplicationName.SetText(aContext.GetApplicationName()); + maContextName.SetText(aContext.GetContextName()); +} + + + + +} } // end of namespace ::svx::sidebar diff --git a/svx/source/sidebar/debug/ContextPanel.hxx b/svx/source/sidebar/debug/ContextPanel.hxx new file mode 100644 index 000000000000..d126d2272868 --- /dev/null +++ b/svx/source/sidebar/debug/ContextPanel.hxx @@ -0,0 +1,56 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_DEBUG_CONTEXT_PANEL_HXX +#define SVX_SIDEBAR_DEBUG_CONTEXT_PANEL_HXX + +#include <sfx2/sidebar/IContextChangeReceiver.hxx> +#include <vcl/window.hxx> +#include <vcl/fixed.hxx> + + +namespace svx { namespace sidebar { + + +/** Display the current context. +*/ +class ContextPanel + : public Window, + public sfx2::sidebar::IContextChangeReceiver +{ +public: + ContextPanel (::Window* pParent); + virtual ~ContextPanel (void); + + // From Window + sal_Int32 GetPreferredHeight (sal_Int32 nWidth); + + // From IContextChangeReceiverInterface + virtual void HandleContextChange (const ::sfx2::sidebar::EnumContext aContext); + +private: + FixedText maApplicationName; + FixedText maContextName; +}; + +} } // end of namespace ::svx::sidebar + +#endif diff --git a/svx/source/sidebar/debug/NotYetImplementedPanel.cxx b/svx/source/sidebar/debug/NotYetImplementedPanel.cxx new file mode 100644 index 000000000000..5c899e8363cf --- /dev/null +++ b/svx/source/sidebar/debug/NotYetImplementedPanel.cxx @@ -0,0 +1,49 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "NotYetImplementedPanel.hxx" + +namespace svx { namespace sidebar { + +NotYetImplementedPanel::NotYetImplementedPanel (::Window* pParent) + : Window(pParent, 0), + maMessageControl(this, 0) +{ + maMessageControl.SetPosSizePixel(5,5, 250,15); + maMessageControl.SetText(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("not yet implemented"))); + + maMessageControl.Show(); + Show(); +} + + + + +NotYetImplementedPanel::~NotYetImplementedPanel (void) +{ +} + + + + +} } // end of namespace ::svx::sidebar diff --git a/svx/source/sidebar/debug/NotYetImplementedPanel.hxx b/svx/source/sidebar/debug/NotYetImplementedPanel.hxx new file mode 100644 index 000000000000..69592d010d5f --- /dev/null +++ b/svx/source/sidebar/debug/NotYetImplementedPanel.hxx @@ -0,0 +1,47 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_DEBUG_NOT_YET_IMPLEMENTED_PANEL_HXX +#define SVX_SIDEBAR_DEBUG_NOT_YET_IMPLEMENTED_PANEL_HXX + +#include <vcl/window.hxx> +#include <vcl/fixed.hxx> + + +namespace svx { namespace sidebar { + + +/** Display a panel as placeholder for a not-yet-implemented panel. +*/ +class NotYetImplementedPanel + : public Window +{ +public: + NotYetImplementedPanel (::Window* pParent); + virtual ~NotYetImplementedPanel (void); + +private: + FixedText maMessageControl; +}; + +} } // end of namespace ::svx::sidebar + +#endif diff --git a/svx/source/tbxctrls/linectrl.src b/svx/source/sidebar/gallery/GalleryPanel.hxx index 7b823536105b..7d36e154c6f4 100644 --- a/svx/source/tbxctrls/linectrl.src +++ b/svx/source/sidebar/gallery/GalleryPanel.hxx @@ -19,12 +19,12 @@ * *************************************************************/ +#ifndef SVX_SIDEBAR_GALLERY_PANEL_HXX +#define SVX_SIDEBAR_GALLERY_PANEL_HXX - -#include "linectrl.hrc" - -Bitmap RID_SVXCTRL_LINECTRL +class GelleryPanel { - File = "soliline.bmp" ; }; + +#endif diff --git a/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx b/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx new file mode 100644 index 000000000000..f0b46e2a4669 --- /dev/null +++ b/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx @@ -0,0 +1,459 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <GraphicPropertyPanel.hxx> +#include <GraphicPropertyPanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <vcl/field.hxx> +#include <vcl/lstbox.hxx> +#include <svl/intitem.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> + +using namespace css; +using namespace cssu; +using ::sfx2::sidebar::Theme; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +////////////////////////////////////////////////////////////////////////////// +// namespace open + +namespace svx { namespace sidebar { + +////////////////////////////////////////////////////////////////////////////// + +GraphicPropertyPanel::GraphicPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +: Control( + pParent, + SVX_RES(RID_SIDEBAR_GRAPHIC_PANEL)), + mpFtBrightness(new FixedText(this, SVX_RES(FT_BRIGHTNESS))), + mpMtrBrightness(new MetricField(this, SVX_RES(MTR_BRIGHTNESS))), + mpFtContrast(new FixedText(this, SVX_RES(FT_CONTRAST))), + mpMtrContrast(new MetricField(this, SVX_RES(MTR_CONTRAST))), + mpFtColorMode(new FixedText(this, SVX_RES(FT_COLOR_MODE))), + mpLBColorMode(new ListBox(this, SVX_RES(LB_COLOR_MODE))), + mpFtTrans(new FixedText(this, SVX_RES(FT_TRANSPARENT))), + mpMtrTrans(new MetricField(this, SVX_RES(MTR_TRANSPARENT))), + mpMtrRed(new MetricField(this, SVX_RES(MF_RED))), + mpMtrGreen(new MetricField(this, SVX_RES(MF_GREEN))), + mpMtrBlue(new MetricField(this, SVX_RES(MF_BLUE))), + mpMtrGamma(new MetricField(this, SVX_RES(MF_GAMMA))), + maBrightControl(SID_ATTR_GRAF_LUMINANCE, *pBindings, *this), + maContrastControl(SID_ATTR_GRAF_CONTRAST, *pBindings, *this), + maTransparenceControl(SID_ATTR_GRAF_TRANSPARENCE, *pBindings, *this), + maRedControl(SID_ATTR_GRAF_RED, *pBindings, *this), + maGreenControl(SID_ATTR_GRAF_GREEN, *pBindings, *this), + maBlueControl(SID_ATTR_GRAF_BLUE, *pBindings, *this), + maGammaControl(SID_ATTR_GRAF_GAMMA, *pBindings, *this), + maModeControl(SID_ATTR_GRAF_MODE, *pBindings, *this), + maImgNormal(SVX_RES(IMG_NORMAL)), + maImgBW(SVX_RES(IMG_BW)), + maImgGray(SVX_RES(IMG_GRAY)), + maImgWater(SVX_RES(IMG_WATER)), + maImgRed(this, SVX_RES(IMG_RED)), + maImgGreen(this, SVX_RES(IMG_GREEN)), + maImgBlue(this, SVX_RES(IMG_BLUE)), + maImgGamma(this, SVX_RES(IMG_GAMMA)), + msNormal(SVX_RES(STR_NORMAL)), + msBW(SVX_RES(STR_BW)), + msGray(SVX_RES(STR_GRAY)), + msWater(SVX_RES(STR_WATER)), + mxFrame(rxFrame), + mpBindings(pBindings) +{ + Initialize(); + FreeResource(); +} + +////////////////////////////////////////////////////////////////////////////// + +GraphicPropertyPanel::~GraphicPropertyPanel() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +void GraphicPropertyPanel::Initialize() +{ + mpFtBrightness->SetBackground(Wallpaper()); + mpFtContrast->SetBackground(Wallpaper()); + mpFtColorMode->SetBackground(Wallpaper()); + mpFtTrans->SetBackground(Wallpaper()); + + mpMtrBrightness->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyBrightnessHdl ) ); + mpMtrBrightness->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Brightness"))); //wj acc + mpMtrContrast->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyContrastHdl ) ); + mpMtrContrast->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Contrast"))); //wj acc + mpMtrTrans->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyTransHdl ) ); + mpMtrTrans->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); //wj acc + + mpLBColorMode->InsertEntry( msNormal, maImgNormal ); + mpLBColorMode->InsertEntry( msGray, maImgGray ); + mpLBColorMode->InsertEntry( msBW, maImgBW ); + mpLBColorMode->InsertEntry( msWater, maImgWater ); + mpLBColorMode->SetSelectHdl( LINK( this, GraphicPropertyPanel, ClickColorModeHdl )); + mpLBColorMode->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Color mode"))); //wj acc + + mpMtrRed->SetModifyHdl( LINK( this, GraphicPropertyPanel, RedHdl ) ); + mpMtrGreen->SetModifyHdl( LINK( this, GraphicPropertyPanel, GreenHdl ) ); + mpMtrBlue->SetModifyHdl( LINK( this, GraphicPropertyPanel, BlueHdl ) ); + mpMtrGamma->SetModifyHdl( LINK( this, GraphicPropertyPanel, GammaHdl ) ); + mpMtrRed->SetAccessibleName(mpMtrRed->GetQuickHelpText()); //wj acc + mpMtrGreen->SetAccessibleName(mpMtrGreen->GetQuickHelpText()); //wj acc + mpMtrBlue->SetAccessibleName(mpMtrBlue->GetQuickHelpText()); //wj acc + mpMtrGamma->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Gamma value"))); //wj acc + + mpMtrRed->SetAccessibleRelationLabeledBy(mpMtrRed.get()); + mpMtrGreen->SetAccessibleRelationLabeledBy(mpMtrGreen.get()); + mpMtrBlue->SetAccessibleRelationLabeledBy(mpMtrBlue.get()); + mpMtrGamma->SetAccessibleRelationLabeledBy(mpMtrGamma.get()); + mpMtrBrightness->SetAccessibleRelationLabeledBy(mpFtBrightness.get()); //7874 + mpMtrContrast->SetAccessibleRelationLabeledBy(mpFtContrast.get()); //7874 + mpMtrTrans->SetAccessibleRelationLabeledBy(mpFtTrans.get()); //7874 + mpLBColorMode->SetAccessibleRelationLabeledBy(mpFtColorMode.get()); //7874 +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( GraphicPropertyPanel, ModifyBrightnessHdl, void *, EMPTYARG ) +{ + sal_Int16 nBright = mpMtrBrightness->GetValue(); + SfxInt16Item aBrightItem( SID_ATTR_GRAF_LUMINANCE, nBright ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_LUMINANCE, SFX_CALLMODE_RECORD, &aBrightItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( GraphicPropertyPanel, ModifyContrastHdl, void *, EMPTYARG ) +{ + sal_Int16 nContrast = mpMtrContrast->GetValue(); + SfxInt16Item aContrastItem( SID_ATTR_GRAF_CONTRAST, nContrast ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_CONTRAST, SFX_CALLMODE_RECORD, &aContrastItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( GraphicPropertyPanel, ModifyTransHdl, void *, EMPTYARG ) +{ + sal_Int16 nTrans = mpMtrTrans->GetValue(); + SfxInt16Item aTransItem( SID_ATTR_GRAF_TRANSPARENCE, nTrans ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_TRANSPARENCE, SFX_CALLMODE_RECORD, &aTransItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( GraphicPropertyPanel, ClickColorModeHdl, ToolBox *, pBox ) +{ + sal_Int16 nTrans = mpLBColorMode->GetSelectEntryPos(); + SfxInt16Item aTransItem( SID_ATTR_GRAF_MODE, nTrans ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_MODE, SFX_CALLMODE_RECORD, &aTransItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( GraphicPropertyPanel, RedHdl, void*, EMPTYARG ) +{ + sal_Int16 nRed = mpMtrRed->GetValue(); + SfxInt16Item aRedItem( SID_ATTR_GRAF_RED, nRed ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_RED, SFX_CALLMODE_RECORD, &aRedItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK( GraphicPropertyPanel, GreenHdl, void*, EMPTYARG ) +{ + sal_Int16 nGreen = mpMtrGreen->GetValue(); + SfxInt16Item aGreenItem( SID_ATTR_GRAF_GREEN, nGreen ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_GREEN, SFX_CALLMODE_RECORD, &aGreenItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(GraphicPropertyPanel, BlueHdl, void *, EMPTYARG) +{ + sal_Int16 nBlue = mpMtrBlue->GetValue(); + SfxInt16Item aBlueItem( SID_ATTR_GRAF_BLUE, nBlue ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_BLUE, SFX_CALLMODE_RECORD, &aBlueItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +IMPL_LINK(GraphicPropertyPanel, GammaHdl, void *, EMPTYARG) +{ + sal_Int32 nGamma = mpMtrGamma->GetValue(); + SfxInt32Item nGammaItem( SID_ATTR_GRAF_GAMMA, nGamma ); + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_GRAF_GAMMA, SFX_CALLMODE_RECORD, &nGammaItem, 0L); + return 0L; +} + +////////////////////////////////////////////////////////////////////////////// + +void GraphicPropertyPanel::SetupIcons(void) +{ + if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) + { + // todo + } + else + { + // todo + } +} + +////////////////////////////////////////////////////////////////////////////// + +GraphicPropertyPanel* GraphicPropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to GraphicPropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to GraphicPropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to GraphicPropertyPanel::Create"), NULL, 2); + + return new GraphicPropertyPanel( + pParent, + rxFrame, + pBindings); +} + +////////////////////////////////////////////////////////////////////////////// + +void GraphicPropertyPanel::DataChanged( + const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetupIcons(); +} + +////////////////////////////////////////////////////////////////////////////// + +void GraphicPropertyPanel::NotifyItemUpdate( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + switch( nSID ) + { + case SID_ATTR_GRAF_LUMINANCE: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpMtrBrightness->Enable(); + const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); + + if(pItem) + { + sal_Int64 nBright = pItem->GetValue(); + mpMtrBrightness->SetValue(nBright); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpMtrBrightness->Disable(); + else + { + mpMtrBrightness->Enable(); + mpMtrBrightness->SetText( String()); + } + break; + case SID_ATTR_GRAF_CONTRAST: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpMtrContrast->Enable(); + const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); + + if(pItem) + { + sal_Int64 nContrast = pItem->GetValue(); + mpMtrContrast->SetValue(nContrast); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpMtrContrast->Disable(); + else + { + mpMtrContrast->Enable(); + mpMtrContrast->SetText( String()); + } + break; + case SID_ATTR_GRAF_TRANSPARENCE: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpMtrTrans->Enable(); + const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState); + + if(pItem) + { + sal_Int64 nTrans = pItem->GetValue(); + mpMtrTrans->SetValue(nTrans); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpMtrTrans->Disable(); + else + { + mpMtrTrans->Enable(); + mpMtrTrans->SetText( String()); + } + break; + case SID_ATTR_GRAF_MODE: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpLBColorMode->Enable(); + const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState); + + if(pItem) + { + sal_Int64 nTrans = pItem->GetValue(); + mpLBColorMode->SelectEntryPos(nTrans); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpLBColorMode->Disable(); + else + { + mpLBColorMode->Enable(); + mpLBColorMode->SetNoSelection(); + } + break; + case SID_ATTR_GRAF_RED: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpMtrRed->Enable(); + const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); + + if(pItem) + { + sal_Int64 nRed = pItem->GetValue(); + mpMtrRed->SetValue( nRed ); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpMtrRed->Disable(); + else + { + mpMtrRed->Enable(); + mpMtrRed->SetText( String()); + } + break; + case SID_ATTR_GRAF_GREEN: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpMtrGreen->Enable(); + const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); + + if(pItem) + { + sal_Int64 nGreen = pItem->GetValue(); + mpMtrGreen->SetValue( nGreen ); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpMtrGreen->Disable(); + else + { + mpMtrGreen->Enable(); + mpMtrGreen->SetText( String()); + } + break; + case SID_ATTR_GRAF_BLUE: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpMtrBlue->Enable(); + const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); + + if(pItem) + { + sal_Int64 nBlue = pItem->GetValue(); + mpMtrBlue->SetValue( nBlue ); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpMtrBlue->Disable(); + else + { + mpMtrBlue->Enable(); + mpMtrBlue->SetText( String()); + } + break; + case SID_ATTR_GRAF_GAMMA: + if( eState >= SFX_ITEM_AVAILABLE) + { + mpMtrGamma->Enable(); + const SfxUInt32Item* pItem = dynamic_cast< const SfxUInt32Item* >(pState); + + if(pItem) + { + sal_Int64 nGamma = pItem->GetValue(); + mpMtrGamma->SetValue( nGamma ); + } + } + else if( eState == SFX_ITEM_DISABLED ) + mpMtrGamma->Disable(); + else + { + mpMtrGamma->Enable(); + mpMtrGamma->SetText( String()); + } + break; + } +} + +////////////////////////////////////////////////////////////////////////////// + +SfxBindings* GraphicPropertyPanel::GetBindings() +{ + return mpBindings; +} + +////////////////////////////////////////////////////////////////////////////// +// namespace close + +}} // end of namespace ::svx::sidebar + +////////////////////////////////////////////////////////////////////////////// +// eof diff --git a/svx/source/sidebar/graphic/GraphicPropertyPanel.hrc b/svx/source/sidebar/graphic/GraphicPropertyPanel.hrc new file mode 100644 index 000000000000..884fc245a26a --- /dev/null +++ b/svx/source/sidebar/graphic/GraphicPropertyPanel.hrc @@ -0,0 +1,82 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +// RID_SIDEBAR_GRAPHIC_PANEL-------------------------------------------------------------- +#define FT_BRIGHTNESS 1 +#define MTR_BRIGHTNESS 2 +#define FT_CONTRAST 3 +#define MTR_CONTRAST 4 +#define FT_TRANSPARENT 5 +#define MTR_TRANSPARENT 6 +#define FT_COLOR_MODE 10 +#define LB_COLOR_MODE 11 +#define MBOX_WIDTH 50 + +#define IMG_NORMAL 13 +#define IMG_BW 14 +#define IMG_GRAY 15 +#define IMG_WATER 16 +#define STR_NORMAL 17 +#define STR_BW 18 +#define STR_GRAY 19 +#define STR_WATER 20 +#define MF_RED 21 +#define MF_GREEN 22 +#define MF_BLUE 23 +#define MF_GAMMA 24 +#define IMG_RED 25 +#define IMG_GREEN 26 +#define IMG_BLUE 27 +#define IMG_GAMMA 28 + +//===========================location================================ + +#define FT_BRIGHTNESS_X SECTIONPAGE_MARGIN_HORIZONTAL +#define FT_BRIGHTNESS_Y SECTIONPAGE_MARGIN_VERTICAL_TOP +#define MTR_BRIGHTNESS_X FT_BRIGHTNESS_X +#define MTR_BRIGHTNESS_Y FT_BRIGHTNESS_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL +#define FT_CONTRAST_X FT_BRIGHTNESS_X + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL +#define FT_CONTRAST_Y FT_BRIGHTNESS_Y +#define MTR_CONTRAST_X FT_CONTRAST_X +#define MTR_CONTRAST_Y MTR_BRIGHTNESS_Y + +#define FT_COLOR_MODE_X FT_BRIGHTNESS_X +#define FT_COLOR_MODE_Y MTR_BRIGHTNESS_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define LBX_COLOR_MODE_X FT_COLOR_MODE_X +#define LBX_COLOR_MODE_Y FT_COLOR_MODE_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define FT_TRANSPARENT_X FT_CONTRAST_X +#define FT_TRANSPARENT_Y MTR_CONTRAST_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define MTR_TRANS_X FT_TRANSPARENT_X +#define MTR_TRANS_Y FT_TRANSPARENT_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define MF_RED_X SECTIONPAGE_MARGIN_HORIZONTAL +#define MF_RED_Y MTR_TRANS_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define MF_GREEN_X MF_RED_X + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL +#define MF_GREEN_Y MF_RED_Y +#define MF_BLUE_X MF_RED_X +#define MF_BLUE_Y MF_RED_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define MF_GAMMA_X MF_GREEN_X +#define MF_GAMMA_Y MF_BLUE_Y + +#define PAGE_HEIGHT MF_GAMMA_Y + MBOX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT + +// eof diff --git a/svx/source/sidebar/graphic/GraphicPropertyPanel.hxx b/svx/source/sidebar/graphic/GraphicPropertyPanel.hxx new file mode 100644 index 000000000000..26e68096a3b2 --- /dev/null +++ b/svx/source/sidebar/graphic/GraphicPropertyPanel.hxx @@ -0,0 +1,127 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_PROPERTYPANEL_GRAPHICPAGE_HXX +#define SVX_PROPERTYPANEL_GRAPHICPAGE_HXX + +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <vcl/fixed.hxx> +#include <boost/scoped_ptr.hpp> + +class FixedText; +class MetricField; +class ListBox; +class FloatingWindow; + + +namespace svx { namespace sidebar { + +class GraphicPropertyPanel +: public Control, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: + static GraphicPropertyPanel* Create( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + + virtual void DataChanged( + const DataChangedEvent& rEvent); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + SfxBindings* GetBindings(); + +private: + //ui controls + ::boost::scoped_ptr< FixedText > mpFtBrightness; + ::boost::scoped_ptr< MetricField > mpMtrBrightness; + ::boost::scoped_ptr< FixedText > mpFtContrast; + ::boost::scoped_ptr< MetricField > mpMtrContrast; + ::boost::scoped_ptr< FixedText > mpFtColorMode; + ::boost::scoped_ptr< ListBox > mpLBColorMode; + ::boost::scoped_ptr< FixedText > mpFtTrans; + ::boost::scoped_ptr< MetricField > mpMtrTrans; + ::boost::scoped_ptr< MetricField > mpMtrRed; + ::boost::scoped_ptr< MetricField > mpMtrGreen; + ::boost::scoped_ptr< MetricField > mpMtrBlue; + ::boost::scoped_ptr< MetricField > mpMtrGamma; + + ::sfx2::sidebar::ControllerItem maBrightControl; + ::sfx2::sidebar::ControllerItem maContrastControl; + ::sfx2::sidebar::ControllerItem maTransparenceControl; + ::sfx2::sidebar::ControllerItem maRedControl; + ::sfx2::sidebar::ControllerItem maGreenControl; + ::sfx2::sidebar::ControllerItem maBlueControl; + ::sfx2::sidebar::ControllerItem maGammaControl; + ::sfx2::sidebar::ControllerItem maModeControl; + + Image maImgNormal; + Image maImgBW; + Image maImgGray; + Image maImgWater; + + FixedImage maImgRed; + FixedImage maImgGreen; + FixedImage maImgBlue; + FixedImage maImgGamma; + + String msNormal; + String msBW; + String msGray; + String msWater; + + cssu::Reference<css::frame::XFrame> mxFrame; + SfxBindings* mpBindings; + + DECL_LINK( ModifyBrightnessHdl, void * ); + DECL_LINK( ModifyContrastHdl, void * ); + DECL_LINK( ModifyTransHdl, void * ); + DECL_LINK( ClickColorModeHdl, ToolBox * ); + DECL_LINK( ImplPopupModeEndHdl, FloatingWindow* ); + DECL_LINK( RedHdl, void*); + DECL_LINK( GreenHdl, void*); + DECL_LINK( BlueHdl, void*); + DECL_LINK( GammaHdl, void*); + + // constructor/destuctor + GraphicPropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + virtual ~GraphicPropertyPanel(); + + void SetupIcons(void); + void Initialize(); +}; + + +} } // end of namespace ::svx::sidebar + +#endif + +// eof diff --git a/svx/source/sidebar/graphic/GraphicPropertyPanel.src b/svx/source/sidebar/graphic/GraphicPropertyPanel.src new file mode 100644 index 000000000000..1071ec8d5f81 --- /dev/null +++ b/svx/source/sidebar/graphic/GraphicPropertyPanel.src @@ -0,0 +1,257 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "GraphicPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include "helpid.hrc" + +Control RID_SIDEBAR_GRAPHIC_PANEL +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, PAGE_HEIGHT ); + HelpID = HID_PROPERTYPANEL_GRAPHIC_SECTION ; + Text = "Graphic"; + + FixedText FT_BRIGHTNESS + { + Pos = MAP_APPFONT ( FT_BRIGHTNESS_X, FT_BRIGHTNESS_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Brightness:"; + }; + MetricField MTR_BRIGHTNESS + { + Border = TRUE ; + Pos = MAP_APPFONT ( MTR_BRIGHTNESS_X, MTR_BRIGHTNESS_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_BRIGHT; + QuickHelpText [ en-US ] = "Specify the luminance of the graphic."; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + Minimum = -100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + SpinSize = 1 ; + }; + FixedText FT_CONTRAST + { + Pos = MAP_APPFONT ( FT_CONTRAST_X, FT_CONTRAST_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, TEXT_HEIGHT ) ; + Text [ en-US ] = "~Contrast:"; + }; + MetricField MTR_CONTRAST + { + Border = TRUE ; + Pos = MAP_APPFONT ( MTR_CONTRAST_X, MTR_CONTRAST_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_CONTRAST; + QuickHelpText [ en-US ] = "Specify the degree of difference between the lightest and darkest parts of the graphic."; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + Minimum = -100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + SpinSize = 1 ; + }; + FixedText FT_COLOR_MODE + { + Pos = MAP_APPFONT ( FT_COLOR_MODE_X, FT_COLOR_MODE_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, TEXT_HEIGHT ) ; + Text [ en-US ] = "Color ~mode:"; + }; + ListBox LB_COLOR_MODE + { + Border = TRUE ; + Pos = MAP_APPFONT ( LBX_COLOR_MODE_X , LBX_COLOR_MODE_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH , 100 ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_LB_COLORMODE; + QuickHelpText [ en-US ] = "Select the color mode of the graphic."; + TabStop = TRUE ; + DropDown = TRUE ; + }; + FixedText FT_TRANSPARENT + { + Pos = MAP_APPFONT ( FT_TRANSPARENT_X, FT_TRANSPARENT_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Transparency:"; + }; + MetricField MTR_TRANSPARENT + { + Border = TRUE ; + Pos = MAP_APPFONT ( MTR_TRANS_X, MTR_TRANS_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH ,MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_TRANSP; + QuickHelpText [ en-US ] = "Specify the percentage of transparency; 0% is fully opaque and 100% is fully transparent."; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + SpinSize = 1 ; + }; + MetricField MF_RED + { + Border = TRUE ; + Pos = MAP_APPFONT ( MF_RED_X + 10, MF_RED_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH - 10,MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_RED; + QuickHelpText [ en-US ] = "Red"; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + Minimum = -100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + SpinSize = 1 ; + }; + MetricField MF_GREEN + { + Border = TRUE ; + Pos = MAP_APPFONT ( MF_GREEN_X + 10, MF_GREEN_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH - 10 ,MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_GREEN; + QuickHelpText [ en-US ] = "Green"; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + Minimum = -100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + SpinSize = 1 ; + }; + MetricField MF_BLUE + { + Border = TRUE ; + Pos = MAP_APPFONT ( MF_BLUE_X + 10, MF_BLUE_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH - 10 ,MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_BLUE; + QuickHelpText [ en-US ] = "Blue"; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + Minimum = -100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + SpinSize = 1 ; + }; + MetricField MF_GAMMA + { + Border = TRUE ; + Pos = MAP_APPFONT ( MF_GAMMA_X + 10, MF_GAMMA_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH - 10 ,MBOX_HEIGHT ) ; + HelpID = HID_PROPERTY_PANEL_GRAPHIC_MTR_GAMMA; + QuickHelpText [ en-US ] = "Specify the gamma value that affects the brightness of the midtone values."; + TabStop = TRUE; + Repeat = TRUE; + Spin = TRUE; + Minimum = 10; + Maximum = 1000; + DecimalDigits = 2; + SpinSize = 10; + }; + Image IMG_NORMAL + { + ImageBitmap = Bitmap{File = "symphony/ColorModeNormal_16x16.png";}; + }; + Image IMG_BW + { + ImageBitmap = Bitmap{File = "symphony/ColorModeBlackWhite_16x16.png";}; + }; + Image IMG_GRAY + { + ImageBitmap = Bitmap{File = "symphony/ColorModeGrey_16x16.png";}; + }; + Image IMG_WATER + { + ImageBitmap = Bitmap{File = "symphony/ColorModeWaterMark_16x16.png";}; + }; + FixedImage IMG_RED + { + Pos = MAP_APPFONT( MF_RED_X, MF_RED_Y ); + Size = MAP_APPFONT( 10, 12 ); + Fixed = Image + { + ImageBitmap = Bitmap { File = "symphony/AdjustColorRed_16x16.png"; }; + }; + }; + FixedImage IMG_GREEN + { + Pos = MAP_APPFONT( MF_GREEN_X, MF_GREEN_Y ); + Size = MAP_APPFONT( 10, 12 ); + Fixed = Image + { + ImageBitmap = Bitmap { File = "symphony/AdjustColorGreen_16x16.png"; }; + }; + }; + FixedImage IMG_BLUE + { + Pos = MAP_APPFONT( MF_BLUE_X, MF_BLUE_Y ); + Size = MAP_APPFONT( 10, 12 ); + Fixed = Image + { + ImageBitmap = Bitmap { File = "symphony/AdjustColorBlue_16x16.png"; }; + }; + }; + FixedImage IMG_GAMMA + { + Pos = MAP_APPFONT( MF_GAMMA_X, MF_GAMMA_Y ); + Size = MAP_APPFONT( 10, 12 ); + Fixed = Image + { + ImageBitmap = Bitmap { File = "symphony/AdjustColorGamma_16x16.png"; }; + }; + }; + String STR_NORMAL + { + Text [ en-US ] = "Normal"; + }; + String STR_BW + { + Text [ en-US ] = "Black/White"; + }; + String STR_GRAY + { + Text [ en-US ] = "Grayscale"; + }; + String STR_WATER + { + Text [ en-US ] = "Watermark"; + }; +}; + +// eof diff --git a/svx/source/sidebar/line/LinePropertyPanel.cxx b/svx/source/sidebar/line/LinePropertyPanel.cxx new file mode 100644 index 000000000000..52b3c5f062a2 --- /dev/null +++ b/svx/source/sidebar/line/LinePropertyPanel.cxx @@ -0,0 +1,1161 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <LinePropertyPanel.hxx> +#include <LinePropertyPanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <sfx2/objsh.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <svx/xlnclit.hxx> +#include <svx/xtable.hxx> +#include <svx/xdash.hxx> +#include <svx/drawitem.hxx> +#include <svx/svxitems.hrc> +#include <svtools/valueset.hxx> +#include <unotools/pathoptions.hxx> +#include <unotools/viewoptions.hxx> +#include <comphelper/processfactory.hxx> +#include <i18npool/mslangid.hxx> +#include <svx/xlineit0.hxx> +#include <svx/xlndsit.hxx> +#include <vcl/svapp.hxx> +#include <svx/xlnwtit.hxx> +#include <vcl/lstbox.hxx> +#include <svx/tbxcolorupdate.hxx> +#include <vcl/toolbox.hxx> +#include <svx/xlntrit.hxx> +#include <svx/xlnstit.hxx> +#include <svx/xlnedit.hxx> +#include <svx/xlncapit.hxx> +#include <svx/xlinjoit.hxx> +#include "svx/sidebar/PopupContainer.hxx" +#include "svx/sidebar/PopupControl.hxx" +#include <svx/sidebar/ColorControl.hxx> +#include "LineWidthControl.hxx" +#include <boost/bind.hpp> + +using namespace css; +using namespace cssu; +using ::sfx2::sidebar::Theme; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +namespace { + short GetItemId_Impl_line( ValueSet& rValueSet, const Color& rCol ) + { + if(rCol == COL_AUTO) + return 0; + + bool bFound = false; + sal_uInt16 nCount = rValueSet.GetItemCount(); + sal_uInt16 n = 1; + + while ( !bFound && n <= nCount ) + { + Color aValCol = rValueSet.GetItemColor(n); + + bFound = ( aValCol.GetRed() == rCol.GetRed() + && aValCol.GetGreen() == rCol.GetGreen() + && aValCol.GetBlue() == rCol.GetBlue() ); + + if ( !bFound ) + n++; + } + return bFound ? n : -1; + } + + Color GetTransparentColor (void) + { + return COL_TRANSPARENT; + } + + void FillLineEndListBox(ListBox& rListBoxStart, ListBox& rListBoxEnd, const XLineEndList& rList) + { + const sal_uInt32 nCount(rList.Count()); + const String sNone(SVX_RES(RID_SVXSTR_NONE)); + + rListBoxStart.SetUpdateMode(false); + rListBoxEnd.SetUpdateMode(false); + + rListBoxStart.Clear(); + rListBoxEnd.Clear(); + + // add 'none' entries + rListBoxStart.InsertEntry(sNone); + rListBoxEnd.InsertEntry(sNone); + + for(sal_uInt32 i(0); i < nCount; i++) + { + XLineEndEntry* pEntry = rList.GetLineEnd(i); + const Bitmap aBitmap = const_cast< XLineEndList& >(rList).GetUiBitmap(i); + + if(!aBitmap.IsEmpty()) + { + Bitmap aCopyStart(aBitmap); + Bitmap aCopyEnd(aBitmap); + // delete pBitmap; + const Size aBmpSize(aCopyStart.GetSizePixel()); + const Rectangle aCropRectStart(Point(), Size(aBmpSize.Width() / 2, aBmpSize.Height())); + const Rectangle aCropRectEnd(Point(aBmpSize.Width() / 2, 0), Size(aBmpSize.Width() / 2, aBmpSize.Height())); + + aCopyStart.Crop(aCropRectStart); + rListBoxStart.InsertEntry( + pEntry->GetName(), + aCopyStart); + + aCopyEnd.Crop(aCropRectEnd); + rListBoxEnd.InsertEntry( + pEntry->GetName(), + aCopyEnd); + } + else + { + rListBoxStart.InsertEntry(pEntry->GetName()); + rListBoxEnd.InsertEntry(pEntry->GetName()); + } + } + + rListBoxStart.SetUpdateMode(true); + rListBoxEnd.SetUpdateMode(true); + } + + void FillLineStyleListBox(ListBox& rListBox, const XDashList& rList) + { + const sal_uInt32 nCount(rList.Count()); + rListBox.SetUpdateMode(false); + + rListBox.Clear(); + + // entry for 'none' + rListBox.InsertEntry(rList.GetStringForUiNoLine()); + + // entry for solid line + rListBox.InsertEntry(rList.GetStringForUiSolidLine(), rList.GetBitmapForUISolidLine()); + + for(sal_uInt32 i(0); i < nCount; i++) + { + XDashEntry* pEntry = rList.GetDash(i); + const Bitmap aBitmap = const_cast< XDashList& >(rList).GetUiBitmap(i); + + if(!aBitmap.IsEmpty()) + { + rListBox.InsertEntry( + pEntry->GetName(), + aBitmap); + // delete pBitmap; + } + else + { + rListBox.InsertEntry(pEntry->GetName()); + } + } + + rListBox.SetUpdateMode(true); + } +} // end of anonymous namespace + +// namespace open + +namespace svx { namespace sidebar { + +LinePropertyPanel::LinePropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +: Control( + pParent, + SVX_RES(RID_SIDEBAR_LINE_PANEL)), + mpFTWidth(new FixedText(this, SVX_RES(FT_WIDTH))), + mpTBWidthBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpTBWidth(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBWidthBackground.get(), SVX_RES(TB_WIDTH))), + mpFTColor(new FixedText(this, SVX_RES(FT_COLOR))), + mpTBColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpTBColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBColorBackground.get(), SVX_RES(TB_COLOR))), + mpFTStyle(new FixedText(this, SVX_RES(FT_STYLE))), + mpLBStyle(new ListBox(this, SVX_RES(LB_STYLE))), + mpFTTrancparency(new FixedText(this, SVX_RES(FT_TRANSPARENT))), + mpMFTransparent(new MetricField(this, SVX_RES(MF_TRANSPARENT))), + mpFTArrow(new FixedText(this, SVX_RES(FT_ARROW))), + mpLBStart(new ListBox(this, SVX_RES(LB_START))), + mpLBEnd(new ListBox(this, SVX_RES(LB_END))), + mpFTEdgeStyle(new FixedText(this, SVX_RES(FT_EDGESTYLE))), + mpLBEdgeStyle(new ListBox(this, SVX_RES(LB_EDGESTYLE))), + mpFTCapStyle(new FixedText(this, SVX_RES(FT_CAPSTYLE))), + mpLBCapStyle(new ListBox(this, SVX_RES(LB_CAPSTYLE))), + maStyleControl(SID_ATTR_LINE_STYLE, *pBindings, *this), + maDashControl (SID_ATTR_LINE_DASH, *pBindings, *this), + maWidthControl(SID_ATTR_LINE_WIDTH, *pBindings, *this), + maColorControl(SID_ATTR_LINE_COLOR, *pBindings, *this), + maStartControl(SID_ATTR_LINE_START, *pBindings, *this), + maEndControl(SID_ATTR_LINE_END, *pBindings, *this), + maLineEndListControl(SID_LINEEND_LIST, *pBindings, *this), + maLineStyleListControl(SID_DASH_LIST, *pBindings, *this), + maTransControl(SID_ATTR_LINE_TRANSPARENCE, *pBindings, *this), + maEdgeStyle(SID_ATTR_LINE_JOINT, *pBindings, *this), + maCapStyle(SID_ATTR_LINE_CAP, *pBindings, *this), + maColor(COL_BLACK), + mpColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_LINE_COLOR, TBI_COLOR, mpTBColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)), + mpStyleItem(), + mpDashItem(), + mnTrans(0), + meMapUnit(SFX_MAPUNIT_MM), + mnWidthCoreValue(0), + mpLineEndList(0), + mpLineStyleList(0), + mpStartItem(0), + mpEndItem(0), + maColorPopup(this, ::boost::bind(&LinePropertyPanel::CreateColorPopupControl, this, _1)), + maLineWidthPopup(this, ::boost::bind(&LinePropertyPanel::CreateLineWidthPopupControl, this, _1)), + maIMGColor(SVX_RES(IMG_COLOR)), + maIMGNone(SVX_RES(IMG_NONE_ICON)), + mpIMGWidthIcon(), + mpIMGWidthIconH(), + mxFrame(rxFrame), + mpBindings(pBindings), + mbColorAvailable(true), + mbStyleAvailable(false), + mbDashAvailable(false), + mbTransAvailable(true), + mbWidthValuable(true), + mbStartAvailable(true), + mbEndAvailable(true) +{ + Initialize(); + FreeResource(); +} + + + +LinePropertyPanel::~LinePropertyPanel() +{ + // Destroy the toolboxes, then their background windows. + mpTBWidth.reset(); + mpTBColor.reset(); + + mpTBWidthBackground.reset(); + mpTBColorBackground.reset(); +} + + + +void LinePropertyPanel::Initialize() +{ + mpFTWidth->SetBackground(Wallpaper()); + mpFTColor->SetBackground(Wallpaper()); + mpFTStyle->SetBackground(Wallpaper()); + mpFTTrancparency->SetBackground(Wallpaper()); + mpFTArrow->SetBackground(Wallpaper()); + mpFTEdgeStyle->SetBackground(Wallpaper()); + mpFTCapStyle->SetBackground(Wallpaper()); + + mpIMGWidthIcon.reset(new Image[8]); + mpIMGWidthIcon[0] = Image(SVX_RES(IMG_WIDTH1_ICON)); + mpIMGWidthIcon[1] = Image(SVX_RES(IMG_WIDTH2_ICON)); + mpIMGWidthIcon[2] = Image(SVX_RES(IMG_WIDTH3_ICON)); + mpIMGWidthIcon[3] = Image(SVX_RES(IMG_WIDTH4_ICON)); + mpIMGWidthIcon[4] = Image(SVX_RES(IMG_WIDTH5_ICON)); + mpIMGWidthIcon[5] = Image(SVX_RES(IMG_WIDTH6_ICON)); + mpIMGWidthIcon[6] = Image(SVX_RES(IMG_WIDTH7_ICON)); + mpIMGWidthIcon[7] = Image(SVX_RES(IMG_WIDTH8_ICON)); + + //high contrast + mpIMGWidthIconH.reset(new Image[8]); + mpIMGWidthIconH[0] = Image(SVX_RES(IMG_WIDTH1_ICON_H)); + mpIMGWidthIconH[1] = Image(SVX_RES(IMG_WIDTH2_ICON_H)); + mpIMGWidthIconH[2] = Image(SVX_RES(IMG_WIDTH3_ICON_H)); + mpIMGWidthIconH[3] = Image(SVX_RES(IMG_WIDTH4_ICON_H)); + mpIMGWidthIconH[4] = Image(SVX_RES(IMG_WIDTH5_ICON_H)); + mpIMGWidthIconH[5] = Image(SVX_RES(IMG_WIDTH6_ICON_H)); + mpIMGWidthIconH[6] = Image(SVX_RES(IMG_WIDTH7_ICON_H)); + mpIMGWidthIconH[7] = Image(SVX_RES(IMG_WIDTH8_ICON_H)); + + meMapUnit = maWidthControl.GetCoreMetric(); + + mpTBColor->SetItemImage(TBI_COLOR, maIMGColor); + Size aTbxSize( mpTBColor->CalcWindowSizePixel() ); + mpTBColor->SetOutputSizePixel( aTbxSize ); + mpTBColor->SetItemBits( TBI_COLOR, mpTBColor->GetItemBits( TBI_COLOR ) | TIB_DROPDOWNONLY ); + mpTBColor->SetQuickHelpText(TBI_COLOR,String(SVX_RES(STR_QH_TB_COLOR))); //Add + mpTBColor->SetBackground(Wallpaper()); + mpTBColor->SetPaintTransparent(true); + Link aLink = LINK(this, LinePropertyPanel, ToolboxColorSelectHdl); + mpTBColor->SetDropdownClickHdl ( aLink ); + mpTBColor->SetSelectHdl ( aLink ); + + FillLineStyleList(); + SelectLineStyle(); + aLink = LINK( this, LinePropertyPanel, ChangeLineStyleHdl ); + mpLBStyle->SetSelectHdl( aLink ); + mpLBStyle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Style"))); + mpLBStyle->SetDropDownLineCount(std::min(sal_uInt16(20), mpLBStyle->GetEntryCount())); + + mpTBWidth->SetItemImage(TBI_WIDTH, mpIMGWidthIcon[0]); + aTbxSize = mpTBWidth->CalcWindowSizePixel() ; + mpTBWidth->SetOutputSizePixel( aTbxSize ); + mpTBWidth->SetItemBits( TBI_WIDTH, mpTBWidth->GetItemBits( TBI_WIDTH ) | TIB_DROPDOWNONLY ); + mpTBWidth->SetQuickHelpText(TBI_WIDTH,String(SVX_RES(STR_QH_TB_WIDTH))); //Add + mpTBWidth->SetBackground(Wallpaper()); + mpTBWidth->SetPaintTransparent(true); + aLink = LINK(this, LinePropertyPanel, ToolboxWidthSelectHdl); + mpTBWidth->SetDropdownClickHdl ( aLink ); + mpTBWidth->SetSelectHdl ( aLink ); + + FillLineEndList(); + SelectEndStyle(true); + SelectEndStyle(false); + aLink = LINK( this, LinePropertyPanel, ChangeStartHdl ); + mpLBStart->SetSelectHdl( aLink ); + mpLBStart->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Beginning Style"))); //wj acc + mpLBStart->SetDropDownLineCount(std::min(sal_uInt16(20), mpLBStart->GetEntryCount())); + aLink = LINK( this, LinePropertyPanel, ChangeEndHdl ); + mpLBEnd->SetSelectHdl( aLink ); + mpLBEnd->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Ending Style"))); //wj acc + mpLBEnd->SetDropDownLineCount(std::min(sal_uInt16(20), mpLBEnd->GetEntryCount())); + + aLink = LINK(this, LinePropertyPanel, ChangeTransparentHdl); + mpMFTransparent->SetModifyHdl(aLink); + mpMFTransparent->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); //wj acc + + mpTBWidth->SetAccessibleRelationLabeledBy(mpFTWidth.get()); + mpTBColor->SetAccessibleRelationLabeledBy(mpFTColor.get()); + mpLBStyle->SetAccessibleRelationLabeledBy(mpFTStyle.get()); + mpMFTransparent->SetAccessibleRelationLabeledBy(mpFTTrancparency.get()); + mpLBStart->SetAccessibleRelationLabeledBy(mpFTArrow.get()); + mpLBEnd->SetAccessibleRelationLabeledBy(mpLBEnd.get()); + + aLink = LINK( this, LinePropertyPanel, ChangeEdgeStyleHdl ); + mpLBEdgeStyle->SetSelectHdl( aLink ); + mpLBEdgeStyle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Corner Style"))); + + aLink = LINK( this, LinePropertyPanel, ChangeCapStyleHdl ); + mpLBCapStyle->SetSelectHdl( aLink ); + mpLBCapStyle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Cap Style"))); +} + + + +void LinePropertyPanel::SetupIcons(void) +{ + if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) + { + // todo + } + else + { + // todo + } +} + + + +LinePropertyPanel* LinePropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to LinePropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to LinePropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to LinePropertyPanel::Create"), NULL, 2); + + return new LinePropertyPanel( + pParent, + rxFrame, + pBindings); +} + + + + +void LinePropertyPanel::DataChanged( + const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetupIcons(); +} + + + + +void LinePropertyPanel::NotifyItemUpdate( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + switch(nSID) + { + case SID_ATTR_LINE_COLOR: + { + if( eState == SFX_ITEM_DISABLED) + { + mpFTColor->Disable(); + mpTBColor->Disable(); + mbColorAvailable = false; + mpColorUpdater->Update(COL_WHITE); + } + else + { + mpFTColor->Enable(); + mpTBColor->Enable(); + const XLineColorItem* pItem = dynamic_cast< const XLineColorItem* >(pState); + + if(eState >= SFX_ITEM_DEFAULT && pItem) + { + maColor = pItem->GetColorValue(); + mbColorAvailable = true; + mpColorUpdater->Update(maColor); + } + else + { + mbColorAvailable = false; + mpColorUpdater->Update(COL_WHITE); + } + } + break; + } + case SID_ATTR_LINE_DASH: + case SID_ATTR_LINE_STYLE: + { + if( eState == SFX_ITEM_DISABLED) + { + mpFTStyle->Disable(); + mpLBStyle->Disable(); + } + else + { + mpFTStyle->Enable(); + mpLBStyle->Enable(); + if( eState >= SFX_ITEM_DEFAULT ) + { + if(nSID == SID_ATTR_LINE_STYLE) + { + const XLineStyleItem* pItem = dynamic_cast< const XLineStyleItem* >(pState); + + if(pItem) + { + mbStyleAvailable =true; + mpStyleItem.reset(pState ? (XLineStyleItem*)pItem->Clone() : 0); + } + } + else if(nSID == SID_ATTR_LINE_DASH) + { + const XLineDashItem* pItem = dynamic_cast< const XLineDashItem* >(pState); + + if(pItem) + { + mbDashAvailable = true; + mpDashItem.reset(pState ? (XLineDashItem*)pItem->Clone() : 0); + } + } + } + else + { + if(nSID == SID_ATTR_LINE_STYLE) + mbStyleAvailable = false; + else + mbDashAvailable = false; + } + + SelectLineStyle(); + } + break; + } + case SID_ATTR_LINE_TRANSPARENCE: + { + if( eState == SFX_ITEM_DISABLED ) + { + mpFTTrancparency->Disable(); + mpMFTransparent->Disable(); + mpMFTransparent->SetValue(0);//add + mpMFTransparent->SetText(String()); + mbTransAvailable = false; + } + else + { + mpFTTrancparency->Enable(); + mpMFTransparent->Enable(); + mbTransAvailable = true; + const XLineTransparenceItem* pItem = dynamic_cast< const XLineTransparenceItem* >(pState); + + if(eState != SFX_ITEM_DONTCARE && pItem) + { + mnTrans = pItem->GetValue(); + mpMFTransparent->SetValue(mnTrans); + } + else + { + mpMFTransparent->SetValue(0);//add + mpMFTransparent->SetText(String()); + } + } + break; + } + case SID_ATTR_LINE_WIDTH: + { + if(eState == SFX_ITEM_DISABLED) + { + mpTBWidth->Disable(); + mpFTWidth->Disable(); + } + else + { + //enable + mpTBWidth->Enable(); + mpFTWidth->Enable(); + const XLineWidthItem* pItem = dynamic_cast< const XLineWidthItem* >(pState); + + if(eState >= SFX_ITEM_AVAILABLE && pItem) + { + mnWidthCoreValue = pItem->GetValue(); + mbWidthValuable = true; + } + else + { + mbWidthValuable = false; + } + } + SetWidthIcon(); + break; + } + case SID_ATTR_LINE_START: + { + mpFTArrow->Enable(); + mpLBStart->Enable(); + + if(eState != SFX_ITEM_DONTCARE) + { + const XLineStartItem* pItem = dynamic_cast< const XLineStartItem* >(pState); + + if(pItem) + { + mbStartAvailable = true; //add + mpStartItem.reset(pItem ? (XLineStartItem*)pItem->Clone() : 0); + SelectEndStyle(true); + break; + } + } + + mpLBStart->SetNoSelection(); + mbStartAvailable = false; //add + break; + } + case SID_ATTR_LINE_END: + { + mpFTArrow->Enable(); + mpLBEnd->Enable(); + + if(eState != SFX_ITEM_DONTCARE) + { + const XLineEndItem* pItem = dynamic_cast< const XLineEndItem* >(pState); + + if(pItem) + { + mbEndAvailable = true; //add + mpEndItem.reset(pItem ? (XLineEndItem*)pItem->Clone() : 0); + SelectEndStyle(false); + break; + } + } + + mpLBEnd->SetNoSelection(); + mbEndAvailable = false; //add + break; + } + case SID_LINEEND_LIST: + { + FillLineEndList(); + SelectEndStyle(true); + SelectEndStyle(false); + break; + } + case SID_DASH_LIST: + { + FillLineStyleList(); + SelectLineStyle(); + break; + } + case SID_ATTR_LINE_JOINT: + { + if(eState == SFX_ITEM_DISABLED) + { + mpLBEdgeStyle->Disable(); + } + else + { + mpLBEdgeStyle->Enable(); + const XLineJointItem* pItem = dynamic_cast< const XLineJointItem* >(pState); + sal_uInt16 nEntryPos(0); + + if(eState >= SFX_ITEM_AVAILABLE && pItem) + { + switch(pItem->GetValue()) + { + case com::sun::star::drawing::LineJoint_MIDDLE: + case com::sun::star::drawing::LineJoint_ROUND: + { + nEntryPos = 1; + break; + } + case com::sun::star::drawing::LineJoint_NONE: + { + nEntryPos = 2; + break; + } + case com::sun::star::drawing::LineJoint_MITER: + { + nEntryPos = 3; + break; + } + case com::sun::star::drawing::LineJoint_BEVEL: + { + nEntryPos = 4; + break; + } + + default: + break; + } + } + + if(nEntryPos) + { + mpLBEdgeStyle->SelectEntryPos(nEntryPos - 1); + } + else + { + mpLBEdgeStyle->SetNoSelection(); + } + } + break; + } + case SID_ATTR_LINE_CAP: + { + if(eState == SFX_ITEM_DISABLED) + { + mpLBCapStyle->Disable(); + } + else + { + mpLBCapStyle->Enable(); + const XLineCapItem* pItem = dynamic_cast< const XLineCapItem* >(pState); + sal_uInt16 nEntryPos(0); + + if(eState >= SFX_ITEM_AVAILABLE && pItem) + { + switch(pItem->GetValue()) + { + case com::sun::star::drawing::LineCap_BUTT: + { + nEntryPos = 1; + break; + } + case com::sun::star::drawing::LineCap_ROUND: + { + nEntryPos = 2; + break; + } + case com::sun::star::drawing::LineCap_SQUARE: + { + nEntryPos = 3; + break; + } + + default: + break; + } + } + + if(nEntryPos) + { + mpLBCapStyle->SelectEntryPos(nEntryPos - 1); + } + else + { + mpLBCapStyle->SetNoSelection(); + } + } + break; + } + } +} + + + +SfxBindings* LinePropertyPanel::GetBindings() +{ + return mpBindings; +} + + + +IMPL_LINK( LinePropertyPanel, ImplPopupModeEndHdl, FloatingWindow*, EMPTYARG ) +{ + return 0; +} + + + + +IMPL_LINK(LinePropertyPanel, ToolboxColorSelectHdl,ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + if(nId == TBI_COLOR) + { + maColorPopup.Show(*pToolBox); + maColorPopup.SetCurrentColor(maColor, mbColorAvailable); + } + return 0; +} + + + + +IMPL_LINK(LinePropertyPanel, ChangeLineStyleHdl, ToolBox*, pToolBox) +{ + const sal_uInt16 nPos(mpLBStyle->GetSelectEntryPos()); + + if(LISTBOX_ENTRY_NOTFOUND != nPos && nPos != mpLBStyle->GetSavedValue()) + { + if(0 == nPos) + { + // XLINE_NONE + const XLineStyleItem aItem(XLINE_NONE); + + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SFX_CALLMODE_RECORD, &aItem, 0L); + } + else if(1 == nPos) + { + // XLINE_SOLID + const XLineStyleItem aItem(XLINE_SOLID); + + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SFX_CALLMODE_RECORD, &aItem, 0L); + } + else if(mpLineStyleList && mpLineStyleList->Count() > (long)(nPos - 2)) + { + // XLINE_DASH + const XLineStyleItem aItemA(XLINE_DASH); + const XLineDashItem aItemB(mpLBStyle->GetSelectEntry(), mpLineStyleList->GetDash(nPos - 2)->GetDash()); + + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SFX_CALLMODE_RECORD, &aItemA, 0L); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_DASH, SFX_CALLMODE_RECORD, &aItemB, 0L); + } + } + + return 0; +} + + + +IMPL_LINK(LinePropertyPanel, ChangeStartHdl, void*, EMPTYARG) +{ + sal_uInt16 nPos = mpLBStart->GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND && nPos != mpLBStart->GetSavedValue() ) + { + XLineStartItem* pItem = NULL; + if( nPos == 0 ) + pItem = new XLineStartItem(); + else if( mpLineEndList && mpLineEndList->Count() > (long) ( nPos - 1 ) ) + pItem = new XLineStartItem( mpLBStart->GetSelectEntry(),mpLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SFX_CALLMODE_RECORD, pItem, 0L); + delete pItem; + } + return 0; +} + + + + +IMPL_LINK(LinePropertyPanel, ChangeEndHdl, void*, EMPTYARG) +{ + sal_uInt16 nPos = mpLBEnd->GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND && nPos != mpLBEnd->GetSavedValue() ) + { + XLineEndItem* pItem = NULL; + if( nPos == 0 ) + pItem = new XLineEndItem(); + else if( mpLineEndList && mpLineEndList->Count() > (long) ( nPos - 1 ) ) + pItem = new XLineEndItem( mpLBEnd->GetSelectEntry(), mpLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SFX_CALLMODE_RECORD, pItem, 0L); + delete pItem; + } + return 0; +} + + + + +IMPL_LINK(LinePropertyPanel, ChangeEdgeStyleHdl, void*, EMPTYARG) +{ + const sal_uInt16 nPos(mpLBEdgeStyle->GetSelectEntryPos()); + + if(LISTBOX_ENTRY_NOTFOUND != nPos && nPos != mpLBEdgeStyle->GetSavedValue()) + { + XLineJointItem* pItem = 0; + + switch(nPos) + { + case 0: // rounded + { + pItem = new XLineJointItem(com::sun::star::drawing::LineJoint_ROUND); + break; + } + case 1: // none + { + pItem = new XLineJointItem(com::sun::star::drawing::LineJoint_NONE); + break; + } + case 2: // mitered + { + pItem = new XLineJointItem(com::sun::star::drawing::LineJoint_MITER); + break; + } + case 3: // beveled + { + pItem = new XLineJointItem(com::sun::star::drawing::LineJoint_BEVEL); + break; + } + } + + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_JOINT, SFX_CALLMODE_RECORD, pItem, 0L); + delete pItem; + } + return 0; +} + + + + +IMPL_LINK(LinePropertyPanel, ChangeCapStyleHdl, void*, EMPTYARG) +{ + const sal_uInt16 nPos(mpLBCapStyle->GetSelectEntryPos()); + + if(LISTBOX_ENTRY_NOTFOUND != nPos && nPos != mpLBCapStyle->GetSavedValue()) + { + XLineCapItem* pItem = 0; + + switch(nPos) + { + case 0: // flat + { + pItem = new XLineCapItem(com::sun::star::drawing::LineCap_BUTT); + break; + } + case 1: // round + { + pItem = new XLineCapItem(com::sun::star::drawing::LineCap_ROUND); + break; + } + case 2: // square + { + pItem = new XLineCapItem(com::sun::star::drawing::LineCap_SQUARE); + break; + } + } + + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_CAP, SFX_CALLMODE_RECORD, pItem, 0L); + delete pItem; + } + return 0; +} + + + + +IMPL_LINK(LinePropertyPanel, ToolboxWidthSelectHdl,ToolBox*, pToolBox) +{ + if (pToolBox->GetCurItemId() == TBI_WIDTH) + { + maLineWidthPopup.SetWidthSelect(mnWidthCoreValue, mbWidthValuable, meMapUnit); + maLineWidthPopup.Show(*pToolBox); + } + return 0; +} + + + + +IMPL_LINK( LinePropertyPanel, ChangeTransparentHdl, void *, EMPTYARG ) +{ + sal_uInt16 nVal = (sal_uInt16)mpMFTransparent->GetValue(); + XLineTransparenceItem aItem( nVal ); + + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SFX_CALLMODE_RECORD, &aItem, 0L); + return( 0L ); +} + + + + +PopupControl* LinePropertyPanel::CreateColorPopupControl (PopupContainer* pParent) +{ + const ResId aResId(SVX_RES(STR_AUTOMATICE)); + + return new ColorControl( + pParent, + mpBindings, + SVX_RES(RID_POPUPPANEL_LINEPAGE_COLOR), + SVX_RES(VS_COLOR), + ::boost::bind(GetTransparentColor), + ::boost::bind(&LinePropertyPanel::SetColor, this, _1, _2), + pParent, + &aResId); +} + + + + +PopupControl* LinePropertyPanel::CreateLineWidthPopupControl (PopupContainer* pParent) +{ + return new LineWidthControl(pParent, *this); +} + + + + +void LinePropertyPanel::EndLineWidthPopupMode (void) +{ + maLineWidthPopup.Hide(); +} + + + + +void LinePropertyPanel::SetWidthIcon(int n) +{ + if(n==0) + mpTBWidth->SetItemImage( TBI_WIDTH, maIMGNone); + else + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[n-1] : mpIMGWidthIcon[n-1]); +} + + + +void LinePropertyPanel::SetWidthIcon() +{ + if(!mbWidthValuable) + { + mpTBWidth->SetItemImage( TBI_WIDTH, maIMGNone); + return; + } + + long nVal = LogicToLogic(mnWidthCoreValue * 10,(MapUnit)meMapUnit , MAP_POINT); + + if(nVal <= 6) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[0] : mpIMGWidthIcon[0]); + else if(nVal > 6 && nVal <= 9) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[1] : mpIMGWidthIcon[1]); + else if(nVal > 9 && nVal <= 12) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[2] : mpIMGWidthIcon[2]); + else if(nVal > 12 && nVal <= 19) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[3] : mpIMGWidthIcon[3]); + else if(nVal > 19 && nVal <= 26) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[4] : mpIMGWidthIcon[4]); + else if(nVal > 26 && nVal <= 37) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[5] : mpIMGWidthIcon[5]); + else if(nVal > 37 && nVal <=52) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[6] : mpIMGWidthIcon[6]); + else if(nVal > 52) + mpTBWidth->SetItemImage( TBI_WIDTH, GetDisplayBackground().GetColor().IsDark() ? mpIMGWidthIconH[7] : mpIMGWidthIcon[7]); + +} + + + +void LinePropertyPanel::SetColor ( + const String& rsColorName, + const Color aColor) +{ + XLineColorItem aColorItem(rsColorName, aColor); + mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L); + maColor = aColor; +} + + + +void LinePropertyPanel::SetWidth(long nWidth) +{ + mnWidthCoreValue = nWidth; + mbWidthValuable = true; +} + + + +void LinePropertyPanel::FillLineEndList() +{ + SfxObjectShell* pSh = SfxObjectShell::Current(); + if ( pSh && pSh->GetItem( SID_LINEEND_LIST ) ) + { + mpLBStart->Enable(); + SvxLineEndListItem aItem( *(const SvxLineEndListItem*)(pSh->GetItem( SID_LINEEND_LIST ) ) ); + mpLineEndList = aItem.GetLineEndList(); + + if(mpLineEndList) + { + FillLineEndListBox(*mpLBStart, *mpLBEnd, *mpLineEndList); + } + + mpLBStart->SelectEntryPos(0); + mpLBEnd->SelectEntryPos(0); + } + else + { + mpLBStart->Disable(); + mpLBEnd->Disable(); + } +} + + + +void LinePropertyPanel::FillLineStyleList() +{ + SfxObjectShell* pSh = SfxObjectShell::Current(); + if ( pSh && pSh->GetItem( SID_DASH_LIST ) ) + { + mpLBStyle->Enable(); + SvxDashListItem aItem( *(const SvxDashListItem*)(pSh->GetItem( SID_DASH_LIST ) ) ); + mpLineStyleList = aItem.GetDashList(); + + if(mpLineStyleList) + { + FillLineStyleListBox(*mpLBStyle, *mpLineStyleList); + } + + mpLBStyle->SelectEntryPos(0); + } + else + { + mpLBStyle->Disable(); + } +} + + + +void LinePropertyPanel::SelectLineStyle() +{ + if( !mbStyleAvailable || !mbDashAvailable ) + { + mpLBStyle->SetNoSelection(); + return; + } + + const XLineStyle eXLS(mpStyleItem ? (XLineStyle)mpStyleItem->GetValue() : XLINE_NONE); + bool bSelected(false); + + switch(eXLS) + { + case XLINE_NONE: + break; + case XLINE_SOLID: + mpLBStyle->SelectEntryPos(1); + bSelected = true; + break; + default: + if(mpDashItem && mpLineStyleList) + { + const XDash& rDash = mpDashItem->GetDashValue(); + for(sal_Int32 a(0);!bSelected && a < mpLineStyleList->Count(); a++) + { + XDashEntry* pEntry = mpLineStyleList->GetDash(a); + const XDash& rEntry = pEntry->GetDash(); + if(rDash == rEntry) + { + mpLBStyle->SelectEntryPos((sal_uInt16)a + 2); + bSelected = true; + } + } + } + break; + } + + if(!bSelected) + mpLBStyle->SelectEntryPos( 0 ); +} + +void LinePropertyPanel::SelectEndStyle(bool bStart) +{ + sal_Bool bSelected(false); + + if(bStart) + { + //<<add + if( !mbStartAvailable ) + { + mpLBStart->SetNoSelection(); + return; + } + //add end>> + if(mpStartItem && mpLineEndList) + { + const basegfx::B2DPolyPolygon& rItemPolygon = mpStartItem->GetLineStartValue(); + for(sal_Int32 a(0);!bSelected && a < mpLineEndList->Count(); a++) + { + XLineEndEntry* pEntry = mpLineEndList->GetLineEnd(a); + const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd(); + if(rItemPolygon == rEntryPolygon) + { + mpLBStart->SelectEntryPos((sal_uInt16)a + 1); + bSelected = true; + } + } + } + if(!bSelected) + mpLBStart->SelectEntryPos( 0 ); + } + else + { + //<<add + if( !mbEndAvailable ) + { + mpLBEnd->SetNoSelection(); + return; + } + //add end>> + if(mpEndItem && mpLineEndList) + { + const basegfx::B2DPolyPolygon& rItemPolygon = mpEndItem->GetLineEndValue(); + for(sal_Int32 a(0);!bSelected && a < mpLineEndList->Count(); a++) + { + XLineEndEntry* pEntry = mpLineEndList->GetLineEnd(a); + const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd(); + if(rItemPolygon == rEntryPolygon) + { + mpLBEnd->SelectEntryPos((sal_uInt16)a + 1); + bSelected = true; + } + } + } + if(!bSelected) + mpLBEnd->SelectEntryPos( 0 ); + } +} + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/line/LinePropertyPanel.hrc b/svx/source/sidebar/line/LinePropertyPanel.hrc new file mode 100644 index 000000000000..5adb139cded9 --- /dev/null +++ b/svx/source/sidebar/line/LinePropertyPanel.hrc @@ -0,0 +1,140 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +// RID_SIDEBAR_LINE_PANEL-------------------------------------------------------------- +#define CUSTOM_X POPUPPANEL_MARGIN_LARGE + OFFSET_X +#define CUSTOM_Y POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 12 * 9 + POPUPPANEL_MARGIN_SMALL * 2 + TEXT_HEIGHT +#define CUSTOM_W 74 +#define CUSTOM_H POPUPPANEL_MARGIN_LARGE * 2 + TEXT_HEIGHT + 12 + TEXT_CONTROL_SPACING_VERTICAL + +#define FT_COLOR 1 +#define TB_COLOR 2 +#define FT_WIDTH 3 +#define TB_WIDTH 4 +#define FT_STYLE 5 +#define LB_STYLE 6 +#define FT_ARROW 7 +#define FT_TRANSPARENT 8 +#define MF_TRANSPARENT 9 +#define LB_START 10 +#define LB_END 11 +#define TBI_COLOR 12 +#define TBI_WIDTH 13 +#define TBI_STYLE 14 +#define STR_QH_TB_WIDTH 15 +#define STR_QH_TB_COLOR 16 + +#define FT_EDGESTYLE 18 +#define LB_EDGESTYLE 19 +#define FT_CAPSTYLE 20 +#define LB_CAPSTYLE 21 + +#define IMG_COLOR 23 +#define IMG_COLOR_NO 24 +#define IMG_NONE_ICON 36 + +#define IMG_WIDTH1_ICON 41 +#define IMG_WIDTH2_ICON 42 +#define IMG_WIDTH3_ICON 43 +#define IMG_WIDTH4_ICON 44 +#define IMG_WIDTH5_ICON 45 +#define IMG_WIDTH6_ICON 46 +#define IMG_WIDTH7_ICON 47 +#define IMG_WIDTH8_ICON 48 + +#define IMG_WIDTH1_ICON_H 61 +#define IMG_WIDTH2_ICON_H 62 +#define IMG_WIDTH3_ICON_H 63 +#define IMG_WIDTH4_ICON_H 64 +#define IMG_WIDTH5_ICON_H 65 +#define IMG_WIDTH6_ICON_H 66 +#define IMG_WIDTH7_ICON_H 67 +#define IMG_WIDTH8_ICON_H 68 + +//color popup page +#define VS_COLOR 1 +#define STR_AUTOMATICE 2 + +//style popup page +#define VS_STYLE 1 +#define PB_OPTIONS 2 + +#define IMG_LINE1 5 +#define IMG_LINE1_S 6 +#define IMG_LINE2 7 +#define IMG_LINE2_S 8 +#define IMG_LINE3 9 +#define IMG_LINE3_S 10 +#define IMG_LINE4 11 +#define IMG_LINE4_S 12 +#define IMG_LINE5 13 +#define IMG_LINE5_S 14 +#define IMG_LINE6 15 +#define IMG_LINE6_S 16 +#define IMG_LINE7 17 +#define IMG_LINE7_S 18 +#define IMG_LINE8 19 +#define IMG_LINE8_S 20 +#define IMG_LINE9 21 +#define IMG_LINE9_S 22 +#define IMG_LINE10 23 +#define IMG_LINE10_S 24 +#define IMG_LINE11 25 +#define IMG_LINE11_S 26 + +// #define STR_STYLE_NONE_TIP 30 +#define STR_STYLE_NONE 31 +#define STR_STYLE_LINE1 32 +#define STR_STYLE_LINE2 33 +#define STR_STYLE_LINE3 34 +#define STR_STYLE_LINE4 35 +#define STR_STYLE_LINE5 36 +#define STR_STYLE_LINE6 37 +#define STR_STYLE_LINE7 38 +#define STR_STYLE_LINE8 39 +#define STR_STYLE_LINE9 40 +#define STR_STYLE_LINE10 41 +#define STR_STYLE_LINE11 42 + +#define IMG_LINE1_H 43 +#define IMG_LINE2_H 44 +#define IMG_LINE3_H 45 +#define IMG_LINE4_H 46 +#define IMG_LINE5_H 47 +#define IMG_LINE6_H 48 +#define IMG_LINE7_H 49 +#define IMG_LINE8_H 50 +#define IMG_LINE9_H 51 +#define IMG_LINE10_H 52 +#define IMG_LINE11_H 53 + +//width popup page +#define VS_WIDTH 1 +#define MF_WIDTH 2 +#define FT_CUSTOME 3 +#define FT_LINE_WIDTH 4 +#define IMG_WIDTH_CUSTOM 5 +#define IMG_WIDTH_CUSTOM_GRAY 6 +#define CT_BORDER 7 +#define STR_WIDTH_LAST_CUSTOM 8 +#define STR_PT 9 + +// eof diff --git a/svx/source/sidebar/line/LinePropertyPanel.hxx b/svx/source/sidebar/line/LinePropertyPanel.hxx new file mode 100644 index 000000000000..0a75879c2399 --- /dev/null +++ b/svx/source/sidebar/line/LinePropertyPanel.hxx @@ -0,0 +1,198 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_PROPERTYPANEL_LINEPAGE_HXX +#define SVX_PROPERTYPANEL_LINEPAGE_HXX + +#include <svx/xdash.hxx> +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include <boost/scoped_ptr.hpp> +#include <boost/scoped_array.hpp> +#include <svx/sidebar/ColorPopup.hxx> +#include "LineWidthPopup.hxx" + + +namespace svx { class ToolboxButtonColorUpdater; } +class SvxLineColorPage; +class SvxLineStylePage; +class SvxLineWidthPage; +class XLineStyleItem; +class XLineDashItem; +class XLineStartItem; +class XLineEndItem; +class XLineEndList; +class XDashList; +class ListBox; +class ToolBox; +class FloatingWindow; + +namespace { + #define SIDEBAR_LINE_WIDTH_GLOBAL_VALUE String("PopupPanel_LineWidth", 20, RTL_TEXTENCODING_ASCII_US) +} //end of anonymous namespace + +namespace svx { namespace sidebar { + +class PopupContainer; +class ColorPopup; +class LineWidthControl; + + +class LinePropertyPanel +: public Control, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +private: + friend class ::SvxLineStylePage; + friend class ::SvxLineWidthPage; + +public: + static LinePropertyPanel* Create( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + + virtual void DataChanged( + const DataChangedEvent& rEvent); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + SfxBindings* GetBindings(); + + void SetWidth(long nWidth); + void SetWidthIcon(int n); + void SetWidthIcon(); + + void EndLineWidthPopupMode (void); + +private: + //ui controls + ::boost::scoped_ptr< FixedText > mpFTWidth; + ::boost::scoped_ptr< Window > mpTBWidthBackground; + ::boost::scoped_ptr< ToolBox > mpTBWidth; + ::boost::scoped_ptr< FixedText > mpFTColor; + ::boost::scoped_ptr< Window > mpTBColorBackground; + ::boost::scoped_ptr< ToolBox > mpTBColor; + ::boost::scoped_ptr< FixedText > mpFTStyle; + ::boost::scoped_ptr< ListBox > mpLBStyle; + ::boost::scoped_ptr< FixedText > mpFTTrancparency; + ::boost::scoped_ptr< MetricField > mpMFTransparent; + ::boost::scoped_ptr< FixedText > mpFTArrow; + ::boost::scoped_ptr< ListBox > mpLBStart; + ::boost::scoped_ptr< ListBox > mpLBEnd; + ::boost::scoped_ptr< FixedText > mpFTEdgeStyle; + ::boost::scoped_ptr< ListBox > mpLBEdgeStyle; + ::boost::scoped_ptr< FixedText > mpFTCapStyle; + ::boost::scoped_ptr< ListBox > mpLBCapStyle; + + //ControllerItem + ::sfx2::sidebar::ControllerItem maStyleControl; + ::sfx2::sidebar::ControllerItem maDashControl; + ::sfx2::sidebar::ControllerItem maWidthControl; + ::sfx2::sidebar::ControllerItem maColorControl; + ::sfx2::sidebar::ControllerItem maStartControl; + ::sfx2::sidebar::ControllerItem maEndControl; + ::sfx2::sidebar::ControllerItem maLineEndListControl; + ::sfx2::sidebar::ControllerItem maLineStyleListControl; + ::sfx2::sidebar::ControllerItem maTransControl; + ::sfx2::sidebar::ControllerItem maEdgeStyle; + ::sfx2::sidebar::ControllerItem maCapStyle; + + Color maColor; + ::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > mpColorUpdater; + ::boost::scoped_ptr< XLineStyleItem > mpStyleItem; + ::boost::scoped_ptr< XLineDashItem > mpDashItem; + sal_uInt16 mnTrans; + SfxMapUnit meMapUnit; + sal_Int32 mnWidthCoreValue; + XLineEndList* mpLineEndList; + XDashList* mpLineStyleList; + ::boost::scoped_ptr< XLineStartItem > mpStartItem; + ::boost::scoped_ptr< XLineEndItem > mpEndItem; + + //popup windows + ColorPopup maColorPopup; + LineWidthPopup maLineWidthPopup; + + // images from ressource + Image maIMGColor; + Image maIMGNone; + + // multi-images + ::boost::scoped_array<Image> mpIMGWidthIcon; + ::boost::scoped_array<Image> mpIMGWidthIconH; //high contrast + + cssu::Reference< css::frame::XFrame > mxFrame; + SfxBindings* mpBindings; + + /// bitfield + bool mbColorAvailable : 1; + bool mbStyleAvailable : 1; + bool mbDashAvailable : 1; + bool mbTransAvailable : 1; + bool mbWidthValuable : 1; + bool mbStartAvailable : 1; + bool mbEndAvailable : 1; + + void SetupIcons(void); + void Initialize(); + void FillLineEndList(); + void FillLineStyleList(); + void SelectEndStyle(bool bStart); + void SelectLineStyle(); + + DECL_LINK(ImplPopupModeEndHdl, FloatingWindow* ); + DECL_LINK(ImplWidthPopupModeEndHdl, FloatingWindow* ); + DECL_LINK(ToolboxColorSelectHdl, ToolBox*); + DECL_LINK(ChangeLineStyleHdl, ToolBox*); + DECL_LINK(ToolboxWidthSelectHdl, ToolBox*); + DECL_LINK(ChangeTransparentHdl , void *); + DECL_LINK(ChangeStartHdl, void *); + DECL_LINK(ChangeEndHdl, void *); + DECL_LINK(ChangeEdgeStyleHdl, void *); + DECL_LINK(ChangeCapStyleHdl, void *); + + // constructor/destuctor + LinePropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings); + virtual ~LinePropertyPanel(void); + + void SetColor( + const String& rsColorName, + const Color aColor); + + PopupControl* CreateColorPopupControl (PopupContainer* pParent); + PopupControl* CreateLineWidthPopupControl (PopupContainer* pParent); +}; + +} } // end of namespace svx::sidebar + +#endif + +// eof diff --git a/svx/source/sidebar/line/LinePropertyPanel.src b/svx/source/sidebar/line/LinePropertyPanel.src new file mode 100644 index 000000000000..acf994c501b2 --- /dev/null +++ b/svx/source/sidebar/line/LinePropertyPanel.src @@ -0,0 +1,614 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "LinePropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include "helpid.hrc" + +#define TOOLBOX_WIDTH 50 +#define TOOLBOX_HEIGHT 14 +#define LISTBOX_HEIGHT 99 + +Control RID_SIDEBAR_LINE_PANEL +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Text = "Line"; + + Size = MAP_APPFONT( + PROPERTYPAGE_WIDTH, + SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*4 + TEXT_CONTROL_SPACING_VERTICAL*4 + TOOLBOX_HEIGHT*3 + CONTROL_SPACING_VERTICAL*3 + CBOX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT ); + HelpID = HID_PROPERTYPANEL_LINE_SECTION ; + + FixedText FT_WIDTH + { + Pos = MAP_APPFONT( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP ) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Width:" ; + }; + ToolBox TB_WIDTH + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT ) ; + TabStop = TRUE ; + HelpID = HID_PPROPERTYPANEL_LINE_TBX_WIDTH ; + Text = "Width"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_WIDTH ; + DropDown = TRUE ; + Text [ en-US ] = "Width" ; + HelpID = HID_PPROPERTYPANEL_LINE_TBI_WIDTH; + }; + }; + }; + String STR_QH_TB_WIDTH + { + Text [ en-US ] = "Select the width of the line."; + }; + + FixedText FT_COLOR + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH + 3, SECTIONPAGE_MARGIN_VERTICAL_TOP ) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Color:" ; + }; + ToolBox TB_COLOR + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH + 4, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH ,TOOLBOX_HEIGHT ) ; + TabStop = TRUE ; + HelpID = HID_PPROPERTYPANEL_LINE_TBX_COLOR; + Text = "Color"; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_COLOR ; + DropDown = TRUE ; + Text [ en-US ] = "Color" ; + HelpID = HID_PPROPERTYPANEL_LINE_TBI_COLOR; + }; + }; + }; + String STR_QH_TB_COLOR + { + Text [ en-US ] = "Select the color of the line."; + }; + + FixedText FT_STYLE + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Style:" ; + }; + ListBox LB_STYLE + { + Border = TRUE ; + HelpID = HID_PPROPERTYPANEL_LINE_TBX_STYLE; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*2 + TEXT_CONTROL_SPACING_VERTICAL*2 + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH ,LISTBOX_HEIGHT ) ; + TabStop = TRUE ; + DropDown = TRUE ; + DDExtraWidth = TRUE ; + QuickHelpText [ en-US ] = "Select the style of the line."; + }; + + FixedText FT_TRANSPARENT + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH + 3 , SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Transparency:" ; + }; + MetricField MF_TRANSPARENT + { + Border = TRUE ; + HelpID = HID_PPROPERTYPANEL_LINE_MTR_TRANCEPARENCE; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH + 3 , SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*2 + TEXT_CONTROL_SPACING_VERTICAL*2 + TOOLBOX_HEIGHT + CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT ( TOOLBOX_WIDTH + 1 , 12 ) ; + TabStop = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 100 ; + StrictFormat = TRUE ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + Last = 100 ; + SpinSize = 5 ; + QuickHelpText [ en-US ] = "Specify the transparency of the line."; + }; + + FixedText FT_ARROW + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*2 + TEXT_CONTROL_SPACING_VERTICAL*2 + TOOLBOX_HEIGHT*2 + CONTROL_SPACING_VERTICAL*2) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH * 2 + 3 , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Arrow:" ; + }; + ListBox LB_START + { + Border = TRUE ; + HelpID = HID_PPROPERTYPANEL_LINE_LB_START; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*3 + TEXT_CONTROL_SPACING_VERTICAL*3 + TOOLBOX_HEIGHT*2 + CONTROL_SPACING_VERTICAL*2 ) ; + Size = MAP_APPFONT ( TOOLBOX_WIDTH , LISTBOX_HEIGHT ) ; + TabStop = TRUE ; + DropDown = TRUE ; + DDExtraWidth = TRUE ; + QuickHelpText [ en-US ] = "Select the style of the beginning arrowhead."; + }; + ListBox LB_END + { + Border = TRUE ; + HelpID = HID_PPROPERTYPANEL_LINE_LB_END; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH + 3 , SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*3 + TEXT_CONTROL_SPACING_VERTICAL*3 + TOOLBOX_HEIGHT*2 + CONTROL_SPACING_VERTICAL*2 ) ; + Size = MAP_APPFONT ( TOOLBOX_WIDTH + 1, LISTBOX_HEIGHT ) ; + TabStop = TRUE ; + DropDown = TRUE ; + DDExtraWidth = TRUE ; + QuickHelpText [ en-US ] = "Select the style of the ending arrowhead."; + }; + + FixedText FT_EDGESTYLE + { + Pos = MAP_APPFONT ( + SECTIONPAGE_MARGIN_HORIZONTAL, + SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*3 + TEXT_CONTROL_SPACING_VERTICAL*3 + TOOLBOX_HEIGHT*3 + CONTROL_SPACING_VERTICAL*3) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH * 2 + 3 , TEXT_HEIGHT ) ; + Text [ en-US ] = "~Corner style" ; + }; + ListBox LB_EDGESTYLE + { + HelpID = HID_PPROPERTYPANEL_LINE_LB_EDGESTYLE; + Border = TRUE ; + Pos = MAP_APPFONT ( + SECTIONPAGE_MARGIN_HORIZONTAL , + SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*4 + TEXT_CONTROL_SPACING_VERTICAL*4 + TOOLBOX_HEIGHT*3 + CONTROL_SPACING_VERTICAL*3 ) ; + Size = MAP_APPFONT ( TOOLBOX_WIDTH , LISTBOX_HEIGHT ) ; + TabStop = TRUE ; + DropDown = TRUE ; + DDExtraWidth = TRUE ; + QuickHelpText [ en-US ] = "Select the style of the edge connections."; + StringList [ en-US ] = + { + < "Rounded" ; Default ; > ; + < "- none -" ; > ; + < "Mitered" ; > ; + < "Beveled" ; > ; + }; + }; + FixedText FT_CAPSTYLE + { + Pos = MAP_APPFONT ( + SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH + 3, + SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*3 + TEXT_CONTROL_SPACING_VERTICAL*3 + TOOLBOX_HEIGHT*3 + CONTROL_SPACING_VERTICAL*3) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH * 2 + 3 , TEXT_HEIGHT ) ; + Text [ en-US ] = "Ca~p style" ; + }; + ListBox LB_CAPSTYLE + { + HelpID = HID_PPROPERTYPANEL_LINE_LB_CAPSTYLE; + Border = TRUE ; + Pos = MAP_APPFONT ( + SECTIONPAGE_MARGIN_HORIZONTAL + TOOLBOX_WIDTH + 3, + SECTIONPAGE_MARGIN_VERTICAL_TOP + TEXT_HEIGHT*4 + TEXT_CONTROL_SPACING_VERTICAL*4 + TOOLBOX_HEIGHT*3 + CONTROL_SPACING_VERTICAL*3 ) ; + Size = MAP_APPFONT ( TOOLBOX_WIDTH , LISTBOX_HEIGHT ) ; + TabStop = TRUE ; + DropDown = TRUE ; + DDExtraWidth = TRUE ; + QuickHelpText [ en-US ] = "Select the style of the line caps."; + StringList [ en-US ] = + { + < "Flat" ; Default ; > ; // Same string as in Excel + < "Round" ; > ; + < "Square" ; > ; + }; + }; + + Image IMG_COLOR + { + ImageBitmap = Bitmap{File = "symphony/Line_color.png";}; + }; + Image IMG_COLOR_NO + { + ImageBitmap = Bitmap{File = "symphony/no color.png";}; + }; + + Image IMG_NONE_ICON + { + ImageBitmap = Bitmap{File = "symphony/blank.png";}; + }; + + //WIDTH ICON + Image IMG_WIDTH1_ICON + { + ImageBitmap = Bitmap{File = "symphony/width1.png";}; + }; + Image IMG_WIDTH2_ICON + { + ImageBitmap = Bitmap{File = "symphony/width2.png";}; + }; + Image IMG_WIDTH3_ICON + { + ImageBitmap = Bitmap{File = "symphony/width3.png";}; + }; + Image IMG_WIDTH4_ICON + { + ImageBitmap = Bitmap{File = "symphony/width4.png";}; + }; + Image IMG_WIDTH5_ICON + { + ImageBitmap = Bitmap{File = "symphony/width5.png";}; + }; + Image IMG_WIDTH6_ICON + { + ImageBitmap = Bitmap{File = "symphony/width6.png";}; + }; + Image IMG_WIDTH7_ICON + { + ImageBitmap = Bitmap{File = "symphony/width7.png";}; + }; + Image IMG_WIDTH8_ICON + { + ImageBitmap = Bitmap{File = "symphony/width8.png";}; + }; + + //high contrast for line width + //WIDTH ICON + Image IMG_WIDTH1_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width1_h.png";}; + }; + Image IMG_WIDTH2_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width2_h.png";}; + }; + Image IMG_WIDTH3_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width3_h.png";}; + }; + Image IMG_WIDTH4_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width4_h.png";}; + }; + Image IMG_WIDTH5_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width5_h.png";}; + }; + Image IMG_WIDTH6_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width6_h.png";}; + }; + Image IMG_WIDTH7_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width7_h.png";}; + }; + Image IMG_WIDTH8_ICON_H + { + ImageBitmap = Bitmap{File = "symphony/width8_h.png";}; + }; +}; +Control RID_POPUPPANEL_LINEPAGE_COLOR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT ); + + Control VS_COLOR + { + HelpId = HID_PPROPERTYPANEL_LINE_VS_COLOR ; + Hide = TRUE ; + Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y ); + Size = MAP_APPFONT ( POPUP_COLOR_PICKER_WIDTH - OFFSET_X * 2, POPUP_COLOR_PICKER_HEIGHT - OFFSET_Y * 2); + TabStop = TRUE ; + Text = "Color"; + }; + String STR_AUTOMATICE + { + Text [ en-US ] = "No Color"; + }; +}; +Control RID_POPUPPANEL_LINEPAGE_STYLE +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( + POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH , + 13 + POPUP_BORDER_HEIGHT + POPUPPANEL_MARGIN_SMALL * 2 + POPUPPANEL_MARGIN_LARGE); + + Control VS_STYLE + { + HelpId = HID_PPROPERTYPANEL_LINE_VS_STYLE ; + Hide = TRUE ; + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); + Size = MAP_APPFONT ( 93 , 13 * 12); + TabStop = TRUE ; + Text = "Style"; + }; + + PushButton PB_OPTIONS + { + HelpId = HID_PPROPERTYPANEL_LINE_BTN_STYLE; + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_LARGE + OFFSET_X , POPUPPANEL_MARGIN_SMALL * 2 + OFFSET_Y ); + Size = MAP_APPFONT ( 93 , 13 ); + TabStop = TRUE; + Text [ en-US ] = "~More Options..."; + }; + + String STR_STYLE_NONE + { + Text [ en-US ] = "None"; + }; + String STR_STYLE_LINE1 + { + Text [ en-US ] = "Continuous"; + }; + String STR_STYLE_LINE2 + { + Text [ en-US ] = "Ultrafine dashed"; + }; + String STR_STYLE_LINE3 + { + Text [ en-US ] = "Dashed (variable)"; + }; + String STR_STYLE_LINE4 + { + Text [ en-US ] = "Fine dashed (variable)"; + }; + String STR_STYLE_LINE5 + { + Text [ en-US ] = "Fine dashed"; + }; + String STR_STYLE_LINE6 + { + Text [ en-US ] = "Fine dotted"; + }; + String STR_STYLE_LINE7 + { + Text [ en-US ] = "Ultrafine dotted (variable)"; + }; + String STR_STYLE_LINE8 + { + Text [ en-US ] = "3 dashes 3 dots (variable)"; + }; + String STR_STYLE_LINE9 + { + Text [ en-US ] = "2 dots 1 dash"; + }; + String STR_STYLE_LINE10 + { + Text [ en-US ] = "Ultrafine 2 dots 3 dashes"; + }; + String STR_STYLE_LINE11 + { + Text [ en-US ] = "Line with fine dots"; + }; + + Image IMG_LINE1 + { + ImageBitmap = Bitmap{File = "symphony/style_line1.png";}; + }; + Image IMG_LINE1_S + { + ImageBitmap = Bitmap{File = "symphony/style_line1_h.png";}; + }; + Image IMG_LINE2 + { + ImageBitmap = Bitmap{File = "symphony/style_line2.png";}; + }; + Image IMG_LINE2_S + { + ImageBitmap = Bitmap{File = "symphony/style_line2_h.png";}; + }; + Image IMG_LINE3 + { + ImageBitmap = Bitmap{File = "symphony/style_line3.png";}; + }; + Image IMG_LINE3_S + { + ImageBitmap = Bitmap{File = "symphony/style_line3_h.png";}; + }; + Image IMG_LINE4 + { + ImageBitmap = Bitmap{File = "symphony/style_line4.png";}; + }; + Image IMG_LINE4_S + { + ImageBitmap = Bitmap{File = "symphony/style_line4_h.png";}; + }; + Image IMG_LINE5 + { + ImageBitmap = Bitmap{File = "symphony/style_line5.png";}; + }; + Image IMG_LINE5_S + { + ImageBitmap = Bitmap{File = "symphony/style_line5_h.png";}; + }; + Image IMG_LINE6 + { + ImageBitmap = Bitmap{File = "symphony/style_line6.png";}; + }; + Image IMG_LINE6_S + { + ImageBitmap = Bitmap{File = "symphony/style_line6_h.png";}; + }; + Image IMG_LINE7 + { + ImageBitmap = Bitmap{File = "symphony/style_line7.png";}; + }; + Image IMG_LINE7_S + { + ImageBitmap = Bitmap{File = "symphony/style_line7_h.png";}; + }; + Image IMG_LINE8 + { + ImageBitmap = Bitmap{File = "symphony/style_line8.png";}; + }; + Image IMG_LINE8_S + { + ImageBitmap = Bitmap{File = "symphony/style_line8_h.png";}; + }; + Image IMG_LINE9 + { + ImageBitmap = Bitmap{File = "symphony/style_line9.png";}; + }; + Image IMG_LINE9_S + { + ImageBitmap = Bitmap{File = "symphony/style_line9_h.png";}; + }; + Image IMG_LINE10 + { + ImageBitmap = Bitmap{File = "symphony/style_line10.png";}; + }; + Image IMG_LINE10_S + { + ImageBitmap = Bitmap{File = "symphony/style_line10_h.png";}; + }; + Image IMG_LINE11 + { + ImageBitmap = Bitmap{File = "symphony/style_line11.png";}; + }; + Image IMG_LINE11_S + { + ImageBitmap = Bitmap{File = "symphony/style_line11_h.png";}; + }; + + //high contrast + Image IMG_LINE1_H + { + ImageBitmap = Bitmap{File = "symphony/style_line1_hh.png";}; + }; + Image IMG_LINE2_H + { + ImageBitmap = Bitmap{File = "symphony/style_line2_hh.png";}; + }; + Image IMG_LINE3_H + { + ImageBitmap = Bitmap{File = "symphony/style_line3_hh.png";}; + }; + Image IMG_LINE4_H + { + ImageBitmap = Bitmap{File = "symphony/style_line4_hh.png";}; + }; + Image IMG_LINE5_H + { + ImageBitmap = Bitmap{File = "symphony/style_line5_hh.png";}; + }; + Image IMG_LINE6_H + { + ImageBitmap = Bitmap{File = "symphony/style_line6_hh.png";}; + }; + Image IMG_LINE7_H + { + ImageBitmap = Bitmap{File = "symphony/style_line7_hh.png";}; + }; + Image IMG_LINE8_H + { + ImageBitmap = Bitmap{File = "symphony/style_line8_hh.png";}; + }; + Image IMG_LINE9_H + { + ImageBitmap = Bitmap{File = "symphony/style_line9_hh.png";}; + }; + Image IMG_LINE10_H + { + ImageBitmap = Bitmap{File = "symphony/style_line10_hh.png";}; + }; + Image IMG_LINE11_H + { + ImageBitmap = Bitmap{File = "symphony/style_line11_hh.png";}; + }; +}; +Control RID_POPUPPANEL_LINEPAGE_WIDTH +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + 80, POPUPPANEL_MARGIN_SMALL + POPUPPANEL_MARGIN_LARGE + POPUP_BORDER_WIDTH + 12 * 9 + POPUPPANEL_MARGIN_SMALL * 2 + TEXT_HEIGHT + (POPUPPANEL_MARGIN_LARGE * 2 + TEXT_HEIGHT + 12 + TEXT_CONTROL_SPACING_VERTICAL)); + + Control VS_WIDTH + { + HelpId = HID_PPROPERTYPANEL_LINE_VS_WIDTH ; + Hide = TRUE ; + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); + Size = MAP_APPFONT ( 80 , 12 * 9); + TabStop = TRUE ; + Text = "Width"; + }; + FixedText FT_CUSTOME + { + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_LARGE + OFFSET_X, POPUPPANEL_MARGIN_SMALL + OFFSET_Y + 12 * 9 + POPUPPANEL_MARGIN_SMALL ) ; + Size = MAP_APPFONT ( 80 , TEXT_HEIGHT ) ; + Text [ en-US ] = "Custom:" ; + }; + FixedText FT_LINE_WIDTH + { + Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE) ; + Size = MAP_APPFONT ( 74 - POPUPPANEL_MARGIN_LARGE * 2 , TEXT_HEIGHT ) ; + Text [ en-US ] = "Line ~width:" ; + }; + MetricField MF_WIDTH + { + Border = TRUE ; + HelpID = HID_PPROPERTYPANEL_LINE_MTR_WIDTH ; + Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE , CUSTOM_Y + POPUPPANEL_MARGIN_LARGE + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + TabStop = TRUE ; + Right = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 5000 ; + StrictFormat = TRUE ; + DecimalDigits = 2 ; + Value = 1 ; + Unit = FUNIT_MM ; + Last = 5000 ; + SpinSize = 10 ; + QuickHelpText [ en-US ] = "Specify the width of the line."; + }; + + Image IMG_WIDTH_CUSTOM + { + ImageBitmap = Bitmap{File = "symphony/last_custom_common.png";}; + }; + Image IMG_WIDTH_CUSTOM_GRAY + { + ImageBitmap = Bitmap{File = "symphony/last_custom_common_grey.png";}; + }; + String STR_WIDTH_LAST_CUSTOM + { + Text [ en-US ] = "Last Custom Value"; + }; + String STR_PT + { + Text [ en-US ] = "pt"; + }; +}; + +// eof diff --git a/svx/source/sidebar/line/LineStyleValueSet.cxx b/svx/source/sidebar/line/LineStyleValueSet.cxx new file mode 100644 index 000000000000..7400c7cc9f22 --- /dev/null +++ b/svx/source/sidebar/line/LineStyleValueSet.cxx @@ -0,0 +1,134 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "LineStyleValueSet.hxx" + +#include <i18npool/mslangid.hxx> + + +namespace svx { namespace sidebar { + +LineStyleValueSet::LineStyleValueSet ( + Window* pParent, + const ResId& rResId) + : ValueSet( pParent, rResId ), + pVDev(NULL), + mbSelectFirst(true) +{ + SetColCount( 1 ); +} + + + + +LineStyleValueSet::~LineStyleValueSet (void) +{ + delete pVDev; +} + + + + +void LineStyleValueSet::SetFirstString(XubString str) +{ + strNone = str; +} + + + + +void LineStyleValueSet::UserDraw( const UserDrawEvent& rUDEvt ) +{ + Rectangle aRect = rUDEvt.GetRect(); + OutputDevice* pDev = rUDEvt.GetDevice(); + sal_uInt16 nItemId = rUDEvt.GetItemId(); + + long nRectHeight = aRect.GetHeight(); + long nRectWidth = aRect.GetWidth(); + Point aBLPos = aRect.TopLeft(); + if(nItemId == 1) + { + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + Color aOldFillColor = pDev->GetFillColor(); + const Color aTextColor = rStyleSettings.GetFieldTextColor(); + + //draw back + if( mbSelectFirst ) + { + Color aBackColor(50,107,197); + Rectangle aBackRect = aRect; + aBackRect.Top() += 3; + aBackRect.Bottom() -= 2; + pDev->SetFillColor(aBackColor); + pDev->DrawRect(aBackRect); + } + else + { + pDev->SetFillColor( COL_TRANSPARENT ); + pDev->DrawRect(aRect); + } + pDev->SetFillColor(aOldFillColor); + + //draw text + Font aOldFont = pDev->GetFont(); + Color aOldColor = pDev->GetLineColor(); + Font aFont(OutputDevice::GetDefaultFont( + DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); + Size aSize = aFont.GetSize(); + aSize.Height() = nRectHeight*3/5; + if( mbSelectFirst ) + aFont.SetColor(COL_WHITE); + else + //aFont.SetColor(COL_BLACK); + aFont.SetColor(GetSettings().GetStyleSettings().GetFieldTextColor()); //high contrast + aFont.SetFillColor(COL_BLUE); + aFont.SetSize( aSize ); + pDev->SetFont(aFont); +// String sText("None", 9, RTL_TEXTENCODING_ASCII_US); + + // Point aStart(aBLPos.X() + 8 , aBLPos.Y() + nRectHeight/6); + Rectangle aStrRect = aRect; + aStrRect.Top() += nRectHeight/6; + aStrRect.Bottom() -= nRectHeight/6; + aStrRect.Left() += 8; + pDev->DrawText(aStrRect, strNone, TEXT_DRAW_ENDELLIPSIS); + + pDev->SetFont(aOldFont); + pDev->SetLineColor(aOldColor); + + + } + Invalidate( aRect ); +} + + + + +void LineStyleValueSet::SetFirstSelect(bool bSel) +{ + mbSelectFirst = bSel; +} + + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/line/LineStyleValueSet.hxx b/svx/source/sidebar/line/LineStyleValueSet.hxx new file mode 100644 index 000000000000..fb3bd054fa5d --- /dev/null +++ b/svx/source/sidebar/line/LineStyleValueSet.hxx @@ -0,0 +1,51 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_LINE_STYLE_VALUE_SET_HXX +#define SVX_SIDEBAR_LINE_STYLE_VALUE_SET_HXX + +#include <svtools/valueset.hxx> + +namespace svx { namespace sidebar { + +class LineStyleValueSet + : public ValueSet +{ +public: + LineStyleValueSet (Window* pParent, const ResId& rResId); + virtual ~LineStyleValueSet (void); + + void SetFirstSelect(bool bSel); + void SetFirstString(XubString str); + + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + +private: + VirtualDevice* pVDev; + bool mbSelectFirst; + XubString strNone; +}; + +} } // end of namespace svx::sidebar + +#endif + +// eof diff --git a/svx/source/sidebar/line/LineWidthControl.cxx b/svx/source/sidebar/line/LineWidthControl.cxx new file mode 100644 index 000000000000..01b1bbbbca5e --- /dev/null +++ b/svx/source/sidebar/line/LineWidthControl.cxx @@ -0,0 +1,376 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "LineWidthControl.hxx" +#include "LinePropertyPanel.hrc" +#include "LinePropertyPanel.hxx" + +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <sfx2/sidebar/propertypanel.hrc> +#include <comphelper/processfactory.hxx> +#include <vcl/svapp.hxx> +#include <unotools/viewoptions.hxx> +#include <svx/xlnwtit.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include "svx/sidebar/PopupContainer.hxx" + + +namespace svx { namespace sidebar { + +LineWidthControl::LineWidthControl ( + Window* pParent, + LinePropertyPanel& rPanel) + : svx::sidebar::PopupControl(pParent,SVX_RES(RID_POPUPPANEL_LINEPAGE_WIDTH)), + mrLinePropertyPanel(rPanel), + mpBindings(NULL), + maVSWidth( this, SVX_RES(VS_WIDTH)), + maFTCus( this, SVX_RES(FT_CUSTOME)), + maFTWidth( this, SVX_RES(FT_LINE_WIDTH)), + maMFWidth( this, SVX_RES(MF_WIDTH)), + meMapUnit(SFX_MAPUNIT_TWIP), + rStr(NULL), + mstrPT(SVX_RES(STR_PT)), + mnCustomWidth(0), + mbCustom(false), + mbColseByEdit(false), + mnTmpCusomWidth(0), + mbVSFocus(true), + maIMGCus(SVX_RES(IMG_WIDTH_CUSTOM)), + maIMGCusGray(SVX_RES(IMG_WIDTH_CUSTOM_GRAY)) +{ + Initialize(); + FreeResource(); + mpBindings = mrLinePropertyPanel.GetBindings(); +} + + + + +LineWidthControl::~LineWidthControl (void) +{ + delete[] rStr; +} + + + + +void LineWidthControl::Paint(const Rectangle& rect) +{ + svx::sidebar::PopupControl::Paint(rect); + + Color aOldLineColor = GetLineColor(); + Color aOldFillColor = GetFillColor(); + + Point aPos( LogicToPixel( Point( CUSTOM_X, CUSTOM_Y), MAP_APPFONT )); + Size aSize( LogicToPixel( Size( CUSTOM_W, CUSTOM_H ), MAP_APPFONT )); + Rectangle aRect( aPos, aSize ); + aRect.Left() -= 1; + aRect.Top() -= 1; + aRect.Right() += 1; + aRect.Bottom() += 1; + + Color aLineColor(189,201,219); + if(!GetSettings().GetStyleSettings().GetHighContrastMode()) + SetLineColor(aLineColor); + else + SetLineColor(GetSettings().GetStyleSettings().GetShadowColor()); + SetFillColor(COL_TRANSPARENT); + DrawRect(aRect); + + SetLineColor(aOldLineColor); + SetFillColor(aOldFillColor); +} + + + + +void LineWidthControl::Initialize() +{ + maVSWidth.SetStyle( maVSWidth.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT );// WB_NAMEFIELD | WB_ITEMBORDER |WB_DOUBLEBORDER | WB_NONEFIELD | + //for high contract wj + if(GetSettings().GetStyleSettings().GetHighContrastMode()) + { + maVSWidth.SetColor(GetSettings().GetStyleSettings().GetMenuColor()); + // maBorder.SetBackground(GetSettings().GetStyleSettings().GetMenuColor()); + maFTWidth.SetBackground(GetSettings().GetStyleSettings().GetMenuColor()); + } + else + { + maVSWidth.SetColor(COL_WHITE); + // maBorder.SetBackground(Wallpaper(COL_WHITE)); + maFTWidth.SetBackground(Wallpaper(COL_WHITE)); + } + + sal_Int64 nFirst= maMFWidth.Denormalize( maMFWidth.GetFirst( FUNIT_TWIP ) ); + sal_Int64 nLast = maMFWidth.Denormalize( maMFWidth.GetLast( FUNIT_TWIP ) ); + sal_Int64 nMin = maMFWidth.Denormalize( maMFWidth.GetMin( FUNIT_TWIP ) ); + sal_Int64 nMax = maMFWidth.Denormalize( maMFWidth.GetMax( FUNIT_TWIP ) ); + maMFWidth.SetSpinSize( 10 ); + maMFWidth.SetUnit( FUNIT_POINT ); + if( maMFWidth.GetDecimalDigits() > 1 ) + maMFWidth.SetDecimalDigits( 1 ); + maMFWidth.SetFirst( maMFWidth.Normalize( nFirst ), FUNIT_TWIP ); + maMFWidth.SetLast( maMFWidth.Normalize( nLast ), FUNIT_TWIP ); + maMFWidth.SetMin( maMFWidth.Normalize( nMin ), FUNIT_TWIP ); + maMFWidth.SetMax( maMFWidth.Normalize( nMax ), FUNIT_TWIP ); + + rStr = new XubString[9]; + //modify, + rStr[0] = String("05", 2, RTL_TEXTENCODING_ASCII_US); + rStr[1] = String("08", 2, RTL_TEXTENCODING_ASCII_US); + rStr[2] = String("10", 2, RTL_TEXTENCODING_ASCII_US); + rStr[3] = String("15", 2, RTL_TEXTENCODING_ASCII_US); + rStr[4] = String("23", 2, RTL_TEXTENCODING_ASCII_US); + rStr[5] = String("30", 2, RTL_TEXTENCODING_ASCII_US); + rStr[6] = String("45", 2, RTL_TEXTENCODING_ASCII_US); + rStr[7] = String("60", 2, RTL_TEXTENCODING_ASCII_US); + rStr[8] = String( SVX_RES(STR_WIDTH_LAST_CUSTOM) ); + + LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); + const sal_Unicode cSep = aLocaleWrapper.getNumDecimalSep().GetChar(0); + + for(int i = 0; i <= 7 ; i++) + { + rStr[i] = rStr[i].Insert(cSep, 1);//Modify + rStr[i].Append(mstrPT); + } + //end + + for(sal_uInt16 i = 1 ; i <= 9 ; i++) + { + maVSWidth.InsertItem(i); + maVSWidth.SetItemText(i, rStr[i-1]); + } + maVSWidth.SetUnit(rStr); + maVSWidth.SetItemData(1,(void*)5); + maVSWidth.SetItemData(2,(void*)8); + maVSWidth.SetItemData(3,(void*)10); + maVSWidth.SetItemData(4,(void*)15); + maVSWidth.SetItemData(5,(void*)23); + maVSWidth.SetItemData(6,(void*)30); + maVSWidth.SetItemData(7,(void*)45); + maVSWidth.SetItemData(8,(void*)60); + maVSWidth.SetImage(maIMGCusGray); + + maVSWidth.SetSelItem(0); + Link aLink = LINK( this, LineWidthControl, VSSelectHdl ) ; + maVSWidth.SetSelectHdl(aLink); + aLink = LINK(this, LineWidthControl, MFModifyHdl); + maMFWidth.SetModifyHdl(aLink); + + maVSWidth.StartSelection(); + maVSWidth.Show(); +} + + + + +void LineWidthControl::GetFocus() +{ + if(!mbVSFocus) + maMFWidth.GrabFocus(); + else + maVSWidth.GrabFocus(); +} + + + + +ValueSet& LineWidthControl::GetValueSet() +{ + return maVSWidth; +} + + + + +void LineWidthControl::SetWidthSelect( long lValue, bool bValuable, SfxMapUnit eMapUnit) +{ + mbVSFocus = true; + maVSWidth.SetSelItem(0); + mbColseByEdit = false; + meMapUnit = eMapUnit; + SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_LINE_WIDTH_GLOBAL_VALUE ); + if ( aWinOpt.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + + String aWinData( aTmp ); + mnCustomWidth = aWinData.ToInt32(); + mbCustom = true; + maVSWidth.SetImage(maIMGCus); + maVSWidth.SetCusEnable(true); + + String aStrTip( String::CreateFromDouble( (double)mnCustomWidth / 10)); + aStrTip.Append(mstrPT); // + maVSWidth.SetItemText(9, aStrTip); + } + else + { + mbCustom = false; + maVSWidth.SetImage(maIMGCusGray); + maVSWidth.SetCusEnable(false); + //modify + //String aStrTip(String(SVX_RES(STR_WIDTH_LAST_CUSTOM))); + //maVSWidth.SetItemText(9, aStrTip); + maVSWidth.SetItemText(9, rStr[8]); + } + + if(bValuable) + { + sal_Int64 nVal = OutputDevice::LogicToLogic( lValue, (MapUnit)eMapUnit, MAP_100TH_MM ); + nVal = maMFWidth.Normalize( nVal ); + maMFWidth.SetValue( nVal, FUNIT_100TH_MM ); + } + else + { + maMFWidth.SetText( String() ); + } + + MapUnit eOrgUnit = (MapUnit)eMapUnit; + MapUnit ePntUnit( MAP_TWIP ); + lValue = LogicToLogic( lValue , eOrgUnit, ePntUnit ); + + XubString strCurrValue = maMFWidth.GetText(); + sal_uInt16 i = 0; + for(; i < 8; i++) + if(strCurrValue == rStr[i]) + { + maVSWidth.SetSelItem(i+1); + break; + } + if (i>=8) + { + mbVSFocus = false; + maVSWidth.SetSelItem(0); + } + maVSWidth.Format(); + maVSWidth.StartSelection(); +} + + + + +IMPL_LINK(LineWidthControl, VSSelectHdl, void *, pControl) +{ + if(pControl == &maVSWidth) + { + sal_uInt16 iPos = maVSWidth.GetSelectItemId(); + if(iPos >= 1 && iPos <= 8) + { + long nVal = LogicToLogic((long)(unsigned long)maVSWidth.GetItemData( iPos ) , MAP_POINT, (MapUnit)meMapUnit); + nVal = maMFWidth.Denormalize(nVal); + XLineWidthItem aWidthItem( nVal ); + mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L); + mrLinePropertyPanel.SetWidthIcon(iPos); + mrLinePropertyPanel.SetWidth(nVal); + mbColseByEdit = false; + mnTmpCusomWidth = 0; + } + else if(iPos == 9) + {//last custom + //modified + if(mbCustom) + { + long nVal = LogicToLogic(mnCustomWidth , MAP_POINT, (MapUnit)meMapUnit); + nVal = maMFWidth.Denormalize(nVal); + XLineWidthItem aWidthItem( nVal ); + mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L); + mrLinePropertyPanel.SetWidth(nVal); + mbColseByEdit = false; + mnTmpCusomWidth = 0; + } + else + { + maVSWidth.SetNoSelection(); //add , set no selection and keep the last select item + maVSWidth.Format(); + Invalidate(); + maVSWidth.StartSelection(); + } + //modify end + } + if((iPos >= 1 && iPos <= 8) || (iPos == 9 && mbCustom)) //add + mrLinePropertyPanel.EndLineWidthPopupMode(); + } + return( 0L ); +} + + + + +IMPL_LINK(LineWidthControl, MFModifyHdl, void *, pControl) +{ + if(pControl == &maMFWidth) + { + if(maVSWidth.GetSelItem()) + { + maVSWidth.SetSelItem(0); + maVSWidth.Format(); + Invalidate(); + maVSWidth.StartSelection(); + } + long nTmp = static_cast<long>(maMFWidth.GetValue()); + long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)meMapUnit ); + sal_Int32 nNewWidth = (short)maMFWidth.Denormalize( nVal ); + XLineWidthItem aWidthItem(nNewWidth); + mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L); + + mbColseByEdit = true; + mnTmpCusomWidth = nTmp; + /*for(sal_uInt16 i = 0; i < 8; i++) + { + if(nTmp == (sal_Int32)maVSWidth.GetItemData(i)) + { + mbColseByEdit = false; + break; + } + }*/ + + } + return( 0L ); +} + + + + +bool LineWidthControl::IsCloseByEdit() +{ + return mbColseByEdit; +} + + + + +long LineWidthControl::GetTmpCustomWidth() +{ + return mnTmpCusomWidth; +} + + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/line/LineWidthControl.hxx b/svx/source/sidebar/line/LineWidthControl.hxx new file mode 100644 index 000000000000..88b614714c0a --- /dev/null +++ b/svx/source/sidebar/line/LineWidthControl.hxx @@ -0,0 +1,75 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/PopupControl.hxx" +#include "LineWidthValueSet.hxx" +#include <svl/poolitem.hxx> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> + +class SfxBindings; + +namespace svx { namespace sidebar { + +class LinePropertyPanel; + +class LineWidthControl + : public svx::sidebar::PopupControl +{ +public: + LineWidthControl (Window* pParent, LinePropertyPanel& rPanel); + virtual ~LineWidthControl (void); + + virtual void GetFocus(); + virtual void Paint(const Rectangle& rect); + + void SetWidthSelect( long lValue, bool bValuable, SfxMapUnit eMapUnit); + ValueSet& GetValueSet(); + bool IsCloseByEdit(); + long GetTmpCustomWidth(); + +private: + LinePropertyPanel& mrLinePropertyPanel; + SfxBindings* mpBindings; + LineWidthValueSet maVSWidth; + FixedText maFTCus; + FixedText maFTWidth; + MetricField maMFWidth; + SfxMapUnit meMapUnit; + XubString* rStr; + XubString mstrPT; // + long mnCustomWidth; + bool mbCustom; + bool mbColseByEdit; + long mnTmpCusomWidth; + bool mbVSFocus; + + Image maIMGCus; + Image maIMGCusGray; + + void Initialize(); + DECL_LINK(VSSelectHdl, void *); + DECL_LINK(MFModifyHdl, void *); +}; + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/line/LineWidthPopup.cxx b/svx/source/sidebar/line/LineWidthPopup.cxx new file mode 100644 index 000000000000..ba83aba0e196 --- /dev/null +++ b/svx/source/sidebar/line/LineWidthPopup.cxx @@ -0,0 +1,88 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "LineWidthPopup.hxx" +#include "LineWidthControl.hxx" +#include "LinePropertyPanel.hxx" + +#include <unotools/viewoptions.hxx> + +#include <boost/bind.hpp> + + +namespace svx { namespace sidebar { + +LineWidthPopup::LineWidthPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Width"))) +{ + SetPopupModeEndHandler(::boost::bind(&LineWidthPopup::PopupModeEndCallback, this)); +} + + + + +LineWidthPopup::~LineWidthPopup (void) +{ +} + + + + +void LineWidthPopup::SetWidthSelect (long lValue, bool bValuable, SfxMapUnit eMapUnit) +{ + ProvideContainerAndControl(); + + LineWidthControl* pControl = dynamic_cast<LineWidthControl*>(mpControl.get()); + if (pControl != NULL) + pControl->SetWidthSelect(lValue, bValuable, eMapUnit); +} + + + + +void LineWidthPopup::PopupModeEndCallback (void) +{ + LineWidthControl* pControl = dynamic_cast<LineWidthControl*>(mpControl.get()); + if (pControl != NULL) + { + if (pControl->IsCloseByEdit()) + { + SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_LINE_WIDTH_GLOBAL_VALUE ); + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("LineWidth") ); + aSeq[0].Value <<= ::rtl::OUString( + String::CreateFromInt32(pControl->GetTmpCustomWidth())); + aWinOpt.SetUserData( aSeq ); + } + } +} + + + +} } // end of namespace svx::sidebar + + +// eof diff --git a/svx/source/sidebar/line/LineWidthPopup.hxx b/svx/source/sidebar/line/LineWidthPopup.hxx new file mode 100644 index 000000000000..9b64dae9a086 --- /dev/null +++ b/svx/source/sidebar/line/LineWidthPopup.hxx @@ -0,0 +1,53 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_LINE_WIDTH_POPUP_HXX_ +#define _SVX_SIDEBAR_LINE_WIDTH_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <svl/poolitem.hxx> + +#include <boost/function.hpp> + + +namespace svx { namespace sidebar { + +class LineWidthPopup + : public Popup +{ +public : + LineWidthPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + virtual ~LineWidthPopup (void); + + void SetWidthSelect (long lValue, bool bValuable, SfxMapUnit eMapUnit); + +private: + void PopupModeEndCallback (void); +}; + +} } // end of namespace svx::sidebar + +#endif + +// eof diff --git a/svx/source/sidebar/line/LineWidthValueSet.cxx b/svx/source/sidebar/line/LineWidthValueSet.cxx new file mode 100644 index 000000000000..67839c250146 --- /dev/null +++ b/svx/source/sidebar/line/LineWidthValueSet.cxx @@ -0,0 +1,196 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "LineWidthValueSet.hxx" + +#include <i18npool/mslangid.hxx> + +namespace svx { namespace sidebar { + + +LineWidthValueSet::LineWidthValueSet ( + Window* pParent, const ResId& rResId) + : ValueSet( pParent, rResId ), + pVDev(NULL), + nSelItem(0), + bCusEnable(false) +{ + strUnit = new XubString[9]; + SetColCount( 1 ); + SetLineCount( 9); +} + + + + +LineWidthValueSet::~LineWidthValueSet (void) +{ + delete pVDev; + delete[] strUnit; +} + + + + +void LineWidthValueSet::SetUnit(XubString* str) +{ + for(int i = 0; i < 9; i++) + { + strUnit[i] = str[i]; + } +} + + + +void LineWidthValueSet::SetSelItem(sal_uInt16 nSel) +{ + nSelItem = nSel; + if(nSel == 0) + { + SelectItem(1); // ,false); // 'false' nut supported by AOO + SetNoSelection(); + } + else + { + SelectItem(nSelItem); + GrabFocus(); + } +} + + + + +sal_uInt16 LineWidthValueSet::GetSelItem() +{ + return nSelItem; +} + + + + +void LineWidthValueSet::SetImage(Image img) +{ + imgCus = img; +} + + + + +void LineWidthValueSet::SetCusEnable(bool bEnable) +{ + bCusEnable = bEnable; +} + + + + +void LineWidthValueSet::UserDraw( const UserDrawEvent& rUDEvt ) +{ + Rectangle aRect = rUDEvt.GetRect(); + OutputDevice* pDev = rUDEvt.GetDevice(); + sal_uInt16 nItemId = rUDEvt.GetItemId(); + + long nRectHeight = aRect.GetHeight(); + long nRectWidth = aRect.GetWidth(); + Point aBLPos = aRect.TopLeft(); + + //const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + //Color aBackColor(0,0,200); + //const Color aTextColor = rStyleSettings.GetFieldTextColor(); + Font aOldFont = pDev->GetFont(); + Color aOldColor = pDev->GetLineColor(); + Color aOldFillColor = pDev->GetFillColor(); + + Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); + Size aSize = aFont.GetSize(); + aSize.Height() = nRectHeight*3/5; + aFont.SetSize( aSize ); + + Point aLineStart(aBLPos.X() + 5, aBLPos.Y() + ( nRectHeight - nItemId )/2); + Point aLineEnd(aBLPos.X() + nRectWidth * 7 / 9 - 10, aBLPos.Y() + ( nRectHeight - nItemId )/2); + if(nItemId == 9) + { + Point aImgStart(aBLPos.X() + 5, aBLPos.Y() + ( nRectHeight - 23 ) / 2); + pDev->DrawImage(aImgStart, imgCus); + // Point aStart(aImgStart.X() + 14 + 20 , aBLPos.Y() + nRectHeight/6); + Rectangle aStrRect = aRect; + aStrRect.Top() += nRectHeight/6; + aStrRect.Bottom() -= nRectHeight/6; + aStrRect.Left() += imgCus.GetSizePixel().Width() + 20; + if(bCusEnable) + aFont.SetColor(GetSettings().GetStyleSettings().GetFieldTextColor()); + else + aFont.SetColor(GetSettings().GetStyleSettings().GetDisableColor()); + + pDev->SetFont(aFont); + pDev->DrawText(aStrRect, strUnit[ nItemId - 1 ], TEXT_DRAW_ENDELLIPSIS); + } + else + { + if( nSelItem == nItemId ) + { + Color aBackColor(50,107,197); + Rectangle aBackRect = aRect; + aBackRect.Top() += 3; + aBackRect.Bottom() -= 2; + pDev->SetFillColor(aBackColor); + pDev->DrawRect(aBackRect); + } + else + { + pDev->SetFillColor( COL_TRANSPARENT ); + pDev->DrawRect(aRect); + } + + //draw text + if(nSelItem == nItemId ) + aFont.SetColor(COL_WHITE); + else + aFont.SetColor(GetSettings().GetStyleSettings().GetFieldTextColor()); + pDev->SetFont(aFont); + Point aStart(aBLPos.X() + nRectWidth * 7 / 9 , aBLPos.Y() + nRectHeight/6); + pDev->DrawText(aStart, strUnit[ nItemId - 1 ]); //can't set TEXT_DRAW_ENDELLIPSIS here ,or the text will disappear + + //draw line + if( nSelItem == nItemId ) + pDev->SetLineColor(COL_WHITE); + else + pDev->SetLineColor(GetSettings().GetStyleSettings().GetFieldTextColor()); + + for(sal_uInt16 i = 1; i <= nItemId; i++) + { + pDev->DrawLine(aLineStart,aLineEnd ); + aLineStart.setY(aLineStart.getY() + 1); + aLineEnd.setY (aLineEnd.getY() + 1); + } + } + + Invalidate( aRect ); + pDev->SetLineColor(aOldColor); + pDev->SetFillColor(aOldFillColor); + pDev->SetFont(aOldFont); +} + + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/line/LineWidthValueSet.hxx b/svx/source/sidebar/line/LineWidthValueSet.hxx new file mode 100644 index 000000000000..da42d4f7ee85 --- /dev/null +++ b/svx/source/sidebar/line/LineWidthValueSet.hxx @@ -0,0 +1,57 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_LINE_WIDTH_VALUE_SET_HXX +#define SVX_SIDEBAR_LINE_WIDTH_VALUE_SET_HXX + +#include <svtools/valueset.hxx> +#include <vcl/image.hxx> + +namespace svx { namespace sidebar { + +class LineWidthValueSet + : public ValueSet +{ +public: + LineWidthValueSet (Window* pParent, const ResId& rResId); + virtual ~LineWidthValueSet (void); + + void SetUnit(XubString* str); + void SetSelItem(sal_uInt16 nSel); + sal_uInt16 GetSelItem(); + void SetImage(Image img); + void SetCusEnable(bool bEnable); + + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + +protected: + VirtualDevice* pVDev; + sal_uInt16 nSelItem; + XubString* strUnit; + Image imgCus; + bool bCusEnable; +}; + +} } // end of namespace svx::sidebar + +#endif // SVX_SIDEBAR_LINE_WIDTH_VALUE_SET_HXX + +// eof diff --git a/svx/source/sidebar/nbdtmg.cxx b/svx/source/sidebar/nbdtmg.cxx new file mode 100755 index 000000000000..28c7a9bec2de --- /dev/null +++ b/svx/source/sidebar/nbdtmg.cxx @@ -0,0 +1,2101 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ +#include "precompiled_svx.hxx" +#ifndef _NBDTMG_HXX +#include <svx/nbdtmg.hxx> +#endif +#ifndef _SVX_SVXIDS_HRC +#include <svx/svxids.hrc> +#endif +#ifndef _SV_SVAPP_HXX +#include <vcl/svapp.hxx> +#endif +#ifndef _SFXITEMSET_HXX +#include <svl/itemset.hxx> +#endif +#ifndef _SFXREQUEST_HXX +#include <sfx2/request.hxx> +#endif +#ifndef _SFXSTRITEM_HXX +#include <svl/stritem.hxx> +#endif +#ifndef _UNO_LINGU_HXX +#include <editeng/unolingu.hxx> +#endif +#ifndef _CTRLTOOL_HXX +#include <svtools/ctrltool.hxx> +#endif +#ifndef _SFX_OBJSH_HXX +#include <sfx2/objsh.hxx> +#endif +#ifndef _SVX_FLSTITEM_HXX +#include <editeng/flstitem.hxx> +#endif +#ifndef _SFXITEMPOOL_HXX +#include <svl/itempool.hxx> +#endif +#ifndef _SV_OUTDEV_HXX +#include <vcl/outdev.hxx> +#endif +#ifndef _GALLERY_HXX_ +#include <svx/gallery.hxx> +#endif +#ifndef _SVX_BRSHITEM_HXX +#include <editeng/brshitem.hxx> +#endif +#include <svx/dialmgr.hxx> +#ifndef _SVX_DIALOGS_HRC +#include <svx/dialogs.hrc> +#endif +#ifndef _SV_GRAPH_HXX +#include <vcl/graph.hxx> +#endif + +#include <unotools/streamwrap.hxx> +#include <unotools/ucbstreamhelper.hxx> +#include <unotools/pathoptions.hxx> +#include <editeng/eeitem.hxx> + +#include <com/sun/star/text/HoriOrientation.hpp> +#include <com/sun/star/text/VertOrientation.hpp> +#include <com/sun/star/text/RelOrientation.hpp> +#include <com/sun/star/style/NumberingType.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/container/XIndexAccess.hpp> +#include <com/sun/star/text/XDefaultNumberingProvider.hpp> +#include <com/sun/star/text/XNumberingFormatter.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <comphelper/processfactory.hxx> +#include <com/sun/star/text/XNumberingTypeInfo.hpp> + +using namespace com::sun::star; +using namespace com::sun::star::uno; +using namespace com::sun::star::beans; +using namespace com::sun::star::lang; +using namespace com::sun::star::text; +using namespace com::sun::star::container; +using namespace com::sun::star::style; +using rtl::OUString; + +namespace svx { namespace sidebar { +#define NUM_TYPE_MEMBER 4 +#define NUM_VALUSET_COUNT 16 +#define MAX_VALUESET_GRAPHIC 30 + +typedef NumSettings_Impl* NumSettings_ImplPtr; +SV_DECL_PTRARR_DEL(NumSettingsArr_Impl,NumSettings_ImplPtr,8,4) +SV_IMPL_PTRARR( NumSettingsArr_Impl, NumSettings_ImplPtr ) + +typedef NumberSettings_Impl* NumberSettings_ImplPtr; +SV_DECL_PTRARR_DEL(NumberSettingsArr_Impl,NumberSettings_ImplPtr,8,4) +SV_IMPL_PTRARR( NumberSettingsArr_Impl, NumberSettings_ImplPtr ) + +Font& lcl_GetDefaultBulletFont() +{ + static sal_Bool bInit = 0; + static Font aDefBulletFont( UniString::CreateFromAscii( + RTL_CONSTASCII_STRINGPARAM( "StarSymbol" ) ), + String(), Size( 0, 14 ) ); + if(!bInit) + { + aDefBulletFont.SetCharSet( RTL_TEXTENCODING_SYMBOL ); + aDefBulletFont.SetFamily( FAMILY_DONTKNOW ); + aDefBulletFont.SetPitch( PITCH_DONTKNOW ); + aDefBulletFont.SetWeight( WEIGHT_DONTKNOW ); + aDefBulletFont.SetTransparent( sal_True ); + bInit = sal_True; + } + return aDefBulletFont; +} + +static const sal_Unicode aDefaultBulletTypes[] = +{ + 0x2022, + 0x25cf, + 0xe00c, + 0xe00a, + 0x2794, + 0x27a2, + 0x2717, + 0x2714 +}; + +static const sal_Unicode aDefaultRTLBulletTypes[] = +{ + 0x2022, + 0x25cf, + 0xe00c, + 0xe00a, + 0x25c4, + 0x272b, + 0x2717, + 0x2714 +}; + +static const sal_Char sNumberingType[] = "NumberingType"; +static const sal_Char sValue[] = "Value"; +static const sal_Char sParentNumbering[] = "ParentNumbering"; +static const sal_Char sPrefix[] = "Prefix"; +static const sal_Char sSuffix[] = "Suffix"; +static const sal_Char sBulletChar[] = "BulletChar"; +static const sal_Char sBulletFontName[] = "BulletFontName"; + +NumSettings_ImplPtr lcl_CreateNumberingSettingsPtr(const Sequence<PropertyValue>& rLevelProps) +{ + const PropertyValue* pValues = rLevelProps.getConstArray(); + NumSettings_ImplPtr pNew = new NumSettings_Impl; + for(sal_Int32 j = 0; j < rLevelProps.getLength(); j++) + { + if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sNumberingType))) + pValues[j].Value >>= pNew->nNumberType; + else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sPrefix))) + pValues[j].Value >>= pNew->sPrefix; + else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sSuffix))) + pValues[j].Value >>= pNew->sSuffix; + else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sParentNumbering))) + pValues[j].Value >>= pNew->nParentNumbering; + else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sBulletChar))) + pValues[j].Value >>= pNew->sBulletChar; + else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sBulletFontName))) + pValues[j].Value >>= pNew->sBulletFont; + } + const sal_Unicode cLocalPrefix = pNew->sPrefix.getLength() ? pNew->sPrefix.getStr()[0] : 0; + const sal_Unicode cLocalSuffix = pNew->sSuffix.getLength() ? pNew->sSuffix.getStr()[0] : 0; + String aEmptyStr; + if( cLocalPrefix == ' ') pNew->sPrefix=aEmptyStr; + if( cLocalSuffix == ' ') pNew->sSuffix=aEmptyStr; + return pNew; +} + +sal_uInt16 NBOTypeMgrBase:: IsSingleLevel(sal_uInt16 nCurLevel) +{ + sal_uInt16 nLv = (sal_uInt16)0xFFFF; + sal_uInt16 nCount = 0; + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < SVX_MAX_NUM; i++ ) + { + if(nCurLevel & nMask) + { + nCount++; + nLv=i; + } + nMask <<= 1 ; + } + + if ( nCount == 1) + return nLv; + else + return (sal_uInt16)0xFFFF; +} + +void NBOTypeMgrBase::StoreBulCharFmtName_impl() { + if ( pSet ) + { + SfxAllItemSet aSet(*pSet); + SFX_ITEMSET_ARG(&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,sal_False); + + if ( pBulletCharFmt ) + { + aNumCharFmtName = String(pBulletCharFmt->GetValue()); + } + } +} +String NBOTypeMgrBase::GetBulCharFmtName() +{ + return aNumCharFmtName; +} +void NBOTypeMgrBase::ImplLoad(String filename) +{ + bIsLoading = true; + SfxMapUnit eOldCoreUnit=eCoreUnit; + eCoreUnit = SFX_MAPUNIT_100TH_MM; + INetURLObject aFile( SvtPathOptions().GetPalettePath() ); + aFile.Append( filename); + SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( aFile.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ ); + if( pIStm ) { + sal_uInt32 nVersion; + sal_Int32 nNumIndex; + *pIStm >> nVersion; + if (nVersion==DEFAULT_NUMBERING_CACHE_FORMAT_VERSION) //first version + { + *pIStm >> nNumIndex; + sal_uInt16 mLevel = 0x1; + while (nNumIndex>=0 && nNumIndex<DEFAULT_NUM_VALUSET_COUNT) { + SvxNumRule aNum(*pIStm); + //bullet color in font properties is not stored correctly. Need set tranparency bits manually + for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) + { + SvxNumberFormat aFmt(aNum.GetLevel(i)); + if (aFmt.GetBulletFont()) { + Font aFont(*aFmt.GetBulletFont()); + Color c=aFont.GetColor(); + c.SetTransparency(0xFF); + aFont.SetColor(c); + aFmt.SetBulletFont(&aFont); + aNum.SetLevel(i, aFmt); + } + } + RelplaceNumRule(aNum,nNumIndex,mLevel); + *pIStm >> nNumIndex; + } + delete pIStm; + } + } + eCoreUnit = eOldCoreUnit; + bIsLoading = false; +} +void NBOTypeMgrBase::ImplStore(String filename) +{ + if (bIsLoading) return; + SfxMapUnit eOldCoreUnit=eCoreUnit; + eCoreUnit = SFX_MAPUNIT_100TH_MM; + INetURLObject aFile( SvtPathOptions().GetPalettePath() ); + aFile.Append( filename); + SvStream* pOStm = ::utl::UcbStreamHelper::CreateStream( aFile.GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE ); + if( pOStm ) { + sal_uInt32 nVersion; + sal_Int32 nNumIndex; + nVersion = DEFAULT_NUMBERING_CACHE_FORMAT_VERSION; + *pOStm << nVersion; + for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) { + if (IsCustomized(nItem)) { + SvxNumRule aDefNumRule( NUM_BULLET_REL_SIZE|NUM_CONTINUOUS|NUM_BULLET_COLOR|NUM_CHAR_TEXT_DISTANCE|NUM_SYMBOL_ALIGNMENT,10, sal_False , + SVX_RULETYPE_NUMBERING,SvxNumberFormat::LABEL_ALIGNMENT); + sal_uInt16 mLevel = 0x1; + *pOStm << nItem; + ApplyNumRule(aDefNumRule,nItem,mLevel,false,true); + aDefNumRule.Store(*pOStm); + } + } + nNumIndex = -1; + *pOStm << nNumIndex; //write end flag + delete pOStm; + } + eCoreUnit = eOldCoreUnit; +} + +void NBOTypeMgrBase::StoreMapUnit_impl() { + if ( pSet ) + { + const SfxPoolItem* pItem; + SfxItemState eState = pSet->GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); + if(eState == SFX_ITEM_SET) + { + eCoreUnit = pSet->GetPool()->GetMetric(pSet->GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE)); + } else { + //Sym3_2508 sd use different sid for numbering rule + eState = pSet->GetItemState(EE_PARA_NUMBULLET, sal_False, &pItem); + if(eState == SFX_ITEM_SET) + { + eCoreUnit = pSet->GetPool()->GetMetric(pSet->GetPool()->GetWhich(EE_PARA_NUMBULLET)); + } + } + } +} +SfxMapUnit NBOTypeMgrBase::GetMapUnit() +{ + return eCoreUnit; +} +/*************************************************************************************************** +**********************Character Bullet Type lib********************************************************** +****************************************************************************************************/ +BulletsTypeMgr* BulletsTypeMgr::_instance = 0; +BulletsSettings_Impl* BulletsTypeMgr::pActualBullets[] ={0,0,0,0,0,0,0,0}; +sal_Unicode BulletsTypeMgr::aDynamicBulletTypes[]={' ',' ',' ',' ',' ',' ',' ',' '}; +sal_Unicode BulletsTypeMgr::aDynamicRTLBulletTypes[]={' ',' ',' ',' ',' ',' ',' ',' '}; + +BulletsTypeMgr::BulletsTypeMgr(const NBOType aType): + NBOTypeMgrBase(aType) +{ + Init(); +} + +BulletsTypeMgr::BulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg): + NBOTypeMgrBase(aType,pArg) +{ + Init(); +} + +BulletsTypeMgr::BulletsTypeMgr(const BulletsTypeMgr& aTypeMgr): + NBOTypeMgrBase(aTypeMgr) +{ + for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) + { + pActualBullets[i]->bIsCustomized = aTypeMgr.pActualBullets[i]->bIsCustomized; + pActualBullets[i]->cBulletChar = aTypeMgr.pActualBullets[i]->cBulletChar; + pActualBullets[i]->aFont = aTypeMgr.pActualBullets[i]->aFont; + pActualBullets[i]->sDescription = aTypeMgr. pActualBullets[i]->sDescription; + pActualBullets[i]->eType = aTypeMgr. pActualBullets[i]->eType; + } +} +void BulletsTypeMgr::Init() +{ + Font& rActBulletFont = lcl_GetDefaultBulletFont(); + String sName = rActBulletFont.GetName(); + if( Application::GetSettings().GetLayoutRTL() ) + { + for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) + { + pActualBullets[i] = new BulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[i]->cBulletChar = aDefaultRTLBulletTypes[i]; + pActualBullets[i]->aFont = rActBulletFont; + if (i==4 || i==5) + pActualBullets[i]->sDescription = SVX_RESSTR( RID_SVXSTR_BULLET_RTL_DESCRIPTION_4 - 4 + i ); + else + pActualBullets[i]->sDescription = SVX_RESSTR( RID_SVXSTR_BULLET_DESCRIPTION_0 + i ); + } + }else + { + for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) + { + pActualBullets[i] = new BulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[i]->cBulletChar = aDefaultBulletTypes[i]; + pActualBullets[i]->aFont =rActBulletFont; + pActualBullets[i]->sDescription = SVX_RESSTR( RID_SVXSTR_BULLET_DESCRIPTION_0 + i ); + } + } +} +sal_uInt16 BulletsTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) +{ + if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) + return (sal_uInt16)0xFFFF; + //if ( !lcl_IsNumFmtSet(pNR, mLevel) ) return (sal_uInt16)0xFFFF; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + + if ( nActLv == (sal_uInt16)0xFFFF ) + return (sal_uInt16)0xFFFF; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + sal_Unicode cChar = aFmt.GetBulletChar(); + const Font* pFont = aFmt.GetBulletFont(); + //sal_uInt16 nLength = 0; + /*if( Application::GetSettings().GetLayoutRTL() ) + { + nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); + for(sal_uInt16 i = 0; i < nLength; i++) + { + if ( cChar == aDynamicRTLBulletTypes[i] || + (cChar == 9830 && 57356 == aDynamicRTLBulletTypes[i]) || + (cChar == 9632 && 57354 == aDynamicRTLBulletTypes[i]) ) + { + return i+1; + } + } + } else + { + nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); + for(sal_uInt16 i = 0; i < nLength; i++) + { + if ( cChar == aDynamicBulletTypes[i] || + (cChar == 9830 && 57356 == aDynamicBulletTypes[i]) || + (cChar == 9632 && 57354 == aDynamicBulletTypes[i]) ) + { + return i+1; + } + } + }*/ + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + for(sal_uInt16 i = nFromIndex; i < DEFAULT_BULLET_TYPES; i++) + { + if ( (cChar == pActualBullets[i]->cBulletChar|| + (cChar == 9830 && 57356 == pActualBullets[i]->cBulletChar) || + (cChar == 9632 && 57354 == pActualBullets[i]->cBulletChar)))// && pFont && (pFont->GetName().CompareTo(pActualBullets[i]->aFont.GetName())==COMPARE_EQUAL)) + { + return i+1; + } + } + + return (sal_uInt16)0xFFFF; +} + +sal_Bool BulletsTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) +{ + if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) + return sal_False; + + if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) + return sal_False; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + + if ( nActLv == (sal_uInt16)0xFFFF ) + return sal_False; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + sal_Unicode cChar = aFmt.GetBulletChar(); + const Font* pFont = aFmt.GetBulletFont(); + //sal_uInt16 nLength = 0; + /*if( Application::GetSettings().GetLayoutRTL() ) + { + nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); + + if ( nIndex >= nLength ) + return sal_False; + + aDynamicRTLBulletTypes[nIndex] = cChar; + } else + { + nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); + + if ( nIndex >= nLength ) + return sal_False; + + aDynamicBulletTypes[nIndex] = cChar; + }*/ + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + if ( nIndex >= DEFAULT_BULLET_TYPES ) + return sal_False; + + pActualBullets[nIndex]->cBulletChar = cChar; + if ( pFont ) + pActualBullets[nIndex]->aFont = *pFont; + pActualBullets[nIndex]->bIsCustomized = sal_True; + + String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + aStrFromRES.SearchAndReplace(aReplace,sNUM); + pActualBullets[nIndex]->sDescription = aStrFromRES; + + return sal_True; +} + +sal_Bool BulletsTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool isDefault,sal_Bool isResetSize) +{ + //if ( mLevel == (sal_uInt16)0xFFFF ) + // return sal_False; + + sal_Unicode cChar; + //sal_uInt16 nLength = 0; + /*if( Application::GetSettings().GetLayoutRTL() ) + { + nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); + + if ( nIndex >= nLength ) + return sal_False; + + cChar = aDynamicRTLBulletTypes[nIndex]; + }else + { + nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); + + if ( nIndex >= nLength ) + return sal_False; + + cChar = aDynamicBulletTypes[nIndex]; + }*/ + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + if ( nIndex >= DEFAULT_BULLET_TYPES ) + return sal_False; + cChar = pActualBullets[nIndex]->cBulletChar; + //Font& rActBulletFont = lcl_GetDefaultBulletFont(); + Font rActBulletFont = pActualBullets[nIndex]->aFont; + + sal_uInt16 nMask = 1; + String sBulletCharFmtName = GetBulCharFmtName(); + for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) + { + if(mLevel & nMask) + { + SvxNumberFormat aFmt(aNum.GetLevel(i)); + aFmt.SetNumberingType( SVX_NUM_CHAR_SPECIAL ); + aFmt.SetBulletFont(&rActBulletFont); + aFmt.SetBulletChar(cChar ); + aFmt.SetCharFmtName(sBulletCharFmtName); + if (isResetSize) aFmt.SetBulletRelSize(45); + aNum.SetLevel(i, aFmt); + } + nMask <<= 1; + } + + return sal_True; +} + +String BulletsTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) +{ + String sRet; + //sal_uInt16 nLength = 0; + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + + if ( nIndex >= DEFAULT_BULLET_TYPES ) + return sRet; + else + sRet = pActualBullets[nIndex]->sDescription; + + return sRet; +} +sal_Bool BulletsTypeMgr::IsCustomized(sal_uInt16 nIndex) +{ + sal_Bool bRet = sal_False; + //sal_uInt16 nLength = 0; + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + + if ( nIndex >= DEFAULT_BULLET_TYPES ) + bRet = sal_False; + else + bRet = pActualBullets[nIndex]->bIsCustomized; + + return bRet; +} + +sal_Unicode BulletsTypeMgr::GetBulChar(sal_uInt16 nIndex) +{ + sal_Unicode cChar; + //sal_uInt16 nLength = 0; + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + + if ( nIndex >= DEFAULT_BULLET_TYPES ) + cChar = ' '; + else + cChar = pActualBullets[nIndex]->cBulletChar; + + /*if( Application::GetSettings().GetLayoutRTL() ) + { + nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); + + if ( nIndex >= nLength ) + cChar = ' '; + else + cChar = aDynamicRTLBulletTypes[nIndex]; + }else + { + nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); + + if ( nIndex >= nLength ) + cChar = ' '; + else + cChar = aDynamicBulletTypes[nIndex]; + }*/ + + return cChar; +} +Font BulletsTypeMgr::GetBulCharFont(sal_uInt16 nIndex) +{ + Font aRet; + if ( nIndex >= DEFAULT_BULLET_TYPES ) + aRet = lcl_GetDefaultBulletFont(); + else + aRet = pActualBullets[nIndex]->aFont; + + return aRet; +} +/*************************************************************************************************** +**********************Graphic Bullet Type lib*********************************************************** +****************************************************************************************************/ +GraphyicBulletsTypeMgr* GraphyicBulletsTypeMgr::_instance = 0; +GraphyicBulletsTypeMgr::GraphyicBulletsTypeMgr(const NBOType aType): + NBOTypeMgrBase(aType) +{ + Init(); +} + +GraphyicBulletsTypeMgr::GraphyicBulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg): + NBOTypeMgrBase(aType,pArg) +{ + Init(); +} +GraphyicBulletsTypeMgr::GraphyicBulletsTypeMgr(const GraphyicBulletsTypeMgr& aTypeMgr): + NBOTypeMgrBase(aTypeMgr) +{ + for (sal_uInt16 i=0;i< aTypeMgr.aGrfDataLst.Count();i++) + { + GrfBulDataRelation* pEntry = new GrfBulDataRelation(eNBType::GRAPHICBULLETS); + GrfBulDataRelation* pSrcEntry = (GrfBulDataRelation*)(aTypeMgr.aGrfDataLst.GetObject(i)); + if ( pEntry && pSrcEntry) + { + pEntry->bIsCustomized = pSrcEntry->bIsCustomized; + pEntry->nTabIndex = pSrcEntry->nTabIndex; + pEntry->nGallaryIndex = pSrcEntry->nGallaryIndex; + pEntry->sGrfName = pSrcEntry->sGrfName; + pEntry->sDescription = pSrcEntry->sDescription; + aGrfDataLst.Insert( pEntry, LIST_APPEND ); + } + } +} +void GraphyicBulletsTypeMgr::Init() +{ + List aGrfNames; + GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, aGrfNames); + for(sal_uInt16 i = 0; i < aGrfNames.Count(); i++) + { + String* pGrfNm = (String*) aGrfNames.GetObject(i); + INetURLObject aObj(*pGrfNm); + if(aObj.GetProtocol() == INET_PROT_FILE) + *pGrfNm = aObj.PathToFileName(); + + GrfBulDataRelation* pEntry = new GrfBulDataRelation(eNBType::GRAPHICBULLETS); + pEntry->nTabIndex = i+1; + pEntry->nGallaryIndex = i; + pEntry->sGrfName = *pGrfNm; + + if( i < MAX_VALUESET_GRAPHIC ) + { + pEntry->sDescription = SVX_RESSTR( RID_SVXSTR_GRAPHICS_DESCRIPTIONS + i ); + }else + { + pEntry->sDescription = *pGrfNm; + } + + aGrfDataLst.Insert( pEntry, LIST_APPEND ); + } +} +sal_uInt16 GraphyicBulletsTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) +{ + if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) + return (sal_uInt16)0xFFFF; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + + if ( nActLv == (sal_uInt16)0xFFFF ) + return (sal_uInt16)0xFFFF; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + const SvxBrushItem* pBrsh = aFmt.GetBrush(); + const Graphic* pGrf = 0; + if ( pBrsh ) + pGrf = pBrsh->GetGraphic(); + + if ( pGrf ) + { + const String* pGrfName = pBrsh->GetGraphicLink(); + Graphic aGraphic; + for(sal_uInt16 i=0;i<aGrfDataLst.Count();i++) + { + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(i); + sal_Bool bExist = sal_False; + if ( pEntry) // && pEntry->sGrfName.CompareTo(*pGrfName)==COMPARE_EQUAL ) + bExist = GalleryExplorer::GetGraphicObj(GALLERY_THEME_BULLETS, pEntry->nGallaryIndex,&aGraphic); + if (bExist) { + Bitmap aSum=pGrf->GetBitmap(); + Bitmap aSum1=aGraphic.GetBitmap(); + if (aSum.IsEqual(aSum1)) + return pEntry->nTabIndex; + } + } + } + + return (sal_uInt16)0xFFFF; +} + +sal_Bool GraphyicBulletsTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) +{ + if ( mLevel == (sal_uInt16)0xFFFF || mLevel > aNum.GetLevelCount() || mLevel == 0) + return sal_False; + + if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) + return sal_False; + + if ( nIndex >= aGrfDataLst.Count() ) + return sal_False; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + if ( nActLv == (sal_uInt16)0xFFFF ) + return sal_False; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + const SvxBrushItem* pBrsh = aFmt.GetBrush(); + const Graphic* pGrf = 0; + if ( pBrsh ) + pGrf = pBrsh->GetGraphic(); + else + return sal_False; + + String sEmpty; + if ( pGrf ) + { + const String* pGrfName = pBrsh->GetGraphicLink(); + //String* pGrfName = (String*)(pBrsh->GetGraphicLink()); + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); + if ( pGrfName ) + pEntry->sGrfName = *pGrfName; + //pEntry->sDescription = sEmpty; + pEntry->nGallaryIndex = (sal_uInt16)0xFFFF; + pEntry->bIsCustomized = sal_True; + String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + aStrFromRES.SearchAndReplace(aReplace,sNUM); + pEntry->sDescription = aStrFromRES; + }else + { + return sal_False; + } + + return sal_True; +} + +sal_Bool GraphyicBulletsTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool isDefault,sal_Bool isResetSize) +{ + //if ( mLevel == (sal_uInt16)0xFFFF ) + // return sal_False; + + if ( nIndex >= aGrfDataLst.Count() ) + return sal_False; + + String sGrfName; + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); + sGrfName= pEntry->sGrfName; + + sal_uInt16 nMask = 1; + String aEmptyStr; + sal_uInt16 nSetNumberingType = SVX_NUM_BITMAP; + String sNumCharFmtName = GetBulCharFmtName(); + for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) + { + if(mLevel & nMask) + { + SvxNumberFormat aFmt(aNum.GetLevel(i)); + aFmt.SetNumberingType(nSetNumberingType); + aFmt.SetPrefix( aEmptyStr ); + aFmt.SetSuffix( aEmptyStr ); + aFmt.SetCharFmtName( sNumCharFmtName ); + + Graphic aGraphic; + if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, pEntry->nGallaryIndex, &aGraphic)) + { + Size aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic); + sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; + aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); + SvxBrushItem aBrush(aGraphic, GPOS_AREA, SID_ATTR_BRUSH ); + aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient ); + } + else// if(pGrfName) + aFmt.SetGraphic( sGrfName ); + + aNum.SetLevel(i, aFmt); + } + nMask <<= 1 ; + } + + return sal_True; +} +String GraphyicBulletsTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) +{ + String sRet; + sal_uInt16 nLength = 0; + nLength = aGrfDataLst.Count() ; + + if ( nIndex >= nLength ) + return sRet; + else + { + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); + if ( pEntry ) + { + sRet = pEntry->sDescription; + }; + } + return sRet; +} +sal_Bool GraphyicBulletsTypeMgr::IsCustomized(sal_uInt16 nIndex) +{ + sal_Bool bRet = sal_False; + + sal_uInt16 nLength = 0; + nLength = aGrfDataLst.Count() ; + + if ( nIndex >= nLength ) + return bRet; + else + { + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); + if ( pEntry ) + { + bRet = pEntry->bIsCustomized; + }; + } + + return bRet; +} +String GraphyicBulletsTypeMgr::GetGrfName(sal_uInt16 nIndex) +{ + String sRet; + if ( nIndex < aGrfDataLst.Count() ) + { + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); + if ( pEntry ) + { + sRet = pEntry->sGrfName; + } + } + + return sRet; +} +/*************************************************************************************************** +**********************Mix Bullets Type lib************************************************************** +****************************************************************************************************/ +MixBulletsTypeMgr* MixBulletsTypeMgr::_instance = 0; +MixBulletsSettings_Impl* MixBulletsTypeMgr::pActualBullets[] ={0,0,0,0,0,0,0,0}; +MixBulletsSettings_Impl* MixBulletsTypeMgr::pDefaultActualBullets[] ={0,0,0,0,0,0,0,0}; + +MixBulletsTypeMgr::MixBulletsTypeMgr(const NBOType aType): + NBOTypeMgrBase(aType) +{ + Init(); + for(sal_Int32 nItem = 0; nItem < DEFAULT_BULLET_TYPES; nItem++ ) + { + pDefaultActualBullets[nItem] = pActualBullets[nItem]; + } + //Initial the first time to store the default value. Then do it again for customized value + Init(); + ImplLoad(String::CreateFromAscii("standard.sya")); +} + +MixBulletsTypeMgr::MixBulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg): + NBOTypeMgrBase(aType,pArg) +{ + Init(); + for(sal_Int32 nItem = 0; nItem < DEFAULT_BULLET_TYPES; nItem++ ) + { + pDefaultActualBullets[nItem] = pActualBullets[nItem]; + } + //Initial the first time to store the default value. Then do it again for customized value + Init(); + ImplLoad(String::CreateFromAscii("standard.sya")); +} + +MixBulletsTypeMgr::MixBulletsTypeMgr(const MixBulletsTypeMgr& aTypeMgr): + NBOTypeMgrBase(aTypeMgr) +{ + for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) + { + if ( aTypeMgr.pActualBullets[i]->eType == eNBType::BULLETS ) + { + pActualBullets[i]->eType = aTypeMgr.pActualBullets[i]->eType; + pActualBullets[i]->nIndex = aTypeMgr.pActualBullets[i]->nIndex; //index in the tab page display + pActualBullets[i]->nIndexDefault = aTypeMgr.pActualBullets[i]->nIndexDefault; + pActualBullets[i]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->cBulletChar; + ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->aFont = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->aFont; + ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->sDescription = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->sDescription; + ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->bIsCustomized = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->bIsCustomized; + ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->eType = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->eType; + }else if ( aTypeMgr.pActualBullets[i]->eType == eNBType::GRAPHICBULLETS ) + { + pActualBullets[i]->eType = aTypeMgr.pActualBullets[i]->eType; + pActualBullets[i]->nIndex = aTypeMgr.pActualBullets[i]->nIndex; //index in the tab page display + pActualBullets[i]->nIndexDefault = aTypeMgr.pActualBullets[i]->nIndexDefault; + pActualBullets[i]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; + ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->sGrfName = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->sGrfName; + ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->sDescription = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->sDescription; + ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->bIsCustomized = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->bIsCustomized; + ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->eType = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->eType; + if ( ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->bIsCustomized && ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->pGrfObj != NULL) + { + ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->pGrfObj = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->pGrfObj; + } + } + } + ImplLoad(String::CreateFromAscii("standard.sya")); +} +void MixBulletsTypeMgr::Init() +{ + BulletsTypeMgr* pBTMgr = BulletsTypeMgr::GetInstance(); + if ( pBTMgr ) + { + //Index 1 + pActualBullets[0] = new MixBulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[0]->eType = eNBType::BULLETS; + pActualBullets[0]->nIndex = 0+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[0]->nIndexDefault = 2; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[0]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[0]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[0]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[0]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[0]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->eType = eNBType::BULLETS; + + //Index 2 + pActualBullets[1] = new MixBulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[1]->eType = eNBType::BULLETS; + pActualBullets[1]->nIndex = 1+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[1]->nIndexDefault = 3; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[1]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[1]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[1]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[1]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[1]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->eType = eNBType::BULLETS; + + //Index 3 + pActualBullets[2] = new MixBulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[2]->eType = eNBType::BULLETS; + pActualBullets[2]->nIndex = 2+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[2]->nIndexDefault = 4; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[2]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[2]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[2]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[2]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[2]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->eType = eNBType::BULLETS; + + //Index 4 + pActualBullets[3] = new MixBulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[3]->eType = eNBType::BULLETS; + pActualBullets[3]->nIndex = 3+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[3]->nIndexDefault = 5; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[3]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[3]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[3]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[3]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[3]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->eType = eNBType::BULLETS; + + //Index 5 + pActualBullets[4] = new MixBulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[4]->eType = eNBType::BULLETS; + pActualBullets[4]->nIndex = 4+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[4]->nIndexDefault = 6; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[4]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[4]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[4]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[4]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[4]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->eType = eNBType::BULLETS; + + //Index 6 + pActualBullets[5] = new MixBulletsSettings_Impl(eNBType::BULLETS); + pActualBullets[5]->eType = eNBType::BULLETS; + pActualBullets[5]->nIndex = 5+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[5]->nIndexDefault = 8; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[5]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[5]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[5]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[5]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[5]->nIndexDefault-1); + ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->eType = eNBType::BULLETS; + } + + GraphyicBulletsTypeMgr* mGrfTMgr = GraphyicBulletsTypeMgr::GetInstance(); + if ( mGrfTMgr ) + { + //Index 7 + pActualBullets[6] = new MixBulletsSettings_Impl(eNBType::GRAPHICBULLETS); + pActualBullets[6]->eType = eNBType::GRAPHICBULLETS; + pActualBullets[6]->nIndex = 6+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[6]->nIndexDefault = 9; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[6]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; + ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->sGrfName = mGrfTMgr->GetGrfName(pActualBullets[6]->nIndexDefault); + ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->sDescription = mGrfTMgr->GetDescription(pActualBullets[6]->nIndexDefault); + ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->bIsCustomized = mGrfTMgr->IsCustomized(pActualBullets[6]->nIndexDefault); + ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->eType = eNBType::GRAPHICBULLETS; + + //Index 8 + pActualBullets[7] = new MixBulletsSettings_Impl(eNBType::GRAPHICBULLETS); + pActualBullets[7]->eType = eNBType::GRAPHICBULLETS; + pActualBullets[7]->nIndex = 7+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[7]->nIndexDefault = 23; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[7]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; + ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->sGrfName = mGrfTMgr->GetGrfName(pActualBullets[7]->nIndexDefault); + ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->sDescription = mGrfTMgr->GetDescription(pActualBullets[7]->nIndexDefault); + ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->bIsCustomized = mGrfTMgr->IsCustomized(pActualBullets[7]->nIndexDefault); + ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->eType = eNBType::GRAPHICBULLETS; + } + +} +sal_uInt16 MixBulletsTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) +{ + if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) + return (sal_uInt16)0xFFFF; + //if ( !lcl_IsNumFmtSet(pNR, mLevel) ) return (sal_uInt16)0xFFFF; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + + if ( nActLv == (sal_uInt16)0xFFFF ) + return (sal_uInt16)0xFFFF; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + sal_Int16 eNumType = aFmt.GetNumberingType(); + if( eNumType == SVX_NUM_CHAR_SPECIAL) + { + sal_Unicode cChar = aFmt.GetBulletChar(); + const Font* pFont = aFmt.GetBulletFont(); + String sName = pFont?pFont->GetName():String(); + + for(sal_uInt16 i = nFromIndex; i < DEFAULT_BULLET_TYPES; i++) + { + if ( pActualBullets[i]->eType == eNBType::BULLETS ) + { + String ssName = ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->aFont.GetName(); + if ( (cChar == ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar|| + (cChar == 9830 && 57356 == ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar) || + (cChar == 9632 && 57354 == ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar)))//&& + //(pFont && pFont->GetName().CompareTo(((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->aFont.GetName())==COMPARE_EQUAL) ) + { + return pActualBullets[i]->nIndex; + } + } + } + }else if ( (eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) + { + const SvxBrushItem* pBrsh = aFmt.GetBrush(); + const Graphic* pGrf = 0; + if ( pBrsh ) + pGrf = pBrsh->GetGraphic(); + + if ( pGrf ) + { + const String* pGrfName = pBrsh->GetGraphicLink(); + //String* pGrfName = (String*)(pBrsh->GetGraphicLink()); + for(sal_uInt16 i = nFromIndex; i < DEFAULT_BULLET_TYPES; i++) + { + if ( pActualBullets[i]->eType == eNBType::GRAPHICBULLETS ) + { + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pActualBullets[i]->pBullets); + //sal_Bool bExist = sal_False; + if ( pEntry && pActualBullets[i]->nIndexDefault == (sal_uInt16)0xFFFF && pEntry->pGrfObj) + { + if ( pEntry->pGrfObj->GetBitmap().IsEqual(pGrf->GetBitmap())) + { + return pActualBullets[i]->nIndex; + } + }else { //if ( pEntry && pGrfName && pEntry->sGrfName.CompareTo(*pGrfName)==COMPARE_EQUAL ) + //bExist = GalleryExplorer::GetGraphicObj(GALLERY_THEME_BULLETS, pActualBullets[i]->nIndexDefault-1,pSrGrf); + Graphic aSrGrf; + if (pEntry) + GalleryExplorer::GetGraphicObj(GALLERY_THEME_BULLETS, pActualBullets[i]->nIndexDefault,&aSrGrf); + Bitmap aSum=pGrf->GetBitmap(); + Bitmap aSum1=aSrGrf.GetBitmap(); + if (aSum.IsEqual(aSum1)) + return pActualBullets[i]->nIndex; + } + } + } + } + } + + return (sal_uInt16)0xFFFF; +} + +sal_Bool MixBulletsTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) +{ + if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0 || nIndex>=DEFAULT_BULLET_TYPES) + return sal_False; + + //if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) + // return sal_False; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + + if ( nActLv == (sal_uInt16)0xFFFF ) + return sal_False; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + sal_Int16 eNumType = aFmt.GetNumberingType(); + if( eNumType == SVX_NUM_CHAR_SPECIAL && pActualBullets[nIndex]->eType == eNBType::BULLETS ) + { + sal_Unicode cChar = aFmt.GetBulletChar(); + const Font* pFont = aFmt.GetBulletFont(); + BulletsSettings_Impl* pEntry = (BulletsSettings_Impl*) (pActualBullets[nIndex]->pBullets); + pEntry->cBulletChar = cChar; + pEntry->aFont = pFont?*pFont:lcl_GetDefaultBulletFont(); + pEntry->bIsCustomized = sal_True; + String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + aStrFromRES.SearchAndReplace(aReplace,sNUM); + pEntry->sDescription = aStrFromRES; + + }else if ( (eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP && pActualBullets[nIndex]->eType == eNBType::GRAPHICBULLETS ) + { + const SvxBrushItem* pBrsh = aFmt.GetBrush(); + const Graphic* pGrf = 0; + if ( pBrsh ) + pGrf = pBrsh->GetGraphic(); + else + return sal_False; + + String sEmpty; + if ( pGrf ) + { + const String* pGrfName = pBrsh->GetGraphicLink(); + //String* pGrfName = (String*)(pBrsh->GetGraphicLink()); + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pActualBullets[nIndex]->pBullets); + if ( pGrfName ) + pEntry->sGrfName = *pGrfName; + GraphyicBulletsTypeMgr* mGrfTMgr = GraphyicBulletsTypeMgr::GetInstance(); + if ( mGrfTMgr ) + { + //sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); + //if ( nDIndex != (sal_uInt16)0xFFFF) + //{ + // pActualBullets[nIndex]->nIndexDefault = nDIndex -1; + // sEmpty = mGrfTMgr->GetDescription( nDIndex -1); + //}else + { + pActualBullets[nIndex]->nIndexDefault = (sal_uInt16)0xFFFF; + sEmpty = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + sEmpty.SearchAndReplace(aReplace,sNUM); + //pEntry->pGrfObj = pGrf; + pEntry->pGrfObj = new Graphic(*pGrf); + pEntry->aSize = aFmt.GetGraphicSize(); + pEntry->aSize = OutputDevice::LogicToLogic(pEntry->aSize,(MapUnit)GetMapUnit(),MAP_100TH_MM); + sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); + if (nDIndex!=(sal_uInt16)0xFFFF) pEntry->aSize=Size(0,0); + } + } + pEntry->sDescription = sEmpty; + pEntry->bIsCustomized = sal_True; + }else + { + return sal_False; + } + }else + { + delete pActualBullets[nIndex]->pBullets; + pActualBullets[nIndex]->pBullets = 0; + if ( eNumType == SVX_NUM_CHAR_SPECIAL ) + { + sal_Unicode cChar = aFmt.GetBulletChar(); + const Font* pFont = aFmt.GetBulletFont(); + pActualBullets[nIndex]->eType = eNBType::BULLETS; + pActualBullets[nIndex]->nIndex = nIndex+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[nIndex]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; + ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->cBulletChar = cChar; + ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->aFont = pFont?*pFont:lcl_GetDefaultBulletFont(); + ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->bIsCustomized = sal_True; + ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->eType = eNBType::BULLETS; + BulletsTypeMgr* pBTMgr = BulletsTypeMgr::GetInstance(); + if ( pBTMgr ) + { + //sal_uInt16 nDIndex = pBTMgr->GetNBOIndexForNumRule(aNum,mLevel); + //if ( nDIndex != (sal_uInt16)0xFFFF) + //{ + // pActualBullets[nIndex]->nIndexDefault = nDIndex -1; + // ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->sDescription = pBTMgr->GetDescription(nDIndex - 1); + //}else + { + pActualBullets[nIndex]->nIndexDefault = (sal_uInt16)0xFFFF; + String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + aStrFromRES.SearchAndReplace(aReplace,sNUM); + ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->sDescription = aStrFromRES; + } + } + }else if ( (eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) + { + const SvxBrushItem* pBrsh = aFmt.GetBrush(); + const Graphic* pGrf = 0; + if ( pBrsh ) + pGrf = pBrsh->GetGraphic(); + else + return sal_False; + + String sEmpty; + const String* pGrfName = 0; + if ( pGrf ) + { + pGrfName = pBrsh->GetGraphicLink(); + + pActualBullets[nIndex]->eType = eNBType::GRAPHICBULLETS; + pActualBullets[nIndex]->nIndex = nIndex+1; //index in the tab page display,decrease 1 to the index within arr + pActualBullets[nIndex]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; + if (pGrfName) + ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->sGrfName = *pGrfName; + ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->bIsCustomized = sal_True; + ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->eType = eNBType::GRAPHICBULLETS; + GraphyicBulletsTypeMgr* mGrfTMgr = GraphyicBulletsTypeMgr::GetInstance(); + if ( mGrfTMgr ) + { + //sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); + //if ( nDIndex != (sal_uInt16)0xFFFF) + //{ + // pActualBullets[nIndex]->nIndexDefault = nDIndex - 1; + // ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->sDescription = mGrfTMgr->GetDescription(nDIndex - 1); + //}else + { + pActualBullets[nIndex]->nIndexDefault = (sal_uInt16)0xFFFF; + String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + aStrFromRES.SearchAndReplace(aReplace,sNUM); + ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->sDescription = aStrFromRES; + //((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->pGrfObj = pGrf; + ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->pGrfObj = new Graphic(*pGrf); + ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->pGrfObj = new Graphic(*pGrf); + Size aTmpSize = aFmt.GetGraphicSize(); + aTmpSize = OutputDevice::LogicToLogic(aTmpSize,(MapUnit)GetMapUnit(),MAP_100TH_MM); + sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); + if (nDIndex!=(sal_uInt16)0xFFFF) aTmpSize=Size(0,0); + ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->aSize = aTmpSize; + + } + } + } + } + } + SvxNumRule aTmpRule1(aNum); + ApplyNumRule(aTmpRule1,nIndex,mLevel,true); + if (GetNBOIndexForNumRule(aTmpRule1,mLevel,nIndex)==nIndex+1) { + if (pActualBullets[nIndex]->eType == eNBType::BULLETS) { + BulletsSettings_Impl* pEntry = (BulletsSettings_Impl*) (pActualBullets[nIndex]->pBullets); + pEntry->bIsCustomized = false; + pEntry->sDescription = GetDescription(nIndex,true); + } + if (pActualBullets[nIndex]->eType == eNBType::GRAPHICBULLETS) { + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pActualBullets[nIndex]->pBullets); + pEntry->bIsCustomized = false; + pEntry->sDescription = GetDescription(nIndex,true); + } + } + ImplStore(String::CreateFromAscii("standard.sya")); + return sal_True; +} + +sal_Bool MixBulletsTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool isDefault,sal_Bool isResetSize) +{ + //if ( mLevel == (sal_uInt16)0xFFFF || nIndex>=DEFAULT_BULLET_TYPES ) + if ( nIndex>=DEFAULT_BULLET_TYPES ) + return sal_False; + MixBulletsSettings_Impl* pCurrentBullets = pActualBullets[nIndex]; + if (isDefault) pCurrentBullets=pDefaultActualBullets[nIndex]; + + if ( pCurrentBullets->eType == eNBType::BULLETS ) + { + sal_Unicode cChar; + cChar = ((BulletsSettings_Impl*)(pCurrentBullets->pBullets))->cBulletChar; + + //Font& rActBulletFont = lcl_GetDefaultBulletFont(); + Font rActBulletFont = ((BulletsSettings_Impl*)(pCurrentBullets->pBullets))->aFont; + sal_uInt16 nMask = 1; + String sBulletCharFmtName = GetBulCharFmtName(); + for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) + { + if(mLevel & nMask) + { + SvxNumberFormat aFmt(aNum.GetLevel(i)); + if (SVX_NUM_CHAR_SPECIAL !=aFmt.GetNumberingType()) isResetSize=true; + aFmt.SetNumberingType( SVX_NUM_CHAR_SPECIAL ); + aFmt.SetBulletFont(&rActBulletFont); + aFmt.SetBulletChar(cChar ); + aFmt.SetCharFmtName(sBulletCharFmtName); + String aEmptyStr; + aFmt.SetPrefix( aEmptyStr ); + aFmt.SetSuffix( aEmptyStr ); + if (isResetSize) aFmt.SetBulletRelSize(45); + aNum.SetLevel(i, aFmt); + } + nMask <<= 1; + } + }else if ( pCurrentBullets->eType == eNBType::GRAPHICBULLETS ) + { + String sGrfName; + GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pCurrentBullets->pBullets); + sGrfName= pEntry->sGrfName; + + sal_uInt16 nMask = 1; + String aEmptyStr; + sal_uInt16 nSetNumberingType = SVX_NUM_BITMAP; + String sNumCharFmtName = GetBulCharFmtName(); + for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) + { + if(mLevel & nMask) + { + SvxNumberFormat aFmt(aNum.GetLevel(i)); + if (SVX_NUM_BITMAP !=aFmt.GetNumberingType()) isResetSize=true; + aFmt.SetNumberingType(nSetNumberingType); + aFmt.SetPrefix( aEmptyStr ); + aFmt.SetSuffix( aEmptyStr ); + aFmt.SetCharFmtName( sNumCharFmtName ); + if ( pCurrentBullets->nIndexDefault == (sal_uInt16)0xFFFF && pEntry->pGrfObj ) + { + Size aSize = pEntry->aSize; + sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; + if (!isResetSize && aFmt.GetGraphicSize()!=Size(0,0)) aSize=aFmt.GetGraphicSize(); + else { + if (aSize.Width()==0 && aSize.Height()==0) { + aSize = SvxNumberFormat::GetGraphicSizeMM100( pEntry->pGrfObj ); + } + aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); + } + SvxBrushItem aBrush(*(pEntry->pGrfObj), GPOS_AREA, SID_ATTR_BRUSH ); + aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient ); + }else + { + Graphic aGraphic; + if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, pCurrentBullets->nIndexDefault, &aGraphic)) + { + Size aSize = pEntry->aSize; + sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; + if (!isResetSize && aFmt.GetGraphicSize()!=Size(0,0)) aSize=aFmt.GetGraphicSize(); + else { + if (aSize.Width()==0 && aSize.Height()==0) { + aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic); + } + aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); + } + SvxBrushItem aBrush(aGraphic, GPOS_AREA, SID_ATTR_BRUSH ); + aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient ); + }else + aFmt.SetGraphic( sGrfName ); + } + + aNum.SetLevel(i, aFmt); + } + nMask <<= 1 ; + } + } + + return sal_True; +} + +String MixBulletsTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) +{ + String sRet; + //sal_uInt16 nLength = 0; + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + + if ( nIndex >= DEFAULT_BULLET_TYPES ) + return sRet; + else + sRet = pActualBullets[nIndex]->pBullets->sDescription; + if (isDefault) sRet = pDefaultActualBullets[nIndex]->pBullets->sDescription; + return sRet; +} +sal_Bool MixBulletsTypeMgr::IsCustomized(sal_uInt16 nIndex) +{ + sal_Bool bRet = sal_False; + //sal_uInt16 nLength = 0; + //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); + + if ( nIndex >= DEFAULT_BULLET_TYPES ) + bRet = sal_False; + else + bRet = pActualBullets[nIndex]->pBullets->bIsCustomized; + + return bRet; +} +/*************************************************************************************************** +**********************Numbering Type lib************************************************************** +****************************************************************************************************/ +NumberingTypeMgr* NumberingTypeMgr::_instance = 0; + +NumberingTypeMgr::NumberingTypeMgr(const NBOType aType): + NBOTypeMgrBase(aType), + //pNumSettingsArr( new NumSettingsArr_Impl ), + pNumberSettingsArr (new NumberSettingsArr_Impl) +{ + Init(); + pDefaultNumberSettingsArr = pNumberSettingsArr; + pNumberSettingsArr = new NumberSettingsArr_Impl; + //Initial the first time to store the default value. Then do it again for customized value + Init(); + ImplLoad(String::CreateFromAscii("standard.syb")); +} + +NumberingTypeMgr::NumberingTypeMgr(const NBOType aType,const SfxItemSet* pArg): + NBOTypeMgrBase(aType,pArg), + //pNumSettingsArr( new NumSettingsArr_Impl ), + pNumberSettingsArr (new NumberSettingsArr_Impl) +{ + Init(); + pDefaultNumberSettingsArr = pNumberSettingsArr; + pNumberSettingsArr = new NumberSettingsArr_Impl; + //Initial the first time to store the default value. Then do it again for customized value + Init(); + ImplLoad(String::CreateFromAscii("standard.syb")); +} + +NumberingTypeMgr::NumberingTypeMgr(const NumberingTypeMgr& aTypeMgr): + NBOTypeMgrBase(aTypeMgr), + //pNumSettingsArr( new NumSettingsArr_Impl ), + pNumberSettingsArr (new NumberSettingsArr_Impl) +{ + /* + for(sal_uInt16 i=0;i<aTypeMgr.GetNumCount();i++) + { + NumberSettings_Impl* _pSet = aTypeMgr.GetNumSettingByIndex(i); + if ( _pSet ) + { + pNumberSettingsArr->GetObject(i)->nIndex = _pSet->nIndex; + pNumberSettingsArr->GetObject(i)->nIndexDefault = _pSet->nIndexDefault; + pNumberSettingsArr->GetObject(i)->sDescription = _pSet->sDescription; + pNumberSettingsArr->GetObject(i)->bIsCustomized = _pSet->bIsCustomized; + if ( _pSet->pNumSetting ) + { + pNumberSettingsArr->GetObject(i)->pNumSetting->nNumberType = _pSet->pNumSetting->nNumberType; + pNumberSettingsArr->GetObject(i)->pNumSetting->nParentNumbering = _pSet->pNumSetting->nParentNumbering; + pNumberSettingsArr->GetObject(i)->pNumSetting->sPrefix = _pSet->pNumSetting->sPrefix; + pNumberSettingsArr->GetObject(i)->pNumSetting->sSuffix = _pSet->pNumSetting->sSuffix; + pNumberSettingsArr->GetObject(i)->pNumSetting->sBulletChar = _pSet->pNumSetting->sBulletChar; + pNumberSettingsArr->GetObject(i)->pNumSetting->sBulletFont = _pSet->pNumSetting->sBulletFont; + + pNumberSettingsArr->GetObject(i)->pNumSetting->eLabelFollowedBy = _pSet->pNumSetting->eLabelFollowedBy; + pNumberSettingsArr->GetObject(i)->pNumSetting->nTabValue = _pSet->pNumSetting->nTabValue; + pNumberSettingsArr->GetObject(i)->pNumSetting->eNumAlign = _pSet->pNumSetting->eNumAlign; + pNumberSettingsArr->GetObject(i)->pNumSetting->nNumAlignAt = _pSet->pNumSetting->nNumAlignAt; + pNumberSettingsArr->GetObject(i)->pNumSetting->nNumIndentAt = _pSet->pNumSetting->nNumIndentAt; + } + } + } + */ + ImplLoad(String::CreateFromAscii("standard.syb")); +} + +void NumberingTypeMgr::Init() +{ + Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); + Reference < XInterface > xI = xMSF->createInstance( + ::rtl::OUString::createFromAscii( "com.sun.star.text.DefaultNumberingProvider" ) ); + Reference<XDefaultNumberingProvider> xDefNum(xI, UNO_QUERY); + + if(xDefNum.is()) + { + Sequence< Sequence< PropertyValue > > aNumberings; + LanguageType eLang = Application::GetSettings().GetLanguage(); + Locale aLocale = SvxCreateLocale(eLang); + try + { + aNumberings = xDefNum->getDefaultContinuousNumberingLevels( aLocale ); + + sal_Int32 nLength = aNumberings.getLength() > DEFAULT_NUM_VALUSET_COUNT ? DEFAULT_NUM_VALUSET_COUNT :aNumberings.getLength(); + + const Sequence<PropertyValue>* pValuesArr = aNumberings.getConstArray(); + for(sal_Int32 i = 0; i < nLength; i++) + { + NumSettings_ImplPtr pNew = lcl_CreateNumberingSettingsPtr(pValuesArr[i]); + NumberSettings_Impl* pNumEntry = new NumberSettings_Impl; + pNumEntry->nIndex = i + 1; + pNumEntry->nIndexDefault = i; + pNumEntry->pNumSetting = pNew; + //SetItemText( i + 1, SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTIONS + i )); + { + String sText; + //const OUString sValue(C2U("Value")); + Reference<XNumberingFormatter> xFormatter(xDefNum, UNO_QUERY); + if(xFormatter.is() && aNumberings.getLength() > i) + { + + for (sal_uInt16 j=0;j<3;j++) + { + Sequence<PropertyValue> aLevel = aNumberings.getConstArray()[i]; + try + { + aLevel.realloc(aLevel.getLength() + 1); + PropertyValue& rValue = aLevel.getArray()[aLevel.getLength() - 1]; + rValue.Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Value")); + rValue.Value <<= (sal_Int32)(j + 1); + + if (j!=0) + sText += String::CreateFromAscii(" "); + + sText+=String(xFormatter->makeNumberingString( aLevel, aLocale )); + } + catch(Exception&) + { + DBG_ERROR("Exception in DefaultNumberingProvider::makeNumberingString"); + } + } + } + String aStrFromRES(SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTIONS)); + String aReplace = String::CreateFromAscii("%NUMBERINGSAMPLE"); + aStrFromRES.SearchAndReplace(aReplace,sText); + pNumEntry->sDescription = aStrFromRES; + } + //End modification + + //pNumEntry->sDescription = SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTION_0 + i ); + pNumberSettingsArr->Insert(pNumEntry, pNumberSettingsArr->Count()); + } + } + catch(Exception&) + { + } + } +} + +sal_uInt16 NumberingTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) +{ + if ( mLevel == (sal_uInt16)0xFFFF || mLevel > aNum.GetLevelCount() || mLevel == 0) + return (sal_uInt16)0xFFFF; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + + if ( nActLv == (sal_uInt16)0xFFFF ) + return (sal_uInt16)0xFFFF; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + sal_Unicode cPrefix = rtl::OUString(aFmt.GetPrefix()).getStr()[0]; + sal_Unicode cSuffix = rtl::OUString(aFmt.GetSuffix()).getStr()[0]; + String sPreFix = aFmt.GetPrefix(); + String sSuffix = aFmt.GetSuffix(); + String sEmpty; + sal_Int16 eNumType = aFmt.GetNumberingType(); + + sal_uInt16 nCount = pNumberSettingsArr->Count(); + for(sal_uInt16 i = nFromIndex; i < nCount; i++) + { + NumberSettings_ImplPtr _pSet = pNumberSettingsArr->GetObject(i); + sal_Int16 eNType = _pSet->pNumSetting->nNumberType; + String sLocalPreFix = _pSet->pNumSetting->sPrefix.getStr(); + String sLocalSuffix = _pSet->pNumSetting->sSuffix.getStr(); + if (sPreFix.CompareTo(sLocalPreFix)==COMPARE_EQUAL && + sSuffix.CompareTo(sLocalSuffix)==COMPARE_EQUAL && + eNumType == eNType ) + { + return i+1; + } + } + + + return (sal_uInt16)0xFFFF; +} + +sal_Bool NumberingTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) +{ + //if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) + // return sal_False; + + //if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) + // return sal_False; + + sal_uInt16 nActLv = IsSingleLevel(mLevel); + + if ( nActLv == (sal_uInt16)0xFFFF ) + return sal_False; + + SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); + //sal_Unicode cPrefix = rtl::OUString(aFmt.GetPrefix()).getStr()[0]; + //sal_Unicode cSuffix = rtl::OUString(aFmt.GetSuffix()).getStr()[0]; + sal_Int16 eNumType = aFmt.GetNumberingType(); + + sal_uInt16 nCount = pNumberSettingsArr->Count(); + if ( nIndex >= nCount ) + return sal_False; + + NumberSettings_ImplPtr _pSet = pNumberSettingsArr->GetObject(nIndex); + + _pSet->pNumSetting->sPrefix = aFmt.GetPrefix(); + _pSet->pNumSetting->sSuffix = aFmt.GetSuffix(); + _pSet->pNumSetting->nNumberType = eNumType; + _pSet->bIsCustomized = sal_True; + + SvxNumRule aTmpRule1(aNum); + SvxNumRule aTmpRule2(aNum); + ApplyNumRule(aTmpRule1,nIndex,mLevel,true); + ApplyNumRule(aTmpRule2,nIndex,mLevel,false); + if (aTmpRule1==aTmpRule2) _pSet->bIsCustomized=false; + if (_pSet->bIsCustomized) { + String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_NUMBERING_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + aStrFromRES.SearchAndReplace(aReplace,sNUM); + _pSet->sDescription = aStrFromRES; + } else { + _pSet->sDescription = GetDescription(nIndex,true); + } + ImplStore(String::CreateFromAscii("standard.syb")); + return sal_True; +} + +sal_Bool NumberingTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool isDefault,sal_Bool isResetSize) +{ + //if ( mLevel == (sal_uInt16)0xFFFF ) + // return sal_False; + + //DBG_ASSERT(pNumSettingsArr->Count() > nIndex, "wrong index"); + if(pNumberSettingsArr->Count() <= nIndex) + return sal_False; + NumberSettingsArr_Impl* pCurrentNumberSettingsArr=pNumberSettingsArr; + if (isDefault) pCurrentNumberSettingsArr=pDefaultNumberSettingsArr; + NumberSettings_ImplPtr _pSet = pCurrentNumberSettingsArr->GetObject(nIndex); + sal_Int16 eNewType = _pSet->pNumSetting->nNumberType; + + sal_uInt16 nMask = 1; + String sNumCharFmtName = GetBulCharFmtName(); + for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) + { + if(mLevel & nMask) + { + SvxNumberFormat aFmt(aNum.GetLevel(i)); + if (eNewType!=aFmt.GetNumberingType()) isResetSize=true; + aFmt.SetNumberingType(eNewType); + aFmt.SetPrefix(_pSet->pNumSetting->sPrefix); + aFmt.SetSuffix(_pSet->pNumSetting->sSuffix); + + aFmt.SetCharFmtName(sNumCharFmtName); + if (isResetSize) aFmt.SetBulletRelSize(100); + aNum.SetLevel(i, aFmt); + } + nMask <<= 1 ; + } + + return sal_True; +} +String NumberingTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) +{ + String sRet; + sal_uInt16 nLength = 0; + nLength = pNumberSettingsArr->Count(); + + if ( nIndex >= nLength ) + return sRet; + else + sRet = pNumberSettingsArr->GetObject(nIndex)->sDescription; + if (isDefault) sRet = pDefaultNumberSettingsArr->GetObject(nIndex)->sDescription; + + return sRet; +} +sal_Bool NumberingTypeMgr::IsCustomized(sal_uInt16 nIndex) +{ + sal_Bool bRet = sal_False; + sal_uInt16 nLength = 0; + nLength = pNumberSettingsArr->Count(); + + if ( nIndex >= nLength ) + bRet = sal_False; + else + bRet = pNumberSettingsArr->GetObject(nIndex)->bIsCustomized; + + return bRet; +} +sal_uInt16 NumberingTypeMgr::GetNumCount() const +{ + sal_uInt16 nRet = 0; + if ( pNumberSettingsArr ) + nRet = pNumberSettingsArr->Count(); + + return nRet; +} +NumberSettings_Impl* NumberingTypeMgr::GetNumSettingByIndex(sal_uInt16 nIndex) const +{ + NumberSettings_Impl* pRet = 0; + if ( pNumberSettingsArr && nIndex< pNumberSettingsArr->Count() ) + { + pRet = pNumberSettingsArr->GetObject(nIndex); + } + + return pRet; +} +/*************************************************************************************************** +**********************Multi-level /Outline Type lib******************************************************* +****************************************************************************************************/ +OutlineTypeMgr* OutlineTypeMgr::_instance = 0; + +OutlineTypeMgr::OutlineTypeMgr(const NBOType aType): + NBOTypeMgrBase(aType)//, + //pNumSettingsArrs( new NumSettingsArr_Impl[DEFAULT_NUM_VALUSET_COUNT] ) +{ + Init(); + for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) + { + pDefaultOutlineSettingsArrs[nItem] = pOutlineSettingsArrs[nItem]; + } + //Initial the first time to store the default value. Then do it again for customized value + Init(); + ImplLoad(String::CreateFromAscii("standard.syc")); +} + +OutlineTypeMgr::OutlineTypeMgr(const NBOType aType,const SfxItemSet* pArg): + NBOTypeMgrBase(aType,pArg)//, + //pNumSettingsArrs( new NumSettingsArr_Impl[DEFAULT_NUM_VALUSET_COUNT]) +{ + Init(); + for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) + { + pDefaultOutlineSettingsArrs[nItem] = pOutlineSettingsArrs[nItem]; + } + //Initial the first time to store the default value. Then do it again for customized value + Init(); + ImplLoad(String::CreateFromAscii("standard.syc")); +} + +OutlineTypeMgr::OutlineTypeMgr(const OutlineTypeMgr& aTypeMgr): + NBOTypeMgrBase(aTypeMgr)//, + //pNumSettingsArrs( new NumSettingsArr_Impl[DEFAULT_NUM_VALUSET_COUNT]) +{ + Init(); + for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) + { + pDefaultOutlineSettingsArrs[nItem] = pOutlineSettingsArrs[nItem]; + } + //Initial the first time to store the default value. Then do it again for customized value + Init(); + ImplLoad(String::CreateFromAscii("standard.syc")); +} + +void OutlineTypeMgr::Init() +{ + Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); + Reference < XInterface > xI = xMSF->createInstance( + ::rtl::OUString::createFromAscii( "com.sun.star.text.DefaultNumberingProvider" ) ); + Reference<XDefaultNumberingProvider> xDefNum(xI, UNO_QUERY); + + if(xDefNum.is()) + { + Sequence<Reference<XIndexAccess> > aOutlineAccess; + LanguageType eLang = Application::GetSettings().GetLanguage(); + Locale aLocale = SvxCreateLocale(eLang); + try + { + aOutlineAccess = xDefNum->getDefaultOutlineNumberings( aLocale ); + + SvxNumRule aDefNumRule( NUM_BULLET_REL_SIZE|NUM_CONTINUOUS|NUM_BULLET_COLOR|NUM_CHAR_TEXT_DISTANCE|NUM_SYMBOL_ALIGNMENT,10, sal_False , + SVX_RULETYPE_NUMBERING,SvxNumberFormat::LABEL_ALIGNMENT); + + for(sal_Int32 nItem = 0; + nItem < aOutlineAccess.getLength() && nItem < DEFAULT_NUM_VALUSET_COUNT; + nItem++ ) + { + pOutlineSettingsArrs[ nItem ] = new OutlineSettings_Impl; + OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[ nItem ]; + pItemArr->sDescription = SVX_RESSTR( RID_SVXSTR_OUTLINENUM_DESCRIPTION_0 + nItem ); + pItemArr->pNumSettingsArr = new NumSettingsArr_Impl; + Reference<XIndexAccess> xLevel = aOutlineAccess.getConstArray()[nItem]; + for(sal_Int32 nLevel = 0; nLevel < xLevel->getCount() && nLevel < 5; nLevel++) + { + Any aValueAny = xLevel->getByIndex(nLevel); + Sequence<PropertyValue> aLevelProps; + aValueAny >>= aLevelProps; + NumSettings_ImplPtr pNew = lcl_CreateNumberingSettingsPtr(aLevelProps); + SvxNumberFormat aNumFmt( aDefNumRule.GetLevel( nLevel) ); + pNew->eLabelFollowedBy = aNumFmt.GetLabelFollowedBy(); + pNew->nTabValue = aNumFmt.GetListtabPos(); + pNew->eNumAlign = aNumFmt.GetNumAdjust(); + pNew->nNumAlignAt = aNumFmt.GetFirstLineIndent(); + pNew->nNumIndentAt = aNumFmt.GetIndentAt(); + pItemArr->pNumSettingsArr->Insert( pNew, pItemArr->pNumSettingsArr->Count() ); + } + } + } + catch(Exception&) + { + } + } +} + +sal_uInt16 OutlineTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) +{ + sal_uInt16 nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); + for(sal_uInt16 iDex = nFromIndex; iDex < nLength; iDex++) + { + sal_Bool bNotMatch = sal_False; + OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[iDex]; + sal_uInt16 nCount = pItemArr->pNumSettingsArr->Count(); + for (sal_uInt16 iLevel=0;iLevel < nCount;iLevel++) + { + NumSettings_ImplPtr _pSet = pItemArr->pNumSettingsArr->GetObject(iLevel); + sal_Int16 eNType = _pSet->nNumberType; + const sal_Unicode cLocalPrefix = _pSet->sPrefix.getLength() ? _pSet->sPrefix.getStr()[0] : 0; + const sal_Unicode cLocalSuffix = _pSet->sSuffix.getLength() ? _pSet->sSuffix.getStr()[0] : 0; + + SvxNumberFormat aFmt(aNum.GetLevel(iLevel)); + sal_Unicode cPrefix = rtl::OUString(aFmt.GetPrefix()).getStr()[0]; + sal_Unicode cSuffix = rtl::OUString(aFmt.GetSuffix()).getStr()[0]; + String sPreFix = aFmt.GetPrefix(); + String sSuffix = aFmt.GetSuffix(); + String sEmpty; + sal_Int16 eNumType = aFmt.GetNumberingType(); + if( eNumType == SVX_NUM_CHAR_SPECIAL) + { + sal_Unicode cChar = aFmt.GetBulletChar(); + const Font* pFont = aFmt.GetBulletFont(); + sal_Unicode ccChar = _pSet->sBulletChar.getStr()[0]; + rtl::OUString sFont = _pSet->sBulletFont; + if ( !((cChar == ccChar) && //pFont && sFont.compareTo(pFont->GetName()) && + _pSet->eLabelFollowedBy == aFmt.GetLabelFollowedBy() && + _pSet->nTabValue == aFmt.GetListtabPos() && + _pSet->eNumAlign == aFmt.GetNumAdjust() && + _pSet->nNumAlignAt == aFmt.GetFirstLineIndent() && + _pSet->nNumIndentAt == aFmt.GetIndentAt())) + { + bNotMatch = sal_True; + break; + } + }else if ((eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) { + const SvxBrushItem* pBrsh1 = aFmt.GetBrush(); + const SvxBrushItem* pBrsh2 = _pSet->pBrushItem; + sal_Bool bIsMatch = false; + if (pBrsh1==pBrsh2) bIsMatch = true; + if (pBrsh1 && pBrsh2) { + const Graphic* pGrf1 = pBrsh1->GetGraphic();; + const Graphic* pGrf2 = pBrsh2->GetGraphic();; + if (pGrf1==pGrf2) bIsMatch = true; + if (pGrf1 && pGrf2) { + if ( pGrf1->GetBitmap().IsEqual(pGrf2->GetBitmap()) && + _pSet->aSize==aFmt.GetGraphicSize()) + bIsMatch = true; + } + } + if (!bIsMatch) { + bNotMatch = sal_True; + break; + } + } else + { + if (!((sPreFix.CompareTo(_pSet->sPrefix.getStr())==COMPARE_EQUAL) && + ( sSuffix.CompareTo(_pSet->sSuffix.getStr())==COMPARE_EQUAL ) && + eNumType == eNType && + _pSet->eLabelFollowedBy == aFmt.GetLabelFollowedBy() && + _pSet->nTabValue == aFmt.GetListtabPos() && + _pSet->eNumAlign == aFmt.GetNumAdjust() && + _pSet->nNumAlignAt == aFmt.GetFirstLineIndent() && + _pSet->nNumIndentAt == aFmt.GetIndentAt())) + { + bNotMatch = sal_True; + break; + } + } + } + if ( !bNotMatch ) + return iDex+1; + } + + + return (sal_uInt16)0xFFFF; +} + +sal_Bool OutlineTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) +{ + //if ( mLevel == 0 || mLevel == (sal_uInt16)0xFFFF ) + // return sal_False; + + sal_uInt16 nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); + if ( nIndex >= nLength ) + return sal_False; + + OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; + sal_uInt16 nCount = pItemArr->pNumSettingsArr->Count(); + for (sal_uInt16 iLevel=0;iLevel < nCount;iLevel++) + { + SvxNumberFormat aFmt(aNum.GetLevel(iLevel)); + sal_Unicode cPrefix = rtl::OUString(aFmt.GetPrefix()).getStr()[0]; + sal_Unicode cSuffix = rtl::OUString(aFmt.GetSuffix()).getStr()[0]; + sal_Int16 eNumType = aFmt.GetNumberingType(); + + NumSettings_ImplPtr _pSet = pItemArr->pNumSettingsArr->GetObject(iLevel); + + _pSet->eLabelFollowedBy = aFmt.GetLabelFollowedBy(); + _pSet->nTabValue = aFmt.GetListtabPos(); + _pSet->eNumAlign = aFmt.GetNumAdjust(); + _pSet->nNumAlignAt = aFmt.GetFirstLineIndent(); + _pSet->nNumIndentAt = aFmt.GetIndentAt(); + + if( eNumType == SVX_NUM_CHAR_SPECIAL) + { + sal_Unicode cChar = aFmt.GetBulletChar(); + OUString sChar(cChar); + _pSet->sBulletChar = sChar;//OUString(cChar); + if ( aFmt.GetBulletFont() ) + _pSet->sBulletFont = rtl::OUString(aFmt.GetBulletFont()->GetName()); + _pSet->nNumberType = eNumType; + pItemArr->bIsCustomized = sal_True; + }else if ((eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) { + if (_pSet->pBrushItem) { + delete (_pSet->pBrushItem); + _pSet->pBrushItem=NULL; + } + if (aFmt.GetBrush()) + _pSet->pBrushItem = new SvxBrushItem(*aFmt.GetBrush()); + _pSet->aSize = aFmt.GetGraphicSize(); + _pSet->nNumberType = eNumType; + } else + { + _pSet->sPrefix = aFmt.GetPrefix(); + _pSet->sSuffix = aFmt.GetSuffix(); + _pSet->nNumberType = eNumType; + if ( aFmt.GetBulletFont() ) + _pSet->sBulletFont = rtl::OUString(aFmt.GetBulletFont()->GetName()); + pItemArr->bIsCustomized = sal_True; + } + } + SvxNumRule aTmpRule1(aNum); + SvxNumRule aTmpRule2(aNum); + ApplyNumRule(aTmpRule1,nIndex,mLevel,true); + ApplyNumRule(aTmpRule2,nIndex,mLevel,false); + if (aTmpRule1==aTmpRule2) pItemArr->bIsCustomized=false; + if (pItemArr->bIsCustomized) { + String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_MULTILEVEL_DESCRIPTION)); + String aReplace = String::CreateFromAscii("%LIST_NUM"); + String sNUM = String::CreateFromInt32( nIndex + 1 ); + aStrFromRES.SearchAndReplace(aReplace,sNUM); + pItemArr->sDescription = aStrFromRES; + } else { + pItemArr->sDescription = GetDescription(nIndex,true); + } + ImplStore(String::CreateFromAscii("standard.syc")); + return sal_True; +} + +sal_Bool OutlineTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool isDefault,sal_Bool isResetSize) +{ + //if ( mLevel == (sal_uInt16)0xFFFF ) + // return sal_False; + + DBG_ASSERT(DEFAULT_NUM_VALUSET_COUNT > nIndex, "wrong index"); + if(DEFAULT_NUM_VALUSET_COUNT <= nIndex) + return sal_False; + + const FontList* pList = 0; + + OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; + if (isDefault) pItemArr=pDefaultOutlineSettingsArrs[nIndex]; + + //Font& rActBulletFont = lcl_GetDefaultBulletFont(); + NumSettingsArr_Impl *pNumSettingsArr=pItemArr->pNumSettingsArr; + + NumSettings_ImplPtr pLevelSettings = 0; + String sBulletCharFmtName = GetBulCharFmtName(); + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) + { + if(pNumSettingsArr->Count() > i) + pLevelSettings = pNumSettingsArr->GetObject(i); + + if(!pLevelSettings) + break; + + SvxNumberFormat aFmt(aNum.GetLevel(i)); + //aFmt.SetBulletFont(&pLevelSettings->aFont); + Font& rActBulletFont = lcl_GetDefaultBulletFont(); + if (pLevelSettings->nNumberType !=aFmt.GetNumberingType()) isResetSize=true; + aFmt.SetNumberingType( pLevelSettings->nNumberType ); + sal_uInt16 nUpperLevelOrChar = (sal_uInt16)pLevelSettings->nParentNumbering; + if(aFmt.GetNumberingType() == SVX_NUM_CHAR_SPECIAL) + { + if( pLevelSettings->sBulletFont.getLength() && + pLevelSettings->sBulletFont.compareTo(rActBulletFont.GetName())) + { + //search for the font + if(!pList) + { + SfxObjectShell* pCurDocShell = SfxObjectShell::Current(); + const SvxFontListItem* pFontListItem = (const SvxFontListItem* )pCurDocShell->GetItem( SID_ATTR_CHAR_FONTLIST ); + pList = pFontListItem ? pFontListItem->GetFontList() : 0; + } + if(pList && pList->IsAvailable( pLevelSettings->sBulletFont ) ) + { + FontInfo aInfo = pList->Get(pLevelSettings->sBulletFont,WEIGHT_NORMAL, ITALIC_NONE); + Font aFont(aInfo); + aFmt.SetBulletFont(&aFont); + } + else + { + //if it cannot be found then create a new one + Font aCreateFont( pLevelSettings->sBulletFont,String(), Size( 0, 14 ) ); + aCreateFont.SetCharSet( RTL_TEXTENCODING_DONTKNOW ); + aCreateFont.SetFamily( FAMILY_DONTKNOW ); + aCreateFont.SetPitch( PITCH_DONTKNOW ); + aCreateFont.SetWeight( WEIGHT_DONTKNOW ); + aCreateFont.SetTransparent( sal_True ); + aFmt.SetBulletFont( &aCreateFont ); + } + }else + aFmt.SetBulletFont( &rActBulletFont ); + + sal_Unicode cChar = 0; + if( pLevelSettings->sBulletChar.getLength() ) + cChar = pLevelSettings->sBulletChar.getStr()[0]; + if( Application::GetSettings().GetLayoutRTL() ) + { + if( 0 == i && cChar == BulletsTypeMgr::aDynamicBulletTypes[5] ) + cChar = BulletsTypeMgr::aDynamicRTLBulletTypes[5]; + else if( 1 == i ) + { + const SvxNumberFormat& numberFmt = aNum.GetLevel(0); + if( numberFmt.GetBulletChar() == BulletsTypeMgr::aDynamicRTLBulletTypes[5] ) + cChar = BulletsTypeMgr::aDynamicRTLBulletTypes[4]; + } + } + + aFmt.SetBulletChar(cChar); + aFmt.SetCharFmtName( sBulletCharFmtName ); + if (isResetSize) aFmt.SetBulletRelSize(45); + }else if ((aFmt.GetNumberingType()&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) { + if (pLevelSettings->pBrushItem) { + const Graphic* pGrf = pLevelSettings->pBrushItem->GetGraphic();; + Size aSize = pLevelSettings->aSize; + sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; + if (!isResetSize && aFmt.GetGraphicSize()!=Size(0,0)) aSize=aFmt.GetGraphicSize(); + else { + if (aSize.Width()==0 && aSize.Height()==0 && pGrf) { + aSize = SvxNumberFormat::GetGraphicSizeMM100( pGrf ); + } + } + aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); + aFmt.SetGraphicBrush( pLevelSettings->pBrushItem, &aSize, &eOrient ); + } + } else + { + aFmt.SetIncludeUpperLevels(sal::static_int_cast< sal_uInt8 >(0 != nUpperLevelOrChar ? aNum.GetLevelCount() : 0)); + aFmt.SetCharFmtName(sBulletCharFmtName); + if (isResetSize) aFmt.SetBulletRelSize(100); + } + if(pNumSettingsArr->Count() > i) { + aFmt.SetLabelFollowedBy(pLevelSettings->eLabelFollowedBy); + aFmt.SetListtabPos(pLevelSettings->nTabValue); + aFmt.SetNumAdjust(pLevelSettings->eNumAlign); + aFmt.SetFirstLineIndent(pLevelSettings->nNumAlignAt); + aFmt.SetIndentAt(pLevelSettings->nNumIndentAt); + } + aFmt.SetPrefix(pLevelSettings->sPrefix); + aFmt.SetSuffix(pLevelSettings->sSuffix); + aNum.SetLevel(i, aFmt); + } + + return sal_True; +} +String OutlineTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) +{ + String sRet; + sal_uInt16 nLength = 0; + nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); + + if ( nIndex >= nLength ) + return sRet; + else + { + OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; + if (isDefault) pItemArr = pDefaultOutlineSettingsArrs[nIndex]; + if ( pItemArr ) + { + sRet = pItemArr->sDescription; + }; + } + return sRet; +} +sal_Bool OutlineTypeMgr::IsCustomized(sal_uInt16 nIndex) +{ + sal_Bool bRet = sal_False; + + sal_uInt16 nLength = 0; + nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); + + if ( nIndex >= nLength ) + return bRet; + else + { + OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; + if ( pItemArr ) + { + bRet = pItemArr->bIsCustomized; + }; + } + + return bRet; +} + + +}} diff --git a/svx/source/sidebar/nbdtmgfact.cxx b/svx/source/sidebar/nbdtmgfact.cxx new file mode 100755 index 000000000000..b9f351d53237 --- /dev/null +++ b/svx/source/sidebar/nbdtmgfact.cxx @@ -0,0 +1,51 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _NBDTMGFACT_HXX +#include <svx/nbdtmgfact.hxx> +#endif +namespace svx { namespace sidebar { +NBOutlineTypeMgrFact::NBOutlineTypeMgrFact() +{ +} + +NBOTypeMgrBase* NBOutlineTypeMgrFact::CreateInstance(const NBOType aType) +{ + //NBOTypeMgrBase* pRet= 0; + if ( aType == eNBOType::BULLETS ) + { + return BulletsTypeMgr::GetInstance(); + }else if ( aType == eNBOType::GRAPHICBULLETS ) + { + return GraphyicBulletsTypeMgr::GetInstance(); + }else if ( aType == eNBOType::MIXBULLETS ) + { + return MixBulletsTypeMgr::GetInstance(); + }else if ( aType == eNBOType::NUMBERING ) + { + return NumberingTypeMgr::GetInstance(); + }else if ( aType == eNBOType::OUTLINE ) + { + return OutlineTypeMgr::GetInstance(); + } +} +}} + diff --git a/svx/source/sidebar/paragraph/ParaBulletsControl.cxx b/svx/source/sidebar/paragraph/ParaBulletsControl.cxx new file mode 100755 index 000000000000..5f14ad2af101 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaBulletsControl.cxx @@ -0,0 +1,145 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" +#include "ParaBulletsControl.hxx" +#include "ParaPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <unotools/viewoptions.hxx> +#include <editeng/kernitem.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/Theme.hxx> +#include <svtools/unitconv.hxx> +#include <svx/nbdtmg.hxx> +#include <svx/nbdtmgfact.hxx> + +namespace svx { namespace sidebar { + +ParaBulletsControl::ParaBulletsControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel): + PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_BULLETS)), + mrParaPropertyPanel(rPanel), + mpBindings(NULL), + maBulletsVS(this,SVX_RES(VS_VALUES)), + maFISep(this,SVX_RES(IMG_SEPERATOR_BULLET)), + maMoreButton(this,SVX_RES(CB_BULLET_MORE)) +{ + FreeResource(); + mpBindings = mrParaPropertyPanel.GetBindings(); + maBulletsVS.SetColCount(3); + maBulletsVS.SetLineCount(3); + maBulletsVS.SetStyle( maBulletsVS.GetStyle() | WB_ITEMBORDER |WB_NO_DIRECTSELECT); + maBulletsVS.SetExtraSpacing(BULLET_IMAGE_SPACING); + if(GetSettings().GetStyleSettings().GetHighContrastMode()) + maBulletsVS.SetBackground(GetSettings().GetStyleSettings().GetMenuColor()); + else + maBulletsVS.SetBackground(Color(244,245,249)); + + maBulletsVS.SetItemWidth(BULLET_IMAGE_WIDTH); + maBulletsVS.SetItemHeight(BULLET_IMAGE_HEIGHT); + maBulletsVS.InsertItem( DEFAULT_NONE ); + for( sal_uInt16 nVSIdx = 1; nVSIdx <= DEFAULT_BULLET_TYPES; ++nVSIdx ) + { + maBulletsVS.InsertItem( nVSIdx ); + } + + maBulletsVS.SetItemText( DEFAULT_NONE, SVX_RESSTR( RID_SVXSTR_NUMBULLET_NONE )); + NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); + if ( pBullets ) + { + for( sal_uInt16 nIndex = 0; nIndex < DEFAULT_BULLET_TYPES; ++nIndex ) + { + maBulletsVS.SetItemText( nIndex + 1, pBullets->GetDescription(nIndex) ); + } + } + + maBulletsVS.Show(); + maBulletsVS.SetSelectHdl(LINK(this, ParaBulletsControl, BulletSelectHdl_Impl)); + + /*maMoreButton.SetDefBkColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_DropDownBackground ));//Color(244,245,249)//for high contract + maMoreButton.SetHoverBkColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ) );//Color( 93, 120, 163 ) + maMoreButton.SetHoverTxtColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_PanelTitleFont ) );//Color( 255, 255, 255 ) + maMoreButton.SetIcoPosX( 2);*/ + maBulletsVS.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maBulletsVS.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + + maMoreButton.SetClickHdl(LINK(this, ParaBulletsControl, MoreButtonClickHdl_Impl)); + +} + +ParaBulletsControl::~ParaBulletsControl() +{ + +} + +void ParaBulletsControl::UpdateValueSet() +{ + maBulletsVS.StateChanged(STATE_CHANGE_STYLE); + maBulletsVS.StateChanged(STATE_CHANGE_INITSHOW); +} +void ParaBulletsControl::ToGetFocus() +{ + sal_uInt16 nTypeIndex = (sal_uInt16)0xFFFF; + mrParaPropertyPanel.GetBulletTypeIndex(); + if ( nTypeIndex != (sal_uInt16)0xFFFF ) + maBulletsVS.SelectItem( nTypeIndex ); + else + { + maBulletsVS.SelectItem(0); + } + maMoreButton.GrabFocus(); +} + +IMPL_LINK(ParaBulletsControl, BulletSelectHdl_Impl, ValueSet*, EMPTYARG) +{ + sal_uInt16 nIdx = maBulletsVS.GetSelectItemId(); + SfxUInt16Item aItem(FN_SVX_SET_BULLET, nIdx); + if (mpBindings) + mpBindings->GetDispatcher()->Execute( FN_SVX_SET_BULLET, SFX_CALLMODE_RECORD, &aItem, 0L ); + + mrParaPropertyPanel.EndBulletsPopupMode(); + + return 0; +} + +IMPL_LINK(ParaBulletsControl, MoreButtonClickHdl_Impl, void*, EMPTYARG) +{ + if (mpBindings) + mpBindings->GetDispatcher()->Execute( SID_OUTLINE_BULLET, SFX_CALLMODE_ASYNCHRON ); + + mrParaPropertyPanel.EndBulletsPopupMode(); + + return 0; +} + +}} // end of namespace sidebar + + diff --git a/svx/source/sidebar/paragraph/ParaBulletsControl.hxx b/svx/source/sidebar/paragraph/ParaBulletsControl.hxx new file mode 100755 index 000000000000..b7e535175c19 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaBulletsControl.hxx @@ -0,0 +1,61 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ +#ifndef _SVX_SIDEBAR_BULLETS_CONTROL_HXX_ +#define _SVX_SIDEBAR_BULLETS_CONTROL_HXX_ + +#include "svx/sidebar/PopupControl.hxx" +#include "svx/sidebar/ValueSetWithTextControl.hxx" +#include <sfx2/bindings.hxx> +#include <svtools/ctrlbox.hxx> +#include <svtools/ctrltool.hxx> +#include "ParaPropertyPanel.hxx" +#include <vcl/fixed.hxx> +#include <svl/poolitem.hxx> +#include <editeng/lspcitem.hxx> +#include <sfx2/sidebar/EnumContext.hxx> +#include <vcl/button.hxx> + + +namespace svx { namespace sidebar { + +class ParaBulletsControl:public svx::sidebar::PopupControl +{ +private: + SvxNumValueSet3 maBulletsVS; + FixedImage maFISep; + PushButton maMoreButton; + ParaPropertyPanel& mrParaPropertyPanel; + SfxBindings* mpBindings; + + DECL_LINK(BulletSelectHdl_Impl, ValueSet*); + DECL_LINK(MoreButtonClickHdl_Impl, void*); + +public: + ParaBulletsControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel); + ~ParaBulletsControl(); + void ToGetFocus(); + void UpdateValueSet(); +}; + +}} + +#endif + diff --git a/svx/source/sidebar/paragraph/ParaBulletsPopup.cxx b/svx/source/sidebar/paragraph/ParaBulletsPopup.cxx new file mode 100755 index 000000000000..088a231c3f0c --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaBulletsPopup.cxx @@ -0,0 +1,63 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "ParaBulletsPopup.hxx" +#include "ParaBulletsControl.hxx" +#include <boost/bind.hpp> +#include <unotools/viewoptions.hxx> + +namespace svx { namespace sidebar { + +ParaBulletsPopup::ParaBulletsPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Paragraph Bullets"))) +{ +} + + + + +ParaBulletsPopup::~ParaBulletsPopup (void) +{ +} + + + + +void ParaBulletsPopup::UpdateValueSet () +{ + ProvideContainerAndControl(); + + ParaBulletsControl* pControl = dynamic_cast<ParaBulletsControl*>(mpControl.get()); + if (pControl != NULL) + pControl->UpdateValueSet(); +} + + + +} } // end of namespace svx::sidebar + + + diff --git a/svx/source/sidebar/paragraph/ParaBulletsPopup.hxx b/svx/source/sidebar/paragraph/ParaBulletsPopup.hxx new file mode 100755 index 000000000000..c32ec8adb18f --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaBulletsPopup.hxx @@ -0,0 +1,53 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_BULLETS_POPUP_HXX_ +#define _SVX_SIDEBAR_BULLETS_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <boost/function.hpp> +#include <svl/poolitem.hxx> +#include <tools/fldunit.hxx> +#include <sfx2/sidebar/EnumContext.hxx> + +namespace svx { namespace sidebar { + +class ParaBulletsPopup + : public Popup +{ +public : + ParaBulletsPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + ~ParaBulletsPopup (void); + + void UpdateValueSet (); +//private: + //void PopupModeEndCallback (void); +}; + +} } // end of namespace svx::sidebar + +#endif + + + diff --git a/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx b/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx new file mode 100755 index 000000000000..773af4ad1ad5 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx @@ -0,0 +1,819 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" +#include "ParaLineSpacingControl.hxx" +#include "ParaPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <unotools/viewoptions.hxx> +#include <editeng/kernitem.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/Theme.hxx> +#include <svtools/unitconv.hxx> + +#define _DEFAULT_LINE_SPACING 200 +#define FIX_DIST_DEF 283 +#define LINESPACE_1 100 +#define LINESPACE_15 150 +#define LINESPACE_2 200 +#define LINESPACE_115 115 + +#define LLINESPACE_1 0 +#define LLINESPACE_15 1 +#define LLINESPACE_2 2 +#define LLINESPACE_PROP 3 +#define LLINESPACE_MIN 4 +#define LLINESPACE_DURCH 5 +#define LLINESPACE_FIX 6 + +#define DO_NOT_CUSTOM 0 +#define USE_CUSTOM 1 + +namespace svx { namespace sidebar { + + +ParaLineSpacingControl::ParaLineSpacingControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel) +: PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_LINESPACING)) +, mrParaPropertyPanel(rPanel) +, mpBindings(NULL) +,aLineDist ( this, SVX_RES( LB_LINE_SPACING )), +aLineDistAtPercentBox ( this, SVX_RES( ED_SBINDE_LINEDISTPERCENT ) ), +aLineDistAtMetricBox ( this, SVX_RES( ED_SBINDE_LINEDISTPOINT ) ), +maCustomFT ( this, SVX_RES( FT_CUSTOM ) ), +maLSpacingFT ( this, SVX_RES( FT_LINE_SPACING ) ), +maOfFT ( this, SVX_RES( FT_OF ) ), +maSpacing1 (SVX_RES(IMG_SPACING1)), +maSpacing115 (SVX_RES(IMG_SPACING115)), +maSpacing15 (SVX_RES(IMG_SPACING15)), +maSpacing2 (SVX_RES(IMG_SPACING2)), +maLPCustom (SVX_RES(IMG_SPACINGLCUSTOM)), +maSelSpacing1 (SVX_RES(IMG_SEL_SPACING1)), +maSelSpacing115 (SVX_RES(IMG_SEL_SPACING115)), +maSelSpacing15 (SVX_RES(IMG_SEL_SPACING15)), +maSelSpacing2 (SVX_RES(IMG_SEL_SPACING2)), +maImgCusGrey (SVX_RES(IMG_CUSTOM_GRAY)), +maImgCus (SVX_RES(IMG_CUSTOM)), +maStrCus (SVX_RES(STR_LCVALUE)), +pActLineDistFld ( &aLineDistAtPercentBox ), +nMinFixDist ( BEGIN_VALUE ), +maValue ( 0 ), +maPos ( 0 ), +maLineSpacing (ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES( LINE_SPACING ) ), +mpImg (NULL), +mpImgSel (NULL), +mpStr (NULL), +mpStrTip (NULL), +maLine (SVX_RES(STR_LSPACING)), +maOf (SVX_RES(STR_LS_OF)) +, mbUseLineSPCustom (0) +, mbLineSPDisable (0) +{ + initial(); + FreeResource(); + mpBindings = mrParaPropertyPanel.GetBindings(); +// m_eLNSpaceUnit = mrParaPropertyPanel.maLNSpaceControl.GetCoreMetric(); + m_eLNSpaceUnit = SFX_MAPUNIT_100TH_MM; +} +ParaLineSpacingControl::~ParaLineSpacingControl() +{ + delete[] mpImg; + delete[] mpImgSel; + delete[] mpStr; + delete[] mpStrTip; +} + +void ParaLineSpacingControl::initial() +{ + //maLineSpacing.SetStyle( maLineSpacing.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT ); + //maLineSpacing.SetControlBackground(GetSettings().GetStyleSettings().GetMenuColor()); + //maLineSpacing.SetColor(GetSettings().GetStyleSettings().GetMenuColor()); + //maLineSpacing.SetMinFont(); + + maLineSpacing.SetControlBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maLineSpacing.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maLineSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + //maFTSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + //GetSettings().GetStyleSettings().GetMenuColor(): + //sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + //maFTBy.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + //GetSettings().GetStyleSettings().GetMenuColor(): + //sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + + mpImg = new Image[4]; + mpImg[0] = maSpacing1; + mpImg[1] = maSpacing115; + mpImg[2] = maSpacing15; + mpImg[3] = maSpacing2; + + mpImgSel = new Image[4]; + mpImgSel[0] = maSelSpacing1; + mpImgSel[1] = maSelSpacing115; + mpImgSel[2] = maSelSpacing15; + mpImgSel[3] = maSelSpacing2; + + mpStr = new XubString[4]; + mpStr[0] = XubString(SVX_RES(STR_SPACING1)); + mpStr[1] = XubString(SVX_RES(STR_SPACING115)); + mpStr[2] = XubString(SVX_RES(STR_SPACING15)); + mpStr[3] = XubString(SVX_RES(STR_SPACING2)); + + mpStrTip = new XubString[4]; + mpStrTip[0] = XubString(SVX_RES(STR_LS_SINGLE)); + mpStrTip[1] = XubString(SVX_RES(STR_LS_115)); + mpStrTip[2] = XubString(SVX_RES(STR_LS_15)); + mpStrTip[3] = XubString(SVX_RES(STR_LS_DOUBLE)); + for (int i=0;i<4;i++) + maLineSpacing.AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]); + + maLineSpacing.AddItem( maImgCus, 0, maStrCus, 0 ); + + SetAllNoSel(); + Link aLink = LINK(this, ParaLineSpacingControl,VSSelHdl ); + maLineSpacing.SetSelectHdl(aLink); + maLineSpacing.StartSelection(); + maLineSpacing.Show(); + + aLink = LINK( this, ParaLineSpacingControl, LineSPDistHdl_Impl ); + aLineDist.SetSelectHdl(aLink); + aLineDist.SelectEntryPos( LLINESPACE_1 ) ; + aLink = LINK( this, ParaLineSpacingControl, LineSPDistAtHdl_Impl ); + aLineDistAtPercentBox.SetModifyHdl( aLink ); + aLineDistAtMetricBox.SetModifyHdl( aLink ); +} +void ParaLineSpacingControl::ToGetFocus(bool bType) +{ + if(!bType) + aLineDist.GrabFocus(); + else + maLineSpacing.GrabFocus(); //wj +} + +void ParaLineSpacingControl::PopupModeEndCallback() +{ + if( mbUseLineSPCustom ) + { + //maLinePos = mpLineSPPage->maPos; + //maLineValue = mpLineSPPage->maValue; + + SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE ); + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("maLinePos") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( maPos )); + aWinOpt.SetUserData( aSeq ); + + SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE ); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("maLineValue") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( maValue )); + aWinOpt2.SetUserData( aSeq ); + } +} + +void ParaLineSpacingControl::Rearrange(SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem,const ::sfx2::sidebar::EnumContext currentContext) +{ + SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE ); + if ( aWinOpt.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + + String aWinData( aTmp ); + maPos = (sal_uInt16)aWinData.ToInt32(); + } + + SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE ); + if ( aWinOpt2.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + + String aWinData( aTmp ); + maValue = (sal_uInt16)aWinData.ToInt32(); + } + String sHelpText; + switch(maPos) + { + case LLINESPACE_1: + sHelpText += mpStrTip[0]; + break; + case LLINESPACE_15: + sHelpText += mpStrTip[2]; + break; + case LLINESPACE_2: + sHelpText += mpStrTip[3]; + break; + case LLINESPACE_PROP: + sHelpText +=maLine; + sHelpText.Append(String("Proportion: ", 12, RTL_TEXTENCODING_ASCII_US)); + sHelpText += maOf; + sHelpText.Append( String::CreateFromInt64( maValue )); + break; + case LLINESPACE_MIN: + sHelpText += maLine; + sHelpText.Append(String("At Least: ", 10, RTL_TEXTENCODING_ASCII_US)); + sHelpText += maOf; + sHelpText.Append( String::CreateFromInt64( maValue )); + break; + case LLINESPACE_DURCH: + sHelpText += maLine; + sHelpText.Append(String("Leading: ", 9, RTL_TEXTENCODING_ASCII_US)); + sHelpText += maOf; + sHelpText.Append( String::CreateFromInt64( maValue )); + break; + case LLINESPACE_FIX: + sHelpText += maLine; + sHelpText.Append(String("Fixed: ", 7, RTL_TEXTENCODING_ASCII_US)); + sHelpText += maOf; + sHelpText.Append( String::CreateFromInt64( maValue )); + break; + } + if( !aWinOpt.Exists() && !aWinOpt2.Exists() ) + mbLineSPDisable = sal_True; + else + mbLineSPDisable = sal_False; + + if( mbLineSPDisable ) + maLineSpacing.ReplaceItemImages(5, maImgCusGrey,0); + else + { + maLineSpacing.ReplaceItemImages(5, maImgCus,0); + maLineSpacing.SetItemText(5,sHelpText); + } + + SfxItemState eState = currSPState; + + SetFieldUnit( aLineDistAtMetricBox, currMetricUnit ); + +// mpLineSPPage->SetAllNoSel(); + aLineDist.Enable(); + pActLineDistFld->Enable(); + pActLineDistFld->SetText( String() ); + bool bValueSetFocus = sal_False; //wj + + if( eState >= SFX_ITEM_AVAILABLE ) + { + // SfxMapUnit eUnit = maLNSpaceControl.GetCoreMetric(); + SfxMapUnit eUnit = SFX_MAPUNIT_100TH_MM; + m_eLNSpaceUnit = eUnit; + + switch( currSPItem->GetLineSpaceRule() ) + { + case SVX_LINE_SPACE_AUTO: + { + SvxInterLineSpace eInter = currSPItem->GetInterLineSpaceRule(); + + switch( eInter ) + { + case SVX_INTER_LINE_SPACE_OFF: + { + aLineDist.SelectEntryPos( LLINESPACE_1 ); + pActLineDistFld->Disable(); + pActLineDistFld->SetText( String() ); + mbUseLineSPCustom = DO_NOT_CUSTOM; + if ( LINESPACE_1 == currSPItem->GetPropLineSpace() ) + { + maLineSpacing.SelectItem(1); + bValueSetFocus = sal_True; //wj + } + } + break; + + case SVX_INTER_LINE_SPACE_PROP: + { + if ( LINESPACE_1 == currSPItem->GetPropLineSpace() ) + { + aLineDist.SelectEntryPos( LLINESPACE_1 ); + pActLineDistFld->Disable(); + pActLineDistFld->SetText( String() ); + mbUseLineSPCustom = DO_NOT_CUSTOM; + maLineSpacing.SelectItem(1); + bValueSetFocus = sal_True; //wj + break; + } + if ( LINESPACE_15 == currSPItem->GetPropLineSpace() ) + { + aLineDist.SelectEntryPos( LLINESPACE_15 ); + pActLineDistFld->Disable(); + pActLineDistFld->SetText( String() ); + + mbUseLineSPCustom = DO_NOT_CUSTOM; + maLineSpacing.SelectItem(3); + bValueSetFocus = sal_True; //wj + break; + } + if ( LINESPACE_2 == currSPItem->GetPropLineSpace() ) + { + aLineDist.SelectEntryPos( LLINESPACE_2 ); + pActLineDistFld->Disable(); + pActLineDistFld->SetText( String() ); + + mbUseLineSPCustom = DO_NOT_CUSTOM; + maLineSpacing.SelectItem(4); + bValueSetFocus = sal_True; //wj + break; + } + + aLineDist.SelectEntryPos( LLINESPACE_PROP ); + if(pActLineDistFld != &(aLineDistAtPercentBox)) + { + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtPercentBox); + } + else + { + pActLineDistFld = &(aLineDistAtMetricBox); + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtPercentBox); + } + pActLineDistFld->Enable(); + pActLineDistFld->Show(); + aLineDistAtPercentBox. + SetValue( aLineDistAtPercentBox.Normalize( + currSPItem->GetPropLineSpace() ) ); + + if( currSPItem->GetPropLineSpace() == LINESPACE_115 ) + { + mbUseLineSPCustom = DO_NOT_CUSTOM; + maLineSpacing.SelectItem(2); + bValueSetFocus = sal_True; //wj + } + else + { + mbUseLineSPCustom = USE_CUSTOM; + maLineSpacing.SetNoSelection(); + maLineSpacing.SelectItem(0); + } + } + break; + + case SVX_INTER_LINE_SPACE_FIX: + { + if(pActLineDistFld != &(aLineDistAtMetricBox)) + { + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtMetricBox); + } + else + { + pActLineDistFld = &(aLineDistAtPercentBox); + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtMetricBox); + } + pActLineDistFld->Enable(); + pActLineDistFld->Show(); + maLineSpacing.SetNoSelection(); + maLineSpacing.SelectItem(0); + + SetMetricValue( aLineDistAtMetricBox, + currSPItem->GetInterLineSpace(), eUnit ); + aLineDist.SelectEntryPos( LLINESPACE_DURCH ); + + mbUseLineSPCustom = USE_CUSTOM; + } + break; + } + } + break; + case SVX_LINE_SPACE_FIX: + { + if(pActLineDistFld != &(aLineDistAtMetricBox)) + { + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtMetricBox); + } + else + { + pActLineDistFld = &(aLineDistAtPercentBox); + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtMetricBox); + } + pActLineDistFld->Enable(); + pActLineDistFld->Show(); + maLineSpacing.SetNoSelection(); + maLineSpacing.SelectItem(0); + + SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit); + aLineDist.SelectEntryPos( LLINESPACE_FIX ); + + mbUseLineSPCustom = USE_CUSTOM; + } + break; + + case SVX_LINE_SPACE_MIN: + { + if(pActLineDistFld != &(aLineDistAtMetricBox)) + { + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtMetricBox); + } + else + { + pActLineDistFld = &(aLineDistAtPercentBox); + pActLineDistFld->Disable(); + pActLineDistFld->Hide(); + pActLineDistFld = &(aLineDistAtMetricBox); + } + pActLineDistFld->Enable(); + pActLineDistFld->Show(); + maLineSpacing.SetNoSelection(); + maLineSpacing.SelectItem(0); + + SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit); + aLineDist.SelectEntryPos( LLINESPACE_MIN ); + mbUseLineSPCustom = USE_CUSTOM; + } + break; + } + } + else if( eState == SFX_ITEM_DISABLED ) + { + aLineDist.Disable(); + pActLineDistFld->Enable(sal_False); + pActLineDistFld->SetText( String() ); + maLineSpacing.SetNoSelection(); + maLineSpacing.SelectItem(0); + + mbUseLineSPCustom = DO_NOT_CUSTOM; + } + else + { + pActLineDistFld->Enable(sal_False); + pActLineDistFld->SetText( String() ); + aLineDist.SetNoSelection(); + maLineSpacing.SetNoSelection(); + maLineSpacing.SelectItem(0); + mbUseLineSPCustom = DO_NOT_CUSTOM; + } + + aLineDist.SaveValue(); + + /*sal_uInt16 nID = pBox->GetCurItemId(); + pBox->SetItemDown(nID, sal_True); + + Size aFloatSz = GetOutputSizePixel(); + + GetLineSPFloatWin()->SetSizePixel( aFloatSz ); + + Point aPos=maLineSPTbx->GetPosPixel(); + aPos.setX(aPos.getX()); + aPos = OutputToScreenPixel( aPos ); + Size aSize = maLineSPTbx->GetSizePixel(); + Rectangle aRect( aPos, aSize ); + + GetLineSPFloatWin()->StartPopupMode( aRect, FLOATWIN_POPUPMODE_DOWN | FLOATWIN_POPUPMODE_NOFOCUSCLOSE); + GetLineSPFloatWin()->SetPopupModeFlags(GetLineSPFloatWin()->GetPopupModeFlags() | FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE ); + + pLineSPPage->ToGetFocus(bValueSetFocus); + */ + sal_uInt16 uCount = aLineDist.GetEntryCount(); + if( uCount == LLINESPACE_FIX + 1 ) + { + switch (currentContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Impress, Context_Table): + case CombinedEnumContext(Application_Draw, Context_Table): + case CombinedEnumContext(Application_Writer, Context_DrawText): + case CombinedEnumContext(Application_Calc, Context_DrawText): + case CombinedEnumContext(Application_Draw, Context_DrawText): + case CombinedEnumContext(Application_Impress, Context_DrawText): + case CombinedEnumContext(Application_Writer, Context_Annotation): + case CombinedEnumContext(Application_Draw, Context_Draw): + case CombinedEnumContext(Application_Draw, Context_TextObject): + case CombinedEnumContext(Application_Draw, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_Draw): + case CombinedEnumContext(Application_Impress, Context_TextObject): + case CombinedEnumContext(Application_Impress, Context_Graphic): + { + aLineDist.RemoveEntry(LLINESPACE_FIX); + } + } + } + else if( uCount == LLINESPACE_FIX) + { + switch (currentContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Writer, Context_Default): + case CombinedEnumContext(Application_Writer, Context_Text): + case CombinedEnumContext(Application_Writer, Context_Table): + { + aLineDist.InsertEntry(String::CreateFromAscii("Fixed"), LLINESPACE_FIX); + } + } + } + maLineSpacing.Format(); + maLineSpacing.StartSelection(); +} + +void ParaLineSpacingControl::SetAllNoSel() +{ + maLineSpacing.SelectItem(1); + maLineSpacing.SetNoSelection(); +} + +IMPL_LINK( ParaLineSpacingControl, LineSPDistHdl_Impl, ListBox*, pBox ) +{ + maLineSpacing.SetNoSelection(); + maLineSpacing.SelectItem(0); + maLineSpacing.Format(); + maLineSpacing.StartSelection(); + + switch( pBox->GetSelectEntryPos() ) + { + case LLINESPACE_1: + case LLINESPACE_15: + case LLINESPACE_2: + pActLineDistFld->Enable(sal_False); + pActLineDistFld->SetText( String() ); + break; + + case LLINESPACE_DURCH: + aLineDistAtPercentBox.Hide(); + pActLineDistFld = &aLineDistAtMetricBox; + aLineDistAtMetricBox.SetMin(0); + + + if ( !aLineDistAtMetricBox.GetText().Len() ) + aLineDistAtMetricBox.SetValue( + aLineDistAtMetricBox.Normalize( 0 ) ); + aLineDistAtPercentBox.Hide(); + pActLineDistFld->Show(); + pActLineDistFld->Enable(); + break; + + case LLINESPACE_MIN: + aLineDistAtPercentBox.Hide(); + pActLineDistFld = &aLineDistAtMetricBox; + aLineDistAtMetricBox.SetMin(0); + + if ( !aLineDistAtMetricBox.GetText().Len() ) + aLineDistAtMetricBox.SetValue( + aLineDistAtMetricBox.Normalize( 0 ), FUNIT_TWIP ); + aLineDistAtPercentBox.Hide(); + pActLineDistFld->Show(); + pActLineDistFld->Enable(); + break; + + case LLINESPACE_PROP: + aLineDistAtMetricBox.Hide(); + pActLineDistFld = &aLineDistAtPercentBox; + + if ( !aLineDistAtPercentBox.GetText().Len() ) + aLineDistAtPercentBox.SetValue( + aLineDistAtPercentBox.Normalize( 100 ), FUNIT_TWIP ); + aLineDistAtMetricBox.Hide(); + pActLineDistFld->Show(); + pActLineDistFld->Enable(); + break; + case LLINESPACE_FIX: + { + aLineDistAtPercentBox.Hide(); + pActLineDistFld = &aLineDistAtMetricBox; + sal_Int64 nTemp = aLineDistAtMetricBox.GetValue(); + aLineDistAtMetricBox.SetMin(aLineDistAtMetricBox.Normalize(nMinFixDist), FUNIT_TWIP); + + if ( aLineDistAtMetricBox.GetValue() != nTemp ) + SetMetricValue( aLineDistAtMetricBox, + FIX_DIST_DEF, SFX_MAPUNIT_TWIP ); + aLineDistAtPercentBox.Hide(); + pActLineDistFld->Show(); + pActLineDistFld->Enable(); + } + break; + } + ExecuteLineSpace(); + return 0; +} + +IMPL_LINK( ParaLineSpacingControl, LineSPDistAtHdl_Impl, MetricField*, pBox ) +{ + ExecuteLineSpace(); + return (0L); +} + +void ParaLineSpacingControl::ExecuteLineSpace() +{ + aLineDist.SaveValue(); + maLineSpacing.SetNoSelection(); + + SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE); + sal_uInt16 nPos = aLineDist.GetSelectEntryPos(); + + switch ( nPos ) + { + case LLINESPACE_1: + case LLINESPACE_15: + case LLINESPACE_2: + { + SetLineSpace( aSpacing, nPos ); + maPos = nPos; + } + break; + + case LLINESPACE_PROP: + { + SetLineSpace( aSpacing, nPos, + aLineDistAtPercentBox.Denormalize( + (long)aLineDistAtPercentBox.GetValue() ) ); + maPos = nPos; + maValue =aLineDistAtPercentBox.GetValue(); + } + break; + + case LLINESPACE_MIN: + case LLINESPACE_DURCH: + case LLINESPACE_FIX: + { + SetLineSpace( aSpacing, nPos, + GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit ) ); + maPos = nPos; + maValue = GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit ); + } + break; + + default: + DBG_ERROR( "error!!" ); + break; + } + + mpBindings->GetDispatcher()->Execute( + SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L); + + mbUseLineSPCustom = USE_CUSTOM; +} + +void ParaLineSpacingControl::SetLineSpace( SvxLineSpacingItem& rLineSpace, + int eSpace, long lValue ) +{ + switch ( eSpace ) + { + case LLINESPACE_1: + rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; + rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF; + break; + + case LLINESPACE_15: + rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; + rLineSpace.SetPropLineSpace( LINESPACE_15 ); + break; + + case LLINESPACE_2: + rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; + rLineSpace.SetPropLineSpace( LINESPACE_2 ); + break; + + case LLINESPACE_PROP: + rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; + rLineSpace.SetPropLineSpace( (sal_uInt8)lValue ); + break; + + case LLINESPACE_MIN: + rLineSpace.SetLineHeight( (sal_uInt16)lValue ); + rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF; + break; + + case LLINESPACE_DURCH: + rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; + rLineSpace.SetInterLineSpace( (sal_uInt16)lValue ); + break; + + case LLINESPACE_FIX: + rLineSpace.SetLineHeight((sal_uInt16)lValue); + rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_FIX; + rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF; + break; + } +} + +IMPL_LINK(ParaLineSpacingControl, VSSelHdl, void *, pControl) +{ + maLineSpacing.SetNoSelection(); + bool bClosePop = true; + if(pControl == &maLineSpacing) + { + sal_uInt16 iPos = maLineSpacing.GetSelectItemId(); + short nKern = 0; + long nVal = 0; + switch ( iPos ) + { + case 1: + ExecuteLineSpacing( 0, 0 ); + break; + case 2: + ExecuteLineSpacing( 0, 3 ); + break; + case 3: + ExecuteLineSpacing( 0, 1 ); + break; + case 4: + ExecuteLineSpacing( 0, 2 ); + break; + case 5: + { + if(!(mbLineSPDisable)) + { + //maPos = mrParaPropertyPanel.maLinePos; + aLineDist.SelectEntryPos( maPos ) ; + aLineDist.SaveValue(); + //maValue = mrParaPropertyPanel.maLineValue; + + SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE); + switch(maPos) + { + case LLINESPACE_1: + case LLINESPACE_15: + case LLINESPACE_2: + SetLineSpace( aSpacing, maPos ); + break; + + case LLINESPACE_PROP: + SetLineSpace( aSpacing, maPos, + aLineDistAtPercentBox.Denormalize( (long)maValue ) ); + break; + + case LLINESPACE_MIN: + case LLINESPACE_DURCH: + case LLINESPACE_FIX: + SetLineSpace( aSpacing, maPos, (long)maValue ); + break; + } + + mpBindings->GetDispatcher()->Execute( + SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L); + + ExecuteLineSpacing( USE_CUSTOM, 0 ); + } + else + bClosePop = sal_False; + } + break; + } + } + if(bClosePop) + mrParaPropertyPanel.EndSpacingPopupMode(); + return 0; +} + +void ParaLineSpacingControl::ExecuteLineSpacing( sal_uInt16 aIsCustom, sal_uInt16 aEntry ) +{ + if( !aIsCustom ) + { + aLineDist.SelectEntryPos( aEntry ) ; + aLineDist.SaveValue(); + SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE); + sal_uInt16 nPos = aEntry; + if( aEntry == LLINESPACE_PROP ) + SetLineSpace( aSpacing, nPos, aLineDistAtPercentBox.Denormalize( (long)115 ) ); + else + SetLineSpace( aSpacing, nPos ); + + mpBindings->GetDispatcher()->Execute( + SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L); + } + + if( !aIsCustom ) + { + mbUseLineSPCustom = DO_NOT_CUSTOM; + mrParaPropertyPanel.EndSpacingPopupMode(); + } + maLineSpacing.SetNoSelection(); +} + +}} // end of namespace sidebar + diff --git a/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx b/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx new file mode 100755 index 000000000000..51d3d80b7353 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx @@ -0,0 +1,116 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ +#ifndef _SVX_SIDEBAR_LINE_SPACING_CONTROL_HXX_ +#define _SVX_SIDEBAR_LINE_SPACING_CONTROL_HXX_ + +#include "svx/sidebar/PopupControl.hxx" +#include "svx/sidebar/ValueSetWithTextControl.hxx" +#include <sfx2/bindings.hxx> +#include <svtools/ctrlbox.hxx> +#include <svtools/ctrltool.hxx> +#include "ParaPropertyPanel.hxx" +#include <vcl/fixed.hxx> +#include <svl/poolitem.hxx> +#include <editeng/lspcitem.hxx> +#include <sfx2/sidebar/EnumContext.hxx> + + +namespace svx { namespace sidebar { + +#define LSP_POS_GLOBAL_VALUE String("Line_Spacing_Pos", 16, RTL_TEXTENCODING_ASCII_US) +#define LSP_LV_GLOBAL_VALUE String("Line_Spacing_Lv", 15, RTL_TEXTENCODING_ASCII_US) +#define BEGIN_VALUE 28 +class ParaLineSpacingControl:public svx::sidebar::PopupControl +{ +public: + ParaLineSpacingControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel); + ~ParaLineSpacingControl(); + void ToGetFocus(bool bType); + void Rearrange(SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem,const ::sfx2::sidebar::EnumContext currentContext); + //virtual void Paint(const Rectangle& rect); + + //add + short GetLastCustomState(); + long GetLastCustomValue(); + //add end + + void ExecuteLineSpace(); + void SetLineSpace( SvxLineSpacingItem& rLineSpace, + int eSpace, long lValue = 0 ); + + void ExecuteLineSpacing( sal_uInt16 aIsCustom, sal_uInt16 aEntry ); + void SetAllNoSel(); + void PopupModeEndCallback(); + +private: + bool mbUseLineSPCustom; + bool mbLineSPDisable; + SfxMapUnit m_eLNSpaceUnit; + ParaPropertyPanel& mrParaPropertyPanel; + SfxBindings* mpBindings; + + long nMinFixDist; + Edit* pActLineDistFld; + + ValueSetWithTextControl maLineSpacing; + + FixedText maCustomFT; + FixedText maLSpacingFT; + ListBox aLineDist; + + FixedText maOfFT; + MetricField aLineDistAtPercentBox; + MetricField aLineDistAtMetricBox; + + Image maSpacing1; + Image maSpacing115; + Image maSpacing15; + Image maSpacing2; + Image maLPCustom; + + Image maSelSpacing1; + Image maSelSpacing115; + Image maSelSpacing15; + Image maSelSpacing2; + Image maSelSelHanging; + Image maImgCus; + Image maImgCusGrey; + XubString maStrCus; + + Image* mpImg; + Image* mpImgSel; + XubString* mpStr; + XubString* mpStrTip; + String maLine; + String maOf; + + sal_Int64 maValue; + sal_uInt16 maPos; +private: + void initial(); + DECL_LINK(LineSPDistHdl_Impl, ListBox*); + DECL_LINK(LineSPDistAtHdl_Impl, MetricField*); + DECL_LINK(VSSelHdl, void*); +}; +}} + +#endif + diff --git a/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx b/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx new file mode 100755 index 000000000000..7edf768df509 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx @@ -0,0 +1,82 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "ParaLineSpacingPopup.hxx" +#include "ParaLineSpacingControl.hxx" +#include <boost/bind.hpp> +#include <unotools/viewoptions.hxx> + +namespace svx { namespace sidebar { + +ParaLineSpacingPopup::ParaLineSpacingPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Paragraph Line Spacing"))) +{ + SetPopupModeEndHandler(::boost::bind(&ParaLineSpacingPopup::PopupModeEndCallback, this)); +} + + + + +ParaLineSpacingPopup::~ParaLineSpacingPopup (void) +{ +} + + + + +void ParaLineSpacingPopup::Rearrange (SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem,const ::sfx2::sidebar::EnumContext currentContext) +{ + ProvideContainerAndControl(); + + ParaLineSpacingControl* pControl = dynamic_cast<ParaLineSpacingControl*>(mpControl.get()); + if (pControl != NULL) + pControl->Rearrange(currSPState,currMetricUnit, currSPItem,currentContext); +} + +void ParaLineSpacingPopup::PopupModeEndCallback (void) +{ + ProvideContainerAndControl(); + ParaLineSpacingControl* pControl = dynamic_cast<ParaLineSpacingControl*>(mpControl.get()); + if (pControl == NULL) + return; + + pControl->PopupModeEndCallback(); + + /*if( pControl->GetLastCustomState() == SPACING_CLOSE_BY_CUS_EDIT) + { + SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE ); + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Spacing") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt32( pControl->GetLastCustomValue() )); + aWinOpt.SetUserData( aSeq ); + + }*/ +} + + +} } // end of namespace svx::sidebar + + diff --git a/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx b/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx new file mode 100755 index 000000000000..5d8f7bb071c6 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx @@ -0,0 +1,53 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_LINE_SPACING_POPUP_HXX_ +#define _SVX_SIDEBAR_LINE_SPACING_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <boost/function.hpp> +#include <svl/poolitem.hxx> +#include <tools/fldunit.hxx> +#include <editeng/lspcitem.hxx> +#include <sfx2/sidebar/EnumContext.hxx> + +namespace svx { namespace sidebar { + +class ParaLineSpacingPopup + : public Popup +{ +public : + ParaLineSpacingPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + ~ParaLineSpacingPopup (void); + + void Rearrange (SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem ,const ::sfx2::sidebar::EnumContext currentContext); +private: + void PopupModeEndCallback (void); +}; + +} } // end of namespace svx::sidebar + +#endif + + diff --git a/svx/source/sidebar/paragraph/ParaNumberingControl.cxx b/svx/source/sidebar/paragraph/ParaNumberingControl.cxx new file mode 100755 index 000000000000..167e4fb88bab --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaNumberingControl.cxx @@ -0,0 +1,171 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" +#include "ParaNumberingControl.hxx" +#include "ParaPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <unotools/viewoptions.hxx> +#include <editeng/kernitem.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/Theme.hxx> +#include <svtools/unitconv.hxx> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/text/XDefaultNumberingProvider.hpp> +#include <com/sun/star/text/XNumberingFormatter.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <comphelper/processfactory.hxx> +#include <svx/nbdtmg.hxx> +#include <svx/nbdtmgfact.hxx> +#include <editeng/unolingu.hxx> +using namespace com::sun::star; +using namespace com::sun::star::uno; +using namespace com::sun::star::beans; +using namespace com::sun::star::lang; +using namespace com::sun::star::text; + +namespace svx { namespace sidebar { + +Reference<XDefaultNumberingProvider> lcl_GetNumberingProvider() +{ + Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); + Reference < XInterface > xI = xMSF->createInstance( + ::rtl::OUString::createFromAscii( "com.sun.star.text.DefaultNumberingProvider" ) ); + Reference<XDefaultNumberingProvider> xRet(xI, UNO_QUERY); +// DBG_ASSERT(xRet.is(), "service missing: \"com.sun.star.text.DefaultNumberingProvider\"") + + return xRet; +} + +ParaNumberingControl::ParaNumberingControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel): + PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_NUMBERING)), + maNumberVS(this,SVX_RES(VS_NUMBERING)), + maFISep(this,SVX_RES(IMG_SEPERATOR_NUMBERING)), + maMoreButton(this,SVX_RES(CB_NUMBERING_MORE) ), + mrParaPropertyPanel(rPanel), + mpBindings(NULL) +{ + FreeResource(); + mpBindings = mrParaPropertyPanel.GetBindings(); + + maNumberVS.SetStyle(maNumberVS.GetStyle() | WB_NO_DIRECTSELECT); + maNumberVS.SetExtraSpacing(NUM_IMAGE_SPACING); + //add by wj for sym2_7246 high contrast + if(GetSettings().GetStyleSettings().GetHighContrastMode()) + maNumberVS.SetBackground(GetSettings().GetStyleSettings().GetMenuColor()); + else + maNumberVS.SetBackground(Color(244,245,249)); + + maNumberVS.SetItemWidth(NUM_IMAGE_WIDTH); + maNumberVS.SetItemHeight(NUM_IMAGE_HEIGHT); + + Reference<XDefaultNumberingProvider> xDefNum = lcl_GetNumberingProvider(); + if(xDefNum.is()) + { + Sequence< Sequence< PropertyValue > > aNumberings; + LanguageType eLang = GetSettings().GetLanguage(); + Locale aLocale = SvxCreateLocale(eLang); + try + { + aNumberings = + xDefNum->getDefaultContinuousNumberingLevels( aLocale ); + } + catch(Exception&) + { + } + Reference<XNumberingFormatter> xFormat(xDefNum, UNO_QUERY); + maNumberVS.SetNumberingSettings(aNumberings, xFormat, aLocale); + } + + maNumberVS.Show(); + maNumberVS.SetSelectHdl(LINK(this, ParaNumberingControl, NumSelectHdl_Impl)); + + /*maMoreButton.SetDefBkColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_DropDownBackground ));//Color(244,245,249)//for high contract + maMoreButton.SetHoverBkColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ) );//Color( 93, 120, 163 ) + maMoreButton.SetHoverTxtColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_PanelTitleFont ) );//Color( 255, 255, 255 ) + maMoreButton.SetIcoPosX( 2);*/ + maNumberVS.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maNumberVS.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + + maMoreButton.SetClickHdl(LINK(this, ParaNumberingControl, MoreButtonClickHdl_Impl)); + +} + +ParaNumberingControl::~ParaNumberingControl() +{ +} + + +IMPL_LINK(ParaNumberingControl, NumSelectHdl_Impl, ValueSet*, EMPTYARG) +{ + sal_uInt16 nIdx = maNumberVS.GetSelectItemId(); + SfxUInt16Item aItem(FN_SVX_SET_NUMBER, nIdx); + if (mpBindings) + mpBindings->GetDispatcher()->Execute( FN_SVX_SET_NUMBER, SFX_CALLMODE_RECORD, &aItem, 0L ); + + mrParaPropertyPanel.EndNumberingPopupMode(); + + return 0; +} + +IMPL_LINK(ParaNumberingControl, MoreButtonClickHdl_Impl, void*, EMPTYARG) +{ + if (mpBindings) + mpBindings->GetDispatcher()->Execute( SID_OUTLINE_BULLET, SFX_CALLMODE_ASYNCHRON ); + + mrParaPropertyPanel.EndNumberingPopupMode(); + + return 0; +} + +void ParaNumberingControl::UpdateValueSet() +{ + maNumberVS.StateChanged(STATE_CHANGE_STYLE); + maNumberVS.StateChanged(STATE_CHANGE_INITSHOW); +} + +void ParaNumberingControl::ToGetFocus() +{ + sal_uInt16 nTypeIndex = mrParaPropertyPanel.GetNumTypeIndex(); + if ( nTypeIndex != (sal_uInt16)0xFFFF ) + maNumberVS.SelectItem( nTypeIndex ); + else + { + maNumberVS.SelectItem(0); + } + maMoreButton.GrabFocus(); +} + +}} // end of namespace sidebar + + + diff --git a/svx/source/sidebar/paragraph/ParaNumberingControl.hxx b/svx/source/sidebar/paragraph/ParaNumberingControl.hxx new file mode 100755 index 000000000000..2e534c691886 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaNumberingControl.hxx @@ -0,0 +1,65 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ +#ifndef _SVX_SIDEBAR_NUMBERING_CONTROL_HXX_ +#define _SVX_SIDEBAR_NUMBERING_CONTROL_HXX_ + + +#include "svx/sidebar/PopupControl.hxx" +#include "svx/sidebar/ValueSetWithTextControl.hxx" +#include <sfx2/bindings.hxx> +#include <svtools/ctrlbox.hxx> +#include <svtools/ctrltool.hxx> +#include "ParaPropertyPanel.hxx" +#include <vcl/fixed.hxx> +#include <svl/poolitem.hxx> +#include <editeng/lspcitem.hxx> +#include <sfx2/sidebar/EnumContext.hxx> +#include <vcl/button.hxx> + + +namespace svx { namespace sidebar { + + +class ParaNumberingControl:public svx::sidebar::PopupControl +{ +private: + SvxNumValueSet2 maNumberVS; + FixedImage maFISep; + PushButton maMoreButton; + ParaPropertyPanel& mrParaPropertyPanel; + SfxBindings* mpBindings; + + DECL_LINK(NumSelectHdl_Impl, ValueSet*); + DECL_LINK(MoreButtonClickHdl_Impl, void*); + +public: + ParaNumberingControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel); + ~ParaNumberingControl(); + void ToGetFocus(); + void UpdateValueSet(); + +}; + + +}} + +#endif + diff --git a/svx/source/sidebar/paragraph/ParaNumberingPopup.cxx b/svx/source/sidebar/paragraph/ParaNumberingPopup.cxx new file mode 100755 index 000000000000..a65ea223cc7a --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaNumberingPopup.cxx @@ -0,0 +1,64 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "ParaNumberingPopup.hxx" +#include "ParaNumberingControl.hxx" +#include <boost/bind.hpp> +#include <unotools/viewoptions.hxx> + +namespace svx { namespace sidebar { + +ParaNumberingPopup::ParaNumberingPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Paragraph Numbering"))) +{ +} + + + + +ParaNumberingPopup::~ParaNumberingPopup (void) +{ +} + + + + +void ParaNumberingPopup::UpdateValueSet () +{ + ProvideContainerAndControl(); + + ParaNumberingControl* pControl = dynamic_cast<ParaNumberingControl*>(mpControl.get()); + if (pControl != NULL) + pControl->UpdateValueSet(); +} + + + +} } // end of namespace svx::sidebar + + + + diff --git a/svx/source/sidebar/paragraph/ParaNumberingPopup.hxx b/svx/source/sidebar/paragraph/ParaNumberingPopup.hxx new file mode 100755 index 000000000000..d4dbaa693c79 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaNumberingPopup.hxx @@ -0,0 +1,54 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_NUMBERING_POPUP_HXX_ +#define _SVX_SIDEBAR_NUMBERING_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <boost/function.hpp> +#include <svl/poolitem.hxx> +#include <tools/fldunit.hxx> +#include <sfx2/sidebar/EnumContext.hxx> + +namespace svx { namespace sidebar { + +class ParaNumberingPopup + : public Popup +{ +public : + ParaNumberingPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + ~ParaNumberingPopup (void); + + void UpdateValueSet (); +//private: + //void PopupModeEndCallback (void); +}; + +} } // end of namespace svx::sidebar + +#endif + + + + diff --git a/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx b/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx new file mode 100755 index 000000000000..b12baf5d89ac --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx @@ -0,0 +1,1686 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" +#include <svx/sidebar/ColorControl.hxx> + +#include "ParaPropertyPanel.hxx" +#include "ParaPropertyPanel.hrc" + +#include "ParaLineSpacingPopup.hxx" +#include "ParaLineSpacingControl.hxx" +#include "ParaBulletsPopup.hxx" +#include "ParaBulletsControl.hxx" +#include "ParaNumberingPopup.hxx" +#include "ParaNumberingControl.hxx" +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <svx/sidebar/PopupContainer.hxx> +#include <sfx2/dispatch.hxx> +#include <editeng/colritem.hxx> +#include <editeng/brshitem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/ulspitem.hxx> +#include <vcl/toolbox.hxx> +#include <vcl/fixed.hxx> +#include <vcl/svapp.hxx> +#include <svx/svxids.hrc> +#include <svl/intitem.hxx> +#include "svx/dialmgr.hxx" +#include <sfx2/objsh.hxx> +#include <svtools/unitconv.hxx> +#include <boost/bind.hpp> +using namespace css; +using namespace cssu; +using ::sfx2::sidebar::Theme; +using ::sfx2::sidebar::ControlFactory; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + + +namespace svx {namespace sidebar { +#define DEFAULT_VALUE 0 +#define TOOLBOX_ITEM1 1 +#define TOOLBOX_ITEM2 2 +#define TOOLBOX_ITEM3 3 +#define TOOLBOX_ITEM4 4 + +#define MAX_DURCH 5670 + +#define INDENT_INCREMENT 1 +#define INDENT_DECREMENT 2 +#define INDENT_STEP 706 +#define UL_STEP 58 +#define UL_INCREMENT 1 +#define UL_DECREMENT 2 + +#define NEGATIVE_MAX_VALUE -9999 +#define BEGIN_VALUE 28 +#define MAX_SW 1709400 +#define MAX_SC_SD 116220200 +#define NEGA_MAXVALUE -10000000 + +#define POS_FT_PARA_SPACE Point(LogicToPixel(Point(FT_PARA_SPACE_X,FT_PARA_SPACE_Y), MAP_APPFONT)) +#define POS_FT_PARA_SPACE2 Point(LogicToPixel(Point(FT_PARA_SPACE_X,FT_PARA_SPACE_Y2), MAP_APPFONT)) +#define POS_TBX_PARA_SPACE_INC_DEC Point(LogicToPixel(Point(TBX_PARA_SPACE_INC_DEC_X,TBX_PARA_SPACE_INC_DEC_Y), MAP_APPFONT)) +#define POS_TBX_PARA_SPACE_INC_DEC2 Point(LogicToPixel(Point(TBX_PARA_SPACE_INC_DEC_X,TBX_PARA_SPACE_INC_DEC_Y2), MAP_APPFONT)) +#define POS_FT_PARA_INDENT Point(LogicToPixel(Point(FT_PARA_INDENT_X,FT_PARA_INDENT_Y), MAP_APPFONT)) +#define POS_FT_PARA_INDENT2 Point(LogicToPixel(Point(FT_PARA_INDENT_X,FT_PARA_INDENT_Y2), MAP_APPFONT)) +#define POS_TBX_PARA_INDENT_INC_DEC Point(LogicToPixel(Point(TBX_PARA_INDENT_INC_DEC_X,TBX_PARA_INDENT_INC_DEC_Y), MAP_APPFONT)) +#define POS_TBX_PARA_INDENT_INC_DEC2 Point(LogicToPixel(Point(TBX_PARA_INDENT_INC_DEC_X,TBX_PARA_INDENT_INC_DEC_Y2), MAP_APPFONT)) +#define POS_MBX_TOP_DIST Point(LogicToPixel(Point(MBX_TOP_DIST_X,MBX_TOP_DIST_Y), MAP_APPFONT)) +#define POS_MBX_TOP_DIST2 Point(LogicToPixel(Point(MBX_TOP_DIST_X,MBX_TOP_DIST_Y2), MAP_APPFONT)) +#define POS_MBX_BOT_DIST Point(LogicToPixel(Point(MBX_BOT_DIST_X,MBX_BOT_DIST_Y), MAP_APPFONT)) +#define POS_MBX_BOT_DIST2 Point(LogicToPixel(Point(MBX_BOT_DIST_X,MBX_BOT_DIST_Y2), MAP_APPFONT)) +#define POS_MBX_LEFT_DIST Point(LogicToPixel(Point(MBX_LEFT_DIST_X,MBX_LEFT_DIST_Y), MAP_APPFONT)) +#define POS_MBX_LEFT_DIST2 Point(LogicToPixel(Point(MBX_LEFT_DIST_X,MBX_LEFT_DIST_Y2), MAP_APPFONT)) +#define POS_MBX_RIGHT_DIST Point(LogicToPixel(Point(MBX_RIGHT_DIST_X,MBX_RIGHT_DIST_Y), MAP_APPFONT)) +#define POS_MBX_RIGHT_DIST2 Point(LogicToPixel(Point(MBX_RIGHT_DIST_X,MBX_RIGHT_DIST_Y2), MAP_APPFONT)) +#define POS_MBX_FLINE_DIST Point(LogicToPixel(Point(MBX_FLINE_DIST_X,MBX_FLINE_DIST_Y), MAP_APPFONT)) +#define POS_MBX_FLINE_DIST2 Point(LogicToPixel(Point(MBX_FLINE_DIST_X,MBX_FLINE_DIST_Y2), MAP_APPFONT)) +#define POS_IMG_SPACE1 Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE1_Y), MAP_APPFONT)) +#define POS_IMG_SPACE12 Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE1_Y2), MAP_APPFONT)) +#define POS_IMG_SPACE2 Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE2_Y), MAP_APPFONT)) +#define POS_IMG_SPACE22 Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE2_Y2), MAP_APPFONT)) +#define POS_IMG_INDENT1 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT1_Y), MAP_APPFONT)) +#define POS_IMG_INDENT12 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT1_Y2), MAP_APPFONT)) +#define POS_IMG_INDENT2 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT2_Y), MAP_APPFONT)) +#define POS_IMG_INDENT22 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT2_Y2), MAP_APPFONT)) +#define POS_IMG_INDENT3 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT3_Y), MAP_APPFONT)) +#define POS_IMG_INDENT32 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT3_Y2), MAP_APPFONT)) +#define TBX_LINE_SPACE Point(LogicToPixel(Point(TBX_LINE_SPACE_X,TBX_LINE_SPACE_Y), MAP_APPFONT)) +#define TBX_LINE_SPACE2 Point(LogicToPixel(Point(TBX_LINE_SPACE_X,TBX_LINE_SPACE_Y2), MAP_APPFONT)) + +#define LINE_POINT1_WHITE Point(LogicToPixel(Point(LINE_X_WHITE,LINE_TOP_Y), MAP_APPFONT)) +#define LINE_POINT2_WHITE Point(LogicToPixel(Point(LINE_X_WHITE,LINE_BOT_Y), MAP_APPFONT)) +#define LINE_POINT3_WHITE Point(LogicToPixel(Point(LINE_X_WHITE,LINE_TOP_Y2), MAP_APPFONT)) +#define LINE_POINT4_WHITE Point(LogicToPixel(Point(LINE_X_WHITE,LINE_BOT_Y2), MAP_APPFONT)) + +ParaPropertyPanel* ParaPropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to ParaPropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to ParaPropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to ParaPropertyPanel::Create"), NULL, 2); + + return new ParaPropertyPanel( + pParent, + rxFrame, + pBindings, + rxSidebar); +} + +void ParaPropertyPanel::HandleContextChange ( + const ::sfx2::sidebar::EnumContext aContext) +{ + if (maContext == aContext) + { + // Nothing to do. + return; + } + + maContext = aContext; + switch (maContext.GetCombinedContext_DI()) + { + case CombinedEnumContext(Application_Calc, Context_DrawText): + maTBxVertAlign->Show(); + maTBxVertAlignBackground->Show(); + maTBxBackColor->Hide(); + maTBxBackColorBackground->Hide(); + maTBxNumBullet->Hide(); + maTBxNumBulletBackground->Hide(); + ReSize(false); + maTbxIndent_IncDec->Show(); + maTbxIndent_IncDecBackground->Show(); + maTbxProDemote->Hide(); + maTbxProDemoteBackground->Hide(); + break; + + case CombinedEnumContext(Application_DrawImpress, Context_Draw): + case CombinedEnumContext(Application_DrawImpress, Context_TextObject): + case CombinedEnumContext(Application_DrawImpress, Context_Graphic): + maTBxVertAlign->Hide(); + maTBxVertAlignBackground->Hide(); + maTBxBackColor->Hide(); + maTBxBackColorBackground->Hide(); + maTBxNumBullet->Show(); + maTBxNumBulletBackground->Show(); + ReSize(true); + maTbxIndent_IncDec->Hide(); + maTbxIndent_IncDecBackground->Hide(); + maTbxProDemote->Show(); + maTbxProDemoteBackground->Show(); + break; + + case CombinedEnumContext(Application_DrawImpress, Context_DrawText): + maTBxVertAlign->Show(); + maTBxVertAlignBackground->Show(); + maTBxBackColor->Hide(); + maTBxBackColorBackground->Hide(); + maTBxNumBullet->Show(); + maTBxNumBulletBackground->Show(); + ReSize(true); + maTbxIndent_IncDec->Hide(); + maTbxIndent_IncDecBackground->Hide(); + maTbxProDemote->Show(); + maTbxProDemoteBackground->Show(); + break; + + case CombinedEnumContext(Application_DrawImpress, Context_Table): + maTBxVertAlign->Show(); + maTBxVertAlignBackground->Show(); + maTBxBackColor->Hide(); + maTBxBackColorBackground->Hide(); + maTBxNumBullet->Show(); + maTBxNumBulletBackground->Show(); + ReSize(true); + maTbxIndent_IncDec->Hide(); + maTbxIndent_IncDecBackground->Hide(); + maTbxProDemote->Show(); + maTbxProDemoteBackground->Show(); + break; + + case CombinedEnumContext(Application_WriterAndWeb, Context_Default): + case CombinedEnumContext(Application_WriterAndWeb, Context_Text): + maTBxVertAlign->Hide(); + maTBxVertAlignBackground->Hide(); + maTBxBackColor->Show(); + maTBxBackColorBackground->Show(); + maTBxNumBullet->Show(); + + maTBxNumBulletBackground->Show(); + ReSize(true); + maTbxIndent_IncDec->Show(); + maTbxIndent_IncDecBackground->Show(); + maTbxProDemote->Hide(); + maTbxProDemoteBackground->Hide(); + break; + + case CombinedEnumContext(Application_WriterAndWeb, Context_Table): + maTBxVertAlign->Show(); + maTBxVertAlignBackground->Show(); + maTBxBackColor->Show(); + maTBxBackColorBackground->Show(); + maTBxNumBullet->Show(); + maTBxNumBulletBackground->Show(); + ReSize(true); + maTbxIndent_IncDec->Show(); + maTbxIndent_IncDecBackground->Show(); + maTbxProDemote->Hide(); + maTbxProDemoteBackground->Hide(); + break; + + case CombinedEnumContext(Application_WriterAndWeb, Context_DrawText): + maTBxVertAlign->Show(); + maTBxVertAlignBackground->Show(); + maTBxBackColor->Hide(); + maTBxBackColorBackground->Hide(); + maTBxNumBullet->Hide(); + maTBxNumBulletBackground->Hide(); + ReSize(false); + maTbxIndent_IncDec->Show(); + maTbxIndent_IncDecBackground->Show(); + maTbxProDemote->Hide(); + maTbxProDemoteBackground->Hide(); + break; + + case CombinedEnumContext(Application_WriterAndWeb, Context_Annotation): + maTBxVertAlign->Hide(); + maTBxVertAlignBackground->Hide(); + maTBxBackColor->Hide(); + maTBxBackColorBackground->Hide(); + maTBxNumBullet->Hide(); + maTBxNumBulletBackground->Hide(); + ReSize(false); + maTbxIndent_IncDec->Show(); + maTbxIndent_IncDecBackground->Show(); + maTbxProDemote->Hide(); + maTbxProDemoteBackground->Hide(); + break; + + case CombinedEnumContext(Application_Calc, Context_EditCell): + case CombinedEnumContext(Application_Calc, Context_Cell): + case CombinedEnumContext(Application_Calc, Context_Pivot): + case CombinedEnumContext(Application_DrawImpress, Context_Text): + case CombinedEnumContext(Application_DrawImpress, Context_OutlineText): + /*{ + mpToolBoxScriptSw->Hide(); + mpToolBoxScript->Show(); + mpToolBoxSpacing->Show(); + mpToolBoxHighlight->Hide(); + + Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT); + aSize = LogicToPixel( aSize,MapMode(MAP_APPFONT) ); + aSize.setWidth(GetOutputSizePixel().Width()); + SetSizePixel(aSize); + }*/ + break; + + default: + break; + } +} + +SfxBindings* ParaPropertyPanel::GetBindings() +{ + return mpBindings; +} + +void ParaPropertyPanel::SetupIcons (void) +{ + if (Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) + { + } + else + { + } +} + +void ParaPropertyPanel::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetupIcons(); +} + +ParaPropertyPanel::~ParaPropertyPanel() +{ + delete mpLnSPItem; +} + +void ParaPropertyPanel::ReSize(bool bSize) +{ + if(bSize) + { + //Paragraph spacing + maFTUL->SetPosPixel(POS_FT_PARA_SPACE); + maTbxUL_IncDec->SetPosPixel(POS_TBX_PARA_SPACE_INC_DEC); + maTopDist->SetPosPixel(POS_MBX_TOP_DIST); + maBottomDist->SetPosPixel(POS_MBX_BOT_DIST); + //Indent + maFTIndent->SetPosPixel(POS_FT_PARA_INDENT); + maTbxIndent_IncDec->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC); + maTbxProDemote->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC); + maLeftIndent->SetPosPixel(POS_MBX_LEFT_DIST); + maRightIndent->SetPosPixel(POS_MBX_RIGHT_DIST); + maFLineIndent->SetPosPixel(POS_MBX_FLINE_DIST); + //Line spacing + maLineSPTbx->SetPosPixel(TBX_LINE_SPACE); + //image + maFISpace1.SetPosPixel(POS_IMG_SPACE1); + maFISpace2.SetPosPixel(POS_IMG_SPACE2); + maFIndent1.SetPosPixel(POS_IMG_INDENT1); + maFIndent2.SetPosPixel(POS_IMG_INDENT2); + maFIndent3.SetPosPixel(POS_IMG_INDENT3); + Size aSize(GetOutputSizePixel().Width(),PARA_SECTIONPAGE_HEIGHT); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + aSize.setWidth(GetOutputSizePixel().Width()); + SetSizePixel(aSize); + } + else + { + //Paragraph spacing + maFTUL->SetPosPixel(POS_FT_PARA_SPACE2); + maTbxUL_IncDec->SetPosPixel(POS_TBX_PARA_SPACE_INC_DEC2); + maTopDist->SetPosPixel(POS_MBX_TOP_DIST2); + maBottomDist->SetPosPixel(POS_MBX_BOT_DIST2); + //Indent + maFTIndent->SetPosPixel(POS_FT_PARA_INDENT2); + maTbxIndent_IncDec->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC2); + maTbxProDemote->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC2); + maLeftIndent->SetPosPixel(POS_MBX_LEFT_DIST2); + maRightIndent->SetPosPixel(POS_MBX_RIGHT_DIST2); + maFLineIndent->SetPosPixel(POS_MBX_FLINE_DIST2); + //Line spacing + maLineSPTbx->SetPosPixel(TBX_LINE_SPACE2); + //image + maFISpace1.SetPosPixel(POS_IMG_SPACE12); + maFISpace2.SetPosPixel(POS_IMG_SPACE22); + maFIndent1.SetPosPixel(POS_IMG_INDENT12); + maFIndent2.SetPosPixel(POS_IMG_INDENT22); + maFIndent3.SetPosPixel(POS_IMG_INDENT32); + Size aSize(GetOutputSizePixel().Width(),PARA_SECTIONPAGE_HEIGHT_2); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + aSize.setWidth(GetOutputSizePixel().Width()); + SetSizePixel(aSize); + } + + if (mxSidebar.is()) + mxSidebar->requestLayout(); +} + +void ParaPropertyPanel::EndSpacingPopupMode (void) +{ + maLineSpacePopup.Hide(); +} + +void ParaPropertyPanel::EndBulletsPopupMode (void) +{ + //maUnderlinePopup.Hide(); +} + +void ParaPropertyPanel::EndNumberingPopupMode (void) +{ + //maUnderlinePopup.Hide(); +} + + +void ParaPropertyPanel::InitToolBoxAlign() +{ + maAlignToolBox->SetItemImage(TOOLBOX_ITEM1,maLeftPara); + maAlignToolBox->SetItemImage(TOOLBOX_ITEM2,maCentPara); + maAlignToolBox->SetItemImage(TOOLBOX_ITEM3,maRightPara); + maAlignToolBox->SetItemImage(TOOLBOX_ITEM4,maJusPara); + Link aLink = LINK( this, ParaPropertyPanel, AlignStyleModifyHdl_Impl ); + maAlignToolBox->SetSelectHdl( aLink ); + Size aTbxSize (maAlignToolBox->CalcWindowSizePixel()); + maAlignToolBox->SetOutputSizePixel( aTbxSize ); +} + +void ParaPropertyPanel::InitToolBoxVertAlign() +{ + InitImageList(maTBxVertAlign, maVertImageList, maVertImageListH); + maTBxVertAlign->SetSelectHdl(LINK(this,ParaPropertyPanel,VertTbxSelectHandler)); + Size aTbxSize (maTBxVertAlign->CalcWindowSizePixel()); + maTBxVertAlign->SetOutputSizePixel( aTbxSize ); +} + + +void ParaPropertyPanel::InitToolBoxIndent() +{ + Link aLink = LINK( this, ParaPropertyPanel, ModifyIndentHdl_Impl ); + maLeftIndent->SetModifyHdl( aLink ); + maRightIndent->SetModifyHdl( aLink ); + maFLineIndent->SetModifyHdl( aLink ); + + if( Application::GetSettings().GetLayoutRTL()) + { + maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM1,maIndInc_BD); + maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM2,maIndDec_BD); + } + else + { + maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM1,maIndInc); + maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM2,maIndDec); + } + maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM3,maIndHang); + aLink = LINK( this, ParaPropertyPanel, ClickIndent_IncDec_Hdl_Impl ); + maTbxIndent_IncDec->SetSelectHdl(aLink); + m_eLRSpaceUnit = maLRSpaceControl.GetCoreMetric(); + Size aTbxSize = maTbxIndent_IncDec->CalcWindowSizePixel(); + maTbxIndent_IncDec->SetOutputSizePixel( aTbxSize ); + + if( Application::GetSettings().GetLayoutRTL()) + { + maTbxProDemote->SetItemImage(TOOLBOX_ITEM1,maIndInc_BD); + maTbxProDemote->SetItemImage(TOOLBOX_ITEM2,maIndDec_BD); + } + else + { + maTbxProDemote->SetItemImage(TOOLBOX_ITEM1,maIndInc); + maTbxProDemote->SetItemImage(TOOLBOX_ITEM2,maIndDec); + } + maTbxProDemote->SetItemImage(TOOLBOX_ITEM3,maIndHang); + aLink = LINK( this, ParaPropertyPanel, ClickProDemote_Hdl_Impl ); + maTbxProDemote->SetSelectHdl(aLink); + m_eLRSpaceUnit = maLRSpaceControl.GetCoreMetric(); + aTbxSize = maTbxProDemote->CalcWindowSizePixel(); + maTbxProDemote->SetOutputSizePixel( aTbxSize ); +} + +void ParaPropertyPanel::InitToolBoxBGColor() +{ + mpColorUpdater.reset(new ::svx::ToolboxButtonColorUpdater(SID_BACKGROUND_COLOR, TBI_BACK_COLOR, maTBxBackColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW )); + + maTBxBackColor->SetItemImage(TBI_BACK_COLOR, GetDisplayBackground().GetColor().IsDark()? maImgBackColorHigh : maImgBackColor); + maTBxBackColor->SetItemBits( TBI_BACK_COLOR, maTBxBackColor->GetItemBits( TBI_BACK_COLOR ) | TIB_DROPDOWNONLY ); + + Link aLink = LINK(this, ParaPropertyPanel, ToolBoxBackColorDDHandler); + maTBxBackColor->SetDropdownClickHdl ( aLink ); + maTBxBackColor->SetSelectHdl ( aLink ); + Size aTbxSize (maTBxBackColor->CalcWindowSizePixel()); + maTBxBackColor->SetOutputSizePixel( aTbxSize ); +} + +void ParaPropertyPanel::InitToolBoxBulletsNumbering() +{ + if( Application::GetSettings().GetLayoutRTL()) + { + maTBxNumBullet->SetItemImage( IID_BULLET, maNumBImageListRTL.GetImage( IID_BULLET ) ); + maTBxNumBullet->SetItemImage( IID_NUMBER, maNumBImageListRTL.GetImage( IID_NUMBER ) ); + } + else + InitImageList(maTBxNumBullet, maNumBImageList, maNumBImageListH); + + maTBxNumBullet->SetDropdownClickHdl(LINK(this,ParaPropertyPanel,NumBTbxDDHandler)); + maTBxNumBullet->SetSelectHdl(LINK(this,ParaPropertyPanel,NumBTbxSelectHandler)); + Size aTbxSize (maTBxNumBullet->CalcWindowSizePixel()); + maTBxNumBullet->SetOutputSizePixel( aTbxSize ); +} +void ParaPropertyPanel::InitToolBoxSpacing() +{ + Link aLink = LINK( this, ParaPropertyPanel, ULSpaceHdl_Impl ); + maTopDist->SetModifyHdl(aLink); + maBottomDist->SetModifyHdl( aLink ); + + maTbxUL_IncDec->SetItemImage(TOOLBOX_ITEM1,maParInc); + maTbxUL_IncDec->SetItemImage(TOOLBOX_ITEM2,maParDec); + aLink = LINK( this, ParaPropertyPanel, ClickUL_IncDec_Hdl_Impl ); + maTbxUL_IncDec->SetSelectHdl(aLink); + m_eULSpaceUnit = maULSpaceControl.GetCoreMetric(); + Size aTbxSize = maTbxUL_IncDec->CalcWindowSizePixel(); + maTbxUL_IncDec->SetOutputSizePixel( aTbxSize ); +} +void ParaPropertyPanel::InitToolBoxLineSpacing() +{ + Link aLink = LINK( this, ParaPropertyPanel, ClickLineSPDropDownHdl_Impl ); + maLineSPTbx->SetDropdownClickHdl( aLink ); + maLineSPTbx->SetSelectHdl( aLink ); //support keyinput "ENTER" + maLineSPTbx->SetItemBits( TOOLBOX_ITEM1, maLineSPTbx->GetItemBits( TOOLBOX_ITEM1 ) | TIB_DROPDOWNONLY ); + maLineSPTbx->SetItemImage(TOOLBOX_ITEM1,maSpace3); + Size aTbxSize = maLineSPTbx->CalcWindowSizePixel(); + maLineSPTbx->SetOutputSizePixel( aTbxSize ); +} + +void ParaPropertyPanel::initial() +{ + maFTUL->SetBackground(Wallpaper()); + maFTIndent->SetBackground(Wallpaper()); + maFISpace1.SetBackground(Wallpaper()); + maFISpace2.SetBackground(Wallpaper()); + maFIndent1.SetBackground(Wallpaper()); + maFIndent2.SetBackground(Wallpaper()); + maFIndent3.SetBackground(Wallpaper()); + + maFISpace1.SetImage(maSpace1); + maFISpace2.SetImage(maSpace2); + maFIndent1.SetImage(maIndent3); + maFIndent2.SetImage(maIndent2); + maFIndent3.SetImage(maIndent1); + + GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_LEFT,sal_True,sal_False); + GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_CENTER,sal_True,sal_False); + GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_RIGHT,sal_True,sal_False); + GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_BLOCK,sal_True,sal_False); + + //toolbox + SetupIcons(); + InitToolBoxAlign(); + InitToolBoxVertAlign(); + InitToolBoxIndent(); + InitToolBoxBGColor(); + InitToolBoxBulletsNumbering(); + InitToolBoxSpacing(); + InitToolBoxLineSpacing(); + +#ifdef HAS_IA2 + maAlignToolBox->SetAccRelationLabeledBy(&maAlignToolBox); + maTBxVertAlign->SetMpSubEditAccLableBy(&maTBxVertAlign); + maTBxNumBullet->SetAccRelationLabeledBy(&maTBxNumBullet); + maTBxBackColor->SetMpSubEditAccLableBy(&maTBxBackColor); + maFTUL->SetAccRelationLabeledBy(&maFTUL); + maTbxUL_IncDec->SetAccRelationLabeledBy(&maTbxUL_IncDec); + maTopDist->SetAccRelationLabeledBy(&maTopDist); + maBottomDist->SetAccRelationLabeledBy(&maBottomDist); + maLineSPTbx->SetAccRelationLabeledBy(&maLineSPTbx); + maFTIndent->SetAccRelationLabeledBy(&maFTIndent); + maTbxIndent_IncDec->SetAccRelationLabeledBy(&maTbxIndent_IncDec); + maTbxProDemote->SetAccRelationLabeledBy(&maTbxProDemote); + maLeftIndent->SetAccRelationLabeledBy(&maLeftIndent); + maRightIndent->SetAccRelationLabeledBy(&maRightIndent); + maFLineIndent->SetAccRelationLabeledBy(&maFLineIndent); + mpColorUpdater->SetAccRelationLabeledBy(&mpColorUpdater); +#endif +} + +void ParaPropertyPanel::InitImageList(::boost::scoped_ptr<ToolBox>& rTbx, ImageList& rImglst, ImageList& rImgHlst) +{ + sal_Bool bHighContrast = GetDisplayBackground().GetColor().IsDark(); + + ImageList& rImgLst = bHighContrast ? rImgHlst : rImglst; + + sal_uInt16 nCount = rTbx->GetItemCount(); + for (sal_uInt16 i = 0; i < nCount; i++) + { + sal_uInt16 nId = rTbx->GetItemId(i); + rTbx->SetItemImage( nId, rImgLst.GetImage( nId ) ); + } +} + +//===========================for Numbering & Bullet================================================ + + + +IMPL_LINK(ParaPropertyPanel, NumBTbxDDHandler, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + + EndTracking(); + pToolBox->SetItemDown( nId, sal_True ); + + if (nId == 1) + { + maBulletsPopup.UpdateValueSet(); + maBulletsPopup.Show(*pToolBox); + } + else if (nId == 2) + { + maNumberingPopup.UpdateValueSet(); + maNumberingPopup.Show(*pToolBox); + } + pToolBox->SetItemDown( nId, sal_False ); + return 0; +} + +IMPL_LINK(ParaPropertyPanel, NumBTbxSelectHandler, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + sal_uInt16 nSID = SID_TABLE_VERT_NONE; + + EndTracking(); + if (nId == 1) + { + nSID = FN_NUM_BULLET_ON; + } + else if ( nId == 2) + { + nSID = FN_NUM_NUMBERING_ON; + } + SfxBoolItem aBoolItem(nSID, sal_True); + GetBindings()->GetDispatcher()->Execute(nSID, SFX_CALLMODE_RECORD, &aBoolItem, 0L); + + return 0; +} + + +//================================for Vertical Alignment======================================== + + + +IMPL_LINK(ParaPropertyPanel, VertTbxSelectHandler, ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + sal_uInt16 nSID = SID_TABLE_VERT_NONE; + EndTracking(); + if (nId == 1) + { + nSID = SID_TABLE_VERT_NONE; + maTBxVertAlign->SetItemState(1, STATE_CHECK); + maTBxVertAlign->SetItemState(2, STATE_NOCHECK); + maTBxVertAlign->SetItemState(3, STATE_NOCHECK); + } + else if (nId == 2) + { + nSID = SID_TABLE_VERT_CENTER; + maTBxVertAlign->SetItemState(1, STATE_NOCHECK); + maTBxVertAlign->SetItemState(2, STATE_CHECK); + maTBxVertAlign->SetItemState(3, STATE_NOCHECK); + } + else if (nId == 3) + { + nSID = SID_TABLE_VERT_BOTTOM; + maTBxVertAlign->SetItemState(1, STATE_NOCHECK); + maTBxVertAlign->SetItemState(2, STATE_NOCHECK); + maTBxVertAlign->SetItemState(3, STATE_CHECK); + } + SfxBoolItem aBoolItem(nSID, sal_True); + GetBindings()->GetDispatcher()->Execute(nSID, SFX_CALLMODE_RECORD, &aBoolItem, 0L); + + return 0; +} + +void ParaPropertyPanel::VertStateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState) +{ + if (eState < SFX_ITEM_DONTCARE) + { + maTBxVertAlign->SetItemState(1, STATE_NOCHECK); + maTBxVertAlign->SetItemState(2, STATE_NOCHECK); + maTBxVertAlign->SetItemState(3, STATE_NOCHECK); + maTBxVertAlign->EnableItem(1, sal_False); + maTBxVertAlign->EnableItem(2, sal_False); + maTBxVertAlign->EnableItem(3, sal_False); + } + else + { + maTBxVertAlign->EnableItem(1, sal_True); + maTBxVertAlign->EnableItem(2, sal_True); + maTBxVertAlign->EnableItem(3, sal_True); + if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem))) + { + const SfxBoolItem* pItem= (const SfxBoolItem*)pState; + sal_Bool aBool = (sal_Bool)pItem->GetValue(); + + if (aBool) + { + if (nSID == SID_TABLE_VERT_NONE) + { + maTBxVertAlign->SetItemState(1, STATE_CHECK); + maTBxVertAlign->SetItemState(2, STATE_NOCHECK); + maTBxVertAlign->SetItemState(3, STATE_NOCHECK); + } + else if (nSID == SID_TABLE_VERT_CENTER) + { + maTBxVertAlign->SetItemState(1, STATE_NOCHECK); + maTBxVertAlign->SetItemState(2, STATE_CHECK); + maTBxVertAlign->SetItemState(3, STATE_NOCHECK); + } + else if (nSID == SID_TABLE_VERT_BOTTOM) + { + maTBxVertAlign->SetItemState(1, STATE_NOCHECK); + maTBxVertAlign->SetItemState(2, STATE_NOCHECK); + maTBxVertAlign->SetItemState(3, STATE_CHECK); + } + } + else + { + if (nSID == SID_TABLE_VERT_NONE) + { + maTBxVertAlign->SetItemState(1, STATE_NOCHECK); + } + else if (nSID == SID_TABLE_VERT_CENTER) + { + maTBxVertAlign->SetItemState(2, STATE_NOCHECK); + } + else if (nSID == SID_TABLE_VERT_BOTTOM) + { + maTBxVertAlign->SetItemState(3, STATE_NOCHECK); + } + } + } + else + { + maTBxVertAlign->SetItemState(1, STATE_NOCHECK); + maTBxVertAlign->SetItemState(2, STATE_NOCHECK); + maTBxVertAlign->SetItemState(3, STATE_NOCHECK); + } + } +} +//==================================for Background color===================== + +IMPL_LINK(ParaPropertyPanel, ToolBoxBackColorDDHandler,ToolBox*, pToolBox) +{ + sal_uInt16 nId = pToolBox->GetCurItemId(); + OSL_ASSERT(nId == TBI_BACK_COLOR); + if(nId == TBI_BACK_COLOR) + { + pToolBox->SetItemDown( nId, true ); + maBGColorPopup.Show(*pToolBox); + maBGColorPopup.SetCurrentColor(maColor, mbColorAvailable); + } + return 0; +} + +IMPL_LINK( ParaPropertyPanel, ImplPopupModeEndHdl, FloatingWindow*, EMPTYARG ) +{ + return 0; +} + +void ParaPropertyPanel::ShowMenu (void) +{ + if (mpBindings != NULL) + { + SfxDispatcher* pDispatcher = mpBindings->GetDispatcher(); + if (pDispatcher != NULL) + pDispatcher->Execute(SID_PARA_DLG, SFX_CALLMODE_ASYNCHRON); + } +} + +void ParaPropertyPanel::ParaBKGStateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState) +{ + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxColorItem)) + { + const SvxColorItem* pItem = (const SvxColorItem*)pState; + maColor = pItem->GetValue(); + mbColorAvailable = sal_True; + mpColorUpdater->Update(maColor); + } + else + { + mbColorAvailable = sal_False; + maColor.SetColor(COL_AUTO); + mpColorUpdater->Update(maColor); + } +} + +Color ParaPropertyPanel::GetBGColor (void) const +{ + return maColor; +} + +void ParaPropertyPanel::SetBGColor ( + const String& rsColorName, + const Color aColor) +{ + SvxColorItem aColorItem(aColor, SID_BACKGROUND_COLOR); + mpBindings->GetDispatcher()->Execute(SID_BACKGROUND_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L); + maColor = aColor; +} + +//==================================for Paragraph Alignment===================== +IMPL_LINK( ParaPropertyPanel, AlignStyleModifyHdl_Impl, ToolBox*, pBox ) +{ + switch (pBox->GetCurItemId()) + { + case BT_SUBSTLEFT: + { + pBox->SetItemState(BT_SUBSTLEFT,STATE_CHECK); + pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_LEFT, sal_True ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_LEFT, SFX_CALLMODE_RECORD, &aBoolItem, 0L); + } + break; + case BT_SUBSTCENTER: + { + pBox->SetItemState(BT_SUBSTCENTER,STATE_CHECK); + pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_CENTER, SFX_CALLMODE_RECORD, &aBoolItem, 0L); + } + break; + case BT_SUBSTRIGHT: + { + pBox->SetItemState(BT_SUBSTRIGHT,STATE_CHECK); + pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_RIGHT, SFX_CALLMODE_RECORD, &aBoolItem, 0L); + } + break; + case BT_SUBSTJUSTIFY: + { + pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_CHECK); + pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_BLOCK, SFX_CALLMODE_RECORD, &aBoolItem, 0L); + } + break; + } + + return 0; +} +//==================================for Paragraph Indent===================== +IMPL_LINK( ParaPropertyPanel, ModifyIndentHdl_Impl, SvxRelativeField*, pBox ) +{ + SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE ); + aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + return 0; +} + +IMPL_LINK(ParaPropertyPanel, ClickIndent_IncDec_Hdl_Impl, ToolBox *, pControl) +{ + switch (pControl->GetCurItemId()) + { + case INDENT_INCREMENT: + { + switch (maContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Writer, Context_Default): + case CombinedEnumContext(Application_Writer, Context_Text): + case CombinedEnumContext(Application_Writer, Context_Table): + { + SfxBoolItem aMargin( SID_INC_INDENT, sal_True ); + GetBindings()->GetDispatcher()->Execute( + SID_INC_INDENT, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + default: + { + SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE ); + + maTxtLeft += INDENT_STEP; + sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + aMargin.SetTxtLeft( (const long)nVal ); + aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + } + } + break; + case INDENT_DECREMENT: + { + switch (maContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Writer, Context_Default): + case CombinedEnumContext(Application_Writer, Context_Text): + case CombinedEnumContext(Application_Writer, Context_Table): + { + SfxBoolItem aMargin( SID_DEC_INDENT, sal_True ); + GetBindings()->GetDispatcher()->Execute( + SID_DEC_INDENT, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + default: + { + if((maTxtLeft - INDENT_STEP) < 0) + maTxtLeft = DEFAULT_VALUE; + else + maTxtLeft -= INDENT_STEP; + + SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE ); + + sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + + aMargin.SetTxtLeft( (const long)nVal ); + aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + } + } + break; + case ID_HANGING_INDENT: + { + SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE ); + aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) + (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetTxtFirstLineOfst( ((const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ))*(-1) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + } + return( 0L ); +} + +IMPL_LINK(ParaPropertyPanel, ClickProDemote_Hdl_Impl, ToolBox *, pControl) +{ + switch (pControl->GetCurItemId()) + { + case BT_TBX_INDENT_PROMOTE: + { + SvxLRSpaceItem aMargin( SID_ATTR_PARA_RIGHT ); + + maTxtLeft += INDENT_STEP; + sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + aMargin.SetTxtLeft( (const long)nVal ); + aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_RIGHT, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + case BT_TBX_INDENT_DEMOTE: + { + if((maTxtLeft - INDENT_STEP) < 0) + maTxtLeft = DEFAULT_VALUE; + else + maTxtLeft -= INDENT_STEP; + + SvxLRSpaceItem aMargin( SID_ATTR_PARA_LEFT ); + + sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + + aMargin.SetTxtLeft( (const long)nVal ); + aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_LEFT, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + case SD_HANGING_INDENT: + { + SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE ); + aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) + (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) ); + aMargin.SetTxtFirstLineOfst( ((const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ))*(-1) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + } + return( 0L ); +} +//==================================for Paragraph Line Spacing===================== + +IMPL_LINK( ParaPropertyPanel, ClickLineSPDropDownHdl_Impl, ToolBox*, pBox ) +{ + + const sal_uInt16 nId = pBox->GetCurItemId(); + OSL_ASSERT(nId == TOOLBOX_ITEM1); + if(nId == TOOLBOX_ITEM1) + { + pBox->SetItemDown( nId, true ); + maLineSpacePopup.Rearrange(meLnSpState,m_eMetricUnit,mpLnSPItem,maContext); + maLineSpacePopup.Show(*pBox); + + } + return (0L); +} + +//==================================for Paragraph Spacing===================== +IMPL_LINK( ParaPropertyPanel, ULSpaceHdl_Impl, SvxRelativeField*, pBox ) +{ + SvxULSpaceItem aMargin( SID_ATTR_PARA_ULSPACE ); + aMargin.SetUpper( (sal_uInt16)GetCoreValue( *maTopDist.get(), m_eULSpaceUnit ) ); + aMargin.SetLower( (sal_uInt16)GetCoreValue( *maBottomDist.get(), m_eULSpaceUnit ) ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + return 0L; +} + +IMPL_LINK(ParaPropertyPanel, ClickUL_IncDec_Hdl_Impl, ToolBox *, pControl) +{ + switch (pControl->GetCurItemId()) + { + case UL_INCREMENT: + { + SvxULSpaceItem aMargin( SID_ATTR_PARA_ULSPACE ); + + maUpper += UL_STEP; + sal_Int64 nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + aMargin.SetUpper( (const sal_uInt16)nVal ); + + maLower += UL_STEP; + nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + aMargin.SetLower( (const sal_uInt16)nVal ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + case UL_DECREMENT: + { + SvxULSpaceItem aMargin( SID_ATTR_PARA_ULSPACE ); + + if( maUpper >= UL_STEP ) + { + maUpper -= UL_STEP; + sal_Int64 nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + aMargin.SetUpper( (const sal_uInt16)nVal ); + } + else + aMargin.SetUpper( DEFAULT_VALUE ); + if( maLower >= UL_STEP ) + { + maLower -= UL_STEP; + sal_Int64 nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit ); + aMargin.SetLower( (const sal_uInt16)nVal ); + } + else + aMargin.SetLower( DEFAULT_VALUE ); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_PARA_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L); + } + break; + } + return( 0L ); +} + +//==================================for Paragraph State change===================== +void ParaPropertyPanel::NotifyItemUpdate( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + if( nSID == SID_ATTR_METRIC ) + { + m_eMetricUnit = GetCurrentUnit(eState,pState); + if( m_eMetricUnit!=m_last_eMetricUnit ) + { + SetFieldUnit( *maLeftIndent.get(), m_eMetricUnit ); + SetFieldUnit( *maRightIndent.get(), m_eMetricUnit ); + SetFieldUnit( *maFLineIndent.get(), m_eMetricUnit ); + SetFieldUnit( *maTopDist.get(), m_eMetricUnit ); + SetFieldUnit( *maBottomDist.get(), m_eMetricUnit ); + } + m_last_eMetricUnit = m_eMetricUnit; + } + + if( nSID == SID_ATTR_PARA_LRSPACE ) + StateChangedIndentImpl( nSID, eState, pState ); + + if( nSID == SID_ATTR_PARA_LINESPACE ) + StateChangedLnSPImpl( nSID, eState, pState ); + + if( nSID == SID_ATTR_PARA_ULSPACE) + StateChangedULImpl( nSID, eState, pState ); + + if (nSID==SID_ATTR_PARA_ADJUST_LEFT || nSID==SID_ATTR_PARA_ADJUST_CENTER || nSID==SID_ATTR_PARA_ADJUST_RIGHT || nSID==SID_ATTR_PARA_ADJUST_BLOCK) + StateChangedAlignmentImpl( nSID, eState, pState ); + + if (nSID==SID_OUTLINE_LEFT || nSID==SID_OUTLINE_RIGHT) + StateChangeOutLineImpl( nSID, eState, pState ); + + if (nSID==SID_INC_INDENT || nSID==SID_DEC_INDENT) + StateChangeIncDecImpl( nSID, eState, pState ); + // Add toggle state for numbering and bullet icons + if (nSID==FN_NUM_NUMBERING_ON || nSID==FN_NUM_BULLET_ON) + StateChangeBulletNumImpl( nSID, eState, pState ); + + //Get the num rule index data of the current selection + if ( nSID == FN_BUL_NUM_RULE_INDEX ||nSID == FN_NUM_NUM_RULE_INDEX) + StateChangeBulletNumRuleImpl( nSID, eState, pState ); + + if ((nSID == SID_TABLE_VERT_NONE)||(nSID == SID_TABLE_VERT_CENTER)||(nSID == SID_TABLE_VERT_BOTTOM)) + { + VertStateChanged( nSID, eState, pState); + } + else if (nSID == SID_BACKGROUND_COLOR) + { + ParaBKGStateChanged(nSID, eState, pState); + } +} + +void ParaPropertyPanel::StateChangedAlignmentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + if( eState >= SFX_ITEM_AVAILABLE ) + { + const SfxBoolItem* pItem = (const SfxBoolItem*)pState; + bool IsChecked = (bool)pItem->GetValue(); + switch (nSID) + { + case SID_ATTR_PARA_ADJUST_LEFT: + { + if(IsChecked) + { + maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_CHECK); + maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + } + else + maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + } + break; + case SID_ATTR_PARA_ADJUST_CENTER: + { + if(IsChecked) + { + maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_CHECK); + maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + } + else + maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + } + break; + case SID_ATTR_PARA_ADJUST_RIGHT: + { + if(IsChecked) + { + maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_CHECK); + maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + } + else + maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + } + break; + case SID_ATTR_PARA_ADJUST_BLOCK: + { + if(IsChecked) + { + maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_CHECK); + maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + } + else + maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + } + break; + } + } + else if( eState == SFX_ITEM_DISABLED ) + { + } + else if ( eState == SFX_ITEM_DONTCARE ) + { + switch (nSID) + { + case SID_ATTR_PARA_ADJUST_LEFT: + maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK); + break; + case SID_ATTR_PARA_ADJUST_CENTER: + maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK); + break; + case SID_ATTR_PARA_ADJUST_RIGHT: + maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK); + break; + case SID_ATTR_PARA_ADJUST_BLOCK: + maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK); + break; + } + } +} + +void ParaPropertyPanel::StateChangedIndentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + switch (maContext.GetCombinedContext()) + { + + case CombinedEnumContext(Application_Writer, Context_DrawText): + case CombinedEnumContext(Application_Calc, Context_DrawText): + case CombinedEnumContext(Application_Writer, Context_Annotation): + { + maLeftIndent->SetMin( DEFAULT_VALUE ); + maRightIndent->SetMin( DEFAULT_VALUE ); + maFLineIndent->SetMin( DEFAULT_VALUE ); + maTbxIndent_IncDec->Show(); + maTbxProDemote->Hide(); + } + break; + case CombinedEnumContext(Application_Draw, Context_DrawText): + case CombinedEnumContext(Application_Impress, Context_DrawText): + case CombinedEnumContext(Application_Draw, Context_Draw): + case CombinedEnumContext(Application_Draw, Context_TextObject): + case CombinedEnumContext(Application_Draw, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_Draw): + case CombinedEnumContext(Application_Impress, Context_TextObject): + case CombinedEnumContext(Application_Impress, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_Table): + case CombinedEnumContext(Application_Draw, Context_Table): + { + maLeftIndent->SetMin( DEFAULT_VALUE ); + maRightIndent->SetMin( DEFAULT_VALUE ); + maFLineIndent->SetMin( DEFAULT_VALUE ); + maTbxIndent_IncDec->Hide(); + maTbxProDemote->Show(); + } + break; + case CombinedEnumContext(Application_Writer, Context_Default): + case CombinedEnumContext(Application_Writer, Context_Text): + case CombinedEnumContext(Application_Writer, Context_Table): + { + maLeftIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM ); + maRightIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM ); + maFLineIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM ); + maTbxIndent_IncDec->Show(); + maTbxProDemote->Hide(); + } + break; + } + + if( pState && eState >= SFX_ITEM_AVAILABLE ) + { + SvxLRSpaceItem* pSpace = ( SvxLRSpaceItem*)pState; + maTxtLeft = pSpace->GetTxtLeft(); + maTxtLeft = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM ); + maTxtLeft = OutputDevice::LogicToLogic( maTxtLeft, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) ); + + long aTxtRight = pSpace->GetRight(); + aTxtRight = OutputDevice::LogicToLogic( aTxtRight, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM ); + aTxtRight = OutputDevice::LogicToLogic( aTxtRight, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) ); + + long aTxtFirstLineOfst = pSpace->GetTxtFirstLineOfst(); + aTxtFirstLineOfst = OutputDevice::LogicToLogic( aTxtFirstLineOfst, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM ); + aTxtFirstLineOfst = OutputDevice::LogicToLogic( aTxtFirstLineOfst, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) ); + + long nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = (long)maLeftIndent->Normalize( (long)nVal ); + maLeftIndent->SetValue( nVal, FUNIT_100TH_MM ); + + if(maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table)) + { + maFLineIndent->SetMin( nVal*(-1), FUNIT_100TH_MM ); + } + + long nrVal = OutputDevice::LogicToLogic( aTxtRight, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nrVal = (long)maRightIndent->Normalize( (long)nrVal ); + maRightIndent->SetValue( nrVal, FUNIT_100TH_MM ); + + long nfVal = OutputDevice::LogicToLogic( aTxtFirstLineOfst, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nfVal = (long)maFLineIndent->Normalize( (long)nfVal ); + maFLineIndent->SetValue( nfVal, FUNIT_100TH_MM ); + + switch (maContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Writer, Context_DrawText): + case CombinedEnumContext(Application_Writer, Context_Text): + case CombinedEnumContext(Application_Writer, Context_Default): + case CombinedEnumContext(Application_Writer, Context_Table): + case CombinedEnumContext(Application_Writer, Context_Annotation): + { + maLeftIndent->SetMax( MAX_SW - nrVal, FUNIT_100TH_MM ); + maRightIndent->SetMax( MAX_SW - nVal, FUNIT_100TH_MM ); + maFLineIndent->SetMax( MAX_SW - nVal - nrVal, FUNIT_100TH_MM ); + } + break; + case CombinedEnumContext(Application_Draw, Context_DrawText): + case CombinedEnumContext(Application_Draw, Context_Draw): + case CombinedEnumContext(Application_Draw, Context_Table): + case CombinedEnumContext(Application_Draw, Context_TextObject): + case CombinedEnumContext(Application_Draw, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_TextObject): + case CombinedEnumContext(Application_Impress, Context_DrawText): + case CombinedEnumContext(Application_Impress, Context_Table): + case CombinedEnumContext(Application_Impress, Context_Draw): + case CombinedEnumContext(Application_Impress, Context_Graphic): + { + maLeftIndent->SetMax( MAX_SC_SD - nrVal, FUNIT_100TH_MM ); + maRightIndent->SetMax( MAX_SC_SD - nVal, FUNIT_100TH_MM ); + maFLineIndent->SetMax( MAX_SC_SD - nVal - nrVal, FUNIT_100TH_MM ); + } + } + + maTbxIndent_IncDec->Enable(); + maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_True); + if(maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) + && maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) + && maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table)) + { + maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_True); + maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_True); + } + +// maTbxProDemote->Enable(); +// if( !mbOutLineRight && !mbOutLineLeft ) +// maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True); + maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True); + } + else if( eState == SFX_ITEM_DISABLED ) + { + maLeftIndent-> Disable(); + maRightIndent->Disable(); + maFLineIndent->Disable(); + maTbxIndent_IncDec->Disable(); + if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table) ) + maTbxIndent_IncDec->Disable(); + else + maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_False); + +// maTbxProDemote->Disable(); + maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False); + } + else + { + maLeftIndent->SetEmptyFieldValue(); + maRightIndent->SetEmptyFieldValue(); + maFLineIndent->SetEmptyFieldValue(); + if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table) ) + maTbxIndent_IncDec->Disable(); + else + maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_False); +// maTbxProDemote->Disable(); + maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False); + } +} + +void ParaPropertyPanel::StateChangedLnSPImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + meLnSpState = eState; + + if( pState && eState >= SFX_ITEM_AVAILABLE ) + { + if(mpLnSPItem) + delete mpLnSPItem; + mpLnSPItem = ( SvxLineSpacingItem *)pState->Clone(); + } +} + +void ParaPropertyPanel::StateChangedULImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + maTopDist->SetMax( maTopDist->Normalize( MAX_DURCH ), MapToFieldUnit(m_eULSpaceUnit) ); + maBottomDist->SetMax( maBottomDist->Normalize( MAX_DURCH ), MapToFieldUnit(m_eULSpaceUnit) ); + + if( pState && eState >= SFX_ITEM_AVAILABLE ) + { + SvxULSpaceItem* pOldItem = (SvxULSpaceItem*)pState; + + maUpper = pOldItem->GetUpper(); + maUpper = OutputDevice::LogicToLogic( maUpper, (MapUnit)m_eULSpaceUnit, MAP_100TH_MM ); + maUpper = OutputDevice::LogicToLogic( maUpper, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) ); + + maLower = pOldItem->GetLower(); + maLower = OutputDevice::LogicToLogic( maLower, (MapUnit)m_eULSpaceUnit, MAP_100TH_MM ); + maLower = OutputDevice::LogicToLogic( maLower, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) ); + + sal_Int64 nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = maTopDist->Normalize( nVal ); + maTopDist->SetValue( nVal, FUNIT_100TH_MM ); + + nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM ); + nVal = maBottomDist->Normalize( nVal ); + maBottomDist->SetValue( nVal, FUNIT_100TH_MM ); + maTbxUL_IncDec->Enable(); + } + else if(eState == SFX_ITEM_DISABLED ) + { + maTopDist->Disable(); + maBottomDist->Disable(); + maTbxUL_IncDec->Disable(); + } + else + { + maTopDist->SetEmptyFieldValue(); + maBottomDist->SetEmptyFieldValue(); + maTbxUL_IncDec->Disable(); + } +} + +void ParaPropertyPanel::StateChangeOutLineImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + if (nSID==SID_OUTLINE_LEFT) + { + if( pState && eState == SFX_ITEM_UNKNOWN ) + mbOutLineLeft = 1; + else + mbOutLineLeft = 0; + } + if (nSID==SID_OUTLINE_RIGHT) + { + if( pState && eState == SFX_ITEM_UNKNOWN ) + mbOutLineRight = 1; + else + mbOutLineRight = 0; + } + if(mbOutLineLeft) + maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_True); + else + maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_False); + + if(mbOutLineRight) + maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_True); + else + maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_False); + +// if( !mbOutLineRight && !mbOutLineLeft ) +// { +// maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_True); +// maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_True); +// maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True); +// } +// else +// maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False); +} + +void ParaPropertyPanel::StateChangeIncDecImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + if (nSID==SID_INC_INDENT) + { + if( pState && eState == SFX_ITEM_UNKNOWN ) + maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_True); + else + if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table) ) + maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_False); + } + if (nSID==SID_DEC_INDENT) + { + if( pState && eState == SFX_ITEM_UNKNOWN ) + maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_True); + else + if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) && + maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table) ) + maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_False); + } +} +// Add toggle state for numbering and bullet icons +void ParaPropertyPanel::StateChangeBulletNumImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + if (nSID==FN_NUM_NUMBERING_ON) + { + if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem))) + { + const SfxBoolItem* pItem= (const SfxBoolItem*)pState; + sal_Bool aBool = (sal_Bool)pItem->GetValue(); + if (aBool) { + maTBxNumBullet->SetItemState(IID_NUMBER, STATE_CHECK); + } else { + maTBxNumBullet->SetItemState(IID_NUMBER, STATE_NOCHECK); + } + } + } + if (nSID==FN_NUM_BULLET_ON) + { + if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem))) + { + const SfxBoolItem* pItem= (const SfxBoolItem*)pState; + sal_Bool aBool = (sal_Bool)pItem->GetValue(); + if (aBool) { + maTBxNumBullet->SetItemState(IID_BULLET, STATE_CHECK); + } else { + maTBxNumBullet->SetItemState(IID_BULLET, STATE_NOCHECK); + } + } + } +} +//Modified for Numbering&Bullets Dialog UX Enh(Story 992) by chengjh,2011.7.5 +//Handing the transferred the num rule index data of the current selection +void ParaPropertyPanel::StateChangeBulletNumRuleImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) +{ + + const SfxUInt16Item* pIt = (const SfxUInt16Item*)pState; + sal_uInt16 nValue = (sal_uInt16)0xFFFF; + if ( pIt ) + nValue = pIt->GetValue(); + + if ( nSID == FN_BUL_NUM_RULE_INDEX ) + { + mnBulletTypeIndex = nValue; + }else if ( nSID == FN_NUM_NUM_RULE_INDEX ) + { + mnNumTypeIndex = nValue; + } +} +//End +FieldUnit ParaPropertyPanel::GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState ) +{ + FieldUnit eUnit = FUNIT_NONE; + + if ( pState && eState >= SFX_ITEM_DEFAULT ) + eUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue(); + else + { + SfxViewFrame* pFrame = SfxViewFrame::Current(); + SfxObjectShell* pSh = NULL; + if ( pFrame ) + pSh = pFrame->GetObjectShell(); + if ( pSh ) //the object shell is not always available during reload + { + SfxModule* pModule = pSh->GetModule(); + if ( pModule ) + { + const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC ); + if ( pItem ) + eUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue(); + } + else + { + DBG_ERRORFILE( "GetModuleFieldUnit(): no module found" ); + } + } + } + + return eUnit; +} +//new FixedText(this, SVX_RES(FT_COLOR)) + +PopupControl* ParaPropertyPanel::CreateLineSpacingControl (PopupContainer* pParent) +{ + return new ParaLineSpacingControl(pParent, *this); +} + +PopupControl* ParaPropertyPanel::CreateBulletsPopupControl (PopupContainer* pParent) +{ + return new ParaBulletsControl(pParent, *this); +} + +PopupControl* ParaPropertyPanel::CreateNumberingPopupControl (PopupContainer* pParent) +{ + return new ParaNumberingControl(pParent, *this); +} + +PopupControl* ParaPropertyPanel::CreateBGColorPopupControl (PopupContainer* pParent) +{ + return new ColorControl( + pParent, + mpBindings, + SVX_RES(RID_POPUPPANEL_TEXTPAGE_FONT_COLOR), + SVX_RES(VS_FONT_COLOR), + ::boost::bind(&ParaPropertyPanel::GetBGColor, this), + ::boost::bind(&ParaPropertyPanel::SetBGColor, this, _1,_2), + pParent, + 0); +} + + +ParaPropertyPanel::ParaPropertyPanel(Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) + : Control(pParent, SVX_RES(RID_SIDEBAR_PARA_PANEL)), + maAlignToolBoxBackground(ControlFactory::CreateToolBoxBackground(this)), + maAlignToolBox (ControlFactory::CreateToolBox(maAlignToolBoxBackground.get(),SVX_RES(TBX_HORIZONTALALIGNMENT))), + maTBxVertAlignBackground(ControlFactory::CreateToolBoxBackground(this)), + maTBxVertAlign (ControlFactory::CreateToolBox(maTBxVertAlignBackground.get(),SVX_RES(TBX_VERT_ALIGN))), + maTBxNumBulletBackground(ControlFactory::CreateToolBoxBackground(this)), + maTBxNumBullet (ControlFactory::CreateToolBox(maTBxNumBulletBackground.get(),SVX_RES(TBX_NUM_BULLET))), + maTBxBackColorBackground(ControlFactory::CreateToolBoxBackground(this)), + maTBxBackColor (ControlFactory::CreateToolBox(maTBxBackColorBackground.get(),SVX_RES(TBX_BACK_COLOR))), + maFTUL (new FixedText(this, SVX_RES(FT_SPACING))), + maTbxUL_IncDecBackground(ControlFactory::CreateToolBoxBackground(this)), + maTbxUL_IncDec (ControlFactory::CreateToolBox(maTbxUL_IncDecBackground.get(),SVX_RES(TBX_UL_INC_DEC))), + maTopDist (new SvxRelativeField(this, SVX_RES(MF_ABOVE_PARASPACING))), + maBottomDist (new SvxRelativeField(this, SVX_RES(MF_BELOW_PARASPACING))), + maLineSPTbxBackground(ControlFactory::CreateToolBoxBackground(this)), + maLineSPTbx (ControlFactory::CreateToolBox(maLineSPTbxBackground.get(),SVX_RES(TBX_LINESP))), + maFTIndent (new FixedText(this, SVX_RES(FT_INDENT))), + maTbxIndent_IncDecBackground(ControlFactory::CreateToolBoxBackground(this)), + maTbxIndent_IncDec (ControlFactory::CreateToolBox(maTbxIndent_IncDecBackground.get(),SVX_RES(TBX_INDENT_INC_DEC))), + maTbxProDemoteBackground(ControlFactory::CreateToolBoxBackground(this)), + maTbxProDemote (ControlFactory::CreateToolBox(maTbxProDemoteBackground.get(),SVX_RES(TBX_INDENT_PRO_DEMOTE))), + maLeftIndent (new SvxRelativeField(this, SVX_RES(MF_BEFORE_INDENT))), + maRightIndent (new SvxRelativeField(this, SVX_RES(MF_AFTER_INDENT))), + maFLineIndent (new SvxRelativeField(this, SVX_RES(MF_FL_INDENT))), + mpColorUpdater (), + maFISpace1 ( this, SVX_RES( FI_SPACE1)), + maFISpace2 ( this, SVX_RES( FI_SPACE2)), + maFIndent1 ( this, SVX_RES( FI_INDENT1)), + maFIndent2 ( this, SVX_RES( FI_INDENT2)), + maFIndent3 ( this, SVX_RES( FI_INDENT3)), + maSpace1 (SVX_RES(IMG_SPACE1)), + maSpace2 (SVX_RES(IMG_SPACE2)), + maSpace3 (SVX_RES(IMG_SPACE3)), + maIndent1 (SVX_RES(IMG_INDENT1)), + maIndent2 (SVX_RES(IMG_INDENT2)), + maIndent3 (SVX_RES(IMG_INDENT3)), + maLeftPara (SVX_RES(IMG_LEFT_PARA)), + maCentPara (SVX_RES(IMG_CENTER_PARA)), + maRightPara (SVX_RES(IMG_RIGHT_PARA)), + maJusPara (SVX_RES(IMG_JUSTIFY_PARA)), + maIndInc (SVX_RES(IMG_INDENT_INC)), + maIndDec (SVX_RES(IMG_INDENT_DEC)), + maIndInc_BD (SVX_RES(IMG_INDENT_INC_BD)), + maIndDec_BD (SVX_RES(IMG_INDENT_DEC_BD)), + maIndHang (SVX_RES(IMG_INDENT_HANG)), + maParInc (SVX_RES(IMG_PARA_INC)), + maParDec (SVX_RES(IMG_PARA_DEC)), + maVertImageList (SVX_RES(IL_VERT_ALIGN)), + maVertImageListH (SVX_RES(IL_VERT_ALIGN)), + maNumBImageList (SVX_RES(IL_NUM_BULLET)), + maNumBImageListH (SVX_RES(ILH_NUM_BULLET)), + maNumBImageListRTL (SVX_RES(IL_NUM_BULLET_RTL)), + maImgBackColorHigh (SVX_RES(IMG_BACK_COLOR_H)), + maImgBackColor (SVX_RES(IMG_BACK_COLOR)), + maTxtLeft (0), + mpLnSPItem (NULL), + meLnSpState (SFX_ITEM_DONTCARE), + mbOutLineLeft (false), + mbOutLineRight (false), + maUpper (0), + maLower (0), + mnBulletTypeIndex ((sal_uInt16)0xFFFF), + mnNumTypeIndex ((sal_uInt16)0xFFFF), + maColor (COL_AUTO), + mbColorAvailable (true), + //, m_eMetricUnit (FUNIT_INCH) +//, m_last_eMetricUnit (FUNIT_INCH) + m_eLRSpaceUnit(), + m_eULSpaceUnit(), + maLeftAlignControl (SID_ATTR_PARA_ADJUST_LEFT, *pBindings,*this), + maCenterAlignControl (SID_ATTR_PARA_ADJUST_CENTER, *pBindings,*this), + maRightAlignControl (SID_ATTR_PARA_ADJUST_RIGHT, *pBindings,*this), + maJustifyAlignControl (SID_ATTR_PARA_ADJUST_BLOCK, *pBindings,*this), + maLRSpaceControl (SID_ATTR_PARA_LRSPACE,*pBindings,*this), + maLNSpaceControl (SID_ATTR_PARA_LINESPACE, *pBindings,*this), + maULSpaceControl (SID_ATTR_PARA_ULSPACE, *pBindings,*this), + maOutLineLeftControl (SID_OUTLINE_LEFT, *pBindings,*this), + maOutLineRightControl (SID_OUTLINE_RIGHT, *pBindings,*this), + maDecIndentControl (SID_DEC_INDENT, *pBindings,*this), + maIncIndentControl (SID_INC_INDENT, *pBindings,*this), + maVertTop (SID_TABLE_VERT_NONE, *pBindings,*this), + maVertCenter (SID_TABLE_VERT_CENTER, *pBindings,*this), + maVertBottom (SID_TABLE_VERT_BOTTOM,*pBindings,*this), + maBulletOnOff (FN_NUM_BULLET_ON, *pBindings,*this), + maNumberOnOff (FN_NUM_NUMBERING_ON, *pBindings,*this), + maBackColorControl (SID_BACKGROUND_COLOR, *pBindings,*this), + m_aMetricCtl (SID_ATTR_METRIC, *pBindings,*this), + maBulletNumRuleIndex (FN_BUL_NUM_RULE_INDEX, *pBindings,*this), + maNumNumRuleIndex (FN_NUM_NUM_RULE_INDEX, *pBindings,*this), + maContext(), + mpBindings(pBindings), + maLineSpacePopup(this, ::boost::bind(&ParaPropertyPanel::CreateLineSpacingControl, this, _1)), + maBulletsPopup(this, ::boost::bind(&ParaPropertyPanel::CreateBulletsPopupControl, this, _1)), + maNumberingPopup(this, ::boost::bind(&ParaPropertyPanel::CreateNumberingPopupControl, this, _1)), + maBGColorPopup(this, ::boost::bind(&ParaPropertyPanel::CreateBGColorPopupControl, this, _1)), + mxSidebar(rxSidebar) +{ + initial(); + FreeResource(); +} + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/paragraph/ParaPropertyPanel.hrc b/svx/source/sidebar/paragraph/ParaPropertyPanel.hrc new file mode 100755 index 000000000000..168df5f5517c --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaPropertyPanel.hrc @@ -0,0 +1,378 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/dialogs.hrc" + +#define BT_SUBSTLEFT 1 +#define BT_SUBSTCENTER 2 +#define BT_SUBSTRIGHT 3 +#define BT_SUBSTJUSTIFY 4 +#define BT_BTX_LINESP 1 +#define BT_TBX_INDENT_INC 1 +#define BT_TBX_INDENT_DEC 2 +#define BT_TBX_UL_INC 1 +#define BT_TBX_UL_DEC 2 +#define ID_HANGING_INDENT 3 +#define BT_TBX_INDENT_PROMOTE 1 +#define BT_TBX_INDENT_DEMOTE 2 +#define SD_HANGING_INDENT 3 +#define MF_BEFORE_INDENT 2 +#define MF_AFTER_INDENT 4 +#define MF_FL_INDENT 6 +#define TBX_HORIZONTALALIGNMENT 5 +#define IMG_LEFT_PARA 7 +#define IMG_CENTER_PARA 8 +#define IMG_RIGHT_PARA 9 +#define IMG_JUSTIFY_PARA 10 +#define IMG_INDENT_INC 11 +#define IMG_INDENT_DEC 12 +#define IMG_PARA_INC 13 +#define IMG_PARA_DEC 14 +#define IMG_INDENT_HANG 15 +#define FT_INDENT 16 +#define TBX_INDENT_INC_DEC 17 +#define FI_SPACE1 18 +#define FI_SPACE2 19 +#define FI_INDENT1 20 +#define FI_INDENT2 21 +#define FI_INDENT3 22 +#define IMG_SPACE3 23 +#define TBX_LINESP 25 +#define IMG_SPACE1 26 +#define IMG_INDENT1 27 +#define IMG_INDENT2 28 +#define IMG_SPACE2 29 +#define IMG_INDENT3 30 +#define FT_SPACING 31 +#define TBX_UL_INC_DEC 33 +#define MF_ABOVE_PARASPACING 32 +#define MF_BELOW_PARASPACING 34 +#define TBX_INDENT_PRO_DEMOTE 35 +#define TBX_VERT_ALIGN 40 +#define IL_VERT_ALIGN 41 +#define ILH_VERT_ALIGN 42 +#define TBX_NUM_BULLET 44 +#define IL_NUM_BULLET 45 +#define ILH_NUM_BULLET 46 +#define FT_BACK_COLOR 47 +#define TBX_BACK_COLOR 48 +#define TBI_BACK_COLOR 49 +#define IMG_BACK_COLOR 50 +#define IMG_BACK_COLOR_H 51 +#define IL_NUM_BULLET_RTL 52 //sym2_7380 +#define TBI_VERT_ALIGN_TOP 60 +#define TBI_VERT_ALIGN_CENTER 61 +#define TBI_VERT_ALIGN_BOT 62 +#define TBI_NUMBERING 63 +#define TBI_BULLET 64 +#define TBI_HOR_ALIGN_LEFT 65 +#define TBI_HOR_ALIGN_CENTER 66 +#define TBI_HOR_ALIGN_RIGHT 67 +#define TBI_HOR_ALIGN_JUSTIFY 68 +#define TBI_INDENT_INC 69 +#define TBI_INDENT_DEC 70 +#define TBI_UL_INC 71 +#define TBI_UL_DEC 72 +#define IMG_INDENT_INC_BD 73 +#define IMG_INDENT_DEC_BD 74 + +//for vertical alignment +#define IID_VERT_TOP 1 +#define IID_VERT_CENTER 2 +#define IID_VERT_BOTTOM 3 + +//for numbering and bullett +#define IID_BULLET 1 +#define IID_NUMBER 2 +//============================== popup bullet and numbering & back color ========================= +#define VS_VALUES 1 +#define IL_BULLET_BITMAPS 2 +#define CB_BULLET_MORE 4 +#define BMP_BULLET_MORE 5 +#define BMP_BULLET_MORE_H 6 +#define IMG_SEPERATOR_BULLET 7 + +#define VS_NUMBERING 10 +#define CB_NUMBERING_MORE 12 +#define BMP_NUMERING_MORE 13 +#define BMP_NUMERING_MORE_H 14 +#define IMG_SEPERATOR_NUMBERING 15 +#define VS_FONT_COLOR 1 +#define STR_NOFILL 2 + +//============================== line space popup page ============================== + +#define LB_LINE_SPACING 1 +#define ED_SBINDE_LINEDISTPERCENT 2 +#define ED_SBINDE_LINEDISTPOINT 3 + +#define FT_CUSTOM 14 +#define FT_LINE_SPACING 15 +#define FT_OF 16 +#define IMG_SPACING1 18 +#define IMG_SPACING115 19 +#define IMG_SPACING15 20 +#define IMG_SPACING2 21 +#define IMG_SPACINGLCUSTOM 22 +#define IMG_SEL_SPACING1 23 +#define IMG_SEL_SPACING115 24 +#define IMG_SEL_SPACING15 25 +#define IMG_SEL_SPACING2 26 +#define IMG_LPCUSTOMNOBORDER 27 +#define FI_CUSTOM_NOBORDER_LSPACE 28 +#define LINE_SPACING 29 +#define STR_SPACING1 30 +#define STR_SPACING115 31 +#define STR_SPACING15 32 +#define STR_SPACING2 33 +#define IMG_CUSTOM 34 +#define IMG_CUSTOM_GRAY 35 +#define STR_LCVALUE 36 +#define STR_LS_SINGLE 37 +#define STR_LS_115 38 +#define STR_LS_15 39 +#define STR_LS_DOUBLE 40 +#define STR_LSPACING 41 +#define STR_LS_OF 42 + +//============================== Help ID ============================== +#define HID_TBX_HORIZONTALALIGNMENT "HID_TBX_HORIZONTALALIGNMENT" +#define HID_TBI_HOR_ALIGN_LEFT "HID_TBI_HOR_ALIGN_LEFT" +#define HID_TBI_HOR_ALIGN_CENTER "HID_TBI_HOR_ALIGN_CENTER" +#define HID_TBI_HOR_ALIGN_RIGHT "HID_TBI_HOR_ALIGN_RIGHT" +#define HID_TBI_HOR_ALIGN_JUSTIFY "HID_TBI_HOR_ALIGN_JUSTIFY" + +#define HID_TBX_VERT_ALIGN "HID_TBX_VERT_ALIGN" +#define HID_TBI_VERT_ALIGN_TOP "HID_TBI_VERT_ALIGN_TOP" +#define HID_TBI_VERT_ALIGN_CENTER "HID_TBI_VERT_ALIGN_CENTER" +#define HID_TBI_VERT_ALIGN_BOT "HID_TBI_VERT_ALIGN_BOT" + +#define HID_TBX_INDENT "HID_TBX_INDENT" +#define HID_TBI_INDENT "HID_TBI_INDENT" +//#define HID_TBX_LINESP 705263129 +//#define HID_TBI_LINESP 705262617 +#define HID_TBX_GRSPACE "HID_TBX_GRSPACE" +#define HID_TBI_GRSPACE "HID_TBI_GRSPACE" +#define HID_TBX_BACK_COLOR "HID_TBX_BACK_COLOR" +#define HID_TBI_BACK_COLOR "HID_TBI_BACK_COLOR" + +//#define HID_TBX_INDENT_INC_DEC 705263121 +//#define HID_TBI_INDENT_DEC 705262662 +//#define HID_TBI_INDENT_INC 705262661 +//#define HID_TBX_UL_INC_DEC 705263137 +//#define HID_TBI_UL_INC 705262663 +//#define HID_TBI_UL_DEC 705262664 + +//#define HID_TBX_NUM_BULLET 705263148 +//#define HID_TBI_NUMBERING 705262655 +//#define HID_TBI_BULLET 705262656 + +#define HID_POPUP_BULLET_CB_BULLET_MORE "HID_POPUP_BULLET_CB_BULLET_MORE" +#define HID_POPUP_BULLET_VS_VALUES "HID_POPUP_BULLET_VS_VALUES" +#define HID_POPUP_NUM_CB_NUMBERING_MORE "HID_POPUP_NUM_CB_NUMBERING_MORE" +#define HID_POPUP_NUM_VS_NUMBERING "HID_POPUP_NUM_VS_NUMBERING" + +#define HID_POPUP_INDENT_ED_INDENT_LEFTINDENT "HID_POPUP_INDENT_ED_INDENT_LEFTINDENT" +#define HID_POPUP_INDENT_ED_INDENT_RIGHTINDENT "HID_POPUP_INDENT_ED_INDENT_RIGHTINDENT" +#define HID_POPUP_INDENT_ED_INDENT_FLINDENT "HID_POPUP_INDENT_ED_INDENT_FLINDENT" +#define HID_POPUP_INDENT_TBX_INDENT_NONE "HID_POPUP_INDENT_TBX_INDENT_NONE" +#define HID_POPUP_INDENT_TBI_INDENT_NONE "HID_POPUP_INDENT_TBI_INDENT_NONE" +#define HID_POPUP_INDENT_TBX_INDENT_BEFORE1 "HID_POPUP_INDENT_TBX_INDENT_BEFORE1" +#define HID_POPUP_INDENT_TBI_INDENT_BEFORE1 "HID_POPUP_INDENT_TBI_INDENT_BEFORE1" +#define HID_POPUP_INDENT_TBX_INDENT_BEFORE2 "HID_POPUP_INDENT_TBX_INDENT_BEFORE2" +#define HID_POPUP_INDENT_TBI_INDENT_BEFORE2 "HID_POPUP_INDENT_TBI_INDENT_BEFORE2" +#define HID_POPUP_INDENT_TBX_INDENT_FLINE "HID_POPUP_INDENT_TBX_INDENT_FLINE" +#define HID_POPUP_INDENT_TBI_INDENT_FLINE "HID_POPUP_INDENT_TBI_INDENT_FLINE" +#define HID_POPUP_INDENT_TBX_INDENT_HANGING "HID_POPUP_INDENT_TBX_INDENT_HANGING" +#define HID_POPUP_INDENT_TBI_INDENT_HANGING "HID_POPUP_INDENT_TBI_INDENT_HANGING" +#define HID_POPUP_INDENT_TBX_INDENT_LCUSTOM "HID_POPUP_INDENT_TBX_INDENT_LCUSTOM" +#define HID_POPUP_INDENT_TBI_INDENT_LCUSTOM "HID_POPUP_INDENT_TBI_INDENT_LCUSTOM" + +#define HID_POPUP_LS_LB_LINE_SPACING "HID_POPUP_LS_LB_LINE_SPACING" +#define HID_POPUP_LS_ED_SBINDE_LINEDISTPERCENT "HID_POPUP_LS_ED_SBINDE_LINEDISTPERCENT" +#define HID_POPUP_LS_ED_SBINDE_LINEDISTPOINT "HID_POPUP_LS_ED_SBINDE_LINEDISTPOINT" +#define HID_POPUP_LS_TBX_LINESP_1 "HID_POPUP_LS_TBX_LINESP_1" +#define HID_POPUP_LS_TBI_LINESP_1 "HID_POPUP_LS_TBI_LINESP_1" +#define HID_POPUP_LS_TBX_LINESP_15 "HID_POPUP_LS_TBX_LINESP_15" +#define HID_POPUP_LS_TBI_LINESP_15 "HID_POPUP_LS_TBI_LINESP_15" +#define HID_POPUP_LS_TBX_LINESP_2 "HID_POPUP_LS_TBX_LINESP_2" +#define HID_POPUP_LS_TBI_LINESP_2 "HID_POPUP_LS_TBI_LINESP_2" +#define HID_POPUP_LS_TBX_LINESP_115 "HID_POPUP_LS_TBX_LINESP_115" +#define HID_POPUP_LS_TBI_LINESP_115 "HID_POPUP_LS_TBI_LINESP_115" +#define HID_POPUP_LS_TBX_LINESP_LCUSTOM "HID_POPUP_LS_TBX_LINESP_LCUSTOM" +#define HID_POPUP_LS_TBI_LINESP_LCUSTOM "HID_POPUP_LS_TBI_LINESP_LCUSTOM" + +#define HID_POPUP_PS_ED_SBINDE_TOPDIST "HID_POPUP_PS_ED_SBINDE_TOPDIST" +#define HID_POPUP_PS_ED_SBINDE_BOTTOMDIST "HID_POPUP_PS_ED_SBINDE_BOTTOMDIST" +#define HID_POPUP_PS_TBX_NORMAL "HID_POPUP_PS_TBX_NORMAL" +#define HID_POPUP_PS_TBI_NORMAL "HID_POPUP_PS_TBI_NORMAL" +#define HID_POPUP_PS_TBX_NARROW "HID_POPUP_PS_TBX_NARROW" +#define HID_POPUP_PS_TBI_NARROW "HID_POPUP_PS_TBI_NARROW" +#define HID_POPUP_PS_TBX_WIDE "HID_POPUP_PS_TBX_WIDE" +#define HID_POPUP_PS_TBI_WIDE "HID_POPUP_PS_TBI_WIDE" +#define HID_POPUP_PS_TBX_LASTCUSTOM "HID_POPUP_PS_TBX_LASTCUSTOM" +#define HID_POPUP_PS_TBI_LASTCUSTOM "HID_POPUP_PS_TBI_LASTCUSTOM" + +//============================== Property ============================== +#define _FIXED_TEXT_HEIGHT 9 +#define _FIXED_TEXT_WIDTH 40 +#define CONTROL_HEIGHT 15 +#define CONTROL_WIDTH 45 +#define ALIGNMENT_TBX_HEIGHT 17 +#define ALIGNMENT_TBX_WIDTH 13 +#define LISTBOX_HEIGHT 80 +#define IMAGE_SIZE 16 +#define POPUP_TOOLBOX_SIZE 32 +#define TOOLBOX_HEIGHT 22 +#define TOOLBOX_WIDTH 23 +#define TEXT_SPACING_VERTICAL 2 +#define BUTTON_SPACING 18 +//#define TOOLBOX_ITEM_HEIGHT 17 +#define VS_SPACING_WIDTH 78 + +//==============================Section page position============================== + +#define TBX_HORI_ALIGN_X SECTIONPAGE_MARGIN_HORIZONTAL + TBX_OUT_BORDER_OFFSET_X/2 +#define TBX_HORI_ALIGN_Y SECTIONPAGE_MARGIN_VERTICAL_TOP + +#define TBX_VERT_ALIGN_X TBX_HORI_ALIGN_X + TBX_OUT_BORDER_OFFSET_X*2 + TOOLBOX_ITEM_WIDTH * 4 + CONTROL_SPACING_HORIZONTAL +#define TBX_VERT_ALIGN_Y TBX_HORI_ALIGN_Y + +#define TBX_NUM_BULLET_X TBX_HORI_ALIGN_X +#define TBX_NUM_BULLET_Y TBX_HORI_ALIGN_Y + TOOLBOX_ITEM_HEIGHT + CONTROL_SPACING_VERTICAL - 1 + +#define TBX_BACK_COLOR_X TBX_HORI_ALIGN_X + TBX_OUT_BORDER_OFFSET_X*2 + TOOLBOX_ITEM_WIDTH * 3 + CONTROL_SPACING_HORIZONTAL +#define TBX_BACK_COLOR_Y TBX_NUM_BULLET_Y + +#define FT_PARA_SPACE_X SECTIONPAGE_MARGIN_HORIZONTAL +#define FT_PARA_SPACE_Y TBX_NUM_BULLET_Y + TOOLBOX_ITEM_HEIGHT + CONTROL_SPACING_VERTICAL - 3 +#define FT_PARA_SPACE_Y2 TBX_HORI_ALIGN_Y + TOOLBOX_ITEM_HEIGHT + CONTROL_SPACING_VERTICAL - 2 + +#define TBX_PARA_SPACE_INC_DEC_X TBX_HORI_ALIGN_X +#define TBX_PARA_SPACE_INC_DEC_Y FT_PARA_SPACE_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL +#define TBX_PARA_SPACE_INC_DEC_Y2 FT_PARA_SPACE_Y2 + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define FT_PARA_INDENT_X TBX_VERT_ALIGN_X +#define FT_PARA_INDENT_Y FT_PARA_SPACE_Y +#define FT_PARA_INDENT_Y2 FT_PARA_SPACE_Y2 + +#define TBX_PARA_INDENT_INC_DEC_X TBX_VERT_ALIGN_X +#define TBX_PARA_INDENT_INC_DEC_Y TBX_PARA_SPACE_INC_DEC_Y +#define TBX_PARA_INDENT_INC_DEC_Y2 TBX_PARA_SPACE_INC_DEC_Y2 + +#define MBX_TOP_DIST_X FT_PARA_SPACE_X + TOOLBOX_ITEM_WIDTH +#define MBX_TOP_DIST_Y TBX_PARA_SPACE_INC_DEC_Y + TOOLBOX_ITEM_WIDTH + CONTROL_SPACING_VERTICAL + 4*TBX_OUT_BORDER_OFFSET_Y - 1 +#define MBX_TOP_DIST_Y2 TBX_PARA_SPACE_INC_DEC_Y2 + TOOLBOX_ITEM_WIDTH + CONTROL_SPACING_VERTICAL + 4*TBX_OUT_BORDER_OFFSET_Y - 1 +#define MBX_BOT_DIST_X MBX_TOP_DIST_X +#define MBX_BOT_DIST_Y MBX_TOP_DIST_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define MBX_BOT_DIST_Y2 MBX_TOP_DIST_Y2 + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + +#define IMG_SPACE_X FT_PARA_SPACE_X - 3 +#define IMG_SPACE1_Y MBX_TOP_DIST_Y - 1 +#define IMG_SPACE2_Y MBX_BOT_DIST_Y - 1 +#define IMG_SPACE1_Y2 MBX_TOP_DIST_Y2 - 1 +#define IMG_SPACE2_Y2 MBX_BOT_DIST_Y2 - 1 + +#define MBX_LEFT_DIST_X FT_PARA_INDENT_X + TOOLBOX_ITEM_WIDTH +#define MBX_LEFT_DIST_Y MBX_TOP_DIST_Y +#define MBX_LEFT_DIST_Y2 MBX_TOP_DIST_Y2 +#define MBX_RIGHT_DIST_X MBX_LEFT_DIST_X +#define MBX_RIGHT_DIST_Y MBX_BOT_DIST_Y +#define MBX_RIGHT_DIST_Y2 MBX_BOT_DIST_Y2 +#define MBX_FLINE_DIST_X MBX_LEFT_DIST_X +#define MBX_FLINE_DIST_Y MBX_RIGHT_DIST_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define MBX_FLINE_DIST_Y2 MBX_RIGHT_DIST_Y2 + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + +#define IMG_INDENT_X FT_PARA_INDENT_X - 4 +#define IMG_INDENT1_Y MBX_LEFT_DIST_Y - 1 +#define IMG_INDENT2_Y MBX_RIGHT_DIST_Y - 1 +#define IMG_INDENT3_Y MBX_FLINE_DIST_Y - 1 +#define IMG_INDENT1_Y2 MBX_LEFT_DIST_Y2 - 1 +#define IMG_INDENT2_Y2 MBX_RIGHT_DIST_Y2- 1 +#define IMG_INDENT3_Y2 MBX_FLINE_DIST_Y2- 1 + +#define TBX_LINE_SPACE_X TBX_HORI_ALIGN_X +#define TBX_LINE_SPACE_Y MBX_FLINE_DIST_Y +#define TBX_LINE_SPACE_Y2 MBX_FLINE_DIST_Y2 + +#define PARA_SECTIONPAGE_HEIGHT MBX_FLINE_DIST_Y + TOOLBOX_ITEM_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT +#define PARA_SECTIONPAGE_HEIGHT_2 MBX_FLINE_DIST_Y2 + TOOLBOX_ITEM_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT + +#define LINE_X_WHITE FT_PARA_INDENT_X - 5 +#define LINE_TOP_Y FT_PARA_INDENT_Y + 1 +#define LINE_TOP_Y2 FT_PARA_INDENT_Y2 + 1 +#define LINE_BOT_Y TBX_LINE_SPACE_Y + TOOLBOX_ITEM_HEIGHT - 1 +#define LINE_BOT_Y2 TBX_LINE_SPACE_Y2 + TOOLBOX_ITEM_HEIGHT - 1 + +//==============================numbering and bullet============================== +#define NB_MARGIN_VERTICAL POPUPPANEL_MARGIN_VERTICAL +#define NB_MARGIN_HORIZONTAL POPUPPANEL_MARGIN_HORIZONTAL +#define SPACING_VERTICAL_S3 8 +//#define SPACING_VERTICAL_S1 12 +#define POPUPPANEL_MARGIN_NB 4 + +#define NB_IMAGE_WIDTH 25 +#define NB_IMAGE_HEIGHT 25 +#define NB_IMAGE_SPACING 5 + +#define BULLET_IMAGE_WIDTH NB_IMAGE_WIDTH +#define BULLET_IMAGE_HEIGHT NB_IMAGE_HEIGHT +#define BULLET_IMAGE_SPACING NB_IMAGE_SPACING + +#define NUM_IMAGE_WIDTH 25 +#define NUM_IMAGE_HEIGHT 35 +#define NUM_IMAGE_SPACING NB_IMAGE_SPACING + +#define FIXED_TEXT_HEIGHT 13 +#define FIXED_TEXT_WIDTH 80 +#define CUST_MORE_BUTTON_HEIGHT 15 + +#define VS_WIDTH_BULLET BULLET_IMAGE_WIDTH*3+BULLET_IMAGE_SPACING*2 +#define VS_HEIGHT_BULLET BULLET_IMAGE_HEIGHT*4+BULLET_IMAGE_SPACING*3 +#define VS_WIDTH_NUM NUM_IMAGE_WIDTH*3+NB_IMAGE_SPACING*2 +#define VS_HEIGHT_NUM NUM_IMAGE_HEIGHT*3+NB_IMAGE_SPACING*2 + +#define POPUP_WIDTH_BULLET VS_WIDTH_BULLET + POPUPPANEL_MARGIN_NB * 2 +#define POPUP_HEIGHT_BULLET VS_HEIGHT_BULLET + POPUPPANEL_MARGIN_NB * 3 + CUST_MORE_BUTTON_HEIGHT +#define POPUP_WIDTH_NUM VS_WIDTH_NUM + POPUPPANEL_MARGIN_NB * 2 +#define POPUP_HEIGHT_NUM VS_HEIGHT_NUM + POPUPPANEL_MARGIN_NB * 3 + CUST_MORE_BUTTON_HEIGHT + +#define CUST_MORE_BUTTON_X 1 +#define CUST_MORE_BUTTON_IMG_OFF_X 2 //NB_MARGIN_HORIZONTAL - CUST_MORE_BUTTON_X + OFFSET_X + +//==============================Line Spacing popup page======================= + +#define POPUP_PAGE_HEIGHT POP_BORDER_Y + BD_HEIGHT + POPUPPANEL_MARGIN_NB + OFFSET_Y +#define POP_FT_CUSTOM_X POPUPPANEL_MARGIN_NB + OFFSET_X +#define POP_FT_CUSTOM_Y POPUPPANEL_MARGIN_SMALL * 2 + 17 * 5 +#define POP_BORDER_X POPUPPANEL_MARGIN_NB + OFFSET_X + 1 +#define POP_BORDER_Y POPUPPANEL_MARGIN_SMALL * 3 + 17 * 5 + TEXT_HEIGHT +#define BD_WIDTH VS_SPACING_WIDTH - 6 +#define BD_HEIGHT TEXT_HEIGHT*2 + CONTROL_HEIGHT*2 + CONTROL_SPACING_VERTICAL*3 + TEXT_CONTROL_SPACING_VERTICAL*2 - 4 + +#define FT_1_X POP_BORDER_X + POPUPPANEL_MARGIN_LARGE +#define FT_1_Y POP_BORDER_Y + CONTROL_SPACING_VERTICAL +#define EDIT_1_X FT_1_X +#define EDIT_1_Y FT_1_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL +#define FT_2_X FT_1_X +#define FT_2_Y EDIT_1_Y + CONTROL_HEIGHT + CONTROL_SPACING_VERTICAL - 3 +#define EDIT_2_X FT_1_X +#define EDIT_2_Y FT_2_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL
\ No newline at end of file diff --git a/svx/source/sidebar/paragraph/ParaPropertyPanel.hxx b/svx/source/sidebar/paragraph/ParaPropertyPanel.hxx new file mode 100755 index 000000000000..f8f28b2d4076 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaPropertyPanel.hxx @@ -0,0 +1,290 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_PARA_PROPERTY_PANEL_HXX +#define SVX_SIDEBAR_PARA_PROPERTY_PANEL_HXX + +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/IContextChangeReceiver.hxx> +#include <editeng/lspcitem.hxx> +#include <svtools/ctrlbox.hxx> +#include <svx/tbxcolorupdate.hxx> +#include <svx/relfld.hxx> +#include <editeng/svxenum.hxx> +#include <editeng/fhgtitem.hxx> + +#include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/ui/XSidebar.hpp> + +#include <boost/scoped_ptr.hpp> + +#include <svx/sidebar/ColorPopup.hxx> +#include <vcl/vclenum.hxx> +#include <vcl/fixed.hxx> +#include <svl/poolitem.hxx> +#include <tools/fldunit.hxx> + +#include "ParaBulletsPopup.hxx" +#include "ParaNumberingPopup.hxx" +#include "ParaLineSpacingPopup.hxx" + +class FloatingWindow; +class ToolBox; + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace svx { namespace sidebar { + +class PopupControl; +class PopupContainer; + +class ParaPropertyPanel + : public Control, + public ::sfx2::sidebar::IContextChangeReceiver, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: + static ParaPropertyPanel* Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + + virtual void DataChanged (const DataChangedEvent& rEvent); + SfxBindings* GetBindings(); + + virtual void HandleContextChange ( + const ::sfx2::sidebar::EnumContext aContext); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + void ShowMenu (void); + sal_uInt16 GetBulletTypeIndex(){ return mnBulletTypeIndex; } + void SetBulletTypeIndex(sal_uInt16 nInd){ mnBulletTypeIndex = nInd; } + sal_uInt16 GetNumTypeIndex(){ return mnNumTypeIndex; } + void SetNumTypeIndex(sal_uInt16 nInd){ mnNumTypeIndex = nInd; } + FieldUnit GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState ); + + void EndSpacingPopupMode (void); + void EndBulletsPopupMode (void); + void EndNumberingPopupMode (void); + +private: + /********************************************************** + ** + ** UI controls + ** + ***********************************************************/ + //Alignment + ::boost::scoped_ptr<Window> maAlignToolBoxBackground; + ::boost::scoped_ptr<ToolBox> maAlignToolBox; + ::boost::scoped_ptr<Window> maTBxVertAlignBackground; + ::boost::scoped_ptr<ToolBox> maTBxVertAlign; + //NumBullet&Backcolor + ::boost::scoped_ptr<Window> maTBxNumBulletBackground; + ::boost::scoped_ptr<ToolBox> maTBxNumBullet; + ::boost::scoped_ptr<Window> maTBxBackColorBackground; + ::boost::scoped_ptr<ToolBox> maTBxBackColor; + //Paragraph spacing + ::boost::scoped_ptr<FixedText> maFTUL; + ::boost::scoped_ptr<Window> maTbxUL_IncDecBackground; + ::boost::scoped_ptr<ToolBox> maTbxUL_IncDec; + ::boost::scoped_ptr<SvxRelativeField> maTopDist; + ::boost::scoped_ptr<SvxRelativeField> maBottomDist; + //Line spacing + ::boost::scoped_ptr<Window> maLineSPTbxBackground; + ::boost::scoped_ptr<ToolBox> maLineSPTbx; + //Indent + ::boost::scoped_ptr<FixedText> maFTIndent; + ::boost::scoped_ptr<Window> maTbxIndent_IncDecBackground; + ::boost::scoped_ptr<ToolBox> maTbxIndent_IncDec; + ::boost::scoped_ptr<Window> maTbxProDemoteBackground; + ::boost::scoped_ptr<ToolBox> maTbxProDemote; + ::boost::scoped_ptr<SvxRelativeField> maLeftIndent; + ::boost::scoped_ptr<SvxRelativeField> maRightIndent; + ::boost::scoped_ptr<SvxRelativeField> maFLineIndent; + ::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > mpColorUpdater; + + /********************************************************** + ** + ** Resources + ** + ***********************************************************/ + FixedImage maFISpace1; + FixedImage maFISpace2; + FixedImage maFIndent1; + FixedImage maFIndent2; + FixedImage maFIndent3; + + Image maSpace1; + Image maSpace2; + Image maSpace3; + Image maIndent1; + Image maIndent2; + Image maIndent3; + + Image maLeftPara; + Image maCentPara; + Image maRightPara; + Image maJusPara; + + Image maIndInc; + Image maIndDec; + Image maIndInc_BD; + Image maIndDec_BD; + Image maIndHang; + Image maParInc; + Image maParDec; + + ImageList maVertImageList; + ImageList maVertImageListH; + ImageList maNumBImageList; + ImageList maNumBImageListH; + ImageList maNumBImageListRTL; + Image maImgBackColorHigh; + Image maImgBackColor; + + /**************************************************************** + ** + ** Data Member + ** + *****************************************************************/ + long maTxtLeft; + //Line spacing + SvxLineSpacingItem *mpLnSPItem; + SfxItemState meLnSpState; + bool mbOutLineLeft; + bool mbOutLineRight; + long maUpper; + long maLower; + + sal_uInt16 mnBulletTypeIndex; + sal_uInt16 mnNumTypeIndex; + Color maColor; + bool mbColorAvailable; + FieldUnit m_eMetricUnit; + FieldUnit m_last_eMetricUnit; + SfxMapUnit m_eLRSpaceUnit; + SfxMapUnit m_eULSpaceUnit; + /**************************************************************** + ** + ** Controll Items + ** + *****************************************************************/ + + ::sfx2::sidebar::ControllerItem maLeftAlignControl; + ::sfx2::sidebar::ControllerItem maCenterAlignControl; + ::sfx2::sidebar::ControllerItem maRightAlignControl; + ::sfx2::sidebar::ControllerItem maJustifyAlignControl; + ::sfx2::sidebar::ControllerItem maLRSpaceControl; + ::sfx2::sidebar::ControllerItem maLNSpaceControl; + ::sfx2::sidebar::ControllerItem maULSpaceControl; + ::sfx2::sidebar::ControllerItem maOutLineLeftControl; + ::sfx2::sidebar::ControllerItem maOutLineRightControl; + ::sfx2::sidebar::ControllerItem maDecIndentControl; + ::sfx2::sidebar::ControllerItem maIncIndentControl; + ::sfx2::sidebar::ControllerItem maVertTop; + ::sfx2::sidebar::ControllerItem maVertCenter; + ::sfx2::sidebar::ControllerItem maVertBottom; + ::sfx2::sidebar::ControllerItem maBulletOnOff; + ::sfx2::sidebar::ControllerItem maNumberOnOff; + ::sfx2::sidebar::ControllerItem maBackColorControl; + ::sfx2::sidebar::ControllerItem m_aMetricCtl; + ::sfx2::sidebar::ControllerItem maBulletNumRuleIndex; + ::sfx2::sidebar::ControllerItem maNumNumRuleIndex; + + ::sfx2::sidebar::EnumContext maContext; + SfxBindings* mpBindings; + ParaLineSpacingPopup maLineSpacePopup; + ParaBulletsPopup maBulletsPopup; + ParaNumberingPopup maNumberingPopup; + ColorPopup maBGColorPopup; + cssu::Reference<css::ui::XSidebar> mxSidebar; + + + ParaPropertyPanel ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + virtual ~ParaPropertyPanel (void); + + void InitImageList(::boost::scoped_ptr<ToolBox>& rTbx, ImageList& rImglst, ImageList& rImgHlst); + + DECL_LINK(AlignStyleModifyHdl_Impl, ToolBox*); + DECL_LINK(VertTbxSelectHandler, ToolBox*); + DECL_LINK(NumBTbxSelectHandler, ToolBox*); + DECL_LINK(ModifyIndentHdl_Impl, SvxRelativeField*); + DECL_LINK(ClickIndent_IncDec_Hdl_Impl, ToolBox*); + DECL_LINK(ClickProDemote_Hdl_Impl, ToolBox*); + DECL_LINK(ULSpaceHdl_Impl, SvxRelativeField*); + DECL_LINK(ClickUL_IncDec_Hdl_Impl, ToolBox*); + DECL_LINK(ImplPopupModeEndHdl, FloatingWindow* ); + + void VertStateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState); + void ParaBKGStateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState); + void StateChangedAlignmentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + void StateChangedIndentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + void StateChangedLnSPImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + void StateChangedULImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + void StateChangeOutLineImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + void StateChangeIncDecImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + // Add toggle state for numbering and bullet icons + void StateChangeBulletNumImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + //Modified for Numbering&Bullets Dialog UX Enh + //Handing the transferred the num rule index data of the current selection + void StateChangeBulletNumRuleImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + + void initial(); + void ReSize(bool bSize); + + + PopupControl* CreateLineSpacingControl (PopupContainer* pParent); + PopupControl* CreateBulletsPopupControl (PopupContainer* pParent); + PopupControl* CreateNumberingPopupControl (PopupContainer* pParent); + PopupControl* CreateBGColorPopupControl (PopupContainer* pParent); + DECL_LINK(ClickLineSPDropDownHdl_Impl, ToolBox*); + DECL_LINK(NumBTbxDDHandler, ToolBox*); + DECL_LINK(ToolBoxBackColorDDHandler, ToolBox *); + + void SetupIcons (void); + void InitToolBoxAlign(); + void InitToolBoxVertAlign(); + void InitToolBoxIndent(); + void InitToolBoxBGColor(); + void InitToolBoxBulletsNumbering(); + void InitToolBoxSpacing(); + void InitToolBoxLineSpacing(); + + Color GetBGColor (void) const; + void SetBGColor (const String& rsColorName, const Color aColor); +}; + +} } // end of namespace ::svx::sidebar + +#endif + diff --git a/svx/source/sidebar/paragraph/ParaPropertyPanel.src b/svx/source/sidebar/paragraph/ParaPropertyPanel.src new file mode 100755 index 000000000000..926e3a6f5fa3 --- /dev/null +++ b/svx/source/sidebar/paragraph/ParaPropertyPanel.src @@ -0,0 +1,982 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "ParaPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include "helpid.hrc" + +#define MASKCOLOR MaskColor = Color { Red = 0xFFFF ; Green = 0x0000 ; Blue = 0xFFFF ; }; + +#define SVX_PROPERTYPANEL_PARA_VERT_IDLIST \ + IdList = \ + { \ + IID_VERT_TOP ; \ + IID_VERT_CENTER ; \ + IID_VERT_BOTTOM ; \ + }; \ + IdCount = { 3 ; }; + +#define SVX_PROPERTYPANEL_PARA_NUMBULLET_IDLIST \ + IdList = \ + { \ + IID_BULLET ; \ + IID_NUMBER ; \ + }; \ + IdCount = { 2 ; }; + +//add by wj for sym2_7380 +#define SVX_PROPERTYPANEL_PARA_NUMBULLET_IDLIST_RTL \ + IdList = \ + { \ + IID_BULLET ; \ + IID_NUMBER ; \ + }; \ + IdCount = { 2 ; }; + +Control RID_SIDEBAR_PARA_PANEL +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, PARA_SECTIONPAGE_HEIGHT ); + HelpID = HID_PROPERTYPANEL_PARA_SECTION ; + Text = "Paragraph"; + + ToolBox TBX_HORIZONTALALIGNMENT + { + Pos = MAP_APPFONT ( TBX_HORI_ALIGN_X , TBX_HORI_ALIGN_Y ); + Size = MAP_APPFONT ( ALIGNMENT_TBX_WIDTH*4 ,ALIGNMENT_TBX_HEIGHT); + SVLook = TRUE ; + Border = FALSE ; + HelpID = HID_PPROPERTYPANEL_PARA_TBX_HALIGN; + Text = "Horizontal Alignment"; + ItemList = + { + ToolBoxItem + { + Identifier = BT_SUBSTLEFT ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_HALIGN_LEFT; + Text [ en-US ] = "Align Left" ; + ItemBitmap = Bitmap + { + File = "symphony/AlignTextLeft_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = BT_SUBSTCENTER ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_HALIGN_CENTER; + Text [ en-US ] = "Align Center" ; + ItemBitmap = Bitmap + { + File = "symphony/AlignTextCenter_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = BT_SUBSTRIGHT ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_HALIGN_RIGHT; + Text [ en-US ] = "Align Right" ; + ItemBitmap = Bitmap + { + File = "symphony/AlignTextRight_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = BT_SUBSTJUSTIFY ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_HALIGN_JUSTIFY; + Text [ en-US ] = "Align Justified" ; + ItemBitmap = Bitmap + { + File = "symphony/AlignTextJustified_16x16.png"; + }; + }; + }; + }; + ToolBox TBX_VERT_ALIGN + { + HelpID = HID_PPROPERTYPANEL_PARA_TBX_VALIGN; + SVLook = TRUE ; + Border = FALSE ; + Pos = MAP_APPFONT ( TBX_VERT_ALIGN_X, TBX_VERT_ALIGN_Y ) ; + Size = MAP_APPFONT ( TOOLBOX_ITEM_WIDTH * 3 , TOOLBOX_ITEM_HEIGHT) ; + TabStop = TRUE ; + Text = "Vertical Alignment"; + ItemList = + { + ToolBoxItem + { + Identifier = IID_VERT_TOP ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_VALIGN_TOP; + Text [ en-US ] = "Align Top" ; + }; + + ToolBoxItem + { + Identifier = IID_VERT_CENTER ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_VALIGN_CENTER; + Text [ en-US ] = "Align Center Vertically" ; + }; + + ToolBoxItem + { + Identifier = IID_VERT_BOTTOM ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_VALIGN_BOT; + Text [ en-US ] = "Align Bottom" ; + }; + }; + }; + + ToolBox TBX_NUM_BULLET + { + HelpID = HID_PPROPERTYPANEL_PARA_TBX_NUM_BULLET; + Border = FALSE ; + Pos = MAP_APPFONT ( TBX_NUM_BULLET_X , TBX_NUM_BULLET_Y ) ; + Size = MAP_APPFONT ( TOOLBOX_ITEM_DD_WIDTH * 2 , TOOLBOX_ITEM_HEIGHT) ; + TabStop = TRUE ; + Text = "Bullets and Numbering"; + ItemList = + { + ToolBoxItem + { + Identifier = IID_BULLET ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_BULLET ; + Text [ en-US ] = "Bullets" ; + DropDown = TRUE ; + }; + ToolBoxItem + { + Identifier = IID_NUMBER ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_NUM ; + Text [ en-US ] = "Numbering" ; + DropDown = TRUE ; + }; + }; + }; + ToolBox TBX_BACK_COLOR + { + SVLook = TRUE ; + Pos = MAP_APPFONT (TBX_BACK_COLOR_X, TBX_BACK_COLOR_Y) ; + Size = MAP_APPFONT (TOOLBOX_WIDTH,TOOLBOX_HEIGHT ) ; + TabStop = TRUE ; + HelpID = HID_PPROPERTYPANEL_PARA_TBX_BACK_COLOR; + Text = "Paragraph Background Color" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_BACK_COLOR ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_BACK_COLOR; + DropDown = TRUE ; + Text [ en-US ] = "Paragraph Background Color" ; + }; + }; + }; + FixedText FT_SPACING + { + Pos = MAP_APPFONT ( FT_PARA_SPACE_X, FT_PARA_SPACE_Y ); + Size = MAP_APPFONT ( FT_PARA_INDENT_X - 7 - FT_PARA_SPACE_X, _FIXED_TEXT_HEIGHT) ; + Text [ en-US ] = "~Spacing:"; + }; + ToolBox TBX_UL_INC_DEC + { + Pos = MAP_APPFONT ( TBX_PARA_SPACE_INC_DEC_X,TBX_PARA_SPACE_INC_DEC_Y ); + Size = MAP_APPFONT (ALIGNMENT_TBX_WIDTH*2,ALIGNMENT_TBX_HEIGHT); + SVLook = TRUE ; + Border = FALSE ; + HelpID = HID_PPROPERTYPANEL_PARA_TBX_INC_DEC ; + Text = "Spacing"; + ItemList = + { + ToolBoxItem + { + Identifier = BT_TBX_UL_INC ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_INC ; + Text [ en-US ] = "Increase Spacing" ; + ItemBitmap = Bitmap + { + File = "symphony/IncreaseSpace_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = BT_TBX_UL_DEC ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_DEC ; + Text [ en-US ] = "Decrease Spacing" ; + ItemBitmap = Bitmap + { + File = "symphony/DecreaseSpace_16x16.png"; + }; + }; + }; + }; + MetricField MF_ABOVE_PARASPACING + { + HelpID = HID_POPUP_PS_ED_SBINDE_TOPDIST ; + Border = TRUE; + Pos = MAP_APPFONT ( MBX_TOP_DIST_X, MBX_TOP_DIST_Y ); + Size = MAP_APPFONT ( CONTROL_WIDTH -10 ,MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Above Paragraph Spacing"; + TabStop = TRUE; + Repeat = TRUE; + Spin = TRUE; + Maximum = 999; + Unit = FUNIT_INCH; + Last = 999; + SpinSize = 1; + + }; + MetricField MF_BELOW_PARASPACING + { + Border = TRUE; + Pos = MAP_APPFONT ( MBX_BOT_DIST_X, MBX_BOT_DIST_Y ); + Size = MAP_APPFONT ( CONTROL_WIDTH -10,MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Below Paragraph Spacing"; + HelpID = HID_POPUP_PS_ED_SBINDE_BOTTOMDIST ; + Repeat = TRUE; + Spin = TRUE; + Maximum = 999; + Unit = FUNIT_INCH; + Last = 999; + SpinSize = 1; + }; + FixedText FT_INDENT + { + Pos = MAP_APPFONT ( FT_PARA_INDENT_X, FT_PARA_INDENT_Y ); + Size = MAP_APPFONT ( _FIXED_TEXT_WIDTH + 50, _FIXED_TEXT_HEIGHT) ; + Text [ en-US ] = "~Indent:"; + }; + ToolBox TBX_INDENT_INC_DEC + { + Pos = MAP_APPFONT ( TBX_PARA_INDENT_INC_DEC_X, TBX_PARA_INDENT_INC_DEC_Y ); + Size = MAP_APPFONT (ALIGNMENT_TBX_WIDTH*2,ALIGNMENT_TBX_HEIGHT); + SVLook = TRUE ; + Border = FALSE ; + HelpID = HID_PPROPERTYPANEL_PARA_TBX_INDENT_INC_DEC ; + Text = "Indent"; + ItemList = + { + ToolBoxItem + { + Identifier = BT_TBX_INDENT_INC ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_INDENT_INC ; + Text [ en-US ] = "Increase Indent" ; + ItemBitmap = Bitmap + { + File = "symphony/Indent_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = BT_TBX_INDENT_DEC ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_INDENT_DEC ; + Text [ en-US ] = "Decrease Indent" ; + ItemBitmap = Bitmap + { + File = "symphony/Outdent_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = ID_HANGING_INDENT ; + Text [ en-US ] = "Switch to Hanging Indent" ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_INDENT_HANG ; + ItemBitmap = Bitmap + { + File = "symphony/Indent_Hanging.png"; + }; + }; + }; + }; + ToolBox TBX_INDENT_PRO_DEMOTE + { + Pos = MAP_APPFONT ( TBX_PARA_INDENT_INC_DEC_X, TBX_PARA_INDENT_INC_DEC_Y ); + Size = MAP_APPFONT (ALIGNMENT_TBX_WIDTH*2,ALIGNMENT_TBX_HEIGHT); + SVLook = TRUE ; + Border = FALSE ; + HelpID = HID_PPROPERTYPANEL_PARA_TBX_INDENTP_INC_DEC ; + Text = "Indent"; + ItemList = + { + ToolBoxItem + { + Identifier = BT_TBX_INDENT_PROMOTE ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_INDENTP_INC ; + Text [ en-US ] = "Increase Indent" ; + ItemBitmap = Bitmap + { + File = "symphony/Indent_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = BT_TBX_INDENT_DEMOTE ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_INDENTP_DEC ; + Text [ en-US ] = "Decrease Indent" ; + ItemBitmap = Bitmap + { + File = "symphony/Outdent_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = SD_HANGING_INDENT ; + Text [ en-US ] = "Switch to Hanging Indent" ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_INDENTP_HANG ; + ItemBitmap = Bitmap + { + File = "symphony/Indent_Hanging.png"; + }; + }; + }; + }; + MetricField MF_BEFORE_INDENT + { + Border = TRUE ; + Pos = MAP_APPFONT ( MBX_LEFT_DIST_X, MBX_LEFT_DIST_Y ); + Size = MAP_APPFONT ( CONTROL_WIDTH - 10,MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Before Text Indent"; + HelpID = HID_POPUP_INDENT_ED_INDENT_LEFTINDENT ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 9999 ; + StrictFormat = TRUE ; + Unit = FUNIT_INCH; + Last = 9999 ; + SpinSize = 2 ; + }; + MetricField MF_AFTER_INDENT + { + Border = TRUE ; + Pos = MAP_APPFONT ( MBX_RIGHT_DIST_X, MBX_RIGHT_DIST_Y ); + Size = MAP_APPFONT ( CONTROL_WIDTH -10 ,MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "After Text Indent"; + HelpID = HID_POPUP_INDENT_ED_INDENT_RIGHTINDENT ; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 9999 ; + StrictFormat = TRUE ; + Unit = FUNIT_INCH; + Last = 9999 ; + SpinSize = 2 ; + }; + MetricField MF_FL_INDENT + { + Border = TRUE ; + Pos = MAP_APPFONT ( MBX_FLINE_DIST_X, MBX_FLINE_DIST_Y ); + Size = MAP_APPFONT ( CONTROL_WIDTH -10 ,MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "First Line Indent"; + HelpID = HID_POPUP_INDENT_ED_INDENT_FLINDENT ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = -9999; + Maximum = 9999 ; + DecimalDigits = 2; + Unit = FUNIT_INCH; + First = -9999; + Last = 9999 ; + SpinSize = 2 ; + }; + ToolBox TBX_LINESP + { + Pos = MAP_APPFONT ( TBX_LINE_SPACE_X, TBX_LINE_SPACE_Y); + SVLook = TRUE ; + Border = FALSE ; + Size = MAP_APPFONT (TOOLBOX_WIDTH, TOOLBOX_HEIGHT); + HelpID = HID_PPROPERTYPANEL_PARA_TBX_LINESP ; + Text = "Line Spacing" ; + ItemList = + { + ToolBoxItem + { + Identifier = BT_BTX_LINESP ; + HelpID = HID_PPROPERTYPANEL_PARA_TBI_LINESP ; + Text [ en-US ] = "Line Spacing" ; + ItemBitmap = Bitmap + { + File = "symphony/lpsmall-spacing-1.png" ; + }; + DropDown = TRUE; + }; + }; + }; + FixedImage FI_INDENT1 + { + Pos = MAP_APPFONT( IMG_SPACE_X, IMG_SPACE1_Y ); + Size = MAP_APPFONT( IMAGE_SIZE, IMAGE_SIZE ); + }; + FixedImage FI_INDENT2 + { + Pos = MAP_APPFONT( IMG_SPACE_X, IMG_SPACE2_Y ); + Size = MAP_APPFONT( IMAGE_SIZE, IMAGE_SIZE ); + }; + FixedImage FI_INDENT3 + { + Pos = MAP_APPFONT( IMG_INDENT_X, IMG_INDENT1_Y ); + Size = MAP_APPFONT( IMAGE_SIZE, IMAGE_SIZE ); + }; + FixedImage FI_SPACE1 + { + Pos = MAP_APPFONT( IMG_INDENT_X, IMG_INDENT2_Y ); + Size = MAP_APPFONT( IMAGE_SIZE, IMAGE_SIZE ); + }; + FixedImage FI_SPACE2 + { + Pos = MAP_APPFONT( IMG_INDENT_X, IMG_INDENT3_Y ); + Size = MAP_APPFONT( IMAGE_SIZE, IMAGE_SIZE ); + }; + + ImageList IL_VERT_ALIGN + { + Prefix = "symphony/para_vert"; + MaskColor = STD_MASKCOLOR ; + SVX_PROPERTYPANEL_PARA_VERT_IDLIST + }; + ImageList ILH_VERT_ALIGN + { + Prefix = "symphony/para_verth"; + MaskColor = STD_MASKCOLOR ; + SVX_PROPERTYPANEL_PARA_VERT_IDLIST + }; + + ImageList IL_NUM_BULLET + { + Prefix = "symphony/para_numbullet"; + MaskColor = STD_MASKCOLOR ; + SVX_PROPERTYPANEL_PARA_NUMBULLET_IDLIST + }; + ImageList ILH_NUM_BULLET + { + Prefix = "symphony/para_numbulleth"; + MaskColor = STD_MASKCOLOR ; + SVX_PROPERTYPANEL_PARA_NUMBULLET_IDLIST + }; + //for sym2_7380 + ImageList IL_NUM_BULLET_RTL + { + Prefix = "symphony/para_numbullet_rtl"; + MaskColor = STD_MASKCOLOR ; + SVX_PROPERTYPANEL_PARA_NUMBULLET_IDLIST_RTL + }; + //end + Image IMG_BACK_COLOR + { + ImageBitmap = Bitmap{File = "symphony/sc_backgroundcolor.bmp";}; + }; + Image IMG_BACK_COLOR_H + { + ImageBitmap = Bitmap{File = "symphony/sch_backgroundcolor.bmp";}; + }; + Image IMG_SPACE1 + { + ImageBitmap = Bitmap{File = "symphony/spacing1.png";}; + }; + Image IMG_SPACE2 + { + ImageBitmap = Bitmap{File = "symphony/spacing2.png";}; + }; + Image IMG_SPACE3 + { + ImageBitmap = Bitmap{File = "symphony/spacing3.png";}; + }; + Image IMG_INDENT1 + { + ImageBitmap = Bitmap{File = "symphony/Indent2.png";}; + }; + Image IMG_INDENT2 + { + ImageBitmap = Bitmap{File = "symphony/Indent3.png";}; + }; + Image IMG_INDENT3 + { + ImageBitmap = Bitmap{File = "symphony/Indent4.png";}; + }; + Image IMG_LEFT_PARA + { + ImageBitmap = Bitmap{File = "symphony/AlignTextLeft_16x16.png";}; + }; + Image IMG_CENTER_PARA + { + ImageBitmap = Bitmap{File = "symphony/AlignTextCenter_16x16.png";}; + }; + Image IMG_RIGHT_PARA + { + ImageBitmap = Bitmap{File = "symphony/AlignTextRight_16x16.png";}; + }; + Image IMG_JUSTIFY_PARA + { + ImageBitmap = Bitmap{File = "symphony/AlignTextJustified_16x16.png";}; + }; + Image IMG_INDENT_INC + { + ImageBitmap = Bitmap{File = "symphony/Indent_16x16.png";}; + }; + Image IMG_INDENT_DEC + { + ImageBitmap = Bitmap{File = "symphony/Outdent_16x16.png";}; + }; + Image IMG_INDENT_INC_BD + { + ImageBitmap = Bitmap{File = "symphony/rte_Indent_16x16.png";}; + }; + Image IMG_INDENT_DEC_BD + { + ImageBitmap = Bitmap{File = "symphony/rte_Outdent_16x16.png";}; + }; + Image IMG_INDENT_HANG + { + ImageBitmap = Bitmap{File = "symphony/Indent_Hanging.png";}; + }; + Image IMG_PARA_INC + { + ImageBitmap = Bitmap{File = "symphony/IncreaseSpace_16x16.png";}; + }; + Image IMG_PARA_DEC + { + ImageBitmap = Bitmap{File = "symphony/DecreaseSpace_16x16.png";}; + }; +}; + +//===========================================Back color page============================== +/* +Control RID_POPUPPANEL_PARAPAGE_BACK_COLOR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( POPUP_COLOR_PICKER_WIDTH + POPUP_BORDER_WIDTH , POPUP_COLOR_PICKER_HEIGHT +POPUP_BORDER_HEIGHT ); + + Control VS_FONT_COLOR + { + HelpID = HID_PPROPERTYPANEL_PARA_BACK_COLOR_VS ; + Hide = TRUE ; + Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y ); + Size = MAP_APPFONT ( POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT ); + TabStop = TRUE ; + Text = "Color Picker"; + }; + + String STR_NOFILL + { + Text [ en-US ] = "No Color"; + }; + +};*/ + +//===========================================Bullet popup page============================== +Control RID_POPUPPANEL_PARAPAGE_BULLETS +{ + DialogControl = TRUE; + OutputSize = TRUE; + Border = FALSE; + + Size = MAP_APPFONT ( POPUP_WIDTH_BULLET , POPUP_HEIGHT_BULLET) ; + Control VS_VALUES + { + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_NB , POPUPPANEL_MARGIN_NB ) ; + Size = MAP_APPFONT ( VS_WIDTH_BULLET , VS_HEIGHT_BULLET) ; + HelpID = HID_POPUP_BULLET_VS_VALUES ; + TabStop = TRUE ; + Text = "Bullet"; + }; + PushButton CB_BULLET_MORE + { + Pos = MAP_APPFONT (CUST_MORE_BUTTON_X + POPUPPANEL_MARGIN_NB, VS_HEIGHT_BULLET + POPUPPANEL_MARGIN_NB * 2 ) ; + Size = MAP_APPFONT (POPUP_WIDTH_BULLET - 2*CUST_MORE_BUTTON_X - POPUPPANEL_MARGIN_NB*2, CUST_MORE_BUTTON_HEIGHT ) ; + HelpID = HID_POPUP_BULLET_CB_BULLET_MORE ; + TabStop = TRUE ; + Text [ en-US ] = "~More Options"; + }; + Bitmap BMP_BULLET_MORE + { + File = "symphony/__morebutton.bmp"; + }; + Bitmap BMP_BULLET_MORE_H + { + File = "symphony/__morebutton_h.bmp"; + }; +}; + +String RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_0 +{ + Text [en-US] = "large square bullets"; +}; + +String RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_1 +{ + Text [en-US] = "graphic bullets"; +}; + +String RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_2 +{ + Text [en-US] = "graphic bullets"; +}; + +String RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_3 +{ + Text [en-US] = "graphic bullets"; +}; + +String RID_SVXSTR_SIDEBAR_BULLET_DESCRIPTIONS_4 +{ + Text [en-US] = "graphic bullets"; +}; + +//===========================================Numbering popup page============================== +Control RID_POPUPPANEL_PARAPAGE_NUMBERING +{ + SVLook = TRUE ; + DialogControl = TRUE; + OutputSize = TRUE; + Border = FALSE; + + Size = MAP_APPFONT ( POPUP_WIDTH_NUM , POPUP_HEIGHT_NUM) ; + Control VS_NUMBERING + { + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_NB, POPUPPANEL_MARGIN_NB ) ; + Size = MAP_APPFONT ( VS_WIDTH_NUM , VS_HEIGHT_NUM) ; + HelpID = HID_POPUP_NUM_VS_NUMBERING ; + TabStop = TRUE ; + Text = "Numbering"; + }; + PushButton CB_NUMBERING_MORE + { + Pos = MAP_APPFONT (CUST_MORE_BUTTON_X + POPUPPANEL_MARGIN_NB, VS_HEIGHT_NUM + POPUPPANEL_MARGIN_NB * 2 ) ; + Size = MAP_APPFONT (POPUP_WIDTH_NUM - 2*CUST_MORE_BUTTON_X - POPUPPANEL_MARGIN_NB*2, CUST_MORE_BUTTON_HEIGHT ) ; + HelpID = HID_POPUP_NUM_CB_NUMBERING_MORE ; + TabStop = TRUE ; + Text [ en-US ] = "~More Options"; + }; + Bitmap BMP_NUMERING_MORE + { + File = "symphony/__morebutton.bmp"; + }; + Bitmap BMP_NUMERING_MORE_H + { + File = "symphony/__morebutton_h.bmp"; + }; +}; + +//===========================================Line Space popup page============================== +Control RID_POPUPPANEL_PARAPAGE_LINESPACING +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_SPACING_WIDTH, POPUP_PAGE_HEIGHT ); + + Control LINE_SPACING + { + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); + Size = MAP_APPFONT ( VS_SPACING_WIDTH , 17 * 5); + TabStop = TRUE ; + Text = "Line Spacing"; + }; + + FixedText FT_CUSTOM + { + Pos = MAP_APPFONT ( POP_FT_CUSTOM_X, POP_FT_CUSTOM_Y ); + Size = MAP_APPFONT ( _FIXED_TEXT_WIDTH + 50 , _FIXED_TEXT_HEIGHT) ; + Text [ en-US ] = "Custom:"; + }; + FixedText FT_LINE_SPACING + { + Pos = MAP_APPFONT ( FT_1_X, FT_1_Y ); + Size = MAP_APPFONT ( _FIXED_TEXT_WIDTH + 10, _FIXED_TEXT_HEIGHT) ; + Text [ en-US ] = "~Line Spacing:"; + }; + + FixedText FT_OF + { + Pos = MAP_APPFONT ( FT_2_X, FT_2_Y ); + Size = MAP_APPFONT ( _FIXED_TEXT_WIDTH , _FIXED_TEXT_HEIGHT) ; + Text [ en-US ] = "~Of:"; + }; + + ListBox LB_LINE_SPACING + { + Border = TRUE ; + Pos = MAP_APPFONT ( EDIT_1_X, EDIT_1_Y ); + Size = MAP_APPFONT ( BD_WIDTH - POPUPPANEL_MARGIN_LARGE * 2,LISTBOX_HEIGHT ) ; + TabStop = TRUE ; + DropDown = TRUE ; + HelpID = HID_POPUP_LS_LB_LINE_SPACING ; + StringList [ en-US ] = + { + < "Single" ; Default ; > ; + < "1.5 Lines" ; Default ; > ; + < "Double" ; Default ; > ; + < "Proportional" ; Default ; > ; + < "At least" ; Default ; > ; + < "Leading" ; Default ; > ; + < "Fixed" ; Default ; > ; + }; + }; + MetricField ED_SBINDE_LINEDISTPERCENT + { + Disable = TRUE; + Border = TRUE; + Pos = MAP_APPFONT ( EDIT_2_X, EDIT_2_Y ); + Size = MAP_APPFONT ( BD_WIDTH - POPUPPANEL_MARGIN_LARGE * 2,MBOX_HEIGHT ) ; + HelpID = HID_POPUP_LS_ED_SBINDE_LINEDISTPERCENT ; + Repeat = TRUE; + Spin = TRUE; + Minimum = 50; + Maximum = 200; + Value = 100; + StrictFormat = TRUE; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%"; + First = 50; + Last = 200; + SpinSize = 1; + }; + MetricField ED_SBINDE_LINEDISTPOINT + { + Disable = TRUE; + Border = TRUE; + Pos = MAP_APPFONT ( EDIT_2_X, EDIT_2_Y ); + Size = MAP_APPFONT ( BD_WIDTH - POPUPPANEL_MARGIN_LARGE * 2, MBOX_HEIGHT ) ; + HelpID = HID_POPUP_LS_ED_SBINDE_LINEDISTPOINT ; + Repeat = TRUE; + Spin = TRUE; + Maximum = 9999; + DecimalDigits = 2; + StrictFormat = TRUE ; + Unit = FUNIT_INCH; + Last = 9999; + SpinSize = 2; + }; + Image IMG_SPACING1 + { + ImageBitmap = Bitmap{File = "symphony/lpspacing-1.png";}; + }; + Image IMG_SPACING115 + { + ImageBitmap = Bitmap{File = "symphony/lpspacing-1_15.png";}; + }; + Image IMG_SPACING15 + { + ImageBitmap = Bitmap{File = "symphony/lpspacing-1_5.png";}; + }; + Image IMG_SPACING2 + { + ImageBitmap = Bitmap{File = "symphony/lpspacing-2.png";}; + }; + Image IMG_SEL_SPACING1 + { + ImageBitmap = Bitmap{File = "symphony/lpselected-spacing-1.png";}; + }; + Image IMG_SEL_SPACING115 + { + ImageBitmap = Bitmap{File = "symphony/lpselected-spacing-1_15.png";}; + }; + Image IMG_SEL_SPACING15 + { + ImageBitmap = Bitmap{File = "symphony/lpselected-spacing-1_5.png";}; + }; + Image IMG_SEL_SPACING2 + { + ImageBitmap = Bitmap{File = "symphony/lpselected-spacing-2.png";}; + }; + Image IMG_CUSTOM + { + ImageBitmap = Bitmap{File = "symphony/last_custom_common.png";}; + }; + Image IMG_CUSTOM_GRAY + { + ImageBitmap = Bitmap{File = "symphony/last_custom_common_grey.png";}; + }; + String STR_LS_SINGLE + { + Text [ en-US ] = "Line spacing: Single"; + }; + String STR_LS_115 + { + Text [ en-US ] = "Line spacing: 1.15 Lines"; + }; + String STR_LS_15 + { + Text [ en-US ] = "Line spacing: 1.5 Lines"; + }; + String STR_LS_DOUBLE + { + Text [ en-US ] = "Line spacing: Double"; + }; + String STR_LSPACING + { + Text [ en-US ] = "Line spacing:"; + }; + String STR_LS_OF + { + Text [ en-US ] = "of:"; + }; + String STR_SPACING1 + { + Text [ en-US ] = "Spacing: 1"; + }; + String STR_SPACING115 + { + Text [ en-US ] = "Spacing: 1.15"; + }; + String STR_SPACING15 + { + Text [ en-US ] = "Spacing: 1.5"; + }; + String STR_SPACING2 + { + Text [ en-US ] = "Spacing: 2"; + }; + String STR_LCVALUE + { + Text [ en-US ] = "Last Custom Value"; + }; + +}; + +String RID_SVXSTR_NUMBULLET_NONE +{ + Text [en-US] = "None"; +}; + +String RID_SVXSTR_GRAPHICS_DESCRIPTION_0 +{ + Text [en-US] = "Dark Red Circle"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_1 +{ + Text [en-US] = "Blue Ball"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_2 +{ + Text [en-US] = "Green Ball"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_3 +{ + Text [en-US] = "Black Square"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_4 +{ + Text [en-US] = "Orange"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_5 +{ + Text [en-US] = "Purple Square"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_6 +{ + Text [en-US] = "Diamond Blue"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_7 +{ + Text [en-US] = "Light Blue Diamond"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_8 +{ + Text [en-US] = "Red Diamond"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_9 +{ + Text [en-US] = "Yellow Star"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_10 +{ + Text [en-US] = "Blue Star"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_11 +{ + Text [en-US] = "Blue Triangle"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_12 +{ + Text [en-US] = "Dark Green Triangle"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_13 +{ + Text [en-US] = "Red Arrow"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_14 +{ + Text [en-US] = "Blue Arrow"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_15 +{ + Text [en-US] = "Blue Box"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_16 +{ + Text [en-US] = "Red Box"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_17 +{ + Text [en-US] = "Light Blue Asterisk"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_18 +{ + Text [en-US] = "Red Leaves"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_19 +{ + Text [en-US] = "Blue Target"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_20 +{ + Text [en-US] = "Blue Arrow"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_21 +{ + Text [en-US] = "Dark Blue Arrow"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_22 +{ + Text [en-US] = "Brown Arrow"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_23 +{ + Text [en-US] = "Red Flag"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_24 +{ + Text [en-US] = "Green Flag"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_25 +{ + Text [en-US] = "Red X"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_26 +{ + Text [en-US] = "Black X"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_27 +{ + Text [en-US] = "Green Checkmark"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_28 +{ + Text [en-US] = "Blue Checkmark"; +}; +String RID_SVXSTR_GRAPHICS_DESCRIPTION_29 +{ + Text [en-US] = "Dark Red Square"; +};
\ No newline at end of file diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx new file mode 100644 index 000000000000..23df38c34cf4 --- /dev/null +++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx @@ -0,0 +1,1229 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include "PosSizePropertyPanel.hxx" +#include "PosSizePropertyPanel.hrc" +#include <svx/sidebar/SidebarDialControl.hxx> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/viewsh.hxx> +#include <sfx2/objsh.hxx> +#include <svx/dlgutil.hxx> +#include <unotools/viewoptions.hxx> +#include <vcl/virdev.hxx> +#include <vcl/svapp.hxx> +#include <vcl/field.hxx> +#include <vcl/fixed.hxx> +#include <vcl/toolbox.hxx> +#include <svx/svdview.hxx> +#include <svl/aeitem.hxx> + +using namespace css; +using namespace cssu; +using ::sfx2::sidebar::Theme; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) +#define USERITEM_NAME rtl::OUString::createFromAscii("FitItem") +#define NO_SELECT (65535) + + + +namespace svx { namespace sidebar { + + + +PosSizePropertyPanel::PosSizePropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) +: Control( + pParent, + SVX_RES(RID_SIDEBAR_POSSIZE_PANEL)), + mpFtPosX(new FixedText(this, SVX_RES(FT_SBSHAPE_HORIZONTAL))), + mpMtrPosX(new MetricField(this, SVX_RES(MF_SBSHAPE_HORIZONTAL))), + mpFtPosY(new FixedText(this, SVX_RES(FT_SBSHAPE_VERTICAL))), + mpMtrPosY(new MetricField(this, SVX_RES(MF_SBSHAPE_VERTICAL))), + mpFtWidth(new FixedText(this, SVX_RES(FT_WIDTH))), + mpMtrWidth(new MetricField(this, SVX_RES(MTR_FLD_WIDTH))), + mpFtHeight(new FixedText(this, SVX_RES(FT_HEIGHT))), + mpMtrHeight(new MetricField(this, SVX_RES(MTR_FLD_HEIGHT))), + mpCbxScale(new CheckBox(this, SVX_RES(CBX_SCALE))), + mpFtAngle(new FixedText(this, SVX_RES(FT_ANGLE))), + mpMtrAngle(new MetricBox(this, SVX_RES(MTR_FLD_ANGLE))), + mpDial(new SidebarDialControl(this, SVX_RES(DIAL_CONTROL))), + mpFtFlip(new FixedText(this, SVX_RES(FT_FLIP))), + mpFlipTbxBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), + mpFlipTbx(sfx2::sidebar::ControlFactory::CreateToolBox(mpFlipTbxBackground.get(), SVX_RES(TBX_FLIP))), + maRect(), + mpView(0), + mlOldWidth(1), + mlOldHeight(1), + meRP(RP_LT), + maAnchorPos(), + mlRotX(0), + mlRotY(0), + maUIScale(), + mePoolUnit(), + meDlgUnit(), + maTransfPosXControl(SID_ATTR_TRANSFORM_POS_X, *pBindings, *this), + maTransfPosYControl(SID_ATTR_TRANSFORM_POS_Y, *pBindings, *this), + maTransfWidthControl(SID_ATTR_TRANSFORM_WIDTH, *pBindings, *this), + maTransfHeightControl(SID_ATTR_TRANSFORM_HEIGHT, *pBindings, *this), + maSvxAngleControl( SID_ATTR_TRANSFORM_ANGLE, *pBindings, *this), + maRotXControl(SID_ATTR_TRANSFORM_ROT_X, *pBindings, *this), + maRotYControl(SID_ATTR_TRANSFORM_ROT_Y, *pBindings, *this), + maProPosControl(SID_ATTR_TRANSFORM_PROTECT_POS, *pBindings, *this), + maProSizeControl(SID_ATTR_TRANSFORM_PROTECT_SIZE, *pBindings, *this), + maAutoWidthControl(SID_ATTR_TRANSFORM_AUTOWIDTH, *pBindings, *this), + maAutoHeightControl(SID_ATTR_TRANSFORM_AUTOHEIGHT, *pBindings, *this), + m_aMetricCtl(SID_ATTR_METRIC, *pBindings, *this), + maImgFlipHori(SVX_RES(IMG_HORI_FLIP)), + maImgFlipVert(SVX_RES(IMG_VERT_FLIP)), + mxFrame(rxFrame), + maContext(), + mpBindings(pBindings), + mbMtrPosXMirror(false), + mbSizeProtected(false), + mbPositionProtected(false), + mbAutoWidth(false), + mbAutoHeight(false), + mbAdjustEnabled(false), + mbIsFlip(false), + mbInDestructor(false), + mxSidebar(rxSidebar) +{ + Initialize(); + FreeResource(); + + mpBindings->Update( SID_ATTR_TRANSFORM_WIDTH ); + mpBindings->Update( SID_ATTR_TRANSFORM_HEIGHT ); + mpBindings->Update( SID_ATTR_TRANSFORM_PROTECT_SIZE ); + mpBindings->Update( SID_ATTR_METRIC ); +} + + + +PosSizePropertyPanel::~PosSizePropertyPanel() +{ + mbInDestructor = true; + + // Destroy the background windows of the toolboxes. + mpFlipTbx.reset(); + mpFlipTbxBackground.reset(); +} + + + +void PosSizePropertyPanel::ShowMenu (void) +{ + if (mpBindings != NULL) + { + SfxDispatcher* pDispatcher = mpBindings->GetDispatcher(); + if (pDispatcher != NULL) + pDispatcher->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_ASYNCHRON); + } +} + + + +void PosSizePropertyPanel::Initialize() +{ + mpFtPosX->SetBackground(Wallpaper()); + mpFtPosY->SetBackground(Wallpaper()); + mpFtWidth->SetBackground(Wallpaper()); + mpFtHeight->SetBackground(Wallpaper()); + mpFtAngle->SetBackground(Wallpaper()); + mpFtFlip->SetBackground(Wallpaper()); + + //Position : Horizontal / Vertical + mpMtrPosX->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosXHdl ) ); + mpMtrPosY->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) ); + mpMtrPosX->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Horizontal"))); //wj acc + mpMtrPosY->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Vertical"))); //wj acc + + //Size : Width / Height + mpMtrWidth->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) ); + mpMtrHeight->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) ); + mpMtrWidth->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Width"))); //wj acc + mpMtrHeight->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Height"))); //wj acc + + //Size : Keep ratio + mpCbxScale->SetClickHdl( LINK( this, PosSizePropertyPanel, ClickAutoHdl ) ); + + //rotation: + mpMtrAngle->SetModifyHdl(LINK( this, PosSizePropertyPanel, AngleModifiedHdl)); + mpMtrAngle->EnableAutocomplete( false ); + mpMtrAngle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Rotation"))); //wj acc + + //rotation control + mpDial->SetModifyHdl(LINK( this, PosSizePropertyPanel, RotationHdl)); + + //flip: + mpFlipTbx->SetSelectHdl( LINK( this, PosSizePropertyPanel, FlipHdl) ); + mpFlipTbx->SetItemImage(FLIP_HORIZONTAL,maImgFlipHori); + mpFlipTbx->SetItemImage(FLIP_VERTICAL,maImgFlipVert); + mpFlipTbx->SetQuickHelpText(FLIP_HORIZONTAL,String(SVX_RES(STR_QH_HORI_FLIP))); //Add + mpFlipTbx->SetQuickHelpText(FLIP_VERTICAL,String(SVX_RES(STR_QH_VERT_FLIP))); //Add + + mpMtrPosX->SetAccessibleRelationLabeledBy(mpFtPosX.get()); + mpMtrPosY->SetAccessibleRelationLabeledBy(mpFtPosY.get()); + mpMtrWidth->SetAccessibleRelationLabeledBy(mpFtWidth.get()); + mpMtrHeight->SetAccessibleRelationLabeledBy(mpFtHeight.get()); + mpMtrAngle->SetAccessibleRelationLabeledBy(mpFtAngle.get()); +#ifdef HAS_IA2 + mpMtrAngle->SetMpSubEditAccLableBy(mpFtAngle.get()); +#endif + mpFlipTbx->SetAccessibleRelationLabeledBy(mpFtFlip.get()); + + mpMtrAngle->InsertValue(0, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(4500, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(9000, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(13500, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(18000, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(22500, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(27000, FUNIT_CUSTOM); + mpMtrAngle->InsertValue(31500, FUNIT_CUSTOM); + mpMtrAngle->SetDropDownLineCount(mpMtrAngle->GetEntryCount()); + + SfxViewShell* pCurSh = SfxViewShell::Current(); + if ( pCurSh ) + mpView = pCurSh->GetDrawView(); + else + mpView = NULL; + + if ( mpView != NULL ) + { + maUIScale = mpView->GetModel()->GetUIScale(); + + const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); + if(1 == rMarkList.GetMarkCount()) + { + const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); + + if((pObj->GetObjInventor() == SdrInventor) && (OBJ_TEXT == eKind || OBJ_TITLETEXT == eKind || OBJ_OUTLINETEXT == eKind) && ((SdrTextObj*)pObj)->HasText()) + { + mbAdjustEnabled = true; + } + } + } + + mePoolUnit = maTransfWidthControl.GetCoreMetric(); + meDlgUnit = GetModuleFieldUnit(); + SetFieldUnit( *mpMtrPosX, meDlgUnit, true ); + SetFieldUnit( *mpMtrPosY, meDlgUnit, true ); + SetFieldUnit( *mpMtrWidth, meDlgUnit, true ); + SetFieldUnit( *mpMtrHeight, meDlgUnit, true ); +} + + + +void PosSizePropertyPanel::SetupIcons(void) +{ + if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) + { + // todo + } + else + { + // todo + } +} + + + +PosSizePropertyPanel* PosSizePropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to PosSizePropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to PosSizePropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to PosSizePropertyPanel::Create"), NULL, 2); + + return new PosSizePropertyPanel( + pParent, + rxFrame, + pBindings, + rxSidebar); +} + + + +void PosSizePropertyPanel::DataChanged( + const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetupIcons(); +} + + + +void PosSizePropertyPanel::HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext) +{ + if(maContext == aContext) + { + // Nothing to do. + return; + } + + maContext = aContext; + + sal_Int32 nLayoutMode (0); + switch (maContext.GetCombinedContext_DI()) + { + case CombinedEnumContext(Application_WriterAndWeb, Context_Draw): + nLayoutMode = 0; + break; + + case CombinedEnumContext(Application_WriterAndWeb, Context_Graphic): + case CombinedEnumContext(Application_WriterAndWeb, Context_Media): + case CombinedEnumContext(Application_WriterAndWeb, Context_Frame): + case CombinedEnumContext(Application_WriterAndWeb, Context_OLE): + case CombinedEnumContext(Application_WriterAndWeb, Context_Form): + nLayoutMode = 1; + break; + + case CombinedEnumContext(Application_Calc, Context_Draw): + case CombinedEnumContext(Application_Calc, Context_Graphic): + case CombinedEnumContext(Application_DrawImpress, Context_Draw): + case CombinedEnumContext(Application_DrawImpress, Context_TextObject): + case CombinedEnumContext(Application_DrawImpress, Context_Graphic): + nLayoutMode = 2; + break; + + case CombinedEnumContext(Application_Calc, Context_Chart): + case CombinedEnumContext(Application_Calc, Context_Form): + case CombinedEnumContext(Application_Calc, Context_Media): + case CombinedEnumContext(Application_Calc, Context_OLE): + case CombinedEnumContext(Application_Calc, Context_MultiObject): + case CombinedEnumContext(Application_DrawImpress, Context_Media): + case CombinedEnumContext(Application_DrawImpress, Context_Form): + case CombinedEnumContext(Application_DrawImpress, Context_OLE): + case CombinedEnumContext(Application_DrawImpress, Context_3DObject): + case CombinedEnumContext(Application_DrawImpress, Context_MultiObject): + nLayoutMode = 3; + break; + } + switch (nLayoutMode) + { + case 0: + { + mpMtrWidth->SetMin( 2 ); + mpMtrHeight->SetMin( 2 ); + mpFtPosX->Hide(); + mpMtrPosX->Hide(); + mpFtPosY->Hide(); + mpMtrPosY->Hide(); + + //rotation + mpFtAngle->Show(); + mpMtrAngle->Show(); + mpDial->Show(); + + //flip + mpFtFlip->Show(); + mpFlipTbx->Show(); + Size aTbxSize = mpFlipTbx->CalcWindowSizePixel(); + mpFlipTbx->SetOutputSizePixel( aTbxSize ); + mbIsFlip = true; + + mpFtWidth->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_X_X,FT_POSITION_X_Y), MAP_APPFONT))); + mpMtrWidth->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_X_X,MF_POSITION_X_Y), MAP_APPFONT))); + mpFtHeight->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_Y_X,FT_POSITION_Y_Y), MAP_APPFONT))); + mpMtrHeight->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_Y_X,MF_POSITION_Y_Y), MAP_APPFONT))); + mpCbxScale->SetPosPixel(Point(LogicToPixel(Point(FT_WIDTH_X,FT_WIDTH_Y), MAP_APPFONT))); + + mpFtAngle->SetPosPixel(Point(LogicToPixel(Point(FT_ANGLE_X,FT_ANGLE_Y), MAP_APPFONT))); + mpMtrAngle->SetPosPixel(Point(LogicToPixel(Point(MF_ANGLE_X2,MF_ANGLE_Y2), MAP_APPFONT))); + mpFlipTbx->SetPosPixel(Point(LogicToPixel(Point(FLIP_HORI_X2,FLIP_HORI_Y2), MAP_APPFONT))); + mpDial->SetPosPixel(Point(LogicToPixel(Point(ROTATE_CONTROL_X2,ROTATE_CONTROL_Y2), MAP_APPFONT))); + mpFtFlip->SetPosPixel(Point(LogicToPixel(Point(FT_FLIP_X2,FT_FLIP_Y2), MAP_APPFONT))); + + Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT2); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + } + break; + + case 1: + { + mpMtrWidth->SetMin( 2 ); + mpMtrHeight->SetMin( 2 ); + mpFtPosX->Hide(); + mpMtrPosX->Hide(); + mpFtPosY->Hide(); + mpMtrPosY->Hide(); + + //rotation + mpFtAngle->Hide(); + mpMtrAngle->Hide(); + mpDial->Hide(); + + //flip + mpFlipTbx->Hide(); + mpFtFlip->Hide(); + mbIsFlip = false; + + mpFtWidth->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_X_X,FT_POSITION_X_Y), MAP_APPFONT))); + mpMtrWidth->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_X_X,MF_POSITION_X_Y), MAP_APPFONT))); + mpFtHeight->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_Y_X,FT_POSITION_Y_Y), MAP_APPFONT))); + mpMtrHeight->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_Y_X,MF_POSITION_Y_Y), MAP_APPFONT))); + mpCbxScale->SetPosPixel(Point(LogicToPixel(Point(FT_WIDTH_X,FT_WIDTH_Y), MAP_APPFONT))); + + Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT3); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + } + break; + + case 2: + { + mpMtrWidth->SetMin( 1 ); + mpMtrHeight->SetMin( 1 ); + mpFtPosX->Show(); + mpMtrPosX->Show(); + mpFtPosY->Show(); + mpMtrPosY->Show(); + + //rotation + mpFtAngle->Show(); + mpMtrAngle->Show(); + mpDial->Show(); + + //flip + mpFlipTbx->Show(); + mpFtFlip->Show(); + Size aTbxSize = mpFlipTbx->CalcWindowSizePixel(); + mpFlipTbx->SetOutputSizePixel( aTbxSize ); + mbIsFlip = true; + + Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + } + break; + + case 3: + { + mpMtrWidth->SetMin( 1 ); + mpMtrHeight->SetMin( 1 ); + mpFtPosX->Show(); + mpMtrPosX->Show(); + mpFtPosY->Show(); + mpMtrPosY->Show(); + + //rotation + mpFtAngle->Hide(); + mpMtrAngle->Hide(); + mpDial->Hide(); + + //flip + mpFlipTbx->Hide(); + mpFtFlip->Hide(); + mbIsFlip = false; + + Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT4); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + } + break; + } + + //Added for windows classic theme + mpFlipTbx->SetBackground(Wallpaper()); + mpFlipTbx->SetPaintTransparent(true); +} + + + +IMPL_LINK( PosSizePropertyPanel, ChangeWidthHdl, void*, /*pBox*/ ) +{ + if( mpCbxScale->IsChecked() && + mpCbxScale->IsEnabled() ) + { + long nHeight = (long) ( ((double) mlOldHeight * (double) mpMtrWidth->GetValue()) / (double) mlOldWidth ); + if( nHeight <= mpMtrHeight->GetMax( FUNIT_NONE ) ) + { + mpMtrHeight->SetUserValue( nHeight, FUNIT_NONE ); + } + else + { + nHeight = (long)mpMtrHeight->GetMax( FUNIT_NONE ); + mpMtrHeight->SetUserValue( nHeight ); + const long nWidth = (long) ( ((double) mlOldWidth * (double) nHeight) / (double) mlOldHeight ); + mpMtrWidth->SetUserValue( nWidth, FUNIT_NONE ); + } + } + executeSize(); + return 0; +} + + + +IMPL_LINK( PosSizePropertyPanel, ChangeHeightHdl, void *, EMPTYARG ) +{ + if( mpCbxScale->IsChecked() && + mpCbxScale->IsEnabled() ) + { + long nWidth = (long) ( ((double)mlOldWidth * (double)mpMtrHeight->GetValue()) / (double)mlOldHeight ); + if( nWidth <= mpMtrWidth->GetMax( FUNIT_NONE ) ) + { + mpMtrWidth->SetUserValue( nWidth, FUNIT_NONE ); + } + else + { + nWidth = (long)mpMtrWidth->GetMax( FUNIT_NONE ); + mpMtrWidth->SetUserValue( nWidth ); + const long nHeight = (long) ( ((double)mlOldHeight * (double)nWidth) / (double)mlOldWidth ); + mpMtrHeight->SetUserValue( nHeight, FUNIT_NONE ); + } + } + executeSize(); + return 0; +} + + + +IMPL_LINK( PosSizePropertyPanel, ChangePosXHdl, void *, EMPTYARG ) +{ + executePosX(); + return 0; +} + + + +IMPL_LINK( PosSizePropertyPanel, ChangePosYHdl, void *, EMPTYARG ) +{ + executePosY(); + return 0; +} + + + +IMPL_LINK( PosSizePropertyPanel, ClickAutoHdl, void *, EMPTYARG ) +{ + if ( mpCbxScale->IsChecked() ) + { + mlOldWidth = Max( GetCoreValue( *mpMtrWidth, mePoolUnit ), 1L ); + mlOldHeight = Max( GetCoreValue( *mpMtrHeight, mePoolUnit ), 1L ); + } + + // mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog + SvtViewOptions aPageOpt( E_TABPAGE, String::CreateFromInt32( RID_SVXPAGE_POSITION_SIZE ) ); + aPageOpt.SetUserItem( USERITEM_NAME, ::com::sun::star::uno::makeAny( ::rtl::OUString( String::CreateFromInt32( mpCbxScale->IsChecked() ) ) ) ); + + return 0; +} + + + +IMPL_LINK( PosSizePropertyPanel, AngleModifiedHdl, void *, EMPTYARG ) +{ + String sTmp = mpMtrAngle->GetText(); + bool bNegative = 0; + sal_Unicode nChar = sTmp.GetChar( 0 ); + + if( nChar == '-' ) + { + bNegative = 1; + nChar = sTmp.GetChar( 1 ); + } + + if( (nChar < '0') || (nChar > '9') ) + return 0; + double dTmp = sTmp.ToDouble(); + if(bNegative) + { + while(dTmp<0) + dTmp += 360; + } + sal_Int64 nTmp = dTmp*100; + + SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp); + SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX); + SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L ); + + return 0; +} + + + +IMPL_LINK( PosSizePropertyPanel, RotationHdl, void *, EMPTYARG ) +{ + sal_Int32 nTmp = mpDial->GetRotation(); + + SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp); + SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX); + SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L ); + + return 0; +} + + + +IMPL_LINK( PosSizePropertyPanel, FlipHdl, ToolBox*, pBox ) +{ + switch (pBox->GetCurItemId()) + { + case FLIP_HORIZONTAL: + { + SfxVoidItem aHoriItem (SID_FLIP_HORIZONTAL); + GetBindings()->GetDispatcher()->Execute( + SID_FLIP_HORIZONTAL, SFX_CALLMODE_RECORD, &aHoriItem, 0L ); + } + break; + case FLIP_VERTICAL: + { + SfxVoidItem aVertItem (SID_FLIP_VERTICAL ); + GetBindings()->GetDispatcher()->Execute( + SID_FLIP_VERTICAL, SFX_CALLMODE_RECORD, &aVertItem, 0L ); + } + break; + } + return 0; +} + + + +void PosSizePropertyPanel::NotifyItemUpdate( + sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState) +{ + mpFtAngle->Enable(); + mpMtrAngle->Enable(); + mpDial->Enable(); + mpFtFlip->Enable(); + mpFlipTbx->Enable(); + + const SfxUInt32Item* pWidthItem; + const SfxUInt32Item* pHeightItem; + + SfxViewShell* pCurSh = SfxViewShell::Current(); + if ( pCurSh ) + mpView = pCurSh->GetDrawView(); + else + mpView = NULL; + + if ( mpView == NULL ) + return; + + const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); + + if(1 == rMarkList.GetMarkCount()) + { + const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); + + if((pObj->GetObjInventor() == SdrInventor) && (OBJ_TEXT == eKind || OBJ_TITLETEXT == eKind || OBJ_OUTLINETEXT == eKind) && ((SdrTextObj*)pObj)->HasText()) + mbAdjustEnabled = true; + else + mbAdjustEnabled = false; + } + else + mbAdjustEnabled = false; + + switch (nSID) + { + case SID_ATTR_TRANSFORM_WIDTH: + if ( SFX_ITEM_AVAILABLE == eState ) + { + pWidthItem = dynamic_cast< const SfxUInt32Item* >(pState); + + if(pWidthItem) + { + long mlOldWidth1 = pWidthItem->GetValue(); + + mlOldWidth1 = Fraction( mlOldWidth1 ) / maUIScale; + SetMetricValue( *mpMtrWidth, mlOldWidth1, mePoolUnit ); + mlOldWidth = mlOldWidth1; + break; + } + } + + mpMtrWidth->SetText( String()); + break; + + case SID_ATTR_TRANSFORM_HEIGHT: + if ( SFX_ITEM_AVAILABLE == eState ) + { + pHeightItem = dynamic_cast< const SfxUInt32Item* >(pState); + + if(pHeightItem) + { + long mlOldHeight1 = pHeightItem->GetValue(); + + mlOldHeight1 = Fraction( mlOldHeight1 ) / maUIScale; + SetMetricValue( *mpMtrHeight, mlOldHeight1, mePoolUnit ); + mlOldHeight = mlOldHeight1; + break; + } + } + + mpMtrHeight->SetText( String()); + break; + + case SID_ATTR_TRANSFORM_POS_X: + if(SFX_ITEM_AVAILABLE == eState) + { + const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); + + if(pItem) + { + long nTmp = pItem->GetValue(); + nTmp = Fraction( nTmp ) / maUIScale; + SetMetricValue( *mpMtrPosX, nTmp, mePoolUnit ); + break; + } + } + + mpMtrPosX->SetText( String()); + break; + + case SID_ATTR_TRANSFORM_POS_Y: + if(SFX_ITEM_AVAILABLE == eState) + { + const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); + + if(pItem) + { + long nTmp = pItem->GetValue(); + nTmp = Fraction( nTmp ) / maUIScale; + SetMetricValue( *mpMtrPosY, nTmp, mePoolUnit ); + break; + } + } + + mpMtrPosY->SetText( String()); + break; + + case SID_ATTR_TRANSFORM_ROT_X: + if (SFX_ITEM_AVAILABLE == eState) + { + const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); + + if(pItem) + { + mlRotX = pItem->GetValue(); + mlRotX = Fraction( mlRotX ) / maUIScale; + } + } + break; + + case SID_ATTR_TRANSFORM_ROT_Y: + if (SFX_ITEM_AVAILABLE == eState) + { + const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); + + if(pItem) + { + mlRotY = pItem->GetValue(); + mlRotY = Fraction( mlRotY ) / maUIScale; + } + } + break; + + case SID_ATTR_TRANSFORM_PROTECT_POS: + if(SFX_ITEM_AVAILABLE == eState) + { + const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); + + if(pItem) + { + // record the state of position protect + mbPositionProtected = pItem->GetValue(); + break; + } + } + + mbPositionProtected = false; + break; + + case SID_ATTR_TRANSFORM_PROTECT_SIZE: + if(SFX_ITEM_AVAILABLE == eState) + { + const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); + + if(pItem) + { + // record the state of size protect + mbSizeProtected = pItem->GetValue(); + break; + } + } + + mbSizeProtected = false; + break; + + case SID_ATTR_TRANSFORM_AUTOWIDTH: + if(SFX_ITEM_AVAILABLE == eState) + { + const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); + + if(pItem) + { + mbAutoWidth = pItem->GetValue(); + } + } + break; + + case SID_ATTR_TRANSFORM_AUTOHEIGHT: + if(SFX_ITEM_AVAILABLE == eState) + { + const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); + + if(pItem) + { + mbAutoHeight = pItem->GetValue(); + } + } + break; + + case SID_ATTR_TRANSFORM_ANGLE: + if (eState >= SFX_ITEM_AVAILABLE) + { + const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); + + if(pItem) + { + long nTmp = pItem->GetValue(); + + mpMtrAngle->SetValue( nTmp ); + mpDial->SetRotation( nTmp ); + + switch(nTmp) + { + case 0: + mpMtrAngle->SelectEntryPos(0); + break; + case 4500: + mpMtrAngle->SelectEntryPos(1); + break; + case 9000: + mpMtrAngle->SelectEntryPos(2); + break; + case 13500: + mpMtrAngle->SelectEntryPos(3); + break; + case 18000: + mpMtrAngle->SelectEntryPos(4); + break; + case 22500: + mpMtrAngle->SelectEntryPos(5); + break; + case 27000: + mpMtrAngle->SelectEntryPos(6); + break; + case 315000: + mpMtrAngle->SelectEntryPos(7); + } + + break; + } + } + + mpMtrAngle->SetText( String() ); + mpDial->SetRotation( 0 ); + break; + + case SID_ATTR_METRIC: + MetricState( eState, pState ); + break; + + default: + break; + } + + const sal_Int32 nCombinedContext(maContext.GetCombinedContext_DI()); + + switch (rMarkList.GetMarkCount()) + { + case 0: + break; + + case 1: + { + const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); + + if(((nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_Draw) + || nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject) + ) && OBJ_EDGE == eKind) + || OBJ_CAPTION == eKind) + { + mpFtAngle->Disable(); + mpMtrAngle->Disable(); + mpDial->Disable(); + mpFlipTbx->Disable(); + mpFtFlip->Disable(); + } + break; + } + + default: + { + sal_uInt16 nMarkObj = 0; + bool isNoEdge = true; + while(rMarkList.GetMark(nMarkObj)) + { + const SdrObject* pObj = rMarkList.GetMark(nMarkObj)->GetMarkedSdrObj(); + const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); + + if(((nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_Draw) + || nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject) + ) && OBJ_EDGE == eKind) + || OBJ_CAPTION == eKind) + { + isNoEdge = false; + break; + } + nMarkObj++; + } + if(!isNoEdge) + { + mpFtAngle->Disable(); + mpMtrAngle->Disable(); + mpDial->Disable(); + mpFlipTbx->Disable(); + mpFtFlip->Disable(); + } + break; + } + } + + if(nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject)) + { + mpFlipTbx->Disable(); + mpFtFlip->Disable(); + } + + DisableControls(); + + // mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog + SvtViewOptions aPageOpt( E_TABPAGE, String::CreateFromInt32( RID_SVXPAGE_POSITION_SIZE ) ); + String sUserData; + ::com::sun::star::uno::Any aUserItem = aPageOpt.GetUserItem( USERITEM_NAME ); + ::rtl::OUString aTemp; + if ( aUserItem >>= aTemp ) + sUserData = String( aTemp ); + mpCbxScale->Check( (bool)sUserData.ToInt32() ); +} + + + +SfxBindings* PosSizePropertyPanel::GetBindings() +{ + return mpBindings; +} + + + +void PosSizePropertyPanel::executeSize() +{ + if ( mpMtrWidth->IsValueModified() || mpMtrHeight->IsValueModified()) + { + Fraction aUIScale = mpView->GetModel()->GetUIScale(); + + // get Width + double nWidth = (double)mpMtrWidth->GetValue( meDlgUnit ); + nWidth = MetricField::ConvertDoubleValue( nWidth, mpMtrWidth->GetBaseValue(), mpMtrWidth->GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM ); + long lWidth = (long)(nWidth * (double)aUIScale); + lWidth = OutputDevice::LogicToLogic( lWidth, MAP_100TH_MM, (MapUnit)mePoolUnit ); + lWidth = (long)mpMtrWidth->Denormalize( lWidth ); + + // get Height + double nHeight = (double)mpMtrHeight->GetValue( meDlgUnit ); + nHeight = MetricField::ConvertDoubleValue( nHeight, mpMtrHeight->GetBaseValue(), mpMtrHeight->GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM ); + long lHeight = (long)(nHeight * (double)aUIScale); + lHeight = OutputDevice::LogicToLogic( lHeight, MAP_100TH_MM, (MapUnit)mePoolUnit ); + lHeight = (long)mpMtrWidth->Denormalize( lHeight ); + + // put Width & Height to itemset + SfxUInt32Item aWidthItem( SID_ATTR_TRANSFORM_WIDTH, (sal_uInt32) lWidth); + SfxUInt32Item aHeightItem( SID_ATTR_TRANSFORM_HEIGHT, (sal_uInt32) lHeight); + SfxAllEnumItem aPointItem (SID_ATTR_TRANSFORM_SIZE_POINT, (sal_uInt16)meRP); + const sal_Int32 nCombinedContext(maContext.GetCombinedContext()); + + if( nCombinedContext == CombinedEnumContext(Application_Writer, Context_Graphic) // mnContextId == PROPERTY_CONTEXT_SW_GRAPHIC + || nCombinedContext == CombinedEnumContext(Application_Writer, Context_OLE) //mnContextId == PROPERTY_CONTEXT_SW_OLE + ) + // if( mnContextId == PROPERTY_CONTEXT_SW_GRAPHIC || mnContextId == PROPERTY_CONTEXT_SW_OLE ) + { + GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aHeightItem, &aPointItem, 0L ); + } + else + { + if ( (mpMtrWidth->IsValueModified()) && (mpMtrHeight->IsValueModified())) + GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aHeightItem, &aPointItem, 0L ); + else if( mpMtrWidth->IsValueModified()) + GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aPointItem, 0L ); + else if ( mpMtrHeight->IsValueModified()) + GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aHeightItem, &aPointItem, 0L ); + } + } +} + + + +void PosSizePropertyPanel::executePosX() +{ + if ( mpMtrPosX->IsValueModified()) + { + long lX = GetCoreValue( *mpMtrPosX, mePoolUnit ); + if( mbMtrPosXMirror ) + lX = -lX; + long lY = GetCoreValue( *mpMtrPosY, mePoolUnit ); + + Size aPageSize; + Rectangle aRect; + maRect = mpView->GetAllMarkedRect(); + aRect = mpView->GetAllMarkedRect(); + + Fraction aUIScale = mpView->GetModel()->GetUIScale(); + lX += maAnchorPos.X(); + lX = Fraction( lX ) * aUIScale; + lY += maAnchorPos.Y(); + lY = Fraction( lY ) * aUIScale; + + SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,(sal_uInt32) lX); + SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,(sal_uInt32) lY); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aPosXItem, 0L ); + } +} + + + +void PosSizePropertyPanel::executePosY() +{ + if ( mpMtrPosY->IsValueModified() ) + { + long lX = GetCoreValue( *mpMtrPosX, mePoolUnit ); + long lY = GetCoreValue( *mpMtrPosY, mePoolUnit ); + + Size aPageSize; + Rectangle aRect; + maRect = mpView->GetAllMarkedRect(); + aRect = mpView->GetAllMarkedRect(); + + Fraction aUIScale = mpView->GetModel()->GetUIScale(); + lX += maAnchorPos.X(); + lX = Fraction( lX ) * aUIScale; + lY += maAnchorPos.Y(); + lY = Fraction( lY ) * aUIScale; + + SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,(sal_uInt32) lX); + SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,(sal_uInt32) lY); + + GetBindings()->GetDispatcher()->Execute( + SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aPosYItem, 0L ); + } +} + + + +void PosSizePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem* pState ) +{ + bool bPosXBlank = false; + bool bPosYBlank = false; + bool bWidthBlank = false; + bool bHeightBlank = false; + String sNull = String::CreateFromAscii(""); + meDlgUnit = GetCurrentUnit(eState,pState); + + if( mpMtrPosX->GetText() == sNull ) + bPosXBlank = true; + SetFieldUnit( *mpMtrPosX, meDlgUnit, true ); + if(bPosXBlank) + mpMtrPosX->SetText(String()); + + if( mpMtrPosY->GetText() == sNull ) + bPosYBlank = true; + SetFieldUnit( *mpMtrPosY, meDlgUnit, true ); + if(bPosYBlank) + mpMtrPosY->SetText(String()); + + if( mpMtrWidth->GetText() == sNull ) + bWidthBlank = true; + SetFieldUnit( *mpMtrWidth, meDlgUnit, true ); + if(bWidthBlank) + mpMtrWidth->SetText(String()); + + if( mpMtrHeight->GetText() == sNull ) + bHeightBlank = true; + SetFieldUnit( *mpMtrHeight, meDlgUnit, true ); + if(bHeightBlank) + mpMtrHeight->SetText(String()); +} + + + +FieldUnit PosSizePropertyPanel::GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState ) +{ + FieldUnit eUnit = FUNIT_NONE; + + if ( pState && eState >= SFX_ITEM_DEFAULT ) + { + eUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue(); + } + else + { + SfxViewFrame* pFrame = SfxViewFrame::Current(); + SfxObjectShell* pSh = NULL; + if ( pFrame ) + pSh = pFrame->GetObjectShell(); + if ( pSh ) + { + SfxModule* pModule = pSh->GetModule(); + if ( pModule ) + { + const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC ); + if ( pItem ) + eUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue(); + } + else + { + DBG_ERRORFILE( "GetModuleFieldUnit(): no module found" ); + } + } + } + + return eUnit; +} + + + +void PosSizePropertyPanel::DisableControls() +{ + if( mbPositionProtected ) + { + // the position is protected("Position protect" option in modal dialog is checked), + // disable all the Position controls in sidebar + mpFtPosX->Disable(); + mpMtrPosX->Disable(); + mpFtPosY->Disable(); + mpMtrPosY->Disable(); + mpFtAngle->Disable(); + mpMtrAngle->Disable(); + mpDial->Disable(); + mpFtFlip->Disable(); + mpFlipTbx->Disable(); + + mpFtWidth->Disable(); + mpMtrWidth->Disable(); + mpFtHeight->Disable(); + mpMtrHeight->Disable(); + mpCbxScale->Disable(); + } + else + { + mpFtPosX->Enable(); + mpMtrPosX->Enable(); + mpFtPosY->Enable(); + mpMtrPosY->Enable(); + + //mpFtAngle->Enable(); + //mpMtrAngle->Enable(); + //mpDial->Enable(); + //mpFtFlip->Enable(); + //mpFlipTbx->Enable(); + + if( mbSizeProtected ) + { + mpFtWidth->Disable(); + mpMtrWidth->Disable(); + mpFtHeight->Disable(); + mpMtrHeight->Disable(); + mpCbxScale->Disable(); + } + else + { + if( mbAdjustEnabled ) + { + if( mbAutoWidth ) + { + mpFtWidth->Disable(); + mpMtrWidth->Disable(); + mpCbxScale->Disable(); + } + else + { + mpFtWidth->Enable(); + mpMtrWidth->Enable(); + } + if( mbAutoHeight ) + { + mpFtHeight->Disable(); + mpMtrHeight->Disable(); + mpCbxScale->Disable(); + } + else + { + mpFtHeight->Enable(); + mpMtrHeight->Enable(); + } + if( !mbAutoWidth && !mbAutoHeight ) + mpCbxScale->Enable(); + } + else + { + mpFtWidth->Enable(); + mpMtrWidth->Enable(); + mpFtHeight->Enable(); + mpMtrHeight->Enable(); + mpCbxScale->Enable(); + } + } + } +} + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.hrc b/svx/source/sidebar/possize/PosSizePropertyPanel.hrc new file mode 100644 index 000000000000..eb0846808183 --- /dev/null +++ b/svx/source/sidebar/possize/PosSizePropertyPanel.hrc @@ -0,0 +1,108 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +// RID_SIDEBAR_POSSIZE_PANEL-------------------------------------------------------------- +#define FT_WIDTH 1 +#define MTR_FLD_WIDTH 2 +#define FT_HEIGHT 3 +#define MTR_FLD_HEIGHT 4 +#define CBX_SCALE 5 +#define FT_SBSHAPE_HORIZONTAL 7 +#define MF_SBSHAPE_HORIZONTAL 8 +#define FT_SBSHAPE_VERTICAL 9 +#define MF_SBSHAPE_VERTICAL 10 +#define FT_SBSHAPE_POSREFERENCE 11 +#define CTL_SBSHAPE_POSREFERENCE 12 +#define FT_ANGLE 13 +#define MTR_FLD_ANGLE 14 +#define TBX_FLIP 15 +#define DIAL_CONTROL 17 +#define FLIP_HORIZONTAL 18 +#define FLIP_VERTICAL 19 +#define IMG_HORI_FLIP 20 +#define IMG_VERT_FLIP 21 +#define FT_FLIP 22 +#define STR_QH_HORI_FLIP 23 +#define STR_QH_VERT_FLIP 24 + +#define MBOX_WIDTH 50 +#define TEXT_WIDTH 40 +#define FLIP_BUTTON_SIZE 13 +#define ALIGNMENT_TBX_HEIGHT 17 +#define ALIGNMENT_TBX_WIDTH 13 + +#define FT_POSITION_X_X SECTIONPAGE_MARGIN_HORIZONTAL +#define FT_POSITION_X_Y SECTIONPAGE_MARGIN_VERTICAL_TOP +#define MF_POSITION_X_X FT_POSITION_X_X +#define MF_POSITION_X_Y FT_POSITION_X_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL +#define FT_POSITION_Y_X FT_POSITION_X_X + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL +#define FT_POSITION_Y_Y FT_POSITION_X_Y +#define MF_POSITION_Y_X FT_POSITION_Y_X +#define MF_POSITION_Y_Y MF_POSITION_X_Y + +#define FT_WIDTH_X SECTIONPAGE_MARGIN_HORIZONTAL +#define FT_WIDTH_Y MF_POSITION_X_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define FLD_WIDTH_X FT_WIDTH_X +#define FLD_WIDTH_Y FT_WIDTH_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL +#define FT_HEIGHT_X FT_WIDTH_X + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL +#define FT_HEIGHT_Y FT_WIDTH_Y +#define FLD_HEIGHT_X FT_HEIGHT_X +#define FLD_HEIGHT_Y FLD_WIDTH_Y +#define CBX_X FT_WIDTH_X +#define CBX_Y FLD_WIDTH_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +///////////////////// +#define FT_ROTATION_X FT_WIDTH_X +#define FT_ROTATION_Y CBX_Y + CONTROL_SPACING_VERTICAL + TEXT_HEIGHT + +#define MF_ROTATION_X FT_ROTATION_X + 40 + CONTROL_SPACING_HORIZONTAL +#define MF_ROTATION_Y FT_ROTATION_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define ROTATE_CONTROL_X FT_ROTATION_X +#define ROTATE_CONTROL_Y MF_ROTATION_Y + 4 + +#define FT_FLIP_X MF_ROTATION_X +#define FT_FLIP_Y MF_ROTATION_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + 5 + +#define BTN_FLIP_HORI_X PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2 - 1 // wj for 7926 +#define BTN_FLIP_HORI_Y FT_FLIP_Y - 5 +//////////////////////////////// + +#define FT_ANGLE_X FLD_WIDTH_X +#define FT_ANGLE_Y FLD_WIDTH_Y + 4 + +#define MF_ANGLE_X2 MF_ROTATION_X +#define MF_ANGLE_Y2 FT_ANGLE_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL + +#define ROTATE_CONTROL_X2 FT_ANGLE_X +#define ROTATE_CONTROL_Y2 MF_ANGLE_Y2 + 4 + +#define FT_FLIP_X2 MF_ANGLE_X2 +#define FT_FLIP_Y2 MF_ANGLE_Y2 + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + 5 + +#define FLIP_HORI_X2 PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2 //FT_FLIP_X2 + 22 +#define FLIP_HORI_Y2 FT_FLIP_Y2 - 5 + +#define PS_SECTIONPAGE_HEIGHT BTN_FLIP_HORI_Y + ALIGNMENT_TBX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT + 2 +#define PS_SECTIONPAGE_HEIGHT2 FLIP_HORI_Y2 + ALIGNMENT_TBX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT + 2 +#define PS_SECTIONPAGE_HEIGHT3 FT_WIDTH_Y + TEXT_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT +#define PS_SECTIONPAGE_HEIGHT4 CBX_Y + CBOX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT + +// eof diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx new file mode 100644 index 000000000000..ca3f5ad3aef8 --- /dev/null +++ b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx @@ -0,0 +1,182 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_PROPERTYPANEL_POSIZEPAGE_HXX +#define SVX_PROPERTYPANEL_POSIZEPAGE_HXX + +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/IContextChangeReceiver.hxx> +#include <boost/scoped_ptr.hpp> +#include <svx/rectenum.hxx> +#include <svl/poolitem.hxx> +#include <tools/fldunit.hxx> +#include <com/sun/star/ui/XSidebar.hpp> + +class DialControl; +class SdrView; +class FixedText; +class MetricField; +class CheckBox; +class MetricBox; + + +namespace svx { namespace sidebar { + +class SidebarDialControl; + +class PosSizePropertyPanel +: public Control, + public ::sfx2::sidebar::IContextChangeReceiver, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: + static PosSizePropertyPanel* Create( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + + virtual void DataChanged( + const DataChangedEvent& rEvent); + + virtual void HandleContextChange( + const ::sfx2::sidebar::EnumContext aContext); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + + SfxBindings* GetBindings(); + void ShowMenu (void); + +private: + //Position + ::boost::scoped_ptr< FixedText > mpFtPosX; + ::boost::scoped_ptr< MetricField > mpMtrPosX; + ::boost::scoped_ptr< FixedText > mpFtPosY; + ::boost::scoped_ptr< MetricField > mpMtrPosY; + + // size + ::boost::scoped_ptr< FixedText > mpFtWidth; + ::boost::scoped_ptr< MetricField > mpMtrWidth; + ::boost::scoped_ptr< FixedText > mpFtHeight; + ::boost::scoped_ptr< MetricField > mpMtrHeight; + ::boost::scoped_ptr< CheckBox > mpCbxScale; + + //rotation + ::boost::scoped_ptr< FixedText > mpFtAngle; + ::boost::scoped_ptr< MetricBox > mpMtrAngle; + + //rotation control + ::boost::scoped_ptr<SidebarDialControl> mpDial; + + //flip + ::boost::scoped_ptr< FixedText > mpFtFlip; + ::boost::scoped_ptr< Window > mpFlipTbxBackground; + ::boost::scoped_ptr< ToolBox > mpFlipTbx; + + // Internal variables + Rectangle maRect; + const SdrView* mpView; + sal_uInt32 mlOldWidth; + sal_uInt32 mlOldHeight; + RECT_POINT meRP; + Point maAnchorPos; //anchor position + long mlRotX; + long mlRotY; + Fraction maUIScale; + SfxMapUnit mePoolUnit; + FieldUnit meDlgUnit; + + // Controller Items + ::sfx2::sidebar::ControllerItem maTransfPosXControl; + ::sfx2::sidebar::ControllerItem maTransfPosYControl; + ::sfx2::sidebar::ControllerItem maTransfWidthControl; + ::sfx2::sidebar::ControllerItem maTransfHeightControl; + + ::sfx2::sidebar::ControllerItem maSvxAngleControl; + ::sfx2::sidebar::ControllerItem maRotXControl; + ::sfx2::sidebar::ControllerItem maRotYControl; + ::sfx2::sidebar::ControllerItem maProPosControl; + ::sfx2::sidebar::ControllerItem maProSizeControl; + ::sfx2::sidebar::ControllerItem maAutoWidthControl; + ::sfx2::sidebar::ControllerItem maAutoHeightControl; + ::sfx2::sidebar::ControllerItem m_aMetricCtl; + + // images from ressource + Image maImgFlipHori; + Image maImgFlipVert; + + cssu::Reference< css::frame::XFrame > mxFrame; + ::sfx2::sidebar::EnumContext maContext; + SfxBindings* mpBindings; + + /// bitfield + bool mbMtrPosXMirror : 1; + bool mbSizeProtected : 1; + bool mbPositionProtected : 1; + bool mbAutoWidth : 1; + bool mbAutoHeight : 1; + bool mbAdjustEnabled : 1; + bool mbIsFlip : 1; + bool mbInDestructor : 1; + + cssu::Reference<css::ui::XSidebar> mxSidebar; + + DECL_LINK( ChangePosXHdl, void * ); + DECL_LINK( ChangePosYHdl, void * ); + DECL_LINK( ChangeWidthHdl, void * ); + DECL_LINK( ChangeHeightHdl, void * ); + DECL_LINK( ClickAutoHdl, void * ); + DECL_LINK( AngleModifiedHdl, void * ); + DECL_LINK( RotationHdl, void * ); + DECL_LINK( FlipHdl, ToolBox * ); + + void SetupIcons(void); + void Initialize(); + void executePosX(); + void executePosY(); + void executeSize(); + + // constructor/destuctor + PosSizePropertyPanel( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + virtual ~PosSizePropertyPanel(); + + void MetricState( SfxItemState eState, const SfxPoolItem* pState ); + FieldUnit GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState ); + void DisableControls(); +}; + + +} } // end of namespace svx::sidebar + + + +#endif // SVX_PROPERTYPANEL_POSIZEPAGE_HXX + +// eof diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.src b/svx/source/sidebar/possize/PosSizePropertyPanel.src new file mode 100644 index 000000000000..a6b062126bec --- /dev/null +++ b/svx/source/sidebar/possize/PosSizePropertyPanel.src @@ -0,0 +1,227 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "PosSizePropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include "helpid.hrc" + +#define TOOLBOX_HEIGHT 14 + +Control RID_SIDEBAR_POSSIZE_PANEL +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( + PROPERTYPAGE_WIDTH, + BTN_FLIP_HORI_Y + TOOLBOX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT); + HelpID = HID_PROPERTYPANEL_POSIZE_SECTION ; + Text = "Position and Size"; + + FixedText FT_WIDTH + { + Pos = MAP_APPFONT ( FT_WIDTH_X, FT_WIDTH_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , TEXT_HEIGHT) ; + Text [ en-US ] = "~Width:"; + }; + MetricField MTR_FLD_WIDTH + { + Border = TRUE ; + Pos = MAP_APPFONT ( FLD_WIDTH_X, FLD_WIDTH_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Enter a width for the selected object."; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 9999 ; + StrictFormat = TRUE ; + Unit = FUNIT_INCH; + Last = 9999 ; + SpinSize = 2 ; + HelpID = HID_PROPERTY_PANEL_POSIZE_MTR_FLD_WIDTH; + }; + FixedText FT_HEIGHT + { + Pos = MAP_APPFONT ( FT_HEIGHT_X, FT_HEIGHT_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , TEXT_HEIGHT) ; + Text [ en-US ] = "H~eight:"; + }; + MetricField MTR_FLD_HEIGHT + { + Border = TRUE ; + Pos = MAP_APPFONT ( FLD_HEIGHT_X, FLD_HEIGHT_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH + 1, MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Enter a height for the selected object."; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 9999 ; + StrictFormat = TRUE ; + Unit = FUNIT_INCH; + Last = 9999 ; + SpinSize = 2 ; + HelpID = HID_PROPERTY_PANEL_POSIZE_MTR_FLD_HEIGHT; + }; + CheckBox CBX_SCALE + { + Pos = MAP_APPFONT ( CBX_X , CBX_Y ) ; + Size = MAP_APPFONT ( MBOX_WIDTH + 30 , CBOX_HEIGHT ) ; + TabStop = TRUE ; + Text [ en-US ] = "~Keep ratio" ; + QuickHelpText [ en-US ] = "Maintain proportions when you resize the selected object."; + HelpID = HID_PROPERTY_PANEL_POSIZE_CBX_SCALE; + }; + //------------ Position ------------ + FixedText FT_SBSHAPE_HORIZONTAL + { + Pos = MAP_APPFONT ( FT_POSITION_X_X, FT_POSITION_X_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , TEXT_HEIGHT) ; + Text [ en-US ] = "~Horizontal:"; + }; + MetricField MF_SBSHAPE_HORIZONTAL + { + Border = TRUE; + Pos = MAP_APPFONT ( MF_POSITION_X_X , MF_POSITION_X_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Enter the value for the horizontal position."; + TabStop = TRUE; + Repeat = TRUE; + Spin = TRUE; + Minimum = -120000; + Maximum = 240000; + StrictFormat = TRUE; + DecimalDigits = 2; + Unit = FUNIT_MM; + SpinSize = 10; + HelpID = HID_PROPERTY_PANEL_POSIZE_MF_HORIZONTAL; + }; + FixedText FT_SBSHAPE_VERTICAL + { + Pos = MAP_APPFONT ( FT_POSITION_Y_X , FT_POSITION_Y_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH , TEXT_HEIGHT) ; + Text [ en-US ] = "~Vertical:"; + }; + MetricField MF_SBSHAPE_VERTICAL + { + Border = TRUE; + Pos = MAP_APPFONT ( MF_POSITION_Y_X , MF_POSITION_Y_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Enter the value for the vertical position."; + TabStop = TRUE; + Repeat = TRUE; + Spin = TRUE; + Minimum = -120000; + Maximum = 240000; + StrictFormat = TRUE; + DecimalDigits = 2; + Unit = FUNIT_MM; + SpinSize = 10; + HelpID = HID_PROPERTY_PANEL_POSIZE_MF_VERTICAL; + }; + FixedText FT_ANGLE + { + Pos = MAP_APPFONT ( FT_ROTATION_X , FT_ROTATION_Y ); + Size = MAP_APPFONT ( TEXT_WIDTH + 50, TEXT_HEIGHT) ; + Text [ en-US ] = "~Rotation:"; + }; + + MetricBox MTR_FLD_ANGLE + { + Border = TRUE ; + Pos = MAP_APPFONT ( MF_ROTATION_X , MF_ROTATION_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH + 10, MBOX_HEIGHT ) ; + QuickHelpText [ en-US ] = "Select the angle for rotation."; + Unit = FUNIT_CUSTOM ; + CustomUnitText [ en-US ] = " degrees"; + DecimalDigits = 2; + Minimum = -18000; // set minmun value or it will be 0 as default + TabStop = TRUE ; + DropDown = TRUE ; + HelpID = HID_PROPERTY_PANEL_POSIZE_MTR_FLD_ANGLE; + }; + + FixedText FT_FLIP + { + Pos = MAP_APPFONT ( FT_FLIP_X , FT_FLIP_Y ); + Size = MAP_APPFONT ( PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL*2 - 40 - CONTROL_SPACING_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2 , TEXT_HEIGHT) ;//20 wj + Text [ en-US ] = "~Flip:"; + }; + + ToolBox TBX_FLIP + { + Pos = MAP_APPFONT ( BTN_FLIP_HORI_X , BTN_FLIP_HORI_Y ); + Size = MAP_APPFONT ( TOOLBOX_ITEM_WIDTH * 2, TOOLBOX_HEIGHT); + SVLook = TRUE ; + Border = FALSE ; + HelpID = HID_PROPERTY_PANEL_POSIZE_TBX_FLIP; + Text = "Flip"; + ItemList = + { + ToolBoxItem + { + Identifier = FLIP_VERTICAL ; + Text [ en-US ] = "Flip Vertically" ; + HelpID = HID_PROPERTY_PANEL_POSIZE_FLIP_VERTICAL; + ItemBitmap = Bitmap + { + File = "symphony/FlipVertically_16x16.png"; + }; + }; + ToolBoxItem + { + Identifier = FLIP_HORIZONTAL ; + Text [ en-US ] = "Flip Horizontally" ; + HelpID = HID_PROPERTY_PANEL_POSIZE_FLIP_HORIZONTAL; + ItemBitmap = Bitmap + { + File = "symphony/FlipHorizontally_16x16.png"; + }; + }; + }; + }; + + String STR_QH_HORI_FLIP + { + Text [ en-US ] = "Flip the selected object horizontally."; + }; + String STR_QH_VERT_FLIP + { + Text [ en-US ] = "Flip the selected object vertically."; + }; + + Image IMG_HORI_FLIP + { + ImageBitmap = Bitmap{File = "symphony/FlipHorizontally_16x16.png";}; + }; + Image IMG_VERT_FLIP + { + ImageBitmap = Bitmap{File = "symphony/FlipVertically_16x16.png";}; + }; + + Control DIAL_CONTROL + { + Pos = MAP_APPFONT ( ROTATE_CONTROL_X , ROTATE_CONTROL_Y ); + Size = MAP_PIXEL( 50, 50 ); + HelpID = HID_PROPERTY_PANEL_POSIZE_DIAL_CONTROL; + }; +}; + +// eof diff --git a/svx/source/sidebar/possize/SidebarDialControl.cxx b/svx/source/sidebar/possize/SidebarDialControl.cxx new file mode 100644 index 000000000000..14be83e70d22 --- /dev/null +++ b/svx/source/sidebar/possize/SidebarDialControl.cxx @@ -0,0 +1,86 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include <svx/sidebar/SidebarDialControl.hxx> +#include "SidebarDialControlBmp.hxx" + +#include <vcl/svapp.hxx> + +namespace svx { namespace sidebar { + +SidebarDialControl::SidebarDialControl ( + Window* pParent, + const ResId& rResId) + : svx::DialControl(pParent, rResId) +{ + mpImpl->mpBmpEnabled.reset(new SidebarDialControlBmp(*this)); + mpImpl->mpBmpDisabled.reset(new SidebarDialControlBmp(*this)); + mpImpl->mpBmpBuffered.reset(new SidebarDialControlBmp(*this)); + Init(GetOutputSizePixel()); +} + + + + +SidebarDialControl::~SidebarDialControl (void) +{ +} + + + + +void SidebarDialControl::MouseButtonDown( const MouseEvent& rMEvt ) +{ + if( rMEvt.IsLeft() ) + { + GrabFocus(); + CaptureMouse(); + mpImpl->mnOldAngle = mpImpl->mnAngle; + HandleMouseEvent( rMEvt.GetPosPixel(), true ); + } +} + + + + +void SidebarDialControl::HandleMouseEvent( const Point& rPos, bool bInitial ) +{ + long nX = rPos.X() - mpImpl->mnCenterX; + long nY = mpImpl->mnCenterY - rPos.Y(); + double fH = sqrt( static_cast< double >( nX ) * nX + static_cast< double >( nY ) * nY ); + if( fH != 0.0 ) + { + double fAngle = acos( nX / fH ); + sal_Int32 nAngle = static_cast< sal_Int32 >( fAngle / F_PI180 * 100.0 ); + if( nY < 0 ) + nAngle = 36000 - nAngle; + if( bInitial ) // round to entire 15 degrees + nAngle = ((nAngle + 750) / 1500) * 1500; + + if (Application::GetSettings().GetLayoutRTL()) + nAngle = 18000 - nAngle; + SetRotation( nAngle, true ); + } +} + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/possize/SidebarDialControlBmp.cxx b/svx/source/sidebar/possize/SidebarDialControlBmp.cxx new file mode 100644 index 000000000000..f1a77897f50a --- /dev/null +++ b/svx/source/sidebar/possize/SidebarDialControlBmp.cxx @@ -0,0 +1,94 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "SidebarDialControlBmp.hxx" + +#include <sfx2/sidebar/Theme.hxx> + +#include <vcl/svapp.hxx> + +#include "PosSizePropertyPanel.hrc" +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <svx/svdstr.hrc> + +namespace svx { namespace sidebar { + +SidebarDialControlBmp::SidebarDialControlBmp (Window& rParent) + : DialControlBmp(rParent) +{ +} + + + + +SidebarDialControlBmp::~SidebarDialControlBmp (void) +{ +} + + + + +void SidebarDialControlBmp::DrawElements ( + const String& /*rText*/, + sal_Int32 nAngle) +{ + if (Application::GetSettings().GetLayoutRTL()) + nAngle = 18000 - nAngle; + double fAngle = nAngle * F_PI180 / 100.0; + double fSin = sin( fAngle ); + double fCos = cos( fAngle ); + DrawText( maRect, String(), mbEnabled ? 0 : TEXT_DRAW_DISABLE ); + const sal_Int32 nDx (fCos * (maRect.GetWidth()-4) / 2); + const sal_Int32 nDy (-fSin * (maRect.GetHeight()-4) / 2); + Point pt1( maRect.Center() ); + Point pt2( pt1.X() + nDx, pt1.Y() + nDy); + if ( ! sfx2::sidebar::Theme::IsHighContrastMode()) + SetLineColor( Color( 60, 93, 138 ) ); + else + SetLineColor(COL_BLACK);//Application::GetSettings().GetStyleSettings().GetFieldTextColor() + DrawLine( pt1, pt2 ); +} + + + + +void SidebarDialControlBmp::DrawBackground() +{ + SetLineColor(); + SetFillColor(sfx2::sidebar::Theme::GetColor(sfx2::sidebar::Theme::Paint_PanelBackground)); + DrawRect(maRect); + + const BitmapEx aBitmapEx( + sfx2::sidebar::Theme::IsHighContrastMode() + ? SVX_RES(IMG_DIACONTROL_H) + : SVX_RES(IMG_DIACONTROL_NORMAL)); + // Size aImageSize(aBitmapEx.GetSizePixel()); + // aImageSize.Width() -= 1; + // aImageSize.Height() -= 1; + SetAntialiasing(ANTIALIASING_ENABLE_B2DDRAW | ANTIALIASING_PIXELSNAPHAIRLINE); + DrawBitmapEx(maRect.TopLeft(), /*aImageSize,*/ aBitmapEx); +} + + +} } // end of namespace svx::sidebar + +// eof diff --git a/svx/source/sidebar/possize/SidebarDialControlBmp.hxx b/svx/source/sidebar/possize/SidebarDialControlBmp.hxx new file mode 100644 index 000000000000..80ebcfb1816d --- /dev/null +++ b/svx/source/sidebar/possize/SidebarDialControlBmp.hxx @@ -0,0 +1,47 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_POSSIZE_DIAL_CONTROL_BMP_HXX +#define SVX_SIDEBAR_POSSIZE_DIAL_CONTROL_BMP_HXX + +#include <svx/dialcontrol.hxx> + +namespace svx { namespace sidebar { + + +class SidebarDialControlBmp + : public svx::DialControlBmp +{ +public: + explicit SidebarDialControlBmp( Window& rParent); + virtual ~SidebarDialControlBmp (void); + + virtual void DrawElements( const String& rText, sal_Int32 nAngle ); + virtual void DrawBackground(); + +private: +}; + +} } // end of namespace svx::sidebar + +#endif + +// eof diff --git a/svx/source/sidebar/text/SvxSBFontNameBox.cxx b/svx/source/sidebar/text/SvxSBFontNameBox.cxx new file mode 100644 index 000000000000..92fcb41997c6 --- /dev/null +++ b/svx/source/sidebar/text/SvxSBFontNameBox.cxx @@ -0,0 +1,178 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "SvxSBFontNameBox.hxx" + +#include <unotools/fontoptions.hxx> +#include <sfx2/objsh.hxx> +#include <sfx2/dispatch.hxx> +#include <editeng/flstitem.hxx> +#include <editeng/editids.hrc> +#include <editeng/fontitem.hxx> + + +const static sal_uInt16 MAX_MRU_FONTNAME_ENTRIES = 5; + + +namespace svx { namespace sidebar { + +namespace { + bool GetDocFontList_Impl( const FontList** ppFontList, SvxSBFontNameBox* pBox ) + { + bool bChanged = false; + const SfxObjectShell* pDocSh = SfxObjectShell::Current(); + SvxFontListItem* pFontListItem = NULL; + + if ( pDocSh ) + pFontListItem = + (SvxFontListItem*)pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST ); + + if ( pFontListItem ) + { + const FontList* pNewFontList = pFontListItem->GetFontList(); + DBG_ASSERT( pNewFontList, "Doc-FontList not available!" ); + + if ( !*ppFontList ) + { + *ppFontList = pNewFontList; + bChanged = true; + } + else + { + bChanged = ( *ppFontList != pNewFontList ); + if( !bChanged && pBox!=NULL ) + bChanged = ( pBox->GetListCount() != pNewFontList->GetFontNameCount() ); + HACK(vergleich ist unvollstaendig) + + if ( bChanged ) + *ppFontList = pNewFontList; + } + + if ( pBox ) + pBox->Enable(); + } + else if ( pBox ) + pBox->Disable(); + + // in die FontBox ggf. auch die neue Liste f"ullen + if ( pBox && bChanged ) + { + if ( *ppFontList ) + pBox->Fill( *ppFontList ); + else + pBox->Clear(); + } + return bChanged; + } +} + + + + +SvxSBFontNameBox::SvxSBFontNameBox( Window* pParent, const ResId& rResId ) : + FontNameBox ( pParent, rResId ) +, pFontList ( NULL ) +, nFtCount ( 0 ) +, bInput(false) +, pBindings(NULL) +{ + EnableControls_Impl(); +// StartListening( *SFX_APP() ); +} + +void SvxSBFontNameBox::EnableControls_Impl() +{ + SvtFontOptions aFontOpt; + bool bEnable = aFontOpt.IsFontHistoryEnabled(); + sal_uInt16 nEntries = bEnable ? MAX_MRU_FONTNAME_ENTRIES : 0; + if ( GetMaxMRUCount() != nEntries ) + { + // refill in the next GetFocus-Handler + pFontList = NULL; + Clear(); + SetMaxMRUCount( nEntries ); + } + + bEnable = aFontOpt.IsFontWYSIWYGEnabled(); + EnableWYSIWYG( bEnable ); + EnableSymbols( bEnable ); +} + +void SvxSBFontNameBox::FillList() +{ + Selection aOldSel = GetSelection(); + GetDocFontList_Impl( &pFontList, this ); + aCurText = GetText(); + SetSelection( aOldSel ); +} + +long SvxSBFontNameBox::PreNotify( NotifyEvent& rNEvt ) +{ + const sal_uInt16 nType (rNEvt.GetType()); + + if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType ) + FillList(); + return FontNameBox::PreNotify( rNEvt ); +} +//<<modify +long SvxSBFontNameBox::Notify( NotifyEvent& rNEvt) //SfxBroadcaster& rBC, const SfxHint& rHint +{ + //SfxItemSetHint* pHint = PTR_CAST(SfxItemSetHint, &rHint); + //if ( pHint ) + // EnableControls_Impl(); + bool bHandle = 0; + if ( rNEvt.GetType() == EVENT_KEYINPUT ) + { + const sal_uInt16 nCode (rNEvt.GetKeyEvent()->GetKeyCode().GetCode()); + + if( nCode == KEY_RETURN) + { + bHandle = 1; + Select(); + } + } + + return bHandle ? bHandle : FontNameBox::Notify( rNEvt ); +} +void SvxSBFontNameBox::Select() +{ + FontNameBox::Select(); + + if ( !IsTravelSelect() ) + { + FillList(); + FontInfo aInfo( pFontList->Get( GetText(),WEIGHT_NORMAL, ITALIC_NORMAL ) );//meWeight, meItalic + + SvxFontItem aFontItem( aInfo.GetFamily(), aInfo.GetName(), aInfo.GetStyleName(), + aInfo.GetPitch(), aInfo.GetCharSet(), SID_ATTR_CHAR_FONT ); + + pBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONT, SFX_CALLMODE_RECORD, &aFontItem, 0L ); + pBindings->Invalidate(SID_ATTR_CHAR_FONT,true,false); + } +} +void SvxSBFontNameBox::SetBindings(SfxBindings* pB) +{ + pBindings = pB; +} + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/text/SvxSBFontNameBox.hxx b/svx/source/sidebar/text/SvxSBFontNameBox.hxx new file mode 100644 index 000000000000..ac06cbcbe50f --- /dev/null +++ b/svx/source/sidebar/text/SvxSBFontNameBox.hxx @@ -0,0 +1,80 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_SB_FONT_NAME_BOX_HXX +#define SVX_SIDEBAR_SB_FONT_NAME_BOX_HXX + +#include <sfx2/bindings.hxx> +#include <svtools/ctrlbox.hxx> +#include <svtools/ctrltool.hxx> + +/* +#include <sfx2/sectionpage.hxx> +#include <svx/svxdllapi.h> +#include <vcl/fixed.hxx> + +#include <vcl/button.hxx> +#include <svl/lstner.hxx> +#include <vcl/toolbox.hxx> + +#include <svx/tbxcolorupdate.hxx> +#include <svx/svxenum.hxx> +#include <svx/fhgtitem.hxx> + +#define FONT_COLOR 1 +#define BACK_COLOR 2 +*/ +namespace svx +{ + class ToolboxButtonColorUpdater; +} + +namespace svx { namespace sidebar { + +class SvxSBFontNameBox : public FontNameBox//, public SfxListener +{ +private: + const FontList* pFontList; + Font aCurFont; + String aCurText; + sal_uInt16 nFtCount; + bool bInput; + void EnableControls_Impl(); + SfxBindings* pBindings;// +protected: + virtual void Select(); + +public: + SvxSBFontNameBox( Window* pParent, const ResId& rResId ); + void FillList(); + sal_uInt16 GetListCount() { return nFtCount; } + void Clear() { FontNameBox::Clear(); nFtCount = 0; } + void Fill( const FontList* pList ) + { FontNameBox::Fill( pList ); + nFtCount = pList->GetFontNameCount(); } + void SetBindings(SfxBindings* pBinding);// + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual long Notify( NotifyEvent& rNEvt );// +}; + +} } // end of namespace svx::sidebar + +#endif diff --git a/svx/source/sidebar/text/TextCharacterSpacingControl.cxx b/svx/source/sidebar/text/TextCharacterSpacingControl.cxx new file mode 100644 index 000000000000..a99ffdb78d91 --- /dev/null +++ b/svx/source/sidebar/text/TextCharacterSpacingControl.cxx @@ -0,0 +1,468 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" +#include "TextCharacterSpacingControl.hxx" +#include "TextPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <unotools/viewoptions.hxx> +#include <editeng/kernitem.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/Theme.hxx> + +namespace svx { namespace sidebar { +TextCharacterSpacingControl::TextCharacterSpacingControl(Window* pParent, svx::sidebar::TextPropertyPanel& rPanel) +: PopupControl( pParent,SVX_RES(RID_POPUPPANEL_TEXTPAGE_SPACING)) +, mrTextPropertyPanel(rPanel) +, mpBindings(NULL) +, maVSSpacing (ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES(VS_SPACING)) +, maLastCus (this, SVX_RES(FT_LASTCUSTOM)) +//, maBorder (this, SVX_RES(CT_BORDER)) +, maFTSpacing (this, SVX_RES(FT_SPACING)) +, maLBKerning (this, SVX_RES(LB_KERNING)) +, maFTBy (this, SVX_RES(FT_BY)) +, maEditKerning (this, SVX_RES(ED_KERNING)) + +, mpImg (NULL) +, mpImgSel (NULL) +, mpStr (NULL) +, mpStrTip (NULL) + +, maImgCus (SVX_RES(IMG_CUSTOM)) +, maImgCusGrey (SVX_RES(IMG_CUSTOM_GRAY)) +, maStrCus (SVX_RES(STR_CUSTOM)) +, maStrCusE (SVX_RES(STR_CUSTOM_E_TIP)) //add +, maStrCusC (SVX_RES(STR_CUSTOM_C_TIP)) //add +, maStrCusN (SVX_RES(STR_NORMAL_TIP)) //add +, maStrUnit (SVX_RES(STR_PT)) //add + +, mnCustomKern(0) +, mnLastCus ( SPACING_NOCUSTOM ) +, mbCusEnable(false) +, mbVS(true) +{ + initial(); + FreeResource(); + mpBindings = mrTextPropertyPanel.GetBindings(); + Link aLink = LINK(this, TextCharacterSpacingControl, KerningSelectHdl); + maLBKerning.SetSelectHdl(aLink); + aLink =LINK(this, TextCharacterSpacingControl, KerningModifyHdl); + maEditKerning.SetModifyHdl(aLink); + +} +TextCharacterSpacingControl::~TextCharacterSpacingControl() +{ + delete[] mpImg; + delete[] mpImgSel; + delete[] mpStr; + delete[] mpStrTip; +} + +void TextCharacterSpacingControl::initial() +{ + maVSSpacing.SetStyle( maVSSpacing.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT ); + { + maVSSpacing.SetControlBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maVSSpacing.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maVSSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maFTSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maFTBy.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + } + mpImg = new Image[5]; + mpImg[0] = Image(SVX_RES(IMG_VERY_TIGHT)); + mpImg[1] = Image(SVX_RES(IMG_TIGHT)); + mpImg[2] = Image(SVX_RES(IMG_NORMAL)); + mpImg[3] = Image(SVX_RES(IMG_LOOSE)); + mpImg[4] = Image(SVX_RES(IMG_VERY_LOOSE)); + + mpImgSel = new Image[5]; + mpImgSel[0] = Image(SVX_RES(IMG_VERY_TIGHT_S)); + mpImgSel[1] = Image(SVX_RES(IMG_TIGHT_S)); + mpImgSel[2] = Image(SVX_RES(IMG_NORMAL_S)); + mpImgSel[3] = Image(SVX_RES(IMG_LOOSE_S)); + mpImgSel[4] = Image(SVX_RES(IMG_VERY_LOOSE_S)); + + mpStr = new XubString[5]; + mpStr[0] = XubString(SVX_RES(STR_VERY_TIGHT)); + mpStr[1] = XubString(SVX_RES(STR_TIGHT)); + mpStr[2] = XubString(SVX_RES(STR_NORMAL)); + mpStr[3] = XubString(SVX_RES(STR_LOOSE)); + mpStr[4] = XubString(SVX_RES(STR_VERY_LOOSE)); + + + mpStrTip = new XubString[5]; + mpStrTip[0] = XubString(SVX_RES(STR_VERY_TIGHT_TIP)); + mpStrTip[1] = XubString(SVX_RES(STR_TIGHT_TIP)); + mpStrTip[2] = XubString(SVX_RES(STR_NORMAL_TIP)); + mpStrTip[3] = XubString(SVX_RES(STR_LOOSE_TIP)); + mpStrTip[4] = XubString(SVX_RES(STR_VERY_LOOSE_TIP)); + + for (int i=0;i<5;i++) + maVSSpacing.AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]); + + maVSSpacing.AddItem( maImgCus, 0, maStrCus, 0 ); + + maVSSpacing.SetNoSelection(); + Link aLink = LINK(this, TextCharacterSpacingControl,VSSelHdl ); + maVSSpacing.SetSelectHdl(aLink); + maVSSpacing.StartSelection(); + maVSSpacing.Show(); +} +void TextCharacterSpacingControl::ToGetFocus() +{ + if(!mbVS) + maLBKerning.GrabFocus(); + else + maVSSpacing.GrabFocus(); +} + +void TextCharacterSpacingControl::Rearrange(bool bLBAvailable,bool bAvailable, long nKerning) +{ + mbVS = true; + maVSSpacing.SetNoSelection(); + SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE ); + if ( aWinOpt.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + + String aWinData( aTmp ); + mnCustomKern = aWinData.ToInt32(); + mnLastCus = SPACING_CLOSE_BY_CUS_EDIT; + mbCusEnable = true; + } + else + { + mnLastCus = SPACING_NOCUSTOM; + mbCusEnable = false; + } + + if( !mnLastCus ) + { + maVSSpacing.ReplaceItemImages(6, maImgCusGrey,0); + } + else + { + //set custom tips + maVSSpacing.ReplaceItemImages(6, maImgCus,0); + if(mnCustomKern > 0) + { + String aStrTip( maStrCusE); //LAST CUSTOM no tip defect //add + aStrTip.Append( String::CreateFromDouble( (double)mnCustomKern / 10)); + aStrTip.Append(maStrUnit); // modify + maVSSpacing.SetItemText(6,aStrTip); + } + else if(mnCustomKern < 0) + { + String aStrTip(maStrCusC) ; //LAST CUSTOM no tip defect //add + aStrTip.Append( String::CreateFromDouble( (double)-mnCustomKern / 10)); + aStrTip.Append(maStrUnit); // modify + maVSSpacing.SetItemText( 6, aStrTip ); + } + else + { + String aStrTip(maStrCusN) ; //LAST CUSTOM no tip defect //add + maVSSpacing.SetItemText( 6, aStrTip ); + } + + } + + if(bLBAvailable && bAvailable) + { + maLBKerning.Enable(); + maFTSpacing.Enable(); + + SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric(); + MapUnit eOrgUnit = (MapUnit)eUnit; + MapUnit ePntUnit( MAP_POINT ); + long nBig = maEditKerning.Normalize(nKerning); + nKerning = LogicToLogic( nBig, eOrgUnit, ePntUnit ); + + if ( nKerning > 0 ) + { + maFTBy.Enable(); + maEditKerning.Enable(); + maEditKerning.SetMax( 9999 ); + maEditKerning.SetLast( 9999 ); + maEditKerning.SetValue( nKerning ); + maLBKerning.SelectEntryPos( SIDEBAR_SPACE_EXPAND ); + if(nKerning == 30) + { + maVSSpacing.SelectItem(4); + } + else if(nKerning == 60) + { + maVSSpacing.SelectItem(5); + } + else + { + maVSSpacing.SetNoSelection(); + maVSSpacing.SelectItem(0); + mbVS = false; + } + } + else if ( nKerning < 0 ) + { + maFTBy.Enable(); + maEditKerning.Enable(); + maEditKerning.SetValue( -nKerning ); + maLBKerning.SelectEntryPos( SIDEBAR_SPACE_CONDENSED ); + long nMax = mrTextPropertyPanel.GetSelFontSize()/6; + maEditKerning.SetMax( maEditKerning.Normalize( nMax ), FUNIT_POINT ); + maEditKerning.SetLast( maEditKerning.GetMax( maEditKerning.GetUnit() ) ); + if( nKerning == -30 ) + { + maVSSpacing.SelectItem(1); + } + else if( nKerning == -15 ) + { + maVSSpacing.SelectItem(2); + } + else + { + maVSSpacing.SetNoSelection(); + maVSSpacing.SelectItem(0); + mbVS = false; + } + } + else + { + maVSSpacing.SelectItem(3); + maLBKerning.SelectEntryPos( SIDEBAR_SPACE_NORMAL ); + maFTBy.Disable(); + maEditKerning.Disable(); + maEditKerning.SetValue( 0 ); + maEditKerning.SetMax( 9999 ); + maEditKerning.SetLast( 9999 ); + } + } + else if(bLBAvailable && !bAvailable) + { + //modified + maVSSpacing.SetNoSelection(); + maVSSpacing.SelectItem(0); + mbVS = false; + maLBKerning.Enable(); + maFTSpacing.Enable(); + maLBKerning.SetNoSelection(); + maEditKerning.SetText(String()); + maEditKerning.Disable(); + maFTBy.Disable(); + } + else + { + maVSSpacing.SetNoSelection(); + maVSSpacing.SelectItem(0); + mbVS = false; + maEditKerning.SetText(String()); + maLBKerning.SetNoSelection(); + maLBKerning.Disable(); + maFTSpacing.Disable(); + maEditKerning.Disable(); + maFTBy.Disable(); + } + GetFocus(); + maVSSpacing.Format(); + maVSSpacing.StartSelection(); +} +IMPL_LINK(TextCharacterSpacingControl, VSSelHdl, void *, pControl) +{ + mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; + + if(pControl == &maVSSpacing) + { + sal_uInt16 iPos = maVSSpacing.GetSelectItemId(); + short nKern = 0; + SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric(); + long nVal = 0; + if(iPos == 1) + { + nVal = LogicToLogic(30, MAP_POINT, (MapUnit)eUnit); + nKern = (short)maEditKerning.Denormalize(nVal); + SvxKerningItem aKernItem(-nKern, SID_ATTR_CHAR_KERNING); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); + mrTextPropertyPanel.SetSpacing(-nKern); + mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; + } + else if(iPos == 2) + { + nVal = LogicToLogic(15, MAP_POINT, (MapUnit)eUnit); + nKern = (short)maEditKerning.Denormalize(nVal); + SvxKerningItem aKernItem(-nKern, SID_ATTR_CHAR_KERNING); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); + mrTextPropertyPanel.SetSpacing(-nKern); + mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; + } + else if(iPos == 3) + { + SvxKerningItem aKernItem(0, SID_ATTR_CHAR_KERNING); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); + mrTextPropertyPanel.SetSpacing(0); + mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; + } + else if(iPos == 4) + { + nVal = LogicToLogic(30, MAP_POINT, (MapUnit)eUnit); + nKern = (short)maEditKerning.Denormalize(nVal); + SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); + mrTextPropertyPanel.SetSpacing(nKern); + mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; + } + else if(iPos == 5) + { + nVal = LogicToLogic(60, MAP_POINT, (MapUnit)eUnit); + nKern = (short)maEditKerning.Denormalize(nVal); + SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); + mrTextPropertyPanel.SetSpacing(nKern); + mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; + } + else if(iPos == 6) + { + //modified + if(mbCusEnable) + { + nVal = LogicToLogic(mnCustomKern, MAP_POINT, (MapUnit)eUnit); + nKern = (short)maEditKerning.Denormalize(nVal); + SvxKerningItem aKernItem(nKern , SID_ATTR_CHAR_KERNING); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); + mrTextPropertyPanel.SetSpacing(nKern); + mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; + } + else + { + maVSSpacing.SetNoSelection(); //add , set no selection and keep the last select item + maVSSpacing.Format(); + Invalidate(); + maVSSpacing.StartSelection(); + } + //modify end + } + + if(iPos < 6 || (iPos == 6 && mbCusEnable)) //add + mrTextPropertyPanel.EndSpacingPopupMode(); + } + + + + return 0; +} + +IMPL_LINK(TextCharacterSpacingControl, KerningSelectHdl, ListBox*, EMPTYARG) +{ + if ( maLBKerning.GetSelectEntryPos() > 0 ) + { + maFTBy.Enable(); + maEditKerning.Enable(); + } + else + { + maEditKerning.SetValue( 0 ); + maFTBy.Disable(); + maEditKerning.Disable(); + } + + if ( maVSSpacing.GetSelectItemId() > 0 ) + { + maVSSpacing.SetNoSelection(); + maVSSpacing.SelectItem(0); + maVSSpacing.Format(); + Invalidate(); + maVSSpacing.StartSelection(); + } + KerningModifyHdl( NULL ); + return 0; +} +IMPL_LINK(TextCharacterSpacingControl, KerningModifyHdl, MetricField*, EMPTYARG) +{ + if ( maVSSpacing.GetSelectItemId() > 0 ) + { + maVSSpacing.SetNoSelection(); + maVSSpacing.SelectItem(0); + maVSSpacing.Format(); + Invalidate(); + maVSSpacing.StartSelection(); + } + sal_uInt16 nPos = maLBKerning.GetSelectEntryPos(); + short nKern = 0; + SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric(); + mnLastCus = SPACING_CLOSE_BY_CUS_EDIT; + if ( nPos == SIDEBAR_SPACE_EXPAND || nPos == SIDEBAR_SPACE_CONDENSED ) + { + long nTmp = static_cast<long>(maEditKerning.GetValue()); + if ( nPos == SIDEBAR_SPACE_CONDENSED ) + { + long nMax = mrTextPropertyPanel.GetSelFontSize()/6; + maEditKerning.SetMax( maEditKerning.Normalize( nMax ), FUNIT_TWIP ); + maEditKerning.SetLast( maEditKerning.GetMax( maEditKerning.GetUnit() ) ); + if(nTmp > maEditKerning.GetMax()) + nTmp = maEditKerning.GetMax(); + mnCustomKern = -nTmp; + long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit ); + nKern = (short)maEditKerning.Denormalize( nVal ); + nKern *= - 1; + } + else + { + maEditKerning.SetMax( 9999 ); + maEditKerning.SetLast( 9999 ); + if(nTmp > maEditKerning.GetMax(FUNIT_TWIP)) + nTmp = maEditKerning.GetMax(FUNIT_TWIP); + mnCustomKern = nTmp; + long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit ); + nKern = (short)maEditKerning.Denormalize( nVal ); + } + } + else + { + mnCustomKern = 0; + } + SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); + mrTextPropertyPanel.SetSpacing(nKern); + return 0; +} +short TextCharacterSpacingControl::GetLastCustomState() +{ + return mnLastCus; +} +long TextCharacterSpacingControl::GetLastCustomValue() +{ + return mnCustomKern; +} + +}} // end of namespace sidebar diff --git a/svx/source/sidebar/text/TextCharacterSpacingControl.hxx b/svx/source/sidebar/text/TextCharacterSpacingControl.hxx new file mode 100644 index 000000000000..df2f9eb7ced4 --- /dev/null +++ b/svx/source/sidebar/text/TextCharacterSpacingControl.hxx @@ -0,0 +1,96 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ +#ifndef _SVX_SIDEBAR_CHARACTER_SPACING_CONTROL_HXX_ +#define _SVX_SIDEBAR_CHARACTER_SPACING_CONTROL_HXX_ + +#include "svx/sidebar/PopupControl.hxx" +#include "svx/sidebar/ValueSetWithTextControl.hxx" +#include <sfx2/bindings.hxx> +#include <svtools/ctrlbox.hxx> +#include <svtools/ctrltool.hxx> +#include "TextPropertyPanel.hxx" +#include <vcl/fixed.hxx> + + +namespace svx { namespace sidebar { +#define SPACING_NOCUSTOM 0 +#define SPACING_CLOSE_BY_CLICK_ICON -1 +#define SPACING_CLOSE_BY_CUS_EDIT 1 + +#define SIDEBAR_SPACING_GLOBAL_VALUE String("PopupPanal_Spacing", 18, RTL_TEXTENCODING_ASCII_US) + +#define SIDEBAR_SPACE_NORMAL 0 +#define SIDEBAR_SPACE_EXPAND 1 +#define SIDEBAR_SPACE_CONDENSED 2 +class TextCharacterSpacingControl:public svx::sidebar::PopupControl +{ +public: + TextCharacterSpacingControl(Window* pParent, svx::sidebar::TextPropertyPanel& rPanel); + ~TextCharacterSpacingControl(); + void ToGetFocus(); + void Rearrange(bool bLBAvailable,bool bAvailable, long nKerning); + //virtual void Paint(const Rectangle& rect); + + //add + short GetLastCustomState(); + long GetLastCustomValue(); + //add end + +private: + svx::sidebar::TextPropertyPanel& mrTextPropertyPanel; + SfxBindings* mpBindings; + + ValueSetWithTextControl maVSSpacing; + + FixedText maLastCus; +// Control maBorder; + + FixedText maFTSpacing; + ListBox maLBKerning; + FixedText maFTBy; + MetricField maEditKerning; + + Image* mpImg; + Image* mpImgSel; + XubString* mpStr; + XubString* mpStrTip; + + Image maImgCus; + Image maImgCusGrey; + XubString maStrCus; + XubString maStrCusE; //add + XubString maStrCusC; //add + XubString maStrCusN; //add + XubString maStrUnit; //add + + long mnCustomKern; + short mnLastCus; + bool mbCusEnable; + bool mbVS; + + void initial(); + DECL_LINK(VSSelHdl, void*); + DECL_LINK(KerningSelectHdl, ListBox*); + DECL_LINK(KerningModifyHdl, MetricField*); +}; +}} + +#endif diff --git a/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx b/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx new file mode 100644 index 000000000000..4d44757b3749 --- /dev/null +++ b/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx @@ -0,0 +1,79 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "TextCharacterSpacingPopup.hxx" +#include "TextCharacterSpacingControl.hxx" +#include <boost/bind.hpp> +#include <unotools/viewoptions.hxx> + +namespace svx { namespace sidebar { + +TextCharacterSpacingPopup::TextCharacterSpacingPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Character Spacing"))) +{ + SetPopupModeEndHandler(::boost::bind(&TextCharacterSpacingPopup::PopupModeEndCallback, this)); +} + + + + +TextCharacterSpacingPopup::~TextCharacterSpacingPopup (void) +{ +} + + + + +void TextCharacterSpacingPopup::Rearrange (bool bLBAvailable,bool bAvailable, long nKerning) +{ + ProvideContainerAndControl(); + + TextCharacterSpacingControl* pControl = dynamic_cast<TextCharacterSpacingControl*>(mpControl.get()); + if (pControl != NULL) + pControl->Rearrange(bLBAvailable,bAvailable,nKerning); +} + +void TextCharacterSpacingPopup::PopupModeEndCallback (void) +{ + ProvideContainerAndControl(); + TextCharacterSpacingControl* pControl = dynamic_cast<TextCharacterSpacingControl*>(mpControl.get()); + if (pControl == NULL) + return; + + if( pControl->GetLastCustomState() == SPACING_CLOSE_BY_CUS_EDIT) + { + SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE ); + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Spacing") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt32( pControl->GetLastCustomValue() )); + aWinOpt.SetUserData( aSeq ); + + } +} + + +} } // end of namespace svx::sidebar + diff --git a/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx b/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx new file mode 100644 index 000000000000..7d02dab3d500 --- /dev/null +++ b/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx @@ -0,0 +1,48 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_CHARACTER_SPACING_POPUP_HXX_ +#define _SVX_SIDEBAR_CHARACTER_SPACING_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <boost/function.hpp> + +namespace svx { namespace sidebar { + +class TextCharacterSpacingPopup + : public Popup +{ +public : + TextCharacterSpacingPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + ~TextCharacterSpacingPopup (void); + + void Rearrange (bool bLBAvailable,bool bAvailable, long nKerning); +private: + void PopupModeEndCallback (void); +}; + +} } // end of namespace svx::sidebar + +#endif + diff --git a/svx/source/sidebar/text/TextPropertyPanel.cxx b/svx/source/sidebar/text/TextPropertyPanel.cxx new file mode 100644 index 000000000000..cf776324d26e --- /dev/null +++ b/svx/source/sidebar/text/TextPropertyPanel.cxx @@ -0,0 +1,1591 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include "TextPropertyPanel.hrc" +#include "TextPropertyPanel.hxx" +#include "SvxSBFontNameBox.hxx" + +#include "svx/dialmgr.hxx" + +#include <editeng/brshitem.hxx> +#include <editeng/colritem.hxx> +#include <editeng/crsditem.hxx> +#include <editeng/escpitem.hxx> +#include <editeng/flstitem.hxx> +#include <editeng/fontitem.hxx> +#include <editeng/kernitem.hxx> +#include <editeng/postitem.hxx> +#include <editeng/shdditem.hxx> +#include <editeng/udlnitem.hxx> +#include <editeng/wghtitem.hxx> +#include <rtl/ref.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/objsh.hxx> +#include <sfx2/viewsh.hxx> +#include <sfx2/sidebar/propertypanel.hrc> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <sfx2/sidebar/Theme.hxx> +#include "sfx2/imagemgr.hxx" +#include <svtools/ctrltool.hxx> +#include <svtools/unitconv.hxx> + +#include <vcl/gradient.hxx> +#include <vcl/svapp.hxx> +#include <vcl/toolbox.hxx> +#include "TextCharacterSpacingControl.hxx" +#include "TextCharacterSpacingPopup.hxx" +#include "TextUnderlineControl.hxx" +#include "TextUnderlinePopup.hxx" +#include <svx/sidebar/ColorControl.hxx> +#include <svx/sidebar/PopupContainer.hxx> + + +#include <boost/bind.hpp> + +using namespace css; +using namespace cssu; +using ::sfx2::sidebar::Theme; +using ::sfx2::sidebar::ControlFactory; + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +namespace svx { namespace sidebar { + +#undef HAS_IA2 + + +#define FONT_CONTROL_WIDTH 160 +#define SIZE_CONTROL_WIDTH 80 +#define CONTROL_COMBOX_HEIGHT 20 +#define CONTROL_HEIGHT_5X 120 + + +#define TEXT_SECTIONPAGE_HEIGHT_S SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + ( TOOLBOX_ITEM_HEIGHT + 2 ) + CONTROL_SPACING_VERTICAL * 1 + SECTIONPAGE_MARGIN_VERTICAL_BOT +#define TEXT_SECTIONPAGE_HEIGHT SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + ( TOOLBOX_ITEM_HEIGHT + 2 ) * 2 + CONTROL_SPACING_VERTICAL * 2 + SECTIONPAGE_MARGIN_VERTICAL_BOT + +// + +//end +PopupControl* TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent) +{ + return new TextCharacterSpacingControl(pParent, *this); +} + +PopupControl* TextPropertyPanel::CreateUnderlinePopupControl (PopupContainer* pParent) +{ + return new TextUnderlineControl(pParent, *this); +} + +PopupControl* TextPropertyPanel::CreateFontColorPopupControl (PopupContainer* pParent) +{ + return new ColorControl( + pParent, + mpBindings, + SVX_RES(RID_POPUPPANEL_TEXTPAGE_FONT_COLOR), + SVX_RES(VS_FONT_COLOR), + ::boost::bind(&TextPropertyPanel::GetFontColor, this), + ::boost::bind(&TextPropertyPanel::SetFontColor, this, _1,_2), + pParent, + 0); +} + +PopupControl* TextPropertyPanel::CreateBrushColorPopupControl (PopupContainer* pParent) +{ + return new ColorControl( + pParent, + mpBindings, + SVX_RES(RID_POPUPPANEL_TEXTPAGE_FONT_COLOR), + SVX_RES(VS_FONT_COLOR), + ::boost::bind(&TextPropertyPanel::GetBrushColor, this), + ::boost::bind(&TextPropertyPanel::SetBrushColor, this, _1,_2), + pParent, + 0); +} + +long TextPropertyPanel::GetSelFontSize() +{ + long nH = 240; + SfxMapUnit eUnit = maSpacingControl.GetCoreMetric(); + if (mpHeightItem) + nH = LogicToLogic( mpHeightItem->GetHeight(), (MapUnit)eUnit, MAP_TWIP ); + return nH; +} + + +TextPropertyPanel* TextPropertyPanel::Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) +{ + if (pParent == NULL) + throw lang::IllegalArgumentException(A2S("no parent Window given to TextPropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw lang::IllegalArgumentException(A2S("no XFrame given to TextPropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw lang::IllegalArgumentException(A2S("no SfxBindings given to TextPropertyPanel::Create"), NULL, 2); + + return new TextPropertyPanel( + pParent, + rxFrame, + pBindings, + rxSidebar); +} + + +::sfx2::sidebar::ControllerItem& TextPropertyPanel::GetSpaceController() +{ + return maSpacingControl; +} + +TextPropertyPanel::TextPropertyPanel ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar) + : Control(pParent, SVX_RES(RID_SIDEBAR_TEXT_PANEL)), + mpFontNameBox (new SvxSBFontNameBox(this, SVX_RES(CB_SBFONT_FONT))), + maFontSizeBox (this, SVX_RES(MB_SBFONT_FONTSIZE)), + mpToolBoxIncDecBackground(ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxIncDec(ControlFactory::CreateToolBox( + mpToolBoxIncDecBackground.get(), + SVX_RES(TB_INCREASE_DECREASE))), + mpToolBoxFontBackground(ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxFont(ControlFactory::CreateToolBox( + mpToolBoxFontBackground.get(), + SVX_RES(TB_FONT))), + mpToolBoxFontColorBackground(ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxFontColor(ControlFactory::CreateToolBox( + mpToolBoxFontColorBackground.get(), + SVX_RES(TB_FONTCOLOR))), + mpToolBoxScriptBackground(ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxScript(ControlFactory::CreateToolBox( + mpToolBoxScriptBackground.get(), + SVX_RES(TB_SCRIPT))), + mpToolBoxScriptSwBackground(ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxScriptSw(ControlFactory::CreateToolBox( + mpToolBoxScriptSwBackground.get(), + SVX_RES(TB_SCRIPT_SW))), + mpToolBoxSpacingBackground(ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxSpacing(ControlFactory::CreateToolBox( + mpToolBoxSpacingBackground.get(), + SVX_RES(TB_SPACING))), + mpToolBoxHighlightBackground(ControlFactory::CreateToolBoxBackground(this)), + mpToolBoxHighlight(ControlFactory::CreateToolBox( + mpToolBoxHighlightBackground.get(), + SVX_RES(TB_HIGHLIGHT))), + maCharSpacePopup(this, ::boost::bind(&TextPropertyPanel::CreateCharacterSpacingControl, this, _1)), + maFontColorPopup(this, ::boost::bind(&TextPropertyPanel::CreateFontColorPopupControl, this, _1)), + maBrushColorPopup(this, ::boost::bind(&TextPropertyPanel::CreateBrushColorPopupControl, this, _1)), + maUnderlinePopup(this, ::boost::bind(&TextPropertyPanel::CreateUnderlinePopupControl, this, _1)), + mpFontColorUpdater(), + mpHighlightUpdater(), + + maFontNameControl (SID_ATTR_CHAR_FONT, *pBindings, *this), + maFontSizeControl (SID_ATTR_CHAR_FONTHEIGHT, *pBindings, *this), + maWeightControl (SID_ATTR_CHAR_WEIGHT, *pBindings, *this), + maItalicControl (SID_ATTR_CHAR_POSTURE, *pBindings, *this), + maUnderlineControl (SID_ATTR_CHAR_UNDERLINE, *pBindings, *this), + maStrikeControl (SID_ATTR_CHAR_STRIKEOUT, *pBindings, *this), + maShadowControl (SID_ATTR_CHAR_SHADOWED, *pBindings, *this), + maFontColorControl (SID_ATTR_CHAR_COLOR, *pBindings, *this), + maScriptControlSw (SID_ATTR_CHAR_ESCAPEMENT, *pBindings, *this), //for sw + maSuperScriptControl (SID_SET_SUPER_SCRIPT, *pBindings, *this), + maSubScriptControl (SID_SET_SUB_SCRIPT, *pBindings, *this), + maSpacingControl (SID_ATTR_CHAR_KERNING, *pBindings, *this), + maHighlightControl (SID_ATTR_BRUSH_CHAR, *pBindings, *this), + maSDFontGrow (SID_GROW_FONT_SIZE, *pBindings, *this), + maSDFontShrink (SID_SHRINK_FONT_SIZE, *pBindings, *this), + + maImgIncrease (SVX_RES( IMG_INCREASE)), + maImgDecrease (SVX_RES( IMG_DECREASE)), + maImgBold (SVX_RES( IMG_BOLD )), + maImgItalic (SVX_RES( IMG_ITALIC )), + maImgUnderline (SVX_RES( IMG_UNDERLINE )), + maImgStrike (SVX_RES( IMG_STRIKEOUT )), + maImgShadow (SVX_RES( IMG_SHADOWED )), + maImgFontColor (SVX_RES( IMG_FONTCOLOR)), + maImgSupScript (SVX_RES( IMG_SUPSCRIPT)), + maImgSubScript (SVX_RES( IMG_SUBSCRIPT)), + maImgHighlight (SVX_RES( IMG_HIGHLIGHT)), + + maImgNormalIcon (SVX_RES(IMG_SPACING_D)), + + maImgIncreaseHigh (SVX_RES( IMG_INCREASE_H )), + maImgDecreaseHigh (SVX_RES( IMG_DECREASE_H )), + maImgBoldHigh (SVX_RES( IMG_BOLD_H )), + maImgItalicHigh (SVX_RES( IMG_ITALIC_H )), + maImgUnderlineHigh (SVX_RES( IMG_UNDERLINE_H )), + maImgStrikeHigh (SVX_RES( IMG_STRIKEOUT_H )), + maImgShadowHigh (SVX_RES( IMG_SHADOWED_H )), + maImgFontColorHigh (SVX_RES( IMG_FONTCOLOR_H)), + maImgSupScriptHigh (SVX_RES( IMG_SUPSCRIPT_H)), + maImgSubScriptHigh (SVX_RES( IMG_SUBSCRIPT_H)), + maImgHighlightHigh (SVX_RES( IMG_HIGHLIGHT_H)), + + mpFontList (NULL), + mbMustDelete (false), + mbFocusOnFontSizeCtrl(false), + mxFrame(rxFrame), + maContext(), + mpBindings(pBindings), + mxSidebar(rxSidebar) +{ + Initialize(); + FreeResource(); +} + + + + +TextPropertyPanel::~TextPropertyPanel (void) +{ + if(mbMustDelete) + delete mpFontList; + + // Destroy the toolbox windows. + mpToolBoxIncDec.reset(); + mpToolBoxFont.reset(); + mpToolBoxFontColor.reset(); + mpToolBoxScript.reset(); + mpToolBoxScriptSw.reset(); + mpToolBoxSpacing.reset(); + mpToolBoxHighlight.reset(); + + // Destroy the background windows of the toolboxes. + mpToolBoxIncDecBackground.reset(); + mpToolBoxFontBackground.reset(); + mpToolBoxFontColorBackground.reset(); + mpToolBoxScriptBackground.reset(); + mpToolBoxScriptSwBackground.reset(); + mpToolBoxSpacingBackground.reset(); + mpToolBoxHighlightBackground.reset(); +} + + + + +Image TextPropertyPanel::GetIcon (const ::rtl::OUString& rsURL) +{ + return GetImage(mxFrame, rsURL, sal_False, Theme::IsHighContrastMode()); +} + + +void TextPropertyPanel::SetSpacing(long nKern) +{ + mlKerning = nKern; +} + + +void TextPropertyPanel::HandleContextChange ( + const ::sfx2::sidebar::EnumContext aContext) +{ + if (maContext == aContext) + { + // Nothing to do. + return; + } + + maContext = aContext; + switch (maContext.GetCombinedContext_DI()) + { + case CombinedEnumContext(Application_Calc, Context_Cell): + case CombinedEnumContext(Application_Calc, Context_Pivot): + { + mpToolBoxScript->Hide(); + mpToolBoxScriptSw->Hide(); + mpToolBoxSpacing->Hide(); + mpToolBoxHighlight->Hide(); + + Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT_S); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + aSize.setWidth(GetOutputSizePixel().Width()); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + break; + } + + case CombinedEnumContext(Application_WriterAndWeb, Context_Text): + case CombinedEnumContext(Application_WriterAndWeb, Context_Table): + { + mpToolBoxScriptSw->Show(); + mpToolBoxScript->Hide(); + mpToolBoxHighlight->Show(); + mpToolBoxSpacing->Show(); + + Size aSize(PROPERTYPAGE_WIDTH, TEXT_SECTIONPAGE_HEIGHT); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + aSize.setWidth(GetOutputSizePixel().Width()); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + break; + } + + case CombinedEnumContext(Application_Writer, Context_DrawText): + case CombinedEnumContext(Application_Writer, Context_Annotation): + { + mpToolBoxScriptSw->Show(); + mpToolBoxScript->Hide(); + mpToolBoxSpacing->Show(); + mpToolBoxHighlight->Hide(); + + Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT); + aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); + aSize.setWidth(GetOutputSizePixel().Width()); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + break; + } + + case CombinedEnumContext(Application_Calc, Context_EditCell): + case CombinedEnumContext(Application_Calc, Context_DrawText): + case CombinedEnumContext(Application_DrawImpress, Context_DrawText): + case CombinedEnumContext(Application_DrawImpress, Context_Text): + case CombinedEnumContext(Application_DrawImpress, Context_Table): + case CombinedEnumContext(Application_DrawImpress, Context_OutlineText): + case CombinedEnumContext(Application_DrawImpress, Context_Draw): + case CombinedEnumContext(Application_DrawImpress, Context_TextObject): + case CombinedEnumContext(Application_DrawImpress, Context_Graphic): + { + mpToolBoxScriptSw->Hide(); + mpToolBoxScript->Show(); + mpToolBoxSpacing->Show(); + mpToolBoxHighlight->Hide(); + + Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT); + aSize = LogicToPixel( aSize,MapMode(MAP_APPFONT) ); + aSize.setWidth(GetOutputSizePixel().Width()); + SetSizePixel(aSize); + if (mxSidebar.is()) + mxSidebar->requestLayout(); + break; + } + + default: + break; + } +} + +SfxBindings* TextPropertyPanel::GetBindings() +{ + return mpBindings; +} + + +void TextPropertyPanel::DataChanged (const DataChangedEvent& rEvent) +{ + (void)rEvent; + + SetupIcons(); +} + + + +void TextPropertyPanel::Initialize (void) +{ + //<<modify fill font list + SfxObjectShell* pDocSh = SfxObjectShell::Current(); + const SfxPoolItem* pItem = NULL; + + if (pDocSh != NULL) + pItem = pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST ); + if (pItem != NULL) + mpFontList = ( (SvxFontListItem*)pItem )->GetFontList(); + else + { + mpFontList = new FontList( Application::GetDefaultDevice() ); + mbMustDelete = 1; + } + + mpFontNameBox->SetAccessibleName(mpFontNameBox->GetQuickHelpText()); + const FontInfo aFontInfo (mpFontList->Get( String::CreateFromAscii( "" ), String::CreateFromAscii( "" ))); + maFontSizeBox.Fill(&aFontInfo,mpFontList); + maFontSizeBox.SetAccessibleName(maFontSizeBox.GetQuickHelpText()); + + //toolbox + SetupIcons(); + InitToolBoxIncDec(); + InitToolBoxFont(); + InitToolBoxFontColor(); + InitToolBoxScript(); + InitToolBoxSpacing(); + InitToolBoxHighlight(); + +#ifdef HAS_IA2 + mpFontNameBox->SetAccRelationLabeledBy(&mpFontNameBox); + mpFontNameBox->SetMpSubEditAccLableBy(&mpFontNameBox); + maFontSizeBox.SetAccRelationLabeledBy(&maFontSizeBox); + maFontSizeBox.SetMpSubEditAccLableBy(&maFontSizeBox); + mpToolBoxFont.SetAccRelationLabeledBy(&mpToolBoxFont); + mpToolBoxIncDec.SetAccRelationLabeledBy(&mpToolBoxIncDec); + mpToolBoxFontColor.SetAccRelationLabeledBy(&mpToolBoxFontColor); + mpToolBoxScript.SetAccRelationLabeledBy(&mpToolBoxScript); + mpToolBoxScriptSw.SetAccRelationLabeledBy(&mpToolBoxScriptSw); + mpToolBoxSpacing.SetAccRelationLabeledBy(&mpToolBoxSpacing); + mpToolBoxHighlight.SetAccRelationLabeledBy(&mpToolBoxHighlight); +#endif + + //init state + mpHeightItem = NULL; + meWeight = WEIGHT_NORMAL; + meItalic = ITALIC_NONE; + mbShadow = false; + meStrike = STRIKEOUT_NONE; + mbPostureAvailable = true; + mbWeightAvailable = true; + meUnderline = UNDERLINE_NONE; + meUnderlineColor = COL_AUTO; // + maColor = COL_BLACK; + mbColorAvailable = true; + maBackColor = COL_AUTO; + mbBackColorAvailable = true; + meColorType = FONT_COLOR; + meEscape = SVX_ESCAPEMENT_OFF; + mbSuper = false; + mbSub = false; + mbKernAvailable = true; + mbKernLBAvailable = true; + mlKerning = 0; + mpFontColorUpdater.reset(new ToolboxButtonColorUpdater( + SID_ATTR_CHAR_COLOR, + TBI_FONTCOLOR, + mpToolBoxFontColor.get(), + TBX_UPDATER_MODE_CHAR_COLOR_NEW)); + mpHighlightUpdater.reset(new ToolboxButtonColorUpdater( + SID_ATTR_BRUSH_CHAR, + TBI_HIGHLIGHT, + mpToolBoxHighlight.get(), + TBX_UPDATER_MODE_CHAR_COLOR_NEW)); + + //set handler + mpFontNameBox->SetBindings(mpBindings); + //add + Link aLink = LINK(this, TextPropertyPanel, FontSelHdl); + mpFontNameBox->SetSelectHdl(aLink); + //add end + + aLink = LINK(this, TextPropertyPanel, FontSizeModifyHdl); + maFontSizeBox.SetModifyHdl(aLink); + //add + aLink = LINK(this, TextPropertyPanel, FontSizeSelHdl); + maFontSizeBox.SetSelectHdl(aLink); + //add end + aLink = LINK(this, TextPropertyPanel, FontSizeLoseFocus); + maFontSizeBox.SetLoseFocusHdl(aLink); + + // add + long aSizeBoxHeight = maFontSizeBox.GetSizePixel().getHeight();; + Point aPosFontSize = maFontSizeBox.GetPosPixel(); + long aPosY = aPosFontSize.getY(); + Point pTBIncDec = mpToolBoxIncDec->GetPosPixel(); + long aIncDecHeight = mpToolBoxIncDec->GetSizePixel().getHeight(); + pTBIncDec.setY(aPosY+aSizeBoxHeight/2-aIncDecHeight/2); + mpToolBoxIncDec->SetPosPixel(pTBIncDec); + //end +} + +void TextPropertyPanel::EndSpacingPopupMode (void) +{ + maCharSpacePopup.Hide(); +} + +void TextPropertyPanel::EndUnderlinePopupMode (void) +{ + maUnderlinePopup.Hide(); +} + + +void TextPropertyPanel::InitToolBoxFont() +{ + mpToolBoxFont->SetQuickHelpText(TBI_BOLD,String(SVX_RES(STR_QH_BOLD))); //Add + mpToolBoxFont->SetQuickHelpText(TBI_ITALIC,String(SVX_RES(STR_QH_ITALIC))); //Add + mpToolBoxFont->SetQuickHelpText(TBI_UNDERLINE,String(SVX_RES(STR_QH_UNDERLINE))); //Add + mpToolBoxFont->SetBackground(Wallpaper()); + mpToolBoxFont->SetPaintTransparent(true); + + Size aTbxSize( mpToolBoxFont->CalcWindowSizePixel() ); + mpToolBoxFont->SetOutputSizePixel( aTbxSize ); + + Link aLink = LINK(this, TextPropertyPanel, ToolboxFontSelectHandler); + mpToolBoxFont->SetSelectHdl ( aLink ); + aLink = LINK(this, TextPropertyPanel, ToolBoxUnderlineClickHdl); + mpToolBoxFont->SetDropdownClickHdl(aLink); +} + + + + +void TextPropertyPanel::InitToolBoxIncDec() +{ + Size aTbxSize( mpToolBoxIncDec->CalcWindowSizePixel() ); + mpToolBoxIncDec->SetOutputSizePixel( aTbxSize ); + + Link aLink = LINK(this, TextPropertyPanel, ToolboxIncDecSelectHdl); + mpToolBoxIncDec->SetSelectHdl ( aLink ); +} + + + + +void TextPropertyPanel::InitToolBoxFontColor() +{ + Size aTbxSize( mpToolBoxFontColor->CalcWindowSizePixel() ); + mpToolBoxFontColor->SetOutputSizePixel( aTbxSize ); + mpToolBoxFontColor->SetItemBits( TBI_FONTCOLOR, mpToolBoxFontColor->GetItemBits( TBI_FONTCOLOR ) | TIB_DROPDOWNONLY ); + + Link aLink = LINK(this, TextPropertyPanel, ToolBoxFontColorDropHdl); + mpToolBoxFontColor->SetDropdownClickHdl ( aLink ); + mpToolBoxFontColor->SetSelectHdl ( aLink ); + +} +void TextPropertyPanel::InitToolBoxScript() +{ + Size aTbxSize( mpToolBoxScriptSw->CalcWindowSizePixel() ); + mpToolBoxScriptSw->SetOutputSizePixel( aTbxSize ); + + Link aLink = LINK(this, TextPropertyPanel, ToolBoxSwScriptSelectHdl); + mpToolBoxScriptSw->SetSelectHdl ( aLink ); + + aTbxSize = mpToolBoxScript->CalcWindowSizePixel() ; + mpToolBoxScript->SetOutputSizePixel( aTbxSize ); + + aLink = LINK(this, TextPropertyPanel, ToolBoxScriptSelectHdl); + mpToolBoxScript->SetSelectHdl ( aLink ); +} +void TextPropertyPanel::InitToolBoxSpacing() +{ + Size aTbxSize( mpToolBoxSpacing->CalcWindowSizePixel() ); + mpToolBoxSpacing->SetOutputSizePixel( aTbxSize ); + mpToolBoxSpacing->SetItemBits( TBI_SPACING, mpToolBoxSpacing->GetItemBits( TBI_SPACING ) | TIB_DROPDOWNONLY ); + + Link aLink = LINK(this, TextPropertyPanel, SpacingClickHdl); + mpToolBoxSpacing->SetDropdownClickHdl ( aLink ); + mpToolBoxSpacing->SetSelectHdl( aLink ); +} +void TextPropertyPanel::InitToolBoxHighlight() +{ + Size aTbxSize( mpToolBoxHighlight->CalcWindowSizePixel() ); + mpToolBoxHighlight->SetOutputSizePixel( aTbxSize ); + mpToolBoxHighlight->SetItemBits( TBI_HIGHLIGHT, mpToolBoxHighlight->GetItemBits( TBI_HIGHLIGHT ) | TIB_DROPDOWNONLY ); + + Link aLink = LINK(this, TextPropertyPanel, ToolBoxHighlightDropHdl); + mpToolBoxHighlight->SetDropdownClickHdl ( aLink ); + mpToolBoxHighlight->SetSelectHdl( aLink ); +} + + + + +void TextPropertyPanel::SetupIcons (void) +{ + if (Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) + { + mpToolBoxIncDec->SetItemImage(TBI_INCREASE, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgIncreaseHigh : maImgIncrease); + mpToolBoxIncDec->SetItemImage(TBI_DECREASE, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgDecreaseHigh : maImgDecrease); + mpToolBoxFont->SetItemImage(TBI_BOLD, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgBoldHigh : maImgBold); + mpToolBoxFont->SetItemImage(TBI_ITALIC, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgItalicHigh : maImgItalic); + mpToolBoxFont->SetItemImage(TBI_UNDERLINE, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgUnderlineHigh : maImgUnderline); + mpToolBoxFont->SetItemImage(TBI_STRIKEOUT, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgStrikeHigh : maImgStrike); + mpToolBoxFont->SetItemImage(TBI_SHADOWED, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgShadowHigh : maImgShadow); + + mpToolBoxFontColor->SetItemImage(TBI_FONTCOLOR, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgFontColorHigh : maImgFontColor); + //for sw + mpToolBoxScriptSw->SetItemImage(TBI_SUPER_SW, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSupScriptHigh : maImgSupScript); + mpToolBoxScriptSw->SetItemImage(TBI_SUB_SW, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSubScriptHigh : maImgSubScript); + //for sc and sd + mpToolBoxScript->SetItemImage(TBI_SUPER, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSupScriptHigh : maImgSupScript); + mpToolBoxScript->SetItemImage(TBI_SUB, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSubScriptHigh : maImgSubScript); + mpToolBoxSpacing->SetItemImage(TBI_SPACING, maImgNormalIcon); + mpToolBoxHighlight->SetItemImage(TBI_HIGHLIGHT, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgHighlightHigh : maImgHighlight); + } + else + { + mpToolBoxIncDec->SetItemImage(TBI_INCREASE, GetIcon(A2S(".uno:Grow"))); + mpToolBoxIncDec->SetItemImage(TBI_DECREASE, GetIcon(A2S(".uno:Shrink"))); + mpToolBoxFont->SetItemImage(TBI_BOLD, GetIcon(A2S(".uno:Bold"))); + mpToolBoxFont->SetItemImage(TBI_ITALIC, GetIcon(A2S(".uno:Italic"))); + mpToolBoxFont->SetItemImage(TBI_UNDERLINE, GetIcon(A2S(".uno:Underline"))); + mpToolBoxFont->SetItemImage(TBI_STRIKEOUT, GetIcon(A2S(".uno:Strikeout"))); + mpToolBoxFont->SetItemImage(TBI_SHADOWED, GetIcon(A2S(".uno:Shadowed"))); + + mpToolBoxFontColor->SetItemImage(TBI_FONTCOLOR, GetIcon(A2S(".uno:FontColor"))); + //for sw + mpToolBoxScriptSw->SetItemImage(TBI_SUPER_SW, GetIcon(A2S(".uno:SuperScript"))); + mpToolBoxScriptSw->SetItemImage(TBI_SUB_SW, GetIcon(A2S(".uno:SubScript"))); + //for sc and sd + mpToolBoxScript->SetItemImage(TBI_SUPER, GetIcon(A2S(".uno:SuperScript"))); + mpToolBoxScript->SetItemImage(TBI_SUB, GetIcon(A2S(".uno:SubScript"))); + mpToolBoxSpacing->SetItemImage(TBI_SPACING, GetIcon(A2S(".uno:FontworkCharacterSpacingFloater"))); + mpToolBoxHighlight->SetItemImage(TBI_HIGHLIGHT, GetIcon(A2S(".uno:BackColor"))); + } +} + + + + +IMPL_LINK( TextPropertyPanel, FontSelHdl, FontNameBox*, pBox ) +{ + if ( !pBox->IsTravelSelect() ) + { + if( SfxViewShell::Current() ) + { + Window* pShellWnd = SfxViewShell::Current()->GetWindow(); + + if ( pShellWnd ) + pShellWnd->GrabFocus(); + } + } + return 0; +} +//add end +IMPL_LINK( TextPropertyPanel, FontSizeModifyHdl, FontSizeBox*, pSizeBox ) +{ + if (pSizeBox == &maFontSizeBox) + { + long nSize = pSizeBox->GetValue(); + mbFocusOnFontSizeCtrl = true; + + float fSize = (float)nSize / 10; + SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric(); + SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ; + + mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L ); + mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false); + } + return 0; +} +//add +IMPL_LINK( TextPropertyPanel, FontSizeSelHdl, FontSizeBox*, pSizeBox ) +{ + if ( !pSizeBox->IsTravelSelect() ) + { + if( SfxViewShell::Current() ) + { + Window* pShellWnd = SfxViewShell::Current()->GetWindow(); + + if ( pShellWnd ) + pShellWnd->GrabFocus(); + } + } + + return 0; +} +//add end +IMPL_LINK(TextPropertyPanel, FontSizeLoseFocus, FontSizeBox*, pSizeBox) +{ + if(pSizeBox == &maFontSizeBox) + { + mbFocusOnFontSizeCtrl = false; + } + return 0; +} + +IMPL_LINK(TextPropertyPanel, ToolboxFontSelectHandler, ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + + //Bold + if(nId == TBI_BOLD) + { + EndTracking(); + if(meWeight != WEIGHT_BOLD) + meWeight = WEIGHT_BOLD; + else + meWeight = WEIGHT_NORMAL; + SvxWeightItem aWeightItem(meWeight, SID_ATTR_CHAR_WEIGHT); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_WEIGHT, SFX_CALLMODE_RECORD, &aWeightItem, 0L); + UpdateFontBold(); + } + //Italic + else if(nId == TBI_ITALIC) + { + EndTracking(); + if(meItalic != ITALIC_NORMAL) + meItalic = ITALIC_NORMAL; + else + meItalic = ITALIC_NONE; + SvxPostureItem aPostureItem(meItalic, SID_ATTR_CHAR_POSTURE); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_POSTURE, SFX_CALLMODE_RECORD, &aPostureItem, 0L); + UpdateFontItalic(); + } + //underline + else if(nId == TBI_UNDERLINE) + { + EndTracking(); + //add , keep underline's color + if(meUnderline == UNDERLINE_NONE) + { + //AF: meUnderline = GetDefaultUnderline(); + meUnderline = UNDERLINE_SINGLE; + //<<modify + //SvxTextLineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE); + SvxUnderlineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE); + //modify end>> + aLineItem.SetColor(meUnderlineColor); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L); + } + else + { + meUnderline = UNDERLINE_NONE; + //<<modify + //SvxTextLineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE); + SvxUnderlineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE); + //modify end>> + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L); + } + UpdateFontUnderline(); + //add end + } + //strike out + else if(nId == TBI_STRIKEOUT) + { + EndTracking(); + if(meStrike != STRIKEOUT_NONE && meStrike != STRIKEOUT_DONTKNOW) + meStrike = STRIKEOUT_NONE; + else + meStrike = STRIKEOUT_SINGLE; + SvxCrossedOutItem aStrikeItem(meStrike,SID_ATTR_CHAR_STRIKEOUT); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_STRIKEOUT, SFX_CALLMODE_RECORD, &aStrikeItem, 0L); + UpdateFontStrikeOut(); + } + //shadowed + else if(nId == TBI_SHADOWED) + { + EndTracking(); + mbShadow = !mbShadow; + SvxShadowedItem aShadowItem(mbShadow, SID_ATTR_CHAR_SHADOWED); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_SHADOWED, SFX_CALLMODE_RECORD, &aShadowItem, 0L); + UpdateFontShadowed(); + } + return 0; +} + + + + +IMPL_LINK(TextPropertyPanel, ToolboxIncDecSelectHdl, ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + + // font size +/- enhancement in sd + switch (maContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Draw, Context_DrawText): + case CombinedEnumContext(Application_Draw, Context_Text): + case CombinedEnumContext(Application_Draw, Context_Table): + case CombinedEnumContext(Application_Draw, Context_OutlineText): + case CombinedEnumContext(Application_Draw, Context_Draw): + case CombinedEnumContext(Application_Draw, Context_TextObject): + case CombinedEnumContext(Application_Draw, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_DrawText): + case CombinedEnumContext(Application_Impress, Context_Text): + case CombinedEnumContext(Application_Impress, Context_Table): + case CombinedEnumContext(Application_Impress, Context_OutlineText): + case CombinedEnumContext(Application_Impress, Context_Draw): + case CombinedEnumContext(Application_Impress, Context_TextObject): + case CombinedEnumContext(Application_Impress, Context_Graphic): + if(nId == TBI_INCREASE) + { + EndTracking(); + SfxVoidItem aItem(SID_GROW_FONT_SIZE); + mpBindings->GetDispatcher()->Execute( SID_GROW_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L ); + } + else if(nId == TBI_DECREASE) + { + EndTracking(); + SfxVoidItem aItem(SID_SHRINK_FONT_SIZE); + mpBindings->GetDispatcher()->Execute( SID_SHRINK_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L ); + } + break; + + default: + if(nId == TBI_INCREASE) + { + EndTracking(); + mbFocusOnFontSizeCtrl = false; + sal_Int64 iValue = maFontSizeBox.GetValue(); + int iPos = maFontSizeBox.GetValuePos(iValue, FUNIT_NONE); + long nSize = iValue; + if(iPos != LISTBOX_ENTRY_NOTFOUND) + nSize = maFontSizeBox.GetValue(iPos+1 , FUNIT_NONE); + else if(iValue >= 100 && iValue < 105) + nSize = 105; + else if(iValue >= 105 && iValue < 110) + nSize = 110; + else if(iValue < 960) + { + nSize = (nSize / 10) * 10 + 10; + while(maFontSizeBox.GetValuePos(nSize, FUNIT_NONE) == LISTBOX_ENTRY_NOTFOUND) + nSize += 10; + } + else + { + nSize = iValue; + } + + float fSize = (float)nSize / 10; + + SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric(); + SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ; + + mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L ); + mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false); + //add , update ASAP + maFontSizeBox.SetValue( nSize ); + if(nSize >= 960) + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,false); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,true); + } + else if(nSize <= 60) + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,true); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,false); + } + else + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,true); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,true); + } + //add end + } + else if(nId == TBI_DECREASE) + { + EndTracking(); + mbFocusOnFontSizeCtrl = false; + sal_Int64 iValue = maFontSizeBox.GetValue(); + int iPos = maFontSizeBox.GetValuePos(iValue, FUNIT_NONE); + long nSize = iValue; + if(iPos != LISTBOX_ENTRY_NOTFOUND) + nSize = maFontSizeBox.GetValue(iPos-1 , FUNIT_NONE); + else if(iValue > 100 && iValue <= 105) + nSize = 100; + else if(iValue > 105 && iValue <= 110) + nSize = 105; + else if(iValue > 960) + { + nSize = 960; + } + else if(iValue > 60) + { + nSize = (nSize / 10) * 10 ; + while(maFontSizeBox.GetValuePos(nSize, FUNIT_NONE) == LISTBOX_ENTRY_NOTFOUND) + nSize -= 10; + } + else + { + nSize = iValue; + } + + float fSize = (float)nSize / 10; + + SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric(); + SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ; + + mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L ); + mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false); + //add + maFontSizeBox.SetValue( nSize ); + if(nSize >= 960) + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,false); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,true); + } + else if(nSize <= 60) + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,true); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,false); + } + else + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,true); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,true); + } + //add end + } + } + return 0; +} + + + +IMPL_LINK(TextPropertyPanel, ToolBoxUnderlineClickHdl, ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + OSL_ASSERT(nId == TBI_UNDERLINE); + if(nId == TBI_UNDERLINE) + { + pToolBox->SetItemDown( nId, true ); + maUnderlinePopup.Rearrange(meUnderline); + maUnderlinePopup.Show(*pToolBox); + + } + return 0L; +} + + + + +IMPL_LINK(TextPropertyPanel, ToolBoxFontColorDropHdl,ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + if(nId == TBI_FONTCOLOR) + { + meColorType = FONT_COLOR; + + pToolBox->SetItemDown( nId, true ); + + maFontColorPopup.Show(*pToolBox); + maFontColorPopup.SetCurrentColor(maColor, mbColorAvailable); + } + return 0; +} + + + + +IMPL_LINK(TextPropertyPanel, ToolBoxSwScriptSelectHdl, ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + if( nId == TBI_SUPER_SW ) + { + if(meEscape != SVX_ESCAPEMENT_SUPERSCRIPT) + { + meEscape = SVX_ESCAPEMENT_SUPERSCRIPT; + SvxEscapementItem aSupItem(DFLT_ESC_SUPER, DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT); + mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aSupItem, 0L ); + } + else + { + meEscape = SVX_ESCAPEMENT_OFF; + SvxEscapementItem aNoneItem(0, 100, SID_ATTR_CHAR_ESCAPEMENT); + mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aNoneItem, 0L ); + } + } + else if(TBI_SUB_SW == nId) + { + if(meEscape != SVX_ESCAPEMENT_SUBSCRIPT) + { + meEscape = (SvxEscapement)SVX_ESCAPEMENT_SUBSCRIPT; + SvxEscapementItem aSubItem(DFLT_ESC_SUB, DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT); + mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aSubItem, 0L ); + } + else + { + meEscape = SVX_ESCAPEMENT_OFF; + SvxEscapementItem aNoneItem(0, 100, SID_ATTR_CHAR_ESCAPEMENT); + mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aNoneItem, 0L ); + } + } + UpdateFontScript(); + + return 0; +} + + + + +IMPL_LINK(TextPropertyPanel, ToolBoxScriptSelectHdl, ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + if( nId == TBI_SUPER ) + { + mbSuper = !mbSuper; + SfxBoolItem aSupItem(SID_SET_SUPER_SCRIPT, mbSuper); + mpBindings->GetDispatcher()->Execute( SID_SET_SUPER_SCRIPT, SFX_CALLMODE_RECORD, &aSupItem, 0L ); + } + else if(TBI_SUB == nId) + { + + mbSub = !mbSub; + SfxBoolItem aSubItem(SID_SET_SUB_SCRIPT, mbSub ); + mpBindings->GetDispatcher()->Execute( SID_SET_SUB_SCRIPT, SFX_CALLMODE_RECORD, &aSubItem, 0L ); + } + UpdateFontScript(); + return 0; +} + + + + +IMPL_LINK(TextPropertyPanel, ToolBoxHighlightDropHdl, ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + if(nId == TBI_HIGHLIGHT) + { + meColorType = BACK_COLOR; + + pToolBox->SetItemDown( nId, true ); + maBrushColorPopup.Show(*pToolBox); + maBrushColorPopup.SetCurrentColor(maBackColor, mbBackColorAvailable); + + } + return 0; +} + + + +IMPL_LINK(TextPropertyPanel, SpacingClickHdl, ToolBox*, pToolBox) +{ + const sal_uInt16 nId = pToolBox->GetCurItemId(); + OSL_ASSERT(nId == TBI_SPACING); + if(nId == TBI_SPACING) + { + pToolBox->SetItemDown( nId, true ); + maCharSpacePopup.Rearrange(mbKernLBAvailable,mbKernAvailable,mlKerning); + maCharSpacePopup.Show(*pToolBox); + + } + return 0L; +} + + + + +IMPL_LINK( TextPropertyPanel, ImplPopupModeEndHdl, FloatingWindow*, EMPTYARG ) +{ + return 0; +} + + + + + + + + +void TextPropertyPanel::NotifyItemUpdate ( + const sal_uInt16 nSID, + const SfxItemState eState, + const SfxPoolItem* pState) +{ + switch(nSID) + { + case SID_ATTR_CHAR_FONT: + if ( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxFontItem) ) + { + mpFontNameBox->Enable(); + const SvxFontItem* pFontItem = (const SvxFontItem*)pState; + mpFontNameBox->SetText( pFontItem->GetFamilyName() ); + } + else + { + mpFontNameBox->SetText( String() ); + if (SFX_ITEM_DISABLED == eState) + { + mpFontNameBox->Disable(); + } + } + break; + case SID_ATTR_CHAR_FONTHEIGHT: + if ( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxFontHeightItem) ) + { + mpHeightItem = (SvxFontHeightItem*)pState;//const SvxFontHeightItem* + SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric(); + long iValue = (long)CalcToPoint( mpHeightItem->GetHeight(), eUnit, 10 ); + mpToolBoxIncDec->Enable(); + + // font size +/- enhancement in sd + switch(maContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Draw, Context_DrawText): + case CombinedEnumContext(Application_Draw, Context_Text): + case CombinedEnumContext(Application_Draw, Context_Table): + case CombinedEnumContext(Application_Draw, Context_OutlineText): + case CombinedEnumContext(Application_Draw, Context_Draw): + case CombinedEnumContext(Application_Draw, Context_TextObject): + case CombinedEnumContext(Application_Draw, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_DrawText): + case CombinedEnumContext(Application_Impress, Context_Text): + case CombinedEnumContext(Application_Impress, Context_Table): + case CombinedEnumContext(Application_Impress, Context_OutlineText): + case CombinedEnumContext(Application_Impress, Context_Draw): + case CombinedEnumContext(Application_Impress, Context_TextObject): + case CombinedEnumContext(Application_Impress, Context_Graphic): + break; + + default: + if(iValue > 60 && iValue < 960 ) + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,true); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,true); + } + else if (iValue <= 60) + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,true); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,false); + } + else if (iValue >= 960) + { + mpToolBoxIncDec->EnableItem(TBI_INCREASE,false); + mpToolBoxIncDec->EnableItem(TBI_DECREASE,true); + } + } + mpToolBoxIncDec->SetItemState(TBI_INCREASE, STATE_NOCHECK); + mpToolBoxIncDec->SetItemState(TBI_DECREASE, STATE_NOCHECK); + + if( mbFocusOnFontSizeCtrl ) + return; + + maFontSizeBox.Enable( ); + maFontSizeBox.SetValue( iValue ); + maFontSizeBox.LoseFocus(); + } + else + { + mpHeightItem = NULL; + maFontSizeBox.SetText( String() ); + //increase decrease diabled when multi-seletion have different font size + + // font size +/- enhancement in sd + switch(maContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Draw, Context_DrawText): + case CombinedEnumContext(Application_Draw, Context_Text): + case CombinedEnumContext(Application_Draw, Context_Table): + case CombinedEnumContext(Application_Draw, Context_OutlineText): + case CombinedEnumContext(Application_Draw, Context_Draw): + case CombinedEnumContext(Application_Draw, Context_TextObject): + case CombinedEnumContext(Application_Draw, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_DrawText): + case CombinedEnumContext(Application_Impress, Context_Text): + case CombinedEnumContext(Application_Impress, Context_Table): + case CombinedEnumContext(Application_Impress, Context_OutlineText): + case CombinedEnumContext(Application_Impress, Context_Draw): + case CombinedEnumContext(Application_Impress, Context_TextObject): + case CombinedEnumContext(Application_Impress, Context_Graphic): + break; + + default: + mpToolBoxIncDec->Disable(); + } + if ( eState <= SFX_ITEM_READONLY ) + { + maFontSizeBox.Disable( ); + } + } + break; + case SID_ATTR_CHAR_WEIGHT: + mbWeightAvailable = (eState >= SFX_ITEM_DONTCARE); + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxWeightItem)) + { + const SvxWeightItem* pItem = (const SvxWeightItem*)pState; + meWeight = (FontWeight)pItem->GetValue(); + TextStyleChanged(); + } + else + { + meWeight = WEIGHT_NORMAL; + TextStyleChanged(); + } + break; + case SID_ATTR_CHAR_POSTURE: + mbPostureAvailable = (eState >= SFX_ITEM_DONTCARE); + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxPostureItem)) + { + const SvxPostureItem* pItem = (const SvxPostureItem*)pState; + meItalic = (FontItalic)pItem->GetValue(); + TextStyleChanged(); + } + else + { + meItalic = ITALIC_NONE; + TextStyleChanged(); + } + break; + case SID_ATTR_CHAR_UNDERLINE: + if( eState >= SFX_ITEM_DEFAULT) //SvxUnderlineItem + { + //<<delete + //if(pState->ISA(SvxTextLineItem)) + //{ + // const SvxTextLineItem* pItem = (const SvxTextLineItem*)pState; + // meUnderline = (FontUnderline)pItem->GetValue(); + // //add , need to record the underline's color, if not the color will turn to auto + // meUnderlineColor = pItem->GetColor(); + // //add end + //} + //else + //delete end>> + if(pState->ISA(SvxUnderlineItem)) + { + const SvxUnderlineItem* pItem = (const SvxUnderlineItem*)pState; + meUnderline = (FontUnderline)pItem->GetValue(); + //add + meUnderlineColor = pItem->GetColor(); + //add end + } + TextStyleChanged(); + } + else + { + meUnderline = UNDERLINE_NONE; + TextStyleChanged(); + } + break; + case SID_ATTR_CHAR_SHADOWED: + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxShadowedItem)) + { + const SvxShadowedItem* pItem = (const SvxShadowedItem*)pState; + mbShadow = pItem->GetValue(); + TextStyleChanged(); + } + else + { + mbShadow = false; + TextStyleChanged(); + } + break; + case SID_ATTR_CHAR_STRIKEOUT: + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxCrossedOutItem)) + { + const SvxCrossedOutItem* pItem = (const SvxCrossedOutItem*)pState; + meStrike = (FontStrikeout)pItem->GetValue(); + + TextStyleChanged(); + } + else + { + meStrike = STRIKEOUT_NONE; + TextStyleChanged(); + } + break; + case SID_ATTR_CHAR_COLOR: + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxColorItem)) + { + const SvxColorItem* pItem = (const SvxColorItem*)pState; + maColor = pItem->GetValue(); + mbColorAvailable = true; + if (mpFontColorUpdater) + mpFontColorUpdater->Update(maColor); + } + else + { + mbColorAvailable = false; + maColor.SetColor(COL_AUTO); + if (mpFontColorUpdater) + mpFontColorUpdater->Update(maColor); + } + break; + case SID_ATTR_BRUSH_CHAR: + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxBrushItem)) + { + const SvxBrushItem* pItem = (const SvxBrushItem*)pState; + maBackColor = pItem->GetColor(); + mbBackColorAvailable = true; + if (mpHighlightUpdater) + mpHighlightUpdater->Update(maBackColor); + } + else + { + mbBackColorAvailable = false; + maBackColor.SetColor(COL_AUTO); + if (mpHighlightUpdater) + mpHighlightUpdater->Update(maBackColor); + } + break; + case SID_ATTR_CHAR_ESCAPEMENT: + if( eState == SFX_ITEM_AVAILABLE) + { + if( pState->ISA(SvxEscapementItem)) + { + const SvxEscapementItem* pItem = (const SvxEscapementItem *)pState; + short nEsc = pItem->GetEsc(); + if(nEsc == 0) + meEscape = SVX_ESCAPEMENT_OFF; + else if(nEsc > 0) + meEscape = SVX_ESCAPEMENT_SUPERSCRIPT; + else + meEscape = SVX_ESCAPEMENT_SUBSCRIPT; + } + else + { + meEscape = SVX_ESCAPEMENT_OFF; + } + TextStyleChanged(); + } + else if(eState == SFX_ITEM_DISABLED) + { + mpToolBoxScriptSw->EnableItem(TBI_SUPER,false); + mpToolBoxScriptSw->EnableItem(TBI_SUB,false); + } + else + { + meEscape = SVX_ESCAPEMENT_OFF; + TextStyleChanged(); + } + break; + case SID_SET_SUB_SCRIPT: + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SfxBoolItem)) + { + const SfxBoolItem* pItem = (const SfxBoolItem*)pState; + mbSub = pItem->GetValue(); + TextStyleChanged(); + } + else + { + mbSub = false; + TextStyleChanged(); + } + break; + case SID_SET_SUPER_SCRIPT: + if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SfxBoolItem)) + { + const SfxBoolItem* pItem = (const SfxBoolItem*)pState; + mbSuper = pItem->GetValue(); + TextStyleChanged(); + } + else + { + mbSuper = false; + TextStyleChanged(); + } + break; + case SID_ATTR_CHAR_KERNING: + if ( SFX_ITEM_AVAILABLE == eState ) + { + mbKernLBAvailable = true; + + if(pState->ISA(SvxKerningItem)) + { + const SvxKerningItem* pKerningItem = (const SvxKerningItem*)pState; + mlKerning = (long)pKerningItem->GetValue(); + mbKernAvailable = true; + } + else + { + mlKerning = 0; + mbKernAvailable =false; + } + } + else if (SFX_ITEM_DISABLED == eState) + { + mbKernLBAvailable = false; + mbKernAvailable = false; + mlKerning = 0; + } + else + { + mbKernLBAvailable = true; + mbKernAvailable = false; + mlKerning = 0; + } + break; + + // font size +/- enhancement in sd + case SID_SHRINK_FONT_SIZE: + case SID_GROW_FONT_SIZE: + switch(maContext.GetCombinedContext()) + { + case CombinedEnumContext(Application_Draw, Context_DrawText): + case CombinedEnumContext(Application_Draw, Context_Text): + case CombinedEnumContext(Application_Draw, Context_Table): + case CombinedEnumContext(Application_Draw, Context_OutlineText): + case CombinedEnumContext(Application_Draw, Context_Draw): + case CombinedEnumContext(Application_Draw, Context_TextObject): + case CombinedEnumContext(Application_Draw, Context_Graphic): + case CombinedEnumContext(Application_Impress, Context_DrawText): + case CombinedEnumContext(Application_Impress, Context_Text): + case CombinedEnumContext(Application_Impress, Context_Table): + case CombinedEnumContext(Application_Impress, Context_OutlineText): + case CombinedEnumContext(Application_Impress, Context_Draw): + case CombinedEnumContext(Application_Impress, Context_TextObject): + case CombinedEnumContext(Application_Impress, Context_Graphic): + if(eState == SFX_ITEM_DISABLED) + { + mpToolBoxIncDec->Disable(); + } + else + { + mpToolBoxIncDec->Enable(); + } + break; + } + break; + } +} + + + + +void TextPropertyPanel::TextStyleChanged() +{ + if( !mbWeightAvailable ) + mpToolBoxFont->EnableItem(TBI_BOLD,false); + else + mpToolBoxFont->EnableItem(TBI_BOLD,true); + + if(!mbPostureAvailable ) + mpToolBoxFont->EnableItem(TBI_ITALIC,false); + else + mpToolBoxFont->EnableItem(TBI_ITALIC,true); + + UpdateFontBold(); + UpdateFontItalic(); + UpdateFontUnderline(); + UpdateFontStrikeOut(); + UpdateFontShadowed(); + UpdateFontScript(); +} + + + + +void TextPropertyPanel::UpdateFontBold() +{ + if( meWeight == WEIGHT_BOLD ) + { + mpToolBoxFont->SetItemState(TBI_BOLD, STATE_CHECK); + } + else + { + mpToolBoxFont->SetItemState(TBI_BOLD, STATE_NOCHECK); + } +} +void TextPropertyPanel::UpdateFontItalic() +{ + if(meItalic == ITALIC_NORMAL) + { + mpToolBoxFont->SetItemState(TBI_ITALIC, STATE_CHECK); + } + else + { + mpToolBoxFont->SetItemState(TBI_ITALIC, STATE_NOCHECK); + } +} +void TextPropertyPanel::UpdateFontUnderline() +{ + if(meUnderline == UNDERLINE_NONE) + { + mpToolBoxFont->SetItemState(TBI_UNDERLINE, STATE_NOCHECK); + } + else + { + mpToolBoxFont->SetItemState(TBI_UNDERLINE, STATE_CHECK); + } +} +void TextPropertyPanel::UpdateFontStrikeOut() +{ + if(meStrike != STRIKEOUT_NONE && meStrike != STRIKEOUT_DONTKNOW) + { + mpToolBoxFont->SetItemState(TBI_STRIKEOUT, STATE_CHECK); + } + else + { + mpToolBoxFont->SetItemState(TBI_STRIKEOUT, STATE_NOCHECK); + } +} +void TextPropertyPanel::UpdateFontShadowed() +{ + if(mbShadow) + { + mpToolBoxFont->SetItemState(TBI_SHADOWED, STATE_CHECK); + } + else + { + mpToolBoxFont->SetItemState(TBI_SHADOWED, STATE_NOCHECK); + } +} +void TextPropertyPanel::UpdateFontScript() +{ + //script for sw + mpToolBoxScriptSw->EnableItem(TBI_SUPER,true); + mpToolBoxScriptSw->EnableItem(TBI_SUB,true); + if(meEscape == SVX_ESCAPEMENT_SUPERSCRIPT) + { + mpToolBoxScriptSw->SetItemState(TBI_SUPER_SW, STATE_CHECK); + mpToolBoxScriptSw->SetItemState(TBI_SUB_SW, STATE_NOCHECK); + } + else if(meEscape == SVX_ESCAPEMENT_SUBSCRIPT) + { + mpToolBoxScriptSw->SetItemState(TBI_SUPER_SW, STATE_NOCHECK); + mpToolBoxScriptSw->SetItemState(TBI_SUB_SW, STATE_CHECK); + } + else + { + mpToolBoxScriptSw->SetItemState(TBI_SUPER_SW, STATE_NOCHECK); + mpToolBoxScriptSw->SetItemState(TBI_SUB_SW, STATE_NOCHECK); + } + + //script for sc sd + mpToolBoxScript->EnableItem(TBI_SUPER,true); + mpToolBoxScript->EnableItem(TBI_SUB,true); + if(mbSuper) + { + mpToolBoxScript->SetItemState(TBI_SUPER, STATE_CHECK); + mpToolBoxScript->SetItemState(TBI_SUB, STATE_NOCHECK); + } + else if(mbSub) + { + mpToolBoxScript->SetItemState(TBI_SUPER, STATE_NOCHECK); + mpToolBoxScript->SetItemState(TBI_SUB, STATE_CHECK); + } + else + { + mpToolBoxScript->SetItemState(TBI_SUPER, STATE_NOCHECK); + mpToolBoxScript->SetItemState(TBI_SUB, STATE_NOCHECK); + } +} + +Color TextPropertyPanel::GetFontColor (void) const +{ + return maColor; +} + +void TextPropertyPanel::SetFontColor ( + const String& rsColorName, + const Color aColor) +{ + SvxColorItem aColorItem(aColor, SID_ATTR_CHAR_COLOR); + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L); + maColor = aColor; +} + +Color TextPropertyPanel::GetBrushColor (void) const +{ + return maBackColor; +} + +void TextPropertyPanel::SetBrushColor ( + const String& rsColorName, + const Color aColor) +{ + SvxBrushItem aBrushItem(aColor, SID_ATTR_BRUSH_CHAR); + mpBindings->GetDispatcher()->Execute(SID_ATTR_BRUSH_CHAR, SFX_CALLMODE_RECORD, &aBrushItem, 0L); + maBackColor = aColor; +} + +Color& TextPropertyPanel::GetUnderlineColor() +{ + return meUnderlineColor; +} + +void TextPropertyPanel::SetUnderline(FontUnderline eUnderline) +{ + meUnderline = eUnderline; +} + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/text/TextPropertyPanel.hrc b/svx/source/sidebar/text/TextPropertyPanel.hrc new file mode 100644 index 000000000000..4d1ea4715df5 --- /dev/null +++ b/svx/source/sidebar/text/TextPropertyPanel.hrc @@ -0,0 +1,227 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/dialogs.hrc" + +#define VS_SPACING_WIDTH 80 +#define CUSTOM_HEIGHT CBOX_HEIGHT + MBOX_HEIGHT + POPUPPANEL_MARGIN_LARGE * 3 + POPUPPANEL_MARGIN_SMALL * 2 + TEXT_HEIGHT * 2 +#define CUSTOM_WIDTH VS_SPACING_WIDTH - 8 +#define CUSTOM_X POPUPPANEL_MARGIN_LARGE + OFFSET_X + 1 +#define CUSTOM_Y OFFSET_Y + POPUPPANEL_MARGIN_SMALL * 3 + 15 * 6 + TEXT_HEIGHT +#define VS_UNDERLINE_WIDTH 57 +#define VS_UNDERLINE_HEIGHT 12 * 10 +//#define FT_TEST 1 +#define CB_SBFONT_FONT 2 +#define MB_SBFONT_FONTSIZE 3 +#define TB_FONT 4 +#define TB_INCREASE_DECREASE 5 +#define TB_FONTCOLOR 6 +#define TB_SCRIPT_SW 7 +#define TB_HIGHLIGHT 8 +#define TB_SPACING 9 +#define TB_SCRIPT 10 + + +#define IMG_INCREASE 11 +#define IMG_INCREASE_H 12 +#define IMG_DECREASE 13 +#define IMG_DECREASE_H 14 +#define IMG_BOLD 15 +#define IMG_BOLD_H 16 +#define IMG_ITALIC 17 +#define IMG_ITALIC_H 18 +#define IMG_UNDERLINE 19 +#define IMG_UNDERLINE_H 20 +#define IMG_STRIKEOUT 21 +#define IMG_STRIKEOUT_H 22 +#define IMG_SHADOWED 23 +#define IMG_SHADOWED_H 24 +#define IMG_FONTCOLOR 25 +#define IMG_FONTCOLOR_H 26 +#define IMG_SUPSCRIPT 27 +#define IMG_SUPSCRIPT_H 28 +#define IMG_SUBSCRIPT 29 +#define IMG_SUBSCRIPT_H 30 +//#define IMG_SPACING 31 +//#define IMG_SPACING_H 32 +#define IMG_HIGHLIGHT 33 +#define IMG_HIGHLIGHT_H 34 + +#define TBI_FONTCOLOR 50 +#define TBI_BOLD 51 +#define TBI_ITALIC 52 +#define TBI_UNDERLINE 53 +#define TBI_STRIKEOUT 54 +#define TBI_SHADOWED 55 +#define TBI_INCREASE 56 +#define TBI_DECREASE 57 +#define TBI_HIGHLIGHT 58 +#define TBI_SUPER 59 +#define TBI_SUB 60 +#define TBI_SUPER_SW 61 +#define TBI_SUB_SW 62 +#define TBI_SPACING 63 + +#define IMG_SPACING_D 71 + +//popup window underline +#define VS_UNDERLINE 1 +#define PB_OPTIONS 2 +#define BMP_UNDERLINE_MORE 3 +#define BMP_UNDERLINE_MORE_H 4 + +#define IMG_SINGLE 10 +#define IMG_DOUBLE 11 +#define IMG_BOLD2 12 +#define IMG_DOT 13 +#define IMG_DOT_BOLD 14 +#define IMG_DASH 15 +#define IMG_DASH_LONG 16 +#define IMG_DASH_DOT 17 +#define IMG_DASH_DOT_DOT 18 +#define IMG_WAVE 19 + +#define STR_SINGLE 20 +#define STR_DOUBLE 21 +#define STR_BOLD 22 +#define STR_DOT 23 +#define STR_DOT_BOLD 24 +#define STR_DASH 25 +#define STR_DASH_LONG 26 +#define STR_DASH_DOT 27 +#define STR_DASH_DOT_DOT 28 +#define STR_WAVE 29 + +#define IMG_SINGLE_H 30 +#define IMG_DOUBLE_H 31 +#define IMG_BOLD2_H 32 +#define IMG_DOT_H 33 +#define IMG_DOT_BOLD_H 34 +#define IMG_DASH_H 35 +#define IMG_DASH_LONG_H 36 +#define IMG_DASH_DOT_H 37 +#define IMG_DASH_DOT_DOT_H 38 +#define IMG_WAVE_H 39 + +#define IMG_SINGLE_SEL 40 +#define IMG_DOUBLE_SEL 41 +#define IMG_BOLD2_SEL 42 +#define IMG_DOT_SEL 43 +#define IMG_DOT_BOLD_SEL 44 +#define IMG_DASH_SEL 45 +#define IMG_DASH_LONG_SEL 46 +#define IMG_DASH_DOT_SEL 47 +#define IMG_DASH_DOT_DOT_SEL 48 +#define IMG_WAVE_SEL 49 + +//popup window font color +#define VS_FONT_COLOR 1 +#define STR_AUTOMATICE 2 + +//POPUP WINDOW OF SPACING +#define VS_SPACING 1 + +#define CT_BORDER 7 +#define LB_KERNING 8 +#define ED_KERNING 9 + +#define FT_SPACING 18 +#define FT_BY 19 +#define FT_LASTCUSTOM 20 + +#define IMG_NORMAL 31 +#define IMG_VERY_TIGHT 32 +#define IMG_TIGHT 33 +#define IMG_LOOSE 34 +#define IMG_VERY_LOOSE 35 +#define IMG_CUSTOM 36 +#define IMG_CUSTOM_GRAY 37 + +#define IMG_NORMAL_S 51 +#define IMG_VERY_TIGHT_S 52 +#define IMG_TIGHT_S 53 +#define IMG_LOOSE_S 54 +#define IMG_VERY_LOOSE_S 55 + +#define STR_VERY_TIGHT 61 +#define STR_TIGHT 62 +#define STR_NORMAL 63 +#define STR_LOOSE 64 +#define STR_VERY_LOOSE 65 +#define STR_CUSTOM 66 + +#define STR_VERY_TIGHT_TIP 67 +#define STR_TIGHT_TIP 68 +#define STR_NORMAL_TIP 69 +#define STR_LOOSE_TIP 70 +#define STR_VERY_LOOSE_TIP 71 + +#define STR_CUSTOM_C_TIP 72 +#define STR_CUSTOM_E_TIP 73 +#define STR_PT 74 +#define STR_QH_BOLD 75 +#define STR_QH_ITALIC 76 +#define STR_QH_UNDERLINE 77 + +//help ids +#define HID_COMBO_FONT_NAME "SVX_HID_COMBO_FONT_NAME" +#define HID_METRIC_FONT_SIZE "SVX_HID_METRIC_FONT_SIZE" +#define HID_TB_INCREASE_DECREASE "SVX_HID_TB_INCREASE_DECREASE" +#define HID_TBI_INCREASE "SVX_HID_TBI_INCREASE" +#define HID_TBI_DECREASE "SVX_HID_TBI_DECREASE" +#define HID_TB_FONT "SVX_HID_TB_FONT" +#define HID_TBI_FONT_BOLD "SVX_HID_TBI_FONT_BOLD" +#define HID_TBI_FONT_ITALIC "SVX_HID_TBI_FONT_ITALIC" +#define HID_TBI_FONT_UNDERLINE "SVX_HID_TBI_FONT_UNDERLINE" +#define HID_TBI_FONT_STRIKEOUT "SVX_HID_TBI_FONT_STRIKEOUT" +#define HID_TBI_FONT_SHADOWED "SVX_HID_TBI_FONT_SHADOWED" +#define HID_TB_COLOR "SVX_HID_TB_COLOR" +#define HID_TBI_COLOR "SVX_HID_TBI_COLOR" +#define HID_TB_SCRIPT "SVX_HID_TB_SCRIPT" +#define HID_TBI_SCRIPT_SUPER "SVX_HID_TBI_SCRIPT_SUPER" +#define HID_TBI_SCRIPT_SUB "SVX_HID_TBI_SCRIPT_SUB" +#define HID_TB_SCRIPT_SW "SVX_HID_TB_SCRIPT_SW" +#define HID_TBI_SCRIPT_SW_SUPER "SVX_HID_TBI_SCRIPT_SW_SUPER" +#define HID_TBI_SCRIPT_SW_SUB "SVX_HID_TBI_SCRIPT_SW_SUB" +#define HID_TB_SPACING "SVX_HID_TB_SPACING" +#define HID_TBI_SPACING "SVX_HID_TBI_SPACING" +#define HID_TB_HIGHLIGHT "SVX_HID_TB_HIGHLIGHT" +#define HID_TBI_HIGHLIGHT "SVX_HID_TBI_HIGHLIGHT" + +#define HID_UNDERLINE_VS "SVX_HID_UNDERLINE_VS" +#define HID_UNDERLINE_BTN "SVX_HID_UNDERLINE_BTN" + +#define HID_COLOR_VS "SVX_HID_COLOR_VS" + +#define HID_SPACING_TB_VERY_LOOSE "SVX_HID_SPACING_TB_VERY_LOOSE" +#define HID_SPACING_TBI_VERY_LOOSE "SVX_HID_SPACING_TBI_VERY_LOOSE" +#define HID_SPACING_TB_LOOSE "SVX_HID_SPACING_TB_LOOSE" +#define HID_SPACING_TBI_LOOSE "SVX_HID_SPACING_TBI_LOOSE" +#define HID_SPACING_TB_NORMAL "SVX_HID_SPACING_TB_NORMAL" +#define HID_SPACING_TBI_NORMAL "SVX_HID_SPACING_TBI_NORMAL" +#define HID_SPACING_TB_TIGHT "SVX_HID_SPACING_TB_TIGHT" +#define HID_SPACING_TBI_TIGHT "SVX_HID_SPACING_TBI_TIGHT" +#define HID_SPACING_TB_VERY_TIGHT "SVX_HID_SPACING_TB_VERY_TIGHT" +#define HID_SPACING_TBI_VERY_TIGHT "SVX_HID_SPACING_TBI_VERY_TIGHT" +#define HID_SPACING_TB_CUSTOM "SVX_HID_SPACING_TB_CUSTOM" +#define HID_SPACING_TBI_CUSTOM "SVX_HID_SPACING_TBI_CUSTOM" +#define HID_SPACING_CB_KERN "SVX_HID_SPACING_CB_KERN" +#define HID_SPACING_MB_KERN "SVX_HID_SPACING_MB_KERN" diff --git a/svx/source/sidebar/text/TextPropertyPanel.hxx b/svx/source/sidebar/text/TextPropertyPanel.hxx new file mode 100644 index 000000000000..05a9c8889f6e --- /dev/null +++ b/svx/source/sidebar/text/TextPropertyPanel.hxx @@ -0,0 +1,246 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SVX_SIDEBAR_TEXT_PROPERTY_PAGE_HXX +#define SVX_SIDEBAR_TEXT_PROPERTY_PAGE_HXX + +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/IContextChangeReceiver.hxx> + +#include <svtools/ctrlbox.hxx> +#include <svx/tbxcolorupdate.hxx> +#include <editeng/svxenum.hxx> +#include <editeng/fhgtitem.hxx> + +//#include <com/sun/star/ui/XUIElement.hpp> +#include <com/sun/star/ui/XSidebar.hpp> + +#include <boost/scoped_ptr.hpp> +#include "TextCharacterSpacingPopup.hxx" +#include "TextUnderlinePopup.hxx" +#include <svx/sidebar/ColorPopup.hxx> +#include <vcl/vclenum.hxx> + +class FloatingWindow; +class ToolBox; + +namespace svx { namespace sidebar { + +class SvxSBFontNameBox; +class PopupControl; +class PopupContainer; + +class TextPropertyPanel + : public Control, + public ::sfx2::sidebar::IContextChangeReceiver, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface +{ +public: + static TextPropertyPanel* Create ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + + virtual void DataChanged (const DataChangedEvent& rEvent); + SfxBindings* GetBindings(); + ::sfx2::sidebar::ControllerItem& GetSpaceController(); + long GetSelFontSize(); + void SetSpacing(long nKern); + void EndSpacingPopupMode (void); + void EndUnderlinePopupMode (void); + Color GetFontColor (void) const; + void SetFontColor (const String& rsColorName,const Color aColor); + Color GetBrushColor (void) const; + void SetBrushColor (const String& rsColorName,const Color aColor); + void SetUnderline(FontUnderline eUnderline); + Color& GetUnderlineColor(); + void SetDefaultUnderline(FontUnderline eUnderline); + + + enum ColorType + { + FONT_COLOR = 1, + BACK_COLOR = 2 + }; + + virtual void HandleContextChange ( + const ::sfx2::sidebar::EnumContext aContext); + + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState); + +private: + //ui controls + ::boost::scoped_ptr<SvxSBFontNameBox> mpFontNameBox; + FontSizeBox maFontSizeBox; + ::boost::scoped_ptr<Window> mpToolBoxIncDecBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxIncDec; + ::boost::scoped_ptr<Window> mpToolBoxFontBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxFont; + ::boost::scoped_ptr<Window> mpToolBoxFontColorBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxFontColor; + ::boost::scoped_ptr<Window> mpToolBoxScriptBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxScript; + ::boost::scoped_ptr<Window> mpToolBoxScriptSwBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxScriptSw; + ::boost::scoped_ptr<Window> mpToolBoxSpacingBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxSpacing; + ::boost::scoped_ptr<Window> mpToolBoxHighlightBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxHighlight; + ::boost::scoped_ptr<ToolboxButtonColorUpdater> mpFontColorUpdater; + ::boost::scoped_ptr<ToolboxButtonColorUpdater> mpHighlightUpdater; + + //control items + ::sfx2::sidebar::ControllerItem maFontNameControl; + ::sfx2::sidebar::ControllerItem maFontSizeControl; + ::sfx2::sidebar::ControllerItem maWeightControl; + ::sfx2::sidebar::ControllerItem maItalicControl; + ::sfx2::sidebar::ControllerItem maUnderlineControl; + ::sfx2::sidebar::ControllerItem maStrikeControl; + ::sfx2::sidebar::ControllerItem maShadowControl; + ::sfx2::sidebar::ControllerItem maFontColorControl; + ::sfx2::sidebar::ControllerItem maScriptControlSw; + ::sfx2::sidebar::ControllerItem maSuperScriptControl; + ::sfx2::sidebar::ControllerItem maSubScriptControl; + ::sfx2::sidebar::ControllerItem maSpacingControl; + ::sfx2::sidebar::ControllerItem maHighlightControl; + ::sfx2::sidebar::ControllerItem maSDFontGrow; + ::sfx2::sidebar::ControllerItem maSDFontShrink; + + //Images + Image maImgIncrease; + Image maImgDecrease; + Image maImgBold; + Image maImgItalic; + Image maImgUnderline; + Image maImgStrike; + Image maImgShadow; + Image maImgFontColor; + Image maImgSupScript; + Image maImgSubScript; + Image maImgHighlight; + + Image maImgNormalIcon; + + Image maImgIncreaseHigh; + Image maImgDecreaseHigh; + Image maImgBoldHigh; + Image maImgItalicHigh; + Image maImgUnderlineHigh; + Image maImgStrikeHigh; + Image maImgShadowHigh; + Image maImgFontColorHigh; + Image maImgSupScriptHigh; + Image maImgSubScriptHigh; + Image maImgHighlightHigh; + + FontWeight meWeight; + FontItalic meItalic; + FontUnderline meUnderline; + Color meUnderlineColor; // + bool mbShadow; + FontStrikeout meStrike; + bool mbWeightAvailable; + bool mbPostureAvailable; + Color maColor; + bool mbColorAvailable; + Color maBackColor; + bool mbBackColorAvailable; + ColorType meColorType; + SvxEscapement meEscape; //for sw + bool mbSuper; + bool mbSub; + bool mbKernAvailable; + bool mbKernLBAvailable; + long mlKerning; + SvxFontHeightItem* mpHeightItem; + + const FontList* mpFontList; + bool mbMustDelete; + bool mbFocusOnFontSizeCtrl; + TextCharacterSpacingPopup maCharSpacePopup; + TextUnderlinePopup maUnderlinePopup; + ColorPopup maFontColorPopup; + ColorPopup maBrushColorPopup; + + cssu::Reference<css::frame::XFrame> mxFrame; + ::sfx2::sidebar::EnumContext maContext; + SfxBindings* mpBindings; + cssu::Reference<css::ui::XSidebar> mxSidebar; + + TextPropertyPanel ( + Window* pParent, + const cssu::Reference<css::frame::XFrame>& rxFrame, + SfxBindings* pBindings, + const cssu::Reference<css::ui::XSidebar>& rxSidebar); + virtual ~TextPropertyPanel (void); + + + PopupControl* CreateCharacterSpacingControl (PopupContainer* pParent); + PopupControl* CreateFontColorPopupControl (PopupContainer* pParent); + PopupControl* CreateBrushColorPopupControl (PopupContainer* pParent); + PopupControl* CreateUnderlinePopupControl (PopupContainer* pParent); + DECL_LINK(SpacingClickHdl, ToolBox*); + DECL_LINK(ToolBoxFontColorDropHdl, ToolBox *); //for new color picker + DECL_LINK(ToolBoxHighlightDropHdl, ToolBox *); + DECL_LINK(ToolBoxUnderlineClickHdl, ToolBox* ); + + void Initialize (void); + void SetupIcons (void); + void InitToolBoxFont(); + void InitToolBoxIncDec(); + void InitToolBoxFontColor(); + void InitToolBoxScript(); + void InitToolBoxHighlight(); + void InitToolBoxSpacing(); + + void UpdateFontBold(); + void UpdateFontItalic(); + void UpdateFontUnderline(); + void UpdateFontStrikeOut(); + void UpdateFontShadowed(); + void UpdateFontScript(); + + DECL_LINK(FontSelHdl, FontNameBox *); + DECL_LINK(FontSizeModifyHdl, FontSizeBox *); + DECL_LINK(FontSizeSelHdl, FontSizeBox *); + DECL_LINK(FontSizeLoseFocus, FontSizeBox *); + DECL_LINK(ToolboxFontSelectHandler, ToolBox *); + DECL_LINK(ToolboxIncDecSelectHdl, ToolBox *); + DECL_LINK(ImplPopupModeEndHdl, FloatingWindow* ); + DECL_LINK(ToolBoxSwScriptSelectHdl, ToolBox *); + DECL_LINK(ToolBoxScriptSelectHdl, ToolBox *); + + + + void TextStyleChanged(); + + Image GetIcon (const ::rtl::OUString& rsURL); +}; + +} } // end of namespace ::svx::sidebar + +#endif diff --git a/svx/source/sidebar/text/TextPropertyPanel.src b/svx/source/sidebar/text/TextPropertyPanel.src new file mode 100644 index 000000000000..b492a9005b71 --- /dev/null +++ b/svx/source/sidebar/text/TextPropertyPanel.src @@ -0,0 +1,801 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "TextPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include "helpid.hrc" + +#define CONTROL_HEIGHT_FONT_NAME 250 +#define CONTROL_HEIGHT_FONT_SIZE 180 +#define FONTNAME_WIDTH TOOLBOX_ITEM_WIDTH * 2 + TOOLBOX_ITEM_DD_WIDTH +#define FONTSIZE_WIDTH TOOLBOX_ITEM_WIDTH * 2 + +#define TB_SPACE 18 +#define TB_SPACE_V 4 +#define TEXT_WIDTH TOOLBOX_42_42_ITEM_DD_WIDTH + TB_SPACE - 3 + +#define FT_TB_SPACE 1 +#define BK_IMG 20 + +Control RID_SIDEBAR_TEXT_PANEL +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + TOOLBOX_ITEM_HEIGHT * 2 + CONTROL_SPACING_VERTICAL * 2 + SECTIONPAGE_MARGIN_VERTICAL_BOT ); + HelpID = HID_PROPERTYPANEL_TEXT_SECTION ; + Text = "Text"; + + ComboBox CB_SBFONT_FONT + { + Border = TRUE; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL , SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT ( FONTNAME_WIDTH , CONTROL_HEIGHT_FONT_NAME ); + TabStop = TRUE; + DropDown = TRUE; + HelpID = HID_COMBO_FONT_NAME ; + QuickHelpText [ en-US ] = "Font"; + }; + MetricBox MB_SBFONT_FONTSIZE + { + Border = TRUE; + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + FONTNAME_WIDTH + 2, SECTIONPAGE_MARGIN_VERTICAL_TOP); + Size = MAP_APPFONT ( FONTSIZE_WIDTH - 1, CONTROL_HEIGHT_FONT_SIZE ); + TabStop = TRUE; + DropDown = TRUE; + HelpID = HID_METRIC_FONT_SIZE; + QuickHelpText [ en-US ] = "Font Size"; + }; + + ToolBox TB_INCREASE_DECREASE + { + SVLook = TRUE ; + Pos = MAP_APPFONT ( PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2, SECTIONPAGE_MARGIN_VERTICAL_TOP) ; + Size = MAP_APPFONT ( TOOLBOX_ITEM_WIDTH * 2 ,TOOLBOX_ITEM_HEIGHT ) ; + TabStop = TRUE ; +// HelpID = HID_TB_INCREASE_DECREASE; + HelpID = HID_PPROPERTYPANEL_TEXT_TBX_FONTSIZE_INDE; + Text = "Font Size Adjusting" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_INCREASE; + Text [ en-US ] = "Increase Font Size" ; +// HelpID = HID_TBI_INCREASE; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_INCREASE; + }; + ToolBoxItem + { + Identifier = TBI_DECREASE; + Text [ en-US ] = "Decrease Font Size" ; +// HelpID = HID_TBI_DECREASE; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_DECREASE; + }; + }; + }; + ToolBox TB_FONT + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + 1, SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL + 1) ; + Size = MAP_APPFONT ( TOOLBOX_ITEM_WIDTH * 4 + TOOLBOX_ITEM_DD_WIDTH, TOOLBOX_ITEM_HEIGHT ) ; + TabStop = TRUE ; +// HelpID = HID_TB_FONT; + HelpID = HID_PPROPERTYPANEL_TEXT_TBX_FONT; + Text = "Font Effects" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_BOLD; + Text [ en-US ] = "Bold" ; +// HelpID = HID_TBI_FONT_BOLD; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_BOLD; + }; + ToolBoxItem + { + Identifier = TBI_ITALIC; + Text [ en-US ] = "Italic" ; +// HelpID = HID_TBI_FONT_ITALIC; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_ITALIC; + }; + ToolBoxItem + { + Identifier = TBI_UNDERLINE; + DropDown = TRUE ; + Text [ en-US ] = "Underline" ; +// HelpID = HID_TBI_FONT_UNDERLINE; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_UNDERLINE; + }; + ToolBoxItem + { + Identifier = TBI_STRIKEOUT; + Text [ en-US ] = "Strikethrough" ; +// HelpID = HID_TBI_FONT_STRIKEOUT; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_STRIKEOUT; + }; + ToolBoxItem + { + Identifier = TBI_SHADOWED; + Text [ en-US ] = "Shadow" ; +// HelpID = HID_TBI_FONT_SHADOWED; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SHADOWED; + }; + }; + }; + + String STR_QH_BOLD + { + Text [ en-US ] = "Bold (Ctrl+B)"; + }; + String STR_QH_ITALIC + { + Text [ en-US ] = "Italic (Ctrl+I)"; + }; + String STR_QH_UNDERLINE + { + Text [ en-US ] = "Underline (Ctrl+U)"; + }; + + + ToolBox TB_FONTCOLOR + { +// HelpID = HID_TB_COLOR; + HelpID = HID_PPROPERTYPANEL_TEXT_TBX_FONT_COLOR; + SVLook = TRUE ; + Pos = MAP_APPFONT (PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2, SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL + 1) ; + Size = MAP_APPFONT (TOOLBOX_ITEM_DD_WIDTH ,TOOLBOX_ITEM_HEIGHT ) ; + TabStop = TRUE ; + Text = "Font Color" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_FONTCOLOR ; +// HelpID = HID_TBI_COLOR; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_FONT_COLOR; + DropDown = TRUE ; + Text [ en-US ] = "Font Color" ; + }; + }; + }; + + ToolBox TB_HIGHLIGHT + { + SVLook = TRUE ; + Pos = MAP_APPFONT (PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2 , SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + (TOOLBOX_ITEM_HEIGHT + 2) + CONTROL_SPACING_VERTICAL * 2 + 1) ; + Size = MAP_APPFONT (TOOLBOX_ITEM_DD_WIDTH ,TOOLBOX_ITEM_HEIGHT ) ; + TabStop = TRUE ; +// HelpID = HID_TB_HIGHLIGHT; + HelpID = HID_PPROPERTYPANEL_TEXT_TBX_HIGHLIGHT_COLOR; + Text = "Highlight Color" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_HIGHLIGHT ; +// HelpID = HID_TBI_HIGHLIGHT; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_HIGHLIGHT_COLOR; + DropDown = TRUE ; + Text [ en-US ] = "Highlight Color" ; + }; + }; + }; + + ToolBox TB_SCRIPT_SW + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + 1 , SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL * 2 + (TOOLBOX_ITEM_HEIGHT + 2) + 1) ; + Size = MAP_APPFONT (TOOLBOX_ITEM_WIDTH * 2 ,TOOLBOX_ITEM_HEIGHT ) ; + TabStop = TRUE ; +// HelpID = HID_TB_SCRIPT_SW; + HelpID = HID_PPROPERTYPANEL_TEXT_TBX_SCRIPT_SW; + Text = "Font Position" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_SUPER_SW; + Text [ en-US ] = "Superscript" ; +// HelpID = HID_TBI_SCRIPT_SW_SUPER; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUPER_SW; + }; + ToolBoxItem + { + Identifier = TBI_SUB_SW; + Text [ en-US ] = "Subscript" ; +// HelpID = HID_TBI_SCRIPT_SW_SUB; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUB_SW; + }; + }; + }; + ToolBox TB_SCRIPT + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + 1 , SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL * 2 + (TOOLBOX_ITEM_HEIGHT + 2) + 1) ; + Size = MAP_APPFONT (TOOLBOX_ITEM_WIDTH * 2 ,TOOLBOX_ITEM_HEIGHT ) ; + TabStop = TRUE ; +// HelpID = HID_TB_SCRIPT; + HelpID = HID_PPROPERTYPANEL_TEXT_TBX_SCRIPT; + Text = "Font Position" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_SUPER; + Text [ en-US ] = "Superscript" ; +// HelpID = HID_TBI_SCRIPT_SUPER; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUPER; + }; + ToolBoxItem + { + Identifier = TBI_SUB; + Text [ en-US ] = "Subscript" ; +// HelpID = HID_TBI_SCRIPT_SUB; + HelpID = HID_PPROPERTYPANEL_TEXT_TBI_SUB; + }; + }; + }; + + ToolBox TB_SPACING + { + SVLook = TRUE ; + Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL + 1 + TOOLBOX_ITEM_WIDTH * 2 + 4 , SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT + CONTROL_SPACING_VERTICAL * 2 + (TOOLBOX_ITEM_HEIGHT + 2) + 1) ; + Size = MAP_APPFONT (TOOLBOX_24_16_ITEM_DD_WIDTH, TOOLBOX_24_16_ITEM_HEIGHT ) ; + TabStop = TRUE ; + HelpID = HID_TB_SPACING; + Text = "Character Spacing" ; + ItemList = + { + ToolBoxItem + { + Identifier = TBI_SPACING; + DropDown = TRUE ; + Text [ en-US ] = "Character Spacing" ; + HelpID = HID_TBI_SPACING; + }; + }; + }; + + Image IMG_INCREASE + { + ImageBitmap = Bitmap{File = "symphony/enlarge font.png";}; + // MaskColor = IMAGE_MASK_COLOR; + }; + Image IMG_INCREASE_H + { + ImageBitmap = Bitmap{File = "symphony/enlarge font.png";}; + }; + Image IMG_DECREASE + { + ImageBitmap = Bitmap{File = "symphony/decrease font.png";}; + }; + Image IMG_DECREASE_H + { + ImageBitmap = Bitmap{File = "symphony/decrease font.png";}; + }; + Image IMG_BOLD + { + ImageBitmap = Bitmap{File = "symphony/sc_bold.png";};//sc_bold.bmp + }; + Image IMG_BOLD_H + { + ImageBitmap = Bitmap{File = "symphony/sc_bold.png";}; + }; + Image IMG_ITALIC + { + ImageBitmap = Bitmap{File = "symphony/sc_italic.png";};//sc_italic.bmp + }; + Image IMG_ITALIC_H + { + ImageBitmap = Bitmap{File = "symphony/sc_italic.png";}; + }; + Image IMG_UNDERLINE + { + ImageBitmap = Bitmap{File = "symphony/sc_underline.png";};//sc_underline.png + }; + Image IMG_UNDERLINE_H + { + ImageBitmap = Bitmap{File = "symphony/sc_underline.png";}; + }; + + Image IMG_STRIKEOUT + { + ImageBitmap = Bitmap{File = "symphony/sc_strikeout.png";};//sc_strikeout.png + }; + Image IMG_STRIKEOUT_H + { + ImageBitmap = Bitmap{File = "symphony/sc_strikeout.png";}; + }; + Image IMG_SHADOWED + { + ImageBitmap = Bitmap{File = "symphony/sc_shadowed.png";};//sc_shadowed.png + }; + Image IMG_SHADOWED_H + { + ImageBitmap = Bitmap{File = "symphony/sc_shadowed.png";}; + }; + Image IMG_FONTCOLOR + { + ImageBitmap = Bitmap{File = "symphony/sc_color.png";}; + }; + Image IMG_FONTCOLOR_H + { + ImageBitmap = Bitmap{File = "symphony/sc_color.png";}; + }; + Image IMG_SUPSCRIPT + { + ImageBitmap = Bitmap{File = "symphony/sc_superscript.png";}; + }; + Image IMG_SUPSCRIPT_H + { + ImageBitmap = Bitmap{File = "symphony/sc_superscript.png";}; + }; + Image IMG_SUBSCRIPT + { + ImageBitmap = Bitmap{File = "symphony/sc_subscript.png";}; + }; + Image IMG_SUBSCRIPT_H + { + ImageBitmap = Bitmap{File = "symphony/sc_subscript.png";}; + }; +// Image IMG_SPACING +// { +// ImageBitmap = Bitmap{File = "symphony/icon_normal.png";}; +// }; +// Image IMG_SPACING_H +// { +// ImageBitmap = Bitmap{File = "symphony/icon_normal.png";}; +// }; + Image IMG_HIGHLIGHT + { + ImageBitmap = Bitmap{File = "symphony/Highlight.png";};//sc_backcolor + }; + Image IMG_HIGHLIGHT_H + { + ImageBitmap = Bitmap{File = "symphony/Highlight.png";}; + }; + + //small icon for spacing + Image IMG_SPACING_D + { + ImageBitmap = Bitmap{File = "symphony/icon_normal.png";}; + }; +}; + +Control RID_POPUPPANEL_TEXTPAGE_UNDERLINE +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_UNDERLINE_WIDTH, 13+ VS_UNDERLINE_HEIGHT + POPUP_BORDER_HEIGHT + POPUPPANEL_MARGIN_SMALL * 2 + POPUPPANEL_MARGIN_LARGE); + Control VS_UNDERLINE + { +// HelpID = HID_UNDERLINE_VS ; + HelpID = HID_PPROPERTYPANEL_TEXT_UNDERLINE_VS; + Hide = TRUE ; + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); + Size = MAP_APPFONT ( VS_UNDERLINE_WIDTH ,VS_UNDERLINE_HEIGHT); + TabStop = TRUE ; + Text = "Underline"; + }; + + PushButton PB_OPTIONS + { + HelpID = HID_UNDERLINE_BTN; + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL * 2 + OFFSET_Y + VS_UNDERLINE_HEIGHT ); + Size = MAP_APPFONT ( VS_UNDERLINE_WIDTH, 13 ); + TabStop = TRUE; + Text [ en-US ] = "~More Options..."; + }; + + + Image IMG_SINGLE + { + ImageBitmap = Bitmap{File = "symphony/line1.bmp";}; + }; + Image IMG_DOUBLE + { + ImageBitmap = Bitmap{File = "symphony/line2.bmp";}; + }; + Image IMG_BOLD2 + { + ImageBitmap = Bitmap{File = "symphony/line3.bmp";}; + }; + Image IMG_DOT + { + ImageBitmap = Bitmap{File = "symphony/line4.bmp";}; + }; + Image IMG_DOT_BOLD + { + ImageBitmap = Bitmap{File = "symphony/line5.bmp";}; + }; + Image IMG_DASH + { + ImageBitmap = Bitmap{File = "symphony/line6.bmp";}; + }; + Image IMG_DASH_LONG + { + ImageBitmap = Bitmap{File = "symphony/line7.bmp";}; + }; + Image IMG_DASH_DOT + { + ImageBitmap = Bitmap{File = "symphony/line8.bmp";}; + }; + Image IMG_DASH_DOT_DOT + { + ImageBitmap = Bitmap{File = "symphony/line9.bmp";}; + }; + Image IMG_WAVE + { + ImageBitmap = Bitmap{File = "symphony/line10.bmp";}; + }; + + //high contract + Image IMG_SINGLE_H + { + ImageBitmap = Bitmap{File = "symphony/line1_h.bmp";}; + }; + Image IMG_DOUBLE_H + { + ImageBitmap = Bitmap{File = "symphony/line2_h.bmp";}; + }; + Image IMG_BOLD2_H + { + ImageBitmap = Bitmap{File = "symphony/line3_h.bmp";}; + }; + Image IMG_DOT_H + { + ImageBitmap = Bitmap{File = "symphony/line4_h.bmp";}; + }; + Image IMG_DOT_BOLD_H + { + ImageBitmap = Bitmap{File = "symphony/line5_h.bmp";}; + }; + Image IMG_DASH_H + { + ImageBitmap = Bitmap{File = "symphony/line6_h.bmp";}; + }; + Image IMG_DASH_LONG_H + { + ImageBitmap = Bitmap{File = "symphony/line7_h.bmp";}; + }; + Image IMG_DASH_DOT_H + { + ImageBitmap = Bitmap{File = "symphony/line8_h.bmp";}; + }; + Image IMG_DASH_DOT_DOT_H + { + ImageBitmap = Bitmap{File = "symphony/line9_h.bmp";}; + }; + Image IMG_WAVE_H + { + ImageBitmap = Bitmap{File = "symphony/line10_h.bmp";}; + }; + + //image when selected + Image IMG_SINGLE_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line1.bmp";}; + }; + Image IMG_DOUBLE_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line2.bmp";}; + }; + Image IMG_BOLD2_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line3.bmp";}; + }; + Image IMG_DOT_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line4.bmp";}; + }; + Image IMG_DOT_BOLD_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line5.bmp";}; + }; + Image IMG_DASH_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line6.bmp";}; + }; + Image IMG_DASH_LONG_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line7.bmp";}; + }; + Image IMG_DASH_DOT_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line8.bmp";}; + }; + Image IMG_DASH_DOT_DOT_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line9.bmp";}; + }; + Image IMG_WAVE_SEL + { + ImageBitmap = Bitmap{File = "symphony/selected-line10.bmp";}; + }; + +// //more button bmps +// Bitmap BMP_UNDERLINE_MORE +// { +// File = "symphony/morebutton.bmp"; +// }; +// Bitmap BMP_UNDERLINE_MORE_H +// { +// File = "symphony/morebutton_h.bmp"; +// }; + + //tips + String STR_SINGLE + { + Text [ en-US ] = "Single"; + }; + String STR_DOUBLE + { + Text [ en-US ] = "Double"; + }; + String STR_BOLD + { + Text [ en-US ] = "Bold"; + }; + String STR_DOT + { + Text [ en-US ] = "Dotted"; + }; + String STR_DOT_BOLD + { + Text [ en-US ] = "Dotted (Bold)"; + }; + String STR_DASH + { + Text [ en-US ] = "Dash"; + }; + String STR_DASH_LONG + { + Text [ en-US ] = "Long Dash"; + }; + String STR_DASH_DOT + { + Text [ en-US ] = "Dot Dash"; + }; + String STR_DASH_DOT_DOT + { + Text [ en-US ] = "Dot Dot Dash"; + }; + String STR_WAVE + { + Text [ en-US ] = "Wave"; + }; + +}; + + +Control RID_POPUPPANEL_TEXTPAGE_FONT_COLOR +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUP_COLOR_PICKER_WIDTH , POPUP_COLOR_PICKER_HEIGHT ); + + Control VS_FONT_COLOR + { +// HelpID = HID_COLOR_VS ; + HelpID = HID_PPROPERTYPANEL_TEXT_COLOR_VS; + Hide = TRUE ; + Pos = MAP_APPFONT ( OFFSET_X , OFFSET_Y ); + Size = MAP_APPFONT ( POPUP_COLOR_PICKER_WIDTH - OFFSET_X * 2, POPUP_COLOR_PICKER_HEIGHT - OFFSET_Y * 2); + TabStop = TRUE ; + Text = "Color Picker"; + }; + String STR_AUTOMATICE + { + Text [ en-US ] = "Automatic"; + }; + +}; + +Control RID_POPUPPANEL_TEXTPAGE_SPACING +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_SPACING_WIDTH , POPUPPANEL_MARGIN_SMALL * 3 + 15 * 6 + CUSTOM_HEIGHT + TEXT_HEIGHT + POPUPPANEL_MARGIN_LARGE + POPUP_BORDER_WIDTH + 1); + + Control VS_SPACING + { + HelpId = HID_PPROPERTYPANEL_TEXT_SPACING_VS ; + Hide = TRUE ; + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); + Size = MAP_APPFONT ( VS_SPACING_WIDTH , 15 * 6); + TabStop = TRUE ; + Text = "Character Spacing"; + }; + + FixedText FT_LASTCUSTOM + { + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_LARGE + OFFSET_X ,POPUPPANEL_MARGIN_SMALL + OFFSET_Y + POPUPPANEL_MARGIN_SMALL + 15 * 6) ; + Size = MAP_APPFONT ( CUSTOM_WIDTH , TEXT_HEIGHT ); + Left = TRUE ; + Text [ en-US ] = "Custom:" ; + }; + //custom area +// Control CT_BORDER +// { +// Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_LARGE + OFFSET_X + 1 , OFFSET_Y + POPUPPANEL_MARGIN_SMALL * 3 + 15 * 6 + TEXT_HEIGHT) ; +// Size = MAP_APPFONT (CUSTOM_WIDTH , CUSTOM_HEIGHT ) ;// TOOLBOX_42_42_ITEM_DD_WIDTH * 2 + TB_SPACE * 2 - 5 + TEXT_WIDTH - 2 +// DialogControl = TRUE; +// }; + FixedText FT_SPACING + { + Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE); + Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , TEXT_HEIGHT ); + Left = TRUE ; + Text [ en-US ] = "~Character spacing: " ; + }; + ListBox LB_KERNING + { + Border = TRUE; + Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE + TEXT_HEIGHT + POPUPPANEL_MARGIN_SMALL);//20 + Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , 80 ) ; + TabStop = TRUE; + DropDown = TRUE ; + HelpID = HID_SPACING_CB_KERN; + StringList [ en-US ] = + { + < "Default" ; Default ; > ; + < "Expanded" ; Default ; > ; + < "Condensed" ; Default ; > ; + }; + }; + FixedText FT_BY + { + Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE * 2 + TEXT_HEIGHT + POPUPPANEL_MARGIN_SMALL + CBOX_HEIGHT ); + Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , TEXT_HEIGHT ); + Left = TRUE ; + Text [ en-US ] = "Change ~by: " ; + }; + MetricField ED_KERNING + { + HelpID = HID_SPACING_MB_KERN; + Border = TRUE; + Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE * 2 + TEXT_HEIGHT * 2 + POPUPPANEL_MARGIN_SMALL * 2 + CBOX_HEIGHT);//60 + Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , MBOX_HEIGHT ); + TabStop = TRUE; + Repeat = TRUE ; + Spin = TRUE ; + Maximum = 9999 ; + DecimalDigits = 1 ; + Unit = FUNIT_POINT ; + SpinSize = 10 ; + }; + + Image IMG_NORMAL + { + ImageBitmap = Bitmap{File = "symphony/spacing_normal.bmp" ;};//"spacing_normal.bmp" + }; + Image IMG_VERY_TIGHT + { + ImageBitmap = Bitmap{File = "symphony/spacing_very tight.bmp";}; + }; + Image IMG_TIGHT + { + ImageBitmap = Bitmap{File = "symphony/spacing_tight.bmp";}; + }; + Image IMG_LOOSE + { + ImageBitmap = Bitmap{File = "symphony/spacing_loose.bmp";}; + }; + Image IMG_VERY_LOOSE + { + ImageBitmap = Bitmap{File = "symphony/spacing_very loose.bmp";}; + }; + + Image IMG_NORMAL_S + { + ImageBitmap = Bitmap{File = "symphony/spacing_normal_s.bmp";}; + }; + Image IMG_VERY_TIGHT_S + { + ImageBitmap = Bitmap{File = "symphony/spacing_very tight_s.bmp";}; + }; + Image IMG_TIGHT_S + { + ImageBitmap = Bitmap{File = "symphony/spacing_tight_s.bmp";}; + }; + Image IMG_LOOSE_S + { + ImageBitmap = Bitmap{File = "symphony/spacing_loose_s.bmp";}; + }; + Image IMG_VERY_LOOSE_S + { + ImageBitmap = Bitmap{File = "symphony/spacing_very loose_s.bmp";}; + }; + + Image IMG_CUSTOM + { + ImageBitmap = Bitmap{File = "symphony/last_custom_common.png";}; + }; + Image IMG_CUSTOM_GRAY + { + ImageBitmap = Bitmap{File = "symphony/last_custom_common_grey.png";}; + }; + + String STR_VERY_TIGHT + { + Text [ en-US ] = "Very Tight"; + }; + String STR_TIGHT + { + Text [ en-US ] = "Tight"; + }; + String STR_NORMAL + { + Text [ en-US ] = "Normal"; + }; + String STR_LOOSE + { + Text [ en-US ] = "Loose"; + }; + String STR_VERY_LOOSE + { + Text [ en-US ] = "Very Loose"; + }; + String STR_CUSTOM + { + Text [ en-US ] = "Last Custom Value"; + }; + + String STR_VERY_TIGHT_TIP + { + Text [ en-US ] = " Spacing: Condensed By: 3pt"; + }; + String STR_TIGHT_TIP + { + Text [ en-US ] = " Spacing: Condensed By: 1.5pt"; + }; + String STR_NORMAL_TIP + { + Text [ en-US ] = " Spacing: Normal"; + }; + String STR_LOOSE_TIP + { + Text [ en-US ] = " Spacing: Expanded By: 3pt"; + }; + String STR_VERY_LOOSE_TIP + { + Text [ en-US ] = " Spacing: Expanded By: 6pt"; + }; + String STR_CUSTOM_C_TIP + { + Text [ en-US ] = " Spacing: Condensed By: "; + }; + String STR_CUSTOM_E_TIP + { + Text [ en-US ] = " Spacing: Expanded By: "; + }; + String STR_PT + { + Text[ en-US ] = "pt"; + }; +}; diff --git a/svx/source/sidebar/text/TextUnderlineControl.cxx b/svx/source/sidebar/text/TextUnderlineControl.cxx new file mode 100644 index 000000000000..5ab48be6808e --- /dev/null +++ b/svx/source/sidebar/text/TextUnderlineControl.cxx @@ -0,0 +1,281 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" +#include "TextUnderlineControl.hxx" +#include "TextPropertyPanel.hrc" +#include <sfx2/sidebar/propertypanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <unotools/viewoptions.hxx> +#include <editeng/kernitem.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/Theme.hxx> +#include <editeng/udlnitem.hxx> + +namespace svx { namespace sidebar { + +TextUnderlineControl::TextUnderlineControl(Window* pParent, svx::sidebar::TextPropertyPanel& rPanel) +: svx::sidebar::PopupControl( pParent,SVX_RES(RID_POPUPPANEL_TEXTPAGE_UNDERLINE)) +, mrTextPropertyPanel(rPanel) +, mpBindings(NULL) +, maVSUnderline( this, SVX_RES(VS_UNDERLINE)) +, maPBOptions (this, SVX_RES(PB_OPTIONS) ) + +, maIMGSingle (SVX_RES(IMG_SINGLE)) +, maIMGDouble (SVX_RES(IMG_DOUBLE)) +, maIMGBold (SVX_RES(IMG_BOLD2)) +, maIMGDot (SVX_RES(IMG_DOT)) +, maIMGDotBold (SVX_RES(IMG_DOT_BOLD)) +, maIMGDash (SVX_RES(IMG_DASH)) +, maIMGDashLong (SVX_RES(IMG_DASH_LONG)) +, maIMGDashDot (SVX_RES(IMG_DASH_DOT)) +, maIMGDashDotDot (SVX_RES(IMG_DASH_DOT_DOT)) +, maIMGWave (SVX_RES(IMG_WAVE)) + +// high contrast +, maIMGSingleH (SVX_RES(IMG_SINGLE_H)) +, maIMGDoubleH (SVX_RES(IMG_DOUBLE_H)) +, maIMGBoldH (SVX_RES(IMG_BOLD2_H)) +, maIMGDotH (SVX_RES(IMG_DOT_H)) +, maIMGDotBoldH (SVX_RES(IMG_DOT_BOLD_H)) +, maIMGDashH (SVX_RES(IMG_DASH_H)) +, maIMGDashLongH (SVX_RES(IMG_DASH_LONG_H)) +, maIMGDashDotH (SVX_RES(IMG_DASH_DOT_H)) +, maIMGDashDotDotH(SVX_RES(IMG_DASH_DOT_DOT_H)) +, maIMGWaveH (SVX_RES(IMG_WAVE_H)) + +, maIMGSingleSel (SVX_RES(IMG_SINGLE_SEL)) +, maIMGDoubleSel (SVX_RES(IMG_DOUBLE_SEL)) +, maIMGBoldSel (SVX_RES(IMG_BOLD2_SEL)) +, maIMGDotSel (SVX_RES(IMG_DOT_SEL)) +, maIMGDotBoldSel (SVX_RES(IMG_DOT_BOLD_SEL)) +, maIMGDashSel (SVX_RES(IMG_DASH_SEL)) +, maIMGDashLongSel (SVX_RES(IMG_DASH_LONG_SEL)) +, maIMGDashDotSel (SVX_RES(IMG_DASH_DOT_SEL)) +, maIMGDashDotDotSel (SVX_RES(IMG_DASH_DOT_DOT_SEL)) +, maIMGWaveSel (SVX_RES(IMG_WAVE_SEL)) + +{ + initial(); + FreeResource(); + mpBindings = mrTextPropertyPanel.GetBindings(); +} + +void TextUnderlineControl::initial() +{ + /*maPBOptions.SetDefBkColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_DropDownBackground ));//Color(244,245,249)//for high contract + maPBOptions.SetHoverBkColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ) );//Color( 93, 120, 163 ) + maPBOptions.SetHoverTxtColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_PanelTitleFont ) );//Color( 255, 255, 255 ) + maPBOptions.SetIcoPosX( 2);*/ + maVSUnderline.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + maVSUnderline.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? + GetSettings().GetStyleSettings().GetMenuColor(): + sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); + + Link aLink = LINK( this, TextUnderlineControl, PBClickHdl ) ; + maPBOptions.SetClickHdl(aLink); + + maVSUnderline.SetStyle( maVSUnderline.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT );// WB_NAMEFIELD | WB_ITEMBORDER |WB_DOUBLEBORDER | WB_NONEFIELD | + + maVSUnderline.InsertItem(1, maIMGSingle ,String(SVX_RES(STR_SINGLE))); + maVSUnderline.SetItemData(1, (void*)(sal_uInt64)UNDERLINE_SINGLE); + + maVSUnderline.InsertItem(2, maIMGDouble ,String(SVX_RES(STR_DOUBLE))); + maVSUnderline.SetItemData(2, (void*)(sal_uInt64)UNDERLINE_DOUBLE); + + maVSUnderline.InsertItem(3, maIMGBold, String(SVX_RES(STR_BOLD))); + maVSUnderline.SetItemData(3,(void*)(sal_uInt64)UNDERLINE_BOLD); + + maVSUnderline.InsertItem(4, maIMGDot, String(SVX_RES(STR_DOT))); + maVSUnderline.SetItemData(4,(void*)(sal_uInt64)UNDERLINE_DOTTED); + + maVSUnderline.InsertItem(5, maIMGDotBold, String(SVX_RES(STR_DOT_BOLD))); + maVSUnderline.SetItemData(5,(void*)(sal_uInt64)UNDERLINE_BOLDDOTTED); + + maVSUnderline.InsertItem(6, maIMGDash, String(SVX_RES(STR_DASH))); + maVSUnderline.SetItemData(6,(void*)(sal_uInt64)UNDERLINE_DASH); + + maVSUnderline.InsertItem(7, maIMGDashLong,String(SVX_RES(STR_DASH_LONG))); + maVSUnderline.SetItemData(7,(void*)(sal_uInt64)UNDERLINE_LONGDASH); + + maVSUnderline.InsertItem(8, maIMGDashDot, String(SVX_RES(STR_DASH_DOT))); + maVSUnderline.SetItemData(8,(void*)(sal_uInt64)UNDERLINE_DASHDOT); + + maVSUnderline.InsertItem(9, maIMGDashDotDot, String(SVX_RES(STR_DASH_DOT_DOT))); + maVSUnderline.SetItemData(9,(void*)(sal_uInt64)UNDERLINE_DASHDOTDOT); + + maVSUnderline.InsertItem(10, maIMGWave, String(SVX_RES(STR_WAVE))); + maVSUnderline.SetItemData(10,(void*)(sal_uInt64)UNDERLINE_WAVE); + + maVSUnderline.SetColCount( 1 ); + aLink = LINK( this, TextUnderlineControl, VSSelectHdl ) ; + maVSUnderline.SetSelectHdl(aLink); + + maVSUnderline.StartSelection(); + maVSUnderline.Show(); +} + +void TextUnderlineControl::GetFocus() +{ + maVSUnderline.GrabFocus(); +} +void TextUnderlineControl::Rearrange(FontUnderline eLine) +{ + // high contrast + maVSUnderline.SetItemImage(1, GetDisplayBackground().GetColor().IsDark()? maIMGSingleH :maIMGSingle); + maVSUnderline.SetItemImage(2, GetDisplayBackground().GetColor().IsDark()? maIMGDoubleH : maIMGDouble ); + maVSUnderline.SetItemImage(3, GetDisplayBackground().GetColor().IsDark()? maIMGBoldH : maIMGBold); + maVSUnderline.SetItemImage(4, GetDisplayBackground().GetColor().IsDark()? maIMGDotH : maIMGDot); + maVSUnderline.SetItemImage(5, GetDisplayBackground().GetColor().IsDark()? maIMGDotBoldH :maIMGDotBold); + maVSUnderline.SetItemImage(6, GetDisplayBackground().GetColor().IsDark()? maIMGDashH :maIMGDash); + maVSUnderline.SetItemImage(7, GetDisplayBackground().GetColor().IsDark()? maIMGDashLongH : maIMGDashLong); + maVSUnderline.SetItemImage(8, GetDisplayBackground().GetColor().IsDark()? maIMGDashDotH : maIMGDashDot); + maVSUnderline.SetItemImage(9, GetDisplayBackground().GetColor().IsDark()? maIMGDashDotDotH : maIMGDashDotDot); + maVSUnderline.SetItemImage(10, GetDisplayBackground().GetColor().IsDark()? maIMGWaveH : maIMGWave); +// maVSUnderline.SelectItem(0); //delete +// maVSUnderline.SetNoSelection(); + + switch(eLine) + { + case UNDERLINE_SINGLE: + maVSUnderline.SetItemImage(1, maIMGSingleSel); + maVSUnderline.SelectItem(1); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_DOUBLE: + maVSUnderline.SetItemImage(2, maIMGDoubleSel); + maVSUnderline.SelectItem(2); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_BOLD: + maVSUnderline.SetItemImage(3, maIMGBoldSel); + maVSUnderline.SelectItem(3); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_DOTTED: + maVSUnderline.SetItemImage(4, maIMGDotSel); + maVSUnderline.SelectItem(4); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_BOLDDOTTED: + maVSUnderline.SetItemImage(5, maIMGDotBoldSel); + maVSUnderline.SelectItem(5); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_DASH: + maVSUnderline.SetItemImage(6, maIMGDashSel); + maVSUnderline.SelectItem(6); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_LONGDASH: + maVSUnderline.SetItemImage(7, maIMGDashLongSel); + maVSUnderline.SelectItem(7); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_DASHDOT: + maVSUnderline.SetItemImage(8, maIMGDashDotSel); + maVSUnderline.SelectItem(8); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_DASHDOTDOT: + maVSUnderline.SetItemImage(9, maIMGDashDotDotSel); + maVSUnderline.SelectItem(9); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_WAVE: + maVSUnderline.SetItemImage(10, maIMGWaveSel); + maVSUnderline.SelectItem(10); //add + maVSUnderline.GrabFocus(); + break; + case UNDERLINE_NONE: + default: + maVSUnderline.SelectItem(1); + maVSUnderline.SetNoSelection();//add + maPBOptions.GrabFocus(); + } + maVSUnderline.StartSelection(); + //removed + //if(mpPage->meContextType == PROPERTY_CONTEXT_SC_CELL) + // maPBOptions.Disable(); + //else + // maPBOptions.Enable(); + //removed end +} +ValueSet& TextUnderlineControl::GetValueSet() +{ + return maVSUnderline; +} +Control& TextUnderlineControl::GetPB() +{ + return maPBOptions; +} +IMPL_LINK(TextUnderlineControl, VSSelectHdl, void *, pControl) +{ + if(pControl == &maVSUnderline) + { + sal_uInt16 iPos = maVSUnderline.GetSelectItemId(); + FontUnderline eUnderline = (FontUnderline)(sal_uInt64)maVSUnderline.GetItemData( iPos ); + + //<<modified + //SvxTextLineItem aLineItem(eUnderline, SID_ATTR_CHAR_UNDERLINE); + SvxUnderlineItem aLineItem(eUnderline, SID_ATTR_CHAR_UNDERLINE); + //modify end>> + + //<<add , this line of code will keep the new underline use pre-color + aLineItem.SetColor(mrTextPropertyPanel.GetUnderlineColor()); + //add end>> + mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L); + + //add , for the popup page not update immediately + mrTextPropertyPanel.SetUnderline(eUnderline); + //add end + //mrTextPropertyPanel.SetDefaultUnderline(eUnderline); + + mrTextPropertyPanel.EndUnderlinePopupMode(); + } + return( 0L ); +} + +IMPL_LINK(TextUnderlineControl, PBClickHdl, PushButton *, pPBtn) +{ + if(pPBtn == &maPBOptions) + { + if (mpBindings) + { + SfxDispatcher* pDisp = mpBindings->GetDispatcher(); + pDisp->Execute( SID_CHAR_DLG_EFFECT, SFX_CALLMODE_ASYNCHRON ); + } + //add + mrTextPropertyPanel.EndUnderlinePopupMode(); + //add end + } + return 0; +} + +}} diff --git a/svx/source/sidebar/text/TextUnderlineControl.hxx b/svx/source/sidebar/text/TextUnderlineControl.hxx new file mode 100644 index 000000000000..a579934f0fad --- /dev/null +++ b/svx/source/sidebar/text/TextUnderlineControl.hxx @@ -0,0 +1,94 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ +#ifndef _SVX_SIDEBAR_UNDERLINE_CONTROL_HXX_ +#define _SVX_SIDEBAR_UNDERLINE_CONTROL_HXX_ + +#include "svx/sidebar/PopupControl.hxx" +#include <sfx2/bindings.hxx> +#include <svtools/ctrlbox.hxx> +#include <svtools/ctrltool.hxx> +#include "TextPropertyPanel.hxx" +#include <vcl/fixed.hxx> +#include <vcl/button.hxx> + +#include <vcl/vclenum.hxx> +#include <svtools/valueset.hxx> + +namespace svx{ namespace sidebar { + +class TextUnderlineControl:public svx::sidebar::PopupControl +{ +public: + TextUnderlineControl(Window* pParent, svx::sidebar::TextPropertyPanel& rPanel); + void GetFocus(); + void Rearrange(FontUnderline eLine); + ValueSet& GetValueSet(); + Control& GetPB(); +private: + svx::sidebar::TextPropertyPanel& mrTextPropertyPanel; + SfxBindings* mpBindings; + ValueSet maVSUnderline; + PushButton maPBOptions; + + Image maIMGSingle; + Image maIMGDouble; + Image maIMGBold; + Image maIMGDot; + Image maIMGDotBold; + Image maIMGDash; + Image maIMGDashLong; + Image maIMGDashDot; + Image maIMGDashDotDot; + Image maIMGWave; + + //add for high contract + Image maIMGSingleH; + Image maIMGDoubleH; + Image maIMGBoldH; + Image maIMGDotH; + Image maIMGDotBoldH; + Image maIMGDashH; + Image maIMGDashLongH; + Image maIMGDashDotH; + Image maIMGDashDotDotH; + Image maIMGWaveH; + + Image maIMGSingleSel; + Image maIMGDoubleSel; + Image maIMGBoldSel; + Image maIMGDotSel; + Image maIMGDotBoldSel; + Image maIMGDashSel; + Image maIMGDashLongSel; + Image maIMGDashDotSel; + Image maIMGDashDotDotSel; + Image maIMGWaveSel; + + void initial(); + + DECL_LINK( PBClickHdl, PushButton *); + DECL_LINK(VSSelectHdl, void *); +}; +}} + + +#endif + diff --git a/svx/source/sidebar/text/TextUnderlinePopup.cxx b/svx/source/sidebar/text/TextUnderlinePopup.cxx new file mode 100644 index 000000000000..307eda3909aa --- /dev/null +++ b/svx/source/sidebar/text/TextUnderlinePopup.cxx @@ -0,0 +1,60 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "TextUnderlinePopup.hxx" +#include "TextUnderlineControl.hxx" + + +namespace svx { namespace sidebar { + +TextUnderlinePopup::TextUnderlinePopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Character Spacing"))) +{ +} + + + + +TextUnderlinePopup::~TextUnderlinePopup (void) +{ +} + + + + +void TextUnderlinePopup::Rearrange (FontUnderline eLine) +{ + ProvideContainerAndControl(); + + TextUnderlineControl* pControl = dynamic_cast<TextUnderlineControl*>(mpControl.get()); + if (pControl != NULL) + pControl->Rearrange(eLine); +} + + +} } // end of namespace svx::sidebar + + diff --git a/svx/source/sidebar/text/TextUnderlinePopup.hxx b/svx/source/sidebar/text/TextUnderlinePopup.hxx new file mode 100644 index 000000000000..8343590e02bc --- /dev/null +++ b/svx/source/sidebar/text/TextUnderlinePopup.hxx @@ -0,0 +1,47 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SVX_SIDEBAR_UNDERLINE_POPUP_HXX_ +#define _SVX_SIDEBAR_UNDERLINE_POPUP_HXX_ + +#include "svx/sidebar/Popup.hxx" + +#include <boost/function.hpp> +#include <vcl/vclenum.hxx> +namespace svx { namespace sidebar { + +class TextUnderlinePopup + : public Popup +{ +public : + TextUnderlinePopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator); + ~TextUnderlinePopup (void); + + void Rearrange (FontUnderline eLine); +}; + +} } // end of namespace svx::sidebar + +#endif + + diff --git a/svx/source/sidebar/tools/ColorControl.cxx b/svx/source/sidebar/tools/ColorControl.cxx new file mode 100644 index 000000000000..6fece95f6651 --- /dev/null +++ b/svx/source/sidebar/tools/ColorControl.cxx @@ -0,0 +1,228 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_svx.hxx" + +#include <svx/sidebar/ColorControl.hxx> +#include "svx/svxids.hrc" +#include "svx/drawitem.hxx" +#include "svx/xtable.hxx" +#include "svx/dialmgr.hxx" +#include "svx/xflclit.hxx" +#include <tools/resid.hxx> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/objsh.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <vcl/floatwin.hxx> +#include <unotools/pathoptions.hxx> +#include <editeng/editrids.hrc> + +using ::sfx2::sidebar::Theme; + +namespace svx { namespace sidebar { + +namespace { + short GetItemId_Imp( ValueSet& rValueSet, const Color& rCol ) + { + if(rCol == COL_AUTO) + return 0; + + bool bFound = false; + sal_uInt16 nCount = rValueSet.GetItemCount(); + sal_uInt16 n = 1; + + while ( !bFound && n <= nCount ) + { + Color aValCol = rValueSet.GetItemColor(n); + + bFound = ( aValCol.GetRed() == rCol.GetRed() + && aValCol.GetGreen() == rCol.GetGreen() + && aValCol.GetBlue() == rCol.GetBlue() ); + + if ( !bFound ) + n++; + } + return bFound ? n : -1; + } + class JustReleaseDeleter {public: + void operator() (XColorList*) const {/* release but don't delete pointer */} + }; + ::boost::shared_ptr<XColorList> GetColorTable (void) + { + SfxObjectShell* pDocSh = SfxObjectShell::Current(); + DBG_ASSERT(pDocSh!=NULL, "DocShell not found!"); + if (pDocSh != NULL) + { + const SfxPoolItem* pItem = pDocSh->GetItem(SID_COLOR_TABLE); + if (pItem != NULL) + { + XColorList* pTable = ((SvxColorTableItem*)pItem)->GetColorTable(); + if (pTable != NULL) + return ::boost::shared_ptr<XColorList>(pTable, JustReleaseDeleter()); + } + } + + return ::boost::shared_ptr<XColorList>(new XColorList(SvtPathOptions().GetPalettePath())); + } +} // end of anonymous namespace + + + + +ColorControl::ColorControl ( + Window* pParent, + SfxBindings* pBindings, + const ResId& rControlResId, + const ResId& rValueSetResId, + const ::boost::function<Color(void)>& rNoColorGetter, + const ::boost::function<void(String&,Color)>& rColorSetter, + FloatingWindow* pFloatingWindow, + const ResId* pNoColorStringResId) // const sal_uInt32 nNoColorStringResId) + : PopupControl(pParent, rControlResId), + mpBindings(pBindings), + maVSColor(this, rValueSetResId), + mpFloatingWindow(pFloatingWindow), + msNoColorString( + pNoColorStringResId + ? String(*pNoColorStringResId) + : String()), + maNoColorGetter(rNoColorGetter), + maColorSetter(rColorSetter) +{ + FreeResource(); +} + + + +ColorControl::~ColorControl (void) +{ +} + + + + +void ColorControl::FillColors (void) +{ + ::boost::shared_ptr<XColorList> pColorTable (GetColorTable()); + + if (pColorTable) + { + const long nColorCount (pColorTable->Count()); + if (nColorCount <= 0) + return; + const sal_Int32 nColumnCount (ceil(sqrt(double(nColorCount)))); + const sal_Int32 nRowCount (ceil(double(nColorCount)/nColumnCount)); + maVSColor.SetColCount(nColumnCount); + maVSColor.SetLineCount(nRowCount); + const sal_Int32 nItemSize (15*12 / ::std::max<sal_Int32>(nColumnCount, nRowCount)); + maVSColor.CalcWindowSizePixel(Size(nItemSize,nItemSize)); + Link aLink = LINK(this, ColorControl, VSSelectHdl); + maVSColor.SetSelectHdl(aLink); + maVSColor.SetStyle( + (maVSColor.GetStyle() + | WB_TABSTOP | WB_ITEMBORDER | WB_NAMEFIELD// | WB_FLATVALUESET + | WB_NO_DIRECTSELECT | WB_MENUSTYLEVALUESET | WB_NO_DIRECTSELECT) + & ~WB_VSCROLL); + + if (msNoColorString.Len() > 0) + { + maVSColor.SetStyle(maVSColor.GetStyle() | WB_NONEFIELD); + maVSColor.SetText(msNoColorString); + } + + // Now, after all calls to SetStyle, we can change the + // background color. + maVSColor.SetBackground(Theme::GetWallpaper(Theme::Paint_DropDownBackground)); + + maVSColor.Clear(); + XColorEntry* pEntry = NULL; + for (sal_Int32 nIndex=0; nIndex<nColorCount; ++nIndex) + { + pEntry = pColorTable->GetColor(nIndex); + maVSColor.InsertItem(nIndex+1, pEntry->GetColor(), pEntry->GetName() ); + } + } + + maVSColor.Show(); +} + + + + +void ColorControl::GetFocus (void) +{ + maVSColor.GrabFocus(); +} + + + + +void ColorControl::SetCurColorSelect (Color aCol, bool bAvailable) +{ + FillColors(); + short nCol = GetItemId_Imp( maVSColor, aCol ); + if(! bAvailable) + { + maVSColor.SetNoSelection(); + return; + } + + //if not found + if( nCol == -1) + { + maVSColor.SetNoSelection(); + } + else + { + maVSColor.SelectItem( nCol ); + } +} + + + + +IMPL_LINK(ColorControl, VSSelectHdl, void *, pControl) +{ + if(pControl == &maVSColor) + { + sal_uInt16 iPos = maVSColor.GetSelectItemId(); + Color aColor = maVSColor.GetItemColor( iPos ); + String aTmpStr = maVSColor.GetItemText( iPos ); + + // react when the WB_NONEFIELD created entry is selected + if (aColor.GetColor() == 0 && aTmpStr.Equals(String::CreateFromAscii(""))) + { + if (maNoColorGetter) + aColor = maNoColorGetter(); + } + if (maColorSetter) + maColorSetter(aTmpStr, aColor); + + if (mpFloatingWindow!=NULL && mpFloatingWindow->IsInPopupMode()) + mpFloatingWindow->EndPopupMode(); + } + + return 0; +} + + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/tools/ColorPopup.cxx b/svx/source/sidebar/tools/ColorPopup.cxx new file mode 100644 index 000000000000..7d1d2103709a --- /dev/null +++ b/svx/source/sidebar/tools/ColorPopup.cxx @@ -0,0 +1,60 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include <svx/sidebar/ColorPopup.hxx> +#include <svx/sidebar/ColorControl.hxx> + + +namespace svx { namespace sidebar { + +ColorPopup::ColorPopup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator) + : Popup( + pParent, + rControlCreator, + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Color"))) +{ +} + + + + +ColorPopup::~ColorPopup (void) +{ +} + + + + +void ColorPopup::SetCurrentColor ( + const Color aCurrentColor, + const bool bIsColorAvailable) +{ + ProvideContainerAndControl(); + + ColorControl* pColorControl = dynamic_cast<ColorControl*>(mpControl.get()); + if (pColorControl != NULL) + pColorControl->SetCurColorSelect(aCurrentColor, bIsColorAvailable); +} + + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/tools/Popup.cxx b/svx/source/sidebar/tools/Popup.cxx new file mode 100644 index 000000000000..f9d6661f8e0c --- /dev/null +++ b/svx/source/sidebar/tools/Popup.cxx @@ -0,0 +1,148 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/Popup.hxx" +#include "svx/sidebar/PopupContainer.hxx" +#include "svx/sidebar/PopupControl.hxx" + +#include <vcl/toolbox.hxx> + + +namespace svx { namespace sidebar { + +Popup::Popup ( + Window* pParent, + const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator, + const ::rtl::OUString& rsAccessibleName) + : mpControl(), + mpParent(pParent), + maControlCreator(rControlCreator), + maPopupModeEndCallback(), + msAccessibleName(rsAccessibleName), + mpContainer() +{ + OSL_ASSERT(mpParent!=NULL); + OSL_ASSERT(maControlCreator); +} + + + + +Popup::~Popup (void) +{ + mpControl.reset(); + mpContainer.reset(); +} + + + + +void Popup::Show (ToolBox& rToolBox) +{ + rToolBox.SetItemDown(rToolBox.GetCurItemId(), true); + + ProvideContainerAndControl(); + if ( ! (mpContainer && mpControl)) + { + OSL_ASSERT(mpContainer); + OSL_ASSERT(mpControl); + return; + } + + if ( !mpContainer->IsInPopupMode() ) + { + mpContainer->SetSizePixel(mpControl->GetOutputSizePixel()); + + const Point aPos (mpParent->OutputToScreenPixel(rToolBox.GetPosPixel())); + const Size aSize (rToolBox.GetSizePixel()); + const Rectangle aRect (aPos, aSize); + + mpContainer->StartPopupMode( + aRect, + FLOATWIN_POPUPMODE_NOFOCUSCLOSE|FLOATWIN_POPUPMODE_DOWN); + mpContainer->SetPopupModeFlags( + mpContainer->GetPopupModeFlags() + | FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE); + + mpControl->GetFocus(); + } +} + + + + +void Popup::Hide (void) +{ + if (mpContainer) + if (mpContainer->IsInPopupMode()) + mpContainer->EndPopupMode(); +} + + + + +void Popup::SetPopupModeEndHandler (const ::boost::function<void(void)>& rCallback) +{ + maPopupModeEndCallback = rCallback; + if (mpContainer) + mpContainer->SetPopupModeEndHdl(LINK(this, Popup, PopupModeEndHandler)); +} + + + + +void Popup::ProvideContainerAndControl (void) +{ + if ( ! (mpContainer && mpControl) + && mpParent!=NULL + && maControlCreator) + { + CreateContainerAndControl(); + } +} + + + + +void Popup::CreateContainerAndControl (void) +{ + mpContainer.reset(new PopupContainer(mpParent)); + mpContainer->SetAccessibleName(msAccessibleName); + if (maPopupModeEndCallback) + mpContainer->SetPopupModeEndHdl(LINK(this, Popup, PopupModeEndHandler)); + mpContainer->SetBorderStyle(mpContainer->GetBorderStyle() | WINDOW_BORDER_MENU); + + mpControl.reset(maControlCreator(mpContainer.get())); +} + + + + +IMPL_LINK(Popup, PopupModeEndHandler, void*, EMPTYARG) +{ + if (maPopupModeEndCallback) + maPopupModeEndCallback(); + return 0; +} + + + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/tools/PopupContainer.cxx b/svx/source/sidebar/tools/PopupContainer.cxx new file mode 100644 index 000000000000..513fbb163396 --- /dev/null +++ b/svx/source/sidebar/tools/PopupContainer.cxx @@ -0,0 +1,57 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/PopupContainer.hxx" +#include <sfx2/sidebar/Theme.hxx> +#include <vcl/gradient.hxx> + +namespace svx { namespace sidebar { + +PopupContainer::PopupContainer (Window* pParent) + : FloatingWindow(pParent, WB_SYSTEMWINDOW | WB_3DLOOK) // | WB_POPUP_FOCUSWIN) +{ +} + + + + +PopupContainer::~PopupContainer (void) +{ +} + + + + +long PopupContainer::Notify (NotifyEvent& rEvent) +{ + if (rEvent.GetType() == EVENT_LOSEFOCUS) + { + if ( ! HasChildPathFocus(true)) + { + EndPopupMode(); + } + } + + return FloatingWindow::Notify(rEvent); +} + + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/tools/PopupControl.cxx b/svx/source/sidebar/tools/PopupControl.cxx new file mode 100644 index 000000000000..a499457fb7d5 --- /dev/null +++ b/svx/source/sidebar/tools/PopupControl.cxx @@ -0,0 +1,62 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/PopupControl.hxx" +#include <sfx2/sidebar/Theme.hxx> +#include <vcl/gradient.hxx> + +using ::sfx2::sidebar::Theme; + +namespace svx { namespace sidebar { + +PopupControl::PopupControl ( + Window* pParent, + const ResId& rResId) + : Control( pParent,rResId) +{ + EnableChildTransparentMode(true); + SetControlBackground(); + + SetBackground(Theme::GetWallpaper(Theme::Paint_DropDownBackground)); +} + + + + +PopupControl::~PopupControl (void) +{ +} + + + + +void PopupControl::Paint (const Rectangle& rBox) +{ + Control::Paint(rBox); + + // The background is taken care of by setting the background color + // in the constructor. Here we just paint the border. + SetFillColor(); + SetLineColor(Theme::GetColor(Theme::Color_DropDownBorder)); + DrawRect(Rectangle(Point(0,0), GetOutputSizePixel())); +} + +} } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/tools/ValueSetWithTextControl.cxx b/svx/source/sidebar/tools/ValueSetWithTextControl.cxx new file mode 100644 index 000000000000..c2e51b052f41 --- /dev/null +++ b/svx/source/sidebar/tools/ValueSetWithTextControl.cxx @@ -0,0 +1,529 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "svx/sidebar/ValueSetWithTextControl.hxx" +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <sfx2/sidebar/Theme.hxx> + +#include <limits.h> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/uno/Sequence.h> +#include <com/sun/star/lang/Locale.hpp> +#include <com/sun/star/style/NumberingType.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/container/XIndexAccess.hpp> +#include <com/sun/star/text/XDefaultNumberingProvider.hpp> +#include <com/sun/star/text/XNumberingFormatter.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <comphelper/processfactory.hxx> +#include <com/sun/star/text/XNumberingTypeInfo.hpp> +#include <i18npool/mslangid.hxx> +#include <svtools/valueset.hxx> +#include <editeng/brshitem.hxx> +#include <vcl/graph.hxx> +#include <svx/nbdtmg.hxx> +#include <svx/nbdtmgfact.hxx> + +using namespace com::sun::star::uno; +using namespace com::sun::star::beans; +using namespace com::sun::star::lang; +using namespace com::sun::star::i18n; +using namespace com::sun::star::text; +using namespace com::sun::star::container; +using namespace com::sun::star::style; +using rtl::OUString; + +#define C2U(cChar) OUString::createFromAscii(cChar) + +namespace svx { namespace sidebar { +static const sal_Char cValue[] = "Value"; + +static Font& lcl_GetDefaultBulletFont() +{ + static sal_Bool bInit = 0; + static Font aDefBulletFont( UniString::CreateFromAscii( + RTL_CONSTASCII_STRINGPARAM( "StarSymbol" ) ), + String(), Size( 0, 14 ) ); + if(!bInit) + { + aDefBulletFont.SetCharSet( RTL_TEXTENCODING_SYMBOL ); + aDefBulletFont.SetFamily( FAMILY_DONTKNOW ); + aDefBulletFont.SetPitch( PITCH_DONTKNOW ); + aDefBulletFont.SetWeight( WEIGHT_DONTKNOW ); + aDefBulletFont.SetTransparent( sal_True ); + bInit = sal_True; + } + return aDefBulletFont; +} + +ValueSetWithTextControl::ValueSetWithTextControl( + const tControlType eControlType, + Window* pParent, + const ResId& rResId) + : ValueSet( pParent, rResId ) + , meControlType( eControlType ) + , maItems() +{ + SetColCount( 1 ); +} + + +ValueSetWithTextControl::~ValueSetWithTextControl(void) +{ +} + + +void ValueSetWithTextControl::AddItem( + const Image& rItemImage, + const Image* pSelectedItemImage, + const XubString& rItemText, + const XubString* pItemHelpText ) +{ + if ( meControlType != IMAGE_TEXT ) + { + return; + } + + ValueSetWithTextItem aItem; + aItem.maItemImage = rItemImage; + aItem.maSelectedItemImage = (pSelectedItemImage != 0) + ? *pSelectedItemImage + : rItemImage; + aItem.maItemText = rItemText; + + maItems.push_back( aItem ); + + InsertItem( maItems.size() ); + SetItemText( maItems.size(), + (pItemHelpText != 0) ? *pItemHelpText : rItemText ); +} + + +void ValueSetWithTextControl::AddItem( + const XubString& rItemText, + const XubString& rItemText2, + const XubString* pItemHelpText ) +{ + if ( meControlType != TEXT_TEXT ) + { + return; + } + + ValueSetWithTextItem aItem; + aItem.maItemText = rItemText; + aItem.maItemText2 = rItemText2; + + maItems.push_back( aItem ); + + InsertItem( maItems.size() ); + SetItemText( maItems.size(), + (pItemHelpText != 0) ? *pItemHelpText : rItemText ); +} + + +void ValueSetWithTextControl::ReplaceItemImages( + const sal_uInt16 nItemId, + const Image& rItemImage, + const Image* pSelectedItemImage ) +{ + if ( meControlType != IMAGE_TEXT ) + { + return; + } + + if ( nItemId == 0 || + nItemId > maItems.size() ) + { + return; + } + + maItems[nItemId-1].maItemImage = rItemImage; + maItems[nItemId-1].maSelectedItemImage = (pSelectedItemImage != 0) + ? *pSelectedItemImage + : rItemImage; +} + + +void ValueSetWithTextControl::UserDraw( const UserDrawEvent& rUDEvt ) +{ + const Rectangle aRect = rUDEvt.GetRect(); + OutputDevice* pDev = rUDEvt.GetDevice(); + pDev->Push( PUSH_ALL ); + const sal_uInt16 nItemId = rUDEvt.GetItemId(); + + const long nRectHeight = aRect.GetHeight(); + const Point aBLPos = aRect.TopLeft(); + + Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); + { + Size aSize = aFont.GetSize(); + aSize.Height() = (nRectHeight*4)/9; + aFont.SetSize( aSize ); + } + + { + //draw backgroud + if ( GetSelectItemId() == nItemId ) + { + Rectangle aBackRect = aRect; + aBackRect.Top() += 3; + aBackRect.Bottom() -= 2; + pDev->SetFillColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_Highlight ) ); + pDev->DrawRect(aBackRect); + } + else + { + pDev->SetFillColor( COL_TRANSPARENT ); + pDev->DrawRect(aRect); + } + + //draw image + text resp. text + text + Image* pImage = 0; + if ( GetSelectItemId() == nItemId ) + { + aFont.SetColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_HighlightText ) ); + pImage = &maItems[nItemId-1].maSelectedItemImage; + } + else + { + aFont.SetColor( GetSettings().GetStyleSettings().GetFieldTextColor() ); + pImage = &maItems[nItemId-1].maItemImage; + } + + Rectangle aStrRect = aRect; + aStrRect.Top() += nRectHeight/4; + aStrRect.Bottom() -= nRectHeight/4; + + switch ( meControlType ) + { + case IMAGE_TEXT: + { + Point aImgStart( + aBLPos.X() + 4, + aBLPos.Y() + ( ( nRectHeight - pImage->GetSizePixel().Height() ) / 2 ) ); + pDev->DrawImage( aImgStart, *pImage ); + + aStrRect.Left() += pImage->GetSizePixel().Width() + 12; + pDev->SetFont(aFont); + pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS); + } + break; + case TEXT_TEXT: + { + const long nRectWidth = aRect.GetWidth(); + aStrRect.Left() += 8; + aStrRect.Right() -= (nRectWidth*2)/3; + pDev->SetFont(aFont); + pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS); + aStrRect.Left() += nRectWidth/3; + aStrRect.Right() += (nRectWidth*2)/3; + pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText2, TEXT_DRAW_ENDELLIPSIS); + } + break; + } + } + + Invalidate( aRect ); + pDev->Pop(); +} + +SvxNumValueSet2::SvxNumValueSet2( Window* pParent, const ResId& rResId) : + ValueSet( pParent, rResId ), + aLineColor ( COL_LIGHTGRAY ), + pVDev ( NULL ) +{ + SetColCount( 3 ); + SetLineCount( 3 ); + SetStyle( GetStyle() | WB_ITEMBORDER ); +} + + SvxNumValueSet2::~SvxNumValueSet2() +{ + delete pVDev; +} + +void SvxNumValueSet2::SetNumberingSettings( + const Sequence<Sequence<PropertyValue> >& aNum, + Reference<XNumberingFormatter>& xFormat, + const Locale& rLocale ) +{ + aNumSettings = aNum; + xFormatter = xFormat; + aLocale = rLocale; + if(aNum.getLength() > 9) + SetStyle( GetStyle()|WB_VSCROLL); + InsertItem( DEFAULT_NONE, DEFAULT_NONE - 1 ); + SetItemText( DEFAULT_NONE, SVX_RESSTR( RID_SVXSTR_NUMBULLET_NONE )); + + for ( sal_uInt32 i = 0; i < aNum.getLength(); i++ ) + { + InsertItem( i + 1); + if( i < 8 ) + { + NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING); + if ( pNumbering ) + { + SetItemText( i + 1, pNumbering->GetDescription(i)); + } + } + } +} + +void SvxNumValueSet2::UserDraw( const UserDrawEvent& rUDEvt ) +{ + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + const Color aBackColor = rStyleSettings.GetFieldColor(); + const Color aTextColor = rStyleSettings.GetFieldTextColor(); + + OutputDevice* pDev = rUDEvt.GetDevice(); + Rectangle aRect = rUDEvt.GetRect(); + sal_uInt32 nItemId = rUDEvt.GetItemId(); + long nRectWidth = aRect.GetWidth(); + long nRectHeight = aRect.GetHeight(); + Size aRectSize(nRectWidth, aRect.GetHeight()); + Point aBLPos = aRect.TopLeft(); + Font aOldFont = pDev->GetFont(); + Color aOldColor = pDev->GetLineColor(); + pDev->SetLineColor(aBackColor); + Font aFont(OutputDevice::GetDefaultFont( + DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); + + Size aSize = aFont.GetSize(); + aSize.Height() = nRectHeight/5; + aFont.SetColor(aTextColor); + aFont.SetFillColor(aBackColor); + aFont.SetSize( aSize ); + pDev->SetFont(aFont); + pDev->SetLineColor(aTextColor); + if(!pVDev) + { + // Die Linien werden nur einmalig in das VirtualDevice gepainted + // nur die Gliederungspage bekommt es aktuell + pVDev = new VirtualDevice(*pDev); + pVDev->SetMapMode(pDev->GetMapMode()); + pVDev->EnableRTL( IsRTLEnabled() ); + pVDev->SetOutputSize( aRectSize ); + aOrgRect = aRect; + + pVDev->SetLineColor( aBackColor ); + pVDev->SetFillColor( aBackColor ); + pVDev->DrawRect(aOrgRect); + + if(aBackColor == aLineColor) + aLineColor.Invert(); + if(GetSettings().GetStyleSettings().GetHighContrastMode()) + pVDev->SetLineColor(aTextColor); + else + pVDev->SetLineColor(aLineColor); + // Linien nur einmalig Zeichnen + Point aStart(aBLPos.X() + nRectWidth *30 / 100,0); + Point aEnd(aBLPos.X() + nRectWidth * 9 / 10,0); + for( sal_uInt32 i = 11; i < 100; i += 33) + { + aStart.Y() = aEnd.Y() = aBLPos.Y() + nRectHeight * i / 100; + pVDev->DrawLine(aStart, aEnd); + aStart.Y() = aEnd.Y() = aBLPos.Y() + nRectHeight * (i + 11) / 100; + pVDev->DrawLine(aStart, aEnd); + } + } + if ( nItemId != DEFAULT_NONE) + pDev->DrawOutDev( aRect.TopLeft(), aRectSize, + aOrgRect.TopLeft(), aRectSize, + *pVDev ); + const OUString sValue(C2U(cValue)); + + Point aStart(aBLPos.X() + nRectWidth / 9,0); + if ( nItemId == DEFAULT_NONE) + { + String sText(SVX_RESSTR( RID_SVXSTR_NUMBULLET_NONE)); + Font aFont = pDev->GetFont(); + Size aSize = aFont.GetSize(); + aSize.Height() = nRectHeight/4; + aFont.SetSize( aSize ); + pDev->SetFont(aFont); + long nTextWidth = pDev->GetTextWidth(sText); + long nTextHeight = pDev->GetTextHeight(); + //GVT refine + while (nTextWidth>nRectWidth && aSize.Height()>4) { + aSize.Height() = aSize.Height()*0.9; + aFont.SetSize( aSize ); + pDev->SetFont(aFont); + nTextWidth = pDev->GetTextWidth(sText); + } + Point aSStart(aBLPos.X()+(nRectWidth-nTextWidth)/2, aBLPos.Y() +(nRectHeight-nTextHeight)/2); + pDev->DrawText(aSStart, sText); + pDev->SetFont(aOldFont); + } + else + { + NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING); + if ( pNumbering && nItemId <= DEFAULT_BULLET_TYPES ) + { + for( sal_uInt32 i = 0; i < 3; i++ ) + { + sal_uInt32 nY = 11 + i * 33; + aStart.Y() = aBLPos.Y() + nRectHeight * nY / 100; + String sText; + sal_uInt16 nLvl = 0; + SvxNumRule aTempRule( 0, 10, false ); + pNumbering->ApplyNumRule(aTempRule,nItemId -1,1<<nLvl); + SvxNumberFormat aNumFmt(aTempRule.GetLevel(nLvl)); + sText=aNumFmt.GetNumStr(i+1); + sText.Insert( aNumFmt.GetPrefix(), 0 ); + sText += aNumFmt.GetSuffix(); + aStart.X() = aBLPos.X() + 2; + aStart.Y() -= pDev->GetTextHeight()/2; + pDev->DrawText(aStart, sText); + } + } + pDev->SetFont(aOldFont); + pDev->SetLineColor(aOldColor); + } + //End +} + +//=============================================================================================== + +static const long aOffsetX[] = +{ + -1,//1, + 3,//4, + 4,//5, + -3,//0, + -1,//0, + 3 +}; + +SvxNumValueSet3::SvxNumValueSet3( Window* pParent, const ResId& rResId) : + ValueSet( pParent, rResId ) +{ + SetColCount( 3 ); + SetLineCount( 4 ); + SetStyle( GetStyle() | WB_ITEMBORDER ); +} + + SvxNumValueSet3::~SvxNumValueSet3() +{ +} + +void SvxNumValueSet3::UserDraw( const UserDrawEvent& rUDEvt ) +{ + Rectangle aRect = rUDEvt.GetRect(); + OutputDevice* pDev = rUDEvt.GetDevice(); + sal_uInt32 nItemId = rUDEvt.GetItemId(); + + long nRectHeight = aRect.GetHeight(); + long nRectWidth = aRect.GetWidth(); + Point aBLPos = aRect.TopLeft(); + NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); + if ( pBullets ) + { + if ( nItemId <= DEFAULT_BULLET_TYPES ) { + sal_uInt16 nLvl = 0; + SvxNumRule aTempRule( 0, 10, false ); + pBullets->ApplyNumRule(aTempRule,nItemId -1,1<<nLvl); + SvxNumberFormat aFmt(aTempRule.GetLevel(nLvl)); + sal_Int16 eNumType = aFmt.GetNumberingType(); + if( eNumType == SVX_NUM_CHAR_SPECIAL) + { + sal_Unicode cChar = aFmt.GetBulletChar(); + //End + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + const Color aBackColor = rStyleSettings.GetFieldColor(); + const Color aTextColor = rStyleSettings.GetFieldTextColor(); + + Font aOldFont = pDev->GetFont(); + Font aFont( lcl_GetDefaultBulletFont() ); + + Size aSize = aFont.GetSize(); + aSize.Height() = nRectHeight*3/6; + aFont.SetColor(aTextColor); + aFont.SetFillColor(aBackColor); + aFont.SetSize( aSize ); + pDev->SetFont(aFont); + pDev->SetFillColor( aBackColor ); //wj + + String sText; + sText = cChar; + Font aOldBulletFont = pDev->GetFont(); + Font aBulletFnt(aFmt.GetBulletFont() ? *aFmt.GetBulletFont() : aOldBulletFont); + Size aBulSize = aOldBulletFont.GetSize(); + aBulletFnt.SetSize(aBulSize); + pDev->SetFont(aBulletFnt); + long nTextWidth = pDev->GetTextWidth(sText); + long nTextHeight = pDev->GetTextHeight(); + Point aStart(aBLPos.X()+(nRectWidth-nTextWidth)/2, aBLPos.Y() +(nRectHeight-nTextHeight)/2); + pDev->DrawText(aStart, sText); + pDev->SetFont(aOldFont); + }else if ( eNumType == SVX_NUM_BITMAP ) + { + const SvxBrushItem* pBrushItem = aFmt.GetBrush(); + if(pBrushItem) + { + const Graphic* pGrf = pBrushItem->GetGraphic(); + if(pGrf) + { + Size aSize(nRectHeight*6/20, nRectHeight*6/20); + Point aStart(aBLPos.X() + nRectWidth*7/20, aBLPos.Y() + nRectHeight*7/20); + + pGrf->Draw( pDev, aStart, aSize ); + } + } + } + }else if ( nItemId == DEFAULT_NONE) + { + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); + const Color aBackColor = rStyleSettings.GetFieldColor(); + const Color aTextColor = rStyleSettings.GetFieldTextColor(); + + Font aOldFont = pDev->GetFont(); + Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); + Size aSize = aFont.GetSize(); + //aSize.Height() = nRectHeight/5; + aSize.Height() = nRectHeight/4; + aFont.SetColor(aTextColor); + aFont.SetFillColor(aBackColor); + aFont.SetSize( aSize ); + pDev->SetFont(aFont); + pDev->SetFillColor( aBackColor ); + + String sText(SVX_RESSTR( RID_SVXSTR_NUMBULLET_NONE)); + + long nTextWidth = pDev->GetTextWidth(sText); + long nTextHeight = pDev->GetTextHeight(); + //GVT refine + while (nTextWidth>nRectWidth && aSize.Height()>4) { + aSize.Height() = aSize.Height()*0.9; + aFont.SetSize( aSize ); + pDev->SetFont(aFont); + nTextWidth = pDev->GetTextWidth(sText); + } + Point aStart(aBLPos.X()+(nRectWidth-nTextWidth)/2, aBLPos.Y() +(nRectHeight-nTextHeight)/2); + pDev->DrawText(aStart, sText); + + pDev->SetFont(aOldFont); + } + } + +} + +} } // end of namespace svx::sidebar diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx index 392fa5327490..4d7e66ce3442 100644 --- a/svx/source/svdraw/svdedtv1.cxx +++ b/svx/source/svdraw/svdedtv1.cxx @@ -55,6 +55,9 @@ #include <svx/sdr/contact/viewcontact.hxx> #include <svx/e3dsceneupdater.hxx> #include <svx/obj3d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/AffineMatrixItem.hxx> +#include <basegfx/matrix/b2dhommatrixtools.hxx> //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -249,23 +252,77 @@ void SdrEditView::ResizeMarkedObj(const Point& rRef, const Fraction& xFact, cons if( bUndo ) EndUndo(); } - -long SdrEditView::GetMarkedObjRotate() const +void SdrEditView::ResizeMultMarkedObj(const Point& rRef, + const Fraction& xFact, + const Fraction& yFact, + const bool bCopy, + const bool bWdh, + const bool bHgt) { - sal_Bool b1st=sal_True; - sal_Bool bOk=sal_True; - long nWink=0; + const bool bUndo = IsUndoEnabled(); + if( bUndo ) + { + XubString aStr; + ImpTakeDescriptionStr(STR_EditResize,aStr); + if (bCopy) + aStr+=ImpGetResStr(STR_EditWithCopy); + BegUndo(aStr); + } + + if (bCopy) + CopyMarkedObj(); + sal_uIntPtr nMarkAnz=GetMarkedObjectCount(); - for (sal_uIntPtr nm=0; nm<nMarkAnz && bOk; nm++) { + for (sal_uIntPtr nm=0; nm<nMarkAnz; nm++) + { SdrMark* pM=GetSdrMarkByIndex(nm); SdrObject* pO=pM->GetMarkedSdrObj(); - long nWink2=pO->GetRotateAngle(); - if (b1st) nWink=nWink2; - else if (nWink2!=nWink) bOk=sal_False; - b1st=sal_False; + if( bUndo ) + { + std::vector< SdrUndoAction* > vConnectorUndoActions( CreateConnectorUndo( *pO ) ); + AddUndoActions( vConnectorUndoActions ); + AddUndo( GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pO)); + } + + Fraction aFrac(1,1); + if (bWdh && bHgt) + pO->Resize(rRef, xFact, yFact); + else if (bWdh) + pO->Resize(rRef, xFact, aFrac); + else if (bHgt) + pO->Resize(rRef, aFrac, yFact); } - if (!bOk) nWink=0; - return nWink; + if( bUndo ) + EndUndo(); +} + +long SdrEditView::GetMarkedObjRotate() const +{ + long nRetval(0); + + if(GetMarkedObjectCount()) + { + SdrMark* pM = GetSdrMarkByIndex(0); + SdrObject* pO = pM->GetMarkedSdrObj(); + + nRetval = pO->GetRotateAngle(); + } + + return nRetval; + //sal_Bool b1st=sal_True; + //sal_Bool bOk=sal_True; + //long nWink=0; + //sal_uIntPtr nMarkAnz=GetMarkedObjectCount(); + //for (sal_uIntPtr nm=0; nm<nMarkAnz && bOk; nm++) { + // SdrMark* pM=GetSdrMarkByIndex(nm); + // SdrObject* pO=pM->GetMarkedSdrObj(); + // long nWink2=pO->GetRotateAngle(); + // if (b1st) nWink=nWink2; + // else if (nWink2!=nWink) bOk=sal_False; + // b1st=sal_False; + //} + //if (!bOk) nWink=0; + //return nWink; } void SdrEditView::RotateMarkedObj(const Point& rRef, long nWink, bool bCopy) @@ -1196,11 +1253,13 @@ sal_Bool SdrEditView::SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRe SfxItemSet SdrEditView::GetGeoAttrFromMarked() const { SfxItemSet aRetSet(pMod->GetItemPool(), // SID_ATTR_TRANSFORM_... aus s:svxids.hrc - SID_ATTR_TRANSFORM_POS_X,SID_ATTR_TRANSFORM_ANGLE, - SID_ATTR_TRANSFORM_PROTECT_POS,SID_ATTR_TRANSFORM_AUTOHEIGHT, - SDRATTR_ECKENRADIUS,SDRATTR_ECKENRADIUS, - 0); - if (AreObjectsMarked()) { + SID_ATTR_TRANSFORM_POS_X, SID_ATTR_TRANSFORM_ANGLE, + SID_ATTR_TRANSFORM_PROTECT_POS, SID_ATTR_TRANSFORM_AUTOHEIGHT, + SDRATTR_ECKENRADIUS, SDRATTR_ECKENRADIUS, + 0); + + if (AreObjectsMarked()) + { SfxItemSet aMarkAttr(GetAttrFromMarked(sal_False)); // wg. AutoGrowHeight und Eckenradius Rectangle aRect(GetMarkedObjRect()); @@ -1262,7 +1321,8 @@ SfxItemSet SdrEditView::GetGeoAttrFromMarked() const sal_Bool bSizProt=pObj->IsResizeProtect(); sal_Bool bPosProtDontCare=sal_False; sal_Bool bSizProtDontCare=sal_False; - for (sal_uIntPtr i=1; i<nMarkCount && (!bPosProtDontCare || !bSizProtDontCare); i++) { + for (sal_uIntPtr i=1; i<nMarkCount && (!bPosProtDontCare || !bSizProtDontCare); i++) + { pObj=rMarkList.GetMark(i)->GetMarkedSdrObj(); if (bPosProt!=pObj->IsMoveProtect()) bPosProtDontCare=sal_True; if (bSizProt!=pObj->IsResizeProtect()) bSizProtDontCare=sal_True; @@ -1304,7 +1364,48 @@ SfxItemSet SdrEditView::GetGeoAttrFromMarked() const aRetSet.Put(SdrEckenradiusItem(nRadius)); } + basegfx::B2DHomMatrix aTransformation; + + if(nMarkCount > 1) + { + // multiple objects, range is collected in aRect + aTransformation = basegfx::tools::createScaleTranslateB2DHomMatrix( + aRect.Left(), aRect.Top(), + aRect.getWidth(), aRect.getHeight()); + } + else if(pObj) + { + // single object, get homogen transformation + basegfx::B2DPolyPolygon aPolyPolygon; + + pObj->TRGetBaseGeometry(aTransformation, aPolyPolygon); + } + + if(aTransformation.isIdentity()) + { + aRetSet.InvalidateItem(SID_ATTR_TRANSFORM_MATRIX); + } + else + { + com::sun::star::geometry::AffineMatrix2D aAffineMatrix2D; + Point aPageOffset(0, 0); + + if(GetSdrPageView()) + { + aPageOffset = GetSdrPageView()->GetPageOrigin(); + } + + aAffineMatrix2D.m00 = aTransformation.get(0, 0); + aAffineMatrix2D.m01 = aTransformation.get(0, 1); + aAffineMatrix2D.m02 = aTransformation.get(0, 2) - aPageOffset.X(); + aAffineMatrix2D.m10 = aTransformation.get(1, 0); + aAffineMatrix2D.m11 = aTransformation.get(1, 1); + aAffineMatrix2D.m12 = aTransformation.get(1, 2) - aPageOffset.Y(); + + aRetSet.Put(AffineMatrixItem(&aAffineMatrix2D)); + } } + return aRetSet; } @@ -1373,6 +1474,7 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr) sal_Bool bChgPos=sal_False; sal_Bool bChgSiz=sal_False; + sal_Bool bChgWdh=sal_False; sal_Bool bChgHgt=sal_False; sal_Bool bRotate=sal_False; sal_Bool bShear =sal_False; @@ -1395,6 +1497,7 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr) if (SFX_ITEM_SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_WIDTH,sal_True,&pPoolItem)) { nSizX=((const SfxUInt32Item*)pPoolItem)->GetValue(); bChgSiz=sal_True; + bChgWdh=sal_True; } if (SFX_ITEM_SET==rAttr.GetItemState(SID_ATTR_TRANSFORM_HEIGHT,sal_True,&pPoolItem)) { nSizY=((const SfxUInt32Item*)pPoolItem)->GetValue(); @@ -1487,7 +1590,7 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr) GetSdrPageView()->PagePosToLogic(aRef); } - ResizeMarkedObj(aRef,aWdt,aHgt); + ResizeMultMarkedObj(aRef, aWdt, aHgt, false, bChgWdh, bChgHgt); } // Rotieren diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 28e785253a3e..1aa6d18c46b2 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -2035,6 +2035,38 @@ void SdrObjEditView::OnEndPasteOrDrop( PasteOrDropInfos* ) // applications can derive from these virtual methods to do something before a drop or paste operation } +sal_uInt16 SdrObjEditView::GetSelectionLevel() const +{ + sal_uInt16 nLevel = 0xFFFF; + if( IsTextEdit() ) + { + DBG_ASSERT(pTextEditOutlinerView!=NULL,"SdrObjEditView::GetAttributes(): pTextEditOutlinerView=NULL"); + DBG_ASSERT(pTextEditOutliner!=NULL,"SdrObjEditView::GetAttributes(): pTextEditOutliner=NULL"); + if( pTextEditOutlinerView ) + { + //start and end position + ESelection aSelect = pTextEditOutlinerView->GetSelection(); + sal_uInt16 nStartPara = ::std::min( aSelect.nStartPara, aSelect.nEndPara ); + sal_uInt16 nEndPara = ::std::max( aSelect.nStartPara, aSelect.nEndPara ); + //get level from each paragraph + nLevel = 0; + for( sal_uInt16 nPara = nStartPara; nPara <= nEndPara; nPara++ ) + { + sal_uInt16 nParaDepth = 1 << pTextEditOutliner->GetDepth( nPara ); + if( !(nLevel & nParaDepth) ) + nLevel += nParaDepth; + } + //reduce one level for Outliner Object + //if( nLevel > 0 && GetTextEditObject()->GetObjIdentifier() == OBJ_OUTLINETEXT ) + // nLevel = nLevel >> 1; + //no bullet paragraph selected + if( nLevel == 0) + nLevel = 0xFFFF; + } + } + return nLevel; +} + bool SdrObjEditView::SupportsFormatPaintbrush( sal_uInt32 nObjectInventor, sal_uInt16 nObjectIdentifier ) const { if( nObjectInventor != SdrInventor && nObjectInventor != E3dInventor ) diff --git a/svx/source/svdraw/svdfmtf.cxx b/svx/source/svdraw/svdfmtf.cxx index d164cb1ed913..1314161502bc 100644 --- a/svx/source/svdraw/svdfmtf.cxx +++ b/svx/source/svdraw/svdfmtf.cxx @@ -351,19 +351,19 @@ void ImpSdrGDIMetaFileImport::SetAttributes(SdrObject* pObj, bool bForceTextAttr switch(maLineJoin) { default : // basegfx::B2DLINEJOIN_NONE - mpLineAttr->Put(XLineJointItem(XLINEJOINT_NONE)); + mpLineAttr->Put(XLineJointItem(com::sun::star::drawing::LineJoint_NONE)); break; case basegfx::B2DLINEJOIN_MIDDLE: - mpLineAttr->Put(XLineJointItem(XLINEJOINT_MIDDLE)); + mpLineAttr->Put(XLineJointItem(com::sun::star::drawing::LineJoint_MIDDLE)); break; case basegfx::B2DLINEJOIN_BEVEL: - mpLineAttr->Put(XLineJointItem(XLINEJOINT_BEVEL)); + mpLineAttr->Put(XLineJointItem(com::sun::star::drawing::LineJoint_BEVEL)); break; case basegfx::B2DLINEJOIN_MITER: - mpLineAttr->Put(XLineJointItem(XLINEJOINT_MITER)); + mpLineAttr->Put(XLineJointItem(com::sun::star::drawing::LineJoint_MITER)); break; case basegfx::B2DLINEJOIN_ROUND: - mpLineAttr->Put(XLineJointItem(XLINEJOINT_ROUND)); + mpLineAttr->Put(XLineJointItem(com::sun::star::drawing::LineJoint_ROUND)); break; } diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx index cf6630d6172d..0f2686b15226 100644 --- a/svx/source/svdraw/svdmodel.cxx +++ b/svx/source/svdraw/svdmodel.cxx @@ -762,7 +762,7 @@ bool SdrModel::IsUndoEnabled() const void SdrModel::ImpCreateTables() { // der Writer hat seinen eigenen ColorTable - if (!bExtColorTable) pColorTable=new XColorTable(aTablePath,(XOutdevItemPool*)pItemPool); + if (!bExtColorTable) pColorTable=new XColorList(aTablePath,(XOutdevItemPool*)pItemPool); pDashList =new XDashList (aTablePath,(XOutdevItemPool*)pItemPool); pLineEndList =new XLineEndList (aTablePath,(XOutdevItemPool*)pItemPool); pHatchList =new XHatchList (aTablePath,(XOutdevItemPool*)pItemPool); @@ -2173,7 +2173,7 @@ const ::com::sun::star::uno::Sequence< sal_Int8 >& SdrModel::getUnoTunnelImpleme // // i120668, move from the header files, add delete action // -void SdrModel::SetColorTable(XColorTable* pTable) { delete pColorTable; pColorTable=pTable; } +void SdrModel::SetColorTable(XColorList* pTable) { delete pColorTable; pColorTable=pTable; } void SdrModel::SetDashList(XDashList* pList) { delete pDashList; pDashList=pList; } void SdrModel::SetLineEndList(XLineEndList* pList) { delete pLineEndList; pLineEndList=pList; } void SdrModel::SetHatchList(XHatchList* pList) { delete pHatchList; pHatchList=pList; } diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx index 20ec9a3528e5..d34ada5c41cf 100644 --- a/svx/source/svdraw/svdoashp.cxx +++ b/svx/source/svdraw/svdoashp.cxx @@ -3300,7 +3300,7 @@ void SdrObjCustomShape::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, aGeo.RecalcTan(); // force metric to pool metric - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) @@ -3447,7 +3447,7 @@ sal_Bool SdrObjCustomShape::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, ba } // force MapUnit to 100th mm - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index c1a21fca565a..2bfa847f8552 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -2030,6 +2030,23 @@ const SfxPoolItem& SdrObject::GetObjectItem(const sal_uInt16 nWhich) const return GetObjectItemSet().Get(nWhich); } +SfxMapUnit SdrObject::GetObjectMapUnit() const +{ + SfxMapUnit aRetval(SFX_MAPUNIT_100TH_MM); + SdrItemPool* pPool = GetObjectItemPool(); + + if(pPool) + { + aRetval = pPool->GetMetric(0); + } + else + { + OSL_ENSURE(pPool, "SdrObjects always need a pool (!)"); + } + + return aRetval; +} + const SfxPoolItem& SdrObject::GetMergedItem(const sal_uInt16 nWhich) const { return GetMergedItemSet().Get(nWhich); @@ -3028,7 +3045,7 @@ sal_Bool SdrObject::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B } // force MapUnit to 100th mm - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) @@ -3079,7 +3096,7 @@ void SdrObject::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const ba } // force metric to pool metric - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) diff --git a/svx/source/svdraw/svdogrp.cxx b/svx/source/svdraw/svdogrp.cxx index 7acee8d8d2cf..0c3902a5583e 100644 --- a/svx/source/svdraw/svdogrp.cxx +++ b/svx/source/svdraw/svdogrp.cxx @@ -97,8 +97,6 @@ SdrObjGroup::SdrObjGroup() pSub->SetOwnerObj(this); pSub->SetListKind(SDROBJLIST_GROUPOBJ); bRefPoint=sal_False; - nDrehWink=0; - nShearWink=0; bClosedObj=sal_False; } @@ -308,8 +306,6 @@ void SdrObjGroup::operator=(const SdrObject& rObj) pSub->CopyObjects(*rObj.GetSubList()); // copy local paremeters - nDrehWink =((SdrObjGroup&)rObj).nDrehWink; - nShearWink =((SdrObjGroup&)rObj).nShearWink; aRefPoint =((SdrObjGroup&)rObj).aRefPoint; bRefPoint =((SdrObjGroup&)rObj).bRefPoint; } @@ -388,13 +384,33 @@ FASTBOOL SdrObjGroup::BegCreate(SdrDragStat& /*rStat*/) long SdrObjGroup::GetRotateAngle() const { - return nDrehWink; + const sal_uInt32 nObjCount(pSub->GetObjCount()); + long nRetval(0); + + if(nObjCount) + { + SdrObject* pObj = pSub->GetObj(0); + + nRetval = pObj->GetRotateAngle(); + } + + return nRetval; } long SdrObjGroup::GetShearAngle(FASTBOOL /*bVertical*/) const { - return nShearWink; + const sal_uInt32 nObjCount(pSub->GetObjCount()); + long nRetval(0); + + if(nObjCount) + { + SdrObject* pObj = pSub->GetObj(0); + + nRetval = pObj->GetShearAngle(); + } + + return nRetval; } @@ -476,7 +492,6 @@ void SdrObjGroup::NbcResize(const Point& rRef, const Fraction& xFact, const Frac void SdrObjGroup::NbcRotate(const Point& rRef, long nWink, double sn, double cs) { SetGlueReallyAbsolute(sal_True); - nDrehWink=NormAngle360(nDrehWink+nWink); RotatePoint(aRefPoint,rRef,sn,cs); SdrObjList* pOL=pSub; sal_uIntPtr nObjAnz=pOL->GetObjCount(); @@ -507,7 +522,6 @@ void SdrObjGroup::NbcMirror(const Point& rRef1, const Point& rRef2) void SdrObjGroup::NbcShear(const Point& rRef, long nWink, double tn, FASTBOOL bVShear) { SetGlueReallyAbsolute(sal_True); - nShearWink+=nWink; ShearPoint(aRefPoint,rRef,tn); SdrObjList* pOL=pSub; sal_uIntPtr nObjAnz=pOL->GetObjCount(); @@ -647,7 +661,6 @@ void SdrObjGroup::Rotate(const Point& rRef, long nWink, double sn, double cs) if (nWink!=0) { SetGlueReallyAbsolute(sal_True); Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect(); - nDrehWink=NormAngle360(nDrehWink+nWink); RotatePoint(aRefPoint,rRef,sn,cs); // #32383# Erst die Verbinder verschieben, dann den Rest SdrObjList* pOL=pSub; @@ -700,7 +713,6 @@ void SdrObjGroup::Shear(const Point& rRef, long nWink, double tn, FASTBOOL bVShe if (nWink!=0) { SetGlueReallyAbsolute(sal_True); Rectangle aBoundRect0; if (pUserCall!=NULL) aBoundRect0=GetLastBoundRect(); - nShearWink+=nWink; ShearPoint(aRefPoint,rRef,tn); // #32383# Erst die Verbinder verschieben, dann den Rest SdrObjList* pOL=pSub; diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx index b62ac517f3c8..b6fc7c8535c6 100644 --- a/svx/source/svdraw/svdopath.cxx +++ b/svx/source/svdraw/svdopath.cxx @@ -2962,7 +2962,7 @@ sal_Bool SdrPathObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx:: } // force MapUnit to 100th mm - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) @@ -3032,7 +3032,7 @@ void SdrPathObj::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const b aGeo.RecalcTan(); // force metric to pool metric - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index e330c993db09..315979b59618 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -1710,7 +1710,7 @@ sal_Bool SdrTextObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx:: } // force MapUnit to 100th mm - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) @@ -1772,7 +1772,7 @@ void SdrTextObj::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const b aGeo.RecalcTan(); // force metric to pool metric - SfxMapUnit eMapUnit = GetObjectItemSet().GetPool()->GetMetric(0); + const SfxMapUnit eMapUnit(GetObjectMapUnit()); if(eMapUnit != SFX_MAPUNIT_100TH_MM) { switch(eMapUnit) diff --git a/svx/source/svdraw/svdstr.src b/svx/source/svdraw/svdstr.src index 64a8c9dde105..93b44e115892 100644 --- a/svx/source/svdraw/svdstr.src +++ b/svx/source/svdraw/svdstr.src @@ -2870,6 +2870,16 @@ Bitmap SIP_SA_ACCESSIBILITY_CROP_MARKERS File = "cropmarkersACC.bmp"; }; +// DialControl bitmaps +Bitmap IMG_DIACONTROL_NORMAL +{ + File = "rotation.png"; +}; +Bitmap IMG_DIACONTROL_H +{ + File = "rotation_h.png"; +}; + //IAccessibility2 Implementation 2009----- String STR_ObjNameSingulFONTWORK { diff --git a/svx/source/table/accessibletableshape.cxx b/svx/source/table/accessibletableshape.cxx index 0467840abb92..f144186ec6c0 100644 --- a/svx/source/table/accessibletableshape.cxx +++ b/svx/source/table/accessibletableshape.cxx @@ -34,7 +34,7 @@ #include <vcl/svapp.hxx> #include <svx/AccessibleTableShape.hxx> -#include "tablecontroller.hxx" +#include <svx/sdr/table/tablecontroller.hxx> #include "accessiblecell.hxx" #include <algorithm> diff --git a/svx/source/table/tablecontroller.cxx b/svx/source/table/tablecontroller.cxx index 19b2ecc8adcb..9606c43726f2 100644 --- a/svx/source/table/tablecontroller.cxx +++ b/svx/source/table/tablecontroller.cxx @@ -24,7 +24,8 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" -#include "tablecontroller.hxx" +#include <svx/sdr/table/tablecontroller.hxx> +#include <tablemodel.hxx> #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> #include <com/sun/star/container/XIndexAccess.hpp> diff --git a/svx/source/tbxctrls/fillctrl.cxx b/svx/source/tbxctrls/fillctrl.cxx index 5a116a01d1b9..bd69ac94b1bb 100644 --- a/svx/source/tbxctrls/fillctrl.cxx +++ b/svx/source/tbxctrls/fillctrl.cxx @@ -129,14 +129,6 @@ void SvxFillToolBoxControl::StateChanged( delete pStyleItem; pStyleItem = (XFillStyleItem*) pState->Clone(); pFillTypeLB->Enable(); - - eLastXFS = pFillTypeLB->GetSelectEntryPos(); - bUpdate = sal_True; - - XFillStyle eXFS = (XFillStyle)pStyleItem->GetValue(); - pFillTypeLB->SelectEntryPos( - sal::static_int_cast< sal_uInt16 >( eXFS ) ); - pFillAttrLB->Enable(); } else if( pStyleItem ) { @@ -175,6 +167,27 @@ void SvxFillToolBoxControl::StateChanged( bEnableControls = sal_True; } } + + if( pStyleItem ) + { + // ensure that the correct entry is selected in pFillTypeLB. It + // might have been changed by nSID == SID_ATTR_FILL_STYLE, but + // it might also be in an in-between state when user had started to + // change fillstyle, but not yet changed fillvalue for new style + // and when nSID == SID_ATTR_FILL_COLOR/SID_ATTR_FILL_GRADIENT/ + // SID_ATTR_FILL_HATCH/SID_ATTR_FILL_BITMAP value change is triggered + eLastXFS = pFillTypeLB->GetSelectEntryPos(); + XFillStyle eXFS = (XFillStyle)pStyleItem->GetValue(); + + if(eLastXFS != eXFS) + { + bUpdate = sal_True; + pFillTypeLB->SelectEntryPos( sal::static_int_cast< sal_uInt16 >( eXFS ) ); + } + + pFillAttrLB->Enable(); + } + if( bEnableControls ) { //pFillTypeLB->Enable(); @@ -320,13 +333,13 @@ void SvxFillToolBoxControl::Update( const SfxPoolItem* pState ) XGradientList aGradientList( aEmptyString ); aGradientList.Insert( pEntry ); aGradientList.SetDirty( sal_False ); - Bitmap* pBmp = aGradientList.CreateBitmapForUI( 0 ); + const Bitmap aBmp = aGradientList.GetUiBitmap( 0 ); - if( pBmp ) + if( !aBmp.IsEmpty() ) { - ( (ListBox*)pFillAttrLB )->InsertEntry( pEntry->GetName(), *pBmp ); + ( (ListBox*)pFillAttrLB )->InsertEntry( pEntry->GetName(), aBmp ); pFillAttrLB->SelectEntryPos( pFillAttrLB->GetEntryCount() - 1 ); - delete pBmp; + //delete pBmp; } aGradientList.Remove( 0 ); @@ -370,13 +383,13 @@ void SvxFillToolBoxControl::Update( const SfxPoolItem* pState ) XHatchList aHatchList( aEmptyString ); aHatchList.Insert( pEntry ); aHatchList.SetDirty( sal_False ); - Bitmap* pBmp = aHatchList.CreateBitmapForUI( 0 ); + const Bitmap aBmp = aHatchList.GetUiBitmap( 0 ); - if( pBmp ) + if( !aBmp.IsEmpty() ) { - ( (ListBox*)pFillAttrLB )->InsertEntry( pEntry->GetName(), *pBmp ); + ( (ListBox*)pFillAttrLB )->InsertEntry( pEntry->GetName(), aBmp ); pFillAttrLB->SelectEntryPos( pFillAttrLB->GetEntryCount() - 1 ); - delete pBmp; + //delete pBmp; } aHatchList.Remove( 0 ); diff --git a/svx/source/tbxctrls/itemwin.cxx b/svx/source/tbxctrls/itemwin.cxx index 119c4c77eb6e..5141ed32c0ab 100644 --- a/svx/source/tbxctrls/itemwin.cxx +++ b/svx/source/tbxctrls/itemwin.cxx @@ -52,8 +52,6 @@ #include "svx/linectrl.hxx" #include <svtools/colorcfg.hxx> -#include "linectrl.hrc" - using namespace ::com::sun::star::uno; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::util; @@ -272,7 +270,7 @@ void SvxLineBox::DataChanged( const DataChangedEvent& rDCEvt ) void SvxLineBox::FillControl() { - FillStyles(); + // FillStyles(); if ( !mpSh ) mpSh = SfxObjectShell::Current(); diff --git a/svx/source/tbxctrls/linectrl.cxx b/svx/source/tbxctrls/linectrl.cxx index ec47f8d3c6e9..0ba5f8d10f29 100644 --- a/svx/source/tbxctrls/linectrl.cxx +++ b/svx/source/tbxctrls/linectrl.cxx @@ -525,7 +525,6 @@ void SvxLineEndWindow::FillValueSet() if( pLineEndList ) { XLineEndEntry* pEntry = NULL; - Bitmap* pBmp = NULL; VirtualDevice aVD; long nCount = pLineEndList->Count(); @@ -535,16 +534,16 @@ void SvxLineEndWindow::FillValueSet() basegfx::B2DPolyPolygon aNothing; pLineEndList->Insert( new XLineEndEntry( aNothing, SVX_RESSTR( RID_SVXSTR_NONE ) ) ); pEntry = pLineEndList->GetLineEnd( nCount ); - pBmp = pLineEndList->GetBitmap( nCount ); - DBG_ASSERT( pBmp, "UI-Bitmap wurde nicht erzeugt" ); + Bitmap aBmp = pLineEndList->GetUiBitmap( nCount ); + OSL_ENSURE( !aBmp.IsEmpty(), "UI-Bitmap wurde nicht erzeugt" ); - aBmpSize = pBmp->GetSizePixel(); + aBmpSize = aBmp.GetSizePixel(); aVD.SetOutputSizePixel( aBmpSize, sal_False ); aBmpSize.Width() = aBmpSize.Width() / 2; Point aPt0( 0, 0 ); Point aPt1( aBmpSize.Width(), 0 ); - aVD.DrawBitmap( Point(), *pBmp ); + aVD.DrawBitmap( Point(), aBmp ); aLineEndSet.InsertItem( 1, aVD.GetBitmap( aPt0, aBmpSize ), pEntry->GetName() ); aLineEndSet.InsertItem( 2, aVD.GetBitmap( aPt1, aBmpSize ), pEntry->GetName() ); @@ -554,10 +553,10 @@ void SvxLineEndWindow::FillValueSet() { pEntry = pLineEndList->GetLineEnd( i ); DBG_ASSERT( pEntry, "Konnte auf LineEndEntry nicht zugreifen" ); - pBmp = pLineEndList->GetBitmap( i ); - DBG_ASSERT( pBmp, "UI-Bitmap wurde nicht erzeugt" ); + aBmp = pLineEndList->GetUiBitmap( i ); + OSL_ENSURE( !aBmp.IsEmpty(), "UI-Bitmap wurde nicht erzeugt" ); - aVD.DrawBitmap( aPt0, *pBmp ); + aVD.DrawBitmap( aPt0, aBmp ); aLineEndSet.InsertItem( (sal_uInt16)((i+1L)*2L+1L), aVD.GetBitmap( aPt0, aBmpSize ), pEntry->GetName() ); aLineEndSet.InsertItem( (sal_uInt16)((i+2L)*2L), aVD.GetBitmap( aPt1, aBmpSize ), pEntry->GetName() ); } diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index b9703c6975e1..93f726ff5ef3 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -834,7 +834,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, { SfxObjectShell* pDocSh = SfxObjectShell::Current(); const SfxPoolItem* pItem = NULL; - XColorTable* pColorTable = NULL; + XColorList* pColorTable = NULL; sal_Bool bKillTable = sal_False; const Size aSize12( 13, 13 ); @@ -844,7 +844,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, if ( !pColorTable ) { - pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); bKillTable = sal_True; } @@ -1014,7 +1014,7 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co { if (( nSID == SID_COLOR_TABLE ) && ( pState->ISA( SvxColorTableItem ))) { - XColorTable* pColorTable = pState ? ((SvxColorTableItem *)pState)->GetColorTable() : NULL; + XColorList* pColorTable = pState ? ((SvxColorTableItem *)pState)->GetColorTable() : NULL; if ( pColorTable ) { diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx b/svx/source/tbxctrls/tbxcolorupdate.cxx index fa3c8ab032b6..d909b4387485 100644 --- a/svx/source/tbxctrls/tbxcolorupdate.cxx +++ b/svx/source/tbxctrls/tbxcolorupdate.cxx @@ -83,7 +83,7 @@ namespace svx { BitmapEx aBmpEx( aImage.GetBitmapEx() ); Bitmap aBmp( aBmpEx.GetBitmap() ); - BitmapWriteAccess* pBmpAcc = aBmp.AcquireWriteAccess(); + BitmapWriteAccess* pBmpAcc = aBmp.IsEmpty() ? NULL : aBmp.AcquireWriteAccess(); maBmpSize = aBmp.GetSizePixel(); @@ -117,6 +117,20 @@ namespace svx { if( maBmpSize.Width() <= 16 ) maUpdRect = Rectangle( Point( 0,12 ), Size( maBmpSize.Width(), 4 ) ); + else if(76 == maBmpSize.Width() && 12 == maBmpSize.Height()) + { + maUpdRect.Left() = 22; + maUpdRect.Top() = 2; + maUpdRect.Right() = 73; + maUpdRect.Bottom() = 9; + } + else if(30 == maBmpSize.Width() && 16 == maBmpSize.Height()) + { + maUpdRect.Left() = 17; + maUpdRect.Top() = 2; + maUpdRect.Right() = 27; + maUpdRect.Bottom() = 13; + } else maUpdRect = Rectangle( Point( 1, maBmpSize.Height() - 7 ), Size( maBmpSize.Width() - 2 ,6 ) ); } diff --git a/svx/source/unodraw/XPropertyTable.cxx b/svx/source/unodraw/XPropertyTable.cxx index 8f4a9e5ad54b..297c619916c6 100644 --- a/svx/source/unodraw/XPropertyTable.cxx +++ b/svx/source/unodraw/XPropertyTable.cxx @@ -50,15 +50,13 @@ using namespace ::vos; class SvxUnoXPropertyTable : public WeakImplHelper2< container::XNameContainer, lang::XServiceInfo > { private: - XPropertyTable* mpTable; XPropertyList* mpList; sal_Int16 mnWhich; - long getCount() const { return mpList ? mpList->Count() : (mpTable?mpTable->Count():0); } + long getCount() const { return mpList ? mpList->Count() : 0 ; } XPropertyEntry* get( long index ) const; public: SvxUnoXPropertyTable( sal_Int16 nWhich, XPropertyList* pList ) throw(); - SvxUnoXPropertyTable( sal_Int16 nWhich, XPropertyTable* pTable ) throw(); virtual ~SvxUnoXPropertyTable() throw(); @@ -84,13 +82,8 @@ public: virtual sal_Bool SAL_CALL hasElements( ) throw( uno::RuntimeException); }; -SvxUnoXPropertyTable::SvxUnoXPropertyTable( sal_Int16 nWhich, XPropertyTable* pTable ) throw() -: mpTable( pTable ), mpList( NULL ), mnWhich( nWhich ) -{ -} - SvxUnoXPropertyTable::SvxUnoXPropertyTable( sal_Int16 nWhich, XPropertyList* pList ) throw() -: mpTable( NULL ), mpList( pList ), mnWhich( nWhich ) +: mpList( pList ), mnWhich( nWhich ) { } @@ -100,9 +93,7 @@ SvxUnoXPropertyTable::~SvxUnoXPropertyTable() throw() XPropertyEntry* SvxUnoXPropertyTable::get( long index ) const { - if( mpTable ) - return mpTable->Get( index, 0 ); - else if( mpList ) + if( mpList ) return mpList->Get( index, 0 ); else return NULL; @@ -131,7 +122,7 @@ void SAL_CALL SvxUnoXPropertyTable::insertByName( const OUString& aName, const { OGuard aGuard( Application::GetSolarMutex() ); - if( NULL == mpList && NULL == mpTable ) + if( NULL == mpList ) throw lang::IllegalArgumentException(); if( hasByName( aName ) ) @@ -146,8 +137,6 @@ void SAL_CALL SvxUnoXPropertyTable::insertByName( const OUString& aName, const if( mpList ) mpList->Insert( pNewEntry ); - else - mpTable->Insert( mpTable->Count(), pNewEntry ); } void SAL_CALL SvxUnoXPropertyTable::removeByName( const OUString& Name ) @@ -168,8 +157,6 @@ void SAL_CALL SvxUnoXPropertyTable::removeByName( const OUString& Name ) { if( mpList ) delete mpList->Remove( i, 0 ); - else - delete mpTable->Remove( i, 0 ); return; } } @@ -200,8 +187,6 @@ void SAL_CALL SvxUnoXPropertyTable::replaceByName( const OUString& aName, const if( mpList ) delete mpList->Replace( pNewEntry, i ); - else - delete mpTable->Replace( i, pNewEntry ); return; } } @@ -291,7 +276,7 @@ sal_Bool SAL_CALL SvxUnoXPropertyTable::hasElements( ) class SvxUnoXColorTable : public SvxUnoXPropertyTable { public: - SvxUnoXColorTable( XPropertyTable* pTable ) throw() : SvxUnoXPropertyTable( XATTR_LINECOLOR, pTable ) {}; + SvxUnoXColorTable( XPropertyList* pTable ) throw() : SvxUnoXPropertyTable( XATTR_LINECOLOR, pTable ) {}; // SvxUnoXPropertyTable virtual uno::Any getAny( const XPropertyEntry* pEntry ) const throw(); @@ -305,7 +290,7 @@ public: virtual uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw( uno::RuntimeException); }; -uno::Reference< uno::XInterface > SAL_CALL SvxUnoXColorTable_createInstance( XPropertyTable* pTable ) throw() +uno::Reference< uno::XInterface > SAL_CALL SvxUnoXColorTable_createInstance( XPropertyList* pTable ) throw() { return (OWeakObject*) new SvxUnoXColorTable( pTable ); } diff --git a/svx/source/unodraw/unoctabl.cxx b/svx/source/unodraw/unoctabl.cxx index d9dae7469d33..d8e555288a28 100644 --- a/svx/source/unodraw/unoctabl.cxx +++ b/svx/source/unodraw/unoctabl.cxx @@ -44,7 +44,7 @@ using namespace ::cppu; class SvxUnoColorTable : public WeakImplHelper2< container::XNameContainer, lang::XServiceInfo > { private: - XColorTable* pTable; + XColorList* pTable; public: SvxUnoColorTable() throw(); @@ -83,7 +83,7 @@ public: SvxUnoColorTable::SvxUnoColorTable() throw() { - pTable = new XColorTable( SvtPathOptions().GetPalettePath() ); + pTable = new XColorList( SvtPathOptions().GetPalettePath() ); } SvxUnoColorTable::~SvxUnoColorTable() throw() @@ -135,14 +135,14 @@ void SAL_CALL SvxUnoColorTable::insertByName( const OUString& aName, const uno:: if( pTable ) { XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName ); - pTable->Insert( pTable->Count(), pEntry ); + pTable->Insert( pEntry, pTable->Count() ); } } void SAL_CALL SvxUnoColorTable::removeByName( const OUString& Name ) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) { - long nIndex = pTable ? ((XPropertyTable*)pTable)->Get( Name ) : -1; + long nIndex = pTable ? ((XPropertyList*)pTable)->Get( Name ) : -1; if( nIndex == -1 ) throw container::NoSuchElementException(); @@ -157,23 +157,23 @@ void SAL_CALL SvxUnoColorTable::replaceByName( const OUString& aName, const uno: if( !(aElement >>= nColor) ) throw lang::IllegalArgumentException(); - long nIndex = pTable ? ((XPropertyTable*)pTable)->Get( aName ) : -1; + long nIndex = pTable ? ((XPropertyList*)pTable)->Get( aName ) : -1; if( nIndex == -1 ) throw container::NoSuchElementException(); XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName ); - delete pTable->Replace( nIndex, pEntry ); + delete pTable->Replace( pEntry, nIndex ); } // XNameAccess uno::Any SAL_CALL SvxUnoColorTable::getByName( const OUString& aName ) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) { - long nIndex = pTable ? ((XPropertyTable*)pTable)->Get( aName ) : -1; + long nIndex = pTable ? ((XPropertyList*)pTable)->Get( aName ) : -1; if( nIndex == -1 ) throw container::NoSuchElementException(); - XColorEntry* pEntry = ((XColorTable*)pTable)->GetColor( nIndex ); + XColorEntry* pEntry = ((XColorList*)pTable)->GetColor( nIndex ); return uno::Any( (sal_Int32) pEntry->GetColor().GetRGBColor() ); } @@ -197,7 +197,7 @@ uno::Sequence< OUString > SAL_CALL SvxUnoColorTable::getElementNames( ) sal_Bool SAL_CALL SvxUnoColorTable::hasByName( const OUString& aName ) throw( uno::RuntimeException ) { - long nIndex = pTable ? ((XPropertyTable*)pTable)->Get( aName ) : -1; + long nIndex = pTable ? ((XPropertyList*)pTable)->Get( aName ) : -1; return nIndex != -1; } @@ -238,6 +238,8 @@ uno::Reference< uno::XInterface > SAL_CALL create_EnhancedCustomShapeEngine( con #include "cppuhelper/factory.hxx" #include "uno/lbnames.h" #include <svx/sdr/primitive2d/primitiveFactory2d.hxx> +#include "sidebar/PanelFactory.hxx" + /* namespace svx @@ -366,16 +368,15 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory ( ::svx::SvXMLGraphicExportHelper_createInstance, ::svx::SvXMLGraphicExportHelper_getSupportedServiceNames() ); } -/* - else if( ::svx::ExtrusionDepthController_getImplementationName().equalsAscii( pImplName ) ) + else if (::svx::sidebar::PanelFactory::getImplementationName().equalsAscii(pImplName)) { xFactory = ::cppu::createSingleFactory( - reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ), - ::svx::ExtrusionDepthController_getImplementationName(), - ::svx::ExtrusionDepthController_createInstance, - ::svx::ExtrusionDepthController_getSupportedServiceNames() ); + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ::svx::sidebar::PanelFactory::getImplementationName(), + ::svx::sidebar::PanelFactory::createInstance, + ::svx::sidebar::PanelFactory::getSupportedServiceNames()); } -*/ + if( xFactory.is()) { xFactory->acquire(); diff --git a/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx b/svx/source/xoutdev/XPropertyEntry.cxx index 355295d7f55d..19d0e3a3dfbe 100644..100755 --- a/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx +++ b/svx/source/xoutdev/XPropertyEntry.cxx @@ -19,35 +19,26 @@ * *************************************************************/ - - // MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "taskpane/TaskPaneControlFactory.hxx" +#include "precompiled_svx.hxx" -#include <vos/diagnose.hxx> +#include <svx/XPropertyEntry.hxx> +// -------------------- -namespace sd { namespace toolpanel { - -ControlFactory::ControlFactory (void) +XPropertyEntry::XPropertyEntry(const String& rName) +: maName(rName), + maUiBitmap() { } - - - -ControlFactory::~ControlFactory (void) +XPropertyEntry::XPropertyEntry(const XPropertyEntry& rOther) +: maName(rOther.maName), + maUiBitmap(rOther.maUiBitmap) { } - - - -::std::auto_ptr<TreeNode> ControlFactory::CreateControl( ::Window& i_rParent ) +XPropertyEntry::~XPropertyEntry() { - TreeNode* pNewNode = InternalCreateControl( i_rParent ); - return ::std::auto_ptr<TreeNode>( pNewNode ); } -} } // end of namespace ::sd::toolpanel +// eof diff --git a/svx/source/xoutdev/xattr.cxx b/svx/source/xoutdev/xattr.cxx index c09501beaf8a..4788ec94bafa 100644 --- a/svx/source/xoutdev/xattr.cxx +++ b/svx/source/xoutdev/xattr.cxx @@ -471,11 +471,11 @@ SvStream& XColorItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const /************************************************************************* |* -|* const XColor& XColorItem::GetColorValue(const XColorTable* pTable) const +|* const XColor& XColorItem::GetColorValue(const XColorList* pTable) const |* \************************************************************************/ -const Color& XColorItem::GetColorValue(const XColorTable* pTable) const +const Color& XColorItem::GetColorValue(const XColorList* pTable) const { if (!IsIndex()) return aColor; @@ -1047,7 +1047,7 @@ SvStream& XLineDashItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const /************************************************************************* |* -|* const XDash& XLineDashItem::GetValue(const XDashTable* pTable) const +|* const XDash& XLineDashItem::GetValue(const XDashList* pTable) const |* |* Beschreibung |* Ersterstellung 15.11.94 @@ -1055,7 +1055,7 @@ SvStream& XLineDashItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const |* *************************************************************************/ -const XDash& XLineDashItem::GetDashValue(const XDashTable* pTable) const // GetValue -> GetDashValue +const XDash& XLineDashItem::GetDashValue(const XDashList* pTable) const // GetValue -> GetDashValue { if (!IsIndex()) return aDash; @@ -1868,7 +1868,7 @@ SvStream& XLineStartItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const /************************************************************************* |* -|* const basegfx::B2DPolyPolygon& XLineStartItem::GetValue(const XLineEndTable* pTable) +|* const basegfx::B2DPolyPolygon& XLineStartItem::GetValue(const XLineEndList* pTable) |* const |* |* Beschreibung @@ -1877,7 +1877,7 @@ SvStream& XLineStartItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const |* *************************************************************************/ -basegfx::B2DPolyPolygon XLineStartItem::GetLineStartValue(const XLineEndTable* pTable) const +basegfx::B2DPolyPolygon XLineStartItem::GetLineStartValue(const XLineEndList* pTable) const { if (!IsIndex()) { @@ -2340,7 +2340,7 @@ SvStream& XLineEndItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const /************************************************************************* |* -|* const basegfx::B2DPolyPolygon& XLineEndItem::GetValue(const XLineEndTable* pTable) const +|* const basegfx::B2DPolyPolygon& XLineEndItem::GetValue(const XLineEndList* pTable) const |* |* Beschreibung |* Ersterstellung 15.11.94 @@ -2348,7 +2348,7 @@ SvStream& XLineEndItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const |* *************************************************************************/ -basegfx::B2DPolyPolygon XLineEndItem::GetLineEndValue(const XLineEndTable* pTable) const +basegfx::B2DPolyPolygon XLineEndItem::GetLineEndValue(const XLineEndList* pTable) const { if (!IsIndex()) { @@ -3713,7 +3713,7 @@ SvStream& XFillGradientItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) co /************************************************************************* |* -|* const XGradient& XFillGradientItem::GetValue(const XGradientTable* pTable) +|* const XGradient& XFillGradientItem::GetValue(const XGradientList* pTable) |* const |* |* Beschreibung @@ -3722,7 +3722,7 @@ SvStream& XFillGradientItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) co |* *************************************************************************/ -const XGradient& XFillGradientItem::GetGradientValue(const XGradientTable* pTable) const // GetValue -> GetGradientValue +const XGradient& XFillGradientItem::GetGradientValue(const XGradientList* pTable) const // GetValue -> GetGradientValue { if (!IsIndex()) return aGradient; @@ -4423,7 +4423,7 @@ SvStream& XFillHatchItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const /************************************************************************* |* -|* const XHatch& XFillHatchItem::GetValue(const XHatchTable* pTable) const +|* const XHatch& XFillHatchItem::GetValue(const XHatchList* pTable) const |* |* Beschreibung |* Ersterstellung 15.11.94 @@ -4431,7 +4431,7 @@ SvStream& XFillHatchItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const |* *************************************************************************/ -const XHatch& XFillHatchItem::GetHatchValue(const XHatchTable* pTable) const // GetValue -> GetHatchValue +const XHatch& XFillHatchItem::GetHatchValue(const XHatchList* pTable) const // GetValue -> GetHatchValue { if (!IsIndex()) return aHatch; diff --git a/svx/source/xoutdev/xattr2.cxx b/svx/source/xoutdev/xattr2.cxx index 69a4b7fbc556..79cb92dffc6c 100644 --- a/svx/source/xoutdev/xattr2.cxx +++ b/svx/source/xoutdev/xattr2.cxx @@ -37,6 +37,7 @@ #include <svx/dialmgr.hxx> #include <editeng/itemtype.hxx> #include <svx/xdef.hxx> +#include <svx/AffineMatrixItem.hxx> #define GLOBALOVERFLOW @@ -143,7 +144,7 @@ TYPEINIT1_AUTOFACTORY(XLineJointItem, SfxEnumItem); // ----------------------------------------------------------------------------- -XLineJointItem::XLineJointItem( XLineJoint eLineJoint ) : +XLineJointItem::XLineJointItem( com::sun::star::drawing::LineJoint eLineJoint ) : SfxEnumItem(XATTR_LINEJOINT, sal::static_int_cast< sal_uInt16 >(eLineJoint)) { } @@ -169,7 +170,7 @@ SfxPoolItem* XLineJointItem::Create( SvStream& rIn, sal_uInt16 nVer ) const XLineJointItem* pRet = new XLineJointItem( rIn ); if(nVer < 1) - pRet->SetValue(XLINEJOINT_ROUND); + pRet->SetValue(com::sun::star::drawing::LineJoint_ROUND); return pRet; } @@ -184,7 +185,7 @@ SfxPoolItem* XLineJointItem::Clone(SfxItemPool* /*pPool*/) const // ----------------------------------------------------------------------------- SfxItemPresentation XLineJointItem::GetPresentation( SfxItemPresentation ePres, SfxMapUnit /*eCoreUnit*/, - SfxMapUnit /*ePresUnit*/, XubString& rText, const IntlWrapper*) const + SfxMapUnit /*ePresUnit*/, XubString& rText, const IntlWrapper*) const { rText.Erase(); @@ -199,26 +200,26 @@ SfxItemPresentation XLineJointItem::GetPresentation( SfxItemPresentation ePres, switch( GetValue() ) { - case( XLINEJOINT_NONE ): + case( com::sun::star::drawing::LineJoint_NONE ): nId = RID_SVXSTR_LINEJOINT_NONE; break; - case( XLINEJOINT_MIDDLE ): + case( com::sun::star::drawing::LineJoint_MIDDLE ): nId = RID_SVXSTR_LINEJOINT_MIDDLE; break; - case( XLINEJOINT_BEVEL ): + case( com::sun::star::drawing::LineJoint_BEVEL ): nId = RID_SVXSTR_LINEJOINT_BEVEL; break; - case( XLINEJOINT_MITER ): + case( com::sun::star::drawing::LineJoint_MITER ): nId = RID_SVXSTR_LINEJOINT_MITER; break; - case( XLINEJOINT_ROUND ): + case( com::sun::star::drawing::LineJoint_ROUND ): nId = RID_SVXSTR_LINEJOINT_ROUND; break; } @@ -237,28 +238,7 @@ SfxItemPresentation XLineJointItem::GetPresentation( SfxItemPresentation ePres, sal_Bool XLineJointItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const { - ::com::sun::star::drawing::LineJoint eJoint = ::com::sun::star::drawing::LineJoint_NONE; - - switch( GetValue() ) - { - case XLINEJOINT_NONE: - break; - case XLINEJOINT_MIDDLE: - eJoint = ::com::sun::star::drawing::LineJoint_MIDDLE; - break; - case XLINEJOINT_BEVEL: - eJoint = ::com::sun::star::drawing::LineJoint_BEVEL; - break; - case XLINEJOINT_MITER: - eJoint = ::com::sun::star::drawing::LineJoint_MITER; - break; - case XLINEJOINT_ROUND: - eJoint = ::com::sun::star::drawing::LineJoint_ROUND; - break; - default: - DBG_ERROR( "Unknown LineJoint enum value!" ); - } - + const ::com::sun::star::drawing::LineJoint eJoint = GetValue(); rVal <<= eJoint; return sal_True; } @@ -267,7 +247,6 @@ sal_Bool XLineJointItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 sal_Bool XLineJointItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) { - XLineJoint eJoint = XLINEJOINT_NONE; ::com::sun::star::drawing::LineJoint eUnoJoint; if(!(rVal >>= eUnoJoint)) @@ -279,25 +258,7 @@ sal_Bool XLineJointItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_u eUnoJoint = (::com::sun::star::drawing::LineJoint)nLJ; } - switch( eUnoJoint ) - { - case ::com::sun::star::drawing::LineJoint_MIDDLE: - eJoint = XLINEJOINT_MIDDLE; - break; - case ::com::sun::star::drawing::LineJoint_BEVEL: - eJoint = XLINEJOINT_BEVEL; - break; - case ::com::sun::star::drawing::LineJoint_MITER: - eJoint = XLINEJOINT_MITER; - break; - case ::com::sun::star::drawing::LineJoint_ROUND: - eJoint = XLINEJOINT_ROUND; - break; - default: - break; - } - - SetValue( sal::static_int_cast< sal_uInt16 >( eJoint ) ); + SetValue( sal::static_int_cast< sal_uInt16 >( eUnoJoint ) ); return sal_True; } @@ -310,6 +271,116 @@ sal_uInt16 XLineJointItem::GetValueCount() const return 5; } +//--------------------- +// class AffineMatrixItem +//--------------------- + +TYPEINIT1_AUTOFACTORY(AffineMatrixItem, SfxPoolItem); + +AffineMatrixItem::AffineMatrixItem(const com::sun::star::geometry::AffineMatrix2D* pMatrix) +: SfxPoolItem(SID_ATTR_TRANSFORM_MATRIX) +{ + if(pMatrix) + { + maMatrix = *pMatrix; + } + else + { + maMatrix.m00 = 1.0; + maMatrix.m01 = 0.0; + maMatrix.m02 = 0.0; + maMatrix.m10 = 0.0; + maMatrix.m11 = 1.0; + maMatrix.m12 = 0.0; + } +} + +AffineMatrixItem::AffineMatrixItem(SvStream& rIn) +: SfxPoolItem(SID_ATTR_TRANSFORM_MATRIX) +{ + rIn >> maMatrix.m00; + rIn >> maMatrix.m01; + rIn >> maMatrix.m02; + rIn >> maMatrix.m10; + rIn >> maMatrix.m11; + rIn >> maMatrix.m12; +} + +AffineMatrixItem::AffineMatrixItem(const AffineMatrixItem& rRef) +: SfxPoolItem(SID_ATTR_TRANSFORM_MATRIX) +{ + maMatrix = rRef.maMatrix; +} + +AffineMatrixItem::~AffineMatrixItem() +{ +} + +int AffineMatrixItem::operator==(const SfxPoolItem& rRef) const +{ + if(!SfxPoolItem::operator==(rRef)) + { + return 0; + } + + const AffineMatrixItem* pRef = dynamic_cast< const AffineMatrixItem* >(&rRef); + + if(!pRef) + { + return 0; + } + + return (maMatrix.m00 == pRef->maMatrix.m00 + && maMatrix.m01 == pRef->maMatrix.m01 + && maMatrix.m02 == pRef->maMatrix.m02 + && maMatrix.m10 == pRef->maMatrix.m10 + && maMatrix.m11 == pRef->maMatrix.m11 + && maMatrix.m12 == pRef->maMatrix.m12); +} + +SfxPoolItem* AffineMatrixItem::Clone( SfxItemPool* /*pPool*/ ) const +{ + return new AffineMatrixItem(*this); +} + +SfxPoolItem* AffineMatrixItem::Create( SvStream& rIn, sal_uInt16 /*nVer*/ ) const +{ + return new AffineMatrixItem(rIn); +} + +SvStream& AffineMatrixItem::Store(SvStream &rStream, sal_uInt16 /*nItemVersion*/ ) const +{ + rStream << maMatrix.m00; + rStream << maMatrix.m01; + rStream << maMatrix.m02; + rStream << maMatrix.m10; + rStream << maMatrix.m11; + rStream << maMatrix.m12; + return rStream; +} + +sal_Bool AffineMatrixItem::QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const +{ + rVal <<= maMatrix; + return sal_True; +} + +sal_Bool AffineMatrixItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) +{ + if (rVal >>= maMatrix) + { + return sal_True; + } + + DBG_ERROR( "AffineMatrixItem::PutValue - Wrong type!" ); + return sal_False; +} + +const com::sun::star::geometry::AffineMatrix2D& AffineMatrixItem::GetAffineMatrix2D() const +{ + return maMatrix; +} + //----------------------- // class XLineCapItem - //----------------------- diff --git a/svx/source/xoutdev/xpool.cxx b/svx/source/xoutdev/xpool.cxx index 5e452f417767..4dad4a90c20a 100644 --- a/svx/source/xoutdev/xpool.cxx +++ b/svx/source/xoutdev/xpool.cxx @@ -162,6 +162,13 @@ XOutdevItemPool::XOutdevItemPool( mpLocalItemInfos[XATTR_FORMTXTSHDWYVAL -XATTR_START]._nSID = SID_FORMTEXT_SHDWYVAL; mpLocalItemInfos[XATTR_FORMTXTHIDEFORM -XATTR_START]._nSID = SID_FORMTEXT_HIDEFORM; + // associate new slots for panels with known items + mpLocalItemInfos[XATTR_FILLTRANSPARENCE - XATTR_START]._nSID = SID_ATTR_FILL_TRANSPARENCE; + mpLocalItemInfos[XATTR_FILLFLOATTRANSPARENCE - XATTR_START]._nSID = SID_ATTR_FILL_FLOATTRANSPARENCE; + mpLocalItemInfos[XATTR_LINETRANSPARENCE - XATTR_START]._nSID = SID_ATTR_LINE_TRANSPARENCE; + mpLocalItemInfos[XATTR_LINEJOINT - XATTR_START]._nSID = SID_ATTR_LINE_JOINT; + mpLocalItemInfos[XATTR_LINECAP - XATTR_START]._nSID = SID_ATTR_LINE_CAP; + // if it's my own creation level, set Defaults and ItemInfos if(XATTR_START == GetFirstWhich() && XATTR_END == GetLastWhich()) { diff --git a/svx/source/xoutdev/xtabbtmp.cxx b/svx/source/xoutdev/xtabbtmp.cxx index 4b7993b9c5c7..eaae50f49b3b 100644 --- a/svx/source/xoutdev/xtabbtmp.cxx +++ b/svx/source/xoutdev/xtabbtmp.cxx @@ -51,102 +51,13 @@ static char const aChckBitmap0[] = { 0x04, 0x00, 'S','O','B','0'}; // old static char const aChckBitmap1[] = { 0x04, 0x00, 'S','O','B','1'}; // = 5.2 static char const aChckXML[] = { 'P', 'K', 0x03, 0x04 }; // = 6.0 -// ------------------- -// class XBitmapTable -// ------------------- - -/************************************************************************* -|* -|* XBitmapTable::XBitmapTable() -|* -*************************************************************************/ - -XBitmapTable::XBitmapTable( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyTable( rPath, pInPool, nInitSize, nReSize) -{ - pBmpTable = new Table( nInitSize, nReSize ); -} - -/************************************************************************/ - -XBitmapTable::~XBitmapTable() -{ -} - -/************************************************************************/ - -XBitmapEntry* XBitmapTable::Replace(long nIndex, XBitmapEntry* pEntry ) -{ - return (XBitmapEntry*) XPropertyTable::Replace(nIndex, pEntry); -} - -/************************************************************************/ - -XBitmapEntry* XBitmapTable::Remove(long nIndex) -{ - return (XBitmapEntry*) XPropertyTable::Remove(nIndex, 0); -} - -/************************************************************************/ - -XBitmapEntry* XBitmapTable::GetBitmap(long nIndex) const -{ - return (XBitmapEntry*) XPropertyTable::Get(nIndex, 0); -} - -/************************************************************************/ - -sal_Bool XBitmapTable::Load() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XBitmapTable::Save() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XBitmapTable::Create() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XBitmapTable::CreateBitmapsForUI() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XBitmapTable::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) -{ - return( NULL ); -} - // ------------------ // class XBitmapList // ------------------ -/************************************************************************* -|* -|* XBitmapList::XBitmapList() -|* -*************************************************************************/ - -XBitmapList::XBitmapList( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyList( rPath, pInPool, nInitSize, nReSize) +XBitmapList::XBitmapList( const String& rPath, XOutdevItemPool* pInPool ) : + XPropertyList( rPath, pInPool ) { - // pBmpList = new List( nInitSize, nReSize ); } /************************************************************************/ @@ -180,19 +91,19 @@ XBitmapEntry* XBitmapList::GetBitmap(long nIndex) const sal_Bool XBitmapList::Load() { - if( bListDirty ) + if( mbListDirty ) { - bListDirty = sal_False; + mbListDirty = false; - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtBitmap, 3 ) ); @@ -207,15 +118,15 @@ sal_Bool XBitmapList::Load() sal_Bool XBitmapList::Save() { - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtBitmap, 3 ) ); @@ -276,16 +187,9 @@ sal_Bool XBitmapList::Create() /************************************************************************/ -sal_Bool XBitmapList::CreateBitmapsForUI() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XBitmapList::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) +Bitmap XBitmapList::CreateBitmapForUI( long /*nIndex*/ ) { - return( NULL ); + return Bitmap(); } // eof diff --git a/svx/source/xoutdev/xtabcolr.cxx b/svx/source/xoutdev/xtabcolr.cxx index e211e3753628..1d8cb45d6d34 100644 --- a/svx/source/xoutdev/xtabcolr.cxx +++ b/svx/source/xoutdev/xtabcolr.cxx @@ -55,78 +55,63 @@ static char const aChckColor[] = { 0x04, 0x00, 'S','O','C','L'}; // < 5.2 static char const aChckColor0[] = { 0x04, 0x00, 'S','O','C','0'}; // = 5.2 static char const aChckXML[] = { '<', '?', 'x', 'm', 'l' }; // = 6.0 -// ------------------ -// class XColorTable -// ------------------ - -static XColorTable* pTable=0; - /************************************************************************* |* -|* XColorTable::XColorTable() +|* XColorList::XColorList() |* *************************************************************************/ -XColorTable::XColorTable( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyTable( rPath, pInPool, nInitSize, nReSize) +static XColorList* pStaticGlobalColorList = 0; + +XColorList::XColorList( const String& rPath, XOutdevItemPool* pInPool ) : + XPropertyList( rPath, pInPool ) { - // ColorTable braucht keine eigene BmpTable - // pBmpTable = new Table( nInitSize, nReSize ); } /************************************************************************/ -XColorTable::~XColorTable() -{ -} - -XColorTable* XColorTable::GetStdColorTable() +XColorList::~XColorList() { - if ( !pTable ) - pTable = new XColorTable( SvtPathOptions().GetPalettePath() ); - return pTable; } /************************************************************************/ -XColorEntry* XColorTable::Replace(long nIndex, XColorEntry* pEntry ) +XColorEntry* XColorList::Replace(XColorEntry* pEntry, long nIndex ) { - return (XColorEntry*) XPropertyTable::Replace(nIndex, pEntry); + return (XColorEntry*) XPropertyList::Replace(pEntry, nIndex); } /************************************************************************/ -XColorEntry* XColorTable::Remove(long nIndex) +XColorEntry* XColorList::Remove(long nIndex) { - return (XColorEntry*) XPropertyTable::Remove(nIndex, 0); + return (XColorEntry*) XPropertyList::Remove(nIndex, 0); } /************************************************************************/ -XColorEntry* XColorTable::GetColor(long nIndex) const +XColorEntry* XColorList::GetColor(long nIndex) const { - return (XColorEntry*) XPropertyTable::Get(nIndex, 0); + return (XColorEntry*) XPropertyList::Get(nIndex, 0); } /************************************************************************/ -sal_Bool XColorTable::Load() +sal_Bool XColorList::Load() { - if( bTableDirty ) + if( mbListDirty ) { - bTableDirty = sal_False; + mbListDirty = false; - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtColor, 3 ) ); @@ -139,17 +124,17 @@ sal_Bool XColorTable::Load() /************************************************************************/ -sal_Bool XColorTable::Save() +sal_Bool XColorList::Save() { - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtColor, 3 ) ); @@ -160,7 +145,7 @@ sal_Bool XColorTable::Save() /************************************************************************/ -sal_Bool XColorTable::Create() +sal_Bool XColorList::Create() { XubString aStr; xub_StrLen nLen; @@ -217,328 +202,249 @@ sal_Bool XColorTable::Create() for( sal_uInt16 n = 0; n < 16; ++n ) { - Insert( n, new XColorEntry( Color( aColTab[n] ), - String( ResId( aResId[ n ], rRes )) ) ); + Insert( new XColorEntry( Color( aColTab[n] ), String( ResId( aResId[ n ], rRes )) ), n ); } aStr = SVX_RESSTR( RID_SVXSTR_GREY ); aStr.AppendAscii(" 80%"); nLen = aStr.Len() - 3; - Insert(16, new XColorEntry( Color( 51, 51, 51 ), aStr ) ); + Insert( new XColorEntry( Color( 51, 51, 51 ), aStr ) , 16); aStr.SetChar(nLen, sal_Unicode('7')); - Insert(17, new XColorEntry( Color( 76, 76, 76 ), aStr ) ); + Insert( new XColorEntry( Color( 76, 76, 76 ), aStr ) , 17); aStr.SetChar(nLen, sal_Unicode('6')); - Insert(18, new XColorEntry( Color(102,102,102 ), aStr ) ); + Insert( new XColorEntry( Color(102,102,102 ), aStr ) , 18); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(19, new XColorEntry( Color(153,153,153 ), aStr ) ); + Insert( new XColorEntry( Color(153,153,153 ), aStr ) , 19); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(20, new XColorEntry( Color(179,179,179 ), aStr ) ); + Insert( new XColorEntry( Color(179,179,179 ), aStr ) , 20); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(21, new XColorEntry( Color(204,204,204 ), aStr ) ); + Insert( new XColorEntry( Color(204,204,204 ), aStr ) , 21); // BM: new 15% aStr.SetChar(nLen, sal_Unicode('1')); aStr.SetChar(nLen + 1, sal_Unicode('5')); - Insert(22, new XColorEntry( Color(217,217,217 ), aStr ) ); + Insert( new XColorEntry( Color(217,217,217 ), aStr ) , 22); aStr.SetChar(nLen + 1, sal_Unicode('0')); - Insert(23, new XColorEntry( Color(230,230,230 ), aStr ) ); - Insert(24, new XColorEntry( Color(230,230,255 ), SVX_RESSTR( RID_SVXSTR_BLUEGREY ) ) ); + Insert( new XColorEntry( Color(230,230,230 ), aStr ) , 23); + Insert( new XColorEntry( Color(230,230,255 ), SVX_RESSTR( RID_SVXSTR_BLUEGREY ) ) , 24); aStr = SVX_RESSTR( RID_SVXSTR_RED ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(25, new XColorEntry( Color(255, 51,102 ), aStr ) ); + Insert( new XColorEntry( Color(255, 51,102 ), aStr ) , 25); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(26, new XColorEntry( Color(220, 35, 0 ), aStr ) ); + Insert( new XColorEntry( Color(220, 35, 0 ), aStr ) , 26); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(27, new XColorEntry( Color(184, 71, 0 ), aStr ) ); + Insert( new XColorEntry( Color(184, 71, 0 ), aStr ) , 27); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(28, new XColorEntry( Color(255, 51, 51 ), aStr ) ); + Insert( new XColorEntry( Color(255, 51, 51 ), aStr ) , 28); aStr.SetChar(nLen, sal_Unicode('5')); - Insert(29, new XColorEntry( Color(235, 97, 61 ), aStr ) ); + Insert( new XColorEntry( Color(235, 97, 61 ), aStr ) , 29); aStr.SetChar(nLen, sal_Unicode('6')); - Insert(30, new XColorEntry( Color(184, 71, 71 ), aStr ) ); + Insert( new XColorEntry( Color(184, 71, 71 ), aStr ) , 30); aStr.SetChar(nLen, sal_Unicode('7')); - Insert(31, new XColorEntry( Color(184, 0, 71 ), aStr ) ); + Insert( new XColorEntry( Color(184, 0, 71 ), aStr ) , 31); aStr.SetChar(nLen, sal_Unicode('8')); - Insert(32, new XColorEntry( Color(153, 40, 76 ), aStr ) ); + Insert( new XColorEntry( Color(153, 40, 76 ), aStr ) , 32); aStr = SVX_RESSTR( RID_SVXSTR_MAGENTA ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(33, new XColorEntry( Color(148, 0,107 ), aStr ) ); + Insert( new XColorEntry( Color(148, 0,107 ), aStr ) , 33); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(34, new XColorEntry( Color(148, 71,107 ), aStr ) ); + Insert( new XColorEntry( Color(148, 71,107 ), aStr ) , 34); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(35, new XColorEntry( Color(148, 71,148 ), aStr ) ); + Insert( new XColorEntry( Color(148, 71,148 ), aStr ) , 35); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(36, new XColorEntry( Color(153,102,204 ), aStr ) ); + Insert( new XColorEntry( Color(153,102,204 ), aStr ) , 36); aStr.SetChar(nLen, sal_Unicode('5')); - Insert(37, new XColorEntry( Color(107, 71,148 ), aStr ) ); + Insert( new XColorEntry( Color(107, 71,148 ), aStr ) , 37); aStr.SetChar(nLen, sal_Unicode('6')); - Insert(38, new XColorEntry( Color(107, 35,148 ), aStr ) ); + Insert( new XColorEntry( Color(107, 35,148 ), aStr ) , 38); aStr.SetChar(nLen, sal_Unicode('7')); - Insert(39, new XColorEntry( Color(107, 0,148 ), aStr ) ); + Insert( new XColorEntry( Color(107, 0,148 ), aStr ) , 39); aStr.SetChar(nLen, sal_Unicode('8')); - Insert(40, new XColorEntry( Color( 94, 17,166 ), aStr ) ); + Insert( new XColorEntry( Color( 94, 17,166 ), aStr ) , 40); aStr = SVX_RESSTR( RID_SVXSTR_BLUE ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(41, new XColorEntry( Color( 40, 0,153 ), aStr ) ); + Insert( new XColorEntry( Color( 40, 0,153 ), aStr ) , 41); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(42, new XColorEntry( Color( 71, 0,184 ), aStr ) ); + Insert( new XColorEntry( Color( 71, 0,184 ), aStr ) , 42); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(43, new XColorEntry( Color( 35, 0,220 ), aStr ) ); + Insert( new XColorEntry( Color( 35, 0,220 ), aStr ) , 43); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(44, new XColorEntry( Color( 35, 35,220 ), aStr ) ); + Insert( new XColorEntry( Color( 35, 35,220 ), aStr ) , 44); aStr.SetChar(nLen, sal_Unicode('5')); - Insert(45, new XColorEntry( Color( 0, 71,255 ), aStr ) ); + Insert( new XColorEntry( Color( 0, 71,255 ), aStr ) , 45); aStr.SetChar(nLen, sal_Unicode('6')); - Insert(46, new XColorEntry( Color( 0,153,255 ), aStr ) ); + Insert( new XColorEntry( Color( 0,153,255 ), aStr ) , 46); aStr.SetChar(nLen, sal_Unicode('7')); - Insert(47, new XColorEntry( Color( 0,184,255 ), aStr ) ); + Insert( new XColorEntry( Color( 0,184,255 ), aStr ) , 47); aStr.SetChar(nLen, sal_Unicode('8')); - Insert(48, new XColorEntry( Color(153,204,255 ), aStr ) ); + Insert( new XColorEntry( Color(153,204,255 ), aStr ) , 48); //Insert(48, new XColorEntry( Color( 46,215,255 ), aStr ) ); aStr = SVX_RESSTR( RID_SVXSTR_CYAN ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(49, new XColorEntry( Color( 0,220,255 ), aStr ) ); + Insert( new XColorEntry( Color( 0,220,255 ), aStr ) , 49); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(50, new XColorEntry( Color( 0,204,204 ), aStr ) ); + Insert( new XColorEntry( Color( 0,204,204 ), aStr ) , 50); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(51, new XColorEntry( Color( 35,184,220 ), aStr ) ); + Insert( new XColorEntry( Color( 35,184,220 ), aStr ) , 51); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(52, new XColorEntry( Color( 71,184,184 ), aStr ) ); + Insert( new XColorEntry( Color( 71,184,184 ), aStr ) , 52); aStr.SetChar(nLen, sal_Unicode('5')); - Insert(53, new XColorEntry( Color( 51,163,163 ), aStr ) ); + Insert( new XColorEntry( Color( 51,163,163 ), aStr ) , 53); aStr.SetChar(nLen, sal_Unicode('6')); - Insert(54, new XColorEntry( Color( 25,138,138 ), aStr ) ); + Insert( new XColorEntry( Color( 25,138,138 ), aStr ) , 54); aStr.SetChar(nLen, sal_Unicode('7')); - Insert(55, new XColorEntry( Color( 0,107,107 ), aStr ) ); + Insert( new XColorEntry( Color( 0,107,107 ), aStr ) , 55); aStr.SetChar(nLen, sal_Unicode('8')); - Insert(56, new XColorEntry( Color( 0, 74, 74 ), aStr ) ); + Insert( new XColorEntry( Color( 0, 74, 74 ), aStr ) , 56); aStr = SVX_RESSTR( RID_SVXSTR_GREEN ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(57, new XColorEntry( Color( 53, 94, 0 ), aStr ) ); + Insert( new XColorEntry( Color( 53, 94, 0 ), aStr ) , 57); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(58, new XColorEntry( Color( 92,133, 38 ), aStr ) ); + Insert( new XColorEntry( Color( 92,133, 38 ), aStr ) , 58); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(59, new XColorEntry( Color(125,166, 71 ), aStr ) ); + Insert( new XColorEntry( Color(125,166, 71 ), aStr ) , 59); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(60, new XColorEntry( Color(148,189, 94 ), aStr ) ); + Insert( new XColorEntry( Color(148,189, 94 ), aStr ) , 60); aStr.SetChar(nLen, sal_Unicode('5')); - Insert(61, new XColorEntry( Color( 0,174, 0 ), aStr ) ); + Insert( new XColorEntry( Color( 0,174, 0 ), aStr ) , 61); aStr.SetChar(nLen, sal_Unicode('6')); - Insert(62, new XColorEntry( Color( 51,204,102 ), aStr ) ); + Insert( new XColorEntry( Color( 51,204,102 ), aStr ) , 62); aStr.SetChar(nLen, sal_Unicode('7')); - Insert(63, new XColorEntry( Color( 61,235, 61 ), aStr ) ); + Insert( new XColorEntry( Color( 61,235, 61 ), aStr ) , 63); aStr.SetChar(nLen, sal_Unicode('8')); - Insert(64, new XColorEntry( Color( 35,255, 35 ), aStr ) ); + Insert( new XColorEntry( Color( 35,255, 35 ), aStr ) , 64); aStr = SVX_RESSTR( RID_SVXSTR_YELLOW ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(65, new XColorEntry( Color(230,255, 0 ), aStr ) ); + Insert( new XColorEntry( Color(230,255, 0 ), aStr ) , 65); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(66, new XColorEntry( Color(255,255,153 ), aStr ) ); + Insert( new XColorEntry( Color(255,255,153 ), aStr ) , 66); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(67, new XColorEntry( Color(255,255,102 ), aStr ) ); + Insert( new XColorEntry( Color(255,255,102 ), aStr ) , 67); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(68, new XColorEntry( Color(230,230, 76 ), aStr ) ); + Insert( new XColorEntry( Color(230,230, 76 ), aStr ) , 68); aStr.SetChar(nLen, sal_Unicode('5')); - Insert(69, new XColorEntry( Color(204,204, 0 ), aStr ) ); + Insert( new XColorEntry( Color(204,204, 0 ), aStr ) , 69); aStr.SetChar(nLen, sal_Unicode('6')); - Insert(70, new XColorEntry( Color(179,179, 0 ), aStr ) ); + Insert( new XColorEntry( Color(179,179, 0 ), aStr ) , 70); aStr.SetChar(nLen, sal_Unicode('7')); - Insert(71, new XColorEntry( Color(128,128, 25 ), aStr ) ); + Insert( new XColorEntry( Color(128,128, 25 ), aStr ) , 71); aStr.SetChar(nLen, sal_Unicode('8')); - Insert(72, new XColorEntry( Color(102,102, 0 ), aStr ) ); + Insert( new XColorEntry( Color(102,102, 0 ), aStr ) , 72); aStr = SVX_RESSTR( RID_SVXSTR_BROWN ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(73, new XColorEntry( Color( 76, 25, 0 ), aStr ) ); + Insert( new XColorEntry( Color( 76, 25, 0 ), aStr ) , 73); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(74, new XColorEntry( Color(102, 51, 0 ), aStr ) ); + Insert( new XColorEntry( Color(102, 51, 0 ), aStr ) , 74); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(75, new XColorEntry( Color(128, 76, 25 ), aStr ) ); + Insert( new XColorEntry( Color(128, 76, 25 ), aStr ) , 75); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(76, new XColorEntry( Color(153,102, 51 ), aStr ) ); + Insert( new XColorEntry( Color(153,102, 51 ), aStr ) , 76); aStr = SVX_RESSTR( RID_SVXSTR_ORANGE ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert(77, new XColorEntry( Color(204,102, 51 ), aStr ) ); + Insert( new XColorEntry( Color(204,102, 51 ), aStr ) , 77); aStr.SetChar(nLen, sal_Unicode('2')); - Insert(78, new XColorEntry( Color(255,102, 51 ), aStr ) ); + Insert( new XColorEntry( Color(255,102, 51 ), aStr ) , 78); aStr.SetChar(nLen, sal_Unicode('3')); - Insert(79, new XColorEntry( Color(255,153,102 ), aStr ) ); + Insert( new XColorEntry( Color(255,153,102 ), aStr ) , 79); aStr.SetChar(nLen, sal_Unicode('4')); - Insert(80, new XColorEntry( Color(255,204,153 ), aStr ) ); + Insert( new XColorEntry( Color(255,204,153 ), aStr ) , 80); // new chart colors aStr = SVX_RESSTR( RID_SVXSTR_VIOLET ); - Insert( 81, new XColorEntry( Color( 0x99, 0x99, 0xff ), aStr ) ); + Insert( new XColorEntry( Color( 0x99, 0x99, 0xff ), aStr ) , 81); aStr = SVX_RESSTR( RID_SVXSTR_BORDEAUX ); - Insert( 82, new XColorEntry( Color( 0x99, 0x33, 0x66 ), aStr ) ); + Insert( new XColorEntry( Color( 0x99, 0x33, 0x66 ), aStr ) , 82); aStr = SVX_RESSTR( RID_SVXSTR_PALE_YELLOW ); - Insert( 83, new XColorEntry( Color( 0xff, 0xff, 0xcc ), aStr ) ); + Insert( new XColorEntry( Color( 0xff, 0xff, 0xcc ), aStr ) , 83); aStr = SVX_RESSTR( RID_SVXSTR_PALE_GREEN ); - Insert( 84, new XColorEntry( Color( 0xcc, 0xff, 0xff ), aStr ) ); + Insert( new XColorEntry( Color( 0xcc, 0xff, 0xff ), aStr ) , 84); aStr = SVX_RESSTR( RID_SVXSTR_DKVIOLET ); - Insert( 85, new XColorEntry( Color( 0x66, 0x00, 0x66 ), aStr ) ); + Insert( new XColorEntry( Color( 0x66, 0x00, 0x66 ), aStr ) , 85); aStr = SVX_RESSTR( RID_SVXSTR_SALMON ); - Insert( 86, new XColorEntry( Color( 0xff, 0x80, 0x80 ), aStr ) ); + Insert( new XColorEntry( Color( 0xff, 0x80, 0x80 ), aStr ) , 86); aStr = SVX_RESSTR( RID_SVXSTR_SEABLUE ); - Insert( 87, new XColorEntry( Color( 0x00, 0x66, 0xcc ), aStr ) ); + Insert( new XColorEntry( Color( 0x00, 0x66, 0xcc ), aStr ) , 87); // Sun colors aStr = SVX_RESSTR( RID_SVXSTR_COLOR_SUN ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert( 88, new XColorEntry( Color( 0x33, 0x33, 0x66 ), aStr ) ); + Insert( new XColorEntry( Color( 0x33, 0x33, 0x66 ), aStr ) , 88); aStr.SetChar(nLen, sal_Unicode('2')); - Insert( 89, new XColorEntry( Color( 0x66, 0x66, 0x99 ), aStr ) ); + Insert( new XColorEntry( Color( 0x66, 0x66, 0x99 ), aStr ) , 89); aStr.SetChar(nLen, sal_Unicode('3')); - Insert( 90, new XColorEntry( Color( 0x99, 0x99, 0xcc ), aStr ) ); + Insert( new XColorEntry( Color( 0x99, 0x99, 0xcc ), aStr ) , 90); aStr.SetChar(nLen, sal_Unicode('4')); - Insert( 91, new XColorEntry( Color( 0xcc, 0xcc, 0xff ), aStr ) ); + Insert( new XColorEntry( Color( 0xcc, 0xcc, 0xff ), aStr ) , 91); // Chart default colors aStr = SVX_RESSTR( RID_SVXSTR_COLOR_CHART ); aStr.AppendAscii(" 1"); nLen = aStr.Len() - 1; - Insert( 92, new XColorEntry( Color( 0x00, 0x45, 0x86 ), aStr ) ); + Insert( new XColorEntry( Color( 0x00, 0x45, 0x86 ), aStr ) , 92); aStr.SetChar(nLen, sal_Unicode('2')); - Insert( 93, new XColorEntry( Color( 0xff, 0x42, 0x0e ), aStr ) ); + Insert( new XColorEntry( Color( 0xff, 0x42, 0x0e ), aStr ) , 93); aStr.SetChar(nLen, sal_Unicode('3')); - Insert( 94, new XColorEntry( Color( 0xff, 0xd3, 0x20 ), aStr ) ); + Insert( new XColorEntry( Color( 0xff, 0xd3, 0x20 ), aStr ) , 94); aStr.SetChar(nLen, sal_Unicode('4')); - Insert( 95, new XColorEntry( Color( 0x57, 0x9d, 0x1c ), aStr ) ); + Insert( new XColorEntry( Color( 0x57, 0x9d, 0x1c ), aStr ) , 95); aStr.SetChar(nLen, sal_Unicode('5')); - Insert( 96, new XColorEntry( Color( 0x7e, 0x00, 0x21 ), aStr ) ); + Insert( new XColorEntry( Color( 0x7e, 0x00, 0x21 ), aStr ) , 96); aStr.SetChar(nLen, sal_Unicode('6')); - Insert( 97, new XColorEntry( Color( 0x83, 0xca, 0xff ), aStr ) ); + Insert( new XColorEntry( Color( 0x83, 0xca, 0xff ), aStr ) , 97); aStr.SetChar(nLen, sal_Unicode('7')); - Insert( 98, new XColorEntry( Color( 0x31, 0x40, 0x04 ), aStr ) ); + Insert( new XColorEntry( Color( 0x31, 0x40, 0x04 ), aStr ) , 98); aStr.SetChar(nLen, sal_Unicode('8')); - Insert( 99, new XColorEntry( Color( 0xae, 0xcf, 0x00 ), aStr ) ); + Insert( new XColorEntry( Color( 0xae, 0xcf, 0x00 ), aStr ) , 99); aStr.SetChar(nLen, sal_Unicode('9')); - Insert( 100, new XColorEntry( Color( 0x4b, 0x1f, 0x6f ), aStr ) ); + Insert( new XColorEntry( Color( 0x4b, 0x1f, 0x6f ), aStr ) , 100); aStr.SetChar(nLen, sal_Unicode('1')); aStr.AppendAscii("0"); nLen = aStr.Len() - 1; - Insert( 101, new XColorEntry( Color( 0xff, 0x95, 0x0e ), aStr ) ); + Insert( new XColorEntry( Color( 0xff, 0x95, 0x0e ), aStr ) , 101); aStr.SetChar(nLen, sal_Unicode('1')); - Insert( 102, new XColorEntry( Color( 0xc5, 0x00, 0x0b ), aStr ) ); + Insert( new XColorEntry( Color( 0xc5, 0x00, 0x0b ), aStr ) , 102); aStr.SetChar(nLen, sal_Unicode('2')); - Insert( 103, new XColorEntry( Color( 0x00, 0x84, 0xd1 ), aStr ) ); + Insert( new XColorEntry( Color( 0x00, 0x84, 0xd1 ), aStr ) , 103); return( Count() == 104 ); } /************************************************************************/ -sal_Bool XColorTable::CreateBitmapsForUI() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XColorTable::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) -{ - return( NULL ); -} - -// -------------------- -// class XColorList -// -------------------- - -/************************************************************************* -|* -|* XColorList::XColorList() -|* -*************************************************************************/ - -XColorList::XColorList( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyList( rPath, pInPool, nInitSize, nReSize) -{ - // pBmpList = new List( nInitSize, nReSize ); -} - -/************************************************************************/ - -XColorList::~XColorList() +Bitmap XColorList::CreateBitmapForUI( long /*nIndex*/ ) { + return Bitmap(); } /************************************************************************/ -XColorEntry* XColorList::Replace(XColorEntry* pEntry, long nIndex ) -{ - return (XColorEntry*) XPropertyList::Replace(pEntry, nIndex); -} - -/************************************************************************/ - -XColorEntry* XColorList::Remove(long nIndex) -{ - return (XColorEntry*) XPropertyList::Remove(nIndex, 0); -} - -/************************************************************************/ - -XColorEntry* XColorList::GetColor(long nIndex) const -{ - return (XColorEntry*) XPropertyList::Get(nIndex, 0); -} - -/************************************************************************/ - -sal_Bool XColorList::Load() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XColorList::Save() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XColorList::Create() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XColorList::CreateBitmapsForUI() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XColorList::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) +XColorList* XColorList::GetStdColorList() { - return( NULL ); + if ( !pStaticGlobalColorList ) + pStaticGlobalColorList = new XColorList( SvtPathOptions().GetPalettePath() ); + return pStaticGlobalColorList; } // eof diff --git a/svx/source/xoutdev/xtabdash.cxx b/svx/source/xoutdev/xtabdash.cxx index 84f52f7291b4..3ae3eb715575 100644 --- a/svx/source/xoutdev/xtabdash.cxx +++ b/svx/source/xoutdev/xtabdash.cxx @@ -70,86 +70,6 @@ char const aChckDash[] = { 0x04, 0x00, 'S','O','D','L'}; // < 5.2 char const aChckDash0[] = { 0x04, 0x00, 'S','O','D','0'}; // = 5.2 char const aChckXML[] = { '<', '?', 'x', 'm', 'l' }; // = 6.0 -// ----------------- -// class XDashTable -// ----------------- - -/************************************************************************* -|* -|* XDashTable::XDashTable() -|* -*************************************************************************/ - -XDashTable::XDashTable( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyTable( rPath, pInPool, nInitSize, nReSize) -{ - pBmpTable = new Table( nInitSize, nReSize ); -} - -/************************************************************************/ - -XDashTable::~XDashTable() -{ -} - -/************************************************************************/ - -XDashEntry* XDashTable::Replace(long nIndex, XDashEntry* pEntry ) -{ - return (XDashEntry*) XPropertyTable::Replace(nIndex, pEntry); -} - -/************************************************************************/ - -XDashEntry* XDashTable::Remove(long nIndex) -{ - return (XDashEntry*) XPropertyTable::Remove(nIndex, 0); -} - -/************************************************************************/ - -XDashEntry* XDashTable::GetDash(long nIndex) const -{ - return (XDashEntry*) XPropertyTable::Get(nIndex, 0); -} - -/************************************************************************/ - -sal_Bool XDashTable::Load() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XDashTable::Save() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XDashTable::Create() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XDashTable::CreateBitmapsForUI() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XDashTable::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) -{ - return( NULL ); -} - // ---------------- // class XDashList // ---------------- @@ -193,11 +113,12 @@ void XDashList::impCreate() VirtualDevice* pVirDev = new VirtualDevice; OSL_ENSURE(0 != pVirDev, "XDashList: no VirtualDevice created!" ); pVirDev->SetMapMode(MAP_100TH_MM); - const Size aSize(pVirDev->PixelToLogic(Size(BITMAP_WIDTH * 2, BITMAP_HEIGHT))); + const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth() * 2, getUiBitmapHeight()))); pVirDev->SetOutputSize(aSize); pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode() ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT : DRAWMODE_DEFAULT); + pVirDev->SetBackground(rStyleSettings.GetFieldColor()); SdrModel* pSdrModel = new SdrModel(); OSL_ENSURE(0 != pSdrModel, "XDashList: no SdrModel created!" ); @@ -221,8 +142,8 @@ void XDashList::impCreate() pLineObject->SetModel(pSdrModel); pLineObject->SetMergedItem(XLineStyleItem(XLINE_DASH)); pLineObject->SetMergedItem(XLineColorItem(String(), rStyleSettings.GetFieldTextColor())); - pLineObject->SetMergedItem(XLineWidthItem(30)); - + const Size aLineWidth(pVirDev->PixelToLogic(Size(getUiBitmapLineWidth(), 0))); + pLineObject->SetMergedItem(XLineWidthItem(aLineWidth.getWidth())); mpData = new impXDashList(pVirDev, pSdrModel, pBackgroundObject, pLineObject); OSL_ENSURE(0 != mpData, "XDashList: data creation went wrong!" ); } @@ -237,11 +158,13 @@ void XDashList::impDestroy() } } -XDashList::XDashList(const String& rPath, XOutdevItemPool* pInPool, sal_uInt16 nInitSize, sal_uInt16 nReSize) -: XPropertyList(rPath, pInPool, nInitSize, nReSize), - mpData(0) +XDashList::XDashList(const String& rPath, XOutdevItemPool* pInPool ) +: XPropertyList(rPath, pInPool ), + mpData(0), + maBitmapSolidLine(), + maStringSolidLine(), + maStringNoLine() { - pBmpList = new List(nInitSize, nReSize); } XDashList::~XDashList() @@ -266,19 +189,19 @@ XDashEntry* XDashList::GetDash(long nIndex) const sal_Bool XDashList::Load() { - if( bListDirty ) + if( mbListDirty ) { - bListDirty = sal_False; + mbListDirty = false; - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtDash, 3 ) ); @@ -291,15 +214,15 @@ sal_Bool XDashList::Load() sal_Bool XDashList::Save() { - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtDash, 3 ) ); @@ -324,32 +247,21 @@ sal_Bool XDashList::Create() return( sal_True ); } -sal_Bool XDashList::CreateBitmapsForUI() -{ - impCreate(); - - for( long i = 0; i < Count(); i++) - { - Bitmap* pBmp = CreateBitmapForUI( i, sal_False ); - DBG_ASSERT( pBmp, "XDashList: Bitmap(UI) konnte nicht erzeugt werden!" ); - - if( pBmp ) - pBmpList->Insert( pBmp, i ); - } - - impDestroy(); - - return( sal_True ); -} - -Bitmap* XDashList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) +Bitmap XDashList::ImpCreateBitmapForXDash(const XDash* pDash) { impCreate(); VirtualDevice* pVD = mpData->getVirtualDevice(); SdrObject* pLine = mpData->getLineObject(); - pLine->SetMergedItem(XLineStyleItem(XLINE_DASH)); - pLine->SetMergedItem(XLineDashItem(String(), GetDash(nIndex)->GetDash())); + if(pDash) + { + pLine->SetMergedItem(XLineStyleItem(XLINE_DASH)); + pLine->SetMergedItem(XLineDashItem(String(), *pDash)); + } + else + { + pLine->SetMergedItem(XLineStyleItem(XLINE_SOLID)); + } sdr::contact::SdrObjectVector aObjectVector; aObjectVector.push_back(mpData->getBackgroundObject()); @@ -357,17 +269,50 @@ Bitmap* XDashList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) sdr::contact::ObjectContactOfObjListPainter aPainter(*pVD, aObjectVector, 0); sdr::contact::DisplayInfo aDisplayInfo; + pVD->Erase(); aPainter.ProcessDisplay(aDisplayInfo); const Point aZero(0, 0); - Bitmap* pBitmap = new Bitmap(pVD->GetBitmap(aZero, pVD->GetOutputSize())); + return pVD->GetBitmap(aZero, pVD->GetOutputSize()); +} + +Bitmap XDashList::CreateBitmapForUI( long nIndex ) +{ + const XDash& rDash = GetDash(nIndex)->GetDash(); + + return ImpCreateBitmapForXDash(&rDash); +} + +Bitmap XDashList::GetBitmapForUISolidLine() const +{ + if(maBitmapSolidLine.IsEmpty()) + { + const_cast< XDashList* >(this)->maBitmapSolidLine = const_cast< XDashList* >(this)->ImpCreateBitmapForXDash(0); + } - if(bDelete) + return maBitmapSolidLine; +} + +String XDashList::GetStringForUiSolidLine() const +{ + if(!maStringSolidLine.Len()) + { + const_cast< XDashList* >(this)->maStringSolidLine = String(ResId(RID_SVXSTR_SOLID, DIALOG_MGR())); + } + + return maStringSolidLine; +} + +String XDashList::GetStringForUiNoLine() const +{ + if(!maStringNoLine.Len()) { - impDestroy(); + // formally was RID_SVXSTR_INVISIBLE, but tomake equal + // everywhere, use RID_SVXSTR_NONE + const_cast< XDashList* >(this)->maStringNoLine = String(ResId(RID_SVXSTR_NONE, DIALOG_MGR())); } - return pBitmap; + return maStringNoLine; } ////////////////////////////////////////////////////////////////////////////// diff --git a/svx/source/xoutdev/xtabgrdt.cxx b/svx/source/xoutdev/xtabgrdt.cxx index 692c0f25cd1c..69e19acac5df 100644 --- a/svx/source/xoutdev/xtabgrdt.cxx +++ b/svx/source/xoutdev/xtabgrdt.cxx @@ -67,86 +67,6 @@ char const aChckGradient[] = { 0x04, 0x00, 'S','O','G','L'}; // < 5.2 char const aChckGradient0[] = { 0x04, 0x00, 'S','O','G','0'}; // = 5.2 char const aChckXML[] = { '<', '?', 'x', 'm', 'l' }; // = 6.0 -// --------------------- -// class XGradientTable -// --------------------- - -/************************************************************************* -|* -|* XGradientTable::XGradientTable() -|* -*************************************************************************/ - -XGradientTable::XGradientTable( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyTable( rPath, pInPool, nInitSize, nReSize) -{ - pBmpTable = new Table( nInitSize, nReSize ); -} - -/************************************************************************/ - -XGradientTable::~XGradientTable() -{ -} - -/************************************************************************/ - -XGradientEntry* XGradientTable::Replace(long nIndex, XGradientEntry* pEntry ) -{ - return (XGradientEntry*) XPropertyTable::Replace(nIndex, pEntry); -} - -/************************************************************************/ - -XGradientEntry* XGradientTable::Remove(long nIndex) -{ - return (XGradientEntry*) XPropertyTable::Remove(nIndex, 0); -} - -/************************************************************************/ - -XGradientEntry* XGradientTable::GetGradient(long nIndex) const -{ - return (XGradientEntry*) XPropertyTable::Get(nIndex, 0); -} - -/************************************************************************/ - -sal_Bool XGradientTable::Load() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XGradientTable::Save() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XGradientTable::Create() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XGradientTable::CreateBitmapsForUI() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XGradientTable::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) -{ - return( NULL ); -} - // -------------------- // class XGradientList // -------------------- @@ -186,11 +106,12 @@ void XGradientList::impCreate() VirtualDevice* pVirDev = new VirtualDevice; OSL_ENSURE(0 != pVirDev, "XGradientList: no VirtualDevice created!" ); pVirDev->SetMapMode(MAP_100TH_MM); - const Size aSize(pVirDev->PixelToLogic(Size(BITMAP_WIDTH, BITMAP_HEIGHT))); + const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth(), getUiBitmapHeight()))); pVirDev->SetOutputSize(aSize); pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode() ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT : DRAWMODE_DEFAULT); + pVirDev->SetBackground(rStyleSettings.GetFieldColor()); SdrModel* pSdrModel = new SdrModel(); OSL_ENSURE(0 != pSdrModel, "XGradientList: no SdrModel created!" ); @@ -204,7 +125,7 @@ void XGradientList::impCreate() pBackgroundObject->SetMergedItem(XFillStyleItem(XFILL_GRADIENT)); pBackgroundObject->SetMergedItem(XLineStyleItem(XLINE_SOLID)); pBackgroundObject->SetMergedItem(XLineColorItem(String(), Color(COL_BLACK))); - pBackgroundObject->SetMergedItem(XGradientStepCountItem(sal_uInt16((BITMAP_WIDTH + BITMAP_HEIGHT) / 3))); + pBackgroundObject->SetMergedItem(XGradientStepCountItem(sal_uInt16((getUiBitmapWidth() + getUiBitmapHeight()) / 3))); mpData = new impXGradientList(pVirDev, pSdrModel, pBackgroundObject); OSL_ENSURE(0 != mpData, "XGradientList: data creation went wrong!" ); @@ -220,11 +141,10 @@ void XGradientList::impDestroy() } } -XGradientList::XGradientList( const String& rPath, XOutdevItemPool* pInPool, sal_uInt16 nInitSize, sal_uInt16 nReSize) -: XPropertyList(rPath, pInPool, nInitSize, nReSize), +XGradientList::XGradientList( const String& rPath, XOutdevItemPool* pInPool ) +: XPropertyList(rPath, pInPool ), mpData(0) { - pBmpList = new List(nInitSize, nReSize); } XGradientList::~XGradientList() @@ -253,19 +173,19 @@ XGradientEntry* XGradientList::GetGradient(long nIndex) const sal_Bool XGradientList::Load() { - if( bListDirty ) + if( mbListDirty ) { - bListDirty = sal_False; + mbListDirty = false; - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtGradient, 3 ) ); @@ -279,15 +199,15 @@ sal_Bool XGradientList::Load() sal_Bool XGradientList::Save() { - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtGradient, 3 ) ); @@ -318,25 +238,7 @@ sal_Bool XGradientList::Create() return( sal_True ); } -sal_Bool XGradientList::CreateBitmapsForUI() -{ - impCreate(); - - for( long i = 0; i < Count(); i++) - { - Bitmap* pBmp = CreateBitmapForUI( i, sal_False ); - DBG_ASSERT( pBmp, "XGradientList: Bitmap(UI) konnte nicht erzeugt werden!" ); - - if( pBmp ) - pBmpList->Insert( pBmp, i ); - } - - impDestroy(); - - return( sal_False ); -} - -Bitmap* XGradientList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) +Bitmap XGradientList::CreateBitmapForUI( long nIndex ) { impCreate(); VirtualDevice* pVD = mpData->getVirtualDevice(); @@ -351,17 +253,11 @@ Bitmap* XGradientList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) sdr::contact::ObjectContactOfObjListPainter aPainter(*pVD, aObjectVector, 0); sdr::contact::DisplayInfo aDisplayInfo; + pVD->Erase(); aPainter.ProcessDisplay(aDisplayInfo); const Point aZero(0, 0); - Bitmap* pBitmap = new Bitmap(pVD->GetBitmap(aZero, pVD->GetOutputSize())); - - if(bDelete) - { - impDestroy(); - } - - return pBitmap; + return pVD->GetBitmap(aZero, pVD->GetOutputSize()); } ////////////////////////////////////////////////////////////////////////////// diff --git a/svx/source/xoutdev/xtabhtch.cxx b/svx/source/xoutdev/xtabhtch.cxx index a5454144795f..7f0e6d7466d7 100644 --- a/svx/source/xoutdev/xtabhtch.cxx +++ b/svx/source/xoutdev/xtabhtch.cxx @@ -66,86 +66,6 @@ char const aChckHatch[] = { 0x04, 0x00, 'S','O','H','L'}; // < 5.2 char const aChckHatch0[] = { 0x04, 0x00, 'S','O','H','0'}; // = 5.2 char const aChckXML[] = { '<', '?', 'x', 'm', 'l' }; // = 6.0 -// ------------------ -// class XHatchTable -// ------------------ - -/************************************************************************* -|* -|* XHatchTable::XHatchTable() -|* -*************************************************************************/ - -XHatchTable::XHatchTable( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyTable( rPath, pInPool, nInitSize, nReSize) -{ - pBmpTable = new Table( nInitSize, nReSize ); -} - -/************************************************************************/ - -XHatchTable::~XHatchTable() -{ -} - -/************************************************************************/ - -XHatchEntry* XHatchTable::Replace(long nIndex, XHatchEntry* pEntry ) -{ - return (XHatchEntry*) XPropertyTable::Replace(nIndex, pEntry); -} - -/************************************************************************/ - -XHatchEntry* XHatchTable::Remove(long nIndex) -{ - return (XHatchEntry*) XPropertyTable::Remove(nIndex, 0); -} - -/************************************************************************/ - -XHatchEntry* XHatchTable::GetHatch(long nIndex) const -{ - return (XHatchEntry*) XPropertyTable::Get(nIndex, 0); -} - -/************************************************************************/ - -sal_Bool XHatchTable::Load() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XHatchTable::Save() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XHatchTable::Create() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XHatchTable::CreateBitmapsForUI() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XHatchTable::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) -{ - return( NULL ); -} - // ----------------- // class XHatchList // ----------------- @@ -189,11 +109,12 @@ void XHatchList::impCreate() VirtualDevice* pVirDev = new VirtualDevice; OSL_ENSURE(0 != pVirDev, "XDashList: no VirtualDevice created!" ); pVirDev->SetMapMode(MAP_100TH_MM); - const Size aSize(pVirDev->PixelToLogic(Size(BITMAP_WIDTH, BITMAP_HEIGHT))); + const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth(), getUiBitmapHeight()))); pVirDev->SetOutputSize(aSize); pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode() ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT : DRAWMODE_DEFAULT); + pVirDev->SetBackground(rStyleSettings.GetFieldColor()); SdrModel* pSdrModel = new SdrModel(); OSL_ENSURE(0 != pSdrModel, "XDashList: no SdrModel created!" ); @@ -229,11 +150,10 @@ void XHatchList::impDestroy() } } -XHatchList::XHatchList(const String& rPath, XOutdevItemPool* pInPool, sal_uInt16 nInitSize, sal_uInt16 nReSize) -: XPropertyList(rPath, pInPool, nInitSize, nReSize), +XHatchList::XHatchList(const String& rPath, XOutdevItemPool* pInPool) +: XPropertyList(rPath, pInPool), mpData(0) { - pBmpList = new List(nInitSize, nReSize); } XHatchList::~XHatchList() @@ -262,19 +182,19 @@ XHatchEntry* XHatchList::GetHatch(long nIndex) const sal_Bool XHatchList::Load() { - if( bListDirty ) + if( mbListDirty ) { - bListDirty = sal_False; + mbListDirty = false; - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtHatch, 3 ) ); @@ -287,15 +207,15 @@ sal_Bool XHatchList::Load() sal_Bool XHatchList::Save() { - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtHatch, 3 ) ); @@ -320,25 +240,7 @@ sal_Bool XHatchList::Create() return( sal_True ); } -sal_Bool XHatchList::CreateBitmapsForUI() -{ - impCreate(); - - for( long i = 0; i < Count(); i++) - { - Bitmap* pBmp = CreateBitmapForUI( i, sal_False ); - DBG_ASSERT( pBmp, "XHatchList: Bitmap(UI) konnte nicht erzeugt werden!" ); - - if( pBmp ) - pBmpList->Insert( pBmp, i ); - } - - impDestroy(); - - return( sal_True ); -} - -Bitmap* XHatchList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) +Bitmap XHatchList::CreateBitmapForUI( long nIndex ) { impCreate(); VirtualDevice* pVD = mpData->getVirtualDevice(); @@ -353,17 +255,11 @@ Bitmap* XHatchList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) sdr::contact::ObjectContactOfObjListPainter aPainter(*pVD, aObjectVector, 0); sdr::contact::DisplayInfo aDisplayInfo; + pVD->Erase(); aPainter.ProcessDisplay(aDisplayInfo); const Point aZero(0, 0); - Bitmap* pBitmap = new Bitmap(pVD->GetBitmap(aZero, pVD->GetOutputSize())); - - if(bDelete) - { - impDestroy(); - } - - return pBitmap; + return pVD->GetBitmap(aZero, pVD->GetOutputSize()); } ////////////////////////////////////////////////////////////////////////////// diff --git a/svx/source/xoutdev/xtable.cxx b/svx/source/xoutdev/xtable.cxx index 5d0b2c51d439..ba1d875311c4 100644 --- a/svx/source/xoutdev/xtable.cxx +++ b/svx/source/xoutdev/xtable.cxx @@ -26,6 +26,8 @@ #include <svx/xtable.hxx> #include <svx/xpool.hxx> +#include <svx/svdobj.hxx> +#include <svx/svdpool.hxx> #define GLOBALOVERFLOW @@ -41,311 +43,36 @@ Color RGB_Color( ColorData nColorName ) return aRGBColor; } -// --------------------- -// class XPropertyTable -// --------------------- - -/************************************************************************* -|* -|* XPropertyTable::XPropertyTable() -|* -*************************************************************************/ - -XPropertyTable::XPropertyTable( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - aName ( pszStandard, 8 ), - aPath ( rPath ), - pXPool ( pInPool ), - aTable ( nInitSize, nReSize ), - pBmpTable ( NULL ), - bTableDirty ( sal_True ), - bBitmapsDirty ( sal_True ), - bOwnPool ( sal_False ) -{ - if( !pXPool ) - { - bOwnPool = sal_True; - pXPool = new XOutdevItemPool; - DBG_ASSERT( pXPool, "XOutPool konnte nicht erzeugt werden!" ); - } -} - -/************************************************************************* -|* -|* XPropertyTable::XPropertyTable( SvStraem& ) -|* -*************************************************************************/ - -XPropertyTable::XPropertyTable( SvStream& /*rIn*/) : - pBmpTable ( NULL ) -{ -} - -/************************************************************************* -|* -|* XPropertyTable::~XPropertyTable() -|* -*************************************************************************/ - -XPropertyTable::~XPropertyTable() -{ - XPropertyEntry* pEntry = (XPropertyEntry*)aTable.First(); - Bitmap* pBitmap = NULL; - for (sal_uIntPtr nIndex = 0; nIndex < aTable.Count(); nIndex++) - { - delete pEntry; - pEntry = (XPropertyEntry*)aTable.Next(); - } - // Hier wird die Bitmaptabelle geloescht - if( pBmpTable ) - { - pBitmap = (Bitmap*) pBmpTable->First(); - - for( sal_uIntPtr nIndex = 0; nIndex < pBmpTable->Count(); nIndex++ ) - { - delete pBitmap; - pBitmap = (Bitmap*) pBmpTable->Next(); - } - delete pBmpTable; - pBmpTable = NULL; - } - // Eigener Pool wird geloescht - if( bOwnPool && pXPool ) - { - SfxItemPool::Free(pXPool); - } -} - -/************************************************************************* -|* -|* XPropertyTable::Clear() -|* -*************************************************************************/ - -void XPropertyTable::Clear() -{ - aTable.Clear(); - if( pBmpTable ) - pBmpTable->Clear(); -} - -/************************************************************************/ - -long XPropertyTable::Count() const -{ - if( bTableDirty ) - { - // ( (XPropertyTable*) this )->bTableDirty = sal_False; <- im Load() - if( !( (XPropertyTable*) this )->Load() ) - ( (XPropertyTable*) this )->Create(); - } - return( aTable.Count() ); -} - -/************************************************************************* -|* -|* XPropertyEntry* XPropertyTable::Get() -|* -*************************************************************************/ - -XPropertyEntry* XPropertyTable::Get( long nIndex, sal_uInt16 /*nDummy*/) const -{ - if( bTableDirty ) - { - // ( (XPropertyTable*) this )->bTableDirty = sal_False; <- im Load() - if( !( (XPropertyTable*) this )->Load() ) - ( (XPropertyTable*) this )->Create(); - } - return (XPropertyEntry*) aTable.GetObject( (sal_uIntPtr) nIndex ); -} - -/************************************************************************* -|* -|* long XPropertyTable::Get(const String& rName) -|* -*************************************************************************/ - -long XPropertyTable::Get(const XubString& rName) -{ - if( bTableDirty ) - { - // bTableDirty = sal_False; - if( !Load() ) - Create(); - } - long nPos = 0; - XPropertyEntry* pEntry = (XPropertyEntry*)aTable.First(); - while (pEntry && pEntry->GetName() != rName) - { - nPos++; - pEntry = (XPropertyEntry*)aTable.Next(); - } - if (!pEntry) nPos = -1; - return nPos; -} - -/************************************************************************* -|* -|* Bitmap* XPropertyTable::GetBitmap() -|* -*************************************************************************/ - -Bitmap* XPropertyTable::GetBitmap( long nIndex ) const -{ - if( pBmpTable ) - { - if( bBitmapsDirty ) - { - ( (XPropertyTable*) this )->bBitmapsDirty = sal_False; - ( (XPropertyTable*) this )->CreateBitmapsForUI(); - } - - if( pBmpTable->Count() >= (sal_uIntPtr) nIndex ) - return (Bitmap*) pBmpTable->GetObject( (sal_uIntPtr) nIndex ); - } - return( NULL ); -} - -/************************************************************************* -|* -|* void XPropertyTable::Insert() -|* -*************************************************************************/ - -sal_Bool XPropertyTable::Insert( long nIndex, XPropertyEntry* pEntry ) -{ - sal_Bool bReturn = aTable.Insert( (sal_uIntPtr) nIndex, pEntry ); - - if( pBmpTable && !bBitmapsDirty ) - { - Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex ); - pBmpTable->Insert( (sal_uIntPtr) nIndex, pBmp ); - } - return bReturn; -} - -/************************************************************************* -|* -|* void XPropertyTable::Replace() -|* -*************************************************************************/ - -XPropertyEntry* XPropertyTable::Replace( long nIndex, XPropertyEntry* pEntry ) -{ - XPropertyEntry* pOldEntry = (XPropertyEntry*) aTable.Replace( (sal_uIntPtr) nIndex, pEntry ); - - if( pBmpTable && !bBitmapsDirty ) - { - Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex ); - Bitmap* pOldBmp = (Bitmap*) pBmpTable->Replace( (sal_uIntPtr) nIndex, pBmp ); - if( pOldBmp ) - delete pOldBmp; - } - return pOldEntry; -} - -/************************************************************************* -|* -|* void XPropertyTable::Remove() -|* -*************************************************************************/ - -XPropertyEntry* XPropertyTable::Remove( long nIndex, sal_uInt16 /*nDummy*/) -{ - if( pBmpTable && !bBitmapsDirty ) - { - Bitmap* pOldBmp = (Bitmap*) pBmpTable->Remove( (sal_uIntPtr) nIndex ); - if( pOldBmp ) - delete pOldBmp; - } - return (XPropertyEntry*) aTable.Remove((sal_uIntPtr)nIndex); -} - -/************************************************************************/ - -void XPropertyTable::SetName( const String& rString ) -{ - if(rString.Len()) - { - aName = rString; - } -} - // -------------------- // class XPropertyList // -------------------- - -/************************************************************************* -|* -|* XPropertyList::XPropertyList() -|* -*************************************************************************/ - -XPropertyList::XPropertyList( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - aName ( pszStandard, 8 ), - aPath ( rPath ), - pXPool ( pInPool ), - aList ( nInitSize, nReSize ), - pBmpList ( NULL ), - bListDirty ( sal_True ), - bBitmapsDirty ( sal_True ), - bOwnPool ( sal_False ) +XPropertyList::XPropertyList( const String& rPath, XOutdevItemPool* pInPool ) : + maName ( pszStandard, 8 ), + maPath ( rPath ), + mpXPool ( pInPool ), + maList ( 16, 16 ), + mbListDirty (true) { - if( !pXPool ) + if( !mpXPool ) { - bOwnPool = sal_True; - pXPool = new XOutdevItemPool; - DBG_ASSERT( pXPool, "XOutPool konnte nicht erzeugt werden!" ); + mpXPool = static_cast< XOutdevItemPool* >(&SdrObject::GetGlobalDrawObjectItemPool()); } } /************************************************************************* |* -|* XPropertyList::XPropertyList( SvStraem& ) -|* -*************************************************************************/ - -XPropertyList::XPropertyList( SvStream& /*rIn*/) : - pBmpList ( NULL ) -{ -} - -/************************************************************************* -|* |* XPropertyList::~XPropertyList() |* *************************************************************************/ XPropertyList::~XPropertyList() { - XPropertyEntry* pEntry = (XPropertyEntry*)aList.First(); - Bitmap* pBitmap = NULL; - for( sal_uIntPtr nIndex = 0; nIndex < aList.Count(); nIndex++ ) + XPropertyEntry* pEntry = (XPropertyEntry*)maList.First(); + for( sal_uIntPtr nIndex = 0; nIndex < maList.Count(); nIndex++ ) { delete pEntry; - pEntry = (XPropertyEntry*)aList.Next(); - } - - if( pBmpList ) - { - pBitmap = (Bitmap*) pBmpList->First(); - - for( sal_uIntPtr nIndex = 0; nIndex < pBmpList->Count(); nIndex++ ) - { - delete pBitmap; - pBitmap = (Bitmap*) pBmpList->Next(); - } - delete pBmpList; - pBmpList = NULL; - } - - if( bOwnPool && pXPool ) - { - SfxItemPool::Free(pXPool); + pEntry = (XPropertyEntry*)maList.Next(); } } @@ -357,22 +84,20 @@ XPropertyList::~XPropertyList() void XPropertyList::Clear() { - aList.Clear(); - if( pBmpList ) - pBmpList->Clear(); + maList.Clear(); } /************************************************************************/ long XPropertyList::Count() const { - if( bListDirty ) + if( mbListDirty ) { // ( (XPropertyList*) this )->bListDirty = sal_False; <- im Load() if( !( (XPropertyList*) this )->Load() ) ( (XPropertyList*) this )->Create(); } - return( aList.Count() ); + return( maList.Count() ); } /************************************************************************* @@ -383,13 +108,13 @@ long XPropertyList::Count() const XPropertyEntry* XPropertyList::Get( long nIndex, sal_uInt16 /*nDummy*/) const { - if( bListDirty ) + if( mbListDirty ) { // ( (XPropertyList*) this )->bListDirty = sal_False; <- im Load() if( !( (XPropertyList*) this )->Load() ) ( (XPropertyList*) this )->Create(); } - return (XPropertyEntry*) aList.GetObject( (sal_uIntPtr) nIndex ); + return (XPropertyEntry*) maList.GetObject( (sal_uIntPtr) nIndex ); } /************************************************************************* @@ -400,18 +125,18 @@ XPropertyEntry* XPropertyList::Get( long nIndex, sal_uInt16 /*nDummy*/) const long XPropertyList::Get(const XubString& rName) { - if( bListDirty ) + if( mbListDirty ) { //bListDirty = sal_False; if( !Load() ) Create(); } long nPos = 0; - XPropertyEntry* pEntry = (XPropertyEntry*)aList.First(); + XPropertyEntry* pEntry = (XPropertyEntry*)maList.First(); while (pEntry && pEntry->GetName() != rName) { nPos++; - pEntry = (XPropertyEntry*)aList.Next(); + pEntry = (XPropertyEntry*)maList.Next(); } if (!pEntry) nPos = -1; return nPos; @@ -423,19 +148,23 @@ long XPropertyList::Get(const XubString& rName) |* *************************************************************************/ -Bitmap* XPropertyList::GetBitmap( long nIndex ) const +Bitmap XPropertyList::GetUiBitmap( long nIndex ) const { - if( pBmpList ) + Bitmap aRetval; + XPropertyEntry* pEntry = (XPropertyEntry*)maList.GetObject((sal_uIntPtr)nIndex); + + if(pEntry) { - if( bBitmapsDirty ) + aRetval = pEntry->GetUiBitmap(); + + if(aRetval.IsEmpty()) { - ( (XPropertyList*) this )->bBitmapsDirty = sal_False; - ( (XPropertyList*) this )->CreateBitmapsForUI(); + aRetval = const_cast< XPropertyList* >(this)->CreateBitmapForUI(nIndex); + pEntry->SetUiBitmap(aRetval); } - if( pBmpList->Count() >= (sal_uIntPtr) nIndex ) - return (Bitmap*) pBmpList->GetObject( (sal_uIntPtr) nIndex ); } - return( NULL ); + + return aRetval; } /************************************************************************* @@ -446,14 +175,7 @@ Bitmap* XPropertyList::GetBitmap( long nIndex ) const void XPropertyList::Insert( XPropertyEntry* pEntry, long nIndex ) { - aList.Insert( pEntry, (sal_uIntPtr) nIndex ); - - if( pBmpList && !bBitmapsDirty ) - { - Bitmap* pBmp = CreateBitmapForUI( - (sal_uIntPtr) nIndex < aList.Count() ? nIndex : aList.Count() - 1 ); - pBmpList->Insert( pBmp, (sal_uIntPtr) nIndex ); - } + maList.Insert( pEntry, (sal_uIntPtr) nIndex ); } /************************************************************************* @@ -464,16 +186,7 @@ void XPropertyList::Insert( XPropertyEntry* pEntry, long nIndex ) XPropertyEntry* XPropertyList::Replace( XPropertyEntry* pEntry, long nIndex ) { - XPropertyEntry* pOldEntry = (XPropertyEntry*) aList.Replace( pEntry, (sal_uIntPtr) nIndex ); - - if( pBmpList && !bBitmapsDirty ) - { - Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex ); - Bitmap* pOldBmp = (Bitmap*) pBmpList->Replace( pBmp, (sal_uIntPtr) nIndex ); - if( pOldBmp ) - delete pOldBmp; - } - return pOldEntry; + return (XPropertyEntry*) maList.Replace( pEntry, (sal_uIntPtr) nIndex ); } /************************************************************************* @@ -484,13 +197,7 @@ XPropertyEntry* XPropertyList::Replace( XPropertyEntry* pEntry, long nIndex ) XPropertyEntry* XPropertyList::Remove( long nIndex, sal_uInt16 /*nDummy*/) { - if( pBmpList && !bBitmapsDirty ) - { - Bitmap* pOldBmp = (Bitmap*) pBmpList->Remove( (sal_uIntPtr) nIndex ); - if( pOldBmp ) - delete pOldBmp; - } - return (XPropertyEntry*) aList.Remove( (sal_uIntPtr) nIndex ); + return (XPropertyEntry*) maList.Remove( (sal_uIntPtr) nIndex ); } /************************************************************************/ @@ -499,9 +206,29 @@ void XPropertyList::SetName( const String& rString ) { if(rString.Len()) { - aName = rString; + maName = rString; } } +sal_uInt32 XPropertyList::getUiBitmapWidth() const +{ + static sal_uInt32 nWidth = 32; // alternative: 42; + + return nWidth; +} + +sal_uInt32 XPropertyList::getUiBitmapHeight() const +{ + static sal_uInt32 nHeight = 12; // alternative: 16; + return nHeight; +} + +sal_uInt32 XPropertyList::getUiBitmapLineWidth() const +{ + static sal_uInt32 nLineWidth = 3; + + return nLineWidth; +} +// eof diff --git a/svx/source/xoutdev/xtablend.cxx b/svx/source/xoutdev/xtablend.cxx index be150004a373..4f40c1ac5574 100644 --- a/svx/source/xoutdev/xtablend.cxx +++ b/svx/source/xoutdev/xtablend.cxx @@ -67,6 +67,7 @@ #include <svx/svdmodel.hxx> #include <svx/sdr/contact/objectcontactofobjlistpainter.hxx> #include <svx/sdr/contact/displayinfo.hxx> +#include <svx/xlnwtit.hxx> #define GLOBALOVERFLOW @@ -74,90 +75,9 @@ using namespace com::sun::star; using namespace rtl; sal_Unicode const pszExtLineEnd[] = {'s','o','e'}; - -static char const aChckLEnd[] = { 0x04, 0x00, 'S','O','E','L'}; // < 5.2 -static char const aChckLEnd0[] = { 0x04, 0x00, 'S','O','E','0'}; // = 5.2 -static char const aChckXML[] = { '<', '?', 'x', 'm', 'l' }; // = 6.0 - -// -------------------- -// class XLineEndTable -// -------------------- - -/************************************************************************* -|* -|* XLineEndTable::XLineEndTable() -|* -*************************************************************************/ - -XLineEndTable::XLineEndTable( const String& rPath, - XOutdevItemPool* pInPool, - sal_uInt16 nInitSize, sal_uInt16 nReSize ) : - XPropertyTable( rPath, pInPool, nInitSize, nReSize) -{ - pBmpTable = new Table( nInitSize, nReSize ); -} - -/************************************************************************/ - -XLineEndTable::~XLineEndTable() -{ -} - -/************************************************************************/ - -XLineEndEntry* XLineEndTable::Replace(long nIndex, XLineEndEntry* pEntry ) -{ - return (XLineEndEntry*) XPropertyTable::Replace(nIndex, pEntry); -} - -/************************************************************************/ - -XLineEndEntry* XLineEndTable::Remove(long nIndex) -{ - return (XLineEndEntry*) XPropertyTable::Remove(nIndex, 0); -} - -/************************************************************************/ - -XLineEndEntry* XLineEndTable::GetLineEnd(long nIndex) const -{ - return (XLineEndEntry*) XPropertyTable::Get(nIndex, 0); -} - -/************************************************************************/ - -sal_Bool XLineEndTable::Load() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XLineEndTable::Save() -{ - return( sal_False ); -} - -/************************************************************************/ - -sal_Bool XLineEndTable::Create() -{ - return( sal_False ); -} - -/************************************************************************/ - -Bitmap* XLineEndTable::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) -{ - return( NULL ); -} - -/************************************************************************/ - -sal_Bool XLineEndTable::CreateBitmapsForUI() -{ - return( sal_False ); -} +//static char const aChckLEnd[] = { 0x04, 0x00, 'S','O','E','L'}; // < 5.2 +//static char const aChckLEnd0[] = { 0x04, 0x00, 'S','O','E','0'}; // = 5.2 +//static char const aChckXML[] = { '<', '?', 'x', 'm', 'l' }; // = 6.0 // -------------------- // class XLineEndList @@ -202,11 +122,12 @@ void XLineEndList::impCreate() VirtualDevice* pVirDev = new VirtualDevice; OSL_ENSURE(0 != pVirDev, "XLineEndList: no VirtualDevice created!" ); pVirDev->SetMapMode(MAP_100TH_MM); - const Size aSize(pVirDev->PixelToLogic(Size(BITMAP_WIDTH * 2, BITMAP_HEIGHT))); + const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth() * 2, getUiBitmapHeight()))); pVirDev->SetOutputSize(aSize); pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode() ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT : DRAWMODE_DEFAULT); + pVirDev->SetBackground(rStyleSettings.GetFieldColor()); SdrModel* pSdrModel = new SdrModel(); OSL_ENSURE(0 != pSdrModel, "XLineEndList: no SdrModel created!" ); @@ -228,8 +149,11 @@ void XLineEndList::impCreate() SdrObject* pLineObject = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aPolygon)); OSL_ENSURE(0 != pLineObject, "XLineEndList: no LineObject created!" ); pLineObject->SetModel(pSdrModel); - pLineObject->SetMergedItem(XLineStartWidthItem(aSize.Height())); - pLineObject->SetMergedItem(XLineEndWidthItem(aSize.Height())); + const Size aLineWidth(pVirDev->PixelToLogic(Size(getUiBitmapLineWidth(), 0))); + pLineObject->SetMergedItem(XLineWidthItem(aLineWidth.getWidth())); + const sal_uInt32 nArrowHeight((aSize.Height() * 8) / 10); + pLineObject->SetMergedItem(XLineStartWidthItem(nArrowHeight)); + pLineObject->SetMergedItem(XLineEndWidthItem(nArrowHeight)); pLineObject->SetMergedItem(XLineColorItem(String(), rStyleSettings.GetFieldTextColor())); mpData = new impXLineEndList(pVirDev, pSdrModel, pBackgroundObject, pLineObject); @@ -246,11 +170,10 @@ void XLineEndList::impDestroy() } } -XLineEndList::XLineEndList(const String& rPath, XOutdevItemPool* _pXPool, sal_uInt16 nInitSize, sal_uInt16 nReSize) -: XPropertyList(rPath, _pXPool, nInitSize, nReSize), +XLineEndList::XLineEndList(const String& rPath, XOutdevItemPool* _pXPool) +: XPropertyList(rPath, _pXPool), mpData(0) { - pBmpList = new List(nInitSize, nReSize); } XLineEndList::~XLineEndList() @@ -275,19 +198,19 @@ XLineEndEntry* XLineEndList::GetLineEnd(long nIndex) const sal_Bool XLineEndList::Load() { - if( bListDirty ) + if( mbListDirty ) { - bListDirty = sal_False; + mbListDirty = false; - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtLineEnd, 3 ) ); @@ -300,15 +223,15 @@ sal_Bool XLineEndList::Load() sal_Bool XLineEndList::Save() { - INetURLObject aURL( aPath ); + INetURLObject aURL( maPath ); if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) { - DBG_ASSERT( !aPath.Len(), "invalid URL" ); + DBG_ASSERT( !maPath.Len(), "invalid URL" ); return sal_False; } - aURL.Append( aName ); + aURL.Append( maName ); if( !aURL.getExtension().getLength() ) aURL.setExtension( rtl::OUString( pszExtLineEnd, 3 ) ); @@ -340,25 +263,7 @@ sal_Bool XLineEndList::Create() return( sal_True ); } -sal_Bool XLineEndList::CreateBitmapsForUI() -{ - impCreate(); - - for( long i = 0; i < Count(); i++) - { - Bitmap* pBmp = CreateBitmapForUI( i, sal_False ); - OSL_ENSURE(0 != pBmp, "XLineEndList: Bitmap(UI) could not be created!" ); - - if( pBmp ) - pBmpList->Insert( pBmp, i ); - } - - impDestroy(); - - return( sal_True ); -} - -Bitmap* XLineEndList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) +Bitmap XLineEndList::CreateBitmapForUI( long nIndex ) { impCreate(); VirtualDevice* pVD = mpData->getVirtualDevice(); @@ -374,17 +279,11 @@ Bitmap* XLineEndList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) sdr::contact::ObjectContactOfObjListPainter aPainter(*pVD, aObjectVector, 0); sdr::contact::DisplayInfo aDisplayInfo; + pVD->Erase(); aPainter.ProcessDisplay(aDisplayInfo); const Point aZero(0, 0); - Bitmap* pBitmap = new Bitmap(pVD->GetBitmap(aZero, pVD->GetOutputSize())); - - if(bDelete) - { - impDestroy(); - } - - return pBitmap; + return pVD->GetBitmap(aZero, pVD->GetOutputSize()); } ////////////////////////////////////////////////////////////////////////////// diff --git a/svx/util/svx.component b/svx/util/svx.component index e5c516a252bf..a22f0d767592 100644 --- a/svx/util/svx.component +++ b/svx/util/svx.component @@ -69,4 +69,7 @@ <implementation name="com.sun.star.svx.UpSearchToolboxController"> <service name="com.sun.star.frame.ToolbarController"/> </implementation> + <implementation name="org.apache.openoffice.comp.svx.sidebar.PanelFactory"> + <service name="com.sun.star.ui.UIElementFactory"/> + </implementation> </component> diff --git a/sw/AllLangResTarget_sw.mk b/sw/AllLangResTarget_sw.mk index 3dc14c1a6ed7..47d69e3c264c 100644 --- a/sw/AllLangResTarget_sw.mk +++ b/sw/AllLangResTarget_sw.mk @@ -156,6 +156,8 @@ $(eval $(call gb_SrsTarget_add_files,sw/res,\ sw/source/ui/ribbar/tbxanchr.src \ sw/source/ui/ribbar/workctrl.src \ sw/source/ui/shells/shells.src \ + sw/source/ui/sidebar/PagePropertyPanel.src \ + sw/source/ui/sidebar/WrapPropertyPanel.src \ sw/source/ui/smartmenu/stmenu.src \ sw/source/ui/table/chartins.src \ sw/source/ui/table/colwd.src \ diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk index 7715a25b5984..b5b92972ad56 100644 --- a/sw/Library_sw.mk +++ b/sw/Library_sw.mk @@ -646,6 +646,13 @@ $(eval $(call gb_Library_add_exception_objects,sw,\ sw/source/ui/shells/txtattr \ sw/source/ui/shells/txtcrsr \ sw/source/ui/shells/txtnum \ + sw/source/ui/sidebar/PageOrientationControl \ + sw/source/ui/sidebar/PageMarginControl \ + sw/source/ui/sidebar/PageSizeControl \ + sw/source/ui/sidebar/PageColumnControl \ + sw/source/ui/sidebar/PagePropertyPanel \ + sw/source/ui/sidebar/WrapPropertyPanel \ + sw/source/ui/sidebar/SwPanelFactory \ sw/source/ui/smartmenu/stmenu \ sw/source/ui/table/chartins \ sw/source/ui/table/swtablerep \ diff --git a/sw/inc/SwPanelFactory.hxx b/sw/inc/SwPanelFactory.hxx new file mode 100644 index 000000000000..d0f2c289279d --- /dev/null +++ b/sw/inc/SwPanelFactory.hxx @@ -0,0 +1,74 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef SW_SIDEBAR_PANEL_FACTORY_HXX +#define SW_SIDEBAR_PANEL_FACTORY_HXX + +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <com/sun/star/ui/XUIElementFactory.hpp> + +#include <boost/noncopyable.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sw { namespace sidebar { + +namespace +{ + typedef ::cppu::WeakComponentImplHelper1 < + css::ui::XUIElementFactory + > PanelFactoryInterfaceBase; +} + + +class SwPanelFactory + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public PanelFactoryInterfaceBase +{ +public: + static ::rtl::OUString SAL_CALL getImplementationName(void); + static cssu::Reference<cssu::XInterface> SAL_CALL createInstance( + const cssu::Reference<css::lang::XMultiServiceFactory>& rxFactory); + static cssu::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames(void); + + SwPanelFactory(void); + virtual ~SwPanelFactory(void); + + // XUIElementFactory + cssu::Reference<css::ui::XUIElement> SAL_CALL createUIElement( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException ); +}; + + +} } // end of namespace sw::sidebar + +#endif diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h index f11f2116bc48..410bfa62f3d1 100644 --- a/sw/inc/cmdid.h +++ b/sw/inc/cmdid.h @@ -64,6 +64,7 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr #define FN_EXTRA2 (SID_SW_START + 2200) #define FN_PARAM2 (SID_SW_START + 2400) #define FN_NOTES (SID_SW_START + 2500) +#define FN_SIDEBAR (SID_SW_START + 2550) /* More accurately, this range should be from FN_EXTRA2 to FN_PARAM2-1, but * FN_NUMBER_NEWSTART comes from FN_FORMAT2, and FN_PARAM_LINK_DISPLAY_NAME @@ -480,7 +481,7 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr #define FN_SET_WIDOW (FN_FORMAT + 36) /* Widows */ #define FN_SET_ORPHAN (FN_FORMAT + 37) /* Orphans */ - +#define FN_FORMAT_PAGE_SETTING_DLG (FN_FORMAT + 42) /* */ #define FN_REGISTER_COLLECTION (FN_FORMAT + 43) /* Referenzvorlage an der Seite */ #define FN_REGISTER_MODE (FN_FORMAT + 44) /* Registermodus an/aus */ #define FN_NUM_FORMAT_TABLE_DLG (FN_FORMAT + 45) /* Zahlenformat in Tabelle */ @@ -638,10 +639,9 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr #define FN_FRAME_WRAP_CONTOUR (FN_FORMAT + 184) /* Rahmen Kunturumlauf */ -#define FN_TABLE_VERT_NONE (FN_FORMAT + 185) /* vertikale Ausrichtung in Tabellenzellen */ -#define FN_TABLE_VERT_CENTER (FN_FORMAT + 186) /* -"- */ -#define FN_TABLE_VERT_BOTTOM (FN_FORMAT + 187) /* -"- */ -#define FN_TABLE_SET_VERT_ALIGN (FN_FORMAT + 188) /* -"- */ +// +185..+187 removed in favor of corresponding globally available slot + +#define FN_TABLE_SET_VERT_ALIGN (FN_FORMAT + 188) /* vertical alignment in Writer table cells */ #define FN_TABLE_MODE_FIX (FN_FORMAT + 189) /* Tabellenmodus */ #define FN_TABLE_MODE_FIX_PROP (FN_FORMAT + 190) /* -"- */ #define FN_TABLE_MODE_VARIABLE (FN_FORMAT + 191) /* -"- */ @@ -1258,10 +1258,13 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr #define FN_IID_COLRIGHT (FN_FRAME + 17) #define FN_SET_FRM_ALT_NAME (FN_FRAME + 18) -// --> OD 2009-07-13 #i73249# #define FN_UNO_TITLE (FN_FRAME + 19) #define FN_UNO_DESCRIPTION (FN_FRAME + 20) -// <-- + +#define FN_PROPERTY_WRAP_DLG (FN_SIDEBAR + 0) +#define SID_ATTR_PAGE_COLUMN (FN_SIDEBAR + 1) +#define SID_ATTR_PAGE_ULSPACE (FN_SIDEBAR + 2) +#define SID_ATTR_PAGE_LRSPACE (FN_SIDEBAR + 3) //Member-Ids fuer Fill/SetVariable an Items diff --git a/sw/inc/docsh.hxx b/sw/inc/docsh.hxx index 4a7f94ac1545..3c3f5dc86846 100644 --- a/sw/inc/docsh.hxx +++ b/sw/inc/docsh.hxx @@ -105,11 +105,20 @@ class SW_DLLPUBLIC SwDocShell: public SfxObjectShell, public SfxListener SW_DLLPRIVATE virtual void Draw( OutputDevice*, const JobSetup&, sal_uInt16); // Methoden fuer StyleSheets - SW_DLLPRIVATE sal_uInt16 Edit( const String &rName, const String& rParent, sal_uInt16 nFamily, - sal_uInt16 nMask, sal_Bool bNew, - sal_Bool bColumn = sal_False, - SwWrtShell* pActShell = 0, - sal_Bool bBasic = sal_False ); + + // @param nSlot + // Only used for nFamily == SFX_STYLE_FAMILY_PAGE. Identifies optional Slot by which the edit is triggered. + // Used to activate certain dialog pane + SW_DLLPRIVATE sal_uInt16 Edit( + const String &rName, + const String& rParent, + const sal_uInt16 nFamily, + sal_uInt16 nMask, + const sal_Bool bNew, + const sal_uInt16 nSlot = 0, + SwWrtShell* pActShell = 0, + const sal_Bool bBasic = sal_False ); + SW_DLLPRIVATE sal_uInt16 Delete(const String &rName, sal_uInt16 nFamily); SW_DLLPRIVATE sal_uInt16 ApplyStyles(const String &rName, sal_uInt16 nFamily, SwWrtShell* pShell = 0, sal_uInt16 nMode = 0 ); @@ -245,10 +254,13 @@ public: void _LoadStyles( SfxObjectShell& rSource, sal_Bool bPreserveCurrentDocument ); - // Seitenvorlagedialog anzeigen, ggf. auf Spaltenpage - void FormatPage( const String& rPage, - sal_Bool bColumn = sal_False, - SwWrtShell* pActShell = 0 ); + // Show page style format dialog + // @param nSlot + // Identifies slot by which the dialog is triggered. Used to activate certain dialog pane + void FormatPage( + const String& rPage, + const sal_uInt16 nSlot, + SwWrtShell& rActShell ); // --> OD 2006-11-07 #i59688# // linked graphics are now loaded on demand. diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx index 2e1947d8d8ab..6c2a69c3e082 100644 --- a/sw/inc/editsh.hxx +++ b/sw/inc/editsh.hxx @@ -496,6 +496,9 @@ public: sal_Bool HasBullet() const; // <- i29560 + sal_Bool SelectionHasNumber() const; + sal_Bool SelectionHasBullet() const; + String GetUniqueNumRuleName( const String* pChkStr = 0, sal_Bool bAutoNum = sal_True ) const; void ChgNumRuleFmts( const SwNumRule& rRule ); // setze und erfrage, ob an aktueller PointPos eine Numerierung mit diff --git a/sw/inc/helpid.h b/sw/inc/helpid.h index 44900ac65eb5..cc824d049180 100644 --- a/sw/inc/helpid.h +++ b/sw/inc/helpid.h @@ -305,6 +305,14 @@ #define HID_OPTCOMPATIBILITY_PAGE "SW_HID_OPTCOMPATIBILITY_PAGE" #define HID_COMPATIBILITY_OPTIONS_BOX "SW_HID_COMPATIBILITY_OPTIONS_BOX" +#define HID_PROPERTYPANEL_WRAP_SECTION "SW_HID_PROPERTYPANEL_WRAP_SECTION" +#define HID_PROPERTYPANEL_WRAP_RB_NO_WRAP "SW_HID_PROPERTYPANEL_WRAP_RB_NO_WRAP" +#define HID_PROPERTYPANEL_WRAP_RB_WRAP_LEFT "SW_HID_PROPERTYPANEL_WRAP_RB_WRAP_LEFT" +#define HID_PROPERTYPANEL_WRAP_RB_WRAP_RIGHT "SW_HID_PROPERTYPANEL_WRAP_RB_WRAP_RIGHT" +#define HID_PROPERTYPANEL_WRAP_RB_WRAP_PARALLEL "SW_HID_PROPERTYPANEL_WRAP_RB_WRAP_PARALLEL" +#define HID_PROPERTYPANEL_WRAP_RB_WRAP_THROUGH "SW_HID_PROPERTYPANEL_WRAP_RB_WRAP_THROUGH" +#define HID_PROPERTYPANEL_WRAP_RB_WRAP_IDEAL "SW_HID_PROPERTYPANEL_WRAP_RB_WRAP_IDEAL" + // AutoPilot Help-IDs ********************************************************* #define HID_LETTER_PAGE1 "SW_HID_LETTER_PAGE1" @@ -343,6 +351,27 @@ #define HID_AUTOPILOT_PREV "SW_HID_AUTOPILOT_PREV" #define HID_AUTOPILOT_OK "SW_HID_AUTOPILOT_OK" +// sw::sidebar::PagePropertyPanel +#define HID_SWPAGE_ORIENTATION "HID_SWPAGE_ORIENTATION" +#define HID_SWPAGE_TBI_ORIENTATION "HID_SWPAGE_TBI_ORIENTATION" +#define HID_SWPAGE_MARGIN "HID_SWPAGE_MARGIN" +#define HID_SWPAGE_TBI_MARGIN "HID_SWPAGE_TBI_MARGIN" +#define HID_SWPAGE_SIZE "HID_SWPAGE_SIZE" +#define HID_SWPAGE_TBI_SIZE "HID_SWPAGE_TBI_SIZE" +#define HID_SWPAGE_COLUMN "HID_SWPAGE_COLUMN" +#define HID_SWPAGE_TBI_COLUMN "HID_SWPAGE_TBI_COLUMN" +#define HID_SWPAGE_LEFT_MARGIN "HID_SWPAGE_LEFT_MARGIN" +#define HID_SWPAGE_RIGHT_MARGIN "HID_SWPAGE_RIGHT_MARGIN" +#define HID_SWPAGE_TOP_MARGIN "HID_SWPAGE_TOP_MARGIN" +#define HID_SWPAGE_BOTTOM_MARGIN "HID_SWPAGE_BOTTOM_MARGIN" +#define HID_SWPAGE_SIZE_MORE "HID_SWPAGE_SIZE_MORE" +#define HID_SWPAGE_COLUMN_MORE "HID_SWPAGE_COLUMN_MORE" +#define HID_SWPAGE_VS_ORIENTATION "HID_SWPAGE_VS_ORIENTATION" +#define HID_SWPAGE_VS_MARGIN "HID_SWPAGE_VS_MARGIN" +#define HID_SWPAGE_VS_SIZE "HID_SWPAGE_VS_SIZE" +#define HID_SWPAGE_VS_COLUMN "HID_SWPAGE_VS_COLUMN" +#define HID_PROPERTYPANEL_SWPAGE_SECTION "HID_PROPERTYPANEL_SWPAGE_SECTION" + // HelpIds fuers Menue ***************************************************** #define HID_MN_SUB_TBLROW "SW_HID_MN_SUB_TBLROW" diff --git a/sw/inc/rcid.hrc b/sw/inc/rcid.hrc index 96181563a2eb..63c61699a879 100644 --- a/sw/inc/rcid.hrc +++ b/sw/inc/rcid.hrc @@ -74,6 +74,7 @@ #define RC_UNDO (RC_BASE + 3750) #define RC_SMARTTAG (RC_BASE + 3950) // SMARTTAGS #define RC_UNOCORE (RC_BASE + 4050) +#define RC_PROPERTYPANEL (RC_BASE + 4070) #define RC_ANNOTATION (RC_BASE + 4150) /*-------------------------------------------------------------------- @@ -264,4 +265,7 @@ #define RC_UNOCORE_BEGIN RC_UNOCORE #define RC_UNOCORE_END (RC_UNOCORE + 10) +// property panel +#define RC_PROPERTYPANEL_BEGIN RC_PROPERTYPANEL +#define RC_PROPERTYPANEL_END (RC_PROPERTYPANEL + 10) #endif diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx index 67a6c669e596..7a2cd55c25a9 100644 --- a/sw/inc/swabstdlg.hxx +++ b/sw/inc/swabstdlg.hxx @@ -420,11 +420,14 @@ public: sal_Bool bFmt = sal_False, sal_uInt16 nDefPage = 0, const String* pFmtStr = 0) = 0; //add for SwFrmDlg + // @param nSlot + // Identifies optional Slot by which the creation of the Template (Style) dialog is triggered. + // Currently used, if nRegion == SFX_STYLE_FAMILY_PAGE in order to activate certain dialog pane virtual SfxAbstractTabDialog* CreateTemplateDialog( int nResId, Window* pParent, SfxStyleSheetBase& rBase, sal_uInt16 nRegion, - sal_Bool bColumn = sal_False, + const sal_uInt16 nSlot = 0, SwWrtShell* pActShell = 0, sal_Bool bNew = sal_False ) = 0; //add for SwTemplateDlg virtual AbstractGlossaryDlg* CreateGlossaryDlg( int nResId, diff --git a/sw/inc/swcommands.h b/sw/inc/swcommands.h index b161df018c00..e02e79b654d6 100644 --- a/sw/inc/swcommands.h +++ b/sw/inc/swcommands.h @@ -50,9 +50,9 @@ #define CMD_FN_NUMBER_BULLETS ".uno:BulletsAndNumberingDialog"
#define CMD_FN_CALC_TABLE ".uno:Calc"
#define CMD_FN_CALCULATE ".uno:CalculateSel"
-#define CMD_FN_TABLE_VERT_BOTTOM ".uno:CellVertBottom"
-#define CMD_FN_TABLE_VERT_CENTER ".uno:CellVertCenter"
-#define CMD_FN_TABLE_VERT_NONE ".uno:CellVertTop"
+#define CMD_SID_TABLE_VERT_BOTTOM ".uno:CellVertBottom"
+#define CMD_SID_TABLE_VERT_CENTER ".uno:CellVertCenter"
+#define CMD_SID_TABLE_VERT_NONE ".uno:CellVertTop"
#define CMD_FN_FRAME_CHAIN ".uno:ChainFrames"
#define CMD_FN_CHANGE_DBFIELD ".uno:ChangeDatabaseField"
#define CMD_FN_NUMBERING_OUTLINE_DLG ".uno:ChapterNumberingDialog"
diff --git a/sw/sdi/_annotsh.sdi b/sw/sdi/_annotsh.sdi index 3a1d8be5bb71..4f54f2e9ecdd 100644 --- a/sw/sdi/_annotsh.sdi +++ b/sw/sdi/_annotsh.sdi @@ -179,6 +179,24 @@ interface _Annotation DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_ATTR_PARA_LRSPACE + [ + ExecMethod = Exec; + StateMethod = GetState ; + ] + + SID_ATTR_PARA_LINESPACE + [ + ExecMethod = Exec; + StateMethod = GetState ; + ] + + SID_ATTR_PARA_ULSPACE + [ + ExecMethod = Exec; + StateMethod = GetState ; + ] + FN_INSERT_STRING [ ExecMethod = Exec ; @@ -207,6 +225,13 @@ interface _Annotation DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_CHAR_DLG_EFFECT + [ + ExecMethod = Exec ; + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_ATTR_CHAR_WEIGHT // api: [ ExecMethod = Exec ; diff --git a/sw/sdi/_basesh.sdi b/sw/sdi/_basesh.sdi index 0583750e2280..cee73b2713f5 100644 --- a/sw/sdi/_basesh.sdi +++ b/sw/sdi/_basesh.sdi @@ -249,6 +249,12 @@ interface BaseTextSelection DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + FN_FORMAT_PAGE_SETTING_DLG + [ + ExecMethod = ExecDlg ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + FN_CONVERT_TABLE_TO_TEXT [ ExecMethod = Execute ; diff --git a/sw/sdi/_frmsh.sdi b/sw/sdi/_frmsh.sdi index 94297aa7f027..285ae7db8880 100644 --- a/sw/sdi/_frmsh.sdi +++ b/sw/sdi/_frmsh.sdi @@ -147,6 +147,27 @@ interface BaseTextFrame DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_ATTR_TRANSFORM + [ + ExecMethod = Execute ; + StateMethod = GetState ; + ] + SID_ATTR_TRANSFORM_WIDTH + [ + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_ATTR_TRANSFORM_HEIGHT + [ + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_ATTR_TRANSFORM_PROTECT_SIZE + [ + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_ATTR_ULSPACE // status(final|play) [ ExecMethod = Execute ; @@ -168,6 +189,12 @@ interface BaseTextFrame StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + FN_PROPERTY_WRAP_DLG // status(final|play) + [ + ExecMethod = Execute ; + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] SID_FRAME_LINESTYLE // status() [ diff --git a/sw/sdi/_grfsh.sdi b/sw/sdi/_grfsh.sdi index 27e7efe61ec5..64e17823b9ad 100644 --- a/sw/sdi/_grfsh.sdi +++ b/sw/sdi/_grfsh.sdi @@ -32,6 +32,12 @@ interface BaseTextGraphic StateMethod = GetAttrState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_FLIP_VERTICAL + [ + ExecMethod = ExecAttr ; + StateMethod = GetAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] FN_FLIP_HORZ_GRAFIC // status(final|play) [ @@ -39,6 +45,12 @@ interface BaseTextGraphic StateMethod = GetAttrState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_FLIP_HORIZONTAL + [ + ExecMethod = ExecAttr ; + StateMethod = GetAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] FN_FORMAT_GRAFIC_DLG // status(final|play) [ @@ -46,6 +58,12 @@ interface BaseTextGraphic StateMethod = GetAttrState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + FN_PROPERTY_WRAP_DLG // status(final|play) + [ + ExecMethod = Execute ; + StateMethod = GetAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] FN_SAVE_GRAPHIC // status(final|play) diff --git a/sw/sdi/_tabsh.sdi b/sw/sdi/_tabsh.sdi index 808d59988a74..bcd65f166348 100644 --- a/sw/sdi/_tabsh.sdi +++ b/sw/sdi/_tabsh.sdi @@ -63,26 +63,27 @@ interface BaseTextTable ] - FN_TABLE_VERT_NONE + SID_TABLE_VERT_NONE [ ExecMethod = Execute ; StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] - FN_TABLE_VERT_CENTER + SID_TABLE_VERT_CENTER [ ExecMethod = Execute ; StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] - FN_TABLE_VERT_BOTTOM + SID_TABLE_VERT_BOTTOM [ ExecMethod = Execute ; StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + FN_TABLE_SET_COL_WIDTH // status( final|play ) [ ExecMethod = Execute ; diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi index 32801e246d89..d7f02f416a89 100644 --- a/sw/sdi/_textsh.sdi +++ b/sw/sdi/_textsh.sdi @@ -59,6 +59,7 @@ interface BaseText SID_ATTR_BRUSH_CHAR // status() [ ExecMethod = Execute ; + StateMethod = GetTxtCtrlState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] @@ -732,6 +733,18 @@ interface BaseText StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + FN_BUL_NUM_RULE_INDEX // status(final|play) + [ + ExecMethod = ExecEnterNum ; + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + FN_NUM_NUM_RULE_INDEX // status(final|play) + [ + ExecMethod = ExecEnterNum ; + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] FN_NUMBER_BULLETS // status(final|play) [ ExecMethod = ExecEnterNum ; @@ -793,6 +806,21 @@ interface BaseText ExecMethod = ExecMoveMisc ; StateMethod = NoState ; ] + FN_SVX_SET_NUMBER + [ + ExecMethod = ExecSetNumber; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + FN_SVX_SET_BULLET + [ + ExecMethod = ExecSetNumber; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_OUTLINE_BULLET // status(final|play) + [ + ExecMethod = ExecEnterNum ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] FN_INSERT_FOOTNOTE_DLG // status(final|play|rec) [ @@ -1199,6 +1227,11 @@ interface BaseText ExecMethod = Execute ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_ATTR_PARA_LRSPACE + [ + ExecMethod = Execute ; + StateMethod = GetAttrState; + ] FN_SELECT_PARA // status(final|play) [ ExecMethod = Execute ; @@ -1446,6 +1479,12 @@ interface BaseText ExecMethod = Execute ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + + SID_CHAR_DLG_EFFECT + [ + ExecMethod = Execute ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] SID_CHAR_DLG_FOR_PARAGRAPH [ ExecMethod = Execute ; diff --git a/sw/sdi/_viewsh.sdi b/sw/sdi/_viewsh.sdi index 091cbac2e43b..f1f0dfd60043 100644 --- a/sw/sdi/_viewsh.sdi +++ b/sw/sdi/_viewsh.sdi @@ -404,6 +404,31 @@ interface BaseTextEditView ExecMethod = Execute ; StateMethod = GetState ; ] + + SID_ATTR_PARA_ULSPACE + [ + ExecMethod = ExecTabWin ; + StateMethod = StateTabWin ; + ] + + SID_ATTR_PAGE_COLUMN + [ + ExecMethod = ExecTabWin ; + StateMethod = StateTabWin ; + ] + SID_ATTR_PAGE_ULSPACE + [ + ExecMethod = ExecTabWin ; + StateMethod = StateTabWin ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_ATTR_PAGE_LRSPACE + [ + ExecMethod = ExecTabWin ; + StateMethod = StateTabWin ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_THESAURUS // status(final|play) [ ExecMethod = ExecLingu ; diff --git a/sw/sdi/drawsh.sdi b/sw/sdi/drawsh.sdi index 6124df141952..77e893ead147 100644 --- a/sw/sdi/drawsh.sdi +++ b/sw/sdi/drawsh.sdi @@ -33,6 +33,20 @@ interface TextDraw : TextDrawBase Export = FALSE; ] + SID_ATTR_LINE_START + [ + ExecMethod = ExecDrawAttrArgs ; + StateMethod = DisableState ; + Export = FALSE; + ] + + SID_ATTR_LINE_END + [ + ExecMethod = ExecDrawAttrArgs ; + StateMethod = DisableState ; + Export = FALSE; + ] + SID_ATTR_LINE_STYLE [ Export = FALSE; @@ -48,6 +62,30 @@ interface TextDraw : TextDrawBase DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_ATTR_LINE_TRANSPARENCE + [ + Export = FALSE; + ExecMethod = ExecDrawAttrArgs ; + StateMethod = GetDrawAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + + SID_ATTR_LINE_JOINT + [ + Export = FALSE; + ExecMethod = ExecDrawAttrArgs ; + StateMethod = GetDrawAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + + SID_ATTR_LINE_CAP + [ + Export = FALSE; + ExecMethod = ExecDrawAttrArgs ; + StateMethod = GetDrawAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_DASH_LIST [ StateMethod = GetDrawAttrState ; @@ -134,6 +172,22 @@ interface TextDraw : TextDrawBase DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_ATTR_FILL_TRANSPARENCE + [ + Export = FALSE; + ExecMethod = ExecDrawAttrArgs ; + StateMethod = GetDrawAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + + SID_ATTR_FILL_FLOATTRANSPARENCE + [ + Export = FALSE; + ExecMethod = ExecDrawAttrArgs ; + StateMethod = GetDrawAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_ATTRIBUTES_LINE [ ExecMethod = ExecDrawDlg ; @@ -158,6 +212,12 @@ interface TextDraw : TextDrawBase StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_FLIP_VERTICAL + [ + ExecMethod = Execute ; + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] FN_FLIP_HORZ_GRAFIC [ @@ -165,6 +225,12 @@ interface TextDraw : TextDrawBase StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_FLIP_HORIZONTAL + [ + ExecMethod = Execute ; + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] SID_OBJECT_ROTATE [ diff --git a/sw/sdi/drwbassh.sdi b/sw/sdi/drwbassh.sdi index 52ce886b92a6..4aa45f1d0f1b 100644 --- a/sw/sdi/drwbassh.sdi +++ b/sw/sdi/drwbassh.sdi @@ -32,6 +32,7 @@ interface TextDrawBase : BaseTextDrawBase shell SwDrawBaseShell: SwBaseShell { import TextDrawBase[Automation]; + import Sidebar; SID_OBJECT_ALIGN [ diff --git a/sw/sdi/drwtxtsh.sdi b/sw/sdi/drwtxtsh.sdi index ed06a5b18b31..99f14a0c2b89 100644 --- a/sw/sdi/drwtxtsh.sdi +++ b/sw/sdi/drwtxtsh.sdi @@ -210,6 +210,24 @@ interface TextDrawText DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + SID_ATTR_PARA_LRSPACE //for indent + [ + ExecMethod = Execute ; + StateMethod = GetState ; + ] + + SID_ATTR_PARA_LINESPACE // api: + [ + ExecMethod = Execute ; + StateMethod = GetState ; + ] + + SID_ATTR_PARA_ULSPACE + [ + ExecMethod = Execute ; + StateMethod = GetState ; + ] + SID_ATTR_PARA_ADJUST_LEFT // api: [ ExecMethod = Execute ; @@ -299,6 +317,13 @@ interface TextDrawText StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + + SID_CHAR_DLG_EFFECT + [ + ExecMethod = Execute ; + StateMethod = GetState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] SID_CHAR_DLG_FOR_PARAGRAPH [ ExecMethod = Execute ; @@ -569,6 +594,25 @@ interface TextDrawText [ StateMethod = StateDisableItems ; ] + + SID_TABLE_VERT_NONE + [ + ExecMethod = ExecDraw ; + StateMethod = GetStatePropPanelAttr ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_TABLE_VERT_CENTER + [ + ExecMethod = ExecDraw ; + StateMethod = GetStatePropPanelAttr ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + SID_TABLE_VERT_BOTTOM + [ + ExecMethod = ExecDraw ; + StateMethod = GetStatePropPanelAttr ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] } interface TextDrawFont diff --git a/sw/sdi/sidebar.sdi b/sw/sdi/sidebar.sdi new file mode 100644 index 000000000000..c4392cc7dc31 --- /dev/null +++ b/sw/sdi/sidebar.sdi @@ -0,0 +1,35 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +interface Sidebar [ Automation = FALSE; ] +{ + SID_ATTR_TRANSFORM_WIDTH [ StateMethod = GetDrawAttrStateForIFBX; ] + SID_ATTR_TRANSFORM_HEIGHT [ StateMethod = GetDrawAttrStateForIFBX; ] + SID_ATTR_TRANSFORM_POS_X [ StateMethod = GetDrawAttrStateForIFBX; ] + SID_ATTR_TRANSFORM_POS_Y [ StateMethod = GetDrawAttrStateForIFBX; ] + SID_ATTR_TRANSFORM_ANGLE [ StateMethod = GetDrawAttrStateForIFBX; ] + SID_ATTR_TRANSFORM_ROT_X [ StateMethod = GetDrawAttrStateForIFBX; ] + SID_ATTR_TRANSFORM_ROT_Y [ StateMethod = GetDrawAttrStateForIFBX; ] + SID_ATTR_TRANSFORM_PROTECT_POS [ StateMethod = GetDrawAttrStateForIFBX;] + SID_ATTR_TRANSFORM_PROTECT_SIZE [ StateMethod = GetDrawAttrStateForIFBX;] +} + + diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi index 9594ecc473b1..fd644eeb443a 100644 --- a/sw/sdi/swriter.sdi +++ b/sw/sdi/swriter.sdi @@ -729,87 +729,6 @@ SfxVoidItem CalculateSel FN_CALCULATE ] //-------------------------------------------------------------------------- -SfxBoolItem CellVertBottom FN_TABLE_VERT_BOTTOM - -[ - /* flags: */ - AutoUpdate = TRUE, - Cachable = Cachable, - FastCall = FALSE, - HasCoreId = FALSE, - HasDialog = FALSE, - ReadOnlyDoc = FALSE, - Toggle = FALSE, - Container = FALSE, - RecordAbsolute = FALSE, - RecordPerSet; - Synchron; - - Readonly = FALSE, - - /* config: */ - AccelConfig = TRUE, - MenuConfig = TRUE, - StatusBarConfig = FALSE, - ToolBoxConfig = TRUE, - GroupId = GID_TABLE; -] - -//-------------------------------------------------------------------------- -SfxBoolItem CellVertCenter FN_TABLE_VERT_CENTER - -[ - /* flags: */ - AutoUpdate = TRUE, - Cachable = Cachable, - FastCall = FALSE, - HasCoreId = FALSE, - HasDialog = FALSE, - ReadOnlyDoc = FALSE, - Toggle = FALSE, - Container = FALSE, - RecordAbsolute = FALSE, - RecordPerSet; - Synchron; - - Readonly = FALSE, - - /* config: */ - AccelConfig = TRUE, - MenuConfig = TRUE, - StatusBarConfig = FALSE, - ToolBoxConfig = TRUE, - GroupId = GID_TABLE; -] - -//-------------------------------------------------------------------------- -SfxBoolItem CellVertTop FN_TABLE_VERT_NONE - -[ - /* flags: */ - AutoUpdate = TRUE, - Cachable = Cachable, - FastCall = FALSE, - HasCoreId = FALSE, - HasDialog = FALSE, - ReadOnlyDoc = FALSE, - Toggle = FALSE, - Container = FALSE, - RecordAbsolute = FALSE, - RecordPerSet; - Synchron; - - Readonly = FALSE, - - /* config: */ - AccelConfig = TRUE, - MenuConfig = TRUE, - StatusBarConfig = FALSE, - ToolBoxConfig = TRUE, - GroupId = GID_TABLE; -] - -//-------------------------------------------------------------------------- SfxBoolItem ChainFrames FN_FRAME_CHAIN [ @@ -3459,6 +3378,30 @@ SfxVoidItem GraphicDialog FN_FORMAT_GRAFIC_DLG GroupId = GID_GRAPHIC; ] //-------------------------------------------------------------------------- +SfxVoidItem ObjectWrapDialog FN_PROPERTY_WRAP_DLG +() +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = TRUE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerItem; + Asynchron; + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_GRAPHIC; +] +//-------------------------------------------------------------------------- SfxVoidItem SaveGraphic FN_SAVE_GRAPHIC () [ @@ -6349,6 +6292,30 @@ SfxVoidItem PageDialog FN_FORMAT_PAGE_DLG GroupId = GID_FORMAT; ] +SfxVoidItem PageSettingDialog FN_FORMAT_PAGE_SETTING_DLG +() +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = TRUE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerItem; + Asynchron; + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_FORMAT; +] + //-------------------------------------------------------------------------- SfxVoidItem PageDown FN_PAGEDOWN () @@ -10287,3 +10254,83 @@ SfxVoidItem CopyHyperlinkLocation FN_COPY_HYPERLINK_LOCATION ToolBoxConfig = TRUE, GroupId = GID_EDIT; ] + + +SfxInt16Item SwPageColumn SID_ATTR_PAGE_COLUMN + +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = TRUE, + + /* config: */ + AccelConfig = TRUE, + MenuConfig = TRUE, + StatusBarConfig = FALSE, + ToolBoxConfig = TRUE, + GroupId = GID_VIEW; +] + +SvxLongULSpaceItem SwPageULMargin SID_ATTR_PAGE_ULSPACE + +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + +SvxLongLRSpaceItem SwPageLRMargin SID_ATTR_PAGE_LRSPACE + +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + Readonly = FALSE, + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_FORMAT; +] + diff --git a/sw/sdi/swslots.sdi b/sw/sdi/swslots.sdi index d6f9ebebeb4f..0e31da69ab08 100644 --- a/sw/sdi/swslots.sdi +++ b/sw/sdi/swslots.sdi @@ -74,6 +74,7 @@ ModulePrefix( "Sw" ) include "wtextsh.sdi" include "_drwbase.sdi" + include "sidebar.sdi" include "drwbassh.sdi" include "wdrwbase.sdi" diff --git a/sw/sdi/wdrwbase.sdi b/sw/sdi/wdrwbase.sdi index 9714f8f7dbfc..e67c8f5445ae 100644 --- a/sw/sdi/wdrwbase.sdi +++ b/sw/sdi/wdrwbase.sdi @@ -31,6 +31,7 @@ interface WebDrawBase : BaseTextDrawBase shell SwWebDrawBaseShell: SwBaseShell { import WebDrawBase[Automation]; + import Sidebar; SID_OBJECT_ALIGN [ diff --git a/sw/source/core/doc/docdesc.cxx b/sw/source/core/doc/docdesc.cxx index d2b60c080029..7af17f8eb325 100644 --- a/sw/source/core/doc/docdesc.cxx +++ b/sw/source/core/doc/docdesc.cxx @@ -24,6 +24,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" +#include <cmdid.h> #include <hintids.hxx> #include <vcl/virdev.hxx> #include <svx/svdmodel.hxx> @@ -34,6 +35,8 @@ #include <tools/urlobj.hxx> #include <sfx2/docfile.hxx> #include <sfx2/printer.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> #include <unotools/localedatawrapper.hxx> #include <com/sun/star/document/PrinterIndependentLayout.hpp> #include <fmtfsize.hxx> @@ -424,6 +427,18 @@ void SwDoc::ChgPageDesc( sal_uInt16 i, const SwPageDesc &rChged ) { GetIDocumentUndoRedo().DelAllUndoObj(); } + + SfxBindings* pBindings = + ( GetDocShell() && GetDocShell()->GetDispatcher() ) ? GetDocShell()->GetDispatcher()->GetBindings() : 0; + if ( pBindings ) + { + pBindings->Invalidate( SID_ATTR_PAGE_COLUMN ); + pBindings->Invalidate( SID_ATTR_PAGE ); + pBindings->Invalidate( SID_ATTR_PAGE_SIZE ); + pBindings->Invalidate( SID_ATTR_PAGE_ULSPACE ); + pBindings->Invalidate( SID_ATTR_PAGE_LRSPACE ); + } + } /************************************************************************* diff --git a/sw/source/core/draw/drawdoc.cxx b/sw/source/core/draw/drawdoc.cxx index 32f50ee4471d..c00b9c74887e 100644 --- a/sw/source/core/draw/drawdoc.cxx +++ b/sw/source/core/draw/drawdoc.cxx @@ -76,8 +76,8 @@ SwDrawDocument::SwDrawDocument( SwDoc* pD ) : SetObjectShell( pDocSh ); SvxColorTableItem* pColItem = ( SvxColorTableItem* ) ( pDocSh->GetItem( SID_COLOR_TABLE ) ); - XColorTable *pXCol = pColItem ? pColItem->GetColorTable() : - XColorTable::GetStdColorTable(); + XColorList *pXCol = pColItem ? pColItem->GetColorTable() : + XColorList::GetStdColorList(); SetColorTable( pXCol ); if ( !pColItem ) @@ -92,7 +92,7 @@ SwDrawDocument::SwDrawDocument( SwDoc* pD ) : SetObjectShell( pDocSh ); } else - SetColorTable( XColorTable::GetStdColorTable() ); + SetColorTable( XColorList::GetStdColorList() ); // copy all the default values to the SdrModel SfxItemPool* pSdrPool = pD->GetAttrPool().GetSecondaryPool(); diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 0938de3d6fc6..743834791f73 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -164,7 +164,88 @@ sal_Bool SwEditShell::NoNum() return bRet; } // Loeschen, Splitten der Aufzaehlungsliste +sal_Bool SwEditShell::SelectionHasNumber() const +{ + sal_Bool bResult = HasNumber(); + const SwTxtNode * pTxtNd = + GetCrsr()->GetPoint()->nNode.GetNode().GetTxtNode(); + if (!bResult && pTxtNd && pTxtNd->Len()==0 && !pTxtNd->GetNumRule()) { + SwPamRanges aRangeArr( *GetCrsr() ); + SwPaM aPam( *GetCrsr()->GetPoint() ); + for( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n ) + { + aRangeArr.SetPam( n, aPam ); + { + sal_uInt32 nStt = aPam.GetPoint()->nNode.GetIndex(), + nEnd = aPam.GetMark()->nNode.GetIndex(); + if( nStt > nEnd ) + { + sal_uInt32 nTmp = nStt; nStt = nEnd; nEnd = nTmp; + } + for (sal_uInt32 nPos = nStt; nPos<=nEnd; nPos++) { + SwTxtNode * pTxtNd = pDoc->GetNodes()[nPos]->GetTxtNode(); + if (pTxtNd && pTxtNd->Len()!=0) + { + bResult = pTxtNd->HasNumber(); + + // --> OD 2005-10-26 #b6340308# + // special case: outline numbered, not counted paragraph + if ( bResult && + pTxtNd->GetNumRule() == GetDoc()->GetOutlineNumRule() && + !pTxtNd->IsCountedInList() ) + { + bResult = sal_False; + } + if (bResult==sal_False) { + break; + } + // <-- + } + } + } + } + + } + + return bResult; +} +//Sym3_879 add a new function to determine number on/off status +sal_Bool SwEditShell::SelectionHasBullet() const +{ + sal_Bool bResult = HasBullet(); + const SwTxtNode * pTxtNd = + GetCrsr()->GetPoint()->nNode.GetNode().GetTxtNode(); + if (!bResult && pTxtNd && pTxtNd->Len()==0 && !pTxtNd->GetNumRule()) { + SwPamRanges aRangeArr( *GetCrsr() ); + SwPaM aPam( *GetCrsr()->GetPoint() ); + for( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n ) + { + aRangeArr.SetPam( n, aPam ); + { + sal_uInt32 nStt = aPam.GetPoint()->nNode.GetIndex(), + nEnd = aPam.GetMark()->nNode.GetIndex(); + if( nStt > nEnd ) + { + sal_uInt32 nTmp = nStt; nStt = nEnd; nEnd = nTmp; + } + for (sal_uInt32 nPos = nStt; nPos<=nEnd; nPos++) { + SwTxtNode * pTxtNd = pDoc->GetNodes()[nPos]->GetTxtNode(); + if (pTxtNd && pTxtNd->Len()!=0) + { + bResult = pTxtNd->HasBullet(); + if (bResult==sal_False) { + break; + } + } + } + } + } + + } + + return bResult; +} // -> #i29560# sal_Bool SwEditShell::HasNumber() const { diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx index 5c9b7b5ec49e..25ac58f4c0c6 100644 --- a/sw/source/core/frmedt/feshview.cxx +++ b/sw/source/core/frmedt/feshview.cxx @@ -2486,7 +2486,7 @@ sal_uInt8 SwFEShell::IsSelObjProtected( sal_uInt16 eType ) const { // TODO/LATER: use correct aspect const bool bNeverResize = (embed::EmbedMisc::EMBED_NEVERRESIZE & xObj->getStatus( embed::Aspects::MSOLE_CONTENT )); - if ( (FLYPROTECT_CONTENT & eType) && bNeverResize ) + if ( ( (FLYPROTECT_CONTENT & eType) || (FLYPROTECT_SIZE & eType) ) && bNeverResize ) { nChk |= FLYPROTECT_SIZE; nChk |= FLYPROTECT_FIXED; diff --git a/sw/source/ui/app/docsh2.cxx b/sw/source/ui/app/docsh2.cxx index 4a85efb51c9b..7ebd8f976d4f 100644 --- a/sw/source/ui/app/docsh2.cxx +++ b/sw/source/ui/app/docsh2.cxx @@ -1019,7 +1019,7 @@ void SwDocShell::Execute(SfxRequest& rReq) case SID_GET_COLORTABLE: { SvxColorTableItem* pColItem = (SvxColorTableItem*)GetItem(SID_COLOR_TABLE); - XColorTable* pTable = pColItem->GetColorTable(); + XColorList* pTable = pColItem->GetColorTable(); rReq.SetReturnValue(OfaPtrItem(SID_GET_COLORTABLE, pTable)); } break; diff --git a/sw/source/ui/app/docshdrw.cxx b/sw/source/ui/app/docshdrw.cxx index bcd76273aad5..96e2041b4727 100644 --- a/sw/source/ui/app/docshdrw.cxx +++ b/sw/source/ui/app/docshdrw.cxx @@ -73,7 +73,7 @@ void SwDocShell::InitDraw() rOutliner.SetHyphenator( xHyphenator ); } else - PutItem( SvxColorTableItem( XColorTable::GetStdColorTable(), SID_COLOR_TABLE )); + PutItem( SvxColorTableItem( XColorList::GetStdColorList(), SID_COLOR_TABLE )); } diff --git a/sw/source/ui/app/docshini.cxx b/sw/source/ui/app/docshini.cxx index e32356194401..b121dfdc0a29 100644 --- a/sw/source/ui/app/docshini.cxx +++ b/sw/source/ui/app/docshini.cxx @@ -439,9 +439,9 @@ SwDocShell::SwDocShell( SwDoc *pD, SfxObjectCreateMode eMode ): // wird nur die DocInfo fuer den Explorer gelesen, ist das Item nicht da if(pColItem) { - XColorTable* pTable = pColItem->GetColorTable(); + XColorList* pTable = pColItem->GetColorTable(); // wurde eine neue Table angelegt, muss sie auch geloescht werden. - if((void*)pTable != (void*)(XColorTable::GetStdColorTable()) ) + if((void*)pTable != (void*)(XColorList::GetStdColorList()) ) delete pTable; } diff --git a/sw/source/ui/app/docst.cxx b/sw/source/ui/app/docst.cxx index 93f0b3f50577..651a77270e2a 100644 --- a/sw/source/ui/app/docst.cxx +++ b/sw/source/ui/app/docst.cxx @@ -283,7 +283,7 @@ void SwDocShell::ExecStyleSheet( SfxRequest& rReq ) if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILY, sal_False, &pItem )) { - sal_uInt16 nFamily = ((const SfxUInt16Item*)pItem)->GetValue(); + const sal_uInt16 nFamily = ((const SfxUInt16Item*)pItem)->GetValue(); String sName; sal_uInt16 nMask = 0; @@ -298,7 +298,7 @@ void SwDocShell::ExecStyleSheet( SfxRequest& rReq ) sal_False, &pItem )) sParent = ((const SfxStringItem*)pItem)->GetValue(); - nRet = Edit( sName, sParent, nFamily, nMask, sal_True, sal_False, 0, rReq.IsAPI() ); + nRet = Edit( sName, sParent, nFamily, nMask, sal_True, 0, 0, rReq.IsAPI() ); } break; @@ -458,7 +458,7 @@ void SwDocShell::ExecStyleSheet( SfxRequest& rReq ) switch(nSlot) { case SID_STYLE_EDIT: - nRet = Edit(aParam, aEmptyStr, nFamily, nMask, sal_False, sal_False, pActShell ); + nRet = Edit(aParam, aEmptyStr, nFamily, nMask, sal_False, 0, pActShell ); break; case SID_STYLE_DELETE: nRet = Delete(aParam, nFamily); @@ -509,9 +509,15 @@ void SwDocShell::ExecStyleSheet( SfxRequest& rReq ) --------------------------------------------------------------------*/ -sal_uInt16 SwDocShell::Edit( const String &rName, const String &rParent, sal_uInt16 nFamily, sal_uInt16 nMask, - sal_Bool bNew, sal_Bool bColumn, SwWrtShell* pActShell, - sal_Bool bBasic ) +sal_uInt16 SwDocShell::Edit( + const String &rName, + const String &rParent, + const sal_uInt16 nFamily, + sal_uInt16 nMask, + const sal_Bool bNew, + const sal_uInt16 nSlot, + SwWrtShell* pActShell, + const sal_Bool bBasic ) { ASSERT(GetWrtShell(), "Keine Shell, keine Styles"); SfxStyleSheetBase *pStyle = 0; @@ -677,7 +683,7 @@ sal_uInt16 SwDocShell::Edit( const String &rName, const String &rParent, sal_uIn SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); DBG_ASSERT(pFact, "Dialogdiet fail!"); SfxAbstractTabDialog* pDlg = pFact->CreateTemplateDialog( DLG_TEMPLATE_BASE, - 0, *(xTmp.get()), nFamily, bColumn, + 0, *(xTmp.get()), nFamily, nSlot, pActShell ? pActShell : pWrtShell, bNew); DBG_ASSERT(pDlg, "Dialogdiet fail!"); if(RET_OK == pDlg->Execute()) @@ -1286,9 +1292,12 @@ void SwDocShell::_LoadStyles( SfxObjectShell& rSource, sal_Bool bPreserveCurrent } -void SwDocShell::FormatPage( const String& rPage, sal_Bool bColumn, SwWrtShell* pActShell ) +void SwDocShell::FormatPage( + const String& rPage, + const sal_uInt16 nSlot, + SwWrtShell& rActShell ) { - Edit( rPage, aEmptyStr, SFX_STYLE_FAMILY_PAGE, 0, sal_False, bColumn, pActShell); + Edit( rPage, aEmptyStr, SFX_STYLE_FAMILY_PAGE, 0, sal_False, nSlot, &rActShell); } Bitmap SwDocShell::GetStyleFamilyBitmap( SfxStyleFamily eFamily, BmpColorMode eColorMode ) diff --git a/sw/source/ui/app/mn.src b/sw/source/ui/app/mn.src index ff1cd46f9786..0c61e6de3a47 100644 --- a/sw/source/ui/app/mn.src +++ b/sw/source/ui/app/mn.src @@ -430,20 +430,20 @@ location: <project>/uiconfig/[swriter|sweb|sglobal]/menubar/menubar.xml SEPARATOR ; \ MenuItem\ {\ - Identifier = FN_TABLE_VERT_NONE ; \ - HelpId = CMD_FN_TABLE_VERT_NONE ; \ + Identifier = SID_TABLE_VERT_NONE ; \ + HelpId = CMD_SID_TABLE_VERT_NONE ; \ Text [ en-US ] = "~Top" ; \ };\ MenuItem\ {\ - Identifier = FN_TABLE_VERT_CENTER ; \ - HelpId = CMD_FN_TABLE_VERT_CENTER ; \ + Identifier = SID_TABLE_VERT_CENTER ; \ + HelpId = CMD_SID_TABLE_VERT_CENTER ; \ Text [ en-US ] = "C~enter" ; \ };\ MenuItem\ {\ - Identifier = FN_TABLE_VERT_BOTTOM ; \ - HelpId = CMD_FN_TABLE_VERT_BOTTOM ; \ + Identifier = SID_TABLE_VERT_BOTTOM ; \ + HelpId = CMD_SID_TABLE_VERT_BOTTOM ; \ Text [ en-US ] = "~Bottom" ; \ };\ SEPARATOR ; \ diff --git a/sw/source/ui/app/swmodule.cxx b/sw/source/ui/app/swmodule.cxx index 2d61f849945d..364724815559 100644 --- a/sw/source/ui/app/swmodule.cxx +++ b/sw/source/ui/app/swmodule.cxx @@ -134,6 +134,7 @@ #include <mailmergechildwindow.hxx> #include <modcfg.hxx> #include <fontcfg.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> #include <sfx2/taskpane.hxx> #include <sfx2/evntconf.hxx> #include <sfx2/appuno.hxx> @@ -464,7 +465,8 @@ void SwDLL::RegisterControls() ::avmedia::MediaPlayer::RegisterChildWindow(0, pMod); SvxSmartTagsControl::RegisterControl(SID_OPEN_SMARTTAGMENU, pMod); - ::sfx2::TaskPaneWrapper::RegisterChildWindow( sal_False, pMod ); + ::sfx2::sidebar::SidebarChildWindow::RegisterChildWindow(NULL, pMod); + ::sfx2::TaskPaneWrapper::RegisterChildWindow(NULL, pMod); } diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx index a7ffa61312c1..0f96f07a12ec 100644 --- a/sw/source/ui/config/optpage.cxx +++ b/sw/source/ui/config/optpage.cxx @@ -2133,7 +2133,7 @@ void SwRedlineOptionsTabPage::Reset( const SfxItemSet& ) aDeletedColorLB.InsertEntry(sAuthor); aChangedColorLB.InsertEntry(sAuthor); - XColorTable* pColorTbl = XColorTable::GetStdColorTable(); + XColorList* pColorTbl = XColorList::GetStdColorList(); sal_uInt16 i; for( i = 0; i < pColorTbl->Count(); ++i ) { diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx index a65159986042..6394418a84c6 100644 --- a/sw/source/ui/dialog/swdlgfact.cxx +++ b/sw/source/ui/dialog/swdlgfact.cxx @@ -1295,7 +1295,7 @@ SfxAbstractTabDialog* SwAbstractDialogFactory_Impl::CreateTemplateDialog( int nR Window* pParent, SfxStyleSheetBase& rBase, sal_uInt16 nRegion, - sal_Bool bColumn, + const sal_uInt16 nSlot, SwWrtShell* pActShell, sal_Bool bNew ) //add for SwTemplateDlg { @@ -1303,7 +1303,7 @@ SfxAbstractTabDialog* SwAbstractDialogFactory_Impl::CreateTemplateDialog( int nR switch ( nResId ) { case DLG_TEMPLATE_BASE : - pDlg = new SwTemplateDlg( pParent, rBase, nRegion, bColumn, pActShell, bNew ); + pDlg = new SwTemplateDlg( pParent, rBase, nRegion, nSlot, pActShell, bNew ); break; default: break; diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx index 87bf5594eabd..1183c0b7f28c 100644 --- a/sw/source/ui/dialog/swdlgfact.hxx +++ b/sw/source/ui/dialog/swdlgfact.hxx @@ -502,7 +502,7 @@ public: Window* pParent, SfxStyleSheetBase& rBase, sal_uInt16 nRegion, - sal_Bool bColumn = sal_False, + const sal_uInt16 nSlot = 0, SwWrtShell* pActShell = 0, sal_Bool bNew = sal_False ); //add for SwTemplateDlg virtual AbstractGlossaryDlg* CreateGlossaryDlg( int nResId, diff --git a/sw/source/ui/fmtui/tmpdlg.cxx b/sw/source/ui/fmtui/tmpdlg.cxx index 3bc4fda74f9d..5a59d906e77f 100644 --- a/sw/source/ui/fmtui/tmpdlg.cxx +++ b/sw/source/ui/fmtui/tmpdlg.cxx @@ -106,7 +106,7 @@ extern SW_DLLPUBLIC SwWrtShell* GetActiveWrtShell(); SwTemplateDlg::SwTemplateDlg(Window* pParent, SfxStyleSheetBase& rBase, sal_uInt16 nRegion, - sal_Bool bColumn, + const sal_uInt16 nSlot, SwWrtShell* pActShell, sal_Bool bNew ) : SfxStyleDialog( pParent, @@ -260,15 +260,6 @@ SwTemplateDlg::SwTemplateDlg(Window* pParent, AddTabPage( TP_MACRO_ASSIGN, pFact->GetTabPageCreatorFunc(RID_SVXPAGE_MACROASSIGN), 0); - // Auskommentiert wegen Bug #45776 (per default keine Breite&Groesse in Rahmenvorlagen) -/* SwFmtFrmSize aSize( (const SwFmtFrmSize&)rBase. - GetItemSet().Get(RES_FRM_SIZE)); - if( !aSize.GetWidth() ) - { - aSize.SetWidth( DFLT_WIDTH ); - aSize.SetHeight( DFLT_HEIGHT ); - rBase.GetItemSet().Put( aSize ); - }*/ break; } // Seitenvorlagen @@ -283,8 +274,14 @@ SwTemplateDlg::SwTemplateDlg(Window* pParent, AddTabPage(TP_FOOTER_PAGE, String(SW_RES(STR_PAGE_FOOTER)), SvxFooterPage::Create, SvxFooterPage::GetRanges ); - if(bColumn) + if ( nSlot == FN_FORMAT_PAGE_COLUMN_DLG ) + { SetCurPageId(TP_COLUMN); + } + else if ( nSlot == FN_FORMAT_PAGE_SETTING_DLG ) + { + SetCurPageId(TP_PAGE_STD); + } DBG_ASSERT(pFact->GetTabPageCreatorFunc( RID_SVXPAGE_PAGE ), "GetTabPageCreatorFunc fail!"); DBG_ASSERT(pFact->GetTabPageRangesFunc( RID_SVXPAGE_PAGE ), "GetTabPageRangesFunc fail!"); diff --git a/sw/source/ui/inc/drwbassh.hxx b/sw/source/ui/inc/drwbassh.hxx index 9bd33bb05101..fdb9c457676e 100644 --- a/sw/source/ui/inc/drwbassh.hxx +++ b/sw/source/ui/inc/drwbassh.hxx @@ -49,6 +49,7 @@ public: void Execute(SfxRequest &); void GetState(SfxItemSet &); + void GetDrawAttrStateForIFBX( SfxItemSet& rSet ); void DisableState(SfxItemSet &rSet) { Disable(rSet);} sal_Bool Disable(SfxItemSet& rSet, sal_uInt16 nWhich = 0); diff --git a/sw/source/ui/inc/drwtxtsh.hxx b/sw/source/ui/inc/drwtxtsh.hxx index 8d0c68d60ca6..6412f524a749 100644 --- a/sw/source/ui/inc/drwtxtsh.hxx +++ b/sw/source/ui/inc/drwtxtsh.hxx @@ -60,6 +60,7 @@ public: void Execute(SfxRequest &); void ExecDraw(SfxRequest &); + void GetStatePropPanelAttr(SfxItemSet &); void GetState(SfxItemSet &); void GetDrawTxtCtrlState(SfxItemSet&); diff --git a/sw/source/ui/inc/textsh.hxx b/sw/source/ui/inc/textsh.hxx index cee32496f375..f91b8490633c 100644 --- a/sw/source/ui/inc/textsh.hxx +++ b/sw/source/ui/inc/textsh.hxx @@ -64,6 +64,7 @@ public: void ExecMoveLingu(SfxRequest &); void ExecMoveMisc(SfxRequest &); void ExecField(SfxRequest &rReq); + void ExecSetNumber(SfxRequest &); void StateField(SfxItemSet &); void ExecIdx(SfxRequest &); void GetIdxState(SfxItemSet &); diff --git a/sw/source/ui/inc/tmpdlg.hxx b/sw/source/ui/inc/tmpdlg.hxx index 693a39578d53..22c2e4d1cf9d 100644 --- a/sw/source/ui/inc/tmpdlg.hxx +++ b/sw/source/ui/inc/tmpdlg.hxx @@ -37,18 +37,21 @@ class SwTemplateDlg: public SfxStyleDialog sal_uInt16 nType; sal_uInt16 nHtmlMode; - SwWrtShell* pWrtShell; + SwWrtShell* pWrtShell; sal_Bool bNewStyle; DECL_LINK( NumOptionsHdl, PushButton* ); public: + // @param nSlot + // Identifies optional Slot by which the creation of the Template (Style) dialog is triggered. + // Currently used, if nRegion == SFX_STYLE_FAMILY_PAGE in order to activate certain dialog pane SwTemplateDlg( Window* pParent, SfxStyleSheetBase& rBase, - sal_uInt16 nRegion, - sal_Bool bColumn = sal_False, + sal_uInt16 nRegion, + const sal_uInt16 nSlot = 0, SwWrtShell* pActShell = 0, - sal_Bool bNew = sal_False ); + sal_Bool bNew = sal_False ); ~SwTemplateDlg(); const SfxItemSet* GetRefreshedSet(); diff --git a/sw/source/ui/misc/pggrid.cxx b/sw/source/ui/misc/pggrid.cxx index 3172fc5fafbc..5fb6f931d114 100644 --- a/sw/source/ui/misc/pggrid.cxx +++ b/sw/source/ui/misc/pggrid.cxx @@ -143,7 +143,7 @@ SwTextGridPage::SwTextGridPage(Window *pParent, const SfxItemSet &rSet) : aDisplayCB.SetClickHdl(LINK(this, SwTextGridPage, DisplayGridHdl)); - XColorTable* pColorTbl = XColorTable::GetStdColorTable(); + XColorList* pColorTbl = XColorList::GetStdColorList(); aColorLB.InsertAutomaticEntry(); for( sal_uInt16 i = 0; i < pColorTbl->Count(); ++i ) { diff --git a/sw/source/ui/shells/annotsh.cxx b/sw/source/ui/shells/annotsh.cxx index d9c8a247bd70..ba175337caa8 100644 --- a/sw/source/ui/shells/annotsh.cxx +++ b/sw/source/ui/shells/annotsh.cxx @@ -40,6 +40,8 @@ #include <sfx2/dispatch.hxx> #include <sfx2/request.hxx> #include <editeng/spltitem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/ulspitem.hxx> #include <editeng/orphitem.hxx> #include <editeng/brkitem.hxx> #include <editeng/widwitem.hxx> @@ -105,6 +107,7 @@ #include <svx/dialogs.hrc> #include <svx/svxids.hrc> +#include <sfx2/sidebar/EnumContext.hxx> #include <svl/itempool.hxx> #include <editeng/outliner.hxx> #include <editeng/editeng.hxx> @@ -151,6 +154,7 @@ SwAnnotationShell::SwAnnotationShell( SwView& r ) { SwWrtShell &rSh = rView.GetWrtShell(); SetPool(rSh.GetAttrPool().GetSecondaryPool()); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Annotation)); } SwAnnotationShell::~SwAnnotationShell() @@ -186,6 +190,35 @@ void SwAnnotationShell::Exec( SfxRequest &rReq ) sal_uInt16 nEEWhich = 0; switch (nSlot) { + case SID_ATTR_PARA_LRSPACE: + { + SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)rReq. + GetArgs()->Get(nSlot)); + aParaMargin.SetWhich( EE_PARA_LRSPACE ); + + aNewAttr.Put(aParaMargin); + rReq.Done(); + break; + } + case SID_ATTR_PARA_LINESPACE: + { + SvxLineSpacingItem aParaMargin = (const SvxLineSpacingItem&)pNewAttrs->Get( + GetPool().GetWhich(nSlot)); + aParaMargin.SetWhich( EE_PARA_SBL ); + + aNewAttr.Put(aParaMargin); + rReq.Done(); + break; + } + case SID_ATTR_PARA_ULSPACE: + { + SvxULSpaceItem aULSpace = (const SvxULSpaceItem&)pNewAttrs->Get( + GetPool().GetWhich(nSlot)); + aULSpace.SetWhich( EE_PARA_ULSPACE ); + aNewAttr.Put( aULSpace ); + rReq.Done(); + } + break; case SID_ATTR_CHAR_FONT: case SID_ATTR_CHAR_FONTHEIGHT: case SID_ATTR_CHAR_WEIGHT: @@ -203,8 +236,19 @@ void SwAnnotationShell::Exec( SfxRequest &rReq ) case SID_ATTR_CHAR_COLOR: nEEWhich = EE_CHAR_COLOR; break; case SID_ATTR_CHAR_UNDERLINE: { - FontUnderline eFU = ((const SvxUnderlineItem&)aEditAttr.Get(EE_CHAR_UNDERLINE)).GetLineStyle(); - aNewAttr.Put(SvxUnderlineItem(eFU == UNDERLINE_SINGLE ? UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE)); + if( rReq.GetArgs() ) + { + SFX_REQUEST_ARG( rReq, pItem, SvxUnderlineItem, SID_ATTR_CHAR_UNDERLINE , sal_False ); + if (pItem) + { + aNewAttr.Put(*pItem); + } + else + { + FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr.Get( EE_CHAR_UNDERLINE ) ).GetLineStyle(); + aNewAttr.Put( SvxUnderlineItem( eFU != UNDERLINE_NONE ?UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE ) ); + } + } break; } case SID_ATTR_CHAR_OVERLINE: @@ -426,6 +470,7 @@ void SwAnnotationShell::Exec( SfxRequest &rReq ) delete pDialog; } break; + case SID_CHAR_DLG_EFFECT: case SID_CHAR_DLG: { const SfxItemSet* pArgs = rReq.GetArgs(); @@ -450,6 +495,10 @@ void SwAnnotationShell::Exec( SfxRequest &rReq ) SfxAbstractTabDialog* pDlg = pFact->CreateSwCharDlg( rView.GetWindow(), rView, aDlgAttr, DLG_CHAR,0, sal_True ); DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 + if (nSlot == SID_CHAR_DLG_EFFECT) + { + pDlg->SetCurPageId(TP_CHAR_EXT); + } sal_uInt16 nRet = pDlg->Execute(); if(RET_OK == nRet ) { @@ -592,6 +641,44 @@ void SwAnnotationShell::GetState(SfxItemSet& rSet) sal_uInt16 nSlotId = GetPool().GetSlotId( nWhich ); switch( nSlotId ) { + case SID_ATTR_PARA_LRSPACE: + { + SfxItemState eState = aEditAttr.GetItemState( EE_PARA_LRSPACE ); + if( eState >= SFX_ITEM_DEFAULT ) + { + SvxLRSpaceItem aLR = ( (const SvxLRSpaceItem&) aEditAttr.Get( EE_PARA_LRSPACE ) ); + aLR.SetWhich(SID_ATTR_PARA_LRSPACE); + rSet.Put(aLR); + } + else + rSet.InvalidateItem(nSlotId); + } + break; + case SID_ATTR_PARA_LINESPACE: + { + SfxItemState eState = aEditAttr.GetItemState( EE_PARA_SBL ); + if( eState >= SFX_ITEM_DEFAULT ) + { + SvxLineSpacingItem aLR = ( (const SvxLineSpacingItem&) aEditAttr.Get( EE_PARA_SBL ) ); + rSet.Put(aLR); + } + else + rSet.InvalidateItem(nSlotId); + } + break; + case SID_ATTR_PARA_ULSPACE: + { + SfxItemState eState = aEditAttr.GetItemState( EE_PARA_ULSPACE ); + if( eState >= SFX_ITEM_DEFAULT ) + { + SvxULSpaceItem aULSpace = (const SvxULSpaceItem&) aEditAttr.Get( EE_PARA_ULSPACE ); + aULSpace.SetWhich(SID_ATTR_PARA_ULSPACE); + rSet.Put(aULSpace); + } + else + rSet.InvalidateItem(nSlotId); + } + break; case SID_ATTR_CHAR_FONT: case SID_ATTR_CHAR_FONTHEIGHT: case SID_ATTR_CHAR_WEIGHT: @@ -622,6 +709,8 @@ void SwAnnotationShell::GetState(SfxItemSet& rSet) case SID_ATTR_CHAR_SHADOWED: nEEWhich = EE_CHAR_SHADOW;break; case SID_ATTR_CHAR_STRIKEOUT: nEEWhich = EE_CHAR_STRIKEOUT;break; case SID_ATTR_CHAR_LANGUAGE : nEEWhich = EE_CHAR_LANGUAGE;break; + case SID_ATTR_CHAR_ESCAPEMENT: nEEWhich = EE_CHAR_ESCAPEMENT;break; + case SID_ATTR_CHAR_KERNING: nEEWhich = EE_CHAR_KERNING;break; case FN_SET_SUPER_SCRIPT: case FN_SET_SUB_SCRIPT: { @@ -763,7 +852,17 @@ void SwAnnotationShell::GetState(SfxItemSet& rSet) } if(nEEWhich) + { rSet.Put(aEditAttr.Get(nEEWhich, sal_True), nWhich); + if(nEEWhich == EE_CHAR_KERNING) + { + SfxItemState eState = aEditAttr.GetItemState( EE_CHAR_KERNING, sal_True ); + if ( eState == SFX_ITEM_DONTCARE ) + { + rSet.InvalidateItem(EE_CHAR_KERNING); + } + } + } if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()==SwPostItHelper::DELETED) rSet.DisableItem( nWhich ); diff --git a/sw/source/ui/shells/basesh.cxx b/sw/source/ui/shells/basesh.cxx index 713b22370ae8..8911882c124c 100644 --- a/sw/source/ui/shells/basesh.cxx +++ b/sw/source/ui/shells/basesh.cxx @@ -2452,8 +2452,9 @@ void SwBaseShell::ExecDlg(SfxRequest &rReq) switch ( nSlot ) { - case FN_FORMAT_PAGE_COLUMN_DLG: case FN_FORMAT_PAGE_DLG: + case FN_FORMAT_PAGE_COLUMN_DLG: + case FN_FORMAT_PAGE_SETTING_DLG: { if( !bBackground ) { @@ -2462,9 +2463,10 @@ void SwBaseShell::ExecDlg(SfxRequest &rReq) //temp. View, weil die Shell nach dem Dialog nicht mehr gueltig sein muss //z.B. Kopfzeile ausschalten SwView& rTempView = GetView(); - rTempView.GetDocShell()->FormatPage(rPageDesc.GetName(), - nSlot == FN_FORMAT_PAGE_COLUMN_DLG, - &rSh ); + rTempView.GetDocShell()->FormatPage( + rPageDesc.GetName(), + nSlot, + rSh ); rTempView.InvalidateRulerPos(); } } diff --git a/sw/source/ui/shells/beziersh.cxx b/sw/source/ui/shells/beziersh.cxx index b4f639232a3b..332e5e51ece7 100644 --- a/sw/source/ui/shells/beziersh.cxx +++ b/sw/source/ui/shells/beziersh.cxx @@ -31,6 +31,7 @@ #include <svl/eitem.hxx> #include <svl/whiter.hxx> #include <svx/svdopath.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <sfx2/request.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/objface.hxx> @@ -73,6 +74,8 @@ SwBezierShell::SwBezierShell(SwView &_rView): SwWrtShell *pSh = &GetShell(); SdrView* pSdrView = pSh->GetDrawView(); pSdrView->SetEliminatePolyPointLimitAngle(1500L); + + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Draw)); } /*-------------------------------------------------------------------- @@ -347,6 +350,3 @@ void SwBezierShell::GetState(SfxItemSet &rSet) nWhich = aIter.NextWhich(); } } - - - diff --git a/sw/source/ui/shells/drawdlg.cxx b/sw/source/ui/shells/drawdlg.cxx index fa190755b778..26cd85732705 100644 --- a/sw/source/ui/shells/drawdlg.cxx +++ b/sw/source/ui/shells/drawdlg.cxx @@ -108,7 +108,7 @@ void SwDrawShell::ExecDrawDlg(SfxRequest& rReq) DBG_ASSERT(pDlg, "Dialogdiet fail!"); const SvxColorTableItem* pColorItem = (const SvxColorTableItem*) GetView().GetDocShell()->GetItem(SID_COLOR_TABLE); - if(pColorItem->GetColorTable() == XColorTable::GetStdColorTable()) + if(pColorItem->GetColorTable() == XColorList::GetStdColorList()) pDlg->DontDeleteColorTable(); if (pDlg->Execute() == RET_OK) { @@ -121,12 +121,18 @@ void SwDrawShell::ExecDrawDlg(SfxRequest& rReq) static sal_uInt16 __READONLY_DATA aInval[] = { - SID_ATTR_FILL_STYLE, SID_ATTR_FILL_COLOR, 0 + SID_ATTR_FILL_STYLE, + SID_ATTR_FILL_COLOR, + SID_ATTR_FILL_TRANSPARENCE, + SID_ATTR_FILL_FLOATTRANSPARENCE, + 0 }; SfxBindings &rBnd = GetView().GetViewFrame()->GetBindings(); rBnd.Invalidate(aInval); rBnd.Update(SID_ATTR_FILL_STYLE); rBnd.Update(SID_ATTR_FILL_COLOR); + rBnd.Update(SID_ATTR_FILL_TRANSPARENCE); + rBnd.Update(SID_ATTR_FILL_FLOATTRANSPARENCE); } delete pDlg; } @@ -160,8 +166,16 @@ void SwDrawShell::ExecDrawDlg(SfxRequest& rReq) static sal_uInt16 __READONLY_DATA aInval[] = { - SID_ATTR_LINE_STYLE, SID_ATTR_LINE_WIDTH, - SID_ATTR_LINE_COLOR, 0 + SID_ATTR_LINE_STYLE, // ( SID_SVX_START + 169 ) + SID_ATTR_LINE_DASH, // ( SID_SVX_START + 170 ) + SID_ATTR_LINE_WIDTH, // ( SID_SVX_START + 171 ) + SID_ATTR_LINE_COLOR, // ( SID_SVX_START + 172 ) + SID_ATTR_LINE_START, // ( SID_SVX_START + 173 ) + SID_ATTR_LINE_END, // ( SID_SVX_START + 174 ) + SID_ATTR_LINE_TRANSPARENCE, // (SID_SVX_START+1107) + SID_ATTR_LINE_JOINT, // (SID_SVX_START+1110) + SID_ATTR_LINE_CAP, // (SID_SVX_START+1111) + 0 }; GetView().GetViewFrame()->GetBindings().Invalidate(aInval); @@ -214,12 +228,17 @@ void SwDrawShell::ExecDrawAttrArgs(SfxRequest& rReq) case SID_ATTR_FILL_GRADIENT: case SID_ATTR_FILL_HATCH: case SID_ATTR_FILL_BITMAP: + case SID_ATTR_FILL_TRANSPARENCE: + case SID_ATTR_FILL_FLOATTRANSPARENCE: pDis->Execute(SID_ATTRIBUTES_AREA, sal_False); break; case SID_ATTR_LINE_STYLE: case SID_ATTR_LINE_DASH: case SID_ATTR_LINE_WIDTH: case SID_ATTR_LINE_COLOR: + case SID_ATTR_LINE_TRANSPARENCE: + case SID_ATTR_LINE_JOINT: + case SID_ATTR_LINE_CAP: pDis->Execute(SID_ATTRIBUTES_LINE, sal_False); break; } diff --git a/sw/source/ui/shells/drawsh.cxx b/sw/source/ui/shells/drawsh.cxx index 3ab5d2270009..f027bf7e531e 100644 --- a/sw/source/ui/shells/drawsh.cxx +++ b/sw/source/ui/shells/drawsh.cxx @@ -49,6 +49,7 @@ #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> #include <svx/xtable.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svx/svdoashp.hxx> #include "swundo.hxx" @@ -169,9 +170,11 @@ void SwDrawShell::Execute(SfxRequest &rReq) break; case FN_FLIP_HORZ_GRAFIC: + case SID_FLIP_HORIZONTAL: bMirror = sal_False; /* no break */ case FN_FLIP_VERT_GRAFIC: + case SID_FLIP_VERTICAL: rSh.MirrorSelection( bMirror ); break; @@ -346,11 +349,13 @@ void SwDrawShell::GetState(SfxItemSet& rSet) break; case FN_FLIP_HORZ_GRAFIC: + case SID_FLIP_HORIZONTAL: if ( !pSdrView->IsMirrorAllowed() || bProtected ) rSet.DisableItem( nWhich ); break; case FN_FLIP_VERT_GRAFIC: + case SID_FLIP_VERTICAL: if ( !pSdrView->IsMirrorAllowed() || bProtected ) rSet.DisableItem( nWhich ); break; @@ -384,6 +389,8 @@ SwDrawShell::SwDrawShell(SwView &_rView) : { SetHelpId(SW_DRAWSHELL); SetName(String::CreateFromAscii("Draw")); + + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Draw)); } /************************************************************************* @@ -472,12 +479,8 @@ void SwDrawShell::GetFormTextState(SfxItemSet& rSet) else { if ( pDlg ) - pDlg->SetColorTable(XColorTable::GetStdColorTable()); + pDlg->SetColorTable(XColorList::GetStdColorList()); pDrView->GetAttributes( rSet ); } } - - - - diff --git a/sw/source/ui/shells/drformsh.cxx b/sw/source/ui/shells/drformsh.cxx index 5e73121bf3be..80b6ac857678 100644 --- a/sw/source/ui/shells/drformsh.cxx +++ b/sw/source/ui/shells/drformsh.cxx @@ -35,6 +35,7 @@ #include <sfx2/app.hxx> #include <sfx2/viewfrm.hxx> #include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svl/srchitem.hxx> #include <svx/fmglob.hxx> #include <svx/svdouno.hxx> @@ -262,11 +263,9 @@ SwDrawFormShell::SwDrawFormShell(SwView &_rView) : SetHelpId(SW_DRAWFORMSHELL); GetShell().NoEdit(sal_True); SetName(String::CreateFromAscii("DrawForm")); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Form)); } SwDrawFormShell::~SwDrawFormShell() { } - - - diff --git a/sw/source/ui/shells/drwbassh.cxx b/sw/source/ui/shells/drwbassh.cxx index c3cd2c3de007..ead51e7d7b59 100644 --- a/sw/source/ui/shells/drwbassh.cxx +++ b/sw/source/ui/shells/drwbassh.cxx @@ -382,6 +382,10 @@ void SwDrawBaseShell::Execute(SfxRequest &rReq) } } + else + { + pSdrView->SetGeoAttrToMarked( *pArgs ); + } } } break; @@ -770,9 +774,19 @@ void SwDrawBaseShell::GetState(SfxItemSet& rSet) } } -/*-------------------------------------------------------------------- - Beschreibung: - --------------------------------------------------------------------*/ + +void SwDrawBaseShell::GetDrawAttrStateForIFBX( SfxItemSet& rSet ) +{ + SwWrtShell *pSh = &GetShell(); + SdrView* pSdrView = pSh->GetDrawView(); + const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList(); + if( rMarkList.GetMark(0) != 0 ) + { + SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();//OST_IFBX@WL2 + SfxItemSet aNewAttr(pSdrView->GetGeoAttrFromMarked()); + rSet.Put(aNewAttr,false); + } +} sal_Bool SwDrawBaseShell::Disable(SfxItemSet& rSet, sal_uInt16 nWhich) @@ -990,7 +1004,3 @@ IMPL_LINK(SwDrawBaseShell, ValidatePosition, SvxSwFrameValidation*, pValidation pValidation->nHeight = pValidation->nMaxHeight; return 0; } - - - - diff --git a/sw/source/ui/shells/drwtxtex.cxx b/sw/source/ui/shells/drwtxtex.cxx index b4a713f72e3e..c6795a7f2376 100644 --- a/sw/source/ui/shells/drwtxtex.cxx +++ b/sw/source/ui/shells/drwtxtex.cxx @@ -34,6 +34,8 @@ #include <tools/shl.hxx> #include <svx/svdview.hxx> #include <editeng/spltitem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/ulspitem.hxx> #include <editeng/orphitem.hxx> #include <editeng/brkitem.hxx> #include <editeng/widwitem.hxx> @@ -236,6 +238,33 @@ void SwDrawTextShell::Execute( SfxRequest &rReq ) case SID_ATTR_PARA_ADJUST_BLOCK: aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_BLOCK, EE_PARA_JUST)); break; + case SID_ATTR_PARA_LRSPACE: + { + SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)rReq. + GetArgs()->Get(nSlot)); + aParaMargin.SetWhich( EE_PARA_LRSPACE ); + aNewAttr.Put(aParaMargin); + rReq.Done(); + } + break; + case SID_ATTR_PARA_LINESPACE: + { + SvxLineSpacingItem aLineSpace = (const SvxLineSpacingItem&)pNewAttrs->Get( + GetPool().GetWhich(nSlot)); + aLineSpace.SetWhich( EE_PARA_SBL ); + aNewAttr.Put( aLineSpace ); + rReq.Done(); + } + break; + case SID_ATTR_PARA_ULSPACE: + { + SvxULSpaceItem aULSpace = (const SvxULSpaceItem&)pNewAttrs->Get( + GetPool().GetWhich(nSlot)); + aULSpace.SetWhich( EE_PARA_ULSPACE ); + aNewAttr.Put( aULSpace ); + rReq.Done(); + } + break; case SID_ATTR_PARA_LINESPACE_10: { @@ -286,6 +315,7 @@ void SwDrawTextShell::Execute( SfxRequest &rReq ) } break; + case SID_CHAR_DLG_EFFECT: case SID_CHAR_DLG: case SID_CHAR_DLG_FOR_PARAGRAPH: { @@ -317,6 +347,10 @@ void SwDrawTextShell::Execute( SfxRequest &rReq ) SfxAbstractTabDialog* pDlg = pFact->CreateSwCharDlg( pView->GetWindow(), *pView, aDlgAttr, DLG_CHAR,0, sal_True ); DBG_ASSERT(pDlg, "Dialogdiet fail!"); + if (nSlot == SID_CHAR_DLG_EFFECT) + { + pDlg->SetCurPageId(TP_CHAR_EXT); + } sal_uInt16 nRet = pDlg->Execute(); if(RET_OK == nRet ) { @@ -635,6 +669,49 @@ ASK_ADJUST: } break; + case SID_ATTR_PARA_LRSPACE: + { + SfxItemState eState = aEditAttr.GetItemState(EE_PARA_LRSPACE); + if( eState >= SFX_ITEM_DEFAULT ) + { + SvxLRSpaceItem aLR = (const SvxLRSpaceItem&) aEditAttr.Get( EE_PARA_LRSPACE ); + aLR.SetWhich(SID_ATTR_PARA_LRSPACE); + rSet.Put(aLR); + } + else + rSet.InvalidateItem(nSlotId); + nSlotId = 0; + } + break; + case SID_ATTR_PARA_LINESPACE: + { + SfxItemState eState = aEditAttr.GetItemState(EE_PARA_SBL); + if( eState >= SFX_ITEM_DEFAULT ) + { + SvxLineSpacingItem aLR = (const SvxLineSpacingItem&) aEditAttr.Get( EE_PARA_SBL ); + rSet.Put(aLR); + } + else + rSet.InvalidateItem(nSlotId); + nSlotId = 0; + } + break; + case SID_ATTR_PARA_ULSPACE: + { + SfxItemState eState = aEditAttr.GetItemState(EE_PARA_ULSPACE); + if( eState >= SFX_ITEM_DEFAULT ) + { + SvxULSpaceItem aULSpace = (const SvxULSpaceItem&) aEditAttr.Get( EE_PARA_ULSPACE ); + aULSpace.SetWhich(SID_ATTR_PARA_ULSPACE); + rSet.Put(aULSpace); + } + else + rSet.InvalidateItem(nSlotId); + Invalidate(SID_ATTR_PARA_ULSPACE); + nSlotId = 0; + } + break; + case SID_ATTR_PARA_LINESPACE_10: nLSpace = 100; goto ASK_LINESPACE; case SID_ATTR_PARA_LINESPACE_15: nLSpace = 150; goto ASK_LINESPACE; case SID_ATTR_PARA_LINESPACE_20: nLSpace = 200; goto ASK_LINESPACE; diff --git a/sw/source/ui/shells/drwtxtsh.cxx b/sw/source/ui/shells/drwtxtsh.cxx index d32e87825f02..0295fd63b35a 100644 --- a/sw/source/ui/shells/drwtxtsh.cxx +++ b/sw/source/ui/shells/drwtxtsh.cxx @@ -42,6 +42,7 @@ #include <sfx2/bindings.hxx> #include <svx/fontwork.hxx> #include <sfx2/request.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svl/whiter.hxx> #include <editeng/outliner.hxx> #include <editeng/editstat.hxx> @@ -155,6 +156,7 @@ SwDrawTextShell::SwDrawTextShell(SwView &rV) : rSh.NoEdit(sal_True); SetName(String::CreateFromAscii("ObjectText")); SetHelpId(SW_DRWTXTSHELL); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_DrawText)); } /*-------------------------------------------------------------------- @@ -358,7 +360,7 @@ void SwDrawTextShell::GetFormTextState(SfxItemSet& rSet) else { if ( pDlg ) - pDlg->SetColorTable(XColorTable::GetStdColorTable()); + pDlg->SetColorTable(XColorList::GetStdColorList()); pDrView->GetAttributes( rSet ); } @@ -572,6 +574,28 @@ void SwDrawTextShell::ExecDraw(SfxRequest &rReq) } } break; + case SID_TABLE_VERT_NONE: + case SID_TABLE_VERT_CENTER: + case SID_TABLE_VERT_BOTTOM: + { + sal_uInt16 nSId = rReq.GetSlot(); + if (pSdrView->AreObjectsMarked()) + { + SdrTextVertAdjust eTVA = SDRTEXTVERTADJUST_TOP; + if (nSId == SID_TABLE_VERT_CENTER) + eTVA = SDRTEXTVERTADJUST_CENTER; + else if (nSId == SID_TABLE_VERT_BOTTOM) + eTVA = SDRTEXTVERTADJUST_BOTTOM; + + SfxItemSet aNewAttr( pSdrView->GetModel()->GetItemPool() ); + pSdrView->GetAttributes( aNewAttr ); + aNewAttr.Put(SdrTextVertAdjustItem(eTVA)); + pSdrView->SetAttributes(aNewAttr); + rReq.Done(); + } + + } + break; default: ASSERT(!this, "unexpected slot-id"); @@ -893,5 +917,53 @@ void SwDrawTextShell::InsertSymbol(SfxRequest& rReq) return &pOutliner->GetUndoManager(); } +void SwDrawTextShell::GetStatePropPanelAttr(SfxItemSet &rSet) +{ + SfxWhichIter aIter( rSet ); + sal_uInt16 nWhich = aIter.FirstWhich(); + + SwWrtShell &rSh = GetShell(); + pSdrView = rSh.GetDrawView(); + SfxItemSet aAttrs( pSdrView->GetModel()->GetItemPool() ); + pSdrView->GetAttributes( aAttrs ); + while ( nWhich ) + { + sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich) + ? GetPool().GetSlotId(nWhich) + : nWhich; + switch ( nSlotId ) + { + case SID_TABLE_VERT_NONE: + case SID_TABLE_VERT_CENTER: + case SID_TABLE_VERT_BOTTOM: + sal_Bool bContour = sal_False; + SfxItemState eConState = aAttrs.GetItemState( SDRATTR_TEXT_CONTOURFRAME ); + if( eConState != SFX_ITEM_DONTCARE ) + { + bContour = ( ( const SdrTextContourFrameItem& )aAttrs.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue(); + } + if (bContour) break; + + SfxItemState eVState = aAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST ); + //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ); + + //if(SFX_ITEM_DONTCARE != eVState && SFX_ITEM_DONTCARE != eHState) + if(SFX_ITEM_DONTCARE != eVState) + { + SdrTextVertAdjust eTVA = (SdrTextVertAdjust)((const SdrTextVertAdjustItem&)aAttrs.Get(SDRATTR_TEXT_VERTADJUST)).GetValue(); + sal_Bool bSet = nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP|| + nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER || + nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM; + rSet.Put(SfxBoolItem(nSlotId, bSet)); + } + else + { + rSet.Put(SfxBoolItem(nSlotId, sal_False)); + } + break; + } + nWhich = aIter.NextWhich(); + } +} diff --git a/sw/source/ui/shells/frmsh.cxx b/sw/source/ui/shells/frmsh.cxx index 83e1be9ce32e..c09610c60950 100644 --- a/sw/source/ui/shells/frmsh.cxx +++ b/sw/source/ui/shells/frmsh.cxx @@ -35,6 +35,8 @@ #include <svl/rectitem.hxx> #include <svl/ptitem.hxx> #include <svl/stritem.hxx> +#include <svl/intitem.hxx> +#include <svl/eitem.hxx> #include <editeng/colritem.hxx> #include <editeng/bolnitem.hxx> #include <editeng/boxitem.hxx> @@ -42,6 +44,7 @@ #include <sfx2/dispatch.hxx> #include <sfx2/request.hxx> #include <sfx2/objface.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svx/hlnkitem.hxx> // --> OD 2009-07-07 #i73249# #include <svx/svdview.hxx> @@ -382,7 +385,38 @@ void SwFrameShell::Execute(SfxRequest &rReq) } } break; + + case SID_ATTR_TRANSFORM: + { + bool bApplyNewSize = false; + + Size aNewSize = aMgr.GetSize(); + if ( SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_TRANSFORM_WIDTH, sal_False, &pItem ) ) + { + aNewSize.setWidth( static_cast< const SfxUInt32Item* >(pItem)->GetValue() ); + bApplyNewSize = true; + } + + if ( SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_TRANSFORM_HEIGHT, sal_False, &pItem ) ) + { + aNewSize.setHeight( static_cast< const SfxUInt32Item* >(pItem)->GetValue() ); + bApplyNewSize = true; + } + + if ( bApplyNewSize ) + { + aMgr.SetSize( aNewSize ); + } + else + { + bUpdateMgr = sal_False; + } + + } + break; + case FN_FORMAT_FRAME_DLG: + case FN_PROPERTY_WRAP_DLG: { const int nSel = rSh.GetSelectionType(); if (nSel & nsSelectionType::SEL_GRF) @@ -416,10 +450,7 @@ void SwFrameShell::Execute(SfxRequest &rReq) aSet.Put(SfxStringItem(FN_SET_FRM_NAME, rSh.GetFlyName())); if( nSel & nsSelectionType::SEL_OLE ) { - // --> OD 2009-07-13 #i73249# -// aSet.Put(SfxStringItem(FN_SET_FRM_ALT_NAME, rSh.GetAlternateText())); aSet.Put( SfxStringItem( FN_SET_FRM_ALT_NAME, rSh.GetObjTitle() ) ); - // <-- } const SwRect &rPg = rSh.GetAnyCurRect(RECT_PAGE); @@ -468,6 +499,11 @@ void SwFrameShell::Execute(SfxRequest &rReq) nDefPage); DBG_ASSERT(pDlg, "Dialogdiet fail!"); + if ( nSlot == FN_PROPERTY_WRAP_DLG ) + { + pDlg->SetCurPageId(TP_FRM_WRAP); + } + if ( pDlg->Execute() ) { const SfxItemSet* pOutSet = pDlg->GetOutputItemSet(); @@ -638,16 +674,17 @@ void SwFrameShell::Execute(SfxRequest &rReq) ASSERT( !this, "falscher Dispatcher" ); return; } - // Vorlagen-AutoUpdate - SwFrmFmt* pFmt = rSh.GetCurFrmFmt(); if ( bUpdateMgr ) { - if(bCopyToFmt && pFmt && pFmt->IsAutoUpdateFmt()) + SwFrmFmt* pFmt = rSh.GetCurFrmFmt(); + if ( bCopyToFmt && pFmt && pFmt->IsAutoUpdateFmt() ) { rSh.AutoUpdateFrame(pFmt, aMgr.GetAttrSet()); } else + { aMgr.UpdateFlyFrm(); + } } } @@ -862,6 +899,40 @@ void SwFrameShell::GetState(SfxItemSet& rSet) if ( bParentCntProt ) rSet.DisableItem( nWhich ); break; + + case SID_ATTR_TRANSFORM: + { + rSet.DisableItem( nWhich ); + } + break; + + case SID_ATTR_TRANSFORM_PROTECT_SIZE: + { + const sal_uInt8 eProtection = rSh.IsSelObjProtected( FLYPROTECT_SIZE ); + if ( ( eProtection & FLYPROTECT_CONTENT ) || + ( eProtection & FLYPROTECT_SIZE ) ) + { + rSet.Put( SfxBoolItem( SID_ATTR_TRANSFORM_PROTECT_SIZE, sal_True ) ); + } + else + { + rSet.Put( SfxBoolItem( SID_ATTR_TRANSFORM_PROTECT_SIZE, sal_False ) ); + } + } + break; + + case SID_ATTR_TRANSFORM_WIDTH: + { + rSet.Put( SfxUInt32Item( SID_ATTR_TRANSFORM_WIDTH, aMgr.GetSize().getWidth() ) ); + } + break; + + case SID_ATTR_TRANSFORM_HEIGHT: + { + rSet.Put( SfxUInt32Item( SID_ATTR_TRANSFORM_HEIGHT, aMgr.GetSize().getHeight() ) ); + } + break; + case FN_FORMAT_FRAME_DLG: { const int nSel = rSh.GetSelectionType(); @@ -869,7 +940,7 @@ void SwFrameShell::GetState(SfxItemSet& rSet) rSet.DisableItem( nWhich ); } break; - // --> OD 2009-07-07 #i73249# + case FN_TITLE_DESCRIPTION_SHAPE: { SwWrtShell &rWrtSh = GetShell(); @@ -882,7 +953,7 @@ void SwFrameShell::GetState(SfxItemSet& rSet) } break; - // <-- + default: /* do nothing */; break; @@ -906,6 +977,8 @@ SwFrameShell::SwFrameShell(SwView &_rView) : /* #96392# Use this to announce it is the frame shell who creates the selection. */ SwTransferable::CreateSelection( _rView.GetWrtShell(), (ViewShell *) this ); + + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Frame)); } SwFrameShell::~SwFrameShell() @@ -1148,4 +1221,3 @@ void SwFrameShell::StateInsert(SfxItemSet &rSet) if ((nSel & nsSelectionType::SEL_GRF) || (nSel & nsSelectionType::SEL_OLE)) rSet.DisableItem(FN_INSERT_FRAME); } - diff --git a/sw/source/ui/shells/grfsh.cxx b/sw/source/ui/shells/grfsh.cxx index 7c869c6f3024..c60f32b80955 100644 --- a/sw/source/ui/shells/grfsh.cxx +++ b/sw/source/ui/shells/grfsh.cxx @@ -43,6 +43,7 @@ #include <editeng/sizeitem.hxx> #include <editeng/protitem.hxx> #include <sfx2/request.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svl/srchitem.hxx> #include <svx/htmlmode.hxx> #include <svx/sdgluitm.hxx> @@ -113,6 +114,7 @@ void SwGrfShell::Execute(SfxRequest &rReq) break; case SID_INSERT_GRAPHIC: case FN_FORMAT_GRAFIC_DLG: + case FN_PROPERTY_WRAP_DLG: { SwFlyFrmAttrMgr aMgr( sal_False, &rSh, rSh.IsFrmSelected() ? FRMMGR_TYPE_NONE : FRMMGR_TYPE_GRF); @@ -149,10 +151,7 @@ void SwGrfShell::Execute(SfxRequest &rReq) aSet.Put(SfxStringItem(FN_SET_FRM_NAME, rSh.GetFlyName())); if ( nSlot == FN_FORMAT_GRAFIC_DLG ) { - // --> OD 2009-07-13 #i73249# -// aSet.Put(SfxStringItem(FN_SET_FRM_ALT_NAME, rSh.GetAlternateText())); aSet.Put( SfxStringItem( FN_SET_FRM_ALT_NAME, rSh.GetObjTitle() ) ); - // <-- } pRect = &rSh.GetAnyCurRect(RECT_PAGE_PRT); @@ -230,6 +229,10 @@ void SwGrfShell::Execute(SfxRequest &rReq) GetView().GetWindow(), aSet, sal_False, DLG_FRM_GRF); DBG_ASSERT(pDlg, "Dialogdiet fail!"); + + if (nSlot == FN_PROPERTY_WRAP_DLG) + pDlg->SetCurPageId(TP_FRM_WRAP); + if( pDlg->Execute() ) { rSh.StartAllAction(); @@ -381,12 +384,14 @@ void SwGrfShell::ExecAttr( SfxRequest &rReq ) { case FN_FLIP_VERT_GRAFIC: case FN_FLIP_HORZ_GRAFIC: + case SID_FLIP_VERTICAL: + case SID_FLIP_HORIZONTAL: { GetShell().GetCurAttr( aGrfSet ); SwMirrorGrf aMirror( (SwMirrorGrf&)aGrfSet.Get( RES_GRFATR_MIRRORGRF ) ); sal_uInt16 nMirror = aMirror.GetValue(); - if( FN_FLIP_VERT_GRAFIC == nSlot ) + if( FN_FLIP_VERT_GRAFIC == nSlot || nSlot==SID_FLIP_VERTICAL ) switch( nMirror ) { case RES_MIRROR_GRAPH_DONT: nMirror = RES_MIRROR_GRAPH_VERT; @@ -692,4 +697,5 @@ SwGrfShell::SwGrfShell(SwView &_rView) : { SetName(String::CreateFromAscii("Graphic")); SetHelpId(SW_GRFSHELL); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Graphic)); } diff --git a/sw/source/ui/shells/mediash.cxx b/sw/source/ui/shells/mediash.cxx index 17077e860a03..232896389d4a 100644 --- a/sw/source/ui/shells/mediash.cxx +++ b/sw/source/ui/shells/mediash.cxx @@ -75,6 +75,7 @@ #endif #include <sfx2/objface.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <svx/svdomedia.hxx> #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx> #include <avmedia/mediaitem.hxx> @@ -215,4 +216,5 @@ SwMediaShell::SwMediaShell(SwView &_rView) : { SetName(String::CreateFromAscii("Media Playback")); SetHelpId(SW_MEDIASHELL); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Media)); } diff --git a/sw/source/ui/shells/olesh.cxx b/sw/source/ui/shells/olesh.cxx index 142e4bc60b25..6f8f860b2a4b 100644 --- a/sw/source/ui/shells/olesh.cxx +++ b/sw/source/ui/shells/olesh.cxx @@ -29,6 +29,7 @@ #include <sfx2/request.hxx> #include <sfx2/objface.hxx> #include <sfx2/objitem.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <wrtsh.hxx> #include <view.hxx> #ifndef _HELPID_H @@ -71,6 +72,5 @@ SwOleShell::SwOleShell(SwView &_rView) : { SetName(String::CreateFromAscii("Object")); SetHelpId(SW_OLESHELL); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_OLE)); } - - diff --git a/sw/source/ui/shells/slotadd.cxx b/sw/source/ui/shells/slotadd.cxx index cea3e1f471b2..85f440fe186f 100644 --- a/sw/source/ui/shells/slotadd.cxx +++ b/sw/source/ui/shells/slotadd.cxx @@ -137,6 +137,11 @@ #define SvxDrawBezierItem SfxAllEnumItem #define avmedia_MediaItem ::avmedia::MediaItem +#include <svx/xflftrit.hxx> +#include <svx/xlncapit.hxx> +#include <svx/xlinjoit.hxx> +#include <svx/AffineMatrixItem.hxx> + #define SFX_TYPEMAP #include <sfx2/msg.hxx> #include "swslots.hxx" diff --git a/sw/source/ui/shells/tabsh.cxx b/sw/source/ui/shells/tabsh.cxx index ce02f9ae4079..1d6b4ae1e57c 100644 --- a/sw/source/ui/shells/tabsh.cxx +++ b/sw/source/ui/shells/tabsh.cxx @@ -54,6 +54,7 @@ #include <sfx2/request.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/objface.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <fmtornt.hxx> @@ -1178,16 +1179,17 @@ void SwTableShell::Execute(SfxRequest &rReq) aMgr.ColWidthDlg(GetView().GetWindow()); } break; - case FN_TABLE_VERT_NONE: - case FN_TABLE_VERT_CENTER: - case FN_TABLE_VERT_BOTTOM: + case SID_TABLE_VERT_NONE: + case SID_TABLE_VERT_CENTER: + case SID_TABLE_VERT_BOTTOM: { - sal_uInt16 nAlign = nSlot == FN_TABLE_VERT_NONE ? + sal_uInt16 nAlign = nSlot == SID_TABLE_VERT_NONE ? text::VertOrientation::NONE : - nSlot == FN_TABLE_VERT_CENTER ? + nSlot == SID_TABLE_VERT_CENTER ? text::VertOrientation::CENTER : text::VertOrientation::BOTTOM; rSh.SetBoxAlign(nAlign); bCallDone = sal_True; + } break; @@ -1321,14 +1323,15 @@ void SwTableShell::GetState(SfxItemSet &rSet) case RES_UL_SPACE: rSet.Put(pFmt->GetULSpace()); break; - case FN_TABLE_VERT_NONE: - case FN_TABLE_VERT_CENTER: - case FN_TABLE_VERT_BOTTOM: + + case SID_TABLE_VERT_NONE: + case SID_TABLE_VERT_CENTER: + case SID_TABLE_VERT_BOTTOM: { sal_uInt16 nAlign = rSh.GetBoxAlign(); - sal_Bool bSet = (nSlot == FN_TABLE_VERT_NONE && nAlign == text::VertOrientation::NONE) || - (nSlot == FN_TABLE_VERT_CENTER && nAlign == text::VertOrientation::CENTER) || - (nSlot == FN_TABLE_VERT_BOTTOM && nAlign == text::VertOrientation::BOTTOM); + sal_Bool bSet = nSlot == SID_TABLE_VERT_NONE && nAlign == text::VertOrientation::NONE|| + nSlot == SID_TABLE_VERT_CENTER && nAlign == text::VertOrientation::CENTER || + nSlot == SID_TABLE_VERT_BOTTOM && nAlign == text::VertOrientation::BOTTOM; rSet.Put(SfxBoolItem(nSlot, bSet)); } break; @@ -1433,6 +1436,7 @@ SwTableShell::SwTableShell(SwView &_rView) : { SetName(String::CreateFromAscii("Table")); SetHelpId(SW_TABSHELL); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Table)); } /*-------------------------------------------------------------------- @@ -1591,4 +1595,3 @@ void SwTableShell::ExecNumberFormat(SfxRequest& rReq) } } - diff --git a/sw/source/ui/shells/textsh.cxx b/sw/source/ui/shells/textsh.cxx index ae6cb9a0cdaa..da07d2e2d14a 100644 --- a/sw/source/ui/shells/textsh.cxx +++ b/sw/source/ui/shells/textsh.cxx @@ -108,6 +108,7 @@ #define TextFont #define DropCap #include <sfx2/msg.hxx> +#include <sfx2/sidebar/EnumContext.hxx> #include <swslots.hxx> #include <SwRewriter.hxx> #include <comcore.hrc> @@ -1027,6 +1028,7 @@ SwTextShell::SwTextShell(SwView &_rView) : { SetName(String::CreateFromAscii("Text")); SetHelpId(SW_TEXTSHELL); + SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Text)); } /*-------------------------------------------------------------------- @@ -1214,5 +1216,3 @@ void SwTextShell::InsertSymbol( SfxRequest& rReq ) } } } - - diff --git a/sw/source/ui/shells/textsh1.cxx b/sw/source/ui/shells/textsh1.cxx index 485e999e6e5a..1601c3cd3b22 100644 --- a/sw/source/ui/shells/textsh1.cxx +++ b/sw/source/ui/shells/textsh1.cxx @@ -126,7 +126,19 @@ #include <sfx2/objface.hxx> #include <langhelper.hxx> +#ifndef _NBDTMGFACT_HXX +#include <svx/nbdtmgfact.hxx> +#endif +#ifndef _NBDTMG_HXX +#include <svx/nbdtmg.hxx> +#endif + + +#include <numrule.hxx> + + using namespace ::com::sun::star; +using namespace svx::sidebar; void lcl_CharDialog( SwWrtShell &rWrtSh, sal_Bool bUseDialog, sal_uInt16 nSlot,const SfxItemSet *pArgs, SfxRequest *pReq ) @@ -185,6 +197,10 @@ void lcl_CharDialog( SwWrtShell &rWrtSh, sal_Bool bUseDialog, sal_uInt16 nSlot,c if( FN_INSERT_HYPERLINK == nSlot ) pDlg->SetCurPageId(TP_CHAR_URL); } + if (nSlot == SID_CHAR_DLG_EFFECT) + { + pDlg->SetCurPageId(TP_CHAR_EXT); + } const SfxItemSet* pSet = NULL; if ( !bUseDialog ) @@ -838,6 +854,7 @@ void SwTextShell::Execute(SfxRequest &rReq) // intentionally no break } case SID_CHAR_DLG: + case SID_CHAR_DLG_EFFECT: { lcl_CharDialog( rWrtSh, bUseDialog, nSlot, pArgs, &rReq ); } @@ -862,6 +879,7 @@ void SwTextShell::Execute(SfxRequest &rReq) case FN_NUMBER_NEWSTART_AT : case FN_FORMAT_DROPCAPS : case FN_DROP_TEXT: + case SID_ATTR_PARA_LRSPACE: { sal_uInt16 nWhich = GetPool().GetWhich( nSlot ); if ( pArgs && pArgs->GetItemState( nWhich ) == SFX_ITEM_SET ) @@ -952,7 +970,15 @@ void SwTextShell::Execute(SfxRequest &rReq) SfxItemSet* pSet = NULL; if ( !bUseDialog ) { - pSet = (SfxItemSet*) pArgs; + if ( nSlot == SID_ATTR_PARA_LRSPACE) + { + SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)pArgs->Get(nSlot)); + aParaMargin.SetWhich( RES_LR_SPACE); + aCoreSet.Put(aParaMargin); + pSet = &aCoreSet; + + } else + pSet = (SfxItemSet*) pArgs; } else if ( NULL != pDlg && pDlg->Execute() == RET_OK ) @@ -1023,14 +1049,14 @@ void SwTextShell::Execute(SfxRequest &rReq) //SetNumRuleStart(sal_True) restarts the numbering at the value //that is defined at the starting point of the numbering level //otherwise the SetNodeNumStart() value determines the start - //if it's set to something different than USHRT_MAX + //if it's set to something different than (sal_uInt16)0xFFFF sal_Bool bStart = ((SfxBoolItem&)pSet->Get(FN_NUMBER_NEWSTART)).GetValue(); // --> OD 2007-06-11 #b6560525# - // Default value for restart value has to be USHRT_MAX + // Default value for restart value has to be (sal_uInt16)0xFFFF // in order to indicate that the restart value of the list // style has to be used on restart. - sal_uInt16 nNumStart = USHRT_MAX; + sal_uInt16 nNumStart = (sal_uInt16)0xFFFF; // <-- if( SFX_ITEM_SET == pSet->GetItemState(FN_NUMBER_NEWSTART_AT) ) { @@ -1677,6 +1703,51 @@ void SwTextShell::GetState( SfxItemSet &rSet ) rSet.DisableItem(nWhich); } break; + case FN_NUM_NUMBERING_ON: + rSet.Put(SfxBoolItem(FN_NUM_NUMBERING_ON,rSh.SelectionHasNumber())); + break; + case FN_NUM_BULLET_ON: + rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON,rSh.SelectionHasBullet())); + break; + case FN_BUL_NUM_RULE_INDEX: + case FN_NUM_NUM_RULE_INDEX: + { + SwNumRule* pCurRule = (SwNumRule*)(GetShell().GetCurNumRule()); + sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF; + rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,DEFAULT_NONE)); + rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,DEFAULT_NONE)); + if( pCurRule ) + { + nActNumLvl = GetShell().GetNumLevel(); + if( nActNumLvl < MAXLEVEL ) + { + nActNumLvl = 1<<nActNumLvl; + } + SvxNumRule aSvxRule = pCurRule->MakeSvxNumRule(); + if ( GetShell().HasBullet()) + { + rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); + rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); + NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); + if ( pBullets ) + { + sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(aSvxRule,nActNumLvl); + rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,nBulIndex)); + } + }else if ( GetShell().HasNumber() ) + { + rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); + rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); + NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING); + if ( pNumbering ) + { + sal_uInt16 nBulIndex = pNumbering->GetNBOIndexForNumRule(aSvxRule,nActNumLvl); + rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,nBulIndex)); + } + } + } + } + break; case FN_NUM_CONTINUE: { // --> OD 2009-08-26 #i86492# @@ -1775,7 +1846,7 @@ void SwTextShell::ChangeHeaderOrFooter( if( !bCrsrSet && bOn ) bCrsrSet = rSh.SetCrsrInHdFt( - !rStyleName.Len() ? USHRT_MAX : nFrom, + !rStyleName.Len() ? (sal_uInt16)0xFFFF : nFrom, bHeader ); } } diff --git a/sw/source/ui/shells/txtattr.cxx b/sw/source/ui/shells/txtattr.cxx index 217a2b8f3e64..181e0dafc2a9 100644 --- a/sw/source/ui/shells/txtattr.cxx +++ b/sw/source/ui/shells/txtattr.cxx @@ -40,6 +40,7 @@ #include <editeng/fhgtitem.hxx> #include <editeng/adjitem.hxx> #include <editeng/lspcitem.hxx> +#include <editeng/lrspitem.hxx> #include <editeng/udlnitem.hxx> #include <editeng/escpitem.hxx> #include <svx/htmlmode.hxx> @@ -745,6 +746,19 @@ void SwTextShell::GetAttrState(SfxItemSet &rSet) rSet.Put(SvxAdjustItem((SvxAdjust)eAdjust, SID_ATTR_PARA_ADJUST )); nSlot = 0; break; + case SID_ATTR_PARA_LRSPACE: + { + eState = aCoreSet.GetItemState(RES_LR_SPACE); + if( eState >= SFX_ITEM_DEFAULT ) + { + SvxLRSpaceItem aLR = ( (const SvxLRSpaceItem&) aCoreSet.Get( RES_LR_SPACE ) ); + aLR.SetWhich(SID_ATTR_PARA_LRSPACE); + rSet.Put(aLR); + } + else + rSet.InvalidateItem(nSlot); + nSlot = 0; + } case SID_ATTR_PARA_LEFT_TO_RIGHT : case SID_ATTR_PARA_RIGHT_TO_LEFT : diff --git a/sw/source/ui/shells/txtnum.cxx b/sw/source/ui/shells/txtnum.cxx index 13a44cac34a7..0b53d940e5a9 100644 --- a/sw/source/ui/shells/txtnum.cxx +++ b/sw/source/ui/shells/txtnum.cxx @@ -46,6 +46,11 @@ #include "swabstdlg.hxx" #include <globals.hrc> #include <sfx2/tabdlg.hxx> +#include <svx/nbdtmg.hxx> +#include <svx/nbdtmgfact.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/bindings.hxx> +using namespace svx::sidebar; void SwTextShell::ExecEnterNum(SfxRequest &rReq) { @@ -54,14 +59,15 @@ void SwTextShell::ExecEnterNum(SfxRequest &rReq) { case FN_NUM_NUMBERING_ON: { + GetShell().StartAllAction(); SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, FN_PARAM_1 , sal_False ); - sal_Bool bMode = !GetShell().HasNumber(); // #i29560# + sal_Bool bMode = !GetShell().SelectionHasNumber(); // #i29560# if ( pItem ) bMode = pItem->GetValue(); else rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bMode ) ); - if ( bMode != (GetShell().HasNumber()) ) // #i29560# + if ( bMode != (GetShell().SelectionHasNumber()) ) // #i29560# { rReq.Done(); if( bMode ) @@ -69,18 +75,28 @@ void SwTextShell::ExecEnterNum(SfxRequest &rReq) else GetShell().NumOrBulletOff(); // #i29560# } + sal_Bool bNewResult = GetShell().SelectionHasNumber(); + if (bNewResult!=bMode) { + SfxBindings& rBindings = GetView().GetViewFrame()->GetBindings(); + SfxBoolItem aItem(FN_NUM_NUMBERING_ON,!bNewResult); + rBindings.SetState(aItem); + SfxBoolItem aNewItem(FN_NUM_NUMBERING_ON,bNewResult); + rBindings.SetState(aNewItem); + } + GetShell().EndAllAction(); } break; case FN_NUM_BULLET_ON: { + GetShell().StartAllAction(); SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, FN_PARAM_1 , sal_False ); - sal_Bool bMode = !GetShell().HasBullet(); // #i29560# + sal_Bool bMode = !GetShell().SelectionHasBullet(); // #i29560# if ( pItem ) bMode = pItem->GetValue(); else rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bMode ) ); - if ( bMode != (GetShell().HasBullet()) ) // #i29560# + if ( bMode != (GetShell().SelectionHasBullet()) ) // #i29560# { rReq.Done(); if( bMode ) @@ -88,9 +104,19 @@ void SwTextShell::ExecEnterNum(SfxRequest &rReq) else GetShell().NumOrBulletOff(); // #i29560# } + sal_Bool bNewResult = GetShell().SelectionHasBullet(); + if (bNewResult!=bMode) { + SfxBindings& rBindings = GetView().GetViewFrame()->GetBindings(); + SfxBoolItem aItem(FN_NUM_BULLET_ON,!bNewResult); + rBindings.SetState(aItem); + SfxBoolItem aNewItem(FN_NUM_BULLET_ON,bNewResult); + rBindings.SetState(aNewItem); + } + GetShell().EndAllAction(); } break; case FN_NUMBER_BULLETS: + case SID_OUTLINE_BULLET: { // --> OD 2008-02-29 #refactorlists# // // per default sal_True, damit die Schleife im Dialog richtig arbeitet! @@ -244,4 +270,179 @@ void SwTextShell::ExecEnterNum(SfxRequest &rReq) } } +void SwTextShell::ExecSetNumber(SfxRequest &rReq) +{ + SwNumRule aRule( GetShell().GetUniqueNumRuleName(), + // --> OD 2008-06-06 #i89178# + numfunc::GetDefaultPositionAndSpaceMode() ); + // <-- + + SvxNumRule aSvxRule = aRule.MakeSvxNumRule(); + const bool bRightToLeft = GetShell().IsInRightToLeftText( 0 ); + + if( bRightToLeft ) + { + for( sal_uInt8 n = 0; n < MAXLEVEL; ++n ) + { + SvxNumberFormat aFmt( aSvxRule.GetLevel( n ) ); + /* if ( n && bHtml ) + { + // 1/2" fuer HTML + aFmt.SetLSpace(720); + aFmt.SetAbsLSpace(n * 720); + }*/ + // --> FME 2005-01-21 #i38904# Default alignment for + // numbering/bullet should be rtl in rtl paragraph: + if ( bRightToLeft ) + { + aFmt.SetNumAdjust( SVX_ADJUST_RIGHT ); + } + // <-- + aSvxRule.SetLevel( n, aFmt, sal_False ); + } + aSvxRule.SetFeatureFlag(NUM_ENABLE_EMBEDDED_BMP, sal_False); + } + + const SwNumRule* pCurRule = GetShell().GetCurNumRule(); + sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF; + if( pCurRule ) + { + sal_uInt16 nLevel = GetShell().GetNumLevel(); + if( nLevel < MAXLEVEL ) + { + nActNumLvl = 1<<nLevel; + } + + aSvxRule = pCurRule->MakeSvxNumRule(); + //convert type of linked bitmaps from SVX_NUM_BITMAP to (SVX_NUM_BITMAP|LINK_TOKEN) + for(sal_uInt16 i = 0; i < aSvxRule.GetLevelCount(); i++) + { + SvxNumberFormat aFmt(aSvxRule.GetLevel(i)); + if(SVX_NUM_BITMAP == aFmt.GetNumberingType()) + { + const SvxBrushItem* pBrush = aFmt.GetBrush(); + const String* pLinkStr; + if(pBrush && + 0 != (pLinkStr = pBrush->GetGraphicLink()) && + pLinkStr->Len()) + aFmt.SetNumberingType(SvxExtNumType(SVX_NUM_BITMAP|LINK_TOKEN)); + aSvxRule.SetLevel(i, aFmt, aSvxRule.Get(i) != 0); + } + } + } + + + switch(rReq.GetSlot()) + { + case FN_SVX_SET_NUMBER: + { + SFX_REQUEST_ARG( rReq, pItem, SfxUInt16Item, FN_SVX_SET_NUMBER , sal_False ); + if (pItem) + { + sal_uInt16 nIdx = pItem->GetValue(); + if (nIdx==DEFAULT_NONE) { + GetShell().DelNumRules(); + break; + } + --nIdx; + + NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING); + if ( pNumbering ) + { + SwNumRule aTmpRule( GetShell().GetUniqueNumRuleName(), + numfunc::GetDefaultPositionAndSpaceMode() ); + + SvxNumRule aTempRule = aTmpRule.MakeSvxNumRule(); + //Sym3_2508, set unit attribute to NB Manager + SfxItemSet aSet(GetPool(), + SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL, + 0 ); + aSet.Put(SvxNumBulletItem(aTempRule)); + pNumbering->SetItems(&aSet); + pNumbering->ApplyNumRule(aTempRule,nIdx,nActNumLvl); + + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < aSvxRule.GetLevelCount(); i++) + { + if(nActNumLvl & nMask) + { + SvxNumberFormat aFmt(aTempRule.GetLevel(i)); + aSvxRule.SetLevel(i, aFmt); + } + nMask <<= 1 ; + } + + aSvxRule.UnLinkGraphics(); + SwNumRule aSetRule( pCurRule + ? pCurRule->GetName() + : GetShell().GetUniqueNumRuleName(), + numfunc::GetDefaultPositionAndSpaceMode() ); + aSetRule.SetSvxRule( aSvxRule, GetShell().GetDoc()); + + aSetRule.SetAutoRule( sal_True ); + const bool bCreateList = (pCurRule == 0); + GetShell().SetCurNumRule( aSetRule, bCreateList ); + } + //End + } + break; + } + case FN_SVX_SET_BULLET: + { + SFX_REQUEST_ARG( rReq, pItem, SfxUInt16Item, FN_SVX_SET_BULLET , sal_False ); + if (pItem) + { + sal_uInt16 nIdx = pItem->GetValue(); + if (nIdx==DEFAULT_NONE) { + GetShell().DelNumRules(); + break; + } + nIdx--; + + NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); + if ( pBullets ) + { + SwNumRule aTmpRule( GetShell().GetUniqueNumRuleName(), + numfunc::GetDefaultPositionAndSpaceMode() ); + + SvxNumRule aTempRule = aTmpRule.MakeSvxNumRule(); + //Sym3_2508, set unit attribute to NB Manager + SfxItemSet aSet(GetPool(), + SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL, + 0 ); + aSet.Put(SvxNumBulletItem(aTempRule)); + pBullets->SetItems(&aSet); + + //SvxNumRule aTempRule( 0, 10, false ); + pBullets->ApplyNumRule(aTempRule,nIdx,nActNumLvl); + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < aSvxRule.GetLevelCount(); i++) + { + if(nActNumLvl & nMask) + { + SvxNumberFormat aFmt(aTempRule.GetLevel(i)); + aSvxRule.SetLevel(i, aFmt); + } + nMask <<= 1; + } + aSvxRule.UnLinkGraphics(); + + SwNumRule aSetRule( pCurRule + ? pCurRule->GetName() + : GetShell().GetUniqueNumRuleName(), + numfunc::GetDefaultPositionAndSpaceMode() ); + + aSetRule.SetSvxRule( aSvxRule, GetShell().GetDoc()); + + aSetRule.SetAutoRule( sal_True ); + const bool bCreateList = (pCurRule == 0); + GetShell().SetCurNumRule( aSetRule, bCreateList ); + } + //End + } + + } + break; + } +} diff --git a/sw/source/ui/sidebar/PageColumnControl.cxx b/sw/source/ui/sidebar/PageColumnControl.cxx new file mode 100644 index 000000000000..a2e2909dc92f --- /dev/null +++ b/sw/source/ui/sidebar/PageColumnControl.cxx @@ -0,0 +1,115 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sw.hxx" + +#include "PageColumnControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <cmdid.h> +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> + +namespace sw { namespace sidebar { + +PageColumnControl::PageColumnControl( + Window* pParent, + PagePropertyPanel& rPanel, + const sal_uInt16 nColumnType, + const bool bLandscape ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_COLUMN) ) + , mpColumnValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::IMAGE_TEXT, this, SW_RES(VS_COLUMN) ) ) + , maMoreButton( this, SW_RES(CB_COLUMN_MORE) ) + , mnColumnType( nColumnType ) + , mrPagePropPanel(rPanel) +{ + mpColumnValueSet->SetStyle( mpColumnValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpColumnValueSet->SetColor(GetSettings().GetStyleSettings().GetMenuColor()); + + if ( bLandscape ) + { + mpColumnValueSet->AddItem( SW_RES(IMG_ONE_L), 0, SW_RES(STR_ONE), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_TWO_L), 0, SW_RES(STR_TWO), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_THREE_L), 0, SW_RES(STR_THREE), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_LEFT_L), 0, SW_RES(STR_LEFT), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_RIGHT_L), 0, SW_RES(STR_RIGHT), 0 ); + } + else + { + mpColumnValueSet->AddItem( SW_RES(IMG_ONE), 0, SW_RES(STR_ONE), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_TWO), 0, SW_RES(STR_TWO), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_THREE), 0, SW_RES(STR_THREE), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_LEFT), 0, SW_RES(STR_LEFT), 0 ); + mpColumnValueSet->AddItem( SW_RES(IMG_RIGHT), 0, SW_RES(STR_RIGHT), 0 ); + } + + mpColumnValueSet->SetNoSelection(); + mpColumnValueSet->SetSelectHdl( LINK(this, PageColumnControl,ImplColumnHdl ) ); + mpColumnValueSet->Show(); + mpColumnValueSet->SelectItem( mnColumnType ); + mpColumnValueSet->Format(); + mpColumnValueSet->StartSelection(); + + maMoreButton.SetClickHdl( LINK( this, PageColumnControl, MoreButtonClickHdl_Impl ) ); + maMoreButton.GrabFocus(); + + FreeResource(); +} + + +PageColumnControl::~PageColumnControl(void) +{ + delete mpColumnValueSet; +} + + +IMPL_LINK(PageColumnControl, ImplColumnHdl, void *, pControl) +{ + mpColumnValueSet->SetNoSelection(); + if ( pControl == mpColumnValueSet ) + { + const sal_uInt32 nColumnType = mpColumnValueSet->GetSelectItemId(); + if ( nColumnType != mnColumnType ) + { + mnColumnType = nColumnType; + mrPagePropPanel.ExecuteColumnChange( mnColumnType ); + } + } + + mrPagePropPanel.ClosePageColumnPopup(); + return 0; +} + +IMPL_LINK(PageColumnControl, MoreButtonClickHdl_Impl, void *, EMPTYARG) +{ + mrPagePropPanel.GetBindings()->GetDispatcher()->Execute( FN_FORMAT_PAGE_COLUMN_DLG, SFX_CALLMODE_ASYNCHRON ); + + mrPagePropPanel.ClosePageColumnPopup(); + return 0; +} + + +} } // end of namespace sw::sidebar + diff --git a/sw/source/ui/sidebar/PageColumnControl.hxx b/sw/source/ui/sidebar/PageColumnControl.hxx new file mode 100644 index 000000000000..e281dd6d35b2 --- /dev/null +++ b/sw/source/ui/sidebar/PageColumnControl.hxx @@ -0,0 +1,67 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SW_SIDEBAR_PAGE_COLUMN_CONTROL_HXX_ +#define _SW_SIDEBAR_PAGE_COLUMN_CONTROL_HXX_ + +#include <svx/sidebar/PopupControl.hxx> + +#include <vcl/image.hxx> +#include <vcl/button.hxx> + +#include <vector> + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + + +class PageColumnControl + : public ::svx::sidebar::PopupControl +{ +public: + PageColumnControl( + Window* pParent, + PagePropertyPanel& rPanel, + const sal_uInt16 nColumnType, + const bool bLandscape ); + + ~PageColumnControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpColumnValueSet; + PushButton maMoreButton; + + sal_uInt16 mnColumnType; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK(ImplColumnHdl, void*); + DECL_LINK(MoreButtonClickHdl_Impl, void*); +}; + +} } // end of namespace sw::sidebar + +#endif diff --git a/sw/source/ui/sidebar/PageMarginControl.cxx b/sw/source/ui/sidebar/PageMarginControl.cxx new file mode 100644 index 000000000000..c0697b1f29f4 --- /dev/null +++ b/sw/source/ui/sidebar/PageMarginControl.cxx @@ -0,0 +1,523 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sw.hxx" + +#include "PageMarginControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> + +#define SWPAGE_LEFT_GVALUE String("Sw_Page_Left", 12, RTL_TEXTENCODING_ASCII_US) +#define SWPAGE_RIGHT_GVALUE String("Sw_Page_Right", 13, RTL_TEXTENCODING_ASCII_US) +#define SWPAGE_TOP_GVALUE String("Sw_Page_Top", 11, RTL_TEXTENCODING_ASCII_US) +#define SWPAGE_DOWN_GVALUE String("Sw_Page_Down", 12, RTL_TEXTENCODING_ASCII_US) +#define SWPAGE_MIRROR_GVALUE String("Sw_Page_Mirrored", 16, RTL_TEXTENCODING_ASCII_US) + + +namespace sw { namespace sidebar { + +PageMarginControl::PageMarginControl( + Window* pParent, + PagePropertyPanel& rPanel, + const SvxLongLRSpaceItem& aPageLRMargin, + const SvxLongULSpaceItem& aPageULMargin, + const bool bMirrored, + const Size aPageSize, + const sal_Bool bLandscape, + const FieldUnit eFUnit, + const SfxMapUnit eUnit ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_MARGIN) ) + , mpMarginValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::IMAGE_TEXT, this, SW_RES(VS_MARGIN) ) ) + , maCustom(this, SW_RES(FT_CUSTOM)) + , maLeft(this, SW_RES(FT_LEFT)) + , maInner(this, SW_RES(FT_INNER)) + , maLeftMarginEdit(this, SW_RES(MF_SWLEFT_MARGIN)) + , maRight(this, SW_RES(FT_RIGHT)) + , maOuter(this, SW_RES(FT_OUTER)) + , maRightMarginEdit(this, SW_RES(MF_SWRIGHT_MARGIN)) + , maTop(this, SW_RES(FT_TOP)) + , maTopMarginEdit(this, SW_RES(MF_SWTOP_MARGIN)) + , maBottom(this, SW_RES(FT_BOTTOM)) + , maBottomMarginEdit(this, SW_RES(MF_SWBOTTOM_MARGIN)) + , maWidthHeightField( this, SW_RES(FLD_WIDTH_HEIGHT) ) + , mnPageLeftMargin( aPageLRMargin.GetLeft() ) + , mnPageRightMargin( aPageLRMargin.GetRight() ) + , mnPageTopMargin( aPageULMargin.GetUpper() ) + , mnPageBottomMargin( aPageULMargin.GetLower() ) + , mbMirrored( bMirrored ) + , meUnit( eUnit ) + , mbUserCustomValuesAvailable(false) + , mnUserCustomPageLeftMargin(0) + , mnUserCustomPageRightMargin(0) + , mnUserCustomPageTopMargin(0) + , mnUserCustomPageBottomMargin(0) + , mbUserCustomMirrored(false) + , mbCustomValuesUsed( false ) + , mrPagePropPanel(rPanel) +{ + maWidthHeightField.Hide(); + SetFieldUnit( maWidthHeightField, eFUnit ); + + mbUserCustomValuesAvailable = GetUserCustomValues(); + + mpMarginValueSet->SetStyle( mpMarginValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpMarginValueSet->SetColor( GetSettings().GetStyleSettings().GetMenuColor() ); + + FillValueSet( bLandscape, mbUserCustomValuesAvailable ); + + mpMarginValueSet->SetNoSelection(); + mpMarginValueSet->SetSelectHdl( LINK(this, PageMarginControl,ImplMarginHdl ) ); + mpMarginValueSet->Show(); + + SelectValueSetItem(); + + SetFieldUnit( maLeftMarginEdit, eFUnit ); + Link aLinkLR = LINK( this, PageMarginControl, ModifyLRMarginHdl ); + maLeftMarginEdit.SetModifyHdl( aLinkLR ); + SetMetricValue( maLeftMarginEdit, mnPageLeftMargin, meUnit ); + + SetFieldUnit( maRightMarginEdit, eFUnit ); + maRightMarginEdit.SetModifyHdl( aLinkLR ); + SetMetricValue( maRightMarginEdit, mnPageRightMargin, meUnit ); + + Link aLinkUL = LINK( this, PageMarginControl, ModifyULMarginHdl ); + SetFieldUnit( maTopMarginEdit, eFUnit ); + maTopMarginEdit.SetModifyHdl( aLinkUL ); + SetMetricValue( maTopMarginEdit, mnPageTopMargin, meUnit ); + + SetFieldUnit( maBottomMarginEdit, eFUnit ); + maBottomMarginEdit.SetModifyHdl( aLinkUL ); + SetMetricValue( maBottomMarginEdit, mnPageBottomMargin, meUnit ); + + SetMetricFieldMaxValues( aPageSize ); + + if ( mbMirrored ) + { + maLeft.Hide(); + maRight.Hide(); + maInner.Show(); + maOuter.Show(); + } + else + { + maLeft.Show(); + maRight.Show(); + maInner.Hide(); + maOuter.Hide(); + } + + FreeResource(); +} + + +PageMarginControl::~PageMarginControl(void) +{ + delete mpMarginValueSet; + + StoreUserCustomValues(); +} + + +void PageMarginControl::SetMetricFieldMaxValues( const Size aPageSize ) +{ + const long nML = maLeftMarginEdit.Denormalize( maLeftMarginEdit.GetValue(FUNIT_TWIP) ); + const long nMR = maRightMarginEdit.Denormalize( maRightMarginEdit.GetValue(FUNIT_TWIP) ); + const long nMT = maTopMarginEdit.Denormalize(maTopMarginEdit.GetValue(FUNIT_TWIP) ); + const long nMB = maBottomMarginEdit.Denormalize( maBottomMarginEdit.GetValue(FUNIT_TWIP) ); + + const long nPH = LogicToLogic( aPageSize.Height(), (MapUnit)meUnit, MAP_TWIP ); + const long nPW = LogicToLogic( aPageSize.Width(), (MapUnit)meUnit, MAP_TWIP ); + + // Left + long nMax = nPW - nMR - MINBODY; + maLeftMarginEdit.SetMax(maLeftMarginEdit.Normalize(nMax), FUNIT_TWIP); + + // Right + nMax = nPW - nML - MINBODY; + maRightMarginEdit.SetMax(maRightMarginEdit.Normalize(nMax), FUNIT_TWIP); + + //Top + nMax = nPH - nMB - MINBODY; + maTopMarginEdit.SetMax(maTopMarginEdit.Normalize(nMax), FUNIT_TWIP); + + //Bottom + nMax = nPH - nMT - MINBODY; + maBottomMarginEdit.SetMax(maTopMarginEdit.Normalize(nMax), FUNIT_TWIP); +} + + +void PageMarginControl::FillValueSet( + const bool bLandscape, + const bool bUserCustomValuesAvailable ) +{ + const XubString aLeft = SW_RES(STR_MARGIN_TOOLTIP_LEFT); + const XubString aRight = SW_RES(STR_MARGIN_TOOLTIP_RIGHT); + const XubString aTop = SW_RES(STR_MARGIN_TOOLTIP_TOP); + const XubString aBottom = SW_RES(STR_MARGIN_TOOLTIP_BOT); + + SetMetricValue( maWidthHeightField, SWPAGE_NARROW_VALUE, meUnit ); + const XubString aNarrowValText = maWidthHeightField.GetText(); + XubString aHelpText = aLeft; + aHelpText += aNarrowValText; + aHelpText += aRight; + aHelpText += aNarrowValText; + aHelpText += aTop; + aHelpText += aNarrowValText; + aHelpText += aBottom; + aHelpText += aNarrowValText; + mpMarginValueSet->AddItem( + (bLandscape ? SW_RES(IMG_NARROW_L) : SW_RES(IMG_NARROW) ), 0, + SW_RES(STR_NARROW), &aHelpText ); + + SetMetricValue( maWidthHeightField, SWPAGE_NORMAL_VALUE, meUnit ); + const XubString aNormalValText = maWidthHeightField.GetText(); + aHelpText = aLeft; + aHelpText += aNormalValText; + aHelpText += aRight; + aHelpText += aNormalValText; + aHelpText += aTop; + aHelpText += aNormalValText; + aHelpText += aBottom; + aHelpText += aNormalValText; + mpMarginValueSet->AddItem( + (bLandscape ? SW_RES(IMG_NORMAL_L) : SW_RES(IMG_NORMAL) ), 0, + SW_RES(STR_NORMAL), &aHelpText ); + + SetMetricValue( maWidthHeightField, SWPAGE_WIDE_VALUE1, meUnit ); + const XubString aWide1ValText = maWidthHeightField.GetText(); + SetMetricValue( maWidthHeightField, SWPAGE_WIDE_VALUE2, meUnit ); + const XubString aWide2ValText = maWidthHeightField.GetText(); + aHelpText = aLeft; + aHelpText += aWide2ValText; + aHelpText += aRight; + aHelpText += aWide2ValText; + aHelpText += aTop; + aHelpText += aWide1ValText; + aHelpText += aBottom; + aHelpText += aWide1ValText; + mpMarginValueSet->AddItem( + (bLandscape ? SW_RES(IMG_WIDE_L) : SW_RES(IMG_WIDE) ), 0, + SW_RES(STR_WIDE), &aHelpText ); + + const XubString aInner = SW_RES(STR_MARGIN_TOOLTIP_INNER); + const XubString aOuter = SW_RES(STR_MARGIN_TOOLTIP_OUTER); + + SetMetricValue( maWidthHeightField, SWPAGE_WIDE_VALUE3, meUnit ); + const XubString aWide3ValText = maWidthHeightField.GetText(); + aHelpText = aInner; + aHelpText += aWide3ValText; + aHelpText += aOuter; + aHelpText += aWide3ValText; + aHelpText += aTop; + aHelpText += aWide1ValText; + aHelpText += aBottom; + aHelpText += aWide1ValText; + mpMarginValueSet->AddItem( + (bLandscape ? SW_RES(IMG_MIRRORED_L) : SW_RES(IMG_MIRRORED) ), 0, + SW_RES(STR_MIRRORED), &aHelpText ); + + if ( bUserCustomValuesAvailable ) + { + aHelpText = mbUserCustomMirrored ? aInner : aLeft; + SetMetricValue( maWidthHeightField, mnUserCustomPageLeftMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + aHelpText += mbUserCustomMirrored ? aOuter : aRight; + SetMetricValue( maWidthHeightField, mnUserCustomPageRightMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + aHelpText += aTop; + SetMetricValue( maWidthHeightField, mnUserCustomPageTopMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + aHelpText += aBottom; + SetMetricValue( maWidthHeightField, mnUserCustomPageBottomMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + } + else + { + aHelpText = XubString(); + } + mpMarginValueSet->AddItem( + (bUserCustomValuesAvailable ? SW_RES(IMG_CUSTOM) : SW_RES(IMG_CUSTOM_DIS) ), 0, + SW_RES(STR_LCVALUE), &aHelpText ); +} + + +void PageMarginControl::SelectValueSetItem() +{ + const long cTolerance = 5; + + if( abs(mnPageLeftMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + abs(mnPageRightMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + abs(mnPageTopMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + abs(mnPageBottomMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + !mbMirrored ) + { + mpMarginValueSet->SelectItem(1); + } + else if( abs(mnPageLeftMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + abs(mnPageRightMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + abs(mnPageTopMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + abs(mnPageBottomMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + !mbMirrored ) + { + mpMarginValueSet->SelectItem(2); + } + else if( abs(mnPageLeftMargin - SWPAGE_WIDE_VALUE2) <= cTolerance && + abs(mnPageRightMargin - SWPAGE_WIDE_VALUE2) <= cTolerance && + abs(mnPageTopMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + abs(mnPageBottomMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + !mbMirrored ) + { + mpMarginValueSet->SelectItem(3); + } + else if( abs(mnPageLeftMargin - SWPAGE_WIDE_VALUE3) <= cTolerance && + abs(mnPageRightMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + abs(mnPageTopMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + abs(mnPageBottomMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + mbMirrored ) + { + mpMarginValueSet->SelectItem(4); + } + else + { + mpMarginValueSet->SelectItem(0); + } + + mpMarginValueSet->Format(); + mpMarginValueSet->StartSelection(); +}; + + +IMPL_LINK(PageMarginControl, ImplMarginHdl, void *, pControl) +{ + if ( pControl == mpMarginValueSet ) + { + const sal_uInt16 iPos = mpMarginValueSet->GetSelectItemId(); + bool bMirrored = false; + bool bApplyNewPageMargins = true; + switch ( iPos ) + { + case 1: + mnPageLeftMargin = SWPAGE_NARROW_VALUE; + mnPageRightMargin = SWPAGE_NARROW_VALUE; + mnPageTopMargin = SWPAGE_NARROW_VALUE; + mnPageBottomMargin = SWPAGE_NARROW_VALUE; + bMirrored = false; + break; + case 2: + mnPageLeftMargin = SWPAGE_NORMAL_VALUE; + mnPageRightMargin = SWPAGE_NORMAL_VALUE; + mnPageTopMargin = SWPAGE_NORMAL_VALUE; + mnPageBottomMargin = SWPAGE_NORMAL_VALUE; + bMirrored = false; + break; + case 3: + mnPageLeftMargin = SWPAGE_WIDE_VALUE2; + mnPageRightMargin = SWPAGE_WIDE_VALUE2; + mnPageTopMargin = SWPAGE_WIDE_VALUE1; + mnPageBottomMargin = SWPAGE_WIDE_VALUE1; + bMirrored = false; + break; + case 4: + mnPageLeftMargin = SWPAGE_WIDE_VALUE3; + mnPageRightMargin = SWPAGE_WIDE_VALUE1; + mnPageTopMargin = SWPAGE_WIDE_VALUE1; + mnPageBottomMargin = SWPAGE_WIDE_VALUE1; + bMirrored = true; + break; + case 5: + if ( mbUserCustomValuesAvailable ) + { + mnPageLeftMargin = mnUserCustomPageLeftMargin; + mnPageRightMargin = mnUserCustomPageRightMargin; + mnPageTopMargin = mnUserCustomPageTopMargin; + mnPageBottomMargin = mnUserCustomPageBottomMargin; + bMirrored = mbUserCustomMirrored; + } + else + { + bApplyNewPageMargins = false; + } + break; + } + + if ( bApplyNewPageMargins ) + { + mpMarginValueSet->SetNoSelection(); + mrPagePropPanel.ExecuteMarginLRChange( mnPageLeftMargin, mnPageRightMargin ); + mrPagePropPanel.ExecuteMarginULChange( mnPageTopMargin, mnPageBottomMargin ); + if ( mbMirrored != bMirrored ) + { + mbMirrored = bMirrored; + mrPagePropPanel.ExecutePageLayoutChange( mbMirrored ); + } + + mbCustomValuesUsed = false; + mrPagePropPanel.ClosePageMarginPopup(); + } + else + { + // back to initial selection + SelectValueSetItem(); + } + } + + return 0; +} + + +IMPL_LINK( PageMarginControl, ModifyLRMarginHdl, MetricField *, EMPTYARG ) +{ + mpMarginValueSet->SetNoSelection(); + mpMarginValueSet->SelectItem(0); + mpMarginValueSet->Format(); + mpMarginValueSet->StartSelection(); + + mnPageLeftMargin = GetCoreValue( maLeftMarginEdit, meUnit ); + mnPageRightMargin = GetCoreValue( maRightMarginEdit, meUnit ); + mrPagePropPanel.ExecuteMarginLRChange( mnPageLeftMargin, mnPageRightMargin ); + mbCustomValuesUsed = true; + return 0; +} + +IMPL_LINK( PageMarginControl, ModifyULMarginHdl, MetricField *, EMPTYARG ) +{ + mpMarginValueSet->SetNoSelection(); + mpMarginValueSet->SelectItem(0); + mpMarginValueSet->Format(); + mpMarginValueSet->StartSelection(); + + mnPageTopMargin = GetCoreValue( maTopMarginEdit, meUnit ); + mnPageBottomMargin = GetCoreValue( maBottomMarginEdit, meUnit ); + mrPagePropPanel.ExecuteMarginULChange( mnPageTopMargin, mnPageBottomMargin ); + mbCustomValuesUsed = true; + return 0; +} + + +bool PageMarginControl::GetUserCustomValues() +{ + bool bUserCustomValuesAvailable = false; + + SvtViewOptions aWinOpt( E_WINDOW, SWPAGE_LEFT_GVALUE ); + if ( aWinOpt.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + String aWinData( aTmp ); + mnUserCustomPageLeftMargin = aWinData.ToInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt2( E_WINDOW, SWPAGE_RIGHT_GVALUE ); + if ( aWinOpt2.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + String aWinData( aTmp ); + mnUserCustomPageRightMargin = aWinData.ToInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt3( E_WINDOW, SWPAGE_TOP_GVALUE ); + if ( aWinOpt3.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt3.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + String aWinData( aTmp ); + mnUserCustomPageTopMargin = aWinData.ToInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt4( E_WINDOW, SWPAGE_DOWN_GVALUE ); + if ( aWinOpt4.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt4.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + String aWinData( aTmp ); + mnUserCustomPageBottomMargin = aWinData.ToInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt5( E_WINDOW, SWPAGE_MIRROR_GVALUE ); + if ( aWinOpt5.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt5.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + String aWinData( aTmp ); + mbUserCustomMirrored = aWinData.ToInt32() == 0 ? false : true; + bUserCustomValuesAvailable = true; + } + + return bUserCustomValuesAvailable; +} + +void PageMarginControl::StoreUserCustomValues() +{ + if ( !mbCustomValuesUsed ) + { + return; + } + + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1); + SvtViewOptions aWinOpt( E_WINDOW, SWPAGE_LEFT_GVALUE ); + + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("mnPageLeftMargin") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( mnPageLeftMargin )); + aWinOpt.SetUserData( aSeq ); + + SvtViewOptions aWinOpt2( E_WINDOW, SWPAGE_RIGHT_GVALUE ); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("mnPageRightMargin") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( mnPageRightMargin )); + aWinOpt2.SetUserData( aSeq ); + + SvtViewOptions aWinOpt3( E_WINDOW, SWPAGE_TOP_GVALUE ); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("mnPageTopMargin") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( mnPageTopMargin )); + aWinOpt3.SetUserData( aSeq ); + + SvtViewOptions aWinOpt4( E_WINDOW, SWPAGE_DOWN_GVALUE ); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("mnPageBottomMargin") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( mnPageBottomMargin )); + aWinOpt4.SetUserData( aSeq ); + + SvtViewOptions aWinOpt5( E_WINDOW, SWPAGE_MIRROR_GVALUE ); + aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("mbMirrored") ); + aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( (mbMirrored ? 1 : 0) )); + aWinOpt5.SetUserData( aSeq ); +} + + +} } // end of namespace sw::sidebar + diff --git a/sw/source/ui/sidebar/PageMarginControl.hxx b/sw/source/ui/sidebar/PageMarginControl.hxx new file mode 100644 index 000000000000..dd5f758ac9f6 --- /dev/null +++ b/sw/source/ui/sidebar/PageMarginControl.hxx @@ -0,0 +1,124 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SW_SIDEBAR_PAGE_MARGIN_CONTROL_HXX_ +#define _SW_SIDEBAR_PAGE_MARGIN_CONTROL_HXX_ + +#include <svx/sidebar/PopupControl.hxx> + +#include <tools/fldunit.hxx> +#include <svl/poolitem.hxx> +#include <svx/rulritem.hxx> +#include <unotools/viewoptions.hxx> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include <svtools/unitconv.hxx> +#include <vector> + +#define SWPAGE_NARROW_VALUE 720 +#define SWPAGE_NORMAL_VALUE 1136 +#define SWPAGE_WIDE_VALUE1 1440 +#define SWPAGE_WIDE_VALUE2 2880 +#define SWPAGE_WIDE_VALUE3 1800 + + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +static const long MINBODY = 284; //0.5 cm in twips + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + + +class PageMarginControl + : public ::svx::sidebar::PopupControl +{ +public: + PageMarginControl( + Window* pParent, + PagePropertyPanel& rPanel, + const SvxLongLRSpaceItem& aPageLRMargin, + const SvxLongULSpaceItem& aPageULMargin, + const bool bMirrored, + const Size aPageSize, + const sal_Bool bLandscape, + const FieldUnit eFUnit, + const SfxMapUnit eUnit ); + ~PageMarginControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpMarginValueSet; + + FixedText maCustom; + FixedText maLeft; + FixedText maInner; + MetricField maLeftMarginEdit; + FixedText maRight; + FixedText maOuter; + MetricField maRightMarginEdit; + FixedText maTop; + MetricField maTopMarginEdit; + FixedText maBottom; + MetricField maBottomMarginEdit; + + // hidden metric field + MetricField maWidthHeightField; + + long mnPageLeftMargin; + long mnPageRightMargin; + long mnPageTopMargin; + long mnPageBottomMargin; + bool mbMirrored; + + const SfxMapUnit meUnit; + + bool mbUserCustomValuesAvailable; + long mnUserCustomPageLeftMargin; + long mnUserCustomPageRightMargin; + long mnUserCustomPageTopMargin; + long mnUserCustomPageBottomMargin; + bool mbUserCustomMirrored; + + bool mbCustomValuesUsed; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK( ImplMarginHdl, void* ); + DECL_LINK( ModifyLRMarginHdl, MetricField* ); + DECL_LINK( ModifyULMarginHdl, MetricField* ); + + void SetMetricFieldMaxValues( const Size aPageSize ); + + bool GetUserCustomValues(); + void StoreUserCustomValues(); + + void FillValueSet( + const bool bLandscape, + const bool bUserCustomValuesAvailable ); + void SelectValueSetItem(); +}; + +} } // end of namespace sw::sidebar + +#endif diff --git a/sw/source/ui/sidebar/PageOrientationControl.cxx b/sw/source/ui/sidebar/PageOrientationControl.cxx new file mode 100644 index 000000000000..4c9fb0318d77 --- /dev/null +++ b/sw/source/ui/sidebar/PageOrientationControl.cxx @@ -0,0 +1,93 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sw.hxx" + +#include "PageOrientationControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> + +namespace sw { namespace sidebar { + +PageOrientationControl::PageOrientationControl( + Window* pParent, + PagePropertyPanel& rPanel, + const sal_Bool bLandscape ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_ORIENTATION) ) + , mpOrientationValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::IMAGE_TEXT, this, SW_RES(VS_ORIENTATION) ) ) + , mbLandscape( bLandscape ) + , mrPagePropPanel(rPanel) +{ + mpOrientationValueSet->SetStyle( mpOrientationValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpOrientationValueSet->SetColor(GetSettings().GetStyleSettings().GetMenuColor()); + + // initialize <ValueSetWithText> control + { + mpOrientationValueSet->AddItem( SW_RES(IMG_PORTRAIT), 0, SW_RES(STR_PORTRAIT), 0 ); + mpOrientationValueSet->AddItem( SW_RES(IMG_LANDSCAPE), 0, SW_RES(STR_LANDSCAPE), 0 ); + } + + Link aLink = LINK(this, PageOrientationControl,ImplOrientationHdl ); + mpOrientationValueSet->SetSelectHdl(aLink); + mpOrientationValueSet->SetNoSelection(); + mpOrientationValueSet->StartSelection(); + mpOrientationValueSet->Show(); + mpOrientationValueSet->SelectItem( (mbLandscape == sal_True) ? 2 : 1 ); + mpOrientationValueSet->GrabFocus(); + mpOrientationValueSet->Format(); + mpOrientationValueSet->StartSelection(); + + FreeResource(); +} + + +PageOrientationControl::~PageOrientationControl(void) +{ + delete mpOrientationValueSet; +} + + +IMPL_LINK(PageOrientationControl, ImplOrientationHdl, void *, pControl) +{ + mpOrientationValueSet->SetNoSelection(); + if ( pControl == mpOrientationValueSet ) + { + const sal_uInt32 iPos = mpOrientationValueSet->GetSelectItemId(); + const bool bChanged = ( ( iPos == 1 ) && mbLandscape ) || + ( ( iPos == 2 ) && !mbLandscape ); + if ( bChanged ) + { + mbLandscape = !mbLandscape; + mrPagePropPanel.ExecuteOrientationChange( mbLandscape ); + } + } + + mrPagePropPanel.ClosePageOrientationPopup(); + return 0; +} + + +} } // end of namespace sw::sidebar + diff --git a/sw/source/ui/sidebar/PageOrientationControl.hxx b/sw/source/ui/sidebar/PageOrientationControl.hxx new file mode 100644 index 000000000000..72b0070b7617 --- /dev/null +++ b/sw/source/ui/sidebar/PageOrientationControl.hxx @@ -0,0 +1,58 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SW_SIDEBAR_PAGE_ORIENTATION_CONTROL_HXX_ +#define _SW_SIDEBAR_PAGE_ORIENTATION_CONTROL_HXX_ + +#include <svx/sidebar/PopupControl.hxx> + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + + +class PageOrientationControl + : public ::svx::sidebar::PopupControl +{ +public: + PageOrientationControl( + Window* pParent, + PagePropertyPanel& rPanel, + const sal_Bool bLandscape ); + ~PageOrientationControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpOrientationValueSet; + + sal_Bool mbLandscape; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK(ImplOrientationHdl, void*); +}; + +} } // end of namespace sw::sidebar + +#endif diff --git a/sw/source/ui/sidebar/PagePropertyPanel.cxx b/sw/source/ui/sidebar/PagePropertyPanel.cxx new file mode 100644 index 000000000000..e329ebd9033c --- /dev/null +++ b/sw/source/ui/sidebar/PagePropertyPanel.cxx @@ -0,0 +1,766 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#include "precompiled_sw.hxx" + +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include "PropertyPanel.hrc" + +#include <svx/sidebar/PopupContainer.hxx> +#include "PageOrientationControl.hxx" +#include "PageMarginControl.hxx" +#include "PageSizeControl.hxx" +#include "PageColumnControl.hxx" + +#include <swtypes.hxx> +#include <cmdid.h> +#include <errhdl.hxx> + +#include <svl/intitem.hxx> +#include <editeng/sizeitem.hxx> +#include <editeng/paperinf.hxx> +#include <svx/svxids.hrc> +#include <svx/dlgutil.hxx> +#include <svx/rulritem.hxx> + +#include <sfx2/sidebar/ControlFactory.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/viewsh.hxx> +#include <sfx2/objsh.hxx> + +#include <boost/bind.hpp> + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + +#define SetFldVal(rField, lValue) (rField).SetValue((rField).Normalize(lValue), FUNIT_TWIP) + + +namespace sw { namespace sidebar { + +PagePropertyPanel* PagePropertyPanel::Create ( + Window* pParent, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw ::com::sun::star::lang::IllegalArgumentException(A2S("no parent Window given to PagePropertyPanel::Create"), NULL, 0); + if (pBindings == NULL) + throw ::com::sun::star::lang::IllegalArgumentException(A2S("no SfxBindings given to PagePropertyPanel::Create"), NULL, 2); + + return new PagePropertyPanel( + pParent, + pBindings); +} + +PagePropertyPanel::PagePropertyPanel( + Window* pParent, + SfxBindings* pBindings) + : Control(pParent, SW_RES(RID_PROPERTYPANEL_SWPAGE)) + , mpBindings(pBindings) + // visible controls + , maFtOrientation( this, SW_RES(FT_ORIENTATION) ) + , mpToolBoxOrientationBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) ) + , mpToolBoxOrientation( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxOrientationBackground.get(), SW_RES(TB_ORIENTATION)) ) + , maFtMargin( this, SW_RES(FT_MARGIN) ) + , mpToolBoxMarginBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) ) + , mpToolBoxMargin( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxMarginBackground.get(), SW_RES(TB_MARGIN)) ) + , maFtSize( this, SW_RES(FT_SIZE) ) + , mpToolBoxSizeBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) ) + , mpToolBoxSize( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxSizeBackground.get(), SW_RES(TB_SIZE)) ) + , maFtColumn( this, SW_RES(FT_COLUMN) ) + , mpToolBoxColumnBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) ) + , mpToolBoxColumn( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxColumnBackground.get(), SW_RES(TB_COLUMN)) ) + // image resources + , maImgSize (NULL) + , maImgSize_L (NULL) + , mImgPortrait (SW_RES(IMG_PAGE_PORTRAIT)) + , mImgLandscape (SW_RES(IMG_PAGE_LANDSCAPE)) + , mImgNarrow (SW_RES(IMG_PAGE_NARROW)) + , mImgNormal (SW_RES(IMG_PAGE_NORMAL)) + , mImgWide (SW_RES(IMG_PAGE_WIDE)) + , mImgMirrored (SW_RES(IMG_PAGE_MIRRORED)) + , mImgMarginCustom (SW_RES(IMG_PAGE_MARGIN_CUSTOM)) + , mImgNarrow_L (SW_RES(IMG_PAGE_NARROW_L)) + , mImgNormal_L (SW_RES(IMG_PAGE_NORMAL_L)) + , mImgWide_L (SW_RES(IMG_PAGE_WIDE_L)) + , mImgMirrored_L (SW_RES(IMG_PAGE_MIRRORED_L)) + , mImgMarginCustom_L (SW_RES(IMG_PAGE_MARGIN_CUSTOM_L)) + , mImgA3 (SW_RES(IMG_PAGE_A3)) + , mImgA4 (SW_RES(IMG_PAGE_A4)) + , mImgA5 (SW_RES(IMG_PAGE_A5)) + , mImgB4 (SW_RES(IMG_PAGE_B4)) + , mImgB5 (SW_RES(IMG_PAGE_B5)) + , mImgC5 (SW_RES(IMG_PAGE_C5)) + , mImgLetter (SW_RES(IMG_PAGE_LETTER)) + , mImgLegal (SW_RES(IMG_PAGE_LEGAL)) + , mImgSizeNone (SW_RES(IMG_PAGE_SIZE_NONE)) + , mImgA3_L (SW_RES(IMG_PAGE_A3_L)) + , mImgA4_L (SW_RES(IMG_PAGE_A4_L)) + , mImgA5_L (SW_RES(IMG_PAGE_A5_L)) + , mImgB4_L (SW_RES(IMG_PAGE_B4_L)) + , mImgB5_L (SW_RES(IMG_PAGE_B5_L)) + , mImgC5_L (SW_RES(IMG_PAGE_C5_L)) + , mImgLetter_L (SW_RES(IMG_PAGE_LETTER_L)) + , mImgLegal_L (SW_RES(IMG_PAGE_LEGAL_L)) + , mImgSizeNone_L (SW_RES(IMG_PAGE_SIZE_NONE_L)) + , mImgColumn1 (SW_RES(IMG_PAGE_COLUMN_1)) + , mImgColumn2 (SW_RES(IMG_PAGE_COLUMN_2)) + , mImgColumn3 (SW_RES(IMG_PAGE_COLUMN_3)) + , mImgLeft (SW_RES(IMG_PAGE_COLUMN_LEFT)) + , mImgRight (SW_RES(IMG_PAGE_COLUMN_RIGHT)) + , mImgColumnNone (SW_RES(IMG_PAGE_COLUMN_NONE)) + , mImgColumn1_L (SW_RES(IMG_PAGE_COLUMN_1_L)) + , mImgColumn2_L (SW_RES(IMG_PAGE_COLUMN_2_L)) + , mImgColumn3_L (SW_RES(IMG_PAGE_COLUMN_3_L)) + , mImgLeft_L (SW_RES(IMG_PAGE_COLUMN_LEFT_L)) + , mImgRight_L (SW_RES(IMG_PAGE_COLUMN_RIGHT_L)) + , mImgColumnNone_L (SW_RES(IMG_PAGE_COLUMN_NONE_L)) + + , mpPageItem( new SvxPageItem(SID_ATTR_PAGE) ) + , mpPageLRMarginItem( new SvxLongLRSpaceItem( 0, 0, SID_ATTR_PAGE_LRSPACE ) ) + , mpPageULMarginItem( new SvxLongULSpaceItem( 0, 0, SID_ATTR_PAGE_ULSPACE ) ) + , mpPageSizeItem( new SvxSizeItem(SID_ATTR_PAGE_SIZE) ) + , mePaper( PAPER_USER ) + , mpPageColumnTypeItem( new SfxInt16Item(SID_ATTR_PAGE_COLUMN) ) + + , meFUnit() + , meUnit() + + , m_aSwPagePgULControl(SID_ATTR_PAGE_ULSPACE, *pBindings, *this) + , m_aSwPagePgLRControl(SID_ATTR_PAGE_LRSPACE, *pBindings, *this) + , m_aSwPagePgSizeControl(SID_ATTR_PAGE_SIZE, *pBindings, *this) + , m_aSwPagePgControl(SID_ATTR_PAGE, *pBindings, *this) + , m_aSwPageColControl(SID_ATTR_PAGE_COLUMN, *pBindings, *this) + , m_aSwPagePgMetricControl(SID_ATTR_METRIC, *pBindings, *this) + + , mpOrientationPopup() + , mpMarginPopup() + , mpSizePopup() + , mpColumnPopup() + + , mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify( false ) +{ + Initialize(); + mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify = true; + FreeResource(); +} + +PagePropertyPanel::~PagePropertyPanel() +{ + delete[] maImgSize; + delete[] maImgSize_L; + + // destroy the toolbox windows. + mpToolBoxOrientation.reset(); + mpToolBoxMargin.reset(); + mpToolBoxSize.reset(); + mpToolBoxColumn.reset(); + + // destroy the background windows of the toolboxes. + mpToolBoxOrientationBackground.reset(); + mpToolBoxMarginBackground.reset(); + mpToolBoxSizeBackground.reset(); + mpToolBoxColumnBackground.reset(); +} + +void PagePropertyPanel::Initialize() +{ + maFtOrientation.SetBackground(Wallpaper()); + maFtMargin.SetBackground(Wallpaper()); + maFtSize.SetBackground(Wallpaper()); + maFtColumn.SetBackground(Wallpaper()); + + // popup for page orientation + Link aLink = LINK( this, PagePropertyPanel, ClickOrientationHdl ); + mpToolBoxOrientation->SetDropdownClickHdl( aLink ); + mpToolBoxOrientation->SetSelectHdl( aLink ); + mpToolBoxOrientation->SetItemImage( TBI_ORIENTATION, mImgPortrait); + mpToolBoxOrientation->SetItemBits( TBI_ORIENTATION, mpToolBoxOrientation->GetItemBits( TBI_ORIENTATION ) | TIB_DROPDOWNONLY ); + mpToolBoxOrientation->SetQuickHelpText(TBI_ORIENTATION,String(SW_RES(STR_QHELP_TB_ORIENTATION))); + mpToolBoxOrientation->SetOutputSizePixel( mpToolBoxOrientation->CalcWindowSizePixel() ); + mpToolBoxOrientation->SetBackground( Wallpaper() ); + mpToolBoxOrientation->SetPaintTransparent( sal_True ); + + // popup for page margins + aLink = LINK( this, PagePropertyPanel, ClickMarginHdl ); + mpToolBoxMargin->SetDropdownClickHdl( aLink ); + mpToolBoxMargin->SetSelectHdl( aLink ); + mpToolBoxMargin->SetItemImage(TBI_MARGIN, mImgNormal); + mpToolBoxMargin->SetItemBits( TBI_MARGIN, mpToolBoxMargin->GetItemBits( TBI_MARGIN ) | TIB_DROPDOWNONLY ); + mpToolBoxMargin->SetQuickHelpText(TBI_MARGIN,String(SW_RES(STR_QHELP_TB_MARGIN))); + mpToolBoxMargin->SetOutputSizePixel( mpToolBoxMargin->CalcWindowSizePixel() ); + mpToolBoxMargin->SetBackground(Wallpaper()); + mpToolBoxMargin->SetPaintTransparent( sal_True ); + + // popup for page size + aLink = LINK( this, PagePropertyPanel, ClickSizeHdl ); + mpToolBoxSize->SetDropdownClickHdl( aLink ); + mpToolBoxSize->SetSelectHdl( aLink ); + mpToolBoxSize->SetItemImage(TBI_SIZE, mImgLetter); + mpToolBoxSize->SetItemBits( TBI_SIZE, mpToolBoxSize->GetItemBits( TBI_SIZE ) | TIB_DROPDOWNONLY ); + mpToolBoxSize->SetQuickHelpText(TBI_SIZE,String(SW_RES(STR_QHELP_TB_SIZE))); + mpToolBoxSize->SetOutputSizePixel( mpToolBoxSize->CalcWindowSizePixel() ); + mpToolBoxSize->SetBackground(Wallpaper()); + mpToolBoxSize->SetPaintTransparent( sal_True ); + maImgSize = new Image[8]; + maImgSize[0] = mImgA3; + maImgSize[1] = mImgA4; + maImgSize[2] = mImgA5; + maImgSize[3] = mImgB4; + maImgSize[4] = mImgB5; + maImgSize[5] = mImgC5; + maImgSize[6] = mImgLetter; + maImgSize[7] = mImgLegal; + maImgSize_L = new Image[8]; + maImgSize_L[0] = mImgA3_L; + maImgSize_L[1] = mImgA4_L; + maImgSize_L[2] = mImgA5_L; + maImgSize_L[3] = mImgB4_L; + maImgSize_L[4] = mImgB5_L; + maImgSize_L[5] = mImgC5_L; + maImgSize_L[6] = mImgLetter_L; + maImgSize_L[7] = mImgLegal_L; + + // popup for page column property + aLink = LINK( this, PagePropertyPanel, ClickColumnHdl ); + mpToolBoxColumn->SetDropdownClickHdl( aLink ); + mpToolBoxColumn->SetSelectHdl( aLink ); + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn1); + mpToolBoxColumn->SetItemBits( TBI_COLUMN, mpToolBoxColumn->GetItemBits( TBI_COLUMN ) | TIB_DROPDOWNONLY ); + mpToolBoxColumn->SetQuickHelpText(TBI_COLUMN,String(SW_RES(STR_QHELP_TB_COLUMN))); + mpToolBoxColumn->SetOutputSizePixel( mpToolBoxColumn->CalcWindowSizePixel() ); + mpToolBoxColumn->SetBackground(Wallpaper()); + mpToolBoxColumn->SetPaintTransparent( sal_True ); + + meFUnit = GetModuleFieldUnit(); + meUnit = m_aSwPagePgSizeControl.GetCoreMetric(); + + // 'pull' for page style's attribute values + mpBindings->Update( SID_ATTR_PAGE_LRSPACE ); + mpBindings->Update( SID_ATTR_PAGE_ULSPACE ); + mpBindings->Update( SID_ATTR_PAGE ); + mpBindings->Update( SID_ATTR_PAGE_SIZE ); +} + + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageOrientationControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageOrientationControl( pParent, *this , mpPageItem->IsLandscape() ); +} + + +IMPL_LINK( PagePropertyPanel, ClickOrientationHdl, ToolBox*, pToolBox ) +{ + if ( ! mpOrientationPopup) + { + mpOrientationPopup.reset( + new ::svx::sidebar::Popup( + this, + ::boost::bind(&PagePropertyPanel::CreatePageOrientationControl, this, _1), + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Page orientation")) ) ); + } + mpOrientationPopup->Show( *pToolBox ); + + return 0L; +} + + +void PagePropertyPanel::ExecuteOrientationChange( const sal_Bool bLandscape ) +{ + { + // set new page orientation + mpPageItem->SetLandscape( bLandscape ); + + // swap the width and height of the page size + mpPageSizeItem->SetSize( Size( mpPageSizeItem->GetSize().Height(), mpPageSizeItem->GetSize().Width() ) ); + + // apply changed attributes + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_SIZE, SFX_CALLMODE_RECORD, mpPageSizeItem.get(), mpPageItem.get(), 0L ); + } + + // check, if margin values still fit to the changed page size. + // if not, adjust margin values + { + const long nML = mpPageLRMarginItem->GetLeft(); + const long nMR = mpPageLRMarginItem->GetRight(); + const long nTmpPW = nML + nMR + MINBODY; + + const long nPW = mpPageSizeItem->GetSize().Width(); + + if ( nTmpPW > nPW ) + { + if ( nML <= nMR ) + { + ExecuteMarginLRChange( mpPageLRMarginItem->GetLeft(), nMR - (nTmpPW - nPW ) ); + } + else + { + ExecuteMarginLRChange( nML - (nTmpPW - nPW ), mpPageLRMarginItem->GetRight() ); + } + } + + const long nMT = mpPageULMarginItem->GetUpper(); + const long nMB = mpPageULMarginItem->GetLower(); + const long nTmpPH = nMT + nMB + MINBODY; + + const long nPH = mpPageSizeItem->GetSize().Height(); + + if ( nTmpPH > nPH ) + { + if ( nMT <= nMB ) + { + ExecuteMarginULChange( mpPageULMarginItem->GetUpper(), nMB - ( nTmpPH - nPH ) ); + } + else + { + ExecuteMarginULChange( nMT - ( nTmpPH - nPH ), mpPageULMarginItem->GetLower() ); + } + } + } +} + + +void PagePropertyPanel::ClosePageOrientationPopup() +{ + mpOrientationPopup->Hide(); +} + + + + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageMarginControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageMarginControl( + pParent, + *this, + *mpPageLRMarginItem.get(), + *mpPageULMarginItem.get(), + mpPageItem->GetPageUsage() == SVX_PAGE_MIRROR, + mpPageSizeItem->GetSize(), + mpPageItem->IsLandscape(), + meFUnit, + meUnit ); +} + + +void PagePropertyPanel::ExecuteMarginLRChange( + const long nPageLeftMargin, + const long nPageRightMargin ) +{ + mpPageLRMarginItem->SetLeft( nPageLeftMargin ); + mpPageLRMarginItem->SetRight( nPageRightMargin ); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_LRSPACE, SFX_CALLMODE_RECORD, mpPageLRMarginItem.get(), 0L ); +} + +void PagePropertyPanel::ExecuteMarginULChange( + const long nPageTopMargin, + const long nPageBottomMargin ) +{ + mpPageULMarginItem->SetUpper( nPageTopMargin ); + mpPageULMarginItem->SetLower( nPageBottomMargin ); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_ULSPACE, SFX_CALLMODE_RECORD, mpPageULMarginItem.get(), 0L ); +} + + +void PagePropertyPanel::ExecutePageLayoutChange( const bool bMirrored ) +{ + mpPageItem->SetPageUsage( bMirrored ? SVX_PAGE_MIRROR : SVX_PAGE_ALL ); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE, SFX_CALLMODE_RECORD, mpPageItem.get(), 0L ); +} + + +IMPL_LINK( PagePropertyPanel, ClickMarginHdl, ToolBox*, pToolBox ) +{ + if ( ! mpMarginPopup) + mpMarginPopup.reset( + new ::svx::sidebar::Popup( + this, + ::boost::bind(&PagePropertyPanel::CreatePageMarginControl, this, _1), + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Page margins")) ) ); + mpMarginPopup->Show( *pToolBox ); + + return 0L; +} + + +void PagePropertyPanel::ClosePageMarginPopup() +{ + mpMarginPopup->Hide(); +} + + + + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageSizeControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageSizeControl( + pParent, + *this, + mePaper, + mpPageItem->IsLandscape(), + meFUnit ); +} + + +void PagePropertyPanel::ExecuteSizeChange( const Paper ePaper ) +{ + Size aPageSize = SvxPaperInfo::GetPaperSize( ePaper, (MapUnit)(meUnit) ); + if ( mpPageItem->IsLandscape() ) + { + Swap( aPageSize ); + } + mpPageSizeItem->SetSize( aPageSize ); + + mpBindings->GetDispatcher()->Execute(SID_ATTR_PAGE_SIZE, SFX_CALLMODE_RECORD, mpPageSizeItem.get(), 0L ); +} + + +IMPL_LINK( PagePropertyPanel, ClickSizeHdl, ToolBox*, pToolBox ) +{ + if ( ! mpSizePopup) + mpSizePopup.reset( + new ::svx::sidebar::Popup( + this, + ::boost::bind(&PagePropertyPanel::CreatePageSizeControl, this, _1), + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Page size")) ) ); + mpSizePopup->Show( *pToolBox ); + + return 0L; +} + + +void PagePropertyPanel::ClosePageSizePopup() +{ + mpSizePopup->Hide(); +} + + + + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageColumnControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageColumnControl( + pParent, + *this, + mpPageColumnTypeItem->GetValue(), + mpPageItem->IsLandscape() ); +} + + +void PagePropertyPanel::ExecuteColumnChange( const sal_uInt16 nColumnType ) +{ + mpPageColumnTypeItem->SetValue( nColumnType ); + mpBindings->GetDispatcher()->Execute(SID_ATTR_PAGE_COLUMN, SFX_CALLMODE_RECORD, mpPageColumnTypeItem.get(), 0L ); +} + + +IMPL_LINK( PagePropertyPanel, ClickColumnHdl, ToolBox*, pToolBox ) +{ + if ( ! mpColumnPopup) + mpColumnPopup.reset( + new ::svx::sidebar::Popup( + this, + ::boost::bind(&PagePropertyPanel::CreatePageColumnControl, this, _1), + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Page columns")) ) ); + mpColumnPopup->Show( *pToolBox ); + + return 0L; +} + + +void PagePropertyPanel::ClosePageColumnPopup() +{ + mpColumnPopup->Hide(); +} + + + + +void PagePropertyPanel::NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState) +{ + switch( nSId ) + { + case SID_ATTR_PAGE_COLUMN: + { + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SfxInt16Item) ) + { + mpPageColumnTypeItem.reset( static_cast<SfxInt16Item*>(pState->Clone()) ); + ChangeColumnImage( mpPageColumnTypeItem->GetValue() ); + } + } + break; + case SID_ATTR_PAGE_LRSPACE: + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxLongLRSpaceItem) ) + { + mpPageLRMarginItem.reset( static_cast<SvxLongLRSpaceItem*>(pState->Clone()) ); + ChangeMarginImage(); + } + break; + + case SID_ATTR_PAGE_ULSPACE: + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxLongULSpaceItem) ) + { + mpPageULMarginItem.reset( static_cast<SvxLongULSpaceItem*>(pState->Clone()) ); + ChangeMarginImage(); + } + break; + + case SID_ATTR_PAGE: + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxPageItem) ) + { + mpPageItem.reset( static_cast<SvxPageItem*>(pState->Clone()) ); + if ( mpPageItem->IsLandscape() ) + { + mpToolBoxOrientation->SetItemImage(TBI_ORIENTATION, mImgLandscape); + } + else + { + mpToolBoxOrientation->SetItemImage(TBI_ORIENTATION, mImgPortrait); + } + ChangeMarginImage(); + ChangeSizeImage(); + ChangeColumnImage( mpPageColumnTypeItem->GetValue() ); + } + break; + + case SID_ATTR_PAGE_SIZE: + if ( mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify ) + { + mpBindings->Invalidate( SID_ATTR_PAGE, sal_True, sal_False ); + } + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxSizeItem) ) + { + mpPageSizeItem.reset( static_cast<SvxSizeItem*>(pState->Clone()) ); + ChangeSizeImage(); + } + break; + case SID_ATTR_METRIC: + MetricState( eState, pState ); + break; + } +} + + +void PagePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem* pState ) +{ + meFUnit = FUNIT_NONE; + if ( pState && eState >= SFX_ITEM_DEFAULT ) + { + meFUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue(); + } + else + { + SfxViewFrame* pFrame = SfxViewFrame::Current(); + SfxObjectShell* pSh = NULL; + if ( pFrame ) + pSh = pFrame->GetObjectShell(); + if ( pSh ) + { + SfxModule* pModule = pSh->GetModule(); + if ( pModule ) + { + const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC ); + if ( pItem ) + meFUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue(); + } + else + { + DBG_ERRORFILE( "<PagePropertyPanel::MetricState(..)>: no module found" ); + } + } + } +} + + + + +void PagePropertyPanel::ChangeMarginImage() +{ + if ( mpPageLRMarginItem.get() == 0 || + mpPageULMarginItem.get() == 0 || + mpPageItem.get() == 0 ) + { + return; + } + + const long cTolerance = 5; + + if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_NARROW_VALUE) <= cTolerance && + abs(mpPageLRMarginItem->GetRight() - SWPAGE_NARROW_VALUE) <= cTolerance && + abs(mpPageULMarginItem->GetUpper() - SWPAGE_NARROW_VALUE) <= cTolerance && + abs(mpPageULMarginItem->GetLower() - SWPAGE_NARROW_VALUE) <= cTolerance && + mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage( TBI_MARGIN, mpPageItem->IsLandscape() ? mImgNarrow_L : mImgNarrow ); + + else if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_NORMAL_VALUE) <= cTolerance && + abs(mpPageLRMarginItem->GetRight() - SWPAGE_NORMAL_VALUE) <= cTolerance && + abs(mpPageULMarginItem->GetUpper() - SWPAGE_NORMAL_VALUE) <= cTolerance && + abs(mpPageULMarginItem->GetLower() - SWPAGE_NORMAL_VALUE) <= cTolerance && + mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgNormal_L : mImgNormal ); + + else if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_WIDE_VALUE2) <= cTolerance && + abs(mpPageLRMarginItem->GetRight() - SWPAGE_WIDE_VALUE2) <= cTolerance && + abs(mpPageULMarginItem->GetUpper() - SWPAGE_WIDE_VALUE1) <= cTolerance && + abs(mpPageULMarginItem->GetLower() - SWPAGE_WIDE_VALUE1) <= cTolerance && + mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgWide_L : mImgWide ); + + else if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_WIDE_VALUE3) <= cTolerance && + abs(mpPageLRMarginItem->GetRight() - SWPAGE_WIDE_VALUE1) <= cTolerance && + abs(mpPageULMarginItem->GetUpper() - SWPAGE_WIDE_VALUE1) <= cTolerance && + abs(mpPageULMarginItem->GetLower() - SWPAGE_WIDE_VALUE1) <= cTolerance && + mpPageItem->GetPageUsage() == SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgMirrored_L : mImgMirrored ); + + else + mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgMarginCustom_L : mImgMarginCustom ); +} + + +void PagePropertyPanel::ChangeSizeImage() +{ + if ( mpPageSizeItem.get() == 0 || + mpPageItem.get() == 0 ) + { + return; + } + + Size aTmpPaperSize = mpPageSizeItem->GetSize(); + if ( mpPageItem->IsLandscape() ) + { + Swap( aTmpPaperSize ); // Swap(..) defined in editeng/paperinf.hxx + } + + mePaper = SvxPaperInfo::GetSvxPaper( aTmpPaperSize, static_cast<MapUnit>(meUnit), sal_True ); + + sal_uInt16 nImageIdx = 0; + switch ( mePaper ) + { + case PAPER_A3: + nImageIdx = 1; + break; + case PAPER_A4: + nImageIdx = 2; + break; + case PAPER_A5: + nImageIdx = 3; + break; + case PAPER_B4_ISO: + nImageIdx = 4; + break; + case PAPER_B5_ISO: + nImageIdx = 5; + break; + case PAPER_ENV_C5: + nImageIdx = 6; + break; + case PAPER_LETTER: + nImageIdx = 7; + break; + case PAPER_LEGAL: + nImageIdx = 8; + break; + default: + nImageIdx = 0; + mePaper = PAPER_USER; + break; + } + + if ( nImageIdx == 0 ) + { + mpToolBoxSize->SetItemImage( TBI_SIZE, + ( mpPageItem->IsLandscape() ? mImgSizeNone_L : mImgSizeNone ) ); + } + else + { + mpToolBoxSize->SetItemImage( TBI_SIZE, + ( mpPageItem->IsLandscape() ? maImgSize_L[nImageIdx-1] : maImgSize[nImageIdx-1] ) ); + } +} + + +void PagePropertyPanel::ChangeColumnImage( const sal_uInt16 nColumnType ) +{ + if ( mpPageItem.get() == 0 ) + { + return; + } + + if ( !mpPageItem->IsLandscape() ) + { + switch( nColumnType ) + { + case 1: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn1); + break; + case 2: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn2); + break; + case 3: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn3); + break; + case 4: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgLeft); + break; + case 5: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgRight); + break; + default: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumnNone); + } + } + else + { + switch( nColumnType ) + { + case 1: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn1_L); + break; + case 2: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn2_L); + break; + case 3: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn3_L); + break; + case 4: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgLeft_L); + break; + case 5: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgRight_L); + break; + default: + mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumnNone_L); + } + } +} + +} } // end of namespace ::sw::sidebar diff --git a/sw/source/ui/sidebar/PagePropertyPanel.hrc b/sw/source/ui/sidebar/PagePropertyPanel.hrc new file mode 100644 index 000000000000..b719dfce1206 --- /dev/null +++ b/sw/source/ui/sidebar/PagePropertyPanel.hrc @@ -0,0 +1,200 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#include "PropertyPanel.hrc" + +#define FT_ORIENTATION 1 +#define TB_ORIENTATION 2 +#define FT_MARGIN 3 +#define TB_MARGIN 4 +#define FT_SIZE 5 +#define TB_SIZE 6 +#define FT_COLUMN 7 +#define TB_COLUMN 8 +#define TBI_MARGIN 9 +#define IMG_PORTRAIT 10 +#define IMG_LANDSCAPE 11 +#define STR_PORTRAIT 12 +#define STR_LANDSCAPE 13 +#define ED_SWPAPER_WIDTH 14 +#define ED_SWPAPER_HEIGHT 15 +#define LB_SWPAPER_TRAY 16 +#define LB_SWPAPER_SIZE 17 +#define MF_SWLEFT_MARGIN 18 +#define MF_SWRIGHT_MARGIN 19 +#define MF_SWTOP_MARGIN 20 +#define MF_SWBOTTOM_MARGIN 21 +#define TBI_SIZE 22 +#define VS_SIZE 23 +#define STR_LCVALUE 24 +#define FT_CUSTOM 25 +#define FLD_WIDTH_HEIGHT 26 + +#define TBI_ORIENTATION 28 +#define VS_ORIENTATION 29 +#define IMG_PAGE_PORTRAIT 30 +#define IMG_PAGE_LANDSCAPE 31 +#define IMG_NARROW 32 +#define IMG_NORMAL 33 +#define IMG_WIDE 34 +#define IMG_MIRRORED 35 +#define STR_NARROW 36 +#define STR_NORMAL 37 +#define STR_WIDE 38 +#define STR_MIRRORED 39 +#define VS_MARGIN 40 +#define IMG_CUSTOM 41 +#define FT_LEFT 42 +#define FT_RIGHT 43 +#define FT_TOP 44 +#define FT_BOTTOM 45 +#define FT_INNER 46 +#define FT_OUTER 47 +#define TBI_COLUMN 48 +#define VS_COLUMN 49 +#define MBOX_WIDTH 50 +#define IMG_ONE 51 +#define IMG_TWO 52 +#define IMG_THREE 53 +#define IMG_LEFT 54 +#define IMG_RIGHT 55 +#define STR_ONE 56 +#define STR_TWO 57 +#define STR_THREE 58 +#define STR_LEFT 59 +#define STR_RIGHT 60 +#define CB_COLUMN_MORE 61 + +#define CB_SIZE_MORE 61 + +#define IMG_PAGE_NARROW 64 +#define IMG_PAGE_NORMAL 65 +#define IMG_PAGE_WIDE 63 +#define IMG_PAGE_MIRRORED 67 +#define IMG_PAGE_MARGIN_CUSTOM 68 +#define IMG_PAGE_A3 69 +#define IMG_PAGE_A4 70 +#define IMG_PAGE_A5 71 +#define IMG_PAGE_B4 72 +#define IMG_PAGE_B5 73 +#define IMG_PAGE_C5 74 +#define IMG_PAGE_LETTER 75 +#define IMG_PAGE_LEGAL 76 +#define IMG_PAGE_COLUMN_1 77 +#define IMG_PAGE_COLUMN_2 78 +#define IMG_PAGE_COLUMN_3 79 +#define IMG_PAGE_COLUMN_LEFT 80 +#define IMG_PAGE_COLUMN_RIGHT 81 +#define IMG_PAGE_SIZE_NONE 82 +#define IMG_PAGE_COLUMN_NONE 83 +#define IMG_PAGE_COLUMN_1_L 84 +#define IMG_PAGE_COLUMN_2_L 85 +#define IMG_PAGE_COLUMN_3_L 86 +#define IMG_PAGE_COLUMN_LEFT_L 87 +#define IMG_PAGE_COLUMN_RIGHT_L 88 +#define IMG_PAGE_COLUMN_NONE_L 89 +#define IMG_ONE_L 90 +#define IMG_TWO_L 91 +#define IMG_THREE_L 92 +#define IMG_LEFT_L 93 +#define IMG_RIGHT_L 94 +#define IMG_PAGE_A3_L 95 +#define IMG_PAGE_A4_L 96 +#define IMG_PAGE_A5_L 97 +#define IMG_PAGE_B4_L 98 +#define IMG_PAGE_B5_L 99 +#define IMG_PAGE_C5_L 100 +#define IMG_PAGE_LETTER_L 101 +#define IMG_PAGE_LEGAL_L 102 +#define IMG_PAGE_SIZE_NONE_L 103 +#define IMG_PAGE_NARROW_L 104 +#define IMG_PAGE_NORMAL_L 105 +#define IMG_PAGE_WIDE_L 106 +#define IMG_PAGE_MIRRORED_L 107 +#define IMG_PAGE_MARGIN_CUSTOM_L 108 +#define IMG_NARROW_L 109 +#define IMG_NORMAL_L 110 +#define IMG_WIDE_L 111 +#define IMG_MIRRORED_L 112 +#define FLD_LEFT_MARGIN 113 +#define FLD_RIGHT_MARGIN 114 +#define FLD_TOP_MARGIN 115 +#define FLD_BOTTOM_MARGIN 116 + +#define STR_QHELP_TB_ORIENTATION 117 +#define STR_QHELP_TB_MARGIN 118 +#define STR_QHELP_TB_SIZE 119 +#define STR_QHELP_TB_COLUMN 120 +#define IMG_CUSTOM_DIS 121 +// +#define STR_MARGIN_TOOLTIP_LEFT 122 +#define STR_MARGIN_TOOLTIP_RIGHT 123 +#define STR_MARGIN_TOOLTIP_INNER 124 +#define STR_MARGIN_TOOLTIP_OUTER 125 +#define STR_MARGIN_TOOLTIP_TOP 126 +#define STR_MARGIN_TOOLTIP_BOT 127 + +#define POPUP_MARGIN 4 +#define VS_WIDTH 78 +#define ITEM_HEIGHT 17 +#define ITEM_HEIGHT2 15 + +//========================================Position============================================== + +#define FT_ORIENTATION_X SECTIONPAGE_MARGIN_HORIZONTAL +#define FT_ORIENTATION_Y SECTIONPAGE_MARGIN_VERTICAL_TOP +#define TBX_ORIENTATION_X FT_ORIENTATION_X +#define TBX_ORIENTATION_Y FT_ORIENTATION_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL +#define FT_MARGIN_X FT_ORIENTATION_X + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL +#define FT_MARGIN_Y FT_ORIENTATION_Y +#define TBX_MARGIN_X FT_MARGIN_X +#define TBX_MARGIN_Y TBX_ORIENTATION_Y +#define FT_SIZE_X FT_ORIENTATION_X +#define FT_SIZE_Y TBX_ORIENTATION_Y + 20 + CONTROL_SPACING_VERTICAL +#define TBX_SIZE_X FT_SIZE_X +#define TBX_SIZE_Y FT_SIZE_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL +#define FT_COLUMN_X FT_MARGIN_X +#define FT_COLUMN_Y FT_SIZE_Y +#define TBX_COLUMN_X FT_COLUMN_X +#define TBX_COLUMN_Y TBX_SIZE_Y + +#define FT_CUSTOM_X POPUP_MARGIN + OFFSET_X +#define FT_CUSTOM_Y POPUPPANEL_MARGIN_SMALL * 2 + ITEM_HEIGHT * 5 + +#define POP_BORDER_X POPUP_MARGIN + OFFSET_X + 1 +#define POP_BORDER_Y POPUPPANEL_MARGIN_SMALL * 3 + ITEM_HEIGHT * 5 + TEXT_HEIGHT +#define BD_WIDTH VS_WIDTH - 6 +#define BD_HEIGHT MBOX_HEIGHT*4 + CONTROL_SPACING_VERTICAL*5 + +#define FT_X POP_BORDER_X + CONTROL_SPACING_HORIZONTAL +#define MF_X FT_X + 25 + CONTROL_SPACING_HORIZONTAL +#define LEFT_MF_Y POP_BORDER_Y + CONTROL_SPACING_VERTICAL +#define RIGHT_MF_Y LEFT_MF_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define TOP_MF_Y RIGHT_MF_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define BOTTOM_MF_Y TOP_MF_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define FT_LEFT_Y LEFT_MF_Y + 1 +#define FT_RIGHT_Y RIGHT_MF_Y + 1 +#define FT_TOP_Y TOP_MF_Y + 1 +#define FT_BOTTOM_Y BOTTOM_MF_Y + 1 + +#define MARGIN_PANEL_HEIGHT POP_BORDER_Y + BD_HEIGHT + POPUP_MARGIN + OFFSET_Y +#define CUST_MORE_BUTTON_IMG_OFF_X POPUPPANEL_MARGIN_HORIZONTAL + OFFSET_X +#define PAGE_HEIGHT TBX_COLUMN_Y + 20 + SECTIONPAGE_MARGIN_VERTICAL_BOT
\ No newline at end of file diff --git a/sw/source/ui/sidebar/PagePropertyPanel.hxx b/sw/source/ui/sidebar/PagePropertyPanel.hxx new file mode 100644 index 000000000000..912988ba233f --- /dev/null +++ b/sw/source/ui/sidebar/PagePropertyPanel.hxx @@ -0,0 +1,223 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#ifndef SW_SIDEBAR_PAGE_PROPERTY_PANEL_HXX +#define SW_SIDEBAR_PAGE_PROPERTY_PANEL_HXX + +#include <svx/sidebar/Popup.hxx> + +#include <sfx2/sidebar/ControllerItem.hxx> + +namespace svx { namespace sidebar { + class PopupControl; +} } + +#include <i18npool/paper.hxx> + +#include <svx/pageitem.hxx> +#include <svx/rulritem.hxx> +#include <editeng/sizeitem.hxx> + +#include <vcl/ctrl.hxx> +#include <vcl/fixed.hxx> +#include <vcl/button.hxx> +#include <vcl/toolbox.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/field.hxx> +#include <svl/intitem.hxx> + +#include <boost/scoped_ptr.hpp> + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + +namespace sw { namespace sidebar { + + class PagePropertyPanel + : public Control, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + { + public: + static PagePropertyPanel* Create( + Window* pParent, + SfxBindings* pBindings ); + + // interface of ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState ); + + SfxBindings* GetBindings() const + { + return mpBindings; + } + + + ::svx::sidebar::PopupControl* CreatePageOrientationControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteOrientationChange( const sal_Bool bLandscape ); + void ClosePageOrientationPopup(); + + ::svx::sidebar::PopupControl* CreatePageMarginControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteMarginLRChange( + const long nPageLeftMargin, + const long nPageRightMargin ); + void ExecuteMarginULChange( + const long nPageTopMargin, + const long nPageBottomMargin ); + void ExecutePageLayoutChange( const bool bMirrored ); + void ClosePageMarginPopup(); + + ::svx::sidebar::PopupControl* CreatePageSizeControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteSizeChange( const Paper ePaper ); + void ClosePageSizePopup(); + + ::svx::sidebar::PopupControl* CreatePageColumnControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteColumnChange( const sal_uInt16 nColumnType ); + void ClosePageColumnPopup(); + + private: + PagePropertyPanel( + Window* pParent, + SfxBindings* pBindings ); + virtual ~PagePropertyPanel(void); + + SfxBindings* mpBindings; + + // toolboxes - on click open corresponding popup + FixedText maFtOrientation; + ::boost::scoped_ptr<Window> mpToolBoxOrientationBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxOrientation; + FixedText maFtMargin; + ::boost::scoped_ptr<Window> mpToolBoxMarginBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxMargin; + FixedText maFtSize; + ::boost::scoped_ptr<Window> mpToolBoxSizeBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxSize; + FixedText maFtColumn; + ::boost::scoped_ptr<Window> mpToolBoxColumnBackground; + ::boost::scoped_ptr<ToolBox> mpToolBoxColumn; + + Image* maImgSize; + Image* maImgSize_L; + Image mImgPortrait; + Image mImgLandscape; + Image mImgNarrow; + Image mImgNormal; + Image mImgWide; + Image mImgMirrored; + Image mImgMarginCustom; + Image mImgNarrow_L; + Image mImgNormal_L; + Image mImgWide_L; + Image mImgMirrored_L; + Image mImgMarginCustom_L; + Image mImgA3; + Image mImgA4; + Image mImgA5; + Image mImgB4; + Image mImgB5; + Image mImgC5; + Image mImgLetter; + Image mImgLegal; + Image mImgSizeNone; + Image mImgA3_L; + Image mImgA4_L; + Image mImgA5_L; + Image mImgB4_L; + Image mImgB5_L; + Image mImgC5_L; + Image mImgLetter_L; + Image mImgLegal_L; + Image mImgSizeNone_L; + Image mImgColumn1; + Image mImgColumn2; + Image mImgColumn3; + Image mImgLeft; + Image mImgRight; + Image mImgColumnNone; + Image mImgColumn1_L; + Image mImgColumn2_L; + Image mImgColumn3_L; + Image mImgLeft_L; + Image mImgRight_L; + Image mImgColumnNone_L; + + // item keeping the following page style attributes: + // - page orientation + // - page usage - only left, only right, both, mirrored + // item also hold the numbering type for the page style which should + // be kept stable. + ::boost::scoped_ptr<SvxPageItem> mpPageItem; + + // item keeping the page style's left and right margins + ::boost::scoped_ptr<SvxLongLRSpaceItem> mpPageLRMarginItem; + // item keeping the page style's top and bottom margins + ::boost::scoped_ptr<SvxLongULSpaceItem> mpPageULMarginItem; + + // item keeping the page style's page size + ::boost::scoped_ptr<SvxSizeItem> mpPageSizeItem; + // Paper corresponding to the page style's page size + Paper mePaper; + + // item keeping the page column type + ::boost::scoped_ptr<SfxInt16Item> mpPageColumnTypeItem; + + FieldUnit meFUnit; + SfxMapUnit meUnit; + + // controller items + ::sfx2::sidebar::ControllerItem m_aSwPagePgULControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgLRControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgSizeControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgControl; + ::sfx2::sidebar::ControllerItem m_aSwPageColControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgMetricControl; + + // popups + ::boost::scoped_ptr< ::svx::sidebar::Popup > mpOrientationPopup; + ::boost::scoped_ptr< ::svx::sidebar::Popup > mpMarginPopup; + ::boost::scoped_ptr< ::svx::sidebar::Popup > mpSizePopup; + ::boost::scoped_ptr< ::svx::sidebar::Popup > mpColumnPopup; + + bool mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify; + + // handler for popup toolboxes to show the popups + DECL_LINK(ClickOrientationHdl, ToolBox* ); + DECL_LINK(ClickMarginHdl, ToolBox* ); + DECL_LINK(ClickSizeHdl, ToolBox* ); + DECL_LINK(ClickColumnHdl, ToolBox* ); + + void Initialize(); + + void MetricState( SfxItemState eState, const SfxPoolItem* pState ); + + // helper to adjust popup toolbox' images + void ChangeMarginImage(); + void ChangeSizeImage(); + void ChangeColumnImage( const sal_uInt16 nColumnType ); + + }; + +} } // end of namespace ::sw::sidebar + +#endif diff --git a/sw/source/ui/sidebar/PagePropertyPanel.src b/sw/source/ui/sidebar/PagePropertyPanel.src new file mode 100644 index 000000000000..c9e3ade902c3 --- /dev/null +++ b/sw/source/ui/sidebar/PagePropertyPanel.src @@ -0,0 +1,698 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#include <sfx2/sidebar/propertypanel.hrc> +#include "PropertyPanel.hrc" +#include "PagePropertyPanel.hrc" +#include "helpid.h" + +// page property panel control +Control RID_PROPERTYPANEL_SWPAGE +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, PAGE_HEIGHT ); + HelpID = HID_PROPERTYPANEL_SWPAGE_SECTION; + Text = "Page"; + + FixedText FT_ORIENTATION + { + Pos = MAP_APPFONT ( FT_ORIENTATION_X, FT_ORIENTATION_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, TEXT_HEIGHT) ; + Text [ en-US ] = "~Orientation:"; + }; + ToolBox TB_ORIENTATION + { + Pos = MAP_APPFONT (TBX_ORIENTATION_X, TBX_ORIENTATION_Y) ; + HelpID = HID_SWPAGE_ORIENTATION; + SVLook = TRUE ; + TabStop = TRUE ; + Text = "Orientation" ; + ItemList = + { + ToolBoxItem + { + HelpID = HID_SWPAGE_TBI_ORIENTATION; + Identifier = TBI_ORIENTATION ; + Text [ en-US ] = "Orientation" ; + DropDown = TRUE ; + }; + }; + }; + String STR_QHELP_TB_ORIENTATION + { + Text [ en-US ] = "Select the paper orientation - vertically (portrait) or horizontally (landscape) - for the current page style."; + }; + + FixedText FT_MARGIN + { + Pos = MAP_APPFONT ( FT_MARGIN_X, FT_MARGIN_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH + 50, TEXT_HEIGHT) ; + Text [ en-US ] = "~Margin:"; + }; + ToolBox TB_MARGIN + { + SVLook = TRUE ; + Pos = MAP_APPFONT (TBX_MARGIN_X, TBX_MARGIN_Y) ; + HelpID = HID_SWPAGE_MARGIN; + TabStop = TRUE ; + Text = "Margin" ; + ItemList = + { + ToolBoxItem + { + HelpID = HID_SWPAGE_TBI_MARGIN; + Identifier = TBI_MARGIN ; + Text [ en-US ] = "Margin" ; + DropDown = TRUE ; + }; + }; + }; + String STR_QHELP_TB_MARGIN + { + Text [ en-US ] = "Select the margin values for the current page style."; + }; + + FixedText FT_SIZE + { + Pos = MAP_APPFONT ( FT_SIZE_X, FT_SIZE_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH, TEXT_HEIGHT) ; + Text [ en-US ] = "~Size:"; + }; + ToolBox TB_SIZE + { + SVLook = TRUE ; + Pos = MAP_APPFONT ( TBX_SIZE_X , TBX_SIZE_Y ) ; + HelpID = HID_SWPAGE_SIZE; + TabStop = TRUE ; + Text = "Size" ; + ItemList = + { + ToolBoxItem + { + HelpID = HID_SWPAGE_TBI_SIZE; + Identifier = TBI_SIZE ; + Text [ en-US ] = "Size" ; + DropDown = TRUE ; + }; + }; + }; + String STR_QHELP_TB_SIZE + { + Text [ en-US ] = "Select a predefined paper size for the current page style."; + }; + + FixedText FT_COLUMN + { + Pos = MAP_APPFONT ( FT_COLUMN_X, FT_COLUMN_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH + 50, TEXT_HEIGHT) ; + Text [ en-US ] = "~Column:"; + }; + ToolBox TB_COLUMN + { + SVLook = TRUE ; + Pos = MAP_APPFONT ( TBX_COLUMN_X , TBX_COLUMN_Y ) ; + HelpID = HID_SWPAGE_COLUMN; + TabStop = TRUE ; + Text = "Column" ; + ItemList = + { + ToolBoxItem + { + HelpID = HID_SWPAGE_TBI_COLUMN; + Identifier = TBI_COLUMN; + Text [ en-US ] = "Column" ; + DropDown = TRUE ; + }; + }; + }; + String STR_QHELP_TB_COLUMN + { + Text [ en-US ] = "Select the layout and the number of columns for the current page style."; + }; + + Image IMG_PAGE_PORTRAIT + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/portraitcopy_24x24.png";}; + }; + Image IMG_PAGE_LANDSCAPE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/Landscapecopy_24x24.png";}; + }; + Image IMG_PAGE_NARROW + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_narrow_24x24.png";}; + }; + Image IMG_PAGE_NORMAL + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_nomal_24x24.png";}; + }; + Image IMG_PAGE_WIDE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_wide_24x24.png";}; + }; + Image IMG_PAGE_MIRRORED + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_mirror_24x24.png";}; + }; + Image IMG_PAGE_MARGIN_CUSTOM + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_copy_24x24.png";}; + }; + Image IMG_PAGE_NARROW_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatnarrow_24x24.png";}; + }; + Image IMG_PAGE_NORMAL_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatnormal_24x24.png";}; + }; + Image IMG_PAGE_WIDE_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatwide_24x24.png";}; + }; + Image IMG_PAGE_MIRRORED_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatmirror_24x24.png";}; + }; + Image IMG_PAGE_MARGIN_CUSTOM_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatcopy_24x24.png";}; + }; + Image IMG_PAGE_A3 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_A3_24x24.png";}; + }; + Image IMG_PAGE_A4 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_A4_24x24.png";}; + }; + Image IMG_PAGE_A5 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_A5_24x24.png";}; + }; + Image IMG_PAGE_B4 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_B4_24x24.png";}; + }; + Image IMG_PAGE_B5 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_B5_24x24.png";}; + }; + Image IMG_PAGE_C5 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_C5_24x24.png";}; + }; + Image IMG_PAGE_LETTER + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_copy_24x24.png";}; + }; + Image IMG_PAGE_LEGAL + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_copy_24x24.png";}; + }; + Image IMG_PAGE_SIZE_NONE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsize_L_copy_24x24.png";}; + }; + Image IMG_PAGE_A3_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizeA3_24x24.png";}; + }; + Image IMG_PAGE_A4_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizeA4_24x24.png";}; + }; + Image IMG_PAGE_A5_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizeA5_24x24.png";}; + }; + Image IMG_PAGE_B4_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizeB4_24x24.png";}; + }; + Image IMG_PAGE_B5_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizeB5_24x24.png";}; + }; + Image IMG_PAGE_C5_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizeC5_24x24.png";}; + }; + Image IMG_PAGE_LETTER_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizecopy_24x24.png";}; + }; + Image IMG_PAGE_LEGAL_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizecopy_24x24.png";}; + }; + Image IMG_PAGE_SIZE_NONE_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/documentsizecopy_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_1 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_1_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_2 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_2_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_3 + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_3_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_LEFT + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_left_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_RIGHT + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_right_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_NONE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_copy_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_1_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column1_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_2_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column2_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_3_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column3_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_LEFT_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/columnleft_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_RIGHT_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/columnright_24x24.png";}; + }; + Image IMG_PAGE_COLUMN_NONE_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/columncopy_24x24.png";}; + }; +}; + +// popup for page orientation attribute +Control RID_POPUP_SWPAGE_ORIENTATION +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_WIDTH, ITEM_HEIGHT*2 + POPUPPANEL_MARGIN_SMALL*2 ); + + Control VS_ORIENTATION + { + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X, POPUPPANEL_MARGIN_SMALL + OFFSET_Y); + Size = MAP_APPFONT ( VS_WIDTH , ITEM_HEIGHT*2); + HelpID = HID_SWPAGE_VS_ORIENTATION; + TabStop = TRUE ; + Text = "Orientation"; + }; + Image IMG_PORTRAIT + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/portraitcopy_24x24.png";}; + }; + Image IMG_LANDSCAPE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/Landscapecopy_24x24.png";}; + }; + String STR_PORTRAIT + { + Text [ en-US ] = "Portrait"; + }; + String STR_LANDSCAPE + { + Text [ en-US ] = "Landscape"; + }; +}; + +// popup for page style's margin attributes +Control RID_POPUP_SWPAGE_MARGIN +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_WIDTH, MARGIN_PANEL_HEIGHT ); + + Control VS_MARGIN + { + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X, POPUPPANEL_MARGIN_SMALL + OFFSET_Y ); + Size = MAP_APPFONT ( VS_WIDTH , ITEM_HEIGHT*5); + HelpID = HID_SWPAGE_VS_MARGIN; + TabStop = TRUE ; + Text = "Margin"; + }; + FixedText FT_CUSTOM + { + Pos = MAP_APPFONT ( FT_CUSTOM_X, FT_CUSTOM_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH + 30, TEXT_HEIGHT) ; + Text [ en-US ] = "Custom:"; + }; + FixedText FT_LEFT + { + Pos = MAP_APPFONT ( FT_X, FT_LEFT_Y ); + Size = MAP_APPFONT ( 25, TEXT_HEIGHT) ; + Text [ en-US ] = "~Left:"; + }; + FixedText FT_INNER + { + Pos = MAP_APPFONT ( FT_X, FT_LEFT_Y ); + Size = MAP_APPFONT ( 25, TEXT_HEIGHT) ; + Text [ en-US ] = "I~nner:"; + }; + MetricField MF_SWLEFT_MARGIN + { + Border = TRUE; + Pos = MAP_APPFONT ( MF_X , LEFT_MF_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH - 12, MBOX_HEIGHT ); + HelpID = HID_SWPAGE_LEFT_MARGIN; + Left = TRUE; + Repeat = TRUE; + Spin = TRUE; + Maximum = 9999; + DecimalDigits = 2; + Unit = FUNIT_CM; + Last = 9999; + SpinSize = 10; + }; + FixedText FT_RIGHT + { + Pos = MAP_APPFONT ( FT_X, FT_RIGHT_Y ); + Size = MAP_APPFONT ( 25, TEXT_HEIGHT) ; + Text [ en-US ] = "~Right:"; + }; + FixedText FT_OUTER + { + Pos = MAP_APPFONT ( FT_X, FT_RIGHT_Y ); + Size = MAP_APPFONT ( 25, TEXT_HEIGHT) ; + Text [ en-US ] = "O~uter:"; + }; + MetricField MF_SWRIGHT_MARGIN + { + Border = TRUE; + Pos = MAP_APPFONT ( MF_X , RIGHT_MF_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH - 12, MBOX_HEIGHT ); + HelpID = HID_SWPAGE_RIGHT_MARGIN; + Left = TRUE; + Repeat = TRUE; + Spin = TRUE; + Maximum = 9999; + DecimalDigits = 2; + Unit = FUNIT_CM; + Last = 9999; + SpinSize = 10; + }; + FixedText FT_TOP + { + Pos = MAP_APPFONT ( FT_X, FT_TOP_Y ); + Size = MAP_APPFONT ( 25, TEXT_HEIGHT) ; + Text [ en-US ] = "~Top:"; + }; + MetricField MF_SWTOP_MARGIN + { + Border = TRUE; + Pos = MAP_APPFONT ( MF_X , TOP_MF_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH - 12, MBOX_HEIGHT ); + HelpID = HID_SWPAGE_TOP_MARGIN; + Left = TRUE; + Repeat = TRUE; + Spin = TRUE; + Maximum = 9999; + DecimalDigits = 2; + Unit = FUNIT_CM; + Last = 9999; + SpinSize = 10; + }; + FixedText FT_BOTTOM + { + Pos = MAP_APPFONT ( FT_X, FT_BOTTOM_Y ); + Size = MAP_APPFONT ( 25, TEXT_HEIGHT) ; + Text [ en-US ] = "~Bottom:"; + }; + MetricField MF_SWBOTTOM_MARGIN + { + Border = TRUE; + Pos = MAP_APPFONT ( MF_X , BOTTOM_MF_Y ); + Size = MAP_APPFONT ( MBOX_WIDTH - 12, MBOX_HEIGHT ); + HelpID = HID_SWPAGE_BOTTOM_MARGIN; + Left = TRUE; + Repeat = TRUE; + Spin = TRUE; + Maximum = 9999; + DecimalDigits = 2; + Unit = FUNIT_CM; + Last = 9999; + SpinSize = 10; + }; + MetricField FLD_WIDTH_HEIGHT + { + Border = TRUE; + Left = TRUE; + Repeat = TRUE; + Spin = TRUE; + Maximum = 9999; + DecimalDigits = 2; + Unit = FUNIT_CM; + Last = 9999; + SpinSize = 10; + }; + + Image IMG_NARROW + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_narrow_24x24.png";}; + }; + Image IMG_NORMAL + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_nomal_24x24.png";}; + }; + Image IMG_WIDE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_wide_24x24.png";}; + }; + Image IMG_MIRRORED + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/format_L_mirror_24x24.png";}; + }; + Image IMG_NARROW_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatnarrow_24x24.png";}; + }; + Image IMG_NORMAL_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatnormal_24x24.png";}; + }; + Image IMG_WIDE_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatwide_24x24.png";}; + }; + Image IMG_MIRRORED_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/formatmirror_24x24.png";}; + }; + Image IMG_CUSTOM + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/last_custom_common.png";}; + }; + Image IMG_CUSTOM_DIS + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/last_custom_common_grey.png";}; + }; + String STR_LCVALUE + { + Text [ en-US ] = "Last Custom Values"; + }; + String STR_NARROW + { + Text [ en-US ] = "Narrow"; + }; + String STR_NORMAL + { + Text [ en-US ] = "Normal"; + }; + String STR_WIDE + { + Text [ en-US ] = "Wide"; + }; + String STR_MIRRORED + { + Text [ en-US ] = "Mirrored"; + }; + String STR_MARGIN_TOOLTIP_LEFT + { + Text [ en-US ] = "Left: "; + }; + String STR_MARGIN_TOOLTIP_RIGHT + { + Text [ en-US ] = ". Right: "; + }; + String STR_MARGIN_TOOLTIP_INNER + { + Text [ en-US ] = "Inner: "; + }; + String STR_MARGIN_TOOLTIP_OUTER + { + Text [ en-US ] = ". Outer: "; + }; + String STR_MARGIN_TOOLTIP_TOP + { + Text [ en-US ] = ". Top: "; + }; + String STR_MARGIN_TOOLTIP_BOT + { + Text [ en-US ] = ". Bottom: "; + }; +}; + +// popup for page style's page size +Control RID_POPUP_SWPAGE_SIZE +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_WIDTH + 22, ITEM_HEIGHT2*8 + POPUPPANEL_MARGIN_SMALL*2 + CONTROL_SPACING_VERTICAL + 15 ); + + Control VS_SIZE + { + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X, POPUPPANEL_MARGIN_SMALL + OFFSET_Y); + Size = MAP_APPFONT ( VS_WIDTH + 22 , ITEM_HEIGHT2*8); + HelpID = HID_SWPAGE_VS_SIZE; + TabStop = TRUE ; + Text = "Size"; + }; + PushButton CB_SIZE_MORE + { + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_SMALL + 2*OFFSET_X, POPUPPANEL_MARGIN_SMALL + 2*OFFSET_Y + ITEM_HEIGHT2*8 ) ; + Size = MAP_APPFONT ( VS_WIDTH - 2 + 22, 15 ) ; + HelpID = HID_SWPAGE_SIZE_MORE; + TabStop = TRUE ; + Text [ en-US ] = "~More Options"; + QuickHelpText [ en-US ] = "More Options" ; + }; + MetricField FLD_WIDTH_HEIGHT + { + Border = TRUE; + Left = TRUE; + Repeat = TRUE; + Spin = TRUE; + Maximum = 9999; + DecimalDigits = 2; + Unit = FUNIT_CM; + Last = 9999; + SpinSize = 10; + }; +}; + +// popup for page style's column attribute +Control RID_POPUP_SWPAGE_COLUMN +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + Size = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_WIDTH - 15, ITEM_HEIGHT*5 + POPUPPANEL_MARGIN_SMALL*2 + CONTROL_SPACING_VERTICAL + 15 ); + + Control VS_COLUMN + { + Pos = MAP_APPFONT( POPUPPANEL_MARGIN_SMALL + OFFSET_X, POPUPPANEL_MARGIN_SMALL + OFFSET_Y); + Size = MAP_APPFONT ( VS_WIDTH -15 , ITEM_HEIGHT*5); + HelpID = HID_SWPAGE_VS_COLUMN; + TabStop = TRUE ; + Text = "Column"; + }; + PushButton CB_COLUMN_MORE + { + Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_SMALL + 2*OFFSET_X, POPUPPANEL_MARGIN_SMALL + 2*OFFSET_Y + ITEM_HEIGHT*5 ) ; + Size = MAP_APPFONT ( VS_WIDTH - 2 - 15, 15 ) ; + HelpID = HID_SWPAGE_COLUMN_MORE; + TabStop = TRUE ; + Text [ en-US ] = "~More Options"; + QuickHelpText [ en-US ] = "More Options" ; + }; + Image IMG_ONE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_1_24x24.png";}; + }; + Image IMG_TWO + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_2_24x24.png";}; + }; + Image IMG_THREE + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_3_24x24.png";}; + }; + Image IMG_LEFT + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_left_24x24.png";}; + }; + Image IMG_RIGHT + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column_L_right_24x24.png";}; + }; + Image IMG_ONE_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column1_24x24.png";}; + }; + Image IMG_TWO_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column2_24x24.png";}; + }; + Image IMG_THREE_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/column3_24x24.png";}; + }; + Image IMG_LEFT_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/columnleft_24x24.png";}; + }; + Image IMG_RIGHT_L + { + ImageBitmap = Bitmap{File = "sidebar/pageproppanel/columnright_24x24.png";}; + }; + String STR_ONE + { + Text [ en-US ] = "1 Column"; + }; + String STR_TWO + { + Text [ en-US ] = "2 Columns"; + }; + String STR_THREE + { + Text [ en-US ] = "3 Columns"; + }; + String STR_LEFT + { + Text [ en-US ] = "Left"; + }; + String STR_RIGHT + { + Text [ en-US ] = "Right"; + }; +}; diff --git a/sw/source/ui/sidebar/PageSizeControl.cxx b/sw/source/ui/sidebar/PageSizeControl.cxx new file mode 100644 index 000000000000..c54f3ee35b13 --- /dev/null +++ b/sw/source/ui/sidebar/PageSizeControl.cxx @@ -0,0 +1,186 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sw.hxx" + +#include "PageSizeControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <cmdid.h> +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> + +#include <tools/inetmime.hxx> +#include <editeng/paperinf.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> + + +namespace sw { namespace sidebar { + +PageSizeControl::PageSizeControl( + Window* pParent, + PagePropertyPanel& rPanel, + const Paper ePaper, + const sal_Bool bLandscape, + const FieldUnit eFUnit ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_SIZE) ) + , mpSizeValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::TEXT_TEXT, this, SW_RES(VS_SIZE) ) ) + , maMoreButton( this, SW_RES(CB_SIZE_MORE) ) + , maWidthHeightField( this, SW_RES(FLD_WIDTH_HEIGHT) ) + , mePaper( ePaper ) + , maPaperList() + , mrPagePropPanel(rPanel) +{ + maWidthHeightField.Hide(); + SetFieldUnit( maWidthHeightField, eFUnit ); + + maPaperList.push_back( PAPER_A3 ); + maPaperList.push_back( PAPER_A4 ); + maPaperList.push_back( PAPER_A5 ); + maPaperList.push_back( PAPER_B4_ISO ); + maPaperList.push_back( PAPER_B5_ISO ); + maPaperList.push_back( PAPER_ENV_C5 ); + maPaperList.push_back( PAPER_LETTER ); + maPaperList.push_back( PAPER_LEGAL ); + + mpSizeValueSet->SetStyle( mpSizeValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpSizeValueSet->SetColor( GetSettings().GetStyleSettings().GetMenuColor() ); + + sal_uInt16 nSelectedItem = 0; + { + XubString aMetricStr; + { + const XubString aText = maWidthHeightField.GetText(); + for (short i = aText.Len() - 1; i >= 0; i--) + { + xub_Unicode c = aText.GetChar(i); + if ( INetMIME::isAlpha(c) || (c == '\'') || (c == '\"') || (c == '%') ) + { + aMetricStr.Insert(c, 0); + } + else + { + if (aMetricStr.Len()) + { + break; + } + } + } + } + + const LocaleDataWrapper& localeDataWrapper = maWidthHeightField.GetLocaleDataWrapper(); + String WidthStr; + String HeightStr; + String ItemText2; + for ( ::std::vector< Paper >::size_type nPaperIdx = 0; + nPaperIdx < maPaperList.size(); + ++nPaperIdx ) + { + Size aPaperSize = SvxPaperInfo::GetPaperSize( maPaperList[ nPaperIdx ] ); + if ( bLandscape ) + { + Swap( aPaperSize ); + } + maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Width() ), FUNIT_TWIP ); + WidthStr = localeDataWrapper.getNum( + maWidthHeightField.GetValue(), + maWidthHeightField.GetDecimalDigits(), + maWidthHeightField.IsUseThousandSep(), + maWidthHeightField.IsShowTrailingZeros() ); + + maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Height() ), FUNIT_TWIP); + HeightStr = localeDataWrapper.getNum( + maWidthHeightField.GetValue(), + maWidthHeightField.GetDecimalDigits(), + maWidthHeightField.IsUseThousandSep(), + maWidthHeightField.IsShowTrailingZeros() ); + + ItemText2 = HeightStr; + ItemText2 += String::CreateFromAscii(" x "); + ItemText2 += WidthStr; + ItemText2 += String::CreateFromAscii(" "); + ItemText2 += aMetricStr; + + mpSizeValueSet->AddItem( + SvxPaperInfo::GetName( maPaperList[ nPaperIdx ] ), + ItemText2, + 0 ); + + if ( maPaperList[ nPaperIdx ] == mePaper ) + { + nSelectedItem = nPaperIdx + 1; + } + } + } + + mpSizeValueSet->SetNoSelection(); + mpSizeValueSet->SetSelectHdl( LINK(this, PageSizeControl,ImplSizeHdl ) ); + mpSizeValueSet->Show(); + + mpSizeValueSet->SelectItem( nSelectedItem ); + mpSizeValueSet->Format(); + mpSizeValueSet->StartSelection(); + + maMoreButton.SetClickHdl( LINK( this, PageSizeControl, MoreButtonClickHdl_Impl ) ); + maMoreButton.GrabFocus(); + + FreeResource(); +} + + +PageSizeControl::~PageSizeControl(void) +{ + delete mpSizeValueSet; +} + + +IMPL_LINK(PageSizeControl, ImplSizeHdl, void *, pControl) +{ + mpSizeValueSet->SetNoSelection(); + if ( pControl == mpSizeValueSet ) + { + const sal_uInt16 nSelectedPaper = mpSizeValueSet->GetSelectItemId(); + const Paper ePaper = maPaperList[nSelectedPaper - 1]; + if ( ePaper != mePaper ) + { + mePaper = ePaper; + mrPagePropPanel.ExecuteSizeChange( mePaper ); + } + } + + mrPagePropPanel.ClosePageSizePopup(); + return 0; +} + +IMPL_LINK(PageSizeControl, MoreButtonClickHdl_Impl, void *, EMPTYARG) +{ + mrPagePropPanel.GetBindings()->GetDispatcher()->Execute( FN_FORMAT_PAGE_SETTING_DLG, SFX_CALLMODE_ASYNCHRON ); + + mrPagePropPanel.ClosePageSizePopup(); + return 0; +} + + +} } // end of namespace sw::sidebar + diff --git a/sw/source/ui/sidebar/PageSizeControl.hxx b/sw/source/ui/sidebar/PageSizeControl.hxx new file mode 100644 index 000000000000..4e472f4ac05e --- /dev/null +++ b/sw/source/ui/sidebar/PageSizeControl.hxx @@ -0,0 +1,73 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#ifndef _SW_SIDEBAR_PAGE_SIZE_CONTROL_HXX_ +#define _SW_SIDEBAR_PAGE_SIZE_CONTROL_HXX_ + +#include <svx/sidebar/PopupControl.hxx> + +#include <i18npool/paper.hxx> + +#include <vcl/button.hxx> +#include <vcl/field.hxx> +#include <svtools/unitconv.hxx> + +#include <vector> + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + + +class PageSizeControl + : public ::svx::sidebar::PopupControl +{ +public: + PageSizeControl( + Window* pParent, + PagePropertyPanel& rPanel, + const Paper ePaper, + const sal_Bool bLandscape, + const FieldUnit eFUnit ); + ~PageSizeControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpSizeValueSet; + PushButton maMoreButton; + // hidden metric field + MetricField maWidthHeightField; + + Paper mePaper; + ::std::vector< Paper > maPaperList; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK(ImplSizeHdl, void*); + DECL_LINK(MoreButtonClickHdl_Impl, void*); +}; + +} } // end of namespace sw::sidebar + +#endif diff --git a/sw/source/ui/sidebar/PropertyPanel.hrc b/sw/source/ui/sidebar/PropertyPanel.hrc new file mode 100644 index 000000000000..066db8fadd1b --- /dev/null +++ b/sw/source/ui/sidebar/PropertyPanel.hrc @@ -0,0 +1,42 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#ifndef _SW_PROPERTY_PANEL_HRC +#define _SW_PROPERTY_PANEL_HRC + +#include "rcid.hrc" + +#define RID_PROPERTYPANEL_SWOBJWRAP_PAGE (RC_PROPERTYPANEL_BEGIN + 1) +#define RID_PROPERTYPANEL_SWPAGE (RC_PROPERTYPANEL_BEGIN + 2) +#define RID_POPUP_SWPAGE_MARGIN (RC_PROPERTYPANEL_BEGIN + 3) +#define RID_POPUP_SWPAGE_ORIENTATION (RC_PROPERTYPANEL_BEGIN + 4) +#define RID_POPUP_SWPAGE_COLUMN (RC_PROPERTYPANEL_BEGIN + 5) +#define RID_POPUP_SWPAGE_SIZE (RC_PROPERTYPANEL_BEGIN + 6) + +#define PROPERTY_PANEL_END RID_POPUP_SWPAGE_SIZE + +#if PROPERTY_SECTION_END > RC_PROPERTYPANEL_END +#error Resource-Id Ueberlauf in #file, #line +#endif + +#endif + + diff --git a/sw/source/ui/sidebar/SwPanelFactory.cxx b/sw/source/ui/sidebar/SwPanelFactory.cxx new file mode 100644 index 000000000000..9d5f043bc300 --- /dev/null +++ b/sw/source/ui/sidebar/SwPanelFactory.cxx @@ -0,0 +1,152 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_sw.hxx" + +#include "SwPanelFactory.hxx" + +#include <PagePropertyPanel.hxx> +#include <WrapPropertyPanel.hxx> +#include <navipi.hxx> + +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sfxbasecontroller.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <vcl/window.hxx> +#include <rtl/ref.hxx> +#include <comphelper/namedvaluecollection.hxx> + +#include <boost/bind.hpp> + + +using namespace css; +using namespace cssu; +using ::rtl::OUString; + + +namespace sw { namespace sidebar { + +#define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) +#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.sw.sidebar.SwPanelFactory" +#define SERVICE_NAME "com.sun.star.ui.UIElementFactory" + + +::rtl::OUString SAL_CALL SwPanelFactory::getImplementationName (void) +{ + return A2S(IMPLEMENTATION_NAME); +} + + +cssu::Reference<cssu::XInterface> SAL_CALL SwPanelFactory::createInstance( + const uno::Reference<lang::XMultiServiceFactory>& ) +{ + ::rtl::Reference<SwPanelFactory> pPanelFactory (new SwPanelFactory()); + cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pPanelFactory.get()), cssu::UNO_QUERY); + return xService; +} + + +cssu::Sequence<OUString> SAL_CALL SwPanelFactory::getSupportedServiceNames (void) +{ + cssu::Sequence<OUString> aServiceNames (1); + aServiceNames[0] = A2S(SERVICE_NAME); + return aServiceNames; + +} + + +SwPanelFactory::SwPanelFactory (void) + : PanelFactoryInterfaceBase(m_aMutex) +{ +} + + +SwPanelFactory::~SwPanelFactory (void) +{ +} + + +Reference<ui::XUIElement> SAL_CALL SwPanelFactory::createUIElement ( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + container::NoSuchElementException, + lang::IllegalArgumentException, + RuntimeException) +{ + Reference<ui::XUIElement> xElement; + + const ::comphelper::NamedValueCollection aArguments (rArguments); + Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); + Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); + const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0))); + SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue); + + ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); + if ( ! xParentWindow.is() || pParentWindow==NULL) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without ParentWindow"), + NULL); + if ( ! xFrame.is()) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without Frame"), + NULL); + if (pBindings == NULL) + throw RuntimeException( + A2S("PanelFactory::createUIElement called without SfxBindings"), + NULL); + +#define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s)) + if (DoesResourceEndWith("/PagePropertyPanel")) + { + PagePropertyPanel* pPanel = PagePropertyPanel::Create( pParentWindow, pBindings ); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(-1,-1,-1)); + } + else if (DoesResourceEndWith("/WrapPropertyPanel")) + { + WrapPropertyPanel* pPanel = WrapPropertyPanel::Create( pParentWindow, xFrame, pBindings ); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(-1,-1,-1)); + } + else if (DoesResourceEndWith("/NavigatorPanel")) + { + Window* pPanel = new SwNavigationPI(pBindings, NULL, pParentWindow); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(0,-1,-1)); + } +#undef DoesResourceEndWith + + return xElement; +} + +} } // end of namespace sw::sidebar + +// eof diff --git a/sw/source/ui/sidebar/WrapPropertyPanel.cxx b/sw/source/ui/sidebar/WrapPropertyPanel.cxx new file mode 100644 index 000000000000..5a47697c142c --- /dev/null +++ b/sw/source/ui/sidebar/WrapPropertyPanel.cxx @@ -0,0 +1,266 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#include "precompiled_sw.hxx" + +#include "WrapPropertyPanel.hxx" +#include "WrapPropertyPanel.hrc" +#include "PropertyPanel.hrc" + +#include <cmdid.h> +#include <swtypes.hxx> + +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <sfx2/imagemgr.hxx> +#include <svl/eitem.hxx> +#include <vcl/svapp.hxx> + +#include "com/sun/star/lang/IllegalArgumentException.hpp" + +#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) + + +namespace sw { namespace sidebar { + +WrapPropertyPanel* WrapPropertyPanel::Create ( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw ::com::sun::star::lang::IllegalArgumentException(A2S("no parent Window given to PagePropertyPanel::Create"), NULL, 0); + if ( ! rxFrame.is()) + throw ::com::sun::star::lang::IllegalArgumentException(A2S("no XFrame given to PagePropertyPanel::Create"), NULL, 1); + if (pBindings == NULL) + throw ::com::sun::star::lang::IllegalArgumentException(A2S("no SfxBindings given to PagePropertyPanel::Create"), NULL, 2); + + return new WrapPropertyPanel( + pParent, + rxFrame, + pBindings); +} + + +WrapPropertyPanel::WrapPropertyPanel( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame, + SfxBindings* pBindings ) + : Control(pParent, SW_RES(RID_PROPERTYPANEL_SWOBJWRAP_PAGE)) + , mxFrame( rxFrame ) + , mpBindings(pBindings) + // visible controls + , mpRBNoWrap( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_NO_WRAP) ) ) + , mpRBWrapLeft( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_LEFT) ) ) + , mpRBWrapRight( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_RIGHT) ) ) + , mpRBWrapParallel( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_PARALLEL) ) ) + , mpRBWrapThrough( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_THROUGH) ) ) + , mpRBIdealWrap( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_IDEAL) ) ) + // resources + , aWrapIL(6,2) + , aWrapILH(6,2) + // controller items + , maSwNoWrapControl(FN_FRAME_NOWRAP, *pBindings, *this) + , maSwWrapLeftControl(FN_FRAME_WRAP, *pBindings, *this) + , maSwWrapRightControl(FN_FRAME_WRAP_RIGHT, *pBindings, *this) + , maSwWrapParallelControl(FN_FRAME_WRAP_LEFT, *pBindings, *this) + , maSwWrapThroughControl(FN_FRAME_WRAPTHRU, *pBindings, *this) + , maSwWrapIdealControl(FN_FRAME_WRAP_IDEAL, *pBindings, *this) +{ + Initialize(); + FreeResource(); +} + + +WrapPropertyPanel::~WrapPropertyPanel() +{ +} + + +void WrapPropertyPanel::Initialize() +{ + Link aLink = LINK(this, WrapPropertyPanel, WrapTypeHdl); + mpRBNoWrap->SetClickHdl(aLink); + mpRBWrapLeft->SetClickHdl(aLink); + mpRBWrapRight->SetClickHdl(aLink); + mpRBWrapParallel->SetClickHdl(aLink); + mpRBWrapThrough->SetClickHdl(aLink); + mpRBIdealWrap->SetClickHdl(aLink); + + aWrapIL.AddImage( IMG_NONE, + ::GetImage( mxFrame, A2S(".uno:WrapOff"), sal_False, sal_False ) ); + aWrapIL.AddImage( IMG_LEFT, + ::GetImage( mxFrame, A2S(".uno:WrapLeft"), sal_False, sal_False ) ); + aWrapIL.AddImage( IMG_RIGHT, + ::GetImage( mxFrame, A2S(".uno:WrapRight"), sal_False, sal_False ) ); + aWrapIL.AddImage( IMG_PARALLEL, + ::GetImage( mxFrame, A2S(".uno:WrapOn"), sal_False, sal_False ) ); + aWrapIL.AddImage( IMG_THROUGH, + ::GetImage( mxFrame, A2S(".uno:WrapThrough"), sal_False, sal_False ) ); + aWrapIL.AddImage( IMG_IDEAL, + ::GetImage( mxFrame, A2S(".uno:WrapIdeal"), sal_False, sal_False ) ); + + aWrapILH.AddImage( IMG_NONE, + ::GetImage( mxFrame, A2S(".uno:WrapOff"), sal_False, sal_True ) ); + aWrapILH.AddImage( IMG_LEFT, + ::GetImage( mxFrame, A2S(".uno:WrapLeft"), sal_False, sal_True ) ); + aWrapILH.AddImage( IMG_RIGHT, + ::GetImage( mxFrame, A2S(".uno:WrapRight"), sal_False, sal_True ) ); + aWrapILH.AddImage( IMG_PARALLEL, + ::GetImage( mxFrame, A2S(".uno:WrapOn"), sal_False, sal_True ) ); + aWrapILH.AddImage( IMG_THROUGH, + ::GetImage( mxFrame, A2S(".uno:WrapThrough"), sal_False, sal_True ) ); + aWrapILH.AddImage( IMG_IDEAL, + ::GetImage( mxFrame, A2S(".uno:WrapIdeal"), sal_False, sal_True ) ); + + mpRBNoWrap->SetModeRadioImage( aWrapIL.GetImage(IMG_NONE) ); + mpRBNoWrap->SetModeRadioImage( aWrapILH.GetImage(IMG_NONE) , BMP_COLOR_HIGHCONTRAST ); + if ( Application::GetSettings().GetLayoutRTL() ) + { + mpRBWrapLeft->SetModeRadioImage( aWrapIL.GetImage(IMG_RIGHT) ); + mpRBWrapLeft->SetModeRadioImage( aWrapILH.GetImage(IMG_RIGHT) , BMP_COLOR_HIGHCONTRAST ); + mpRBWrapRight->SetModeRadioImage( aWrapIL.GetImage(IMG_LEFT) ); + mpRBWrapRight->SetModeRadioImage( aWrapILH.GetImage(IMG_LEFT) , BMP_COLOR_HIGHCONTRAST ); + } + else + { + mpRBWrapLeft->SetModeRadioImage( aWrapIL.GetImage(IMG_LEFT) ); + mpRBWrapLeft->SetModeRadioImage( aWrapILH.GetImage(IMG_LEFT) , BMP_COLOR_HIGHCONTRAST ); + mpRBWrapRight->SetModeRadioImage( aWrapIL.GetImage(IMG_RIGHT) ); + mpRBWrapRight->SetModeRadioImage( aWrapILH.GetImage(IMG_RIGHT) , BMP_COLOR_HIGHCONTRAST ); + } + mpRBWrapParallel->SetModeRadioImage( aWrapIL.GetImage(IMG_PARALLEL) ); + mpRBWrapParallel->SetModeRadioImage( aWrapILH.GetImage(IMG_PARALLEL) , BMP_COLOR_HIGHCONTRAST ); + mpRBWrapThrough->SetModeRadioImage( aWrapIL.GetImage(IMG_THROUGH) ); + mpRBWrapThrough->SetModeRadioImage( aWrapILH.GetImage(IMG_THROUGH) , BMP_COLOR_HIGHCONTRAST ); + mpRBIdealWrap->SetModeRadioImage( aWrapIL.GetImage(IMG_IDEAL) ); + mpRBIdealWrap->SetModeRadioImage( aWrapILH.GetImage(IMG_IDEAL) , BMP_COLOR_HIGHCONTRAST ); + + mpRBNoWrap->SetAccessibleName(mpRBNoWrap->GetQuickHelpText()); + mpRBWrapLeft->SetAccessibleName(mpRBWrapLeft->GetQuickHelpText()); + mpRBWrapRight->SetAccessibleName(mpRBWrapRight->GetQuickHelpText()); + mpRBWrapParallel->SetAccessibleName(mpRBWrapParallel->GetQuickHelpText()); + mpRBWrapThrough->SetAccessibleName(mpRBWrapThrough->GetQuickHelpText()); + mpRBIdealWrap->SetAccessibleName(mpRBIdealWrap->GetQuickHelpText()); + + mpBindings->Update( FN_FRAME_NOWRAP ); + mpBindings->Update( FN_FRAME_WRAP ); + mpBindings->Update( FN_FRAME_WRAP_RIGHT ); + mpBindings->Update( FN_FRAME_WRAP_LEFT ); + mpBindings->Update( FN_FRAME_WRAPTHRU ); + mpBindings->Update( FN_FRAME_WRAP_IDEAL ); +} + + +IMPL_LINK(WrapPropertyPanel, WrapTypeHdl, void *, EMPTYARG) +{ + sal_uInt16 nSlot = 0; + if ( mpRBWrapLeft->IsChecked() ) + { + nSlot = FN_FRAME_WRAP_LEFT; + } + else if( mpRBWrapRight->IsChecked() ) + { + nSlot = FN_FRAME_WRAP_RIGHT; + } + else if ( mpRBWrapParallel->IsChecked() ) + { + nSlot = FN_FRAME_WRAP; + } + else if( mpRBWrapThrough->IsChecked() ) + { + nSlot = FN_FRAME_WRAPTHRU; + } + else if( mpRBIdealWrap->IsChecked() ) + { + nSlot = FN_FRAME_WRAP_IDEAL; + } + else + { + nSlot = FN_FRAME_NOWRAP; + } + SfxBoolItem bStateItem( nSlot, sal_True ); + mpBindings->GetDispatcher()->Execute( nSlot, SFX_CALLMODE_RECORD, &bStateItem, 0L ); + + return 0; +} + + +void WrapPropertyPanel::NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState ) +{ + if ( eState == SFX_ITEM_AVAILABLE && + pState->ISA(SfxBoolItem) ) + { + //Set Radio Button enable + mpRBNoWrap->Enable(true); + mpRBWrapLeft->Enable(true); + mpRBWrapRight->Enable(true); + mpRBWrapParallel->Enable(true); + mpRBWrapThrough->Enable(true); + mpRBIdealWrap->Enable(true); + + const SfxBoolItem* pBoolItem = static_cast< const SfxBoolItem* >( pState ); + switch( nSId ) + { + case FN_FRAME_WRAP_RIGHT: + mpRBWrapRight->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAP_LEFT: + mpRBWrapLeft->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAPTHRU: + mpRBWrapThrough->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAP_IDEAL: + mpRBIdealWrap->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAP: + mpRBWrapParallel->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_NOWRAP: + default: + mpRBNoWrap->Check( pBoolItem->GetValue() ); + break; + } + } + else + { + mpRBNoWrap->Enable(false); + mpRBWrapLeft->Enable(false); + mpRBWrapRight->Enable(false); + mpRBWrapParallel->Enable(false); + mpRBWrapThrough->Enable(false); + mpRBIdealWrap->Enable(false); + + mpRBNoWrap->Check( sal_False ); + mpRBWrapLeft->Check( sal_False ); + mpRBWrapRight->Check( sal_False ); + mpRBWrapParallel->Check( sal_False ); + mpRBWrapThrough->Check( sal_False ); + mpRBIdealWrap->Check( sal_False ); + } +} + +} } // end of namespace ::sw::sidebar diff --git a/sw/source/ui/sidebar/WrapPropertyPanel.hrc b/sw/source/ui/sidebar/WrapPropertyPanel.hrc new file mode 100644 index 000000000000..c7989b80a518 --- /dev/null +++ b/sw/source/ui/sidebar/WrapPropertyPanel.hrc @@ -0,0 +1,42 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#ifndef _SW_WRAPPROPERTYPANEL_HRC +#define _SW_WRAPPROPERTYPANEL_HRC + +// RID_PROPERTYPANEL_SWOBJWRAP_PAGE +#define RB_NO_WRAP 1 +#define RB_WRAP_LEFT 2 +#define RB_WRAP_RIGHT 3 +#define RB_WRAP_PARALLEL 4 +#define RB_WRAP_THROUGH 5 +#define RB_WRAP_IDEAL 6 + +// only for the ImageLists +#define IMG_BEGIN 1 +#define IMG_NONE (IMG_BEGIN) +#define IMG_LEFT (IMG_BEGIN + 1) +#define IMG_RIGHT (IMG_BEGIN + 2) +#define IMG_PARALLEL (IMG_BEGIN + 3) +#define IMG_THROUGH (IMG_BEGIN + 4) +#define IMG_IDEAL (IMG_BEGIN + 5) + +#endif
\ No newline at end of file diff --git a/sw/source/ui/sidebar/WrapPropertyPanel.hxx b/sw/source/ui/sidebar/WrapPropertyPanel.hxx new file mode 100644 index 000000000000..27d1b9c39a47 --- /dev/null +++ b/sw/source/ui/sidebar/WrapPropertyPanel.hxx @@ -0,0 +1,89 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#ifndef SW_SIDEBAR_WRAP_PROPERTY_PANEL_HXX +#define SW_SIDEBAR_WRAP_PROPERTY_PANEL_HXX + +#include <vcl/button.hxx> +#include <vcl/image.hxx> + +#include <sfx2/sidebar/ControllerItem.hxx> +#include <com/sun/star/frame/XFrame.hpp> + +#include <boost/scoped_ptr.hpp> + + +namespace sw { namespace sidebar { + + class WrapPropertyPanel + : public Control + , public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + { + public: + static WrapPropertyPanel* Create( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame, + SfxBindings* pBindings ); + + // interface of ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState ); + + private: + WrapPropertyPanel( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame, + SfxBindings* pBindings ); + + virtual ~WrapPropertyPanel(); + + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame; + SfxBindings* mpBindings; + + ::boost::scoped_ptr<ImageRadioButton> mpRBNoWrap; + ::boost::scoped_ptr<ImageRadioButton> mpRBWrapLeft; + ::boost::scoped_ptr<ImageRadioButton> mpRBWrapRight; + ::boost::scoped_ptr<ImageRadioButton> mpRBWrapParallel; + ::boost::scoped_ptr<ImageRadioButton> mpRBWrapThrough; + ::boost::scoped_ptr<ImageRadioButton> mpRBIdealWrap; + + //Image resource. + ImageList aWrapIL; + ImageList aWrapILH; + + //Controler Items================================== + ::sfx2::sidebar::ControllerItem maSwNoWrapControl; + ::sfx2::sidebar::ControllerItem maSwWrapLeftControl; + ::sfx2::sidebar::ControllerItem maSwWrapRightControl; + ::sfx2::sidebar::ControllerItem maSwWrapParallelControl; + ::sfx2::sidebar::ControllerItem maSwWrapThroughControl; + ::sfx2::sidebar::ControllerItem maSwWrapIdealControl; + + void Initialize(); + + DECL_LINK(WrapTypeHdl, void*); + }; + +} } // end of namespace ::sw::sidebar + +#endif diff --git a/sw/source/ui/sidebar/WrapPropertyPanel.src b/sw/source/ui/sidebar/WrapPropertyPanel.src new file mode 100644 index 000000000000..ceb4157ad398 --- /dev/null +++ b/sw/source/ui/sidebar/WrapPropertyPanel.src @@ -0,0 +1,90 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#include <sfx2/sidebar/propertypanel.hrc> +#include "PropertyPanel.hrc" +#include "WrapPropertyPanel.hrc" +#include "helpid.h" + +#define IMAGEBUTTON_WIDTH 16 +#define IMAGEBUTTON_HEIGH 18 +#define IMAGEBUTTON_GAP 1 + +Control RID_PROPERTYPANEL_SWOBJWRAP_PAGE +{ + OutputSize = TRUE; + DialogControl = TRUE; + Border = FALSE; + + Size = MAP_APPFONT( PROPERTYPAGE_WIDTH, SECTIONPAGE_MARGIN_VERTICAL_BOT + SECTIONPAGE_MARGIN_VERTICAL_TOP + IMAGEBUTTON_HEIGH ); + HelpID = HID_PROPERTYPANEL_WRAP_SECTION ; + Text [ en-US ] = "Wrap"; + + + ImageRadioButton RB_NO_WRAP + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL, SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT ( IMAGEBUTTON_WIDTH , IMAGEBUTTON_HEIGH ); + TopImage = True; + HelpID = HID_PROPERTYPANEL_WRAP_RB_NO_WRAP ; + QuickHelpText [ en-US ] = "None"; + }; + ImageRadioButton RB_WRAP_LEFT + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + IMAGEBUTTON_WIDTH + IMAGEBUTTON_GAP, SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT ( IMAGEBUTTON_WIDTH , IMAGEBUTTON_HEIGH ); + TopImage = True; + HelpID = HID_PROPERTYPANEL_WRAP_RB_WRAP_LEFT ; + QuickHelpText [ en-US ] = "Before"; + }; + ImageRadioButton RB_WRAP_RIGHT + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + (IMAGEBUTTON_WIDTH + IMAGEBUTTON_GAP)*2 , SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT ( IMAGEBUTTON_WIDTH , IMAGEBUTTON_HEIGH ); + TopImage = True; + HelpID = HID_PROPERTYPANEL_WRAP_RB_WRAP_RIGHT ; + QuickHelpText [ en-US ] = "After"; + }; + ImageRadioButton RB_WRAP_PARALLEL + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + (IMAGEBUTTON_WIDTH + IMAGEBUTTON_GAP)*3 , SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT (IMAGEBUTTON_WIDTH , IMAGEBUTTON_HEIGH ); + TopImage = True; + HelpID = HID_PROPERTYPANEL_WRAP_RB_WRAP_PARALLEL ; + QuickHelpText [ en-US ] = "Parallel"; + }; + ImageRadioButton RB_WRAP_THROUGH + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + (IMAGEBUTTON_WIDTH + IMAGEBUTTON_GAP)*4 , SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT (IMAGEBUTTON_WIDTH , IMAGEBUTTON_HEIGH ); + TopImage = True; + HelpID = HID_PROPERTYPANEL_WRAP_RB_WRAP_THROUGH ; + QuickHelpText [ en-US ] = "Through"; + }; + ImageRadioButton RB_WRAP_IDEAL + { + Pos = MAP_APPFONT ( SECTIONPAGE_MARGIN_HORIZONTAL + (IMAGEBUTTON_WIDTH + IMAGEBUTTON_GAP)*5 , SECTIONPAGE_MARGIN_VERTICAL_TOP ); + Size = MAP_APPFONT (IMAGEBUTTON_WIDTH , IMAGEBUTTON_HEIGH ); + TopImage = True; + HelpID = HID_PROPERTYPANEL_WRAP_RB_WRAP_IDEAL ; + QuickHelpText [ en-US ] = "Optimal"; + }; +}; diff --git a/sw/source/ui/uiview/view0.cxx b/sw/source/ui/uiview/view0.cxx index 667c002a7117..1c0a1af6d727 100644 --- a/sw/source/ui/uiview/view0.cxx +++ b/sw/source/ui/uiview/view0.cxx @@ -43,6 +43,7 @@ #include <sfx2/templdlg.hxx> #include <sfx2/viewfrm.hxx> #include <sfx2/bindings.hxx> +#include <sfx2/sidebar/SidebarChildWindow.hxx> #include <uivwimp.hxx> #include <avmedia/mediaplayer.hxx> //#include <swlinguconfig.hxx> @@ -109,6 +110,7 @@ SFX_IMPL_INTERFACE( SwView, SfxViewShell, SW_RES(RID_TOOLS_TOOLBOX) ) { SFX_CHILDWINDOW_CONTEXT_REGISTRATION(SID_NAVIGATOR); SFX_CHILDWINDOW_REGISTRATION(SID_TASKPANE); + SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(SfxTemplateDialogWrapper::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(SvxSearchDialogWrapper::GetChildWindowId()); SFX_CHILDWINDOW_REGISTRATION(SwSpellDialogChildWindow::GetChildWindowId()); diff --git a/sw/source/ui/uiview/view1.cxx b/sw/source/ui/uiview/view1.cxx index cfc5e379b939..1f8d69312d14 100644 --- a/sw/source/ui/uiview/view1.cxx +++ b/sw/source/ui/uiview/view1.cxx @@ -28,6 +28,7 @@ #include <svx/svdpagv.hxx> #include <svx/svdview.hxx> #include <svx/ruler.hxx> +#include <svx/sidebar/ContextChangeEventMultiplexer.hxx> #include <idxmrk.hxx> #ifndef _VIEW_HXX #include <view.hxx> diff --git a/sw/source/ui/uiview/view2.cxx b/sw/source/ui/uiview/view2.cxx index 88cf635f78c4..f2eff43c2a5b 100644 --- a/sw/source/ui/uiview/view2.cxx +++ b/sw/source/ui/uiview/view2.cxx @@ -1093,9 +1093,9 @@ void __EXPORT SwView::Execute(SfxRequest &rReq) case SID_ALIGN_ANY_HCENTER : nAlias = SID_ATTR_PARA_ADJUST_CENTER; break; case SID_ALIGN_ANY_RIGHT : nAlias = SID_ATTR_PARA_ADJUST_RIGHT; break; case SID_ALIGN_ANY_JUSTIFIED: nAlias = SID_ATTR_PARA_ADJUST_BLOCK; break; - case SID_ALIGN_ANY_TOP : nAlias = FN_TABLE_VERT_NONE; break; - case SID_ALIGN_ANY_VCENTER : nAlias = FN_TABLE_VERT_CENTER; break; - case SID_ALIGN_ANY_BOTTOM : nAlias = FN_TABLE_VERT_BOTTOM; break; + case SID_ALIGN_ANY_TOP : nAlias = SID_TABLE_VERT_NONE; break; + case SID_ALIGN_ANY_VCENTER : nAlias = SID_TABLE_VERT_CENTER; break; + case SID_ALIGN_ANY_BOTTOM : nAlias = SID_TABLE_VERT_BOTTOM; break; } } else diff --git a/sw/source/ui/uiview/viewstat.cxx b/sw/source/ui/uiview/viewstat.cxx index 43e2547974c8..c0073d99e231 100644 --- a/sw/source/ui/uiview/viewstat.cxx +++ b/sw/source/ui/uiview/viewstat.cxx @@ -389,9 +389,9 @@ void SwView::GetState(SfxItemSet &rSet) case SID_ALIGN_ANY_HCENTER : nAlias = SID_ATTR_PARA_ADJUST_CENTER; break; case SID_ALIGN_ANY_RIGHT : nAlias = SID_ATTR_PARA_ADJUST_RIGHT; break; case SID_ALIGN_ANY_JUSTIFIED: nAlias = SID_ATTR_PARA_ADJUST_BLOCK; break; - case SID_ALIGN_ANY_TOP : nAlias = FN_TABLE_VERT_NONE; break; - case SID_ALIGN_ANY_VCENTER : nAlias = FN_TABLE_VERT_CENTER; break; - case SID_ALIGN_ANY_BOTTOM : nAlias = FN_TABLE_VERT_BOTTOM; break; + case SID_ALIGN_ANY_TOP : nAlias = SID_TABLE_VERT_NONE; break; + case SID_ALIGN_ANY_VCENTER : nAlias = SID_TABLE_VERT_CENTER; break; + case SID_ALIGN_ANY_BOTTOM : nAlias = SID_TABLE_VERT_BOTTOM; break; } } else if(nSelectionType & (nsSelectionType::SEL_DRW)) diff --git a/sw/source/ui/uiview/viewtab.cxx b/sw/source/ui/uiview/viewtab.cxx index 9c267016962f..34552df9e946 100644 --- a/sw/source/ui/uiview/viewtab.cxx +++ b/sw/source/ui/uiview/viewtab.cxx @@ -296,231 +296,249 @@ void SwView::ExecTabWin( SfxRequest& rReq ) rSh.StartAllAction(); sal_Bool bSect = 0 != (nFrmType & FRMTYPE_COLSECT); - switch ( nSlot ) + switch( nSlot ) { case SID_ATTR_LONG_LRSPACE: - { - SvxLongLRSpaceItem aLongLR( (const SvxLongLRSpaceItem&)rReq.GetArgs()-> - Get( SID_ATTR_LONG_LRSPACE ) ); - SvxLRSpaceItem aLR(RES_LR_SPACE); - if ( !bSect && (bFrmSelection || nFrmType & FRMTYPE_FLY_ANY) ) { - SwFrmFmt* pFmt = ((SwFrmFmt*)rSh.GetFlyFrmFmt()); - const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED); - - sal_Bool bVerticalFrame(sal_False); + SvxLongLRSpaceItem aLongLR( (const SvxLongLRSpaceItem&)rReq.GetArgs()-> + Get( SID_ATTR_LONG_LRSPACE ) ); + SvxLRSpaceItem aLR(RES_LR_SPACE); + if ( !bSect && (bFrmSelection || nFrmType & FRMTYPE_FLY_ANY) ) { - sal_Bool bRTL; - sal_Bool bVertL2R; - bVerticalFrame = ( bFrmSelection && - rSh.IsFrmVertical(sal_True, bRTL, bVertL2R) ) || - ( !bFrmSelection && bVerticalWriting); - } - long nDeltaX = bVerticalFrame ? - rRect.Right() - rPageRect.Right() + aLongLR.GetRight() : - rPageRect.Left() + aLongLR.GetLeft() - rRect.Left(); + SwFrmFmt* pFmt = ((SwFrmFmt*)rSh.GetFlyFrmFmt()); + const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED); - SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE, - RES_VERT_ORIENT, RES_HORI_ORIENT, - RES_COL, RES_COL, 0 ); + sal_Bool bVerticalFrame(sal_False); + { + sal_Bool bRTL; + sal_Bool bVertL2R; + bVerticalFrame = ( bFrmSelection && + rSh.IsFrmVertical(sal_True, bRTL, bVertL2R) ) || + ( !bFrmSelection && bVerticalWriting); + } + long nDeltaX = bVerticalFrame ? + rRect.Right() - rPageRect.Right() + aLongLR.GetRight() : + rPageRect.Left() + aLongLR.GetLeft() - rRect.Left(); - if(bVerticalFrame) - { - SwFmtVertOrient aVertOrient(pFmt->GetVertOrient()); - aVertOrient.SetVertOrient(text::VertOrientation::NONE); - aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaX ); - aSet.Put( aVertOrient ); - } - else - { - SwFmtHoriOrient aHoriOrient( pFmt->GetHoriOrient() ); - aHoriOrient.SetHoriOrient( text::HoriOrientation::NONE ); - aHoriOrient.SetPos( aHoriOrient.GetPos() + nDeltaX ); - aSet.Put( aHoriOrient ); - } + SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE, + RES_VERT_ORIENT, RES_HORI_ORIENT, + RES_COL, RES_COL, 0 ); - SwFmtFrmSize aSize( pFmt->GetFrmSize() ); - long nOldWidth = (long) aSize.GetWidth(); + if(bVerticalFrame) + { + SwFmtVertOrient aVertOrient(pFmt->GetVertOrient()); + aVertOrient.SetVertOrient(text::VertOrientation::NONE); + aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaX ); + aSet.Put( aVertOrient ); + } + else + { + SwFmtHoriOrient aHoriOrient( pFmt->GetHoriOrient() ); + aHoriOrient.SetHoriOrient( text::HoriOrientation::NONE ); + aHoriOrient.SetPos( aHoriOrient.GetPos() + nDeltaX ); + aSet.Put( aHoriOrient ); + } - if(aSize.GetWidthPercent()) - { - SwRect aRect; - rSh.CalcBoundRect(aRect, FLY_AS_CHAR); - long nPrtWidth = aRect.Width(); - aSize.SetWidthPercent(sal_uInt8((nPageWidth - aLongLR.GetLeft() - aLongLR.GetRight()) * 100 /nPrtWidth)); - } - else - aSize.SetWidth( nPageWidth - - (aLongLR.GetLeft() + aLongLR.GetRight())); + SwFmtFrmSize aSize( pFmt->GetFrmSize() ); + long nOldWidth = (long) aSize.GetWidth(); - if( nFrmType & FRMTYPE_COLUMN ) - { - SwFmtCol aCol(pFmt->GetCol()); + if(aSize.GetWidthPercent()) + { + SwRect aRect; + rSh.CalcBoundRect(aRect, FLY_AS_CHAR); + long nPrtWidth = aRect.Width(); + aSize.SetWidthPercent(sal_uInt8((nPageWidth - aLongLR.GetLeft() - aLongLR.GetRight()) * 100 /nPrtWidth)); + } + else + aSize.SetWidth( nPageWidth - + (aLongLR.GetLeft() + aLongLR.GetRight())); - ::ResizeFrameCols(aCol, nOldWidth, (long)aSize.GetWidth(), nDeltaX ); - aSet.Put(aCol); - } + if( nFrmType & FRMTYPE_COLUMN ) + { + SwFmtCol aCol(pFmt->GetCol()); + + ::ResizeFrameCols(aCol, nOldWidth, (long)aSize.GetWidth(), nDeltaX ); + aSet.Put(aCol); + } - aSet.Put( aSize ); + aSet.Put( aSize ); - rSh.StartAction(); - rSh.Push(); - rSh.SetFlyFrmAttr( aSet ); - //die Rahmenselektion wieder aufheben - if(!bFrmSelection && rSh.IsFrmSelected()) + rSh.StartAction(); + rSh.Push(); + rSh.SetFlyFrmAttr( aSet ); + //die Rahmenselektion wieder aufheben + if(!bFrmSelection && rSh.IsFrmSelected()) + { + rSh.UnSelectFrm(); + rSh.LeaveSelFrmMode(); + } + rSh.Pop(); + rSh.EndAction(); + } + else if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) { - rSh.UnSelectFrm(); - rSh.LeaveSelFrmMode(); + // Seitenraender rausrechnen + long nOld = rDesc.GetMaster().GetLRSpace().GetLeft(); + aLongLR.SetLeft( nOld > aLongLR.GetLeft() ? 0 : aLongLR.GetLeft() - nOld ); + + nOld = rDesc.GetMaster().GetLRSpace().GetRight(); + aLongLR.SetRight( nOld > (sal_uInt16)aLongLR.GetRight() ? 0 : aLongLR.GetRight() - nOld ); + aLR.SetLeft((sal_uInt16)aLongLR.GetLeft()); + aLR.SetRight((sal_uInt16)aLongLR.GetRight()); + + if ( nFrmType & FRMTYPE_HEADER && pHeaderFmt ) + pHeaderFmt->SetFmtAttr( aLR ); + else if( nFrmType & FRMTYPE_FOOTER && pFooterFmt ) + pFooterFmt->SetFmtAttr( aLR ); } - rSh.Pop(); - rSh.EndAction(); - } - else if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) - { - // Seitenraender rausrechnen - long nOld = rDesc.GetMaster().GetLRSpace().GetLeft(); - aLongLR.SetLeft( nOld > aLongLR.GetLeft() ? 0 : aLongLR.GetLeft() - nOld ); - - nOld = rDesc.GetMaster().GetLRSpace().GetRight(); - aLongLR.SetRight( nOld > (sal_uInt16)aLongLR.GetRight() ? 0 : aLongLR.GetRight() - nOld ); - aLR.SetLeft((sal_uInt16)aLongLR.GetLeft()); - aLR.SetRight((sal_uInt16)aLongLR.GetRight()); - - if ( nFrmType & FRMTYPE_HEADER && pHeaderFmt ) - pHeaderFmt->SetFmtAttr( aLR ); - else if( nFrmType & FRMTYPE_FOOTER && pFooterFmt ) - pFooterFmt->SetFmtAttr( aLR ); - } - else if( nFrmType == FRMTYPE_DRAWOBJ) - { - SwRect aRect( rSh.GetObjRect() ); - aRect.Left( aLongLR.GetLeft() + rPageRect.Left() ); - aRect.Right( rPageRect.Right() - aLongLR.GetRight()); - rSh.SetObjRect( aRect ); - } - else if(bSect || rSh.IsDirectlyInSection()) - { - //change the section indents and the columns if available - //at first determine the changes - SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0); - const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0); - aSectRect.Pos() += aTmpRect.Pos(); - long nLeftDiff = aLongLR.GetLeft() - (long)(aSectRect.Left() - rPageRect.Left() ); - long nRightDiff = aLongLR.GetRight() - (long)( rPageRect.Right() - aSectRect.Right()); - //change the LRSpaceItem of the section accordingly - const SwSection* pCurrSect = rSh.GetCurrSection(); - const SwSectionFmt* pSectFmt = pCurrSect->GetFmt(); - SvxLRSpaceItem aLRTmp = pSectFmt->GetLRSpace(); - aLRTmp.SetLeft(aLRTmp.GetLeft() + nLeftDiff); - aLRTmp.SetRight(aLRTmp.GetRight() + nRightDiff); - SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L); - aSet.Put(aLRTmp); - //change the first/last column - if(bSect) + else if( nFrmType == FRMTYPE_DRAWOBJ) + { + SwRect aRect( rSh.GetObjRect() ); + aRect.Left( aLongLR.GetLeft() + rPageRect.Left() ); + aRect.Right( rPageRect.Right() - aLongLR.GetRight()); + rSh.SetObjRect( aRect ); + } + else if(bSect || rSh.IsDirectlyInSection()) { - SwFmtCol aCols( pSectFmt->GetCol() ); - long nDiffWidth = nLeftDiff + nRightDiff; - ::ResizeFrameCols(aCols, aSectRect.Width(), aSectRect.Width() - nDiffWidth, nLeftDiff ); - aSet.Put( aCols ); + //change the section indents and the columns if available + //at first determine the changes + SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0); + const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0); + aSectRect.Pos() += aTmpRect.Pos(); + long nLeftDiff = aLongLR.GetLeft() - (long)(aSectRect.Left() - rPageRect.Left() ); + long nRightDiff = aLongLR.GetRight() - (long)( rPageRect.Right() - aSectRect.Right()); + //change the LRSpaceItem of the section accordingly + const SwSection* pCurrSect = rSh.GetCurrSection(); + const SwSectionFmt* pSectFmt = pCurrSect->GetFmt(); + SvxLRSpaceItem aLRTmp = pSectFmt->GetLRSpace(); + aLRTmp.SetLeft(aLRTmp.GetLeft() + nLeftDiff); + aLRTmp.SetRight(aLRTmp.GetRight() + nRightDiff); + SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L); + aSet.Put(aLRTmp); + //change the first/last column + if(bSect) + { + SwFmtCol aCols( pSectFmt->GetCol() ); + long nDiffWidth = nLeftDiff + nRightDiff; + ::ResizeFrameCols(aCols, aSectRect.Width(), aSectRect.Width() - nDiffWidth, nLeftDiff ); + aSet.Put( aCols ); + } + SwSectionData aData(*pCurrSect); + rSh.UpdateSection(rSh.GetSectionFmtPos(*pSectFmt), aData, &aSet); + } + else + { // Seitenraender einstellen + aLR.SetLeft((sal_uInt16)aLongLR.GetLeft()); + aLR.SetRight((sal_uInt16)aLongLR.GetRight()); + SwapPageMargin( rDesc, aLR ); + SwPageDesc aDesc( rDesc ); + aDesc.GetMaster().SetFmtAttr( aLR ); + rSh.ChgPageDesc( nDescId, aDesc ); } - SwSectionData aData(*pCurrSect); - rSh.UpdateSection(rSh.GetSectionFmtPos(*pSectFmt), aData, &aSet); } - else - { // Seitenraender einstellen - aLR.SetLeft((sal_uInt16)aLongLR.GetLeft()); - aLR.SetRight((sal_uInt16)aLongLR.GetRight()); - SwapPageMargin( rDesc, aLR ); + break; + + // apply new left and right margins to current page style + case SID_ATTR_PAGE_LRSPACE: + { + const SvxLongLRSpaceItem aLongLR( static_cast<const SvxLongLRSpaceItem&>(rReq.GetArgs()->Get( SID_ATTR_PAGE_LRSPACE )) ); + SwPageDesc aDesc( rDesc ); - aDesc.GetMaster().SetFmtAttr( aLR ); + { + SvxLRSpaceItem aLR( RES_LR_SPACE ); + aLR.SetLeft((sal_uInt16)aLongLR.GetLeft()); + aLR.SetRight((sal_uInt16)aLongLR.GetRight()); + SwapPageMargin( rDesc, aLR ); + aDesc.GetMaster().SetFmtAttr( aLR ); + } rSh.ChgPageDesc( nDescId, aDesc ); } - } - break; - case SID_ATTR_LONG_ULSPACE: - { - SvxLongULSpaceItem aLongULSpace( (const SvxLongULSpaceItem&)rReq.GetArgs()-> - Get( SID_ATTR_LONG_ULSPACE )); + break; - if( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) + case SID_ATTR_LONG_ULSPACE: { - SwFrmFmt* pFmt = ((SwFrmFmt*)rSh.GetFlyFrmFmt()); - const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED); - const long nDeltaY = rPageRect.Top() + aLongULSpace.GetUpper() - rRect.Top(); - const long nHeight = nPageHeight - (aLongULSpace.GetUpper() + aLongULSpace.GetLower()); - - SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE, - RES_VERT_ORIENT, RES_HORI_ORIENT, 0 ); - //which of the orientation attributes is to be put depends on the frame's environment - sal_Bool bRTL; - sal_Bool bVertL2R; - if ( ( bFrmSelection && - rSh.IsFrmVertical(sal_True, bRTL, bVertL2R ) ) || - ( !bFrmSelection && bVerticalWriting ) ) + SvxLongULSpaceItem aLongULSpace( (const SvxLongULSpaceItem&)rReq.GetArgs()-> + Get( SID_ATTR_LONG_ULSPACE )); + + if( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) { - SwFmtHoriOrient aHoriOrient(pFmt->GetHoriOrient()); - aHoriOrient.SetHoriOrient(text::HoriOrientation::NONE); - aHoriOrient.SetPos(aHoriOrient.GetPos() + nDeltaY ); - aSet.Put( aHoriOrient ); + SwFrmFmt* pFmt = ((SwFrmFmt*)rSh.GetFlyFrmFmt()); + const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED); + const long nDeltaY = rPageRect.Top() + aLongULSpace.GetUpper() - rRect.Top(); + const long nHeight = nPageHeight - (aLongULSpace.GetUpper() + aLongULSpace.GetLower()); + + SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE, + RES_VERT_ORIENT, RES_HORI_ORIENT, 0 ); + //which of the orientation attributes is to be put depends on the frame's environment + sal_Bool bRTL; + sal_Bool bVertL2R; + if ( ( bFrmSelection && + rSh.IsFrmVertical(sal_True, bRTL, bVertL2R ) ) || + ( !bFrmSelection && bVerticalWriting ) ) + { + SwFmtHoriOrient aHoriOrient(pFmt->GetHoriOrient()); + aHoriOrient.SetHoriOrient(text::HoriOrientation::NONE); + aHoriOrient.SetPos(aHoriOrient.GetPos() + nDeltaY ); + aSet.Put( aHoriOrient ); + } + else + { + SwFmtVertOrient aVertOrient(pFmt->GetVertOrient()); + aVertOrient.SetVertOrient(text::VertOrientation::NONE); + aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaY ); + aSet.Put( aVertOrient ); + } + SwFmtFrmSize aSize(pFmt->GetFrmSize()); + if(aSize.GetHeightPercent()) + { + SwRect aRect; + rSh.CalcBoundRect(aRect, FLY_AS_CHAR); + long nPrtHeight = aRect.Height(); + aSize.SetHeightPercent(sal_uInt8(nHeight * 100 /nPrtHeight)); + } + else + aSize.SetHeight(nHeight ); + + aSet.Put( aSize ); + rSh.SetFlyFrmAttr( aSet ); } - else + else if( nFrmType == FRMTYPE_DRAWOBJ ) { - SwFmtVertOrient aVertOrient(pFmt->GetVertOrient()); - aVertOrient.SetVertOrient(text::VertOrientation::NONE); - aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaY ); - aSet.Put( aVertOrient ); + SwRect aRect( rSh.GetObjRect() ); + aRect.Top( aLongULSpace.GetUpper() + rPageRect.Top() ); + aRect.Bottom( rPageRect.Bottom() - aLongULSpace.GetLower() ); + rSh.SetObjRect( aRect ) ; } - SwFmtFrmSize aSize(pFmt->GetFrmSize()); - if(aSize.GetHeightPercent()) + else if(bVerticalWriting && (bSect || rSh.IsDirectlyInSection())) { - SwRect aRect; - rSh.CalcBoundRect(aRect, FLY_AS_CHAR); - long nPrtHeight = aRect.Height(); - aSize.SetHeightPercent(sal_uInt8(nHeight * 100 /nPrtHeight)); + //change the section indents and the columns if available + //at first determine the changes + SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0); + const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0); + aSectRect.Pos() += aTmpRect.Pos(); + const long nLeftDiff = aLongULSpace.GetUpper() - (long)(aSectRect.Top() - rPageRect.Top()); + const long nRightDiff = aLongULSpace.GetLower() - (long)(nPageHeight - aSectRect.Bottom() + rPageRect.Top()); + //change the LRSpaceItem of the section accordingly + const SwSection* pCurrSect = rSh.GetCurrSection(); + const SwSectionFmt* pSectFmt = pCurrSect->GetFmt(); + SvxLRSpaceItem aLR = pSectFmt->GetLRSpace(); + aLR.SetLeft(aLR.GetLeft() + nLeftDiff); + aLR.SetRight(aLR.GetRight() + nRightDiff); + SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L); + aSet.Put(aLR); + //change the first/last column + if(bSect) + { + SwFmtCol aCols( pSectFmt->GetCol() ); + long nDiffWidth = nLeftDiff + nRightDiff; + ::ResizeFrameCols(aCols, aSectRect.Height(), aSectRect.Height() - nDiffWidth, nLeftDiff ); + aSet.Put( aCols ); + } + SwSectionData aData(*pCurrSect); + rSh.UpdateSection(rSh.GetSectionFmtPos(*pSectFmt), aData, &aSet); } else - aSize.SetHeight(nHeight ); - - aSet.Put( aSize ); - rSh.SetFlyFrmAttr( aSet ); - } - else if( nFrmType == FRMTYPE_DRAWOBJ ) - { - SwRect aRect( rSh.GetObjRect() ); - aRect.Top( aLongULSpace.GetUpper() + rPageRect.Top() ); - aRect.Bottom( rPageRect.Bottom() - aLongULSpace.GetLower() ); - rSh.SetObjRect( aRect ) ; - } - else if(bVerticalWriting && (bSect || rSh.IsDirectlyInSection())) - { - //change the section indents and the columns if available - //at first determine the changes - SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0); - const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0); - aSectRect.Pos() += aTmpRect.Pos(); - const long nLeftDiff = aLongULSpace.GetUpper() - (long)(aSectRect.Top() - rPageRect.Top()); - const long nRightDiff = aLongULSpace.GetLower() - (long)(nPageHeight - aSectRect.Bottom() + rPageRect.Top()); - //change the LRSpaceItem of the section accordingly - const SwSection* pCurrSect = rSh.GetCurrSection(); - const SwSectionFmt* pSectFmt = pCurrSect->GetFmt(); - SvxLRSpaceItem aLR = pSectFmt->GetLRSpace(); - aLR.SetLeft(aLR.GetLeft() + nLeftDiff); - aLR.SetRight(aLR.GetRight() + nRightDiff); - SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L); - aSet.Put(aLR); - //change the first/last column - if(bSect) - { - SwFmtCol aCols( pSectFmt->GetCol() ); - long nDiffWidth = nLeftDiff + nRightDiff; - ::ResizeFrameCols(aCols, aSectRect.Height(), aSectRect.Height() - nDiffWidth, nLeftDiff ); - aSet.Put( aCols ); - } - SwSectionData aData(*pCurrSect); - rSh.UpdateSection(rSh.GetSectionFmtPos(*pSectFmt), aData, &aSet); - } - else - { SwPageDesc aDesc( rDesc ); + { SwPageDesc aDesc( rDesc ); if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) { @@ -536,10 +554,10 @@ void SwView::ExecTabWin( SfxRequest& rReq ) if( (bHead && pHeaderFmt) || (!bHead && pFooterFmt) ) { SwFmtFrmSize aSz( bHead ? pHeaderFmt->GetFrmSize() : - pFooterFmt->GetFrmSize() ); + pFooterFmt->GetFrmSize() ); aSz.SetHeightSizeType( ATT_FIX_SIZE ); aSz.SetHeight(nPageHeight - aLongULSpace.GetLower() - - aLongULSpace.GetUpper() ); + aLongULSpace.GetUpper() ); if ( bHead ) pHeaderFmt->SetFmtAttr( aSz ); else @@ -555,339 +573,440 @@ void SwView::ExecTabWin( SfxRequest& rReq ) } rSh.ChgPageDesc( nDescId, aDesc ); + } } - } - break; - case SID_ATTR_TABSTOP_VERTICAL: - case SID_ATTR_TABSTOP: - { - sal_uInt16 nWhich = GetPool().GetWhich(nSlot); - SvxTabStopItem aTabStops( (const SvxTabStopItem&)rReq.GetArgs()-> - Get( nWhich )); - aTabStops.SetWhich(RES_PARATR_TABSTOP); - const SvxTabStopItem& rDefTabs = - (const SvxTabStopItem&)rSh.GetDefault(RES_PARATR_TABSTOP); - - // Default-Tab an Pos 0 - SfxItemSet aSet( GetPool(), RES_LR_SPACE, RES_LR_SPACE ); - rSh.GetCurAttr( aSet ); - const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)aSet.Get(RES_LR_SPACE); - - if ( rLR.GetTxtFirstLineOfst() < 0 ) - { - SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT ); - aTabStops.Insert( aSwTabStop ); - } - - // auffuellen mit Default-Tabs - sal_uInt16 nDef = ::GetTabDist( rDefTabs ); - ::MakeDefTabs( nDef, aTabStops ); + break; - SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl(); - if( pColl && pColl->IsAutoUpdateFmt() ) + // apply new top and bottom margins to current page style + case SID_ATTR_PAGE_ULSPACE: { - SfxItemSet aTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP); - aTmp.Put(aTabStops); - rSh.AutoUpdatePara( pColl, aTmp ); + SvxLongULSpaceItem aLongULSpace( + static_cast<const SvxLongULSpaceItem&>(rReq.GetArgs()->Get( SID_ATTR_PAGE_ULSPACE ) ) ); + + SwPageDesc aDesc( rDesc ); + { + SvxULSpaceItem aUL(RES_UL_SPACE); + aUL.SetUpper((sal_uInt16)aLongULSpace.GetUpper()); + aUL.SetLower((sal_uInt16)aLongULSpace.GetLower()); + aDesc.GetMaster().SetFmtAttr(aUL); + } + rSh.ChgPageDesc( nDescId, aDesc ); } - else - rSh.SetAttr( aTabStops ); break; - } - case SID_ATTR_PARA_LRSPACE_VERTICAL: - case SID_ATTR_PARA_LRSPACE: - { - SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)rReq. - GetArgs()->Get(nSlot)); - if(nFrmType & FRMTYPE_FLY_ANY) + + case SID_ATTR_PAGE_COLUMN: { - sal_Bool bFirstColumn = sal_True; - sal_Bool bLastColumn = sal_True; - if(nFrmType & FRMTYPE_COLUMN) + const SfxInt16Item aColumnItem( (const SfxInt16Item&)rReq.GetArgs()->Get(nSlot) ); + const sal_uInt16 nPageColumnType = aColumnItem.GetValue(); + + // nPageColumnType = + // 1 - single-columned page + // 2 - two-columned page + // 3 - three-columned page + // 4 - two-columned page with left column width of 2/3 of page width + // 5 - two-columned page with right column width of 2/3 of page width + + sal_uInt16 nCount = 2; + if ( nPageColumnType == 1 ) { - sal_uInt16 nCurFrameCol = rSh.GetCurColNum() - 1; - bFirstColumn = !nCurFrameCol; - const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); - const SwFmtCol* pCols = &pFmt->GetCol(); - const SwColumns& rCols = pCols->GetColumns(); - sal_uInt16 nColumnCount = rCols.Count(); - bLastColumn = nColumnCount == nCurFrameCol + 1; + nCount = 0; + } + else if ( nPageColumnType == 3 ) + { + nCount = 3; } - } - aParaMargin.SetRight( aParaMargin.GetRight() - nRightBorderDistance ); - aParaMargin.SetTxtLeft(aParaMargin.GetTxtLeft() - nLeftBorderDistance ); - aParaMargin.SetWhich( RES_LR_SPACE ); - SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl(); + const sal_uInt16 nGutterWidth = 0; + + const SvxLRSpaceItem aLR( rDesc.GetMaster().GetLRSpace() ); + const long nLeft = aLR.GetLeft(); + const long nRight = aLR.GetRight(); + const long nWidth = nPageWidth - nLeft - nRight; + + SwFmtCol aCols( rDesc.GetMaster().GetCol() ); + aCols.Init( nCount, nGutterWidth, nWidth ); + aCols.SetWishWidth( nWidth ); + aCols.SetGutterWidth( nGutterWidth, nWidth ); + aCols.SetOrtho( sal_False, nGutterWidth, nWidth ); - // #i23726# - if (pNumRuleNodeFromDoc) + long nColumnLeft = 0; + long nColumnRight = 0; + if ( nPageColumnType == 4 ) + { + nColumnRight = (long)(nWidth/3); + nColumnLeft = nWidth - nColumnRight; + aCols.GetColumns()[0]->SetWishWidth( nColumnLeft ); + aCols.GetColumns()[1]->SetWishWidth( nColumnRight ); + } + else if ( nPageColumnType == 5 ) + { + nColumnLeft = (long)(nWidth/3); + nColumnRight = nWidth - nColumnLeft; + aCols.GetColumns()[0]->SetWishWidth( nColumnLeft ); + aCols.GetColumns()[1]->SetWishWidth( nColumnRight ); + } + + SwPageDesc aDesc( rDesc ); + aDesc.GetMaster().SetFmtAttr( aCols ); + rSh.ChgPageDesc( rSh.GetCurPageDesc(), aDesc ); + } + break; + + case SID_ATTR_TABSTOP_VERTICAL: + case SID_ATTR_TABSTOP: { - // --> FME 2005-02-22 #i42922# Mouse move of numbering label - // has to consider the left indent of the paragraph + sal_uInt16 nWhich = GetPool().GetWhich(nSlot); + SvxTabStopItem aTabStops( (const SvxTabStopItem&)rReq.GetArgs()-> + Get( nWhich )); + aTabStops.SetWhich(RES_PARATR_TABSTOP); + const SvxTabStopItem& rDefTabs = + (const SvxTabStopItem&)rSh.GetDefault(RES_PARATR_TABSTOP); + + // Default-Tab an Pos 0 SfxItemSet aSet( GetPool(), RES_LR_SPACE, RES_LR_SPACE ); rSh.GetCurAttr( aSet ); - const SvxLRSpaceItem& rLR = - static_cast<const SvxLRSpaceItem&>(aSet.Get(RES_LR_SPACE)); - // <-- - - SwPosition aPos(*pNumRuleNodeFromDoc); - // --> OD 2008-06-09 #i90078# - rSh.SetIndent( static_cast< short >(aParaMargin.GetTxtLeft() - rLR.GetTxtLeft()), aPos); - // <-- - // --> OD 2005-02-18 #i42921# - invalidate state of indent in order - // to get a ruler update. - aParaMargin.SetWhich( nSlot ); - GetViewFrame()->GetBindings().SetState( aParaMargin ); - // <-- - } - else if( pColl && pColl->IsAutoUpdateFmt() ) - { - SfxItemSet aSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE); - aSet.Put(aParaMargin); - rSh.AutoUpdatePara( pColl, aSet); + const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)aSet.Get(RES_LR_SPACE); + + if ( rLR.GetTxtFirstLineOfst() < 0 ) + { + SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT ); + aTabStops.Insert( aSwTabStop ); + } + + // auffuellen mit Default-Tabs + sal_uInt16 nDef = ::GetTabDist( rDefTabs ); + ::MakeDefTabs( nDef, aTabStops ); + + SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl(); + if( pColl && pColl->IsAutoUpdateFmt() ) + { + SfxItemSet aTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP); + aTmp.Put(aTabStops); + rSh.AutoUpdatePara( pColl, aTmp ); + } + else + rSh.SetAttr( aTabStops ); + break; } - else - rSh.SetAttr( aParaMargin ); - if ( aParaMargin.GetTxtFirstLineOfst() < 0 ) + case SID_ATTR_PARA_LRSPACE_VERTICAL: + case SID_ATTR_PARA_LRSPACE: { - SfxItemSet aSet( GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP ); - - rSh.GetCurAttr( aSet ); - const SvxTabStopItem& rTabStops = (const SvxTabStopItem&)aSet.Get(RES_PARATR_TABSTOP); + SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)rReq. + GetArgs()->Get(nSlot)); + if(nFrmType & FRMTYPE_FLY_ANY) + { + sal_Bool bFirstColumn = sal_True; + sal_Bool bLastColumn = sal_True; + if(nFrmType & FRMTYPE_COLUMN) + { + sal_uInt16 nCurFrameCol = rSh.GetCurColNum() - 1; + bFirstColumn = !nCurFrameCol; + const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); + const SwFmtCol* pCols = &pFmt->GetCol(); + const SwColumns& rCols = pCols->GetColumns(); + sal_uInt16 nColumnCount = rCols.Count(); + bLastColumn = nColumnCount == nCurFrameCol + 1; + } + } + aParaMargin.SetRight( aParaMargin.GetRight() - nRightBorderDistance ); + aParaMargin.SetTxtLeft(aParaMargin.GetTxtLeft() - nLeftBorderDistance ); - // Haben wir einen Tab an Stelle Null - sal_uInt16 i; + aParaMargin.SetWhich( RES_LR_SPACE ); + SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl(); - for ( i = 0; i < rTabStops.Count(); ++i ) - if ( rTabStops[i].GetTabPos() == 0 ) - break; + // #i23726# + if (pNumRuleNodeFromDoc) + { + // --> FME 2005-02-22 #i42922# Mouse move of numbering label + // has to consider the left indent of the paragraph + SfxItemSet aSet( GetPool(), RES_LR_SPACE, RES_LR_SPACE ); + rSh.GetCurAttr( aSet ); + const SvxLRSpaceItem& rLR = + static_cast<const SvxLRSpaceItem&>(aSet.Get(RES_LR_SPACE)); + // <-- + + SwPosition aPos(*pNumRuleNodeFromDoc); + // --> OD 2008-06-09 #i90078# + rSh.SetIndent( static_cast< short >(aParaMargin.GetTxtLeft() - rLR.GetTxtLeft()), aPos); + // <-- + // --> OD 2005-02-18 #i42921# - invalidate state of indent in order + // to get a ruler update. + aParaMargin.SetWhich( nSlot ); + GetViewFrame()->GetBindings().SetState( aParaMargin ); + // <-- + } + else if( pColl && pColl->IsAutoUpdateFmt() ) + { + SfxItemSet aSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE); + aSet.Put(aParaMargin); + rSh.AutoUpdatePara( pColl, aSet); + } + else + rSh.SetAttr( aParaMargin ); - if ( i >= rTabStops.Count() ) + if ( aParaMargin.GetTxtFirstLineOfst() < 0 ) { - // Kein DefTab - SvxTabStopItem aTabStops( RES_PARATR_TABSTOP ); - aTabStops = rTabStops; + SfxItemSet aSet( GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP ); - ::lcl_EraseDefTabs(aTabStops); + rSh.GetCurAttr( aSet ); + const SvxTabStopItem& rTabStops = (const SvxTabStopItem&)aSet.Get(RES_PARATR_TABSTOP); - SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT ); - aTabStops.Insert(aSwTabStop); + // Haben wir einen Tab an Stelle Null + sal_uInt16 i; - const SvxTabStopItem& rDefTabs = - (const SvxTabStopItem&)rSh.GetDefault(RES_PARATR_TABSTOP); - sal_uInt16 nDef = ::GetTabDist(rDefTabs); - ::MakeDefTabs( nDef, aTabStops ); + for ( i = 0; i < rTabStops.Count(); ++i ) + if ( rTabStops[i].GetTabPos() == 0 ) + break; - if( pColl && pColl->IsAutoUpdateFmt()) + if ( i >= rTabStops.Count() ) { - SfxItemSet aSetTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP); - aSetTmp.Put(aTabStops); - rSh.AutoUpdatePara( pColl, aSetTmp ); + // Kein DefTab + SvxTabStopItem aTabStops( RES_PARATR_TABSTOP ); + aTabStops = rTabStops; + + ::lcl_EraseDefTabs(aTabStops); + + SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT ); + aTabStops.Insert(aSwTabStop); + + const SvxTabStopItem& rDefTabs = + (const SvxTabStopItem&)rSh.GetDefault(RES_PARATR_TABSTOP); + sal_uInt16 nDef = ::GetTabDist(rDefTabs); + ::MakeDefTabs( nDef, aTabStops ); + + if( pColl && pColl->IsAutoUpdateFmt()) + { + SfxItemSet aSetTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP); + aSetTmp.Put(aTabStops); + rSh.AutoUpdatePara( pColl, aSetTmp ); + } + else + rSh.SetAttr( aTabStops ); } - else - rSh.SetAttr( aTabStops ); } } + break; + + case SID_ATTR_PARA_ULSPACE: + { + SvxULSpaceItem aParaMargin((const SvxULSpaceItem&)rReq. + GetArgs()->Get(nSlot)); + + long nUDist = 0; + long nLDist = 0; + aParaMargin.SetUpper( aParaMargin.GetUpper() - nUDist ); + aParaMargin.SetLower(aParaMargin.GetLower() - nLDist); + + aParaMargin.SetWhich( RES_UL_SPACE ); + SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl(); + if( pColl && pColl->IsAutoUpdateFmt() ) + { + SfxItemSet aSet(GetPool(), RES_UL_SPACE, RES_UL_SPACE); + aSet.Put(aParaMargin); + rSh.AutoUpdatePara( pColl, aSet); + } + else + rSh.SetAttr( aParaMargin ); } break; + case SID_RULER_BORDERS_VERTICAL: case SID_RULER_BORDERS: - { - SvxColumnItem aColItem((const SvxColumnItem&)rReq. - GetArgs()->Get(nSlot)); - - if( bSetTabColFromDoc || (!bSect && rSh.GetTableFmt()) ) { - ASSERT(aColItem.Count(), "ColDesc ist leer!!"); + SvxColumnItem aColItem((const SvxColumnItem&)rReq. + GetArgs()->Get(nSlot)); - const sal_Bool bSingleLine = ((const SfxBoolItem&)rReq. - GetArgs()->Get(SID_RULER_ACT_LINE_ONLY)).GetValue(); + if( bSetTabColFromDoc || (!bSect && rSh.GetTableFmt()) ) + { + ASSERT(aColItem.Count(), "ColDesc ist leer!!"); - SwTabCols aTabCols; - if ( bSetTabColFromDoc ) - rSh.GetMouseTabCols( aTabCols, aTabColFromDocPos ); - else - rSh.GetTabCols(aTabCols); + const sal_Bool bSingleLine = ((const SfxBoolItem&)rReq. + GetArgs()->Get(SID_RULER_ACT_LINE_ONLY)).GetValue(); - // linker Tabellenrand - long nBorder = (long)(aColItem.GetLeft() - aTabCols.GetLeftMin()); - aTabCols.SetLeft( nBorder ); + SwTabCols aTabCols; + if ( bSetTabColFromDoc ) + rSh.GetMouseTabCols( aTabCols, aTabColFromDocPos ); + else + rSh.GetTabCols(aTabCols); + + // linker Tabellenrand + long nBorder = (long)(aColItem.GetLeft() - aTabCols.GetLeftMin()); + aTabCols.SetLeft( nBorder ); - nBorder = (bVerticalWriting ? nPageHeight : nPageWidth) - aTabCols.GetLeftMin() - aColItem.GetRight(); + nBorder = (bVerticalWriting ? nPageHeight : nPageWidth) - aTabCols.GetLeftMin() - aColItem.GetRight(); #ifdef DEBUG - long nTmp1 = nPageWidth; - long nTmp2 = aTabCols.GetLeftMin() + nBorder; - (void)nTmp1; - (void)nTmp2; + long nTmp1 = nPageWidth; + long nTmp2 = aTabCols.GetLeftMin() + nBorder; + (void)nTmp1; + (void)nTmp2; #endif - if ( aColItem.GetRight() > 0 ) - aTabCols.SetRight( nBorder ); + if ( aColItem.GetRight() > 0 ) + aTabCols.SetRight( nBorder ); - // Tabcols der Reihe nach - // Die letzte Col wird durch den Rand definiert - //columns in right-to-left tables need to be mirrored - sal_Bool bIsTableRTL = - IsTabColFromDoc() ? - rSh.IsMouseTableRightToLeft(aTabColFromDocPos) + // Tabcols der Reihe nach + // Die letzte Col wird durch den Rand definiert + //columns in right-to-left tables need to be mirrored + sal_Bool bIsTableRTL = + IsTabColFromDoc() ? + rSh.IsMouseTableRightToLeft(aTabColFromDocPos) : rSh.IsTableRightToLeft(); - if(bIsTableRTL) - { - sal_uInt16 nColCount = aColItem.Count() - 1; - for ( sal_uInt16 i = 0; i < nColCount; ++i ) + if(bIsTableRTL) { - const SvxColumnDescription& rCol = aColItem[nColCount - i]; - aTabCols[i] = aTabCols.GetRight() - rCol.nStart; - aTabCols.SetHidden( i, !rCol.bVisible ); + sal_uInt16 nColCount = aColItem.Count() - 1; + for ( sal_uInt16 i = 0; i < nColCount; ++i ) + { + const SvxColumnDescription& rCol = aColItem[nColCount - i]; + aTabCols[i] = aTabCols.GetRight() - rCol.nStart; + aTabCols.SetHidden( i, !rCol.bVisible ); + } } - } - else - { - for ( sal_uInt16 i = 0; i < aColItem.Count()-1; ++i ) + else { - const SvxColumnDescription& rCol = aColItem[i]; - aTabCols[i] = rCol.nEnd + aTabCols.GetLeft(); - aTabCols.SetHidden( i, !rCol.bVisible ); + for ( sal_uInt16 i = 0; i < aColItem.Count()-1; ++i ) + { + const SvxColumnDescription& rCol = aColItem[i]; + aTabCols[i] = rCol.nEnd + aTabCols.GetLeft(); + aTabCols.SetHidden( i, !rCol.bVisible ); + } } - } - if ( bSetTabColFromDoc ) - { - if( !rSh.IsViewLocked() ) + if ( bSetTabColFromDoc ) { - bUnlockView = sal_True; - rSh.LockView( sal_True ); + if( !rSh.IsViewLocked() ) + { + bUnlockView = sal_True; + rSh.LockView( sal_True ); + } + rSh.SetMouseTabCols( aTabCols, bSingleLine, + aTabColFromDocPos ); } - rSh.SetMouseTabCols( aTabCols, bSingleLine, - aTabColFromDocPos ); + else + rSh.SetTabCols(aTabCols, bSingleLine); + } else - rSh.SetTabCols(aTabCols, bSingleLine); - - } - else - { - if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY || bSect) { - SwSectionFmt *pSectFmt = 0; - SfxItemSet aSet( GetPool(), RES_COL, RES_COL ); - if(bSect) - { - const SwSection *pSect = rSh.GetAnySection(); - ASSERT( pSect, "Welcher Bereich?"); - pSectFmt = pSect->GetFmt(); - } - else + if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY || bSect) { - rSh.GetFlyFrmAttr( aSet ); - } - SwFmtCol aCols( - bSect ? + SwSectionFmt *pSectFmt = 0; + SfxItemSet aSet( GetPool(), RES_COL, RES_COL ); + if(bSect) + { + const SwSection *pSect = rSh.GetAnySection(); + ASSERT( pSect, "Welcher Bereich?"); + pSectFmt = pSect->GetFmt(); + } + else + { + rSh.GetFlyFrmAttr( aSet ); + } + SwFmtCol aCols( + bSect ? pSectFmt->GetCol() : - (const SwFmtCol&)aSet.Get( RES_COL, sal_False )); - SwRect aCurRect = rSh.GetAnyCurRect(bSect ? RECT_SECTION_PRT : RECT_FLY_PRT_EMBEDDED); - const long lWidth = bVerticalWriting ? aCurRect.Height() : aCurRect.Width(); - ::lcl_ConvertToCols( aColItem, sal_uInt16(lWidth), aCols ); - aSet.Put( aCols ); - if(bSect) - rSh.SetSectionAttr( aSet, pSectFmt ); - else - { - rSh.StartAction(); - rSh.Push(); - rSh.SetFlyFrmAttr( aSet ); - //die Rahmenselektion wieder aufheben - if(!bFrmSelection && rSh.IsFrmSelected()) + (const SwFmtCol&)aSet.Get( RES_COL, sal_False )); + SwRect aCurRect = rSh.GetAnyCurRect(bSect ? RECT_SECTION_PRT : RECT_FLY_PRT_EMBEDDED); + const long lWidth = bVerticalWriting ? aCurRect.Height() : aCurRect.Width(); + ::lcl_ConvertToCols( aColItem, sal_uInt16(lWidth), aCols ); + aSet.Put( aCols ); + if(bSect) + rSh.SetSectionAttr( aSet, pSectFmt ); + else { - rSh.UnSelectFrm(); - rSh.LeaveSelFrmMode(); + rSh.StartAction(); + rSh.Push(); + rSh.SetFlyFrmAttr( aSet ); + //die Rahmenselektion wieder aufheben + if(!bFrmSelection && rSh.IsFrmSelected()) + { + rSh.UnSelectFrm(); + rSh.LeaveSelFrmMode(); + } + rSh.Pop(); + rSh.EndAction(); } - rSh.Pop(); - rSh.EndAction(); } - } - else - { - SwFmtCol aCols( rDesc.GetMaster().GetCol() ); - const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT); - ::lcl_ConvertToCols( aColItem, - sal_uInt16(bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width()), - aCols ); - SwPageDesc aDesc( rDesc ); - aDesc.GetMaster().SetFmtAttr( aCols ); - rSh.ChgPageDesc( rSh.GetCurPageDesc(), aDesc ); + else + { + SwFmtCol aCols( rDesc.GetMaster().GetCol() ); + const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT); + ::lcl_ConvertToCols( aColItem, + sal_uInt16(bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width()), + aCols ); + SwPageDesc aDesc( rDesc ); + aDesc.GetMaster().SetFmtAttr( aCols ); + rSh.ChgPageDesc( rSh.GetCurPageDesc(), aDesc ); + } } } - } - break; + break; case SID_RULER_ROWS : case SID_RULER_ROWS_VERTICAL: - { - SvxColumnItem aColItem((const SvxColumnItem&)rReq. - GetArgs()->Get(nSlot)); - - if( bSetTabColFromDoc || (!bSect && rSh.GetTableFmt()) ) { - ASSERT(aColItem.Count(), "ColDesc ist leer!!"); - - SwTabCols aTabCols; - if ( bSetTabRowFromDoc ) - rSh.GetMouseTabRows( aTabCols, aTabColFromDocPos ); - else - rSh.GetTabRows(aTabCols); + SvxColumnItem aColItem((const SvxColumnItem&)rReq. + GetArgs()->Get(nSlot)); - if ( bVerticalWriting ) + if( bSetTabColFromDoc || (!bSect && rSh.GetTableFmt()) ) { - aTabCols.SetRight(nPageWidth - aColItem.GetRight() - aColItem.GetLeft()); - aTabCols.SetLeftMin(aColItem.GetLeft()); - } - else - { - long nBorder = nPageHeight - aTabCols.GetLeftMin() - aColItem.GetRight(); - aTabCols.SetRight( nBorder ); - } + ASSERT(aColItem.Count(), "ColDesc ist leer!!"); - if(bVerticalWriting) - { - for ( sal_uInt16 i = aColItem.Count() - 1; i; --i ) + SwTabCols aTabCols; + if ( bSetTabRowFromDoc ) + rSh.GetMouseTabRows( aTabCols, aTabColFromDocPos ); + else + rSh.GetTabRows(aTabCols); + + if ( bVerticalWriting ) { - const SvxColumnDescription& rCol = aColItem[i - 1]; - long nColumnPos = aTabCols.GetRight() - rCol.nEnd ; - aTabCols[i - 1] = nColumnPos; - aTabCols.SetHidden( i - 1, !rCol.bVisible ); + aTabCols.SetRight(nPageWidth - aColItem.GetRight() - aColItem.GetLeft()); + aTabCols.SetLeftMin(aColItem.GetLeft()); } - } - else - { - for ( sal_uInt16 i = 0; i < aColItem.Count()-1; ++i ) + else { - const SvxColumnDescription& rCol = aColItem[i]; - aTabCols[i] = rCol.nEnd + aTabCols.GetLeft(); - aTabCols.SetHidden( i, !rCol.bVisible ); + long nBorder = nPageHeight - aTabCols.GetLeftMin() - aColItem.GetRight(); + aTabCols.SetRight( nBorder ); } - } - sal_Bool bSingleLine = sal_False; - const SfxPoolItem* pSingleLine; - if( SFX_ITEM_SET == rReq.GetArgs()->GetItemState(SID_RULER_ACT_LINE_ONLY, sal_False, &pSingleLine)) - bSingleLine = ((const SfxBoolItem*)pSingleLine)->GetValue(); - if ( bSetTabRowFromDoc ) - { - if( !rSh.IsViewLocked() ) + + if(bVerticalWriting) + { + for ( sal_uInt16 i = aColItem.Count() - 1; i; --i ) + { + const SvxColumnDescription& rCol = aColItem[i - 1]; + long nColumnPos = aTabCols.GetRight() - rCol.nEnd ; + aTabCols[i - 1] = nColumnPos; + aTabCols.SetHidden( i - 1, !rCol.bVisible ); + } + } + else + { + for ( sal_uInt16 i = 0; i < aColItem.Count()-1; ++i ) + { + const SvxColumnDescription& rCol = aColItem[i]; + aTabCols[i] = rCol.nEnd + aTabCols.GetLeft(); + aTabCols.SetHidden( i, !rCol.bVisible ); + } + } + sal_Bool bSingleLine = sal_False; + const SfxPoolItem* pSingleLine; + if( SFX_ITEM_SET == rReq.GetArgs()->GetItemState(SID_RULER_ACT_LINE_ONLY, sal_False, &pSingleLine)) + bSingleLine = ((const SfxBoolItem*)pSingleLine)->GetValue(); + if ( bSetTabRowFromDoc ) { - bUnlockView = sal_True; - rSh.LockView( sal_True ); + if( !rSh.IsViewLocked() ) + { + bUnlockView = sal_True; + rSh.LockView( sal_True ); + } + rSh.SetMouseTabRows( aTabCols, bSingleLine, aTabColFromDocPos ); } - rSh.SetMouseTabRows( aTabCols, bSingleLine, aTabColFromDocPos ); + else + rSh.SetTabRows(aTabCols, bSingleLine); } - else - rSh.SetTabRows(aTabCols, bSingleLine); } - } - break; + break; default: ASSERT( !this, "Falsche SlotId"); @@ -948,10 +1067,8 @@ void SwView::StateTabWin(SfxItemSet& rSet) SfxItemSet aCoreSet( GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP, RES_LR_SPACE, RES_UL_SPACE, 0 ); - // --> OD 2008-01-17 #newlistlevelattrs# // get also the list level indent values merged as LR-SPACE item, if needed. rSh.GetCurAttr( aCoreSet, true ); - // <-- SelectionType nSelType = rSh.GetSelectionType(); SfxWhichIter aIter( rSet ); @@ -962,891 +1079,972 @@ void SwView::StateTabWin(SfxItemSet& rSet) { switch ( nWhich ) { -// case RES_LR_SPACE: -// case SID_ATTR_LRSPACE: - case SID_ATTR_LONG_LRSPACE: - { - SvxLongLRSpaceItem aLongLR( (long)aPageLRSpace.GetLeft(), - (long)aPageLRSpace.GetRight(), - SID_ATTR_LONG_LRSPACE); - if(bBrowse) - { - aLongLR.SetLeft(rPagePrtRect.Left()); - aLongLR.SetRight(nPageWidth - rPagePrtRect.Right()); - } - if ( ( nFrmType & FRMTYPE_HEADER || nFrmType & FRMTYPE_FOOTER ) && - !(nFrmType & FRMTYPE_COLSECT) ) + case SID_ATTR_PAGE_COLUMN: { - SwFrmFmt *pFmt = (SwFrmFmt*) (nFrmType & FRMTYPE_HEADER ? - rDesc.GetMaster().GetHeader().GetHeaderFmt() : - rDesc.GetMaster().GetFooter().GetFooterFmt()); - if( pFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash + sal_uInt16 nColumnType = 0; + + const SwFrmFmt& rMaster = rDesc.GetMaster(); + SwFmtCol aCol(rMaster.GetCol()); + const sal_uInt16 nCols = aCol.GetNumCols(); + if ( nCols == 0 ) { - SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt)); - aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos(); - const SvxLRSpaceItem& aLR = pFmt->GetLRSpace(); - aLongLR.SetLeft ( (long)aLR.GetLeft() + (long)aRect.Left() ); - aLongLR.SetRight( (nPageWidth - - (long)aRect.Right() + (long)aLR.GetRight())); + nColumnType = 1; } + else if ( nCols == 2 ) + { + const sal_uInt16 nColLeft = aCol.CalcPrtColWidth(0, aCol.GetWishWidth()); + const sal_uInt16 nColRight = aCol.CalcPrtColWidth(1, aCol.GetWishWidth()); + + if ( abs(nColLeft - nColRight) <= 10 ) + { + nColumnType = 2; + } + else if( abs(nColLeft - nColRight*2) < 20 ) + { + nColumnType = 4; + } + else if( abs(nColLeft*2 - nColRight) < 20 ) + { + nColumnType = 5; + } + } + else if( nCols == 3 ) + { + nColumnType = 3; + } + + rSet.Put( SfxInt16Item( SID_ATTR_PAGE_COLUMN, nColumnType ) ); } - else + break; + + case SID_ATTR_LONG_LRSPACE: { - SwRect aRect; - if( !bFrmSelection && ((nFrmType & FRMTYPE_COLSECT) || rSh.IsDirectlyInSection()) ) + SvxLongLRSpaceItem aLongLR( (long)aPageLRSpace.GetLeft(), + (long)aPageLRSpace.GetRight(), + SID_ATTR_LONG_LRSPACE); + if(bBrowse) + { + aLongLR.SetLeft(rPagePrtRect.Left()); + aLongLR.SetRight(nPageWidth - rPagePrtRect.Right()); + } + if ( ( nFrmType & FRMTYPE_HEADER || nFrmType & FRMTYPE_FOOTER ) && + !(nFrmType & FRMTYPE_COLSECT) ) { - aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt); - const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt); - aRect.Pos() += aTmpRect.Pos(); + SwFrmFmt *pFmt = (SwFrmFmt*) (nFrmType & FRMTYPE_HEADER ? + rDesc.GetMaster().GetHeader().GetHeaderFmt() : + rDesc.GetMaster().GetFooter().GetFooterFmt()); + if( pFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash + { + SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt)); + aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos(); + const SvxLRSpaceItem& aLR = pFmt->GetLRSpace(); + aLongLR.SetLeft ( (long)aLR.GetLeft() + (long)aRect.Left() ); + aLongLR.SetRight( (nPageWidth - + (long)aRect.Right() + (long)aLR.GetRight())); + } } + else + { + SwRect aRect; + if( !bFrmSelection && ((nFrmType & FRMTYPE_COLSECT) || rSh.IsDirectlyInSection()) ) + { + aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt); + const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt); + aRect.Pos() += aTmpRect.Pos(); + } - else if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) - aRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); - else if( nFrmType & FRMTYPE_DRAWOBJ) - aRect = rSh.GetObjRect(); + else if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) + aRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); + else if( nFrmType & FRMTYPE_DRAWOBJ) + aRect = rSh.GetObjRect(); - if( aRect.Width() ) + if( aRect.Width() ) + { + // PAGES01 + // make relative to page position: + aLongLR.SetLeft ((long)( aRect.Left() - rPageRect.Left() )); + aLongLR.SetRight((long)( rPageRect.Right() - aRect.Right())); + } + } + if( nWhich == SID_ATTR_LONG_LRSPACE ) + rSet.Put( aLongLR ); + else { - // PAGES01 - // make relative to page position: - aLongLR.SetLeft ((long)( aRect.Left() - rPageRect.Left() )); - aLongLR.SetRight((long)( rPageRect.Right() - aRect.Right())); + SvxLRSpaceItem aLR( aLongLR.GetLeft(), + aLongLR.GetRight(), + 0, 0, + nWhich); + rSet.Put(aLR); } + break; } - if( nWhich == SID_ATTR_LONG_LRSPACE ) - rSet.Put( aLongLR ); - else + + // provide left and right margins of current page style + case SID_ATTR_PAGE_LRSPACE: { - SvxLRSpaceItem aLR( aLongLR.GetLeft(), - aLongLR.GetRight(), - 0, 0, - nWhich); - rSet.Put(aLR); + SvxLongLRSpaceItem aLongLR( + (long)aPageLRSpace.GetLeft(), + (long)aPageLRSpace.GetRight(), + SID_ATTR_PAGE_LRSPACE ); + rSet.Put( aLongLR ); } break; - } - case SID_ATTR_LONG_ULSPACE: -// case SID_ATTR_ULSPACE: -// case RES_UL_SPACE: - { - // Rand Seite Oben Unten - SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() ); - SvxLongULSpaceItem aLongUL( (long)aUL.GetUpper(), - (long)aUL.GetLower(), - SID_ATTR_LONG_ULSPACE); - if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) - { - // Dokumentkoordinaten Frame auf Seitenkoordinaten umbrechen - const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); - aLongUL.SetUpper((sal_uInt16)(rRect.Top() - rPageRect.Top() )); - aLongUL.SetLower((sal_uInt16)(rPageRect.Bottom() - rRect.Bottom() )); - } - else if ( nFrmType & FRMTYPE_HEADER || nFrmType & FRMTYPE_FOOTER ) - { - SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt)); - aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos(); - aLongUL.SetUpper( (sal_uInt16)aRect.Top() ); - aLongUL.SetLower( (sal_uInt16)(nPageHeight - aRect.Bottom()) ); - } - else if( nFrmType & FRMTYPE_DRAWOBJ) + case SID_ATTR_LONG_ULSPACE: { - const SwRect &rRect = rSh.GetObjRect(); - aLongUL.SetUpper((rRect.Top() - rPageRect.Top())); - aLongUL.SetLower((rPageRect.Bottom() - rRect.Bottom())); + // Rand Seite Oben Unten + SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() ); + SvxLongULSpaceItem aLongUL( (long)aUL.GetUpper(), + (long)aUL.GetLower(), + SID_ATTR_LONG_ULSPACE); + + if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) + { + // Dokumentkoordinaten Frame auf Seitenkoordinaten umbrechen + const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); + aLongUL.SetUpper((sal_uInt16)(rRect.Top() - rPageRect.Top() )); + aLongUL.SetLower((sal_uInt16)(rPageRect.Bottom() - rRect.Bottom() )); + } + else if ( nFrmType & FRMTYPE_HEADER || nFrmType & FRMTYPE_FOOTER ) + { + SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt)); + aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos(); + aLongUL.SetUpper( (sal_uInt16)aRect.Top() ); + aLongUL.SetLower( (sal_uInt16)(nPageHeight - aRect.Bottom()) ); + } + else if( nFrmType & FRMTYPE_DRAWOBJ) + { + const SwRect &rRect = rSh.GetObjRect(); + aLongUL.SetUpper((rRect.Top() - rPageRect.Top())); + aLongUL.SetLower((rPageRect.Bottom() - rRect.Bottom())); + } + else if(bBrowse) + { + aLongUL.SetUpper(rPagePrtRect.Top()); + aLongUL.SetLower(nPageHeight - rPagePrtRect.Bottom()); + } + if( nWhich == SID_ATTR_LONG_ULSPACE ) + rSet.Put( aLongUL ); + else + { + SvxULSpaceItem aULTmp((sal_uInt16)aLongUL.GetUpper(), + (sal_uInt16)aLongUL.GetLower(), + nWhich); + rSet.Put(aULTmp); + } + break; } - else if(bBrowse) + + // provide top and bottom margins of current page style + case SID_ATTR_PAGE_ULSPACE: { - aLongUL.SetUpper(rPagePrtRect.Top()); - aLongUL.SetLower(nPageHeight - rPagePrtRect.Bottom()); - } - if( nWhich == SID_ATTR_LONG_ULSPACE ) + const SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() ); + SvxLongULSpaceItem aLongUL( + (long)aUL.GetUpper(), + (long)aUL.GetLower(), + SID_ATTR_PAGE_ULSPACE ); + rSet.Put( aLongUL ); - else - { - SvxULSpaceItem aULTmp((sal_uInt16)aLongUL.GetUpper(), - (sal_uInt16)aLongUL.GetLower(), - nWhich); - rSet.Put(aULTmp); } break; - } + case SID_ATTR_TABSTOP_VERTICAL : case RES_PARATR_TABSTOP: - { - if ( ISA( SwWebView ) || - IsTabColFromDoc() || - IsTabRowFromDoc() || - ( nSelType & nsSelectionType::SEL_GRF) || + { + if ( ISA( SwWebView ) || + IsTabColFromDoc() || + IsTabRowFromDoc() || + ( nSelType & nsSelectionType::SEL_GRF) || (nSelType & nsSelectionType::SEL_FRM) || (nSelType & nsSelectionType::SEL_OLE) || SFX_ITEM_AVAILABLE > aCoreSet.GetItemState(RES_LR_SPACE)|| (!bVerticalWriting && (SID_ATTR_TABSTOP_VERTICAL == nWhich))|| (bVerticalWriting && (RES_PARATR_TABSTOP == nWhich)) - ) - rSet.DisableItem( nWhich ); - else - { - SvxTabStopItem aTabStops((const SvxTabStopItem&) - aCoreSet.Get( RES_PARATR_TABSTOP )); - - const SvxTabStopItem& rDefTabs = (const SvxTabStopItem&) - rSh.GetDefault(RES_PARATR_TABSTOP); - - DBG_ASSERT(pHRuler, "warum ist das Lineal nicht da?"); - long nDefTabDist = ::GetTabDist(rDefTabs); - pHRuler->SetDefTabDist( nDefTabDist ); - pVRuler->SetDefTabDist( nDefTabDist ); - ::lcl_EraseDefTabs(aTabStops); - rSet.Put(aTabStops, nWhich); + ) + rSet.DisableItem( nWhich ); + else + { + SvxTabStopItem aTabStops((const SvxTabStopItem&) + aCoreSet.Get( RES_PARATR_TABSTOP )); + + const SvxTabStopItem& rDefTabs = (const SvxTabStopItem&) + rSh.GetDefault(RES_PARATR_TABSTOP); + + DBG_ASSERT(pHRuler, "warum ist das Lineal nicht da?"); + long nDefTabDist = ::GetTabDist(rDefTabs); + pHRuler->SetDefTabDist( nDefTabDist ); + pVRuler->SetDefTabDist( nDefTabDist ); + ::lcl_EraseDefTabs(aTabStops); + rSet.Put(aTabStops, nWhich); + } + break; } - break; - } + case SID_ATTR_PARA_LRSPACE_VERTICAL: case SID_ATTR_PARA_LRSPACE: - { - if ( nSelType & nsSelectionType::SEL_GRF || + { + if ( nSelType & nsSelectionType::SEL_GRF || nSelType & nsSelectionType::SEL_FRM || nSelType & nsSelectionType::SEL_OLE || nFrmType == FRMTYPE_DRAWOBJ || (!bVerticalWriting && (SID_ATTR_PARA_LRSPACE_VERTICAL == nWhich))|| (bVerticalWriting && (SID_ATTR_PARA_LRSPACE == nWhich)) ) - { - rSet.DisableItem(nWhich); - } - else - { - SvxLRSpaceItem aLR( RES_LR_SPACE ); - if ( !IsTabColFromDoc() ) { - aLR = (const SvxLRSpaceItem&)aCoreSet.Get(RES_LR_SPACE); - - // #i23726# - if (pNumRuleNodeFromDoc) + rSet.DisableItem(nWhich); + } + else + { + SvxLRSpaceItem aLR( RES_LR_SPACE ); + if ( !IsTabColFromDoc() ) { - short nOffset = static_cast< short >(aLR.GetTxtLeft() + - // --> FME 2005-02-22 #i42922# Mouse move of numbering label - // has to consider the left indent of the paragraph - pNumRuleNodeFromDoc->GetLeftMarginWithNum( sal_True ) ); - // <-- + aLR = (const SvxLRSpaceItem&)aCoreSet.Get(RES_LR_SPACE); - short nFLOffset; - pNumRuleNodeFromDoc->GetFirstLineOfsWithNum( nFLOffset ); + // #i23726# + if (pNumRuleNodeFromDoc) + { + short nOffset = static_cast< short >(aLR.GetTxtLeft() + + // --> FME 2005-02-22 #i42922# Mouse move of numbering label + // has to consider the left indent of the paragraph + pNumRuleNodeFromDoc->GetLeftMarginWithNum( sal_True ) ); + // <-- - aLR.SetLeft( nOffset + nFLOffset ); + short nFLOffset; + pNumRuleNodeFromDoc->GetFirstLineOfsWithNum( nFLOffset ); + + aLR.SetLeft( nOffset + nFLOffset ); + } } + aLR.SetWhich(nWhich); + rSet.Put(aLR); } - aLR.SetWhich(nWhich); - rSet.Put(aLR); + break; } - break; - } + + case SID_ATTR_PARA_ULSPACE: + { + SvxULSpaceItem aUL = (const SvxULSpaceItem&)aCoreSet.Get(RES_UL_SPACE); + aUL.SetWhich(nWhich); + + SfxItemState e = aCoreSet.GetItemState(RES_UL_SPACE); + if( e >= SFX_ITEM_AVAILABLE ) + rSet.Put( aUL ); + else + rSet.InvalidateItem(nWhich); + } + break; + case SID_RULER_BORDER_DISTANCE: - { - nLeftBorderDistance = 0; - nRightBorderDistance = 0; - if ( nSelType & nsSelectionType::SEL_GRF || + { + nLeftBorderDistance = 0; + nRightBorderDistance = 0; + if ( nSelType & nsSelectionType::SEL_GRF || nSelType & nsSelectionType::SEL_FRM || nSelType & nsSelectionType::SEL_OLE || nFrmType == FRMTYPE_DRAWOBJ ) - rSet.DisableItem(SID_RULER_BORDER_DISTANCE); - else - { - SvxLRSpaceItem aDistLR(SID_RULER_BORDER_DISTANCE); - if(nFrmType & FRMTYPE_FLY_ANY) + rSet.DisableItem(SID_RULER_BORDER_DISTANCE); + else { - if( IsTabColFromDoc() ) + SvxLRSpaceItem aDistLR(SID_RULER_BORDER_DISTANCE); + if(nFrmType & FRMTYPE_FLY_ANY) { - const SwRect& rFlyPrtRect = rSh.GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, pPt ); - aDistLR.SetLeft(rFlyPrtRect.Left()); - aDistLR.SetRight(rFlyPrtRect.Left()); + if( IsTabColFromDoc() ) + { + const SwRect& rFlyPrtRect = rSh.GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, pPt ); + aDistLR.SetLeft(rFlyPrtRect.Left()); + aDistLR.SetRight(rFlyPrtRect.Left()); + } + else + { + SfxItemSet aCoreSet2( GetPool(), + RES_BOX, RES_BOX, + SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); + SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); + aCoreSet.Put( aBoxInfo ); + rSh.GetFlyFrmAttr( aCoreSet ); + const SvxBoxItem& rBox = (const SvxBoxItem&)aCoreSet.Get(RES_BOX); + aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); + aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); + + //add the paragraph border distance + SfxItemSet aCoreSet1( GetPool(), + RES_BOX, RES_BOX, + 0 ); + rSh.GetCurAttr( aCoreSet1 ); + const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSet1.Get(RES_BOX); + aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); + aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); + } + rSet.Put(aDistLR); + nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); + nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); } - else + else if ( IsTabColFromDoc() || + ( rSh.GetTableFmt() && !bFrmSelection && + !(nFrmType & FRMTYPE_COLSECT ) ) ) { SfxItemSet aCoreSet2( GetPool(), - RES_BOX, RES_BOX, - SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); + RES_BOX, RES_BOX, + SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); - aCoreSet.Put( aBoxInfo ); - rSh.GetFlyFrmAttr( aCoreSet ); - const SvxBoxItem& rBox = (const SvxBoxItem&)aCoreSet.Get(RES_BOX); + aBoxInfo.SetTable(sal_False); + aBoxInfo.SetDist((sal_Bool) sal_True); + aCoreSet2.Put(aBoxInfo); + rSh.GetTabBorders( aCoreSet2 ); + const SvxBoxItem& rBox = (const SvxBoxItem&)aCoreSet2.Get(RES_BOX); aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); - //add the paragraph border distance + //add the border distance of the paragraph SfxItemSet aCoreSet1( GetPool(), - RES_BOX, RES_BOX, - 0 ); + RES_BOX, RES_BOX, + 0 ); rSh.GetCurAttr( aCoreSet1 ); const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSet1.Get(RES_BOX); aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); + rSet.Put(aDistLR); + nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); + nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); } - rSet.Put(aDistLR); - nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); - nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); - } - else if ( IsTabColFromDoc() || - ( rSh.GetTableFmt() && !bFrmSelection && - !(nFrmType & FRMTYPE_COLSECT ) ) ) - { - SfxItemSet aCoreSet2( GetPool(), - RES_BOX, RES_BOX, - SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); - SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); - aBoxInfo.SetTable(sal_False); - aBoxInfo.SetDist((sal_Bool) sal_True); - aCoreSet2.Put(aBoxInfo); - rSh.GetTabBorders( aCoreSet2 ); - const SvxBoxItem& rBox = (const SvxBoxItem&)aCoreSet2.Get(RES_BOX); - aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); - aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); - - //add the border distance of the paragraph - SfxItemSet aCoreSet1( GetPool(), - RES_BOX, RES_BOX, - 0 ); - rSh.GetCurAttr( aCoreSet1 ); - const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSet1.Get(RES_BOX); - aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); - aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); - rSet.Put(aDistLR); - nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); - nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); - } - else if ( !rSh.IsDirectlyInSection() ) - { - //get the page/header/footer border distance - const SwFrmFmt& rMaster = rDesc.GetMaster(); - const SvxBoxItem& rBox = (const SvxBoxItem&)rMaster.GetAttrSet().Get(RES_BOX); - aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); - aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); - - const SvxBoxItem* pBox = 0; - if(nFrmType & FRMTYPE_HEADER) + else if ( !rSh.IsDirectlyInSection() ) { - rMaster.GetHeader(); - const SwFmtHeader& rHeaderFmt = rMaster.GetHeader(); - SwFrmFmt *pHeaderFmt = (SwFrmFmt*)rHeaderFmt.GetHeaderFmt(); - if( pHeaderFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash - pBox = & (const SvxBoxItem&)pHeaderFmt->GetBox(); - } - else if(nFrmType & FRMTYPE_FOOTER ) - { - const SwFmtFooter& rFooterFmt = rMaster.GetFooter(); - SwFrmFmt *pFooterFmt = (SwFrmFmt*)rFooterFmt.GetFooterFmt(); - if( pFooterFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash - pBox = & (const SvxBoxItem&)pFooterFmt->GetBox(); - } - if(pBox) - { - aDistLR.SetLeft((sal_uInt16)pBox->GetDistance(BOX_LINE_LEFT )); - aDistLR.SetRight((sal_uInt16)pBox->GetDistance(BOX_LINE_RIGHT)); - } + //get the page/header/footer border distance + const SwFrmFmt& rMaster = rDesc.GetMaster(); + const SvxBoxItem& rBox = (const SvxBoxItem&)rMaster.GetAttrSet().Get(RES_BOX); + aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); + aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); - //add the border distance of the paragraph - SfxItemSet aCoreSetTmp( GetPool(), - RES_BOX, RES_BOX, - SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); - rSh.GetCurAttr( aCoreSetTmp ); - const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSetTmp.Get(RES_BOX); - aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); - aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); - rSet.Put(aDistLR); - nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); - nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); + const SvxBoxItem* pBox = 0; + if(nFrmType & FRMTYPE_HEADER) + { + rMaster.GetHeader(); + const SwFmtHeader& rHeaderFmt = rMaster.GetHeader(); + SwFrmFmt *pHeaderFmt = (SwFrmFmt*)rHeaderFmt.GetHeaderFmt(); + if( pHeaderFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash + pBox = & (const SvxBoxItem&)pHeaderFmt->GetBox(); + } + else if(nFrmType & FRMTYPE_FOOTER ) + { + const SwFmtFooter& rFooterFmt = rMaster.GetFooter(); + SwFrmFmt *pFooterFmt = (SwFrmFmt*)rFooterFmt.GetFooterFmt(); + if( pFooterFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash + pBox = & (const SvxBoxItem&)pFooterFmt->GetBox(); + } + if(pBox) + { + aDistLR.SetLeft((sal_uInt16)pBox->GetDistance(BOX_LINE_LEFT )); + aDistLR.SetRight((sal_uInt16)pBox->GetDistance(BOX_LINE_RIGHT)); + } + + //add the border distance of the paragraph + SfxItemSet aCoreSetTmp( GetPool(), + RES_BOX, RES_BOX, + SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); + rSh.GetCurAttr( aCoreSetTmp ); + const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSetTmp.Get(RES_BOX); + aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); + aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); + rSet.Put(aDistLR); + nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); + nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); + } } } - } - break; + break; + case SID_RULER_TEXT_RIGHT_TO_LEFT: - { - if ( nSelType & nsSelectionType::SEL_GRF || + { + if ( nSelType & nsSelectionType::SEL_GRF || nSelType & nsSelectionType::SEL_FRM || nSelType & nsSelectionType::SEL_OLE || nFrmType == FRMTYPE_DRAWOBJ) - rSet.DisableItem(nWhich); - else - { - sal_Bool bFlag = rSh.IsInRightToLeftText(); - rSet.Put(SfxBoolItem(nWhich, bFlag)); + rSet.DisableItem(nWhich); + else + { + sal_Bool bFlag = rSh.IsInRightToLeftText(); + rSet.Put(SfxBoolItem(nWhich, bFlag)); + } } - } - break; + break; + case SID_RULER_BORDERS_VERTICAL: case SID_RULER_BORDERS: - { - sal_Bool bFrameHasVerticalColumns(sal_False); { - sal_Bool bFrameRTL; - sal_Bool bFrameVertL2R; - bFrameHasVerticalColumns = rSh.IsFrmVertical(sal_False, bFrameRTL, bFrameVertL2R) && - bFrmSelection; - } - sal_Bool bHasTable = ( IsTabColFromDoc() || + sal_Bool bFrameHasVerticalColumns(sal_False); + { + sal_Bool bFrameRTL; + sal_Bool bFrameVertL2R; + bFrameHasVerticalColumns = rSh.IsFrmVertical(sal_False, bFrameRTL, bFrameVertL2R) && + bFrmSelection; + } + sal_Bool bHasTable = ( IsTabColFromDoc() || ( rSh.GetTableFmt() && !bFrmSelection && !(nFrmType & FRMTYPE_COLSECT ) ) ); - sal_Bool bTableVertical = bHasTable && rSh.IsTableVertical(); + sal_Bool bTableVertical = bHasTable && rSh.IsTableVertical(); - if( ( (SID_RULER_BORDERS_VERTICAL == nWhich) && + if( ( (SID_RULER_BORDERS_VERTICAL == nWhich) && ((bHasTable && !bTableVertical)|| - (!bVerticalWriting && !bFrmSelection && !bHasTable ) || (bFrmSelection && !bFrameHasVerticalColumns)) ) || - ((SID_RULER_BORDERS == nWhich) && + (!bVerticalWriting && !bFrmSelection && !bHasTable ) || (bFrmSelection && !bFrameHasVerticalColumns)) ) || + ((SID_RULER_BORDERS == nWhich) && ((bHasTable && bTableVertical)|| - (bVerticalWriting && !bFrmSelection&& !bHasTable) || bFrameHasVerticalColumns))) - rSet.DisableItem(nWhich); - else if ( bHasTable ) - { - SwTabCols aTabCols; - sal_uInt16 nNum; - if ( 0 != ( bSetTabColFromDoc = IsTabColFromDoc() ) ) - { - rSh.GetMouseTabCols( aTabCols, aTabColFromDocPos ); - nNum = rSh.GetCurMouseTabColNum( aTabColFromDocPos ); - } - else + (bVerticalWriting && !bFrmSelection&& !bHasTable) || bFrameHasVerticalColumns))) + rSet.DisableItem(nWhich); + else if ( bHasTable ) { - rSh.GetTabCols( aTabCols ); - nNum = rSh.GetCurTabColNum(); - if(rSh.IsTableRightToLeft()) - nNum = aTabCols.Count() - nNum; - } + SwTabCols aTabCols; + sal_uInt16 nNum; + if ( 0 != ( bSetTabColFromDoc = IsTabColFromDoc() ) ) + { + rSh.GetMouseTabCols( aTabCols, aTabColFromDocPos ); + nNum = rSh.GetCurMouseTabColNum( aTabColFromDocPos ); + } + else + { + rSh.GetTabCols( aTabCols ); + nNum = rSh.GetCurTabColNum(); + if(rSh.IsTableRightToLeft()) + nNum = aTabCols.Count() - nNum; + } - ASSERT(nNum <= aTabCols.Count(), "TabCol not found"); - const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft(); - const int nRgt = (sal_uInt16)(bTableVertical ? nPageHeight : nPageWidth) - - (aTabCols.GetLeftMin() + - aTabCols.GetRight()); + ASSERT(nNum <= aTabCols.Count(), "TabCol not found"); + const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft(); + const int nRgt = (sal_uInt16)(bTableVertical ? nPageHeight : nPageWidth) - + (aTabCols.GetLeftMin() + + aTabCols.GetRight()); - const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); - const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); + const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); + const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); - SvxColumnItem aColItem(nNum, nL, nR); + SvxColumnItem aColItem(nNum, nL, nR); - sal_uInt16 nStart = 0, - nEnd; + sal_uInt16 nStart = 0, + nEnd; - //columns in right-to-left tables need to be mirrored - sal_Bool bIsTableRTL = - IsTabColFromDoc() ? - rSh.IsMouseTableRightToLeft(aTabColFromDocPos) + //columns in right-to-left tables need to be mirrored + sal_Bool bIsTableRTL = + IsTabColFromDoc() ? + rSh.IsMouseTableRightToLeft(aTabColFromDocPos) : rSh.IsTableRightToLeft(); - if(bIsTableRTL) - { - for ( sal_uInt16 i = aTabCols.Count(); i ; --i ) + if(bIsTableRTL) { - const SwTabColsEntry& rEntry = aTabCols.GetEntry( i - 1 ); - nEnd = (sal_uInt16)aTabCols.GetRight(); - nEnd = nEnd - (sal_uInt16)rEntry.nPos; - SvxColumnDescription aColDesc( nStart, nEnd, - (sal_uInt16(aTabCols.GetRight() - rEntry.nMax)), - (sal_uInt16(aTabCols.GetRight() - rEntry.nMin)), - !aTabCols.IsHidden(i - 1) ); + for ( sal_uInt16 i = aTabCols.Count(); i ; --i ) + { + const SwTabColsEntry& rEntry = aTabCols.GetEntry( i - 1 ); + nEnd = (sal_uInt16)aTabCols.GetRight(); + nEnd = nEnd - (sal_uInt16)rEntry.nPos; + SvxColumnDescription aColDesc( nStart, nEnd, + (sal_uInt16(aTabCols.GetRight() - rEntry.nMax)), + (sal_uInt16(aTabCols.GetRight() - rEntry.nMin)), + !aTabCols.IsHidden(i - 1) ); + aColItem.Append(aColDesc); + nStart = nEnd; + } + SvxColumnDescription aColDesc(nStart, + aTabCols.GetRight() - aTabCols.GetLeft(), sal_True); aColItem.Append(aColDesc); - nStart = nEnd; } - SvxColumnDescription aColDesc(nStart, - aTabCols.GetRight() - aTabCols.GetLeft(), sal_True); - aColItem.Append(aColDesc); - } - else - { - for ( sal_uInt16 i = 0; i < aTabCols.Count(); ++i ) + else { - const SwTabColsEntry& rEntry = aTabCols.GetEntry( i ); - nEnd = static_cast< sal_uInt16 >(rEntry.nPos - aTabCols.GetLeft()); - SvxColumnDescription aColDesc( nStart, nEnd, + for ( sal_uInt16 i = 0; i < aTabCols.Count(); ++i ) + { + const SwTabColsEntry& rEntry = aTabCols.GetEntry( i ); + nEnd = static_cast< sal_uInt16 >(rEntry.nPos - aTabCols.GetLeft()); + SvxColumnDescription aColDesc( nStart, nEnd, rEntry.nMin - aTabCols.GetLeft(), rEntry.nMax - aTabCols.GetLeft(), - !aTabCols.IsHidden(i) ); + !aTabCols.IsHidden(i) ); + aColItem.Append(aColDesc); + nStart = nEnd; + } + SvxColumnDescription aColDesc(nStart, aTabCols.GetRight() - aTabCols.GetLeft(), + 0, 0, + sal_True); aColItem.Append(aColDesc); - nStart = nEnd; } - SvxColumnDescription aColDesc(nStart, aTabCols.GetRight() - aTabCols.GetLeft(), - 0, 0, - sal_True); - aColItem.Append(aColDesc); - } - rSet.Put(aColItem, nWhich); - } - else if ( bFrmSelection || nFrmType & ( FRMTYPE_COLUMN | FRMTYPE_COLSECT ) ) - { - // Aus Rahmen oder Seite ? - sal_uInt16 nNum = 0; - if(bFrmSelection) - { - const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); - if(pFmt) - nNum = pFmt->GetCol().GetNumCols(); + rSet.Put(aColItem, nWhich); } - else - nNum = rSh.GetCurColNum(); - - if( - //eigentlich sollte FRMTYPE_COLSECT nicht enthalten sein, wenn der Rahmen selektiert ist! - !bFrmSelection && - nFrmType & FRMTYPE_COLSECT ) + else if ( bFrmSelection || nFrmType & ( FRMTYPE_COLUMN | FRMTYPE_COLSECT ) ) { - const SwSection *pSect = rSh.GetAnySection(sal_False, pPt); - ASSERT( pSect, "Welcher Bereich?"); - if( pSect ) + // Aus Rahmen oder Seite ? + sal_uInt16 nNum = 0; + if(bFrmSelection) { - SwSectionFmt *pFmt = pSect->GetFmt(); - const SwFmtCol& rCol = pFmt->GetCol(); - if(rSh.IsInRightToLeftText()) - nNum = rCol.GetColumns().Count() - nNum; - else - --nNum; - SvxColumnItem aColItem(nNum); - SwRect aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt); - const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt); - - ::lcl_FillSvxColumn(rCol, sal_uInt16(bVerticalWriting ? aRect.Height() : aRect.Width()), aColItem, 0); + const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); + if(pFmt) + nNum = pFmt->GetCol().GetNumCols(); + } + else + nNum = rSh.GetCurColNum(); - if(bVerticalWriting) + if( + //eigentlich sollte FRMTYPE_COLSECT nicht enthalten sein, wenn der Rahmen selektiert ist! + !bFrmSelection && + nFrmType & FRMTYPE_COLSECT ) + { + const SwSection *pSect = rSh.GetAnySection(sal_False, pPt); + ASSERT( pSect, "Welcher Bereich?"); + if( pSect ) { - aRect.Pos() += Point(aTmpRect.Left(), aTmpRect.Top()); - aRect.Pos().Y() -= rPageRect.Top(); - aColItem.SetLeft ((sal_uInt16)(aRect.Top())); - aColItem.SetRight((sal_uInt16)(nPageHeight - aRect.Bottom() )); + SwSectionFmt *pFmt = pSect->GetFmt(); + const SwFmtCol& rCol = pFmt->GetCol(); + if(rSh.IsInRightToLeftText()) + nNum = rCol.GetColumns().Count() - nNum; + else + --nNum; + SvxColumnItem aColItem(nNum); + SwRect aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt); + const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt); + + ::lcl_FillSvxColumn(rCol, sal_uInt16(bVerticalWriting ? aRect.Height() : aRect.Width()), aColItem, 0); + + if(bVerticalWriting) + { + aRect.Pos() += Point(aTmpRect.Left(), aTmpRect.Top()); + aRect.Pos().Y() -= rPageRect.Top(); + aColItem.SetLeft ((sal_uInt16)(aRect.Top())); + aColItem.SetRight((sal_uInt16)(nPageHeight - aRect.Bottom() )); + } + else + { + aRect.Pos() += aTmpRect.Pos(); + + // PAGES01 + // make relative to page position: + aColItem.SetLeft ((sal_uInt16)( aRect.Left() - rPageRect.Left() )); + aColItem.SetRight((sal_uInt16)( rPageRect.Right() - aRect.Right())); + } + aColItem.SetOrtho(aColItem.CalcOrtho()); + + rSet.Put(aColItem, nWhich); } - else + } + else if( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) + { + // Spalten in Rahmen + if ( nNum ) { - aRect.Pos() += aTmpRect.Pos(); - - // PAGES01 - // make relative to page position: - aColItem.SetLeft ((sal_uInt16)( aRect.Left() - rPageRect.Left() )); - aColItem.SetRight((sal_uInt16)( rPageRect.Right() - aRect.Right())); + const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt() ; + + const SwFmtCol& rCol = pFmt->GetCol(); + if(rSh.IsInRightToLeftText()) + nNum = rCol.GetColumns().Count() - nNum; + else + nNum--; + SvxColumnItem aColItem(nNum); + const SwRect &rSizeRect = rSh.GetAnyCurRect(RECT_FLY_PRT_EMBEDDED, pPt); + + sal_Bool bUseVertical = bFrameHasVerticalColumns || (!bFrmSelection && bVerticalWriting); + const long lWidth = bUseVertical ? rSizeRect.Height() : rSizeRect.Width(); + const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); + long nDist2 = ((bUseVertical ? rRect.Height() : rRect.Width()) - lWidth) /2; + ::lcl_FillSvxColumn(rCol, sal_uInt16(lWidth), aColItem, nDist2); + + SfxItemSet aFrameSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE); + rSh.GetFlyFrmAttr( aFrameSet ); + + if(bUseVertical) + { + aColItem.SetLeft ((sal_uInt16)(rRect.Top()- rPageRect.Top())); + aColItem.SetRight((sal_uInt16)(nPageHeight + rPageRect.Top() - rRect.Bottom() )); + } + else + { + aColItem.SetLeft ((sal_uInt16)(rRect.Left() - rPageRect.Left() )); + aColItem.SetRight((sal_uInt16)(rPageRect.Right() - rRect.Right() )); + } + + aColItem.SetOrtho(aColItem.CalcOrtho()); + + rSet.Put(aColItem, nWhich); } - aColItem.SetOrtho(aColItem.CalcOrtho()); - - rSet.Put(aColItem, nWhich); + else + rSet.DisableItem(nWhich); } - } - else if( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) - { - // Spalten in Rahmen - if ( nNum ) - { - const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt() ; - - const SwFmtCol& rCol = pFmt->GetCol(); - if(rSh.IsInRightToLeftText()) - nNum = rCol.GetColumns().Count() - nNum; + else + { // Spalten auf der Seite + const SwFrmFmt& rMaster = rDesc.GetMaster(); + SwFmtCol aCol(rMaster.GetCol()); + if(rFrameDir.GetValue() == FRMDIR_HORI_RIGHT_TOP) + nNum = aCol.GetColumns().Count() - nNum; else nNum--; - SvxColumnItem aColItem(nNum); - const SwRect &rSizeRect = rSh.GetAnyCurRect(RECT_FLY_PRT_EMBEDDED, pPt); - sal_Bool bUseVertical = bFrameHasVerticalColumns || (!bFrmSelection && bVerticalWriting); - const long lWidth = bUseVertical ? rSizeRect.Height() : rSizeRect.Width(); - const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); - long nDist2 = ((bUseVertical ? rRect.Height() : rRect.Width()) - lWidth) /2; - ::lcl_FillSvxColumn(rCol, sal_uInt16(lWidth), aColItem, nDist2); - - SfxItemSet aFrameSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE); - rSh.GetFlyFrmAttr( aFrameSet ); - - if(bUseVertical) + SvxColumnItem aColItem(nNum); + const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT, pPt); + const SvxBoxItem& rBox = (const SvxBoxItem&)rMaster.GetFmtAttr(RES_BOX); + long nDist = rBox.GetDistance(); + ::lcl_FillSvxColumn(aCol, + sal_uInt16(bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width() ), + aColItem, nDist); + + if(bBrowse) { - aColItem.SetLeft ((sal_uInt16)(rRect.Top()- rPageRect.Top())); - aColItem.SetRight((sal_uInt16)(nPageHeight + rPageRect.Top() - rRect.Bottom() )); + aColItem.SetLeft((sal_uInt16)rPagePrtRect.Left()); + aColItem.SetRight(sal_uInt16(nPageWidth - rPagePrtRect.Right())); } else { - aColItem.SetLeft ((sal_uInt16)(rRect.Left() - rPageRect.Left() )); - aColItem.SetRight((sal_uInt16)(rPageRect.Right() - rRect.Right() )); + aColItem.SetLeft (aPageLRSpace.GetLeft()); + aColItem.SetRight(aPageLRSpace.GetRight()); } - aColItem.SetOrtho(aColItem.CalcOrtho()); rSet.Put(aColItem, nWhich); } - else - rSet.DisableItem(nWhich); } else - { // Spalten auf der Seite - const SwFrmFmt& rMaster = rDesc.GetMaster(); - SwFmtCol aCol(rMaster.GetCol()); - if(rFrameDir.GetValue() == FRMDIR_HORI_RIGHT_TOP) - nNum = aCol.GetColumns().Count() - nNum; - else - nNum--; - - SvxColumnItem aColItem(nNum); - const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT, pPt); - const SvxBoxItem& rBox = (const SvxBoxItem&)rMaster.GetFmtAttr(RES_BOX); - long nDist = rBox.GetDistance(); - ::lcl_FillSvxColumn(aCol, - sal_uInt16(bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width() ), - aColItem, nDist); - - if(bBrowse) - { - aColItem.SetLeft((sal_uInt16)rPagePrtRect.Left()); - aColItem.SetRight(sal_uInt16(nPageWidth - rPagePrtRect.Right())); - } - else - { - aColItem.SetLeft (aPageLRSpace.GetLeft()); - aColItem.SetRight(aPageLRSpace.GetRight()); - } - aColItem.SetOrtho(aColItem.CalcOrtho()); - - rSet.Put(aColItem, nWhich); - } + rSet.DisableItem(nWhich); + break; } - else - rSet.DisableItem(nWhich); - break; - } + case SID_RULER_ROWS : case SID_RULER_ROWS_VERTICAL: - { - sal_Bool bFrameHasVerticalColumns(sal_False); { - sal_Bool bFrameRTL; - sal_Bool bFrameVertL2R; - bFrameHasVerticalColumns = rSh.IsFrmVertical(sal_False, bFrameRTL, bFrameVertL2R) && - bFrmSelection; - } + sal_Bool bFrameHasVerticalColumns(sal_False); + { + sal_Bool bFrameRTL; + sal_Bool bFrameVertL2R; + bFrameHasVerticalColumns = rSh.IsFrmVertical(sal_False, bFrameRTL, bFrameVertL2R) && + bFrmSelection; + } - if( ( (SID_RULER_ROWS == nWhich) && + if( ( (SID_RULER_ROWS == nWhich) && ((!bVerticalWriting && !bFrmSelection) || (bFrmSelection && !bFrameHasVerticalColumns)) ) || - ((SID_RULER_ROWS_VERTICAL == nWhich) && + ((SID_RULER_ROWS_VERTICAL == nWhich) && ((bVerticalWriting && !bFrmSelection) || bFrameHasVerticalColumns))) - rSet.DisableItem(nWhich); - else if ( IsTabRowFromDoc() || + rSet.DisableItem(nWhich); + else if ( IsTabRowFromDoc() || ( rSh.GetTableFmt() && !bFrmSelection && !(nFrmType & FRMTYPE_COLSECT ) ) ) - { - SwTabCols aTabCols; - //no current value necessary - sal_uInt16 nNum = 0; - if ( 0 != ( bSetTabRowFromDoc = IsTabRowFromDoc() ) ) { - rSh.GetMouseTabRows( aTabCols, aTabColFromDocPos ); - } - else - { - rSh.GetTabRows( aTabCols ); - } + SwTabCols aTabCols; + //no current value necessary + sal_uInt16 nNum = 0; + if ( 0 != ( bSetTabRowFromDoc = IsTabRowFromDoc() ) ) + { + rSh.GetMouseTabRows( aTabCols, aTabColFromDocPos ); + } + else + { + rSh.GetTabRows( aTabCols ); + } -// ASSERT(nNum <= aTabCols.Count(), "TabCol not found"); - const int nLft = aTabCols.GetLeftMin(); - const int nRgt = (sal_uInt16)(bVerticalWriting ? nPageWidth : nPageHeight) - - (aTabCols.GetLeftMin() + - aTabCols.GetRight()); + // ASSERT(nNum <= aTabCols.Count(), "TabCol not found"); + const int nLft = aTabCols.GetLeftMin(); + const int nRgt = (sal_uInt16)(bVerticalWriting ? nPageWidth : nPageHeight) - + (aTabCols.GetLeftMin() + + aTabCols.GetRight()); - const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); - const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); + const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); + const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); - SvxColumnItem aColItem(nNum, nL, nR); + SvxColumnItem aColItem(nNum, nL, nR); - sal_uInt16 nStart = 0, - nEnd; + sal_uInt16 nStart = 0, + nEnd; - for ( sal_uInt16 i = 0; i < aTabCols.Count(); ++i ) - { - const SwTabColsEntry& rEntry = aTabCols.GetEntry( i ); - if(bVerticalWriting) - { - nEnd = sal_uInt16(aTabCols.GetRight() - rEntry.nPos); - SvxColumnDescription aColDesc( nStart, nEnd, - aTabCols.GetRight() - rEntry.nMax, aTabCols.GetRight() - rEntry.nMin, - !aTabCols.IsHidden(i) ); - aColItem.Append(aColDesc); - } - else + for ( sal_uInt16 i = 0; i < aTabCols.Count(); ++i ) { - nEnd = sal_uInt16(rEntry.nPos - aTabCols.GetLeft()); - SvxColumnDescription aColDesc( nStart, nEnd, + const SwTabColsEntry& rEntry = aTabCols.GetEntry( i ); + if(bVerticalWriting) + { + nEnd = sal_uInt16(aTabCols.GetRight() - rEntry.nPos); + SvxColumnDescription aColDesc( nStart, nEnd, + aTabCols.GetRight() - rEntry.nMax, aTabCols.GetRight() - rEntry.nMin, + !aTabCols.IsHidden(i) ); + aColItem.Append(aColDesc); + } + else + { + nEnd = sal_uInt16(rEntry.nPos - aTabCols.GetLeft()); + SvxColumnDescription aColDesc( nStart, nEnd, sal_uInt16(rEntry.nMin - aTabCols.GetLeft()), sal_uInt16(rEntry.nMax - aTabCols.GetLeft()), - !aTabCols.IsHidden(i) ); - aColItem.Append(aColDesc); + !aTabCols.IsHidden(i) ); + aColItem.Append(aColDesc); + } + nStart = nEnd; } - nStart = nEnd; + if(bVerticalWriting) + nEnd = static_cast< sal_uInt16 >(aTabCols.GetRight()); + else + nEnd = static_cast< sal_uInt16 >(aTabCols.GetLeft()); + // put a position protection when the last row cannot be moved + // due to a page break inside of a row + if(!aTabCols.IsLastRowAllowedToChange()) + bPutContentProtection = sal_True; + + SvxColumnDescription aColDesc( nStart, nEnd, + aTabCols.GetRight(), aTabCols.GetRight(), + sal_False ); + aColItem.Append(aColDesc); + + rSet.Put(aColItem, nWhich); } - if(bVerticalWriting) - nEnd = static_cast< sal_uInt16 >(aTabCols.GetRight()); else - nEnd = static_cast< sal_uInt16 >(aTabCols.GetLeft()); - // put a position protection when the last row cannot be moved - // due to a page break inside of a row - if(!aTabCols.IsLastRowAllowedToChange()) - bPutContentProtection = sal_True; - - SvxColumnDescription aColDesc( nStart, nEnd, - aTabCols.GetRight(), aTabCols.GetRight(), - sal_False ); - aColItem.Append(aColDesc); - - rSet.Put(aColItem, nWhich); + rSet.DisableItem(nWhich); } - else - rSet.DisableItem(nWhich); - } - break; + break; + case SID_RULER_PAGE_POS: - { - // PAGES01 - SvxPagePosSizeItem aPagePosSize( + { + // PAGES01 + SvxPagePosSizeItem aPagePosSize( Point( rPageRect.Left(), rPageRect.Top()) , nPageWidth, nPageHeight); - rSet.Put(aPagePosSize); - break; - } + rSet.Put(aPagePosSize); + break; + } + case SID_RULER_LR_MIN_MAX: - { - Rectangle aRectangle; - if( ( nFrmType & FRMTYPE_COLSECT ) && !IsTabColFromDoc() && - ( nFrmType & ( FRMTYPE_TABLE|FRMTYPE_COLUMN ) ) ) { - if( nFrmType & FRMTYPE_TABLE ) + Rectangle aRectangle; + if( ( nFrmType & FRMTYPE_COLSECT ) && !IsTabColFromDoc() && + ( nFrmType & ( FRMTYPE_TABLE|FRMTYPE_COLUMN ) ) ) { - const sal_uInt16 nNum = rSh.GetCurTabColNum(); - SwTabCols aTabCols; - rSh.GetTabCols( aTabCols ); - - const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft(); - const int nRgt = (sal_uInt16)nPageWidth -(aTabCols.GetLeftMin() + aTabCols.GetRight()); - - const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); - const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); - - aRectangle.Left() = nL; - if(nNum > 1) - aRectangle.Left() += aTabCols[nNum - 2]; - if(nNum) - aRectangle.Left() += MINLAY; - if(aTabCols.Count() <= nNum + 1 ) - aRectangle.Right() = nR; - else - aRectangle.Right() = nPageWidth - (nL + aTabCols[nNum + 1]); - - if(nNum < aTabCols.Count()) - aRectangle.Right() += MINLAY; - } - else - { - const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); - const SwFmtCol* pCols = pFmt ? &pFmt->GetCol(): - &rDesc.GetMaster().GetCol(); - const SwColumns& rCols = pCols->GetColumns(); - sal_uInt16 nNum = rSh.GetCurOutColNum(); - sal_uInt16 nCount = Min(sal_uInt16(nNum + 1), rCols.Count()); - const SwRect aRect( rSh.GetAnyCurRect( pFmt - ? RECT_FLY_PRT_EMBEDDED - : RECT_PAGE_PRT, pPt )); - const SwRect aAbsRect( rSh.GetAnyCurRect( pFmt - ? RECT_FLY_EMBEDDED - : RECT_PAGE, pPt )); - - //die Breite im Rahmen bzw. innerhalbe der Seitenraender - const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width(); - //die gesamte Rahmenbreite - die Differenz ist der doppelte Abstand zum Rand - const sal_uInt16 nOuterWidth = (sal_uInt16)aAbsRect.Width(); - int nWidth = 0, - nStart = 0, - nEnd = 0; - aRectangle.Left() = 0; - for ( sal_uInt16 i = 0; i < nCount; ++i ) + if( nFrmType & FRMTYPE_TABLE ) { - SwColumn* pCol = rCols[i]; - nStart = pCol->GetLeft() + nWidth; - if(i == nNum - 2) - aRectangle.Left() = nStart; - nWidth += pCols->CalcColWidth( i, nTotalWidth ); - nEnd = nWidth - pCol->GetRight(); - } - aRectangle.Right() = rPageRect.Right() - nEnd; - aRectangle.Left() -= rPageRect.Left(); + const sal_uInt16 nNum = rSh.GetCurTabColNum(); + SwTabCols aTabCols; + rSh.GetTabCols( aTabCols ); + + const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft(); + const int nRgt = (sal_uInt16)nPageWidth -(aTabCols.GetLeftMin() + aTabCols.GetRight()); + + const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); + const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); + + aRectangle.Left() = nL; + if(nNum > 1) + aRectangle.Left() += aTabCols[nNum - 2]; + if(nNum) + aRectangle.Left() += MINLAY; + if(aTabCols.Count() <= nNum + 1 ) + aRectangle.Right() = nR; + else + aRectangle.Right() = nPageWidth - (nL + aTabCols[nNum + 1]); - if(nNum > 1) - { - aRectangle.Left() += MINLAY; - aRectangle.Left() += aRect.Left(); + if(nNum < aTabCols.Count()) + aRectangle.Right() += MINLAY; } - if(pFmt) //Bereich in Rahmen - hier darf man bis zum Rand - aRectangle.Left() = aRectangle.Right() = 0; else { - // das Rechteck an die richtige absolute Position verschieben - aRectangle.Left() += aAbsRect.Left(); - aRectangle.Right() -= aAbsRect.Left(); - // Abstand zur Umrandung mit einbeziehen - aRectangle.Right() -= (nOuterWidth - nTotalWidth) / 2; - } + const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); + const SwFmtCol* pCols = pFmt ? &pFmt->GetCol(): + &rDesc.GetMaster().GetCol(); + const SwColumns& rCols = pCols->GetColumns(); + sal_uInt16 nNum = rSh.GetCurOutColNum(); + sal_uInt16 nCount = Min(sal_uInt16(nNum + 1), rCols.Count()); + const SwRect aRect( rSh.GetAnyCurRect( pFmt + ? RECT_FLY_PRT_EMBEDDED + : RECT_PAGE_PRT, pPt )); + const SwRect aAbsRect( rSh.GetAnyCurRect( pFmt + ? RECT_FLY_EMBEDDED + : RECT_PAGE, pPt )); + + //die Breite im Rahmen bzw. innerhalbe der Seitenraender + const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width(); + //die gesamte Rahmenbreite - die Differenz ist der doppelte Abstand zum Rand + const sal_uInt16 nOuterWidth = (sal_uInt16)aAbsRect.Width(); + int nWidth = 0, + nStart = 0, + nEnd = 0; + aRectangle.Left() = 0; + for ( sal_uInt16 i = 0; i < nCount; ++i ) + { + SwColumn* pCol = rCols[i]; + nStart = pCol->GetLeft() + nWidth; + if(i == nNum - 2) + aRectangle.Left() = nStart; + nWidth += pCols->CalcColWidth( i, nTotalWidth ); + nEnd = nWidth - pCol->GetRight(); + } + aRectangle.Right() = rPageRect.Right() - nEnd; + aRectangle.Left() -= rPageRect.Left(); - if(nNum < rCols.Count()) - { - aRectangle.Right() += MINLAY; - } - else - // rechts ist jetzt nur noch der Seitenrand - aRectangle.Right() = 0; + if(nNum > 1) + { + aRectangle.Left() += MINLAY; + aRectangle.Left() += aRect.Left(); + } + if(pFmt) //Bereich in Rahmen - hier darf man bis zum Rand + aRectangle.Left() = aRectangle.Right() = 0; + else + { + // das Rechteck an die richtige absolute Position verschieben + aRectangle.Left() += aAbsRect.Left(); + aRectangle.Right() -= aAbsRect.Left(); + // Abstand zur Umrandung mit einbeziehen + aRectangle.Right() -= (nOuterWidth - nTotalWidth) / 2; + } + + if(nNum < rCols.Count()) + { + aRectangle.Right() += MINLAY; + } + else + // rechts ist jetzt nur noch der Seitenrand + aRectangle.Right() = 0; + } } - } - else if ( ((nFrmType & FRMTYPE_TABLE) || IsTabColFromDoc()) && - !bFrmSelection ) - { - sal_Bool bColumn; - if ( IsTabColFromDoc() ) - bColumn = rSh.GetCurMouseColNum( aTabColFromDocPos ) != 0; - else - bColumn = (nFrmType & (FRMTYPE_COLUMN|FRMTYPE_FLY_ANY| - FRMTYPE_COLSECTOUTTAB)) ? - sal_True : sal_False; - if ( !bColumn ) + else if ( ((nFrmType & FRMTYPE_TABLE) || IsTabColFromDoc()) && + !bFrmSelection ) { - if( nFrmType & FRMTYPE_FLY_ANY && IsTabColFromDoc() ) + sal_Bool bColumn; + if ( IsTabColFromDoc() ) + bColumn = rSh.GetCurMouseColNum( aTabColFromDocPos ) != 0; + else + bColumn = (nFrmType & (FRMTYPE_COLUMN|FRMTYPE_FLY_ANY|FRMTYPE_COLSECTOUTTAB)) + ? sal_True + : sal_False; + if ( !bColumn ) { - SwRect aRect( rSh.GetAnyCurRect( - RECT_FLY_PRT_EMBEDDED, pPt ) ); - aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED, - pPt ).Pos(); + if( nFrmType & FRMTYPE_FLY_ANY && IsTabColFromDoc() ) + { + SwRect aRect( rSh.GetAnyCurRect( + RECT_FLY_PRT_EMBEDDED, pPt ) ); + aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED, + pPt ).Pos(); - aRectangle.Left() = aRect.Left() - rPageRect.Left(); - aRectangle.Right() = rPageRect.Right() - aRect.Right(); - } - else if( bBrowse ) - { - aRectangle.Left() = rPagePrtRect.Left(); - aRectangle.Right() = nPageWidth - rPagePrtRect.Right(); + aRectangle.Left() = aRect.Left() - rPageRect.Left(); + aRectangle.Right() = rPageRect.Right() - aRect.Right(); + } + else if( bBrowse ) + { + aRectangle.Left() = rPagePrtRect.Left(); + aRectangle.Right() = nPageWidth - rPagePrtRect.Right(); + } + else + { + aRectangle.Left() = aPageLRSpace.GetLeft(); + aRectangle.Right() = aPageLRSpace.GetRight(); + } } else - { - aRectangle.Left() = aPageLRSpace.GetLeft(); - aRectangle.Right() = aPageLRSpace.GetRight(); - } - } - else - { //hier nur fuer Tabelle in mehrspaltigen Seiten und Rahmen - sal_Bool bSectOutTbl = (nFrmType & FRMTYPE_TABLE) ? sal_True : sal_False; - sal_Bool bFrame = (nFrmType & FRMTYPE_FLY_ANY) ? sal_True : sal_False; - sal_Bool bColSct = (nFrmType & ( bSectOutTbl - ? FRMTYPE_COLSECTOUTTAB - : FRMTYPE_COLSECT ) - ) ? sal_True : sal_False; - //Damit man auch mit der Mouse ziehen kann, - //ohne in der Tabelle zu stehen - CurRectType eRecType = RECT_PAGE_PRT; - sal_uInt16 nNum = IsTabColFromDoc() ? - rSh.GetCurMouseColNum( aTabColFromDocPos ): - rSh.GetCurOutColNum(); - const SwFrmFmt* pFmt = NULL; - if( bColSct ) - { - eRecType = bSectOutTbl ? RECT_OUTTABSECTION - : RECT_SECTION; - const SwSection *pSect = rSh.GetAnySection( bSectOutTbl, pPt ); - ASSERT( pSect, "Welcher Bereich?"); - pFmt = pSect->GetFmt(); - } - else if( bFrame ) - { - pFmt = rSh.GetFlyFrmFmt(); - eRecType = RECT_FLY_PRT_EMBEDDED; - } + { //hier nur fuer Tabelle in mehrspaltigen Seiten und Rahmen + sal_Bool bSectOutTbl = (nFrmType & FRMTYPE_TABLE) ? sal_True : sal_False; + sal_Bool bFrame = (nFrmType & FRMTYPE_FLY_ANY) ? sal_True : sal_False; + sal_Bool bColSct = (nFrmType & ( bSectOutTbl + ? FRMTYPE_COLSECTOUTTAB + : FRMTYPE_COLSECT ) + ) ? sal_True : sal_False; + //Damit man auch mit der Mouse ziehen kann, + //ohne in der Tabelle zu stehen + CurRectType eRecType = RECT_PAGE_PRT; + sal_uInt16 nNum = IsTabColFromDoc() ? + rSh.GetCurMouseColNum( aTabColFromDocPos ): + rSh.GetCurOutColNum(); + const SwFrmFmt* pFmt = NULL; + if( bColSct ) + { + eRecType = bSectOutTbl ? RECT_OUTTABSECTION + : RECT_SECTION; + const SwSection *pSect = rSh.GetAnySection( bSectOutTbl, pPt ); + ASSERT( pSect, "Welcher Bereich?"); + pFmt = pSect->GetFmt(); + } + else if( bFrame ) + { + pFmt = rSh.GetFlyFrmFmt(); + eRecType = RECT_FLY_PRT_EMBEDDED; + } - const SwFmtCol* pCols = pFmt ? &pFmt->GetCol(): - &rDesc.GetMaster().GetCol(); - const SwColumns& rCols = pCols->GetColumns(); - const sal_uInt16 nBorder = pFmt ? pFmt->GetBox().GetDistance() : - rDesc.GetMaster().GetBox().GetDistance(); + const SwFmtCol* pCols = pFmt ? &pFmt->GetCol(): + &rDesc.GetMaster().GetCol(); + const SwColumns& rCols = pCols->GetColumns(); + const sal_uInt16 nBorder = pFmt ? pFmt->GetBox().GetDistance() : + rDesc.GetMaster().GetBox().GetDistance(); - /* RECT_FLY_PRT_EMBEDDED returns the relative position to + /* RECT_FLY_PRT_EMBEDDED returns the relative position to RECT_FLY_EMBEDDED the absolute position must be added here - */ - SwRect aRect( rSh.GetAnyCurRect( eRecType, pPt ) ); - if(RECT_FLY_PRT_EMBEDDED == eRecType) - aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED, - pPt ).Pos(); - - const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width(); - //nStart und nEnd initialisieren fuer nNum == 0 - int nWidth = 0, - nStart = 0, - nEnd = nTotalWidth; - - if( nNum > rCols.Count() ) - { - ASSERT( !this, "es wird auf dem falschen FmtCol gearbeitet!" ); - nNum = rCols.Count(); - } + */ + SwRect aRect( rSh.GetAnyCurRect( eRecType, pPt ) ); + if(RECT_FLY_PRT_EMBEDDED == eRecType) + aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED, + pPt ).Pos(); + + const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width(); + //nStart und nEnd initialisieren fuer nNum == 0 + int nWidth = 0, + nStart = 0, + nEnd = nTotalWidth; + + if( nNum > rCols.Count() ) + { + ASSERT( !this, "es wird auf dem falschen FmtCol gearbeitet!" ); + nNum = rCols.Count(); + } - for( sal_uInt16 i = 0; i < nNum; ++i ) - { - SwColumn* pCol = rCols[i]; - nStart = pCol->GetLeft() + nWidth; - nWidth += pCols->CalcColWidth( i, nTotalWidth ); - nEnd = nWidth - pCol->GetRight(); - } - if( bFrame | bColSct ) - { - aRectangle.Left() = aRect.Left() - rPageRect.Left() + nStart; - aRectangle.Right() = nPageWidth - aRectangle.Left() - nEnd + nStart; - } - else if(!bBrowse) - { - aRectangle.Left() = aPageLRSpace.GetLeft() + nStart; - aRectangle.Right() = nPageWidth - nEnd - aPageLRSpace.GetLeft(); - } - else - { - long nLeft = rPagePrtRect.Left(); - aRectangle.Left() = nStart + nLeft; - aRectangle.Right() = nPageWidth - nEnd - nLeft; - } - if(!bFrame) - { - aRectangle.Left() += nBorder; - aRectangle.Right() -= nBorder; + for( sal_uInt16 i = 0; i < nNum; ++i ) + { + SwColumn* pCol = rCols[i]; + nStart = pCol->GetLeft() + nWidth; + nWidth += pCols->CalcColWidth( i, nTotalWidth ); + nEnd = nWidth - pCol->GetRight(); + } + if( bFrame | bColSct ) + { + aRectangle.Left() = aRect.Left() - rPageRect.Left() + nStart; + aRectangle.Right() = nPageWidth - aRectangle.Left() - nEnd + nStart; + } + else if(!bBrowse) + { + aRectangle.Left() = aPageLRSpace.GetLeft() + nStart; + aRectangle.Right() = nPageWidth - nEnd - aPageLRSpace.GetLeft(); + } + else + { + long nLeft = rPagePrtRect.Left(); + aRectangle.Left() = nStart + nLeft; + aRectangle.Right() = nPageWidth - nEnd - nLeft; + } + if(!bFrame) + { + aRectangle.Left() += nBorder; + aRectangle.Right() -= nBorder; + } } } + else if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) + { + aRectangle.Left() = aPageLRSpace.GetLeft(); + aRectangle.Right() = aPageLRSpace.GetRight(); + } + else + aRectangle.Left() = aRectangle.Right() = 0; + + SfxRectangleItem aLR( SID_RULER_LR_MIN_MAX , aRectangle); + rSet.Put(aLR); } - else if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) - { - aRectangle.Left() = aPageLRSpace.GetLeft(); - aRectangle.Right() = aPageLRSpace.GetRight(); - } - else - aRectangle.Left() = aRectangle.Right() = 0; + break; - SfxRectangleItem aLR( SID_RULER_LR_MIN_MAX , aRectangle); - rSet.Put(aLR); - } - break; case SID_RULER_PROTECT: - { - if(bFrmSelection) { - sal_uInt8 nProtect = pWrtShell->IsSelObjProtected( FLYPROTECT_SIZE|FLYPROTECT_POS|FLYPROTECT_CONTENT ); + if(bFrmSelection) + { + sal_uInt8 nProtect = pWrtShell->IsSelObjProtected( FLYPROTECT_SIZE|FLYPROTECT_POS|FLYPROTECT_CONTENT ); - SvxProtectItem aProt(SID_RULER_PROTECT); - aProt.SetCntntProtect((nProtect & FLYPROTECT_CONTENT) != 0); - aProt.SetSizeProtect ((nProtect & FLYPROTECT_SIZE) != 0); - aProt.SetPosProtect ((nProtect & FLYPROTECT_POS) != 0); - rSet.Put(aProt); - } - else - { - SvxProtectItem aProtect(SID_RULER_PROTECT); - if(bBrowse && !(nFrmType & (FRMTYPE_DRAWOBJ|FRMTYPE_COLUMN)) && !rSh.GetTableFmt()) + SvxProtectItem aProt(SID_RULER_PROTECT); + aProt.SetCntntProtect((nProtect & FLYPROTECT_CONTENT) != 0); + aProt.SetSizeProtect ((nProtect & FLYPROTECT_SIZE) != 0); + aProt.SetPosProtect ((nProtect & FLYPROTECT_POS) != 0); + rSet.Put(aProt); + } + else { - aProtect.SetSizeProtect(sal_True); - aProtect.SetPosProtect(sal_True); + SvxProtectItem aProtect(SID_RULER_PROTECT); + if(bBrowse && !(nFrmType & (FRMTYPE_DRAWOBJ|FRMTYPE_COLUMN)) && !rSh.GetTableFmt()) + { + aProtect.SetSizeProtect(sal_True); + aProtect.SetPosProtect(sal_True); + } + rSet.Put(aProtect); } - rSet.Put(aProtect); } - } - break; + break; } nWhich = aIter.NextWhich(); } diff --git a/sw/source/ui/uno/unofreg.cxx b/sw/source/ui/uno/unofreg.cxx index 9769650a5b0e..fb5d73a599d9 100644 --- a/sw/source/ui/uno/unofreg.cxx +++ b/sw/source/ui/uno/unofreg.cxx @@ -124,7 +124,6 @@ extern uno::Sequence< OUString > SAL_CALL SwXMailMerge_getSupportedServiceNames( extern OUString SAL_CALL SwXMailMerge_getImplementationName() throw(); extern uno::Reference< uno::XInterface > SAL_CALL SwXMailMerge_createInstance(const uno::Reference< XMultiServiceFactory > & rSMgr) throw( uno::Exception ); -// --> OD 2007-05-24 #i73788# #include "cppuhelper/implementationentry.hxx" namespace comp_FinalThreadManager { @@ -135,7 +134,8 @@ com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL _crea com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const & context ); } -// <-- + +#include "SwPanelFactory.hxx" // #ifdef __cplusplus @@ -356,14 +356,19 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( SwUnoModule_createInstance, SwUnoModule_getSupportedServiceNames() ); } - // --> OD 2007-05-24 #i73788# + else if ( ::sw::sidebar::SwPanelFactory::getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) ) + { + xFactory = ::cppu::createSingleFactory( xMSF, + ::sw::sidebar::SwPanelFactory::getImplementationName(), + ::sw::sidebar::SwPanelFactory::createInstance, + ::sw::sidebar::SwPanelFactory::getSupportedServiceNames() ); + } else if( comp_FinalThreadManager::_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) ) { pRet = ::cppu::component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey, entries); } - // <-- if( xFactory.is()) { diff --git a/sw/source/ui/utlui/navipi.cxx b/sw/source/ui/utlui/navipi.cxx index 8e0d414bfee5..9308c79afafa 100644 --- a/sw/source/ui/utlui/navipi.cxx +++ b/sw/source/ui/utlui/navipi.cxx @@ -283,18 +283,18 @@ IMPL_LINK( SwNavigationPI, ToolBoxSelectHdl, ToolBox *, pBox ) break; case FN_SHOW_CONTENT_BOX: case FN_SELECT_CONTENT: - if(pContextWin->GetFloatingWindow()) - { - if(_IsZoomedIn() ) - { - _ZoomOut(); - } - else + if(pContextWin!=NULL && pContextWin->GetFloatingWindow()!=NULL) { - _ZoomIn(); + if(_IsZoomedIn() ) + { + _ZoomOut(); + } + else + { + _ZoomIn(); + } } - } - return sal_True; + return sal_True; //break; // Funktionen, die eine direkte Aktion ausloesen @@ -624,7 +624,7 @@ void SwNavigationPI::MakeMark() void SwNavigationPI::GotoPage() { - if ( pContextWin->GetFloatingWindow() && pContextWin->GetFloatingWindow()->IsRollUp()) + if (pContextWin && pContextWin->GetFloatingWindow() && pContextWin->GetFloatingWindow()->IsRollUp()) _ZoomIn(); if(IsGlobalMode()) ToggleTree(); @@ -640,14 +640,15 @@ void SwNavigationPI::_ZoomOut() { if (_IsZoomedIn()) { - FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); + FloatingWindow* pFloat = pContextWin!=NULL ? pContextWin->GetFloatingWindow() : NULL; bIsZoomedIn = sal_False; Size aSz(GetOutputSizePixel()); aSz.Height() = nZoomOut; Size aMinOutSizePixel = ((SfxDockingWindow*)GetParent())->GetMinOutputSizePixel(); ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel(Size( aMinOutSizePixel.Width(),nZoomOutInit)); - pFloat->SetOutputSizePixel(aSz); + if (pFloat != NULL) + pFloat->SetOutputSizePixel(aSz); FillBox(); if(IsGlobalMode()) { @@ -672,28 +673,31 @@ void SwNavigationPI::_ZoomOut() void SwNavigationPI::_ZoomIn() { - FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); - if (pFloat && - (!_IsZoomedIn() || ( pContextWin->GetFloatingWindow()->IsRollUp()))) + if (pContextWin != NULL) { - aContentTree.HideTree(); - aDocListBox.Hide(); - aGlobalTree.HideTree(); - bIsZoomedIn = sal_True; - Size aSz(GetOutputSizePixel()); - if( aSz.Height() > nZoomIn ) - nZoomOut = ( short ) aSz.Height(); - - aSz.Height() = nZoomIn; - Size aMinOutSizePixel = ((SfxDockingWindow*)GetParent())->GetMinOutputSizePixel(); - ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel(Size( - aMinOutSizePixel.Width(), aSz.Height())); - pFloat->SetOutputSizePixel(aSz); - SvLBoxEntry* pFirst = aContentTree.FirstSelected(); - if(pFirst) - aContentTree.Select(pFirst, sal_True); // toolbox enablen - pConfig->SetSmall( sal_True ); - aContentToolBox.CheckItem(FN_SHOW_CONTENT_BOX, sal_False); + FloatingWindow* pFloat = pContextWin->GetFloatingWindow(); + if (pFloat && + (!_IsZoomedIn() || ( pContextWin->GetFloatingWindow()->IsRollUp()))) + { + aContentTree.HideTree(); + aDocListBox.Hide(); + aGlobalTree.HideTree(); + bIsZoomedIn = sal_True; + Size aSz(GetOutputSizePixel()); + if( aSz.Height() > nZoomIn ) + nZoomOut = ( short ) aSz.Height(); + + aSz.Height() = nZoomIn; + Size aMinOutSizePixel = ((SfxDockingWindow*)GetParent())->GetMinOutputSizePixel(); + ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel(Size( + aMinOutSizePixel.Width(), aSz.Height())); + pFloat->SetOutputSizePixel(aSz); + SvLBoxEntry* pFirst = aContentTree.FirstSelected(); + if(pFirst) + aContentTree.Select(pFirst, sal_True); // toolbox enablen + pConfig->SetSmall( sal_True ); + aContentToolBox.CheckItem(FN_SHOW_CONTENT_BOX, sal_False); + } } } /*------------------------------------------------------------------------ @@ -703,25 +707,29 @@ void SwNavigationPI::_ZoomIn() void SwNavigationPI::Resize() { Window* pParent = GetParent(); - FloatingWindow* pFloat = ((DockingWindow*)pParent)->GetFloatingWindow(); - Size aNewSize; if( !_IsZoomedIn() ) { - //change the minimum width depending on the dock status - Size aMinOutSizePixel = ((SfxDockingWindow*)pParent)->GetMinOutputSizePixel(); - if( pFloat) - { - aNewSize = pFloat->GetOutputSizePixel(); - aMinOutSizePixel.Width() = nWishWidth; - aMinOutSizePixel.Height() = _IsZoomedIn() ? nZoomIn : nZoomOutInit; - } - else + Size aNewSize (pParent->GetOutputSizePixel()); + + SfxDockingWindow* pDockingParent = dynamic_cast<SfxDockingWindow*>(pParent); + if (pDockingParent != NULL) { - aNewSize = pParent->GetOutputSizePixel(); - aMinOutSizePixel.Width() = 0; - aMinOutSizePixel.Height() = 0; + FloatingWindow* pFloat = pDockingParent->GetFloatingWindow(); + //change the minimum width depending on the dock status + Size aMinOutSizePixel = pDockingParent->GetMinOutputSizePixel(); + if( pFloat) + { + aNewSize = pFloat->GetOutputSizePixel(); + aMinOutSizePixel.Width() = nWishWidth; + aMinOutSizePixel.Height() = _IsZoomedIn() ? nZoomIn : nZoomOutInit; + } + else + { + aMinOutSizePixel.Width() = 0; + aMinOutSizePixel.Height() = 0; + } + pDockingParent->SetMinOutputSizePixel(aMinOutSizePixel); } - ((SfxDockingWindow*)GetParent())->SetMinOutputSizePixel(aMinOutSizePixel); const Point aPos = aContentTree.GetPosPixel(); Point aLBPos = aDocListBox.GetPosPixel(); @@ -742,9 +750,8 @@ void SwNavigationPI::Resize() aNewSize.Height() += (nDist + nDocLBIniHeight + aPos.Y() - aGlobalTree.GetPosPixel().Y()); aGlobalTree.SetSizePixel(aNewSize); aDocListBox.SetPosSizePixel( aLBPos.X(), aLBPos.Y(), - aDocLBSz.Width(), aDocLBSz.Height(), - WINDOW_POSSIZE_X|WINDOW_POSSIZE_Y|WINDOW_POSSIZE_WIDTH); - + aDocLBSz.Width(), aDocLBSz.Height(), + WINDOW_POSSIZE_X|WINDOW_POSSIZE_Y|WINDOW_POSSIZE_WIDTH); } } @@ -851,21 +858,29 @@ SwNavigationPI::SwNavigationPI( SfxBindings* _pBindings, nWishWidth = aContentToolboxSize.Width(); nWishWidth += 2 * aContentToolBox.GetPosPixel().X(); - FloatingWindow* pFloat = ((DockingWindow*)pParent)->GetFloatingWindow(); - Size aMinSize(pFloat ? nWishWidth : 0, pFloat ? nZoomOutInit : 0); - ((SfxDockingWindow*)pParent)->SetMinOutputSizePixel(aMinSize); - SetOutputSizePixel( Size( nWishWidth, nZoomOutInit)); - Size aTmpParentSize(((SfxDockingWindow*)pParent)->GetSizePixel()); - if( - ( - aTmpParentSize.Width() < aMinSize.Width() || - aTmpParentSize.Height() < aMinSize.Height() - ) - && - ((SfxDockingWindow*)pParent)->GetFloatingWindow() && - !((SfxDockingWindow*)pParent)->GetFloatingWindow()->IsRollUp() - ) - ((SfxDockingWindow*)pParent)->SetOutputSizePixel(aMinSize); + DockingWindow* pDockingParent = dynamic_cast<DockingWindow*>(pParent); + if (pDockingParent != NULL) + { + FloatingWindow* pFloat = pDockingParent->GetFloatingWindow(); + Size aMinSize(pFloat ? nWishWidth : 0, pFloat ? nZoomOutInit : 0); + pDockingParent->SetMinOutputSizePixel(aMinSize); + SetOutputSizePixel( Size( nWishWidth, nZoomOutInit)); + + SfxDockingWindow* pSfxDockingParent = dynamic_cast<SfxDockingWindow*>(pParent); + if (pSfxDockingParent != NULL) + { + Size aTmpParentSize(pSfxDockingParent->GetSizePixel()); + if (aTmpParentSize.Width() < aMinSize.Width() + || aTmpParentSize.Height() < aMinSize.Height()) + { + if (pSfxDockingParent->GetFloatingWindow() + && ! pSfxDockingParent->GetFloatingWindow()->IsRollUp()) + { + pSfxDockingParent->SetOutputSizePixel(aMinSize); + } + } + } + } aContentTree.SetPosSizePixel( 0, nListboxYPos, 0, 0, WINDOW_POSSIZE_Y ); aContentTree.SetStyle( aContentTree.GetStyle()|WB_HASBUTTONS|WB_HASBUTTONSATROOT| @@ -937,6 +952,15 @@ SwNavigationPI::SwNavigationPI( SfxBindings* _pBindings, aContentTree.SetAccessibleName(SW_RESSTR(STR_ACCESS_TL_CONTENT)); aGlobalTree.SetAccessibleName(SW_RESSTR(STR_ACCESS_TL_GLOBAL)); aDocListBox.SetAccessibleName(aStatusArr[3]); + + if (pContextWin == NULL) + { + // When the context window is missing then the navigator is + // displayed in the sidebar. While the navigator could change + // its size, the sidebar can not, and the navigator would just + // waste space. Therefore hide this button. + aContentToolBox.RemoveItem(aContentToolBox.GetItemPos(FN_SHOW_CONTENT_BOX)); + } } /*------------------------------------------------------------------------ diff --git a/sw/source/ui/wrtsh/wrtsh3.cxx b/sw/source/ui/wrtsh/wrtsh3.cxx index 1a3d54265d13..e8920b751eb5 100644 --- a/sw/source/ui/wrtsh/wrtsh3.cxx +++ b/sw/source/ui/wrtsh/wrtsh3.cxx @@ -128,7 +128,12 @@ void SwWrtShell::DrawSelChanged( ) static sal_uInt16 __READONLY_DATA aInval[] = { SID_ATTR_FILL_STYLE, SID_ATTR_FILL_COLOR, SID_ATTR_LINE_STYLE, - SID_ATTR_LINE_WIDTH, SID_ATTR_LINE_COLOR, 0 + SID_ATTR_LINE_WIDTH, SID_ATTR_LINE_COLOR, + /*AF: these may be needed for the sidebar. + SID_SVX_AREA_TRANSPARENCY, SID_SVX_AREA_TRANSP_GRADIENT, + SID_SVX_AREA_TRANS_TYPE, + */ + 0 }; GetView().GetViewFrame()->GetBindings().Invalidate(aInval); diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml index f6e3aad181cc..ec4c2dcc6bb6 100644 --- a/sw/uiconfig/swriter/menubar/menubar.xml +++ b/sw/uiconfig/swriter/menubar/menubar.xml @@ -144,6 +144,7 @@ <menu:menuitem menu:id=".uno:ViewDataSourceBrowser"/> <menu:menuitem menu:id=".uno:Navigator"/> <menu:menuitem menu:id=".uno:TaskPane"/> + <menu:menuitem menu:id=".uno:Sidebar"/> <menu:menuseparator/> <menu:menuitem menu:id=".uno:FullScreen"/> <menu:menuitem menu:id=".uno:Zoom"/> diff --git a/sw/util/sw.component b/sw/util/sw.component index 8786f6cb506b..0bb6c56028b6 100644 --- a/sw/util/sw.component +++ b/sw/util/sw.component @@ -97,4 +97,7 @@ <implementation name="com.sun.star.util.comp.FinalThreadManager"> <service name="com.sun.star.util.JobManager"/> </implementation> + <implementation name="org.apache.openoffice.comp.sw.sidebar.SwPanelFactory"> + <service name="com.sun.star.ui.UIElementFactory"/> + </implementation> </component> diff --git a/vcl/inc/vcl/button.hxx b/vcl/inc/vcl/button.hxx index 4f612c348d9b..f6ff632f40c7 100644 --- a/vcl/inc/vcl/button.hxx +++ b/vcl/inc/vcl/button.hxx @@ -437,13 +437,11 @@ protected: using Window::ImplInit; SAL_DLLPRIVATE void ImplInit( Window* pParent, WinBits nStyle ); SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId ); - SAL_DLLPRIVATE virtual void FillLayoutData() const; - SAL_DLLPRIVATE virtual const Font& - GetCanonicalFont( const StyleSettings& _rStyle ) const; - SAL_DLLPRIVATE virtual const Color& - GetCanonicalTextColor( const StyleSettings& _rStyle ) const; + virtual void FillLayoutData() const; + virtual const Font& GetCanonicalFont( const StyleSettings& _rStyle ) const; + virtual const Color& GetCanonicalTextColor( const StyleSettings& _rStyle ) const; - SAL_DLLPRIVATE virtual void ImplDrawCheckBoxState(); + virtual void ImplDrawCheckBoxState(); SAL_DLLPRIVATE const Rectangle& GetStateRect() const { return maStateRect; } SAL_DLLPRIVATE const Rectangle& GetMouseRect() const { return maMouseRect; } public: diff --git a/vcl/inc/vcl/split.hxx b/vcl/inc/vcl/split.hxx index 7c255541d4b1..27eb767755e2 100644 --- a/vcl/inc/vcl/split.hxx +++ b/vcl/inc/vcl/split.hxx @@ -19,8 +19,6 @@ * *************************************************************/ - - #ifndef _SV_SPLIT_HXX #define _SV_SPLIT_HXX @@ -60,6 +58,7 @@ private: SAL_DLLPRIVATE sal_Bool ImplSplitterActive(); SAL_DLLPRIVATE Splitter* ImplFindSibling(); SAL_DLLPRIVATE void ImplRestoreSplitter(); + SAL_DLLPRIVATE void ImplInitHorVer(bool bNew); // Copy assignment is forbidden and not implemented. SAL_DLLPRIVATE Splitter (const Splitter &); @@ -104,7 +103,8 @@ public: void SetLastSplitPosPixel( long nNewPos ); long GetLastSplitPosPixel() const { return mnLastSplitPos; } - sal_Bool IsHorizontal() const { return mbHorzSplit; } + sal_Bool IsHorizontal() const { return mbHorzSplit; } + void SetHorizontal(bool bNew); // set the stepsize of the splitter for cursor movement // the default is 10% of the reference window's width/height diff --git a/vcl/inc/vcl/window.hxx b/vcl/inc/vcl/window.hxx index b36cc4686686..5fefaa105bcc 100644 --- a/vcl/inc/vcl/window.hxx +++ b/vcl/inc/vcl/window.hxx @@ -1177,6 +1177,14 @@ public: */ virtual void setProperties( const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& ); + + void EnableThemeSupport (void); + void DisableThemeSupport (void); + + virtual ImplBorderWindow* CreateBorderWindow ( + Window* pParent, + const WinBits nStyle, + const sal_uInt16 nTypeStyle); }; diff --git a/vcl/inc/window.h b/vcl/inc/window.h index d23934ea2425..31e3fecdfaa2 100644 --- a/vcl/inc/window.h +++ b/vcl/inc/window.h @@ -382,7 +382,8 @@ public: mbDisableAccessibleLabeledByRelation:1, mbHelpTextDynamic:1, mbFakeFocusSet:1, - mbInterceptChildWindowKeyDown:1; + mbInterceptChildWindowKeyDown:1, + mbIsThemingEnabled; ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxDNDListenerContainer; }; diff --git a/vcl/source/window/split.cxx b/vcl/source/window/split.cxx index 08a9fd5377b1..529971b69b0c 100644 --- a/vcl/source/window/split.cxx +++ b/vcl/source/window/split.cxx @@ -19,8 +19,6 @@ * *************************************************************/ - - // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_vcl.hxx" @@ -72,32 +70,39 @@ void Splitter::ImplInitSplitterData() // ----------------------------------------------------------------------- -void Splitter::ImplInit( Window* pParent, WinBits nWinStyle ) +void Splitter::ImplInitHorVer(bool bNew) { - Window::ImplInit( pParent, nWinStyle, NULL ); - - mpRefWin = pParent; + if(bNew != (bool)mbHorzSplit) + { + mbHorzSplit = bNew; - const StyleSettings& rSettings = GetSettings().GetStyleSettings(); - long nA = rSettings.GetScrollBarSize(); - long nB = rSettings.GetSplitSize(); + PointerStyle ePointerStyle; + const StyleSettings& rSettings = GetSettings().GetStyleSettings(); - PointerStyle ePointerStyle; + if ( mbHorzSplit ) + { + ePointerStyle = POINTER_HSPLIT; + SetSizePixel( Size( rSettings.GetSplitSize(), rSettings.GetScrollBarSize() ) ); + } + else + { + ePointerStyle = POINTER_VSPLIT; + SetSizePixel( Size( rSettings.GetScrollBarSize(), rSettings.GetSplitSize() ) ); + } - if ( nWinStyle & WB_HSCROLL ) - { - ePointerStyle = POINTER_HSPLIT; - mbHorzSplit = sal_True; - SetSizePixel( Size( nB, nA ) ); - } - else - { - ePointerStyle = POINTER_VSPLIT; - mbHorzSplit = sal_False; - SetSizePixel( Size( nA, nB ) ); + SetPointer( Pointer( ePointerStyle ) ); } +} + +// ----------------------------------------------------------------------- + +void Splitter::ImplInit( Window* pParent, WinBits nWinStyle ) +{ + Window::ImplInit( pParent, nWinStyle, NULL ); - SetPointer( Pointer( ePointerStyle ) ); + mpRefWin = pParent; + + ImplInitHorVer(nWinStyle & WB_HSCROLL); if( GetSettings().GetStyleSettings().GetFaceColor().IsDark() ) SetBackground( ImplWhiteWall::get() ); @@ -182,6 +187,16 @@ Splitter::~Splitter() // ----------------------------------------------------------------------- +void Splitter::SetHorizontal(bool bNew) +{ + if(bNew != (bool)mbHorzSplit) + { + ImplInitHorVer(bNew); + } +} + +// ----------------------------------------------------------------------- + void Splitter::SetKeyboardStepSize( long nStepSize ) { mnKeyboardStepSize = nStepSize; diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index a17dcaa2755a..408c5b3c930e 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -277,7 +277,9 @@ WindowImpl::WindowImpl( WindowType nType ) mbDisableAccessibleLabelForRelation = sal_False; // sal_True: do not set LabelFor relation on accessible objects mbDisableAccessibleLabeledByRelation = sal_False; // sal_True: do not set LabeledBy relation on accessible objects mbHelpTextDynamic = sal_False; // sal_True: append help id in HELP_DEBUG case - mbFakeFocusSet = sal_False; // sal_True: pretend as if the window has focus. + mbFakeFocusSet = sal_False; // sal_True: pretend as if the window + // has focus. + mbIsThemingEnabled = sal_True; } WindowImpl::~WindowImpl() @@ -756,7 +758,10 @@ void Window::ImplInit( Window* pParent, WinBits nStyle, SystemParentData* pSyste nBorderTypeStyle |= BORDERWINDOW_STYLE_FRAME; nStyle |= WB_BORDER; } - ImplBorderWindow* pBorderWin = new ImplBorderWindow( pParent, nStyle & (WB_BORDER | WB_DIALOGCONTROL | WB_NODIALOGCONTROL | WB_NEEDSFOCUS), nBorderTypeStyle ); + ImplBorderWindow* pBorderWin = + mpWindowImpl->mbIsThemingEnabled + ? CreateBorderWindow( pParent, nStyle & (WB_BORDER | WB_DIALOGCONTROL | WB_NODIALOGCONTROL | WB_NEEDSFOCUS), nBorderTypeStyle ) + : new ImplBorderWindow( pParent, nStyle & (WB_BORDER | WB_DIALOGCONTROL | WB_NODIALOGCONTROL | WB_NEEDSFOCUS), nBorderTypeStyle ); ((Window*)pBorderWin)->mpWindowImpl->mpClientWindow = this; pBorderWin->GetBorder( mpWindowImpl->mnLeftBorder, mpWindowImpl->mnTopBorder, mpWindowImpl->mnRightBorder, mpWindowImpl->mnBottomBorder ); mpWindowImpl->mpBorderWindow = pBorderWin; diff --git a/vcl/source/window/window4.cxx b/vcl/source/window/window4.cxx index 80867c15a306..72f38b3acd02 100644 --- a/vcl/source/window/window4.cxx +++ b/vcl/source/window/window4.cxx @@ -28,6 +28,7 @@ #include "window.h" #include "svdata.hxx" +#include "brdwin.hxx" #include "com/sun/star/beans/PropertyValue.hpp" @@ -219,3 +220,29 @@ uno::Sequence< beans::PropertyValue > Window::getProperties() const return aProps; } + + + +void Window::EnableThemeSupport (void) +{ + mpWindowImpl->mbIsThemingEnabled = sal_True; +} + + + + +void Window::DisableThemeSupport (void) +{ + mpWindowImpl->mbIsThemingEnabled = sal_False; +} + + + + +ImplBorderWindow* Window::CreateBorderWindow ( + Window* pParent, + const WinBits nStyle, + const sal_uInt16 nTypeStyle) +{ + return new ImplBorderWindow(pParent, nStyle, nTypeStyle); +} |