]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/QTocDialog.C
enable Font cache only for MacOSX and inline width() for other platform.
[lyx.git] / src / frontends / qt4 / QTocDialog.C
index 5326c0270f8bf81b6c6202b1f37fff00f60f8d61..04753d8219877a917298f6e12b5b8c479c9a99c7 100644 (file)
 
 #include "debug.h"
 
-#include <QTreeWidget>
 #include <QTreeWidgetItem>
 #include <QPushButton>
 #include <QCloseEvent>
+#include <QHeaderView>
 
 #include <vector>
 #include <string>
@@ -34,28 +34,22 @@ using std::stack;
 using std::vector;
 using std::string;
 
+
 namespace lyx {
 namespace frontend {
 
-QTocDialog::QTocDialog(QToc * form)
-       : form_(form), depth_(2)
+QTocDialog::QTocDialog(Dialog & dialog, QToc * form)
+       : Dialog::View(dialog, "Toc"), form_(form), depth_(2)
 {
        setupUi(this);
 
-       // Manage the cancel/close button
-       form_->bcview().setCancel(closePB);
-
-       // disable sorting
-       tocTW->setSortingEnabled(false);
-       tocTW->setColumnCount(1);
+       updateGui();
 
-       // hide the pointless QHeader
-//     QWidget * w = static_cast<QWidget*>(tocTW->child("list view header"));
-//     if (w)
-//             w->hide();
-
-//     connect(closePB, SIGNAL(clicked()),
-//             form, SLOT(slotClose()));
+       connect(tocTV->selectionModel(),
+               SIGNAL(currentChanged(const QModelIndex &,
+                       const QModelIndex &)),
+               this, SLOT(selectionChanged(const QModelIndex &,
+                       const QModelIndex &)));
 }
 
 
@@ -64,196 +58,187 @@ QTocDialog::~QTocDialog()
        accept();
 }
 
-void QTocDialog::on_tocTW_currentItemChanged(QTreeWidgetItem * current,
-                                                                QTreeWidgetItem * previous)
+
+void QTocDialog::selectionChanged(const QModelIndex & current,
+                                 const QModelIndex & /*previous*/)
 {
-       form_->select(fromqstr(current->text(0)));
+       lyxerr[Debug::GUI]
+               << "selectionChanged index " << current.row()
+               << ", " << current.column()
+               << endl;
+
+       form_->goTo(current);
 }
 
+
 void QTocDialog::on_closePB_clicked()
 {
        accept();
 }
 
+
 void QTocDialog::on_updatePB_clicked()
 {
-       form_->update();
+       update();
 }
 
+
 void QTocDialog::on_depthSL_valueChanged(int depth)
 {
        if (depth == depth_)
                return;
 
        depth_ = depth;
-       updateToc(true);
+
+/*
+       while (
+       tocTv->setExpanded();
+                       if (iter->depth() > depth_)
+                               tocTV->collapseItem(topLevelItem);
+                       else if (iter->depth() <= depth_)
+                               tocTV->expandItem(topLevelItem);
+*/
 }
 
+
 void QTocDialog::on_typeCO_activated(int value)
 {
-       updateToc();
+       form_->setTocModel(value);
+       enableButtons();
 }
 
+
 void QTocDialog::on_moveUpPB_clicked()
 {
        enableButtons(false);
-       form_->moveUp();
-       enableButtons();
+       QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+       form_->goTo(index);
+       form_->outlineUp();
+       update();
 }
 
+
 void QTocDialog::on_moveDownPB_clicked()
 {
        enableButtons(false);
-       form_->moveDown();
-       enableButtons();
+       QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+       form_->goTo(index);
+       form_->outlineDown();
+       update();
 }
 
+
 void QTocDialog::on_moveInPB_clicked()
 {
        enableButtons(false);
-       form_->moveIn();
-       enableButtons();
+       QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+       form_->goTo(index);
+       form_->outlineIn();
+       update();
 }
 
+
 void QTocDialog::on_moveOutPB_clicked()
 {
        enableButtons(false);
-       form_->moveOut();
-       enableButtons();
-}
-
-void QTocDialog::enableButtons(bool enable)
-{
-       moveUpPB->setEnabled(enable);
-       moveDownPB->setEnabled(enable);
-       moveInPB->setEnabled(enable);
-       moveOutPB->setEnabled(enable);
-       updatePB->setEnabled(enable);
+       QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+       form_->goTo(index);
+       form_->outlineOut();
+       update();
 }
 
-void QTocDialog::updateType()
-{
-       typeCO->clear();
-
-       vector<string> const & choice = form_->controller().getTypes();
-       string const & type = toc::getType(form_->controller().params().getCmdName());
-
-       for (vector<string>::const_iterator it = choice.begin();
-               it != choice.end(); ++it) {
-               string const & guiname = form_->controller().getGuiName(*it);
-               typeCO->insertItem(toqstr(guiname));
-               if (*it == type) {
-                       typeCO->setCurrentItem(it - choice.begin());
-                       form_->setTitle(guiname);
-               }
-       }
-}
 
-void QTocDialog::updateToc(bool newdepth)
+void QTocDialog::select(QModelIndex const & index)
 {
-       vector<string> const & choice = form_->controller().getTypes();
-       string type;
-       if (!choice.empty())
-               type = choice[typeCO->currentItem()];
+//     tocTV->setModel(form_->tocModel());
 
-       toc::Toc const & contents = form_->controller().getContents(type);
-
-       // Check if all elements are the same.
-       if (!newdepth && form_->get_toclist() == contents) {
+       if (!index.isValid()) {
+               lyxerr[Debug::GUI]
+                       << "QTocDialog::select(): QModelIndex is invalid!" << endl;
                return;
        }
 
-       tocTW->clear();
-
-       form_->get_toclist() = contents;
+       tocTV->scrollTo(index);
+       tocTV->selectionModel()->select(index, QItemSelectionModel::Select);
+}
 
-       if (form_->get_toclist().empty())
-               return;
 
-       tocTW->setUpdatesEnabled(false);
+void QTocDialog::enableButtons(bool enable)
+{
+       updatePB->setEnabled(enable);
 
-       QTreeWidgetItem * topLevelItem;
+       if (!form_->canOutline())
+               enable = false;
 
-       toc::Toc::const_iterator iter = form_->get_toclist().begin();
+       moveUpPB->setEnabled(enable);
+       moveDownPB->setEnabled(enable);
+       moveInPB->setEnabled(enable);
+       moveOutPB->setEnabled(enable);
+}
 
-       while (iter != form_->get_toclist().end()) {
 
-               if (iter->depth == 1) {
-                       topLevelItem = new QTreeWidgetItem(tocTW);
-                       topLevelItem->setText(0, toqstr(iter->str));
-                       if (iter->depth > depth_)
-                               tocTW->collapseItem(topLevelItem);
-                       else if (iter->depth <= depth_)
-                               tocTW->expandItem(topLevelItem);
+void QTocDialog::update()
+{
+       form_->update();
+       updateGui();
+}
 
-                       lyxerr[Debug::GUI]
-                               << "Table of contents\n"
-                               << "Added Top Level item " << iter->str
-                               << " at depth " << iter->depth
-                               << endl;
 
-                       populateItem(topLevelItem, iter);
-               }
+void QTocDialog::updateGui()
+{
+       typeCO->setModel(form_->typeModel());
+       tocTV->setModel(form_->tocModel());
+       tocTV->showColumn(0);
+       // hide the pointless QHeader for now
+       // in the future, new columns may appear
+       // like labels, bookmarks, etc...
+       // tocTV->header()->hide();
+       tocTV->header()->setVisible(true);
+       enableButtons();
 
-               if (iter == form_->get_toclist().end())
-                       break;
+       connect(tocTV->selectionModel(),
+               SIGNAL(currentChanged(const QModelIndex &,
+                       const QModelIndex &)),
+               this, SLOT(selectionChanged(const QModelIndex &,
+                       const QModelIndex &)));
 
-               ++iter;
-       }
+       select(form_->getCurrentIndex());
 
-       tocTW->setUpdatesEnabled(true);
-       tocTW->update();
-       form_->setTitle(fromqstr(typeCO->currentText()));
-       tocTW->show();
+       lyxerr[Debug::GUI]
+               << "form_->tocModel()->rowCount " << form_->tocModel()->rowCount()
+               << "\nform_->tocModel()->columnCount " << form_->tocModel()->columnCount()
+               << endl;
+//     setTitle(form_->guiname())
 }
 
-void QTocDialog::populateItem(QTreeWidgetItem * parentItem, toc::Toc::const_iterator & iter)
-{
-       int curdepth = iter->depth + 1;
-       QTreeWidgetItem * item;
-
-       while (iter != form_->get_toclist().end()) {
-
-               ++iter;
 
-               if (iter == form_->get_toclist().end())
-                       break;
+void QTocDialog::apply()
+{
+       // Nothing to do here... for now.
+       // Ideas welcome... (Abdel, 17042006)
+}
 
-               if (iter->depth < curdepth) {
-                       --iter;
-                       return;
-               }
-               if (iter->depth > curdepth) {
-//                     --iter;
-                       return;
-               }
 
-               item = new QTreeWidgetItem(parentItem);
-               item->setText(0, toqstr(iter->str));
+void QTocDialog::hide()
+{
+       accept();
+}
 
-               if (iter->depth > depth_)
-                       tocTW->collapseItem(item);
-               else if (iter->depth <= depth_)
-                       tocTW->expandItem(item);
 
-               lyxerr[Debug::GUI]
-                       << "Table of contents: Added item " << iter->str
-                       << " at depth " << iter->depth
-                       << "  \", parent \""
-                       << fromqstr(parentItem->text(0)) << '"'
-                       << "expanded: " << tocTW->isItemExpanded(item)
-                       << endl;
-
-               populateItem(item, iter);
-       }
+void QTocDialog::show()
+{
+       update();
+       QDialog::show();
 }
 
 
-void QTocDialog::closeEvent(QCloseEvent * e)
+bool QTocDialog::isVisible() const
 {
-       form_->slotWMHide();
-       e->accept();
+       return QDialog::isVisible();
 }
 
+
 } // namespace frontend
 } // namespace lyx
+
+#include "QTocDialog_moc.cpp"