Tuned the settings dialog a bit, mostly fixing the layout problems we had and adding
authorManuel Nickschas <sputnick@quassel-irc.org>
Sun, 5 Aug 2007 21:24:58 +0000 (21:24 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 5 Aug 2007 21:24:58 +0000 (21:24 +0000)
functionality.
It should now be possible to register settings pages and use them in the settings dialog.
A settings page is a QWidget implementing the SettingsInterface as defined in plugin.h.
Currently, these are defined in settingspages.* (which may change... maybe it'd be a good
idea to put all settings related stuff in an extra dir below qtgui/?)

src/plugins/plugin.h
src/qtgui/mainwin.cpp
src/qtgui/settingsdlg.cpp
src/qtgui/settingsdlg.h
src/qtgui/settingspages.cpp
src/qtgui/settingspages.h
src/qtgui/ui/settingsdlg.ui

index 826748c..b8c0d13 100644 (file)
@@ -67,6 +67,7 @@ class SettingsInterface {
     virtual QString category() = 0;
     virtual QString title() = 0; 
     virtual QWidget *settingsWidget() = 0;
     virtual QString category() = 0;
     virtual QString title() = 0; 
     virtual QWidget *settingsWidget() = 0;
+    virtual void applyChanges() = 0;
 
 };
 
 
 };
 
index 451e82a..5b19614 100644 (file)
@@ -117,10 +117,10 @@ void MainWin::setupViews() {
   connect(model, SIGNAL(bufferSelected(Buffer *)), this, SLOT(showBuffer(Buffer *)));
 
   addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QStringList());
   connect(model, SIGNAL(bufferSelected(Buffer *)), this, SLOT(showBuffer(Buffer *)));
 
   addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QStringList());
-  //addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QStringList());
-  //addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QStringList());
-  //addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QStringList());
-  //addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QStringList());
+  addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QStringList());
+  addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QStringList());
+  addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QStringList());
+  addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QStringList());
   
   ui.menuViews->addSeparator();
 }
   
   ui.menuViews->addSeparator();
 }
index 06aeb0b..33a6e41 100644 (file)
 SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) {
   ui.setupUi(this);
 
 SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) {
   ui.setupUi(this);
 
-  currentWidget = 0;
-
   ui.settingsFrame->setWidgetResizable(true);
   ui.settingsFrame->setWidgetResizable(true);
+  ui.settingsFrame->setWidget(ui.settingsStack);
   ui.settingsTree->setRootIsDecorated(false);
   ui.settingsTree->setRootIsDecorated(false);
+
+  connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(pageSelected()));
+  connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
 }
 
 void SettingsDlg::registerSettingsPage(SettingsInterface *sp) {
   QWidget *w = sp->settingsWidget();
   w->setParent(this);
 }
 
 void SettingsDlg::registerSettingsPage(SettingsInterface *sp) {
   QWidget *w = sp->settingsWidget();
   w->setParent(this);
-  ui.settingsFrame->setWidget(w);
+  ui.settingsStack->addWidget(w);
 
   QTreeWidgetItem *cat;
   QList<QTreeWidgetItem *> cats = ui.settingsTree->findItems(sp->category(), Qt::MatchExactly);
 
   QTreeWidgetItem *cat;
   QList<QTreeWidgetItem *> cats = ui.settingsTree->findItems(sp->category(), Qt::MatchExactly);
@@ -41,6 +43,39 @@ void SettingsDlg::registerSettingsPage(SettingsInterface *sp) {
     cat->setExpanded(true);
     cat->setFlags(Qt::ItemIsEnabled);
   } else cat = cats[0];
     cat->setExpanded(true);
     cat->setFlags(Qt::ItemIsEnabled);
   } else cat = cats[0];
-  new QTreeWidgetItem(cat, QStringList(sp->title()));
+  QTreeWidgetItem *p = new QTreeWidgetItem(cat, QStringList(sp->title()));
+  p->setData(0, Qt::UserRole, QVariant::fromValue(w));
+}
+
+void SettingsDlg::pageSelected() {
+  QList<QTreeWidgetItem *> items = ui.settingsTree->selectedItems();
+  if(!items.count()) {
+    return;
+  } else {
+    QWidget *sp = items[0]->data(0, Qt::UserRole).value<QWidget *>();
+    Q_ASSERT(sp);
+    ui.settingsStack->setCurrentWidget(sp);
+  }
+}
+
+void SettingsDlg::buttonClicked(QAbstractButton *button) {
+  switch(ui.buttonBox->buttonRole(button)) {
+    case QDialogButtonBox::AcceptRole:
+      applyChanges();
+      accept();
+      break;
+    case QDialogButtonBox::ApplyRole:
+      applyChanges();
+      break;
+    case QDialogButtonBox::RejectRole:
+      reject();
+      break;
+    default:
+      break;
+  }
+}
 
 
+void SettingsDlg::applyChanges() {
+  SettingsInterface *sp = qobject_cast<SettingsInterface *>(ui.settingsStack->currentWidget());
+  if(sp) sp->applyChanges();
 }
 }
