summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2017-10-20 22:20:40 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2017-10-20 22:20:40 +0000
commit4bcc974f13115b19f2b320b98355ef1431e4f9ed (patch)
treeb5b3d6339653a19516829b89aa09a882157d00be /src
parentFiz the MR note note_44059492. Thanks Eduard (diff)
downloadinkscape-4bcc974f13115b19f2b320b98355ef1431e4f9ed.tar.gz
inkscape-4bcc974f13115b19f2b320b98355ef1431e4f9ed.zip
Progress Bar workinggit add .git add .
Diffstat (limited to 'src')
-rw-r--r--src/ui/dialog/symbols.cpp96
-rw-r--r--src/ui/dialog/symbols.h7
2 files changed, 57 insertions, 46 deletions
diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp
index 7f2c69ffd..eb787387a 100644
--- a/src/ui/dialog/symbols.cpp
+++ b/src/ui/dialog/symbols.cpp
@@ -198,7 +198,6 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
tools->pack_start(* search, Gtk::PACK_SHRINK);
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
@@ -276,6 +275,8 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
/**********************************************************/
sensitive = true;
+ processed = false;
+ search_str = "";
currentDesktop = SP_ACTIVE_DESKTOP;
currentDocument = currentDesktop->getDocument();
@@ -303,7 +304,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
sigc::connection desktopChangeConn =
deskTrack.connectDesktopChanged( sigc::mem_fun(*this, &SymbolsDialog::setTargetDesktop) );
instanceConns.push_back( desktopChangeConn );
-
+ Glib::signal_idle().connect( sigc::mem_fun(*this, &SymbolsDialog::parse_documents) );
deskTrack.connect(GTK_WIDGET(gobj()));
}
@@ -375,7 +376,7 @@ void SymbolsDialog::rebuild() {
removeSymbol->set_sensitive( false );
}
if (symbolSet->get_active_text() == "Search") {
- find_symbols_overloaded();
+ find_symbols();
} else {
add_symbols( symbol_document );
}
@@ -787,68 +788,76 @@ void SymbolsDialog::add_symbols( SPDocument* symbol_document ) {
}
}
-void SymbolsDialog::find_symbols(GdkEventKey* evt) {
- if (evt->keyval != GDK_KEY_Return) {
- return;
- }
- find_symbols_overloaded();
-}
-
void SymbolsDialog::prepare_find_symbols(GdkEventKey* evt) {
if (evt->keyval != GDK_KEY_Return) {
return;
}
progressbar->set_fraction(0.0);
search_str = search->get_text().lowercase();
- search->set_text(_("Loading..."));
+ search->set_text(_("Searching..."));
+ if(processed) {
+ find_symbols();
+ }
}
-void SymbolsDialog::find_symbols_overloaded() {
- if (search_str.empty()) {
- return;
+bool SymbolsDialog::parse_documents(){
+ if (search->get_text() != _("Searching...")) {
+ return true;
}
- store->clear();
- std::map<Glib::ustring, SPDocument*> symbolSetsCopy = symbolSets;
+ size_t counter = 0;
+ for(auto const &symbol_document_map : symbolSets) {
+ ++counter;
+ SPDocument* symbol_document = symbol_document_map.second;
+ if (symbol_document) {
+ continue;
+ }
+ get_symbols(symbol_document_map.first);
+ progressbar->set_fraction(((100.0/number_docs) * counter)/100.0);
+ return true;
+ }
+ find_symbols();
+ processed = true;
+ progressbar->set_fraction(1.0);
+ return false;
+}
+
+void SymbolsDialog::find_symbols() {
bool icons_found = false;
SPDocument* searchdoc;
size_t counter = 0;
- for(auto const &symbol_document_map : symbolSetsCopy) {
+ store->clear();
+ for(auto const &symbol_document_map : symbolSets) {
++counter;
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];
+ return;
}
+ Glib::ustring doc_title = symbol_document_map.first;
if (doc_title == "Search") {
searchdoc = symbol_document;
continue;
}
- if (symbol_document) {
- progressbar->set_fraction(((100.0/number_docs) * counter)/100.0);
- progressbar->set_text(doc_title);
- std::vector<SPSymbol*> l = symbols_in_doc(symbol_document);
- for(auto symbol:l) {
- gchar const *symbol_title_char = symbol->title();
- gchar const *symbol_desc_char = symbol->description();
- if (symbol_title_char) {
- bool found = false;
- Glib::ustring symbol_title = Glib::ustring(symbol_title_char).lowercase();
- auto pos = symbol_title.rfind(search_str);
+ std::vector<SPSymbol*> l = symbols_in_doc(symbol_document);
+ for(auto symbol:l) {
+ gchar const *symbol_title_char = symbol->title();
+ gchar const *symbol_desc_char = symbol->description();
+ if (symbol_title_char) {
+ bool found = false;
+ Glib::ustring symbol_title = Glib::ustring(symbol_title_char).lowercase();
+ auto pos = symbol_title.rfind(search_str);
+ if (pos != std::string::npos) {
+ found = true;
+ }
+ if (!found && symbol_desc_char) {
+ Glib::ustring symbol_desc = Glib::ustring(symbol_desc_char).lowercase();
+ auto pos = symbol_desc.rfind(search_str);
if (pos != std::string::npos) {
found = true;
}
- if (!found && symbol_desc_char) {
- Glib::ustring symbol_desc = Glib::ustring(symbol_desc_char).lowercase();
- auto pos = symbol_desc.rfind(search_str);
- if (pos != std::string::npos) {
- found = true;
- }
- }
- if (symbol && (search_str == "*" || found)) {
- add_symbol( symbol, doc_title);
- icons_found = true;
- }
+ }
+ if (symbol && (search_str == "*" || found)) {
+ add_symbol( symbol, doc_title);
+ icons_found = true;
}
}
}
@@ -858,8 +867,7 @@ void SymbolsDialog::find_symbols_overloaded() {
}
symbolSet->set_active_text(_("Search"));
search->set_text(search_str);
- symbolSetsCopy.clear();
- progressbar->set_fraction(1.0);
+ dynamic_cast<Gtk::Widget *>(progress)->hide();
}
void SymbolsDialog::add_symbol( SPObject* symbol, Glib::ustring doc_title) {
diff --git a/src/ui/dialog/symbols.h b/src/ui/dialog/symbols.h
index 1b7d04acd..23a81c68c 100644
--- a/src/ui/dialog/symbols.h
+++ b/src/ui/dialog/symbols.h
@@ -91,9 +91,9 @@ private:
std::vector<SPSymbol*> symbols_in_doc( SPDocument* document);
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 prepare_find_symbols(GdkEventKey* evt);
- void find_symbols_overloaded();
+ void find_symbols();
+ bool parse_documents();
gchar const* style_from_use( gchar const* id, SPDocument* document);
Glib::RefPtr<Gdk::Pixbuf> draw_symbol(SPObject *symbol);
@@ -108,6 +108,9 @@ private:
int scale_factor;
bool sensitive;
+
+ bool processed;
+
size_t number_docs;
Glib::RefPtr<Gtk::ListStore> store;