]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocWidget.cpp
Compil fix.
[lyx.git] / src / frontends / qt4 / TocWidget.cpp
index 6912c8795b752e7f48907801f3d38ee2d030a09a..53b572effb5c9c72af0b518a08b2664e0132f997 100644 (file)
 
 #include "TocWidget.h"
 
-#include "GuiToc.h"
+#include "TocModel.h"
 #include "qt_helpers.h"
 
+#include "FuncRequest.h"
+#include "LyXFunc.h"
+
 #include "support/debug.h"
 
 #include <QHeaderView>
@@ -28,8 +31,8 @@ using namespace std;
 namespace lyx {
 namespace frontend {
 
-TocWidget::TocWidget(GuiToc & form, QWidget * parent)
-       : QWidget(parent), depth_(0), form_(form)
+TocWidget::TocWidget(TocModels & models, QWidget * parent)
+       : QWidget(parent), depth_(0), models_(models)
 {
        setupUi(this);
 
@@ -55,13 +58,26 @@ TocWidget::TocWidget(GuiToc & form, QWidget * parent)
 }
 
 
-void TocWidget::selectionChanged(const QModelIndex & current,
-                                 const QModelIndex & /*previous*/)
+void TocWidget::on_tocTV_activated(QModelIndex const & index)
+{
+       goTo(index);
+}
+
+
+void TocWidget::on_tocTV_clicked(QModelIndex const & index)
 {
-       LYXERR(Debug::GUI, "selectionChanged index " << current.row()
-               << ", " << current.column());
+       goTo(index);
+       // FIXME: It would be nice to return the focus to the work area in this
+       // case. But we need access to the GuiView!
+}
+
 
-       form_.goTo(typeCO->currentIndex(), current);
+void TocWidget::goTo(QModelIndex const & index)
+{
+       LYXERR(Debug::GUI, "goto " << index.row()
+               << ", " << index.column());
+
+       models_.goTo(typeCO->currentIndex(), index);
 }
 
 
@@ -70,7 +86,7 @@ void TocWidget::on_updateTB_clicked()
        // The backend update can take some time so we disable
        // the controls while waiting.
        enableControls(false);
-       form_.updateBackend();
+       models_.updateBackend();
 }
 
 /* FIXME (Ugras 17/11/06):
@@ -129,8 +145,8 @@ void TocWidget::on_moveUpTB_clicked()
        QModelIndexList const & list = tocTV->selectionModel()->selectedIndexes();
        if (!list.isEmpty()) {
                enableControls(false);
-               form_.goTo(typeCO->currentIndex(), list[0]);
-               form_.outlineUp();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_UP));
                enableControls(true);
        }
 }
@@ -142,8 +158,8 @@ void TocWidget::on_moveDownTB_clicked()
        QModelIndexList const & list = tocTV->selectionModel()->selectedIndexes();
        if (!list.isEmpty()) {
                enableControls(false);
-               form_.goTo(typeCO->currentIndex(), list[0]);
-               form_.outlineDown();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_DOWN));
                enableControls(true);
        }
 }
@@ -155,8 +171,8 @@ void TocWidget::on_moveInTB_clicked()
        QModelIndexList const & list = tocTV->selectionModel()->selectedIndexes();
        if (!list.isEmpty()) {
                enableControls(false);
-               form_.goTo(typeCO->currentIndex(), list[0]);
-               form_.outlineIn();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_IN));
                enableControls(true);
        }
 }
@@ -167,8 +183,8 @@ void TocWidget::on_moveOutTB_clicked()
        QModelIndexList const & list = tocTV->selectionModel()->selectedIndexes();
        if (!list.isEmpty()) {
                enableControls(false);
-               form_.goTo(typeCO->currentIndex(), list[0]);
-               form_.outlineOut();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_OUT));
                enableControls(true);
        }
 }
@@ -181,10 +197,9 @@ void TocWidget::select(QModelIndex const & index)
                return;
        }
 
-       disconnectSelectionModel();
-       tocTV->setCurrentIndex(index);
        tocTV->scrollTo(index);
-       reconnectSelectionModel();
+       tocTV->clearSelection();
+       tocTV->setCurrentIndex(index);
 }
 
 
@@ -192,7 +207,7 @@ void TocWidget::enableControls(bool enable)
 {
        updateTB->setEnabled(enable);
 
-       if (!form_.canOutline(typeCO->currentIndex()))
+       if (!models_.canOutline(typeCO->currentIndex()))
                enable = false;
 
        moveUpTB->setEnabled(enable);
@@ -207,14 +222,14 @@ void TocWidget::enableControls(bool enable)
 void TocWidget::updateView()
 {
        LYXERR(Debug::GUI, "In TocWidget::updateView()");
-       setTreeDepth();
-       select(form_.currentIndex(typeCO->currentIndex()));
+       setTreeDepth(depth_);
+       select(models_.currentIndex(typeCO->currentIndex()));
 }
 
 
-void TocWidget::updateGui(int selected_type)
+void TocWidget::init(QString const & str)
 {
-       QStringList const & type_names = form_.typeNames();
+       QStringList const & type_names = models_.typeNames();
        if (type_names.isEmpty()) {
                enableControls(false);
                typeCO->clear();
@@ -223,76 +238,53 @@ void TocWidget::updateGui(int selected_type)
                return;
        }
 
+       int selected_type = models_.decodeType(str);
+
        QString const current_text = typeCO->currentText();
        typeCO->blockSignals(true);
        typeCO->clear();
        for (int i = 0; i != type_names.size(); ++i)
                typeCO->addItem(type_names[i]);
-       if (selected_type != -1)
+       if (!str.isEmpty())
                typeCO->setCurrentIndex(selected_type);
        else {
                int const new_index = typeCO->findText(current_text);
                if (new_index != -1)
                        typeCO->setCurrentIndex(new_index);
+               else
+                       typeCO->setCurrentIndex(selected_type);
        }
 
        typeCO->blockSignals(false);
 
        setTocModel(typeCO->currentIndex());
-
-       // setTocModel produce QTreeView reset and setting depth again
-       // is needed. That must be done after all Qt updates are processed.
-       QTimer::singleShot(0, this, SLOT(updateView()));
 }
 
 
 void TocWidget::setTocModel(size_t type)
 {
        bool controls_enabled = false;
-       QStandardItemModel * toc_model = form_.tocModel(type);
+       QStandardItemModel * toc_model = models_.model(type);
        if (toc_model) {
                controls_enabled = toc_model->rowCount() > 0;
                tocTV->setModel(toc_model);
                tocTV->setEditTriggers(QAbstractItemView::NoEditTriggers);
-       }
-
-       enableControls(controls_enabled);
-
-       reconnectSelectionModel();
-
-       if (controls_enabled) {
-               depthSL->setMaximum(form_.getTocDepth(type));
-               depthSL->setValue(depth_);
-       }
-
-       LYXERR(Debug::GUI, "In TocWidget::updateGui()");
-
-       select(form_.currentIndex(typeCO->currentIndex()));
-
-       if (toc_model) {
                LYXERR(Debug::GUI, "tocModel()->rowCount "
                        << toc_model->rowCount()
                        << "\nform_->tocModel()->columnCount "
                        << toc_model->columnCount());
        }
-}
 
+       enableControls(controls_enabled);
 
-void TocWidget::reconnectSelectionModel()
-{
-       connect(tocTV->selectionModel(),
-               SIGNAL(currentChanged(const QModelIndex &,
-                      const QModelIndex &)),
-               this,
-               SLOT(selectionChanged(const QModelIndex &,
-                    const QModelIndex &)));
-}
+       if (controls_enabled) {
+               depthSL->setMaximum(models_.depth(type));
+               depthSL->setValue(depth_);
+       }
 
-void TocWidget::disconnectSelectionModel()
-{
-       disconnect(tocTV->selectionModel(),
-               SIGNAL(currentChanged(QModelIndex, QModelIndex)),
-               this, SLOT(selectionChanged(QModelIndex, QModelIndex)));
+       // setTocModel produce QTreeView reset and setting depth again
+       // is needed. That must be done after all Qt updates are processed.
+       QTimer::singleShot(0, this, SLOT(updateView()));
 }
 
 } // namespace frontend