#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();
}
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
{
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";
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();
}
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);