]> granicus.if.org Git - transmission/commitdiff
Use PascalCase for Qt client filenames
authorMike Gelfand <mikedld@mikedld.com>
Wed, 10 Jun 2015 21:27:11 +0000 (21:27 +0000)
committerMike Gelfand <mikedld@mikedld.com>
Wed, 10 Jun 2015 21:27:11 +0000 (21:27 +0000)
Split FileTree.{h,cc} and FilterBar.{h,cc} files so that each class
is in its own file.

This breaks translations (some classes got renamed => context changed),
to be fixed by next commit (along with Tx sync).

103 files changed:
qt/AboutDialog.cc [moved from qt/about.cc with 92% similarity]
qt/AboutDialog.h [moved from qt/about.h with 70% similarity]
qt/AboutDialog.ui [moved from qt/about.ui with 100% similarity]
qt/AddData.cc [moved from qt/add-data.cc with 96% similarity]
qt/AddData.h [moved from qt/add-data.h with 84% similarity]
qt/Application.cc [moved from qt/app.cc with 94% similarity]
qt/Application.h [moved from qt/app.h with 74% similarity]
qt/CMakeLists.txt
qt/ColumnResizer.cc [moved from qt/column-resizer.cc with 98% similarity]
qt/ColumnResizer.h [moved from qt/column-resizer.h with 95% similarity]
qt/CustomVariantType.h [moved from qt/types.h with 79% similarity]
qt/DBusAdaptor.cc [moved from qt/dbus-adaptor.cc with 57% similarity]
qt/DBusAdaptor.h [moved from qt/dbus-adaptor.h with 63% similarity]
qt/DetailsDialog.cc [moved from qt/details.cc with 95% similarity]
qt/DetailsDialog.h [moved from qt/details.h with 86% similarity]
qt/DetailsDialog.ui [moved from qt/details.ui with 99% similarity]
qt/FaviconCache.cc [moved from qt/favicon.cc with 87% similarity]
qt/FaviconCache.h [moved from qt/favicon.h with 82% similarity]
qt/FileTreeDelegate.cc [new file with mode: 0644]
qt/FileTreeDelegate.h [new file with mode: 0644]
qt/FileTreeItem.cc [new file with mode: 0644]
qt/FileTreeItem.h [new file with mode: 0644]
qt/FileTreeModel.cc [new file with mode: 0644]
qt/FileTreeModel.h [new file with mode: 0644]
qt/FileTreeView.cc [new file with mode: 0644]
qt/FileTreeView.h [new file with mode: 0644]
qt/FilterBar.cc [new file with mode: 0644]
qt/FilterBar.h [moved from qt/filterbar.h with 51% similarity]
qt/FilterBarComboBox.cc [new file with mode: 0644]
qt/FilterBarComboBox.h [new file with mode: 0644]
qt/FilterBarComboBoxDelegate.cc [new file with mode: 0644]
qt/FilterBarComboBoxDelegate.h [new file with mode: 0644]
qt/FilterBarLineEdit.cc [new file with mode: 0644]
qt/FilterBarLineEdit.h [new file with mode: 0644]
qt/Filters.cc [moved from qt/filters.cc with 94% similarity]
qt/Filters.h [moved from qt/filters.h with 95% similarity]
qt/Formatter.cc [moved from qt/formatter.cc with 97% similarity]
qt/Formatter.h [moved from qt/formatter.h with 89% similarity]
qt/FreeSpaceLabel.cc [moved from qt/freespace-label.cc with 83% similarity]
qt/FreeSpaceLabel.h [moved from qt/freespace-label.h with 69% similarity]
qt/IconToolButton.cc [moved from qt/tricontoolbutton.cc with 69% similarity]
qt/IconToolButton.h [moved from qt/tricontoolbutton.h with 70% similarity]
qt/LicenseDialog.cc [moved from qt/license.cc with 95% similarity]
qt/LicenseDialog.h [moved from qt/license.h with 66% similarity]
qt/MainWindow.cc [moved from qt/mainwin.cc with 90% similarity]
qt/MainWindow.h [moved from qt/mainwin.h with 91% similarity]
qt/MainWindow.ui [moved from qt/mainwin.ui with 99% similarity]
qt/MakeDialog.cc [moved from qt/make-dialog.cc with 94% similarity]
qt/MakeDialog.h [moved from qt/make-dialog.h with 82% similarity]
qt/MakeDialog.ui [moved from qt/make-dialog.ui with 96% similarity]
qt/MakeProgressDialog.ui [moved from qt/make-progress-dialog.ui with 100% similarity]
qt/OptionsDialog.cc [moved from qt/options.cc with 96% similarity]
qt/OptionsDialog.h [moved from qt/options.h with 86% similarity]
qt/OptionsDialog.ui [moved from qt/options.ui with 91% similarity]
qt/PathButton.cc [moved from qt/path-button.cc with 85% similarity]
qt/PathButton.h [moved from qt/path-button.h with 88% similarity]
qt/Prefs.cc [moved from qt/prefs.cc with 96% similarity]
qt/Prefs.h [moved from qt/prefs.h with 97% similarity]
qt/PrefsDialog.cc [moved from qt/prefs-dialog.cc with 96% similarity]
qt/PrefsDialog.h [moved from qt/prefs-dialog.h with 91% similarity]
qt/PrefsDialog.ui [moved from qt/prefs-dialog.ui with 98% similarity]
qt/RelocateDialog.cc [moved from qt/relocate.cc with 91% similarity]
qt/RelocateDialog.h [moved from qt/relocate.h with 78% similarity]
qt/RelocateDialog.ui [moved from qt/relocate.ui with 94% similarity]
qt/RpcClient.cc [moved from qt/rpc-client.cc with 98% similarity]
qt/RpcClient.h [moved from qt/rpc-client.h with 92% similarity]
qt/Session.cc [moved from qt/session.cc with 98% similarity]
qt/Session.h [moved from qt/session.h with 97% similarity]
qt/SessionDialog.cc [moved from qt/session-dialog.cc with 95% similarity]
qt/SessionDialog.h [moved from qt/session-dialog.h with 77% similarity]
qt/SessionDialog.ui [moved from qt/session-dialog.ui with 100% similarity]
qt/Speed.h [moved from qt/speed.h with 88% similarity]
qt/SqueezeLabel.cc [moved from qt/squeezelabel.cc with 99% similarity]
qt/SqueezeLabel.h [moved from qt/squeezelabel.h with 94% similarity]
qt/StatsDialog.cc [moved from qt/stats-dialog.cc with 92% similarity]
qt/StatsDialog.h [moved from qt/stats-dialog.h with 74% similarity]
qt/StatsDialog.ui [moved from qt/stats-dialog.ui with 100% similarity]
qt/Torrent.cc [moved from qt/torrent.cc with 97% similarity]
qt/Torrent.h [moved from qt/torrent.h with 97% similarity]
qt/TorrentDelegate.cc [moved from qt/torrent-delegate.cc with 99% similarity]
qt/TorrentDelegate.h [moved from qt/torrent-delegate.h with 94% similarity]
qt/TorrentDelegateMin.cc [moved from qt/torrent-delegate-min.cc with 98% similarity]
qt/TorrentDelegateMin.h [moved from qt/torrent-delegate-min.h with 85% similarity]
qt/TorrentFilter.cc [moved from qt/torrent-filter.cc with 96% similarity]
qt/TorrentFilter.h [moved from qt/torrent-filter.h with 93% similarity]
qt/TorrentModel.cc [moved from qt/torrent-model.cc with 98% similarity]
qt/TorrentModel.h [moved from qt/torrent-model.h with 93% similarity]
qt/TrackerDelegate.cc [moved from qt/tracker-delegate.cc with 97% similarity]
qt/TrackerDelegate.h [moved from qt/tracker-delegate.h with 92% similarity]
qt/TrackerModel.cc [moved from qt/tracker-model.cc with 97% similarity]
qt/TrackerModel.h [moved from qt/tracker-model.h with 87% similarity]
qt/TrackerModelFilter.cc [moved from qt/tracker-model-filter.cc with 86% similarity]
qt/TrackerModelFilter.h [moved from qt/tracker-model-filter.h with 87% similarity]
qt/Utils.cc [moved from qt/utils.cc with 96% similarity]
qt/Utils.h [moved from qt/utils.h with 87% similarity]
qt/WatchDir.cc [moved from qt/watchdir.cc with 96% similarity]
qt/WatchDir.h [moved from qt/watchdir.h with 86% similarity]
qt/file-tree.cc [deleted file]
qt/file-tree.h [deleted file]
qt/filterbar.cc [deleted file]
qt/hig.cc [deleted file]
qt/hig.h [deleted file]
qt/qtr.pro

similarity index 92%
rename from qt/about.cc
rename to qt/AboutDialog.cc
index 3ca7ed8689d885b1fd3e7dc20bef6b74008d3a59..a6265777b290a538b414a306f536f093e10cf438 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -15,8 +15,8 @@
 #include <libtransmission/transmission.h>
 #include <libtransmission/version.h>
 
-#include "about.h"
-#include "license.h"
+#include "AboutDialog.h"
+#include "LicenseDialog.h"
 
 AboutDialog::AboutDialog (QWidget * parent):
   QDialog (parent, Qt::Dialog),
similarity index 70%
rename from qt/about.h
rename to qt/AboutDialog.h
index 3a914a9022ecd2a1438ec317b8f7588e76edbcef..453a9e1b0721af3b2a283b93fedc38d9c76bd60a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,12 +7,12 @@
  * $Id$
  */
 
-#ifndef ABOUT_DIALOG_H
-#define ABOUT_DIALOG_H
+#ifndef QTR_ABOUT_DIALOG_H
+#define QTR_ABOUT_DIALOG_H
 
 #include <QDialog>
 
-#include "ui_about.h"
+#include "ui_AboutDialog.h"
 
 class AboutDialog: public QDialog
 {
@@ -30,4 +30,4 @@ class AboutDialog: public QDialog
     Ui::AboutDialog ui;
 };
 
-#endif
+#endif // QTR_ABOUT_DIALOG_H
similarity index 100%
rename from qt/about.ui
rename to qt/AboutDialog.ui
similarity index 96%
rename from qt/add-data.cc
rename to qt/AddData.cc
index fffc3726110e58db36db85ea014034d640259d79..d1edfc0bd11d8a7163fa4c1d5f4da2618fc45594 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -13,8 +13,8 @@
 #include <libtransmission/transmission.h>
 #include <libtransmission/crypto-utils.h> // tr_base64_encode()
 
-#include "add-data.h"
-#include "utils.h"
+#include "AddData.h"
+#include "Utils.h"
 
 int
 AddData::set (const QString& key)
similarity index 84%
rename from qt/add-data.h
rename to qt/AddData.h
index eda1eaee0e0fa83edf34ffaf6a06ac34dd24e2dd..1dcc60bfbf38fd15743d2c78ce9a3254ea24723b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef ADD_DATA_H
-#define ADD_DATA_H
+#ifndef QTR_ADD_DATA_H
+#define QTR_ADD_DATA_H
 
 #include <QByteArray>
 #include <QString>
@@ -40,4 +40,4 @@ class AddData
     static bool isSupported (const QString& str) { return AddData(str).type != NONE; }
 };
 
-#endif
+#endif // QTR_ADD_DATA_H
similarity index 94%
rename from qt/app.cc
rename to qt/Application.cc
index 810f3fcc7fe9935e4782a2f7181a5fcc53542a98..53aa76969811d2ce556f2204aa36d93edd8b4362 100644 (file)
--- a/qt/app.cc
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/utils.h>
 #include <libtransmission/version.h>
 
-#include "add-data.h"
-#include "app.h"
-#include "dbus-adaptor.h"
-#include "formatter.h"
-#include "mainwin.h"
-#include "options.h"
-#include "prefs.h"
-#include "session.h"
-#include "session-dialog.h"
-#include "torrent-model.h"
-#include "watchdir.h"
+#include "AddData.h"
+#include "Application.h"
+#include "DBusAdaptor.h"
+#include "Formatter.h"
+#include "MainWindow.h"
+#include "OptionsDialog.h"
+#include "Prefs.h"
+#include "Session.h"
+#include "SessionDialog.h"
+#include "TorrentModel.h"
+#include "WatchDir.h"
 
 namespace
 {
@@ -87,7 +87,7 @@ namespace
   }
 }
 
-MyApp::MyApp (int& argc, char ** argv):
+Application::Application (int& argc, char ** argv):
   QApplication (argc, argv),
   myPrefs(nullptr),
   mySession(nullptr),
@@ -245,7 +245,7 @@ MyApp::MyApp (int& argc, char ** argv):
 
   mySession = new Session (configDir, *myPrefs);
   myModel = new TorrentModel (*myPrefs);
-  myWindow = new TrMainWindow (*mySession, *myPrefs, *myModel, minimized);
+  myWindow = new MainWindow (*mySession, *myPrefs, *myModel, minimized);
   myWatchDir = new WatchDir (*myModel);
 
   // when the session gets torrent info, update the model
@@ -324,7 +324,7 @@ MyApp::MyApp (int& argc, char ** argv):
   // register as the dbus handler for Transmission
   if (bus.isConnected ())
     {
-      new TrDBusAdaptor (this);
+      new DBusAdaptor (this);
       if (!bus.registerService (DBUS_SERVICE))
         std::cerr << "couldn't register " << qPrintable (DBUS_SERVICE) << std::endl;
       if (!bus.registerObject (DBUS_OBJECT_PATH, this))
@@ -333,7 +333,7 @@ MyApp::MyApp (int& argc, char ** argv):
 }
 
 void
-MyApp::quitLater ()
+Application::quitLater ()
 {
   QTimer::singleShot (0, this, SLOT (quit ()));
 }
@@ -341,7 +341,7 @@ MyApp::quitLater ()
 /* these functions are for popping up desktop notifications */
 
 void
-MyApp::onTorrentsAdded (const QSet<int>& torrents)
+Application::onTorrentsAdded (const QSet<int>& torrents)
 {
   if (!myPrefs->getBool (Prefs::SHOW_NOTIFICATION_ON_ADD))
     return;
@@ -365,7 +365,7 @@ MyApp::onTorrentsAdded (const QSet<int>& torrents)
 }
 
 void
-MyApp::onTorrentCompleted (int id)
+Application::onTorrentCompleted (int id)
 {
   Torrent * tor = myModel->getTorrentFromId (id);
 
@@ -388,7 +388,7 @@ MyApp::onTorrentCompleted (int id)
 }
 
 void
