diff options
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/dialog/symbols.cpp | 91 | ||||
| -rw-r--r-- | src/ui/dialog/symbols.h | 6 |
2 files changed, 39 insertions, 58 deletions
diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 00796e096..a098d64c1 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -197,8 +197,9 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : search->set_tooltip_text(_("Return to start search. Use * to get all symbols (slow).")); tools->pack_start(* search, Gtk::PACK_SHRINK); - search->signal_key_press_event().connect_notify(sigc::mem_fun(*this, &SymbolsDialog::find_symbols)); - + search->signal_key_press_event().connect_notify(sigc::mem_fun(*this, &SymbolsDialog::prepare_find_symbols)); + search->signal_key_release_event().connect_notify(sigc::mem_fun(*this, &SymbolsDialog::find_symbols)); + // Pack size (controls display area) pack_size = 2; // Default 32px @@ -267,7 +268,6 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : /**********************************************************/ sensitive = true; - finded = false; currentDesktop = SP_ACTIVE_DESKTOP; currentDocument = currentDesktop->getDocument(); @@ -368,7 +368,7 @@ void SymbolsDialog::rebuild() { removeSymbol->set_sensitive( false ); } if (symbolSet->get_active_text() == "Search") { - find_symbols_overload(); + find_symbols_overloaded(); } else { add_symbols( symbol_document ); } @@ -781,67 +781,48 @@ void SymbolsDialog::find_symbols(GdkEventKey* evt) { if (evt->keyval != GDK_KEY_Return) { return; } - find_symbols_overload(); + find_symbols_overloaded(); } -void SymbolsDialog::update_search_box(gpointer data) -{ - Glib::ustring doc_title = *reinterpret_cast<Glib::ustring *>(data); - search->set_text(doc_title); +void SymbolsDialog::prepare_find_symbols(GdkEventKey* evt) { + if (evt->keyval != GDK_KEY_Return) { + return; + } + search_str = search->get_text().lowercase(); + search->set_text(_("Loading...")); + } -void SymbolsDialog::find_symbols_overload() { - Glib::ustring title = search->get_text(); - if (title.empty()) { +void SymbolsDialog::find_symbols_overloaded() { + if (search_str.empty()) { return; } - if (!finded) { - Gtk::Dialog search_dialog(_("Slow process please read")); - search_dialog.set_border_width(10); - Gtk::Label explanation; - explanation.set_markup(_("First time search is slow, next searchs are fast")); - explanation.set_line_wrap(true); - Gtk::Box *content = search_dialog.get_content_area(); - content->pack_start(explanation, false, false, 5); - Gtk::Button *ko_button = search_dialog.add_button(_("Cancel"), GTK_RESPONSE_CLOSE); - ko_button->grab_focus(); - Gtk::Button *ok_button = search_dialog.add_button(_("Search"), GTK_RESPONSE_ACCEPT); - ok_button->grab_focus(); - ko_button->grab_focus(); - search_dialog.show_all_children(); - int status = search_dialog.run(); - if ( status == GTK_RESPONSE_ACCEPT ) { - finded = true; + store->clear(); + std::map<Glib::ustring, SPDocument*> symbolSetsCopy = symbolSets; + for(auto const &symbol_document_map : symbolSetsCopy) { + SPDocument* symbol_document = symbol_document_map.second; + Glib::ustring doc_title = symbol_document_map.first; + if (!symbol_document) { + doc_title = get_symbols(symbol_document_map.first); + symbol_document = symbolSets[doc_title]; } - } - if (finded) { - store->clear(); - std::map<Glib::ustring, SPDocument*> symbolSetsCopy = symbolSets; - for(auto const &symbol_document_map : symbolSetsCopy) { - SPDocument* symbol_document = symbol_document_map.second; - Glib::ustring doc_title = symbol_document_map.first; - if (!symbol_document) { - doc_title = get_symbols(symbol_document_map.first); - symbol_document = symbolSets[doc_title]; - } - if (symbol_document) { - std::vector<SPSymbol*> l = symbols_in_doc(symbol_document); - for(auto symbol:l) { - gchar const *symbol_title_char = symbol->title(); - if (symbol_title_char) { - Glib::ustring symbol_title = Glib::ustring(symbol_title_char); - auto pos = symbol_title.rfind(title); - if (symbol && (title == "*" || pos != std::string::npos)) { - add_symbol( symbol, doc_title); - } + if (symbol_document) { + std::vector<SPSymbol*> l = symbols_in_doc(symbol_document); + for(auto symbol:l) { + gchar const *symbol_title_char = symbol->title(); + if (symbol_title_char) { + Glib::ustring symbol_title = Glib::ustring(symbol_title_char).lowercase(); + auto pos = symbol_title.rfind(search_str); + if (symbol && (search_str == "*" || pos != std::string::npos)) { + add_symbol( symbol, doc_title); } } } } - search->set_text(title); - symbolSet->set_active_text(_("Search")); - symbolSetsCopy.clear(); } + search->set_text(search_str); + symbolSet->set_active_text(_("Search")); + symbolSetsCopy.clear(); } void SymbolsDialog::add_symbol( SPObject* symbol, Glib::ustring doc_title) { @@ -855,9 +836,9 @@ void SymbolsDialog::add_symbol( SPObject* symbol, Glib::ustring doc_title) { } Glib::ustring symbol_title = Glib::Markup::escape_text(Glib::ustring( g_dpgettext2(NULL, "Symbol", title) )); if (doc_title.empty()) { - symbol_title = symbol_title + Glib::Markup::escape_text(Glib::ustring(" [") +_("Current Document") + Glib::ustring("]")); + symbol_title = symbol_title + Glib::Markup::escape_text(Glib::ustring(g_dpgettext2(NULL, "Symbol", (Glib::ustring(" [") +_("Current Document") + Glib::ustring("]")).c_str()))); } else { - symbol_title = symbol_title + Glib::Markup::escape_text(Glib::ustring(" [") + doc_title + Glib::ustring("]")); + symbol_title = symbol_title + Glib::Markup::escape_text(Glib::ustring(g_dpgettext2(NULL, "Symbol", (Glib::ustring(" [") + doc_title + Glib::ustring("]")).c_str()))); } Glib::RefPtr<Gdk::Pixbuf> pixbuf = draw_symbol( symbol ); diff --git a/src/ui/dialog/symbols.h b/src/ui/dialog/symbols.h index 9a28da1a0..e2e467cd6 100644 --- a/src/ui/dialog/symbols.h +++ b/src/ui/dialog/symbols.h @@ -76,7 +76,6 @@ private: void selectionChanged(Inkscape::Selection *selection); void documentReplaced(SPDesktop *desktop, SPDocument *document); SPDocument* selectedSymbols(bool ignorecurrent = false); - void update_search_box(gpointer data); Glib::ustring selectedSymbolId(); Glib::ustring selectedSymbolDocTitle(); void iconChanged(); @@ -93,7 +92,8 @@ private: void use_in_doc_recursive(SPObject *r, std::vector<SPUse*> &l); std::vector<SPUse*> use_in_doc( SPDocument* document); void find_symbols(GdkEventKey* evt); - void find_symbols_overload(); + void prepare_find_symbols(GdkEventKey* evt); + void find_symbols_overloaded(); gchar const* style_from_use( gchar const* id, SPDocument* document); Glib::RefPtr<Gdk::Pixbuf> draw_symbol(SPObject *symbol); @@ -110,8 +110,8 @@ private: Glib::RefPtr<Gtk::ListStore> store; Gtk::ComboBoxText* symbolSet; bool sensitive; - bool finded; Gtk::SearchEntry* search; + Glib::ustring search_str; Gtk::IconView* iconView; Gtk::Button* addSymbol; Gtk::Button* removeSymbol; |
