From a4eea75612acbbfd6b8aed6b48090ca2c76ee657 Mon Sep 17 00:00:00 2001 From: Patrick Storz Date: Sat, 10 Aug 2019 21:25:41 +0200 Subject: 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. --- src/extension/prefdialog/widget-spacer.cpp | 65 ++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/extension/prefdialog/widget-spacer.cpp (limited to 'src/extension/prefdialog/widget-spacer.cpp') 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 + * + * Copyright (C) 2019 Authors + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#include "widget-spacer.h" + +#include + +#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 *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(spacer); +} + +} /* namespace Extension */ +} /* namespace Inkscape */ -- cgit v1.2.3