Added Q_FUNC_INFO macros to some functions.
[qtrapids] / src / client / PreferencesDialog.cpp
index 3742c41..4f6bbf1 100644 (file)
@@ -1,11 +1,9 @@
 /***************************************************************************
- *   Copyright (C) 2009 by Lassi Väätämöinen   *
- *   lassi.vaatamoinen@ixonos.com   *
+ *   Copyright (C) 2010 by Ixonos Plc   *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
+ *   the Free Software Foundation; version 2 of the License.               *
  *                                                                         *
  *   This program is distributed in the hope that it will be useful,       *
  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 #include <QLineEdit>
 #include <QLabel>
 #include <QPushButton>
+#include <QSpinBox>
 #include <QDialogButtonBox>
 #include <QAbstractButton>
 #include <QFileDialog>
 
+#include "qtrapids/dbus.hpp"
+#include "proxy.h"
 #include "PreferencesDialog.h"
 
-PreferencesDialog::PreferencesDialog(QWidget* parent, Qt::WindowFlags f) :
-        QDialog(parent, f), // Superclass
-        dirLineEdit_(NULL),
-        dialogButtons_(NULL),
-        settings_()
-{
-    setWindowTitle("Preferences");
-
-    QBoxLayout *verticalBox = new QBoxLayout(QBoxLayout::TopToBottom);
-    QBoxLayout *horizontalBox1 = new QBoxLayout(QBoxLayout::LeftToRight);
-    setLayout(verticalBox);
-    verticalBox->addLayout(horizontalBox1);
-
-    QLabel *dirLabel = new QLabel(tr("Download directory: "));
-    dirLineEdit_ = new QLineEdit(this);
-    QPushButton *browseDirButton = new QPushButton(tr("Browse.."));
-
-    horizontalBox1->addWidget(dirLabel);
-    horizontalBox1->addWidget(dirLineEdit_);
-    horizontalBox1->addWidget(browseDirButton);
-
-    connect(browseDirButton, SIGNAL(clicked()),
-            this, SLOT(on_browseDirButtonClicked()));
-
-
-    dialogButtons_ = new QDialogButtonBox(this);
-    dialogButtons_->setStandardButtons(QDialogButtonBox::Ok
-                                       | QDialogButtonBox::Apply
-                                       | QDialogButtonBox::Cancel);
 
-    verticalBox->addWidget(dialogButtons_);
 
-    connect(dialogButtons_, SIGNAL(clicked(QAbstractButton*)),
-            this, SLOT(on_buttonClicked(QAbstractButton*)));
-
-    // Set saved preference values to fields.
-    ReadSettings();
+PreferencesDialog::PreferencesDialog(QWidget* parent, Qt::WindowFlags f, QtRapidsServer *server) :
+               QDialog(parent, f), // Superclass
+               dirLineEdit_(NULL),
+               dialogButtons_(NULL),
+               uploadRateSpinBox_(NULL),
+               downloadRateSpinBox_(NULL),
+               server_(server),
+               settings_()
+{
+       setWindowTitle("Preferences");
+
+       QBoxLayout *verticalBox = new QBoxLayout(QBoxLayout::TopToBottom);
+       //QBoxLayout *horizontalBox1 = new QBoxLayout(QBoxLayout::LeftToRight);
+       QGridLayout *grid = new QGridLayout;
+       setLayout(verticalBox);
+       verticalBox->addLayout(grid);
+
+       QLabel *dirLabel = new QLabel(tr("Download directory: "));
+       dirLineEdit_ = new QLineEdit(this);
+       QPushButton *browseDirButton = new QPushButton(tr("Browse.."));
+       
+       QLabel *uploadLabel = new QLabel(tr("Max. upload rate: "));
+       QLabel *downloadLabel = new QLabel(tr("Max. download rate: "));
+       uploadRateSpinBox_ = new QSpinBox(this);
+       downloadRateSpinBox_ = new QSpinBox(this);
+       
+       grid->addWidget(dirLabel, 0, 0);
+       grid->addWidget(dirLineEdit_, 0, 1);
+       grid->addWidget(browseDirButton, 0, 2);
+       
+       grid->addWidget(uploadLabel, 1, 0);
+       grid->addWidget(uploadRateSpinBox_, 1, 1);
+       grid->addWidget(downloadLabel, 2, 0);
+       grid->addWidget(downloadRateSpinBox_, 2, 1);
+       
+       uploadRateSpinBox_->setRange(0, 1000);
+       uploadRateSpinBox_->setSuffix(" kB/s");
+       downloadRateSpinBox_->setRange(0, 1000);
+       downloadRateSpinBox_->setSuffix(" kB/s");
+       
+//     horizontalBox1->addWidget(dirLabel);
+//     horizontalBox1->addWidget(dirLineEdit_);
+//     horizontalBox1->addWidget(browseDirButton);
+
+       connect(browseDirButton, SIGNAL(clicked()),
+               this, SLOT(on_browseDirButtonClicked()));
+
+
+       dialogButtons_ = new QDialogButtonBox(this);
+       dialogButtons_->setStandardButtons(QDialogButtonBox::Ok
+                                          | QDialogButtonBox::Apply
+                                          | QDialogButtonBox::Cancel);
+
+       verticalBox->addWidget(dialogButtons_);
+
+       connect(dialogButtons_, SIGNAL(clicked(QAbstractButton*)),
+               this, SLOT(on_buttonClicked(QAbstractButton*)));
+
+       // Set saved preference values to fields.
+       ReadSettings();
 
 }
 
@@ -76,68 +102,94 @@ PreferencesDialog::~PreferencesDialog()
 // ======================== SLOTS ========================
 void PreferencesDialog::on_browseDirButtonClicked()
 {
-    QFileDialog *dialog
-    = new QFileDialog(this, "Download directory",
-                      QString(), tr("Torrent files (*.torrent)"));
-
-    dialog->setFileMode(QFileDialog::Directory);
-    dialog->setOption(QFileDialog::ShowDirsOnly, true);
-
-    connect(dialog, SIGNAL(fileSelected(const QString&)),
-            this, SLOT(on_downloadDirectorySelected(const QString&)));
-
-    dialog->show();
+       QString dir = QFileDialog::getExistingDirectory(this, tr("Download directory"), QString(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+       on_downloadDirectorySelected(dir);
+       
+       /*
+       QFileDialog *dialog
+       = new QFileDialog(this, "Download directory",
+                         QString(), tr("Torrent files (*.torrent)"));
+
+       dialog->setFileMode(QFileDialog::Directory);
+       dialog->setOption(QFileDialog::ShowDirsOnly, true);
+
+       connect(dialog, SIGNAL(fileSelected(const QString&)),
+               this, SLOT(on_downloadDirectorySelected(const QString&)));
+
+       dialog->show();
+       */
 }
 
 void PreferencesDialog::on_buttonClicked(QAbstractButton* button)
 {
-    switch (dialogButtons_->buttonRole ( button ) )
-    {
-    case QDialogButtonBox::AcceptRole :
-        qDebug() << "PreferencesDialog: OK";
-        WriteSettings();
-        close();
-        break;
-    case QDialogButtonBox::ApplyRole :
-        qDebug() << "PreferencesDialog: APPLY";
-        WriteSettings();
-        break;
-    case QDialogButtonBox::RejectRole :
-        qDebug() << "PreferencesDialog: CANCEL";
-        close();
-        break;
-    default:
-        return;
-    }
+       switch (dialogButtons_->buttonRole ( button ) ) {
+       case QDialogButtonBox::AcceptRole :
+               qDebug() << "PreferencesDialog: OK";
+               WriteSettings();
+               done(QDialog::Accepted);
+               break;
+       case QDialogButtonBox::ApplyRole :
+               qDebug() << "PreferencesDialog: APPLY";
+               WriteSettings();
+               break;
+       case QDialogButtonBox::RejectRole :
+               qDebug() << "PreferencesDialog: CANCEL";
+               done(QDialog::Rejected);
+               break;
+       default:
+               return;
+       }
 }
 
