Kaydet (Commit) 0a139d98 authored tarafından Jim Raykowski's avatar Jim Raykowski Kaydeden (comit) Noel Grandin

tdf#105225 Add palette choice to calc tab background color dialog

Change-Id: I9891a20d3bc3de51fec84fb54c7aae42f7142662
Reviewed-on: https://gerrit.libreoffice.org/64329
Tested-by: Jenkins
Reviewed-by: 's avatarHeiko Tietze <tietze.heiko@gmail.com>
Tested-by: 's avatarHeiko Tietze <tietze.heiko@gmail.com>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 2c8ef031
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#define INCLUDED_SC_SOURCE_UI_INC_TABBGCOLORDLG_HXX #define INCLUDED_SC_SOURCE_UI_INC_TABBGCOLORDLG_HXX
#include <svx/SvxColorValueSet.hxx> #include <svx/SvxColorValueSet.hxx>
#include <svx/PaletteManager.hxx>
class ScTabBgColorDlg : public weld::GenericDialogController class ScTabBgColorDlg : public weld::GenericDialogController
{ {
...@@ -36,7 +37,7 @@ public: ...@@ -36,7 +37,7 @@ public:
class ScTabBgColorValueSet : public ColorValueSet class ScTabBgColorValueSet : public ColorValueSet
{ {
public: public:
ScTabBgColorValueSet(); ScTabBgColorValueSet(std::unique_ptr<weld::ScrolledWindow> pWindow);
virtual ~ScTabBgColorValueSet() override; virtual ~ScTabBgColorValueSet() override;
void SetDialog(ScTabBgColorDlg* pTabBgColorDlg) void SetDialog(ScTabBgColorDlg* pTabBgColorDlg)
...@@ -50,14 +51,18 @@ public: ...@@ -50,14 +51,18 @@ public:
}; };
private: private:
PaletteManager m_aPaletteManager;
Color m_aTabBgColor; Color m_aTabBgColor;
const OUString m_aTabBgColorNoColorText; const OUString m_aTabBgColorNoColorText;
ScTabBgColorValueSet m_aTabBgColorSet;
std::unique_ptr<weld::CustomWeld> m_xTabBgColorSet; std::unique_ptr<weld::ComboBox> m_xSelectPalette;
std::unique_ptr<ScTabBgColorValueSet> m_xTabBgColorSet;
std::unique_ptr<weld::CustomWeld> m_xTabBgColorSetWin;
std::unique_ptr<weld::Button> m_xBtnOk; std::unique_ptr<weld::Button> m_xBtnOk;
void FillColorValueSets_Impl(); void FillPaletteLB();
DECL_LINK(SelectPaletteLBHdl, weld::ComboBox&, void);
DECL_LINK(TabBgColorDblClickHdl_Impl, SvtValueSet*, void); DECL_LINK(TabBgColorDblClickHdl_Impl, SvtValueSet*, void);
DECL_LINK(TabBgColorOKHdl_Impl, weld::Button&, void); DECL_LINK(TabBgColorOKHdl_Impl, weld::Button&, void);
}; };
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#include <vcl/builderfactory.hxx> #include <vcl/builderfactory.hxx>
#include <osl/diagnose.h> #include <osl/diagnose.h>
#include <officecfg/Office/Common.hxx>
#define HDL(hdl) LINK(this,ScTabBgColorDlg,hdl) #define HDL(hdl) LINK(this,ScTabBgColorDlg,hdl)
ScTabBgColorDlg::ScTabBgColorDlg(weld::Window* pParent, const OUString& rTitle, ScTabBgColorDlg::ScTabBgColorDlg(weld::Window* pParent, const OUString& rTitle,
...@@ -37,16 +39,30 @@ ScTabBgColorDlg::ScTabBgColorDlg(weld::Window* pParent, const OUString& rTitle, ...@@ -37,16 +39,30 @@ ScTabBgColorDlg::ScTabBgColorDlg(weld::Window* pParent, const OUString& rTitle,
: GenericDialogController(pParent, "modules/scalc/ui/tabcolordialog.ui", "TabColorDialog") : GenericDialogController(pParent, "modules/scalc/ui/tabcolordialog.ui", "TabColorDialog")
, m_aTabBgColor(rDefaultColor) , m_aTabBgColor(rDefaultColor)
, m_aTabBgColorNoColorText(rTabBgColorNoColorText) , m_aTabBgColorNoColorText(rTabBgColorNoColorText)
, m_xTabBgColorSet(new weld::CustomWeld(*m_xBuilder, "colorset", m_aTabBgColorSet)) , m_xSelectPalette(m_xBuilder->weld_combo_box("paletteselector"))
, m_xTabBgColorSet(new ScTabBgColorValueSet(m_xBuilder->weld_scrolled_window("colorsetwin")))
, m_xTabBgColorSetWin(new weld::CustomWeld(*m_xBuilder, "colorset", *m_xTabBgColorSet))
, m_xBtnOk(m_xBuilder->weld_button("ok")) , m_xBtnOk(m_xBuilder->weld_button("ok"))
{ {
m_aTabBgColorSet.SetDialog(this); m_xTabBgColorSet->SetDialog(this);
m_aTabBgColorSet.SetColCount(SvxColorValueSet::getColumnCount()); m_xTabBgColorSet->SetColCount(SvxColorValueSet::getColumnCount());
m_xDialog->set_title(rTitle); m_xDialog->set_title(rTitle);
FillColorValueSets_Impl(); const WinBits nBits(m_xTabBgColorSet->GetStyle() | WB_NAMEFIELD | WB_ITEMBORDER | WB_NONEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT | WB_NOPOINTERFOCUS);
m_aTabBgColorSet.SetDoubleClickHdl(HDL(TabBgColorDblClickHdl_Impl)); m_xTabBgColorSet->SetStyle(nBits);
m_xTabBgColorSet->SetText(m_aTabBgColorNoColorText);
const sal_uInt32 nColCount = SvxColorValueSet::getColumnCount();
const sal_uInt32 nRowCount(10);
const sal_uInt32 nLength = SvxColorValueSet::getEntryEdgeLength();
Size aSize(m_xTabBgColorSet->CalcWindowSizePixel(Size(nLength, nLength), nColCount, nRowCount));
m_xTabBgColorSetWin->set_size_request(aSize.Width() + 8, aSize.Height() + 8);
FillPaletteLB();
m_xSelectPalette->connect_changed(LINK(this, ScTabBgColorDlg, SelectPaletteLBHdl));
m_xTabBgColorSet->SetDoubleClickHdl(HDL(TabBgColorDblClickHdl_Impl));
m_xBtnOk->connect_clicked(HDL(TabBgColorOKHdl_Impl)); m_xBtnOk->connect_clicked(HDL(TabBgColorOKHdl_Impl));
} }
...@@ -59,48 +75,37 @@ void ScTabBgColorDlg::GetSelectedColor( Color& rColor ) const ...@@ -59,48 +75,37 @@ void ScTabBgColorDlg::GetSelectedColor( Color& rColor ) const
rColor = m_aTabBgColor; rColor = m_aTabBgColor;
} }
void ScTabBgColorDlg::FillColorValueSets_Impl() void ScTabBgColorDlg::FillPaletteLB()
{ {
SfxObjectShell* pDocSh = SfxObjectShell::Current(); m_xSelectPalette->clear();
const SfxPoolItem* pItem = nullptr; std::vector<OUString> aPaletteList = m_aPaletteManager.GetPaletteList();
XColorListRef pColorList; for (auto const& palette : aPaletteList)
OSL_ENSURE( pDocSh, "DocShell not found!" );
if ( pDocSh && ( nullptr != ( pItem = pDocSh->GetItem(SID_COLOR_TABLE) ) ) )
pColorList = static_cast<const SvxColorListItem*>(pItem)->GetColorList();
if ( !pColorList.is() )
pColorList = XColorList::CreateStdColorList();
long nColorCount(0);
if ( pColorList.is() )
{ {
nColorCount = pColorList->Count(); m_xSelectPalette->append_text(palette);
m_aTabBgColorSet.addEntriesForXColorList(*pColorList);
} }
OUString aPaletteName( officecfg::Office::Common::UserColors::PaletteName::get() );
if (nColorCount) m_xSelectPalette->set_active_text(aPaletteName);
if (m_xSelectPalette->get_active() != -1)
{ {
const WinBits nBits(m_aTabBgColorSet.GetStyle() | WB_NAMEFIELD | WB_ITEMBORDER | WB_NONEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT | WB_NOPOINTERFOCUS); SelectPaletteLBHdl(*m_xSelectPalette);
m_aTabBgColorSet.SetText(m_aTabBgColorNoColorText);
m_aTabBgColorSet.SetStyle(nBits);
} }
}
//lock down a preferred size IMPL_LINK_NOARG(ScTabBgColorDlg, SelectPaletteLBHdl, weld::ComboBox&, void)
const sal_uInt32 nColCount = SvxColorValueSet::getColumnCount(); {
const sal_uInt32 nRowCount(ceil(double(nColorCount)/nColCount)); m_xTabBgColorSet->Clear();
const sal_uInt32 nLength = SvxColorValueSet::getEntryEdgeLength(); sal_Int32 nPos = m_xSelectPalette->get_active();
Size aSize(m_aTabBgColorSet.CalcWindowSizePixel(Size(nLength, nLength), nColCount, nRowCount)); m_aPaletteManager.SetPalette( nPos );
m_xTabBgColorSet->set_size_request(aSize.Width() + 8, aSize.Height() + 8); m_aPaletteManager.ReloadColorSet(*m_xTabBgColorSet);
m_aTabBgColorSet.SelectItem(0); m_xTabBgColorSet->Resize();
m_xTabBgColorSet->SelectItem(0);
} }
/// Handler, called when color selection is changed // Handler, called when color selection is changed
IMPL_LINK_NOARG(ScTabBgColorDlg, TabBgColorDblClickHdl_Impl, SvtValueSet*, void) IMPL_LINK_NOARG(ScTabBgColorDlg, TabBgColorDblClickHdl_Impl, SvtValueSet*, void)
{ {
sal_uInt16 nItemId = m_aTabBgColorSet.GetSelectedItemId(); sal_uInt16 nItemId = m_xTabBgColorSet->GetSelectedItemId();
Color aColor = nItemId ? ( m_aTabBgColorSet.GetItemColor( nItemId ) ) : COL_AUTO; Color aColor = nItemId ? ( m_xTabBgColorSet->GetItemColor( nItemId ) ) : COL_AUTO;
m_aTabBgColor = aColor; m_aTabBgColor = aColor;
m_xDialog->response(RET_OK); m_xDialog->response(RET_OK);
} }
...@@ -108,14 +113,14 @@ IMPL_LINK_NOARG(ScTabBgColorDlg, TabBgColorDblClickHdl_Impl, SvtValueSet*, void) ...@@ -108,14 +113,14 @@ IMPL_LINK_NOARG(ScTabBgColorDlg, TabBgColorDblClickHdl_Impl, SvtValueSet*, void)
// Handler, called when the OK button is pushed // Handler, called when the OK button is pushed
IMPL_LINK_NOARG(ScTabBgColorDlg, TabBgColorOKHdl_Impl, weld::Button&, void) IMPL_LINK_NOARG(ScTabBgColorDlg, TabBgColorOKHdl_Impl, weld::Button&, void)
{ {
sal_uInt16 nItemId = m_aTabBgColorSet.GetSelectedItemId(); sal_uInt16 nItemId = m_xTabBgColorSet->GetSelectedItemId();
Color aColor = nItemId ? ( m_aTabBgColorSet.GetItemColor( nItemId ) ) : COL_AUTO; Color aColor = nItemId ? ( m_xTabBgColorSet->GetItemColor( nItemId ) ) : COL_AUTO;
m_aTabBgColor = aColor; m_aTabBgColor = aColor;
m_xDialog->response(RET_OK); m_xDialog->response(RET_OK);
} }
ScTabBgColorDlg::ScTabBgColorValueSet::ScTabBgColorValueSet() ScTabBgColorDlg::ScTabBgColorValueSet::ScTabBgColorValueSet(std::unique_ptr<weld::ScrolledWindow> pWindow)
: ColorValueSet(nullptr) : ColorValueSet(std::move(pWindow))
, m_pTabBgColorDlg(nullptr) , m_pTabBgColorDlg(nullptr)
{ {
} }
......
...@@ -60,12 +60,53 @@ ...@@ -60,12 +60,53 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkScrolledWindow" id="scroll"> <object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">3</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="label" translatable="yes" context="tabcolordialog |label1">Palette:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">paletteselector</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="paletteselector">
<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">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="GtkScrolledWindow" id="colorsetwin">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="vexpand">True</property> <property name="vexpand">True</property>
<property name="hscrollbar_policy">never</property> <property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">never</property>
<property name="shadow_type">in</property> <property name="shadow_type">in</property>
<child> <child>
<object class="GtkViewport"> <object class="GtkViewport">
...@@ -86,7 +127,7 @@ ...@@ -86,7 +127,7 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment