summaryrefslogtreecommitdiff
path: root/svx/source/tbxctrls
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/tbxctrls')
-rw-r--r--svx/source/tbxctrls/SvxColorChildWindow.cxx47
-rw-r--r--svx/source/tbxctrls/SvxColorValueSet.cxx149
-rw-r--r--svx/source/tbxctrls/colorwindow.hxx3
-rw-r--r--svx/source/tbxctrls/colrctrl.cxx94
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx77
5 files changed, 245 insertions, 125 deletions
diff --git a/svx/source/tbxctrls/SvxColorChildWindow.cxx b/svx/source/tbxctrls/SvxColorChildWindow.cxx
new file mode 100644
index 000000000000..1ce729e90024
--- /dev/null
+++ b/svx/source/tbxctrls/SvxColorChildWindow.cxx
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <svx/SvxColorChildWindow.hxx>
+#include <sfx2/dockwin.hxx>
+#include <svx/svxids.hrc>
+#include <svx/dialogs.hrc>
+#include <svx/colrctrl.hxx>
+#include <svx/dialmgr.hxx>
+
+SFX_IMPL_DOCKINGWINDOW_WITHID( SvxColorChildWindow, SID_COLOR_CONTROL )
+
+/*************************************************************************
+|*
+|* 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 );
+}
diff --git a/svx/source/tbxctrls/SvxColorValueSet.cxx b/svx/source/tbxctrls/SvxColorValueSet.cxx
new file mode 100644
index 000000000000..34dfa6c07224
--- /dev/null
+++ b/svx/source/tbxctrls/SvxColorValueSet.cxx
@@ -0,0 +1,149 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <svx/SvxColorValueSet.hxx>
+#include <svx/xtable.hxx>
+#include <svtools/accessibilityoptions.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+SvxColorValueSet::SvxColorValueSet(Window* _pParent, WinBits nWinStyle)
+: ValueSet(_pParent, nWinStyle)
+{
+}
+
+SvxColorValueSet::SvxColorValueSet(Window* _pParent, const ResId& rResId)
+: ValueSet(_pParent, rResId)
+{
+}
+
+sal_uInt32 SvxColorValueSet::getMaxRowCount() const
+{
+ const SvtAccessibilityOptions aOptions;
+
+ return aOptions.GetColorValueSetMaximumRowCount();
+}
+
+sal_uInt32 SvxColorValueSet::getEntryEdgeLength() const
+{
+ const SvtAccessibilityOptions aOptions;
+
+ return aOptions.GetColorValueSetEntryEdgeLength();
+}
+
+sal_uInt32 SvxColorValueSet::getColumnCount() const
+{
+ const SvtAccessibilityOptions aOptions;
+
+ return aOptions.GetColorValueSetColumnCount();
+}
+
+void SvxColorValueSet::addEntriesForXColorList(const XColorList& rXColorList, sal_uInt32 nStartIndex)
+{
+ const sal_uInt32 nColorCount(rXColorList.Count());
+
+ for(sal_uInt32 nIndex(0); nIndex < nColorCount; nIndex++, nStartIndex++)
+ {
+ const XColorEntry* pEntry = rXColorList.GetColor(nIndex);
+
+ if(pEntry)
+ {
+ InsertItem(nStartIndex, pEntry->GetColor(), pEntry->GetName());
+ }
+ else
+ {
+ OSL_ENSURE(false, "OOps, XColorList with empty entries (!)");
+ }
+ }
+}
+
+Size SvxColorValueSet::layoutAllVisible(sal_uInt32 nEntryCount)
+{
+ if(!nEntryCount)
+ {
+ nEntryCount++;
+ }
+
+ const sal_uInt32 nRowCount(ceil(double(nEntryCount)/getColumnCount()));
+ const Size aItemSize(getEntryEdgeLength() - 2, getEntryEdgeLength() - 2);
+ const WinBits aWinBits(GetStyle() & ~WB_VSCROLL);
+
+ if(nRowCount > getMaxRowCount())
+ {
+ SetStyle(aWinBits|WB_VSCROLL);
+ }
+ else
+ {
+ SetStyle(aWinBits);
+ }
+
+ SetColCount(getColumnCount());
+ SetLineCount(std::min(nRowCount, getMaxRowCount()));
+ SetItemWidth(aItemSize.Width());
+ SetItemHeight(aItemSize.Height());
+
+ return CalcWindowSizePixel(aItemSize);
+}
+
+Size SvxColorValueSet::layoutToGivenHeight(sal_uInt32 nHeight, sal_uInt32 nEntryCount)
+{
+ if(!nEntryCount)
+ {
+ nEntryCount++;
+ }
+
+ const Size aItemSize(getEntryEdgeLength(), getEntryEdgeLength());
+ const WinBits aWinBits(GetStyle() & ~WB_VSCROLL);
+
+ // get size whith all fields disabled
+ const WinBits aWinBitsNoScrollNoFields(GetStyle() & ~(WB_VSCROLL|WB_NAMEFIELD|WB_NONEFIELD));
+ SetStyle(aWinBitsNoScrollNoFields);
+ const Size aSizeNoScrollNoFields(CalcWindowSizePixel(aItemSize, getColumnCount()));
+
+ // get size with all needed fields
+ SetStyle(aWinBits);
+ Size aNewSize(CalcWindowSizePixel(aItemSize, getColumnCount()));
+
+ // evtl. activate vertical scroll
+ const bool bAdaptHeight(static_cast< sal_uInt32 >(aNewSize.Height()) > nHeight);
+
+ if(bAdaptHeight)
+ {
+ SetStyle(aWinBits|WB_VSCROLL);
+ aNewSize = CalcWindowSizePixel(aItemSize, getColumnCount());
+ }
+
+ // calculate field height and available height for requested height
+ const sal_uInt32 nFieldHeight(aNewSize.Height() - aSizeNoScrollNoFields.Height());
+ const sal_uInt32 nAvailableHeight(nHeight >= nFieldHeight ? nHeight - nFieldHeight : 0);
+
+ // calculate how many lines can be shown there
+ const Size aItemSizePixel(CalcItemSizePixel(aItemSize));
+ const sal_uInt32 nLineCount((nAvailableHeight + aItemSizePixel.Height() - 1) / aItemSizePixel.Height());
+
+ // set height to wanted height
+ aNewSize.Height() = nHeight;
+
+ SetItemWidth(aItemSize.Width());
+ SetItemHeight(aItemSize.Height());
+ SetColCount(getColumnCount());
+ SetLineCount(nLineCount);
+
+ return aNewSize;
+}
+
diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx
index 42516081e956..1a0bf5f146e9 100644
--- a/svx/source/tbxctrls/colorwindow.hxx
+++ b/svx/source/tbxctrls/colorwindow.hxx
@@ -28,6 +28,7 @@
#include <svl/lstner.hxx>
#include <rtl/ustring.hxx>
#include <com/sun/star/frame/XFrame.hpp>
+#include <svx/SvxColorValueSet.hxx>
//========================================================================
// class SvxColorWindow_Impl --------------------------------------------------
@@ -39,7 +40,7 @@ class SvxColorWindow_Impl : public SfxPopupWindow
private:
const sal_uInt16 theSlotId;
- ValueSet aColorSet;
+ SvxColorValueSet aColorSet;
OUString maCommand;
const Color mLastColor;
diff --git a/svx/source/tbxctrls/colrctrl.cxx b/svx/source/tbxctrls/colrctrl.cxx
index aec84efc13b4..9f9e89deda82 100644
--- a/svx/source/tbxctrls/colrctrl.cxx
+++ b/svx/source/tbxctrls/colrctrl.cxx
@@ -36,8 +36,6 @@
#include "svx/xexch.hxx"
#include <vcl/svapp.hxx>
-SFX_IMPL_DOCKINGWINDOW_WITHID( SvxColorChildWindow, SID_COLOR_CONTROL )
-
// ------------------------
// - SvxColorValueSetData -
// ------------------------
@@ -92,41 +90,41 @@ sal_Bool SvxColorValueSetData::WriteObject( SotStorageStreamRef& rxOStm, void*,
/*************************************************************************
|*
-|* 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();
@@ -134,27 +132,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();
}
@@ -165,10 +163,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);
}
/*************************************************************************
@@ -177,9 +175,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));
}
/*************************************************************************
@@ -188,7 +186,7 @@ void SvxColorValueSet::StartDrag( sal_Int8 , const Point& )
|*
\************************************************************************/
-void SvxColorValueSet::DoDrag()
+void SvxColorValueSet_docking::DoDrag()
{
SfxObjectShell* pDocSh = SfxObjectShell::Current();
sal_uInt16 nItemId = GetItemId( aDragPosPixel );
@@ -207,7 +205,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
@@ -217,29 +215,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
|*
\************************************************************************/
@@ -258,8 +233,7 @@ SvxColorDockingWindow::SvxColorDockingWindow
nLeftSlot ( SID_ATTR_FILL_COLOR ),
nRightSlot ( SID_ATTR_LINE_COLOR ),
nCols ( 20 ),
- nLines ( 1 ),
- aColorSize ( 14, 14 )
+ nLines ( 1 )
{
FreeResource();
@@ -294,10 +268,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();
@@ -345,12 +320,15 @@ void SvxColorDockingWindow::FillValueSet()
{
if( pColorList.is() )
{
+ nCount = pColorList->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 ) ) );
@@ -361,15 +339,7 @@ void SvxColorDockingWindow::FillValueSet()
aColorSet.InsertItem( (sal_uInt16)1, Image(aBmp), SVX_RESSTR( RID_SVXSTR_INVISIBLE ) );
- XColorEntry* pEntry;
- nCount = pColorList->Count();
-
- for( long i = 0; i < nCount; i++ )
- {
- pEntry = pColorList->GetColor( i );
- aColorSet.InsertItem( (sal_uInt16)i+2,
- pEntry->GetColor(), pEntry->GetName() );
- }
+ aColorSet.addEntriesForXColorList(*pColorList, 2);
}
}
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 981e9fbdc1df..e58ddaef6e8f 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1065,10 +1065,6 @@ void SvxFontNameBox_Impl::Select()
#define WB_NO_DIRECTSELECT ((WinBits)0x04000000)
#endif
-#define PALETTE_X 8
-#define PALETTE_Y 13
-#define PALETTE_SIZE (PALETTE_X * PALETTE_Y)
-
SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
sal_uInt16 nSlotId,
const Reference< XFrame >& rFrame,
@@ -1087,7 +1083,6 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
SfxObjectShell* pDocSh = SfxObjectShell::Current();
const SfxPoolItem* pItem = NULL;
XColorListRef pColorList;
- const Size aSize12( 13, 13 );
if ( pDocSh )
if ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) )
@@ -1125,41 +1120,19 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
if ( pColorList.is() )
{
- short i = 0;
- long nCount = pColorList->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 = pColorList->GetColor(i);
- aColorSet.InsertItem( i+1, pEntry->GetColor(), pEntry->GetName() );
- if( pEntry->GetColor() == mLastColor )
- aColorSet.SelectItem( i+1 );
- }
+ const long nColorCount(pColorList->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(*pColorList);
}
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();
@@ -1264,34 +1237,14 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co
if ( pState )
{
XColorListRef pColorList = ((SvxColorListItem *)pState)->GetColorList();
-
- short i = 0;
- long nCount = pColorList->Count();
- XColorEntry* pEntry = NULL;
- ::Color aColWhite( COL_WHITE );
- String aStrWhite( EditResId(RID_SVXITEMS_COLOR_WHITE) );
-
- // ScrollBar on or off
- 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 = pColorList->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(pColorList->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(*pColorList);
}
}
}