projects
/
quassel.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
07bda5a
)
Add buffer filtering support.
author
Martin T. H. Sandsmark
<martin.sandsmark@kde.org>
Sun, 14 Jun 2015 01:49:20 +0000
(
03:49
+0200)
committer
Manuel Nickschas
<sputnick@quassel-irc.org>
Mon, 5 Sep 2016 16:59:38 +0000
(18:59 +0200)
src/qtui/mainwin.cpp
patch
|
blob
|
history
src/uisupport/bufferview.cpp
patch
|
blob
|
history
src/uisupport/bufferview.h
patch
|
blob
|
history
src/uisupport/bufferviewfilter.cpp
patch
|
blob
|
history
src/uisupport/bufferviewfilter.h
patch
|
blob
|
history
diff --git
a/src/qtui/mainwin.cpp
b/src/qtui/mainwin.cpp
index
640b09c
..
b732a2c
100644
(file)
--- a/
src/qtui/mainwin.cpp
+++ b/
src/qtui/mainwin.cpp
@@
-722,7
+722,7
@@
BufferView *MainWin::activeBufferView() const
if (_activeBufferViewIndex < 0 || _activeBufferViewIndex >= _bufferViews.count())
return 0;
BufferViewDock *dock = _bufferViews.at(_activeBufferViewIndex);
if (_activeBufferViewIndex < 0 || _activeBufferViewIndex >= _bufferViews.count())
return 0;
BufferViewDock *dock = _bufferViews.at(_activeBufferViewIndex);
- return dock->isActive() ?
qobject_cast<BufferView *>(dock->widget()
) : 0;
+ return dock->isActive() ?
dock->bufferView(
) : 0;
}
}
@@
-731,9
+731,8
@@
void MainWin::changeActiveBufferView(int bufferViewId)
if (bufferViewId < 0)
return;
if (bufferViewId < 0)
return;
- BufferView *current = activeBufferView();
- if (current) {
- qobject_cast<BufferViewDock *>(current->parent())->setActive(false);
+ if (_activeBufferViewIndex >= 0 && _activeBufferViewIndex < _bufferViews.count()) {
+ _bufferViews[_activeBufferViewIndex]->setActive(false);
_activeBufferViewIndex = -1;
}
_activeBufferViewIndex = -1;
}
@@
-768,9
+767,9
@@
void MainWin::showPasswordChangeDlg()
void MainWin::changeActiveBufferView(bool backwards)
{
void MainWin::changeActiveBufferView(bool backwards)
{
- BufferView *current = activeBufferView();
- if (current)
- qobject_cast<BufferViewDock *>(current->parent())->setActive(false);
+ if (_activeBufferViewIndex >= 0 && _activeBufferViewIndex < _bufferViews.count()) {
+ _bufferViews[_activeBufferViewIndex]->setActive(false);
+ }
if (!_bufferViews.count())
return;
if (!_bufferViews.count())
return;
diff --git
a/src/uisupport/bufferview.cpp
b/src/uisupport/bufferview.cpp
index
da7d037
..
2127bcc
100644
(file)
--- a/
src/uisupport/bufferview.cpp
+++ b/
src/uisupport/bufferview.cpp
@@
-28,6
+28,7
@@
#include <QMenu>
#include <QMessageBox>
#include <QSet>
#include <QMenu>
#include <QMessageBox>
#include <QSet>
+#include <QVBoxLayout>
#include "action.h"
#include "buffermodel.h"
#include "action.h"
#include "buffermodel.h"
@@
-548,6
+549,16
@@
void BufferView::hideCurrentBuffer()
config()->requestRemoveBuffer(bufferId);
}
config()->requestRemoveBuffer(bufferId);
}
+void BufferView::filterTextChanged(QString filterString)
+{
+ BufferViewFilter *filter = qobject_cast<BufferViewFilter *>(model());
+ if (!filter) {
+ return;
+ }
+ filter->setFilterString(filterString);
+ on_configChanged(); // make sure collapsation is correct
+}
+
QSize BufferView::sizeHint() const
{
QSize BufferView::sizeHint() const
{
@@
-631,6
+642,9
@@
bool BufferViewDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, c
// ==============================
BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent)
: QDockWidget(parent),
// ==============================
BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent)
: QDockWidget(parent),
+ _childWidget(0),
+ _widget(new QWidget(parent)),
+ _filterEdit(new QLineEdit(parent)),
_active(false),
_title(config->bufferViewName())
{
_active(false),
_title(config->bufferViewName())
{
@@
-639,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();
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);
}
}
@@
-650,6
+672,14
@@
void BufferViewDock::updateTitle()
setWindowTitle(title);
}
setWindowTitle(title);
}
+void BufferViewDock::configChanged()
+{
+ _filterEdit->setVisible(config()->showSearch());
+
+ if (!_filterEdit->isVisible()) {
+ _filterEdit->setText(QLatin1String(""));
+ }
+}
void BufferViewDock::setActive(bool active)
{
void BufferViewDock::setActive(bool active)
{
@@
-691,3
+721,11
@@
BufferViewConfig *BufferViewDock::config() const
else
return view->config();
}
else
return view->config();
}
+
+void BufferViewDock::setWidget(QWidget *newWidget)
+{
+ _widget->layout()->addWidget(newWidget);
+ _childWidget = newWidget;
+
+ connect(_filterEdit, SIGNAL(textChanged(QString)), bufferView(), SLOT(filterTextChanged(QString)));
+}
diff --git
a/src/uisupport/bufferview.h
b/src/uisupport/bufferview.h
index
444f018
..
a06c1f0
100644
(file)
--- a/
src/uisupport/bufferview.h
+++ b/
src/uisupport/bufferview.h
@@
-66,6
+66,7
@@
public slots:
void nextBuffer();
void previousBuffer();
void hideCurrentBuffer();
void nextBuffer();
void previousBuffer();
void hideCurrentBuffer();
+ void filterTextChanged(QString filterString);
signals:
void removeBuffer(const QModelIndex &);
signals:
void removeBuffer(const QModelIndex &);
@@
-141,6
+142,8
@@
public :
BufferViewConfig *config() const;
inline BufferView *bufferView() const { return qobject_cast<BufferView *>(widget()); }
inline bool isActive() const { return _active; }
BufferViewConfig *config() const;
inline BufferView *bufferView() const { return qobject_cast<BufferView *>(widget()); }
inline bool isActive() const { return _active; }
+ void setWidget(QWidget *newWidget);
+ QWidget *widget() const { return _childWidget; }
public slots:
void setActive(bool active = true);
public slots:
void setActive(bool active = true);
@@
-150,7
+153,9
@@
private slots:
void updateTitle();
private:
void updateTitle();
private:
-
+ QWidget *_childWidget;
+ QWidget *_widget;
+ QLineEdit *_filterEdit;
bool _active;
QString _title;
};
bool _active;
QString _title;
};
diff --git
a/src/uisupport/bufferviewfilter.cpp
b/src/uisupport/bufferviewfilter.cpp
index
189e177
..
81f03d3
100644
(file)
--- a/
src/uisupport/bufferviewfilter.cpp
+++ b/
src/uisupport/bufferviewfilter.cpp
@@
-137,6
+137,14
@@
QList<QAction *> BufferViewFilter::actions(const QModelIndex &index)
return actionList;
}
return actionList;
}
+void BufferViewFilter::setFilterString(const QString string)
+{
+ beginResetModel();
+ _filterString = string;
+ endResetModel();
+ enableEditMode(!string.isEmpty());
+}
+
void BufferViewFilter::enableEditMode(bool enable)
{
void BufferViewFilter::enableEditMode(bool enable)
{
@@
-346,6
+354,16
@@
bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex)
return false;
}
return false;
}
+ if (!_filterString.isEmpty()) {
+ const BufferInfo info = qvariant_cast<BufferInfo>(Client::bufferModel()->data(source_bufferIndex, NetworkModel::BufferInfoRole));
+ QString name = info.bufferName();
+ if (name.contains(_filterString)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
// the following dynamic filters may not trigger if the buffer is currently selected.
QModelIndex currentIndex = Client::bufferModel()->standardSelectionModel()->currentIndex();
if (bufferId == Client::bufferModel()->data(currentIndex, NetworkModel::BufferIdRole).value<BufferId>())
// the following dynamic filters may not trigger if the buffer is currently selected.
QModelIndex currentIndex = Client::bufferModel()->standardSelectionModel()->currentIndex();
if (bufferId == Client::bufferModel()->data(currentIndex, NetworkModel::BufferIdRole).value<BufferId>())
diff --git
a/src/uisupport/bufferviewfilter.h
b/src/uisupport/bufferviewfilter.h
index
38aa793
..
af6860a
100644
(file)
--- a/
src/uisupport/bufferviewfilter.h
+++ b/
src/uisupport/bufferviewfilter.h
@@
-69,6
+69,8
@@
public:
QList<QAction *> actions(const QModelIndex &index);
QList<QAction *> actions(const QModelIndex &index);
+ void setFilterString(const QString string);
+
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
@@
-93,6
+95,7
@@
private:
QSet<BufferId> _toAdd;
QSet<BufferId> _toTempRemove;
QSet<BufferId> _toRemove;
QSet<BufferId> _toAdd;
QSet<BufferId> _toTempRemove;
QSet<BufferId> _toRemove;
+ QString _filterString;
bool filterAcceptBuffer(const QModelIndex &) const;
bool filterAcceptNetwork(const QModelIndex &) const;
bool filterAcceptBuffer(const QModelIndex &) const;
bool filterAcceptNetwork(const QModelIndex &) const;