-void PreferencesDialog::on_downloadDirectorySelected(const QString& directory)
+void PreferencesDialog::on_downloadDirectorySelected(QString directory)
 {
-    qDebug() << "PreferencesDialog::on_downloadDirectorySelected(): " << directory;
-    // Torrent filename empty, do nothing.
-    if (directory == "")
-        return;
+       qDebug() << "PreferencesDialog::on_downloadDirectorySelected(): " << directory;
+       // Torrent filename empty, do nothing.
+       if (directory == "")
+               return;
 
-    dirLineEdit_->insert(directory);
+       dirLineEdit_->clear();
+       dirLineEdit_->insert(directory);
 
-    /// @todo check that user has privileges to write to this directory.
+       /// @todo check that user has privileges to write to this directory.
 }
 
 
 // ========================= Private functions ==========================
 void PreferencesDialog::WriteSettings()
 {
-    settings_.setValue("download/directory", dirLineEdit_->text());
-
-    // NOTE: We might need to call QSettigns::sync() here to instantly write settings.
-    // settings are written also by QSettings() destructor and by event loop at regular interval.
+       int ulRate = 1000*uploadRateSpinBox_->value();
+       int dlRate = 1000*downloadRateSpinBox_->value();
+       
+       settings_.setValue("download/directory", dirLineEdit_->text());
+       //settings_.setValue("net/uploadRate", ulRate);
+       //settings_.setValue("net/downloadRate", dlRate);
+       
+       // NOTE: We might need to call QSettigns::sync() here to instantly write settings.
+       // settings are written also by QSettings() destructor and by event loop at regular interval.
+       
+       // If server pointer was given, apply settings immediately.
+       if (server_) {
+               /// @todo Use DBus interface
+               /// @todo Set parameters for server
+               /// @todo Add speedlimit functionality to Server.
+               qtrapids::ParamsMap_t options;
+               options["net/downloadRate"] = QString::number(dlRate);
+               options["net/uploadRate"] = QString::number(ulRate);
+               server_->setOptions(options);
+//             btSession_->setUploadRateLimit(ulRate);
+//             btSession_->setDownloadRateLimit(dlRate);
+       }
+       
 }
 
 void PreferencesDialog::ReadSettings()
 {
-    dirLineEdit_->insert(settings_.value("download/directory").toString());
-
-    // NOTE: We might need to call QSettigns::sync() here to instantly write settings.
-    // settings are written also by QSettings() destructor and by event loop at regular interval.
+       dirLineEdit_->insert(settings_.value("download/directory").toString());
+       uploadRateSpinBox_->setValue(settings_.value("net/uploadRate").toInt()/1000);
+       downloadRateSpinBox_->setValue(settings_.value("net/downloadRate").toInt()/1000);
+       
+       // NOTE: We might need to call QSettigns::sync() here to instantly write settings.
+       // settings are written also by QSettings() destructor and by event loop at regular interval.
 }