]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocWidget.cpp
Fix bug #6661: Outliner filter bar should not be case sensitive.
[lyx.git] / src / frontends / qt4 / TocWidget.cpp
index 473d7de3434d38a602ff38ce9960a414edd69d20..80e867c7d1d05e3ce1b80f9e7fc87364c3c7b296 100644 (file)
@@ -139,7 +139,7 @@ bool TocWidget::getStatus(Cursor & cur, FuncRequest const & cmd,
        TocItem const & item =
                gui_view_.tocModels().currentItem(current_type_, index);
 
-       switch (cmd.action)
+       switch (cmd.action())
        {
        case LFUN_CHANGE_ACCEPT:
        case LFUN_CHANGE_REJECT:
@@ -179,7 +179,7 @@ void TocWidget::doDispatch(Cursor & cur, FuncRequest const & cmd)
        // Start an undo group.
        cur.beginUndoGroup();
 
-       switch (cmd.action)
+       switch (cmd.action())
        {
        case LFUN_CHANGE_ACCEPT:
        case LFUN_CHANGE_REJECT:
@@ -200,7 +200,7 @@ void TocWidget::doDispatch(Cursor & cur, FuncRequest const & cmd)
        case LFUN_OUTLINE_DOWN:
        case LFUN_OUTLINE_IN:
        case LFUN_OUTLINE_OUT:
-               outline(cmd.action);
+               outline(cmd.action());
                break;
 
        default:
@@ -315,19 +315,19 @@ void TocWidget::on_typeCO_currentIndexChanged(int index)
 {
        current_type_ = typeCO->itemData(index).toString();
        updateView();
-       gui_view_.setFocus();
+       if (typeCO->hasFocus())
+               gui_view_.setFocus();
 }
 
 
-void TocWidget::outline(int func_code)
+void TocWidget::outline(FuncCode func_code)
 {
-       enableControls(false);
        QModelIndexList const & list = tocTV->selectionModel()->selectedIndexes();
        if (list.isEmpty())
                return;
        enableControls(false);
        goTo(list[0]);
-       dispatch(FuncRequest(static_cast<FuncCode>(func_code)));
+       dispatch(FuncRequest(func_code));
        enableControls(true);
        gui_view_.setFocus();
 }
@@ -370,18 +370,11 @@ void TocWidget::select(QModelIndex const & index)
 }
 
 
-/// Test whether outlining operation is possible
-static bool canOutline(QString const & type)
-{
-       return type == "tableofcontents";
-}
-
-
 void TocWidget::enableControls(bool enable)
 {
        updateTB->setEnabled(enable);
 
-       if (!canOutline(current_type_))
+       if (!canOutline())
                enable = false;
 
        moveUpTB->setEnabled(enable);
@@ -391,24 +384,6 @@ void TocWidget::enableControls(bool enable)
 }
 
 
-/// Test whether synchronized navigation is possible
-static bool canNavigate(QString const & type)
-{
-       // It is not possible to have synchronous navigation in a correct
-       // and efficient way with the label and change type because Toc::item()
-       // does a linear search. Even when fixed, it might even not be desirable
-       // to do so if we want to support drag&drop of labels and references.
-       return type != "label" && type != "change";
-}
-
-
-/// Test whether sorting is possible
-static bool isSortable(QString const & type)
-{
-       return type != "tableofcontents";
-}
-
-
 void TocWidget::updateView()
 {
        if (!gui_view_.documentBufferView()) {
@@ -423,13 +398,15 @@ void TocWidget::updateView()
                depthSL->setEnabled(false);
                return;
        }
-       sortCB->setEnabled(isSortable(current_type_));
+       bool const is_sortable = isSortable();
+       sortCB->setEnabled(is_sortable);
        depthSL->setEnabled(true);
        typeCO->setEnabled(true);
        tocTV->setEnabled(false);
        tocTV->setUpdatesEnabled(false);
 
-       QAbstractItemModel * toc_model = gui_view_.tocModels().model(current_type_);
+       QAbstractItemModel * toc_model = 
+                       gui_view_.tocModels().model(current_type_);
        if (tocTV->model() != toc_model) {
                tocTV->setModel(toc_model);
                tocTV->setEditTriggers(QAbstractItemView::NoEditTriggers);
@@ -438,11 +415,11 @@ void TocWidget::updateView()
        }
 
        sortCB->blockSignals(true);
-       sortCB->setChecked(isSortable(current_type_)
+       sortCB->setChecked(is_sortable
                && gui_view_.tocModels().isSorted(current_type_));
        sortCB->blockSignals(false);
 
-       bool const can_navigate_ = canNavigate(current_type_);
+       bool const can_navigate_ = canNavigate();
        persistentCB->setEnabled(can_navigate_);
 
        bool controls_enabled = toc_model && toc_model->rowCount() > 0
@@ -465,6 +442,9 @@ void TocWidget::updateView()
 
 void TocWidget::filterContents()
 {
+       if (!tocTV->model())
+               return;
+
        QModelIndexList indices = tocTV->model()->match(
                tocTV->model()->index(0, 0),
                Qt::DisplayRole, "*", -1,
@@ -475,7 +455,7 @@ void TocWidget::filterContents()
                QModelIndex index = indices[i];
                bool const matches =
                        index.data().toString().contains(
-                               filterLE->text(), Qt::CaseSensitive);
+                               filterLE->text(), Qt::CaseInsensitive);
                tocTV->setRowHidden(index.row(), index.parent(), !matches);
        }
        // recursively unhide parents of unhidden children