#include "GuiView.h"
#include "qt_helpers.h"
#include "TocModel.h"
+#include "FancyLineEdit.h"
#include "Buffer.h"
#include "BufferView.h"
// Only one item selected at a time.
tocTV->setSelectionMode(QAbstractItemView::SingleSelection);
- setFocusProxy(tocTV);
// The toc types combo won't change its model.
typeCO->setModel(gui_view_.tocModels().nameModel());
+ // The filter bar
+ filter_ = new FancyLineEdit(this);
+ filter_->setClearButton(true);
+ filter_->setPlaceholderText(qt_("All items"));
+ filterBarL->addWidget(filter_, 0);
+ filterLA->setBuddy(filter_);
+ setFocusProxy(filter_);
+
// Make sure the buttons are disabled when first shown without a loaded
// Buffer.
enableControls(false);
this, SLOT(showContextMenu(const QPoint &)));
connect(tocTV, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(showContextMenu(const QPoint &)));
- connect(filterLE, SIGNAL(textEdited(QString)),
+ connect(filter_, SIGNAL(textEdited(QString)),
this, SLOT(filterContents()));
+#if (QT_VERSION < 0x050000)
+ connect(filter_, SIGNAL(downPressed()),
+ tocTV, SLOT(setFocus()));
+#else
+ connect(filter_, &FancyLineEdit::downPressed,
+ tocTV, [this](){ focusAndHighlight(tocTV); });
+#endif
connect(activeFilterCO, SIGNAL(activated(int)),
this, SLOT(filterContents()));
}
-void TocWidget::on_typeCO_currentIndexChanged(int index)
+void TocWidget::on_typeCO_activated(int index)
{
-
if (index == -1)
return;
current_type_ = typeCO->itemData(index).toString();
//if another window is active, this attempt will fail,
//but it will work at least for the second attempt
- gui_view_.activateWindow();
+ gui_view_.activateWindow();
enableControls(false);
goTo(list[0]);
{
fr.setViewOrigin(&gui_view_);
+ GuiWorkArea * old_wa = gui_view_.currentWorkArea();
+ GuiWorkArea * doc_wa = gui_view_.currentMainWorkArea();
+ /* The ToC command should be dispatched to the document work area,
+ * not the Adv. Find&Replace (which is the only other know
+ * possibility.
+ */
+ if (doc_wa != nullptr && doc_wa != old_wa)
+ gui_view_.setCurrentWorkArea(doc_wa);
DispatchResult const & dr = dispatch(fr);
+ /* If the current workarea has not explicitely changed, and the
+ * original one is still visible, let's reset it.
+ */
+ if (gui_view_.currentWorkArea() == doc_wa
+ && gui_view_.hasVisibleWorkArea(old_wa)
+ && doc_wa != old_wa)
+ gui_view_.setCurrentWorkArea(old_wa);
if (dr.error())
gui_view_.message(dr.message());
}
QModelIndexList indices = tocTV->model()->match(
tocTV->model()->index(0, 0),
- Qt::DisplayRole, "*", -1,
- Qt::MatchFlags(Qt::MatchWildcard|Qt::MatchRecursive));
+ Qt::DisplayRole, ".*", -1,
+#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
+ Qt::MatchFlags(Qt::MatchRegularExpression|Qt::MatchRecursive));
+#else
+ // deprecated in Qt 5.15.
+ Qt::MatchFlags(Qt::MatchRegExp|Qt::MatchRecursive));
+#endif
bool const show_active =
activeFilterCO->currentIndex() != 2;
activeFilterCO->currentIndex() != 1;
int size = indices.size();
+ QString const matchstring = filter_ ? filter_->text() : QString();
for (int i = 0; i < size; i++) {
QModelIndex index = indices[i];
- bool matches =
- index.data().toString().contains(
- filterLE->text(), Qt::CaseInsensitive);
+ bool matches = index.data().toString().contains(
+ matchstring, Qt::CaseInsensitive);
TocItem const & item =
gui_view_.tocModels().currentItem(current_type_, index);
matches &= (show_active && item.isOutput()) || (show_inactive && !item.isOutput());