X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fconnectdialog.cpp;h=cdb064f1c6e6f4118ea9aeb74c0afa46e28be3cd;hb=7be757b100891df56c7c35dda45942aa0606ad2a;hp=21df3a5ea8dc97abd3d3e038715882e52d86fa3e;hpb=b65b14653f1737633bba662828874a5478316e40;p=presencevnc diff --git a/src/connectdialog.cpp b/src/connectdialog.cpp index 21df3a5..cdb064f 100644 --- a/src/connectdialog.cpp +++ b/src/connectdialog.cpp @@ -18,6 +18,11 @@ */ #include +#ifdef Q_WS_MAEMO_5 +#include +#include +#endif + #include "connectdialog.h" #include @@ -32,33 +37,46 @@ ConnectDialog::ConnectDialog(QWidget *parent): //read history settings.beginGroup("hosts"); QStringList hostnames = settings.childGroups(); - QStringList hostnames_sorted = hostnames; + QMap hosts_map; //use position as key foreach(QString hostname, hostnames) { if(!settings.contains(hostname + "/position")) { - //can happen when host was given as a command line argument, don't show those - hostnames_sorted.removeAll(hostname); - continue; + continue; //can happen when host was given as a command line argument, don't show those } int position = settings.value(hostname + "/position").toInt(); - if(position < 0) - position = 0; - else if(position >= hostnames_sorted.size()) - position = hostnames_sorted.size()-1; - - hostnames_sorted.replace(position, hostname); + hosts_map.insert(position, hostname); } + hostnames_sorted = hosts_map.values(); //sorted by ascending position settings.endGroup(); //set up combobox hosts.addItems(hostnames_sorted); hosts.setEditable(true); +#ifdef Q_WS_MAEMO_5 + hosts.lineEdit()->setInputMethodHints(Qt::ImhNoAutoUppercase); //somehow this doesn't work that well here +#endif connect(&hosts, SIGNAL(editTextChanged(QString)), - this, SLOT(cleanHostname(QString))); + this, SLOT(hostnameUpdated(QString))); layout.addWidget(&hosts); - QPushButton *done = new QPushButton(tr("Done")); - done->setMaximumWidth(100); +#ifdef Q_WS_MAEMO_5 + QMaemo5ValueButton *quality = new QMaemo5ValueButton(tr("Quality"), this); + quality_selector = new QMaemo5ListPickSelector(this); + QStandardItemModel *model = new QStandardItemModel(0, 1, this); + model->appendRow(new QStandardItem(tr("High\t\t(LAN)"))); //1 + model->appendRow(new QStandardItem(tr("Medium\t(DSL)"))); //2 + model->appendRow(new QStandardItem(tr("Low\t\t(ISDN)"))); //3 + quality_selector->setModel(model); + quality->setPickSelector(quality_selector); + quality->setValueLayout(QMaemo5ValueButton::ValueUnderText); + quality->setMaximumWidth(120); + layout.addWidget(quality); + + hostnameUpdated(hosts.lineEdit()->text()); //get saved quality for last host, or 2 +#endif + + QPushButton *done = new QPushButton(tr("Connect")); + done->setMaximumWidth(110); connect(done, SIGNAL(clicked()), this, SLOT(accept())); layout.addWidget(done); @@ -66,55 +84,64 @@ ConnectDialog::ConnectDialog(QWidget *parent): setLayout(&layout); } -void ConnectDialog::cleanHostname(QString newtext) +void ConnectDialog::hostnameUpdated(QString newtext) { + //clean up hostname newtext.remove(QChar('/')); newtext.remove(QChar('\\')); + int cursorpos = hosts.lineEdit()->cursorPosition(); hosts.lineEdit()->setText(newtext.toLower()); + hosts.lineEdit()->setCursorPosition(cursorpos); + +#ifdef Q_WS_MAEMO_5 + //saved quality setting available? + QSettings settings; + int quality = settings.value(QString("hosts/%1/quality").arg(hosts.lineEdit()->text()), 2).toInt(); + if(quality < 1 or quality > 3) + quality = 2; + quality_selector->setCurrentIndex(quality-1); +#endif } void ConnectDialog::accept() { QDialog::accept(); - if(hosts.currentText().isEmpty()) { + QString selected_host = hosts.currentText(); + if(selected_host.isEmpty()) { deleteLater(); return; } - //save url? QSettings settings; settings.beginGroup("hosts"); - bool new_item = !settings.contains(hosts.currentText()); + bool new_item = !hostnames_sorted.contains(selected_host); bool used_old_host = !new_item and hosts.currentIndex() > 0; - int rearrange_up_to_pos; - if(new_item) { - std::cout << "adding new item to history\n"; - rearrange_up_to_pos = hosts.count(); //use free index - } else if(used_old_host) { - rearrange_up_to_pos = hosts.currentIndex(); - } + //if both are false, we don't need to mess with positions if(new_item or used_old_host) { - std::cout << "rearranging history, last index " << rearrange_up_to_pos << "\n"; + //put selected_host at the top + settings.setValue(QString("%1/position").arg(selected_host), 0); - QStringList hostnames = settings.childGroups(); - foreach(QString hostname, hostnames) { - if(!settings.contains(hostname + "/position")) - continue; //ignore entries without position + //don't create duplicates + if(used_old_host) + hostnames_sorted.removeAll(selected_host); - int position = settings.value(hostname + "/position").toInt(); - if(position < rearrange_up_to_pos) - settings.setValue(hostname + "/position", position+1); - } - //position 0 is now free - - //move selected host to front - settings.setValue(QString("%1/position").arg(hosts.currentText()), 0); + //now rebuild list for positions >= 1 + for(int i = 0; i < hostnames_sorted.size(); i++) + settings.setValue(QString("%1/position").arg(hostnames_sorted.at(i)), i+1); } + +#ifdef Q_WS_MAEMO_5 + int quality = quality_selector->currentIndex() + 1; + settings.setValue(QString("%1/quality").arg(selected_host), quality); +#else + int quality = 2; +#endif + settings.endGroup(); settings.sync(); - emit connectToHost(QString("vnc://") + hosts.currentText()); + emit connectToHost(QString("vnc://%1").arg(selected_host), quality); deleteLater(); }