-MyApp::onNewTorrentChanged (int id)
+Application::onNewTorrentChanged (int id)
 {
   Torrent * tor = myModel->getTorrentFromId (id);
 
@@ -410,7 +410,7 @@ MyApp::onNewTorrentChanged (int id)
 ***/
 
 void
-MyApp::consentGiven (int result)
+Application::consentGiven (int result)
 {
   if (result == QMessageBox::Ok)
     myPrefs->set<bool> (Prefs::USER_HAS_GIVEN_INFORMED_CONSENT, true);
@@ -418,7 +418,7 @@ MyApp::consentGiven (int result)
     quit ();
 }
 
-MyApp::~MyApp ()
+Application::~Application ()
 {
   if (myPrefs != nullptr && myWindow != nullptr)
     {
@@ -441,7 +441,7 @@ MyApp::~MyApp ()
 ***/
 
 void
-MyApp::refreshPref (int key)
+Application::refreshPref (int key)
 {
   switch (key)
     {
@@ -464,7 +464,7 @@ MyApp::refreshPref (int key)
 }
 
 void
-MyApp::maybeUpdateBlocklist ()
+Application::maybeUpdateBlocklist ()
 {
   if (!myPrefs->getBool (Prefs::BLOCKLIST_UPDATES_ENABLED))
     return;
@@ -481,7 +481,7 @@ MyApp::maybeUpdateBlocklist ()
 }
 
 void
-MyApp::onSessionSourceChanged ()
+Application::onSessionSourceChanged ()
 {
   mySession->initTorrents ();
   mySession->refreshSessionStats ();
@@ -489,7 +489,7 @@ MyApp::onSessionSourceChanged ()
 }
 
 void
-MyApp::refreshTorrents ()
+Application::refreshTorrents ()
 {
   // usually we just poll the torrents that have shown recent activity,
   // but we also periodically ask for updates on the others to ensure
@@ -511,7 +511,7 @@ MyApp::refreshTorrents ()
 ***/
 
 void
-MyApp::addTorrent (const QString& key)
+Application::addTorrent (const QString& key)
 {
   const AddData addme (key);
 
@@ -520,7 +520,7 @@ MyApp::addTorrent (const QString& key)
 }
 
 void
-MyApp::addTorrent (const AddData& addme)
+Application::addTorrent (const AddData& addme)
 {
   if (!myPrefs->getBool (Prefs::OPTIONS_PROMPT))
     {
@@ -540,13 +540,13 @@ MyApp::addTorrent (const AddData& addme)
 ***/
 
 void
-MyApp::raise ()
+Application::raise ()
 {
   alert (myWindow);
 }
 
 bool
-MyApp::notifyApp (const QString& title, const QString& body) const
+Application::notifyApp (const QString& title, const QString& body) const
 {
   const QString dbusServiceName   = QString::fromUtf8 ("org.freedesktop.Notifications");
   const QString dbusInterfaceName = QString::fromUtf8 ("org.freedesktop.Notifications");
@@ -577,6 +577,6 @@ int
 tr_main (int    argc,
          char * argv[])
 {
-  MyApp app (argc, argv);
+  Application app (argc, argv);
   return app.exec ();
 }
similarity index 74%
rename from qt/app.h
rename to qt/Application.h
index eda5f35c3af048704a4536b1cd97a2108fc7e1c2..40268153ad3645a0c3596f810e31b19761cdb4ac 100644 (file)
--- a/qt/app.h
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,43 +7,43 @@
  * $Id$
  */
 
-#ifndef QTR_APP_H
-#define QTR_APP_H
+#ifndef QTR_APPLICATION_H
+#define QTR_APPLICATION_H
 
 #include <QApplication>
 #include <QSet>
 #include <QTimer>
 #include <QTranslator>
 
-#include "favicon.h"
+#include "FaviconCache.h"
 
 class AddData;
 class Prefs;
 class Session;
 class TorrentModel;
-class TrMainWindow;
+class MainWindow;
 class WatchDir;
 
-class MyApp: public QApplication
+class Application: public QApplication
 {
     Q_OBJECT
 
   public:
-    MyApp (int& argc, char ** argv);
-    virtual ~MyApp ();
+    Application (int& argc, char ** argv);
+    virtual ~Application ();
 
   public:
     void raise ();
     bool notifyApp (const QString& title, const QString& body) const;
 
   public:
-    Favicons favicons;
+    FaviconCache favicons;
 
   private:
     Prefs * myPrefs;
     Session * mySession;
     TorrentModel * myModel;
-    TrMainWindow * myWindow;
+    MainWindow * myWindow;
     WatchDir * myWatchDir;
     QTimer myModelTimer;
     QTimer myStatsTimer;
@@ -72,6 +72,6 @@ class MyApp: public QApplication
 };
 
 #undef qApp
-#define qApp static_cast<MyApp*> (MyApp::instance ())
+#define qApp static_cast<Application*> (Application::instance ())
 
-#endif
+#endif // QTR_APPLICATION_H
index 5c8ae8df2a8ac9d7a2a9c004137fa2455e82c4e5..485efce3cad15201a7a2ba891a3f3c0770695b0a 100644 (file)
@@ -25,98 +25,108 @@ else()
 endif()
 
 set(${PROJECT_NAME}_SOURCES
-    about.cc
-    add-data.cc
-    app.cc
-    column-resizer.cc
-    dbus-adaptor.cc
-    details.cc
-    favicon.cc
-    file-tree.cc
-    filterbar.cc
-    filters.cc
-    formatter.cc
-    freespace-label.cc
-    hig.cc
-    license.cc
-    mainwin.cc
-    make-dialog.cc
-    options.cc
-    path-button.cc
-    prefs-dialog.cc
-    prefs.cc
-    relocate.cc
-    rpc-client.cc
-    session-dialog.cc
-    session.cc
-    squeezelabel.cc
-    stats-dialog.cc
-    torrent-delegate-min.cc
-    torrent-delegate.cc
-    torrent-filter.cc
-    torrent-model.cc
-    torrent.cc
-    tracker-delegate.cc
-    tracker-model-filter.cc
-    tracker-model.cc
-    tricontoolbutton.cc
-    utils.cc
-    watchdir.cc
+    AboutDialog.cc
+    AddData.cc
+    Application.cc
+    ColumnResizer.cc
+    DBusAdaptor.cc
+    DetailsDialog.cc
+    FaviconCache.cc
+    FileTreeDelegate.cc
+    FileTreeItem.cc
+    FileTreeModel.cc
+    FileTreeView.cc
+    FilterBar.cc
+    FilterBarComboBox.cc
+    FilterBarComboBoxDelegate.cc
+    FilterBarLineEdit.cc
+    Filters.cc
+    Formatter.cc
+    FreeSpaceLabel.cc
+    IconToolButton.cc
+    LicenseDialog.cc
+    MainWindow.cc
+    MakeDialog.cc
+    OptionsDialog.cc
+    PathButton.cc
+    Prefs.cc
+    PrefsDialog.cc
+    RelocateDialog.cc
+    RpcClient.cc
+    Session.cc
+    SessionDialog.cc
+    SqueezeLabel.cc
+    StatsDialog.cc
+    Torrent.cc
+    TorrentDelegate.cc
+    TorrentDelegateMin.cc
+    TorrentFilter.cc
+    TorrentModel.cc
+    TrackerDelegate.cc
+    TrackerModel.cc
+    TrackerModelFilter.cc
+    Utils.cc
+    WatchDir.cc
 )
 
 set(${PROJECT_NAME}_HEADERS
-    about.h
-    add-data.h
-    app.h
-    column-resizer.h
-    dbus-adaptor.h
-    details.h
-    favicon.h
-    file-tree.h
-    filterbar.h
-    filters.h
-    formatter.h
-    freespace-label.h
-    hig.h
-    license.h
-    mainwin.h
-    make-dialog.h
-    options.h
-    path-button.h
-    prefs-dialog.h
-    prefs.h
-    relocate.h
-    rpc-client.h
-    session-dialog.h
-    session.h
-    speed.h
-    squeezelabel.h
-    stats-dialog.h
-    torrent-delegate-min.h
-    torrent-delegate.h
-    torrent-filter.h
-    torrent-model.h
-    torrent.h
-    tracker-delegate.h
-    tracker-model-filter.h
-    tracker-model.h
-    tricontoolbutton.h
-    types.h
-    utils.h
-    watchdir.h
+    AboutDialog.h
+    AddData.h
+    Application.h
+    ColumnResizer.h
+    CustomVariantType.h
+    DBusAdaptor.h
+    DetailsDialog.h
+    FaviconCache.h
+    FileTreeDelegate.h
+    FileTreeItem.h
+    FileTreeModel.h
+    FileTreeView.h
+    FilterBar.h
+    FilterBarComboBox.h
+    FilterBarComboBoxDelegate.h
+    FilterBarLineEdit.h
+    Filters.h
+    Formatter.h
+    FreeSpaceLabel.h
+    IconToolButton.h
+    LicenseDialog.h
+    MainWindow.h
+    MakeDialog.h
+    OptionsDialog.h
+    PathButton.h
+    Prefs.h
+    PrefsDialog.h
+    RelocateDialog.h
+    RpcClient.h
+    Session.h
+    SessionDialog.h
+    Speed.h
+    SqueezeLabel.h
+    StatsDialog.h
+    Torrent.h
+    TorrentDelegate.h
+    TorrentDelegateMin.h
+    TorrentFilter.h
+    TorrentModel.h
+    TrackerDelegate.h
+    TrackerModel.h
+    TrackerModelFilter.h
+    Utils.h
+    WatchDir.h
 )
 
 tr_qt_wrap_ui(${PROJECT_NAME}_UI_SOURCES
-    about.ui
-    details.ui
-    mainwin.ui
-    make-dialog.ui
-    make-progress-dialog.ui
-    options.ui
-    prefs-dialog.ui
-    relocate.ui
-    session-dialog.ui
-    stats-dialog.ui
+    AboutDialog.ui
+    DetailsDialog.ui
+    MainWindow.ui
+    MakeDialog.ui
+    MakeProgressDialog.ui
+    OptionsDialog.ui
+    PrefsDialog.ui
+    RelocateDialog.ui
+    SessionDialog.ui
+    StatsDialog.ui
 )
 
 set(${PROJECT_NAME}_QRC_FILES application.qrc)
similarity index 98%
rename from qt/column-resizer.cc
rename to qt/ColumnResizer.cc
index dc4671c2ad925f59b2c523846aa6c072060efc2b..bb8911a3d6b6920a3a0447628cc03c8028dace96 100644 (file)
@@ -11,7 +11,7 @@
 #include <QGridLayout>
 #include <QTimer>
 
-#include "column-resizer.h"
+#include "ColumnResizer.h"
 
 namespace
 {
similarity index 95%
rename from qt/column-resizer.h
rename to qt/ColumnResizer.h
index 24eba3c5f7ae6a8c7c980b40a6cb59ae0317715b..d8404164806e1385279d6a133837fe50483058f7 100644 (file)
@@ -38,4 +38,4 @@ class ColumnResizer: public QObject
     QSet<QGridLayout *> myLayouts;
 };
 
-#endif
+#endif // QTR_COLUMN_RESIZER_H
similarity index 79%
rename from qt/types.h
rename to qt/CustomVariantType.h
index 17cccf662b311db4cba39661c49b279a75cdbb6e..b70f15288af9e09ed105ec9adf32abf636e1b975 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -12,7 +12,7 @@
 
 #include <QVariant>
 
-class TrTypes
+class CustomVariantType
 {
   public:
 
@@ -26,4 +26,4 @@ class TrTypes
     };
 };
 
-#endif
+#endif // QTR_TYPES_H
similarity index 57%
rename from qt/dbus-adaptor.cc
rename to qt/DBusAdaptor.cc
index 0078a9f49b65c318fbef4c9f1a1f2a988ff35f8a..6e41cd83e4b6fe2d2c9ba4932e0ddae3ee98918f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,25 +7,25 @@
  * $Id$
  */
 
-#include "add-data.h"
-#include "app.h"
-#include "dbus-adaptor.h"
+#include "AddData.h"
+#include "Application.h"
+#include "DBusAdaptor.h"
 
-TrDBusAdaptor::TrDBusAdaptor (MyApp* app):
+DBusAdaptor::DBusAdaptor (Application* app):
   QDBusAbstractAdaptor (app),
   myApp (app)
 {
 }
 
 bool
-TrDBusAdaptor::PresentWindow ()
+DBusAdaptor::PresentWindow ()
 {
   myApp->raise ();
   return true;
 }
 
 bool
-TrDBusAdaptor::AddMetainfo (const QString& key)
+DBusAdaptor::AddMetainfo (const QString& key)
 {
   AddData addme (key);
 
similarity index 63%
rename from qt/dbus-adaptor.h
rename to qt/DBusAdaptor.h
index 9d9f53a481f8f009a0480d058567ed8d6def4c1a..dfdab9ed911bf718c9fe639e5503c4232c980316 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #ifndef QTR_DBUS_ADAPTOR_H
 #define QTR_DBUS_ADAPTOR_H
 
-class MyApp;
-
 #include <QDBusAbstractAdaptor>
 
-class TrDBusAdaptor: public QDBusAbstractAdaptor
+class Application;
+
+class DBusAdaptor: public QDBusAbstractAdaptor
 {
     Q_OBJECT
     Q_CLASSINFO( "D-Bus Interface", "com.transmissionbt.Transmission" )
 
   private:
-    MyApp * myApp;
+    Application * myApp;
 
   public:
-    TrDBusAdaptor( MyApp* );
-    virtual ~TrDBusAdaptor() {}
+    DBusAdaptor( Application* );
+    virtual ~DBusAdaptor() {}
 
   public slots:
     bool PresentWindow();
     bool AddMetainfo( const QString& );
 };
 
-#endif
+#endif // QTR_DBUS_ADAPTOR_H
similarity index 95%
rename from qt/details.cc
rename to qt/DetailsDialog.cc
index 25daa3471924cff3d82148189f6daeeabe5ef503..d070fa5fe8dab61647e2e6cbb784edc8cde8a6fb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/transmission.h>
 #include <libtransmission/utils.h> // tr_getRatio ()
 
-#include "column-resizer.h"
-#include "details.h"
-#include "file-tree.h"
-#include "formatter.h"
-#include "hig.h"
-#include "prefs.h"
-#include "session.h"
-#include "squeezelabel.h"
-#include "torrent.h"
-#include "torrent-model.h"
-#include "tracker-delegate.h"
-#include "tracker-model.h"
-#include "tracker-model-filter.h"
-#include "utils.h"
+#include "ColumnResizer.h"
+#include "DetailsDialog.h"
+#include "Formatter.h"
+#include "Prefs.h"
+#include "Session.h"
+#include "SqueezeLabel.h"
+#include "Torrent.h"
+#include "TorrentModel.h"
+#include "TrackerDelegate.h"
+#include "TrackerModel.h"
+#include "TrackerModelFilter.h"
+#include "Utils.h"
 
 class Prefs;
 class Session;
@@ -164,7 +162,7 @@ class PeerItem: public QTreeWidgetItem
 ***/
 
 QIcon
-Details::getStockIcon (const QString& freedesktop_name, int fallback)
+DetailsDialog::getStockIcon (const QString& freedesktop_name, int fallback)
 {
   QIcon icon = QIcon::fromTheme (freedesktop_name);
 
@@ -174,7 +172,7 @@ Details::getStockIcon (const QString& freedesktop_name, int fallback)
   return icon;
 }
 
-Details::Details (Session       & session,
+DetailsDialog::DetailsDialog (Session       & session,
                   Prefs         & prefs,
                   const TorrentModel& model,
                   QWidget       * parent):
@@ -212,7 +210,7 @@ Details::Details (Session       & session,
   myTimer.start (REFRESH_INTERVAL_MSEC);
 }
 
-Details::~Details ()
+DetailsDialog::~DetailsDialog ()
 {
   myTrackerDelegate->deleteLater ();
   myTrackerFilter->deleteLater ();
@@ -220,7 +218,7 @@ Details::~Details ()
 }
 
 void
-Details::setIds (const QSet<int>& ids)
+DetailsDialog::setIds (const QSet<int>& ids)
 {
   if (ids == myIds)
     return;
@@ -254,7 +252,7 @@ Details::setIds (const QSet<int>& ids)
 }
 
 void
-Details::refreshPref (int key)
+DetailsDialog::refreshPref (int key)
 {
   QString str;
 
@@ -288,7 +286,7 @@ Details::refreshPref (int key)
 ***/
 
 QString
-Details::timeToStringRounded (int seconds)
+DetailsDialog::timeToStringRounded (int seconds)
 {
   if (seconds > 60)
     seconds -= (seconds % 60);
@@ -297,13 +295,13 @@ Details::timeToStringRounded (int seconds)
 }
 
 void
-Details::onTimer ()
+DetailsDialog::onTimer ()
 {
   getNewData ();
 }
 
 void
-Details::getNewData ()
+DetailsDialog::getNewData ()
 {
   if (!myIds.empty ())
     {
@@ -322,7 +320,7 @@ Details::getNewData ()
 }
 
 void
-Details::onTorrentChanged ()
+DetailsDialog::onTorrentChanged ()
 {
   if (!myHavePendingRefresh)
     {
@@ -365,7 +363,7 @@ namespace
 }
 
 void
-Details::refresh ()
+DetailsDialog::refresh ()
 {
   const int n = myIds.size ();
   const bool single = n == 1;
@@ -961,7 +959,7 @@ Details::refresh ()
 ***/
 
 void
-Details::initInfoTab ()
+DetailsDialog::initInfoTab ()
 {
   const int h = QFontMetrics (ui.commentBrowser->font ()).lineSpacing () * 4;
   ui.commentBrowser->setFixedHeight (h);
@@ -977,31 +975,31 @@ Details::initInfoTab ()
 ***/
 
 void
-Details::onShowTrackerScrapesToggled (bool val)
+DetailsDialog::onShowTrackerScrapesToggled (bool val)
 {
   myPrefs.set (Prefs::SHOW_TRACKER_SCRAPES, val);
 }
 
 void
-Details::onShowBackupTrackersToggled (bool val)
+DetailsDialog::onShowBackupTrackersToggled (bool val)
 {
   myPrefs.set (Prefs::SHOW_BACKUP_TRACKERS, val);
 }
 
 void
-Details::onHonorsSessionLimitsToggled (bool val)
+DetailsDialog::onHonorsSessionLimitsToggled (bool val)
 {
   mySession.torrentSet (myIds, TR_KEY_honorsSessionLimits, val);
   getNewData ();
 }
 void
-Details::onDownloadLimitedToggled (bool val)
+DetailsDialog::onDownloadLimitedToggled (bool val)
 {
   mySession.torrentSet (myIds, TR_KEY_downloadLimited, val);
   getNewData ();
 }
 void
-Details::onSpinBoxEditingFinished ()
+DetailsDialog::onSpinBoxEditingFinished ()
 {
   const QObject * spin = sender ();
   const tr_quark key = spin->property (PREF_KEY).toInt ();
@@ -1014,14 +1012,14 @@ Details::onSpinBoxEditingFinished ()
 }
 
 void
-Details::onUploadLimitedToggled (bool val)
+DetailsDialog::onUploadLimitedToggled (bool val)
 {
   mySession.torrentSet (myIds, TR_KEY_uploadLimited, val);
   getNewData ();
 }
 
 void
-Details::onIdleModeChanged (int index)
+DetailsDialog::onIdleModeChanged (int index)
 {
   const int val = ui.idleCombo->itemData (index).toInt ();
   mySession.torrentSet (myIds, TR_KEY_seedIdleMode, val);
@@ -1029,7 +1027,7 @@ Details::onIdleModeChanged (int index)
 }
 
 void
-Details::onIdleLimitChanged ()
+DetailsDialog::onIdleLimitChanged ()
 {
   //: Spin box suffix, "Stop seeding if idle for: [ 5 minutes ]" (includes leading space after the number, if needed)
   const QString unitsSuffix = tr (" minute(s)", 0, ui.idleSpin->value ());
@@ -1038,14 +1036,14 @@ Details::onIdleLimitChanged ()
 }
 
 void
-Details::onRatioModeChanged (int index)
+DetailsDialog::onRatioModeChanged (int index)
 {
   const int val = ui.ratioCombo->itemData (index).toInt ();
   mySession.torrentSet (myIds, TR_KEY_seedRatioMode, val);
 }
 
 void
-Details::onBandwidthPriorityChanged (int index)
+DetailsDialog::onBandwidthPriorityChanged (int index)
 {
   if (index != -1)
     {
@@ -1056,7 +1054,7 @@ Details::onBandwidthPriorityChanged (int index)
 }
 
 void
-Details::onTrackerSelectionChanged ()
+DetailsDialog::onTrackerSelectionChanged ()
 {
   const int selectionCount = ui.trackersView->selectionModel ()->selectedRows ().size ();
   ui.editTrackerButton->setEnabled (selectionCount == 1);
@@ -1064,7 +1062,7 @@ Details::onTrackerSelectionChanged ()
 }
 
 void
-Details::onAddTrackerClicked ()
+DetailsDialog::onAddTrackerClicked ()
 {
   bool ok = false;
   const QString url = QInputDialog::getText (this,
@@ -1102,7 +1100,7 @@ Details::onAddTrackerClicked ()
 }
 
 void
-Details::onEditTrackerClicked ()
+DetailsDialog::onEditTrackerClicked ()
 {
   QItemSelectionModel * selectionModel = ui.trackersView->selectionModel ();
   QModelIndexList selectedRows = selectionModel->selectedRows ();
@@ -1138,7 +1136,7 @@ Details::onEditTrackerClicked ()
 }
 
 void
-Details::onRemoveTrackerClicked ()
+DetailsDialog::onRemoveTrackerClicked ()
 {
   // make a map of torrentIds to announce URLs to remove
   QItemSelectionModel * selectionModel = ui.trackersView->selectionModel ();
@@ -1163,7 +1161,7 @@ Details::onRemoveTrackerClicked ()
 }
 
 void
-Details::initOptionsTab ()
+DetailsDialog::initOptionsTab ()
 {
   const QString speed_K_str = Formatter::unitStr (Formatter::SPEED, Formatter::KB);
 
@@ -1214,7 +1212,7 @@ Details::initOptionsTab ()
 ***/
 
 void
-Details::initTrackerTab ()
+DetailsDialog::initTrackerTab ()
 {
   myTrackerModel = new TrackerModel ();
   myTrackerFilter = new TrackerModelFilter ();
@@ -1247,7 +1245,7 @@ Details::initTrackerTab ()
 ***/
 
 void
-Details::initPeersTab ()
+DetailsDialog::initPeersTab ()
 {
   QStringList headers;
   headers << QString () << tr ("Up") << tr ("Down") << tr ("%") << tr ("Status") << tr ("Address") << tr ("Client");
@@ -1268,7 +1266,7 @@ Details::initPeersTab ()
 ***/
 
 void
-Details::initFilesTab ()
+DetailsDialog::initFilesTab ()
 {
   connect (ui.filesView, SIGNAL (priorityChanged (QSet<int>, int)), SLOT (onFilePriorityChanged (QSet<int>, int)));
   connect (ui.filesView, SIGNAL (wantedChanged (QSet<int>, bool)), SLOT (onFileWantedChanged (QSet<int>, bool)));
@@ -1277,7 +1275,7 @@ Details::initFilesTab ()
 }
 
 void
-Details::onFilePriorityChanged (const QSet<int>& indices, int priority)
+DetailsDialog::onFilePriorityChanged (const QSet<int>& indices, int priority)
 {
   tr_quark key;
 
@@ -1301,7 +1299,7 @@ Details::onFilePriorityChanged (const QSet<int>& indices, int priority)
 }
 
 void
-Details::onFileWantedChanged (const QSet<int>& indices, bool wanted)
+DetailsDialog::onFileWantedChanged (const QSet<int>& indices, bool wanted)
 {
   const tr_quark key = wanted ? TR_KEY_files_wanted : TR_KEY_files_unwanted;
   mySession.torrentSet (myIds, key, indices.toList ());
@@ -1309,13 +1307,13 @@ Details::onFileWantedChanged (const QSet<int>& indices, bool wanted)
 }
 
 void
-Details::onPathEdited (const QString& oldpath, const QString& newname)
+DetailsDialog::onPathEdited (const QString& oldpath, const QString& newname)
 {
   mySession.torrentRenamePath (myIds, oldpath, newname);
 }
 
 void
-Details::onOpenRequested (const QString& path)
+DetailsDialog::onOpenRequested (const QString& path)
 {
   if (!mySession.isLocal ())
     return;
similarity index 86%
rename from qt/details.h
rename to qt/DetailsDialog.h
index fb304e23a309b2b91abde1827b21ccc71fbbfddd..8d0f60a3b3a6a3388662d64602141c1276f798a5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef DETAILS_DIALOG_H
-#define DETAILS_DIALOG_H
+#ifndef QTR_DETAILS_DIALOG_H
+#define QTR_DETAILS_DIALOG_H
 
 #include <QDialog>
 #include <QString>
@@ -16,9 +16,9 @@
 #include <QSet>
 #include <QTimer>
 
-#include "prefs.h"
+#include "Prefs.h"
 
-#include "ui_details.h"
+#include "ui_DetailsDialog.h"
 
 class QTreeWidgetItem;
 class Session;
@@ -28,7 +28,7 @@ class TrackerDelegate;
 class TrackerModel;
 class TrackerModelFilter;
 
-class Details: public QDialog
+class DetailsDialog: public QDialog
 {
     Q_OBJECT
 
@@ -40,8 +40,8 @@ class Details: public QDialog
     void onTimer ();
 
   public:
-    Details (Session&, Prefs&, const TorrentModel&, QWidget * parent = 0);
-    ~Details ();
+    DetailsDialog (Session&, Prefs&, const TorrentModel&, QWidget * parent = 0);
+    ~DetailsDialog ();
     void setIds (const QSet<int>& ids);
     virtual QSize sizeHint () const { return QSize (440, 460); }
 
@@ -97,4 +97,4 @@ class Details: public QDialog
     void refresh ();
 };
 
-#endif
+#endif // QTR_DETAILS_DIALOG_H
similarity index 99%
rename from qt/details.ui
rename to qt/DetailsDialog.ui
index 2b20a1b759351a66154febbc3b8fd82be279562e..f0cb906415f8f54afcb51851ad7a58998005b866 100644 (file)
   <customwidget>
    <class>SqueezeLabel</class>
    <extends>QLabel</extends>
-   <header>squeezelabel.h</header>
+   <header>SqueezeLabel.h</header>
   </customwidget>
   <customwidget>
    <class>FileTreeView</class>
    <extends>QTreeView</extends>
-   <header>file-tree.h</header>
+   <header>FileTreeView.h</header>
   </customwidget>
  </customwidgets>
  <resources/>
similarity index 87%
rename from qt/favicon.cc
rename to qt/FaviconCache.cc
index 30a3771b21388727c8fc6dfa26667095b13336c8..dc8eaa9b8f1f6a5924cbc58c601bd59faa499b67 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
  #include <QStandardPaths>
 #endif
 
-#include "favicon.h"
+#include "FaviconCache.h"
 
 /***
 ****
 ***/
 
-Favicons::Favicons ()
+FaviconCache::FaviconCache ()
 {
   myNAM = new QNetworkAccessManager ();
   connect (myNAM, SIGNAL(finished(QNetworkReply*)), this, SLOT(onRequestFinished(QNetworkReply*)));
 }
 
-Favicons::~Favicons ()
+FaviconCache::~FaviconCache ()
 {
   delete myNAM;
 }
@@ -40,7 +40,7 @@ Favicons::~Favicons ()
 ***/
 
 QString
-Favicons::getCacheDir ()
+FaviconCache::getCacheDir ()
 {
   const QString base =
 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
@@ -53,7 +53,7 @@ Favicons::getCacheDir ()
 }
 
 void
-Favicons::ensureCacheDirHasBeenScanned ()
+FaviconCache::ensureCacheDirHasBeenScanned ()
 {
   static bool hasBeenScanned = false;
 
@@ -76,7 +76,7 @@ Favicons::ensureCacheDirHasBeenScanned ()
 }
 
 QString
-Favicons::getHost (const QUrl& url)
+FaviconCache::getHost (const QUrl& url)
 {
   QString host = url.host ();
   const int first_dot = host.indexOf (QLatin1Char ('.'));
@@ -89,19 +89,19 @@ Favicons::getHost (const QUrl& url)
 }
 
 QSize
-Favicons::getIconSize ()
+FaviconCache::getIconSize ()
 {
   return QSize (16, 16);
 }
 
 QPixmap
-Favicons::find (const QUrl& url)
+FaviconCache::find (const QUrl& url)
 {
   return findFromHost (getHost (url));
 }
 
 QPixmap
-Favicons::findFromHost (const QString& host)
+FaviconCache::findFromHost (const QString& host)
 {
   ensureCacheDirHasBeenScanned ();
 
@@ -111,7 +111,7 @@ Favicons::findFromHost (const QString& host)
 }
 
 void
-Favicons::add (const QUrl& url)
+FaviconCache::add (const QUrl& url)
 {
   ensureCacheDirHasBeenScanned ();
 
@@ -132,7 +132,7 @@ Favicons::add (const QUrl& url)
 }
 
 void
-Favicons::onRequestFinished (QNetworkReply * reply)
+FaviconCache::onRequestFinished (QNetworkReply * reply)
 {
   const QString host = reply->url().host();
 
similarity index 82%
rename from qt/favicon.h
rename to qt/FaviconCache.h
index 585c2fe588c702f6d9c82acb58b86c34fb4bd77a..06eaeb4304af18ab7959a209a31f0444850fa6ef 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,19 +7,19 @@
  * $Id$
  */
 
-#ifndef FAVICON_CACHE_H
-#define FAVICON_CACHE_H
-
-class QNetworkAccessManager;
-class QNetworkReply;
-class QUrl;
+#ifndef QTR_FAVICON_CACHE_H
+#define QTR_FAVICON_CACHE_H
 
 #include <QMap>
 #include <QString>
 #include <QObject>
 #include <QPixmap>
 
-class Favicons: public QObject
+class QNetworkAccessManager;
+class QNetworkReply;
+class QUrl;
+
+class FaviconCache: public QObject
 {
     Q_OBJECT
 
@@ -30,8 +30,8 @@ class Favicons: public QObject
 
   public:
 
-    Favicons();
-    virtual ~Favicons();
+    FaviconCache();
+    virtual ~FaviconCache();
 
     // returns a cached pixmap, or a NULL pixmap if there's no match in the cache
     QPixmap find (const QUrl& url);
@@ -59,4 +59,4 @@ class Favicons: public QObject
     void onRequestFinished (QNetworkReply * reply);
 };
 
-#endif
+#endif // QTR_FAVICON_CACHE_H
diff --git a/qt/FileTreeDelegate.cc b/qt/FileTreeDelegate.cc
new file mode 100644 (file)
index 0000000..a08f2c2
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <QApplication>
+#include <QPainter>
+
+#include "FileTreeDelegate.h"
+#include "FileTreeModel.h"
+
+QSize
+FileTreeDelegate::sizeHint(const QStyleOptionViewItem& item, const QModelIndex& index) const
+{
+  QSize size;
+
+  switch(index.column())
+    {
+      case FileTreeModel::COL_PROGRESS:
+      case FileTreeModel::COL_WANTED:
+        size = QSize(20, 1);
+        break;
+
+      default:
+        size = QItemDelegate::sizeHint (item, index);
+    }
+
+  size.rheight() += 8; // make the spacing a little nicer
+  return size;
+}
+
+void
+FileTreeDelegate::paint (QPainter                    * painter,
+                         const QStyleOptionViewItem  & option,
+                         const QModelIndex           & index) const
+{
+  const int column(index.column());
+
+  if ((column != FileTreeModel::COL_PROGRESS) && (column != FileTreeModel::COL_WANTED))
+    {
+      QItemDelegate::paint(painter, option, index);
+      return;
+    }
+
+  QStyle * style (qApp->style ());
+
+  painter->save();
+  QItemDelegate::drawBackground (painter, option, index);
+
+  if(column == FileTreeModel::COL_PROGRESS)
+    {
+      QStyleOptionProgressBar p;
+      p.state = option.state | QStyle::State_Small;
+      p.direction = qApp->layoutDirection();
+      p.rect = option.rect;
+      p.rect.setSize (QSize(option.rect.width()-2, option.rect.height()-8));
+      p.rect.moveCenter (option.rect.center());
+      p.fontMetrics = qApp->fontMetrics();
+      p.minimum = 0;
+      p.maximum = 100;
+      p.textAlignment = Qt::AlignCenter;
+      p.textVisible = true;
+      p.progress = (int)(100.0*index.data().toDouble());
+      p.text = QString::fromLatin1 ("%1%").arg (p.progress);
+      style->drawControl(QStyle::CE_ProgressBar, &p, painter);
+    }
+  else if(column == FileTreeModel::COL_WANTED)
+    {
+      QStyleOptionButton o;
+      o.state = option.state;
+      o.direction = qApp->layoutDirection();
+      o.rect.setSize (QSize(20, option.rect.height()));
+      o.rect.moveCenter (option.rect.center());
+      o.fontMetrics = qApp->fontMetrics();
+      switch (index.data().toInt())
+        {
+          case Qt::Unchecked: o.state |= QStyle::State_Off; break;
+          case Qt::Checked:   o.state |= QStyle::State_On; break;
+          default:            o.state |= QStyle::State_NoChange;break;
+        }
+      style->drawControl (QStyle::CE_CheckBox, &o, painter);
+    }
+
+  QItemDelegate::drawFocus (painter, option, option.rect);
+  painter->restore();
+}
diff --git a/qt/FileTreeDelegate.h b/qt/FileTreeDelegate.h
new file mode 100644 (file)
index 0000000..29d81ad
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#ifndef QTR_FILE_TREE_DELEGATE_H
+#define QTR_FILE_TREE_DELEGATE_H
+
+#include <QItemDelegate>
+
+class FileTreeDelegate: public QItemDelegate
+{
+    Q_OBJECT
+
+  public:
+    FileTreeDelegate (QObject * parent=0): QItemDelegate(parent) {}
+    virtual ~FileTreeDelegate() {}
+
+  public:
+    virtual QSize sizeHint (const QStyleOptionViewItem&, const QModelIndex&) const;
+    virtual void paint (QPainter*, const QStyleOptionViewItem&, const QModelIndex&) const;
+};
+
+#endif // QTR_FILE_TREE_DELEGATE_H
diff --git a/qt/FileTreeItem.cc b/qt/FileTreeItem.cc
new file mode 100644 (file)
index 0000000..06a9b5d
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <algorithm>
+#include <cassert>
+
+#include <QApplication>
+#include <QStyle>
+
+#include <libtransmission/transmission.h> // priorities
+
+#include "FileTreeItem.h"
+#include "FileTreeModel.h"
+#include "Formatter.h"
+#include "Utils.h" // mime icons
+
+const QHash<QString,int>&
+FileTreeItem::getMyChildRows ()
+{
+  const size_t n = childCount();
+
+  // ensure that all the rows are hashed
+  while (myFirstUnhashedRow < n)
+    {
+      myChildRows.insert (myChildren[myFirstUnhashedRow]->name(),
+                          myFirstUnhashedRow);
+      ++myFirstUnhashedRow;
+    }
+
+  return myChildRows;
+}
+
+
+FileTreeItem::~FileTreeItem ()
+{
+  assert(myChildren.isEmpty());
+
+  if (myParent != 0)
+    {
+      const int pos = row();
+      assert ((pos>=0) && "couldn't find child in parent's lookup");
+      myParent->myChildren.removeAt(pos);
+      myParent->myChildRows.remove(name());
+      myParent->myFirstUnhashedRow = pos;
+    }
+}
+
+void
+FileTreeItem::appendChild (FileTreeItem * child)
+{
+  const size_t n = childCount();
+  child->myParent = this;
+  myChildren.append (child);
+  myFirstUnhashedRow = n;
+}
+
+FileTreeItem *
+FileTreeItem::child (const QString& filename)
+{
+  FileTreeItem * item(0);
+
+  const int row = getMyChildRows().value (filename, -1);
+  if (row != -1)
+    {
+      item = child (row);
+      assert (filename == item->name());
+    }
+
+  return item;
+}
+
+int
+FileTreeItem::row () const
+{
+  int i(-1);
+
+  if(myParent)
+    {
+      i = myParent->getMyChildRows().value (name(), -1);
+      assert (this == myParent->myChildren[i]);
+    }
+
+  return i;
+}
+
+QVariant
+FileTreeItem::data (int column, int role) const
+{
+  QVariant value;
+
+  if (column == FileTreeModel::COL_FILE_INDEX)
+    {
+      value.setValue (myFileIndex);
+    }
+  else if (role == Qt::EditRole)
+    {
+      if (column == 0)
+        value.setValue (name());
+    }
+  else if ((role == Qt::TextAlignmentRole) && column == FileTreeModel::COL_SIZE)
+    {
+      value = Qt::AlignRight + Qt::AlignVCenter;
+    }
+  else if (role == Qt::DisplayRole)
+    {
+      switch(column)
+       {
+         case FileTreeModel::COL_NAME:
+           value.setValue (name());
+           break;
+
+         case FileTreeModel::COL_SIZE:
+           value.setValue (sizeString() + QLatin1String ("  "));
+           break;
+
+         case FileTreeModel::COL_PROGRESS:
+           value.setValue (progress());
+           break;
+
+         case FileTreeModel::COL_WANTED:
+           value.setValue (isSubtreeWanted());
+           break;
+
+         case FileTreeModel::COL_PRIORITY:
+           value.setValue (priorityString());
+           break;
+        }
+    }
+  else if (role == Qt::DecorationRole && column == FileTreeModel::COL_NAME)
+    {
+      if (childCount () > 0)
+        value = qApp->style ()->standardIcon (QStyle::SP_DirOpenIcon);
+      else
+        value = Utils::guessMimeIcon (name ());
+    }
+
+  return value;
+}
+
+void
+FileTreeItem::getSubtreeWantedSize (uint64_t& have, uint64_t& total) const
+{
+  if (myIsWanted)
+    {
+      have += myHaveSize;
+      total += myTotalSize;
+    }
+
+  for (const FileTreeItem * const i: myChildren)
+    i->getSubtreeWantedSize(have, total);
+}
+
+double
+FileTreeItem::progress () const
+{
+  double d(0);
+  uint64_t have(0), total(0);
+
+  getSubtreeWantedSize (have, total);
+  if (total)
+    d = have / (double)total;
+
+  return d;
+}
+
+QString
+FileTreeItem::sizeString () const
+{
+  QString str;
+
+  if (myChildren.isEmpty())
+    {
+      str = Formatter::sizeToString (myTotalSize);
+    }
+  else
+    {
+      uint64_t have = 0;
+      uint64_t total = 0;
+      getSubtreeWantedSize (have, total);
+      str = Formatter::sizeToString (total);
+    }
+
+  return str;
+}
+
+std::pair<int,int>
+FileTreeItem::update (const QString& name,
+                      bool           wanted,
+                      int            priority,
+                      uint64_t       haveSize,
+                      bool           updateFields)
+{
+  int changed_count = 0;
+  int changed_columns[4];
+
+  if (myName != name)
+    {
+      if (myParent)
+        myParent->myFirstUnhashedRow = row();
+
+      myName = name;
+      changed_columns[changed_count++] = FileTreeModel::COL_NAME;
+    }
+
+  if (fileIndex () != -1)
+    {
+      if (myHaveSize != haveSize)
+        {
+          myHaveSize = haveSize;
+          changed_columns[changed_count++] = FileTreeModel::COL_PROGRESS;
+        }
+
+      if (updateFields)
+        {
+          if (myIsWanted != wanted)
+            {
+              myIsWanted = wanted;
+              changed_columns[changed_count++] = FileTreeModel::COL_WANTED;
+            }
+
+          if (myPriority != priority)
+            {
+              myPriority = priority;
+              changed_columns[changed_count++] = FileTreeModel::COL_PRIORITY;
+            }
+        }
+    }
+
+  std::pair<int,int> changed (-1, -1);
+  if (changed_count > 0)
+    {
+      std::sort (changed_columns, changed_columns+changed_count);
+      changed.first = changed_columns[0];
+      changed.second = changed_columns[changed_count-1];
+    }
+  return changed;
+}
+
+QString
+FileTreeItem::priorityString () const
+{
+  const int i = priority();
+
+  switch (i)
+    {
+      case LOW:    return tr("Low");
+      case HIGH:   return tr("High");
+      case NORMAL: return tr("Normal");
+      default:     return tr("Mixed");
+    }
+}
+
+int
+FileTreeItem::priority () const
+{
+  int i(0);
+
+  if (myChildren.isEmpty())
+    {
+      switch (myPriority)
+        {
+          case TR_PRI_LOW:
+            i |= LOW;
+            break;
+
+          case TR_PRI_HIGH:
+            i |= HIGH;
+            break;
+
+          default:
+            i |= NORMAL;
+            break;
+        }
+    }
+
+  for (const FileTreeItem * const child: myChildren)
+    i |= child->priority();
+
+  return i;
+}
+
+void
+FileTreeItem::setSubtreePriority (int i, QSet<int>& ids)
+{
+  if (myPriority != i)
+    {
+      myPriority = i;
+
+      if (myFileIndex >= 0)
+        ids.insert (myFileIndex);
+    }
+
+  for (FileTreeItem * const child: myChildren)
+    child->setSubtreePriority (i, ids);
+}
+
+void
+FileTreeItem::twiddlePriority (QSet<int>& ids, int& p)
+{
+  const int old(priority());
+
+  if (old & LOW)
+    p = TR_PRI_NORMAL;
+  else if (old & NORMAL)
+    p = TR_PRI_HIGH;
+  else
+    p = TR_PRI_LOW;
+
+  setSubtreePriority (p, ids);
+}
+
+int
+FileTreeItem::isSubtreeWanted () const
+{
+  if(myChildren.isEmpty())
+    return myIsWanted ? Qt::Checked : Qt::Unchecked;
+
+  int wanted(-1);
+  for (const FileTreeItem * const child: myChildren)
+    {
+      const int childWanted = child->isSubtreeWanted();
+
+      if (wanted == -1)
+        wanted = childWanted;
+
+      if (wanted != childWanted)
+        wanted = Qt::PartiallyChecked;
+
+      if (wanted == Qt::PartiallyChecked)
+        return wanted;
+    }
+
+  return wanted;
+}
+
+void
+FileTreeItem::setSubtreeWanted (bool b, QSet<int>& ids)
+{
+  if (myIsWanted != b)
+    {
+      myIsWanted = b;
+
+      if (myFileIndex >= 0)
+        ids.insert(myFileIndex);
+    }
+
+  for (FileTreeItem * const child: myChildren)
+    child->setSubtreeWanted (b, ids);
+}
+
+void
+FileTreeItem::twiddleWanted (QSet<int>& ids, bool& wanted)
+{
+  wanted = isSubtreeWanted() != Qt::Checked;
+  setSubtreeWanted (wanted, ids);
+}
+
+QString
+FileTreeItem::path () const
+{
+  QString itemPath;
+  const FileTreeItem * item = this;
+
+  while (item != NULL && !item->name().isEmpty())
+    {
+      if (itemPath.isEmpty())
+        itemPath = item->name();
+      else
+        itemPath = item->name() + QLatin1Char ('/') + itemPath;
+      item = item->parent ();
+    }
+
+  return itemPath;
+}
+
+bool
+FileTreeItem::isComplete () const
+{
+  return myHaveSize == totalSize ();
+}
diff --git a/qt/FileTreeItem.h b/qt/FileTreeItem.h
new file mode 100644 (file)
index 0000000..74114e0
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#ifndef QTR_FILE_TREE_ITEM_H
+#define QTR_FILE_TREE_ITEM_H
+
+#include <stdint.h>
+
+#include <QObject>
+#include <QList>
+#include <QHash>
+#include <QSet>
+#include <QString>
+#include <QVariant>
+
+class FileTreeItem: public QObject
+{
+    Q_OBJECT
+
+    enum { LOW=(1<<0), NORMAL=(1<<1), HIGH=(1<<2) };
+
+  public:
+
+    virtual ~FileTreeItem();
+
+    FileTreeItem (const QString& name=QString (), int fileIndex=-1, uint64_t size=0):
+      myFileIndex (fileIndex),
+      myParent (0),
+      myName (name),
+      myPriority (0),
+      myIsWanted (0),
+      myHaveSize (0),
+      myTotalSize (size),
+      myFirstUnhashedRow (0) {}
+
+  public:
+    void appendChild (FileTreeItem *child);
+    FileTreeItem * child (const QString& filename);
+    FileTreeItem * child (int row) { return myChildren.at(row); }
+    int childCount () const { return myChildren.size(); }
+    FileTreeItem * parent () { return myParent; }
+    const FileTreeItem * parent () const { return myParent; }
+    int row () const;
+    const QString& name () const { return myName; }
+    QVariant data (int column, int role) const;
+    std::pair<int,int> update (const QString& name, bool want, int priority, uint64_t have, bool updateFields);
+    void twiddleWanted (QSet<int>& fileIds, bool&);
+    void twiddlePriority (QSet<int>& fileIds, int&);
+    int fileIndex () const { return myFileIndex; }
+    uint64_t totalSize () const { return myTotalSize; }
+    QString path () const;
+    bool isComplete () const;
+
+  private:
+    void setSubtreePriority (int priority, QSet<int>& fileIds);
+    void setSubtreeWanted (bool, QSet<int>& fileIds);
+    QString priorityString () const;
+    QString sizeString () const;
+    void getSubtreeWantedSize (uint64_t& have, uint64_t& total) const;
+    double progress () const;
+    int priority () const;
+    int isSubtreeWanted () const;
+
+    const int myFileIndex;
+    FileTreeItem * myParent;
+    QList<FileTreeItem*> myChildren;
+    QHash<QString,int> myChildRows;
+    const QHash<QString,int>& getMyChildRows();
+    QString myName;
+    int myPriority;
+    bool myIsWanted;
+    uint64_t myHaveSize;
+    const uint64_t myTotalSize;
+    size_t myFirstUnhashedRow;
+};
+
+#endif // QTR_FILE_TREE_ITEM_H
diff --git a/qt/FileTreeModel.cc b/qt/FileTreeModel.cc
new file mode 100644 (file)
index 0000000..2807d74
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <cassert>
+
+#include <QStringList>
+
+#include "FileTreeItem.h"
+#include "FileTreeModel.h"
+
+FileTreeModel::FileTreeModel (QObject * parent, bool isEditable):
+  QAbstractItemModel(parent),
+  myRootItem (new FileTreeItem),
+  myIndexCache (),
+  myIsEditable (isEditable)
+{
+}
+
+FileTreeModel::~FileTreeModel()
+{
+  clear();
+
+  delete myRootItem;
+}
+
+void
+FileTreeModel::setEditable (bool editable)
+{
+  myIsEditable = editable;
+}
+
+FileTreeItem *
+FileTreeModel::itemFromIndex (const QModelIndex& index) const
+{
+  return static_cast<FileTreeItem*>(index.internalPointer());
+}
+
+QVariant
+FileTreeModel::data (const QModelIndex &index, int role) const
+{
+  QVariant value;
+
+  if (index.isValid())
+    value = itemFromIndex(index)->data (index.column(), role);
+
+  return value;
+}
+
+Qt::ItemFlags
+FileTreeModel::flags (const QModelIndex& index) const
+{
+  int i(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+
+  if(myIsEditable && (index.column() == COL_NAME))
+    i |= Qt::ItemIsEditable;
+
+  if(index.column() == COL_WANTED)
+    i |= Qt::ItemIsUserCheckable | Qt::ItemIsTristate;
+
+  return (Qt::ItemFlags)i;
+}
+
+bool
+FileTreeModel::setData (const QModelIndex& index, const QVariant& newname, int role)
+{
+  if (role == Qt::EditRole)
+    {
+      FileTreeItem * item = itemFromIndex (index);
+
+      emit pathEdited (item->path (), newname.toString ());
+    }
+
+  return false; // don't update the view until the session confirms the change
+}
+
+QVariant
+FileTreeModel::headerData (int column, Qt::Orientation orientation, int role) const
+{
+  QVariant data;
+
+  if (orientation==Qt::Horizontal && role==Qt::DisplayRole)
+    {
+      switch (column)
+        {
+          case COL_NAME:
+            data.setValue (tr("File"));
+            break;
+
+          case COL_SIZE:
+            data.setValue (tr("Size"));
+            break;
+
+          case COL_PROGRESS:
+            data.setValue (tr("Progress"));
+            break;
+
+          case COL_WANTED:
+            data.setValue (tr("Download"));
+            break;
+
+          case COL_PRIORITY:
+            data.setValue (tr("Priority"));
+            break;
+
+          default:
+            break;
+        }
+    }
+
+  return data;
+}
+
+QModelIndex
+FileTreeModel::index (int row, int column, const QModelIndex& parent) const
+{
+  QModelIndex i;
+
+  if (hasIndex (row, column, parent))
+    {
+      FileTreeItem * parentItem;
+
+      if (!parent.isValid ())
+        parentItem = myRootItem;
+      else
+        parentItem = itemFromIndex (parent);
+
+      FileTreeItem * childItem = parentItem->child (row);
+
+      if (childItem)
+        i = createIndex (row, column, childItem);
+    }
+
+  return i;
+}
+
+QModelIndex
+FileTreeModel::parent (const QModelIndex& child) const
+{
+  return parent (child, 0); // QAbstractItemModel::parent() wants col 0
+}
+
+QModelIndex
+FileTreeModel::parent (const QModelIndex& child, int column) const
+{
+  QModelIndex parent;
+
+  if (child.isValid())
+    parent = indexOf (itemFromIndex(child)->parent(), column);
+
+  return parent;
+}
+
+int
+FileTreeModel::rowCount (const QModelIndex& parent) const
+{
+  FileTreeItem * parentItem;
+
+  if (parent.isValid())
+    parentItem = itemFromIndex (parent);
+  else
+    parentItem = myRootItem;
+
+  return parentItem->childCount();
+}
+
+int
+FileTreeModel::columnCount (const QModelIndex& parent) const
+{
+  Q_UNUSED(parent);
+
+  return NUM_COLUMNS;
+}
+
+QModelIndex
+FileTreeModel::indexOf (FileTreeItem * item, int column) const
+{
+  if (!item || item==myRootItem)
+    return QModelIndex();
+
+  return createIndex(item->row(), column, item);
+}
+
+void
+FileTreeModel::clearSubtree (const QModelIndex& top)
+{
+  size_t i = rowCount (top);
+
+  while (i > 0)
+    clearSubtree(index(--i, 0, top));
+
+  FileTreeItem * const item = itemFromIndex (top);
+  if (item == 0)
+    return;
+
+  if (item->fileIndex () != -1)
+    myIndexCache.remove (item->fileIndex ());
+
+  delete item;
+}
+
+void
+FileTreeModel::clear ()
+{
+  beginResetModel ();
+  clearSubtree (QModelIndex());
+  endResetModel ();
+
+  assert (myIndexCache.isEmpty ());
+}
+
+FileTreeItem *
+FileTreeModel::findItemForFileIndex (int fileIndex) const
+{
+  return myIndexCache.value (fileIndex, 0);
+}
+
+void
+FileTreeModel::addFile (int                   fileIndex,
+                        const QString       & filename,
+                        bool                  wanted,
+                        int                   priority,
+                        uint64_t              totalSize,
+                        uint64_t              have,
+                        QList<QModelIndex>  & rowsAdded,
+                        bool                  updateFields)
+{
+  FileTreeItem * item;
+  QStringList tokens = filename.split (QChar::fromLatin1('/'));
+
+  item = findItemForFileIndex (fileIndex);
+
+  if (item) // this file is already in the tree, we've added this
+    {
+      QModelIndex indexWithChangedParents;
+      while (!tokens.isEmpty())
+        {
+          const QString token = tokens.takeLast();
+          const std::pair<int,int> changed = item->update (token, wanted, priority, have, updateFields);
+          if (changed.first >= 0)
+            {
+              dataChanged (indexOf (item, changed.first), indexOf (item, changed.second));
+              if (!indexWithChangedParents.isValid () &&
+                  changed.first <= COL_PRIORITY && changed.second >= COL_SIZE)
+                indexWithChangedParents = indexOf (item, 0);
+            }
+          item = item->parent();
+        }
+      assert (item == myRootItem);
+      if (indexWithChangedParents.isValid ())
+        parentsChanged (indexWithChangedParents, COL_SIZE, COL_PRIORITY);
+    }
+  else // we haven't build the FileTreeItems for these tokens yet
+    {
+      bool added = false;
+
+      item = myRootItem;
+      while (!tokens.isEmpty())
+        {
+          const QString token = tokens.takeFirst();
+          FileTreeItem * child(item->child(token));
+          if (!child)
+            {
+              added = true;
+              QModelIndex parentIndex (indexOf(item, 0));
+              const int n (item->childCount());
+
+              beginInsertRows (parentIndex, n, n);
+              if (tokens.isEmpty())
+                child = new FileTreeItem (token, fileIndex, totalSize);
+              else
+                child = new FileTreeItem (token);
+              item->appendChild (child);
+              endInsertRows ();
+
+              rowsAdded.append (indexOf(child, 0));
+            }
+          item = child;
+        }
+
+      if (item != myRootItem)
+        {
+          assert (item->fileIndex() == fileIndex);
+          assert (item->totalSize() == totalSize);
+
+          myIndexCache[fileIndex] = item;
+
+          const std::pair<int,int> changed = item->update (item->name(), wanted, priority, have, added || updateFields);
+          if (changed.first >= 0)
+            dataChanged (indexOf (item, changed.first), indexOf (item, changed.second));
+        }
+    }
+}
+
+void
+FileTreeModel::parentsChanged (const QModelIndex& index, int firstColumn, int lastColumn)
+{
+  assert (firstColumn <= lastColumn);
+
+  QModelIndex walk = index;
+
+  for (;;)
+    {
+      walk = parent (walk, firstColumn);
+      if (!walk.isValid ())
+        break;
+
+      dataChanged (walk, walk.sibling (walk.row (), lastColumn));
+    }
+}
+
+void
+FileTreeModel::subtreeChanged (const QModelIndex& index, int firstColumn, int lastColumn)
+{
+  assert (firstColumn <= lastColumn);
+
+  const int childCount = rowCount (index);
+  if (!childCount)
+    return;
+
+  // tell everyone that this tier changed
+  dataChanged (index.child (0, firstColumn), index.child (childCount - 1, lastColumn));
+
+  // walk the subtiers
+  for (int i=0; i<childCount; ++i)
+    subtreeChanged (index.child (i, 0), firstColumn, lastColumn);
+}
+
+void
+FileTreeModel::clicked (const QModelIndex& index)
+{
+  const int column (index.column());
+
+  if (!index.isValid())
+    return;
+
+  if (column == COL_WANTED)
+    {
+      bool want;
+      QSet<int> file_ids;
+      FileTreeItem * item;
+
+      item = itemFromIndex (index);
+      item->twiddleWanted (file_ids, want);
+      emit wantedChanged (file_ids, want);
+
+      dataChanged (index, index);
+      parentsChanged (index, COL_SIZE, COL_WANTED);
+      subtreeChanged (index, COL_WANTED, COL_WANTED);
+    }
+  else if (column == COL_PRIORITY)
+    {
+      int priority;
+      QSet<int> file_ids;
+      FileTreeItem * item;
+
+      item = itemFromIndex (index);
+      item->twiddlePriority (file_ids, priority);
+      emit priorityChanged (file_ids, priority);
+
+      dataChanged (index, index);
+      parentsChanged (index, column, column);
+      subtreeChanged (index, column, column);
+    }
+}
+
+void
+FileTreeModel::doubleClicked (const QModelIndex& index)
+{
+  if (!index.isValid())
+    return;
+
+  const int column (index.column());
+  if (column == COL_WANTED || column == COL_PRIORITY)
+    return;
+
+  FileTreeItem * item = itemFromIndex (index);
+
+  if (item->childCount () == 0 && item->isComplete ())
+    emit openRequested (item->path ());
+}
diff --git a/qt/FileTreeModel.h b/qt/FileTreeModel.h
new file mode 100644 (file)
index 0000000..ec5b8e3
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#ifndef QTR_FILE_TREE_MODEL_H
+#define QTR_FILE_TREE_MODEL_H
+
+#include <stdint.h>
+
+#include <QAbstractItemModel>
+#include <QList>
+#include <QMap>
+#include <QSet>
+
+class FileTreeItem;
+
+class FileTreeModel: public QAbstractItemModel
+{
+    Q_OBJECT
+
+  public:
+    enum
+    {
+      COL_NAME,
+      FIRST_VISIBLE_COLUMN = COL_NAME,
+      COL_SIZE,
+      COL_PROGRESS,
+      COL_WANTED,
+      COL_PRIORITY,
+      LAST_VISIBLE_COLUMN = COL_PRIORITY,
+
+      COL_FILE_INDEX,
+      NUM_COLUMNS
+    };
+
+  public:
+    FileTreeModel (QObject *parent = 0, bool isEditable = true);
+    ~FileTreeModel ();
+
+    void setEditable (bool editable);
+
+  public:
+    QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const;
+    Qt::ItemFlags flags (const QModelIndex& index) const;
+    QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    QModelIndex index (int row, int column, const QModelIndex& parent = QModelIndex()) const;
+    QModelIndex parent (const QModelIndex& child) const;
+    QModelIndex parent (const QModelIndex& child, int column) const;
+    int rowCount (const QModelIndex& parent = QModelIndex()) const;
+    int columnCount (const QModelIndex &parent = QModelIndex()) const;
+    virtual bool setData (const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
+
+  signals:
+    void priorityChanged (const QSet<int>& fileIndices, int);
+    void wantedChanged (const QSet<int>& fileIndices, bool);
+    void pathEdited (const QString& oldpath, const QString& newname);
+    void openRequested (const QString& path);
+
+  public:
+    void clear ();
+    void addFile (int index, const QString& filename,
+                  bool wanted, int priority,
+                  uint64_t size, uint64_t have,
+                  QList<QModelIndex>& rowsAdded,
+                  bool torrentChanged);
+
+  private:
+    void clearSubtree (const QModelIndex &);
+    QModelIndex indexOf (FileTreeItem *, int column) const;
+    void parentsChanged (const QModelIndex &, int firstColumn, int lastColumn);
+    void subtreeChanged (const QModelIndex &, int firstColumn, int lastColumn);
+    FileTreeItem * findItemForFileIndex (int fileIndex) const;
+    FileTreeItem * itemFromIndex (const QModelIndex&) const;
+
+  private:
+    FileTreeItem * myRootItem;
+    QMap<int, FileTreeItem *> myIndexCache;
+    bool myIsEditable;
+
+  public slots:
+    void clicked (const QModelIndex & index);
+    void doubleClicked (const QModelIndex & index);
+};
+
+#endif // QTR_FILE_TREE_MODEL_H
diff --git a/qt/FileTreeView.cc b/qt/FileTreeView.cc
new file mode 100644 (file)
index 0000000..17f0620
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <algorithm>
+
+#include <QHeaderView>
+#include <QResizeEvent>
+#include <QSortFilterProxyModel>
+
+#include "FileTreeDelegate.h"
+#include "FileTreeModel.h"
+#include "FileTreeView.h"
+
+FileTreeView::FileTreeView (QWidget * parent, bool isEditable):
+  QTreeView (parent),
+  myModel (new FileTreeModel (this, isEditable)),
+  myProxy (new QSortFilterProxyModel (this)),
+  myDelegate (new FileTreeDelegate (this))
+{
+  setSortingEnabled (true);
+  setAlternatingRowColors (true);
+  setSelectionBehavior (QAbstractItemView::SelectRows);
+  setSelectionMode (QAbstractItemView::ExtendedSelection);
+  myProxy->setSourceModel (myModel);
+  setModel (myProxy);
+  setItemDelegate (myDelegate);
+  setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
+  sortByColumn (FileTreeModel::COL_NAME, Qt::AscendingOrder);
+  installEventFilter (this);
+
+  for (int i=0; i<FileTreeModel::NUM_COLUMNS; ++i)
+    {
+      setColumnHidden (i, (i<FileTreeModel::FIRST_VISIBLE_COLUMN) || (FileTreeModel::LAST_VISIBLE_COLUMN<i));
+
+#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
+      header()->setResizeMode(i, QHeaderView::Interactive);
+#else
+      header()->setSectionResizeMode(i, QHeaderView::Interactive);
+#endif
+    }
+
+  connect (this, SIGNAL(clicked(QModelIndex)),
+           this, SLOT(onClicked(QModelIndex)));
+
+  connect (this, SIGNAL(doubleClicked(QModelIndex)),
+           this, SLOT(onDoubleClicked(QModelIndex)));
+
+  connect (myModel, SIGNAL(priorityChanged(QSet<int>, int)),
+           this,    SIGNAL(priorityChanged(QSet<int>, int)));
+
+  connect (myModel, SIGNAL(wantedChanged(QSet<int>, bool)),
+           this,    SIGNAL(wantedChanged(QSet<int>, bool)));
+
+  connect (myModel, SIGNAL(pathEdited(QString, QString)),
+           this,    SIGNAL(pathEdited(QString, QString)));
+
+  connect (myModel, SIGNAL (openRequested (QString)),
+           this,    SLOT (onOpenRequested (QString)),
+           Qt::QueuedConnection);
+}
+
+void
+FileTreeView::onClicked (const QModelIndex& proxyIndex)
+{
+  const QModelIndex modelIndex = myProxy->mapToSource (proxyIndex);
+  myModel->clicked (modelIndex);
+}
+
+void
+FileTreeView::onDoubleClicked (const QModelIndex& proxyIndex)
+{
+  const QModelIndex modelIndex = myProxy->mapToSource (proxyIndex);
+  myModel->doubleClicked (modelIndex);
+}
+
+void
+FileTreeView::onOpenRequested (const QString& path)
+{
+  if (state () == EditingState)
+    return;
+
+  emit openRequested (path);
+}
+
+bool
+FileTreeView::eventFilter (QObject * o, QEvent * event)
+{
+  // this is kind of a hack to get the last three columns be the
+  // right size, and to have the filename column use whatever
+  // space is left over...
+  if ((o == this) && (event->type() == QEvent::Resize))
+    {
+      QResizeEvent * r = static_cast<QResizeEvent*> (event);
+      int left = r->size().width();
+      const QFontMetrics fontMetrics(font());
+      for (int column=FileTreeModel::FIRST_VISIBLE_COLUMN; column<=FileTreeModel::LAST_VISIBLE_COLUMN; ++column)
+        {
+          if (column == FileTreeModel::COL_NAME)
+            continue;
+          if (isColumnHidden (column))
+            continue;
+
+          QString header;
+          if (column == FileTreeModel::COL_SIZE)
+            header = QLatin1String ("999.9 KiB");
+          else
+            header = myModel->headerData (column, Qt::Horizontal).toString();
+          header += QLatin1String ("    ");
+          const int width = fontMetrics.size (0, header).width();
+          setColumnWidth (column, width);
+            left -= width;
+        }
+      left -= 20; // not sure why this is necessary.  it works in different themes + font sizes though...
+      setColumnWidth(FileTreeModel::COL_NAME, std::max(left,0));
+    }
+
+  // handle using the keyboard to toggle the
+  // wanted/unwanted state or the file priority
+  else if (event->type () == QEvent::KeyPress && state () != EditingState)
+    {
+      switch (static_cast<QKeyEvent*> (event)->key ())
+        {
+        case Qt::Key_Space:
+          for (const QModelIndex& i: selectionModel ()->selectedRows (FileTreeModel::COL_WANTED))
+            clicked (i);
+          break;
+
+        case Qt::Key_Enter:
+        case Qt::Key_Return:
+          for (const QModelIndex& i: selectionModel ()->selectedRows (FileTreeModel::COL_PRIORITY))
+            clicked (i);
+          break;
+        }
+    }
+
+  return false;
+}
+
+void
+FileTreeView::update (const FileList& files, bool updateFields)
+{
+  for (const TorrentFile& file: files)
+    {
+      QList<QModelIndex> added;
+      myModel->addFile (file.index, file.filename, file.wanted, file.priority, file.size, file.have, added, updateFields);
+      for (const QModelIndex& i: added)
+        expand (myProxy->mapFromSource(i));
+    }
+}
+
+void
+FileTreeView::clear ()
+{
+  myModel->clear();
+}
+
+void
+FileTreeView::setEditable (bool editable)
+{
+  myModel->setEditable (editable);
+}
diff --git a/qt/FileTreeView.h b/qt/FileTreeView.h
new file mode 100644 (file)
index 0000000..aadd704
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#ifndef QTR_FILE_TREE_VIEW_H
+#define QTR_FILE_TREE_VIEW_H
+
+#include <QSet>
+#include <QTreeView>
+
+#include "Torrent.h" // FileList
+
+class QSortFilterProxyModel;
+
+class FileTreeDelegate;
+class FileTreeModel;
+
+class FileTreeView: public QTreeView
+{
+    Q_OBJECT
+
+  public:
+    FileTreeView (QWidget * parent=0, bool editable=true);
+    void clear ();
+    void update (const FileList& files, bool updateProperties=true);
+
+    void setEditable (bool editable);
+
+  signals:
+    void priorityChanged (const QSet<int>& fileIndices, int priority);
+    void wantedChanged (const QSet<int>& fileIndices, bool wanted);
+    void pathEdited (const QString& oldpath, const QString& newname);
+    void openRequested (const QString& path);
+
+  protected:
+    bool eventFilter (QObject *, QEvent *);
+
+  private:
+    FileTreeModel * myModel;
+    QSortFilterProxyModel * myProxy;
+    FileTreeDelegate * myDelegate;
+
+  public slots:
+    void onClicked (const QModelIndex& index);
+    void onDoubleClicked (const QModelIndex& index);
+    void onOpenRequested (const QString& path);
+};
+
+#endif // QTR_FILE_TREE_VIEW_H
diff --git a/qt/FilterBar.cc b/qt/FilterBar.cc
new file mode 100644 (file)
index 0000000..b420c85
--- /dev/null
@@ -0,0 +1,410 @@
+/*
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QStandardItemModel>
+
+#include "Application.h"
+#include "FaviconCache.h"
+#include "Filters.h"
+#include "FilterBar.h"
+#include "FilterBarComboBox.h"
+#include "FilterBarComboBoxDelegate.h"
+#include "FilterBarLineEdit.h"
+#include "Prefs.h"
+#include "TorrentFilter.h"
+#include "TorrentModel.h"
+
+enum
+{
+  ActivityRole = FilterBarComboBox::UserRole,
+  TrackerRole
+};
+
+namespace
+{
+  QString
+  readableHostName (const QString& host)
+  {
+    // get the readable name...
+    QString name = host;
+    const int pos = name.lastIndexOf (QLatin1Char ('.'));
+    if (pos >= 0)
+      name.truncate (pos);
+    if (!name.isEmpty ())
+      name[0] = name[0].toUpper ();
+    return name;
+  }
+}
+
+/***
+****
+***/
+
+FilterBarComboBox *
+FilterBar::createActivityCombo ()
+{
+  FilterBarComboBox * c = new FilterBarComboBox (this);
+  FilterBarComboBoxDelegate * delegate = new FilterBarComboBoxDelegate (this, c);
+  c->setItemDelegate (delegate);
+
+  QStandardItemModel * model = new QStandardItemModel (this);
+
+  QStandardItem * row = new QStandardItem (tr ("All"));
+  row->setData (FilterMode::SHOW_ALL, ActivityRole);
+  model->appendRow (row);
+
+  model->appendRow (new QStandardItem); // separator
+  delegate->setSeparator (model, model->index (1, 0));
+
+  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("system-run")), tr ("Active"));
+  row->setData (FilterMode::SHOW_ACTIVE, ActivityRole);
+  model->appendRow (row);
+
+  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("go-down")), tr ("Downloading"));
+  row->setData (FilterMode::SHOW_DOWNLOADING, ActivityRole);
+  model->appendRow (row);
+
+  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("go-up")), tr ("Seeding"));
+  row->setData (FilterMode::SHOW_SEEDING, ActivityRole);
+  model->appendRow (row);
+
+  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("media-playback-pause")), tr ("Paused"));
+  row->setData (FilterMode::SHOW_PAUSED, ActivityRole);
+  model->appendRow (row);
+
+  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("dialog-ok")), tr ("Finished"));
+  row->setData (FilterMode::SHOW_FINISHED, ActivityRole);
+  model->appendRow (row);
+
+  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("view-refresh")), tr ("Verifying"));
+  row->setData (FilterMode::SHOW_VERIFYING, ActivityRole);
+  model->appendRow (row);
+
+  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("process-stop")), tr ("Error"));
+  row->setData (FilterMode::SHOW_ERROR, ActivityRole);
+  model->appendRow (row);
+
+  c->setModel (model);
+  return c;
+}
+
+/***
+****
+***/
+
+void
+FilterBar::refreshTrackers ()
+{
+  FaviconCache& favicons = qApp->favicons;
+  const int firstTrackerRow = 2; // skip over the "All" and separator...
+
+  // pull info from the tracker model...
+  QSet<QString> oldHosts;
+  for (int row=firstTrackerRow; ; ++row)
+    {
+      QModelIndex index = myTrackerModel->index (row, 0);
+      if (!index.isValid ())
+        break;
+      oldHosts << index.data (TrackerRole).toString ();
+    }
+
+  // pull the new stats from the torrent model...
+  QSet<QString> newHosts;
+  QMap<QString,int> torrentsPerHost;
+  for (int row=0; ; ++row)
+    {
+      QModelIndex index = myTorrents.index (row, 0);
+      if (!index.isValid ())
+        break;
+      const Torrent * tor = index.data (TorrentModel::TorrentRole).value<const Torrent*> ();
+      QSet<QString> torrentNames;
+      for (const QString& host: tor->hosts ())
+        {
+          newHosts.insert (host);
+          torrentNames.insert (readableHostName (host));
+        }
+      for (const QString& name: torrentNames)
+        ++torrentsPerHost[name];
+    }
+
+  // update the "All" row
+  myTrackerModel->setData (myTrackerModel->index (0,0), myTorrents.rowCount (), FilterBarComboBox::CountRole);
+  myTrackerModel->setData (myTrackerModel->index (0,0), getCountString (myTorrents.rowCount ()), FilterBarComboBox::CountStringRole);
+
+  // rows to update
+  for (const QString& host: oldHosts & newHosts)
+    {
+      const QString name = readableHostName (host);
+      QStandardItem * row = myTrackerModel->findItems (name).front ();
+      const int count = torrentsPerHost[name];
+      row->setData (count, FilterBarComboBox::CountRole);
+      row->setData (getCountString (count), FilterBarComboBox::CountStringRole);
+      row->setData (favicons.findFromHost (host), Qt::DecorationRole);
+    }
+
+  // rows to remove
+  for (const QString& host: oldHosts - newHosts)
+    {
+      const QString name = readableHostName (host);
+      QStandardItem * item = myTrackerModel->findItems (name).front ();
+      if (!item->data (TrackerRole).toString ().isEmpty ()) // don't remove "All"
+        myTrackerModel->removeRows (item->row (), 1);
+    }
+
+  // rows to add
+  bool anyAdded = false;
+  for (const QString& host: newHosts - oldHosts)
+    {
+      const QString name = readableHostName (host);
+
+      if (!myTrackerModel->findItems (name).isEmpty ())
+        continue;
+
+      // find the sorted position to add this row
+      int i = firstTrackerRow;
+      for (int n=myTrackerModel->rowCount (); i<n; ++i)
+        {
+          const QString rowName = myTrackerModel->index (i,0).data (Qt::DisplayRole).toString ();
+          if (rowName >= name)
+            break;
+        }
+
+      // add the row
+      QStandardItem * row = new QStandardItem (favicons.findFromHost (host), name);
+      const int count = torrentsPerHost[host];
+      row->setData (count, FilterBarComboBox::CountRole);
+      row->setData (getCountString (count), FilterBarComboBox::CountStringRole);
+      row->setData (favicons.findFromHost (host), Qt::DecorationRole);
+      row->setData (host, TrackerRole);
+      myTrackerModel->insertRow (i, row);
+      anyAdded = true;
+    }
+
+  if (anyAdded) // the one added might match our filter...
+    refreshPref (Prefs::FILTER_TRACKERS);
+}
+
+
+FilterBarComboBox *
+FilterBar::createTrackerCombo (QStandardItemModel * model)
+{
+  FilterBarComboBox * c = new FilterBarComboBox (this);
+  FilterBarComboBoxDelegate * delegate = new FilterBarComboBoxDelegate (this, c);
+  c->setItemDelegate (delegate);
+
+  QStandardItem * row = new QStandardItem (tr ("All"));
+  row->setData (QString (), TrackerRole);
+  const int count = myTorrents.rowCount ();
+  row->setData (count, FilterBarComboBox::CountRole);
+  row->setData (getCountString (count), FilterBarComboBox::CountStringRole);
+  model->appendRow (row);
+
+  model->appendRow (new QStandardItem); // separator
+  delegate->setSeparator (model, model->index (1, 0));
+
+  c->setModel (model);
+  return c;
+}
+
+/***
+****
+***/
+
+FilterBar::FilterBar (Prefs& prefs, const TorrentModel& torrents, const TorrentFilter& filter, QWidget * parent):
+  QWidget (parent),
+  myPrefs (prefs),
+  myTorrents (torrents),
+  myFilter (filter),
+  myRecountTimer (new QTimer (this)),
+  myIsBootstrapping (true)
+{
+  QHBoxLayout * h = new QHBoxLayout (this);
+  h->setContentsMargins (3, 3, 3, 3);
+
+  myCountLabel = new QLabel (this);
+  h->addWidget (myCountLabel);
+
+  myActivityCombo = createActivityCombo ();
+  myActivityCombo->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed));
+  h->addWidget (myActivityCombo);
+
+  myTrackerModel = new QStandardItemModel (this);
+  myTrackerCombo = createTrackerCombo (myTrackerModel);
+  h->addWidget (myTrackerCombo);
+
+  myLineEdit = new FilterBarLineEdit (this);
+  h->addWidget (myLineEdit);
+  connect (myLineEdit, SIGNAL (textChanged (QString)), this, SLOT (onTextChanged (QString)));
+
+  // listen for changes from the other players
+  connect (&myPrefs, SIGNAL (changed (int)), this, SLOT (refreshPref (int)));
+  connect (myActivityCombo, SIGNAL (currentIndexChanged (int)), this, SLOT (onActivityIndexChanged (int)));
+  connect (myTrackerCombo, SIGNAL (currentIndexChanged (int)), this, SLOT (onTrackerIndexChanged (int)));
+  connect (&myFilter, SIGNAL (rowsInserted (QModelIndex, int, int)), this, SLOT (refreshCountLabel ()));
+  connect (&myFilter, SIGNAL (rowsRemoved (QModelIndex, int, int)), this, SLOT (refreshCountLabel ()));
+  connect (&myTorrents, SIGNAL (modelReset ()), this, SLOT (onTorrentModelReset ()));
+  connect (&myTorrents, SIGNAL (rowsInserted (QModelIndex, int, int)), this, SLOT (onTorrentModelRowsInserted (QModelIndex, int, int)));
+  connect (&myTorrents, SIGNAL (rowsRemoved (QModelIndex, int, int)), this, SLOT (onTorrentModelRowsRemoved (QModelIndex, int, int)));
+  connect (&myTorrents, SIGNAL (dataChanged (QModelIndex, QModelIndex)), this, SLOT (onTorrentModelDataChanged (QModelIndex, QModelIndex)));
+  connect (myRecountTimer, SIGNAL (timeout ()), this, SLOT (recount ()));
+
+  recountSoon ();
+  refreshTrackers ();
+  refreshCountLabel ();
+  myIsBootstrapping = false;
+
+  // initialize our state
+  QList<int> initKeys;
+  initKeys << Prefs::FILTER_MODE
+           << Prefs::FILTER_TRACKERS;
+  for (const int key: initKeys)
+      refreshPref (key);
+}
+
+FilterBar::~FilterBar ()
+{
+  delete myRecountTimer;
+}
+
+/***
+****
+***/
+
+void
+FilterBar::refreshPref (int key)
+{
+  switch (key)
+    {
+      case Prefs::FILTER_MODE:
+        {
+          const FilterMode m = myPrefs.get<FilterMode> (key);
+          QAbstractItemModel * model = myActivityCombo->model ();
+          QModelIndexList indices = model->match (model->index (0,0), ActivityRole, m.mode ());
+          myActivityCombo->setCurrentIndex (indices.isEmpty () ? 0 : indices.first ().row ());
+          break;
+        }
+
+      case Prefs::FILTER_TRACKERS:
+        {
+          const QString tracker = myPrefs.getString (key);
+          const QString name = readableHostName (tracker);
+          QList<QStandardItem*> rows = myTrackerModel->findItems (name);
+          if (!rows.isEmpty ())
+            {
+              myTrackerCombo->setCurrentIndex (rows.front ()->row ());
+            }
+          else // hm, we don't seem to have this tracker anymore...
+            {
+              const bool isBootstrapping = myTrackerModel->rowCount () <= 2;
+              if (!isBootstrapping)
+                myPrefs.set (key, QString ());
+            }
+          break;
+        }
+    }
+}
+
+void
+FilterBar::onTextChanged (const QString& str)
+{
+  if (!myIsBootstrapping)
+    myPrefs.set (Prefs::FILTER_TEXT, str.trimmed ());
+}
+
+void
+FilterBar::onTrackerIndexChanged (int i)
+{
+  if (!myIsBootstrapping)
+    {
+      QString str;
+      const bool isTracker = !myTrackerCombo->itemData (i,TrackerRole).toString ().isEmpty ();
+      if (!isTracker)
+        {
+          // show all
+        }
+      else
+        {
+          str = myTrackerCombo->itemData (i,TrackerRole).toString ();
+          const int pos = str.lastIndexOf (QLatin1Char ('.'));
+          if (pos >= 0)
+            str.truncate (pos+1);
+        }
+      myPrefs.set (Prefs::FILTER_TRACKERS, str);
+    }
+}
+
+void
+FilterBar::onActivityIndexChanged (int i)
+{
+  if (!myIsBootstrapping)
+    {
+      const FilterMode mode = myActivityCombo->itemData (i, ActivityRole).toInt ();
+      myPrefs.set (Prefs::FILTER_MODE, mode);
+    }
+}
+
+/***
+****
+***/
+
+void FilterBar::onTorrentModelReset () { recountSoon (); }
+void FilterBar::onTorrentModelRowsInserted (const QModelIndex&, int, int) { recountSoon (); }
+void FilterBar::onTorrentModelRowsRemoved (const QModelIndex&, int, int) { recountSoon (); }
+void FilterBar::onTorrentModelDataChanged (const QModelIndex&, const QModelIndex&) { recountSoon (); }
+
+void
+FilterBar::recountSoon ()
+{
+  if (!myRecountTimer->isActive ())
+    {
+      myRecountTimer->setSingleShot (true);
+      myRecountTimer->start (800);
+    }
+}
+void
+FilterBar::recount ()
+{
+  QAbstractItemModel * model = myActivityCombo->model ();
+
+  int torrentsPerMode[FilterMode::NUM_MODES] = {};
+  myFilter.countTorrentsPerMode (torrentsPerMode);
+
+  for (int row=0, n=model->rowCount (); row<n; ++row)
+    {
+      QModelIndex index = model->index (row, 0);
+      const int mode = index.data (ActivityRole).toInt ();
+      const int count = torrentsPerMode [mode];
+      model->setData (index, count, FilterBarComboBox::CountRole);
+      model->setData (index, getCountString (count), FilterBarComboBox::CountStringRole);
+    }
+
+  refreshTrackers ();
+  refreshCountLabel ();
+}
+
+QString
+FilterBar::getCountString (int n) const
+{
+  return QString::fromLatin1 ("%L1").arg (n);
+}
+
+void
+FilterBar::refreshCountLabel ()
+{
+  const int visibleCount = myFilter.rowCount ();
+  const int trackerCount = myTrackerCombo->currentCount ();
+  const int activityCount = myActivityCombo->currentCount ();
+
+  if ((visibleCount == activityCount) || (visibleCount == trackerCount))
+    myCountLabel->setText (tr("Show:"));
+  else
+    myCountLabel->setText (tr("Show %Ln of:", 0, visibleCount));
+}
similarity index 51%
rename from qt/filterbar.h
rename to qt/FilterBar.h
index f72f387531df83a02919b5593aa39b95fd2d5d7e..3d623ebafd7d7b48fe5150a4406b7aea7d1d5eef 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,80 +7,21 @@
  * $Id$
  */
 
-#ifndef QTR_FILTERBAR_H
-#define QTR_FILTERBAR_H
+#ifndef QTR_FILTER_BAR_H
+#define QTR_FILTER_BAR_H
 
-#include <QComboBox>
-#include <QItemDelegate>
-#include <QLineEdit>
 #include <QWidget>
 
 class QLabel;
-class QLineEdit;
-class QPaintEvent;
 class QStandardItemModel;
 class QTimer;
-class QToolButton;
 
+class FilterBarComboBox;
+class FilterBarLineEdit;
 class Prefs;
 class TorrentFilter;
 class TorrentModel;
 
-class FilterBarComboBoxDelegate: public QItemDelegate
-{
-    Q_OBJECT
-
-  public:
-    FilterBarComboBoxDelegate (QObject * parent, QComboBox * combo);
-
-  public:
-    static bool isSeparator (const QModelIndex &index);
-    static void setSeparator (QAbstractItemModel * model, const QModelIndex& index);
-
-  protected:
-    virtual void paint (QPainter*, const QStyleOptionViewItem&, const QModelIndex&) const;
-    virtual QSize sizeHint (const QStyleOptionViewItem&, const QModelIndex&) const;
-
-  private:
-    QComboBox * myCombo;
-
-};
-
-class FilterBarComboBox: public QComboBox
-{
-    Q_OBJECT
-
-  public:
-    FilterBarComboBox (QWidget * parent = 0);
-    int currentCount () const;
-
-    virtual QSize minimumSizeHint () const;
-    virtual QSize sizeHint () const;
-
-  protected:
-    virtual void paintEvent (QPaintEvent * e);
-
-  private:
-    QSize calculateSize (const QSize& textSize, const QSize& countSize) const;
-};
-
-class FilterBarLineEdit: public QLineEdit
-{
-    Q_OBJECT
-
-  public:
-    FilterBarLineEdit (QWidget * parent = 0);
-
-  protected:
-    virtual void resizeEvent (QResizeEvent * event);
-
-  private slots:
-    void updateClearButtonVisibility ();
-
-  private:
-    QToolButton * myClearButton;
-};
-
 class FilterBar: public QWidget
 {
     Q_OBJECT
@@ -121,4 +62,4 @@ class FilterBar: public QWidget
     void onTextChanged (const QString&);
 };
 
-#endif
+#endif // QTR_FILTER_BAR_H
diff --git a/qt/FilterBarComboBox.cc b/qt/FilterBarComboBox.cc
new file mode 100644 (file)
index 0000000..e2d2ffd
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <QApplication>
+#include <QStyle>
+#include <QStylePainter>
+
+#include "FilterBarComboBox.h"
+#include "Utils.h"
+
+namespace
+{
+  int
+  getHSpacing (const QWidget * w)
+  {
+    return qMax (3, w->style ()->pixelMetric (QStyle::PM_LayoutHorizontalSpacing, 0, w));
+  }
+}
+
+FilterBarComboBox::FilterBarComboBox (QWidget * parent):
+  QComboBox (parent)
+{
+  setSizeAdjustPolicy (QComboBox::AdjustToContents);
+}
+
+int
+FilterBarComboBox::currentCount () const
+{
+  int count = 0;
+
+  const QModelIndex modelIndex = model ()->index (currentIndex (), 0, rootModelIndex ());
+  if (modelIndex.isValid ())
+    count = modelIndex.data (CountRole).toInt ();
+
+  return count;
+}
+
+QSize
+FilterBarComboBox::minimumSizeHint () const
+{
+  QFontMetrics fm (fontMetrics ());
+  const QSize textSize = fm.boundingRect (itemText (0)).size ();
+  const QSize countSize = fm.boundingRect (itemData (0, CountStringRole).toString ()).size ();
+  return calculateSize (textSize, countSize);
+}
+
+QSize
+FilterBarComboBox::sizeHint () const
+{
+  QFontMetrics fm (fontMetrics ());
+  QSize maxTextSize (0, 0);
+  QSize maxCountSize (0, 0);
+  for (int i = 0, n = count (); i < n; ++i)
+  {
+    const QSize textSize = fm.boundingRect (itemText (i)).size ();
+    maxTextSize.setHeight (qMax (maxTextSize.height (), textSize.height ()));
+    maxTextSize.setWidth (qMax (maxTextSize.width (), textSize.width ()));
+
+    const QSize countSize = fm.boundingRect (itemData (i, CountStringRole).toString ()).size ();
+    maxCountSize.setHeight (qMax (maxCountSize.height (), countSize.height ()));
+    maxCountSize.setWidth (qMax (maxCountSize.width (), countSize.width ()));
+  }
+
+  return calculateSize (maxTextSize, maxCountSize);
+}
+
+QSize
+FilterBarComboBox::calculateSize (const QSize& textSize, const QSize& countSize) const
+{
+  const int hmargin = getHSpacing (this);
+
+  QStyleOptionComboBox option;
+  initStyleOption (&option);
+
+  QSize contentSize = iconSize () + QSize (4, 2);
+  contentSize.setHeight (qMax (contentSize.height (), textSize.height ()));
+  contentSize.rwidth () += hmargin + textSize.width ();
+  contentSize.rwidth () += hmargin + countSize.width ();
+
+  return style ()->sizeFromContents (QStyle::CT_ComboBox, &option, contentSize, this).expandedTo (qApp->globalStrut ());
+}
+
+void
+FilterBarComboBox::paintEvent (QPaintEvent * e)
+{
+  Q_UNUSED (e);
+
+  QStylePainter painter (this);
+  painter.setPen (palette ().color (QPalette::Text));
+
+  // draw the combobox frame, focusrect and selected etc.
+  QStyleOptionComboBox opt;
+  initStyleOption (&opt);
+  painter.drawComplexControl (QStyle::CC_ComboBox, opt);
+
+  // draw the icon and text
+  const QModelIndex modelIndex = model ()->index (currentIndex (), 0, rootModelIndex ());
+  if (modelIndex.isValid ())
+    {
+      QStyle * s = style ();
+      const int hmargin = getHSpacing (this);
+
+      QRect rect = s->subControlRect (QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxEditField, this);
+      rect.adjust (2, 1, -2, -1);
+
+      // draw the icon
+      QPixmap pixmap;
+      QVariant variant = modelIndex.data (Qt::DecorationRole);
+      switch (variant.type ())
+        {
+          case QVariant::Pixmap: pixmap = qvariant_cast<QPixmap> (variant); break;
+          case QVariant::Icon:   pixmap = qvariant_cast<QIcon> (variant).pixmap (iconSize ()); break;
+          default: break;
+        }
+      if (!pixmap.isNull ())
+        {
+          const QRect iconRect = QStyle::alignedRect(opt.direction, Qt::AlignLeft | Qt::AlignVCenter,
+                                                     opt.iconSize, rect);
+          painter.drawPixmap (iconRect.topLeft (), pixmap);
+          Utils::narrowRect (rect, iconRect.width () + hmargin, 0, opt.direction);
+        }
+
+      // draw the count
+      QString text = modelIndex.data (CountStringRole).toString ();
+      if (!text.isEmpty ())
+        {
+          const QPen pen = painter.pen ();
+          painter.setPen (Utils::getFadedColor (pen.color ()));
+          const QRect textRect = QStyle::alignedRect(opt.direction, Qt::AlignRight | Qt::AlignVCenter,
+                                                     QSize (opt.fontMetrics.width (text), rect.height ()), rect);
+          painter.drawText (textRect, Qt::AlignRight | Qt::AlignVCenter, text);
+          Utils::narrowRect (rect, 0, textRect.width () + hmargin, opt.direction);
+          painter.setPen (pen);
+        }
+
+      // draw the text
+      text = modelIndex.data (Qt::DisplayRole).toString ();
+      text = painter.fontMetrics ().elidedText (text, Qt::ElideRight, rect.width ());
+      painter.drawText (rect, Qt::AlignLeft | Qt::AlignVCenter, text);
+    }
+}
diff --git a/qt/FilterBarComboBox.h b/qt/FilterBarComboBox.h
new file mode 100644 (file)
index 0000000..56dc52e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#ifndef QTR_FILTER_BAR_COMBO_BOX_H
+#define QTR_FILTER_BAR_COMBO_BOX_H
+
+#include <QComboBox>
+
+class FilterBarComboBox: public QComboBox
+{
+    Q_OBJECT
+
+  public:
+    enum
+    {
+      CountRole = Qt::UserRole + 1,
+      CountStringRole,
+      UserRole
+    };
+
+  public:
+    FilterBarComboBox (QWidget * parent = 0);
+    int currentCount () const;
+
+    virtual QSize minimumSizeHint () const;
+    virtual QSize sizeHint () const;
+
+  protected:
+    virtual void paintEvent (QPaintEvent * e);
+
+  private:
+    QSize calculateSize (const QSize& textSize, const QSize& countSize) const;
+};
+
+#endif // QTR_FILTER_BAR_COMBO_BOX_H
diff --git a/qt/FilterBarComboBoxDelegate.cc b/qt/FilterBarComboBoxDelegate.cc
new file mode 100644 (file)
index 0000000..aa59cf5
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <QAbstractItemView>
+#include <QComboBox>
+#include <QStandardItemModel>
+#include <QStyle>
+
+#include "FilterBarComboBox.h"
+#include "FilterBarComboBoxDelegate.h"
+#include "Utils.h"
+
+namespace
+{
+  int
+  getHSpacing (const QWidget * w)
+  {
+    return qMax (3, w->style ()->pixelMetric (QStyle::PM_LayoutHorizontalSpacing, 0, w));
+  }
+}
+
+FilterBarComboBoxDelegate::FilterBarComboBoxDelegate (QObject * parent, QComboBox * combo):
+  QItemDelegate (parent),
+  myCombo (combo)
+{
+}
+
+bool
+FilterBarComboBoxDelegate::isSeparator (const QModelIndex& index)
+{
+  return index.data (Qt::AccessibleDescriptionRole).toString () == QLatin1String ("separator");
+}
+void
+FilterBarComboBoxDelegate::setSeparator (QAbstractItemModel * model, const QModelIndex& index)
+{
+  model->setData (index, QString::fromLatin1 ("separator"), Qt::AccessibleDescriptionRole);
+
+  if (QStandardItemModel *m = qobject_cast<QStandardItemModel*> (model))
+    if (QStandardItem *item = m->itemFromIndex (index))
+      item->setFlags (item->flags () & ~ (Qt::ItemIsSelectable|Qt::ItemIsEnabled));
+}
+
+void
+FilterBarComboBoxDelegate::paint (QPainter                    * painter,
+                                  const QStyleOptionViewItem  & option,
+                                  const QModelIndex           & index) const
+{
+  if (isSeparator (index))
+    {
+      QRect rect = option.rect;
+      if (const QStyleOptionViewItemV3 *v3 = qstyleoption_cast<const QStyleOptionViewItemV3*> (&option))
+        if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView*> (v3->widget))
+          rect.setWidth (view->viewport ()->width ());
+      QStyleOption opt;
+      opt.rect = rect;
+      myCombo->style ()->drawPrimitive (QStyle::PE_IndicatorToolBarSeparator, &opt, painter, myCombo);
+    }
+  else
+    {
+      QStyleOptionViewItem disabledOption = option;
+      const QPalette::ColorRole disabledColorRole = (disabledOption.state & QStyle::State_Selected) ?
+                                                     QPalette::HighlightedText : QPalette::Text;
+      disabledOption.palette.setColor (disabledColorRole, Utils::getFadedColor (disabledOption.palette.color (disabledColorRole)));
+
+      QRect boundingBox = option.rect;
+
+      const int hmargin = getHSpacing (myCombo);
+      boundingBox.adjust (hmargin, 0, -hmargin, 0);
+
+      QRect decorationRect = rect (option, index, Qt::DecorationRole);
+      decorationRect.setSize (myCombo->iconSize ());
+      decorationRect = QStyle::alignedRect (option.direction,
+                                            Qt::AlignLeft|Qt::AlignVCenter,
+                                            decorationRect.size (), boundingBox);
+      Utils::narrowRect (boundingBox, decorationRect.width () + hmargin, 0, option.direction);
+
+      QRect countRect  = rect (option, index, FilterBarComboBox::CountStringRole);
+      countRect = QStyle::alignedRect (option.direction,
+                                       Qt::AlignRight|Qt::AlignVCenter,
+                                       countRect.size (), boundingBox);
+      Utils::narrowRect (boundingBox, 0, countRect.width () + hmargin, option.direction);
+      const QRect displayRect = boundingBox;
+
+      drawBackground (painter, option, index);
+      QStyleOptionViewItem option2 = option;
+      option2.decorationSize = myCombo->iconSize ();
+      drawDecoration (painter, option, decorationRect, decoration (option2,index.data (Qt::DecorationRole)));
+      drawDisplay (painter, option, displayRect, index.data (Qt::DisplayRole).toString ());
+      drawDisplay (painter, disabledOption, countRect, index.data (FilterBarComboBox::CountStringRole).toString ());
+      drawFocus (painter, option, displayRect|countRect);
+    }
+}
+
+QSize
+FilterBarComboBoxDelegate::sizeHint (const QStyleOptionViewItem & option,
+                                     const QModelIndex          & index) const
+{
+  if (isSeparator (index))
+    {
+      const int pm = myCombo->style ()->pixelMetric (QStyle::PM_DefaultFrameWidth, 0, myCombo);
+      return QSize (pm, pm + 10);
+    }
+  else
+    {
+      QStyle * s = myCombo->style ();
+      const int hmargin = getHSpacing (myCombo);
+
+      QSize size = QItemDelegate::sizeHint (option, index);
+      size.setHeight (qMax (size.height (), myCombo->iconSize ().height () + 6));
+      size.rwidth () += s->pixelMetric (QStyle::PM_FocusFrameHMargin, 0, myCombo);
+      size.rwidth () += rect (option,index,FilterBarComboBox::CountStringRole).width ();
+      size.rwidth () += hmargin * 4;
+      return size;
+    }
+}
diff --git a/qt/FilterBarComboBoxDelegate.h b/qt/FilterBarComboBoxDelegate.h
new file mode 100644 (file)
index 0000000..1e34f68
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#ifndef QTR_FILTER_BAR_COMBO_BOX_DELEGATE_H
+#define QTR_FILTER_BAR_COMBO_BOX_DELEGATE_H
+
+#include <QItemDelegate>
+
+class QAbstractItemModel;
+class QComboBox;
+
+class FilterBarComboBoxDelegate: public QItemDelegate
+{
+    Q_OBJECT
+
+  public:
+    FilterBarComboBoxDelegate (QObject * parent, QComboBox * combo);
+
+  public:
+    static bool isSeparator (const QModelIndex &index);
+    static void setSeparator (QAbstractItemModel * model, const QModelIndex& index);
+
+  protected:
+    virtual void paint (QPainter*, const QStyleOptionViewItem&, const QModelIndex&) const;
+    virtual QSize sizeHint (const QStyleOptionViewItem&, const QModelIndex&) const;
+
+  private:
+    QComboBox * myCombo;
+};
+
+#endif // QTR_FILTER_BAR_COMBO_BOX_DELEGATE_H
diff --git a/qt/FilterBarLineEdit.cc b/qt/FilterBarLineEdit.cc
new file mode 100644 (file)
index 0000000..46e8697
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#include <QToolButton>
+#include <QStyle>
+
+#include "FilterBarLineEdit.h"
+
+FilterBarLineEdit::FilterBarLineEdit (QWidget * parent):
+  QLineEdit (parent),
+  myClearButton (nullptr)
+{
+#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0)
+  const QIcon icon = QIcon::fromTheme (QLatin1String ("edit-clear"), style ()->standardIcon (QStyle::SP_DialogCloseButton));
+  const int iconSize = style ()->pixelMetric (QStyle::PM_SmallIconSize);
+
+  myClearButton = new QToolButton (this);
+  myClearButton->setStyleSheet (QLatin1String ("QToolButton{border:0;padding:0;margin:0}"));
+  myClearButton->setToolButtonStyle (Qt::ToolButtonIconOnly);
+  myClearButton->setFocusPolicy (Qt::NoFocus);
+  myClearButton->setCursor (Qt::ArrowCursor);
+  myClearButton->setIconSize (QSize (iconSize, iconSize));
+  myClearButton->setIcon (icon);
+  myClearButton->setFixedSize (myClearButton->iconSize () + QSize (2, 2));
+  myClearButton->hide ();
+
+  const int frameWidth = style ()->pixelMetric (QStyle::PM_DefaultFrameWidth);
+  const QSize minSizeHint = minimumSizeHint ();
+  const QSize buttonSize = myClearButton->size ();
+
+  setStyleSheet (QString::fromLatin1 ("QLineEdit{padding-right:%1px}").arg (buttonSize.width () + frameWidth + 1));
+  setMinimumSize (qMax (minSizeHint.width (), buttonSize.width () + frameWidth * 2 + 2),
+                  qMax (minSizeHint.height (), buttonSize.height () + frameWidth * 2 + 2));
+
+  connect (this, SIGNAL (textChanged (QString)), this, SLOT (updateClearButtonVisibility ()));
+  connect (myClearButton, SIGNAL (clicked ()), this, SLOT (clear ()));
+#else
+  setClearButtonEnabled (true);
+#endif
+
+#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
+  setPlaceholderText (tr ("Search..."));
+#endif
+}
+
+void
+FilterBarLineEdit::resizeEvent (QResizeEvent * event)
+{
+  QLineEdit::resizeEvent (event);
+
+#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0)
+  const int frameWidth = style ()->pixelMetric (QStyle::PM_DefaultFrameWidth);
+  const QRect editRect = rect();
+  const QSize buttonSize = myClearButton->size ();
+
+  myClearButton->move (editRect.right () - frameWidth - buttonSize.width (),
+                       editRect.top () + (editRect.height () - buttonSize.height ()) / 2);
+#endif
+}
+
+void
+FilterBarLineEdit::updateClearButtonVisibility ()
+{
+#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0)
+  myClearButton->setVisible (!text ().isEmpty ());
+#endif
+}
diff --git a/qt/FilterBarLineEdit.h b/qt/FilterBarLineEdit.h
new file mode 100644 (file)
index 0000000..52e2b68
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
+ *
+ * It may be used under the GNU GPL versions 2 or 3
+ * or any future license endorsed by Mnemosyne LLC.
+ *
+ * $Id$
+ */
+
+#ifndef QTR_FILTER_BAR_LINE_EDIT_H
+#define QTR_FILTER_BAR_LINE_EDIT_H
+
+#include <QLineEdit>
+
+class QToolButton;
+
+class FilterBarLineEdit: public QLineEdit
+{
+    Q_OBJECT
+
+  public:
+    FilterBarLineEdit (QWidget * parent = 0);
+
+  protected:
+    virtual void resizeEvent (QResizeEvent * event);
+
+  private slots:
+    void updateClearButtonVisibility ();
+
+  private:
+    QToolButton * myClearButton;
+};
+
+#endif // QTR_FILTER_BAR_LINE_EDIT_H
similarity index 94%
rename from qt/filters.cc
rename to qt/Filters.cc
index 5e2c9cb009b41a44d62a34f9e3d149f9a6e2fc55..4f11098e3fe3531cb2a0446188106c2ba19839dd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,7 +7,7 @@
  * $Id$
  */
 
-#include "filters.h"
+#include "Filters.h"
 
 const QString FilterMode::names[NUM_MODES] =
 {
similarity index 95%
rename from qt/filters.h
rename to qt/Filters.h
index c5c3669166f4b4c47c5210564a8893cf33a0bfee..cd75ae104910675624191c713e4519e6496e060b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -52,4 +52,4 @@ class SortMode
 Q_DECLARE_METATYPE(FilterMode)
 Q_DECLARE_METATYPE(SortMode)
 
-#endif
+#endif // QTR_FILTERS_H
similarity index 97%
rename from qt/formatter.cc
rename to qt/Formatter.cc
index 936a7ab09e0a4f343e5a629d701da42391c37a0f..df51631158476924157538f3e9d200dd38c64270 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -12,8 +12,8 @@
 #include <libtransmission/transmission.h>
 #include <libtransmission/utils.h> // tr_formatter
 
-#include "formatter.h"
-#include "speed.h"
+#include "Formatter.h"
+#include "Speed.h"
 
 /***
 ****  Constants
similarity index 89%
rename from qt/formatter.h
rename to qt/Formatter.h
index e8982def8054e0d3a9df91cd2786a404eadebe0e..970d61e8ed5c3dac5ffe2bf6f661a426194eb928 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
+ * This file Copyright (C) 2012-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,15 +7,15 @@
  * $Id$
  */
 
-#ifndef QTR_UNITS
-#define QTR_UNITS
+#ifndef QTR_FORMATTER_H
+#define QTR_FORMATTER_H
+
+#include <stdint.h> // int64_t
 
 #include <QString>
 #include <QObject>
 #include <QIcon>
 
-#include <stdint.h> // int64_t
-
 class Speed;
 
 class Formatter: public QObject
@@ -50,4 +50,4 @@ class Formatter: public QObject
     static QString unitStrings[3][5];
 };
 
-#endif
+#endif // QTR_FORMATTER_H
similarity index 83%
rename from qt/freespace-label.cc
rename to qt/FreeSpaceLabel.cc
index aa76b021248760286ab9287896635ea020693041..70784d6b206c57ecb0cd2232db9ca0b6697194bf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2013-2014 Mnemosyne LLC
+ * This file Copyright (C) 2013-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/transmission.h>
 #include <libtransmission/variant.h>
 
-#include "formatter.h"
-#include "freespace-label.h"
-#include "session.h"
+#include "Formatter.h"
+#include "FreeSpaceLabel.h"
+#include "Session.h"
 
 namespace
 {
   static const int INTERVAL_MSEC = 15000;
 }
 
-FreespaceLabel::FreespaceLabel (QWidget * parent):
+FreeSpaceLabel::FreeSpaceLabel (QWidget * parent):
   QLabel (parent),
   mySession (nullptr),
   myTag (-1),
@@ -34,7 +34,7 @@ FreespaceLabel::FreespaceLabel (QWidget * parent):
 }
 
 void
-FreespaceLabel::setSession (Session& session)
+FreeSpaceLabel::setSession (Session& session)
 {
   if (mySession == &session)
     return;
@@ -51,7 +51,7 @@ FreespaceLabel::setSession (Session& session)
 }
 
 void
-FreespaceLabel::setPath (const QString& path)
+FreeSpaceLabel::setPath (const QString& path)
 {
   if (myPath != path)
     {
@@ -62,7 +62,7 @@ FreespaceLabel::setPath (const QString& path)
 }
 
 void
-FreespaceLabel::onTimer ()
+FreeSpaceLabel::onTimer ()
 {
   myTimer.stop ();
 
@@ -78,7 +78,7 @@ FreespaceLabel::onTimer ()
 }
 
 void
-FreespaceLabel::onSessionExecuted (int64_t tag, const QString& result, tr_variant * arguments)
+FreeSpaceLabel::onSessionExecuted (int64_t tag, const QString& result, tr_variant * arguments)
 {
   Q_UNUSED (result);
 
similarity index 69%
rename from qt/freespace-label.h
rename to qt/FreeSpaceLabel.h
index 5362511112aed7a86daa9b8ad604918a8d15ddc7..4438685e38184b47664c65284cbbc7e8206feaec 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2013-2014 Mnemosyne LLC
+ * This file Copyright (C) 2013-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef QTR_FREESPACE_LABEL_H
-#define QTR_FREESPACE_LABEL_H
+#ifndef QTR_FREE_SPACE_LABEL_H
+#define QTR_FREE_SPACE_LABEL_H
 
 #include <stdint.h>
 
@@ -23,13 +23,13 @@ extern "C"
   struct tr_variant;
 }
 
-class FreespaceLabel: public QLabel
+class FreeSpaceLabel: public QLabel
 {
     Q_OBJECT
 
   public:
-    FreespaceLabel (QWidget * parent = 0);
-    virtual ~FreespaceLabel () {}
+    FreeSpaceLabel (QWidget * parent = 0);
+    virtual ~FreeSpaceLabel () {}
 
     void setSession (Session& session);
     void setPath (const QString& folder);
@@ -45,5 +45,4 @@ class FreespaceLabel: public QLabel
     void onTimer ();
 };
 
-#endif // QTR_FREESPACE_LABEL_H
-
+#endif // QTR_FREE_SPACE_LABEL_H
similarity index 69%
rename from qt/tricontoolbutton.cc
rename to qt/IconToolButton.cc
index 73642f69eb2c4df603a51c54abe4d9bf1d9aeea8..8c977253a6b8badf5bafb615f53b97339a68728e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <QStyleOptionToolButton>
 #include <QStylePainter>
 
-#include "tricontoolbutton.h"
+#include "IconToolButton.h"
 
-TrIconToolButton::TrIconToolButton (QWidget * parent):
+IconToolButton::IconToolButton (QWidget * parent):
   QToolButton (parent)
 {
 }
 
-void TrIconToolButton::paintEvent (QPaintEvent * /*event*/)
+void IconToolButton::paintEvent (QPaintEvent * /*event*/)
 {
   QStylePainter painter(this);
   QStyleOptionToolButton option;
similarity index 70%
rename from qt/tricontoolbutton.h
rename to qt/IconToolButton.h
index 714cadd88b004f7fbbdb8282c875a4cb62664ba2..40a360845b0941320574e5bd139de321fa714ec4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 
 #include <QToolButton>
 
-class TrIconToolButton: public QToolButton
+class IconToolButton: public QToolButton
 {
     Q_OBJECT
 
   public:
-    TrIconToolButton (QWidget * parent = nullptr);
+    IconToolButton (QWidget * parent = nullptr);
 
   protected:
     virtual void paintEvent (QPaintEvent * event);
similarity index 95%
rename from qt/license.cc
rename to qt/LicenseDialog.cc
index 0ab186ce26871f5ae9d595a69e3d9c02ed2dcddd..19305d4640f060ece8ea67ec45aedcc6e4c3bfd8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -11,7 +11,7 @@
 #include <QPlainTextEdit>
 #include <QVBoxLayout>
 
-#include "license.h"
+#include "LicenseDialog.h"
 
 LicenseDialog::LicenseDialog (QWidget * parent):
   QDialog (parent, Qt::Dialog)
similarity index 66%
rename from qt/license.h
rename to qt/LicenseDialog.h
index a51a8d5732509eb59f626705a875a8b0ff1122e5..921e3edfde8de49e9aeb476d70854c7ddbd524e8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef LICENSE_DIALOG_H
-#define LICENSE_DIALOG_H
+#ifndef QTR_LICENSE_DIALOG_H
+#define QTR_LICENSE_DIALOG_H
 
 #include <QDialog>
 
@@ -21,5 +21,4 @@ class LicenseDialog: public QDialog
     ~LicenseDialog () {}
 };
 
-#endif
-
+#endif // QTR_LICENSE_DIALOG_H
similarity index 90%
rename from qt/mainwin.cc
rename to qt/MainWindow.cc
index 9b7fb5318434e12fc1000adc10fb8243475e986f..a47a4f1830d26cc522f00411737d1eaa892e9252 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/transmission.h>
 #include <libtransmission/version.h>
 
-#include "about.h"
-#include "add-data.h"
-#include "app.h"
-#include "details.h"
-#include "filterbar.h"
-#include "filters.h"
-#include "formatter.h"
-#include "hig.h"
-#include "mainwin.h"
-#include "make-dialog.h"
-#include "options.h"
-#include "prefs.h"
-#include "prefs-dialog.h"
-#include "relocate.h"
-#include "session.h"
-#include "session-dialog.h"
-#include "speed.h"
-#include "stats-dialog.h"
-#include "torrent-delegate.h"
-#include "torrent-delegate-min.h"
-#include "torrent-filter.h"
-#include "torrent-model.h"
+#include "AboutDialog.h"
+#include "AddData.h"
+#include "Application.h"
+#include "DetailsDialog.h"
+#include "FilterBar.h"
+#include "Filters.h"
+#include "Formatter.h"
+#include "MainWindow.h"
+#include "MakeDialog.h"
+#include "OptionsDialog.h"
+#include "Prefs.h"
+#include "PrefsDialog.h"
+#include "RelocateDialog.h"
+#include "Session.h"
+#include "SessionDialog.h"
+#include "Speed.h"
+#include "StatsDialog.h"
+#include "TorrentDelegate.h"
+#include "TorrentDelegateMin.h"
+#include "TorrentFilter.h"
+#include "TorrentModel.h"
 
 #define PREFS_KEY "prefs-key";
 
@@ -69,7 +68,7 @@ class ListViewProxyStyle: public QProxyStyle
 
 
 QIcon
-TrMainWindow::getStockIcon (const QString& name, int fallback)
+MainWindow::getStockIcon (const QString& name, int fallback)
 {
   QIcon icon = QIcon::fromTheme (name);
 
@@ -79,7 +78,7 @@ TrMainWindow::getStockIcon (const QString& name, int fallback)
   return icon;
 }
 
-TrMainWindow::TrMainWindow (Session& session, Prefs& prefs, TorrentModel& model, bool minimized):
+MainWindow::MainWindow (Session& session, Prefs& prefs, TorrentModel& model, bool minimized):
   myLastFullUpdateTime (0),
   mySessionDialog (new SessionDialog (session, prefs, this)),
   myPrefsDialog (),
@@ -291,7 +290,7 @@ TrMainWindow::TrMainWindow (Session& session, Prefs& prefs, TorrentModel& model,
   refreshTitle ();
 }
 
-TrMainWindow::~TrMainWindow ()
+MainWindow::~MainWindow ()
 {
 }
 
@@ -300,13 +299,13 @@ TrMainWindow::~TrMainWindow ()
 ****/
 
 void
-TrMainWindow::onSessionSourceChanged ()
+MainWindow::onSessionSourceChanged ()
 {
   myModel.clear ();
 }
 
 void
-TrMainWindow::onModelReset ()
+MainWindow::onModelReset ()
 {
   refreshTitle ();
   refreshActionSensitivitySoon ();
@@ -321,7 +320,7 @@ TrMainWindow::onModelReset ()
 #define PREF_VARIANTS_KEY "pref-variants-list"
 
 void
-TrMainWindow::onSetPrefs ()
+MainWindow::onSetPrefs ()
 {
   const QVariantList p = sender ()->property (PREF_VARIANTS_KEY).toList ();
   assert ( (p.size () % 2) == 0);
@@ -330,7 +329,7 @@ TrMainWindow::onSetPrefs ()
 }
 
 void
-TrMainWindow::onSetPrefs (bool isChecked)
+MainWindow::onSetPrefs (bool isChecked)
 {
   if (isChecked)
     onSetPrefs ();
@@ -339,7 +338,7 @@ TrMainWindow::onSetPrefs (bool isChecked)
 #define SHOW_KEY "show-mode"
 
 void
-TrMainWindow::initStatusBar ()
+MainWindow::initStatusBar ()
 {
   ui.optionsButton->setMenu (createOptionsMenu ());
 
@@ -353,7 +352,7 @@ TrMainWindow::initStatusBar ()
 }
 
 QMenu *
-TrMainWindow::createOptionsMenu ()
+MainWindow::createOptionsMenu ()
 {
   QMenu * menu;
   QMenu * sub;
@@ -437,7 +436,7 @@ TrMainWindow::createOptionsMenu ()
 }
 
 QMenu *
-TrMainWindow::createStatsModeMenu ()
+MainWindow::createStatsModeMenu ()
 {
   QActionGroup * a = new QActionGroup (this);
   a->addAction (ui.action_TotalRatio);
@@ -464,22 +463,22 @@ TrMainWindow::createStatsModeMenu ()
 ****/
 
 void
-TrMainWindow::setSortPref (int i)
+MainWindow::setSortPref (int i)
 {
   myPrefs.set (Prefs::SORT_MODE, SortMode (i));
 }
-void TrMainWindow::onSortByActivityToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_ACTIVITY); }
-void TrMainWindow::onSortByAgeToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_AGE); }
-void TrMainWindow::onSortByETAToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_ETA); }
-void TrMainWindow::onSortByNameToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_NAME); }
-void TrMainWindow::onSortByProgressToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_PROGRESS); }
-void TrMainWindow::onSortByQueueToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_QUEUE); }
-void TrMainWindow::onSortByRatioToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_RATIO); }
-void TrMainWindow::onSortBySizeToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_SIZE); }
-void TrMainWindow::onSortByStateToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_STATE); }
+void MainWindow::onSortByActivityToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_ACTIVITY); }
+void MainWindow::onSortByAgeToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_AGE); }
+void MainWindow::onSortByETAToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_ETA); }
+void MainWindow::onSortByNameToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_NAME); }
+void MainWindow::onSortByProgressToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_PROGRESS); }
+void MainWindow::onSortByQueueToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_QUEUE); }
+void MainWindow::onSortByRatioToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_RATIO); }
+void MainWindow::onSortBySizeToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_SIZE); }
+void MainWindow::onSortByStateToggled (bool b) { if (b) setSortPref (SortMode::SORT_BY_STATE); }
 
 void
