]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocWidget.cpp
Revert unwanted part
[lyx.git] / src / frontends / qt4 / TocWidget.cpp
index 3be6aeb220c1572214128ccec1d41784dde1c826..fbb017ad7c005f752fa4c4f99b09df5ed44881ff 100644 (file)
@@ -17,6 +17,7 @@
 #include "qt_helpers.h"
 #include "TocModel.h"
 
+#include "Buffer.h"
 #include "FuncRequest.h"
 #include "LyXFunc.h"
 
@@ -60,6 +61,10 @@ TocWidget::TocWidget(GuiView & gui_view, QWidget * parent)
 
        // The toc types combo won't change its model.
        typeCO->setModel(gui_view_.tocModels().nameModel());
+
+       // Make sure the buttons are disabled when first shown without a loaded
+       // Buffer.
+       enableControls(false);
 }
 
 
@@ -127,7 +132,7 @@ void TocWidget::setTreeDepth(int depth)
        // but my qt 4.1.2 doesn't have expandAll()..
        //tocTV->expandAll();
        QModelIndexList indices = tocTV->model()->match(
-               tocTV->model()->index(0,0),
+               tocTV->model()->index(0, 0),
                Qt::DisplayRole, "*", -1,
                Qt::MatchFlags(Qt::MatchWildcard|Qt::MatchRecursive));
 
@@ -216,17 +221,50 @@ void TocWidget::enableControls(bool enable)
        moveDownTB->setEnabled(enable);
        moveInTB->setEnabled(enable);
        moveOutTB->setEnabled(enable);
+       if (!enable) {
+               depthSL->setMaximum(0);
+               depthSL->setValue(0);
+       }
+}
+
 
-       depthSL->setEnabled(enable);
+/// Test if synchronized navigation is possible
+static bool canNavigate(QString const & type)
+{
+       // It is not possible to have synchronous navigation in a correctl
+       // and efficient way with the label type because Toc::item() do a linear
+       // seatch. Even if fixed, it might even not be desirable to do so if we 
+       // want to support drag&drop of labels and references.
+       return type != "label";
 }
 
 
 void TocWidget::updateView()
 {
-       LYXERR(Debug::GUI, "In TocWidget::updateView()");
-       setTocModel();
+       if (!gui_view_.view()) {
+               enableControls(false);
+               typeCO->setEnabled(false);
+               tocTV->setModel(0);
+               tocTV->setEnabled(false);
+               return;
+       }
+       typeCO->setEnabled(true);
+       tocTV->setEnabled(true);
+
+       QStandardItemModel * toc_model = gui_view_.tocModels().model(current_type_);    
+       if (tocTV->model() != toc_model) {
+               tocTV->setModel(toc_model);
+               tocTV->setEditTriggers(QAbstractItemView::NoEditTriggers);
+       }
+       bool controls_enabled = toc_model && toc_model->rowCount() > 0
+               && !gui_view_.buffer()->isReadonly();
+       enableControls(controls_enabled);
+
+       depthSL->setMaximum(gui_view_.tocModels().depth(current_type_));
+       depthSL->setValue(depth_);
        setTreeDepth(depth_);
-       select(gui_view_.tocModels().currentIndex(current_type_));
+       if (canNavigate(current_type_))
+               select(gui_view_.tocModels().currentIndex(current_type_));
 }
 
 
@@ -249,19 +287,6 @@ static QString decodeType(QString const & str)
 
 void TocWidget::init(QString const & str)
 {
-       if (!gui_view_.view()) {
-               enableControls(false);
-               typeCO->setEnabled(false);
-               tocTV->setModel(0);
-               tocTV->setEnabled(false);
-               return;
-       }
-
-       typeCO->setEnabled(true);
-       tocTV->setEnabled(true);
-
-       typeCO->blockSignals(true);
-
        int new_index;
        if (str.isEmpty())
                new_index = typeCO->findData(current_type_);
@@ -275,29 +300,11 @@ void TocWidget::init(QString const & str)
                new_index = typeCO->findData(current_type_);
        }
 
+       typeCO->blockSignals(true);
        typeCO->setCurrentIndex(new_index);
        typeCO->blockSignals(false);
 }
 
-
-void TocWidget::setTocModel()
-{
-       QStandardItemModel * toc_model = gui_view_.tocModels().model(current_type_);
-       
-       if (tocTV->model() != toc_model) {
-               tocTV->setModel(toc_model);
-               tocTV->setEditTriggers(QAbstractItemView::NoEditTriggers);
-       }
-
-       bool controls_enabled = toc_model && toc_model->rowCount() > 0;;
-       enableControls(controls_enabled);
-
-       if (controls_enabled) {
-               depthSL->setMaximum(gui_view_.tocModels().depth(current_type_));
-               depthSL->setValue(depth_);
-       }
-}
-
 } // namespace frontend
 } // namespace lyx