1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #ifndef INCLUDED_SVX_COLORBOX_HXX
11 #define INCLUDED_SVX_COLORBOX_HXX
14 #include <vcl/weld.hxx>
15 #include <svx/colorwindow.hxx>
19 class ListBoxColorWrapper
22 ListBoxColorWrapper(ColorListBox
* pControl
);
23 void operator()(const OUString
& rCommand
,
24 const svx::NamedThemedColor
& rColor
); // ColorSelectFunction signature
26 ColorListBox
* mpControl
;
29 class SVXCORE_DLLPUBLIC ColorListBox
32 friend class ListBoxColorWrapper
;
33 std::unique_ptr
<ColorWindow
> m_xColorWindow
;
34 std::unique_ptr
<weld::MenuButton
> m_xButton
;
35 Link
<ColorListBox
&, void> m_aSelectedLink
;
36 ListBoxColorWrapper m_aColorWrapper
;
37 Color m_aAutoDisplayColor
;
39 svx::NamedThemedColor m_aSelectedColor
;
41 bool m_bShowNoneButton
;
42 std::shared_ptr
<PaletteManager
> m_xPaletteManager
;
43 TopLevelParentFunction m_aTopLevelParentFunction
;
44 ColorStatus m_aColorStatus
;
46 void Selected(const svx::NamedThemedColor
& rNamedColor
);
47 void createColorWindow();
48 void LockWidthRequest();
49 ColorWindow
* getColorWindow() const;
51 DECL_DLLPRIVATE_LINK(ToggleHdl
, weld::Toggleable
&, void);
54 // rTopLevelParentFunction will be used to get parent for any color picker dialog created
55 ColorListBox(std::unique_ptr
<weld::MenuButton
> pControl
,
56 TopLevelParentFunction aTopLevelParentFunction
);
59 void SetSelectHdl(const Link
<ColorListBox
&, void>& rLink
) { m_aSelectedLink
= rLink
; }
61 void SetSlotId(sal_uInt16 nSlotId
, bool bShowNoneButton
= false);
63 Color
const& GetSelectEntryColor() const { return m_aSelectedColor
.m_aColor
; }
64 NamedColor
GetSelectedEntry() const { return m_aSelectedColor
.ToNamedColor(); }
65 const svx::NamedThemedColor
& GetSelectedEntryThemedColor() const { return m_aSelectedColor
; }
67 void SelectEntry(const NamedColor
& rColor
);
68 void SelectEntry(const Color
& rColor
);
70 void SetNoSelection() { getColorWindow()->SetNoSelection(); }
71 bool IsNoSelection() const { return getColorWindow()->IsNoSelection(); }
73 void SetAutoDisplayColor(const Color
& rColor
) { m_aAutoDisplayColor
= rColor
; }
75 void ShowPreview(const NamedColor
& rColor
);
76 void EnsurePaletteManager();
78 void SaveValue() { m_aSaveColor
= GetSelectEntryColor(); }
79 bool IsValueChangedFromSaved() const { return m_aSaveColor
!= GetSelectEntryColor(); }
81 void set_sensitive(bool sensitive
) { m_xButton
->set_sensitive(sensitive
); }
82 bool get_sensitive() const { return m_xButton
->get_sensitive(); }
83 void show() { m_xButton
->show(); }
84 void hide() { m_xButton
->hide(); }
85 void set_visible(bool bShow
) { m_xButton
->set_visible(bShow
); }
86 void set_help_id(const OString
& rHelpId
) { m_xButton
->set_help_id(rHelpId
); }
87 void connect_focus_in(const Link
<weld::Widget
&, void>& rLink
)
89 m_xButton
->connect_focus_in(rLink
);
91 void connect_focus_out(const Link
<weld::Widget
&, void>& rLink
)
93 m_xButton
->connect_focus_out(rLink
);
95 weld::MenuButton
& get_widget() { return *m_xButton
; }
100 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */