[niepce] Make expand work.



commit 108c260be8304aef27533f541fb79bc3a7c8d17b
Author: Hubert Figuière <hub figuiere net>
Date:   Sun Jun 23 20:31:07 2013 -0400

    Make expand work.
    
    *hint* can't expand treenode with no children

 src/niepce/ui/workspacecontroller.cpp |   57 ++++++++++++++-------------------
 src/niepce/ui/workspacecontroller.hpp |    3 ++
 2 files changed, 27 insertions(+), 33 deletions(-)
---
diff --git a/src/niepce/ui/workspacecontroller.cpp b/src/niepce/ui/workspacecontroller.cpp
index 53ab23c..8a86e10 100644
--- a/src/niepce/ui/workspacecontroller.cpp
+++ b/src/niepce/ui/workspacecontroller.cpp
@@ -226,11 +226,16 @@ void WorkspaceController::on_row_collapsed(const Gtk::TreeIter& iter,
 
 void WorkspaceController::add_keyword_item(const eng::Keyword::Ptr & k)
 {
-    auto iter = add_item(m_treestore, m_keywordsNode->children(),
+    auto children = m_keywordsNode->children();
+    bool was_empty = children.empty();
+    auto iter = add_item(m_treestore, children,
                          m_icons[ICON_KEYWORD], k->keyword(), k->id(),
                          KEYWORD_ITEM);
 //             getLibraryClient()->countKeyword(f->id());
     m_keywordsidmap[k->id()] = iter;
+    if(was_empty) {
+        expand_from_cfg("workspace_keywords_expanded", m_keywordsNode);
+    }
 }
 
 void WorkspaceController::add_folder_item(const eng::LibFolder::Ptr & f)
@@ -240,7 +245,9 @@ void WorkspaceController::add_folder_item(const eng::LibFolder::Ptr & f)
         icon_idx = ICON_TRASH;
         getLibraryClient()->set_trash_id(f->id());
     }
-    auto iter = add_item(m_treestore, m_folderNode->children(),
+    auto children = m_folderNode->children();
+    bool was_empty = children.empty();
+    auto iter = add_item(m_treestore, children,
                          m_icons[icon_idx],
                          f->name(), f->id(), FOLDER_ITEM);
     if(f->is_expanded()) {
@@ -248,6 +255,10 @@ void WorkspaceController::add_folder_item(const eng::LibFolder::Ptr & f)
     }
     getLibraryClient()->countFolder(f->id());
     m_folderidmap[f->id()] = iter;
+    // expand if needed. Because Gtk is stupid and doesn't expand empty
+    if(was_empty) {
+        expand_from_cfg("workspace_folders_expanded", m_folderNode);
+    }
 }
 
 Gtk::TreeModel::iterator
@@ -321,42 +332,22 @@ Gtk::Widget * WorkspaceController::buildWidget(const Glib::RefPtr<Gtk::UIManager
     return m_widget;
 }
 
-void WorkspaceController::on_ready()
+/** Expand treenode from a cfg key */
+void WorkspaceController::expand_from_cfg(const char* key,
+                                          const Gtk::TreeIter& treenode)
 {
-    bool expanded = false;
     fwk::Configuration::Ptr cfg = getLibraryConfig();
 
-    // pre-expand
-    try {
-        expanded =
-            boost::lexical_cast<int>(cfg->getValue("workspace_folders_expanded",
-                                                      "1"));
-        if(expanded) {
-            DBG_ASSERT(m_treestore->iter_is_valid(m_folderNode), "iter not valid");
-            expanded = m_librarytree.expand_row(m_treestore->get_path(m_folderNode),
-                                                false);
-            DBG_OUT("expanded %d", expanded);
-        }
-        expanded =
-            boost::lexical_cast<int>(cfg->getValue("workspace_projects_expanded",
-                                                      "0"));
-        if(expanded) {
-            m_librarytree.expand_row(m_treestore->get_path(m_projectNode),
-                                     true);
-        }
-        expanded =
-            boost::lexical_cast<int>(cfg->getValue("workspace_keywords_expanded",
-                                                      "0"));
-        if(expanded) {
-            m_librarytree.expand_row(m_treestore->get_path(m_keywordsNode),
-                                     true);
-        }
+    bool expanded =
+        boost::lexical_cast<int>(cfg->getValue(key, "1"));
+    if(expanded) {
+        m_librarytree.expand_row(m_treestore->get_path(treenode),
+                                 false);
     }
-    catch(const std::exception &e) {
-        ERR_OUT("error: %s", e.what());
-    }
-
+}
 
+void WorkspaceController::on_ready()
+{
     libraryclient::LibraryClient::Ptr libraryClient = getLibraryClient();
     if(libraryClient)
     {
diff --git a/src/niepce/ui/workspacecontroller.hpp b/src/niepce/ui/workspacecontroller.hpp
index ae3ef94..d69fdfd 100644
--- a/src/niepce/ui/workspacecontroller.hpp
+++ b/src/niepce/ui/workspacecontroller.hpp
@@ -114,6 +114,9 @@ private:
                                       const Glib::RefPtr<Gdk::Pixbuf> & icon,
                                       const Glib::ustring & label, 
                                       eng::library_id_t id, int type) const;
+
+    void expand_from_cfg(const char* key, const Gtk::TreeIter& treenode);
+
     enum {
         ICON_FOLDER = 0,
         ICON_PROJECT,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]