X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fnicklistwidget.cpp;h=aae3288127056c17dd0de3be567185fa81c5afad;hp=a47cc6e45aed273c969e15a542892472e163b8c5;hb=a700bd999215313b075ced5a1e3ba4ea8917fbbc;hpb=73abdb11acdff97882a489c7bf98eb53967c2c6f diff --git a/src/qtui/nicklistwidget.cpp b/src/qtui/nicklistwidget.cpp index a47cc6e4..aae32881 100644 --- a/src/qtui/nicklistwidget.cpp +++ b/src/qtui/nicklistwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,52 +20,48 @@ #include "nicklistwidget.h" -#include "nickview.h" +#include +#include +#include +#include + +#include "buffermodel.h" #include "client.h" #include "networkmodel.h" -#include "buffermodel.h" +#include "nickview.h" #include "nickviewfilter.h" #include "qtuisettings.h" -#include -#include -#include -#include - -NickListWidget::NickListWidget(QWidget *parent) +NickListWidget::NickListWidget(QWidget* parent) : AbstractItemView(parent) { ui.setupUi(this); } - -QDockWidget *NickListWidget::dock() const +QDockWidget* NickListWidget::dock() const { - QDockWidget *dock = qobject_cast(parent()); + auto* dock = qobject_cast(parent()); if (dock) return dock; else - return 0; + return nullptr; } - -void NickListWidget::hideEvent(QHideEvent *event) +void NickListWidget::hideEvent(QHideEvent* event) { emit nickSelectionChanged(QModelIndexList()); AbstractItemView::hideEvent(event); } - -void NickListWidget::showEvent(QShowEvent *event) +void NickListWidget::showEvent(QShowEvent* event) { - NickView *view = qobject_cast(ui.stackedWidget->currentWidget()); + auto* view = qobject_cast(ui.stackedWidget->currentWidget()); if (view) emit nickSelectionChanged(view->selectedIndexes()); AbstractItemView::showEvent(event); } - void NickListWidget::showWidget(bool visible) { if (!selectionModel()) @@ -73,7 +69,7 @@ void NickListWidget::showWidget(bool visible) QModelIndex currentIndex = selectionModel()->currentIndex(); if (currentIndex.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer) { - QDockWidget *dock_ = dock(); + QDockWidget* dock_ = dock(); if (!dock_) return; @@ -87,7 +83,7 @@ void NickListWidget::showWidget(bool visible) void NickListWidget::setVisible(bool visible) { QWidget::setVisible(visible); - QDockWidget *dock_ = dock(); + QDockWidget* dock_ = dock(); if (!dock_) return; @@ -97,8 +93,7 @@ void NickListWidget::setVisible(bool visible) dock_->close(); } - -void NickListWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) +void NickListWidget::currentChanged(const QModelIndex& current, const QModelIndex& previous) { BufferInfo::Type bufferType = (BufferInfo::Type)current.data(NetworkModel::BufferTypeRole).toInt(); BufferId newBufferId = current.data(NetworkModel::BufferIdRole).value(); @@ -111,46 +106,45 @@ void NickListWidget::currentChanged(const QModelIndex ¤t, const QModelInde } // See NickListDock::NickListDock() below -// if(bufferType != BufferInfo::ChannelBuffer) { -// ui.stackedWidget->setCurrentWidget(ui.emptyPage); -// QDockWidget *dock_ = dock(); -// if(dock_) { -// dock_->close(); -// } -// return; -// } else { -// QDockWidget *dock_ = dock(); -// if(dock_ && dock_->toggleViewAction()->isChecked()) { -// dock_->show(); -// } -// } + // if(bufferType != BufferInfo::ChannelBuffer) { + // ui.stackedWidget->setCurrentWidget(ui.emptyPage); + // QDockWidget *dock_ = dock(); + // if(dock_) { + // dock_->close(); + // } + // return; + // } else { + // QDockWidget *dock_ = dock(); + // if(dock_ && dock_->toggleViewAction()->isChecked()) { + // dock_->show(); + // } + // } if (newBufferId == oldBufferId) return; - NickView *view; + NickView* view; if (nickViews.contains(newBufferId)) { view = nickViews.value(newBufferId); ui.stackedWidget->setCurrentWidget(view); } 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(sender()); + auto* view = qobject_cast(sender()); Q_ASSERT(view); if (view != ui.stackedWidget->currentWidget()) { qDebug() << "Nick selection of hidden view changed!"; @@ -159,32 +153,35 @@ void NickListWidget::nickSelectionChanged() emit nickSelectionChanged(view->selectedIndexes()); } - -void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) +void NickListWidget::rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) { Q_ASSERT(model()); if (!parent.isValid()) { // ok this means that whole networks are about to be removed // we can't determine which buffers are affect, so we hope that all nets are removed // this is the most common case (for example disconnecting from the core or terminating the clint) - NickView *nickView; - QHash::iterator iter = nickViews.begin(); + NickView* nickView; + QHash::iterator iter = nickViews.begin(); while (iter != nickViews.end()) { nickView = *iter; iter = nickViews.erase(iter); ui.stackedWidget->removeWidget(nickView); - QAbstractItemModel *model = nickView->model(); - nickView->setModel(0); - if (QSortFilterProxyModel *filter = qobject_cast(model)) - filter->setSourceModel(0); + QAbstractItemModel* model = nickView->model(); + nickView->setModel(nullptr); + if (auto* filter = qobject_cast(model)) + filter->setSourceModel(nullptr); model->deleteLater(); nickView->deleteLater(); } } else { // check if there are explicitly buffers removed + // Make sure model is valid first + if (!parent.model()) { + return; + } for (int i = start; i <= end; i++) { - QVariant variant = parent.child(i, 0).data(NetworkModel::BufferIdRole); + QVariant variant = parent.model()->index(i, 0, parent).data(NetworkModel::BufferIdRole); if (!variant.isValid()) continue; @@ -194,53 +191,59 @@ void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, } } - void NickListWidget::removeBuffer(BufferId bufferId) { if (!nickViews.contains(bufferId)) return; - NickView *view = nickViews.take(bufferId); + NickView* view = nickViews.take(bufferId); ui.stackedWidget->removeWidget(view); - QAbstractItemModel *model = view->model(); - view->setModel(0); - if (QSortFilterProxyModel *filter = qobject_cast(model)) - filter->setSourceModel(0); + QAbstractItemModel* model = view->model(); + view->setModel(nullptr); + if (auto* filter = qobject_cast(model)) + filter->setSourceModel(nullptr); model->deleteLater(); view->deleteLater(); } - QSize NickListWidget::sizeHint() const { - QWidget *currentWidget = ui.stackedWidget->currentWidget(); + QWidget* currentWidget = ui.stackedWidget->currentWidget(); if (!currentWidget || currentWidget == ui.emptyPage) - return QSize(100, height()); + return {100, height()}; else return currentWidget->sizeHint(); } - // ============================== // NickList Dock // ============================== -NickListDock::NickListDock(const QString &title, QWidget *parent) +NickListDock::NickListDock(const QString& title, QWidget* parent) : QDockWidget(title, parent) { // THIS STUFF IS NEEDED FOR NICKLIST AUTOHIDE... // AS THIS BRINGS LOTS OF FUCKUPS WITH IT IT'S DEACTIVATED FOR NOW... -// QAction *toggleView = toggleViewAction(); -// disconnect(toggleView, SIGNAL(triggered(bool)), this, 0); -// toggleView->setChecked(QtUiSettings().value("ShowNickList", QVariant(true)).toBool()); + // QAction *toggleView = toggleViewAction(); + // disconnect(toggleView, SIGNAL(triggered(bool)), this, 0); + // toggleView->setChecked(QtUiSettings().value("ShowNickList", QVariant(true)).toBool()); -// // reconnecting the closebuttons clicked signal to the action -// foreach(QAbstractButton *button, findChildren()) { -// if(disconnect(button, SIGNAL(clicked()), this, SLOT(close()))) -// connect(button, SIGNAL(clicked()), toggleView, SLOT(trigger())); -// } + // // reconnecting the closebuttons clicked signal to the action + // foreach(QAbstractButton *button, findChildren()) { + // if(disconnect(button, SIGNAL(clicked()), this, SLOT(close()))) + // connect(button, SIGNAL(clicked()), toggleView, SLOT(trigger())); + // } } +void NickListDock::setLocked(bool locked) +{ + if (locked) { + setFeatures({}); + } + else { + setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); + } +} // NickListDock::~NickListDock() { // QtUiSettings().setValue("ShowNickList", toggleViewAction()->isChecked());