1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * @brief New From Template main dialog - implementation
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>
18 #include "inkscape-application.h"
19 #include "inkscape-window.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
);
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());
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
63 _cancel
.signal_clicked().connect([this]{ _onClose(Gtk::ResponseType::CANCEL
); });
65 set_transient_for(parent
);
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.
80 auto app
= InkscapeApplication::instance();
81 auto new_desktop
= app
->desktopOpen(doc
);
82 sp_namedview_window_from_document(new_desktop
);
85 old_desktop
->clearWaitingCursor();
90 void NewFromTemplate::_onClose(int responseCode
)
92 response(responseCode
);
95 void NewFromTemplate::load_new_from_template(Gtk::Window
& parent
)
97 NewFromTemplate
dl(parent
);