Some fixes to connection manager.
[jenirok] / src / gui / mainwindow.cpp
index 9b0f459..83df365 100644 (file)
 #include <QtGui/QWidget>
 #include <QtGui/QHBoxLayout>
 #include <QtGui/QMessageBox>
+#include <QtGui/QDialogButtonBox>
+#include <QtGui/QTextEdit>
+#include <QtCore/QDebug>
 #include <QMaemo5InformationBox>
-#include <QDebug>
 #include "mainwindow.h"
 #include "settingsdialog.h"
 #include "searchdialog.h"
 #include "daemon.h"
 #include "settings.h"
 #include "db.h"
+#include "source.h"
+#include "sourcecoreconfig.h"
 
 namespace
 {
@@ -39,7 +43,8 @@ namespace
 
 MainWindow::MainWindow(QWidget* parent): QMainWindow(parent),
 searchResults_(0), settingsDialog_(0), running_(false),
-toggleButton_(0), searchDialog_(0), aboutDialog_(0)
+toggleButton_(0), searchDialog_(0), aboutDialog_(0), warning_(0),
+logWindow_(0)
 {
     setWindowTitle(tr("Jenirok"));
     setAttribute(Qt::WA_Maemo5StackedWindow);
@@ -58,21 +63,35 @@ toggleButton_(0), searchDialog_(0), aboutDialog_(0)
         running_ = false;
     }
 
+    QSizePolicy policy;
+
+    policy.setHorizontalPolicy(QSizePolicy::Preferred);
+
+    toggleButton_->setSizePolicy(policy);
+
     QToolButton* searchButton = createButton(tr("Search"));
     searchButton->setIcon(QIcon::fromTheme("general_search"));
+    searchButton->setSizePolicy(policy);
+
+    QToolButton* logButton = createButton(tr("Log"));
+    logButton->setIcon(QIcon::fromTheme("general_call"));
+    logButton->setSizePolicy(policy);
 
     QSize size(64, 64);
     searchButton->setIconSize(size);
     toggleButton_->setIconSize(size);
+    logButton->setIconSize(size);
 
     QHBoxLayout *buttonLayout = new QHBoxLayout;
-    buttonLayout->addWidget(toggleButton_, Qt::AlignLeft);
-    buttonLayout->addWidget(searchButton, Qt::AlignRight);
+    buttonLayout->addWidget(toggleButton_, Qt::AlignHCenter);
+    buttonLayout->addWidget(searchButton, Qt::AlignHCenter);
+    buttonLayout->addWidget(logButton, Qt::AlignHCenter);
 
     mainWidget->setLayout(buttonLayout);
 
     connect(toggleButton_, SIGNAL(pressed()), this, SLOT(toggleDaemon()));
     connect(searchButton, SIGNAL(pressed()), this, SLOT(openSearch()));
+    connect(logButton, SIGNAL(pressed()), this, SLOT(openLog()));
 
     setCentralWidget(mainWidget);
     menuBar()->addAction(tr("Settings"), this, SLOT(showSettings()));
@@ -86,9 +105,19 @@ MainWindow::~MainWindow()
 
 void MainWindow::showSettings()
 {
+    if(warning_ && warning_->isVisible())
+    {
+        warning_->hide();
+    }
+
     if(!settingsDialog_)
     {
         settingsDialog_ = new SettingsDialog(this);
+
+        if(searchDialog_)
+        {
+            connect(settingsDialog_, SIGNAL(saved()), searchDialog_, SLOT(loadSearchTypes()));
+        }
     }
 
     settingsDialog_->show();
@@ -110,6 +139,33 @@ void MainWindow::toggleDaemon()
     }
     else
     {
+        if(Settings::instance()->getConnectionType() == Settings::ALWAYS_ASK)
+        {
+            if(!warning_)
+            {
+                warning_ = new QDialog(this);
+                warning_->setWindowTitle(tr("Unable to start daemon"));
+                QHBoxLayout* warningLayout = new QHBoxLayout;
+                QTextEdit* text = new QTextEdit(tr("Daemon cannot be started because it's not allowed to connect to the Internet. You have to either allow automatic Internet connection in Jenirok settings or in global Maemo settings."));
+                text->setReadOnly(true);
+                QDialogButtonBox* buttons = new QDialogButtonBox;
+                buttons->setOrientation(Qt::Vertical);
+                QPushButton* settingsButton = new QPushButton(tr("Open settings"));
+                connect(settingsButton, SIGNAL(pressed()), this, SLOT(showSettings()));
+                QPushButton* okButton = new QPushButton(tr("Close"));
+                connect(okButton, SIGNAL(pressed()), warning_, SLOT(hide()));
+                buttons->addButton(settingsButton, QDialogButtonBox::YesRole);
+                buttons->addButton(okButton, QDialogButtonBox::AcceptRole);
+                warningLayout->addWidget(text);
+                warningLayout->addWidget(buttons);
+                warning_->setLayout(warningLayout);
+            }
+
+            warning_->show();
+
+            return;
+        }
+
         readyText = tr("Daemon was successfully started.");
         failText = tr("Unable to start daemon.");
         buttonText = tr("Stop daemon");
@@ -122,7 +178,7 @@ void MainWindow::toggleDaemon()
     }
     else
     {
-        QMaemo5InformationBox::information(this, readyText);
+        QMaemo5InformationBox::information(this, readyText, 800);
         toggleButton_->setText(buttonText);
         toggleButton_->setIcon(QIcon(running_ ? START_ICON : CLOSE_ICON));
         running_ = !running_;
@@ -130,30 +186,59 @@ void MainWindow::toggleDaemon()
 
 }
 
-void MainWindow::openSearch()
+void MainWindow::openSearch(QString const& str)
 {
-    DB::connect();
+    Source::SourceId sourceId = Source::stringToId(Settings::instance()->get("source"));
+    SourceCoreConfig* config = SourceCoreConfig::getCoreConfig(sourceId);
 
-    QString username = Settings::instance()->get("eniro_username");
-    QString password = Settings::instance()->get("eniro_password");
+    Q_ASSERT(config != 0);
 
-    DB::disconnect();
+    bool readyToSearch = config->readyToSearch();
+    delete config;
 
-    if(username.isEmpty() || password.isEmpty())
+    if(!readyToSearch)
     {
-        QMessageBox::information(this, tr("Info"), tr("You need to set Eniro login details in settings before using this feature."));
+        QMessageBox::information(this, tr("Info"), tr("You need to set login details or other options in settings before using this feature."));
         return;
     }
 
     if(!searchDialog_)
     {
         searchDialog_ = new SearchDialog(this);
-        connect(searchDialog_, SIGNAL(search(SearchDialog::SearchDetails&)), this, SLOT(handleSearch(SearchDialog::SearchDetails&)));
+        connect(searchDialog_, SIGNAL(search(SearchDialog::SearchDetails&)),
+                this, SIGNAL(search(SearchDialog::SearchDetails&)));
+
+        if(settingsDialog_)
+        {
+            connect(settingsDialog_, SIGNAL(saved()), searchDialog_, SLOT(loadSearchTypes()));
+        }
+    }
+
+    if(!str.isEmpty())
+    {
+        searchDialog_->setSearchString(str);
+    }
+
+    if(logWindow_ && logWindow_->isVisible())
+    {
+        logWindow_->hide();
     }
 
     searchDialog_->show();
 }
 
+void MainWindow::openLog()
+{
+    if(!logWindow_)
+    {
+        logWindow_ = new LogWindow(this);
+        connect(logWindow_, SIGNAL(logItemSelected(Source::Result const&)), this, SIGNAL(logItemSelected(Source::Result const&)));
+        connect(logWindow_, SIGNAL(openSearch(QString const&)), this, SLOT(openSearch(QString const&)));
+    }
+
+    logWindow_->show();
+}
+
 QToolButton* MainWindow::createButton(QString const& text)
 {
     QToolButton* button = new QToolButton();
@@ -162,18 +247,13 @@ QToolButton* MainWindow::createButton(QString const& text)
     return button;
 }
 
-void MainWindow::handleSearch(SearchDialog::SearchDetails& details)
-{
-    emit search(details);
-}
-
 void MainWindow::showAbout()
 {
-       if(!aboutDialog_)
-       {
-               aboutDialog_ = new AboutDialog(this);
-       }
+    if(!aboutDialog_)
+    {
+        aboutDialog_ = new AboutDialog(this);
+    }
 
-       aboutDialog_->show();
+    aboutDialog_->show();
 
 }