From 3475fc385712f62db968dbe22334ffbb133cc26c Mon Sep 17 00:00:00 2001 From: Thorvald Natvig Date: Wed, 7 Sep 2005 17:25:24 +0000 Subject: [PATCH] Add changes file Add persistant storage of server lists git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@85 05730e5d-ab1b-0410-a4ac-84af385074fa --- CHANGES | 6 ++ ConnectDialog.cpp | 146 ++++++++++++++++++++++++++++++++++++++----- ConnectDialog.h | 14 ++++- MainWindow.cpp | 1 + MainWindow.h | 1 - installer/Mumble.nsi | 2 + mumble.pri | 2 +- 7 files changed, 153 insertions(+), 19 deletions(-) create mode 100644 CHANGES diff --git a/CHANGES b/CHANGES new file mode 100644 index 000000000..647b55dcf --- /dev/null +++ b/CHANGES @@ -0,0 +1,6 @@ +0.2.2cvs +======== + +- Store list of servers in connect dialog +- Added persistant database +- Added CHANGES file diff --git a/ConnectDialog.cpp b/ConnectDialog.cpp index a60d8ab34..0fb836728 100644 --- a/ConnectDialog.cpp +++ b/ConnectDialog.cpp @@ -37,8 +37,14 @@ #include #include #include +#include +#include +#include +#include +#include ConnectDialog::ConnectDialog(QWidget *parent) : QDialog(parent) { + QSqlQuery query; QGridLayout *l=new QGridLayout; QVBoxLayout *vbl = new QVBoxLayout; QHBoxLayout *vbh = new QHBoxLayout(); @@ -48,47 +54,106 @@ ConnectDialog::ConnectDialog(QWidget *parent) : QDialog(parent) { setLayout(vbl); QLabel *lab; + bDirty = false; + +/* query.exec("DELETE FROM servers"); + query.exec("INSERT INTO servers (name, hostname) VALUES('Hei1','Mixern1')"); + query.exec("INSERT INTO servers (name, hostname) VALUES('Hei3','Mixern3')"); + query.exec("INSERT INTO servers (name, hostname) VALUES('Hei2','Mixern2')"); +*/ + qstmServers = new QSqlTableModel(this); + qstmServers->setTable("servers"); + qstmServers->setSort(1, Qt::AscendingOrder); + if (! qstmServers->select()) { + query.exec("DROP TABLE servers"); + if (! query.exec("CREATE TABLE servers (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, hostname TEXT, port INTEGER DEFAULT 64738, username TEXT, password TEXT)")) + qWarning("ConnectDialog: Failed to create table"); + +// delete qstmServers; +// qstmServers = new QSqlTableModel(this); + qstmServers->setTable("servers"); + if (! qstmServers->select()) + qWarning("ConnectDialog: Failed to reselect table"); + qWarning("%s", qstmServers->lastError().databaseText().toLatin1().constData()); + } + qstmServers->setEditStrategy(QSqlTableModel::OnManualSubmit); + QSettings qs; + qlwServers=new QListView(this); + l->addWidget(qlwServers,0,0,4,1); + qlwServers->setModel(qstmServers); + qlwServers->setModelColumn(1); + qlwServers->setEditTriggers(QAbstractItemView::NoEditTriggers); + qlwServers->setObjectName("List"); + + QItemSelectionModel *selectionModel = qlwServers->selectionModel(); + connect(selectionModel, SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(onSelection_Changed(const QModelIndex &, const QModelIndex &))); + + qleName=new QLineEdit(qs.value("ServerName", "").toString(), this); + lab=new QLabel("&Name", this); + lab->setBuddy(qleName); + + l->addWidget(lab, 0, 1); + l->addWidget(qleName, 0, 2); + qleServer=new QLineEdit(qs.value("ServerAddress", "").toString(), this); - lab=new QLabel("&Address", this); + lab=new QLabel("A&ddress", this); lab->setBuddy(qleServer); - l->addWidget(lab, 0, 0); - l->addWidget(qleServer, 0, 1); + l->addWidget(lab, 1, 1); + l->addWidget(qleServer, 1, 2); qlePort=new QLineEdit(qs.value("ServerPort", "64738").toString(), this); qlePort->setValidator(new QIntValidator(1, 65535, qlePort)); lab=new QLabel("&Port", this); lab->setBuddy(qlePort); - l->addWidget(lab, 1, 0); - l->addWidget(qlePort, 1, 1); + l->addWidget(lab, 2, 1); + l->addWidget(qlePort, 2, 2); + + qleUsername=new QLineEdit(qs.value("ServerUsername", "").toString(), this); + lab=new QLabel("&Username", this); + lab->setBuddy(qleUsername); + + l->addWidget(lab, 3, 1); + l->addWidget(qleUsername, 3, 2); qlePassword=new QLineEdit(qs.value("ServerPassword", "").toString(), this); qlePassword->setEchoMode(QLineEdit::Password); lab=new QLabel("&Password", this); lab->setBuddy(qlePassword); - l->addWidget(lab, 2, 0); - l->addWidget(qlePassword, 2,1); + l->addWidget(lab, 4, 1); + l->addWidget(qlePassword, 4,2); - qleUsername=new QLineEdit(qs.value("ServerUsername", "").toString(), this); - lab=new QLabel("&Username", this); - lab->setBuddy(qleUsername); - - l->addWidget(lab, 3, 0); - l->addWidget(qleUsername, 3, 1); - - QPushButton *okButton = new QPushButton("&OK"); + QPushButton *okButton = new QPushButton("&Connect"); okButton->setDefault(true); connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); - QPushButton *cancelButton = new QPushButton("&Cancel"); + QPushButton *cancelButton = new QPushButton("Cancel"); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); + QPushButton *addButton = new QPushButton("&Add"); + addButton->setObjectName("Add"); + + QPushButton *removeButton = new QPushButton("&Remove"); + removeButton->setObjectName("Remove"); + vbh->addWidget(okButton); vbh->addWidget(cancelButton); + vbh->addWidget(addButton); + vbh->addWidget(removeButton); + + connect(qleName, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); + connect(qleServer, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); + connect(qleUsername, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); + connect(qlePassword, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); + connect(qlePort, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); + + connect(qlwServers, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(accept())); + + QMetaObject::connectSlotsByName(this); } void ConnectDialog::accept() { @@ -105,3 +170,52 @@ void ConnectDialog::accept() { QDialog::accept(); } + +QSqlRecord ConnectDialog::toRecord() const +{ + QSqlRecord r = qstmServers->record(); + r.setValue("name", qleName->text()); + r.setValue("hostname", qleServer->text()); + r.setValue("username", qleUsername->text()); + r.setValue("password", qlePassword->text()); + r.setValue("port", qlePort->text().toInt()); + return r; +} + +void ConnectDialog::onSelection_Changed(const QModelIndex &index, const QModelIndex &previndex) +{ + QSqlRecord r; + + if (bDirty) { + r = toRecord(); + qstmServers->setRecord(previndex.row(), r); + qstmServers->submitAll(); + } + r = qstmServers->record(index.row()); + qleName->setText(r.value("name").toString()); + qleServer->setText(r.value("hostname").toString()); + qleUsername->setText(r.value("username").toString()); + qlePassword->setText(r.value("password").toString()); + qlePort->setText(r.value("port").toString()); + bDirty = false; +} + +void ConnectDialog::on_Add_clicked() +{ + QSqlRecord r = toRecord(); + qstmServers->insertRecord(-1, r); + qstmServers->submitAll(); + bDirty = false; +} + +void ConnectDialog::on_Remove_clicked() +{ + int row=qlwServers->currentIndex().row(); + qstmServers->removeRows(qlwServers->currentIndex().row(), 1, QModelIndex()); + qstmServers->submitAll(); + qWarning("Dumped %d", row); +} + +void ConnectDialog::onDirty(const QString &) { + bDirty = true; +} diff --git a/ConnectDialog.h b/ConnectDialog.h index 11ef1545f..38560b0d3 100644 --- a/ConnectDialog.h +++ b/ConnectDialog.h @@ -33,13 +33,25 @@ #include #include +#include +#include +#include class ConnectDialog : public QDialog { Q_OBJECT; protected: - QLineEdit *qleServer, *qlePort, *qleUsername, *qlePassword; + QSqlTableModel *qstmServers; + QListView *qlwServers; + QLineEdit *qleName, *qleServer, *qlePort, *qleUsername, *qlePassword; + QModelIndex qmiDirty; + QSqlRecord toRecord() const; + bool bDirty; public slots: void accept(); + void on_Add_clicked(); + void on_Remove_clicked(); + void onSelection_Changed(const QModelIndex &n, const QModelIndex &p); + void onDirty(const QString &); public: QString qsServer, qsUsername, qsPassword; int iPort; diff --git a/MainWindow.cpp b/MainWindow.cpp index 5f9385dcb..06f8056e4 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -35,6 +35,7 @@ #include "MainWindow.h" #include "AudioInput.h" #include "Settings.h" +#include "ConnectDialog.h" MainWindow *g_mwMainWindow; diff --git a/MainWindow.h b/MainWindow.h index 4e4523355..d53860432 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -40,7 +40,6 @@ #include "Connection.h" #include "ServerHandler.h" #include "About.h" -#include "ConnectDialog.h" #include "GlobalShortcut.h" #include "TextToSpeech.h" diff --git a/installer/Mumble.nsi b/installer/Mumble.nsi index c342222e6..e5ef5ba57 100644 --- a/installer/Mumble.nsi +++ b/installer/Mumble.nsi @@ -67,6 +67,7 @@ Section "Mumble & Murmur" SecMumble File /oname=license.txt "..\LICENSE" File /oname=Readme.txt "..\README" + File /oname=Changes.txt "..\CHANGES" File "speex.txt" File "qt.txt" File "..\release\mumble.exe" @@ -116,6 +117,7 @@ Section "Uninstall" Delete "$INSTDIR\QtSql4.dll" Delete "$INSTDIR\libspeex.dll" Delete "$INSTDIR\mingwm10.dll" + Delete "$INSTDIR\Changes.txt" Delete "$INSTDIR\qt.txt" Delete "$INSTDIR\speex.txt" Delete "$INSTDIR\Readme.txt" diff --git a/mumble.pri b/mumble.pri index ecd2b2f64..89aa27325 100644 --- a/mumble.pri +++ b/mumble.pri @@ -1,5 +1,5 @@ VERSION = 0.2.1 -DIST = LICENSE INSTALL README mumble.pro murmur.pro mumble.pri mumble.ico +DIST = LICENSE INSTALL README CHANGES mumble.pro murmur.pro mumble.pri mumble.ico CONFIG += qt thread debug_and_release CONFIG(debug, debug|release) {