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 NamedColor
& 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 weld::Window
* m_pTopLevel
;
36 Link
<ColorListBox
&, void> m_aSelectedLink
;
37 ListBoxColorWrapper m_aColorWrapper
;
38 Color m_aAutoDisplayColor
;
40 NamedColor m_aSelectedColor
;
42 bool m_bShowNoneButton
;
43 std::shared_ptr
<PaletteManager
> m_xPaletteManager
;
44 ColorStatus m_aColorStatus
;
46 void Selected(const NamedColor
& rNamedColor
);
47 void createColorWindow();
48 void LockWidthRequest();
49 ColorWindow
* getColorWindow() const;
51 DECL_LINK(ToggleHdl
, weld::ToggleButton
&, void);
54 // pTopLevelWindow will be used as parent for any color picker dialog created
55 ColorListBox(std::unique_ptr
<weld::MenuButton
> pControl
, weld::Window
* pTopLevelWindow
);
58 void SetSelectHdl(const Link
<ColorListBox
&, void>& rLink
) { m_aSelectedLink
= rLink
; }
60 void SetSlotId(sal_uInt16 nSlotId
, bool bShowNoneButton
= false);
62 Color
const& GetSelectEntryColor() const { return m_aSelectedColor
.first
; }
63 NamedColor
const& GetSelectedEntry() const { return m_aSelectedColor
; }
65 void SelectEntry(const NamedColor
& rColor
);
66 void SelectEntry(const Color
& rColor
);
68 void SetNoSelection() { getColorWindow()->SetNoSelection(); }
69 bool IsNoSelection() const { return getColorWindow()->IsNoSelection(); }
71 void SetAutoDisplayColor(const Color
& rColor
) { m_aAutoDisplayColor
= rColor
; }
73 void ShowPreview(const NamedColor
& rColor
);
74 void EnsurePaletteManager();
76 void SaveValue() { m_aSaveColor
= GetSelectEntryColor(); }
77 bool IsValueChangedFromSaved() const { return m_aSaveColor
!= GetSelectEntryColor(); }
79 void set_sensitive(bool sensitive
) { m_xButton
->set_sensitive(sensitive
); }
80 bool get_sensitive() const { return m_xButton
->get_sensitive(); }
81 void show() { m_xButton
->show(); }
82 void hide() { m_xButton
->hide(); }
83 void set_visible(bool bShow
) { m_xButton
->set_visible(bShow
); }
84 void set_help_id(const OString
& rHelpId
) { m_xButton
->set_help_id(rHelpId
); }
85 void connect_focus_in(const Link
<weld::Widget
&, void>& rLink
)
87 m_xButton
->connect_focus_in(rLink
);
89 void connect_focus_out(const Link
<weld::Widget
&, void>& rLink
)
91 m_xButton
->connect_focus_out(rLink
);
93 weld::MenuButton
& get_widget() { return *m_xButton
; }
98 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */