summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2013-04-16 08:41:07 +0000
committerArmin Le Grand <alg@apache.org>2013-04-16 08:41:07 +0000
commit68e707bbc6fe23881b822e6efab8a2933343dc1a (patch)
tree182e2fe8efee67cf005f8563574706d5878cf249
parent4413cf97c42cd2318bf10562715ae755dfccf104 (diff)
i122041 Unified and centralized control for Color ValueSets
Notes
-rw-r--r--cui/source/inc/backgrnd.hxx4
-rw-r--r--cui/source/inc/cuitabarea.hxx6
-rw-r--r--cui/source/tabpages/backgrnd.cxx63
-rw-r--r--cui/source/tabpages/tpcolor.cxx63
-rw-r--r--sd/source/ui/app/sddll2.cxx2
-rw-r--r--sd/source/ui/slideshow/slideshowimpl.cxx2
-rw-r--r--sd/source/ui/view/drviews6.cxx2
-rw-r--r--sd/source/ui/view/drvwshrg.cxx2
-rw-r--r--svx/Library_svx.mk1
-rw-r--r--svx/Library_svxcore.mk1
-rw-r--r--svx/Package_inc.mk3
-rw-r--r--svx/inc/svx/colrctrl.hxx37
-rw-r--r--svx/inc/svx/sidebar/ColorControl.hxx3
-rw-r--r--svx/source/sidebar/tools/ColorControl.cxx46
-rw-r--r--svx/source/tbxctrls/colorwindow.hxx7
-rw-r--r--svx/source/tbxctrls/colrctrl.cxx103
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx76
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);
}
}
}