# # # add_file "guitone/res/dialogs/ancestry_graph.ui" # content [8d9abf4e26fc78dfbca037ff9dbb1cea72959dfd] # # add_file "guitone/src/model/Graph.cpp" # content [9de07bc21167aa3019a82f5feca88cdb323e1104] # # add_file "guitone/src/model/Graph.h" # content [dfc025845ba3213b0eb7349adf08ab66157e044b] # # add_file "guitone/src/view/dialogs/AncestryGraph.cpp" # content [58a33faa80059e6d49bb56be9e95354f2d92ddcf] # # add_file "guitone/src/view/dialogs/AncestryGraph.h" # content [0c3eec8dc2abc89a2ee10f728d81448cc2bd5479] # # add_file "guitone/src/view/dialogs/ui_ancestry_graph.h" # content [70340c893ab4bfabf9dc46d42fcc0e6eb4ee2a66] # # patch ".mtn-ignore" # from [73f2fd80083fdbd3aa6c139bbefd78727f2cffb2] # to [c5f2049b1e1835cb2dae0227264e739966b30248] # # patch "guitone/guitone.pro" # from [dd29e1ed22d90e4a108e51568b340b53847921ea] # to [68b3ce576963c3d66b3e381071c0738815e280fc] # # patch "guitone/src/view/dialogs/ui_KeyManagment.h" # from [ef076eb7a2ef3e3d88e008a296fdd25eed8400b7] # to [e82e9ba78fec73e56da2e9b08b2d64171849f85d] # # patch "guitone/src/view/dialogs/ui_preferences.h" # from [241e018833bdf465c7cce8a41e7c3a0980d1fcb1] # to [7bf70ad1a88dcebe0fc90dc4eb0a309463676980] # # patch "guitone/src/view/dialogs/ui_switch_workspace.h" # from [7f800f9ff1683e12662b86fc5a9ad5188368b4a0] # to [9ea0d34e428e64e6f73521babeb3be52b12becd1] # # patch "guitone.pro" # from [d25442e228ae59d846371735ed708838c8d3bcf9] # to [d87016abc13868f69c1676daa21669d0547d1901] # ============================================================ --- guitone/res/dialogs/ancestry_graph.ui 8d9abf4e26fc78dfbca037ff9dbb1cea72959dfd +++ guitone/res/dialogs/ancestry_graph.ui 8d9abf4e26fc78dfbca037ff9dbb1cea72959dfd @@ -0,0 +1,92 @@ + + AncestryGraph + + + Qt::NonModal + + + + 0 + 0 + 550 + 373 + + + + Ancestry Graph + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + + + + + + GraphItemView + QGraphicsView +
can/canGraphItemView.h
+
+
+ + + + buttonBox + accepted() + AncestryGraph + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AncestryGraph + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
============================================================ --- guitone/src/model/Graph.cpp 9de07bc21167aa3019a82f5feca88cdb323e1104 +++ guitone/src/model/Graph.cpp 9de07bc21167aa3019a82f5feca88cdb323e1104 @@ -0,0 +1,114 @@ +/*************************************************************************** + * Copyright (C) 2006 by Thomas Keller * + * address@hidden * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "Graph.h" +#include "../monotone/Monotone.h" +#include "la/laGraph.h" + +using namespace qan; + +Graph::Graph(QObject *parent) + : AutomateCommand(parent) +{ + graph = new la::Graph(); +} + +Graph::~Graph() +{ + if (graph) delete graph; +} + +bool Graph::readGraph() +{ + // TODO: clear the current graph view + + // reset the view + reset(); + + QStringList cmd; + cmd.append("graph"); + + Monotone *mtn = Monotone::singleton(); + + // enable the wait cursor + qApp->setOverrideCursor(Qt::WaitCursor); + + return mtn->triggerCommand(this, cmd); +} + +void Graph::parseOutput(AutomateCommand *caller) +{ + // if not we are the caller, omit the parsing + if (caller != this) return; + + // clear our data structures + + QStringList revisionList = AutomateCommand::data.split("\n"); + + QMap nodeMap; + QMap parentMap; + + la::Node *curNode, *parentNode; + la::Edge *edge; + + // 1st pass: create node objects for every rev and add it to the graph + for (int i=0, j=revisionList.size(); i 0); + QString rev = revs.takeFirst(); + curNode = new la::Node(rev.toStdString(), la::Node::TYPE); + graph->insertNode(*curNode); + + // remember those for the 2nd pass + nodeMap[rev] = curNode; + parentMap[rev] = revs; + } + + revisionList.clear(); + QStringList singleRevs = nodeMap.keys(); + + // 2nd pass: now that we have all nodes create the edges + for (int i=0, j=singleRevs.size(); iaddInEdge(*edge); + parentNode->addOutEdge(*edge); + } + } + + // reset the view + reset(); + + // restore the normal cursor + qApp->restoreOverrideCursor(); + + // signal that we've finished (whoever listens to that) + emit graphRead(); +} ============================================================ --- guitone/src/model/Graph.h dfc025845ba3213b0eb7349adf08ab66157e044b +++ guitone/src/model/Graph.h dfc025845ba3213b0eb7349adf08ab66157e044b @@ -0,0 +1,60 @@ +/*************************************************************************** + * Copyright (C) 2006 by Thomas Keller * + * address@hidden * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef SELECT_H +#define SELECT_H + +#include "AutomateCommand.h" + +namespace qan { + namespace la { + class Graph; + } +} + +class Graph : public AutomateCommand +{ + Q_OBJECT +public: + Graph(QObject*); + virtual ~Graph(); + + // needed Qt Model methods + inline QVariant data(const QModelIndex&, int) const { return QVariant(); }; + inline Qt::ItemFlags flags(const QModelIndex&) const { return 0; }; + inline QVariant headerData(int, Qt::Orientation, int) const { return QVariant(); }; + inline QModelIndex index(int, int, const QModelIndex&) const { return QModelIndex(); }; + inline QModelIndex parent(const QModelIndex&) const { return QModelIndex(); }; + inline int rowCount(const QModelIndex&) const { return 0; }; + inline int columnCount(const QModelIndex&) const { return 0; }; + +public slots: + bool readGraph(); + + +signals: + void graphRead(); + +private: + void parseOutput(AutomateCommand*); + qan::la::Graph *graph; +}; + +#endif ============================================================ --- guitone/src/view/dialogs/AncestryGraph.cpp 58a33faa80059e6d49bb56be9e95354f2d92ddcf +++ guitone/src/view/dialogs/AncestryGraph.cpp 58a33faa80059e6d49bb56be9e95354f2d92ddcf @@ -0,0 +1,32 @@ +/*************************************************************************** + * Copyright (C) 2006 by Thomas Keller * + * address@hidden * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "AncestryGraph.h" +#include "../../util/Settings.h" +#include "../../monotone/Monotone.h" + +AncestryGraph::AncestryGraph(QWidget* parent) + : QDialog(parent) +{ + setupUi(this); + +} + +AncestryGraph::~AncestryGraph() {} ============================================================ --- guitone/src/view/dialogs/AncestryGraph.h 0c3eec8dc2abc89a2ee10f728d81448cc2bd5479 +++ guitone/src/view/dialogs/AncestryGraph.h 0c3eec8dc2abc89a2ee10f728d81448cc2bd5479 @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2006 by Thomas Keller * + * address@hidden * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef ANCESTRY_GRAPH_H +#define ANCESTRY_GRAPH_H + +#include "ui_ancestry_graph.h" + +class AncestryGraph : public QDialog, private Ui::AncestryGraph +{ + Q_OBJECT + +public: + AncestryGraph(QWidget*); + ~AncestryGraph(); +}; + +#endif ============================================================ --- guitone/src/view/dialogs/ui_ancestry_graph.h 70340c893ab4bfabf9dc46d42fcc0e6eb4ee2a66 +++ guitone/src/view/dialogs/ui_ancestry_graph.h 70340c893ab4bfabf9dc46d42fcc0e6eb4ee2a66 @@ -0,0 +1,83 @@ +/******************************************************************************** +** Form generated from reading ui file 'ancestry_graph.ui' +** +** Created: Fri Oct 6 23:55:18 2006 +** by: Qt User Interface Compiler version 4.2.0-snapshot-20061003 +** +** WARNING! All changes made in this file will be lost when recompiling ui file! +********************************************************************************/ + +#ifndef UI_ANCESTRY_GRAPH_H +#define UI_ANCESTRY_GRAPH_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "can/canGraphItemView.h" + +class Ui_AncestryGraph +{ +public: + QHBoxLayout *hboxLayout; + QVBoxLayout *vboxLayout; + QDialogButtonBox *buttonBox; + GraphItemView *graphView; + + void setupUi(QDialog *AncestryGraph) + { + AncestryGraph->setObjectName(QString::fromUtf8("AncestryGraph")); + AncestryGraph->setWindowModality(Qt::NonModal); + hboxLayout = new QHBoxLayout(AncestryGraph); + hboxLayout->setSpacing(6); + hboxLayout->setMargin(9); + hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); + vboxLayout = new QVBoxLayout(); + vboxLayout->setSpacing(6); + vboxLayout->setMargin(0); + vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); + buttonBox = new QDialogButtonBox(AncestryGraph); + buttonBox->setObjectName(QString::fromUtf8("buttonBox")); + buttonBox->setOrientation(Qt::Horizontal); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok); + + vboxLayout->addWidget(buttonBox); + + graphView = new GraphItemView(AncestryGraph); + graphView->setObjectName(QString::fromUtf8("graphView")); + + vboxLayout->addWidget(graphView); + + + hboxLayout->addLayout(vboxLayout); + + + retranslateUi(AncestryGraph); + + QSize size(550, 373); + size = size.expandedTo(AncestryGraph->minimumSizeHint()); + AncestryGraph->resize(size); + + QObject::connect(buttonBox, SIGNAL(accepted()), AncestryGraph, SLOT(accept())); + QObject::connect(buttonBox, SIGNAL(rejected()), AncestryGraph, SLOT(reject())); + + QMetaObject::connectSlotsByName(AncestryGraph); + } // setupUi + + void retranslateUi(QDialog *AncestryGraph) + { + AncestryGraph->setWindowTitle(QApplication::translate("AncestryGraph", "Ancestry Graph", 0, QApplication::UnicodeUTF8)); + Q_UNUSED(AncestryGraph); + } // retranslateUi + +}; + +namespace Ui { + class AncestryGraph: public Ui_AncestryGraph {}; +} // namespace Ui + +#endif // UI_ANCESTRY_GRAPH_H ============================================================ --- .mtn-ignore 73f2fd80083fdbd3aa6c139bbefd78727f2cffb2 +++ .mtn-ignore c5f2049b1e1835cb2dae0227264e739966b30248 @@ -1,5 +1,6 @@ Makefile Makefile -guitone\.xcodeproj +.*\.xcodeproj +Info.plist guitone\/res\/i18n\/.+\.qm guitone\/tmp.* guitone\/bin/.* ============================================================ --- guitone/guitone.pro dd29e1ed22d90e4a108e51568b340b53847921ea +++ guitone/guitone.pro 68b3ce576963c3d66b3e381071c0738815e280fc @@ -8,6 +8,7 @@ HEADERS += src/view/Guitone.h \ src/view/AttributesView.h \ src/view/dialogs/SwitchWorkspaceRevision.h \ src/view/dialogs/Preferences.h \ + src/view/dialogs/AncestryGraph.h \ src/view/dialogs/KeyManagment.h \ src/monotone/Monotone.h \ src/model/AutomateCommand.h \ @@ -17,6 +18,7 @@ HEADERS += src/view/Guitone.h \ src/model/Attributes.h \ src/model/Select.h \ src/model/Certs.h \ + src/model/Graph.h \ src/util/IconProvider.h \ src/util/StanzaParser.h \ src/util/Settings.h @@ -27,6 +29,7 @@ SOURCES += src/view/Guitone.cpp \ src/view/AttributesView.cpp \ src/view/dialogs/SwitchWorkspaceRevision.cpp \ src/view/dialogs/Preferences.cpp \ + src/view/dialogs/AncestryGraph.cpp \ src/view/dialogs/KeyManagment.cpp \ src/monotone/Monotone.cpp \ src/model/AutomateCommand.cpp \ @@ -36,14 +39,18 @@ SOURCES += src/view/Guitone.cpp \ src/model/Attributes.cpp \ src/model/Select.cpp \ src/model/Certs.cpp \ + src/model/Graph.cpp \ src/util/IconProvider.cpp \ src/util/StanzaParser.cpp \ src/util/Settings.cpp \ src/main.cpp FORMS += res/dialogs/switch_workspace.ui \ res/dialogs/preferences.ui \ + res/dialogs/ancestry_graph.ui \ res/dialogs/KeyManagment.ui -UI_DIR = src/view/dialogs +LIBS = -L../libs/qanava/build -lqanava_la -lqanava_can -lqanava_ui -lqanava_utl +INCLUDEPATH = ../libs/qanava/src +UI_DIR = src/view/dialogs OBJECTS_DIR = tmp MOC_DIR = tmp DESTDIR = bin ============================================================ --- guitone/src/view/dialogs/ui_KeyManagment.h ef076eb7a2ef3e3d88e008a296fdd25eed8400b7 +++ guitone/src/view/dialogs/ui_KeyManagment.h e82e9ba78fec73e56da2e9b08b2d64171849f85d @@ -1,12 +1,3 @@ -/******************************************************************************** -** Form generated from reading ui file 'KeyManagment.ui' -** -** Created: Wed Oct 4 16:25:59 2006 -** by: Qt User Interface Compiler version 4.2.0 -** -** WARNING! All changes made in this file will be lost when recompiling ui file! -********************************************************************************/ - #ifndef UI_KEYMANAGMENT_H #define UI_KEYMANAGMENT_H @@ -39,6 +30,7 @@ public: void setupUi(QDialog *KeyManagment) { KeyManagment->setObjectName(QString::fromUtf8("KeyManagment")); + KeyManagment->resize(QSize(587, 433).expandedTo(KeyManagment->minimumSizeHint())); gridLayout = new QGridLayout(KeyManagment); gridLayout->setSpacing(6); gridLayout->setMargin(9); @@ -90,13 +82,7 @@ public: gridLayout->addLayout(hboxLayout, 2, 0, 1, 1); - retranslateUi(KeyManagment); - - QSize size(587, 433); - size = size.expandedTo(KeyManagment->minimumSizeHint()); - KeyManagment->resize(size); - QObject::connect(okButton, SIGNAL(clicked()), KeyManagment, SLOT(accept())); QObject::connect(cancelButton, SIGNAL(clicked()), KeyManagment, SLOT(reject())); @@ -106,8 +92,8 @@ public: void retranslateUi(QDialog *KeyManagment) { KeyManagment->setWindowTitle(QApplication::translate("KeyManagment", "Key Managment", 0, QApplication::UnicodeUTF8)); - if (tableWidget->columnCount() < 4) - tableWidget->setColumnCount(4); + tableWidget->clear(); + tableWidget->setColumnCount(4); QTableWidgetItem *__colItem = new QTableWidgetItem(); __colItem->setText(QApplication::translate("KeyManagment", "Hash", 0, QApplication::UnicodeUTF8)); @@ -124,6 +110,7 @@ public: QTableWidgetItem *__colItem3 = new QTableWidgetItem(); __colItem3->setText(QApplication::translate("KeyManagment", "Priv Loc", 0, QApplication::UnicodeUTF8)); tableWidget->setHorizontalHeaderItem(3, __colItem3); + tableWidget->setRowCount(0); pushButtonGenerate->setText(QApplication::translate("KeyManagment", "Generate", 0, QApplication::UnicodeUTF8)); pushButtonRemove->setText(QApplication::translate("KeyManagment", "Remove", 0, QApplication::UnicodeUTF8)); okButton->setText(QApplication::translate("KeyManagment", "OK", 0, QApplication::UnicodeUTF8)); ============================================================ --- guitone/src/view/dialogs/ui_preferences.h 241e018833bdf465c7cce8a41e7c3a0980d1fcb1 +++ guitone/src/view/dialogs/ui_preferences.h 7bf70ad1a88dcebe0fc90dc4eb0a309463676980 @@ -1,12 +1,3 @@ -/******************************************************************************** -** Form generated from reading ui file 'preferences.ui' -** -** Created: Wed Oct 4 16:25:59 2006 -** by: Qt User Interface Compiler version 4.2.0 -** -** WARNING! All changes made in this file will be lost when recompiling ui file! -********************************************************************************/ - #ifndef UI_PREFERENCES_H #define UI_PREFERENCES_H @@ -40,6 +31,7 @@ public: void setupUi(QDialog *PreferencesDialog) { PreferencesDialog->setObjectName(QString::fromUtf8("PreferencesDialog")); + PreferencesDialog->resize(QSize(404, 140).expandedTo(PreferencesDialog->minimumSizeHint())); QSizePolicy sizePolicy(static_cast(3), static_cast(0)); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); @@ -112,13 +104,7 @@ public: QWidget::setTabOrder(mtnExecutablePath, selectMtnExecutable); QWidget::setTabOrder(selectMtnExecutable, okButton); QWidget::setTabOrder(okButton, cancelButton); - retranslateUi(PreferencesDialog); - - QSize size(404, 140); - size = size.expandedTo(PreferencesDialog->minimumSizeHint()); - PreferencesDialog->resize(size); - QObject::connect(okButton, SIGNAL(clicked()), PreferencesDialog, SLOT(accept())); QObject::connect(cancelButton, SIGNAL(clicked()), PreferencesDialog, SLOT(reject())); ============================================================ --- guitone/src/view/dialogs/ui_switch_workspace.h 7f800f9ff1683e12662b86fc5a9ad5188368b4a0 +++ guitone/src/view/dialogs/ui_switch_workspace.h 9ea0d34e428e64e6f73521babeb3be52b12becd1 @@ -1,12 +1,3 @@ -/******************************************************************************** -** Form generated from reading ui file 'switch_workspace.ui' -** -** Created: Wed Oct 4 16:25:59 2006 -** by: Qt User Interface Compiler version 4.2.0 -** -** WARNING! All changes made in this file will be lost when recompiling ui file! -********************************************************************************/ - #ifndef UI_SWITCH_WORKSPACE_H #define UI_SWITCH_WORKSPACE_H @@ -46,6 +37,7 @@ public: void setupUi(QDialog *SwitchWorkspaceRevision) { SwitchWorkspaceRevision->setObjectName(QString::fromUtf8("SwitchWorkspaceRevision")); + SwitchWorkspaceRevision->resize(QSize(622, 421).expandedTo(SwitchWorkspaceRevision->minimumSizeHint())); vboxLayout = new QVBoxLayout(SwitchWorkspaceRevision); vboxLayout->setSpacing(6); vboxLayout->setMargin(9); @@ -131,13 +123,7 @@ public: QWidget::setTabOrder(revisionList, certList); QWidget::setTabOrder(certList, okButton); QWidget::setTabOrder(okButton, cancelButton); - retranslateUi(SwitchWorkspaceRevision); - - QSize size(622, 421); - size = size.expandedTo(SwitchWorkspaceRevision->minimumSizeHint()); - SwitchWorkspaceRevision->resize(size); - QObject::connect(okButton, SIGNAL(clicked()), SwitchWorkspaceRevision, SLOT(accept())); QObject::connect(cancelButton, SIGNAL(clicked()), SwitchWorkspaceRevision, SLOT(reject())); ============================================================ --- guitone.pro d25442e228ae59d846371735ed708838c8d3bcf9 +++ guitone.pro d87016abc13868f69c1676daa21669d0547d1901 @@ -1,4 +1,4 @@ TEMPLATE = subdirs TEMPLATE = subdirs -SUBDIRS = guitone \ - libs +SUBDIRS = libs \ + guitone