uisupport: Provide helpers for dealing with widget changes
[quassel.git] / src / qtui / nicklistwidget.cpp
index 674e89d..7d683e6 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  *
@@ -41,11 +41,11 @@ NickListWidget::NickListWidget(QWidget *parent)
 
 QDockWidget *NickListWidget::dock() const
 {
-    QDockWidget *dock = qobject_cast<QDockWidget *>(parent());
+    auto *dock = qobject_cast<QDockWidget *>(parent());
     if (dock)
         return dock;
     else
-        return 0;
+        return nullptr;
 }
 
 
@@ -58,7 +58,7 @@ void NickListWidget::hideEvent(QHideEvent *event)
 
 void NickListWidget::showEvent(QShowEvent *event)
 {
-    NickView *view = qobject_cast<NickView *>(ui.stackedWidget->currentWidget());
+    auto *view = qobject_cast<NickView *>(ui.stackedWidget->currentWidget());
     if (view)
         emit nickSelectionChanged(view->selectedIndexes());
 
@@ -84,6 +84,19 @@ void NickListWidget::showWidget(bool visible)
     }
 }
 
+void NickListWidget::setVisible(bool visible)
+{
+    QWidget::setVisible(visible);
+    QDockWidget *dock_ = dock();
+    if (!dock_)
+        return;
+
+    if (visible)
+        dock_->show();
+    else
+        dock_->close();
+}
+
 
 void NickListWidget::currentChanged(const QModelIndex &current, const QModelIndex &previous)
 {
@@ -122,22 +135,22 @@ void NickListWidget::currentChanged(const QModelIndex &current, const QModelInde
     }
     else {
         view = new NickView(this);
-        NickViewFilter *filter = new NickViewFilter(newBufferId, Client::networkModel());
+        auto *filter = new NickViewFilter(newBufferId, Client::networkModel());
         view->setModel(filter);
         QModelIndex source_current = Client::bufferModel()->mapToSource(current);
         view->setRootIndex(filter->mapFromSource(source_current));
         nickViews[newBufferId] = view;
         ui.stackedWidget->addWidget(view);
         ui.stackedWidget->setCurrentWidget(view);
-        connect(view, SIGNAL(selectionUpdated()), SLOT(nickSelectionChanged()));
+        connect(view, &NickView::selectionUpdated, this, &NickListWidget::onNickSelectionChanged);
     }
     emit nickSelectionChanged(view->selectedIndexes());
 }
 
 
-void NickListWidget::nickSelectionChanged()
+void NickListWidget::onNickSelectionChanged()
 {
-    NickView *view = qobject_cast<NickView *>(sender());
+    auto *view = qobject_cast<NickView *>(sender());
     Q_ASSERT(view);
     if (view != ui.stackedWidget->currentWidget()) {
         qDebug() << "Nick selection of hidden view changed!";
@@ -161,9 +174,9 @@ void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start,
             iter = nickViews.erase(iter);
             ui.stackedWidget->removeWidget(nickView);
             QAbstractItemModel *model = nickView->model();
-            nickView->setModel(0);
-            if (QSortFilterProxyModel *filter = qobject_cast<QSortFilterProxyModel *>(model))
-                filter->setSourceModel(0);
+            nickView->setModel(nullptr);
+            if (auto *filter = qobject_cast<QSortFilterProxyModel *>(model))
+                filter->setSourceModel(nullptr);
             model->deleteLater();
             nickView->deleteLater();
         }
@@ -175,7 +188,7 @@ void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start,
             if (!variant.isValid())
                 continue;
 
-            BufferId bufferId = qVariantValue<BufferId>(variant);
+            BufferId bufferId = variant.value<BufferId>();
             removeBuffer(bufferId);
         }
     }
@@ -190,9 +203,9 @@ void NickListWidget::removeBuffer(BufferId bufferId)
     NickView *view = nickViews.take(bufferId);
     ui.stackedWidget->removeWidget(view);
     QAbstractItemModel *model = view->model();
-    view->setModel(0);
-    if (QSortFilterProxyModel *filter = qobject_cast<QSortFilterProxyModel *>(model))
-        filter->setSourceModel(0);
+    view->setModel(nullptr);
+    if (auto *filter = qobject_cast<QSortFilterProxyModel *>(model))
+        filter->setSourceModel(nullptr);
     model->deleteLater();
     view->deleteLater();
 }
@@ -202,7 +215,7 @@ QSize NickListWidget::sizeHint() const
 {
     QWidget *currentWidget = ui.stackedWidget->currentWidget();
     if (!currentWidget || currentWidget == ui.emptyPage)
-        return QSize(100, height());
+        return {100, height()};
     else
         return currentWidget->sizeHint();
 }
@@ -228,6 +241,14 @@ NickListDock::NickListDock(const QString &title, QWidget *parent)
 //   }
 }
 
+void NickListDock::setLocked(bool locked) {
+    if (locked) {
+        setFeatures(nullptr);
+    }
+    else {
+        setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
+    }
+}
 
 // NickListDock::~NickListDock() {
 //   QtUiSettings().setValue("ShowNickList", toggleViewAction()->isChecked());