void OnyxMainWindow::showTableOfContents() { std::vector<int> paragraphs; std::vector<int> pages; std::vector<QString> titles; std::vector<QString> paths; LVTocItem * root = this->view_->getToc(); for ( int i=0; i<root->getChildCount(); i++ ) { LVTocItem *n = root->getChild(i); paragraphs.push_back(n->getLevel()); titles.push_back( cr2qt(n->getName())); paths.push_back(cr2qt(n->getPath())); pages.push_back(n->getPage()); for ( int j=0; j<n->getChildCount(); j++ ) { LVTocItem *m = n->getChild(j); paragraphs.push_back(m->getLevel()); titles.push_back( cr2qt(m->getName())); paths.push_back(cr2qt(m->getPath())); pages.push_back(m->getPage()); } } std::vector<QStandardItem *> ptrs; QStandardItemModel model; QStandardItem *parent = model.invisibleRootItem(); for (size_t i = 0;i < paragraphs.size();++i) { QStandardItem *item= new QStandardItem(titles[i]); item->setData(paths[i],Qt::UserRole+100); item->setEditable(false); ptrs.push_back(item); // Get parent. parent = searchParent(i, paragraphs, ptrs, model); parent->appendRow(item); } TreeViewDialog dialog( this ); dialog.setModel( &model); int ret = dialog.popup( tr("Table of Contents") ); if (ret != QDialog::Accepted) { onyx::screen::watcher().enqueue(this, onyx::screen::ScreenProxy::GU); return; } QModelIndex index = dialog.selectedItem(); if ( !index.isValid() ) { return; } view_->goToXPointer(index.data(Qt::UserRole+100).toString()); }
TocDlg::TocDlg(QWidget *parent, CR3View * docView) : QDialog(parent), m_ui(new Ui::TocDlg), m_docview(docView) { setAttribute( Qt::WA_DeleteOnClose, true ); m_ui->setupUi(this); m_ui->treeWidget->setColumnCount(2); m_ui->treeWidget->setHeaderItem(new QTreeWidgetItem(QStringList() << tr("Title") << tr("Page") )); m_ui->treeWidget->header()->setStretchLastSection(false); m_ui->treeWidget->header()->setResizeMode( 0, QHeaderView::Stretch ); m_ui->treeWidget->header()->setResizeMode( 1, QHeaderView::ResizeToContents ); int nearestPage = -1; int currPage = docView->getCurPage(); TocItem * nearestItem = NULL; LVTocItem * root = m_docview->getToc(); for ( int i=0; i<root->getChildCount(); i++ ) { m_ui->treeWidget->addTopLevelItem( new TocItem( root->getChild(i), currPage, nearestPage, nearestItem ) ); } m_ui->treeWidget->expandAll(); if ( nearestItem ) { m_ui->treeWidget->setCurrentItem( nearestItem ); } m_docview->restoreWindowPos( this, "toc." ); }
bool TocDlg::showDlg( QWidget * parent, CR3View * docView ) { LVTocItem * root = docView->getToc(); if ( !root || !root->getChildCount() ) return false; TocDlg * dlg = new TocDlg( parent, docView ); dlg->show(); return true; }
TocDlg::TocDlg(QWidget *parent, CR3View * docView) : Dialog(parent) , ui(new Ui::TocDlg) , docview(docView) { ui->setupUi(this); QFont f(ui->treeWidget->font()); f.setPointSize(docView->getOptions()->getIntDef(PROP_APP_UI_TOC_FONT_SIZE, 12)); ui->treeWidget->setFont(f); f = ui->lblTitle->font(); f.setBold(true); ui->lblTitle->setFont(f); f = ui->lblPosition->font(); f.setPointSize(f.pointSize()/2); ui->lblPosition->setFont(f); ui->treeWidget->setColumnCount(2); bool isVscroll = docview->getOptions()->getIntDef(PROP_APP_UI_TOC_VSCROLLBAR, 1) != 0; ui->treeWidget->setVerticalScrollBarPolicy(isVscroll? Qt::ScrollBarAsNeeded : Qt::ScrollBarAlwaysOff); bool isHscroll = docview->getOptions()->getIntDef(PROP_APP_UI_TOC_HSCROLLBAR, 1) != 0; ui->treeWidget->setHorizontalScrollBarPolicy(isHscroll? Qt::ScrollBarAsNeeded : Qt::ScrollBarAlwaysOff); ui->treeWidget->header()->setDefaultAlignment(Qt::AlignLeft); ui->treeWidget->header()->setResizeMode(0, isHscroll? QHeaderView::ResizeToContents : QHeaderView::Stretch); ui->treeWidget->header()->setResizeMode(1, QHeaderView::ResizeToContents); ui->treeWidget->header()->setStretchLastSection(false); ui->treeWidget->setExpandsOnDoubleClick(false); ui->treeWidget->setEditFocus(true); int nearestPage = -1; int currPage = docView->getCurPage(); TocItem * nearestItem = NULL; LVTocItem * root = docview->getToc(); for (int i=0; i<root->getChildCount(); i++ ) ui->treeWidget->addTopLevelItem(new TocItem(root->getChild(i), currPage, nearestPage, nearestItem)); ui->treeWidget->expandAll(); if (nearestItem) { ui->treeWidget->setCurrentItem(nearestItem); ui->treeWidget->scrollToItem(nearestItem, QAbstractItemView::EnsureVisible); } QObject::connect( ui->treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(onClicked(QTreeWidgetItem*,int)) ); QObject::connect( ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(onClicked(QTreeWidgetItem*,int)) ); ui->navBar->setControls(ui->treeWidget, ui->lblPosition, QSize( docview->getOptions()->getIntDef(PROP_APP_UI_SWIPES_X_WEIGHT, 1), docview->getOptions()->getIntDef(PROP_APP_UI_SWIPES_Y_WEIGHT, 1) ) ); init(); }
TocDlg::TocDlg(QWidget *parent, CR3View * docView) : QDialog(parent), m_ui(new Ui::TocDlg), m_docview(docView) { setAttribute(Qt::WA_DeleteOnClose, true); m_ui->setupUi(this); addAction(m_ui->actionNextPage); addAction(m_ui->actionPrevPage); addAction(m_ui->actionUpdatePage); QAction *actionSelect = m_ui->actionGotoPage; actionSelect->setShortcut(Qt::Key_Select); addAction(actionSelect); m_ui->treeWidget->setColumnCount(2); m_ui->treeWidget->header()->setResizeMode(0, QHeaderView::Stretch); m_ui->treeWidget->header()->setResizeMode(1, QHeaderView::ResizeToContents); int nearestPage = -1; int currPage = docView->getCurPage(); TocItem * nearestItem = NULL; LVTocItem * root = m_docview->getToc(); for (int i=0; i<root->getChildCount(); i++ ) m_ui->treeWidget->addTopLevelItem(new TocItem(root->getChild(i), currPage, nearestPage, nearestItem)); m_ui->treeWidget->expandAll(); if(nearestItem) m_ui->treeWidget->setCurrentItem(nearestItem); m_ui->pageNumEdit->setValidator(new QIntValidator(1, 999999999, this)); m_ui->pageNumEdit->installEventFilter(this); m_ui->treeWidget->installEventFilter(this); // code added 28.11.2011 countItems = 0; countItemsTotal = getMaxItemPosFromBegin(m_docview->getToc(),m_ui->treeWidget->currentItem(),0); isPageUpdated = false; }