]> granicus.if.org Git - transmission/commitdiff
Refactor FreespaceLabel to make it possible for it to be created in Qt Designer
authorMike Gelfand <mikedld@mikedld.com>
Fri, 26 Dec 2014 18:41:47 +0000 (18:41 +0000)
committerMike Gelfand <mikedld@mikedld.com>
Fri, 26 Dec 2014 18:41:47 +0000 (18:41 +0000)
qt/freespace-label.cc
qt/freespace-label.h
qt/options.cc
qt/prefs-dialog.cc

index 8bd76f2e08cd3398262c9ce4fa6340d8a28688e0..cfbed19aaedf6e263abb39a729f138d7524fd036 100644 (file)
@@ -19,24 +19,33 @@ namespace
   static const int INTERVAL_MSEC = 15000;
 }
 
-FreespaceLabel::FreespaceLabel (Session        & session,
-                                const QString  & path,
-                                QWidget        * parent):
+FreespaceLabel::FreespaceLabel (QWidget * parent):
   QLabel (parent),
-  mySession (session),
+  mySession (nullptr),
   myTag (-1),
   myTimer (this)
 {
-  myTimer.setSingleShot (false);
+  myTimer.setSingleShot (true);
   myTimer.setInterval (INTERVAL_MSEC);
-  myTimer.start ();
 
-  connect (&myTimer, SIGNAL(timeout()), this, SLOT(onTimer()));
+  connect (&myTimer, SIGNAL (timeout ()), this, SLOT (onTimer ()));
+}
+
+void
+FreespaceLabel::setSession (Session& session)
+{
+  if (mySession == &session)
+    return;
+
+  if (mySession != nullptr)
+    disconnect (mySession, nullptr, this, nullptr);
 
-  connect (&mySession, SIGNAL(executed(int64_t, QString, tr_variant *)),
-           this,       SLOT(onSessionExecuted(int64_t, QString, tr_variant *)));
+  mySession = &session;
 
-  setPath (path);
+  connect (mySession, SIGNAL (executed (int64_t, QString, tr_variant *)),
+           this,      SLOT (onSessionExecuted (int64_t, QString, tr_variant *)));
+
+  onTimer ();
 }
 
 void
@@ -53,7 +62,12 @@ FreespaceLabel::setPath (const QString& path)
 void
 FreespaceLabel::onTimer ()
 {
-  const int64_t tag = mySession.getUniqueTag ();
+  myTimer.stop ();
+
+  if (mySession == nullptr || myPath.isEmpty ())
+    return;
+
+  const int64_t tag = mySession->getUniqueTag ();
   const QByteArray myPathUtf8 = myPath.toUtf8 ();
 
   myTag = tag;
@@ -63,7 +77,7 @@ FreespaceLabel::onTimer ()
   tr_variantDictAddInt (&top, TR_KEY_tag, tag);
   tr_variant * args = tr_variantDictAddDict (&top, TR_KEY_arguments, 1);
   tr_variantDictAddStr (args, TR_KEY_path, myPathUtf8.constData());
-  mySession.exec (&top);
+  mySession->exec (&top);
   tr_variantFree (&top);
 }
 
@@ -91,4 +105,6 @@ FreespaceLabel::onSessionExecuted (int64_t tag, const QString& result, tr_varian
   tr_variantDictFindStr (arguments, TR_KEY_path, &path, &len);
   str = QString::fromUtf8 (path, len);
   setToolTip (str);
+
+  myTimer.start ();
 }
index 0aab72186453cd379023bdc82cda589953681573..5362511112aed7a86daa9b8ad604918a8d15ddc7 100644 (file)
@@ -28,12 +28,14 @@ class FreespaceLabel: public QLabel
     Q_OBJECT
 
   public:
-    FreespaceLabel (Session&, const QString& path, QWidget *parent=0);
+    FreespaceLabel (QWidget * parent = 0);
     virtual ~FreespaceLabel () {}
+
+    void setSession (Session& session);
     void setPath (const QString& folder);
 
   private:
-    Session& mySession;
+    Session * mySession;
     int64_t myTag;
     QString myPath;
     QTimer myTimer;
index b27eb924a877b999dcf0b7147c6f57c577d75d32..f076262fdcbc0d76887fa9e455d67a5154a1d75a 100644 (file)
@@ -109,7 +109,9 @@ Options::Options (Session& session, const Prefs& prefs, const AddData& addme, QW
   l = new QLabel (tr ("&Destination folder:"));
   layout->addWidget (l, ++row, 0, Qt::AlignLeft);
   const QString downloadDir (prefs.getString (Prefs::DOWNLOAD_DIR));
-  myFreespaceLabel = new FreespaceLabel (mySession, downloadDir, this);
+  myFreespaceLabel = new FreespaceLabel (this);
+  myFreespaceLabel->setSession (mySession);
+  myFreespaceLabel->setPath (downloadDir);
 
   if (session.isLocal ())
     {
index 8dfc424d1a834e9a771409c7e0b27957760f82b4..a81cd42f67c0cc796f732a38949b87123f0801bf 100644 (file)
@@ -604,7 +604,9 @@ PrefsDialog::createDownloadingTab ()
     hig->addRow (tr ("Save to &Location:"), b);
 
     const QString downloadDir (myPrefs.getString(Prefs::DOWNLOAD_DIR));
-    l = myFreespaceLabel = new FreespaceLabel (mySession, downloadDir, this);
+    l = myFreespaceLabel = new FreespaceLabel (this);
+    myFreespaceLabel->setSession (mySession);
+    myFreespaceLabel->setPath (downloadDir);
     QHBoxLayout * h = new QHBoxLayout ();
     h->addStretch (1);
     h->addWidget (l);