diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-11-04 13:07:44 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-11-04 17:14:26 +0000 |
commit | 760a198e697f3070a5e0e029e4eff7be220eb9cd (patch) | |
tree | eb25c9ff7f9066239b9e22912a0010d826637acf | |
parent | 8bea644d6117a49405e6426dc97214220fc869d1 (diff) |
move ColorListBox beside sole thing that uses it
Change-Id: Ia458ded8881c415badd5d75bddad0daca57a1a25
-rw-r--r-- | include/svtools/ctrlbox.hxx | 80 | ||||
-rw-r--r-- | include/svtools/svtools.hrc | 2 | ||||
-rw-r--r-- | include/svx/dlgctrl.hxx | 69 | ||||
-rw-r--r-- | svtools/source/control/ctrlbox.cxx | 212 | ||||
-rw-r--r-- | svtools/source/control/ctrlbox.src | 5 | ||||
-rw-r--r-- | svx/source/dialog/dlgctrl.cxx | 207 |
6 files changed, 276 insertions, 299 deletions
diff --git a/include/svtools/ctrlbox.hxx b/include/svtools/ctrlbox.hxx index c1ad071123eb..28d1a3497888 100644 --- a/include/svtools/ctrlbox.hxx +++ b/include/svtools/ctrlbox.hxx @@ -42,17 +42,6 @@ typedef ::std::vector< FontMetric > ImplFontList; /************************************************************************* -Description -============ - -class ColorListBox - -Description - -Allows color selection - --------------------------------------------------------------------------- - class LineListBox Description @@ -141,75 +130,6 @@ FontList; FontNameBox; FontStyleBox; FontSizeMenu *************************************************************************/ -class SVT_DLLPUBLIC ColorListBox : public ListBox -{ - ImpColorList* pColorList; // separate liste, in case of user data are required from outside - Size aImageSize; - - using Window::ImplInit; - SVT_DLLPRIVATE void ImplInit(); - SVT_DLLPRIVATE void ImplDestroyColorEntries(); - -public: - ColorListBox( vcl::Window* pParent, - WinBits nWinStyle = WB_BORDER ); - virtual ~ColorListBox() override; - virtual void dispose() override; - - virtual void UserDraw( const UserDrawEvent& rUDEvt ) override; - - using ListBox::InsertEntry; - sal_Int32 InsertEntry( const OUString& rStr, - sal_Int32 nPos = LISTBOX_APPEND ); - sal_Int32 InsertEntry( const Color& rColor, const OUString& rStr, - sal_Int32 nPos = LISTBOX_APPEND ); - void InsertAutomaticEntryColor(const Color &rAutoColorValue); - bool IsAutomaticSelected() { return !GetSelectEntryPos(); } - using ListBox::RemoveEntry; - void RemoveEntry( sal_Int32 nPos ); - void Clear(); - void CopyEntries( const ColorListBox& rBox ); - - using ListBox::GetEntryPos; - sal_Int32 GetEntryPos( const Color& rColor ) const; - Color GetEntryColor( sal_Int32 nPos ) const; - - void SelectEntry( const OUString& rStr ) - { ListBox::SelectEntry( rStr ); } - void SelectEntry( const Color& rColor ); - Color GetSelectEntryColor() const; - using ListBox::IsEntrySelected; - - bool IsEntrySelected(const Color& rColor) const - { - sal_Int32 nPos = GetEntryPos( rColor ); - if ( nPos != LISTBOX_ENTRY_NOTFOUND ) - return IsEntryPosSelected( nPos ); - else - return false; - } - -private: - ColorListBox( const ColorListBox& ) = delete; - ColorListBox& operator =( const ColorListBox& ) = delete; -}; - -inline void ColorListBox::SelectEntry( const Color& rColor ) -{ - sal_Int32 nPos = GetEntryPos( rColor ); - if ( nPos != LISTBOX_ENTRY_NOTFOUND ) - ListBox::SelectEntryPos( nPos ); -} - -inline Color ColorListBox::GetSelectEntryColor() const -{ - sal_Int32 nPos = GetSelectEntryPos(); - Color aColor; - if ( nPos != LISTBOX_ENTRY_NOTFOUND ) - aColor = GetEntryColor( nPos ); - return aColor; -} - /** Class computing border widths shared between Line style listbox and the SvxBorderLine implementation. diff --git a/include/svtools/svtools.hrc b/include/svtools/svtools.hrc index 92cc8092ab7d..c149f8643c31 100644 --- a/include/svtools/svtools.hrc +++ b/include/svtools/svtools.hrc @@ -26,8 +26,6 @@ // various unsorted stuff -#define STR_SVT_AUTOMATIC_COLOR (RID_SVTOOLS_START+16) - #define STR_SVT_FILEVIEW_COLUMN_TITLE (RID_SVTOOLS_START + 20) #define STR_SVT_FILEVIEW_COLUMN_SIZE (RID_SVTOOLS_START + 21) #define STR_SVT_FILEVIEW_COLUMN_DATE (RID_SVTOOLS_START + 22) diff --git a/include/svx/dlgctrl.hxx b/include/svx/dlgctrl.hxx index 5a2c217862bd..64ec881c8112 100644 --- a/include/svx/dlgctrl.hxx +++ b/include/svx/dlgctrl.hxx @@ -207,6 +207,75 @@ public: /************************************************************************/ +class SAL_WARN_UNUSED SVX_DLLPUBLIC ColorListBox : public ListBox +{ + ImpColorList* pColorList; // separate liste, in case of user data are required from outside + Size aImageSize; + + using Window::ImplInit; + SVT_DLLPRIVATE void ImplInit(); + SVT_DLLPRIVATE void ImplDestroyColorEntries(); + +public: + ColorListBox( vcl::Window* pParent, + WinBits nWinStyle = WB_BORDER ); + virtual ~ColorListBox() override; + virtual void dispose() override; + + virtual void UserDraw( const UserDrawEvent& rUDEvt ) override; + + using ListBox::InsertEntry; + sal_Int32 InsertEntry( const OUString& rStr, + sal_Int32 nPos = LISTBOX_APPEND ); + sal_Int32 InsertEntry( const Color& rColor, const OUString& rStr, + sal_Int32 nPos = LISTBOX_APPEND ); + bool IsAutomaticSelected() { return !GetSelectEntryPos(); } + using ListBox::RemoveEntry; + void RemoveEntry( sal_Int32 nPos ); + void Clear(); + void CopyEntries( const ColorListBox& rBox ); + + using ListBox::GetEntryPos; + sal_Int32 GetEntryPos( const Color& rColor ) const; + Color GetEntryColor( sal_Int32 nPos ) const; + + void SelectEntry( const OUString& rStr ) + { ListBox::SelectEntry( rStr ); } + void SelectEntry( const Color& rColor ); + Color GetSelectEntryColor() const; + using ListBox::IsEntrySelected; + + bool IsEntrySelected(const Color& rColor) const + { + sal_Int32 nPos = GetEntryPos( rColor ); + if ( nPos != LISTBOX_ENTRY_NOTFOUND ) + return IsEntryPosSelected( nPos ); + else + return false; + } + +private: + ColorListBox( const ColorListBox& ) = delete; + ColorListBox& operator =( const ColorListBox& ) = delete; +}; + +inline void ColorListBox::SelectEntry( const Color& rColor ) +{ + sal_Int32 nPos = GetEntryPos( rColor ); + if ( nPos != LISTBOX_ENTRY_NOTFOUND ) + ListBox::SelectEntryPos( nPos ); +} + +inline Color ColorListBox::GetSelectEntryColor() const +{ + sal_Int32 nPos = GetSelectEntryPos(); + Color aColor; + if ( nPos != LISTBOX_ENTRY_NOTFOUND ) + aColor = GetEntryColor( nPos ); + return aColor; +} + + class SAL_WARN_UNUSED SVX_DLLPUBLIC ColorLB : public ColorListBox { diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx index b54e54c6396b..ce7234810d16 100644 --- a/svtools/source/control/ctrlbox.cxx +++ b/svtools/source/control/ctrlbox.cxx @@ -59,218 +59,6 @@ #define FONTNAMEBOXMRUENTRIESFILE "/user/config/fontnameboxmruentries" -class ImplColorListData -{ -public: - Color aColor; - bool bColor; - - ImplColorListData() : aColor( COL_BLACK ) { bColor = false; } - explicit ImplColorListData( const Color& rColor ) : aColor( rColor ) { bColor = true; } -}; - -void ColorListBox::ImplInit() -{ - pColorList = new ImpColorList(); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - aImageSize = rStyleSettings.GetListBoxPreviewDefaultPixelSize(); - EnableUserDraw( true ); - SetUserItemSize( aImageSize ); -} - -void ColorListBox::ImplDestroyColorEntries() -{ - for ( size_t n = pColorList->size(); n; ) - delete (*pColorList)[ --n ]; - pColorList->clear(); -} - -ColorListBox::ColorListBox( vcl::Window* pParent, WinBits nWinStyle ) : - ListBox( pParent, nWinStyle ) -{ - ImplInit(); - SetEdgeBlending(true); -} - -ColorListBox::~ColorListBox() -{ - disposeOnce(); -} - -void ColorListBox::dispose() -{ - if ( pColorList ) - { - ImplDestroyColorEntries(); - delete pColorList; - pColorList = nullptr; - } - ListBox::dispose(); -} - -sal_Int32 ColorListBox::InsertEntry( const OUString& rStr, sal_Int32 nPos ) -{ - nPos = ListBox::InsertEntry( rStr, nPos ); - if ( nPos != LISTBOX_ERROR ) - { - ImplColorListData* pData = new ImplColorListData; - if ( static_cast<size_t>(nPos) < pColorList->size() ) - { - ImpColorList::iterator it = pColorList->begin(); - ::std::advance( it, nPos ); - pColorList->insert( it, pData ); - } - else - { - pColorList->push_back( pData ); - nPos = pColorList->size() - 1; - } - } - return nPos; -} - -sal_Int32 ColorListBox::InsertEntry( const Color& rColor, const OUString& rStr, - sal_Int32 nPos ) -{ - nPos = ListBox::InsertEntry( rStr, nPos ); - if ( nPos != LISTBOX_ERROR ) - { - ImplColorListData* pData = new ImplColorListData( rColor ); - if ( static_cast<size_t>(nPos) < pColorList->size() ) - { - ImpColorList::iterator it = pColorList->begin(); - ::std::advance( it, nPos ); - pColorList->insert( it, pData ); - } - else - { - pColorList->push_back( pData ); - nPos = pColorList->size() - 1; - } - } - return nPos; -} - -void ColorListBox::InsertAutomaticEntryColor(const Color &rColor) -{ - // insert the "Automatic"-entry always on the first position - InsertEntry( rColor, SVT_RESSTR(STR_SVT_AUTOMATIC_COLOR), 0 ); -} - -void ColorListBox::RemoveEntry( sal_Int32 nPos ) -{ - ListBox::RemoveEntry( nPos ); - if ( 0 <= nPos && static_cast<size_t>(nPos) < pColorList->size() ) - { - ImpColorList::iterator it = pColorList->begin(); - ::std::advance( it, nPos ); - delete *it; - pColorList->erase( it ); - } -} - -void ColorListBox::Clear() -{ - ImplDestroyColorEntries(); - ListBox::Clear(); -} - -void ColorListBox::CopyEntries( const ColorListBox& rBox ) -{ - // Liste leeren - ImplDestroyColorEntries(); - - // Daten kopieren - size_t nCount = rBox.pColorList->size(); - for ( size_t n = 0; n < nCount; n++ ) - { - ImplColorListData* pData = (*rBox.pColorList)[ n ]; - sal_Int32 nPos = InsertEntry( rBox.GetEntry( n ) ); - if ( nPos != LISTBOX_ERROR ) - { - if ( static_cast<size_t>(nPos) < pColorList->size() ) - { - ImpColorList::iterator it = pColorList->begin(); - ::std::advance( it, nPos ); - pColorList->insert( it, new ImplColorListData( *pData ) ); - } - else - { - pColorList->push_back( new ImplColorListData( *pData ) ); - } - } - } -} - -sal_Int32 ColorListBox::GetEntryPos( const Color& rColor ) const -{ - for( sal_Int32 n = (sal_Int32) pColorList->size(); n; ) - { - ImplColorListData* pData = (*pColorList)[ --n ]; - if ( pData->bColor && ( pData->aColor == rColor ) ) - return n; - } - return LISTBOX_ENTRY_NOTFOUND; -} - -Color ColorListBox::GetEntryColor( sal_Int32 nPos ) const -{ - Color aColor; - ImplColorListData* pData = ( 0 <= nPos && static_cast<size_t>(nPos) < pColorList->size() ) ? - (*pColorList)[ nPos ] : nullptr; - if ( pData && pData->bColor ) - aColor = pData->aColor; - return aColor; -} - -void ColorListBox::UserDraw( const UserDrawEvent& rUDEvt ) -{ - size_t nPos = rUDEvt.GetItemId(); - ImplColorListData* pData = ( nPos < pColorList->size() ) ? (*pColorList)[ nPos ] : nullptr; - if ( pData ) - { - if ( pData->bColor ) - { - Point aPos( rUDEvt.GetRect().TopLeft() ); - - aPos.X() += 2; - aPos.Y() += ( rUDEvt.GetRect().GetHeight() - aImageSize.Height() ) / 2; - - const Rectangle aRect(aPos, aImageSize); - - vcl::RenderContext* pRenderContext = rUDEvt.GetRenderContext(); - pRenderContext->Push(); - pRenderContext->SetFillColor(pData->aColor); - pRenderContext->SetLineColor(pRenderContext->GetTextColor()); - pRenderContext->DrawRect(aRect); - pRenderContext->Pop(); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - const sal_uInt16 nEdgeBlendingPercent(GetEdgeBlending() ? rStyleSettings.GetEdgeBlending() : 0); - - if(nEdgeBlendingPercent) - { - const Color& rTopLeft(rStyleSettings.GetEdgeBlendingTopLeftColor()); - const Color& rBottomRight(rStyleSettings.GetEdgeBlendingBottomRightColor()); - const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100); - const BitmapEx aBlendFrame(createBlendFrame(aRect.GetSize(), nAlpha, rTopLeft, rBottomRight)); - - if(!aBlendFrame.IsEmpty()) - { - pRenderContext->DrawBitmapEx(aRect.TopLeft(), aBlendFrame); - } - } - - ListBox::DrawEntry( rUDEvt, false, false ); - } - else - ListBox::DrawEntry( rUDEvt, false, true ); - } - else - ListBox::DrawEntry( rUDEvt, true, false ); -} - BorderWidthImpl::BorderWidthImpl( BorderWidthImplFlags nFlags, double nRate1, double nRate2, double nRateGap ): m_nFlags( nFlags ), m_nRate1( nRate1 ), diff --git a/svtools/source/control/ctrlbox.src b/svtools/source/control/ctrlbox.src index 36036d927a47..4d04006cfbcd 100644 --- a/svtools/source/control/ctrlbox.src +++ b/svtools/source/control/ctrlbox.src @@ -18,11 +18,6 @@ */ #include <svtools/svtools.hrc> -String STR_SVT_AUTOMATIC_COLOR -{ - Text [ en-US ] = "Automatic"; -}; - /* * resources for CollatorResource / CollatorResourceData resp. */ diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx index 0ee46f77d713..8793cfdf0dc8 100644 --- a/svx/source/dialog/dlgctrl.cxx +++ b/svx/source/dialog/dlgctrl.cxx @@ -1117,6 +1117,213 @@ VCL_BUILDER_DECL_FACTORY(ColorLB) rRet = pListBox; } +class ImplColorListData +{ +public: + Color aColor; + bool bColor; + + ImplColorListData() : aColor( COL_BLACK ) { bColor = false; } + explicit ImplColorListData( const Color& rColor ) : aColor( rColor ) { bColor = true; } +}; + +void ColorListBox::ImplInit() +{ + pColorList = new ImpColorList(); + + const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); + aImageSize = rStyleSettings.GetListBoxPreviewDefaultPixelSize(); + EnableUserDraw( true ); + SetUserItemSize( aImageSize ); +} + +void ColorListBox::ImplDestroyColorEntries() +{ + for ( size_t n = pColorList->size(); n; ) + delete (*pColorList)[ --n ]; + pColorList->clear(); +} + +ColorListBox::ColorListBox( vcl::Window* pParent, WinBits nWinStyle ) : + ListBox( pParent, nWinStyle ) +{ + ImplInit(); + SetEdgeBlending(true); +} + +ColorListBox::~ColorListBox() +{ + disposeOnce(); +} + +void ColorListBox::dispose() +{ + if ( pColorList ) + { + ImplDestroyColorEntries(); + delete pColorList; + pColorList = nullptr; + } + ListBox::dispose(); +} + +sal_Int32 ColorListBox::InsertEntry( const OUString& rStr, sal_Int32 nPos ) +{ + nPos = ListBox::InsertEntry( rStr, nPos ); + if ( nPos != LISTBOX_ERROR ) + { + ImplColorListData* pData = new ImplColorListData; + if ( static_cast<size_t>(nPos) < pColorList->size() ) + { + ImpColorList::iterator it = pColorList->begin(); + ::std::advance( it, nPos ); + pColorList->insert( it, pData ); + } + else + { + pColorList->push_back( pData ); + nPos = pColorList->size() - 1; + } + } + return nPos; +} + +sal_Int32 ColorListBox::InsertEntry( const Color& rColor, const OUString& rStr, + sal_Int32 nPos ) +{ + nPos = ListBox::InsertEntry( rStr, nPos ); + if ( nPos != LISTBOX_ERROR ) + { + ImplColorListData* pData = new ImplColorListData( rColor ); + if ( static_cast<size_t>(nPos) < pColorList->size() ) + { + ImpColorList::iterator it = pColorList->begin(); + ::std::advance( it, nPos ); + pColorList->insert( it, pData ); + } + else + { + pColorList->push_back( pData ); + nPos = pColorList->size() - 1; + } + } + return nPos; +} + +void ColorListBox::RemoveEntry( sal_Int32 nPos ) +{ + ListBox::RemoveEntry( nPos ); + if ( 0 <= nPos && static_cast<size_t>(nPos) < pColorList->size() ) + { + ImpColorList::iterator it = pColorList->begin(); + ::std::advance( it, nPos ); + delete *it; + pColorList->erase( it ); + } +} + +void ColorListBox::Clear() +{ + ImplDestroyColorEntries(); + ListBox::Clear(); +} + +void ColorListBox::CopyEntries( const ColorListBox& rBox ) +{ + // Liste leeren + ImplDestroyColorEntries(); + + // Daten kopieren + size_t nCount = rBox.pColorList->size(); + for ( size_t n = 0; n < nCount; n++ ) + { + ImplColorListData* pData = (*rBox.pColorList)[ n ]; + sal_Int32 nPos = InsertEntry( rBox.GetEntry( n ) ); + if ( nPos != LISTBOX_ERROR ) + { + if ( static_cast<size_t>(nPos) < pColorList->size() ) + { + ImpColorList::iterator it = pColorList->begin(); + ::std::advance( it, nPos ); + pColorList->insert( it, new ImplColorListData( *pData ) ); + } + else + { + pColorList->push_back( new ImplColorListData( *pData ) ); + } + } + } +} + +sal_Int32 ColorListBox::GetEntryPos( const Color& rColor ) const +{ + for( sal_Int32 n = (sal_Int32) pColorList->size(); n; ) + { + ImplColorListData* pData = (*pColorList)[ --n ]; + if ( pData->bColor && ( pData->aColor == rColor ) ) + return n; + } + return LISTBOX_ENTRY_NOTFOUND; +} + +Color ColorListBox::GetEntryColor( sal_Int32 nPos ) const +{ + Color aColor; + ImplColorListData* pData = ( 0 <= nPos && static_cast<size_t>(nPos) < pColorList->size() ) ? + (*pColorList)[ nPos ] : nullptr; + if ( pData && pData->bColor ) + aColor = pData->aColor; + return aColor; +} + +void ColorListBox::UserDraw( const UserDrawEvent& rUDEvt ) +{ + size_t nPos = rUDEvt.GetItemId(); + ImplColorListData* pData = ( nPos < pColorList->size() ) ? (*pColorList)[ nPos ] : nullptr; + if ( pData ) + { + if ( pData->bColor ) + { + Point aPos( rUDEvt.GetRect().TopLeft() ); + + aPos.X() += 2; + aPos.Y() += ( rUDEvt.GetRect().GetHeight() - aImageSize.Height() ) / 2; + + const Rectangle aRect(aPos, aImageSize); + + vcl::RenderContext* pRenderContext = rUDEvt.GetRenderContext(); + pRenderContext->Push(); + pRenderContext->SetFillColor(pData->aColor); + pRenderContext->SetLineColor(pRenderContext->GetTextColor()); + pRenderContext->DrawRect(aRect); + pRenderContext->Pop(); + + const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); + const sal_uInt16 nEdgeBlendingPercent(GetEdgeBlending() ? rStyleSettings.GetEdgeBlending() : 0); + + if(nEdgeBlendingPercent) + { + const Color& rTopLeft(rStyleSettings.GetEdgeBlendingTopLeftColor()); + const Color& rBottomRight(rStyleSettings.GetEdgeBlendingBottomRightColor()); + const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100); + const BitmapEx aBlendFrame(createBlendFrame(aRect.GetSize(), nAlpha, rTopLeft, rBottomRight)); + + if(!aBlendFrame.IsEmpty()) + { + pRenderContext->DrawBitmapEx(aRect.TopLeft(), aBlendFrame); + } + } + + ListBox::DrawEntry( rUDEvt, false, false ); + } + else + ListBox::DrawEntry( rUDEvt, false, true ); + } + else + ListBox::DrawEntry( rUDEvt, true, false ); +} + + // Fills the Listbox with color and strings void ColorLB::Fill( const XColorListRef &pColorTab ) |