-TrMainWindow::setSortAscendingPref (bool b)
+MainWindow::setSortAscendingPref (bool b)
 {
   myPrefs.set (Prefs::SORT_REVERSED, b);
 }
@@ -489,7 +488,7 @@ TrMainWindow::setSortAscendingPref (bool b)
 ****/
 
 void
-TrMainWindow::showEvent (QShowEvent * event)
+MainWindow::showEvent (QShowEvent * event)
 {
   Q_UNUSED (event);
 
@@ -501,7 +500,7 @@ TrMainWindow::showEvent (QShowEvent * event)
 ****/
 
 void
-TrMainWindow::hideEvent (QHideEvent * event)
+MainWindow::hideEvent (QHideEvent * event)
 {
   Q_UNUSED (event);
 
@@ -514,7 +513,7 @@ TrMainWindow::hideEvent (QHideEvent * event)
 ****/
 
 void
-TrMainWindow::openPreferences ()
+MainWindow::openPreferences ()
 {
   if (myPrefsDialog.isNull ())
     {
@@ -530,17 +529,17 @@ TrMainWindow::openPreferences ()
 }
 
 void
-TrMainWindow::onDetailsDestroyed ()
+MainWindow::onDetailsDestroyed ()
 {
   myDetailsDialog = 0;
 }
 
 void
-TrMainWindow::openProperties ()
+MainWindow::openProperties ()
 {
   if (myDetailsDialog == 0)
     {
-      myDetailsDialog = new Details (mySession, myPrefs, myModel, this);
+      myDetailsDialog = new DetailsDialog (mySession, myPrefs, myModel, this);
       connect (myDetailsDialog, SIGNAL (destroyed (QObject*)), this, SLOT (onDetailsDestroyed ()));
     }
 
@@ -549,7 +548,7 @@ TrMainWindow::openProperties ()
 }
 
 void
-TrMainWindow::setLocation ()
+MainWindow::setLocation ()
 {
   QDialog * d = new RelocateDialog (mySession, myModel, getSelectedTorrents (), this);
   d->setAttribute (Qt::WA_DeleteOnClose, true);
@@ -588,7 +587,7 @@ void openSelect (const QString& path)
 #endif
 
 void
-TrMainWindow::openFolder ()
+MainWindow::openFolder ()
 {
   const int torrentId (*getSelectedTorrents ().begin ());
   const Torrent * tor (myModel.getTorrentFromId (torrentId));
@@ -611,27 +610,27 @@ TrMainWindow::openFolder ()
 }
 
 void
-TrMainWindow::copyMagnetLinkToClipboard ()
+MainWindow::copyMagnetLinkToClipboard ()
 {
   const int id (*getSelectedTorrents ().begin ());
   mySession.copyMagnetLinkToClipboard (id);
 }
 
 void
-TrMainWindow::openDonate ()
+MainWindow::openDonate ()
 {
   QDesktopServices::openUrl (QUrl (QLatin1String ("http://www.transmissionbt.com/donate.php")));
 }
 
 void
-TrMainWindow::openHelp ()
+MainWindow::openHelp ()
 {
   QDesktopServices::openUrl (QUrl (QString::fromLatin1 ("http://www.transmissionbt.com/help/gtk/%1.%2x").
     arg (MAJOR_VERSION).arg (MINOR_VERSION / 10)));
 }
 
 void
-TrMainWindow::refreshTitle ()
+MainWindow::refreshTitle ()
 {
   QString title (QLatin1String ("Transmission"));
   const QUrl url (mySession.getRemoteUrl ());
@@ -643,7 +642,7 @@ TrMainWindow::refreshTitle ()
 }
 
 void
-TrMainWindow::refreshTrayIconSoon ()
+MainWindow::refreshTrayIconSoon ()
 {
   if (!myRefreshTrayIconTimer.isActive ())
     {
@@ -652,7 +651,7 @@ TrMainWindow::refreshTrayIconSoon ()
     }
 }
 void
-TrMainWindow::refreshTrayIcon ()
+MainWindow::refreshTrayIcon ()
 {
   Speed upSpeed, downSpeed;
   size_t upCount, downCount;
@@ -683,7 +682,7 @@ TrMainWindow::refreshTrayIcon ()
 }
 
 void
-TrMainWindow::refreshStatusBar ()
+MainWindow::refreshStatusBar ()
 {
   Speed upSpeed, downSpeed;
   size_t upCount, downCount;
@@ -726,7 +725,7 @@ TrMainWindow::refreshStatusBar ()
 
 
 void
-TrMainWindow::refreshActionSensitivitySoon ()
+MainWindow::refreshActionSensitivitySoon ()
 {
   if (!myRefreshActionSensitivityTimer.isActive ())
     {
@@ -735,7 +734,7 @@ TrMainWindow::refreshActionSensitivitySoon ()
     }
 }
 void
-TrMainWindow::refreshActionSensitivity ()
+MainWindow::refreshActionSensitivity ()
 {
   int selected (0);
   int paused (0);
@@ -801,13 +800,13 @@ TrMainWindow::refreshActionSensitivity ()
 **/
 
 void
-TrMainWindow::clearSelection ()
+MainWindow::clearSelection ()
 {
   ui.action_DeselectAll->trigger ();
 }
 
 QSet<int>
-TrMainWindow::getSelectedTorrents () const
+MainWindow::getSelectedTorrents () const
 {
   QSet<int> ids;
 
@@ -821,67 +820,67 @@ TrMainWindow::getSelectedTorrents () const
 }
 
 void
-TrMainWindow::startSelected ()
+MainWindow::startSelected ()
 {
   mySession.startTorrents (getSelectedTorrents ());
 }
 void
-TrMainWindow::startSelectedNow ()
+MainWindow::startSelectedNow ()
 {
   mySession.startTorrentsNow (getSelectedTorrents ());
 }
 void
-TrMainWindow::pauseSelected ()
+MainWindow::pauseSelected ()
 {
   mySession.pauseTorrents (getSelectedTorrents ());
 }
 void
-TrMainWindow::queueMoveTop ()
+MainWindow::queueMoveTop ()
 {
   mySession.queueMoveTop (getSelectedTorrents ());
 }
 void
-TrMainWindow::queueMoveUp ()
+MainWindow::queueMoveUp ()
 {
   mySession.queueMoveUp (getSelectedTorrents ());
 }
 void
-TrMainWindow::queueMoveDown ()
+MainWindow::queueMoveDown ()
 {
   mySession.queueMoveDown (getSelectedTorrents ());
 }
 void
-TrMainWindow::queueMoveBottom ()
+MainWindow::queueMoveBottom ()
 {
   mySession.queueMoveBottom (getSelectedTorrents ());
 }
 void
-TrMainWindow::startAll ()
+MainWindow::startAll ()
 {
   mySession.startTorrents ();
 }
 void
-TrMainWindow::pauseAll ()
+MainWindow::pauseAll ()
 {
   mySession.pauseTorrents ();
 }
 void
-TrMainWindow::removeSelected ()
+MainWindow::removeSelected ()
 {
   removeTorrents (false);
 }
 void
-TrMainWindow::deleteSelected ()
+MainWindow::deleteSelected ()
 {
   removeTorrents (true);
 }
 void
-TrMainWindow::verifySelected ()
+MainWindow::verifySelected ()
 {
   mySession.verifyTorrents (getSelectedTorrents ());
 }
 void
-TrMainWindow::reannounceSelected ()
+MainWindow::reannounceSelected ()
 {
   mySession.reannounceTorrents (getSelectedTorrents ());
 }
@@ -890,39 +889,39 @@ TrMainWindow::reannounceSelected ()
 ***
 **/
 
-void TrMainWindow::showTotalRatio () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("total-ratio")); }
-void TrMainWindow::showTotalTransfer () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("total-transfer")); }
-void TrMainWindow::showSessionRatio () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("session-ratio")); }
-void TrMainWindow::showSessionTransfer () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("session-transfer")); }
+void MainWindow::showTotalRatio () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("total-ratio")); }
+void MainWindow::showTotalTransfer () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("total-transfer")); }
+void MainWindow::showSessionRatio () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("session-ratio")); }
+void MainWindow::showSessionTransfer () { myPrefs.set (Prefs::STATUSBAR_STATS, QString::fromLatin1 ("session-transfer")); }
 
 /**
 ***
 **/
 
 void
