+void BufferViewDock::configChanged()
+{
+ if (_filterEdit->isVisible() != config()->showSearch()) {
+ _filterEdit->setVisible(config()->showSearch());
+ _filterEdit->clear();
+ }
+}
+
+void BufferViewDock::onFilterReturnPressed()
+{
+ if (_oldFocusItem) {
+ _oldFocusItem->setFocus();
+ _oldFocusItem = nullptr;
+ }
+
+ if (!config()->showSearch()) {
+ _filterEdit->setVisible(false);
+ }
+
+ BufferView* view = bufferView();
+ if (!view) {
+ return;
+ }
+
+ if (!_filterEdit->text().isEmpty()) {
+ view->selectHighlighted();
+ _filterEdit->clear();
+ }
+ else {
+ view->clearHighlight();
+ }
+}
+
+void BufferViewDock::setActive(bool active)
+{
+ if (active != isActive()) {
+ _active = active;
+ updateTitle();
+ if (active) {
+ raise(); // for tabbed docks
+ }
+ }
+}
+
+bool BufferViewDock::eventFilter(QObject* object, QEvent* event)
+{
+ if (object != _filterEdit) {
+ return false;
+ }
+
+ if (event->type() == QEvent::FocusOut) {
+ if (!config()->showSearch() && _filterEdit->text().isEmpty()) {
+ _filterEdit->setVisible(false);
+ return true;
+ }
+ }
+ else if (event->type() == QEvent::KeyRelease) {
+ auto keyEvent = static_cast<QKeyEvent*>(event);
+
+ BufferView* view = bufferView();
+ if (!view) {
+ return false;
+ }
+
+ switch (keyEvent->key()) {
+ case Qt::Key_Escape: {
+ _filterEdit->clear();
+
+ if (!_oldFocusItem) {
+ return false;
+ }
+
+ _oldFocusItem->setFocus();
+ _oldFocusItem = nullptr;
+ return true;
+ }
+ case Qt::Key_Down:
+ view->changeHighlight(BufferView::Backward);
+ return true;
+ case Qt::Key_Up:
+ view->changeHighlight(BufferView::Forward);
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+ }
+
+ return false;
+}
+
+void BufferViewDock::bufferViewRenamed(const QString& newName)
+{
+ _title = newName;
+ updateTitle();
+ toggleViewAction()->setText(newName);
+}
+
+int BufferViewDock::bufferViewId() const
+{
+ BufferView* view = bufferView();
+ if (!view)
+ return 0;
+
+ if (view->config())
+ return view->config()->bufferViewId();
+ else
+ return 0;
+}
+
+BufferViewConfig* BufferViewDock::config() const
+{
+ BufferView* view = bufferView();
+ if (!view)
+ return nullptr;
+ else
+ return view->config();
+}
+
+void BufferViewDock::setWidget(QWidget* newWidget)
+{
+ _widget->layout()->addWidget(newWidget);
+ _childWidget = newWidget;
+
+ connect(_filterEdit, &QLineEdit::textChanged, bufferView(), &BufferView::filterTextChanged);
+}
+
+void BufferViewDock::activateFilter()
+{
+ if (!_filterEdit->isVisible()) {
+ _filterEdit->setVisible(true);
+ }
+
+ _oldFocusItem = qApp->focusWidget();
+
+ _filterEdit->setFocus();
+}
+
+
+void BufferViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ QStyleOptionViewItem newOption = option;
+ if (index == currentHighlight) {
+ newOption.state |= QStyle::State_HasFocus;
+ }
+ QStyledItemDelegate::paint(painter, newOption, index);