# # # patch "i18n/guitone_de.ts" # from [71fa0905c9ba2958ee5151fd9496f67c31917996] # to [4272a84f0f1b90fc20472744289cf675471f427c] # # patch "src/model/Monotone.cpp" # from [7684a9da94e6931dc383a4480eddcc730166c582] # to [dac206dbc0aded24a1a04fedb5ab6dc9e9cd79a7] # # patch "src/model/Monotone.h" # from [58a6fbe73b90d4163d86710cc2ae1dda832ed2de] # to [484f8250c03ae129dea32955b892ced42a0e25ce] # # patch "src/model/Workspace.cpp" # from [8708b7b6bbe73ce4452a7e540cc2af5afa2fad93] # to [ab2c1a2fa0e7dfc65a310c8379100b5a18326554] # # patch "src/model/WorkspaceItem.cpp" # from [a10732475af6c33e0c26d3074b8fd0ec92a93e5f] # to [a9a40a45fed1b8f0751b0bcf3fb38d3ee8a938cb] # # patch "src/model/WorkspaceItem.h" # from [d6b997b0b651dcd9f9e634a7cd9c093ec07e4332] # to [3daad7c767f280452dc06e4df96f18b2174ee742] # ============================================================ --- i18n/guitone_de.ts 71fa0905c9ba2958ee5151fd9496f67c31917996 +++ i18n/guitone_de.ts 4272a84f0f1b90fc20472744289cf675471f427c @@ -61,10 +61,29 @@ The chosen directory is no monotone workspace! - + Das gewählte Verzeichnis ist kein monotone-Arbeitsverzeichnis! + Monotone + + Monotone not found + Monotone nicht gefunden + + + Couldn't connect to monotone. Have you installed it properly? + Konnte Verbindung zu Monotone-Prozess nicht herstellen. Ist das Programm korrekt installiert? + + + Process exited + Prozess beendet + + + The internal connection to the monotone process was terminated (code %1, status %2) + Die interne Verbindung zum Monotone-Prozess wurde beendet (Code %1, Status %2) + + + SandboxItem File ============================================================ --- src/model/Monotone.cpp 7684a9da94e6931dc383a4480eddcc730166c582 +++ src/model/Monotone.cpp dac206dbc0aded24a1a04fedb5ab6dc9e9cd79a7 @@ -1,8 +1,10 @@ #include "Monotone.h" #include #include +#include +#include Monotone* Monotone::instance = 0; @@ -14,6 +16,7 @@ Monotone::~Monotone() { + // kill the running process kill(); } @@ -24,7 +27,13 @@ instance = new Monotone(); if (!instance->openConnection(workingDirectory)) { - qFatal("Couldn't connect to monotone. Have you installed it properly?"); + QMessageBox::critical( + NULL, + tr("Monotone not found"), + tr("Couldn't connect to monotone. Have you installed it properly?"), + QMessageBox::Ok, 0, 0 + ); + qApp->exit(1); } } return instance; @@ -42,6 +51,11 @@ this, SIGNAL(readyReadStandardOutput()), this, SLOT(parseLineFromStdout()) ); + + connect( + this, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(processTerminated(int, QProcess::ExitStatus)) + ); QStringList args; args << "automate"; @@ -58,6 +72,21 @@ return true; } +void Monotone::processTerminated(int code, QProcess::ExitStatus status) +{ + // TODO: log the error output somewhere or at least output it on guitone's STDERR + // QProcess' buffers are still intact at this point + QMessageBox::critical( + NULL, + tr("Process exited"), + tr("The internal connection to the monotone process was terminated (code %1, status %2)") + .arg(code) + .arg(status), + QMessageBox::Ok, 0, 0 + ); + qApp->exit(1); +} + bool Monotone::triggerCommand(QString cmd) { if (isRunning) ============================================================ --- src/model/Monotone.h 58a6fbe73b90d4163d86710cc2ae1dda832ed2de +++ src/model/Monotone.h 484f8250c03ae129dea32955b892ced42a0e25ce @@ -36,6 +36,7 @@ private slots: void parseLineFromStdout(); + void processTerminated(int, QProcess::ExitStatus); signals: void commandFinished(int returnCode); ============================================================ --- src/model/Workspace.cpp 8708b7b6bbe73ce4452a7e540cc2af5afa2fad93 +++ src/model/Workspace.cpp ab2c1a2fa0e7dfc65a310c8379100b5a18326554 @@ -291,7 +291,7 @@ WorkspaceItem *item = static_cast(index.internalPointer()); - return item->data(index.column()); + return item->data(index.column(), role); } Qt::ItemFlags Workspace::flags(const QModelIndex &index) const @@ -310,7 +310,7 @@ { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { - return rootItem->data(section); + return rootItem->data(section, role); } return QVariant(); ============================================================ --- src/model/WorkspaceItem.cpp a10732475af6c33e0c26d3074b8fd0ec92a93e5f +++ src/model/WorkspaceItem.cpp a9a40a45fed1b8f0751b0bcf3fb38d3ee8a938cb @@ -110,12 +110,16 @@ int WorkspaceItem::columnCount() const { // there are currently three columns per item - // 1: icon, 2: item name, 3: item status + // 1: item name, 2: item status return 2; } -QVariant WorkspaceItem::data(int column) const +QVariant WorkspaceItem::data(int column, int role) const { + // we currently only handle the display role + // TODO: what to do here for Qt::DecorationRole? + if (role != Qt::DisplayRole) return QVariant(); + // return column headers for root item if (parentItem == this) { @@ -126,13 +130,13 @@ default: return QVariant(); } } - + switch (column) { case 0: return QVariant(getFilename()); case 1: return QVariant(statusString()); default: return QVariant(); - } + } } QList WorkspaceItem::getChildren() ============================================================ --- src/model/WorkspaceItem.h d6b997b0b651dcd9f9e634a7cd9c093ec07e4332 +++ src/model/WorkspaceItem.h 3daad7c767f280452dc06e4df96f18b2174ee742 @@ -56,7 +56,7 @@ int columnCount() const; void appendChild(WorkspaceItem*); WorkspaceItem* parent(); - QVariant data(int) const; + QVariant data(int, int) const; static const int RenamedFrom = 1;