From e5c8e0d9752cfa6de4e6e0e8314ac572a9d113b1 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 13 Dec 2006 07:09:22 +0000 Subject: Path parent/child bug fixes, added unit tests. Breadcrumb/browsing/subsubpatch bug fixes. Fixed about window icon and glade error messages. git-svn-id: http://svn.drobilla.net/lad/ingen@223 a436a847-0d15-0410-975c-d299462d15a1 --- src/progs/ingenuity/BreadCrumbBox.cpp | 49 +++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 19 deletions(-) (limited to 'src/progs/ingenuity/BreadCrumbBox.cpp') diff --git a/src/progs/ingenuity/BreadCrumbBox.cpp b/src/progs/ingenuity/BreadCrumbBox.cpp index 88772953..eca8a761 100644 --- a/src/progs/ingenuity/BreadCrumbBox.cpp +++ b/src/progs/ingenuity/BreadCrumbBox.cpp @@ -73,19 +73,21 @@ BreadCrumbBox::build(Path path, SharedPtr view) // Moving to a child of the full path, just append crumbs (preserve view cache) } else if (_breadcrumbs.size() > 0 && (path.is_child_of(_full_path))) { - string postfix = path.substr(_full_path.length()); - while (postfix.length() > 0) { - const string name = postfix.substr(0, postfix.find("/")); - cerr << "NAME: " << name << endl; + + string suffix = path.substr(_full_path.length()); + while (suffix.length() > 0) { + if (suffix[0] == '/') + suffix = suffix.substr(1); + const string name = suffix.substr(0, suffix.find("/")); _full_path = _full_path.base() + name; BreadCrumb* but = create_crumb(_full_path, view); - pack_end(*but, false, false, 1); + pack_start(*but, false, false, 1); _breadcrumbs.push_back(but); but->show(); - if (postfix.find("/") == string::npos) + if (suffix.find("/") == string::npos) break; else - postfix = postfix.substr(postfix.find("/")+1); + suffix = suffix.substr(suffix.find("/")+1); } for (std::list::iterator i = _breadcrumbs.begin(); i != _breadcrumbs.end(); ++i) @@ -106,21 +108,30 @@ BreadCrumbBox::build(Path path, SharedPtr view) _breadcrumbs.clear(); // Add root - BreadCrumb* but = create_crumb("/", view); - pack_start(*but, false, false, 1); - _breadcrumbs.push_front(but); - but->set_active(but->path() == _active_path); - - // Add the others - while (path != "/") { - BreadCrumb* but = create_crumb(path, view); + BreadCrumb* root_but = create_crumb("/", view); + pack_start(*root_but, false, false, 1); + _breadcrumbs.push_front(root_but); + root_but->set_active(root_but->path() == _active_path); + + Path working_path = "/"; + string suffix = path.substr(1); + while (suffix.length() > 0) { + if (suffix[0] == '/') + suffix = suffix.substr(1); + const string name = suffix.substr(0, suffix.find("/")); + working_path = working_path.base() + name; + BreadCrumb* but = create_crumb(working_path, view); pack_start(*but, false, false, 1); - _breadcrumbs.push_front(but); - but->set_active(but->path() == _active_path); - path = path.parent(); + _breadcrumbs.push_back(but); + but->set_active(working_path == _active_path); + but->show(); + if (suffix.find("/") == string::npos) + break; + else + suffix = suffix.substr(suffix.find("/")+1); } } - + _enable_signal = old_enable_signal; } -- cgit v1.2.1