=== modified file 'src/ui/dialog/new-from-template.cpp' --- src/ui/dialog/new-from-template.cpp 2014-08-24 10:37:18 +0000 +++ src/ui/dialog/new-from-template.cpp 2016-03-10 23:15:07 +0000 @@ -29,10 +29,12 @@ set_title(_("New From Template")); resize(400, 400); + _main_widget = new TemplateLoadTab(this); + #if WITH_GTKMM_3_0 - get_content_area()->pack_start(_main_widget); + get_content_area()->pack_start(*_main_widget); #else - get_vbox()->pack_start(_main_widget); + get_vbox()->pack_start(*_main_widget); #endif Gtk::Alignment *align; @@ -49,14 +51,24 @@ _create_template_button.signal_clicked().connect( sigc::mem_fun(*this, &NewFromTemplate::_createFromTemplate)); + _create_template_button.set_sensitive(false); show_all(); } +NewFromTemplate::~NewFromTemplate() +{ + delete _main_widget; +} + +void NewFromTemplate::setCreateButtonSensitive(bool value) +{ + _create_template_button.set_sensitive(value); +} void NewFromTemplate::_createFromTemplate() { - _main_widget.createTemplate(); + _main_widget->createTemplate(); _onClose(); } === modified file 'src/ui/dialog/new-from-template.h' --- src/ui/dialog/new-from-template.h 2014-01-15 15:26:12 +0000 +++ src/ui/dialog/new-from-template.h 2016-03-10 23:15:07 +0000 @@ -27,11 +27,13 @@ friend class TemplateLoadTab; public: static void load_new_from_template(); - + void setCreateButtonSensitive(bool value); + virtual ~NewFromTemplate(); + private: NewFromTemplate(); Gtk::Button _create_template_button; - TemplateLoadTab _main_widget; + TemplateLoadTab* _main_widget; void _createFromTemplate(); void _onClose(); === modified file 'src/ui/dialog/template-load-tab.cpp' --- src/ui/dialog/template-load-tab.cpp 2014-10-08 02:22:03 +0000 +++ src/ui/dialog/template-load-tab.cpp 2016-03-10 23:20:31 +0000 @@ -35,10 +35,11 @@ namespace Inkscape { namespace UI { -TemplateLoadTab::TemplateLoadTab() +TemplateLoadTab::TemplateLoadTab(NewFromTemplate* parent) : _current_keyword("") , _keywords_combo(true) , _current_search_type(ALL) + , _parent_widget(parent) { set_border_width(10); @@ -94,7 +95,8 @@ if (templateSelectionRef->get_selected()) { _current_template = (*templateSelectionRef->get_selected())[_columns.textValue]; - _info_widget->display(_tdata[_current_template]); + _info_widget->display(_tdata[_current_template]); + _parent_widget->setCreateButtonSensitive(true); } } @@ -148,11 +150,10 @@ void TemplateLoadTab::_refreshTemplatesList() { - _tlist_store->clear(); - + _tlist_store->clear(); + switch (_current_search_type){ case ALL :{ - for (std::map::iterator it = _tdata.begin() ; it != _tdata.end() ; ++it) { Gtk::TreeModel::iterator iter = _tlist_store->append(); Gtk::TreeModel::Row row = *iter; @@ -160,7 +161,7 @@ } break; } - + case LIST_KEYWORD: { for (std::map::iterator it = _tdata.begin() ; it != _tdata.end() ; ++it) { if (it->second.keywords.count(_current_keyword.lowercase()) != 0){ @@ -171,10 +172,10 @@ } break; } - + case USER_SPECIFIED : { for (std::map::iterator it = _tdata.begin() ; it != _tdata.end() ; ++it) { - if (it->second.keywords.count(_current_keyword.lowercase()) != 0 || + if (it->second.keywords.count(_current_keyword.lowercase()) != 0 || it->second.display_name.lowercase().find(_current_keyword.lowercase()) != Glib::ustring::npos || it->second.author.lowercase().find(_current_keyword.lowercase()) != Glib::ustring::npos || it->second.short_description.lowercase().find(_current_keyword.lowercase()) != Glib::ustring::npos || @@ -188,6 +189,25 @@ break; } } + + // reselect item + if (_current_template != "") { + Gtk::TreeIter* item_to_select = NULL; + for (Gtk::TreeModel::Children::iterator it = _tlist_store->children().begin(); it != _tlist_store->children().end(); ++it) { + Gtk::TreeModel::Row row = *it; + if (_current_template == row[_columns.textValue]) { + item_to_select = ⁢ + break; + } + } + if (item_to_select) { + _tlist_view.get_selection()->select(*item_to_select); + } else { + _current_template = ""; + _info_widget->clear(); + _parent_widget->setCreateButtonSensitive(false); + } + } } === modified file 'src/ui/dialog/template-load-tab.h' --- src/ui/dialog/template-load-tab.h 2013-12-27 16:23:21 +0000 +++ src/ui/dialog/template-load-tab.h 2016-03-10 23:15:07 +0000 @@ -28,6 +28,7 @@ namespace UI { class TemplateWidget; +class NewFromTemplate; class TemplateLoadTab : public Gtk::HBox { @@ -47,7 +48,7 @@ Inkscape::Extension::Effect *tpl_effect; }; - TemplateLoadTab(); + TemplateLoadTab(NewFromTemplate* parent); virtual ~TemplateLoadTab(); virtual void createTemplate(); @@ -95,6 +96,7 @@ }; SearchType _current_search_type; + NewFromTemplate* _parent_widget; void _getDataFromNode(Inkscape::XML::Node *, TemplateData &); void _getProceduralTemplates(); === modified file 'src/ui/dialog/template-widget.cpp' --- src/ui/dialog/template-widget.cpp 2014-12-21 21:58:32 +0000 +++ src/ui/dialog/template-widget.cpp 2016-03-10 23:15:07 +0000 @@ -56,6 +56,7 @@ _more_info_button.signal_clicked().connect( sigc::mem_fun(*this, &TemplateWidget::_displayTemplateDetails)); + _more_info_button.set_sensitive(false); } @@ -85,14 +86,12 @@ void TemplateWidget::display(TemplateLoadTab::TemplateData data) { + clear(); _current_template = data; _template_name_label.set_text(_current_template.display_name); _short_description_label.set_text(_current_template.short_description); - - _preview_render.hide(); - _preview_image.hide(); - + std::string imagePath = Glib::build_filename(Glib::path_get_dirname(_current_template.path), _current_template.preview_name); if (data.preview_name != ""){ _preview_image.set(imagePath); @@ -103,18 +102,27 @@ _preview_render.showImage(gPath); _preview_render.show(); } - + + if (data.is_procedural){ + _effect_prefs = data.tpl_effect->get_imp()->prefs_effect(data.tpl_effect, SP_ACTIVE_DESKTOP, NULL, NULL); + pack_start(*_effect_prefs); + } + _more_info_button.set_sensitive(true); +} + +void TemplateWidget::clear() +{ + _template_name_label.set_text(""); + _short_description_label.set_text(""); + _preview_render.hide(); + _preview_image.hide(); if (_effect_prefs != NULL){ remove (*_effect_prefs); _effect_prefs = NULL; } - if (data.is_procedural){ - _effect_prefs = data.tpl_effect->get_imp()->prefs_effect(data.tpl_effect, SP_ACTIVE_DESKTOP, NULL, NULL); - pack_start(*_effect_prefs); - } + _more_info_button.set_sensitive(false); } - void TemplateWidget::_displayTemplateDetails() { Glib::ustring message = _current_template.display_name + "\n\n"; === modified file 'src/ui/dialog/template-widget.h' --- src/ui/dialog/template-widget.h 2013-09-21 21:32:09 +0000 +++ src/ui/dialog/template-widget.h 2016-03-10 23:15:07 +0000 @@ -28,6 +28,7 @@ TemplateWidget (); void create(); void display(TemplateLoadTab::TemplateData); + void clear(); private: TemplateLoadTab::TemplateData _current_template;