index 12fac46..a52cbb6 100644 (file)
@@ -33,12 +33,14 @@ class SettingsDlg : public QDialog {
     void registerSettingsPage(SettingsInterface *);
     void unregisterSettingsPage(SettingsInterface *);
 
     void registerSettingsPage(SettingsInterface *);
     void unregisterSettingsPage(SettingsInterface *);
 
+  private slots:
+    void pageSelected();
+    void buttonClicked(QAbstractButton *);
+    void applyChanges();
 
   private:
     Ui::SettingsDlg ui;
 
 
   private:
     Ui::SettingsDlg ui;
 
-    QWidget *currentWidget;
-
 };
 
 /*
 };
 
 /*
index b67fd3a..9d550ca 100644 (file)
@@ -26,7 +26,7 @@ void MainWin::setupSettingsDlg() {
   settingsDlg->setVisible(false);
 
   settingsDlg->registerSettingsPage(new BufferManagementSettingsPage());
   settingsDlg->setVisible(false);
 
   settingsDlg->registerSettingsPage(new BufferManagementSettingsPage());
-  //settingsDlg->registerSettingsPage(new ConnectionSettingsPage());
+  settingsDlg->registerSettingsPage(new ConnectionSettingsPage());
 
 }
 
 
 }
 
@@ -38,8 +38,17 @@ BufferManagementSettingsPage::BufferManagementSettingsPage() {
   setEnabled(false);
 }
 
   setEnabled(false);
 }
 
+void BufferManagementSettingsPage::applyChanges() {
+
+
+}
+
 ConnectionSettingsPage::ConnectionSettingsPage() {
   ui.setupUi(this);
 
 }
 
 ConnectionSettingsPage::ConnectionSettingsPage() {
   ui.setupUi(this);
 
 }
 
+void ConnectionSettingsPage::applyChanges() {
+
+
+}
index f7d0f85..4e169b5 100644 (file)
@@ -31,6 +31,7 @@
 
 class BufferManagementSettingsPage : public QWidget, public SettingsInterface {
   Q_OBJECT
 
 class BufferManagementSettingsPage : public QWidget, public SettingsInterface {
   Q_OBJECT
+  Q_INTERFACES(SettingsInterface)
 
   public:
     QString category() { return tr("Buffers"); }
 
   public:
     QString category() { return tr("Buffers"); }
@@ -39,6 +40,8 @@ class BufferManagementSettingsPage : public QWidget, public SettingsInterface {
 
     BufferManagementSettingsPage();
 
 
     BufferManagementSettingsPage();
 
+    void applyChanges();
+
 
   private:
     Ui::BufferManagementSettingsPage ui;
 
   private:
     Ui::BufferManagementSettingsPage ui;
@@ -47,6 +50,7 @@ class BufferManagementSettingsPage : public QWidget, public SettingsInterface {
 
 class ConnectionSettingsPage : public QWidget, public SettingsInterface {
   Q_OBJECT
 
 class ConnectionSettingsPage : public QWidget, public SettingsInterface {
   Q_OBJECT
+  Q_INTERFACES(SettingsInterface)
 
   public:
     QString category() { return tr("Behavior"); }
 
   public:
     QString category() { return tr("Behavior"); }
@@ -55,6 +59,7 @@ class ConnectionSettingsPage : public QWidget, public SettingsInterface {
 
     ConnectionSettingsPage();
 
 
     ConnectionSettingsPage();
 
+    void applyChanges();
 
   private:
     Ui::ConnectionSettingsPage ui;
 
   private:
     Ui::ConnectionSettingsPage ui;
index a2097a4..8649999 100644 (file)
@@ -5,20 +5,14 @@
    <rect>
     <x>0</x>
     <y>0</y>
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>808</width>
-    <height>568</height>
+    <width>784</width>
+    <height>558</height>
    </rect>
   </property>
   <property name="windowTitle" >
    <string>Dialog</string>
   </property>
   <layout class="QVBoxLayout" >
    </rect>
   </property>
   <property name="windowTitle" >
    <string>Dialog</string>
   </property>
   <layout class="QVBoxLayout" >
-   <property name="margin" >
-    <number>9</number>
-   </property>
-   <property name="spacing" >
-    <number>6</number>
-   </property>
    <item>
     <widget class="QSplitter" name="splitter" >
      <property name="orientation" >
    <item>
     <widget class="QSplitter" name="splitter" >
      <property name="orientation" >
@@ -26,9 +20,7 @@
      </property>
      <widget class="QTreeWidget" name="settingsTree" >
       <property name="sizePolicy" >
      </property>
      <widget class="QTreeWidget" name="settingsTree" >
       <property name="sizePolicy" >
-       <sizepolicy>
-        <hsizetype>5</hsizetype>
-        <vsizetype>7</vsizetype>
+       <sizepolicy vsizetype="Expanding" hsizetype="MinimumExpanding" >
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
      </widget>
      <widget class="QScrollArea" name="settingsFrame" >
       <property name="sizePolicy" >
      </widget>
      <widget class="QScrollArea" name="settingsFrame" >
       <property name="sizePolicy" >
-       <sizepolicy>
-        <hsizetype>5</hsizetype>
-        <vsizetype>5</vsizetype>
+       <sizepolicy vsizetype="Preferred" hsizetype="MinimumExpanding" >
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="frameShape" >
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="frameShape" >
-       <enum>QFrame::StyledPanel</enum>
+       <enum>QFrame::NoFrame</enum>
       </property>
       <property name="frameShadow" >
       </property>
       <property name="frameShadow" >
-       <enum>QFrame::Raised</enum>
+       <enum>QFrame::Plain</enum>
       </property>
       </property>
+      <layout class="QVBoxLayout" >
+       <item>
+        <widget class="QStackedWidget" name="settingsStack" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Preferred" hsizetype="MinimumExpanding" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <widget class="QWidget" name="page" />
+        </widget>
+       </item>
+      </layout>
      </widget>
     </widget>
    </item>
      </widget>
     </widget>
    </item>
@@ -74,6 +77,7 @@
    <class>QScrollArea</class>
    <extends>QFrame</extends>
    <header>QScrollArea</header>
    <class>QScrollArea</class>
    <extends>QFrame</extends>
    <header>QScrollArea</header>
+   <container>1</container>
   </customwidget>
  </customwidgets>
  <resources/>
   </customwidget>
  </customwidgets>
  <resources/>