18#include <glibmm/i18n.h>
19#include <gtkmm/eventcontrollerkey.h>
20#include <gtkmm/liststore.h>
21#include <gtkmm/scrolledwindow.h>
22#include <gtkmm/treeview.h>
23#include <sigc++/adaptors/bind.h>
24#include <sigc++/functors/mem_fun.h>
44 btn->set_image_from_icon_name(iconName, Gtk::IconSize::NORMAL);
45 btn->set_has_frame(
false);
54 set_orientation(Gtk::Orientation::VERTICAL);
57 _vectors = Gtk::make_managed<GradientVectorSelector>(
nullptr,
nullptr);
61 _treeview = Gtk::make_managed<Gtk::TreeView>();
70 auto icon_column =
_treeview->get_column(0);
73 icon_column->set_clickable(
true);
76 auto name_column =
_treeview->get_column(1);
79 name_column->set_min_width(180);
80 name_column->set_clickable(
true);
81 name_column->set_resizable(
true);
84 auto count_column =
_treeview->get_column(2);
85 count_column->set_clickable(
true);
86 count_column->set_resizable(
true);
88 auto const key = Gtk::EventControllerKey::create();
104 _scrolled_window->set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
114 auto const hb = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL, 0);
117 _add = Gtk::make_managed<Gtk::Button>();
124 _add->set_sensitive(
false);
125 _add->set_has_frame(
false);
126 _add->set_tooltip_text(_(
"Create a duplicate gradient"));
128 _del2 = Gtk::make_managed<Gtk::Button>();
134 _del2->set_sensitive(
false);
135 _del2->set_has_frame(
false);
136 _del2->set_tooltip_text(_(
"Delete unused gradient"));
139 _edit = Gtk::make_managed<Gtk::Button>();
145 _edit->set_sensitive(
false);
146 _edit->set_has_frame(
false);
147 _edit->set_tooltip_text(_(
"Edit gradient"));
148 _edit->set_visible(
false);
150 _del = Gtk::make_managed<Gtk::Button>();
156 _del->set_sensitive(
false);
157 _del->set_has_frame(
false);
158 _del->set_tooltip_text(_(
"Delete swatch"));
175 it->set_visible(
false);
178 swatch_widget->set_visible(
true);
181 auto icon_column =
_treeview->get_column(0);
182 icon_column->set_title(_(
"Swatch"));
187 it->set_visible(
true);
190 swatch_widget->set_visible(
false);
192 auto icon_column =
_treeview->get_column(0);
193 icon_column->set_title(_(
"Gradient"));
206 Gtk::TreePath path(path_string);
207 auto iter =
_store->get_iter(path);
210 Gtk::TreeModel::Row row = *iter;
245 auto select =
_treeview->get_selection();
246 auto iter = select->get_selected();
259 while (canary && (toEnd || amount > 0)) {
270 select->select(iter);
283 case GDK_KEY_KP_Down:
287 case GDK_KEY_Page_Up:
288 case GDK_KEY_KP_Page_Up:
292 case GDK_KEY_Page_Down:
293 case GDK_KEY_KP_Page_Down:
303 case GDK_KEY_KP_Home:
329 const auto sel =
_treeview->get_selection();
336 auto iter = sel->get_selected();
338 Gtk::TreeModel::Row row = *iter;
350 const auto sel =
_treeview->get_selection();
357 auto iter = sel->get_selected();
359 Gtk::TreeModel::Row row = *iter;
371 Gtk::TreeModel::Row row = *iter;
374 auto select =
_treeview->get_selection();
377 select->select(iter);
392 g_return_if_fail(!vector || (vector->
document == doc));
394 if (vector && !vector->
hasStops()) {
406 it->set_visible(
false);
410 it->set_visible(
true);
416 swatch_widget->set_visible(
false);
419 it->set_visible(
true);
424 _edit->set_sensitive(
true);
427 _add->set_sensitive(
true);
430 _del->set_sensitive(
true);
435 _edit->set_sensitive(
false);
438 _add->set_sensitive(doc !=
nullptr);
441 _del->set_sensitive(
false);
444 _del2->set_sensitive(
false);
467 const auto selection =
_treeview->get_selection();
474 Gtk::TreeModel::iterator iter = selection->get_selected();
476 Gtk::TreeModel::Row row = *iter;
481 if (
auto repr = obj->
getRepr()) {
491 selection->select(move);
500 const auto selection =
_treeview->get_selection();
507 Gtk::TreeModel::iterator iter = selection->get_selected();
509 Gtk::TreeModel::Row row = *iter;
514 std::string
id = obj->
getId();
539 repr = gr->getRepr()->
duplicate(xml_doc);
542 gr->setAttribute(
"id", new_id.c_str());
543 doc->getDefs()->getRepr()->addChild(repr,
nullptr);
548 stop->
setAttribute(
"style",
"stop-color:#000;stop-opacity:1;");
553 stop->
setAttribute(
"style",
"stop-color:#fff;stop-opacity:1;");
556 doc->getDefs()->getRepr()->addChild(repr,
nullptr);
557 gr = cast<SPGradient>(doc->getObjectByRepr(repr));
571 _edit->set_visible(show);
575 auto name_column =
_treeview->get_column(1);
576 name_column->set_min_width(min_width);
static void done(SPDocument *document, Glib::ustring const &event_description, Glib::ustring const &undo_icon, unsigned int object_modified_tag=0)
Interface for refcounted XML nodes.
virtual void appendChild(Node *child)=0
Append a node as the last child of this node.
void setAttribute(Util::const_char_ptr key, Util::const_char_ptr value)
Change an attribute of this node.
virtual Node * duplicate(Document *doc) const =0
Create a duplicate of this node.
void removeAttribute(Inkscape::Util::const_char_ptr key)
Remove an attribute of this node.
Typed SVG document implementation.
SPObject is an abstract base class of all of the document nodes at the SVG document level.
void setAttribute(Inkscape::Util::const_char_ptr key, Inkscape::Util::const_char_ptr value)
char const * getId() const
Returns the objects current ID string.
void setLabel(char const *label)
Sets the author-visible label for this object.
Inkscape::XML::Node * getRepr()
Returns the XML representation of tree.
Utilities to more easily use Gtk::EventController & subclasses like Gesture.
TODO: insert short description here.
void sp_gradient_unset_swatch(SPDesktop *desktop, std::string const &id)
int sp_get_gradient_refcount(SPDocument *document, SPGradient *gradient)
SPGradient * sp_gradient_ensure_vector_normalized(SPGradient *gr)
Either normalizes given gradient to vector, or returns fresh normalized vector - in latter case,...
Glib::ustring gr_prepare_label(SPObject *obj)
Macro for icon names used in Inkscape.
Glib::ustring generate_similar_unique_id(SPDocument *document, const Glib::ustring &base_name)
Modify 'base_name' to create a new ID that is not used in the 'document'.
TODO: insert short description here.
static R & release(R &r)
Decrements the reference count of a anchored object.
void pack_start(Gtk::Box &box, Gtk::Widget &child, bool const expand, bool const fill, unsigned const padding)
Adds child to box, packed with reference to the start of box.
static cairo_user_data_key_t key
Helpers for using Gtk::Boxes, encapsulating large changes between GTK3 & GTK4.
Singleton class to access the preferences file in a convenient way.
@ SP_GRADIENT_UNITS_USERSPACEONUSE
Interface for XML documents.
virtual Node * createElement(char const *name)=0