From 434bc94a17b4912e31e78cd7913e169bff1295d9 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Wed, 8 Nov 2017 23:47:43 +0100 Subject: Now symbols are sorted --- src/ui/dialog/symbols.cpp | 33 ++++++++++++++++++++------------- src/ui/dialog/symbols.h | 6 +++--- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index c04b8bcc2..aef7948d8 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -828,7 +828,7 @@ SymbolsDialog::getSymbolsSet(Glib::ustring title) for(auto const &symbol_document_map : symbol_sets) { symbol_set->append(symbol_document_map.first); } - symbol_set->set_active_text(new_title); + symbol_set->set_active_text(title); sensitive = true; return std::make_pair(title, symbol_sets[title]); } @@ -873,7 +873,7 @@ SymbolsDialog::getSymbolsSet(Glib::ustring title) return std::make_pair(new_title, symbol_doc); } -void SymbolsDialog::symbolsInDocRecursive (SPObject *r, std::vector > &l, Glib::ustring doc_title) +void SymbolsDialog::symbolsInDocRecursive (SPObject *r, std::map > &l, Glib::ustring doc_title) { if(!r) return; @@ -882,19 +882,24 @@ void SymbolsDialog::symbolsInDocRecursive (SPObject *r, std::vector(r) ) { - l.push_back(std::make_pair(doc_title,dynamic_cast(r))); + if ( dynamic_cast(r) && r->title()) { + Glib::ustring current = symbol_set->get_active_text(); + if (current == ALLDOCS) { + l[doc_title + r->title()] = std::make_pair(doc_title,dynamic_cast(r)); + } else { + l[r->title()] = std::make_pair(doc_title,dynamic_cast(r)); + } } for (auto& child: r->children) { symbolsInDocRecursive(&child, l, doc_title); } } -std::vector > +std::map > SymbolsDialog::symbolsInDoc( SPDocument* symbol_document, Glib::ustring doc_title) { - std::vector > l; + std::map > l; if (symbol_document) { symbolsInDocRecursive (symbol_document->getRoot(), l , doc_title); } @@ -999,8 +1004,8 @@ bool SymbolsDialog::callbackSymbols(){ if (l.size()) { showOverlay(); for (auto symbol_data = l.begin(); symbol_data != l.end();) { - Glib::ustring doc_title = symbol_data->first; - SPSymbol * symbol = symbol_data->second; + Glib::ustring doc_title = symbol_data->second.first; + SPSymbol * symbol = symbol_data->second.second; counter_symbols ++; gchar const *symbol_title_char = symbol->title(); gchar const *symbol_desc_char = symbol->description(); @@ -1116,8 +1121,10 @@ void SymbolsDialog::addSymbols() { continue; } Glib::ustring doc_title = documentTitle(symbol_document); - std::vector > l_tmp = symbolsInDoc(symbol_document, doc_title); - l.insert(l.end(), std::make_move_iterator(l_tmp.begin()), std::make_move_iterator(l_tmp.end())); + std::map > l_tmp = symbolsInDoc(symbol_document, doc_title); + for(auto &p : l_tmp ) { + l[p.first] = p.second; + } l_tmp.clear(); } counter_symbols = 0; @@ -1310,11 +1317,11 @@ gchar const *buffer = ""; SPDocument* doc = SPDocument::createNewDocFromMem( buffer, strlen(buffer), FALSE ); - std::vector > symbols_data = symbolsInDoc(doc, "Overlay Doc"); + std::map > symbols_data = symbolsInDoc(doc, "Overlay Doc"); Glib::RefPtr pixbuf(NULL); for(auto data:symbols_data) { - Glib::ustring doc_title = data.first; - SPSymbol * symbol = data.second; + Glib::ustring doc_title = data.second.first; + SPSymbol * symbol = data.second.second; if (!strcmp(symbol->getId(), icon_title)) { pixbuf = drawSymbol(symbol, psize); return pixbuf; diff --git a/src/ui/dialog/symbols.h b/src/ui/dialog/symbols.h index 2fcdcfe72..f387dde51 100644 --- a/src/ui/dialog/symbols.h +++ b/src/ui/dialog/symbols.h @@ -86,8 +86,8 @@ private: std::pair getSymbolsSet(Glib::ustring title); void addSymbol( SPObject* symbol, Glib::ustring doc_title); SPDocument* symbolsPreviewDoc(); - void symbolsInDocRecursive (SPObject *r, std::vector > &l, Glib::ustring doc_title); - std::vector > symbolsInDoc( SPDocument* document, Glib::ustring doc_title); + void symbolsInDocRecursive (SPObject *r, std::map > &l, Glib::ustring doc_title); + std::map > symbolsInDoc( SPDocument* document, Glib::ustring doc_title); void useInDoc(SPObject *r, std::vector &l); std::vector useInDoc( SPDocument* document); void beforeSearch(GdkEventKey* evt); @@ -106,7 +106,7 @@ private: Glib::RefPtr getOverlay(Gtk::Image* image, gchar const * icon_title, unsigned psize); /* Keep track of all symbol template documents */ std::map symbol_sets; - std::vector > l; + std::map > l; // Index into sizes which is selected int pack_size; // Scale factor -- cgit v1.2.3