-TrMainWindow::setCompactView (bool visible)
+MainWindow::setCompactView (bool visible)
 {
   myPrefs.set (Prefs::COMPACT_VIEW, visible);
 }
 void
-TrMainWindow::toggleSpeedMode ()
+MainWindow::toggleSpeedMode ()
 {
   myPrefs.toggleBool (Prefs::ALT_SPEED_LIMIT_ENABLED);
   const bool mode = myPrefs.get<bool> (Prefs::ALT_SPEED_LIMIT_ENABLED);
   myAltSpeedAction->setChecked (mode);
 }
 void
-TrMainWindow::setToolbarVisible (bool visible)
+MainWindow::setToolbarVisible (bool visible)
 {
   myPrefs.set (Prefs::TOOLBAR, visible);
 }
 void
-TrMainWindow::setFilterbarVisible (bool visible)
+MainWindow::setFilterbarVisible (bool visible)
 {
   myPrefs.set (Prefs::FILTERBAR, visible);
 }
 void
-TrMainWindow::setStatusbarVisible (bool visible)
+MainWindow::setStatusbarVisible (bool visible)
 {
   myPrefs.set (Prefs::STATUSBAR, visible);
 }
@@ -932,7 +931,7 @@ TrMainWindow::setStatusbarVisible (bool visible)
 **/
 
 void
