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/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
22 #include <svtools/toolbarmenu.hxx>
23 #include <rtl/ustring.hxx>
24 #include <svx/SvxColorValueSet.hxx>
25 #include <svx/Palette.hxx>
26 #include <vcl/toolboxid.hxx>
28 typedef std::function
<weld::Window
*()> TopLevelParentFunction
;
30 namespace com::sun::star::frame
{ class XFrame
; }
35 class UNLESS_MERGELIBS_MORE(SVXCORE_DLLPUBLIC
) ColorStatus
42 void statusChanged( const css::frame::FeatureStateEvent
& rEvent
);
48 #define COL_NONE_COLOR ::Color(ColorTransparency, 0x80, 0xFF, 0xFF, 0xFF)
50 class SvxColorToolBoxControl
;
52 class SVXCORE_DLLPUBLIC MenuOrToolMenuButton
56 weld::MenuButton
* m_pMenuButton
;
58 weld::Toolbar
* m_pToolbar
;
61 SvxColorToolBoxControl
* m_pControl
;
62 VclPtr
<ToolBox
> m_xToolBox
;
65 MenuOrToolMenuButton(weld::MenuButton
* pMenuButton
);
66 MenuOrToolMenuButton(weld::Toolbar
* pToolbar
, OUString sIdent
);
67 MenuOrToolMenuButton(SvxColorToolBoxControl
* pControl
, ToolBox
* pToolbar
, ToolBoxItemId nId
);
68 ~MenuOrToolMenuButton();
70 MenuOrToolMenuButton(MenuOrToolMenuButton
const &) = default;
71 MenuOrToolMenuButton(MenuOrToolMenuButton
&&) = default;
72 MenuOrToolMenuButton
& operator =(MenuOrToolMenuButton
const &) = default;
73 MenuOrToolMenuButton
& operator =(MenuOrToolMenuButton
&&) = default;
75 bool get_active() const;
76 void set_inactive() const;
77 weld::Widget
* get_widget() const;
80 class SVXCORE_DLLPUBLIC ColorWindow final
: public WeldToolbarPopup
83 const sal_uInt16 theSlotId
;
85 MenuOrToolMenuButton maMenuButton
;
86 std::shared_ptr
<PaletteManager
> mxPaletteManager
;
87 ColorStatus
& mrColorStatus
;
88 TopLevelParentFunction maTopLevelParentFunction
;
89 ColorSelectFunction maColorSelectFunction
;
91 std::unique_ptr
<SvxColorValueSet
> mxColorSet
;
92 std::unique_ptr
<SvxColorValueSet
> mxRecentColorSet
;
93 std::unique_ptr
<weld::ComboBox
> mxPaletteListBox
;
94 std::unique_ptr
<weld::Button
> mxButtonAutoColor
;
95 std::unique_ptr
<weld::Button
> mxButtonNoneColor
;
96 std::unique_ptr
<weld::Button
> mxButtonPicker
;
97 std::unique_ptr
<weld::Widget
> mxAutomaticSeparator
;
98 std::unique_ptr
<weld::CustomWeld
> mxColorSetWin
;
99 std::unique_ptr
<weld::CustomWeld
> mxRecentColorSetWin
;
100 weld::Button
* mpDefaultButton
;
102 DECL_DLLPRIVATE_LINK(SelectHdl
, ValueSet
*, void);
103 DECL_DLLPRIVATE_LINK(SelectPaletteHdl
, weld::ComboBox
&, void);
104 DECL_DLLPRIVATE_LINK(AutoColorClickHdl
, weld::Button
&, void);
105 DECL_DLLPRIVATE_LINK(OpenPickerClickHdl
, weld::Button
&, void);
107 static bool SelectValueSetEntry(SvxColorValueSet
* pColorSet
, const Color
& rColor
);
108 static NamedColor
GetSelectEntryColor(ValueSet
const * pColorSet
);
109 NamedColor
GetAutoColor() const;
112 ColorWindow(OUString rCommand
,
113 std::shared_ptr
<PaletteManager
> xPaletteManager
,
114 ColorStatus
& rColorStatus
,
116 const css::uno::Reference
<css::frame::XFrame
>& rFrame
,
117 const MenuOrToolMenuButton
&rMenuButton
,
118 TopLevelParentFunction aTopLevelParentFunction
,
119 ColorSelectFunction aColorSelectFunction
);
120 virtual ~ColorWindow() override
;
121 void ShowNoneButton();
122 void SetNoSelection();
123 bool IsNoSelection() const;
124 void SelectEntry(const NamedColor
& rColor
);
125 void SelectEntry(const Color
& rColor
);
126 NamedColor
GetSelectEntryColor() const;
128 virtual void statusChanged( const css::frame::FeatureStateEvent
& rEvent
) override
;
130 virtual void GrabFocus() override
;
133 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */