diff options
| author | Adrian Boguszewski <adrbogus1@student.pg.gda.pl> | 2016-03-11 01:06:39 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marcjeanmougin@free.fr> | 2016-03-11 01:06:39 +0000 |
| commit | 43884ced57f56cf41ad2d7fac3a8f5ba87f78276 (patch) | |
| tree | 0710dc639779467aa9140c6933846ba4da17a594 | |
| parent | Displays filename instead of blank string in unnamed palettes (diff) | |
| download | inkscape-43884ced57f56cf41ad2d7fac3a8f5ba87f78276.tar.gz inkscape-43884ced57f56cf41ad2d7fac3a8f5ba87f78276.zip | |
Improvements on the "new from template" dialog
-> greyed buttons when no dialogs selected (bug 1363450)
-> selected template deselects when filtered out
-> filtering down to 1 template selects it
-> selected template keeps looking selected when filtered
Fixed bugs:
- https://launchpad.net/bugs/1363450
(bzr r14698)
| -rw-r--r-- | src/ui/dialog/new-from-template.cpp | 18 | ||||
| -rw-r--r-- | src/ui/dialog/new-from-template.h | 6 | ||||
| -rw-r--r-- | src/ui/dialog/template-load-tab.cpp | 38 | ||||
| -rw-r--r-- | src/ui/dialog/template-load-tab.h | 4 | ||||
| -rw-r--r-- | src/ui/dialog/template-widget.cpp | 26 | ||||
| -rw-r--r-- | src/ui/dialog/template-widget.h | 1 |
6 files changed, 70 insertions, 23 deletions
diff --git a/src/ui/dialog/new-from-template.cpp b/src/ui/dialog/new-from-template.cpp index e30b148bb..74ec7111e 100644 --- a/src/ui/dialog/new-from-template.cpp +++ b/src/ui/dialog/new-from-template.cpp @@ -29,10 +29,12 @@ NewFromTemplate::NewFromTemplate() 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 @@ NewFromTemplate::NewFromTemplate() _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(); } diff --git a/src/ui/dialog/new-from-template.h b/src/ui/dialog/new-from-template.h index 2b40af2a6..c0b65affb 100644 --- a/src/ui/dialog/new-from-template.h +++ b/src/ui/dialog/new-from-template.h @@ -27,11 +27,13 @@ class NewFromTemplate : public Gtk::Dialog 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(); diff --git a/src/ui/dialog/template-load-tab.cpp b/src/ui/dialog/template-load-tab.cpp index fca1f7b30..7eb04ff79 100644 --- a/src/ui/dialog/template-load-tab.cpp +++ b/src/ui/dialog/template-load-tab.cpp @@ -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 @@ void TemplateLoadTab::_displayTemplateInfo() 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::_keywordSelected() void TemplateLoadTab::_refreshTemplatesList() { - _tlist_store->clear(); - + _tlist_store->clear(); + switch (_current_search_type){ case ALL :{ - for (std::map<Glib::ustring, TemplateData>::iterator it = _tdata.begin() ; it != _tdata.end() ; ++it) { Gtk::TreeModel::iterator iter = _tlist_store->append(); Gtk::TreeModel::Row row = *iter; @@ -160,7 +161,7 @@ void TemplateLoadTab::_refreshTemplatesList() } break; } - + case LIST_KEYWORD: { for (std::map<Glib::ustring, TemplateData>::iterator it = _tdata.begin() ; it != _tdata.end() ; ++it) { if (it->second.keywords.count(_current_keyword.lowercase()) != 0){ @@ -171,10 +172,10 @@ void TemplateLoadTab::_refreshTemplatesList() } break; } - + case USER_SPECIFIED : { for (std::map<Glib::ustring, TemplateData>::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,27 @@ void TemplateLoadTab::_refreshTemplatesList() break; } } + + // reselect item + 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 = new Gtk::TreeIter(it); + break; + } + } + if (_tlist_store->children().size() == 1) { + item_to_select = new Gtk::TreeIter(_tlist_store->children().begin()); + } + if (item_to_select) { + _tlist_view.get_selection()->select(*item_to_select); + delete item_to_select; + } else { + _current_template = ""; + _info_widget->clear(); + _parent_widget->setCreateButtonSensitive(false); + } } diff --git a/src/ui/dialog/template-load-tab.h b/src/ui/dialog/template-load-tab.h index 920ae6ca2..d11c4c77f 100644 --- a/src/ui/dialog/template-load-tab.h +++ b/src/ui/dialog/template-load-tab.h @@ -28,6 +28,7 @@ namespace Inkscape { namespace UI { class TemplateWidget; +class NewFromTemplate; class TemplateLoadTab : public Gtk::HBox { @@ -47,7 +48,7 @@ public: Inkscape::Extension::Effect *tpl_effect; }; - TemplateLoadTab(); + TemplateLoadTab(NewFromTemplate* parent); virtual ~TemplateLoadTab(); virtual void createTemplate(); @@ -95,6 +96,7 @@ private: }; SearchType _current_search_type; + NewFromTemplate* _parent_widget; void _getDataFromNode(Inkscape::XML::Node *, TemplateData &); void _getProceduralTemplates(); diff --git a/src/ui/dialog/template-widget.cpp b/src/ui/dialog/template-widget.cpp index eff75b311..0d110d853 100644 --- a/src/ui/dialog/template-widget.cpp +++ b/src/ui/dialog/template-widget.cpp @@ -56,6 +56,7 @@ TemplateWidget::TemplateWidget() _more_info_button.signal_clicked().connect( sigc::mem_fun(*this, &TemplateWidget::_displayTemplateDetails)); + _more_info_button.set_sensitive(false); } @@ -85,14 +86,12 @@ void TemplateWidget::create() 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,17 +102,26 @@ void TemplateWidget::display(TemplateLoadTab::TemplateData data) _preview_render.showImage(gPath); _preview_render.show(); } - - 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(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; + } + _more_info_button.set_sensitive(false); +} void TemplateWidget::_displayTemplateDetails() { diff --git a/src/ui/dialog/template-widget.h b/src/ui/dialog/template-widget.h index bb35d26a0..13488089c 100644 --- a/src/ui/dialog/template-widget.h +++ b/src/ui/dialog/template-widget.h @@ -28,6 +28,7 @@ public: TemplateWidget (); void create(); void display(TemplateLoadTab::TemplateData); + void clear(); private: TemplateLoadTab::TemplateData _current_template; |
