diff options
Diffstat (limited to 'cui/source/options/optcolor.cxx')
-rw-r--r-- | cui/source/options/optcolor.cxx | 93 |
1 files changed, 60 insertions, 33 deletions
diff --git a/cui/source/options/optcolor.cxx b/cui/source/options/optcolor.cxx index 1d962bddbd3b..43f76b4b6884 100644 --- a/cui/source/options/optcolor.cxx +++ b/cui/source/options/optcolor.cxx @@ -21,13 +21,11 @@ #include <bitset> -#include <editeng/editids.hrc> #include <svtools/colorcfg.hxx> #include <svtools/extcolorcfg.hxx> #include <svtools/headbar.hxx> #include <svtools/ctrlbox.hxx> #include <vcl/scrbar.hxx> -#include <svx/colorbox.hxx> #include <svx/xtable.hxx> #include <unotools/moduleoptions.hxx> #include <unotools/pathoptions.hxx> @@ -179,12 +177,12 @@ public: virtual void dispose() override; public: - void SetLinks (Link<Button*,void> const&, Link<SvxColorListBox&,void> const&, Link<Control&,void> const&); + void SetLinks (Link<Button*,void> const&, Link<ListBox&,void> const&, Link<Control&,void> const&); unsigned GetEntryHeight () const { return vEntries[0]->GetHeight(); } void Update (EditableColorConfig const*, EditableExtendedColorConfig const*); void ScrollHdl(const ScrollBar&); void ClickHdl (EditableColorConfig*, CheckBox*); - void ColorHdl (EditableColorConfig*, EditableExtendedColorConfig*, SvxColorListBox*); + void ColorHdl (EditableColorConfig*, EditableExtendedColorConfig*, ColorListBox*); void Init(ScrollBar *pVScroll, HeaderBar *m_pHeaderHB); void AdjustScrollBar(); void AdjustHeaderBar(); @@ -216,10 +214,10 @@ private: public: void Show (); void Hide (); - void SetAppearance(Wallpaper const& rTextWall); + void SetAppearance(Wallpaper const& aTextWall, ColorListBox const& aSampleList); void SetTextColor (Color C) { m_pText->SetTextColor(C); } public: - void SetLinks (Link<Button*,void> const&, Link<SvxColorListBox&,void> const&, Link<Control&,void> const&); + void SetLinks (Link<Button*,void> const&, Link<ListBox&,void> const&, Link<Control&,void> const&); void Update (ColorConfigEntry, ColorConfigValue const&); void Update (ExtendedColorConfigValue const&); void ColorChanged (ColorConfigEntry, ColorConfigValue&); @@ -229,7 +227,7 @@ private: unsigned GetHeight () const { return m_pColorList->GetSizePixel().Height(); } public: bool Is (CheckBox* pBox) const { return m_pText == pBox; } - bool Is (SvxColorListBox* pBox) const { return m_pColorList == pBox; } + bool Is (ColorListBox* pBox) const { return m_pColorList == pBox; } void dispose() { m_pText.disposeAndClear(); @@ -241,7 +239,7 @@ private: // checkbox (CheckBox) or simple text (FixedText) VclPtr<Control> m_pText; // color list box - VclPtr<SvxColorListBox> m_pColorList; + VclPtr<ColorListBox> m_pColorList; // color preview box VclPtr<vcl::Window> m_pPreview; // default color @@ -352,7 +350,9 @@ ColorConfigWindow_Impl::Entry::Entry( vcl::Window *pGrid, unsigned nYPos, m_pText->set_margin_left(6 + nCheckBoxLabelOffset); m_pText->SetText(rColorEntry.getDisplayName()); - m_pColorList = VclPtr<SvxColorListBox>::Create(pGrid); + WinBits nWinBits = WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_TABSTOP|WB_DROPDOWN; + m_pColorList = VclPtr<ColorListBox>::Create(pGrid, nWinBits); + m_pColorList->EnableAutoSize(true); m_pColorList->set_grid_left_attach(1); m_pColorList->set_grid_top_attach(nYPos); @@ -390,22 +390,24 @@ void ColorConfigWindow_Impl::Entry::Hide() // SetAppearance() // iEntry: which entry is this? -// rTextWall: background of the text (transparent) +// aTextWall: background of the text (transparent) // aSampleList: sample color listbox (to copy from) -void ColorConfigWindow_Impl::Entry::SetAppearance(Wallpaper const& rTextWall) +void ColorConfigWindow_Impl::Entry::SetAppearance( + Wallpaper const& aTextWall, + ColorListBox const& aSampleList) { // text (and optionally checkbox) - m_pText->SetBackground(rTextWall); + m_pText->SetBackground(aTextWall); // preview m_pPreview->SetBorderStyle(WindowBorderStyle::MONO); // color list - m_pColorList->SetSlotId(SID_ATTR_CHAR_COLOR); - m_pColorList->SetAutoDisplayColor(m_aDefaultColor); + m_pColorList->CopyEntries(aSampleList); + m_pColorList->InsertAutomaticEntryColor(m_aDefaultColor); } // SetLinks() void ColorConfigWindow_Impl::Entry::SetLinks( - Link<Button*,void> const& aCheckLink, Link<SvxColorListBox&,void> const& aColorLink, + Link<Button*,void> const& aCheckLink, Link<ListBox&,void> const& aColorLink, Link<Control&,void> const& aGetFocusLink) { m_pColorList->SetSelectHdl(aColorLink); @@ -421,10 +423,17 @@ void ColorConfigWindow_Impl::Entry::SetLinks( void ColorConfigWindow_Impl::Entry::Update ( ColorConfigEntry aColorEntry, ColorConfigValue const& rValue ) { - Color aColor(rValue.nColor); - m_pColorList->SelectEntry(aColor); - if (aColor.GetColor() == COL_AUTO) + Color aColor; + if ((unsigned)rValue.nColor == COL_AUTO) + { aColor = ColorConfig::GetDefaultColor(aColorEntry); + m_pColorList->SelectEntryPos(0); + } + else + { + aColor = Color(rValue.nColor); + m_pColorList->SelectEntry(aColor); + } m_pPreview->SetBackground(Wallpaper(aColor)); if (CheckBox* pCheckBox = dynamic_cast<CheckBox*>(m_pText.get())) pCheckBox->Check(rValue.bIsVisible); @@ -436,7 +445,7 @@ void ColorConfigWindow_Impl::Entry::Update ( ) { Color aColor(rValue.getColor()); if (rValue.getColor() == rValue.getDefaultColor()) - m_pColorList->SelectEntry(Color(COL_AUTO)); + m_pColorList->SelectEntryPos(0); else m_pColorList->SelectEntry(aColor); SetColor(aColor); @@ -447,10 +456,17 @@ void ColorConfigWindow_Impl::Entry::ColorChanged ( ColorConfigEntry aColorEntry, ColorConfigValue& rValue ) { - Color aColor = m_pColorList->GetSelectEntryColor(); - rValue.nColor = aColor.GetColor(); - if (aColor.GetColor() == COL_AUTO) + Color aColor; + if (m_pColorList->IsAutomaticSelected()) + { aColor = ColorConfig::GetDefaultColor(aColorEntry); + rValue.nColor = COL_AUTO; + } + else + { + aColor = m_pColorList->GetSelectEntryColor(); + rValue.nColor = aColor.GetColor(); + } SetColor(aColor); } @@ -460,7 +476,8 @@ void ColorConfigWindow_Impl::Entry::ColorChanged ( ) { Color aColor = m_pColorList->GetSelectEntryColor(); rValue.setColor(aColor.GetColor()); - if (aColor.GetColor() == COL_AUTO) + // automatic? + if (m_pColorList->GetSelectEntryPos() == 0) { rValue.setColor(rValue.getDefaultColor()); aColor.SetColor(rValue.getColor()); @@ -611,11 +628,22 @@ void ColorConfigWindow_Impl::SetAppearance () OSL_ENSURE( vEntries.size() >= SAL_N_ELEMENTS(vEntryInfo), "wrong number of helpIDs for color listboxes" ); + // creating a sample color listbox with the color entries + ScopedVclPtrInstance< ColorListBox > aSampleColorList(this); + { + XColorListRef const xColorTable = XColorList::CreateStdColorList(); + for (sal_Int32 i = 0; i != xColorTable->Count(); ++i) + { + XColorEntry& rEntry = *xColorTable->GetColor(i); + aSampleColorList->InsertEntry(rEntry.GetColor(), rEntry.GetName()); + } + } + // appearance for (size_t i = 0; i != vEntries.size(); ++i) { // appearance - vEntries[i]->SetAppearance(aTransparentWall); + vEntries[i]->SetAppearance(aTransparentWall, *aSampleColorList.get()); } } @@ -653,7 +681,7 @@ void ColorConfigWindow_Impl::Init(ScrollBar *pVScroll, HeaderBar *pHeaderHB) // SetLinks() void ColorConfigWindow_Impl::SetLinks ( - Link<Button*,void> const& aCheckLink, Link<SvxColorListBox&,void> const& aColorLink, Link<Control&,void> const& aGetFocusLink + Link<Button*,void> const& aCheckLink, Link<ListBox&,void> const& aColorLink, Link<Control&,void> const& aGetFocusLink ) { for (unsigned i = 0; i != vEntries.size(); ++i) vEntries[i]->SetLinks(aCheckLink, aColorLink, aGetFocusLink); @@ -714,10 +742,10 @@ void ColorConfigWindow_Impl::ClickHdl (EditableColorConfig* pConfig, CheckBox* p } // ColorHdl() -void ColorConfigWindow_Impl::ColorHdl( +void ColorConfigWindow_Impl::ColorHdl ( EditableColorConfig* pConfig, EditableExtendedColorConfig* pExtConfig, - SvxColorListBox* pBox) -{ + ColorListBox* pBox +) { unsigned i = 0; // default entries @@ -810,7 +838,7 @@ class ColorConfigCtrl_Impl : public VclVBox DECL_LINK(ScrollHdl, ScrollBar*, void); DECL_LINK(ClickHdl, Button*, void); - DECL_LINK(ColorHdl, SvxColorListBox&, void); + DECL_LINK(ColorHdl, ListBox&, void); DECL_LINK(ControlFocusHdl, Control&, void); virtual bool PreNotify (NotifyEvent& rNEvt) override; @@ -864,7 +892,7 @@ ColorConfigCtrl_Impl::ColorConfigCtrl_Impl(vcl::Window* pParent) m_pVScroll->SetEndScrollHdl(aScrollLink); Link<Button*,void> aCheckLink = LINK(this, ColorConfigCtrl_Impl, ClickHdl); - Link<SvxColorListBox&,void> aColorLink = LINK(this, ColorConfigCtrl_Impl, ColorHdl); + Link<ListBox&,void> aColorLink = LINK(this, ColorConfigCtrl_Impl, ColorHdl); Link<Control&,void> aGetFocusLink = LINK(this, ColorConfigCtrl_Impl, ControlFocusHdl); m_pScrollWindow->SetLinks(aCheckLink, aColorLink, aGetFocusLink); @@ -970,12 +998,11 @@ IMPL_LINK(ColorConfigCtrl_Impl, ClickHdl, Button*, pBox, void) } // a color list has changed -IMPL_LINK(ColorConfigCtrl_Impl, ColorHdl, SvxColorListBox&, rBox, void) +IMPL_LINK(ColorConfigCtrl_Impl, ColorHdl, ListBox&, rBox, void) { DBG_ASSERT(pColorConfig, "Configuration not set" ); - m_pScrollWindow->ColorHdl(pColorConfig, pExtColorConfig, &rBox); + m_pScrollWindow->ColorHdl(pColorConfig, pExtColorConfig, static_cast<ColorListBox*>(&rBox)); } - IMPL_LINK(ColorConfigCtrl_Impl, ControlFocusHdl, Control&, rCtrl, void) { // determine whether a control is completely visible |