/** * \file GuiToc.cpp * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author John Levon * \author Abdelrazak Younes * * Full author contact details are available in file CREDITS. */ #include #include "GuiToc.h" #include "TocModel.h" #include "qt_helpers.h" #include "debug.h" #include "ControlToc.h" #include using std::endl; using std::pair; using std::vector; using std::string; namespace lyx { namespace frontend { GuiToc::GuiToc(LyXView & lv) : GuiDialog(lv, "toc") { setViewTitle(_("Outline")); setController(new ControlToc(*this)); #ifdef Q_WS_MACX // On Mac show as a drawer at the right //setView(new DockView( // *dialog, qtoc, &gui_view, _("Outline"), Qt::RightDockWidgetArea, Qt::Drawer)); #else //setView(new DockView( // *dialog, qtoc, &gui_view, _("Outline"))); #endif bc().setPolicy(ButtonPolicy::OkCancelPolicy); } ControlToc & GuiToc::controller() const { return static_cast(Dialog::controller()); } bool GuiToc::canOutline(int type) const { if (type < 0) return false; return controller().canOutline(type); } int GuiToc::getTocDepth(int type) { if (type < 0) return 0; return toc_models_[type]->modelDepth(); } QStandardItemModel * GuiToc::tocModel(int type) { if (type < 0) return 0; if (toc_models_.empty()) { LYXERR(Debug::GUI) << "GuiToc::tocModel(): no types available " << endl; return 0; } LYXERR(Debug::GUI) << "GuiToc: type " << type << " toc_models_.size() " << toc_models_.size() << endl; BOOST_ASSERT(type >= 0 && type < int(toc_models_.size())); return toc_models_[type]; } QModelIndex const GuiToc::getCurrentIndex(int type) const { if (type < 0) return QModelIndex(); // FIXME: The TocBackend infrastructure is not ready for LOF and LOT // This is because a proper ParConstIterator is not constructed in // InsetCaption::addToToc() if(!canOutline(type)) return QModelIndex(); return toc_models_[type]->modelIndex(controller().getCurrentTocItem(type)); } void GuiToc::goTo(int type, QModelIndex const & index) { if (type < 0 || !index.isValid() || index.model() != toc_models_[type]) { LYXERR(Debug::GUI) << "GuiToc::goTo(): QModelIndex is invalid!" << endl; return; } BOOST_ASSERT(type >= 0 && type < int(toc_models_.size())); TocIterator const it = toc_models_[type]->tocIterator(index); LYXERR(Debug::GUI) << "GuiToc::goTo " << to_utf8(it->str()) << endl; controller().goTo(*it); } bool GuiToc::initialiseParams(std::string const & data) { if (!controller().initialiseParams(data)) return false; updateView(); modelReset(); return true; } void GuiToc::updateView() { toc_models_.clear(); TocList::const_iterator it = controller().tocs().begin(); TocList::const_iterator end = controller().tocs().end(); for (; it != end; ++it) toc_models_.push_back(new TocModel(it->second)); } } // namespace frontend } // namespace lyx #include "GuiToc_moc.cpp"