#include "QTocDialog.h"
#include "QToc.h"
+#include "Qt2BC.h"
#include "qt_helpers.h"
#include "controllers/ControlToc.h"
#include "debug.h"
-#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QPushButton>
#include <QCloseEvent>
+#include <QHeaderView>
#include <vector>
#include <string>
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);
- // disable sorting
- tocTW->setSortingEnabled(false);
- tocTW->setColumnCount(1);
- // 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( tocTW, SIGNAL(itemClicked(QTreeWidgetItem*)), this, SLOT(select_adaptor(QTreeWidgetItem*)));
- connect( typeCO, SIGNAL( activated(int) ), this, SLOT( activate_adaptor(int) ) );
- connect( updatePB, SIGNAL( clicked() ), this, SLOT( update_adaptor() ) );
- connect( depthSL, SIGNAL( valueChanged(int) ), this, SLOT( depth_adaptor(int) ) );
+ updateGui();
+
+ connect(tocTV->selectionModel(),
+ SIGNAL(currentChanged(const QModelIndex &,
+ const QModelIndex &)),
+ this, SLOT(selectionChanged(const QModelIndex &,
+ const QModelIndex &)));
}
QTocDialog::~QTocDialog()
{
+ accept();
}
-void QTocDialog::updateType()
+
+void QTocDialog::selectionChanged(const QModelIndex & current,
+ const QModelIndex & previous)
{
- 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);
- }
- }
+ lyxerr[Debug::GUI]
+ << "selectionChanged index " << current.row() << ", " << current.column()
+ << endl;
+
+ form_->goTo(current);
}
-void QTocDialog::updateToc(bool newdepth)
+
+void QTocDialog::on_closePB_clicked()
{
- vector<string> const & choice = form_->controller().getTypes();
- string type;
- if (!choice.empty())
- type = choice[typeCO->currentItem()];
+ accept();
+}
- toc::Toc const & contents = form_->controller().getContents(type);
- // Check if all elements are the same.
- if (!newdepth && form_->get_toclist() == contents) {
+void QTocDialog::on_updatePB_clicked()
+{
+ update();
+}
+
+
+void QTocDialog::on_depthSL_valueChanged(int depth)
+{
+ if (depth == depth_)
return;
- }
- tocTW->clear();
+ depth_ = depth;
- form_->get_toclist() = contents;
+/*
+ while (
+ tocTv->setExpanded();
+ if (iter->depth() > depth_)
+ tocTV->collapseItem(topLevelItem);
+ else if (iter->depth() <= depth_)
+ tocTV->expandItem(topLevelItem);
+*/
+}
- if (form_->get_toclist().empty())
- return;
- tocTW->setUpdatesEnabled(false);
+void QTocDialog::on_typeCO_activated(int value)
+{
+ form_->setTocModel(value);
+ enableButtons();
+}
- QTreeWidgetItem * topLevelItem;
- toc::Toc::const_iterator iter = form_->get_toclist().begin();
+void QTocDialog::on_moveUpPB_clicked()
+{
+ enableButtons(false);
+ QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+ form_->goTo(index);
+ form_->outlineUp();
+ update();
+}
+
+
+void QTocDialog::on_moveDownPB_clicked()
+{
+ enableButtons(false);
+ QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+ form_->goTo(index);
+ form_->outlineDown();
+ update();
+}
+
- while (iter != form_->get_toclist().end()) {
+void QTocDialog::on_moveInPB_clicked()
+{
+ enableButtons(false);
+ QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+ form_->goTo(index);
+ form_->outlineIn();
+ update();
+}
- if (iter->depth == 1) {
- topLevelItem = new QTreeWidgetItem(tocTW);
-// tocTW->addTopLevelItem(topLevelItem);
- topLevelItem->setText(0, toqstr(iter->str));
- if (iter->depth < depth_) tocTW->collapseItem(topLevelItem);
- lyxerr[Debug::GUI]
- << "Table of contents\n"
- << "Added Top Level item " << iter->str
- << " at depth " << iter->depth
- << endl;
+void QTocDialog::on_moveOutPB_clicked()
+{
+ enableButtons(false);
+ QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
+ form_->goTo(index);
+ form_->outlineOut();
+ update();
+}
- populateItem(topLevelItem, iter);
- }
- if (iter == form_->get_toclist().end())
- break;
+void QTocDialog::select(QModelIndex const & index)
+{
+// tocTV->setModel(form_->tocModel());
- ++iter;
+ if (!index.isValid()) {
+ lyxerr[Debug::GUI]
+ << "QTocDialog::select(): QModelIndex is invalid!" << endl;
+ return;
}
- tocTW->setUpdatesEnabled(true);
- tocTW->update();
- form_->setTitle(fromqstr(typeCO->currentText()));
- tocTW->show();
+ tocTV->scrollTo(index);
+ tocTV->selectionModel()->select(index, QItemSelectionModel::Select);
}
-void QTocDialog::populateItem(QTreeWidgetItem * parentItem, toc::Toc::const_iterator& iter)
+
+void QTocDialog::enableButtons(bool enable)
{
- int curdepth = iter->depth+1;
- QTreeWidgetItem * item;
-
- while (iter != form_->get_toclist().end()) {
-
- ++iter;
-
- if (iter == form_->get_toclist().end())
- break;
-
- if (iter->depth < curdepth) {
- --iter;
- return;
- }
- if (iter->depth > curdepth) {
-// --iter;
- return;
- }
-
- item = new QTreeWidgetItem(parentItem);
- item->setText(0, toqstr(iter->str));
-// parentItem->addChild(item);
-
- if (iter->depth < depth_) tocTW->collapseItem(item);
-// else tocTW->expandItem(item);
- lyxerr[Debug::GUI]
- << "Table of contents: Added item " << iter->str
- << " at depth " << iter->depth
- << " \", parent \""
- << fromqstr(parentItem->text(0)) << '"'
- << endl;
+ updatePB->setEnabled(enable);
- populateItem(item, iter);
- }
+ if (!form_->canOutline())
+ enable = false;
+
+ moveUpPB->setEnabled(enable);
+ moveDownPB->setEnabled(enable);
+ moveInPB->setEnabled(enable);
+ moveOutPB->setEnabled(enable);
}
-void QTocDialog::activate_adaptor(int)
+
+void QTocDialog::update()
{
- updateToc();
+ form_->update();
+ updateGui();
}
-void QTocDialog::depth_adaptor(int depth)
+void QTocDialog::updateGui()
{
- if (depth == depth_)
- return;
+ 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();
+
+ connect(tocTV->selectionModel(),
+ SIGNAL(currentChanged(const QModelIndex &,
+ const QModelIndex &)),
+ this, SLOT(selectionChanged(const QModelIndex &,
+ const QModelIndex &)));
+
+ select(form_->getCurrentIndex());
+
+ lyxerr[Debug::GUI]
+ << "form_->tocModel()->rowCount " << form_->tocModel()->rowCount()
+ << "\nform_->tocModel()->columnCount " << form_->tocModel()->columnCount()
+ << endl;
+// setTitle(form_->guiname())
+}
- depth_ = depth;
- updateToc(true);
+
+void QTocDialog::apply()
+{
+ // Nothing to do here... for now.
+ // Ideas welcome... (Abdel, 17042006)
}
-void QTocDialog::select_adaptor(QTreeWidgetItem * item)
+void QTocDialog::hide()
{
- form_->select(fromqstr(item->text(0)));
+ accept();
}
-void QTocDialog::update_adaptor()
+void QTocDialog::show()
{
- form_->update();
+ update();
+ QDialog::show();
}
-void QTocDialog::closeEvent(QCloseEvent * e)
+bool QTocDialog::isVisible() const
{
- form_->slotWMHide();
- e->accept();
+ return QDialog::isVisible();
}
+
} // namespace frontend
} // namespace lyx
-
-
-/*
- stack<pair<QTreeWidgetItem *, QTreeWidgetItem *> > istack;
- QTreeWidgetItem * last = 0;
- QTreeWidgetItem * parent = 0;
- QTreeWidgetItem * item;
-
- // Yes, it is this ugly. Two reasons - root items must have
- // a QListView parent, rather than QListViewItem; and the
- // TOC can move in and out an arbitrary number of levels
-
- for (toc::Toc::const_iterator iter = form_->get_toclist().begin();
- iter != form_->get_toclist().end(); ++iter) {
-
- if (iter->depth == 0) {
- TocTW
-
- if (iter->depth == curdepth) {
- // insert it after the last one we processed
- if (!parent)
- item = (last ? new QTreeWidgetItem(tocTW,last) : new QTreeWidgetItem(tocTW));
- else
- item = (last ? new QTreeWidgetItem(parent,last) : new QTreeWidgetItem(parent));
- } else if (iter->depth > curdepth) {
- int diff = iter->depth - curdepth;
- // first save old parent and last
- while (diff--)
- istack.push(pair< QTreeWidgetItem *, QTreeWidgetItem * >(parent,last));
- item = (last ? new QTreeWidgetItem(last) : new QTreeWidgetItem(tocTW));
- parent = last;
- } else {
- int diff = curdepth - iter->depth;
- pair<QTreeWidgetItem *, QTreeWidgetItem * > top;
- // restore context
- while (diff--) {
- top = istack.top();
- istack.pop();
- }
- parent = top.first;
- last = top.second;
- // insert it after the last one we processed
- if (!parent)
- item = (last ? new QTreeWidgetItem(tocTW,last) : new QTreeWidgetItem(tocTW));
- else
- item = (last ? new QTreeWidgetItem(parent,last) : new QTreeWidgetItem(parent));
- }
- item->setText(0, toqstr(iter->str));
- item->setOpen(iter->depth < depth_);
- curdepth = iter->depth;
- last = item;
- }
-*/
\ No newline at end of file