# # # patch "src/GuitoneDriver.cpp" # from [fc2611f0e61aa9a2ff70c424f5e0068fcb5c4b91] # to [8dbb735dc9e81597e9067b8f75729ab20bf81c68] # # patch "src/model/Branches.cpp" # from [7434636b987b9c42b7383d73b08327eb4210aead] # to [1cdf76f9fd36b1008012543750606d8d40d5574f] # # patch "src/model/Branches.h" # from [c0cdd035892b0e3496cfd51b84dff2b278e59d8d] # to [282a518befacd48337105670f1a00fa89bb759d3] # # patch "src/util/TreeBuilder.cpp" # from [0e65c5a08084e12989c4e1d6b4a012dc4fbeee8e] # to [0505566d5bd338cf0ff59cc25be61d861644ad7f] # # patch "src/util/TreeBuilder.h" # from [d195b4bba70b39269efdf3e30314667df1236db3] # to [de247f223522318c2a48426553bbd374aec491e4] # # patch "src/view/dialogs/ChangesetBrowser.cpp" # from [bb5e47855f1f4aca426332d1eaec8335791b3fa6] # to [315941faeb63b5476667421a82985e0d13358802] # # patch "src/view/dialogs/CheckoutRevision.cpp" # from [0885555106b7b5d3ad632286b782f86763b09ad9] # to [4073ede5d48029eb24325788d05025d3734cfaa5] # # patch "src/view/dialogs/SelectRevision.cpp" # from [8300d701a7249245e851c34b13b4d55058aed0ac] # to [0b94e795626ab3b9461e25b2fd0a71867eec11d0] # # patch "src/view/mainwindows/DatabaseWindow.cpp" # from [62c0960b4f1f9e0f4528d402981cb911f9cc9c51] # to [2eaeb3de1cdce9efcb4049d3d1ef64f61f5f36bf] # # patch "src/view/mainwindows/WorkspaceWindow.cpp" # from [7bfa8963e4dc39d2a1d07eedc843b31dbd720162] # to [6d1c97beb8ef58c1c6567a24c57e6ae267267834] # ============================================================ --- src/GuitoneDriver.cpp fc2611f0e61aa9a2ff70c424f5e0068fcb5c4b91 +++ src/GuitoneDriver.cpp 8dbb735dc9e81597e9067b8f75729ab20bf81c68 @@ -25,6 +25,7 @@ #include "Message.h" #include +#include GuitoneDriver::GuitoneDriver(int & argc, char** argv) : GuitoneCore(argc, argv), dialogManager(0) ============================================================ --- src/model/Branches.cpp 7434636b987b9c42b7383d73b08327eb4210aead +++ src/model/Branches.cpp 1cdf76f9fd36b1008012543750606d8d40d5574f @@ -67,12 +67,7 @@ void Branches::processTaskResult(const M branches.setHorizontalHeaderItem(0, new QStandardItem(tr("Branches"))); if (tree) { - QStandardItem * root = new QStandardItem(); - root->setData("*", Qt::DisplayRole); - root->setData("*", Qt::ToolTipRole); - branches.appendRow(root); - - builder = new TreeBuilder(root, this); + builder = new TreeBuilder(branches.invisibleRootItem(), this); builder->addList(task->getDecodedOutput()); } else @@ -102,6 +97,20 @@ int Branches::columnCount(const QModelIn return branches.columnCount(); } +Qt::ItemFlags Branches::flags(const QModelIndex & index) const +{ + if (!index.isValid()) + return 0; + + QFlags flags = Qt::ItemIsEnabled; + if (rowCount(index) == 0) + { + flags |= Qt::ItemIsSelectable; + } + + return flags; +} + QVariant Branches::data(const QModelIndex & index, int role) const { QStandardItem * item = branchFromIndex(index); ============================================================ --- src/model/Branches.h c0cdd035892b0e3496cfd51b84dff2b278e59d8d +++ src/model/Branches.h 282a518befacd48337105670f1a00fa89bb759d3 @@ -35,6 +35,7 @@ public: // needed Qt Model methods QVariant data(const QModelIndex &, int) const; QVariant headerData(int, Qt::Orientation, int) const; + Qt::ItemFlags flags(const QModelIndex &) const; QModelIndex index(int, int, const QModelIndex &) const; QModelIndex parent(const QModelIndex &) const; int rowCount(const QModelIndex &) const; ============================================================ --- src/util/TreeBuilder.cpp 0e65c5a08084e12989c4e1d6b4a012dc4fbeee8e +++ src/util/TreeBuilder.cpp 0505566d5bd338cf0ff59cc25be61d861644ad7f @@ -17,6 +17,7 @@ ***************************************************************************/ #include "TreeBuilder.h" +#include "vocab.h" TreeBuilder::TreeBuilder(QStandardItem * r, QObject * parent) : QObject(parent), root(r), sep('.') {} @@ -25,48 +26,15 @@ QStandardItem * TreeBuilder::add(const Q QStandardItem * TreeBuilder::add(const QString & branch) { - if (branch != "") - { - return add(branch, root); - } - return NULL; + return add(branch, root); } -void TreeBuilder::addData(QStandardItem * child) -{ - QString branch; - QStandardItem * item = child; - QString text = child->data().toString(); - - if (text.right(1) == QString(sep)) - { - text = text.left(text.length() - 1) + "*"; - } - child->setText(text); - - while (item) - { - branch = item->data().toString() + branch; - item = item->parent(); - } - - if (branch.right(1) == QString(sep)) - { - branch = branch.left(branch.length() - 1) + "*"; - } - - child->setData(branch, Qt::ToolTipRole); -} - QStandardItem * TreeBuilder::add(const QString & branch, QStandardItem * parent) { - if (branch == "") - { - return NULL; - } + I(!branch.isEmpty()); int len = parent->rowCount(); - for(int index = 0; index < len; index++) + for (int index = 0; index < len; index++) { int pos = overlap(parent->child(index)->data().toString(), branch) + 1; if (pos) @@ -81,7 +49,7 @@ QStandardItem * TreeBuilder::add(const Q } else { - // We found a splitting point. Going to splitt the tree. + // We found a splitting point. Going to split the tree. // Get the old childs rows QList row = parent->child(index)->takeColumn(0); @@ -123,6 +91,42 @@ QStandardItem * TreeBuilder::add(const Q return it; } +void TreeBuilder::addList(const QString & branches) +{ + QStringList branchList = branches.split("\n", QString::SkipEmptyParts); + + foreach (const QString & branch, branchList) + { + add(branch); + } +} + +void TreeBuilder::addData(QStandardItem * child) +{ + QString branch; + QStandardItem * item = child; + QString text = child->data().toString(); + + if (text.right(1) == QString(sep)) + { + text = text.left(text.length() - 1); + } + child->setText(text); + + while (item) + { + branch = item->data().toString() + branch; + item = item->parent(); + } + + if (branch.right(1) == QString(sep)) + { + branch = branch.left(branch.length() - 1); + } + + child->setData(branch, Qt::ToolTipRole); +} + int TreeBuilder::overlap(const QString & a, const QString & b) { const QChar * ac = a.data(); @@ -144,12 +148,3 @@ int TreeBuilder::overlap(const QString & return len; } -void TreeBuilder::addList(const QString & branches) -{ - QStringList branchList = branches.split("\n", QString::SkipEmptyParts); - - foreach (const QString & branch, branchList) - { - add(branch); - } -} ============================================================ --- src/util/TreeBuilder.h d195b4bba70b39269efdf3e30314667df1236db3 +++ src/util/TreeBuilder.h de247f223522318c2a48426553bbd374aec491e4 @@ -19,7 +19,7 @@ #ifndef TREEBUILDER_H #define TREEBUILDER_H -#include +#include class TreeBuilder : public QObject { @@ -41,4 +41,5 @@ private: QChar sep; }; -#endif //TREEBUILDER_H +#endif + ============================================================ --- src/view/dialogs/ChangesetBrowser.cpp bb5e47855f1f4aca426332d1eaec8335791b3fa6 +++ src/view/dialogs/ChangesetBrowser.cpp 315941faeb63b5476667421a82985e0d13358802 @@ -19,6 +19,9 @@ #include "ChangesetBrowser.h" #include "Settings.h" +#include +#include + ChangesetBrowser::ChangesetBrowser(QWidget * parent, const DatabaseFile & db) : Dialog(parent), databaseFile(db), branchModel(0) { @@ -171,6 +174,10 @@ void ChangesetBrowser::branchesClicked(c void ChangesetBrowser::branchesClicked(const QModelIndex & idx) { + // skip clicks on parent nodes in tree mode + if (branchModel->rowCount(idx) > 0) + return; + QString branch = branchModel->data(idx, Qt::ToolTipRole).toString(); fetchWidget->setVisible(true); ============================================================ --- src/view/dialogs/CheckoutRevision.cpp 0885555106b7b5d3ad632286b782f86763b09ad9 +++ src/view/dialogs/CheckoutRevision.cpp 4073ede5d48029eb24325788d05025d3734cfaa5 @@ -23,6 +23,7 @@ #include "WorkspaceCreator.h" #include +#include CheckoutRevision::CheckoutRevision(QWidget * parent, const DatabaseFile & database) : Dialog(parent), databaseFile(database) ============================================================ --- src/view/dialogs/SelectRevision.cpp 8300d701a7249245e851c34b13b4d55058aed0ac +++ src/view/dialogs/SelectRevision.cpp 0b94e795626ab3b9461e25b2fd0a71867eec11d0 @@ -22,6 +22,7 @@ #include #include +#include SelectRevision::SelectRevision(QWidget * parent, const DatabaseFile & database) : Dialog(parent), selectorCompleter(0), databaseFile(database) ============================================================ --- src/view/mainwindows/DatabaseWindow.cpp 62c0960b4f1f9e0f4528d402981cb911f9cc9c51 +++ src/view/mainwindows/DatabaseWindow.cpp 2eaeb3de1cdce9efcb4049d3d1ef64f61f5f36bf @@ -25,6 +25,7 @@ #include #include +#include DatabaseWindow::DatabaseWindow() : MainWindow(), loadedDbLabel(0), keyManagement(0), revisionBrowser(0), ============================================================ --- src/view/mainwindows/WorkspaceWindow.cpp 7bfa8963e4dc39d2a1d07eedc843b31dbd720162 +++ src/view/mainwindows/WorkspaceWindow.cpp 6d1c97beb8ef58c1c6567a24c57e6ae267267834 @@ -22,10 +22,11 @@ #include "Platform.h" #include "MonotoneUtil.h" #include "InventoryItem.h" - #include "WorkspaceMenuBar.h" #include "WorkspaceDialogManager.h" +#include + WorkspaceWindow::WorkspaceWindow() : DatabaseWindow(), mainSplitter(0), listSplitter(0), treeView(0), listView(0), attrView(0), statusBar(0), toolBar(0), searchInput(0), iconHelp(0), invModel(0), attrModel(0),