extras/source/glade/libreoffice-catalog.xml.in | 7 include/sfx2/objsh.hxx | 2 include/svx/Palette.hxx | 83 +++++++ include/svx/PaletteManager.hxx | 76 ++++++ include/svx/SvxColorValueSet.hxx | 1 include/svx/tbcontrl.hxx | 30 -- sc/inc/document.hxx | 2 sc/source/core/data/document10.cxx | 51 ++++ sc/source/ui/app/scdll.cxx | 2 sc/source/ui/docshell/docsh.cxx | 5 sc/source/ui/inc/docsh.hxx | 2 sd/source/ui/app/sddll.cxx | 2 sfx2/source/doc/objcont.cxx | 7 sfx2/source/toolbox/tbxitem.cxx | 2 svx/Library_svxcore.mk | 2 svx/UIConfig_svx.mk | 1 svx/source/tbxctrls/Palette.cxx | 209 +++++++++++++++++ svx/source/tbxctrls/PaletteManager.cxx | 250 +++++++++++++++++++++ svx/source/tbxctrls/SvxColorValueSet.cxx | 22 + svx/source/tbxctrls/colorwindow.hxx | 24 +- svx/source/tbxctrls/tbcontrl.cxx | 293 ++++++++++++------------- svx/uiconfig/ui/colorwindow.ui | 146 ++++++++++++ sw/inc/doc.hxx | 2 sw/inc/docsh.hxx | 2 sw/source/core/doc/docfmt.cxx | 43 +++ sw/source/uibase/app/docst.cxx | 5 sw/source/uibase/app/swmodule.cxx | 2 vcl/source/app/settings.cxx | 2 28 files changed, 1095 insertions(+), 180 deletions(-)
New commits: commit e03223d4c3cdc5d89598f0afefbd3eaee8a69736 Author: Tomaž Vajngerl <[email protected]> Date: Wed Sep 17 10:18:12 2014 +0200 Don't manually set the SvxColorWindow size Change-Id: Idd5ba4480c5323fb15dbb4c850b46e3f0604737b diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index 37ca5a8..faffc67 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -37,7 +37,7 @@ private: const sal_uInt16 theSlotId; SvxColorValueSet* mpColorSet; SvxColorValueSet* mpRecentColorSet; - Size maWindowSize; + ListBox* mpPaletteListBox; PushButton* mpButtonAutoColor; PushButton* mpButtonPicker; diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index ae02c6e..1afb936 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -1009,7 +1009,6 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, "palette_popup_window", "svx/ui/colorwindow.ui", rFrame ), theSlotId( nSlotId ), - maWindowSize( 250, 350 ), maCommand( rCommand ), mrPaletteManager( rPaletteManager ), mnColorSetCols( 10 ) @@ -1186,7 +1185,6 @@ void SvxColorWindow_Impl::Resize() { mpColorSet->SetSizePixel( this->GetOutputSizePixel() ); mpRecentColorSet->SetSizePixel( this->GetOutputSizePixel() ); - SetOutputSizePixel(maWindowSize); } void SvxColorWindow_Impl::StartSelection() commit 83eefb378bbfc6bcdc6db9630a70c32a6ef4acc8 Author: Tomaž Vajngerl <[email protected]> Date: Wed Sep 17 10:16:16 2014 +0200 Adjust color window UI & align with FloatWindow changes Change-Id: I6a402bf29af6edc153e661b28e53166c509823af diff --git a/svx/uiconfig/ui/colorwindow.ui b/svx/uiconfig/ui/colorwindow.ui index f33366a..d15eb42 100644 --- a/svx/uiconfig/ui/colorwindow.ui +++ b/svx/uiconfig/ui/colorwindow.ui @@ -1,9 +1,18 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.16.1 --> +<!-- Generated with glade 3.18.3 --> <interface> <requires lib="gtk+" version="3.10"/> + <requires lib="LibreOffice" version="1.0"/> <object class="GtkWindow" id="palette_popup_window"> <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="border_width">6</property> + <property name="resizable">False</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">popup-menu</property> + <property name="skip_pager_hint">True</property> + <property name="deletable">False</property> <child> <object class="GtkBox" id="box1"> <property name="visible">True</property> @@ -15,6 +24,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <property name="relief">none</property> </object> <packing> <property name="expand">False</property> @@ -46,6 +56,8 @@ </child> <child> <object class="svxlo-SvxColorValueSet" id="colorset"> + <property name="width_request">200</property> + <property name="height_request">150</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> @@ -109,6 +121,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <property name="relief">none</property> </object> <packing> <property name="expand">False</property> commit 9df22b4ac0f97346701d0284abc74499310e660f Author: Tomaž Vajngerl <[email protected]> Date: Wed Sep 17 10:13:46 2014 +0200 Add svxlo-SvxColorValueSet to the glade catalog Change-Id: I2f6e9e7dbca3b2cd8a7d712c5516b526ddda83b8 diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in index 12ff8b4..31dd5ee 100644 --- a/extras/source/glade/libreoffice-catalog.xml.in +++ b/extras/source/glade/libreoffice-catalog.xml.in @@ -364,7 +364,10 @@ <glade-widget-class title="Document Info Preview" name="svtlo-ODocumentInfoPreview" generic-name="Document Info Preview" parent="GtkDrawingArea" icon-name="widget-gtk-drawingarea"/> - <glade-widget-class title="SvxColorValueSet" name="svxcorelo-SvxColorValueSet" + <glade-widget-class title="SvxCoreColorValueSet" name="svxcorelo-SvxColorValueSet" + generic-name="Set of Value Options" parent="GtkDrawingArea" + icon-name="widget-gtk-drawingarea"/> + <glade-widget-class title="SvxColorValueSet" name="svxlo-SvxColorValueSet" generic-name="Set of Value Options" parent="GtkDrawingArea" icon-name="widget-gtk-drawingarea"/> <glade-widget-class title="SwColumnValueSet" name="swuilo-ColumnValueSet" @@ -691,7 +694,7 @@ <glade-widget-class title="Open Document ListBox" name="dbulo-OpenDocumentListBox" generic-name="Open Document ListBox" parent="GtkComboBox" icon-name="widget-gtk-combobox"/> - + <glade-widget-class title="Fade Effect ListBox" name="sdlo-FadeEffectLB" generic-name="Fade Effect ListBox" parent="GtkComboBox" icon-name="widget-gtk-combobox"/> commit 10fee3d3bcc358177ffb9578e631099b17e828c8 Author: Tomaž Vajngerl <[email protected]> Date: Tue Sep 16 23:07:27 2014 +0200 SFX_ITEM_SET to SfxItemState::SET Change-Id: I95dc8872d702cbe63d5fdab10a9ddd0e86d49e06 diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx index 0e12001..8702e4c 100644 --- a/sc/source/core/data/document10.cxx +++ b/sc/source/core/data/document10.cxx @@ -270,7 +270,7 @@ std::vector<Color> ScDocument::GetDocColors() while( nWhich ) { const SfxPoolItem *pItem; - if( SFX_ITEM_SET == rItemSet.GetItemState( nWhich, false, &pItem ) ) + if( SfxItemState::SET == rItemSet.GetItemState( nWhich, false, &pItem ) ) { sal_uInt16 aWhich = pItem->Which(); if( std::find(aColAttrs.begin(), aColAttrs.end(), aWhich) != aColAttrs.end() ) diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx index 539e3a2..4cd06b2 100644 --- a/sw/source/core/doc/docfmt.cxx +++ b/sw/source/core/doc/docfmt.cxx @@ -1934,7 +1934,7 @@ std::vector<Color> SwDoc::GetDocColors() while( nWhich ) { const SfxPoolItem *pItem; - if( SFX_ITEM_SET == pItemSet->GetItemState( nWhich, false, &pItem ) ) + if( SfxItemState::SET == pItemSet->GetItemState( nWhich, false, &pItem ) ) { sal_uInt16 aWhich = pItem->Which(); if( std::find(aColAttrs.begin(), aColAttrs.end(), aWhich) != aColAttrs.end() ) commit 93c4e3c9349a1ea07b822a2824559ad28f4a9a5e Author: Krisztian Pinter <[email protected]> Date: Mon Aug 11 17:35:50 2014 +0200 Add recent colors Change-Id: Id6b2239149bf7d0b3c9242efb7a72091e32c3384 diff --git a/include/svx/Palette.hxx b/include/svx/Palette.hxx index 11a3462..6eab3f4 100644 --- a/include/svx/Palette.hxx +++ b/include/svx/Palette.hxx @@ -29,7 +29,6 @@ typedef std::pair<Color, OUString> NamedColor; typedef std::vector< NamedColor > ColorList; - class Palette { public: diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx index e4144f9..cb70d2c 100644 --- a/include/svx/PaletteManager.hxx +++ b/include/svx/PaletteManager.hxx @@ -23,6 +23,7 @@ #include <svx/Palette.hxx> #include <rtl/ustring.hxx> #include <svx/tbxcolorupdate.hxx> +#include <deque> #include <tools/urlobj.hxx> #include <comphelper/processfactory.hxx> @@ -36,27 +37,35 @@ class PaletteManager { - sal_uInt16 mnNumOfPalettes; - sal_uInt16 mnCurrentPalette; + const sal_uInt16 mnMaxRecentColors; - long mnColorCount; + sal_uInt16 mnNumOfPalettes; + sal_uInt16 mnCurrentPalette; + + long mnColorCount; svx::ToolboxButtonColorUpdater* mpBtnUpdater; - Color mLastColor; + Color mLastColor; + std::deque<Color> maRecentColors; boost::ptr_vector<Palette> maPalettes; public: PaletteManager(); ~PaletteManager(); void LoadPalettes(); void ReloadColorSet(SvxColorValueSet& rColorSet); + void ReloadRecentColorSet(SvxColorValueSet& rColorSet); std::vector<OUString> GetPaletteList(); void SetPalette( sal_Int32 nPos ); sal_Int32 GetPalette(); long GetColorCount(); + long GetRecentColorCount(); OUString GetPaletteName(); + const Color& GetLastColor(); void SetLastColor(const Color& rLastColor); + void AddRecentColor(const Color& rRecentColor); + void SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater); void PopupColorPicker(const OUString aCommand); static void DispatchColorCommand(const OUString aCommand, const Color aColor); diff --git a/svx/source/tbxctrls/Palette.cxx b/svx/source/tbxctrls/Palette.cxx index 496e0fc..ba5bdbd 100644 --- a/svx/source/tbxctrls/Palette.cxx +++ b/svx/source/tbxctrls/Palette.cxx @@ -52,10 +52,9 @@ void PaletteGPL::LoadColorSet( SvxColorValueSet& rColorSet ) rColorSet.Clear(); int nIx = 1; - for(ColorList::const_iterator it = maColors.begin(); + for(typename ColorList::const_iterator it = maColors.begin(); it != maColors.end(); ++it) { - // TODO make it->second OUString rColorSet.InsertItem(nIx, it->first, it->second); ++nIx; } diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx index 98ae0b2..101c002 100644 --- a/svx/source/tbxctrls/PaletteManager.cxx +++ b/svx/source/tbxctrls/PaletteManager.cxx @@ -30,6 +30,7 @@ #define STR_DOC_COLOR_PREFIX "Document Color " PaletteManager::PaletteManager() : + mnMaxRecentColors(10), mnNumOfPalettes(2), mnCurrentPalette(0), mnColorCount(0), @@ -115,6 +116,18 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet) } } +void PaletteManager::ReloadRecentColorSet(SvxColorValueSet& rColorSet) +{ + rColorSet.Clear(); + int nIx = 1; + for(std::deque<Color>::const_iterator it = maRecentColors.begin(); + it != maRecentColors.end(); ++it) + { + rColorSet.InsertItem(nIx, *it, ""); + ++nIx; + } +} + std::vector<OUString> PaletteManager::GetPaletteList() { std::vector<OUString> aPaletteNames; @@ -148,6 +161,11 @@ long PaletteManager::GetColorCount() return mnColorCount; } +long PaletteManager::GetRecentColorCount() +{ + return maRecentColors.size(); +} + OUString PaletteManager::GetPaletteName() { if( mnCurrentPalette == 0 ) @@ -168,6 +186,19 @@ void PaletteManager::SetLastColor(const Color& rLastColor) mLastColor = rLastColor; } +void PaletteManager::AddRecentColor(const Color& rRecentColor) +{ + std::deque<Color>::iterator itColor = + std::find(maRecentColors.begin(), maRecentColors.end(), rRecentColor); + // if recent color to be added is already in list, remove it + if( itColor != maRecentColors.end() ) + maRecentColors.erase( itColor ); + + maRecentColors.push_front( rRecentColor ); + if( maRecentColors.size() > mnMaxRecentColors ) + maRecentColors.pop_back(); +} + void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater) { mpBtnUpdater = pBtnUpdater; @@ -182,6 +213,7 @@ void PaletteManager::PopupColorPicker(const OUString aCommand) { mpBtnUpdater->Update( aColorDlg.GetColor() ); mLastColor = aColorDlg.GetColor(); + AddRecentColor( mLastColor ); DispatchColorCommand(aCommand, mLastColor); } } diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index 68829dc..37ca5a8 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -36,16 +36,22 @@ class SvxColorWindow_Impl : public SfxPopupWindow private: const sal_uInt16 theSlotId; SvxColorValueSet* mpColorSet; + SvxColorValueSet* mpRecentColorSet; Size maWindowSize; ListBox* mpPaletteListBox; + PushButton* mpButtonAutoColor; PushButton* mpButtonPicker; OUString maCommand; Link maSelectedLink; PaletteManager& mrPaletteManager; + const sal_uInt16 mnColorSetCols; + DECL_LINK( SelectHdl, void * ); + DECL_LINK( SelectRecentHdl, void * ); DECL_LINK( SelectPaletteHdl, void *); + DECL_LINK( AutoColorClickHdl, void * ); DECL_LINK( OpenPickerClickHdl, void * ); protected: diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index bfd275d..ae02c6e 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -1011,18 +1011,27 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, theSlotId( nSlotId ), maWindowSize( 250, 350 ), maCommand( rCommand ), - mrPaletteManager( rPaletteManager ) + mrPaletteManager( rPaletteManager ), + mnColorSetCols( 10 ) { get(mpPaletteListBox, "palette_listbox"); + get(mpButtonAutoColor, "auto_color_button"); get(mpButtonPicker, "color_picker_button"); get(mpColorSet, "colorset"); + get(mpRecentColorSet, "recent_colorset"); + + mpColorSet->SetStyle( WinBits(WB_FLATVALUESET | WB_ITEMBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT) ); + mpRecentColorSet->SetStyle( WinBits(WB_FLATVALUESET | WB_ITEMBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT) ); + + mpColorSet->SetColCount( mnColorSetCols ); + mpColorSet->layoutAllVisible(mrPaletteManager.GetColorCount()); + mpRecentColorSet->SetColCount( mnColorSetCols ); + mpRecentColorSet->SetLineCount( 1 ); + mpRecentColorSet->layoutAllVisible(mrPaletteManager.GetRecentColorCount()); - mpColorSet->SetStyle( WinBits(WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ); - mpColorSet->SetEdgeBlending( false ); if ( SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId || SID_BACKGROUND_COLOR == theSlotId ) { - mpColorSet->SetStyle( mpColorSet->GetStyle() | WB_NONEFIELD ); mpColorSet->SetText( SVX_RESSTR( RID_SVXSTR_TRANSPARENT ) ); mpColorSet->SetAccessibleName( SVX_RESSTR( RID_SVXSTR_BACKGROUND ) ); } @@ -1037,7 +1046,6 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, SfxItemState eState = aQueryStatus.QueryState( pDummy ); if( (SfxItemState::DEFAULT > eState) || ( SID_EXTRUSION_3D_COLOR == theSlotId ) ) { - mpColorSet->SetStyle( mpColorSet->GetStyle() | WB_NONEFIELD ); mpColorSet->SetText( SVX_RESSTR( RID_SVXSTR_AUTOMATIC ) ); mpColorSet->SetAccessibleName( SVX_RESSTR( RID_SVXSTR_TEXTCOLOR ) ); } @@ -1061,9 +1069,11 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, } mpPaletteListBox->SelectEntryPos(mrPaletteManager.GetPalette(), true); + mpButtonAutoColor->SetClickHdl( LINK( this, SvxColorWindow_Impl, AutoColorClickHdl ) ); mpButtonPicker->SetClickHdl( LINK( this, SvxColorWindow_Impl, OpenPickerClickHdl ) ); mpColorSet->SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) ); + mpRecentColorSet->SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectRecentHdl ) ); SetHelpId( HID_POPUP_COLOR ); mpColorSet->SetHelpId( HID_POPUP_COLOR_CTRL ); SetText( rWndTitle ); @@ -1071,9 +1081,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, AddStatusListener( maCommand ); mrPaletteManager.ReloadColorSet(*mpColorSet); - mpPaletteListBox->Show(); - mpButtonPicker->Show(); - mpColorSet->Show(); + mrPaletteManager.ReloadRecentColorSet(*mpRecentColorSet); } SvxColorWindow_Impl::~SvxColorWindow_Impl() @@ -1113,6 +1121,28 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl) maSelectedLink.Call(&aColor); PaletteManager::DispatchColorCommand(maCommand, aColor); + mrPaletteManager.AddRecentColor(aColor); + return 0; +} + +IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectRecentHdl) +{ + sal_uInt16 nItemId = mpRecentColorSet->GetSelectItemId(); + Color aColor; + aColor = mpRecentColorSet->GetItemColor( nItemId ); + + /* #i33380# DR 2004-09-03 Moved the following line above the Dispatch() calls. + This instance may be deleted in the meantime (i.e. when a dialog is opened + while in Dispatch()), accessing members will crash in this case. */ + mpRecentColorSet->SetNoSelection(); + + if ( IsInPopupMode() ) + EndPopupMode(); + + if ( maSelectedLink.IsSet() ) + maSelectedLink.Call(&aColor); + + PaletteManager::DispatchColorCommand(maCommand, aColor); return 0; } @@ -1124,6 +1154,26 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectPaletteHdl) return 0; } +IMPL_LINK_NOARG(SvxColorWindow_Impl, AutoColorClickHdl) +{ + Color aColor; + if (SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId || SID_BACKGROUND_COLOR == theSlotId) + aColor = COL_TRANSPARENT; + else if (SID_ATTR_CHAR_COLOR == theSlotId || SID_ATTR_CHAR_COLOR2 == theSlotId || SID_EXTRUSION_3D_COLOR == theSlotId) + aColor = COL_AUTO; + + mpRecentColorSet->SetNoSelection(); + + if ( IsInPopupMode() ) + EndPopupMode(); + + if ( maSelectedLink.IsSet() ) + maSelectedLink.Call(&aColor); + + PaletteManager::DispatchColorCommand(maCommand, aColor); + return 0; +} + IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl) { if ( IsInPopupMode() ) @@ -1135,6 +1185,7 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl) void SvxColorWindow_Impl::Resize() { mpColorSet->SetSizePixel( this->GetOutputSizePixel() ); + mpRecentColorSet->SetSizePixel( this->GetOutputSizePixel() ); SetOutputSizePixel(maWindowSize); } @@ -1155,6 +1206,10 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co if (( nSID == SID_COLOR_TABLE ) && ( pState->ISA( SvxColorListItem ))) { mrPaletteManager.ReloadColorSet(*mpColorSet); + mrPaletteManager.ReloadRecentColorSet(*mpRecentColorSet); + + mpColorSet->layoutAllVisible(mrPaletteManager.GetColorCount()); + mpRecentColorSet->layoutAllVisible(mrPaletteManager.GetRecentColorCount()); } else if ( SfxItemState::DEFAULT <= eState ) { diff --git a/svx/uiconfig/ui/colorwindow.ui b/svx/uiconfig/ui/colorwindow.ui index 0527e78..f33366a 100644 --- a/svx/uiconfig/ui/colorwindow.ui +++ b/svx/uiconfig/ui/colorwindow.ui @@ -10,33 +10,11 @@ <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> - <object class="GtkBox" id="box2"> + <object class="GtkButton" id="auto_color_button"> + <property name="label" translatable="yes">Automatic</property> <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkComboBox" id="palette_listbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="color_picker_button"> - <property name="label">Color picker</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">True</property> </object> <packing> <property name="expand">False</property> @@ -45,6 +23,28 @@ </packing> </child> <child> + <object class="GtkSeparator" id="separator4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="palette_listbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> <object class="svxlo-SvxColorValueSet" id="colorset"> <property name="visible">True</property> <property name="can_focus">True</property> @@ -53,7 +53,7 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">3</property> </packing> </child> <child> @@ -64,7 +64,67 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0.019999999552965164</property> + <property name="label" translatable="yes">Recent</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="svxlo-SvxColorValueSet" id="recent_colorset"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkSeparator" id="separator3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="color_picker_button"> + <property name="label">Color picker</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + <child> + <object class="GtkSeparator" id="separator2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">10</property> </packing> </child> </object> commit 43b896d20abf500a882fc67f16cd0902918e5794 Author: Krisztian Pinter <[email protected]> Date: Tue Aug 5 17:21:08 2014 +0200 Make small UI tweaks to SvxColorWindow_Impl Change-Id: I604cbf8ca6f7ebb14c1c95e62f997c3150370119 diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index cdd6e97..bfd275d 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -1019,6 +1019,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, get(mpColorSet, "colorset"); mpColorSet->SetStyle( WinBits(WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ); + mpColorSet->SetEdgeBlending( false ); if ( SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId || SID_BACKGROUND_COLOR == theSlotId ) { mpColorSet->SetStyle( mpColorSet->GetStyle() | WB_NONEFIELD ); @@ -1133,6 +1134,7 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl) void SvxColorWindow_Impl::Resize() { + mpColorSet->SetSizePixel( this->GetOutputSizePixel() ); SetOutputSizePixel(maWindowSize); } commit 67bde2460bab738701765f345863c969aa77a8ae Author: Krisztian Pinter <[email protected]> Date: Tue Aug 5 15:39:20 2014 +0200 Remove redundant class SvxLineColorToolBoxControl Change-Id: I882ee959baae429307218d3076a2a198ff960ddd diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx index 762f33d..3d2fa35 100644 --- a/include/svx/tbcontrl.hxx +++ b/include/svx/tbcontrl.hxx @@ -42,7 +42,8 @@ SvxColorToolBoxControl ---------------------- Item type: SvxColorItem - and SfxBoolItem + SfxBoolItem + and XLineColorItem for font color (writer, ...) Execute-Id SID_ATTR_CHAR_COLOR2 @@ -66,9 +67,7 @@ for 3D extrusion Execute-Id SID_EXTRUSION_3D_COLOR - SvxLineColorToolBoxControl - -------------------------- - Item type: XLineColorItem + for line color Execute-Id SID_ATTR_LINE_COLOR SvxPatternToolBoxControl @@ -236,26 +235,6 @@ public: }; -// class SvxLineColorToolBoxControl -------------------------------------- - -class SVX_DLLPUBLIC SvxLineColorToolBoxControl : public SfxToolBoxControl -{ - ::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > pBtnUpdater; - PaletteManager mPaletteManager; - DECL_LINK( SelectedHdl, Color* ); -public: - SFX_DECL_TOOLBOX_CONTROL(); - SvxLineColorToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); - virtual ~SvxLineColorToolBoxControl(); - - virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, - const SfxPoolItem* pState ) SAL_OVERRIDE; - virtual SfxPopupWindowType GetPopupWindowType() const SAL_OVERRIDE; - virtual SfxPopupWindow* CreatePopupWindow() SAL_OVERRIDE; - virtual void Select(sal_uInt16 nSelectModifier) SAL_OVERRIDE; -}; - - // class SvxFrameToolBoxControl ------------------------------------------ class SVX_DLLPUBLIC SvxFrameToolBoxControl : public SfxToolBoxControl diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx index 12c40a5..2772993 100644 --- a/sc/source/ui/app/scdll.cxx +++ b/sc/source/ui/app/scdll.cxx @@ -171,7 +171,7 @@ void ScDLL::Init() SvxFillToolBoxControl ::RegisterControl(0, pMod); SvxLineStyleToolBoxControl ::RegisterControl(0, pMod); SvxLineWidthToolBoxControl ::RegisterControl(0, pMod); - SvxLineColorToolBoxControl ::RegisterControl(0, pMod); + SvxColorToolBoxControl ::RegisterControl(0, pMod); SvxLineEndToolBoxControl ::RegisterControl(SID_ATTR_LINEEND_STYLE, pMod); SvxStyleToolBoxControl ::RegisterControl(SID_STYLE_APPLY, pMod); SvxFontNameToolBoxControl ::RegisterControl(SID_ATTR_CHAR_FONT, pMod); diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx index a29b6f7..22c21f0 100644 --- a/sd/source/ui/app/sddll.cxx +++ b/sd/source/ui/app/sddll.cxx @@ -207,7 +207,7 @@ void SdDLL::RegisterControllers() SvxFillToolBoxControl::RegisterControl(0, pMod); SvxLineStyleToolBoxControl::RegisterControl(0, pMod); SvxLineWidthToolBoxControl::RegisterControl(0, pMod); - SvxLineColorToolBoxControl::RegisterControl(0, pMod); + SvxColorToolBoxControl::RegisterControl(0, pMod); SvxLineEndToolBoxControl::RegisterControl( SID_ATTR_LINEEND_STYLE, pMod ); diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index 64e00e7..cdd6e97 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -108,8 +108,6 @@ using namespace ::com::sun::star::lang; SFX_IMPL_TOOLBOX_CONTROL( SvxStyleToolBoxControl, SfxTemplateItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxFontNameToolBoxControl, SvxFontItem ); -SFX_IMPL_TOOLBOX_CONTROL( SvxColorToolBoxControl, SvxColorItem ); -SFX_IMPL_TOOLBOX_CONTROL( SvxLineColorToolBoxControl, XLineColorItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxFrameToolBoxControl, SvxBoxItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxFrameLineStyleToolBoxControl, SvxLineItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxSimpleUndoRedoController, SfxStringItem ); @@ -2329,73 +2327,18 @@ void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/) Dispatch( aCommand, aArgs ); } -// class SvxLineColorToolBoxControl ---------------------------------------- - -SvxLineColorToolBoxControl::SvxLineColorToolBoxControl( - sal_uInt16 nSlotId, - sal_uInt16 nId, - ToolBox& rTbx ) : - - SfxToolBoxControl( nSlotId, nId, rTbx ) -{ - rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) ); - addStatusListener( OUString( ".uno:XLineColor" ) ); - pBtnUpdater.reset( new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() ) ); - mPaletteManager.SetLastColor( COL_BLACK ); - mPaletteManager.SetBtnUpdater( pBtnUpdater.get() ); -} - -SvxLineColorToolBoxControl::~SvxLineColorToolBoxControl() -{ -} - -SfxPopupWindowType SvxLineColorToolBoxControl::GetPopupWindowType() const -{ - return SFX_POPUPWINDOW_ONTIMEOUT; -} - -SfxPopupWindow* SvxLineColorToolBoxControl::CreatePopupWindow() -{ - SvxColorWindow_Impl* pColorWin = - new SvxColorWindow_Impl( - m_aCommandURL, - mPaletteManager, - GetSlotId(), - m_xFrame, - SVX_RESSTR( RID_SVXSTR_LINECOLOR ), - &GetToolBox() ); - - pColorWin->StartPopupMode( &GetToolBox(), - FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF|FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE ); - pColorWin->StartSelection(); - SetPopupWindow( pColorWin ); - pColorWin->SetSelectedHdl( LINK( this, SvxLineColorToolBoxControl, SelectedHdl ) ); - return pColorWin; -} - -IMPL_LINK(SvxLineColorToolBoxControl, SelectedHdl, Color*, pColor) +SfxToolBoxControl* SvxColorToolBoxControl::CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx ) { - pBtnUpdater->Update( *pColor ); - mPaletteManager.SetLastColor( *pColor ); - return 0; + return new SvxColorToolBoxControl( nSlotId, nId, rTbx ); } -void SvxLineColorToolBoxControl::StateChanged( - sal_uInt16 /*nSID*/, SfxItemState eState, const SfxPoolItem* /*pState*/ ) +void SvxColorToolBoxControl::RegisterControl(sal_uInt16 nSlotId, SfxModule *pMod) { - ToolBox& rTbx = GetToolBox(); - sal_uInt16 nId = GetId(); - rTbx.EnableItem( nId, SfxItemState::DISABLED != eState ); - rTbx.SetItemState( nId, ( SfxItemState::DONTCARE == eState ) ? TRISTATE_INDET : TRISTATE_FALSE ); + SfxToolBoxControl::RegisterToolBoxControl( pMod, new SfxTbxCtrlFactory( SvxColorToolBoxControl::CreateImpl, TYPE(SvxColorItem), nSlotId ) ); + SfxToolBoxControl::RegisterToolBoxControl( pMod, new SfxTbxCtrlFactory( SvxColorToolBoxControl::CreateImpl, TYPE(XLineColorItem), nSlotId ) ); } -void SvxLineColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/) -{ - Sequence< PropertyValue > aArgs( 1 ); - aArgs[0].Name = "XLineColor"; - aArgs[0].Value = makeAny( (sal_uInt32)( mPaletteManager.GetLastColor().GetColor() )); - Dispatch( OUString( ".uno:XLineColor" ), aArgs ); -} +// class SvxFrameToolBoxControl -------------------------------------------- SvxFrameToolBoxControl::SvxFrameToolBoxControl( sal_uInt16 nSlotId, diff --git a/sw/source/uibase/app/swmodule.cxx b/sw/source/uibase/app/swmodule.cxx index ae7527c..ecec7df 100644 --- a/sw/source/uibase/app/swmodule.cxx +++ b/sw/source/uibase/app/swmodule.cxx @@ -320,7 +320,7 @@ void SwDLL::RegisterControls() SvxFillToolBoxControl::RegisterControl(SID_ATTR_FILL_STYLE, pMod ); SvxLineStyleToolBoxControl::RegisterControl(SID_ATTR_LINE_STYLE, pMod ); SvxLineWidthToolBoxControl::RegisterControl(SID_ATTR_LINE_WIDTH, pMod ); - SvxLineColorToolBoxControl::RegisterControl(SID_ATTR_LINE_COLOR, pMod ); + SvxColorToolBoxControl::RegisterControl(SID_ATTR_LINE_COLOR, pMod ); SvxLineEndToolBoxControl::RegisterControl(SID_ATTR_LINEEND_STYLE, pMod ); SvxFontNameToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONT, pMod ); commit cb02490a1e35886bc2dc4a9889fdd6db742e5899 Author: Krisztian Pinter <[email protected]> Date: Thu Jul 31 10:56:58 2014 +0200 Make .soc loading lazy Change-Id: If7475d6c46faaa6f6f6cde494990e6573b3aadff diff --git a/include/svx/Palette.hxx b/include/svx/Palette.hxx index 2be4eb2..11a3462 100644 --- a/include/svx/Palette.hxx +++ b/include/svx/Palette.hxx @@ -65,7 +65,8 @@ public: class PaletteSOC : public Palette { - //TODO add lazy loading + bool mbLoadedPalette; + OUString maFPath; OUString maName; XColorListRef mpColorList; public: diff --git a/svx/source/tbxctrls/Palette.cxx b/svx/source/tbxctrls/Palette.cxx index 95ebb58..496e0fc 100644 --- a/svx/source/tbxctrls/Palette.cxx +++ b/svx/source/tbxctrls/Palette.cxx @@ -173,11 +173,11 @@ OString lcl_getToken(const OString& rStr, sal_Int32& index) // PaletteSOC ------------------------------------------------------------------ -PaletteSOC::PaletteSOC( const OUString &rFPath, const OUString &rFName ) +PaletteSOC::PaletteSOC( const OUString &rFPath, const OUString &rFName ) : + mbLoadedPalette( false ), + maFPath( rFPath ), + maName( rFName ) { - maName = rFName; - mpColorList = XPropertyList::AsColorList(XPropertyList::CreatePropertyListFromURL(XCOLOR_LIST, rFPath)); - mpColorList->Load(); } PaletteSOC::~PaletteSOC() @@ -191,13 +191,20 @@ const OUString& PaletteSOC::GetName() void PaletteSOC::LoadColorSet( SvxColorValueSet& rColorSet ) { + if( !mbLoadedPalette ) + { + mbLoadedPalette = true; + mpColorList = XPropertyList::AsColorList(XPropertyList::CreatePropertyListFromURL(XCOLOR_LIST, maFPath)); + mpColorList->Load(); + } rColorSet.Clear(); - rColorSet.addEntriesForXColorList( *mpColorList ); + if( mpColorList.is() ) + rColorSet.addEntriesForXColorList( *mpColorList ); } bool PaletteSOC::IsValid() { - return mpColorList.is(); + return true; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit b39f15cfcc28266c5c680d19eaa394960cb7c0ff Author: Krisztian Pinter <[email protected]> Date: Wed Jul 30 19:45:37 2014 +0200 Change vector<Palette*> to ptr_vector<Palette> Change-Id: I1f2832235e8d2ea3517efdce809970ed5f1c6769 diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx index 9d40d48..e4144f9 100644 --- a/include/svx/PaletteManager.hxx +++ b/include/svx/PaletteManager.hxx @@ -25,12 +25,14 @@ #include <svx/tbxcolorupdate.hxx> #include <tools/urlobj.hxx> +#include <comphelper/processfactory.hxx> #include <com/sun/star/util/XURLTransformer.hpp> #include <com/sun/star/util/URLTransformer.hpp> #include <com/sun/star/frame/XDispatch.hpp> #include <com/sun/star/frame/Desktop.hpp> #include <com/sun/star/frame/XDispatchProvider.hpp> -#include <comphelper/processfactory.hxx> + +#include <boost/ptr_container/ptr_vector.hpp> class PaletteManager { @@ -41,7 +43,7 @@ class PaletteManager svx::ToolboxButtonColorUpdater* mpBtnUpdater; Color mLastColor; - std::vector<Palette*> maPalettes; + boost::ptr_vector<Palette> maPalettes; public: PaletteManager(); ~PaletteManager(); diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx index da80f23..98ae0b2 100644 --- a/svx/source/tbxctrls/PaletteManager.cxx +++ b/svx/source/tbxctrls/PaletteManager.cxx @@ -41,20 +41,14 @@ PaletteManager::PaletteManager() : PaletteManager::~PaletteManager() { - for( std::vector<Palette*>::iterator it = maPalettes.begin(); - it != maPalettes.end(); - ++it) - { - delete *it; - } } void PaletteManager::LoadPalettes() { + maPalettes.clear(); OUString aPalPath = SvtPathOptions().GetPalettePath(); osl::Directory aDir(aPalPath); - maPalettes.clear(); osl::DirectoryItem aDirItem; osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_FileURL | @@ -116,7 +110,7 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet) } else { - maPalettes[mnCurrentPalette-1]->LoadColorSet( rColorSet ); + maPalettes[mnCurrentPalette-1].LoadColorSet( rColorSet ); mnColorCount = rColorSet.GetItemCount(); } } @@ -127,11 +121,11 @@ std::vector<OUString> PaletteManager::GetPaletteList() aPaletteNames.push_back( STR_DEFAULT_PAL ); - for( std::vector<Palette*>::iterator it = maPalettes.begin(); + for( boost::ptr_vector<Palette>::iterator it = maPalettes.begin(); it != maPalettes.end(); ++it) { - aPaletteNames.push_back( (*it)->GetName() ); + aPaletteNames.push_back( (*it).GetName() ); } aPaletteNames.push_back( STR_DOC_COLORS ); @@ -161,7 +155,7 @@ OUString PaletteManager::GetPaletteName() else if( mnCurrentPalette == mnNumOfPalettes - 1 ) return OUString( STR_DOC_COLORS ); else - return maPalettes[mnCurrentPalette - 1]->GetName(); + return maPalettes[mnCurrentPalette - 1].GetName(); } const Color& PaletteManager::GetLastColor() commit 1bf3b9f2da8fe6e79e1e20d57784b55958ee3db4 Author: Krisztian Pinter <[email protected]> Date: Wed Jul 30 17:15:49 2014 +0200 Make color picker apply color immediately Change-Id: I38695a43ced63bd5207b631a072231d81aa7e0f9 diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx index 1bd0bd1..9d40d48 100644 --- a/include/svx/PaletteManager.hxx +++ b/include/svx/PaletteManager.hxx @@ -24,6 +24,14 @@ #include <rtl/ustring.hxx> #include <svx/tbxcolorupdate.hxx> +#include <tools/urlobj.hxx> +#include <com/sun/star/util/XURLTransformer.hpp> +#include <com/sun/star/util/URLTransformer.hpp> +#include <com/sun/star/frame/XDispatch.hpp> +#include <com/sun/star/frame/Desktop.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <comphelper/processfactory.hxx> + class PaletteManager { sal_uInt16 mnNumOfPalettes; @@ -48,7 +56,8 @@ public: const Color& GetLastColor(); void SetLastColor(const Color& rLastColor); void SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater); - void PopupColorPicker(); + void PopupColorPicker(const OUString aCommand); + static void DispatchColorCommand(const OUString aCommand, const Color aColor); }; #endif // INCLUDED_SVX_PALETTEMANAGER_HXX diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx index 95485ce..da80f23 100644 --- a/svx/source/tbxctrls/PaletteManager.cxx +++ b/svx/source/tbxctrls/PaletteManager.cxx @@ -21,7 +21,7 @@ #include <osl/file.hxx> #include <unotools/pathoptions.hxx> #include <sfx2/objsh.hxx> -#include "svx/drawitem.hxx" +#include <svx/drawitem.hxx> #include <svx/dialogs.hrc> #include <svtools/colrdlg.hxx> @@ -179,7 +179,7 @@ void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater) mpBtnUpdater = pBtnUpdater; } -void PaletteManager::PopupColorPicker() +void PaletteManager::PopupColorPicker(const OUString aCommand) { SvColorDialog aColorDlg( 0 ); aColorDlg.SetColor ( mLastColor ); @@ -188,6 +188,36 @@ void PaletteManager::PopupColorPicker() { mpBtnUpdater->Update( aColorDlg.GetColor() ); mLastColor = aColorDlg.GetColor(); + DispatchColorCommand(aCommand, mLastColor); + } +} + +void PaletteManager::DispatchColorCommand(const OUString aCommand, const Color aColor) +{ + using namespace css::uno; + using namespace css::frame; + using namespace css::beans; + using namespace css::util; + + Reference<XComponentContext> xContext(comphelper::getProcessComponentContext()); + Reference<XDesktop2> xDesktop = Desktop::create(xContext); + Reference<XDispatchProvider> xDispatchProvider(xDesktop->getCurrentFrame(), UNO_QUERY ); + if (xDispatchProvider.is()) + { + INetURLObject aObj( aCommand ); + + Sequence<PropertyValue> aArgs(1); + aArgs[0].Name = aObj.GetURLPath(); + aArgs[0].Value = makeAny(sal_Int32(aColor.GetColor())); + + URL aTargetURL; + aTargetURL.Complete = aCommand; + Reference<XURLTransformer> xURLTransformer(URLTransformer::create(comphelper::getProcessComponentContext())); + xURLTransformer->parseStrict(aTargetURL); + + Reference<XDispatch> xDispatch = xDispatchProvider->queryDispatch(aTargetURL, OUString(), 0); + if (xDispatch.is()) + xDispatch->dispatch(aTargetURL, aArgs); } } diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index f55fc29..64e00e7 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -1102,7 +1102,6 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl) else aColor = mpColorSet->GetItemColor( nItemId ); - SvxColorItem aColorItem( aColor, theSlotId ); /* #i33380# DR 2004-09-03 Moved the following line above the Dispatch() calls. This instance may be deleted in the meantime (i.e. when a dialog is opened while in Dispatch()), accessing members will crash in this case. */ @@ -1111,20 +1110,10 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl) if ( IsInPopupMode() ) EndPopupMode(); - INetURLObject aObj( maCommand ); - - Any a; - Sequence< PropertyValue > aArgs( 1 ); - aArgs[0].Name = aObj.GetURLPath(); - aColorItem.QueryValue( a ); - aArgs[0].Value = a; - SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ), - maCommand, - aArgs ); - if ( maSelectedLink.IsSet() ) maSelectedLink.Call(&aColor); + PaletteManager::DispatchColorCommand(maCommand, aColor); return 0; } @@ -1138,7 +1127,9 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectPaletteHdl) IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl) { - mrPaletteManager.PopupColorPicker(); + if ( IsInPopupMode() ) + EndPopupMode(); + mrPaletteManager.PopupColorPicker(maCommand); return 0; } commit ec4a78420e4a6ea9e3ded6c14ff8143e96f159d6 Author: Krisztian Pinter <[email protected]> Date: Mon Jul 28 19:18:14 2014 +0200 Change palette selection ComboBox to ListBox Change-Id: Id844781c06e37d66f3eebac9d905c58a62682cb0 diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index df574d8..68829dc 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -27,7 +27,7 @@ #include <com/sun/star/frame/XFrame.hpp> #include <svx/SvxColorValueSet.hxx> #include <svx/PaletteManager.hxx> -#include <vcl/combobox.hxx> +#include <vcl/lstbox.hxx> class SvxColorWindow_Impl : public SfxPopupWindow { @@ -37,7 +37,7 @@ private: const sal_uInt16 theSlotId; SvxColorValueSet* mpColorSet; Size maWindowSize; - ComboBox* mpPaletteComboBox; + ListBox* mpPaletteListBox; PushButton* mpButtonPicker; OUString maCommand; Link maSelectedLink; diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index 5177544..f55fc29 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -1016,7 +1016,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, mrPaletteManager( rPaletteManager ) { - get(mpPaletteComboBox, "palette_list_combobox"); + get(mpPaletteListBox, "palette_listbox"); get(mpButtonPicker, "color_picker_button"); get(mpColorSet, "colorset"); @@ -1052,15 +1052,15 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, mpColorSet->SetAccessibleName( SVX_RESSTR( RID_SVXSTR_LINECOLOR ) ); } - mpPaletteComboBox->SetStyle( mpPaletteComboBox->GetStyle() | WB_BORDER | WB_AUTOSIZE ); - mpPaletteComboBox->SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectPaletteHdl ) ); - mpPaletteComboBox->AdaptDropDownLineCountToMaximum(); + mpPaletteListBox->SetStyle( mpPaletteListBox->GetStyle() | WB_BORDER | WB_AUTOSIZE ); + mpPaletteListBox->SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectPaletteHdl ) ); + mpPaletteListBox->AdaptDropDownLineCountToMaximum(); std::vector<OUString> aPaletteList = mrPaletteManager.GetPaletteList(); - mpPaletteComboBox->SetText( aPaletteList[ mrPaletteManager.GetPalette() ] ); for( std::vector<OUString>::iterator it = aPaletteList.begin(); it != aPaletteList.end(); ++it ) { - mpPaletteComboBox->InsertEntry( *it ); + mpPaletteListBox->InsertEntry( *it ); } + mpPaletteListBox->SelectEntryPos(mrPaletteManager.GetPalette(), true); mpButtonPicker->SetClickHdl( LINK( this, SvxColorWindow_Impl, OpenPickerClickHdl ) ); @@ -1072,7 +1072,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, AddStatusListener( maCommand ); mrPaletteManager.ReloadColorSet(*mpColorSet); - mpPaletteComboBox->Show(); + mpPaletteListBox->Show(); mpButtonPicker->Show(); mpColorSet->Show(); } @@ -1130,11 +1130,9 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl) IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectPaletteHdl) { - OUString sSrchTxt = mpPaletteComboBox->GetText(); - sal_Int32 nPos = mpPaletteComboBox->GetEntryPos( sSrchTxt ); + sal_Int32 nPos = mpPaletteListBox->GetSelectEntryPos(); mrPaletteManager.SetPalette( nPos ); mrPaletteManager.ReloadColorSet(*mpColorSet); - Resize(); return 0; } @@ -1146,7 +1144,6 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl) void SvxColorWindow_Impl::Resize() { - mpColorSet->layoutAllVisible(mrPaletteManager.GetColorCount()); SetOutputSizePixel(maWindowSize); } diff --git a/svx/uiconfig/ui/colorwindow.ui b/svx/uiconfig/ui/colorwindow.ui index 54b8f49..0527e78 100644 --- a/svx/uiconfig/ui/colorwindow.ui +++ b/svx/uiconfig/ui/colorwindow.ui @@ -14,15 +14,9 @@ <property name="visible">True</property> <property name="can_focus">False</property> <child> - <object class="GtkComboBox" id="palette_list_combobox"> + <object class="GtkComboBox" id="palette_listbox"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="has_entry">True</property> - <child internal-child="entry"> - <object class="GtkEntry" id="combobox-entry"> - <property name="can_focus">False</property> - </object> - </child> </object> <packing> <property name="expand">True</property> @@ -32,14 +26,14 @@ </child> <child> <object class="GtkButton" id="color_picker_button"> - <property name="label">Palette</property> + <property name="label">Color picker</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> </object> <packing> <property name="expand">False</property> - <property name="fill">True</property> + <property name="fill">False</property> <property name="position">1</property> </packing> </child> @@ -62,6 +56,17 @@ <property name="position">1</property> </packing> </child> + <child> + <object class="GtkSeparator" id="separator1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> </object> </child> </object> commit d5109b2fcf1ed7880e7e68c70daaa2f05b0b3cea Author: Krisztian Pinter <[email protected]> Date: Mon Jul 28 16:21:35 2014 +0200 Make it easier to add new color attributes to GetDocColors Change-Id: I2098892fc44c7a8bde1eb30f6db1709e58925577 diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx index 9d15099..0e12001 100644 --- a/sc/source/core/data/document10.cxx +++ b/sc/source/core/data/document10.cxx @@ -248,6 +248,8 @@ void ScDocument::CopyCellValuesFrom( const ScAddress& rTopPos, const sc::CellVal std::vector<Color> ScDocument::GetDocColors() { + // list of color attributes to collect + const std::vector<sal_uInt16> aColAttrs({ATTR_FONT_COLOR, ATTR_BACKGROUND}); std::vector<Color> docColors; for( unsigned int nTabIx = 0; nTabIx < maTabs.size(); ++nTabIx ) @@ -271,8 +273,7 @@ std::vector<Color> ScDocument::GetDocColors() if( SFX_ITEM_SET == rItemSet.GetItemState( nWhich, false, &pItem ) ) { sal_uInt16 aWhich = pItem->Which(); - if( ATTR_FONT_COLOR == aWhich || - ATTR_BACKGROUND == aWhich ) + if( std::find(aColAttrs.begin(), aColAttrs.end(), aWhich) != aColAttrs.end() ) { Color aColor( ((SvxColorItem*)pItem)->GetValue() ); if( COL_AUTO != aColor.GetColor() && diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx index e78b524..539e3a2 100644 --- a/sw/source/core/doc/docfmt.cxx +++ b/sw/source/core/doc/docfmt.cxx @@ -1915,6 +1915,8 @@ void SwDoc::RenameFmt(SwFmt & rFmt, const OUString & sNewName, std::vector<Color> SwDoc::GetDocColors() { + // list of color attributes to collect + const std::vector<sal_uInt16> aColAttrs({RES_CHRATR_COLOR, RES_CHRATR_HIGHLIGHT, RES_BACKGROUND}); std::vector<Color> docColors; for(unsigned int i = 0; i < m_pNodes->Count(); ++i) @@ -1935,9 +1937,7 @@ std::vector<Color> SwDoc::GetDocColors() if( SFX_ITEM_SET == pItemSet->GetItemState( nWhich, false, &pItem ) ) { sal_uInt16 aWhich = pItem->Which(); - if( RES_CHRATR_COLOR == aWhich || - RES_CHRATR_HIGHLIGHT == aWhich || - RES_BACKGROUND == aWhich ) + if( std::find(aColAttrs.begin(), aColAttrs.end(), aWhich) != aColAttrs.end() ) { Color aColor( ((SvxColorItem*)pItem)->GetValue() ); if( COL_AUTO != aColor.GetColor() && commit 78afbfa1cb0f99a62dc643fc64e38c1eaa2014f1 Author: Krisztian Pinter <[email protected]> Date: Mon Jul 28 14:10:04 2014 +0200 Change NamedColor to use OUString Change-Id: Id84d761b33f12dfc50f980e61ab44565693f2e5a diff --git a/include/svx/Palette.hxx b/include/svx/Palette.hxx index c659e06..2be4eb2 100644 --- a/include/svx/Palette.hxx +++ b/include/svx/Palette.hxx @@ -26,7 +26,7 @@ #include <tools/stream.hxx> -typedef std::pair<Color, OString> NamedColor; +typedef std::pair<Color, OUString> NamedColor; typedef std::vector< NamedColor > ColorList; diff --git a/svx/source/tbxctrls/Palette.cxx b/svx/source/tbxctrls/Palette.cxx index f499b98..95ebb58 100644 --- a/svx/source/tbxctrls/Palette.cxx +++ b/svx/source/tbxctrls/Palette.cxx @@ -56,7 +56,7 @@ void PaletteGPL::LoadColorSet( SvxColorValueSet& rColorSet ) it != maColors.end(); ++it) { // TODO make it->second OUString - rColorSet.InsertItem(nIx, it->first, OStringToOUString(it->second, RTL_TEXTENCODING_ASCII_US)); + rColorSet.InsertItem(nIx, it->first, it->second); ++nIx; } } @@ -129,7 +129,9 @@ void PaletteGPL::LoadPalette() if(nIndex != -1) name = aLine.copy(nIndex); - maColors.push_back(std::make_pair(Color(r, g, b), name)); + maColors.push_back(std::make_pair( + Color(r, g, b), + OStringToOUString(name, RTL_TEXTENCODING_ASCII_US))); } } while (aFile.ReadLine(aLine)); } commit 2d37d10ebdc67e38e2c96735ef38266e5a24b90f Author: Krisztian Pinter <[email protected]> Date: Sat Jul 26 10:51:45 2014 +0200 Fix build error Change-Id: I5c992189dc21683fc9e5244f4824d7c42e4ed9cd diff --git a/sw/source/uibase/app/docst.cxx b/sw/source/uibase/app/docst.cxx index 542d316..8b9b02a 100644 --- a/sw/source/uibase/app/docst.cxx +++ b/sw/source/uibase/app/docst.cxx @@ -1233,7 +1233,7 @@ sal_uInt16 SwDocShell::MakeByExample( const OUString &rName, sal_uInt16 nFamily, std::vector<Color> SwDocShell::GetDocColors() { - return pDoc->GetDocColors(); + return mpDoc->GetDocColors(); } void SwDocShell::LoadStyles( SfxObjectShell& rSource ) commit cfdefe488fedbd12f7a3daf578c889ef82e962fc Author: Krisztian Pinter <[email protected]> Date: Fri Jul 25 16:45:13 2014 +0200 Add loading .soc palettes Change-Id: Ie0d084a70d9b135658840bb7529f2099a702d280 diff --git a/include/svx/Palette.hxx b/include/svx/Palette.hxx index d31e958..c659e06 100644 --- a/include/svx/Palette.hxx +++ b/include/svx/Palette.hxx @@ -19,16 +19,30 @@ #ifndef INCLUDED_SVX_PALETTE_HXX #define INCLUDED_SVX_PALETTE_HXX +#include <svx/SvxColorValueSet.hxx> +#include <svx/xtable.hxx> #include <rtl/ustring.hxx> #include <tools/color.hxx> #include <tools/stream.hxx> + +typedef std::pair<Color, OString> NamedColor; +typedef std::vector< NamedColor > ColorList; + + class Palette { public: - typedef std::pair<Color, OString> NamedColor; - typedef std::vector< NamedColor > ColorList; -private: + virtual ~Palette(); + + virtual const OUString& GetName() = 0; + virtual void LoadColorSet( SvxColorValueSet& rColorSet ) = 0; + + virtual bool IsValid() = 0; +}; + +class PaletteGPL : public Palette +{ bool mbLoadedPalette; bool mbValidPalette; OUString maFName; @@ -40,12 +54,28 @@ private: void LoadPaletteHeader(); void LoadPalette(); public: - Palette( const OUString &rFPath, const OUString &rFName ); + PaletteGPL( const OUString &rFPath, const OUString &rFName ); + virtual ~PaletteGPL(); + + virtual const OUString& GetName(); + virtual void LoadColorSet( SvxColorValueSet& rColorSet ); + + virtual bool IsValid(); +}; + +class PaletteSOC : public Palette +{ + //TODO add lazy loading + OUString maName; + XColorListRef mpColorList; +public: + PaletteSOC( const OUString &rFPath, const OUString &rFName ); + virtual ~PaletteSOC(); - const OUString& GetName(); - const ColorList& GetPaletteColors(); + virtual const OUString& GetName(); + virtual void LoadColorSet( SvxColorValueSet& rColorSet ); - bool IsValid(); + virtual bool IsValid(); }; #endif // INCLUDED_SVX_PALETTE_HXX diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx index 925f67b..1bd0bd1 100644 --- a/include/svx/PaletteManager.hxx +++ b/include/svx/PaletteManager.hxx @@ -20,6 +20,7 @@ #define INCLUDED_SVX_PALETTEMANAGER_HXX #include <svx/SvxColorValueSet.hxx> +#include <svx/Palette.hxx> #include <rtl/ustring.hxx> #include <svx/tbxcolorupdate.hxx> @@ -32,9 +33,10 @@ class PaletteManager svx::ToolboxButtonColorUpdater* mpBtnUpdater; Color mLastColor; - std::vector<Palette> maPalettes; + std::vector<Palette*> maPalettes; public: PaletteManager(); + ~PaletteManager(); void LoadPalettes(); void ReloadColorSet(SvxColorValueSet& rColorSet); std::vector<OUString> GetPaletteList(); diff --git a/include/svx/SvxColorValueSet.hxx b/include/svx/SvxColorValueSet.hxx index 7db9f4c..a3130ed 100644 --- a/include/svx/SvxColorValueSet.hxx +++ b/include/svx/SvxColorValueSet.hxx @@ -19,7 +19,6 @@ #ifndef INCLUDED_SVX_SVXCOLORVALUESET_HXX #define INCLUDED_SVX_SVXCOLORVALUESET_HXX -#include <svx/Palette.hxx> #include <svtools/valueset.hxx> #include <svx/svxdllapi.h> @@ -41,7 +40,6 @@ public: void addEntriesForXColorList(const XColorList& rXColorList, sal_uInt32 nStartIndex = 1); void loadColorVector(const std::vector<Color>& rColorVector, const OUString& rNamePrefix, sal_uInt32 nStartIndex = 1); - void loadPalette(Palette& rPalette); Size layoutAllVisible(sal_uInt32 nEntryCount); Size layoutToGivenHeight(sal_uInt32 nHeight, sal_uInt32 nEntryCount); }; diff --git a/svx/source/tbxctrls/Palette.cxx b/svx/source/tbxctrls/Palette.cxx index f84f2d5..f499b98 100644 --- a/svx/source/tbxctrls/Palette.cxx +++ b/svx/source/tbxctrls/Palette.cxx @@ -19,39 +19,16 @@ #include <svx/Palette.hxx> -// finds first token in rStr from index, separated by whitespace -// returns position of next token in index -OString lcl_getToken(const OString& rStr, sal_Int32& index) -{ - sal_Int32 substart, toklen = 0; - - while(index < rStr.getLength() && - (rStr[index] == ' ' || rStr[index] == '\n' || rStr[index] == '\t')) - ++index; - if(index == rStr.getLength()) - { - index = -1; - return OString(); - } - substart = index; - while(index < rStr.getLength() && - !(rStr[index] == ' ' || rStr[index] == '\n' || rStr[index] == '\t')) - { - ++index; - ++toklen; - } +Palette::~Palette() +{ +} - while(index < rStr.getLength() && - (rStr[index] == ' ' || rStr[index] == '\n' || rStr[index] == '\t')) - ++index; - if(index == rStr.getLength()) - index = -1; +// PaletteGPL ------------------------------------------------------------------ - return rStr.copy(substart, toklen); -} +OString lcl_getToken(const OString& rStr, sal_Int32& index); -Palette::Palette( const OUString &rFPath, const OUString &rFName ) : +PaletteGPL::PaletteGPL( const OUString &rFPath, const OUString &rFName ) : mbLoadedPalette( false ), mbValidPalette( false ), maFName( rFName ), @@ -60,23 +37,36 @@ Palette::Palette( const OUString &rFPath, const OUString &rFName ) : LoadPaletteHeader(); } -const OUString& Palette::GetName() +PaletteGPL::~PaletteGPL() +{ +} + +const OUString& PaletteGPL::GetName() { return maName; } -const Palette::ColorList& Palette::GetPaletteColors() +void PaletteGPL::LoadColorSet( SvxColorValueSet& rColorSet ) { LoadPalette(); - return maColors; + + rColorSet.Clear(); + int nIx = 1; + for(ColorList::const_iterator it = maColors.begin(); + it != maColors.end(); ++it) + { + // TODO make it->second OUString + rColorSet.InsertItem(nIx, it->first, OStringToOUString(it->second, RTL_TEXTENCODING_ASCII_US)); + ++nIx; + } } -bool Palette::IsValid() +bool PaletteGPL::IsValid() { return mbValidPalette; } -bool Palette::ReadPaletteHeader(SvFileStream& rFileStream) +bool PaletteGPL::ReadPaletteHeader(SvFileStream& rFileStream) { OString aLine; OString aName; @@ -98,14 +88,13 @@ bool Palette::ReadPaletteHeader(SvFileStream& rFileStream) return true; } -//TODO make this LoadPaletteHeader and set a bool if palette is incorrect -void Palette::LoadPaletteHeader() +void PaletteGPL::LoadPaletteHeader() { SvFileStream aFile(maFPath, STREAM_READ); mbValidPalette = ReadPaletteHeader( aFile ); } -void Palette::LoadPalette() +void PaletteGPL::LoadPalette() { if( mbLoadedPalette ) return; mbLoadedPalette = true; @@ -145,4 +134,68 @@ void Palette::LoadPalette() } while (aFile.ReadLine(aLine)); } +// finds first token in rStr from index, separated by whitespace +// returns position of next token in index +OString lcl_getToken(const OString& rStr, sal_Int32& index) +{ + sal_Int32 substart, toklen = 0; + OUString aWhitespaceChars( " \n\t" ); + + while(index < rStr.getLength() && + aWhitespaceChars.indexOf( rStr[index] ) != -1) + ++index; + if(index == rStr.getLength()) + { + index = -1; + return OString(); + } + substart = index; + + //counts length of token + while(index < rStr.getLength() && + aWhitespaceChars.indexOf( rStr[index] ) == -1 ) + { + ++index; + ++toklen; + } + + //counts to position of next token + while(index < rStr.getLength() && + aWhitespaceChars.indexOf( rStr[index] ) != -1 ) + ++index; + if(index == rStr.getLength()) + index = -1; + + return rStr.copy(substart, toklen); +} + +// PaletteSOC ------------------------------------------------------------------ + +PaletteSOC::PaletteSOC( const OUString &rFPath, const OUString &rFName ) +{ + maName = rFName; + mpColorList = XPropertyList::AsColorList(XPropertyList::CreatePropertyListFromURL(XCOLOR_LIST, rFPath)); + mpColorList->Load(); +} + +PaletteSOC::~PaletteSOC() +{ +} + +const OUString& PaletteSOC::GetName() +{ + return maName; +} + +void PaletteSOC::LoadColorSet( SvxColorValueSet& rColorSet ) +{ + rColorSet.Clear(); + rColorSet.addEntriesForXColorList( *mpColorList ); +} + +bool PaletteSOC::IsValid() +{ + return mpColorList.is(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx index 95c351d..95485ce 100644 --- a/svx/source/tbxctrls/PaletteManager.cxx +++ b/svx/source/tbxctrls/PaletteManager.cxx @@ -39,6 +39,16 @@ PaletteManager::PaletteManager() : mnNumOfPalettes += maPalettes.size(); } +PaletteManager::~PaletteManager() +{ + for( std::vector<Palette*>::iterator it = maPalettes.begin(); + it != maPalettes.end(); + ++it) + { + delete *it; + } +} + void PaletteManager::LoadPalettes() { OUString aPalPath = SvtPathOptions().GetPalettePath(); @@ -57,12 +67,14 @@ void PaletteManager::LoadPalettes() if(aFileStat.isRegular() || aFileStat.isLink()) { OUString aFName = aFileStat.getFileName(); + Palette* pPalette = 0; if( aFName.endsWithIgnoreAsciiCase(".gpl") ) - { - Palette aPalette( aFileStat.getFileURL(), aFName ); - if( aPalette.IsValid() ) - maPalettes.push_back( aPalette ); - } + pPalette = new PaletteGPL( aFileStat.getFileURL(), aFName ); + else if( aFName.endsWithIgnoreAsciiCase(".soc") ) + pPalette = new PaletteSOC( aFileStat.getFileURL(), aFName ); + + if( pPalette && pPalette->IsValid() ) + maPalettes.push_back( pPalette ); } } } @@ -104,10 +116,8 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet) } else { - Palette& rPal = maPalettes[mnCurrentPalette-1]; - mnColorCount = rPal.GetPaletteColors().size(); - rColorSet.Clear(); - rColorSet.loadPalette(rPal); + maPalettes[mnCurrentPalette-1]->LoadColorSet( rColorSet ); + mnColorCount = rColorSet.GetItemCount(); } } @@ -117,11 +127,11 @@ std::vector<OUString> PaletteManager::GetPaletteList() aPaletteNames.push_back( STR_DEFAULT_PAL ); - for( std::vector<Palette>::iterator it = maPalettes.begin(); + for( std::vector<Palette*>::iterator it = maPalettes.begin(); it != maPalettes.end(); ++it) { - aPaletteNames.push_back( it->GetName() ); + aPaletteNames.push_back( (*it)->GetName() ); } aPaletteNames.push_back( STR_DOC_COLORS ); @@ -151,7 +161,7 @@ OUString PaletteManager::GetPaletteName() else if( mnCurrentPalette == mnNumOfPalettes - 1 ) return OUString( STR_DOC_COLORS ); else - return maPalettes[mnCurrentPalette - 1].GetName(); + return maPalettes[mnCurrentPalette - 1]->GetName(); } const Color& PaletteManager::GetLastColor() diff --git a/svx/source/tbxctrls/SvxColorValueSet.cxx b/svx/source/tbxctrls/SvxColorValueSet.cxx index e338109..2faeb6f 100644 --- a/svx/source/tbxctrls/SvxColorValueSet.cxx +++ b/svx/source/tbxctrls/SvxColorValueSet.cxx @@ -106,20 +106,6 @@ void SvxColorValueSet::loadColorVector(const std::vector<Color>& rColorVector, c } } - -void SvxColorValueSet::loadPalette(Palette& rPalette) -{ - const Palette::ColorList &rColors = rPalette.GetPaletteColors(); - Clear(); - int nIx = 1; - for(Palette::ColorList::const_iterator it = rColors.begin(); - it != rColors.end(); ++it) - { - InsertItem(nIx, it->first, OStringToOUString(it->second, RTL_TEXTENCODING_ASCII_US)); - ++nIx; - } -} - Size SvxColorValueSet::layoutAllVisible(sal_uInt32 nEntryCount) { if(!nEntryCount) commit d1d5c9185f9d5231bdaa332d965b31b946411ac3 Author: Krisztian Pinter <[email protected]> Date: Thu Jul 24 12:20:21 2014 +0200 Add SvxLineColorToolBoxControl functionality to SvxColorToolBoxControl This is the first step in merging SvxLineColorToolBoxControl into SvxColorToolBoxControl. Change-Id: I6a725fef5f9a08524d509b70de15c7a0202e7ed6 diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index 7031229..5177544 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -1010,8 +1010,8 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, SfxPopupWindow( nSlotId, pParentWindow, "palette_popup_window", "svx/ui/colorwindow.ui", rFrame ), - maWindowSize( 250, 350 ), theSlotId( nSlotId ), + maWindowSize( 250, 350 ), maCommand( rCommand ), mrPaletteManager( rPaletteManager ) @@ -2205,6 +2205,11 @@ SvxColorToolBoxControl::SvxColorToolBoxControl( case SID_EXTRUSION_3D_COLOR: addStatusListener( OUString( ".uno:Extrusion3DColor")); break; + + case SID_ATTR_LINE_COLOR: + addStatusListener( OUString( ".uno:XLineColor" )); + mPaletteManager.SetLastColor( COL_BLACK ); + break; } pBtnUpdater.reset( new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() ) ); @@ -2248,6 +2253,10 @@ SfxPopupWindow* SvxColorToolBoxControl::CreatePopupWindow() case SID_EXTRUSION_3D_COLOR: pColorWin->SetText( SVX_RESSTR( RID_SVXSTR_EXTRUSION_COLOR ) ); break; + + case SID_ATTR_LINE_COLOR: + pColorWin->SetText( SVX_RESSTR( RID_SVXSTR_LINECOLOR ) ); + break; } pColorWin->StartPopupMode( &GetToolBox(), @@ -2319,6 +2328,11 @@ void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/) aCommand = ".uno:Extrusion3DColor"; aParamName = "Extrusion3DColor"; break; + + case SID_ATTR_LINE_COLOR: + aCommand = ".uno:XLineColor"; + aParamName = "XLineColor"; + break; } Sequence< PropertyValue > aArgs( 1 ); commit 65973c5eedc0da72fffca300239a149bd7fc1aa4 Author: Krisztian Pinter <[email protected]> Date: Mon Jul 21 16:34:30 2014 +0200 Convert SvxColorWindow_Impl to Widget Layout Change-Id: I8c830de56892fd8eb1c14add25f65c25046d47fd diff --git a/sfx2/source/toolbox/tbxitem.cxx b/sfx2/source/toolbox/tbxitem.cxx index 7133fef..dcd74ba 100644 --- a/sfx2/source/toolbox/tbxitem.cxx +++ b/sfx2/source/toolbox/tbxitem.cxx @@ -1189,7 +1189,7 @@ SfxPopupWindow::SfxPopupWindow( Window* pParentWindow, const OString& rID, const OUString& rUIXMLDescription, const Reference< XFrame >& rFrame ) : - FloatingWindow( pParentWindow, rID, rUIXMLDescription) + FloatingWindow( pParentWindow, rID, rUIXMLDescription, rFrame) , m_bFloating( false ) , m_bCascading( false ) , m_nId( nId ) diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk index f313408..2e3cc8e 100644 --- a/svx/UIConfig_svx.mk +++ b/svx/UIConfig_svx.mk @@ -20,6 +20,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\ svx/uiconfig/ui/asianphoneticguidedialog \ svx/uiconfig/ui/chineseconversiondialog \ svx/uiconfig/ui/chinesedictionary \ + svx/uiconfig/ui/colorwindow \ svx/uiconfig/ui/compressgraphicdialog \ svx/uiconfig/ui/datanavigator \ svx/uiconfig/ui/deleteheaderdialog \ diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index 702cf87..df574d8 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -34,16 +34,15 @@ class SvxColorWindow_Impl : public SfxPopupWindow using FloatingWindow::StateChanged; private: - const sal_uInt16 theSlotId; - SvxColorValueSet aColorSet; - ComboBox aPaletteComboBox; - PushButton aButtonPicker; - OUString maCommand; - Link maSelectedLink; + const sal_uInt16 theSlotId; + SvxColorValueSet* mpColorSet; + Size maWindowSize; + ComboBox* mpPaletteComboBox; + PushButton* mpButtonPicker; + OUString maCommand; + Link maSelectedLink; - const sal_uInt16 nButtonWidth; - const sal_uInt16 nButtonHeight; - PaletteManager& mrPaletteManager; + PaletteManager& mrPaletteManager; DECL_LINK( SelectHdl, void * ); DECL_LINK( SelectPaletteHdl, void *); diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index f3bfbe5..7031229 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -999,28 +999,33 @@ void SvxFontNameBox_Impl::Select() #define WB_NO_DIRECTSELECT ((WinBits)0x04000000) #endif + SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, PaletteManager& rPaletteManager, sal_uInt16 nSlotId, const Reference< XFrame >& rFrame, const OUString& rWndTitle, Window* pParentWindow ): - SfxPopupWindow( nSlotId, rFrame, pParentWindow, WinBits( WB_STDPOPUP | WB_OWNERDRAWDECORATION ) ), + + SfxPopupWindow( nSlotId, pParentWindow, + "palette_popup_window", "svx/ui/colorwindow.ui", + rFrame ), + maWindowSize( 250, 350 ), theSlotId( nSlotId ), - aColorSet ( this, WinBits( WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ), - aPaletteComboBox( this, WinBits( WB_BORDER | WB_DROPDOWN | WB_AUTOSIZE) ), - aButtonPicker( this ), maCommand( rCommand ), - nButtonWidth ( 28 ), - nButtonHeight( 28 ), mrPaletteManager( rPaletteManager ) { + get(mpPaletteComboBox, "palette_list_combobox"); + get(mpButtonPicker, "color_picker_button"); + get(mpColorSet, "colorset"); + + mpColorSet->SetStyle( WinBits(WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ); if ( SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId || SID_BACKGROUND_COLOR == theSlotId ) { - aColorSet.SetStyle( aColorSet.GetStyle() | WB_NONEFIELD ); - aColorSet.SetText( SVX_RESSTR( RID_SVXSTR_TRANSPARENT ) ); - aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_BACKGROUND ) ); + mpColorSet->SetStyle( mpColorSet->GetStyle() | WB_NONEFIELD ); + mpColorSet->SetText( SVX_RESSTR( RID_SVXSTR_TRANSPARENT ) ); + mpColorSet->SetAccessibleName( SVX_RESSTR( RID_SVXSTR_BACKGROUND ) ); } else if ( SID_ATTR_CHAR_COLOR == theSlotId || SID_ATTR_CHAR_COLOR2 == theSlotId || SID_EXTRUSION_3D_COLOR == theSlotId ) { @@ -1033,45 +1038,43 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, SfxItemState eState = aQueryStatus.QueryState( pDummy ); if( (SfxItemState::DEFAULT > eState) || ( SID_EXTRUSION_3D_COLOR == theSlotId ) ) { - aColorSet.SetStyle( aColorSet.GetStyle() | WB_NONEFIELD ); - aColorSet.SetText( SVX_RESSTR( RID_SVXSTR_AUTOMATIC ) ); - aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_TEXTCOLOR ) ); + mpColorSet->SetStyle( mpColorSet->GetStyle() | WB_NONEFIELD ); + mpColorSet->SetText( SVX_RESSTR( RID_SVXSTR_AUTOMATIC ) ); + mpColorSet->SetAccessibleName( SVX_RESSTR( RID_SVXSTR_TEXTCOLOR ) ); } } else if ( SID_FRAME_LINECOLOR == theSlotId ) { - aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_FRAME_COLOR ) ); + mpColorSet->SetAccessibleName( SVX_RESSTR( RID_SVXSTR_FRAME_COLOR ) ); } else { - aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_LINECOLOR ) ); + mpColorSet->SetAccessibleName( SVX_RESSTR( RID_SVXSTR_LINECOLOR ) ); } - aPaletteComboBox.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectPaletteHdl ) ); - aPaletteComboBox.AdaptDropDownLineCountToMaximum(); - aPaletteComboBox.Show(); + mpPaletteComboBox->SetStyle( mpPaletteComboBox->GetStyle() | WB_BORDER | WB_AUTOSIZE ); + mpPaletteComboBox->SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectPaletteHdl ) ); + mpPaletteComboBox->AdaptDropDownLineCountToMaximum(); std::vector<OUString> aPaletteList = mrPaletteManager.GetPaletteList(); + mpPaletteComboBox->SetText( aPaletteList[ mrPaletteManager.GetPalette() ] ); for( std::vector<OUString>::iterator it = aPaletteList.begin(); it != aPaletteList.end(); ++it ) { - aPaletteComboBox.InsertEntry( *it ); + mpPaletteComboBox->InsertEntry( *it ); } - aPaletteComboBox.SetText( aPaletteList[ mrPaletteManager.GetPalette() ] ); - aButtonPicker.SetText("P"); - aButtonPicker.SetClickHdl( LINK( this, SvxColorWindow_Impl, OpenPickerClickHdl ) ); - aButtonPicker.Show(); + mpButtonPicker->SetClickHdl( LINK( this, SvxColorWindow_Impl, OpenPickerClickHdl ) ); - aColorSet.Show(); - - aColorSet.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) ); + mpColorSet->SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) ); SetHelpId( HID_POPUP_COLOR ); - aColorSet.SetHelpId( HID_POPUP_COLOR_CTRL ); + mpColorSet->SetHelpId( HID_POPUP_COLOR_CTRL ); SetText( rWndTitle ); - AddStatusListener( OUString( ".uno:ColorTableState" )); AddStatusListener( maCommand ); - mrPaletteManager.ReloadColorSet(aColorSet); + mrPaletteManager.ReloadColorSet(*mpColorSet); + mpPaletteComboBox->Show(); + mpButtonPicker->Show(); + mpColorSet->Show(); } SvxColorWindow_Impl::~SvxColorWindow_Impl() @@ -1080,7 +1083,7 @@ SvxColorWindow_Impl::~SvxColorWindow_Impl() void SvxColorWindow_Impl::KeyInput( const KeyEvent& rKEvt ) { - aColorSet.KeyInput(rKEvt); + mpColorSet->KeyInput(rKEvt); } SfxPopupWindow* SvxColorWindow_Impl::Clone() const @@ -1090,20 +1093,20 @@ SfxPopupWindow* SvxColorWindow_Impl::Clone() const IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl) { - sal_uInt16 nItemId = aColorSet.GetSelectItemId(); + sal_uInt16 nItemId = mpColorSet->GetSelectItemId(); Color aColor; if ( !nItemId && ( SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId || SID_BACKGROUND_COLOR == theSlotId ) ) aColor = COL_TRANSPARENT; else if ( !nItemId && (SID_ATTR_CHAR_COLOR == theSlotId || SID_ATTR_CHAR_COLOR2 == theSlotId || SID_EXTRUSION_3D_COLOR == theSlotId) ) aColor = COL_AUTO; else - aColor = aColorSet.GetItemColor( nItemId ); + aColor = mpColorSet->GetItemColor( nItemId ); SvxColorItem aColorItem( aColor, theSlotId ); /* #i33380# DR 2004-09-03 Moved the following line above the Dispatch() calls. This instance may be deleted in the meantime (i.e. when a dialog is opened while in Dispatch()), accessing members will crash in this case. */ - aColorSet.SetNoSelection(); + mpColorSet->SetNoSelection(); if ( IsInPopupMode() ) EndPopupMode(); @@ -1127,10 +1130,10 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl) IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectPaletteHdl) { - OUString sSrchTxt = aPaletteComboBox.GetText(); - sal_Int32 nPos = aPaletteComboBox.GetEntryPos( sSrchTxt ); + OUString sSrchTxt = mpPaletteComboBox->GetText(); + sal_Int32 nPos = mpPaletteComboBox->GetEntryPos( sSrchTxt ); mrPaletteManager.SetPalette( nPos ); - mrPaletteManager.ReloadColorSet(aColorSet); + mrPaletteManager.ReloadColorSet(*mpColorSet); Resize(); return 0; } @@ -1143,21 +1146,13 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl) void SvxColorWindow_Impl::Resize() { - const Size aSize(this->GetOutputSizePixel()); - aColorSet.SetPosSizePixel( Point(2, nButtonHeight + 2), Size(aSize.Width() - 4, aSize.Height() - 6 - nButtonHeight) ); - - const Size aNewSize(aColorSet.layoutAllVisible(mrPaletteManager.GetColorCount())); - aColorSet.SetOutputSizePixel(aNewSize); - - SetOutputSizePixel(Size(aNewSize.Width() + 4, aNewSize.Height() + 4 + nButtonHeight)); - - aPaletteComboBox.SetPosSizePixel(Point(2, 0), Size(aNewSize.Width() - nButtonWidth, nButtonHeight)); - aButtonPicker.SetPosSizePixel(Point(aNewSize.Width() + 4 - nButtonWidth, 0), Size(nButtonWidth, nButtonHeight)); + mpColorSet->layoutAllVisible(mrPaletteManager.GetColorCount()); + SetOutputSizePixel(maWindowSize); } void SvxColorWindow_Impl::StartSelection() { - aColorSet.StartSelection(); + mpColorSet->StartSelection(); } bool SvxColorWindow_Impl::Close() @@ -1171,11 +1166,11 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co { if (( nSID == SID_COLOR_TABLE ) && ( pState->ISA( SvxColorListItem ))) { - mrPaletteManager.ReloadColorSet(aColorSet); + mrPaletteManager.ReloadColorSet(*mpColorSet); } else if ( SfxItemState::DEFAULT <= eState ) { - aColorSet.SetNoSelection(); + mpColorSet->SetNoSelection(); Color aColor; if ( pState->ISA( SvxColorItem ) ) @@ -1183,16 +1178,16 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co else if ( pState->ISA( XLineColorItem ) ) aColor = ((const XLineColorItem*)pState)->GetColorValue(); - for ( size_t i = 1; i <= aColorSet.GetItemCount(); ++i ) + for ( size_t i = 1; i <= mpColorSet->GetItemCount(); ++i ) { - if ( aColor == aColorSet.GetItemColor(i) ) + if ( aColor == mpColorSet->GetItemColor(i) ) { - aColorSet.SelectItem(i); + mpColorSet->SelectItem(i); return; } } if ( aColor == COL_AUTO || aColor == COL_TRANSPARENT ) - aColorSet.SelectItem(0); + mpColorSet->SelectItem(0); } } } diff --git a/svx/uiconfig/ui/colorwindow.ui b/svx/uiconfig/ui/colorwindow.ui new file mode 100644 index 0000000..54b8f49 --- /dev/null +++ b/svx/uiconfig/ui/colorwindow.ui @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.16.1 --> +<interface> + <requires lib="gtk+" version="3.10"/> + <object class="GtkWindow" id="palette_popup_window"> + <property name="can_focus">False</property> + <child> + <object class="GtkBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkBox" id="box2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkComboBox" id="palette_list_combobox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="has_entry">True</property> + <child internal-child="entry"> + <object class="GtkEntry" id="combobox-entry"> + <property name="can_focus">False</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="color_picker_button"> + <property name="label">Palette</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="svxlo-SvxColorValueSet" id="colorset"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> +</interface> commit a1a52ee9fa916b4c0cc2493338ace2374c4d9563 Author: Krisztian Pinter <[email protected]> Date: Fri Jul 11 19:16:13 2014 +0200 Move palette selection ComboBox to top of popup window Change-Id: Iff958cc8d2ef301a43db406aa38dd446bb2242a5 diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index 191c706..702cf87 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -45,8 +45,6 @@ private: const sal_uInt16 nButtonHeight; PaletteManager& mrPaletteManager; - void UpdateGUI(); - DECL_LINK( SelectHdl, void * ); DECL_LINK( SelectPaletteHdl, void *); DECL_LINK( OpenPickerClickHdl, void * ); diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index f44f869..f3bfbe5 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -96,7 +96,6 @@ // don't make more than 15 entries visible at once #define MAX_STYLES_ENTRIES static_cast< sal_uInt16 >( 15 ) -static void lcl_ResizeValueSet( Window &rWin, ValueSet &rValueSet, sal_uInt16 nVertPadding ); static void lcl_CalcSizeValueSet( Window &rWin, ValueSet &rValueSet, const Size &aItemSize ); // namespaces @@ -1059,7 +1058,6 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, aPaletteComboBox.SetText( aPaletteList[ mrPaletteManager.GetPalette() ] ); aButtonPicker.SetText("P"); - aButtonPicker.SetSizePixel(Size(nButtonWidth, nButtonHeight)); aButtonPicker.SetClickHdl( LINK( this, SvxColorWindow_Impl, OpenPickerClickHdl ) ); aButtonPicker.Show(); @@ -1073,26 +1071,7 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, AddStatusListener( OUString( ".uno:ColorTableState" )); AddStatusListener( maCommand ); - UpdateGUI(); -} - - -void SvxColorWindow_Impl::UpdateGUI() -{ mrPaletteManager.ReloadColorSet(aColorSet); - - const Size aNewSize(aColorSet.layoutAllVisible(mrPaletteManager.GetColorCount())); - aColorSet.SetOutputSizePixel(aNewSize); - static sal_Int32 nAdd = 4; - - //TODO: Move left/right buttons above the colors - SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd + nButtonHeight)); - - aPaletteComboBox.SetPosPixel(Point(0, aNewSize.Height() + nAdd + 1)); - - aButtonPicker.SetPosPixel(Point(aNewSize.Width() + nAdd - nButtonWidth, aNewSize.Height() + nAdd + 1)); - - aPaletteComboBox.SetSizePixel(Size(aNewSize.Width() - nButtonWidth, nButtonHeight)); } SvxColorWindow_Impl::~SvxColorWindow_Impl() @@ -1151,7 +1130,8 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectPaletteHdl) OUString sSrchTxt = aPaletteComboBox.GetText(); sal_Int32 nPos = aPaletteComboBox.GetEntryPos( sSrchTxt ); mrPaletteManager.SetPalette( nPos ); - UpdateGUI(); + mrPaletteManager.ReloadColorSet(aColorSet); + Resize(); return 0; } @@ -1163,7 +1143,16 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, OpenPickerClickHdl) void SvxColorWindow_Impl::Resize() { - lcl_ResizeValueSet( *this, aColorSet, nButtonHeight + 2); + const Size aSize(this->GetOutputSizePixel()); + aColorSet.SetPosSizePixel( Point(2, nButtonHeight + 2), Size(aSize.Width() - 4, aSize.Height() - 6 - nButtonHeight) ); + + const Size aNewSize(aColorSet.layoutAllVisible(mrPaletteManager.GetColorCount())); + aColorSet.SetOutputSizePixel(aNewSize); + + SetOutputSizePixel(Size(aNewSize.Width() + 4, aNewSize.Height() + 4 + nButtonHeight)); + + aPaletteComboBox.SetPosSizePixel(Point(2, 0), Size(aNewSize.Width() - nButtonWidth, nButtonHeight)); + aButtonPicker.SetPosSizePixel(Point(aNewSize.Width() + 4 - nButtonWidth, 0), Size(nButtonWidth, nButtonHeight)); } void SvxColorWindow_Impl::StartSelection() @@ -1182,7 +1171,7 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co { if (( nSID == SID_COLOR_TABLE ) && ( pState->ISA( SvxColorListItem ))) { - UpdateGUI(); + mrPaletteManager.ReloadColorSet(aColorSet); } else if ( SfxItemState::DEFAULT <= eState ) { @@ -1420,7 +1409,8 @@ IMPL_LINK_NOARG(SvxFrameWindow_Impl, SelectHdl) void SvxFrameWindow_Impl::Resize() { - lcl_ResizeValueSet( *this, aFrameSet, 0 ); + const Size aSize(this->GetOutputSizePixel()); + aFrameSet.SetPosSizePixel(Point(2,2), Size(aSize.Width() - 4, aSize.Height() - 4)); } void SvxFrameWindow_Impl::StateChanged( @@ -2516,14 +2506,6 @@ void SvxSimpleUndoRedoController::StateChanged( sal_uInt16, SfxItemState eState, -static void lcl_ResizeValueSet( Window &rWin, ValueSet &rValueSet, sal_uInt16 nVertPadding) -{ - Size aSize = rWin.GetOutputSizePixel(); - aSize.Width() -= 4; - aSize.Height() -= 4 + nVertPadding; - rValueSet.SetPosSizePixel( Point(2,2), aSize ); -} - static void lcl_CalcSizeValueSet( Window &rWin, ValueSet &rValueSet, const Size &aItemSize ) { Size aSize = rValueSet.CalcWindowSizePixel( aItemSize ); commit ecbbf4c7cf26d4d38e3be10ec99eb941f6f7a16d Author: Krisztian Pinter <[email protected]> Date: Thu Jul 10 16:14:29 2014 +0200 Change SvxColorWindow_Impl to use ComboBox for palette selection Change-Id: I0fb9b46298f45bbdf9ae9198c145b9ea5e403bbf diff --git a/include/svx/Palette.hxx b/include/svx/Palette.hxx index f7ced03..d31e958 100644 --- a/include/svx/Palette.hxx +++ b/include/svx/Palette.hxx @@ -21,6 +21,7 @@ #include <rtl/ustring.hxx> #include <tools/color.hxx> +#include <tools/stream.hxx> class Palette { @@ -28,17 +29,23 @@ public: typedef std::pair<Color, OString> NamedColor; typedef std::vector< NamedColor > ColorList; private: - bool mbLoaded; - OUString maFname; - OString maName; + bool mbLoadedPalette; + bool mbValidPalette; + OUString maFName; + OUString maFPath; + OUString maName; ColorList maColors; - void LoadPalette(); + bool ReadPaletteHeader(SvFileStream& rFileStream); + void LoadPaletteHeader(); + void LoadPalette(); public: - Palette(const OUString &rFname); + Palette( const OUString &rFPath, const OUString &rFName ); - const OString& GetPaletteName(); + const OUString& GetName(); const ColorList& GetPaletteColors(); + + bool IsValid(); }; #endif // INCLUDED_SVX_PALETTE_HXX diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx index e1d7201..925f67b 100644 --- a/include/svx/PaletteManager.hxx +++ b/include/svx/PaletteManager.hxx @@ -37,8 +37,10 @@ public: PaletteManager(); void LoadPalettes(); void ReloadColorSet(SvxColorValueSet& rColorSet); - void PrevPalette(); - void NextPalette(); + std::vector<OUString> GetPaletteList(); + void SetPalette( sal_Int32 nPos ); + sal_Int32 GetPalette(); + long GetColorCount(); OUString GetPaletteName(); const Color& GetLastColor(); diff --git a/svx/source/tbxctrls/Palette.cxx b/svx/source/tbxctrls/Palette.cxx index aebb7f0..f84f2d5 100644 --- a/svx/source/tbxctrls/Palette.cxx +++ b/svx/source/tbxctrls/Palette.cxx @@ -18,7 +18,6 @@ */ #include <svx/Palette.hxx> -#include <tools/stream.hxx> // finds first token in rStr from index, separated by whitespace // returns position of next token in index @@ -52,13 +51,17 @@ OString lcl_getToken(const OString& rStr, sal_Int32& index) return rStr.copy(substart, toklen); } -Palette::Palette(const OUString &rFname) : - mbLoaded( false ), - maFname( rFname ){} +Palette::Palette( const OUString &rFPath, const OUString &rFName ) : + mbLoadedPalette( false ), + mbValidPalette( false ), + maFName( rFName ), + maFPath( rFPath ) +{ + LoadPaletteHeader(); +} -const OString& Palette::GetPaletteName() +const OUString& Palette::GetName() { - LoadPalette(); return maName; } @@ -68,27 +71,52 @@ const Palette::ColorList& Palette::GetPaletteColors() return maColors; } -void Palette::LoadPalette() +bool Palette::IsValid() { - if( mbLoaded ) return; - - mbLoaded = true; - - // TODO add error handling!!! - SvFileStream aFile(maFname, STREAM_READ); + return mbValidPalette; +} +bool Palette::ReadPaletteHeader(SvFileStream& rFileStream) +{ OString aLine; + OString aName; - aFile.ReadLine(aLine); - if( !aLine.startsWith("GIMP Palette") ) return; - aFile.ReadLine(aLine); - if( aLine.startsWith("Name: ", &maName) ) + rFileStream.ReadLine(aLine); + if( !aLine.startsWith("GIMP Palette") ) return false; + rFileStream.ReadLine(aLine); + if( aLine.startsWith("Name: ", &aName) ) { - aFile.ReadLine(aLine); + maName = OStringToOUString(aName, RTL_TEXTENCODING_ASCII_US); + rFileStream.ReadLine(aLine); if( aLine.startsWith("Columns: ")) - aFile.ReadLine(aLine); // we can ignore this + rFileStream.ReadLine(aLine); // we can ignore this + } + else + { + maName = maFName; } + return true; +} + +//TODO make this LoadPaletteHeader and set a bool if palette is incorrect +void Palette::LoadPaletteHeader() +{ + SvFileStream aFile(maFPath, STREAM_READ); + mbValidPalette = ReadPaletteHeader( aFile ); +} +void Palette::LoadPalette() +{ + if( mbLoadedPalette ) return; + mbLoadedPalette = true; + + // TODO add error handling!!! + SvFileStream aFile(maFPath, STREAM_READ); + mbValidPalette = ReadPaletteHeader( aFile ); + + if( !mbValidPalette ) return; + + OString aLine; do { if (aLine[0] != '#' && aLine[0] != '\n') { diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx index e9933d4..95c351d 100644 --- a/svx/source/tbxctrls/PaletteManager.cxx +++ b/svx/source/tbxctrls/PaletteManager.cxx @@ -25,6 +25,10 @@ #include <svx/dialogs.hrc> #include <svtools/colrdlg.hxx> +#define STR_DEFAULT_PAL "Default palette" +#define STR_DOC_COLORS "Document colors" +#define STR_DOC_COLOR_PREFIX "Document Color " + PaletteManager::PaletteManager() : mnNumOfPalettes(2), mnCurrentPalette(0), @@ -42,7 +46,9 @@ void PaletteManager::LoadPalettes() osl::Directory aDir(aPalPath); maPalettes.clear(); osl::DirectoryItem aDirItem; - osl::FileStatus aFileStat(osl_FileStatus_Mask_FileURL|osl_FileStatus_Mask_Type); + osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName | + osl_FileStatus_Mask_FileURL | + osl_FileStatus_Mask_Type ); if( aDir.open() == osl::FileBase::E_None ) { while( aDir.getNextItem(aDirItem) == osl::FileBase::E_None ) @@ -50,11 +56,12 @@ void PaletteManager::LoadPalettes() aDirItem.getFileStatus(aFileStat); if(aFileStat.isRegular() || aFileStat.isLink()) { - OUString aPath = aFileStat.getFileURL(); - if(aPath.getLength() > 4 && - aPath.copy(aPath.getLength()-4).toAsciiLowerCase() == ".gpl") + OUString aFName = aFileStat.getFileName(); + if( aFName.endsWithIgnoreAsciiCase(".gpl") ) { - maPalettes.push_back(Palette(aPath)); + Palette aPalette( aFileStat.getFileURL(), aFName ); + if( aPalette.IsValid() ) + maPalettes.push_back( aPalette ); } } } @@ -93,7 +100,7 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet) std::vector<Color> aColors = pDocSh->GetDocColors(); mnColorCount = aColors.size(); rColorSet.Clear(); - rColorSet.loadColorVector(aColors, "Document Color "); + rColorSet.loadColorVector(aColors, STR_DOC_COLOR_PREFIX ); } else { @@ -104,14 +111,32 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet) } } -void PaletteManager::PrevPalette() +std::vector<OUString> PaletteManager::GetPaletteList() +{ + std::vector<OUString> aPaletteNames; + + aPaletteNames.push_back( STR_DEFAULT_PAL ); + + for( std::vector<Palette>::iterator it = maPalettes.begin(); + it != maPalettes.end(); + ++it) + { + aPaletteNames.push_back( it->GetName() ); + } + + aPaletteNames.push_back( STR_DOC_COLORS ); + + return aPaletteNames; +} + +void PaletteManager::SetPalette( sal_Int32 nPos ) { - mnCurrentPalette = mnCurrentPalette == 0 ? mnNumOfPalettes - 1 : mnCurrentPalette - 1; + mnCurrentPalette = nPos; } -void PaletteManager::NextPalette() +sal_Int32 PaletteManager::GetPalette() { - mnCurrentPalette = mnCurrentPalette == mnNumOfPalettes - 1 ? 0 : mnCurrentPalette + 1; + return mnCurrentPalette; } long PaletteManager::GetColorCount() @@ -122,11 +147,11 @@ long PaletteManager::GetColorCount() OUString PaletteManager::GetPaletteName() { if( mnCurrentPalette == 0 ) - return OUString("Default palette"); + return OUString( STR_DEFAULT_PAL ); else if( mnCurrentPalette == mnNumOfPalettes - 1 ) - return OUString("Document colors"); + return OUString( STR_DOC_COLORS ); else - return OStringToOUString(maPalettes[mnCurrentPalette - 1].GetPaletteName(), RTL_TEXTENCODING_ASCII_US); + return maPalettes[mnCurrentPalette - 1].GetName(); } const Color& PaletteManager::GetLastColor() diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index bfd49e2..191c706 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -27,6 +27,7 @@ #include <com/sun/star/frame/XFrame.hpp> #include <svx/SvxColorValueSet.hxx> #include <svx/PaletteManager.hxx> +#include <vcl/combobox.hxx> class SvxColorWindow_Impl : public SfxPopupWindow { @@ -35,22 +36,19 @@ class SvxColorWindow_Impl : public SfxPopupWindow private: const sal_uInt16 theSlotId; SvxColorValueSet aColorSet; - PushButton aButtonLeft; - PushButton aButtonRight; + ComboBox aPaletteComboBox; PushButton aButtonPicker; - FixedText aPaletteName; OUString maCommand; Link maSelectedLink; - const sal_uInt16 nNavButtonWidth; - const sal_uInt16 nNavButtonHeight; + const sal_uInt16 nButtonWidth; + const sal_uInt16 nButtonHeight; PaletteManager& mrPaletteManager; void UpdateGUI(); DECL_LINK( SelectHdl, void * ); ... etc. - the rest is truncated
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