-TrMainWindow::toggleWindows (bool doShow)
+MainWindow::toggleWindows (bool doShow)
 {
   if (!doShow)
     {
@@ -949,7 +948,7 @@ TrMainWindow::toggleWindows (bool doShow)
 }
 
 void
-TrMainWindow::trayActivated (QSystemTrayIcon::ActivationReason reason)
+MainWindow::trayActivated (QSystemTrayIcon::ActivationReason reason)
 {
   if ((reason == QSystemTrayIcon::Trigger) ||
       (reason == QSystemTrayIcon::DoubleClick))
@@ -963,7 +962,7 @@ TrMainWindow::trayActivated (QSystemTrayIcon::ActivationReason reason)
 
 
 void
-TrMainWindow::refreshPref (int key)
+MainWindow::refreshPref (int key)
 {
   bool b;
   int i;
@@ -1106,7 +1105,7 @@ namespace
 }
 
 void
-TrMainWindow::newTorrent ()
+MainWindow::newTorrent ()
 {
   MakeDialog * dialog = new MakeDialog (mySession, this);
   dialog->setAttribute (Qt::WA_DeleteOnClose);
@@ -1114,7 +1113,7 @@ TrMainWindow::newTorrent ()
 }
 
 void
-TrMainWindow::openTorrent ()
+MainWindow::openTorrent ()
 {
   QFileDialog * d;
   d = new QFileDialog (this,
@@ -1142,7 +1141,7 @@ TrMainWindow::openTorrent ()
 }
 
 void
-TrMainWindow::openURL ()
+MainWindow::openURL ()
 {
   QString str = qApp->clipboard ()->text (QClipboard::Selection);
 
@@ -1156,7 +1155,7 @@ TrMainWindow::openURL ()
 }
 
 void
-TrMainWindow::addTorrents (const QStringList& filenames)
+MainWindow::addTorrents (const QStringList& filenames)
 {
   bool showOptions = myPrefs.getBool (Prefs::OPTIONS_PROMPT);
 
@@ -1173,7 +1172,7 @@ TrMainWindow::addTorrents (const QStringList& filenames)
 }
 
 void
-TrMainWindow::addTorrent (const AddData& addMe, bool showOptions)
+MainWindow::addTorrent (const AddData& addMe, bool showOptions)
 {
   if (showOptions)
     {
@@ -1189,7 +1188,7 @@ TrMainWindow::addTorrent (const AddData& addMe, bool showOptions)
 }
 
 void
-TrMainWindow::removeTorrents (const bool deleteFiles)
+MainWindow::removeTorrents (const bool deleteFiles)
 {
   QSet<int> ids;
   QMessageBox msgBox (this);
@@ -1296,7 +1295,7 @@ TrMainWindow::removeTorrents (const bool deleteFiles)
 ***/
 
 void
-TrMainWindow::updateNetworkIcon ()
+MainWindow::updateNetworkIcon ()
 {
   const time_t now = time (NULL);
   const int period = 3;
@@ -1337,26 +1336,26 @@ TrMainWindow::updateNetworkIcon ()
 }
 
 void
-TrMainWindow::onNetworkTimer ()
+MainWindow::onNetworkTimer ()
 {
   updateNetworkIcon ();
 }
 
 void
-TrMainWindow::dataReadProgress ()
+MainWindow::dataReadProgress ()
 {
   if (!myNetworkError)
   myLastReadTime = time (NULL);
 }
 
 void
-TrMainWindow::dataSendProgress ()
+MainWindow::dataSendProgress ()
 {
   myLastSendTime = time (NULL);
 }
 
 void
-TrMainWindow::onError (QNetworkReply::NetworkError code)
+MainWindow::onError (QNetworkReply::NetworkError code)
 {
   const bool hadError = myNetworkError;
   const bool haveError = (code != QNetworkReply::NoError)
@@ -1373,13 +1372,13 @@ TrMainWindow::onError (QNetworkReply::NetworkError code)
 }
 
 void
-TrMainWindow::errorMessage (const QString& msg)
+MainWindow::errorMessage (const QString& msg)
 {
     myErrorMessage = msg;
 }
 
 void
-TrMainWindow::wrongAuthentication ()
+MainWindow::wrongAuthentication ()
 {
   mySession.stop ();
   mySessionDialog->show ();
@@ -1390,7 +1389,7 @@ TrMainWindow::wrongAuthentication ()
 ***/
 
 void
-TrMainWindow::dragEnterEvent (QDragEnterEvent * event)
+MainWindow::dragEnterEvent (QDragEnterEvent * event)
 {
   const QMimeData * mime = event->mimeData ();
 
@@ -1402,7 +1401,7 @@ TrMainWindow::dragEnterEvent (QDragEnterEvent * event)
 }
 
 void
-TrMainWindow::dropEvent (QDropEvent * event)
+MainWindow::dropEvent (QDropEvent * event)
 {
   QStringList list;
 
@@ -1437,7 +1436,7 @@ TrMainWindow::dropEvent (QDropEvent * event)
 ***/
 
 void
-TrMainWindow::contextMenuEvent (QContextMenuEvent * event)
+MainWindow::contextMenuEvent (QContextMenuEvent * event)
 {
   QMenu * menu = new QMenu (this);
 
similarity index 91%
rename from qt/mainwin.h
rename to qt/MainWindow.h
index 01d7b4af561c7d943b193ceb1118e877a85c8713..33c1d40f88992d2661b1b2cec97c528965c468b2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef MAIN_WINDOW_H
-#define MAIN_WINDOW_H
+#ifndef QTR_MAIN_WINDOW_H
+#define QTR_MAIN_WINDOW_H
 
 #include <ctime>
 #include <QLineEdit>
 #include <QWidgetList>
 #include <QNetworkReply>
 
-extern "C"
-{
-  struct tr_variant;
-}
-
-#include "filters.h"
-#include "torrent-filter.h"
-#include "ui_mainwin.h"
+#include "Filters.h"
+#include "TorrentFilter.h"
+#include "ui_MainWindow.h"
 
 class AddData;
 class ActionDelegator;
 class Prefs;
-class Details;
+class DetailsDialog;
 class Session;
 class TorrentDelegate;
 class TorrentDelegateMin;
@@ -47,7 +42,12 @@ class QModelIndex;
 class QSortFilterProxyModel;
 class Filterbar;
 
-class TrMainWindow: public QMainWindow
+extern "C"
+{
+  struct tr_variant;
+}
+
+class MainWindow: public QMainWindow
 {
     Q_OBJECT
 
@@ -61,7 +61,7 @@ class TrMainWindow: public QMainWindow
     QPointer<QDialog> myPrefsDialog;
     QDialog * myAboutDialog;
     QDialog * myStatsDialog;
-    Details * myDetailsDialog;
+    DetailsDialog * myDetailsDialog;
     QSystemTrayIcon myTrayIcon;
     TorrentFilter myFilterModel;
     TorrentDelegate * myTorrentDelegate;
@@ -180,8 +180,8 @@ class TrMainWindow: public QMainWindow
     void wrongAuthentication ();
 
   public:
-    TrMainWindow (Session&, Prefs&, TorrentModel&, bool minized);
-    virtual ~TrMainWindow ();
+    MainWindow (Session&, Prefs&, TorrentModel&, bool minized);
+    virtual ~MainWindow ();
 
   protected:
     virtual void contextMenuEvent (QContextMenuEvent *);
@@ -189,4 +189,4 @@ class TrMainWindow: public QMainWindow
     virtual void dropEvent (QDropEvent *);
 };
 
-#endif
+#endif // QTR_MAIN_WINDOW_H
similarity index 99%
rename from qt/mainwin.ui
rename to qt/MainWindow.ui
index 42904288fab067ed7288ae9d6e816807c59b068c..fa7b75e8ce492b16e8bff607594225df5d27238e 100644 (file)
@@ -62,7 +62,7 @@
         <number>3</number>
        </property>
        <item>
-        <widget class="TrIconToolButton" name="optionsButton">
+        <widget class="IconToolButton" name="optionsButton">
          <property name="icon">
           <iconset resource="application.qrc">
            <normaloff>:/icons/utilities.png</normaloff>:/icons/utilities.png</iconset>
         <widget class="QLabel" name="statsLabel"/>
        </item>
        <item>
-        <widget class="TrIconToolButton" name="statsModeButton">
+        <widget class="IconToolButton" name="statsModeButton">
          <property name="icon">
           <iconset resource="application.qrc">
            <normaloff>:/icons/ratio.png</normaloff>:/icons/ratio.png</iconset>
  </widget>
  <customwidgets>
   <customwidget>
-   <class>TrIconToolButton</class>
+   <class>IconToolButton</class>
    <extends>QToolButton</extends>
-   <header>tricontoolbutton.h</header>
+   <header>IconToolButton.h</header>
   </customwidget>
  </customwidgets>
  <resources>
similarity index 94%
rename from qt/make-dialog.cc
rename to qt/MakeDialog.cc
index ca3765614ad1fd19ead3f27c0404e17646e73bac..7c5be0020cedaf5f0c04c9f6fdd2f5afc7cb0a91 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/makemeta.h>
 #include <libtransmission/utils.h>
 
-#include "column-resizer.h"
-#include "formatter.h"
-#include "make-dialog.h"
-#include "session.h"
-#include "utils.h"
+#include "ColumnResizer.h"
+#include "Formatter.h"
+#include "MakeDialog.h"
+#include "Session.h"
+#include "Utils.h"
 
-#include "ui_make-progress-dialog.h"
+#include "ui_MakeProgressDialog.h"
 
 namespace
 {
@@ -117,7 +117,7 @@ MakeProgressDialog::onProgress ()
   ui.dialogButtons->button (QDialogButtonBox::Open)->setEnabled (b.isDone && b.result == TR_MAKEMETA_OK);
 }
 
-#include "make-dialog.moc"
+#include "MakeDialog.moc"
 
 /***
 ****
@@ -221,11 +221,11 @@ MakeDialog::MakeDialog (Session& session, QWidget * parent):
 {
   ui.setupUi (this);
 
-  ui.destinationButton->setMode (TrPathButton::DirectoryMode);
+  ui.destinationButton->setMode (PathButton::DirectoryMode);
   ui.destinationButton->setPath (QDir::homePath ());
 
-  ui.sourceFolderButton->setMode (TrPathButton::DirectoryMode);
-  ui.sourceFileButton->setMode (TrPathButton::FileMode);
+  ui.sourceFolderButton->setMode (PathButton::DirectoryMode);
+  ui.sourceFileButton->setMode (PathButton::FileMode);
 
   ColumnResizer * cr (new ColumnResizer (this));
   cr->addLayout (ui.filesSectionLayout);
similarity index 82%
rename from qt/make-dialog.h
rename to qt/MakeDialog.h
index 8cb5f8e5f4270c73247be01feaa3af85e8ff370f..5737f88ee8fb973c8f4890548662b6d0a55c0c12 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,14 +7,14 @@
  * $Id$
  */
 
-#ifndef MAKE_DIALOG_H
-#define MAKE_DIALOG_H
+#ifndef QTR_MAKE_DIALOG_H
+#define QTR_MAKE_DIALOG_H
 
 #include <memory>
 
 #include <QDialog>
 
-#include "ui_make-dialog.h"
+#include "ui_MakeDialog.h"
 
 class QAbstractButton;
 
@@ -50,4 +50,4 @@ class MakeDialog: public QDialog
     virtual ~MakeDialog ();
 };
 
-#endif
+#endif // QTR_MAKE_DIALOG_H
similarity index 96%
rename from qt/make-dialog.ui
rename to qt/MakeDialog.ui
index 1a520a4224cf0e4c4c3778500a88dfb807292888..aad69e15d1cfd2276e759542412bb740d881f323 100644 (file)
@@ -43,7 +43,7 @@
       </widget>
      </item>
      <item row="0" column="1">
-      <widget class="TrPathButton" name="destinationButton"/>
+      <widget class="PathButton" name="destinationButton"/>
      </item>
      <item row="1" column="0">
       <widget class="QRadioButton" name="sourceFolderRadio">
@@ -53,7 +53,7 @@
       </widget>
      </item>
      <item row="1" column="1">
-      <widget class="TrPathButton" name="sourceFolderButton">
+      <widget class="PathButton" name="sourceFolderButton">
        <property name="enabled">
         <bool>false</bool>
        </property>
@@ -70,7 +70,7 @@
       </widget>
      </item>
      <item row="2" column="1">
-      <widget class="TrPathButton" name="sourceFileButton"/>
+      <widget class="PathButton" name="sourceFileButton"/>
      </item>
      <item row="3" column="1">
       <widget class="QLabel" name="sourceSizeLabel">
@@ -180,9 +180,9 @@ To add another primary URL, add it after a blank line.</string>
  </widget>
  <customwidgets>
   <customwidget>
-   <class>TrPathButton</class>
+   <class>PathButton</class>
    <extends>QToolButton</extends>
-   <header>path-button.h</header>
+   <header>PathButton.h</header>
   </customwidget>
  </customwidgets>
  <resources/>
similarity index 96%
rename from qt/options.cc
rename to qt/OptionsDialog.cc
index 619c057abb182cdbbbde14bec2f8b2e60d1a0534..3cc466b6b89b9bfd83244a883cbfe59fe44791c3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/utils.h> /* mime64 */
 #include <libtransmission/variant.h>
 
-#include "add-data.h"
-#include "file-tree.h"
-#include "freespace-label.h"
-#include "options.h"
-#include "prefs.h"
-#include "session.h"
-#include "torrent.h"
-#include "utils.h"
+#include "AddData.h"
+#include "FreeSpaceLabel.h"
+#include "OptionsDialog.h"
+#include "Prefs.h"
+#include "Session.h"
+#include "Torrent.h"
+#include "Utils.h"
 
 /***
 ****
@@ -53,7 +52,7 @@ OptionsDialog::OptionsDialog (Session& session, const Prefs& prefs, const AddDat
   if (myAdd.type == AddData::FILENAME)
     {
       ui.sourceStack->setCurrentWidget (ui.sourceButton);
-      ui.sourceButton->setMode (TrPathButton::FileMode);
+      ui.sourceButton->setMode (PathButton::FileMode);
       ui.sourceButton->setTitle (tr ("Open Torrent"));
       ui.sourceButton->setNameFilter (tr ("Torrent Files (*.torrent);;All Files (*.*)"));
       ui.sourceButton->setPath (myAdd.filename);
@@ -81,7 +80,7 @@ OptionsDialog::OptionsDialog (Session& session, const Prefs& prefs, const AddDat
   if (session.isLocal ())
     {
       ui.destinationStack->setCurrentWidget (ui.destinationButton);
-      ui.destinationButton->setMode (TrPathButton::DirectoryMode);
+      ui.destinationButton->setMode (PathButton::DirectoryMode);
       ui.destinationButton->setTitle (tr ("Select Destination"));
       ui.destinationButton->setPath (downloadDir);
       myLocalDestination = downloadDir;
@@ -197,7 +196,7 @@ OptionsDialog::reload ()
 
       for (tr_file_index_t i = 0; i < myInfo.fileCount; ++i)
         {
-          TrFile file;
+          TorrentFile file;
           file.index = i;
           file.priority = myPriorities[i];
           file.wanted = myWanted[i];
@@ -334,7 +333,7 @@ OptionsDialog::clearVerify ()
   myVerifyPiecePos = 0;
   myVerifyTimer.stop ();
 
-  for (TrFile& f: myFiles)
+  for (TorrentFile& f: myFiles)
     f.have = 0;
 
   ui.filesView->update (myFiles);
@@ -412,7 +411,7 @@ OptionsDialog::onTimeout ()
         {
           for (auto i = myVerifyBins.begin (), end = myVerifyBins.end (); i != end; ++i)
             {
-              TrFile& f (myFiles[i.key ()]);
+              TorrentFile& f (myFiles[i.key ()]);
               f.have += i.value ();
               changedFiles.append (f);
             }
@@ -432,7 +431,7 @@ OptionsDialog::onTimeout ()
   if (done)
     {
       uint64_t have = 0;
-      for (const TrFile& f: myFiles)
+      for (const TorrentFile& f: myFiles)
         have += f.have;
 
       if (!have) // everything failed
similarity index 86%
rename from qt/options.h
rename to qt/OptionsDialog.h
index 9fcf44ceb4f5ff79dbb2efbb11472c3e196422ec..03529e4e03b4807a709b4e0d34eeb1456fc80757 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef OPTIONS_DIALOG_H
-#define OPTIONS_DIALOG_H
+#ifndef QTR_OPTIONS_DIALOG_H
+#define QTR_OPTIONS_DIALOG_H
 
 #include <QCryptographicHash>
 #include <QDialog>
 #include <QTimer>
 #include <QVector>
 
-#include "add-data.h" // AddData
-#include "file-tree.h" // FileList
+#include "AddData.h" // AddData
+#include "Torrent.h" // FileList
 
-#include "ui_options.h"
+#include "ui_OptionsDialog.h"
 
 class Prefs;
 class Session;
@@ -83,4 +83,4 @@ class OptionsDialog: public QDialog
     QTimer myEditTimer;
 };
 
-#endif
+#endif // QTR_OPTIONS_DIALOG_H
similarity index 91%
rename from qt/options.ui
rename to qt/OptionsDialog.ui
index 03b88bd136001cdeccc87b196024619a4bd011b7..6eb542fee559bbdf83cacbcf1d74ce08fff166a8 100644 (file)
@@ -29,7 +29,7 @@
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <widget class="TrPathButton" name="sourceButton"/>
+     <widget class="PathButton" name="sourceButton"/>
      <widget class="QLineEdit" name="sourceEdit"/>
     </widget>
    </item>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <widget class="TrPathButton" name="destinationButton"/>
+     <widget class="PathButton" name="destinationButton"/>
      <widget class="QLineEdit" name="destinationEdit"/>
     </widget>
    </item>
    <item row="2" column="1">
-    <widget class="FreespaceLabel" name="freeSpaceLabel">
+    <widget class="FreeSpaceLabel" name="freeSpaceLabel">
      <property name="text">
       <string notr="true">...</string>
      </property>
   <customwidget>
    <class>FileTreeView</class>
    <extends>QTreeView</extends>
-   <header>file-tree.h</header>
+   <header>FileTreeView.h</header>
   </customwidget>
   <customwidget>
-   <class>FreespaceLabel</class>
+   <class>FreeSpaceLabel</class>
    <extends>QLabel</extends>
-   <header>freespace-label.h</header>
+   <header>FreeSpaceLabel.h</header>
   </customwidget>
   <customwidget>
-   <class>TrPathButton</class>
+   <class>PathButton</class>
    <extends>QToolButton</extends>
-   <header>path-button.h</header>
+   <header>PathButton.h</header>
   </customwidget>
  </customwidgets>
  <resources/>
similarity index 85%
rename from qt/path-button.cc
rename to qt/PathButton.cc
index 634ff81e67ffbdb4ab8d10ff310a2fb190e8a6a5..25779f3855a51acec8bcf8d7efa379c971169f0c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2014 Mnemosyne LLC
+ * This file Copyright (C) 2014-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <QStyleOptionToolButton>
 #include <QStylePainter>
 
-#include "path-button.h"
-#include "utils.h"
+#include "PathButton.h"
+#include "Utils.h"
 
-TrPathButton::TrPathButton (QWidget * parent):
+PathButton::PathButton (QWidget * parent):
   QToolButton (parent),
   myMode (DirectoryMode),
   myTitle (),
@@ -36,7 +36,7 @@ TrPathButton::TrPathButton (QWidget * parent):
 }
 
 void
-TrPathButton::setMode (Mode mode)
+PathButton::setMode (Mode mode)
 {
   if (myMode == mode)
     return;
@@ -47,19 +47,19 @@ TrPathButton::setMode (Mode mode)
 }
 
 void
-TrPathButton::setTitle (const QString& title)
+PathButton::setTitle (const QString& title)
 {
   myTitle = title;
 }
 
 void
-TrPathButton::setNameFilter (const QString& nameFilter)
+PathButton::setNameFilter (const QString& nameFilter)
 {
   myNameFilter = nameFilter;
 }
 
 void
-TrPathButton::setPath (const QString& path)
+PathButton::setPath (const QString& path)
 {
   if (myPath == path)
     return;
@@ -72,20 +72,20 @@ TrPathButton::setPath (const QString& path)
 }
 
 const QString&
-TrPathButton::path () const
+PathButton::path () const
 {
   return myPath;
 }
 
 QSize
-TrPathButton::sizeHint () const
+PathButton::sizeHint () const
 {
   const QSize sh (QToolButton::sizeHint ());
   return QSize (qMin (sh.width (), 150), sh.height ());
 }
 
 void
-TrPathButton::paintEvent (QPaintEvent * /*event*/)
+PathButton::paintEvent (QPaintEvent * /*event*/)
 {
   QStylePainter painter(this);
   QStyleOptionToolButton option;
@@ -107,7 +107,7 @@ TrPathButton::paintEvent (QPaintEvent * /*event*/)
 }
 
 void
-TrPathButton::onClicked ()
+PathButton::onClicked ()
 {
   QFileDialog * dialog = new QFileDialog (window (), effectiveTitle ());
   dialog->setFileMode (isDirMode () ? QFileDialog::Directory : QFileDialog::ExistingFile);
@@ -137,14 +137,14 @@ TrPathButton::onClicked ()
 }
 
 void
-TrPathButton::onFileSelected (const QString& path)
+PathButton::onFileSelected (const QString& path)
 {
   if (!path.isEmpty ())
     setPath (path);
 }
 
 void
-TrPathButton::updateAppearance ()
+PathButton::updateAppearance ()
 {
   const QFileInfo pathInfo (myPath);
 
@@ -165,13 +165,13 @@ TrPathButton::updateAppearance ()
 }
 
 bool
-TrPathButton::isDirMode () const
+PathButton::isDirMode () const
 {
   return myMode == DirectoryMode;
 }
 
 QString
-TrPathButton::effectiveTitle () const
+PathButton::effectiveTitle () const
 {
   if (!myTitle.isEmpty ())
     return myTitle;
similarity index 88%
rename from qt/path-button.h
rename to qt/PathButton.h
index 393fc43f855a3abbf5397bd3c6abbde0e1d5b4a9..2f84d387ebe5cba33829b7956ffdfc7cf274e65d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2014 Mnemosyne LLC
+ * This file Copyright (C) 2014-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -12,7 +12,7 @@
 
 #include <QToolButton>
 
-class TrPathButton: public QToolButton
+class PathButton: public QToolButton
 {
     Q_OBJECT
 
@@ -24,7 +24,7 @@ class TrPathButton: public QToolButton
     };
 
   public:
-    TrPathButton (QWidget * parent = nullptr);
+    PathButton (QWidget * parent = nullptr);
 
     void setMode (Mode mode);
     void setTitle (const QString& title);
similarity index 96%
rename from qt/prefs.cc
rename to qt/Prefs.cc
index 818327c0b897cf8f95c0db6635c3ae8663b02fe5..70d8fb29f4d948c2d7914fab8cf830fdde6f3663 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,6 +7,8 @@
  * $Id$
  */
 
+#include <stdlib.h>
+
 #include <cassert>
 #include <iostream>
 
 #include <libtransmission/transmission.h>
 #include <libtransmission/utils.h>
 #include <libtransmission/variant.h>
-#include <stdlib.h>
-#include "prefs.h"
-#include "types.h"
-#include "utils.h"
+
+#include "CustomVariantType.h"
+#include "Prefs.h"
+#include "Utils.h"
 
 /***
 ****
@@ -38,7 +40,7 @@ Prefs::PrefItem Prefs::myItems[] =
   { SHOW_NOTIFICATION_ON_ADD, TR_KEY_torrent_added_notification_enabled, QVariant::Bool },
   { SHOW_NOTIFICATION_ON_COMPLETE, TR_KEY_torrent_complete_notification_enabled, QVariant::Bool },
   { ASKQUIT, TR_KEY_prompt_before_exit, QVariant::Bool },
-  { SORT_MODE, TR_KEY_sort_mode, TrTypes::SortModeType },
+  { SORT_MODE, TR_KEY_sort_mode, CustomVariantType::SortModeType },
   { SORT_REVERSED, TR_KEY_sort_reversed, QVariant::Bool },
   { COMPACT_VIEW, TR_KEY_compact_view, QVariant::Bool },
   { FILTERBAR, TR_KEY_show_filterbar, QVariant::Bool },
@@ -54,7 +56,7 @@ Prefs::PrefItem Prefs::myItems[] =
   { MAIN_WINDOW_WIDTH, TR_KEY_main_window_width, QVariant::Int },
   { MAIN_WINDOW_X, TR_KEY_main_window_x, QVariant::Int },
   { MAIN_WINDOW_Y, TR_KEY_main_window_y, QVariant::Int },
-  { FILTER_MODE, TR_KEY_filter_mode, TrTypes::FilterModeType },
+  { FILTER_MODE, TR_KEY_filter_mode, CustomVariantType::FilterModeType },
   { FILTER_TRACKERS, TR_KEY_filter_trackers, QVariant::String },
   { FILTER_TEXT, TR_KEY_filter_text, QVariant::String },
   { SESSION_IS_REMOTE, TR_KEY_remote_session_enabled, QVariant::Bool },
@@ -160,12 +162,12 @@ Prefs::Prefs (const QString& configDir):
               myValues[i].setValue (static_cast<qlonglong> (intVal));
             break;
 
-          case TrTypes::SortModeType:
+          case CustomVariantType::SortModeType:
             if (tr_variantGetStr (b, &str, NULL))
               myValues[i] = QVariant::fromValue (SortMode (QString::fromUtf8 (str)));
             break;
 
-          case TrTypes::FilterModeType:
+          case CustomVariantType::FilterModeType:
             if (tr_variantGetStr (b, &str, NULL))
               myValues[i] = QVariant::fromValue (FilterMode (QString::fromUtf8 (str)));
             break;
@@ -218,11 +220,11 @@ Prefs::~Prefs ()
             tr_variantDictAddInt (&current_settings, key, val.toInt());
             break;
 
-          case TrTypes::SortModeType:
+          case CustomVariantType::SortModeType:
             tr_variantDictAddStr (&current_settings, key, val.value<SortMode>().name().toUtf8().constData());
             break;
 
-          case TrTypes::FilterModeType:
+          case CustomVariantType::FilterModeType:
             tr_variantDictAddStr (&current_settings, key, val.value<FilterMode>().name().toUtf8().constData());
             break;
 
similarity index 97%
rename from qt/prefs.h
rename to qt/Prefs.h
index bc66eba310da7c94d84b5357adea9c0a2cbb20c6..c3291228b52bfa4b3db0d35de6c3cd7a083a9c15 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <QString>
 #include <QVariant>
 
-#include "filters.h"
-
 #include <libtransmission/quark.h>
 
+#include "Filters.h"
+
 extern "C"
 {
   struct tr_variant;
@@ -186,4 +186,4 @@ class Prefs: public QObject
     void changed (int key);
 };
 
-#endif
+#endif // QTR_PREFS_H
similarity index 96%
rename from qt/prefs-dialog.cc
rename to qt/PrefsDialog.cc
index 2a7f3f1227d46e736238ed406e077081d6014f28..e9d286e757efaf1aefd14e15014c4e7fd96ee4b5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <QTimer>
 #include <QVBoxLayout>
 
-#include "column-resizer.h"
-#include "freespace-label.h"
-#include "formatter.h"
-#include "hig.h"
-#include "prefs.h"
-#include "prefs-dialog.h"
-#include "session.h"
-#include "utils.h"
+#include "ColumnResizer.h"
+#include "FreeSpaceLabel.h"
+#include "Formatter.h"
+#include "Prefs.h"
+#include "PrefsDialog.h"
+#include "Session.h"
+#include "Utils.h"
 
 /***
 ****
@@ -126,7 +125,7 @@ PrefsDialog::updateWidgetValue (QWidget * widget, int prefKey)
     w->setTime (QTime (0, 0).addSecs (myPrefs.getInt(prefKey) * 60));
   else if (auto w = qobject_cast<QLineEdit*> (widget))
     w->setText (myPrefs.getString (prefKey));
-  else if (auto w = qobject_cast<TrPathButton*> (widget))
+  else if (auto w = qobject_cast<PathButton*> (widget))
     w->setPath (myPrefs.getString (prefKey));
   else
     return false;
@@ -147,7 +146,7 @@ PrefsDialog::linkWidgetToPref (QWidget * widget, int prefKey)
     connect (widget, SIGNAL (editingFinished ()), SLOT (timeEditingFinished ()));
   else if (widget->inherits ("QLineEdit"))
     connect (widget, SIGNAL (editingFinished ()), SLOT (lineEditingFinished ()));
-  else if (widget->inherits ("TrPathButton"))
+  else if (widget->inherits ("PathButton"))
     connect (widget, SIGNAL (pathChanged (QString)), SLOT (pathChanged (QString)));
   else if (widget->inherits ("QAbstractSpinBox"))
     connect (widget, SIGNAL (editingFinished ()), SLOT (spinBoxEditingFinished ()));
@@ -192,7 +191,7 @@ PrefsDialog::lineEditingFinished ()
 void
 PrefsDialog::pathChanged (const QString& path)
 {
-  if (auto b = qobject_cast<const TrPathButton*> (sender ()))
+  if (auto b = qobject_cast<const PathButton*> (sender ()))
     setPref(getPrefKey (b), path);
 }
 
@@ -472,10 +471,10 @@ PrefsDialog::initDownloadingTab ()
       ui.incompleteDirStack->setCurrentWidget (ui.incompleteDirButton);
       ui.completionScriptStack->setCurrentWidget (ui.completionScriptButton);
 
-      ui.watchDirButton->setMode (TrPathButton::DirectoryMode);
-      ui.downloadDirButton->setMode (TrPathButton::DirectoryMode);
-      ui.incompleteDirButton->setMode (TrPathButton::DirectoryMode);
-      ui.completionScriptButton->setMode (TrPathButton::FileMode);
+      ui.watchDirButton->setMode (PathButton::DirectoryMode);
+      ui.downloadDirButton->setMode (PathButton::DirectoryMode);
+      ui.incompleteDirButton->setMode (PathButton::DirectoryMode);
+      ui.completionScriptButton->setMode (PathButton::FileMode);
 
       ui.watchDirButton->setTitle (tr ("Select Watch Directory"));
       ui.downloadDirButton->setTitle (tr ("Select Destination"));
similarity index 91%
rename from qt/prefs-dialog.h
rename to qt/PrefsDialog.h
index b2abf1054ad65780939d755975de7f2623e3b13b..8f6be8726af7fde8f98b7373a6ffd286283f006d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,15 +7,15 @@
  * $Id$
  */
 
-#ifndef PREFS_DIALOG_H
-#define PREFS_DIALOG_H
+#ifndef QTR_PREFS_DIALOG_H
+#define QTR_PREFS_DIALOG_H
 
 #include <QDialog>
 #include <QMap>
 #include <QSet>
 
-#include "prefs.h"
-#include "ui_prefs-dialog.h"
+#include "Prefs.h"
+#include "ui_PrefsDialog.h"
 
 class QAbstractButton;
 class QCheckBox;
@@ -32,7 +32,7 @@ class QTimeEdit;
 class QVBoxLayout;
 class QWidget;
 
-class FreespaceLabel;
+class FreeSpaceLabel;
 class Prefs;
 class Session;
 
@@ -101,4 +101,4 @@ class PrefsDialog: public QDialog
     QMessageBox * myBlocklistDialog;
 };
 
-#endif
+#endif // QTR_PREFS_DIALOG_H
similarity index 98%
rename from qt/prefs-dialog.ui
rename to qt/PrefsDialog.ui
index c3c398370318674f3d067a4161b46405f7f11c4c..3f0d1b6f3dce9cecc9511ac8f258acade0805f88 100644 (file)
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <widget class="TrPathButton" name="watchDirButton"/>
+           <widget class="PathButton" name="watchDirButton"/>
            <widget class="QLineEdit" name="watchDirEdit"/>
           </widget>
          </item>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <widget class="TrPathButton" name="downloadDirButton"/>
+           <widget class="PathButton" name="downloadDirButton"/>
            <widget class="QLineEdit" name="downloadDirEdit"/>
           </widget>
          </item>
          <item row="5" column="1">
-          <widget class="FreespaceLabel" name="downloadDirFreeSpaceLabel">
+          <widget class="FreeSpaceLabel" name="downloadDirFreeSpaceLabel">
            <property name="text">
             <string notr="true">...</string>
            </property>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <widget class="TrPathButton" name="incompleteDirButton"/>
+           <widget class="PathButton" name="incompleteDirButton"/>
            <widget class="QLineEdit" name="incompleteDirEdit"/>
           </widget>
          </item>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <widget class="TrPathButton" name="completionScriptButton"/>
+           <widget class="PathButton" name="completionScriptButton"/>
            <widget class="QLineEdit" name="completionScriptEdit"/>
           </widget>
          </item>
  </widget>
  <customwidgets>
   <customwidget>
-   <class>TrPathButton</class>
+   <class>PathButton</class>
    <extends>QToolButton</extends>
-   <header>path-button.h</header>
+   <header>PathButton.h</header>
   </customwidget>
   <customwidget>
-   <class>FreespaceLabel</class>
+   <class>FreeSpaceLabel</class>
    <extends>QLabel</extends>
-   <header>freespace-label.h</header>
+   <header>FreeSpaceLabel.h</header>
   </customwidget>
  </customwidgets>
  <resources>
similarity index 91%
rename from qt/relocate.cc
rename to qt/RelocateDialog.cc
index c91d8e39a4da39174faecba4e8d84282888b69cc..3ab7447940c3a0f557a75908fe2228de6c76706f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -9,10 +9,10 @@
 
 #include <QDir>
 
-#include "relocate.h"
-#include "session.h"
-#include "torrent.h"
-#include "torrent-model.h"
+#include "RelocateDialog.h"
+#include "Session.h"
+#include "Torrent.h"
+#include "TorrentModel.h"
 
 bool RelocateDialog::myMoveFlag = true;
 
@@ -61,7 +61,7 @@ RelocateDialog::RelocateDialog (Session            & session,
   if (mySession.isServer ())
     {
       ui.newLocationStack->setCurrentWidget (ui.newLocationButton);
-      ui.newLocationButton->setMode (TrPathButton::DirectoryMode);
+      ui.newLocationButton->setMode (PathButton::DirectoryMode);
       ui.newLocationButton->setTitle (tr ("Select Location"));
       ui.newLocationButton->setPath (path);
     }
similarity index 78%
rename from qt/relocate.h
rename to qt/RelocateDialog.h
index ec43e32bfc442876d75417feef79c779a29c49f2..0f57013402edb88d7663302e280375266e43b61e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,13 +7,13 @@
  * $Id$
  */
 
-#ifndef RELOCATE_DIALOG_H
-#define RELOCATE_DIALOG_H
+#ifndef QTR_RELOCATE_DIALOG_H
+#define QTR_RELOCATE_DIALOG_H
 
 #include <QDialog>
 #include <QSet>
 
-#include "ui_relocate.h"
+#include "ui_RelocateDialog.h"
 
 class Session;
 class TorrentModel;
@@ -41,4 +41,4 @@ class RelocateDialog: public QDialog
     static bool myMoveFlag;
 };
 
-#endif
+#endif // QTR_RELOCATE_DIALOG_H
similarity index 94%
rename from qt/relocate.ui
rename to qt/RelocateDialog.ui
index 5e133b954b1409c89abdcc9fa01cd7da7b9eb743..b394aaca38b91a7cf5daacd20024a3c93ef04e38 100644 (file)
@@ -41,7 +41,7 @@
      </item>
      <item row="0" column="1">
       <widget class="QStackedWidget" name="newLocationStack">
-       <widget class="TrPathButton" name="newLocationButton"/>
+       <widget class="PathButton" name="newLocationButton"/>
        <widget class="QLineEdit" name="newLocationEdit"/>
       </widget>
      </item>
@@ -75,9 +75,9 @@
  </widget>
  <customwidgets>
   <customwidget>
-   <class>TrPathButton</class>
+   <class>PathButton</class>
    <extends>QToolButton</extends>
-   <header>path-button.h</header>
+   <header>PathButton.h</header>
   </customwidget>
  </customwidgets>
  <resources/>
similarity index 98%
rename from qt/rpc-client.cc
rename to qt/RpcClient.cc
index 180078843e78945c4afdc56b511edbf879e8570c..dad99d5be7ad6cdf5f701094372afad3d8ede0c4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2014 Mnemosyne LLC
+ * This file Copyright (C) 2014-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -22,7 +22,7 @@
 #include <libtransmission/utils.h> // tr_free
 #include <libtransmission/version.h> // LONG_VERSION_STRING
 
-#include "rpc-client.h"
+#include "RpcClient.h"
 
 // #define DEBUG_HTTP
 
similarity index 92%
rename from qt/rpc-client.h
rename to qt/RpcClient.h
index 317e3b22aff0190735e935aa67ad9c9ce00ff4f7..643e77c0f04b3ad14ba0898003cd57d6ea684d98 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2014 Mnemosyne LLC
+ * This file Copyright (C) 2014-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef TR_RPC_CLIENT_H
-#define TR_RPC_CLIENT_H
+#ifndef QTR_RPC_CLIENT_H
+#define QTR_RPC_CLIENT_H
 
 #include <QNetworkReply>
 #include <QObject>
@@ -74,4 +74,4 @@ class RpcClient: public QObject
     QNetworkAccessManager * myNAM;
 };
 
-#endif
+#endif // QTR_RPC_CLIENT_H
similarity index 98%
rename from qt/session.cc
rename to qt/Session.cc
index 56763f778fbb07d3ffa1198de95387cca0337e1b..1e6e3cb60acdd334c137036374dea1cf6f12fa8b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/utils.h> // tr_free
 #include <libtransmission/variant.h>
 
-#include "add-data.h"
-#include "prefs.h"
-#include "session.h"
-#include "session-dialog.h"
-#include "torrent.h"
-#include "utils.h"
+#include "AddData.h"
+#include "Prefs.h"
+#include "Session.h"
+#include "SessionDialog.h"
+#include "Torrent.h"
+#include "Utils.h"
 
 namespace
 {
@@ -807,8 +807,8 @@ Session::updateInfo (tr_variant * d)
                 myPrefs.set (i, val);
               break;
             }
-          case TrTypes::FilterModeType:
-          case TrTypes::SortModeType:
+          case CustomVariantType::FilterModeType:
+          case CustomVariantType::SortModeType:
           case QVariant::String:
             {
               const char * val;
similarity index 97%
rename from qt/session.h
rename to qt/Session.h
index ce2f8999851ce3d2bb1df6cc1e755648a83a1e1c..9a29736b6fd0a4a5bc206b4cf0356830ca0edbdd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#ifndef TR_APP_SESSION_H
-#define TR_APP_SESSION_H
+#ifndef QTR_SESSION_H
+#define QTR_SESSION_H
 
 #include <QObject>
 #include <QSet>
@@ -18,7 +18,7 @@
 #include <libtransmission/transmission.h>
 #include <libtransmission/quark.h>
 
-#include "rpc-client.h"
+#include "RpcClient.h"
 
 class AddData;
 class Prefs;
@@ -166,4 +166,4 @@ class Session: public QObject
     RpcClient myRpc;
 };
 
-#endif
+#endif // QTR_SESSION_H
similarity index 95%
rename from qt/session-dialog.cc
rename to qt/SessionDialog.cc
index 308d738c7a46de22de86a46f135d117f4eca5523..8d19b694f36c54f929babfc34625fd307350dcba 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,9 +7,9 @@
  * $Id$
  */
 
-#include "prefs.h"
-#include "session.h"
-#include "session-dialog.h"
+#include "Prefs.h"
+#include "Session.h"
+#include "SessionDialog.h"
 
 /***
 ****
similarity index 77%
rename from qt/session-dialog.h
rename to qt/SessionDialog.h
index b266ccd078dca59e6c19993a0d986e04f50f183c..b1e8050322aba9a5726bd62e0f6a025937646233 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,13 +7,13 @@
  * $Id$
  */
 
-#ifndef SESSION_DIALOG_H
-#define SESSION_DIALOG_H
+#ifndef QTR_SESSION_DIALOG_H
+#define QTR_SESSION_DIALOG_H
 
 #include <QDialog>
 #include <QWidgetList>
 
-#include "ui_session-dialog.h"
+#include "ui_SessionDialog.h"
 
 class Prefs;
 class Session;
@@ -38,4 +38,4 @@ class SessionDialog: public QDialog
     QWidgetList myAuthWidgets;
 };
 
-#endif
+#endif // QTR_SESSION_DIALOG_H
similarity index 100%
rename from qt/session-dialog.ui
rename to qt/SessionDialog.ui
similarity index 88%
rename from qt/speed.h
rename to qt/Speed.h
index 74de86629a68f5763414f8a71a95fd3f4a76ad35..7c7ae33b02f0d95111d8a0c34e06bccae4e6f2ac 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -10,7 +10,7 @@
 #ifndef QTR_SPEED_H
 #define QTR_SPEED_H
 
-#include "formatter.h"
+#include "Formatter.h"
 
 class Speed
 {
@@ -31,4 +31,4 @@ class Speed
     bool operator< (const Speed& that) const { return _Bps < that._Bps; }
 };
 
-#endif
+#endif // QTR_SPEED_H
similarity index 99%
rename from qt/squeezelabel.cc
rename to qt/SqueezeLabel.cc
index 06f246dcff16b142440d77db3509ebc60afb8dbd..b73aa40424c9f1745960f6423c162753d2d27cf6 100644 (file)
@@ -43,7 +43,7 @@
 #include <QStyle>
 #include <QStyleOption>
 
-#include "squeezelabel.h"
+#include "SqueezeLabel.h"
 
 SqueezeLabel::SqueezeLabel (const QString& text, QWidget * parent):
   QLabel (text, parent)
similarity index 94%
rename from qt/squeezelabel.h
rename to qt/SqueezeLabel.h
index c73ec6edf6c4e5564b3120648b11455327f33a9e..5d5834e7f6009e0d7e8890fbd82acfa6087b88f5 100644 (file)
 **
 ****************************************************************************/
 
-#ifndef SQUEEZELABEL_H
-#define SQUEEZELABEL_H
+#ifndef QTR_SQUEEZE_LABEL_H
+#define QTR_SQUEEZE_LABEL_H
 
 #include <QLabel>
 
-class SqueezeLabel : public QLabel
+class SqueezeLabel: public QLabel
 {
     Q_OBJECT
 
@@ -56,5 +56,4 @@ class SqueezeLabel : public QLabel
     void paintEvent (QPaintEvent* paintEvent);
 };
 
-#endif // SQUEEZELABEL_H
-
+#endif // QTR_SQUEEZE_LABEL_H
similarity index 92%
rename from qt/stats-dialog.cc
rename to qt/StatsDialog.cc
index 8463a55af0c71bab0c7a73d8920e46786e267a00..9e6e34e2715f2e3e661fb8448b255c834f98e5ed 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -9,10 +9,10 @@
 
 #include <QTimer>
 
-#include "column-resizer.h"
-#include "formatter.h"
-#include "session.h"
-#include "stats-dialog.h"
+#include "ColumnResizer.h"
+#include "Formatter.h"
+#include "Session.h"
+#include "StatsDialog.h"
 
 enum
 {
similarity index 74%
rename from qt/stats-dialog.h
rename to qt/StatsDialog.h
index 1d23836df931e55fcb38705e7050f99668f6ed17..9032e4624ed92469d344c98737447989771014be 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,12 +7,12 @@
  * $Id$
  */
 
-#ifndef STATS_DIALOG_H
-#define STATS_DIALOG_H
+#ifndef QTR_STATS_DIALOG_H
+#define QTR_STATS_DIALOG_H
 
 #include <QDialog>
 
-#include "ui_stats-dialog.h"
+#include "ui_StatsDialog.h"
 
 class Session;
 class QTimer;
@@ -35,4 +35,4 @@ class StatsDialog: public QDialog
     Ui::StatsDialog ui;
 };
 
-#endif
+#endif // QTR_STATS_DIALOG_H
similarity index 100%
rename from qt/stats-dialog.ui
rename to qt/StatsDialog.ui
similarity index 97%
rename from qt/torrent.cc
rename to qt/Torrent.cc
index bc3463c6956eebdef1b5d7fef39742c55d47c94e..b838b5b786f0b2c8bdda139525ac2e94287041f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/utils.h> /* tr_new0, tr_strdup */
 #include <libtransmission/variant.h>
 
-#include "app.h"
-#include "prefs.h"
-#include "torrent.h"
-#include "utils.h"
-
+#include "Application.h"
+#include "Prefs.h"
+#include "Torrent.h"
+#include "Utils.h"
 
 Torrent::Torrent (const Prefs& prefs, int id):
   magnetTorrent (false),
@@ -87,7 +86,7 @@ Torrent::myProperties[] =
   { FAILED_EVER, TR_KEY_corruptEver, QVariant::ULongLong, STAT_EXTRA },
   { TRACKERS, TR_KEY_trackers, QVariant::StringList, STAT },
   { HOSTS, TR_KEY_NONE, QVariant::StringList, DERIVED },
-  { TRACKERSTATS, TR_KEY_trackerStats, TrTypes::TrackerStatsList, STAT_EXTRA },
+  { TRACKERSTATS, TR_KEY_trackerStats, CustomVariantType::TrackerStatsList, STAT_EXTRA },
   { MIME_ICON, TR_KEY_NONE, QVariant::Icon, DERIVED },
   { SEED_RATIO_LIMIT, TR_KEY_seedRatioLimit, QVariant::Double, STAT },
   { SEED_RATIO_MODE, TR_KEY_seedRatioMode, QVariant::Int, STAT },
@@ -106,7 +105,7 @@ Torrent::myProperties[] =
   { COMMENT, TR_KEY_comment, QVariant::String, INFO },
   { CREATOR, TR_KEY_creator, QVariant::String, INFO },
   { MANUAL_ANNOUNCE_TIME, TR_KEY_manualAnnounceTime, QVariant::DateTime, STAT_EXTRA },
-  { PEERS, TR_KEY_peers, TrTypes::PeerList, STAT_EXTRA },
+  { PEERS, TR_KEY_peers, CustomVariantType::PeerList, STAT_EXTRA },
   { BANDWIDTH_PRIORITY, TR_KEY_bandwidthPriority, QVariant::Int, STAT_EXTRA },
   { QUEUE_POSITION, TR_KEY_queuePosition, QVariant::Int, STAT },
 };
@@ -357,7 +356,7 @@ Torrent::getSeedRatio (double& ratio) const
 bool
 Torrent::hasFileSubstring (const QString& substr) const
 {
-  for (const TrFile& file: myFiles)
+  for (const TorrentFile& file: myFiles)
     if (file.filename.contains (substr, Qt::CaseInsensitive))
       return true;
 
@@ -531,7 +530,7 @@ Torrent::update (tr_variant * d)
             }
 
           case QVariant::StringList:
-          case TrTypes::PeerList:
+          case CustomVariantType::PeerList:
             // handled below
             break;
 
@@ -555,7 +554,7 @@ Torrent::update (tr_variant * d)
 
       while ((child = tr_variantListChild (files, i)))
         {
-          TrFile file;
+          TorrentFile file;
           size_t len;
           file.index = i++;
 
@@ -580,7 +579,7 @@ Torrent::update (tr_variant * d)
           int64_t intVal;
           bool boolVal;
           tr_variant * child = tr_variantListChild (files, i);
-          TrFile& file (myFiles[i]);
+          TorrentFile& file (myFiles[i]);
 
           if (tr_variantDictFindInt (child, TR_KEY_bytesCompleted, &intVal))
             file.have = intVal;
@@ -615,7 +614,7 @@ Torrent::update (tr_variant * d)
           QStringList hosts;
           for (const QString& tracker: list)
             {
-              const QString host = Favicons::getHost (QUrl (tracker));
+              const QString host = FaviconCache::getHost (QUrl (tracker));
               if (!host.isEmpty())
                 hosts.append (host);
             }
similarity index 97%
rename from qt/torrent.h
rename to qt/Torrent.h
index 6e346e22915feef97b7d97c5f3142119429f1d8b..f7707594cefe60ddd0476dd66f5b28ddb486261a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/transmission.h>
 #include <libtransmission/quark.h>
 
-#include "speed.h"
-#include "types.h"
+#include "CustomVariantType.h"
+#include "Speed.h"
 
 #ifdef ERROR
  #undef ERROR
 #endif
 
+class Prefs;
+class QPixmap;
+class QStyle;
+
 extern "C"
 {
   struct tr_variant;
 }
 
-class Prefs;
-class QPixmap;
-class QStyle;
-
 struct Peer
 {
   bool clientIsChoked;
@@ -96,9 +96,9 @@ typedef QList<TrackerStat> TrackerStatsList;
 Q_DECLARE_METATYPE(TrackerStat)
 Q_DECLARE_METATYPE(TrackerStatsList)
 
-struct TrFile
+struct TorrentFile
 {
-  TrFile(): wanted(true), index(-1), priority(0), size(0), have(0) {}
+  TorrentFile(): wanted(true), index(-1), priority(0), size(0), have(0) {}
 
   bool wanted;
   int index;
@@ -108,8 +108,8 @@ struct TrFile
   uint64_t have;
 };
 
-typedef QList<TrFile> FileList;
-Q_DECLARE_METATYPE(TrFile)
+typedef QList<TorrentFile> FileList;
+Q_DECLARE_METATYPE(TorrentFile)
 Q_DECLARE_METATYPE(FileList)
 
 
@@ -347,5 +347,4 @@ class Torrent: public QObject
 
 Q_DECLARE_METATYPE(const Torrent*)
 
-#endif
-
+#endif // QTR_TORRENT_H
similarity index 99%
rename from qt/torrent-delegate.cc
rename to qt/TorrentDelegate.cc
index b29cc22d0ac86edb362e90e4bea49658915d3577..fd8010cb64e76d558e24c0bb5f62035798af210b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <QPixmapCache>
 #include <QStyleOptionProgressBar>
 
-#include "formatter.h"
-#include "torrent.h"
-#include "torrent-delegate.h"
-#include "torrent-model.h"
-#include "utils.h"
+#include "Formatter.h"
+#include "Torrent.h"
+#include "TorrentDelegate.h"
+#include "TorrentModel.h"
+#include "Utils.h"
 
 enum
 {
similarity index 94%
rename from qt/torrent-delegate.h
rename to qt/TorrentDelegate.h
index 28d8c19ef37239f5ea40c4c4bf446db0d0b42126..fd1525796d6241993be976f3cbc98b9b80ce9f60 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -50,4 +50,4 @@ class TorrentDelegate: public QStyledItemDelegate
     void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
 };
 
-#endif
+#endif // QTR_TORRENT_DELEGATE_H
similarity index 98%
rename from qt/torrent-delegate-min.cc
rename to qt/TorrentDelegateMin.cc
index 2c67ea10fd6e1dfae81db94276c04f02a52467d6..1e9426c1fa517e7599b55b6d9a5d4332e2da1d62 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/transmission.h>
 #include <libtransmission/utils.h>
 
-#include "torrent.h"
-#include "torrent-delegate-min.h"
-#include "torrent-model.h"
-#include "utils.h"
+#include "Torrent.h"
+#include "TorrentDelegateMin.h"
+#include "TorrentModel.h"
+#include "Utils.h"
 
 enum
 {
similarity index 85%
rename from qt/torrent-delegate-min.h
rename to qt/TorrentDelegateMin.h
index 0ee40ff48c11865aa9881ef3ccea55c89cf67dc5..7f3d247fd9508e22465bfb914bae4118194597e9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -11,7 +11,8 @@
 #define QTR_TORRENT_DELEGATE_MIN_H
 
 #include <QSize>
-#include "torrent-delegate.h"
+
+#include "TorrentDelegate.h"
 
 class QStyleOptionViewItem;
 class QStyle;
@@ -31,4 +32,4 @@ class TorrentDelegateMin: public TorrentDelegate
     virtual ~TorrentDelegateMin () {}
 };
 
-#endif
+#endif // QTR_TORRENT_DELEGATE_MIN_H
similarity index 96%
rename from qt/torrent-filter.cc
rename to qt/TorrentFilter.cc
index 53c56855420543ad79a074b1d26a0560cafb7a6b..019b3e376a75e1c7fe041f5b9550b7234432bc4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <algorithm>
 #include <iostream>
 
-#include "filters.h"
-#include "hig.h"
-#include "prefs.h"
-#include "torrent.h"
-#include "torrent-filter.h"
-#include "torrent-model.h"
-#include "utils.h"
+#include "Filters.h"
+#include "Prefs.h"
+#include "Torrent.h"
+#include "TorrentFilter.h"
+#include "TorrentModel.h"
+#include "Utils.h"
 
 TorrentFilter::TorrentFilter (const Prefs& prefs):
   myPrefs (prefs)
similarity index 93%
rename from qt/torrent-filter.h
rename to qt/TorrentFilter.h
index a421a9b174e2d383a2c53a80d169432b79c6fd5b..7b29d85fd78dfc5fbdae701d3eca2f8f0169dd4f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -51,4 +51,4 @@ class TorrentFilter: public QSortFilterProxyModel
     const Prefs& myPrefs;
 };
 
-#endif
+#endif // QTR_TORRENT_FILTER_H
similarity index 98%
rename from qt/torrent-model.cc
rename to qt/TorrentModel.cc
index 1f5f9a9310e641d7a3dfa20e7b47b49da2fc2e6f..f679ec654ca798dda9d6228fbc3ad11f34eb75b9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -13,8 +13,8 @@
 #include <libtransmission/transmission.h>
 #include <libtransmission/variant.h>
 
-#include "torrent-delegate.h"
-#include "torrent-model.h"
+#include "TorrentDelegate.h"
+#include "TorrentModel.h"
 
 void
 TorrentModel::clear ()
similarity index 93%
rename from qt/torrent-model.h
rename to qt/TorrentModel.h
index 6a317480b30cf8ed8e3375c1187bba9317a36ff4..32493adf5511a57cc9d643dcd8c29abd463e0356 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -15,8 +15,8 @@
 #include <QSet>
 #include <QVector>
 
-#include "speed.h"
-#include "torrent.h"
+#include "Speed.h"
+#include "Torrent.h"
 
 class Prefs;
 
@@ -75,4 +75,4 @@ class TorrentModel: public QAbstractListModel
     virtual ~TorrentModel ();
 };
 
-#endif
+#endif // QTR_TORRENT_MODEL_H
similarity index 97%
rename from qt/tracker-delegate.cc
rename to qt/TrackerDelegate.cc
index 575e28778d063e7d79d8de112f8fe5c5356e65b6..b9edc42eb8d747dbeeb95359564fc0eb4db53df7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
 #include <libtransmission/transmission.h>
 #include <libtransmission/utils.h>
 
-#include "favicon.h"
-#include "formatter.h"
-#include "torrent.h"
-#include "tracker-delegate.h"
-#include "tracker-model.h"
-#include "utils.h"
+#include "FaviconCache.h"
+#include "Formatter.h"
+#include "Torrent.h"
+#include "TrackerDelegate.h"
+#include "TrackerModel.h"
+#include "Utils.h"
 
 /***
 ****
@@ -62,7 +62,7 @@ namespace
                          const QPoint& topLeft, int width)
   {
     const QStyle * style (qApp->style ());
-    const QSize iconSize = Favicons::getIconSize ();
+    const QSize iconSize = FaviconCache::getIconSize ();
 
     QRect baseRect (topLeft, QSize (width, 0));
 
similarity index 92%
rename from qt/tracker-delegate.h
rename to qt/TrackerDelegate.h
index 3532cfa379af00ae78a2dc1bdb107b2c9bcdfa65..7c0c4693d1e3036f27874ba287d02a6fafead2ef 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -16,6 +16,7 @@
 class QPainter;
 class QStyleOptionViewItem;
 class QStyle;
+
 class Session;
 struct TrackerInfo;
 
@@ -44,4 +45,4 @@ class TrackerDelegate: public QItemDelegate
     bool myShowMore;
 };
 
-#endif
+#endif // QTR_TRACKER_DELEGATE_H
similarity index 97%
rename from qt/tracker-model.cc
rename to qt/TrackerModel.cc
index 95d5b7fcdaf9426925dfaeb11735b5f4a40a370f..7d5c918d80eca7b5b44718bee8b9afc1883b4031 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -11,8 +11,8 @@
 
 #include <QUrl>
 
-#include "app.h" // MyApp
-#include "tracker-model.h"
+#include "Application.h" // Application
+#include "TrackerModel.h"
 
 int
 TrackerModel::rowCount (const QModelIndex& parent) const
similarity index 87%
rename from qt/tracker-model.h
rename to qt/TrackerModel.h
index a92ea915fcf551fa6f01b051bd7afeab94c70024..3be6bee2462ded7a5a09a14b842d88ecf006facc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -14,8 +14,8 @@
 #include <QSet>
 #include <QVector>
 
-#include "torrent.h"
-#include "torrent-model.h"
+#include "Torrent.h"
+#include "TorrentModel.h"
 
 struct TrackerInfo
 {
@@ -45,4 +45,4 @@ class TrackerModel: public QAbstractListModel
     virtual ~TrackerModel () {}
 };
 
-#endif
+#endif // QTR_TRACKER_MODEL_H
similarity index 86%
rename from qt/tracker-model-filter.cc
rename to qt/TrackerModelFilter.cc
index 7557ff04a881d891dfed1077de983dc5a678af54..b0621c835c13f6fb58376fe722b465421603ec64 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,8 +7,8 @@
  * $Id$
  */
 
-#include "tracker-model.h"
-#include "tracker-model-filter.h"
+#include "TrackerModel.h"
+#include "TrackerModelFilter.h"
 
 TrackerModelFilter::TrackerModelFilter (QObject * parent):
   QSortFilterProxyModel (parent),
similarity index 87%
rename from qt/tracker-model-filter.h
rename to qt/TrackerModelFilter.h
index 825633870db0ae19abe04746acb1057e2ee70e40..0821062fdb09dd517bc6777e60c69081be480252 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2010-2014 Mnemosyne LLC
+ * This file Copyright (C) 2010-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -30,4 +30,4 @@ class TrackerModelFilter : public QSortFilterProxyModel
     bool myShowBackups;
 };
 
-#endif
+#endif // QTR_TRACKER_MODEL_FILTER_H
similarity index 96%
rename from qt/utils.cc
rename to qt/Utils.cc
index 99c1569881ece155ab533253590397f7cd84af50..582e80e74ecc9712eb52045f6f1b785226ae1943 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -13,6 +13,7 @@
 #endif
 
 #include <QApplication>
+#include <QColor>
 #include <QDataStream>
 #include <QFile>
 #include <QFileDialog>
@@ -31,7 +32,7 @@
 #include <libtransmission/transmission.h>
 #include <libtransmission/utils.h> // tr_formatter
 
-#include "utils.h"
+#include "Utils.h"
 
 /***
 ****
@@ -201,3 +202,11 @@ Utils::removeTrailingDirSeparator (const QString& path)
   const QFileInfo pathInfo (path);
   return pathInfo.fileName ().isEmpty () ? pathInfo.absolutePath () : pathInfo.absoluteFilePath ();
 }
+
+QColor
+Utils::getFadedColor (const QColor& color)
+{
+  QColor fadedColor (color);
+  fadedColor.setAlpha (128);
+  return fadedColor;
+}
similarity index 87%
rename from qt/utils.h
rename to qt/Utils.h
index 0b64a354919509d3caa8f4dfec7bc4264a2e8c7e..ce2c63c976ef8ca24f9e1d0dd8241cdbc4f385ab 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,17 +7,19 @@
  * $Id$
  */
 
-#ifndef QTR_UTILS
-#define QTR_UTILS
+#ifndef QTR_UTILS_H
+#define QTR_UTILS_H
+
+#include <cctype> // isxdigit()
 
 #include <QIcon>
 #include <QObject>
 #include <QRect>
 #include <QString>
 
-#include <cctype> // isxdigit()
+#include "Speed.h"
 
-#include "speed.h"
+class QColor;
 
 class Utils: public QObject
 {
@@ -41,6 +43,8 @@ class Utils: public QObject
       rect.adjust (dx1, 0, -dx2, 0);
     }
 
+    static QColor getFadedColor (const QColor& color);
+
     ///
     /// URLs
     ///
@@ -67,4 +71,4 @@ class Utils: public QObject
     }
 };
 
