summaryrefslogtreecommitdiffstats
path: root/src/extension/prefdialog/widget-spacer.cpp
diff options
context:
space:
mode:
authorPatrick Storz <eduard.braun2@gmx.de>2019-08-10 19:25:41 +0000
committerPatrick Storz <eduard.braun2@gmx.de>2019-08-31 14:50:39 +0000
commita4eea75612acbbfd6b8aed6b48090ca2c76ee657 (patch)
treee53efaa60e611bc73c20b628c1c6e725c6f89f75 /src/extension/prefdialog/widget-spacer.cpp
parentAdd new widget "separator" which draws a line between widgets (diff)
downloadinkscape-a4eea75612acbbfd6b8aed6b48090ca2c76ee657.tar.gz
inkscape-a4eea75612acbbfd6b8aed6b48090ca2c76ee657.zip
Add new widget "spacer" which adds an empty space between widgets
The attribute "size" allows to define the spacing in px. The special value "expand" can be used to make the spacer consume all available space in the parent.
Diffstat (limited to 'src/extension/prefdialog/widget-spacer.cpp')
-rw-r--r--src/extension/prefdialog/widget-spacer.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/extension/prefdialog/widget-spacer.cpp b/src/extension/prefdialog/widget-spacer.cpp
new file mode 100644
index 000000000..350aeb4f2
--- /dev/null
+++ b/src/extension/prefdialog/widget-spacer.cpp
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/** @file
+ * Spacer widget for extensions
+ *//*
+ * Authors:
+ * Patrick Storz <eduard.braun2@gmx.de>
+ *
+ * Copyright (C) 2019 Authors
+ *
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+#include "widget-spacer.h"
+
+#include <gtkmm/box.h>
+
+#include "xml/node.h"
+#include "extension/extension.h"
+
+namespace Inkscape {
+namespace Extension {
+
+
+WidgetSpacer::WidgetSpacer(Inkscape::XML::Node *xml, Inkscape::Extension::Extension *ext)
+ : InxWidget(xml, ext)
+{
+ // get size
+ const char *size = xml->attribute("size");
+ if (size) {
+ _size = strtol(size, nullptr, 0);
+ if (_size == 0) {
+ if (!strcmp(size, "expand")) {
+ _expand = true;
+ } else {
+ g_warning("Invalid value ('%s') for size spacer in extension '%s'", size, _extension->get_id());
+ }
+ }
+ }
+}
+
+/** \brief Create a label for the description */
+Gtk::Widget *WidgetSpacer::get_widget(sigc::signal<void> *changeSignal)
+{
+ if (_hidden) {
+ return nullptr;
+ }
+
+ Gtk::Box *spacer = Gtk::manage(new Gtk::Box());
+ spacer->set_border_width(_size/2);
+
+ if (_expand) {
+ spacer->set_hexpand();
+ spacer->set_vexpand();
+ } else {
+ spacer->set_margin_start(_size);
+ spacer->set_margin_top(_size);
+ }
+
+ spacer->show();
+
+ return dynamic_cast<Gtk::Widget *>(spacer);
+}
+
+} /* namespace Extension */
+} /* namespace Inkscape */