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;
}
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;
}
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;
#include <QMenu>
#include <QMessageBox>
#include <QSet>
+#include <QVBoxLayout>
#include "action.h"
#include "buffermodel.h"
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
{
// ==============================
BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent)
: QDockWidget(parent),
+ _childWidget(0),
+ _widget(new QWidget(parent)),
+ _filterEdit(new QLineEdit(parent)),
_active(false),
_title(config->bufferViewName())
{
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);
}
setWindowTitle(title);
}
+void BufferViewDock::configChanged()
+{
+ _filterEdit->setVisible(config()->showSearch());
+
+ if (!_filterEdit->isVisible()) {
+ _filterEdit->setText(QLatin1String(""));
+ }
+}
void BufferViewDock::setActive(bool active)
{
else
return view->config();
}
+
+void BufferViewDock::setWidget(QWidget *newWidget)
+{
+ _widget->layout()->addWidget(newWidget);
+ _childWidget = newWidget;
+
+ connect(_filterEdit, SIGNAL(textChanged(QString)), bufferView(), SLOT(filterTextChanged(QString)));
+}
void nextBuffer();
void previousBuffer();
void hideCurrentBuffer();
+ void filterTextChanged(QString filterString);
signals:
void removeBuffer(const QModelIndex &);
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);
void updateTitle();
private:
-
+ QWidget *_childWidget;
+ QWidget *_widget;
+ QLineEdit *_filterEdit;
bool _active;
QString _title;
};
return actionList;
}
+void BufferViewFilter::setFilterString(const QString string)
+{
+ beginResetModel();
+ _filterString = string;
+ endResetModel();
+ enableEditMode(!string.isEmpty());
+}
+
void BufferViewFilter::enableEditMode(bool enable)
{
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>())
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;
QSet<BufferId> _toAdd;
QSet<BufferId> _toTempRemove;
QSet<BufferId> _toRemove;
+ QString _filterString;
bool filterAcceptBuffer(const QModelIndex &) const;
bool filterAcceptNetwork(const QModelIndex &) const;