Context for the "About" label
[inkscape.git] / src / ui / dialog / new-from-template.cpp
blob16fefada6d53c6051df402d76b1800ef43ae52cf
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /** @file
3 * @brief New From Template main dialog - implementation
4 */
5 /* Authors:
6 * Jan Darowski <jan.darowski@gmail.com>, supervised by Krzysztof KosiƄski
7 * Martin Owens, Mike Kowalski
9 * Copyright (C) 2013 Authors
10 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
13 #include "new-from-template.h"
15 #include <gtkmm/separator.h>
17 #include "desktop.h"
18 #include "inkscape-application.h"
19 #include "inkscape-window.h"
20 #include "inkscape.h"
21 #include "preferences.h"
22 #include "object/sp-namedview.h"
23 #include "ui/dialog-run.h"
24 #include "ui/widget/template-list.h"
26 namespace Inkscape::UI {
28 NewFromTemplate::NewFromTemplate(Gtk::Window& parent) : Dialog(_("New From Template"), parent, true)
30 auto size = Preferences::get()->getPoint("/dialogs/now-from-template/size", Geom::Point(750, 500));
31 set_default_size(size.x(), size.y());
33 auto& templates = _list.templates();
34 templates.init(Extension::TEMPLATE_NEW_FROM, UI::Widget::TemplateList::All);
35 set_child(_list);
37 set_default_widget(_create_template_button);
39 _cancel.add_css_class("dialog-cmd-button");
40 _list.add_button(_cancel, UI::Widget::DocumentTemplates::End);
41 _list.add_button(_create_template_button, UI::Widget::DocumentTemplates::End);
43 _create_template_button.signal_clicked().connect([this]{ _createFromTemplate(); });
44 // deal with disabling "create" button as selection changes
45 _create_template_button.set_sensitive(_list.templates().has_selected_preset());
46 templates.connectItemSelected([this](int pos) { _create_template_button.set_sensitive(pos >= 0); });
47 templates.connectItemActivated(sigc::mem_fun(*this, &NewFromTemplate::_createFromTemplate));
48 templates.signal_switch_page().connect([this](auto& name) {
49 _create_template_button.set_sensitive(_list.templates().has_selected_preset());
50 });
52 // remember dialog size
53 signal_response().connect([this](int i) {
54 int width = 0, height = 0;
55 get_default_size(width, height);
56 if (width > 0 && height > 0) {
57 Preferences::get()->setPoint("/dialogs/now-from-template/size", Geom::Point(width, height));
59 // todo: remember current page and current template
61 });
63 _cancel.signal_clicked().connect([this]{ _onClose(Gtk::ResponseType::CANCEL); });
65 set_transient_for(parent);
66 set_visible();
67 _list.templates().focus();
70 void NewFromTemplate::_createFromTemplate()
72 SPDesktop *old_desktop = SP_ACTIVE_DESKTOP;
74 auto doc = _list.templates().new_document();
76 // Cancel button was pressed.
77 if (!doc)
78 return;
80 auto app = InkscapeApplication::instance();
81 auto new_desktop = app->desktopOpen(doc);
82 sp_namedview_window_from_document(new_desktop);
84 if (old_desktop)
85 old_desktop->clearWaitingCursor();
87 _onClose(0);
90 void NewFromTemplate::_onClose(int responseCode)
92 response(responseCode);
95 void NewFromTemplate::load_new_from_template(Gtk::Window& parent)
97 NewFromTemplate dl(parent);
98 UI::dialog_run(dl);
101 } // namespace