-#endif
+#endif // QTR_UTILS_H
similarity index 96%
rename from qt/watchdir.cc
rename to qt/WatchDir.cc
index 9da7d9ceeade9448e8d267f5f4314fa84823da2e..c7a48d6d1d64189ea1d6eca3aad7a2153efefa52 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -15,9 +15,9 @@
 
 #include <libtransmission/transmission.h>
 
-#include "prefs.h"
-#include "torrent-model.h"
-#include "watchdir.h"
+#include "Prefs.h"
+#include "TorrentModel.h"
+#include "WatchDir.h"
 
 /***
 ****
similarity index 86%
rename from qt/watchdir.h
rename to qt/WatchDir.h
index 81dcc8afb142f0c32f76a58f6af5f30743624d9d..d94ce30ccb068e7b8f2acf0c7cc7668b3994f380 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
+ * This file Copyright (C) 2009-2015 Mnemosyne LLC
  *
  * It may be used under the GNU GPL versions 2 or 3
  * or any future license endorsed by Mnemosyne LLC.
@@ -7,16 +7,17 @@
  * $Id$
  */
 
-#ifndef QTR_WATCHDIR_H
-#define QTR_WATCHDIR_H
+#ifndef QTR_WATCH_DIR_H
+#define QTR_WATCH_DIR_H
 
 #include <QObject>
 #include <QSet>
 #include <QString>
 
-class TorrentModel;
 class QFileSystemWatcher;
 
+class TorrentModel;
+
 class WatchDir: public QObject
 {
     Q_OBJECT
@@ -48,4 +49,4 @@ class WatchDir: public QObject
     QFileSystemWatcher * myWatcher;
 };
 
