Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
toolbars.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
/*
7 * Authors:
8 * Tavmjong Bah
9 * Alex Valavanis
10 * Mike Kowalski
11 * Vaibhav Malik
12 * PBS
13 *
14 * Copyright (C) 2024 PBS
15 *
16 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
17 */
18
19#include "toolbars.h"
20
21// For creating toolbars
47#include "ui/tools/tool-base.h"
48
49namespace Inkscape::UI::Toolbar {
50namespace {
51
52// Data for building and tracking toolbars.
53struct ToolbarData
54{
55 Glib::ustring name;
56 std::unique_ptr<Toolbar> (*create)();
57};
58
59template <typename T, auto... args>
60auto create = [] () -> std::unique_ptr<Toolbar> { return std::make_unique<T>(args...); };
61
62auto const toolbar_data = std::unordered_map<std::string, ToolbarData>{
63 // clang-format off
64 {"/tools/select", {"Select", create<SelectToolbar>}},
65 {"/tools/nodes", {"Node", create<NodeToolbar>}},
66 {"/tools/booleans", {"Booleans", create<BooleansToolbar>}},
67 {"/tools/marker", {"Marker", create<MarkerToolbar>}},
68 {"/tools/shapes/rect", {"Rect", create<RectToolbar>}},
69 {"/tools/shapes/arc", {"Arc", create<ArcToolbar>}},
70 {"/tools/shapes/star", {"Star", create<StarToolbar>}},
71 {"/tools/shapes/3dbox", {"3DBox", create<Box3DToolbar>}},
72 {"/tools/shapes/spiral", {"Spiral", create<SpiralToolbar>}},
73 {"/tools/freehand/pencil", {"Pencil", create<PencilToolbar, true>}},
74 {"/tools/freehand/pen", {"Pen", create<PencilToolbar, false>}},
75 {"/tools/calligraphic", {"Calligraphic", create<CalligraphyToolbar>}},
76 {"/tools/text", {"Text", create<TextToolbar>}},
77 {"/tools/gradient", {"Gradient", create<GradientToolbar>}},
78 {"/tools/mesh", {"Mesh", create<MeshToolbar>}},
79 {"/tools/zoom", {"Zoom", create<ZoomToolbar>}},
80 {"/tools/measure", {"Measure", create<MeasureToolbar>}},
81 {"/tools/dropper", {"Dropper", create<DropperToolbar>}},
82 {"/tools/tweak", {"Tweak", create<TweakToolbar>}},
83 {"/tools/spray", {"Spray", create<SprayToolbar>}},
84 {"/tools/connector", {"Connector", create<ConnectorToolbar>}},
85 {"/tools/pages", {"Pages", create<PageToolbar>}},
86 {"/tools/paintbucket", {"Paintbucket", create<PaintbucketToolbar>}},
87 {"/tools/eraser", {"Eraser", create<EraserToolbar>}},
88 {"/tools/lpetool", {"LPETool", create<LPEToolbar>}},
89 {"/tools/picker", {"ObjectPicker", create<ObjectPickerToolbar>}},
90 // clang-format on
91};
92
93} // namespace
94
96 : Gtk::Box{Gtk::Orientation::VERTICAL}
97{
98 set_name("Toolbars");
99}
100
102{
103 if (_current_toolbar) {
105 }
106}
107
109{
110 // Acquire the toolbar to be shown, possibly null
111 Toolbar *toolbar = nullptr;
112
113 if (tool) {
114 auto &toolbars_entry = _toolbars[tool->getPrefsPath()];
115
116 if (!toolbars_entry) {
117 // Lazily create the toolbar.
118 auto const &data = toolbar_data.at(tool->getPrefsPath());
119 toolbars_entry = data.create();
120 toolbars_entry->set_name(data.name + "Toolbar");
121 toolbars_entry->set_hexpand();
122 append(*toolbars_entry);
123 }
124
125 toolbar = toolbars_entry.get();
126 }
127
128 if (toolbar != _current_toolbar) {
129 // Tool has changed.
130 if (_current_toolbar) {
131 _current_toolbar->set_visible(false);
133 }
134 _current_toolbar = toolbar;
135 if (_current_toolbar) {
137 _current_toolbar->set_visible(true);
138 }
139 } else if (_current_toolbar && tool->getDesktop() != _current_toolbar->getDesktop()) {
140 // Tool has stayed the same but desktop has changed.
142 }
143}
144
146{
147 if (_current_toolbar) {
149 }
150}
151
152} // namespace Inkscape::UI::Toolbar
153
154/*
155 Local Variables:
156 mode:c++
157 c-file-style:"stroustrup"
158 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
159 indent-tabs-mode:nil
160 fill-column:99
161 End:
162*/
163// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
Base class for all tool toolbars.
Definition toolbar.h:72
virtual void setActiveUnit(Util::Unit const *unit)
Definition toolbar.h:79
virtual void setDesktop(SPDesktop *desktop)
Definition toolbar.h:76
SPDesktop * getDesktop() const
Definition toolbar.h:77
void setTool(Tools::ToolBase *tool)
Definition toolbars.cpp:108
std::unordered_map< std::string, std::unique_ptr< Toolbar > > _toolbars
Definition toolbars.h:44
void setActiveUnit(Util::Unit const *unit)
Definition toolbars.cpp:145
Base class for Event processors.
Definition tool-base.h:107
std::string const & getPrefsPath() const
Definition tool-base.h:120
SPDesktop * getDesktop() const
Definition tool-base.h:125
Dropper toolbar.
Eraser toolbar.
Marker edit mode toolbar - onCanvas marker editing of marker orientation, position,...
Definition desktop.h:50
static void append(std::vector< T > &target, std::vector< T > &&source)
Object picker toolbar.
Page toolbar.
Pencil and pen toolbars.
Select toolbar.
static const Point data[]
std::unique_ptr< Toolbar >(* create)()
Definition toolbars.cpp:56
Glib::ustring name
Definition toolbars.cpp:55
A container for toolbars, displaying one toolbar at a time.