Improvements to structure and behavior of AdvSettingsDlg.
authorJari Jarvi <t7jaja00@students.oamk.fi>
Thu, 27 May 2010 13:32:06 +0000 (16:32 +0300)
committerJari Jarvi <t7jaja00@students.oamk.fi>
Thu, 27 May 2010 13:32:06 +0000 (16:32 +0300)
SettingsTable for displaying and modifying list of key-value pairs.

src/advsettingsdlg.cpp
src/advsettingsdlg.h
src/settingstable.cpp [new file with mode: 0644]
src/settingstable.h [new file with mode: 0644]
src/src.pro

index 134c5ed..b990f25 100644 (file)
@@ -1,37 +1,39 @@
-#include <QGridLayout>
-#include <QHeaderView>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
 #include <QSettings>
-#include <QProgressBar>
 #include <QPushButton>
 #include <QMessageBox>
-#include <QTableWidget>
 
 #include "advsettingsdlg.h"
+#include "settingstable.h"
 
 AdvSettingsDlg::AdvSettingsDlg(QDialog *parent)
     : QDialog(parent)
     , layout(NULL)
+    , btnLayout(NULL)
     , settings(NULL)
     , resetBtn(NULL)
     , saveBtn(NULL)
     , table(NULL)
 {
-    settings = new QSettings(this);
     setWindowTitle(tr("Advanced settings"));
+    setMinimumHeight(320);
 
+    settings = new QSettings(this);
     resetBtn = new QPushButton(tr("Defaults"), this);
     saveBtn = new QPushButton(tr("Save"), this);
-    table = new QTableWidget(0, 2, this);
-    table->verticalHeader()->setVisible(false);
-    table->horizontalHeader()->setVisible(false);
+    table = new SettingsTable(this);
+    layout = new QHBoxLayout(this);
+    btnLayout = new QVBoxLayout();
+
     connect(resetBtn, SIGNAL(clicked()), this, SLOT(resetToDefaults()));
     connect(saveBtn, SIGNAL(clicked()), this, SLOT(save()));
 
-    layout = new QGridLayout(this);
-    layout->addWidget(table, 0, 0, 2, 3);
-    layout->addWidget(resetBtn, 0, 4);
-    layout->addWidget(saveBtn, 1, 4);
-    setLayout(layout);
+    btnLayout->addWidget(resetBtn);
+    btnLayout->addWidget(saveBtn);
+    layout->addWidget(table, Qt::AlignLeft);
+    layout->addLayout(btnLayout, 0);
+
     refreshList();
 }
 
@@ -48,40 +50,28 @@ void AdvSettingsDlg::save()
 {
     for (int i = 0; i < table->rowCount(); ++i)
     {
-        settings->setValue(table->item(i, 0)->text(),
-                           table->item(i, 1)->text());
+        settings->setValue(table->key(i), table->value(i));
     }
-    this->done(0);
+    done(0); // close dialog
 }
 
-int AdvSettingsDlg::refreshList()
+void AdvSettingsDlg::refreshList()
 {
-    table->clear();
-    table->setRowCount(0);
+    table->removeAllRows();
 
     QStringList keys = settings->allKeys();
-
     for (int i = 0; i < keys.size(); ++i)
     {
-        QTableWidgetItem *key = new QTableWidgetItem(keys.at(i));
-        QTableWidgetItem *value = new QTableWidgetItem(
-                    settings->value(keys.at(i), "n/a").toString());
-        key->setFlags(Qt::NoItemFlags | Qt::ItemIsEnabled);
-        value->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable);
-        table->insertRow(table->rowCount());
-        table->setItem(i, 0, key);
-        table->setItem(i, 1, value);
+        table->appendRow(keys.at(i),
+                settings->value(keys.at(i), "n/a").toString());
     }
-    table->resizeColumnsToContents();
 }
 
-
 void AdvSettingsDlg::resetToDefaults()
 {
     QMessageBox mbox(QMessageBox::Question, "",
             tr("All settings will be reset to defaults"),
-            QMessageBox::Ok, this); // Cancel by clicking outside the
-                                    // messagebox in maemo
+            QMessageBox::Cancel | QMessageBox::Ok, this); 
     if (mbox.exec() == QMessageBox::Ok)
     {
         settings->setValue("lircPort", 8765);
@@ -101,4 +91,3 @@ void AdvSettingsDlg::resetToDefaults()
     }
 }
 
