Semi-yearly copyright bump
[quassel.git] / src / qtui / settingsdlg.cpp
index 11a8bca..748c1ff 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
+#include <QIcon>
 #include <QMessageBox>
 #include <QPushButton>
 
 #include "settingsdlg.h"
 
 #include "client.h"
-#include "iconloader.h"
 
 SettingsDlg::SettingsDlg(QWidget *parent)
     : QDialog(parent),
@@ -33,7 +33,7 @@ SettingsDlg::SettingsDlg(QWidget *parent)
     ui.setupUi(this);
     setModal(true);
     setAttribute(Qt::WA_DeleteOnClose, true);
-    setWindowIcon(SmallIcon("configure"));
+    setWindowIcon(QIcon::fromTheme("configure"));
 
     updateGeometry();
 
@@ -45,6 +45,22 @@ SettingsDlg::SettingsDlg(QWidget *parent)
     connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), SLOT(coreConnectionStateChanged()));
 
     setButtonStates();
+
+    // Some settings panes can take a good bit of space.  To avoid squashing the settings tree, try
+    // to resize the dialog.  If needed, it can always be resized by the user to take less space.
+    //
+    // Only try to resize if the sizes are valid.  This shouldn't happen.. but better to be safe.
+    // See http://www.qtcentre.org/threads/3427-invalid-sizeHint()
+    if (ui.settingsTree->sizeHint().isValid() && ui.settingsTree->size().isValid()) {
+        // Find out how much width would make the settings tree happy
+        int wantedExtraWidth = ui.settingsTree->sizeHint().width()
+                - ui.settingsTree->size().width();
+        // If more space is needed, try to resize to allow for it.  Qt should keep the dialog within
+        // the bounds of the screen.
+        if (wantedExtraWidth > 0) {
+            this->resize(this->width() + wantedExtraWidth, this->height());
+        }
+    }
 }
 
 
@@ -65,7 +81,9 @@ void SettingsDlg::setItemState(QTreeWidgetItem *item)
 {
     SettingsPage *sp = qobject_cast<SettingsPage *>(item->data(0, SettingsPageRole).value<QObject *>());
     Q_ASSERT(sp);
-    item->setDisabled(!Client::isConnected() && sp->needsCoreConnection());
+    bool disabledDueToConnection = !Client::isConnected() && sp->needsCoreConnection();
+    bool disabledDueToOwnChoice = !sp->isSelectable();
+    item->setDisabled(disabledDueToConnection || disabledDueToOwnChoice);
 }