# # # patch "guitone/res/forms/preferences.ui" # from [17a73a0cb32f54a7cc03eec748216e35acf659b9] # to [4c7a832f0d210371eb68882a1f736ff150affdff] # # patch "guitone/res/i18n/guitone_de.ts" # from [97b600c0fcd9f03fed152be692594f8a22876ed1] # to [c547c0e7baf808aec3368eefa5f97d01a9981c6a] # # patch "guitone/src/Guitone.cpp" # from [6913449e1cc80aaedc4f4b70d4e49db43f4faa85] # to [a3673e29c1e23832700d69da44a3d62157d5e193] # # patch "guitone/src/Guitone.h" # from [308ccb6cf259369f26927dd454feccb954918d25] # to [39ee9b4581654307001c33dbd791252bf094d0bf] # # patch "guitone/src/view/InventoryView.cpp" # from [429343b0120096ed5aff50c08e88b5b01a74e073] # to [a54de14edd4781734f92726cee3c21faad15004a] # # patch "guitone/src/view/dialogs/Dialog.cpp" # from [0fc11e87783526f1d650fecc3756af84b28b0afe] # to [e9ecf89d39050a297c2aa5717aad76f1a8601a8f] # # patch "guitone/src/view/dialogs/Dialog.h" # from [39a78dfcb52548eac3012ef78dab3de7cec9c3a3] # to [ce52b7c6e4c2dba2ae4b83fdf37cbf1bcda2b0bb] # # patch "guitone/src/view/dialogs/Preferences.cpp" # from [aee8e3701cad4b88fcc8f8d32f0fe836d7083b00] # to [00aed581d2c8b7991731472f2e9e54cdbcb4771f] # ============================================================ --- guitone/res/forms/preferences.ui 17a73a0cb32f54a7cc03eec748216e35acf659b9 +++ guitone/res/forms/preferences.ui 4c7a832f0d210371eb68882a1f736ff150affdff @@ -5,30 +5,18 @@ 0 0 - 453 - 278 + 389 + 352 3 - 0 + 3 0 0 - - - 0 - 278 - - - - - 16777215 - 278 - - Qt::NoContextMenu @@ -180,6 +168,31 @@ + + + Miscellaneous + + + + 9 + + + 6 + + + + + check for updates on application launch + + + true + + + + + + + 0 ============================================================ --- guitone/res/i18n/guitone_de.ts 97b600c0fcd9f03fed152be692594f8a22876ed1 +++ guitone/res/i18n/guitone_de.ts c547c0e7baf808aec3368eefa5f97d01a9981c6a @@ -5,13 +5,18 @@ <small>Version %1.%2</small> - <small>Version %1.%2</small> + <small>Version %1.%2</small> - + <br/><br/>Authors: <a href="mailto:address@hidden">Thomas Keller</a>, <a href="mailto:address@hidden">Ingo Maindorfer</a> and <a href="mailto:address@hidden">Jean-Louis Fuchs</a>.<br/><br/>This program is free software; you can redistribute it and/or modify<br/>it under the terms of the GNU General Public License as published by<br/>the Free Software Foundation; either version 2 of the License, or<br/>(at your option) any later version.<br/><br/>Bugs? Suggestions? Help? <a href="http://guitone.thomaskeller.biz">guitone Homepage</a><br/><br/>Many thanks go to the friendly guys at <a href="irc://irc.freenode.net/qt">#qt</a> for their helpful<br/>comments during endless coding sessions - you guys rock! <br/><br/>Autoren: <a href="mailto:address@hidden">Thomas Keller</a>, <a href="mailto:address@hidden">Ingo Maindorfer</a> und <a href="mailto:address@hidden">Jean-Louis Fuchs</a><br/><br/>Dieses Programm ist freie Software. Sie können es unter den<br/>Bedingungen der GNU General Public License, wie von der<br/>Free Software Foundation veröffentlicht, weitergeben und/oder<br/>modifizieren, entweder gemäß Version 2 der Lizenz oder <br/>(nach Ihrer Option) jeder späteren Version.<br/><br/>Fehler? Vorschläge? Hilfe? <a href="http://guitone.thomaskeller.biz">guitone Webseite</a><br/><br/>Vielen Dank an die freundlichen Seelen auf <a href="irc://irc.freenode.net/qt">#qt</a> für die Hilfe während der<br/>unendlich langen Programmierstunden - Ihr Jungs s eid Spitze! + + + <small>Version %1</small> + <small>Version %1</small> + AboutDialog @@ -35,6 +40,24 @@ + ApplicationUpdateDialog + + + A new version of guitone is available! + Eine neue Version von guitone ist verfügbar! + + + + Visit website + Webseite besuchen + + + + Close + Schließen + + + Attributes @@ -586,12 +609,12 @@ Guitone - + Error Fehler - + The path to the monotone binary is either invalid or points to an older version of monotone. Guitone requires monotone version %1 or a monotone with interface version %2 or later. Der Pfad zur ausführbaren Datei von monotone ist entweder ungültig oder zeigt auf eine ältere Version von monotone. Guitone benötigt monotone Version %1 oder ein monotone mit einer Interface-Version %2 oder neuer. @@ -687,128 +710,273 @@ &Add - &Hinzufügen + &Hinzufügen - + Add to workspace Zum Arbeitsbereich hinzufügen &Remove - En&tfernen + En&tfernen - + Remove from workspace Vom Arbeitsbereich entfernen &Commit - &Einpflegen + &Einpflegen - + Commit Einpflegen I&gnore - Datei &ignorieren + Datei &ignorieren - + Ignore file Datei ignorieren &Unignore - Datei nicht ign&orieren + Datei nicht ign&orieren - + Unignore file Datei nicht mehr ignorieren R&evert - &Zurücksetzen + &Zurücksetzen - + Revert uncommitted changes Nicht eingepflegte Änderungen verwerfen Rena&me - Um&benennen + Um&benennen - + Rename file Datei umbenennen D&iff - U&nterschiede anzeigen + U&nterschiede anzeigen - + Diff against base revision Unterschiede im Vergleich zur Basisrevision anzeigen &Go into - &Wechseln zu + &Wechseln zu - + Go into the directory Wechsle in das Verzeichnis &Open - &Öffnen + &Öffnen - + Open in default program In Standardprogramm öffnen - + Error Fehler - + The file you're trying to open does not exist. Die Datei, die Sie versucht haben zu öffnen, existiert nicht. - + Unable to open files on your platform - please contact the author about this problem. Kann keine Dateien auf Ihrer Plattform öffnen - bitte kontaktieren Sie den Autor über dieses Problem. D&iff all - Alle U&nterschiede anzeigen + Alle U&nterschiede anzeigen - + Show all differences Zeigt Unterschiede in allen Dateien + + + No common action for selected items + Keine gemeinsamen Aktionen auf selektierte Einträge anwendbar + + + + Go into + Wechseln zu + + + + Open + Öffnen + + + + Add + Hinzufügen + + + + Remove + Entfernen + + + + Ignore + Datei ignorieren + + + + Unignore + Datei nicht ignorieren + + + + Revert + Zurücksetzen + + + + Diff + Unterschiede anzeigen + + + + Diff all + Alle Unterschiede anzeigen + + + + Rename + Umbenennen + + + + Add %1 items + Füge %1 Einträge hinzu + + + + Add multiple files + Fügt mehrere Einträge hinzu + + + + Remove %1 items + Entferne %1 Einträge + + + + Remove multiple files + Entfernt mehrere Einträge + + + + Commit %1 items + Pflege %1 Einträge ein + + + + Commit multiple files + Pflegt mehrere Einträge ein + + + + Ignore %1 items + Ignoriere %1 Einträge + + + + Ignore multiple files + Ignoriert mehrere Einträge + + + + Unignore %1 items + Ignoriere %1 Einträge nicht mehr + + + + Unignore multiple files + Ignoriere mehrere Einträge nicht mehr + + + + Revert %1 items + Setze %1 Einträge zurück + + + + Revert multiple files + Setze mehrere Einträge zurück + + + + Add multiple items + Füge mehrere Einträge hinzu + + + + Remove multiple items + Entferne mehrere Einträge + + + + Commit multiple items + Pflege mehrere Einträge ein + + + + Ignore multiple items + Ignoriere mehrere Einträge + + + + Unignore multiple items + Ignoriere mehrere Einträge nicht mehr + + + + Revert multiple items + Setze mehrere Einträge zurück + KeyManagement @@ -904,67 +1072,67 @@ Hilfe - + Workspace Arbeitsbereich - + File Datei - + Recent Workspaces Vorherige Arbeitsbereiche - + Open Workspace Arbeitsbereich öffnen - + Ctrl+O Strg+O - + No previous workspaces available. Keine vorherigen Arbeitsbereiche verfügbar. Preferences.... - Einstellungen... + Einstellungen... - + Ctrl+P Strg+P - + Quit Beenden - + Ctrl+Q Strg+Q - + Hide ignored files Ignorierte Dateien verstecken - + Ctrl+H Strg+H - + All files Alle Dateien @@ -974,7 +1142,7 @@ A - + All changed files Alle geänderten Dateien @@ -984,7 +1152,7 @@ G - + Patched files Inhaltlich geänderte Dateien @@ -994,7 +1162,7 @@ P - + Added files Hinzugefügte Dateien @@ -1004,7 +1172,7 @@ H - + Removed files Entfernte Dateien @@ -1014,7 +1182,7 @@ E - + Renamed files Umbenannte Dateien @@ -1024,7 +1192,7 @@ U - + Missing files Fehlende Dateien @@ -1034,7 +1202,7 @@ F - + Unknown files Unbekannte Dateien @@ -1044,7 +1212,7 @@ K - + Ignored files Ignorierte Dateien @@ -1054,12 +1222,12 @@ I - + Expand tree Baum aufklappen - + Ctrl+T Strg+T @@ -1074,22 +1242,22 @@ Strg+R - + Key management Schlüsselverwaltung - + Ctrl+K Strg+K - + About Qt Über Qt - + About guitone Über guitone @@ -1104,12 +1272,12 @@ guitone - ein Frontend für monotone - + Select your workspace... Wählen Sie Ihren Arbeitsbereich aus... - + Loading aborted Laden abgebrochen @@ -1124,102 +1292,102 @@ 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 - + Recent Databases Vorherige Datenbanken - + Open Database Datenbank öffnen - + No previous databases available. Keine vorherigen geöffneten Datenbanken verfügbar. - + Database Datenbank - + Ctrl+Shift+O 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) - + Ctrl+B Strg+B - + Changeset browser Änderungen-Browser - + Close Schließen - + Alt+A Alt+A - + Alt+C Alt+C - + Alt+P Alt+P - + Alt+N Alt+N @@ -1235,82 +1403,82 @@ oder respektive auf Datei > Datenbank oder respektive auf Datei > Datenbank öffnen. - + Window Fenster - + Alt+D Alt+D - + Alt+R Alt+R - + Alt+M Alt+M - + Alt+U Alt+U - + Update workspace Arbeitsbereich aktualisieren - + Ctrl+U Strg+U - + Alt+I Alt+I - + Checkout revision Revision auschecken - + Ctrl+Shift+U Strg+Umschalt+U - + Bring all to front 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: @@ -1321,22 +1489,22 @@ monotone gab zurück: %2 - + Commit revision Revision einpflegen - + Ctrl+C Strg+C - + Failed to load workspace Konnte Arbeitsbereich nicht laden - + The workspace could not be loaded. The last output was: @@ -1347,12 +1515,12 @@ Die letzte Ausgabe war: %1 - + Failed to load database Konnte Datenbank nicht laden - + The database could not be loaded. The last output was: @@ -1362,6 +1530,26 @@ Die letzte Ausgabe war: %1 + + + Preferences... + Einstellungen... + + + + Check for updates + 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. + Manifest @@ -1444,32 +1632,32 @@ monotone gab zurück: Alle (Debugmeldungen) - + Error Fehler - + The path to the monotone binary is either invalid or points to an older version of monotone. Guitone requires monotone version %1 or a monotone with interface version %2 or later. Der Pfad zur ausführbaren Datei von monotone ist entweder ungültig oder zeigt auf eine ältere Version von monotone. Guitone benötigt monotone Version %1 oder ein monotone mit einer Interface-Version %2 oder neuer. - + Notice Hinweis - + You need to reload your current workspace or restart guitone to use the new monotone binary. Sie müssen Ihren derzeitigen Arbeitsbereich oder guitone neu laden, um die neue monotone-Binary zu nutzen. - + Choose the monotone executable Wählen Sie die ausführbare Datei von monotone - + Binaries (mtn mtn.exe) Binärdateien (mtn mtn.exe) @@ -1477,50 +1665,60 @@ monotone gab zurück: PreferencesDialog - + Preferences Einstellungen - + Path to monotone executable Pfad zur ausführbaren Datei von monotone - + Browse Durchsuchen - + Logging Logmeldungen - + enable console logging Konsolenlogging aktivieren - + enable file logging (%1) Dateilogging aktivieren (%1) - + Log level Log-Level - + OK OK - + Cancel Abbrechen + + + Miscellaneous + Verschiedenes + + + + check for updates on application launch + prüfe auf neue Versionen beim Start der Anwendung + QObject @@ -1591,22 +1789,22 @@ value "%3" QShortcut - + Ctrl Strg - + Alt Alt - + Shift Umschalt - + Meta Meta ============================================================ --- guitone/src/Guitone.cpp 6913449e1cc80aaedc4f4b70d4e49db43f4faa85 +++ guitone/src/Guitone.cpp a3673e29c1e23832700d69da44a3d62157d5e193 @@ -32,7 +32,8 @@ #include #include -Guitone::Guitone(int argc, char** argv) : QApplication(argc, argv) +Guitone::Guitone(int argc, char** argv) + : QApplication(argc, argv), updateDialog(0) { setQuitOnLastWindowClosed(false); @@ -43,9 +44,19 @@ bool Guitone::init() bool Guitone::init() { + if (Settings::getBool("CheckForUpdates", true)) + { #ifdef Q_WS_MAC - CocoaUtil::initialize(); + CocoaUtil::initialize(); +#else + updateDialog = new ApplicationUpdate(NULL); + if (updateDialog->updateAvailable()) + { + updateDialog->setStayOnTop(); + updateDialog->show(); + } #endif + } MainWindow * mainWnd = addWindow(); if (!addMonotoneInstance(mainWnd)) @@ -68,6 +79,7 @@ Guitone::~Guitone() { Q_ASSERT(openWindows.size() == 0); Q_ASSERT(monotoneInstances.size() == 0); + if (updateDialog) delete updateDialog; } void Guitone::loadWorkspace(const QString & path) ============================================================ --- guitone/src/Guitone.h 308ccb6cf259369f26927dd454feccb954918d25 +++ guitone/src/Guitone.h 39ee9b4581654307001c33dbd791252bf094d0bf @@ -46,6 +46,7 @@ #include "MainWindow.h" #include "Monotone.h" +#include "ApplicationUpdate.h" #include #include @@ -84,6 +85,8 @@ private: QList openWindows; QMap monotoneInstances; QMutex lock; + + ApplicationUpdate * updateDialog; }; #endif ============================================================ --- guitone/src/view/InventoryView.cpp 429343b0120096ed5aff50c08e88b5b01a74e073 +++ guitone/src/view/InventoryView.cpp a54de14edd4781734f92726cee3c21faad15004a @@ -377,27 +377,27 @@ void InventoryView::createAndConnectCont connect(actRename, SIGNAL(triggered()), this, SLOT(slotRename())); actAddMultiple = new QAction(tr("Add %1 items"), this); - actAddMultiple->setStatusTip(tr("Add multiple files")); + actAddMultiple->setStatusTip(tr("Add multiple items")); connect(actAddMultiple, SIGNAL(triggered()), this, SLOT(slotAdd())); actRemoveMultiple = new QAction(tr("Remove %1 items"), this); - actRemoveMultiple->setStatusTip(tr("Remove multiple files")); + actRemoveMultiple->setStatusTip(tr("Remove multiple items")); connect(actRemoveMultiple, SIGNAL(triggered()), this, SLOT(slotRemove())); actCommitMultiple = new QAction(tr("Commit %1 items"), this); - actCommitMultiple->setStatusTip(tr("Commit multiple files")); + actCommitMultiple->setStatusTip(tr("Commit multiple items")); connect(actCommitMultiple, SIGNAL(triggered()), this, SLOT(slotCommit())); actIgnoreMultiple = new QAction(tr("Ignore %1 items"), this); - actIgnoreMultiple->setStatusTip(tr("Ignore multiple files")); + actIgnoreMultiple->setStatusTip(tr("Ignore multiple items")); connect(actIgnoreMultiple, SIGNAL(triggered()), this, SLOT(slotIgnore())); actUnignoreMultiple = new QAction(tr("Unignore %1 items"), this); - actUnignoreMultiple->setStatusTip(tr("Unignore multiple files")); + actUnignoreMultiple->setStatusTip(tr("Unignore multiple items")); connect(actUnignoreMultiple, SIGNAL(triggered()), this, SLOT(slotUnignore())); actRevertMultiple = new QAction(tr("Revert %1 items"), this); - actRevertMultiple->setStatusTip(tr("Revert multiple files")); + actRevertMultiple->setStatusTip(tr("Revert multiple items")); connect(actRevertMultiple, SIGNAL(triggered()), this, SLOT(slotRevert())); } ============================================================ --- guitone/src/view/dialogs/Dialog.cpp 0fc11e87783526f1d650fecc3756af84b28b0afe +++ guitone/src/view/dialogs/Dialog.cpp e9ecf89d39050a297c2aa5717aad76f1a8601a8f @@ -66,13 +66,14 @@ int Dialog::execDocumentModal() int Dialog::execDocumentModal() { // ensure that this is only called from top level windows - Q_ASSERT(parent()->inherits("QMainWindow")); + QWidget * parent = parentWidget(); + Q_ASSERT(parent && parent->inherits("QMainWindow")); QMap enableState; // disable all menu actions (for some reason disabling the menuBar itself // does not result in the desired effect under OSX) - QList list = qobject_cast(parent())->menuBar()->actions(); + QList list = qobject_cast(parent)->menuBar()->actions(); foreach(QAction * act, list) { QList innerList = act->menu()->actions(); @@ -102,3 +103,9 @@ int Dialog::execDocumentModal() return result(); } +void Dialog::setStayOnTop() +{ + if (isVisible()) return; + setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); +} + ============================================================ --- guitone/src/view/dialogs/Dialog.h 39a78dfcb52548eac3012ef78dab3de7cec9c3a3 +++ guitone/src/view/dialogs/Dialog.h ce52b7c6e4c2dba2ae4b83fdf37cbf1bcda2b0bb @@ -32,6 +32,7 @@ public: Dialog(QWidget*, QString); ~Dialog(); void init(); + void setStayOnTop(); int execDocumentModal(); private: ============================================================ --- guitone/src/view/dialogs/Preferences.cpp aee8e3701cad4b88fcc8f8d32f0fe836d7083b00 +++ guitone/src/view/dialogs/Preferences.cpp 00aed581d2c8b7991731472f2e9e54cdbcb4771f @@ -47,7 +47,12 @@ Preferences::Preferences(QWidget* parent logLevel->addItem(tr("All (debug messages)"), 4); logLevel->setCurrentIndex(DebugLog::getLogLevel()-1); - + + checkForUpdates->setCheckState( + Settings::getBool("CheckForUpdates", true) ? + Qt::Checked : Qt::Unchecked + ); + connect( selectMtnExecutable, SIGNAL(clicked()), this, SLOT(openFileBrowser()) @@ -103,6 +108,8 @@ void Preferences::accept() DebugLog::setConsoleLogEnabled(consoleEnabled); DebugLog::setFileLogEnabled(fileEnabled); DebugLog::setLogLevel(level); + + Settings::setBool("CheckForUpdates", checkForUpdates->isChecked()); done(QDialog::Accepted); }