# # # patch "guitone/guitone.pro" # from [e7a4a243f865a6366969a654ea8b4dabf9f8ba7f] # to [9a2e3f12a1841e5e5555beb00af2bf509968b347] # # patch "guitone/res/forms/changeset_browser.ui" # from [d5f1b28fde966c80b53c941f8dfa7a217c8b34de] # to [b305fba833874efa7b6b53773d8cea303c0366d0] # # patch "guitone/res/forms/commit_revision.ui" # from [f1e90933bd268b597bff6a668ea336e94c676314] # to [7743280f847be7c2fd842e55b24e48be78d2b6ab] # # patch "guitone/res/i18n/guitone_de.ts" # from [7b403b0ae716911cc11af94a607db5d236eeaa5f] # to [1bb6cc4365f6ab485e8373a03f08ccc07e7033ed] # # patch "guitone/src/Guitone.h" # from [39ee9b4581654307001c33dbd791252bf094d0bf] # to [f56c7a540e0185fa8ef7008a7b35d2af4376bbb7] # # patch "guitone/src/model/GetRevision.cpp" # from [cfca83dee8492747c56b3876461f1a0e12025bc2] # to [cbb4647d0b6e8b29fd1943ea473af6a984ff03ce] # # patch "guitone/src/model/GetRevision.h" # from [e6d1d83047029447b8e9d5fb338cf72877458c46] # to [0308fe66ff1749162131c693e28efe7497579d55] # # patch "guitone/src/model/Inventory.cpp" # from [0e2147b691371bee5edf59e5ab667646fca91c5f] # to [11326d99834f514d3a2619061715d37d89d9ffbd] # # patch "guitone/src/model/Inventory.h" # from [89fdbc73a2dfef156339722e53ef3d8ca73e6819] # to [5f721ad6fa46ed5f994688debe1d0708381607b7] # # patch "guitone/src/model/Manifest.cpp" # from [68394c64e088df3b3451142c34f6c1851253d0ce] # to [d2f9630459f1cd73b5de8c64efb704a923e4552b] # # patch "guitone/src/util/IconProvider.cpp" # from [5db02c473df668132b35cc748eed817b82fd9a30] # to [eade6accc5f04c14c3f153b036d08e08e2c81499] # # patch "guitone/src/util/IconProvider.h" # from [7832476f4f87e91115de31f7a7af5fabe4b12698] # to [0331678a530715a50344d5fb07943f02ad24bccf] # # patch "guitone/src/view/MainWindow.cpp" # from [84beb22ee31de9e5b87343e40c471ec1c89eebfe] # to [1e0d6b1c8dc5305f78a6e72f8dae9cf118ab5866] # # patch "guitone/src/view/dialogs/ChangesetBrowser.cpp" # from [d16e851f9106578f41f2ee960e161cc67f96cf88] # to [38bb758efc890621318bfe573b124997c78fb8ce] # # patch "guitone/src/view/dialogs/ChangesetBrowser.h" # from [dd388119b2fdbccfc1bff51ff88ddbb44c1c1e12] # to [9b78450d35f13ae1a57e9475e69e66f975afbc0f] # # patch "guitone/src/vocab.h" # from [9badd48e5b9420e8fb663d32e93bab8bc751a93d] # to [514f8d7e143232a98175232e2133efe326200cc5] # ============================================================ --- guitone/guitone.pro e7a4a243f865a6366969a654ea8b4dabf9f8ba7f +++ guitone/guitone.pro 9a2e3f12a1841e5e5555beb00af2bf509968b347 @@ -7,7 +7,6 @@ QT += xml network TARGET = guitone CONFIG += qt debug QT += xml network -DEFINES += GUITONE_VERSION=\\\"$${GUITONE_VERSION}\\\" INCLUDEPATH = src/ \ src/view \ @@ -154,13 +153,24 @@ RCC_DIR = tmp TRANSLATIONS = res/i18n/guitone_de.ts RESOURCES = res/guitone.qrc RCC_DIR = tmp + +DEFINES += GUITONE_VERSION=\\\"$${GUITONE_VERSION}\\\" + +CONFIG(debug) : DEFINES += DEBUG + + PRECOMPILED_HEADER = src/stable.h -win32:LIBS += shell32.lib Advapi32.lib +# is that needed? +# win32:LIBS += shell32.lib Advapi32.lib +# # Libs for static build on windows, I don't know if I can test for static. # I comment that in and out atm. -# win32:LIBS += gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib uuid.lib user32.lib advapi32.lib msimg32.lib shell32.lib +# +# win32:LIBS += gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib \ +# winspool.lib ws2_32.lib ole32.lib uuid.lib user32.lib \ +# advapi32.lib msimg32.lib shell32.lib macx | unix { QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter ============================================================ --- guitone/res/forms/changeset_browser.ui d5f1b28fde966c80b53c941f8dfa7a217c8b34de +++ guitone/res/forms/changeset_browser.ui b305fba833874efa7b6b53773d8cea303c0366d0 @@ -40,8 +40,25 @@ Qt::Vertical - - + + + true + + + + + true + + + QAbstractItemView::NoSelection + + + false + + + false + + @@ -122,7 +139,7 @@ TreeView QTreeView -
../TreeView.h
+
TreeView.h
============================================================ --- guitone/res/forms/commit_revision.ui f1e90933bd268b597bff6a668ea336e94c676314 +++ guitone/res/forms/commit_revision.ui 7743280f847be7c2fd842e55b24e48be78d2b6ab @@ -69,6 +69,9 @@ + + true + QAbstractItemView::NoSelection ============================================================ --- guitone/res/i18n/guitone_de.ts 7b403b0ae716911cc11af94a607db5d236eeaa5f +++ guitone/res/i18n/guitone_de.ts 1bb6cc4365f6ab485e8373a03f08ccc07e7033ed @@ -164,30 +164,35 @@ Änderungen-Browser - + display branches as tree zeige Zweige als Baum - + all Changesets alle Änderungen - + 50 More Changesets 50 weitere Änderungen - + close Schließen - + display branches flat zeige Zweige als Liste + + + View files in this revision + Dateien in dieser Revision anzeigen + ChangesetModel @@ -673,12 +678,12 @@ In jedem Fall sollte der derzeitige Arbe GetRevision - + Type Typ - + Change Änderung @@ -1174,7 +1179,7 @@ In jedem Fall sollte der derzeitige Arbe Strg+O - + No previous workspaces available. Keine vorherigen Arbeitsbereiche verfügbar. @@ -1199,7 +1204,7 @@ In jedem Fall sollte der derzeitige Arbe Strg+Q - + Hide ignored files Ignorierte Dateien verstecken @@ -1299,7 +1304,7 @@ In jedem Fall sollte der derzeitige Arbe I - + Expand tree Baum aufklappen @@ -1349,12 +1354,12 @@ In jedem Fall sollte der derzeitige Arbe guitone - ein Frontend für monotone - + Select your workspace... Wählen Sie Ihren Arbeitsbereich aus... - + Loading aborted Laden abgebrochen @@ -1369,27 +1374,27 @@ In jedem Fall sollte der derzeitige Arbe Das gewählte Verzeichnis ist kein monotone-Arbeitsverzeichnis! - + Unable to execute command Konnte Kommando nicht ausführen - + Unable to execute '%1' - maybe another command is still running? Konnte '%1' nicht ausführen - eventuell läuft noch ein anderes Kommando? - + Show ignored files Zeige ignorierte Dateien - + Collapse tree Baum zuklappen - + &%1 %2 &%1 %2 @@ -1404,7 +1409,7 @@ In jedem Fall sollte der derzeitige Arbe Datenbank öffnen - + No previous databases available. Keine vorherigen geöffneten Datenbanken verfügbar. @@ -1419,17 +1424,17 @@ In jedem Fall sollte der derzeitige Arbe Strg+Shift+O - + Loaded database: %1 Geladene Datenbank: %1 - + Select your database... Wählen Sie eine Datenbank aus... - + monotone Databases (*.mtn *.db) monotone-Datenbanken (*.mtn *.db) @@ -1535,27 +1540,27 @@ oder respektive auf Datei > Datenbank Alle nach vorne bringen - + %1 - database mode - guitone %1 - Datenbankmodus - guitone - + %1 - workspace mode - guitone %1 - Arbeitsbereichmodus - guitone - + No workspace or database loaded - guitone Kein Arbeitsbereich oder Datenbank geladen - guitone - + Unable to load workspace Konnte Arbeitsbereich nicht laden - + The workspace '%1' could not be loaded. monotone returned: @@ -1576,12 +1581,12 @@ monotone gab zurück: Strg+C - + Failed to load workspace Konnte Arbeitsbereich nicht laden - + The workspace could not be loaded. The last output was: @@ -1592,12 +1597,12 @@ Die letzte Ausgabe war: %1 - + Failed to load database Konnte Datenbank nicht laden - + The database could not be loaded. The last output was: @@ -1618,12 +1623,12 @@ Die letzte Ausgabe war: Auf Aktualisierungen prüfen - + No updates available Keine Aktualisierungen verfügbar - + Your version of guitone (%1) is already up-to-date. Ihre Version von guitone (%1) ist bereits aktuell. @@ -1677,6 +1682,11 @@ monotone gab zurück: monotone gab zurück: %2 + + + [process not created] + [Prozess nicht erzeugt] + MonotoneDelegate @@ -1835,53 +1845,70 @@ monotone gab zurück: Attr gelöscht - - clear "%1" -attr "%2" - + + %1 to %2 + %1 nach %2 - - set "%1" -attr "%2" -value "%3" - + + '%1' from %2 + '%1' von %2 + + '%1' to '%2' for %3 + '%1' auf '%2' für %3 + + - %1 to %2 - %1 nach %2 + %1 to +%2 + %1 nach +%2 - '%1' from %2 - '%1' von %2 + '%1' from +%2 + '%1' von +%2 - '%1' to '%2' for %3 - '%1' auf '%2' für %3 + '%1' to '%2' +for %3 + '%1' auf '%2' +für %3 + + + '%1' to +'%2' for +%3 + '%1' auf +'%2' für +%3 + QShortcut - + Ctrl Strg - + Alt Alt - + Shift Umschalt - + Meta Meta @@ -2212,7 +2239,14 @@ value "%3" The selected revision has more than one branch cert attached - please select one: - Die ausgewählte Revision besitzt mehr als ein Zweigzertifikat - bitte wählen Sie eins: + Die ausgewählte Revision besitzt mehr als ein Zweigzertifikat - bitte wählen Sie eins: + + + The selected revision has more than one +branch cert attached - please select one: + Die ausgewählte Revision besitzt mehr als ein +Zweigzertifikat - bitte wählen Sie eines: + ============================================================ --- guitone/src/Guitone.h 39ee9b4581654307001c33dbd791252bf094d0bf +++ guitone/src/Guitone.h f56c7a540e0185fa8ef7008a7b35d2af4376bbb7 @@ -21,29 +21,6 @@ #ifndef GUITONE_H #define GUITONE_H -// -// some global definitions -// -#define DEBUG 1 -#define APP reinterpret_cast(qApp) -#define MTN(arg) APP->getMonotoneInstance(arg) - -// FIXME: uncomment the following lines if you have compile problems -// on Windows using MSVC++ -/* -#ifdef _MSC_VER -#define __FUNCTION__ "" -#endif -*/ -#define D(arg) qDebug("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) -#ifndef DEBUG -#define D(arg) void() -#endif -#define W(arg) qWarning("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) -#define C(arg) qCritical("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) -#define F(arg) qFatal("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) - - #include "MainWindow.h" #include "Monotone.h" #include "ApplicationUpdate.h" ============================================================ --- guitone/src/model/GetRevision.cpp cfca83dee8492747c56b3876461f1a0e12025bc2 +++ guitone/src/model/GetRevision.cpp cbb4647d0b6e8b29fd1943ea473af6a984ff03ce @@ -21,6 +21,7 @@ #include "GetRevision.h" #include "InventoryItem.h" #include "Monotone.h" +#include "vocab.h" #include #include ============================================================ --- guitone/src/model/GetRevision.h e6d1d83047029447b8e9d5fb338cf72877458c46 +++ guitone/src/model/GetRevision.h 0308fe66ff1749162131c693e28efe7497579d55 @@ -95,11 +95,11 @@ struct Change { .arg(escape(stanza.at(0).vals.at(0))) .arg(escape(stanza.at(1).vals.at(0))); case AttrClear: - return QObject::tr("clear \"%1\"\nattr \"%2\"") + return QString("clear \"%1\"\nattr \"%2\"") .arg(escape(stanza.at(0).vals.at(0))) .arg(escape(stanza.at(1).vals.at(0))); case AttrSet: - return QObject::tr("set \"%1\"\nattr \"%2\"\nvalue \"%3\"") + return QString("set \"%1\"\nattr \"%2\"\nvalue \"%3\"") .arg(stanza.at(0).vals.at(0)) .arg(stanza.at(1).vals.at(0)) .arg(stanza.at(2).vals.at(0)); @@ -117,15 +117,15 @@ struct Change { case Delete: return stanza.at(0).vals.at(0); case Rename: - return QObject::tr("%1 to %2") + return QObject::tr("%1 to\n%2") .arg(stanza.at(0).vals.at(0)) .arg(stanza.at(1).vals.at(0)); case AttrClear: - return QObject::tr("'%1' from %2") + return QObject::tr("'%1' from\n%2") .arg(stanza.at(1).vals.at(0)) .arg(stanza.at(0).vals.at(0)); case AttrSet: - return QObject::tr("'%1' to '%2' for %3") + return QObject::tr("'%1' to\n'%2' for\n%3") .arg(stanza.at(1).vals.at(0)) .arg(stanza.at(2).vals.at(0)) .arg(stanza.at(0).vals.at(0)); @@ -141,7 +141,7 @@ struct Revision inline void clear() { - new_manifest = QString(); + new_manifest.clear(); changesAgainstParent.clear(); } }; ============================================================ --- guitone/src/model/Inventory.cpp 0e2147b691371bee5edf59e5ab667646fca91c5f +++ guitone/src/model/Inventory.cpp 11326d99834f514d3a2619061715d37d89d9ffbd @@ -30,10 +30,7 @@ Inventory::Inventory(QObject *parent) : // create a dummy item since the view needs at least one item // in the model, otherwise the app crashes rootItem = new InventoryItem(); - - // FIXME: we need a global provider... - iconProvider = new IconProvider(); - regex = new QRegExp("^(R|D|[ ])(R|A|[ ])(M|P|U|I|[ ])\\s(\\d+)\\s(\\d+)\\s(.+)$"); + regex = new QRegExp("^(R|D|[ ])(R|A|[ ])(M|P|U|I|[ ])\\s(\\d+)\\s(\\d+)\\s(.+)$"); regex->setMinimal(true); mtnDelegate = new MonotoneDelegate(this); @@ -42,7 +39,6 @@ Inventory::~Inventory() Inventory::~Inventory() { delete rootItem; - delete iconProvider; delete regex; delete mtnDelegate; } @@ -228,7 +224,8 @@ QVariant Inventory::data(const QModelInd if ((role == Qt::DecorationRole) && (index.column() == 0)) { - return iconProvider->getIcon(item); + IconProvider * provider = IconProvider::singleton(); + return provider->getIcon(item); } else { ============================================================ --- guitone/src/model/Inventory.h 89fdbc73a2dfef156339722e53ef3d8ca73e6819 +++ guitone/src/model/Inventory.h 5f721ad6fa46ed5f994688debe1d0708381607b7 @@ -28,7 +28,6 @@ class InventoryItem; #include class InventoryItem; -class IconProvider; class Inventory : public QAbstractItemModel, public AutomateCommand { @@ -60,7 +59,6 @@ class Inventory : public QAbstractItemMo QList buildTreeRecursive(QList &, InventoryItem*); InventoryItem * rootItem; - IconProvider * iconProvider; QRegExp * regex; MonotoneDelegate * mtnDelegate; QString branchName; ============================================================ --- guitone/src/model/Manifest.cpp 68394c64e088df3b3451142c34f6c1851253d0ce +++ guitone/src/model/Manifest.cpp d2f9630459f1cd73b5de8c64efb704a923e4552b @@ -20,6 +20,7 @@ #include "Manifest.h" #include "BasicIOParser.h" +#include "IconProvider.h" Manifest::Manifest(QObject *parent) : QAbstractItemModel(parent) { @@ -148,17 +149,24 @@ QVariant Manifest::data(const QModelInde return QVariant(); } - if (role != Qt::DisplayRole) - { - return QVariant(); - } - ManifestEntry * entry = static_cast(index.internalPointer()); - switch (index.column()) + + if (role == Qt::DisplayRole) { - case 0: return QVariant(entry->filename()); - case 1: return QVariant(entry->hash); + switch (index.column()) + { + case 0: return QVariant(entry->filename()); + case 1: return QVariant(entry->hash); + } } + + if (role == Qt::DecorationRole && index.column() == 0) + { + IconProvider * provider = IconProvider::singleton(); + if (entry->is_directory) return provider->getPlainFolderIcon(); + return provider->getPlainFileIcon(); + } + return QVariant(); } ============================================================ --- guitone/src/util/IconProvider.cpp 5db02c473df668132b35cc748eed817b82fd9a30 +++ guitone/src/util/IconProvider.cpp eade6accc5f04c14c3f153b036d08e08e2c81499 @@ -26,7 +26,17 @@ const int IconProvider::CdUp = -1; #include const int IconProvider::CdUp = -1; +IconProvider * IconProvider::instance = 0; +IconProvider * IconProvider::singleton() +{ + if (instance == 0) + { + instance = new IconProvider(); + } + return instance; +} + /** * There are 45 possible status combinations, of which 19 are invalid. * We only provide for the 26 valid ones own icons @@ -87,7 +97,7 @@ const int IconProvider::CdUp = -1; * 'RRM': rename_source_target_missing.png */ -IconProvider::IconProvider(void) +IconProvider::IconProvider() { QStyle *style = QApplication::style(); @@ -187,9 +197,9 @@ IconProvider::IconProvider(void) } } -IconProvider::~IconProvider(void) {} +IconProvider::~IconProvider() {} -QIcon IconProvider::getIcon(InventoryItem* item) +QIcon IconProvider::getIcon(InventoryItem * item) const { if (item->isCdUp()) { @@ -216,3 +226,14 @@ QIcon IconProvider::getIcon(InventoryIte return fileIcons.value(0); } + +QIcon IconProvider::getPlainFileIcon() const +{ + return fileIcons.value(0); +} + +QIcon IconProvider::getPlainFolderIcon() const +{ + return folderIcons.value(0); +} + ============================================================ --- guitone/src/util/IconProvider.h 7832476f4f87e91115de31f7a7af5fabe4b12698 +++ guitone/src/util/IconProvider.h 0331678a530715a50344d5fb07943f02ad24bccf @@ -29,15 +29,20 @@ public: class IconProvider { public: - IconProvider(void); - ~IconProvider(void); - QIcon getIcon(InventoryItem* item); + static IconProvider * singleton(); + ~IconProvider(); + + QIcon getIcon(InventoryItem* item) const; + QIcon getPlainFileIcon() const; + QIcon getPlainFolderIcon() const; + static const int CdUp; private: - // file and folder icons - // (maybe we manage it to even include normal file icons here once?!) + IconProvider(); + static IconProvider * instance; + QMap fileIcons; QMap folderIcons; }; ============================================================ --- guitone/src/view/MainWindow.cpp 84beb22ee31de9e5b87343e40c471ec1c89eebfe +++ guitone/src/view/MainWindow.cpp 1e0d6b1c8dc5305f78a6e72f8dae9cf118ab5866 @@ -37,8 +37,8 @@ #include "About.h" #include "Settings.h" #include "ChangesetBrowser.h" +#include "WorkspaceCreator.h" #include "Guitone.h" -#include "WorkspaceCreator.h" #ifdef Q_WS_MAC #include "CocoaUtil.h" ============================================================ --- guitone/src/view/dialogs/ChangesetBrowser.cpp d16e851f9106578f41f2ee960e161cc67f96cf88 +++ guitone/src/view/dialogs/ChangesetBrowser.cpp 38bb758efc890621318bfe573b124997c78fb8ce @@ -21,6 +21,7 @@ #include "ChangesetBrowser.h" #include "Settings.h" +#include "RevisionManifest.h" ChangesetBrowser::ChangesetBrowser(QWidget *parent) : Dialog(parent) { @@ -45,8 +46,8 @@ ChangesetBrowser::ChangesetBrowser(QWidg initTreeWidget(); connect( - branches, SIGNAL(clicked(QModelIndex)), - this, SLOT(branchesClicked(QModelIndex)) + branches, SIGNAL(clicked(const QModelIndex &)), + this, SLOT(branchesClicked(const QModelIndex &)) ); connect( @@ -58,6 +59,14 @@ ChangesetBrowser::ChangesetBrowser(QWidg changesets->setModel(changesetModel); changesets->setRootIsDecorated(false); + revisionModel = new GetRevision(this); + revisionView->setModel(revisionModel); + + connect( + changesets, SIGNAL(clicked(const QModelIndex &)), + this, SLOT(changesetsClicked(const QModelIndex &)) + ); + connect( pushAll, SIGNAL(clicked()), this, SLOT(receiveAll()) @@ -67,6 +76,16 @@ ChangesetBrowser::ChangesetBrowser(QWidg pushMore, SIGNAL(clicked()), this, SLOT(receiveMore()) ); + + connect( + changesets, SIGNAL(doubleClicked(const QModelIndex &)), + this, SLOT(changesetsDoubleClicked(const QModelIndex &)) + ); + + connect( + changesets, SIGNAL(contextMenuRequested(const QModelIndexList &, const QPoint &)), + this, SLOT(contextMenuRequested(const QModelIndexList &, const QPoint &)) + ); } void ChangesetBrowser::receiveAll() { @@ -94,12 +113,19 @@ void ChangesetBrowser::toggleTree() initTreeWidget(); } -void ChangesetBrowser::branchesClicked(QModelIndex idx) +void ChangesetBrowser::branchesClicked(const QModelIndex & idx) { QString branch = branchModel->data(idx, Qt::ToolTipRole).toString(); changesetModel->setBranch(branch); } +void ChangesetBrowser::changesetsClicked(const QModelIndex & idx) +{ + QModelIndex revIdx = changesetModel->index(idx.row(), 3, QModelIndex()); + QString revision = changesetModel->data(revIdx, Qt::DisplayRole).toString(); + revisionModel->readRevision(revision); +} + void ChangesetBrowser::initTreeWidget() { if (branchModel) @@ -126,3 +152,42 @@ void ChangesetBrowser::branchesRead() { branches->setExpanded(branchModel->index(0, 0, QModelIndex()), true); } + +void ChangesetBrowser::openManifestDialog(const QString & rev) +{ + RevisionManifest dlg(this, rev); + dlg.exec(); +} + +void ChangesetBrowser::changesetsDoubleClicked(const QModelIndex & index) +{ + if (!index.isValid()) return; + QModelIndex revIdx = changesetModel->index(index.row(), 3, QModelIndex()); + openManifestDialog(revIdx.data().toString()); +} + +void ChangesetBrowser::contextMenuRequested(const QModelIndexList & indexList, const QPoint & pos) +{ + if (indexList.size() == 0) return; + + QModelIndex revIdx = + changesetModel->index(indexList.at(0).row(), 3, QModelIndex()); + + QString rev(revIdx.data().toString()); + + QMenu menu(this); + QFont activeFont; + activeFont.setBold(true); + + QAction * actOpenManifest = menu.addAction(tr("View files in this revision")); + actOpenManifest->setFont(activeFont); + + QAction * act = menu.exec(pos); + if (act == actOpenManifest) + { + openManifestDialog(rev); + } + // TODO: we might want to add more items here, like "Checkout", "Update", + // etc. +} + ============================================================ --- guitone/src/view/dialogs/ChangesetBrowser.h dd388119b2fdbccfc1bff51ff88ddbb44c1c1e12 +++ guitone/src/view/dialogs/ChangesetBrowser.h 9b78450d35f13ae1a57e9475e69e66f975afbc0f @@ -26,6 +26,7 @@ #include "Branches.h" #include "Dialog.h" #include "ChangesetModel.h" +#include "GetRevision.h" class ChangesetBrowser : public Dialog, private Ui::ChangesetBrowser { @@ -36,18 +37,23 @@ private slots: ~ChangesetBrowser(); private slots: - void branchesClicked(QModelIndex idx); + void branchesClicked(const QModelIndex &); + void changesetsClicked(const QModelIndex &); void branchesRead(); void toggleTree(); void receiveAll(); void receiveMore(); + void changesetsDoubleClicked(const QModelIndex &); + void contextMenuRequested(const QModelIndexList &, const QPoint &); private: void initTreeWidget(); + void openManifestDialog(const QString &); bool tree; Branches * branchModel; ChangesetModel * changesetModel; + GetRevision * revisionModel; }; #endif ============================================================ --- guitone/src/vocab.h 9badd48e5b9420e8fb663d32e93bab8bc751a93d +++ guitone/src/vocab.h 514f8d7e143232a98175232e2133efe326200cc5 @@ -1,13 +1,45 @@ #ifndef VOCAB_H #define VOCAB_H +// +// global macros and defines +// + +class Guitone; +#define APP reinterpret_cast(qApp) +#define MTN(arg) APP->getMonotoneInstance(arg) + +// FIXME: uncomment the following lines if you have compile problems +// on Windows using MSVC++ +/* +#ifdef _MSC_VER +#define __FUNCTION__ "" +#endif +*/ + +#define D(arg) qDebug("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) +#ifndef DEBUG +#define D(arg) void() +#endif +#define W(arg) qWarning("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) +#define C(arg) qCritical("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) +#define F(arg) qFatal("%s:%s:%d: %s", __FILE__, __FUNCTION__, __LINE__, qPrintable(QString(arg))) + +// +// type definitions +// + #include #include -typedef QPair FileEntry; +// used for manifest entries, if the bool var is true, the entry is a directory +typedef QPair FileEntry; typedef QList FileEntryList; -typedef QPair RevisionCert; +// used for revision certs +typedef QString CertKey; +typedef QString CertValue; +typedef QPair RevisionCert; typedef QList RevisionCerts; typedef QList ByteArrayList;