summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/tile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/dialog/tile.cpp')
-rw-r--r--src/ui/dialog/tile.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/ui/dialog/tile.cpp b/src/ui/dialog/tile.cpp
new file mode 100644
index 0000000..661c4f6
--- /dev/null
+++ b/src/ui/dialog/tile.cpp
@@ -0,0 +1,136 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * A simple dialog for creating grid type arrangements of selected objects
+ *
+ * Authors:
+ * Bob Jamison ( based off trace dialog)
+ * John Cliff
+ * Other dudes from The Inkscape Organization
+ * Abhishek Sharma
+ * Declara Denis
+ *
+ * Copyright (C) 2004 Bob Jamison
+ * Copyright (C) 2004 John Cliff
+ *
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+#include "tile.h"
+
+#include <glibmm/i18n.h>
+
+#include "ui/dialog/grid-arrange-tab.h"
+#include "ui/dialog/polar-arrange-tab.h"
+#include "ui/dialog/align-and-distribute.h"
+#include "ui/icon-names.h"
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+Gtk::Box& create_tab_label(const char* label_text, const char* icon_name) {
+ auto box = Gtk::make_managed<Gtk::Box>(Gtk::ORIENTATION_HORIZONTAL, 4);
+ auto image = Gtk::make_managed<Gtk::Image>();
+ image->set_from_icon_name(icon_name, Gtk::ICON_SIZE_MENU);
+ auto label = Gtk::make_managed<Gtk::Label>(label_text, true);
+ box->pack_start(*image, false, true);
+ box->pack_start(*label, false, true);
+ box->show_all();
+ return *box;
+}
+
+ArrangeDialog::ArrangeDialog()
+ : DialogBase("/dialogs/gridtiler", "AlignDistribute")
+{
+ _align_tab = Gtk::manage(new AlignAndDistribute(this));
+ _arrangeBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
+ _arrangeBox->set_valign(Gtk::ALIGN_START);
+ _notebook = Gtk::manage(new Gtk::Notebook());
+ _gridArrangeTab = Gtk::manage(new GridArrangeTab(this));
+ _polarArrangeTab = Gtk::manage(new PolarArrangeTab(this));
+
+ set_valign(Gtk::ALIGN_START);
+
+ _notebook->set_valign(Gtk::ALIGN_START);
+ _notebook->append_page(*_align_tab, create_tab_label(C_("Arrange dialog", "Align"), INKSCAPE_ICON("dialog-align-and-distribute")));
+ // TRANSLATORS: "Grid" refers to grid (columns/rows) arrangement
+ _notebook->append_page(*_gridArrangeTab, create_tab_label(C_("Arrange dialog", "Grid"), INKSCAPE_ICON("arrange-grid")));
+ // TRANSLATORS: "Circular" refers to circular/radial arrangement
+ _notebook->append_page(*_polarArrangeTab, create_tab_label(C_("Arrange dialog", "Circular"), INKSCAPE_ICON("arrange-circular")));
+ _arrangeBox->pack_start(*_notebook);
+ _notebook->signal_switch_page().connect([=](Widget*, guint page){
+ update_arrange_btn();
+ });
+ pack_start(*_arrangeBox);
+
+ // Add button
+ _arrangeButton = Gtk::manage(new Gtk::Button(C_("Arrange dialog", "_Arrange")));
+ _arrangeButton->signal_clicked().connect(sigc::mem_fun(*this, &ArrangeDialog::_apply));
+ _arrangeButton->set_use_underline(true);
+ _arrangeButton->set_tooltip_text(_("Arrange selected objects"));
+ _arrangeButton->get_style_context()->add_class("wide-apply-button");
+ _arrangeButton->set_no_show_all();
+
+ Gtk::ButtonBox *button_box = Gtk::manage(new Gtk::ButtonBox());
+ button_box->set_layout(Gtk::BUTTONBOX_CENTER);
+ button_box->set_spacing(6);
+ button_box->set_border_width(4);
+ button_box->set_valign(Gtk::ALIGN_FILL);
+
+ button_box->pack_end(*_arrangeButton);
+ pack_start(*button_box);
+
+ show();
+ show_all_children();
+ update_arrange_btn();
+}
+
+void ArrangeDialog::update_arrange_btn() {
+ // "align" page doesn't use "Arrange" button
+ if (_notebook->get_current_page() == 0) {
+ _arrangeButton->hide();
+ }
+ else {
+ _arrangeButton->show();
+ }
+}
+
+ArrangeDialog::~ArrangeDialog()
+{ }
+
+void ArrangeDialog::_apply()
+{
+ switch(_notebook->get_current_page())
+ {
+ case 0:
+ // not applicable to align panel
+ break;
+ case 1:
+ _gridArrangeTab->arrange();
+ break;
+ case 2:
+ _polarArrangeTab->arrange();
+ break;
+ }
+}
+
+void ArrangeDialog::desktopReplaced()
+{
+ _gridArrangeTab->setDesktop(getDesktop());
+ _align_tab->desktop_changed(getDesktop());
+}
+
+} //namespace Dialog
+} //namespace UI
+} //namespace Inkscape
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :