]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocWidget.cpp
Compil fix.
[lyx.git] / src / frontends / qt4 / TocWidget.cpp
index 1fa781058b2834077bd406c18edebd7a3a95fb92..53b572effb5c9c72af0b518a08b2664e0132f997 100644 (file)
 
 #include "TocWidget.h"
 
-#include "GuiToc.h"
+#include "TocModel.h"
 #include "qt_helpers.h"
-#include "support/filetools.h"
-#include "support/lstrings.h"
 
-#include "debug.h"
+#include "FuncRequest.h"
+#include "LyXFunc.h"
+
+#include "support/debug.h"
 
 #include <QHeaderView>
-#include <QPushButton>
-#include <QTreeWidgetItem>
+#include <QTimer>
 
 #include <vector>
-#include <string>
-#include <stack>
-
-using std::endl;
-using std::pair;
-using std::stack;
-using std::vector;
-using std::string;
 
+using namespace std;
 
 namespace lyx {
-
-using support::FileName;
-using support::libFileSearch;
-
 namespace frontend {
 
-TocWidget::TocWidget(GuiToc * form, QWidget * parent)
-       : QWidget(parent), depth_(0)
+TocWidget::TocWidget(TocModels & models, QWidget * parent)
+       : QWidget(parent), depth_(0), models_(models)
 {
        setupUi(this);
-       form_ = form;
-
-       connect(form_, SIGNAL(modelReset()), SLOT(updateGui()));
 
-       FileName icon_path = libFileSearch("images", "promote.png");
-       moveOutTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
-       icon_path = libFileSearch("images", "demote.png");
-       moveInTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
-       icon_path = libFileSearch("images", "up.png");
-       moveUpTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
-       icon_path = libFileSearch("images", "down.png");
-       moveDownTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
-       icon_path = libFileSearch("images", "reload.png");
-       updateTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
+       moveOutTB->setIcon(QIcon(":/images/promote.png"));
+       moveInTB->setIcon(QIcon(":/images/demote.png"));
+       moveUpTB->setIcon(QIcon(":/images/up.png"));
+       moveDownTB->setIcon(QIcon(":/images/down.png"));
+       updateTB->setIcon(QIcon(":/images/reload.png"));
 
        // avoid flickering
        tocTV->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
@@ -77,15 +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)
 {
-       LYXERR(Debug::GUI)
-               << "selectionChanged index " << current.row()
-               << ", " << current.column()
-               << endl;
+       goTo(index);
+}
+
 
-       form_->goTo(typeCO->currentIndex(), current);
+void TocWidget::on_tocTV_clicked(QModelIndex const & index)
+{
+       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!
+}
+
+
+void TocWidget::goTo(QModelIndex const & index)
+{
+       LYXERR(Debug::GUI, "goto " << index.row()
+               << ", " << index.column());
+
+       models_.goTo(typeCO->currentIndex(), index);
 }
 
 
@@ -94,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_->controller().updateBackend();
+       models_.updateBackend();
 }
 
 /* FIXME (Ugras 17/11/06):
@@ -153,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_->controller().outlineUp();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_UP));
                enableControls(true);
        }
 }
@@ -166,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_->controller().outlineDown();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_DOWN));
                enableControls(true);
        }
 }
@@ -179,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_->controller().outlineIn();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_IN));
                enableControls(true);
        }
 }
@@ -191,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_->controller().outlineOut();
+               goTo(list[0]);
+               dispatch(FuncRequest(LFUN_OUTLINE_OUT));
                enableControls(true);
        }
 }
@@ -201,15 +193,13 @@ void TocWidget::on_moveOutTB_clicked()
 void TocWidget::select(QModelIndex const & index)
 {
        if (!index.isValid()) {
-               LYXERR(Debug::GUI)
-                       << "TocWidget::select(): QModelIndex is invalid!" << endl;
+               LYXERR(Debug::GUI, "TocWidget::select(): QModelIndex is invalid!");
                return;
        }
 
-       disconnectSelectionModel();
-       tocTV->setCurrentIndex(index);
        tocTV->scrollTo(index);
-       reconnectSelectionModel();
+       tocTV->clearSelection();
+       tocTV->setCurrentIndex(index);
 }
 
 
@@ -217,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);
@@ -229,18 +219,18 @@ void TocWidget::enableControls(bool enable)
 }
 
 
-void TocWidget::update()
+void TocWidget::updateView()
 {
-       LYXERR(Debug::GUI) << "In TocWidget::updateView()" << endl;
-       select(form_->getCurrentIndex(typeCO->currentIndex()));
-       QWidget::update();
+       LYXERR(Debug::GUI, "In TocWidget::updateView()");
+       setTreeDepth(depth_);
+       select(models_.currentIndex(typeCO->currentIndex()));
 }
 
 
-void TocWidget::updateGui()
+void TocWidget::init(QString const & str)
 {
-       vector<docstring> const & type_names = form_->controller().typeNames();
-       if (type_names.empty()) {
+       QStringList const & type_names = models_.typeNames();
+       if (type_names.isEmpty()) {
                enableControls(false);
                typeCO->clear();
                tocTV->setModel(new QStandardItemModel);
@@ -248,21 +238,23 @@ void TocWidget::updateGui()
                return;
        }
 
-       QString current_text = typeCO->currentText();
-       //lyxerr << "current_text " << fromqstr(current_text) << endl;
+       int selected_type = models_.decodeType(str);
+
+       QString const current_text = typeCO->currentText();
        typeCO->blockSignals(true);
        typeCO->clear();
-       int current_type = -1;
-       for (size_t i = 0; i != type_names.size(); ++i) {
-               QString item = toqstr(type_names[i]);
-               typeCO->addItem(item);
-               if (item == current_text)
-                       current_type = i;
+       for (int i = 0; i != type_names.size(); ++i)
+               typeCO->addItem(type_names[i]);
+       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);
        }
-       if (current_type != -1)
-               typeCO->setCurrentIndex(current_type);
-       else
-               typeCO->setCurrentIndex(form_->controller().selectedType());
+
        typeCO->blockSignals(false);
 
        setTocModel(typeCO->currentIndex());
@@ -272,55 +264,27 @@ void TocWidget::updateGui()
 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);
+               LYXERR(Debug::GUI, "tocModel()->rowCount "
+                       << toc_model->rowCount()
+                       << "\nform_->tocModel()->columnCount "
+                       << toc_model->columnCount());
        }
 
        enableControls(controls_enabled);
 
-       reconnectSelectionModel();
-
        if (controls_enabled) {
-               depthSL->setMaximum(form_->getTocDepth(type));
+               depthSL->setMaximum(models_.depth(type));
                depthSL->setValue(depth_);
        }
 
-       LYXERR(Debug::GUI) << "In TocWidget::updateGui()" << endl;
-
-       select(form_->getCurrentIndex(typeCO->currentIndex()));
-
-       if (toc_model) {
-               LYXERR(Debug::GUI)
-               << "tocModel()->rowCount "
-                       << toc_model->rowCount()
-                       << "\nform_->tocModel()->columnCount "
-                       << toc_model->columnCount()
-                       << endl;
-       }
-}
-
-
-void TocWidget::reconnectSelectionModel()
-{
-       connect(tocTV->selectionModel(),
-               SIGNAL(currentChanged(const QModelIndex &,
-                      const QModelIndex &)),
-               this,
-               SLOT(selectionChanged(const QModelIndex &,
-                    const QModelIndex &)));
-}
-
-void TocWidget::disconnectSelectionModel()
-{
-       disconnect(tocTV->selectionModel(),
-                  SIGNAL(currentChanged(const QModelIndex &,
-                         const QModelIndex &)),
-                  this,
-                  SLOT(selectionChanged(const QModelIndex &,
-                       const 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