X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fuisupport%2Fbufferview.cpp;h=2127bcc6af24e6d1b1784019d2ac181825019826;hb=2fd8e1c1d5a04b167ffa73e9c011fd34faebe1fc;hp=d0921466749cc9abb626c5e3190f5507454433e1;hpb=81b65f9fe655e291ae7b547fd8b649791cddf41e;p=quassel.git diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index d0921466..2127bcc6 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -28,6 +28,7 @@ #include #include #include +#include #include "action.h" #include "buffermodel.h" @@ -45,9 +46,9 @@ * The TreeView showing the Buffers *****************************************/ // Please be carefull when reimplementing methods which are used to inform the view about changes to the data -// to be on the safe side: call QTreeView's method aswell +// to be on the safe side: call QTreeView's method aswell (or TreeViewTouch's) BufferView::BufferView(QWidget *parent) - : QTreeView(parent) + : TreeViewTouch(parent) { connect(this, SIGNAL(collapsed(const QModelIndex &)), SLOT(storeExpandedState(const QModelIndex &))); connect(this, SIGNAL(expanded(const QModelIndex &)), SLOT(storeExpandedState(const QModelIndex &))); @@ -104,7 +105,7 @@ void BufferView::setModel(QAbstractItemModel *model) { delete selectionModel(); - QTreeView::setModel(model); + TreeViewTouch::setModel(model); init(); // remove old Actions QList oldactions = header()->actions(); @@ -158,21 +159,6 @@ void BufferView::setFilteredModel(QAbstractItemModel *model_, BufferViewConfig * } -void BufferView::setSelectionModel(QItemSelectionModel *selectionModel) -{ - if (QTreeView::selectionModel()) - disconnect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), - model(), SIGNAL(checkPreviousCurrentForRemoval(QModelIndex, QModelIndex))); - - QTreeView::setSelectionModel(selectionModel); - BufferViewFilter *filter = qobject_cast(model()); - if (filter) { - connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), - filter, SLOT(checkPreviousCurrentForRemoval(QModelIndex, QModelIndex))); - } -} - - void BufferView::setConfig(BufferViewConfig *config) { if (_config == config) @@ -232,7 +218,7 @@ void BufferView::keyPressEvent(QKeyEvent *event) event->accept(); removeSelectedBuffers(); } - QTreeView::keyPressEvent(event); + TreeViewTouch::keyPressEvent(event); } @@ -247,23 +233,23 @@ void BufferView::dropEvent(QDropEvent *event) const int margin = 2; if (cursorPos.y() - indexRect.top() < margin || indexRect.bottom() - cursorPos.y() < margin) - return QTreeView::dropEvent(event); + return TreeViewTouch::dropEvent(event); QList > bufferList = Client::networkModel()->mimeDataToBufferList(event->mimeData()); if (bufferList.count() != 1) - return QTreeView::dropEvent(event); + return TreeViewTouch::dropEvent(event); BufferId bufferId2 = bufferList[0].second; if (index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType) - return QTreeView::dropEvent(event); + return TreeViewTouch::dropEvent(event); if (index.data(NetworkModel::BufferTypeRole) != BufferInfo::QueryBuffer) - return QTreeView::dropEvent(event); + return TreeViewTouch::dropEvent(event); BufferId bufferId1 = index.data(NetworkModel::BufferIdRole).value(); if (bufferId1 == bufferId2) - return QTreeView::dropEvent(event); + return TreeViewTouch::dropEvent(event); int res = QMessageBox::question(0, tr("Merge buffers permanently?"), tr("Do you want to merge the buffer \"%1\" permanently into buffer \"%2\"?\n This cannot be reversed!").arg(Client::networkModel()->bufferName(bufferId2)).arg(Client::networkModel()->bufferName(bufferId1)), @@ -303,7 +289,7 @@ void BufferView::removeSelectedBuffers(bool permanently) void BufferView::rowsInserted(const QModelIndex &parent, int start, int end) { - QTreeView::rowsInserted(parent, start, end); + TreeViewTouch::rowsInserted(parent, start, end); // ensure that newly inserted network nodes are expanded per default if (parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType) @@ -391,11 +377,11 @@ void BufferView::setExpandedState(const QModelIndex &networkIdx) #if QT_VERSION < 0x050000 void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { - QTreeView::dataChanged(topLeft, bottomRight); + TreeViewTouch::dataChanged(topLeft, bottomRight); #else void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) { - QTreeView::dataChanged(topLeft, bottomRight, roles); + TreeViewTouch::dataChanged(topLeft, bottomRight, roles); #endif // determine how many items have been changed and if any of them is a networkitem @@ -535,7 +521,7 @@ void BufferView::changeBuffer(Direction direction) void BufferView::wheelEvent(QWheelEvent *event) { if (ItemViewSettings().mouseWheelChangesBuffer() == (bool)(event->modifiers() & Qt::AltModifier)) - return QTreeView::wheelEvent(event); + return TreeViewTouch::wheelEvent(event); int rowDelta = (event->delta() > 0) ? -1 : 1; changeBuffer((Direction)rowDelta); @@ -563,13 +549,23 @@ void BufferView::hideCurrentBuffer() config()->requestRemoveBuffer(bufferId); } +void BufferView::filterTextChanged(QString filterString) +{ + BufferViewFilter *filter = qobject_cast(model()); + if (!filter) { + return; + } + filter->setFilterString(filterString); + on_configChanged(); // make sure collapsation is correct +} + QSize BufferView::sizeHint() const { - return QTreeView::sizeHint(); + return TreeViewTouch::sizeHint(); if (!model()) - return QTreeView::sizeHint(); + return TreeViewTouch::sizeHint(); if (model()->rowCount() == 0) return QSize(120, 50); @@ -646,6 +642,9 @@ bool BufferViewDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, c // ============================== BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent) : QDockWidget(parent), + _childWidget(0), + _widget(new QWidget(parent)), + _filterEdit(new QLineEdit(parent)), _active(false), _title(config->bufferViewName()) { @@ -654,6 +653,14 @@ BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent) setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea); connect(config, SIGNAL(bufferViewNameSet(const QString &)), this, SLOT(bufferViewRenamed(const QString &))); updateTitle(); + + _widget->setLayout(new QVBoxLayout); + _widget->layout()->setSpacing(0); + _widget->layout()->setContentsMargins(0, 0, 0, 0); + _filterEdit->setVisible(config->showSearch()); // hide it here, so we don't flicker or somesuch + _filterEdit->setPlaceholderText(tr("Search...")); + _widget->layout()->addWidget(_filterEdit); + QDockWidget::setWidget(_widget); } @@ -665,6 +672,14 @@ void BufferViewDock::updateTitle() setWindowTitle(title); } +void BufferViewDock::configChanged() +{ + _filterEdit->setVisible(config()->showSearch()); + + if (!_filterEdit->isVisible()) { + _filterEdit->setText(QLatin1String("")); + } +} void BufferViewDock::setActive(bool active) { @@ -706,3 +721,11 @@ BufferViewConfig *BufferViewDock::config() const else return view->config(); } + +void BufferViewDock::setWidget(QWidget *newWidget) +{ + _widget->layout()->addWidget(newWidget); + _childWidget = newWidget; + + connect(_filterEdit, SIGNAL(textChanged(QString)), bufferView(), SLOT(filterTextChanged(QString))); +}