-
index 41b21a0..df02c25 100644 (file)
@@ -6,8 +6,9 @@
 
 class QSettings;
 class QPushButton;
-class QGridLayout;
-class QTableWidget;
+class QVBoxLayout;
+class QHBoxLayout;
+class SettingsTable;
 
 class AdvSettingsDlg : public QDialog
 {
@@ -18,18 +19,19 @@ public:
     ~AdvSettingsDlg();
 
 private:
-    int refreshList();
+    void refreshList();
 
 private slots:
     void resetToDefaults();
     void save();
 
 private:
-    QGridLayout *layout;
+    QHBoxLayout *layout;
+    QVBoxLayout *btnLayout;
     QSettings *settings;
     QPushButton *resetBtn;
     QPushButton *saveBtn;
-    QTableWidget *table;
+    SettingsTable *table;
 };
 
 #endif // _ADVSETTINGSDLG_H_
diff --git a/src/settingstable.cpp b/src/settingstable.cpp
new file mode 100644 (file)
index 0000000..2553192
--- /dev/null
@@ -0,0 +1,48 @@
+#include <QResizeEvent>
+#include <QHeaderView>
+#include "settingstable.h"
+
+SettingsTable::SettingsTable(QWidget *parent)
+    : QTableWidget(0, 2, parent) // Always two columns. Key and value.
+{
+    verticalHeader()->setVisible(false);
+    horizontalHeader()->setVisible(false);
+}
+
+SettingsTable::~SettingsTable()
+{
+}
+
+void SettingsTable::appendRow(const QString &key, const QString &value)
+{
+    QTableWidgetItem *k = new QTableWidgetItem(key);
+    QTableWidgetItem *v = new QTableWidgetItem(value);
+    k->setFlags(Qt::NoItemFlags | Qt::ItemIsEnabled);
+    v->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable);
+    insertRow(rowCount());
+    setItem(rowCount() - 1, 0, k);
+    setItem(rowCount() - 1, 1, v);
+}
+
+void SettingsTable::removeAllRows()
+{
+    clear();
+    setRowCount(0);
+}
+
+void SettingsTable::resizeEvent(QResizeEvent *e)
+{
+    setColumnWidth(0, (e->size().width() / 3) - 10);
+    setColumnWidth(1, (2 * e->size().width() / 3) - 10);
+}
+
+QString SettingsTable::key(unsigned int row) const
+{
+    return item(row, 0)->text();
+}
+
+QString SettingsTable::value(unsigned int row) const
+{
+    return item(row, 1)->text();
+}
+
diff --git a/src/settingstable.h b/src/settingstable.h
new file mode 100644 (file)
index 0000000..44c05c3
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _SETTINGSTABLE_H_
+#define _SETTINGSTABLE_H_
+
+#include <QTableWidget>
+
+class QResizeEvent;
+
+class SettingsTable : public QTableWidget
+{
+public:
+    SettingsTable(QWidget *parent = 0);
+    ~SettingsTable();
+    void appendRow(const QString &key, const QString &value);
+    void removeAllRows();
+    QString key(unsigned int row) const;
+    QString value(unsigned int row) const;
+
+protected:
+    void resizeEvent(QResizeEvent *);
+};
+
+#endif // _SETTINGSTABLE_H_
+
index 0255df4..1c69bdb 100644 (file)
@@ -8,6 +8,7 @@ SOURCES += irctrl_p.cpp
 SOURCES += settingsdlg.cpp
 SOURCES += selectremotedlg.cpp
 SOURCES += advsettingsdlg.cpp
+SOURCES += settingstable.cpp
 
 HEADERS += mainwidget.h
 HEADERS += irctrl.h
@@ -15,6 +16,8 @@ HEADERS += irctrl_p.h
 HEADERS += settingsdlg.h
 HEADERS += selectremotedlg.h
 HEADERS += advsettingsdlg.h
+HEADERS += settingstable.h
+
 
 include(qmaemo5homescreenadaptor/qmaemo5homescreenadaptor.pri)