-#endif
+#endif // QTR_WATCH_DIR_H
diff --git a/qt/file-tree.cc b/qt/file-tree.cc
deleted file mode 100644 (file)
index 74d93cc..0000000
+++ /dev/null
@@ -1,1025 +0,0 @@
-/*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
- *
- * It may be used under the GNU GPL versions 2 or 3
- * or any future license endorsed by Mnemosyne LLC.
- *
- * $Id$
- */
-
-#include <algorithm>
-#include <cassert>
-
-#include <QApplication>
-#include <QHeaderView>
-#include <QPainter>
-#include <QResizeEvent>
-#include <QSortFilterProxyModel>
-#include <QStringList>
-
-#include <libtransmission/transmission.h> // priorities
-
-#include "file-tree.h"
-#include "formatter.h"
-#include "hig.h"
-#include "torrent.h" // FileList
-#include "utils.h" // mime icons
-
-enum
-{
-  COL_NAME,
-  FIRST_VISIBLE_COLUMN = COL_NAME,
-  COL_SIZE,
-  COL_PROGRESS,
-  COL_WANTED,
-  COL_PRIORITY,
-  LAST_VISIBLE_COLUMN = COL_PRIORITY,
-
-  COL_FILE_INDEX,
-  NUM_COLUMNS
-};
-
-/****
-*****
-****/
-
-const QHash<QString,int>&
-FileTreeItem::getMyChildRows ()
-{
-  const size_t n = childCount();
-
-  // ensure that all the rows are hashed
-  while (myFirstUnhashedRow < n)
-    {
-      myChildRows.insert (myChildren[myFirstUnhashedRow]->name(),
-                          myFirstUnhashedRow);
-      ++myFirstUnhashedRow;
-    }
-
-  return myChildRows;
-}
-
-
-FileTreeItem::~FileTreeItem ()
-{
-  assert(myChildren.isEmpty());
-
-  if (myParent != 0)
-    {
-      const int pos = row();
-      assert ((pos>=0) && "couldn't find child in parent's lookup");
-      myParent->myChildren.removeAt(pos);
-      myParent->myChildRows.remove(name());
-      myParent->myFirstUnhashedRow = pos;
-    }
-}
-
-void
-FileTreeItem::appendChild (FileTreeItem * child)
-{
-  const size_t n = childCount();
-  child->myParent = this;
-  myChildren.append (child);
-  myFirstUnhashedRow = n;
-}
-
-FileTreeItem *
-FileTreeItem::child (const QString& filename)
-{
-  FileTreeItem * item(0);
-
-  const int row = getMyChildRows().value (filename, -1);
-  if (row != -1)
-    {
-      item = child (row);
-      assert (filename == item->name());
-    }
-
-  return item;
-}
-
-int
-FileTreeItem::row () const
-{
-  int i(-1);
-
-  if(myParent)
-    {
-      i = myParent->getMyChildRows().value (name(), -1);
-      assert (this == myParent->myChildren[i]);
-    }
-
-  return i;
-}
-
-QVariant
-FileTreeItem::data (int column, int role) const
-{
-  QVariant value;
-
-  if (column == COL_FILE_INDEX)
-    {
-      value.setValue (myFileIndex);
-    }
-  else if (role == Qt::EditRole)
-    {
-      if (column == 0)
-        value.setValue (name());
-    }
-  else if ((role == Qt::TextAlignmentRole) && column == COL_SIZE)
-    {
-      value = Qt::AlignRight + Qt::AlignVCenter;
-    }
-  else if (role == Qt::DisplayRole)
-    {
-      switch(column)
-       {
-         case COL_NAME:
-           value.setValue (name());
-           break;
-
-         case COL_SIZE:
-           value.setValue (sizeString() + QLatin1String ("  "));
-           break;
-
-         case COL_PROGRESS:
-           value.setValue (progress());
-           break;
-
-         case COL_WANTED:
-           value.setValue (isSubtreeWanted());
-           break;
-
-         case COL_PRIORITY:
-           value.setValue (priorityString());
-           break;
-        }
-    }
-  else if (role == Qt::DecorationRole && column == COL_NAME)
-    {
-      if (childCount () > 0)
-        value = qApp->style ()->standardIcon (QStyle::SP_DirOpenIcon);
-      else
-        value = Utils::guessMimeIcon (name ());
-    }
-
-  return value;
-}
-
-void
-FileTreeItem::getSubtreeWantedSize (uint64_t& have, uint64_t& total) const
-{
-  if (myIsWanted)
-    {
-      have += myHaveSize;
-      total += myTotalSize;
-    }
-
-  for (const FileTreeItem * const i: myChildren)
-    i->getSubtreeWantedSize(have, total);
-}
-
-double
-FileTreeItem::progress () const
-{
-  double d(0);
-  uint64_t have(0), total(0);
-
-  getSubtreeWantedSize (have, total);
-  if (total)
-    d = have / (double)total;
-
-  return d;
-}
-
-QString
-FileTreeItem::sizeString () const
-{
-  QString str;
-
-  if (myChildren.isEmpty())
-    {
-      str = Formatter::sizeToString (myTotalSize);
-    }
-  else
-    {
-      uint64_t have = 0;
-      uint64_t total = 0;
-      getSubtreeWantedSize (have, total);
-      str = Formatter::sizeToString (total);
-    }
-
-  return str;
-}
-
-std::pair<int,int>
-FileTreeItem::update (const QString& name,
-                      bool           wanted,
-                      int            priority,
-                      uint64_t       haveSize,
-                      bool           updateFields)
-{
-  int changed_count = 0;
-  int changed_columns[4];
-
-  if (myName != name)
-    {
-      if (myParent)
-        myParent->myFirstUnhashedRow = row();
-
-      myName = name;
-      changed_columns[changed_count++] = COL_NAME;
-    }
-
-  if (fileIndex () != -1)
-    {
-      if (myHaveSize != haveSize)
-        {
-          myHaveSize = haveSize;
-          changed_columns[changed_count++] = COL_PROGRESS;
-        }
-
-      if (updateFields)
-        {
-          if (myIsWanted != wanted)
-            {
-              myIsWanted = wanted;
-              changed_columns[changed_count++] = COL_WANTED;
-            }
-
-          if (myPriority != priority)
-            {
-              myPriority = priority;
-              changed_columns[changed_count++] = COL_PRIORITY;
-            }
-        }
-    }
-
-  std::pair<int,int> changed (-1, -1);
-  if (changed_count > 0)
-    {
-      std::sort (changed_columns, changed_columns+changed_count);
-      changed.first = changed_columns[0];
-      changed.second = changed_columns[changed_count-1];
-    }
-  return changed;
-}
-
-QString
-FileTreeItem::priorityString () const
-{
-  const int i = priority();
-
-  switch (i)
-    {
-      case LOW:    return tr("Low");
-      case HIGH:   return tr("High");
-      case NORMAL: return tr("Normal");
-      default:     return tr("Mixed");
-    }
-}
-
-int
-FileTreeItem::priority () const
-{
-  int i(0);
-
-  if (myChildren.isEmpty())
-    {
-      switch (myPriority)
-        {
-          case TR_PRI_LOW:
-            i |= LOW;
-            break;
-
-          case TR_PRI_HIGH:
-            i |= HIGH;
-            break;
-
-          default:
-            i |= NORMAL;
-            break;
-        }
-    }
-
-  for (const FileTreeItem * const child: myChildren)
-    i |= child->priority();
-
-  return i;
-}
-
-void
-FileTreeItem::setSubtreePriority (int i, QSet<int>& ids)
-{
-  if (myPriority != i)
-    {
-      myPriority = i;
-
-      if (myFileIndex >= 0)
-        ids.insert (myFileIndex);
-    }
-
-  for (FileTreeItem * const child: myChildren)
-    child->setSubtreePriority (i, ids);
-}
-
-void
-FileTreeItem::twiddlePriority (QSet<int>& ids, int& p)
-{
-  const int old(priority());
-
-  if (old & LOW)
-    p = TR_PRI_NORMAL;
-  else if (old & NORMAL)
-    p = TR_PRI_HIGH;
-  else
-    p = TR_PRI_LOW;
-
-  setSubtreePriority (p, ids);
-}
-
-int
-FileTreeItem::isSubtreeWanted () const
-{
-  if(myChildren.isEmpty())
-    return myIsWanted ? Qt::Checked : Qt::Unchecked;
-
-  int wanted(-1);
-  for (const FileTreeItem * const child: myChildren)
-    {
-      const int childWanted = child->isSubtreeWanted();
-
-      if (wanted == -1)
-        wanted = childWanted;
-
-      if (wanted != childWanted)
-        wanted = Qt::PartiallyChecked;
-
-      if (wanted == Qt::PartiallyChecked)
-        return wanted;
-    }
-
-  return wanted;
-}
-
-void
-FileTreeItem::setSubtreeWanted (bool b, QSet<int>& ids)
-{
-  if (myIsWanted != b)
-    {
-      myIsWanted = b;
-
-      if (myFileIndex >= 0)
-        ids.insert(myFileIndex);
-    }
-
-  for (FileTreeItem * const child: myChildren)
-    child->setSubtreeWanted (b, ids);
-}
-
-void
-FileTreeItem::twiddleWanted (QSet<int>& ids, bool& wanted)
-{
-  wanted = isSubtreeWanted() != Qt::Checked;
-  setSubtreeWanted (wanted, ids);
-}
-
-QString
-FileTreeItem::path () const
-{
-  QString itemPath;
-  const FileTreeItem * item = this;
-
-  while (item != NULL && !item->name().isEmpty())
-    {
-      if (itemPath.isEmpty())
-        itemPath = item->name();
-      else
-        itemPath = item->name() + QLatin1Char ('/') + itemPath;
-      item = item->parent ();
-    }
-
-  return itemPath;
-}
-
-bool
-FileTreeItem::isComplete () const
-{
-  return myHaveSize == totalSize ();
-}
-
-/***
-****
-****
-***/
-
-FileTreeModel::FileTreeModel (QObject * parent, bool isEditable):
-  QAbstractItemModel(parent),
-  myRootItem (new FileTreeItem),
-  myIndexCache (),
-  myIsEditable (isEditable)
-{
-}
-
-FileTreeModel::~FileTreeModel()
-{
-  clear();
-
-  delete myRootItem;
-}
-
-void
-FileTreeModel::setEditable (bool editable)
-{
-  myIsEditable = editable;
-}
-
-FileTreeItem *
-FileTreeModel::itemFromIndex (const QModelIndex& index) const
-{
-  return static_cast<FileTreeItem*>(index.internalPointer());
-}
-
-QVariant
-FileTreeModel::data (const QModelIndex &index, int role) const
-{
-  QVariant value;
-
-  if (index.isValid())
-    value = itemFromIndex(index)->data (index.column(), role);
-
-  return value;
-}
-
-Qt::ItemFlags
-FileTreeModel::flags (const QModelIndex& index) const
-{
-  int i(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
-  if(myIsEditable && (index.column() == COL_NAME))
-    i |= Qt::ItemIsEditable;
-
-  if(index.column() == COL_WANTED)
-    i |= Qt::ItemIsUserCheckable | Qt::ItemIsTristate;
-
-  return (Qt::ItemFlags)i;
-}
-
-bool
-FileTreeModel::setData (const QModelIndex& index, const QVariant& newname, int role)
-{
-  if (role == Qt::EditRole)
-    {
-      FileTreeItem * item = itemFromIndex (index);
-
-      emit pathEdited (item->path (), newname.toString ());
-    }
-
-  return false; // don't update the view until the session confirms the change
-}
-
-QVariant
-FileTreeModel::headerData (int column, Qt::Orientation orientation, int role) const
-{
-  QVariant data;
-
-  if (orientation==Qt::Horizontal && role==Qt::DisplayRole)
-    {
-      switch (column)
-        {
-          case COL_NAME:
-            data.setValue (tr("File"));
-            break;
-
-          case COL_SIZE:
-            data.setValue (tr("Size"));
-            break;
-
-          case COL_PROGRESS:
-            data.setValue (tr("Progress"));
-            break;
-
-          case COL_WANTED:
-            data.setValue (tr("Download"));
-            break;
-
-          case COL_PRIORITY:
-            data.setValue (tr("Priority"));
-            break;
-
-          default:
-            break;
-        }
-    }
-
-  return data;
-}
-
-QModelIndex
-FileTreeModel::index (int row, int column, const QModelIndex& parent) const
-{
-  QModelIndex i;
-
-  if (hasIndex (row, column, parent))
-    {
-      FileTreeItem * parentItem;
-
-      if (!parent.isValid ())
-        parentItem = myRootItem;
-      else
-        parentItem = itemFromIndex (parent);
-
-      FileTreeItem * childItem = parentItem->child (row);
-
-      if (childItem)
-        i = createIndex (row, column, childItem);
-    }
-
-  return i;
-}
-
-QModelIndex
-FileTreeModel::parent (const QModelIndex& child) const
-{
-  return parent (child, 0); // QAbstractItemModel::parent() wants col 0
-}
-
-QModelIndex
-FileTreeModel::parent (const QModelIndex& child, int column) const
-{
-  QModelIndex parent;
-
-  if (child.isValid())
-    parent = indexOf (itemFromIndex(child)->parent(), column);
-
-  return parent;
-}
-
-int
-FileTreeModel::rowCount (const QModelIndex& parent) const
-{
-  FileTreeItem * parentItem;
-
-  if (parent.isValid())
-    parentItem = itemFromIndex (parent);
-  else
-    parentItem = myRootItem;
-
-  return parentItem->childCount();
-}
-
-int
-FileTreeModel::columnCount (const QModelIndex& parent) const
-{
-  Q_UNUSED(parent);
-
-  return NUM_COLUMNS;
-}
-
-QModelIndex
-FileTreeModel::indexOf (FileTreeItem * item, int column) const
-{
-  if (!item || item==myRootItem)
-    return QModelIndex();
-
-  return createIndex(item->row(), column, item);
-}
-
-void
-FileTreeModel::clearSubtree (const QModelIndex& top)
-{
-  size_t i = rowCount (top);
-
-  while (i > 0)
-    clearSubtree(index(--i, 0, top));
-
-  FileTreeItem * const item = itemFromIndex (top);
-  if (item == 0)
-    return;
-
-  if (item->fileIndex () != -1)
-    myIndexCache.remove (item->fileIndex ());
-
-  delete item;
-}
-
-void
-FileTreeModel::clear ()
-{
-  beginResetModel ();
-  clearSubtree (QModelIndex());
-  endResetModel ();
-
-  assert (myIndexCache.isEmpty ());
-}
-
-FileTreeItem *
-FileTreeModel::findItemForFileIndex (int fileIndex) const
-{
-  return myIndexCache.value (fileIndex, 0);
-}
-
-void
-FileTreeModel::addFile (int                   fileIndex,
-                        const QString       & filename,
-                        bool                  wanted,
-                        int                   priority,
-                        uint64_t              totalSize,
-                        uint64_t              have,
-                        QList<QModelIndex>  & rowsAdded,
-                        bool                  updateFields)
-{
-  FileTreeItem * item;
-  QStringList tokens = filename.split (QChar::fromLatin1('/'));
-
-  item = findItemForFileIndex (fileIndex);
-
-  if (item) // this file is already in the tree, we've added this
-    {
-      QModelIndex indexWithChangedParents;
-      while (!tokens.isEmpty())
-        {
-          const QString token = tokens.takeLast();
-          const std::pair<int,int> changed = item->update (token, wanted, priority, have, updateFields);
-          if (changed.first >= 0)
-            {
-              dataChanged (indexOf (item, changed.first), indexOf (item, changed.second));
-              if (!indexWithChangedParents.isValid () &&
-                  changed.first <= COL_PRIORITY && changed.second >= COL_SIZE)
-                indexWithChangedParents = indexOf (item, 0);
-            }
-          item = item->parent();
-        }
-      assert (item == myRootItem);
-      if (indexWithChangedParents.isValid ())
-        parentsChanged (indexWithChangedParents, COL_SIZE, COL_PRIORITY);
-    }
-  else // we haven't build the FileTreeItems for these tokens yet
-    {
-      bool added = false;
-
-      item = myRootItem;
-      while (!tokens.isEmpty())
-        {
-          const QString token = tokens.takeFirst();
-          FileTreeItem * child(item->child(token));
-          if (!child)
-            {
-              added = true;
-              QModelIndex parentIndex (indexOf(item, 0));
-              const int n (item->childCount());
-
-              beginInsertRows (parentIndex, n, n);
-              if (tokens.isEmpty())
-                child = new FileTreeItem (token, fileIndex, totalSize);
-              else
-                child = new FileTreeItem (token);
-              item->appendChild (child);
-              endInsertRows ();
-
-              rowsAdded.append (indexOf(child, 0));
-            }
-          item = child;
-        }
-
-      if (item != myRootItem)
-        {
-          assert (item->fileIndex() == fileIndex);
-          assert (item->totalSize() == totalSize);
-
-          myIndexCache[fileIndex] = item;
-
-          const std::pair<int,int> changed = item->update (item->name(), wanted, priority, have, added || updateFields);
-          if (changed.first >= 0)
-            dataChanged (indexOf (item, changed.first), indexOf (item, changed.second));
-        }
-    }
-}
-
-void
-FileTreeModel::parentsChanged (const QModelIndex& index, int firstColumn, int lastColumn)
-{
-  assert (firstColumn <= lastColumn);
-
-  QModelIndex walk = index;
-
-  for (;;)
-    {
-      walk = parent (walk, firstColumn);
-      if (!walk.isValid ())
-        break;
-
-      dataChanged (walk, walk.sibling (walk.row (), lastColumn));
-    }
-}
-
-void
-FileTreeModel::subtreeChanged (const QModelIndex& index, int firstColumn, int lastColumn)
-{
-  assert (firstColumn <= lastColumn);
-
-  const int childCount = rowCount (index);
-  if (!childCount)
-    return;
-
-  // tell everyone that this tier changed
-  dataChanged (index.child (0, firstColumn), index.child (childCount - 1, lastColumn));
-
-  // walk the subtiers
-  for (int i=0; i<childCount; ++i)
-    subtreeChanged (index.child (i, 0), firstColumn, lastColumn);
-}
-
-void
-FileTreeModel::clicked (const QModelIndex& index)
-{
-  const int column (index.column());
-
-  if (!index.isValid())
-    return;
-
-  if (column == COL_WANTED)
-    {
-      bool want;
-      QSet<int> file_ids;
-      FileTreeItem * item;
-
-      item = itemFromIndex (index);
-      item->twiddleWanted (file_ids, want);
-      emit wantedChanged (file_ids, want);
-
-      dataChanged (index, index);
-      parentsChanged (index, COL_SIZE, COL_WANTED);
-      subtreeChanged (index, COL_WANTED, COL_WANTED);
-    }
-  else if (column == COL_PRIORITY)
-    {
-      int priority;
-      QSet<int> file_ids;
-      FileTreeItem * item;
-
-      item = itemFromIndex (index);
-      item->twiddlePriority (file_ids, priority);
-      emit priorityChanged (file_ids, priority);
-
-      dataChanged (index, index);
-      parentsChanged (index, column, column);
-      subtreeChanged (index, column, column);
-    }
-}
-
-void
-FileTreeModel::doubleClicked (const QModelIndex& index)
-{
-  if (!index.isValid())
-    return;
-
-  const int column (index.column());
-  if (column == COL_WANTED || column == COL_PRIORITY)
-    return;
-
-  FileTreeItem * item = itemFromIndex (index);
-
-  if (item->childCount () == 0 && item->isComplete ())
-    emit openRequested (item->path ());
-}
-
-/****
-*****
-****/
-
-QSize
-FileTreeDelegate::sizeHint(const QStyleOptionViewItem& item, const QModelIndex& index) const
-{
-  QSize size;
-
-  switch(index.column())
-    {
-      case COL_PROGRESS:
-      case COL_WANTED:
-        size = QSize(20, 1);
-        break;
-
-      default:
-        size = QItemDelegate::sizeHint (item, index);
-    }
-
-  size.rheight() += 8; // make the spacing a little nicer
-  return size;
-}
-
-void
-FileTreeDelegate::paint (QPainter                    * painter,
-                         const QStyleOptionViewItem  & option,
-                         const QModelIndex           & index) const
-{
-  const int column(index.column());
-
-  if ((column != COL_PROGRESS) && (column != COL_WANTED))
-    {
-      QItemDelegate::paint(painter, option, index);
-      return;
-    }
-
-  QStyle * style (qApp->style ());
-
-  painter->save();
-  QItemDelegate::drawBackground (painter, option, index);
-
-  if(column == COL_PROGRESS)
-    {
-      QStyleOptionProgressBar p;
-      p.state = option.state | QStyle::State_Small;
-      p.direction = qApp->layoutDirection();
-      p.rect = option.rect;
-      p.rect.setSize (QSize(option.rect.width()-2, option.rect.height()-8));
-      p.rect.moveCenter (option.rect.center());
-      p.fontMetrics = qApp->fontMetrics();
-      p.minimum = 0;
-      p.maximum = 100;
-      p.textAlignment = Qt::AlignCenter;
-      p.textVisible = true;
-      p.progress = (int)(100.0*index.data().toDouble());
-      p.text = QString::fromLatin1 ("%1%").arg (p.progress);
-      style->drawControl(QStyle::CE_ProgressBar, &p, painter);
-    }
-  else if(column == COL_WANTED)
-    {
-      QStyleOptionButton o;
-      o.state = option.state;
-      o.direction = qApp->layoutDirection();
-      o.rect.setSize (QSize(20, option.rect.height()));
-      o.rect.moveCenter (option.rect.center());
-      o.fontMetrics = qApp->fontMetrics();
-      switch (index.data().toInt())
-        {
-          case Qt::Unchecked: o.state |= QStyle::State_Off; break;
-          case Qt::Checked:   o.state |= QStyle::State_On; break;
-          default:            o.state |= QStyle::State_NoChange;break;
-        }
-      style->drawControl (QStyle::CE_CheckBox, &o, painter);
-    }
-
-  QItemDelegate::drawFocus (painter, option, option.rect);
-  painter->restore();
-}
-
-/****
-*****
-*****
-*****
-****/
-
-FileTreeView::FileTreeView (QWidget * parent, bool isEditable):
-  QTreeView (parent),
-  myModel (this, isEditable),
-  myProxy (new QSortFilterProxyModel()),
-  myDelegate (this)
-{
-  setSortingEnabled (true);
-  setAlternatingRowColors (true);
-  setSelectionBehavior (QAbstractItemView::SelectRows);
-  setSelectionMode (QAbstractItemView::ExtendedSelection);
-  myProxy->setSourceModel (&myModel);
-  setModel (myProxy);
-  setItemDelegate (&myDelegate);
-  setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
-  sortByColumn (COL_NAME, Qt::AscendingOrder);
-  installEventFilter (this);
-
-  for (int i=0; i<NUM_COLUMNS; ++i)
-    {
-      setColumnHidden (i, (i<FIRST_VISIBLE_COLUMN) || (LAST_VISIBLE_COLUMN<i));
-
-#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
-      header()->setResizeMode(i, QHeaderView::Interactive);
-#else
-      header()->setSectionResizeMode(i, QHeaderView::Interactive);
-#endif
-    }
-
-  connect (this, SIGNAL(clicked(QModelIndex)),
-           this, SLOT(onClicked(QModelIndex)));
-
-  connect (this, SIGNAL(doubleClicked(QModelIndex)),
-           this, SLOT(onDoubleClicked(QModelIndex)));
-
-  connect (&myModel, SIGNAL(priorityChanged(QSet<int>, int)),
-           this,     SIGNAL(priorityChanged(QSet<int>, int)));
-
-  connect (&myModel, SIGNAL(wantedChanged(QSet<int>, bool)),
-           this,     SIGNAL(wantedChanged(QSet<int>, bool)));
-
-  connect (&myModel, SIGNAL(pathEdited(QString, QString)),
-           this,     SIGNAL(pathEdited(QString, QString)));
-
-  connect (&myModel, SIGNAL (openRequested (QString)),
-           this,     SLOT (onOpenRequested (QString)),
-           Qt::QueuedConnection);
-}
-
-FileTreeView::~FileTreeView ()
-{
-  myProxy->deleteLater();
-}
-
-void
-FileTreeView::onClicked (const QModelIndex& proxyIndex)
-{
-  const QModelIndex modelIndex = myProxy->mapToSource (proxyIndex);
-  myModel.clicked (modelIndex);
-}
-
-void
-FileTreeView::onDoubleClicked (const QModelIndex& proxyIndex)
-{
-  const QModelIndex modelIndex = myProxy->mapToSource (proxyIndex);
-  myModel.doubleClicked (modelIndex);
-}
-
-void
-FileTreeView::onOpenRequested (const QString& path)
-{
-  if (state () == EditingState)
-    return;
-
-  emit openRequested (path);
-}
-
-bool
-FileTreeView::eventFilter (QObject * o, QEvent * event)
-{
-  // this is kind of a hack to get the last three columns be the
-  // right size, and to have the filename column use whatever
-  // space is left over...
-  if ((o == this) && (event->type() == QEvent::Resize))
-    {
-      QResizeEvent * r = static_cast<QResizeEvent*> (event);
-      int left = r->size().width();
-      const QFontMetrics fontMetrics(font());
-      for (int column=FIRST_VISIBLE_COLUMN; column<=LAST_VISIBLE_COLUMN; ++column)
-        {
-          if (column == COL_NAME)
-            continue;
-          if (isColumnHidden (column))
-            continue;
-
-          QString header;
-          if (column == COL_SIZE)
-            header = QLatin1String ("999.9 KiB");
-          else
-            header = myModel.headerData (column, Qt::Horizontal).toString();
-          header += QLatin1String ("    ");
-          const int width = fontMetrics.size (0, header).width();
-          setColumnWidth (column, width);
-            left -= width;
-        }
-      left -= 20; // not sure why this is necessary.  it works in different themes + font sizes though...
-      setColumnWidth(COL_NAME, std::max(left,0));
-    }
-
-  // handle using the keyboard to toggle the
-  // wanted/unwanted state or the file priority
-  else if (event->type () == QEvent::KeyPress && state () != EditingState)
-    {
-      switch (static_cast<QKeyEvent*> (event)->key ())
-        {
-        case Qt::Key_Space:
-          for (const QModelIndex& i: selectionModel ()->selectedRows (COL_WANTED))
-            clicked (i);
-          break;
-
-        case Qt::Key_Enter:
-        case Qt::Key_Return:
-          for (const QModelIndex& i: selectionModel ()->selectedRows (COL_PRIORITY))
-            clicked (i);
-          break;
-        }
-    }
-
-  return false;
-}
-
-void
-FileTreeView::update (const FileList& files, bool updateFields)
-{
-  for (const TrFile& file: files)
-    {
-      QList<QModelIndex> added;
-      myModel.addFile (file.index, file.filename, file.wanted, file.priority, file.size, file.have, added, updateFields);
-      for (const QModelIndex& i: added)
-        expand (myProxy->mapFromSource(i));
-    }
-}
-
-void
-FileTreeView::clear ()
-{
-  myModel.clear();
-}
-
-void
-FileTreeView::setEditable (bool editable)
-{
-  myModel.setEditable (editable);
-}
diff --git a/qt/file-tree.h b/qt/file-tree.h
deleted file mode 100644 (file)
index 5460b82..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
- *
- * It may be used under the GNU GPL versions 2 or 3
- * or any future license endorsed by Mnemosyne LLC.
- *
- * $Id$
- */
-
-#ifndef QTR_FILE_TREE
-#define QTR_FILE_TREE
-
-#include <QAbstractItemModel>
-#include <QObject>
-#include <QItemDelegate>
-#include <QList>
-#include <QHash>
-#include <QMap>
-#include <QSet>
-#include <QSize>
-#include <QString>
-#include <QTreeView>
-#include <QVariant>
-
-class QSortFilterProxyModel;
-class QStyle;
-
-#include "torrent.h" // FileList
-
-/****
-*****
-****/
-
-class FileTreeItem: public QObject
-{
-    Q_OBJECT
-
-    enum { LOW=(1<<0), NORMAL=(1<<1), HIGH=(1<<2) };
-
-  public:
-
-    virtual ~FileTreeItem();
-
-    FileTreeItem (const QString& name=QString (), int fileIndex=-1, uint64_t size=0):
-      myFileIndex (fileIndex),
-      myParent (0),
-      myName (name),
-      myPriority (0),
-      myIsWanted (0),
-      myHaveSize (0),
-      myTotalSize (size),
-      myFirstUnhashedRow (0) {}
-
-  public:
-    void appendChild (FileTreeItem *child);
-    FileTreeItem * child (const QString& filename);
-    FileTreeItem * child (int row) { return myChildren.at(row); }
-    int childCount () const { return myChildren.size(); }
-    FileTreeItem * parent () { return myParent; }
-    const FileTreeItem * parent () const { return myParent; }
-    int row () const;
-    const QString& name () const { return myName; }
-    QVariant data (int column, int role) const;
-    std::pair<int,int> update (const QString& name, bool want, int priority, uint64_t have, bool updateFields);
-    void twiddleWanted (QSet<int>& fileIds, bool&);
-    void twiddlePriority (QSet<int>& fileIds, int&);
-    int fileIndex () const { return myFileIndex; }
-    uint64_t totalSize () const { return myTotalSize; }
-    QString path () const;
-    bool isComplete () const;
-
-  private:
-    void setSubtreePriority (int priority, QSet<int>& fileIds);
-    void setSubtreeWanted (bool, QSet<int>& fileIds);
-    QString priorityString () const;
-    QString sizeString () const;
-    void getSubtreeWantedSize (uint64_t& have, uint64_t& total) const;
-    double progress () const;
-    int priority () const;
-    int isSubtreeWanted () const;
-
-    const int myFileIndex;
-    FileTreeItem * myParent;
-    QList<FileTreeItem*> myChildren;
-    QHash<QString,int> myChildRows;
-    const QHash<QString,int>& getMyChildRows();
-    QString myName;
-    int myPriority;
-    bool myIsWanted;
-    uint64_t myHaveSize;
-    const uint64_t myTotalSize;
-    size_t myFirstUnhashedRow;
-};
-
-class FileTreeModel: public QAbstractItemModel
-{
-    Q_OBJECT
-
-  public:
-    FileTreeModel (QObject *parent = 0, bool isEditable = true);
-    ~FileTreeModel ();
-
-    void setEditable (bool editable);
-
-  public:
-    QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const;
-    Qt::ItemFlags flags (const QModelIndex& index) const;
-    QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-    QModelIndex index (int row, int column, const QModelIndex& parent = QModelIndex()) const;
-    QModelIndex parent (const QModelIndex& child) const;
-    QModelIndex parent (const QModelIndex& child, int column) const;
-    int rowCount (const QModelIndex& parent = QModelIndex()) const;
-    int columnCount (const QModelIndex &parent = QModelIndex()) const;
-    virtual bool setData (const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
-
-  signals:
-    void priorityChanged (const QSet<int>& fileIndices, int);
-    void wantedChanged (const QSet<int>& fileIndices, bool);
-    void pathEdited (const QString& oldpath, const QString& newname);
-    void openRequested (const QString& path);
-
-  public:
-    void clear ();
-    void addFile (int index, const QString& filename,
-                  bool wanted, int priority,
-                  uint64_t size, uint64_t have,
-                  QList<QModelIndex>& rowsAdded,
-                  bool torrentChanged);
-
-  private:
-    void clearSubtree (const QModelIndex &);
-    QModelIndex indexOf (FileTreeItem *, int column) const;
-    void parentsChanged (const QModelIndex &, int firstColumn, int lastColumn);
-    void subtreeChanged (const QModelIndex &, int firstColumn, int lastColumn);
-    FileTreeItem * findItemForFileIndex (int fileIndex) const;
-    FileTreeItem * itemFromIndex (const QModelIndex&) const;
-
-  private:
-    FileTreeItem * myRootItem;
-    QMap<int, FileTreeItem *> myIndexCache;
-    bool myIsEditable;
-
-  public slots:
-    void clicked (const QModelIndex & index);
-    void doubleClicked (const QModelIndex & index);
-};
-
-class FileTreeDelegate: public QItemDelegate
-{
-    Q_OBJECT
-
-  public:
-    FileTreeDelegate (QObject * parent=0): QItemDelegate(parent) {}
-    virtual ~FileTreeDelegate() {}
-
-  public:
-    virtual QSize sizeHint (const QStyleOptionViewItem&, const QModelIndex&) const;
-    virtual void paint (QPainter*, const QStyleOptionViewItem&, const QModelIndex&) const;
-};
-
-class FileTreeView: public QTreeView
-{
-    Q_OBJECT
-
-  public:
-    FileTreeView (QWidget * parent=0, bool editable=true);
-    virtual ~FileTreeView ();
-    void clear ();
-    void update (const FileList& files, bool updateProperties=true);
-
-    void setEditable (bool editable);
-
-  signals:
-    void priorityChanged (const QSet<int>& fileIndices, int priority);
-    void wantedChanged (const QSet<int>& fileIndices, bool wanted);
-    void pathEdited (const QString& oldpath, const QString& newname);
-    void openRequested (const QString& path);
-
-  protected:
-    bool eventFilter (QObject *, QEvent *);
-
-  private:
-    FileTreeModel myModel;
-    QSortFilterProxyModel * myProxy;
-    FileTreeDelegate myDelegate;
-
-  public slots:
-    void onClicked (const QModelIndex& index);
-    void onDoubleClicked (const QModelIndex& index);
-    void onOpenRequested (const QString& path);
-};
-
-#endif
diff --git a/qt/filterbar.cc b/qt/filterbar.cc
deleted file mode 100644 (file)
index b73b258..0000000
+++ /dev/null
@@ -1,728 +0,0 @@
-/*
- * This file Copyright (C) 2012-2014 Mnemosyne LLC
- *
- * It may be used under the GNU GPL versions 2 or 3
- * or any future license endorsed by Mnemosyne LLC.
- *
- * $Id$
- */
-
-#include <QAbstractItemView>
-#include <QLabel>
-#include <QHBoxLayout>
-#include <QStylePainter>
-#include <QString>
-#include <QToolButton>
-#include <QtGui>
-
-#include "app.h"
-#include "favicon.h"
-#include "filters.h"
-#include "filterbar.h"
-#include "hig.h"
-#include "prefs.h"
-#include "torrent-filter.h"
-#include "torrent-model.h"
-#include "utils.h"
-
-/****
-*****
-*****  DELEGATE
-*****
-****/
-
-enum
-{
-  TorrentCountRole = Qt::UserRole + 1,
-  TorrentCountStringRole,
-  ActivityRole,
-  TrackerRole
-};
-
-namespace
-{
-  int getHSpacing (const QWidget * w)
-  {
-    return qMax (int (HIG::PAD_SMALL), w->style ()->pixelMetric (QStyle::PM_LayoutHorizontalSpacing, 0, w));
-  }
-
-  QColor
-  getFadedColor (const QColor& color)
-  {
-    QColor fadedColor (color);
-    fadedColor.setAlpha (128);
-    return fadedColor;
-  }
-}
-
-FilterBarComboBoxDelegate::FilterBarComboBoxDelegate (QObject * parent, QComboBox * combo):
-  QItemDelegate (parent),
-  myCombo (combo)
-{
-}
-
-bool
-FilterBarComboBoxDelegate::isSeparator (const QModelIndex& index)
-{
-  return index.data (Qt::AccessibleDescriptionRole).toString () == QLatin1String ("separator");
-}
-void
-FilterBarComboBoxDelegate::setSeparator (QAbstractItemModel * model, const QModelIndex& index)
-{
-  model->setData (index, QString::fromLatin1 ("separator"), Qt::AccessibleDescriptionRole);
-
-  if (QStandardItemModel *m = qobject_cast<QStandardItemModel*> (model))
-    if (QStandardItem *item = m->itemFromIndex (index))
-      item->setFlags (item->flags () & ~ (Qt::ItemIsSelectable|Qt::ItemIsEnabled));
-}
-
-void
-FilterBarComboBoxDelegate::paint (QPainter                    * painter,
-                                  const QStyleOptionViewItem  & option,
-                                  const QModelIndex           & index) const
-{
-  if (isSeparator (index))
-    {
-      QRect rect = option.rect;
-      if (const QStyleOptionViewItemV3 *v3 = qstyleoption_cast<const QStyleOptionViewItemV3*> (&option))
-        if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView*> (v3->widget))
-          rect.setWidth (view->viewport ()->width ());
-      QStyleOption opt;
-      opt.rect = rect;
-      myCombo->style ()->drawPrimitive (QStyle::PE_IndicatorToolBarSeparator, &opt, painter, myCombo);
-    }
-  else
-    {
-      QStyleOptionViewItem disabledOption = option;
-      const QPalette::ColorRole disabledColorRole = (disabledOption.state & QStyle::State_Selected) ?
-                                                     QPalette::HighlightedText : QPalette::Text;
-      disabledOption.palette.setColor (disabledColorRole, getFadedColor (disabledOption.palette.color (disabledColorRole)));
-
-      QRect boundingBox = option.rect;
-
-      const int hmargin = getHSpacing (myCombo);
-      boundingBox.adjust (hmargin, 0, -hmargin, 0);
-
-      QRect decorationRect = rect (option, index, Qt::DecorationRole);
-      decorationRect.setSize (myCombo->iconSize ());
-      decorationRect = QStyle::alignedRect (option.direction,
-                                            Qt::AlignLeft|Qt::AlignVCenter,
-                                            decorationRect.size (), boundingBox);
-      Utils::narrowRect (boundingBox, decorationRect.width () + hmargin, 0, option.direction);
-
-      QRect countRect  = rect (option, index, TorrentCountStringRole);
-      countRect = QStyle::alignedRect (option.direction,
-                                       Qt::AlignRight|Qt::AlignVCenter,
-                                       countRect.size (), boundingBox);
-      Utils::narrowRect (boundingBox, 0, countRect.width () + hmargin, option.direction);
-      const QRect displayRect = boundingBox;
-
-      drawBackground (painter, option, index);
-      QStyleOptionViewItem option2 = option;
-      option2.decorationSize = myCombo->iconSize ();
-      drawDecoration (painter, option, decorationRect, decoration (option2,index.data (Qt::DecorationRole)));
-      drawDisplay (painter, option, displayRect, index.data (Qt::DisplayRole).toString ());
-      drawDisplay (painter, disabledOption, countRect, index.data (TorrentCountStringRole).toString ());
-      drawFocus (painter, option, displayRect|countRect);
-    }
-}
-
-QSize
-FilterBarComboBoxDelegate::sizeHint (const QStyleOptionViewItem & option,
-                                     const QModelIndex          & index) const
-{
-  if (isSeparator (index))
-    {
-      const int pm = myCombo->style ()->pixelMetric (QStyle::PM_DefaultFrameWidth, 0, myCombo);
-      return QSize (pm, pm + 10);
-    }
-  else
-    {
-      QStyle * s = myCombo->style ();
-      const int hmargin = getHSpacing (myCombo);
-
-      QSize size = QItemDelegate::sizeHint (option, index);
-      size.setHeight (qMax (size.height (), myCombo->iconSize ().height () + 6));
-      size.rwidth () += s->pixelMetric (QStyle::PM_FocusFrameHMargin, 0, myCombo);
-      size.rwidth () += rect (option,index,TorrentCountStringRole).width ();
-      size.rwidth () += hmargin * 4;
-      return size;
-    }
-}
-
-/**
-***
-**/
-
-FilterBarComboBox::FilterBarComboBox (QWidget * parent):
-  QComboBox (parent)
-{
-  setSizeAdjustPolicy (QComboBox::AdjustToContents);
-}
-
-int
-FilterBarComboBox::currentCount () const
-{
-  int count = 0;
-
-  const QModelIndex modelIndex = model ()->index (currentIndex (), 0, rootModelIndex ());
-  if (modelIndex.isValid ())
-    count = modelIndex.data (TorrentCountRole).toInt ();
-
-  return count;
-}
-
-QSize
-FilterBarComboBox::minimumSizeHint () const
-{
-  QFontMetrics fm (fontMetrics ());
-  const QSize textSize = fm.boundingRect (itemText (0)).size ();
-  const QSize countSize = fm.boundingRect (itemData (0, TorrentCountStringRole).toString ()).size ();
-  return calculateSize (textSize, countSize);
-}
-
-QSize
-FilterBarComboBox::sizeHint () const
-{
-  QFontMetrics fm (fontMetrics ());
-  QSize maxTextSize (0, 0);
-  QSize maxCountSize (0, 0);
-  for (int i = 0, n = count (); i < n; ++i)
-  {
-    const QSize textSize = fm.boundingRect (itemText (i)).size ();
-    maxTextSize.setHeight (qMax (maxTextSize.height (), textSize.height ()));
-    maxTextSize.setWidth (qMax (maxTextSize.width (), textSize.width ()));
-
-    const QSize countSize = fm.boundingRect (itemData (i, TorrentCountStringRole).toString ()).size ();
-    maxCountSize.setHeight (qMax (maxCountSize.height (), countSize.height ()));
-    maxCountSize.setWidth (qMax (maxCountSize.width (), countSize.width ()));
-  }
-
-  return calculateSize (maxTextSize, maxCountSize);
-}
-
-QSize
-FilterBarComboBox::calculateSize (const QSize& textSize, const QSize& countSize) const
-{
-  const int hmargin = getHSpacing (this);
-
-  QStyleOptionComboBox option;
-  initStyleOption (&option);
-
-  QSize contentSize = iconSize () + QSize (4, 2);
-  contentSize.setHeight (qMax (contentSize.height (), textSize.height ()));
-  contentSize.rwidth () += hmargin + textSize.width ();
-  contentSize.rwidth () += hmargin + countSize.width ();
-
-  return style ()->sizeFromContents (QStyle::CT_ComboBox, &option, contentSize, this).expandedTo (qApp->globalStrut ());
-}
-
-void
-FilterBarComboBox::paintEvent (QPaintEvent * e)
-{
-  Q_UNUSED (e);
-
-  QStylePainter painter (this);
-  painter.setPen (palette ().color (QPalette::Text));
-
-  // draw the combobox frame, focusrect and selected etc.
-  QStyleOptionComboBox opt;
-  initStyleOption (&opt);
-  painter.drawComplexControl (QStyle::CC_ComboBox, opt);
-
-  // draw the icon and text
-  const QModelIndex modelIndex = model ()->index (currentIndex (), 0, rootModelIndex ());
-  if (modelIndex.isValid ())
-    {
-      QStyle * s = style ();
-      const int hmargin = getHSpacing (this);
-
-      QRect rect = s->subControlRect (QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxEditField, this);
-      rect.adjust (2, 1, -2, -1);
-
-      // draw the icon
-      QPixmap pixmap;
-      QVariant variant = modelIndex.data (Qt::DecorationRole);
-      switch (variant.type ())
-        {
-          case QVariant::Pixmap: pixmap = qvariant_cast<QPixmap> (variant); break;
-          case QVariant::Icon:   pixmap = qvariant_cast<QIcon> (variant).pixmap (iconSize ()); break;
-          default: break;
-        }
-      if (!pixmap.isNull ())
-        {
-          const QRect iconRect = QStyle::alignedRect(opt.direction, Qt::AlignLeft | Qt::AlignVCenter,
-                                                     opt.iconSize, rect);
-          painter.drawPixmap (iconRect.topLeft (), pixmap);
-          Utils::narrowRect (rect, iconRect.width () + hmargin, 0, opt.direction);
-        }
-
-      // draw the count
-      QString text = modelIndex.data (TorrentCountStringRole).toString ();
-      if (!text.isEmpty ())
-        {
-          const QPen pen = painter.pen ();
-          painter.setPen (getFadedColor (pen.color ()));
-          const QRect textRect = QStyle::alignedRect(opt.direction, Qt::AlignRight | Qt::AlignVCenter,
-                                                     QSize (opt.fontMetrics.width (text), rect.height ()), rect);
-          painter.drawText (textRect, Qt::AlignRight | Qt::AlignVCenter, text);
-          Utils::narrowRect (rect, 0, textRect.width () + hmargin, opt.direction);
-          painter.setPen (pen);
-        }
-
-      // draw the text
-      text = modelIndex.data (Qt::DisplayRole).toString ();
-      text = painter.fontMetrics ().elidedText (text, Qt::ElideRight, rect.width ());
-      painter.drawText (rect, Qt::AlignLeft | Qt::AlignVCenter, text);
-    }
-}
-
-/****
-*****
-****/
-
-FilterBarLineEdit::FilterBarLineEdit (QWidget * parent):
-  QLineEdit (parent),
-  myClearButton (nullptr)
-{
-#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0)
-  const QIcon icon = QIcon::fromTheme (QLatin1String ("edit-clear"), style ()->standardIcon (QStyle::SP_DialogCloseButton));
-  const int iconSize = style ()->pixelMetric (QStyle::PM_SmallIconSize);
-
-  myClearButton = new QToolButton (this);
-  myClearButton->setStyleSheet (QLatin1String ("QToolButton{border:0;padding:0;margin:0}"));
-  myClearButton->setToolButtonStyle (Qt::ToolButtonIconOnly);
-  myClearButton->setFocusPolicy (Qt::NoFocus);
-  myClearButton->setCursor (Qt::ArrowCursor);
-  myClearButton->setIconSize (QSize (iconSize, iconSize));
-  myClearButton->setIcon (icon);
-  myClearButton->setFixedSize (myClearButton->iconSize () + QSize (2, 2));
-  myClearButton->hide ();
-
-  const int frameWidth = style ()->pixelMetric (QStyle::PM_DefaultFrameWidth);
-  const QSize minSizeHint = minimumSizeHint ();
-  const QSize buttonSize = myClearButton->size ();
-
-  setStyleSheet (QString::fromLatin1 ("QLineEdit{padding-right:%1px}").arg (buttonSize.width () + frameWidth + 1));
-  setMinimumSize (qMax (minSizeHint.width (), buttonSize.width () + frameWidth * 2 + 2),
-                  qMax (minSizeHint.height (), buttonSize.height () + frameWidth * 2 + 2));
-
-  connect (this, SIGNAL (textChanged (QString)), this, SLOT (updateClearButtonVisibility ()));
-  connect (myClearButton, SIGNAL (clicked ()), this, SLOT (clear ()));
-#else
-  setClearButtonEnabled (true);
-#endif
-
-#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
-  setPlaceholderText (tr ("Search..."));
-#endif
-}
-
-void
-FilterBarLineEdit::resizeEvent (QResizeEvent * event)
-{
-  QLineEdit::resizeEvent (event);
-
-#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0)
-  const int frameWidth = style ()->pixelMetric (QStyle::PM_DefaultFrameWidth);
-  const QRect editRect = rect();
-  const QSize buttonSize = myClearButton->size ();
-
-  myClearButton->move (editRect.right () - frameWidth - buttonSize.width (),
-                       editRect.top () + (editRect.height () - buttonSize.height ()) / 2);
-#endif
-}
-
-void
-FilterBarLineEdit::updateClearButtonVisibility ()
-{
-#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0)
-  myClearButton->setVisible (!text ().isEmpty ());
-#endif
-}
-
-/****
-*****
-*****  ACTIVITY
-*****
-****/
-
-FilterBarComboBox *
-FilterBar::createActivityCombo ()
-{
-  FilterBarComboBox * c = new FilterBarComboBox (this);
-  FilterBarComboBoxDelegate * delegate = new FilterBarComboBoxDelegate (this, c);
-  c->setItemDelegate (delegate);
-
-  QStandardItemModel * model = new QStandardItemModel (this);
-
-  QStandardItem * row = new QStandardItem (tr ("All"));
-  row->setData (FilterMode::SHOW_ALL, ActivityRole);
-  model->appendRow (row);
-
-  model->appendRow (new QStandardItem); // separator
-  delegate->setSeparator (model, model->index (1, 0));
-
-  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("system-run")), tr ("Active"));
-  row->setData (FilterMode::SHOW_ACTIVE, ActivityRole);
-  model->appendRow (row);
-
-  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("go-down")), tr ("Downloading"));
-  row->setData (FilterMode::SHOW_DOWNLOADING, ActivityRole);
-  model->appendRow (row);
-
-  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("go-up")), tr ("Seeding"));
-  row->setData (FilterMode::SHOW_SEEDING, ActivityRole);
-  model->appendRow (row);
-
-  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("media-playback-pause")), tr ("Paused"));
-  row->setData (FilterMode::SHOW_PAUSED, ActivityRole);
-  model->appendRow (row);
-
-  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("dialog-ok")), tr ("Finished"));
-  row->setData (FilterMode::SHOW_FINISHED, ActivityRole);
-  model->appendRow (row);
-
-  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("view-refresh")), tr ("Verifying"));
-  row->setData (FilterMode::SHOW_VERIFYING, ActivityRole);
-  model->appendRow (row);
-
-  row = new QStandardItem (QIcon::fromTheme (QLatin1String ("process-stop")), tr ("Error"));
-  row->setData (FilterMode::SHOW_ERROR, ActivityRole);
-  model->appendRow (row);
-
-  c->setModel (model);
-  return c;
-}
-
-/****
-*****
-*****
-*****
-****/
-
-namespace
-{
-  QString readableHostName (const QString& host)
-  {
-    // get the readable name...
-    QString name = host;
-    const int pos = name.lastIndexOf (QLatin1Char ('.'));
-    if (pos >= 0)
-      name.truncate (pos);
-    if (!name.isEmpty ())
-      name[0] = name[0].toUpper ();
-    return name;
-  }
-}
-
-void
-FilterBar::refreshTrackers ()
-{
-  Favicons& favicons = qApp->favicons;
-  const int firstTrackerRow = 2; // skip over the "All" and separator...
-
-  // pull info from the tracker model...
-  QSet<QString> oldHosts;
-  for (int row=firstTrackerRow; ; ++row)
-    {
-      QModelIndex index = myTrackerModel->index (row, 0);
-      if (!index.isValid ())
-        break;
-      oldHosts << index.data (TrackerRole).toString ();
-    }
-
-  // pull the new stats from the torrent model...
-  QSet<QString> newHosts;
-  QMap<QString,int> torrentsPerHost;
-  for (int row=0; ; ++row)
-    {
-      QModelIndex index = myTorrents.index (row, 0);
-      if (!index.isValid ())
-        break;
-      const Torrent * tor = index.data (TorrentModel::TorrentRole).value<const Torrent*> ();
-      QSet<QString> torrentNames;
-      for (const QString& host: tor->hosts ())
-        {
-          newHosts.insert (host);
-          torrentNames.insert (readableHostName (host));
-        }
-      for (const QString& name: torrentNames)
-        ++torrentsPerHost[name];
-    }
-
-  // update the "All" row
-  myTrackerModel->setData (myTrackerModel->index (0,0), myTorrents.rowCount (), TorrentCountRole);
-  myTrackerModel->setData (myTrackerModel->index (0,0), getCountString (myTorrents.rowCount ()), TorrentCountStringRole);
-
-  // rows to update
-  for (const QString& host: oldHosts & newHosts)
-    {
-      const QString name = readableHostName (host);
-      QStandardItem * row = myTrackerModel->findItems (name).front ();
-      const int count = torrentsPerHost[name];
-      row->setData (count, TorrentCountRole);
-      row->setData (getCountString (count), TorrentCountStringRole);
-      row->setData (favicons.findFromHost (host), Qt::DecorationRole);
-    }
-
-  // rows to remove
-  for (const QString& host: oldHosts - newHosts)
-    {
-      const QString name = readableHostName (host);
-      QStandardItem * item = myTrackerModel->findItems (name).front ();
-      if (!item->data (TrackerRole).toString ().isEmpty ()) // don't remove "All"
-        myTrackerModel->removeRows (item->row (), 1);
-    }
-
-  // rows to add
-  bool anyAdded = false;
-  for (const QString& host: newHosts - oldHosts)
-    {
-      const QString name = readableHostName (host);
-
-      if (!myTrackerModel->findItems (name).isEmpty ())
-        continue;
-
-      // find the sorted position to add this row
-      int i = firstTrackerRow;
-      for (int n=myTrackerModel->rowCount (); i<n; ++i)
-        {
-          const QString rowName = myTrackerModel->index (i,0).data (Qt::DisplayRole).toString ();
-          if (rowName >= name)
-            break;
-        }
-
-      // add the row
-      QStandardItem * row = new QStandardItem (favicons.findFromHost (host), name);
-      const int count = torrentsPerHost[host];
-      row->setData (count, TorrentCountRole);
-      row->setData (getCountString (count), TorrentCountStringRole);
-      row->setData (favicons.findFromHost (host), Qt::DecorationRole);
-      row->setData (host, TrackerRole);
-      myTrackerModel->insertRow (i, row);
-      anyAdded = true;
-    }
-
-  if (anyAdded) // the one added might match our filter...
-    refreshPref (Prefs::FILTER_TRACKERS);
-}
-
-
-FilterBarComboBox *
-FilterBar::createTrackerCombo (QStandardItemModel * model)
-{
-  FilterBarComboBox * c = new FilterBarComboBox (this);
-  FilterBarComboBoxDelegate * delegate = new FilterBarComboBoxDelegate (this, c);
-  c->setItemDelegate (delegate);
-
-  QStandardItem * row = new QStandardItem (tr ("All"));
-  row->setData (QString (), TrackerRole);
-  const int count = myTorrents.rowCount ();
-  row->setData (count, TorrentCountRole);
-  row->setData (getCountString (count), TorrentCountStringRole);
-  model->appendRow (row);
-
-  model->appendRow (new QStandardItem); // separator
-  delegate->setSeparator (model, model->index (1, 0));
-
-  c->setModel (model);
-  return c;
-}
-
-/****
-*****
-*****
-*****
-****/
-
-FilterBar::FilterBar (Prefs& prefs, const TorrentModel& torrents, const TorrentFilter& filter, QWidget * parent):
-  QWidget (parent),
-  myPrefs (prefs),
-  myTorrents (torrents),
-  myFilter (filter),
-  myRecountTimer (new QTimer (this)),
-  myIsBootstrapping (true)
-{
-  QHBoxLayout * h = new QHBoxLayout (this);
-  h->setContentsMargins (3, 3, 3, 3);
-
-  myCountLabel = new QLabel (this);
-  h->addWidget (myCountLabel);
-
-  myActivityCombo = createActivityCombo ();
-  myActivityCombo->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed));
-  h->addWidget (myActivityCombo);
-
-  myTrackerModel = new QStandardItemModel (this);
-  myTrackerCombo = createTrackerCombo (myTrackerModel);
-  h->addWidget (myTrackerCombo);
-
-  myLineEdit = new FilterBarLineEdit (this);
-  h->addWidget (myLineEdit);
-  connect (myLineEdit, SIGNAL (textChanged (QString)), this, SLOT (onTextChanged (QString)));
-
-  // listen for changes from the other players
-  connect (&myPrefs, SIGNAL (changed (int)), this, SLOT (refreshPref (int)));
-  connect (myActivityCombo, SIGNAL (currentIndexChanged (int)), this, SLOT (onActivityIndexChanged (int)));
-  connect (myTrackerCombo, SIGNAL (currentIndexChanged (int)), this, SLOT (onTrackerIndexChanged (int)));
-  connect (&myFilter, SIGNAL (rowsInserted (QModelIndex, int, int)), this, SLOT (refreshCountLabel ()));
-  connect (&myFilter, SIGNAL (rowsRemoved (QModelIndex, int, int)), this, SLOT (refreshCountLabel ()));
-  connect (&myTorrents, SIGNAL (modelReset ()), this, SLOT (onTorrentModelReset ()));
-  connect (&myTorrents, SIGNAL (rowsInserted (QModelIndex, int, int)), this, SLOT (onTorrentModelRowsInserted (QModelIndex, int, int)));
-  connect (&myTorrents, SIGNAL (rowsRemoved (QModelIndex, int, int)), this, SLOT (onTorrentModelRowsRemoved (QModelIndex, int, int)));
-  connect (&myTorrents, SIGNAL (dataChanged (QModelIndex, QModelIndex)), this, SLOT (onTorrentModelDataChanged (QModelIndex, QModelIndex)));
-  connect (myRecountTimer, SIGNAL (timeout ()), this, SLOT (recount ()));
-
-  recountSoon ();
-  refreshTrackers ();
-  refreshCountLabel ();
-  myIsBootstrapping = false;
-
-  // initialize our state
-  QList<int> initKeys;
-  initKeys << Prefs::FILTER_MODE
-           << Prefs::FILTER_TRACKERS;
-  for (const int key: initKeys)
-      refreshPref (key);
-}
-
-FilterBar::~FilterBar ()
-{
-  delete myRecountTimer;
-}
-
-/***
-****
-***/
-
-void
-FilterBar::refreshPref (int key)
-{
-  switch (key)
-    {
-      case Prefs::FILTER_MODE:
-        {
-          const FilterMode m = myPrefs.get<FilterMode> (key);
-          QAbstractItemModel * model = myActivityCombo->model ();
-          QModelIndexList indices = model->match (model->index (0,0), ActivityRole, m.mode ());
-          myActivityCombo->setCurrentIndex (indices.isEmpty () ? 0 : indices.first ().row ());
-          break;
-        }
-
-      case Prefs::FILTER_TRACKERS:
-        {
-          const QString tracker = myPrefs.getString (key);
-          const QString name = readableHostName (tracker);
-          QList<QStandardItem*> rows = myTrackerModel->findItems (name);
-          if (!rows.isEmpty ())
-            {
-              myTrackerCombo->setCurrentIndex (rows.front ()->row ());
-            }
-          else // hm, we don't seem to have this tracker anymore...
-            {
-              const bool isBootstrapping = myTrackerModel->rowCount () <= 2;
-              if (!isBootstrapping)
-                myPrefs.set (key, QString ());
-            }
-          break;
-        }
-    }
-}
-
-void
-FilterBar::onTextChanged (const QString& str)
-{
-  if (!myIsBootstrapping)
-    myPrefs.set (Prefs::FILTER_TEXT, str.trimmed ());
-}
-
-void
-FilterBar::onTrackerIndexChanged (int i)
-{
-  if (!myIsBootstrapping)
-    {
-      QString str;
-      const bool isTracker = !myTrackerCombo->itemData (i,TrackerRole).toString ().isEmpty ();
-      if (!isTracker)
-        {
-          // show all
-        }
-      else
-        {
-          str = myTrackerCombo->itemData (i,TrackerRole).toString ();
-          const int pos = str.lastIndexOf (QLatin1Char ('.'));
-          if (pos >= 0)
-            str.truncate (pos+1);
-        }
-      myPrefs.set (Prefs::FILTER_TRACKERS, str);
-    }
-}
-
-void
-FilterBar::onActivityIndexChanged (int i)
-{
-  if (!myIsBootstrapping)
-    {
-      const FilterMode mode = myActivityCombo->itemData (i, ActivityRole).toInt ();
-      myPrefs.set (Prefs::FILTER_MODE, mode);
-    }
-}
-
-/***
-****
-***/
-
-void FilterBar::onTorrentModelReset () { recountSoon (); }
-void FilterBar::onTorrentModelRowsInserted (const QModelIndex&, int, int) { recountSoon (); }
-void FilterBar::onTorrentModelRowsRemoved (const QModelIndex&, int, int) { recountSoon (); }
-void FilterBar::onTorrentModelDataChanged (const QModelIndex&, const QModelIndex&) { recountSoon (); }
-
-void
-FilterBar::recountSoon ()
-{
-  if (!myRecountTimer->isActive ())
-    {
-      myRecountTimer->setSingleShot (true);
-      myRecountTimer->start (800);
-    }
-}
-void
-FilterBar::recount ()
-{
-  QAbstractItemModel * model = myActivityCombo->model ();
-
-  int torrentsPerMode[FilterMode::NUM_MODES] = {};
-  myFilter.countTorrentsPerMode (torrentsPerMode);
-
-  for (int row=0, n=model->rowCount (); row<n; ++row)
-    {
-      QModelIndex index = model->index (row, 0);
-      const int mode = index.data (ActivityRole).toInt ();
-      const int count = torrentsPerMode [mode];
-      model->setData (index, count, TorrentCountRole);
-      model->setData (index, getCountString (count), TorrentCountStringRole);
-    }
-
-  refreshTrackers ();
-  refreshCountLabel ();
-}
-
-QString
-FilterBar::getCountString (int n) const
-{
-  return QString::fromLatin1 ("%L1").arg (n);
-}
-
-void
-FilterBar::refreshCountLabel ()
-{
-  const int visibleCount = myFilter.rowCount ();
-  const int trackerCount = myTrackerCombo->currentCount ();
-  const int activityCount = myActivityCombo->currentCount ();
-
-  if ((visibleCount == activityCount) || (visibleCount == trackerCount))
-    myCountLabel->setText (tr("Show:"));
-  else
-    myCountLabel->setText (tr("Show %Ln of:", 0, visibleCount));
-}
diff --git a/qt/hig.cc b/qt/hig.cc
deleted file mode 100644 (file)
index 873c386..0000000
--- a/qt/hig.cc
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
- *
- * It may be used under the GNU GPL versions 2 or 3
- * or any future license endorsed by Mnemosyne LLC.
- *
- * $Id$
- */
-
-#include <iostream>
-
-#include <QCheckBox>
-#include <QGridLayout>
-#include <QHBoxLayout>
-#include <QLabel>
-
-#include "hig.h"
-
-
-HIG::HIG (QWidget * parent):
-  QWidget (parent),
-  myRow (0),
-  myHasTall (false),
-  myGrid (new QGridLayout (this))
-{
-  myGrid->setContentsMargins (PAD_BIG, PAD_BIG, PAD_BIG, PAD_BIG);
-  myGrid->setHorizontalSpacing (PAD_BIG);
-  myGrid->setVerticalSpacing (PAD);
-  myGrid->setColumnStretch  (1, 1);
-}
-
-HIG::~HIG ()
-{
-  delete myGrid;
-}
-
-/***
-****
-***/
-
-void
-HIG::addSectionDivider ()
-{
-  QWidget * w = new QWidget (this);
-  myGrid->addWidget (w, myRow, 0, 1, 2);
-  ++myRow;
-}
-
-void
-HIG::addSectionTitle (const QString& title)
-{
-  QLabel * label = new QLabel (this);
-  label->setText (title);
-  label->setStyleSheet (QLatin1String ("font: bold"));
-  label->setAlignment (Qt::AlignLeft|Qt::AlignVCenter);
-  addSectionTitle (label);
-}
-
-void
-HIG::addSectionTitle (QWidget * w)
-{
-  myGrid->addWidget (w, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter);
-  ++myRow;
-}
-
-void
-HIG::addSectionTitle (QLayout * l)
-{
-  myGrid->addLayout (l, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter);
-  ++myRow;
-}
-
-
-QLayout *
-HIG::addRow (QWidget * w)
-{
-  QHBoxLayout * h = new QHBoxLayout ();
-  h->addSpacing (18);
-  h->addWidget (w);
-
-  QLabel * l;
-  if ((l = qobject_cast<QLabel*>(w)))
-    l->setAlignment (Qt::AlignLeft);
-
-  return h;
-}
-
-void
-HIG::addWideControl (QLayout * l)
-{
-  QHBoxLayout * h = new QHBoxLayout ();
-  h->addSpacing (18);
-  h->addLayout (l);
-  myGrid->addLayout (h, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter);
-  ++myRow;
-}
-
-void
-HIG::addWideControl (QWidget * w)
-{
-  QHBoxLayout * h = new QHBoxLayout ();
-  h->addSpacing (18);
-  h->addWidget (w);
-  myGrid->addLayout (h, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter);
-  ++myRow;
-}
-
-QCheckBox*
-HIG::addWideCheckBox (const QString& text, bool isChecked)
-{
-  QCheckBox * check = new QCheckBox (text, this);
-  check->setChecked (isChecked);
-  addWideControl (check);
-  return check;
-}
-
-void
-HIG::addLabel (QWidget * w)
-{
-  QHBoxLayout * h = new QHBoxLayout ();
-  h->addSpacing (18);
-  h->addWidget (w);
-  myGrid->addLayout (h, myRow, 0, 1, 1, Qt::AlignLeft|Qt::AlignVCenter);
-}
-
-QLabel*
-HIG::addLabel (const QString& text)
-{
-  QLabel * label = new QLabel (text, this);
-  addLabel (label);
-  return label;
-}
-
-void
-HIG::addTallLabel (QWidget * w)
-{
-  QHBoxLayout * h = new QHBoxLayout ();
-  h->addSpacing (18);
-  h->addWidget (w);
-  myGrid->addLayout (h, myRow, 0, 1, 1, Qt::AlignLeft|Qt::AlignTop);
-}
-
-QLabel*
-HIG::addTallLabel (const QString& text)
-{
-  QLabel * label = new QLabel (text, this);
-  addTallLabel (label);
-  return label;
-}
-
-void
-HIG::addControl (QWidget * w)
-{
-  myGrid->addWidget (w, myRow, 1, 1, 1);
-}
-
-void
-HIG::addControl (QLayout * l)
-{
-  myGrid->addLayout (l, myRow, 1, 1, 1);
-}
-
-QLabel *
-HIG::addRow (const QString& text, QWidget * control, QWidget * buddy)
-{
-  QLabel * label = addLabel (text);
-  addControl (control);
-  label->setBuddy (buddy ? buddy : control);
-  ++myRow;
-  return label;
-}
-
-QLabel *
-HIG::addTallRow (const QString& text, QWidget * control, QWidget * buddy)
-{
-  QLabel* label = addTallLabel (text);
-  label->setBuddy (buddy ? buddy : control);
-  addControl (control);
-  myHasTall = true;
-  myGrid->setRowStretch  (myRow, 1);
-  ++myRow;
-  return label;
-}
-
-QLabel *
-HIG::addRow (const QString& text, QLayout * control, QWidget * buddy)
-{
-  QLabel * label = addLabel (text);
-  addControl (control);
-  if (buddy != 0)
-    label->setBuddy (buddy);
-  ++myRow;
-  return label;
-}
-
-void
-HIG::addRow (QWidget * label, QWidget * control, QWidget * buddy)
-{
-  addLabel (label);
-
-  if (control)
-    {
-      addControl (control);
-
-      QLabel * l = qobject_cast<QLabel*> (label);
-      if (l != 0)
-        l->setBuddy (buddy ? buddy : control);
-    }
-
-  ++myRow;
-}
-
-void
-HIG::addRow (QWidget * label, QLayout * control, QWidget * buddy)
-{
-  addLabel (label);
-
-  if (control)
-    {
-      addControl (control);
-
-      QLabel * l = qobject_cast<QLabel*> (label);
-      if (l != 0 && buddy != 0)
-        l->setBuddy (buddy);
-    }
-
-  ++myRow;
-}
-
-void
-HIG::finish ()
-{
-  if (!myHasTall)
-    {
-      QWidget * w = new QWidget (this);
-      myGrid->addWidget (w, myRow, 0, 1, 2);
-      myGrid->setRowStretch (myRow, 100);
-      ++myRow;
-    }
-}
diff --git a/qt/hig.h b/qt/hig.h
deleted file mode 100644 (file)
index d597a60..0000000
--- a/qt/hig.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * This file Copyright (C) 2009-2014 Mnemosyne LLC
- *
- * It may be used under the GNU GPL versions 2 or 3
- * or any future license endorsed by Mnemosyne LLC.
- *
- * $Id$
- */
-
-
-#ifndef QTR_HIG_H
-#define QTR_HIG_H
-
-#include <QWidget>
-
-class QCheckBox;
-class QLabel;
-class QString;
-class QGridLayout;
-class QLayout;
-
-class HIG: public QWidget
-{
-    Q_OBJECT
-
-  public:
-
-    enum
-    {
-      PAD_SMALL = 3,
-      PAD = 6,
-      PAD_BIG = 12,
-      PAD_LARGE = PAD_BIG
-    };
-
-  public:
-
-    HIG (QWidget * parent = 0);
-    virtual ~HIG ();
-
-  public:
-
-    void addSectionDivider ();
-    void addSectionTitle (const QString&);
-    void addSectionTitle (QWidget*);
-    void addSectionTitle (QLayout*);
-    void addWideControl (QLayout *);
-    void addWideControl (QWidget *);
-    QCheckBox* addWideCheckBox (const QString&, bool isChecked);
-    QLabel* addLabel (const QString&);
-    QLabel* addTallLabel (const QString&);
-    void addLabel (QWidget *);
-    void addTallLabel (QWidget *);
-    void addControl (QWidget *);
-    void addControl (QLayout *);
-    QLabel* addRow (const QString & label, QWidget * control, QWidget * buddy=0);
-    QLabel* addRow (const QString & label, QLayout * control, QWidget * buddy);
-    void addRow (QWidget * label, QWidget * control, QWidget * buddy=0);
-    void addRow (QWidget * label, QLayout * control, QWidget * buddy);
-    QLabel* addTallRow (const QString & label, QWidget * control, QWidget * buddy=0);
-    void finish ();
-
-  private:
-    QLayout* addRow (QWidget* w);
-
-  private:
-    int myRow;
-    bool myHasTall;
-    QGridLayout * myGrid;
-};
-
-#endif // QTR_HIG_H
index de1c1dac71f6052a569aedb53184c84de1a76d4a..e9edd085e58e99f9025bbd0e71f5c9479721b917 100644 (file)
@@ -52,55 +52,61 @@ TRANSLATIONS += translations/transmission_en.ts \
                 translations/transmission_uk.ts \
                 translations/transmission_zh_CN.ts
 
