diff --git a/src/frontends/qt4/TocWidget.cpp b/src/frontends/qt4/TocWidget.cpp
index 49e96f511e..473d7de343 100644
--- a/src/frontends/qt4/TocWidget.cpp
+++ b/src/frontends/qt4/TocWidget.cpp
@@ -82,6 +82,8 @@ TocWidget::TocWidget(GuiView & gui_view, QWidget * parent)
this, SLOT(showContextMenu(const QPoint &)));
connect(tocTV, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(showContextMenu(const QPoint &)));
+ connect(filterLE, SIGNAL(textEdited(QString)),
+ this, SLOT(filterContents()));
init(QString());
}
@@ -440,7 +442,6 @@ void TocWidget::updateView()
&& gui_view_.tocModels().isSorted(current_type_));
sortCB->blockSignals(false);
-
bool const can_navigate_ = canNavigate(current_type_);
persistentCB->setEnabled(can_navigate_);
@@ -456,11 +457,38 @@ void TocWidget::updateView()
persistentCB->setChecked(persistent_);
select(gui_view_.tocModels().currentIndex(current_type_));
}
+ filterContents();
tocTV->setEnabled(true);
tocTV->setUpdatesEnabled(true);
}
+void TocWidget::filterContents()
+{
+ QModelIndexList indices = tocTV->model()->match(
+ tocTV->model()->index(0, 0),
+ Qt::DisplayRole, "*", -1,
+ Qt::MatchFlags(Qt::MatchWildcard|Qt::MatchRecursive));
+
+ int size = indices.size();
+ for (int i = 0; i < size; i++) {
+ QModelIndex index = indices[i];
+ bool const matches =
+ index.data().toString().contains(
+ filterLE->text(), Qt::CaseSensitive);
+ tocTV->setRowHidden(index.row(), index.parent(), !matches);
+ }
+ // recursively unhide parents of unhidden children
+ for (int i = size - 1; i >= 0; i--) {
+ QModelIndex index = indices[i];
+ if (!tocTV->isRowHidden(index.row(), index.parent())
+ && index.parent() != QModelIndex())
+ tocTV->setRowHidden(index.parent().row(),
+ index.parent().parent(), false);
+ }
+}
+
+
static QString decodeType(QString const & str)
{
QString type = str;
diff --git a/src/frontends/qt4/TocWidget.h b/src/frontends/qt4/TocWidget.h
index d2ca8b8375..7c7ca3f0e3 100644
--- a/src/frontends/qt4/TocWidget.h
+++ b/src/frontends/qt4/TocWidget.h
@@ -63,6 +63,7 @@ protected Q_SLOTS:
void on_moveDownTB_clicked();
void on_moveInTB_clicked();
void on_moveOutTB_clicked();
+ void filterContents();
void showContextMenu(const QPoint & pos);
diff --git a/src/frontends/qt4/ui/TocUi.ui b/src/frontends/qt4/ui/TocUi.ui
index 5fd75fbb83..8491a12552 100644
--- a/src/frontends/qt4/ui/TocUi.ui
+++ b/src/frontends/qt4/ui/TocUi.ui
@@ -9,13 +9,46 @@
0
0
202
- 332
+ 355
-
+
+
+ 9
+
+
+ 6
+
+ -
+
+
+ 0
+
+
+ 6
+
+
-
+
+
+ Filter:
+
+
+ filterLE
+
+
+
+ -
+
+
+ Enter string to filter contents
+
+
+
+
+
-
@@ -31,7 +64,7 @@
- -
+
-
@@ -43,47 +76,135 @@
- -
-
-
-
- 13
- 0
- 0
- 0
-
+
-
+
+
+ 0
-
- Adjust the depth of the navigation tree
+
+ 6
-
- 5
-
-
- 1
-
-
- 2
-
-
- Qt::Horizontal
-
-
- QSlider::TicksBothSides
-
-
+ -
+
+
+ Update navigation tree
+
+
+ ...
+
+
+ ../../../../lib/images/reload.png
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 16
+ 20
+
+
+
+
+ -
+
+
+ Decrease nesting depth of selected item
+
+
+ ...
+
+
+ ../../../../lib/images/promote.png
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ Increase nesting depth of selected item
+
+
+ ...
+
+
+ ../../../../lib/images/demote.png
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ Move selected item down by one
+
+
+ ...
+
+
+ ../../../../lib/images/down.png
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ Move selected item up by one
+
+
+ ...
+
+
+ ../../../../lib/images/up.png
+
+
+
+ 20
+ 20
+
+
+
+
+
- -
-
+
-
+
+
+ 4
+
0
QLayout::SetMinimumSize
-
- 4
-
-
@@ -131,128 +252,35 @@
- -
-
-
- 6
+
-
+
+
+
+ 13
+ 0
+ 0
+ 0
+
-
- 0
+
+ Adjust the depth of the navigation tree
-
-
-
-
- Update navigation tree
-
-
- ...
-
-
-
- ../../../../lib/images/reload.png../../../../lib/images/reload.png
-
-
-
- 20
- 20
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 16
- 20
-
-
-
-
- -
-
-
- Decrease nesting depth of selected item
-
-
- ...
-
-
-
- ../../../../lib/images/promote.png../../../../lib/images/promote.png
-
-
-
- 20
- 20
-
-
-
-
- -
-
-
- Increase nesting depth of selected item
-
-
- ...
-
-
-
- ../../../../lib/images/demote.png../../../../lib/images/demote.png
-
-
-
- 20
- 20
-
-
-
-
- -
-
-
- Move selected item down by one
-
-
- ...
-
-
-
- ../../../../lib/images/down.png../../../../lib/images/down.png
-
-
-
- 20
- 20
-
-
-
-
- -
-
-
- Move selected item up by one
-
-
- ...
-
-
-
- ../../../../lib/images/up.png../../../../lib/images/up.png
-
-
-
- 20
- 20
-
-
-
-
-
+
+ 5
+
+
+ 1
+
+
+ 2
+
+
+ Qt::Horizontal
+
+
+ QSlider::TicksBothSides
+
+