add history to connect dialog
authorchristian <christian@christian-laptop.(none)>
Tue, 17 Aug 2010 20:02:07 +0000 (22:02 +0200)
committerchristian <christian@christian-laptop.(none)>
Tue, 17 Aug 2010 20:02:07 +0000 (22:02 +0200)
src/connectdialog.cpp
src/connectdialog.h
src/mainwindow.cpp
src/mainwindow.h
src/preferences.cpp

index 5cbad65..91790d7 100644 (file)
 
 #include "connectdialog.h"
 
+#include <iostream>
+
 
 ConnectDialog::ConnectDialog(QWidget *parent):
        QDialog(parent)
 {
-       setWindowTitle("Connect to Host");
+       setWindowTitle(tr("Connect to VNC Server"));
        QSettings settings;
 
-       QHBoxLayout *layout1 = new QHBoxLayout();
-       QVBoxLayout *layout2 = new QVBoxLayout();
-
-       hostname = new QLineEdit(settings.value("last_hostname", "").toString(), this);
-       hostname->setInputMethodHints(Qt::ImhLowercaseOnly); //doesn't work, but I tried.
-       layout2->addWidget(hostname);
+       int i = 0;
+       for(;;) { //read history
+               QString hostname = settings.value(QString("host%1").arg(i), "").toString();
+               if(hostname.isEmpty())
+                       break;
 
-       QPushButton *ok = new QPushButton("Done");
-       ok->setMaximumWidth(100);
+               hosts.addItem(hostname);
+               i++;
+       }
+       hosts.setEditable(true);
+       hosts.lineEdit()->setInputMethodHints(Qt::ImhLowercaseOnly); //doesn't work, but I tried.
+       connect(&hosts, SIGNAL(editTextChanged(QString)),
+               this, SLOT(convertToLowercase(QString)));
+       layout.addWidget(&hosts);
 
-       layout1->addLayout(layout2);
-       layout1->addWidget(ok);
+       QPushButton *done = new QPushButton(tr("Done"));
+       done->setMaximumWidth(100);
+       connect(done, SIGNAL(clicked()),
+               this, SLOT(accept()));
+       layout.addWidget(done);
 
-       setLayout(layout1);
+       setLayout(&layout);
+}
 
-       connect(ok, SIGNAL(clicked()),
-               this, SLOT(accept()));
-       connect(hostname, SIGNAL(textEdited()),
-               this, SLOT(convertToLowercase()));
+void ConnectDialog::convertToLowercase(QString newtext)
+{
+       hosts.lineEdit()->setText(newtext.toLower());
 }
 
-QString ConnectDialog::getUrl()
+void ConnectDialog::accept()
 {
+       QDialog::accept();
+
+       if(hosts.currentText().isEmpty()) {
+               deleteLater();
+               return;
+       }
+
+       //save url?
        QSettings settings;
-       settings.setValue("last_hostname", hostname->text());
-       settings.sync();
+       bool new_item = hosts.itemText(hosts.currentIndex()) != hosts.currentText();
+       bool used_old_host = !new_item and hosts.currentIndex() > 0;
+       int rearrange_from_idx;
+       if(new_item) {
+               std::cout << "adding new item to history\n";
+               int i = 0;
+               for(;;) { //find first unused key
+                       QString hostname = settings.value(QString("host%1").arg(i), "").toString();
+                       if(hostname.isEmpty())
+                               break;
+                       i++;
+               }
+               rearrange_from_idx = i;
+       } else if(used_old_host) {
+               rearrange_from_idx = hosts.currentIndex();
+       }
 
-       return QString("vnc://") + hostname->text();
-}
+       if(new_item or used_old_host) {
+               std::cout << "rearranging history,  last index " << rearrange_from_idx << "\n";
 
-void ConnectDialog::convertToLowercase()
-{
-       hostname->setText(hostname->text().toLower());
+               for(int i = rearrange_from_idx-1; i >= 0; i--) { //increment index for each entry newer than the selected one
+                       QString hostname = settings.value(QString("host%1").arg(i), "").toString();
+                       settings.setValue(QString("host%1").arg(i+1), hostname);
+               }
+               settings.setValue(QString("host0"), hosts.currentText());
+       }
+
+       emit connectToHost(QString("vnc://") + hosts.currentText());
+       deleteLater();
 }
index 4237f92..ee1e7cb 100644 (file)
@@ -26,10 +26,14 @@ class ConnectDialog : public QDialog {
        Q_OBJECT
 public:
        ConnectDialog(QWidget *parent);
-       QString getUrl();
+public slots:
+       virtual void accept();
+signals:
+       void connectToHost(QString url);
 private slots:
-       void convertToLowercase();
+       void convertToLowercase(QString newtext);
 private:
-       QLineEdit *hostname;
+       QHBoxLayout layout;
+       QComboBox hosts;
 };
 #endif
index 1671c80..d0f5299 100644 (file)
@@ -155,23 +155,14 @@ A touchscreen friendly VNC client\
 
 void MainWindow::showConnectDialog()
 {
-       /*
-       QSettings settings;
-       QString url = QInputDialog::getText(this, "Connect to Host", "VNC Server:", QLineEdit::Normal, settings.value("last_hostname", "").toString());
-       if(url.isEmpty()) { //dialog dismissed or nothing entered
-               return;
-       }
-       */
-
        ConnectDialog *connect_dialog = new ConnectDialog(this);
-       if(!connect_dialog->exec()) { //dialog rejected
-               delete connect_dialog;
-               return;
-       }
-
-       QString url = connect_dialog->getUrl();
-       delete connect_dialog;
+       connect(connect_dialog, SIGNAL(connectToHost(QString)),
+               this, SLOT(connectToHost(QString)));
+       connect_dialog->exec();
+}
 
+void MainWindow::connectToHost(QString url)
+{
        disconnectFromHost();
 
        vnc_view = new VncView(this, url, RemoteView::Quality(2)); //TODO: get quality in dialog
index 2551e58..a160167 100644 (file)
@@ -31,6 +31,7 @@ public:
 public slots:
        void about();
        void showConnectDialog();
+       void connectToHost(QString url);
        void disconnectFromHost();
        void forceResize();
        void forceResizeDelayed();
index 8f6cc9b..4e15e00 100644 (file)
@@ -28,7 +28,7 @@ void migrateConfiguration()
 {
        QSettings settings;
        int config_ver = settings.value("config_version", 0).toInt();
-       if(config_ver == 1) //config file up-to-date
+       if(config_ver == 2) //config file up-to-date
                return;
 
        std::cout << "Migrating from configuration ver. " << config_ver << "\n";
@@ -42,6 +42,14 @@ void migrateConfiguration()
                        settings.setValue("left_zoom", right_zoom+1);
                config_ver = 1;
        }
+       if(config_ver == 1) {
+               QString last_hostname = settings.value("last_hostname", "").toString();
+               settings.remove("last_hostname");
+               if(!last_hostname.isEmpty())
+                       settings.setValue("host0", last_hostname);
+               
+               config_ver = 2;
+       }
        settings.setValue("config_version", config_ver);
        settings.sync();
 }
@@ -95,7 +103,7 @@ Preferences::Preferences(QWidget *parent):
        disable_tapping->setChecked(settings.value("disable_tapping", false).toBool());
        layout2->addWidget(disable_tapping);
 
-       QPushButton *ok = new QPushButton("Done");
+       QPushButton *ok = new QPushButton(tr("Done"));
        ok->setMaximumWidth(100);
 
        layout1->addLayout(layout2);