-FORMS += about.ui \
-         details.ui \
-         mainwin.ui \
-         make-dialog.ui \
-         make-progress-dialog.ui \
-         options.ui \
-         prefs-dialog.ui \
-         relocate.ui \
-         session-dialog.ui \
-         stats-dialog.ui
+FORMS += AboutDialog.ui \
+         DetailsDialog.ui \
+         MainWindow.ui \
+         MakeDialog.ui \
+         MakeProgressDialog.ui \
+         OptionsDialog.ui \
+         PrefsDialog.ui \
+         RelocateDialog.ui \
+         SessionDialog.ui \
+         StatsDialog.ui
 RESOURCES += application.qrc
 win32|macx:RESOURCES += icons/Faenza/Faenza.qrc
-SOURCES += about.cc \
-           add-data.cc \
-           app.cc \
-           column-resizer.cc \
-           dbus-adaptor.cc \
-           details.cc \
-           favicon.cc \
-           file-tree.cc \
-           filterbar.cc \
-           filters.cc \
-           freespace-label.cc \
-           formatter.cc \
-           hig.cc \
-           license.cc \
-           mainwin.cc \
-           make-dialog.cc \
-           options.cc \
-           path-button.cc \
-           prefs.cc \
-           prefs-dialog.cc \
-           relocate.cc \
-           rpc-client.cc \
-           session.cc \
-           session-dialog.cc \
-           squeezelabel.cc \
-           stats-dialog.cc \
-           torrent.cc torrent-delegate.cc \
-           torrent-delegate-min.cc \
-           torrent-filter.cc \
-           torrent-model.cc \
-           tracker-delegate.cc \
-           tracker-model.cc \
-           tracker-model-filter.cc \
-           tricontoolbutton.cc \
-           utils.cc \
-           watchdir.cc
+SOURCES += AboutDialog.cc \
+           AddData.cc \
+           Application.cc \
+           ColumnResizer.cc \
+           DBusAdaptor.cc \
+           DetailsDialog.cc \
+           FaviconCache.cc \
+           FileTreeDelegate.cc \
+           FileTreeItem.cc \
+           FileTreeModel.cc \
+           FileTreeView.cc \
+           FilterBar.cc \
+           FilterBarComboBox.cc \
+           FilterBarComboBoxDelegate.cc \
+           FilterBarLineEdit.cc \
+           Filters.cc \
+           Formatter.cc \
+           FreeSpaceLabel.cc \
+           IconToolButton.cc \
+           LicenseDialog.cc \
+           MainWindow.cc \
+           MakeDialog.cc \
+           OptionsDialog.cc \
+           PathButton.cc \
+           Prefs.cc \
+           PrefsDialog.cc \
+           RelocateDialog.cc \
+           RpcClient.cc \
+           Session.cc \
+           SessionDialog.cc \
+           SqueezeLabel.cc \
+           StatsDialog.cc \
+           Torrent.cc \
+           TorrentDelegate.cc \
+           TorrentDelegateMin.cc \
+           TorrentFilter.cc \
+           TorrentModel.cc \
+           TrackerDelegate.cc \
+           TrackerModel.cc \
+           TrackerModelFilter.cc \
+           Utils.cc \
+           WatchDir.cc
 HEADERS += $$replace(SOURCES, .cc, .h)
-HEADERS += speed.h types.h
+HEADERS += CustomVariantType.h Speed.h
 
 win32:RC_FILE = qtr.rc