diff options
Diffstat (limited to 'src/ui/dialog/new-from-template.cpp')
-rw-r--r-- | src/ui/dialog/new-from-template.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/ui/dialog/new-from-template.cpp b/src/ui/dialog/new-from-template.cpp new file mode 100644 index 0000000..d5fa843 --- /dev/null +++ b/src/ui/dialog/new-from-template.cpp @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * @brief New From Template main dialog - implementation + */ +/* Authors: + * Jan Darowski <jan.darowski@gmail.com>, supervised by Krzysztof KosiĆski + * + * Copyright (C) 2013 Authors + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#include "new-from-template.h" + +#include <glibmm/i18n.h> + +#include "desktop.h" +#include "file.h" +#include "inkscape-application.h" +#include "inkscape-window.h" +#include "inkscape.h" +#include "object/sp-namedview.h" +#include "ui/widget/template-list.h" + +namespace Inkscape { +namespace UI { + + +NewFromTemplate::NewFromTemplate() + : _create_template_button(_("Create from template")) +{ + set_title(_("New From Template")); + resize(750, 500); + + templates = Gtk::manage(new Inkscape::UI::Widget::TemplateList()); + get_content_area()->pack_start(*templates); + templates->init(Inkscape::Extension::TEMPLATE_NEW_FROM); + + _create_template_button.set_halign(Gtk::ALIGN_END); + _create_template_button.set_valign(Gtk::ALIGN_END); + _create_template_button.set_margin_end(15); + + get_content_area()->pack_end(_create_template_button, Gtk::PACK_SHRINK); + + _create_template_button.signal_clicked().connect( + sigc::mem_fun(*this, &NewFromTemplate::_createFromTemplate)); + _create_template_button.set_sensitive(false); + + templates->connectItemSelected([=]() { _create_template_button.set_sensitive(true); }); + templates->connectItemActivated(sigc::mem_fun(*this, &NewFromTemplate::_createFromTemplate)); + templates->signal_switch_page().connect([=](Gtk::Widget *const widget, int num) { + _create_template_button.set_sensitive(templates->has_selected_preset()); + }); + + show_all(); +} + +void NewFromTemplate::_createFromTemplate() +{ + SPDesktop *old_desktop = SP_ACTIVE_DESKTOP; + + auto doc = templates->new_document(); + + // Cancel button was pressed. + if (!doc) + return; + + auto app = InkscapeApplication::instance(); + InkscapeWindow *win = app->window_open(doc); + SPDesktop *new_desktop = win->get_desktop(); + sp_namedview_window_from_document(new_desktop); + + if (old_desktop) + old_desktop->clearWaitingCursor(); + + _onClose(); +} + +void NewFromTemplate::_onClose() +{ + response(0); +} + +void NewFromTemplate::load_new_from_template() +{ + NewFromTemplate dl; + dl.run(); +} + +} +} |