diff options
author | Armin Le Grand <alg@apache.org> | 2013-04-16 08:41:07 +0000 |
---|---|---|
committer | Armin Le Grand <alg@apache.org> | 2013-04-16 08:41:07 +0000 |
commit | 68e707bbc6fe23881b822e6efab8a2933343dc1a (patch) | |
tree | 182e2fe8efee67cf005f8563574706d5878cf249 | |
parent | 4413cf97c42cd2318bf10562715ae755dfccf104 (diff) |
i122041 Unified and centralized control for Color ValueSets
Notes
Notes:
merged as: 85f49fdccddef6b5a5bdc1b95f5b04714179c898
-rw-r--r-- | cui/source/inc/backgrnd.hxx | 4 | ||||
-rw-r--r-- | cui/source/inc/cuitabarea.hxx | 6 | ||||
-rw-r--r-- | cui/source/tabpages/backgrnd.cxx | 63 | ||||
-rw-r--r-- | cui/source/tabpages/tpcolor.cxx | 63 | ||||
-rw-r--r-- | sd/source/ui/app/sddll2.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/slideshow/slideshowimpl.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/view/drviews6.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/view/drvwshrg.cxx | 2 | ||||
-rw-r--r-- | svx/Library_svx.mk | 1 | ||||
-rw-r--r-- | svx/Library_svxcore.mk | 1 | ||||
-rw-r--r-- | svx/Package_inc.mk | 3 | ||||
-rw-r--r-- | svx/inc/svx/colrctrl.hxx | 37 | ||||
-rw-r--r-- | svx/inc/svx/sidebar/ColorControl.hxx | 3 | ||||
-rw-r--r-- | svx/source/sidebar/tools/ColorControl.cxx | 46 | ||||
-rw-r--r-- | svx/source/tbxctrls/colorwindow.hxx | 7 | ||||
-rw-r--r-- | svx/source/tbxctrls/colrctrl.cxx | 103 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbcontrl.cxx | 76 |
17 files changed, 181 insertions, 240 deletions
diff --git a/cui/source/inc/backgrnd.hxx b/cui/source/inc/backgrnd.hxx index 5057829c4737..fc298d0f4cc1 100644 --- a/cui/source/inc/backgrnd.hxx +++ b/cui/source/inc/backgrnd.hxx @@ -32,7 +32,7 @@ #ifndef _GRAPH_HXX //autogen #include <vcl/graph.hxx> #endif -#include <svtools/valueset.hxx> +#include <svx/SvxColorValueSet.hxx> #include <svx/dlgctrl.hxx> // class SvxBackgroundTabPage -------------------------------------------- @@ -89,7 +89,7 @@ private: ListBox aParaLBox; // Hintergrundfarbe ------------------------------------ Control aBorderWin; - ValueSet aBackgroundColorSet; + SvxColorValueSet aBackgroundColorSet; FixedLine aBackgroundColorBox; BackgroundPreviewImpl* pPreviewWin1; //color transparency diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx index 224b667f2d09..421c2343e5a1 100644 --- a/cui/source/inc/cuitabarea.hxx +++ b/cui/source/inc/cuitabarea.hxx @@ -26,6 +26,7 @@ // include --------------------------------------------------------------- #include <svx/tabarea.hxx> +#include <svx/SvxColorValueSet.hxx> /************************************************************************* |* @@ -698,7 +699,7 @@ private: ColorLB aLbColor; FixedText aTableNameFT; - ValueSet aValSetColorTable; + SvxColorValueSet aValSetColorTable; SvxXRectPreview aCtlPreviewOld; SvxXRectPreview aCtlPreviewNew; @@ -749,7 +750,8 @@ private: sal_uInt16 ColorToPercent_Impl( sal_uInt16 nColor ); sal_uInt16 PercentToColor_Impl( sal_uInt16 nPercent ); - void FillValueSet_Impl( ValueSet& rVs ); + void ImpColorCountChanged(); + //----------------------------------------------------------------------------------------------------- DECL_LINK( ClickAddHdl_Impl, void * ); // Button 'Hinzufuegen' DECL_LINK( ClickModifyHdl_Impl, void * ); // Button 'Aendern' diff --git a/cui/source/tabpages/backgrnd.cxx b/cui/source/tabpages/backgrnd.cxx index f84bc459ea6c..1995b94540c2 100644 --- a/cui/source/tabpages/backgrnd.cxx +++ b/cui/source/tabpages/backgrnd.cxx @@ -401,6 +401,9 @@ SvxBackgroundTabPage::SvxBackgroundTabPage( Window* pParent, FillColorValueSets_Impl(); aBackgroundColorSet.SetSelectHdl( HDL(BackgroundColorHdl_Impl) ); + aBackgroundColorSet.SetStyle(aBackgroundColorSet.GetStyle() | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD); + aBackgroundColorSet.SetText(SVX_RESSTR(RID_SVXSTR_TRANSPARENT)); + aBackgroundColorSet.SetAccessibleName(aBackgroundColorBox.GetText()); FreeResource(); aBtnBrowse.SetAccessibleRelationMemberOf(&aGbFile); @@ -1195,54 +1198,50 @@ void SvxBackgroundTabPage::FillColorValueSets_Impl() SfxObjectShell* pDocSh = SfxObjectShell::Current(); const SfxPoolItem* pItem = NULL; XColorList* pColorTable = NULL; - const Size aSize15x15 = Size( 15, 15 ); - FASTBOOL bOwn = sal_False; + bool bOwn(false); + long nColorCount(0); if ( pDocSh && ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) ) ) + { pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable(); + } if ( !pColorTable ) { - bOwn = sal_True; + bOwn = true; pColorTable = new XColorList( SvtPathOptions().GetPalettePath() ); } if ( pColorTable ) { - short i = 0; - long nCount = pColorTable->Count(); - XColorEntry* pEntry = NULL; - Color aColWhite( COL_WHITE ); - String aStrWhite( EditResId( RID_SVXITEMS_COLOR_WHITE ) ); - WinBits nBits = ( aBackgroundColorSet.GetStyle() | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD ); - aBackgroundColorSet.SetText( SVX_RESSTR( RID_SVXSTR_TRANSPARENT ) ); - aBackgroundColorSet.SetStyle( nBits ); - aBackgroundColorSet.SetAccessibleName(aBackgroundColorBox.GetText()); - for ( i = 0; i < nCount; i++ ) - { - pEntry = pColorTable->GetColor(i); - aBackgroundColorSet.InsertItem( i + 1, pEntry->GetColor(), pEntry->GetName() ); - } + nColorCount = pColorTable->Count(); + aBackgroundColorSet.Clear(); + aBackgroundColorSet.addEntriesForXColorList(*pColorTable); - while ( i < 80 ) + if(bOwn) { - aBackgroundColorSet.InsertItem( i + 1, aColWhite, aStrWhite ); - i++; - } - - if ( nCount > 80 ) - { - aBackgroundColorSet.SetStyle( nBits | WB_VSCROLL ); + delete pColorTable; } } - if ( bOwn ) - delete pColorTable; - - aBackgroundColorSet.SetColCount( 10 ); - aBackgroundColorSet.SetLineCount( 10 ); - aBackgroundColorSet.CalcWindowSizePixel( aSize15x15 ); - + const WinBits nBits(aBackgroundColorSet.GetStyle() | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD); + aBackgroundColorSet.SetStyle(nBits); + aBackgroundColorSet.SetColCount(aBackgroundColorSet.getColumnCount()); + + // here we have enough space to the left, so layout with fixed column size + // and fixed height, adapt width. Apply the adapted width by moving the left + // edge of the control to the left, keeping the right edge aligned + // with the original position + const Point aCurrentPosContainer(aBorderWin.GetPosPixel()); + const Size aCurrentSizeContainer(aBorderWin.GetOutputSizePixel()); + const Size aCurrentSizeContent(aBackgroundColorSet.GetOutputSizePixel()); + const Size aNewSizeContent(aBackgroundColorSet.layoutToGivenHeight(aCurrentSizeContent.Height() - 4, nColorCount)); + const Size aNewSizeContainer(aNewSizeContent.Width() + 4, aNewSizeContent.Height() + 4); + const Point aNewPos((aCurrentPosContainer.X() + aCurrentSizeContainer.Width()) - aNewSizeContainer.Width(), aCurrentPosContainer.Y()); + + aBorderWin.SetOutputSizePixel(aNewSizeContainer); + aBackgroundColorSet.SetOutputSizePixel(aNewSizeContent); + aBorderWin.SetPosSizePixel(aNewPos, aNewSizeContainer); } //------------------------------------------------------------------------ diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx index 1928e2333b2b..bc349dfabea7 100644 --- a/cui/source/tabpages/tpcolor.cxx +++ b/cui/source/tabpages/tpcolor.cxx @@ -163,10 +163,7 @@ SvxColorTabPage::SvxColorTabPage aBtnSave.SetClickHdl( LINK( this, SvxColorTabPage, ClickSaveHdl_Impl ) ); // ValueSet - aValSetColorTable.SetStyle( aValSetColorTable.GetStyle() | WB_VSCROLL | WB_ITEMBORDER ); - aValSetColorTable.SetColCount( 8 ); - aValSetColorTable.SetLineCount( 10 ); - aValSetColorTable.SetExtraSpacing( 0 ); + aValSetColorTable.SetStyle( aValSetColorTable.GetStyle() | WB_ITEMBORDER ); aValSetColorTable.Show(); aLbColorModel.SetAccessibleName( String( CUI_RES(STR_CUI_COLORMODEL) ) ); @@ -178,10 +175,37 @@ SvxColorTabPage::SvxColorTabPage // ----------------------------------------------------------------------- +void SvxColorTabPage::ImpColorCountChanged() +{ + if(pColorTab) + { + aValSetColorTable.SetColCount(aValSetColorTable.getColumnCount()); + + // here we have enough space to the left, so layout with fixed column size + // and fixed height, adapt width. Apply the adapted width by moving the left + // edge of the control to the left, keeping the right edge aligned + // with the original position + const Point aCurrentPos(aValSetColorTable.GetPosPixel()); + const Size aCurrentSize(aValSetColorTable.GetOutputSizePixel()); + const long nColorCount(pColorTab->Count()); + const Size aNewSize(aValSetColorTable.layoutToGivenHeight(aCurrentSize.Height(), nColorCount)); + const Point aNewPos((aCurrentPos.X() + aCurrentSize.Width()) - aNewSize.Width(), aCurrentPos.Y()); + + aValSetColorTable.SetOutputSizePixel(aNewSize); + aValSetColorTable.SetPosSizePixel(aNewPos, aNewSize); + } +} + +// ----------------------------------------------------------------------- + void SvxColorTabPage::Construct() { - aLbColor.Fill( pColorTab ); - FillValueSet_Impl( aValSetColorTable ); + if(pColorTab) + { + aLbColor.Fill(pColorTab); + aValSetColorTable.addEntriesForXColorList(*pColorTab); + ImpColorCountChanged(); + } } // ----------------------------------------------------------------------- @@ -529,6 +553,7 @@ IMPL_LINK( SvxColorTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) aLbColor.Append( pEntry ); aValSetColorTable.InsertItem( aValSetColorTable.GetItemCount() + 1, pEntry->GetColor(), pEntry->GetName() ); + ImpColorCountChanged(); aLbColor.SelectEntryPos( aLbColor.GetEntryCount() - 1 ); @@ -704,7 +729,9 @@ IMPL_LINK( SvxColorTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG ) // Listbox und ValueSet aktualisieren aLbColor.RemoveEntry( nPos ); aValSetColorTable.Clear(); - FillValueSet_Impl( aValSetColorTable ); + aValSetColorTable.addEntriesForXColorList(*pColorTab); + ImpColorCountChanged(); + //FillValueSet_Impl( aValSetColorTable ); // Positionieren aLbColor.SelectEntryPos( nPos ); @@ -1162,17 +1189,17 @@ long SvxColorTabPage::ChangeColorHdl_Impl( void* ) //------------------------------------------------------------------------ -void SvxColorTabPage::FillValueSet_Impl( ValueSet& rVs ) -{ - long nCount = pColorTab->Count(); - XColorEntry* pColorEntry; - - for( long i = 0; i < nCount; i++ ) - { - pColorEntry = pColorTab->GetColor( i ); - rVs.InsertItem( (sal_uInt16) i + 1, pColorEntry->GetColor(), pColorEntry->GetName() ); - } -} +//void SvxColorTabPage::FillValueSet_Impl( ValueSet& rVs ) +//{ +// long nCount = pColorTab->Count(); +// XColorEntry* pColorEntry; +// +// for( long i = 0; i < nCount; i++ ) +// { +// pColorEntry = pColorTab->GetColor( i ); +// rVs.InsertItem( (sal_uInt16) i + 1, pColorEntry->GetColor(), pColorEntry->GetName() ); +// } +//} //------------------------------------------------------------------------ diff --git a/sd/source/ui/app/sddll2.cxx b/sd/source/ui/app/sddll2.cxx index 65435c0365ca..25146d516297 100644 --- a/sd/source/ui/app/sddll2.cxx +++ b/sd/source/ui/app/sddll2.cxx @@ -37,7 +37,7 @@ #include <svx/galbrws.hxx> #include <svx/srchdlg.hxx> #include <svx/fontwork.hxx> -#include <svx/colrctrl.hxx> +#include <svx/SvxColorChildWindow.hxx> #include <svx/verttexttbxctrl.hxx> #include <svx/hyprlink.hxx> #include <svx/hyperdlg.hxx> diff --git a/sd/source/ui/slideshow/slideshowimpl.cxx b/sd/source/ui/slideshow/slideshowimpl.cxx index 3665b5858180..6a7ae8e5f3a6 100644 --- a/sd/source/ui/slideshow/slideshowimpl.cxx +++ b/sd/source/ui/slideshow/slideshowimpl.cxx @@ -56,7 +56,7 @@ #include <svx/f3dchild.hxx> #include <svx/imapdlg.hxx> #include <svx/fontwork.hxx> -#include <svx/colrctrl.hxx> +#include <svx/SvxColorChildWindow.hxx> #include <svx/bmpmask.hxx> #include <svx/srchdlg.hxx> #include <svx/hyprlink.hxx> diff --git a/sd/source/ui/view/drviews6.cxx b/sd/source/ui/view/drviews6.cxx index 8c2bccb2d810..a32c862a907b 100644 --- a/sd/source/ui/view/drviews6.cxx +++ b/sd/source/ui/view/drviews6.cxx @@ -46,7 +46,7 @@ #ifndef _IMAPDLG_HXX #include <svx/imapdlg.hxx> #endif -#include <svx/colrctrl.hxx> +#include <svx/SvxColorChildWindow.hxx> #include <svx/f3dchild.hxx> #include "optsitem.hxx" #include <svx/extrusionbar.hxx> diff --git a/sd/source/ui/view/drvwshrg.cxx b/sd/source/ui/view/drvwshrg.cxx index a07d20018f0f..c48e9586f0fc 100644 --- a/sd/source/ui/view/drvwshrg.cxx +++ b/sd/source/ui/view/drvwshrg.cxx @@ -31,7 +31,7 @@ #include <svx/bmpmask.hxx> #include <svx/galbrws.hxx> #include <svx/imapdlg.hxx> -#include <svx/colrctrl.hxx> +#include <svx/SvxColorChildWindow.hxx> #include <sfx2/objface.hxx> #include <sfx2/sidebar/SidebarChildWindow.hxx> #include <svx/f3dchild.hxx> diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk index c6f7acb54b77..5a01046b625d 100644 --- a/svx/Library_svx.mk +++ b/svx/Library_svx.mk @@ -227,6 +227,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\ svx/source/table/tablertfexporter \ svx/source/table/tablertfimporter \ svx/source/tbxctrls/colrctrl \ + svx/source/tbxctrls/SvxColorChildWindow \ svx/source/tbxctrls/fillctrl \ svx/source/tbxctrls/formatpaintbrushctrl \ svx/source/tbxctrls/grafctrl \ diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk index 27e3f96191b5..da0e5070531a 100644 --- a/svx/Library_svxcore.mk +++ b/svx/Library_svxcore.mk @@ -385,6 +385,7 @@ $(eval $(call gb_Library_add_exception_objects,svxcore,\ svx/source/tbxctrls/fontworkgallery \ svx/source/tbxctrls/tbcontrl \ svx/source/tbxctrls/tbxcolorupdate \ + svx/source/tbxctrls/SvxColorValueSet \ svx/source/toolbars/extrusionbar \ svx/source/toolbars/fontworkbar \ svx/source/unodraw/gluepts \ diff --git a/svx/Package_inc.mk b/svx/Package_inc.mk index ba1115a14725..0ad8ae08dd0d 100644 --- a/svx/Package_inc.mk +++ b/svx/Package_inc.mk @@ -552,7 +552,8 @@ $(eval $(call gb_Package_add_file,svx_inc,inc/svx/flagsdef.hxx,svx/flagsdef.hxx) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sdtaaitm.hxx,svx/sdtaaitm.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/fmview.hxx,svx/fmview.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/svxdllapi.h,svx/svxdllapi.h)) -$(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/SvxColorValueSet.hxx,svx/SvxColorValueSet.hxx)) +$(eval $(call gb_Package_add_file,svx_inc,inc/svx/SvxColorChildWindow.hxx,svx/SvxColorChildWindow.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)) diff --git a/svx/inc/svx/colrctrl.hxx b/svx/inc/svx/colrctrl.hxx index 3519d1060da4..b005a8760ead 100644 --- a/svx/inc/svx/colrctrl.hxx +++ b/svx/inc/svx/colrctrl.hxx @@ -25,7 +25,7 @@ #include <sfx2/dockwin.hxx> #include <sfx2/childwin.hxx> -#include <svtools/valueset.hxx> +#include <svx/SvxColorValueSet.hxx> #include <svtools/transfer.hxx> #include <svl/lstner.hxx> #include "svx/svxdllapi.h" @@ -35,17 +35,16 @@ class SvData; /************************************************************************* |* -|* SvxColorValueSet +|* SvxColorValueSet_docking |* \************************************************************************/ -class SvxColorValueSet : public ValueSet, public DragSourceHelper +class SvxColorValueSet_docking : public SvxColorValueSet, public DragSourceHelper { - using ValueSet::StartDrag; - private: + using SvxColorValueSet::StartDrag; - sal_Bool bLeft; + bool mbLeftButton; Point aDragPosPixel; protected: @@ -60,28 +59,13 @@ protected: // DragSourceHelper virtual void StartDrag( sal_Int8 nAction, const Point& rPtPixel ); - DECL_STATIC_LINK(SvxColorValueSet, ExecDragHdl, void*); + DECL_STATIC_LINK(SvxColorValueSet_docking, ExecDragHdl, void*); public: - SvxColorValueSet( Window* pParent, WinBits nWinStyle = WB_ITEMBORDER ); - SvxColorValueSet( Window* pParent, const ResId& rResId ); - - sal_Bool IsLeftButton() const { return bLeft; } -}; - -/************************************************************************* -|* -|* Ableitung vom SfxChildWindow als "Behaelter" fuer Controller -|* -\************************************************************************/ - -class SVX_DLLPUBLIC SvxColorChildWindow : public SfxChildWindow -{ - public: - SvxColorChildWindow( Window*, sal_uInt16, SfxBindings*, - SfxChildWinInfo* ); + SvxColorValueSet_docking( Window* pParent, WinBits nWinStyle = WB_ITEMBORDER ); + SvxColorValueSet_docking( Window* pParent, const ResId& rResId ); - SFX_DECL_CHILDWINDOW(SvxColorChildWindow); + bool IsLeftButton() const { return mbLeftButton; } }; /************************************************************************* @@ -96,13 +80,12 @@ class SvxColorDockingWindow : public SfxDockingWindow, public SfxListener private: XColorList* pColorTable; - SvxColorValueSet aColorSet; + SvxColorValueSet_docking aColorSet; sal_uInt16 nLeftSlot; sal_uInt16 nRightSlot; sal_uInt16 nCols; sal_uInt16 nLines; long nCount; - Size aColorSize; Size aItemSize; //#if 0 // _SOLAR__PRIVATE diff --git a/svx/inc/svx/sidebar/ColorControl.hxx b/svx/inc/svx/sidebar/ColorControl.hxx index de84aab91723..c4fc0f95cf45 100644 --- a/svx/inc/svx/sidebar/ColorControl.hxx +++ b/svx/inc/svx/sidebar/ColorControl.hxx @@ -23,6 +23,7 @@ #include <svtools/valueset.hxx> #include <boost/function.hpp> +#include <svx/SvxColorValueSet.hxx> class Window; class SfxBindings; @@ -73,7 +74,7 @@ public: private: SfxBindings* mpBindings; - ValueSet maVSColor; + SvxColorValueSet maVSColor; FloatingWindow* mpFloatingWindow; const String msNoColorString; ::boost::function<Color(void)> maNoColorGetter; diff --git a/svx/source/sidebar/tools/ColorControl.cxx b/svx/source/sidebar/tools/ColorControl.cxx index 6fece95f6651..66f4e6baf5aa 100644 --- a/svx/source/sidebar/tools/ColorControl.cxx +++ b/svx/source/sidebar/tools/ColorControl.cxx @@ -109,6 +109,7 @@ ColorControl::ColorControl ( maColorSetter(rColorSetter) { FreeResource(); + FillColors(); } @@ -126,40 +127,37 @@ void ColorControl::FillColors (void) if (pColorTable) { - const long nColorCount (pColorTable->Count()); + 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) + const WinBits aWinBits(maVSColor.GetStyle() | WB_TABSTOP | WB_ITEMBORDER | WB_NAMEFIELD | + WB_NO_DIRECTSELECT | WB_MENUSTYLEVALUESET | WB_NO_DIRECTSELECT); + + maVSColor.SetStyle(aWinBits); + + // neds to be done *before* layouting + if(msNoColorString.Len() > 0) { maVSColor.SetStyle(maVSColor.GetStyle() | WB_NONEFIELD); maVSColor.SetText(msNoColorString); } + const Size aNewSize(maVSColor.layoutAllVisible(nColorCount)); + maVSColor.SetOutputSizePixel(aNewSize); + static sal_Int32 nAdd = 4; + + SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd)); + Link aLink = LINK(this, ColorControl, VSSelectHdl); + maVSColor.SetSelectHdl(aLink); + // Now, after all calls to SetStyle, we can change the // background color. maVSColor.SetBackground(Theme::GetWallpaper(Theme::Paint_DropDownBackground)); + // add entrties 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.addEntriesForXColorList(*pColorTable); } maVSColor.Show(); @@ -178,7 +176,7 @@ void ColorControl::GetFocus (void) void ColorControl::SetCurColorSelect (Color aCol, bool bAvailable) { - FillColors(); +// FillColors(); short nCol = GetItemId_Imp( maVSColor, aCol ); if(! bAvailable) { @@ -193,7 +191,9 @@ void ColorControl::SetCurColorSelect (Color aCol, bool bAvailable) } else { - maVSColor.SelectItem( nCol ); + // remove selection first to force evtl. scroll when scroll is needed + maVSColor.SetNoSelection(); + maVSColor.SelectItem(nCol); } } diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index 3de31b8c612a..78558fa086c3 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -29,6 +29,7 @@ #include <svl/lstner.hxx> #include <rtl/ustring.hxx> #include <com/sun/star/frame/XFrame.hpp> +#include <svx/SvxColorValueSet.hxx> //======================================================================== // class SvxColorWindow_Impl -------------------------------------------------- @@ -39,9 +40,9 @@ class SvxColorWindow_Impl : public SfxPopupWindow using FloatingWindow::StateChanged; private: - const sal_uInt16 theSlotId; - ValueSet aColorSet; - rtl::OUString maCommand; + const sal_uInt16 theSlotId; + SvxColorValueSet aColorSet; + rtl::OUString maCommand; #if _SOLAR__PRIVATE DECL_LINK( SelectHdl, void * ); diff --git a/svx/source/tbxctrls/colrctrl.cxx b/svx/source/tbxctrls/colrctrl.cxx index 24b5e3de21eb..23ac6277ca3b 100644 --- a/svx/source/tbxctrls/colrctrl.cxx +++ b/svx/source/tbxctrls/colrctrl.cxx @@ -44,8 +44,6 @@ #include "svx/xexch.hxx" #include <vcl/svapp.hxx> -SFX_IMPL_DOCKINGWINDOW( SvxColorChildWindow, SID_COLOR_CONTROL ) - // ------------------------ // - SvxColorValueSetData - // ------------------------ @@ -100,55 +98,55 @@ sal_Bool SvxColorValueSetData::WriteObject( SotStorageStreamRef& rxOStm, void*, /************************************************************************* |* -|* SvxColorValueSet: Ctor +|* SvxColorValueSet_docking: Ctor |* \************************************************************************/ -SvxColorValueSet::SvxColorValueSet( Window* _pParent, WinBits nWinStyle ) : - ValueSet( _pParent, nWinStyle ), +SvxColorValueSet_docking::SvxColorValueSet_docking( Window* _pParent, WinBits nWinStyle ) : + SvxColorValueSet( _pParent, nWinStyle ), DragSourceHelper( this ), - bLeft (sal_True) + mbLeftButton(true) { SetAccessibleName(String( SVX_RES( STR_COLORTABLE ) ) ); } /************************************************************************* |* -|* SvxColorValueSet: Ctor +|* SvxColorValueSet_docking: Ctor |* \************************************************************************/ -SvxColorValueSet::SvxColorValueSet( Window* _pParent, const ResId& rResId ) : - ValueSet( _pParent, rResId ), +SvxColorValueSet_docking::SvxColorValueSet_docking( Window* _pParent, const ResId& rResId ) : + SvxColorValueSet( _pParent, rResId ), DragSourceHelper( this ), - bLeft (sal_True) + mbLeftButton(true) { SetAccessibleName(String( SVX_RES( STR_COLORTABLE ) )); } /************************************************************************* |* -|* SvxColorValueSet: MouseButtonDown +|* SvxColorValueSet_docking: MouseButtonDown |* \************************************************************************/ -void SvxColorValueSet::MouseButtonDown( const MouseEvent& rMEvt ) +void SvxColorValueSet_docking::MouseButtonDown( const MouseEvent& rMEvt ) { // Fuer Mac noch anders handlen ! if( rMEvt.IsLeft() ) { - bLeft = sal_True; - ValueSet::MouseButtonDown( rMEvt ); + mbLeftButton = true; + SvxColorValueSet::MouseButtonDown( rMEvt ); } else { - bLeft = sal_False; + mbLeftButton = false; MouseEvent aMEvt( rMEvt.GetPosPixel(), rMEvt.GetClicks(), rMEvt.GetMode(), MOUSE_LEFT, rMEvt.GetModifier() ); - ValueSet::MouseButtonDown( aMEvt ); + SvxColorValueSet::MouseButtonDown( aMEvt ); } aDragPosPixel = GetPointerPosPixel(); @@ -156,27 +154,27 @@ void SvxColorValueSet::MouseButtonDown( const MouseEvent& rMEvt ) /************************************************************************* |* -|* SvxColorValueSet: MouseButtonUp +|* SvxColorValueSet_docking: MouseButtonUp |* \************************************************************************/ -void SvxColorValueSet::MouseButtonUp( const MouseEvent& rMEvt ) +void SvxColorValueSet_docking::MouseButtonUp( const MouseEvent& rMEvt ) { // Fuer Mac noch anders handlen ! if( rMEvt.IsLeft() ) { - bLeft = sal_True; - ValueSet::MouseButtonUp( rMEvt ); + mbLeftButton = true; + SvxColorValueSet::MouseButtonUp( rMEvt ); } else { - bLeft = sal_False; + mbLeftButton = false; MouseEvent aMEvt( rMEvt.GetPosPixel(), rMEvt.GetClicks(), rMEvt.GetMode(), MOUSE_LEFT, rMEvt.GetModifier() ); - ValueSet::MouseButtonUp( aMEvt ); + SvxColorValueSet::MouseButtonUp( aMEvt ); } SetNoSelection(); } @@ -187,10 +185,10 @@ void SvxColorValueSet::MouseButtonUp( const MouseEvent& rMEvt ) |* \************************************************************************/ -void SvxColorValueSet::Command(const CommandEvent& rCEvt) +void SvxColorValueSet_docking::Command(const CommandEvent& rCEvt) { // Basisklasse - ValueSet::Command(rCEvt); + SvxColorValueSet::Command(rCEvt); } /************************************************************************* @@ -199,9 +197,9 @@ void SvxColorValueSet::Command(const CommandEvent& rCEvt) |* \************************************************************************/ -void SvxColorValueSet::StartDrag( sal_Int8 , const Point& ) +void SvxColorValueSet_docking::StartDrag( sal_Int8 , const Point& ) { - Application::PostUserEvent(STATIC_LINK(this, SvxColorValueSet, ExecDragHdl)); + Application::PostUserEvent(STATIC_LINK(this, SvxColorValueSet_docking, ExecDragHdl)); } /************************************************************************* @@ -210,7 +208,7 @@ void SvxColorValueSet::StartDrag( sal_Int8 , const Point& ) |* \************************************************************************/ -void SvxColorValueSet::DoDrag() +void SvxColorValueSet_docking::DoDrag() { SfxObjectShell* pDocSh = SfxObjectShell::Current(); sal_uInt16 nItemId = GetItemId( aDragPosPixel ); @@ -235,7 +233,7 @@ void SvxColorValueSet::DoDrag() |* \************************************************************************/ -IMPL_STATIC_LINK(SvxColorValueSet, ExecDragHdl, void*, EMPTYARG) +IMPL_STATIC_LINK(SvxColorValueSet_docking, ExecDragHdl, void*, EMPTYARG) { // Als Link, damit asynchron ohne ImpMouseMoveMsg auf dem Stack auch die // Farbleiste geloescht werden darf @@ -245,29 +243,6 @@ IMPL_STATIC_LINK(SvxColorValueSet, ExecDragHdl, void*, EMPTYARG) /************************************************************************* |* -|* Ableitung vom SfxChildWindow als "Behaelter" fuer Animator -|* -\************************************************************************/ - -SvxColorChildWindow::SvxColorChildWindow( Window* _pParent, - sal_uInt16 nId, - SfxBindings* pBindings, - SfxChildWinInfo* pInfo ) : - SfxChildWindow( _pParent, nId ) -{ - SvxColorDockingWindow* pWin = new SvxColorDockingWindow( pBindings, this, - _pParent, SVX_RES( RID_SVXCTRL_COLOR ) ); - pWindow = pWin; - - eChildAlignment = SFX_ALIGN_BOTTOM; - - pWin->Initialize( pInfo ); -} - - - -/************************************************************************* -|* |* Ctor: SvxColorDockingWindow |* \************************************************************************/ @@ -287,8 +262,7 @@ SvxColorDockingWindow::SvxColorDockingWindow nLeftSlot ( SID_ATTR_FILL_COLOR ), nRightSlot ( SID_ATTR_LINE_COLOR ), nCols ( 20 ), - nLines ( 1 ), - aColorSize ( 14, 14 ) + nLines ( 1 ) { FreeResource(); @@ -323,10 +297,11 @@ SvxColorDockingWindow::SvxColorDockingWindow FillValueSet(); } } - aItemSize = aColorSet.CalcItemSizePixel( aColorSize ); - aItemSize.Width() = aItemSize.Width() + aColorSize.Width(); + + aItemSize = aColorSet.CalcItemSizePixel(Size(aColorSet.getEntryEdgeLength(), aColorSet.getEntryEdgeLength())); + aItemSize.Width() = aItemSize.Width() + aColorSet.getEntryEdgeLength(); aItemSize.Width() /= 2; - aItemSize.Height() = aItemSize.Height() + aColorSize.Height(); + aItemSize.Height() = aItemSize.Height() + aColorSet.getEntryEdgeLength(); aItemSize.Height() /= 2; SetSize(); @@ -374,12 +349,15 @@ void SvxColorDockingWindow::FillValueSet() { if( pColorTable ) { + nCount = pColorTable->Count(); aColorSet.Clear(); - // Erster Eintrag: unsichtbar + // create the first entry for 'invisible/none' + const Size aColorSize(aColorSet.getEntryEdgeLength(), aColorSet.getEntryEdgeLength()); long nPtX = aColorSize.Width() - 1; long nPtY = aColorSize.Height() - 1; VirtualDevice aVD; + aVD.SetOutputSizePixel( aColorSize ); aVD.SetLineColor( Color( COL_BLACK ) ); aVD.SetBackground( Wallpaper( Color( COL_WHITE ) ) ); @@ -389,16 +367,7 @@ void SvxColorDockingWindow::FillValueSet() Bitmap aBmp( aVD.GetBitmap( Point(), aColorSize ) ); aColorSet.InsertItem( (sal_uInt16)1, Image(aBmp), SVX_RESSTR( RID_SVXSTR_INVISIBLE ) ); - - XColorEntry* pEntry; - nCount = pColorTable->Count(); - - for( long i = 0; i < nCount; i++ ) - { - pEntry = pColorTable->GetColor( i ); - aColorSet.InsertItem( (sal_uInt16)i+2, - pEntry->GetColor(), pEntry->GetName() ); - } + aColorSet.addEntriesForXColorList(*pColorTable, 2); } } diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index 93f726ff5ef3..0e107532b830 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -815,10 +815,6 @@ void SvxFontNameBox_Impl::Select() #define WB_NO_DIRECTSELECT ((WinBits)0x04000000) #endif -#define PALETTE_X 10 -#define PALETTE_Y 11 -#define PALETTE_SIZE (PALETTE_X * PALETTE_Y) - SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, sal_uInt16 nSlotId, const Reference< XFrame >& rFrame, @@ -836,7 +832,6 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, const SfxPoolItem* pItem = NULL; XColorList* pColorTable = NULL; sal_Bool bKillTable = sal_False; - const Size aSize12( 13, 13 ); if ( pDocSh ) if ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) ) @@ -877,43 +872,23 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, if ( pColorTable ) { - short i = 0; - long nCount = pColorTable->Count(); - XColorEntry* pEntry = NULL; - ::Color aColWhite( COL_WHITE ); - String aStrWhite( EditResId(RID_SVXITEMS_COLOR_WHITE) ); - - if ( nCount > PALETTE_SIZE ) - // Show scrollbar if more than PALLETTE_SIZE colors are available - aColorSet.SetStyle( aColorSet.GetStyle() | WB_VSCROLL ); - - for ( i = 0; i < nCount; i++ ) - { - pEntry = pColorTable->GetColor(i); - aColorSet.InsertItem( i+1, pEntry->GetColor(), pEntry->GetName() ); - } + const long nColorCount(pColorTable->Count()); + const Size aNewSize(aColorSet.layoutAllVisible(nColorCount)); + aColorSet.SetOutputSizePixel(aNewSize); + static sal_Int32 nAdd = 4; - while ( i < PALETTE_SIZE ) - { - // fill empty elements if less then PALLETTE_SIZE colors are available - aColorSet.InsertItem( i+1, aColWhite, aStrWhite ); - i++; - } + SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd)); + aColorSet.Clear(); + aColorSet.addEntriesForXColorList(*pColorTable); } aColorSet.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) ); - aColorSet.SetColCount( PALETTE_X ); - aColorSet.SetLineCount( PALETTE_Y ); - - lcl_CalcSizeValueSet( *this, aColorSet, aSize12 ); - SetHelpId( HID_POPUP_COLOR ); aColorSet.SetHelpId( HID_POPUP_COLOR_CTRL ); - SetText( rWndTitle ); aColorSet.Show(); - AddStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ColorTableState" ))); + if ( bKillTable ) delete pColorTable; } @@ -1019,33 +994,14 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co if ( pColorTable ) { // Die Liste der Farben (ColorTable) hat sich ge"andert: - short i = 0; - long nCount = pColorTable->Count(); - XColorEntry* pEntry = NULL; - ::Color aColWhite( COL_WHITE ); - String aStrWhite( SVX_RES( RID_SVXITEMS_COLOR_WHITE ) ); - - // ScrollBar an oder aus - WinBits nBits = aColorSet.GetStyle(); - if ( nCount > PALETTE_SIZE ) - nBits &= ~WB_VSCROLL; - else - nBits |= WB_VSCROLL; - aColorSet.SetStyle( nBits ); - - for ( i = 0; i < nCount; ++i ) - { - pEntry = pColorTable->GetColor(i); - aColorSet.SetItemColor( i + 1, pEntry->GetColor() ); - aColorSet.SetItemText ( i + 1, pEntry->GetName() ); - } - - while ( i < PALETTE_SIZE ) - { - aColorSet.SetItemColor( i + 1, aColWhite ); - aColorSet.SetItemText ( i + 1, aStrWhite ); - i++; - } + const long nColorCount(pColorTable->Count()); + const Size aNewSize(aColorSet.layoutAllVisible(nColorCount)); + aColorSet.SetOutputSizePixel(aNewSize); + static sal_Int32 nAdd = 4; + + SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd)); + aColorSet.Clear(); + aColorSet.addEntriesForXColorList(*pColorTable); } } } |