bool ContentWindow::eventFilter(QObject *o, QEvent *e) { if (m_contentWidget && o == m_contentWidget->viewport() && e->type() == QEvent::MouseButtonRelease) { QMouseEvent *me = static_cast<QMouseEvent*>(e); QItemSelectionModel *sm = m_contentWidget->selectionModel(); if (!me || !sm) return QWidget::eventFilter(o, e); Qt::MouseButtons button = me->button(); const QModelIndex &index = m_contentWidget->indexAt(me->pos()); if (index.isValid() && sm->isSelected(index)) { if ((button == Qt::LeftButton && (me->modifiers() & Qt::ControlModifier)) || (button == Qt::MidButton)) { QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(m_contentWidget->model()); if (contentModel) { QHelpContentItem *itm = contentModel->contentItemAt(index); if (itm && HelpViewer::canOpenPage(itm->url().path())) OpenPagesManager::instance().createPage(itm->url()); } } else if (button == Qt::LeftButton) { itemClicked(index); } } } return QWidget::eventFilter(o, e); }
bool ContentWindow::eventFilter(QObject *o, QEvent *e) { if (m_contentWidget && o == m_contentWidget->viewport() && e->type() == QEvent::MouseButtonRelease) { QMouseEvent *me = static_cast<QMouseEvent*>(e); QModelIndex index = m_contentWidget->indexAt(me->pos()); QItemSelectionModel *sm = m_contentWidget->selectionModel(); Qt::MouseButtons button = me->button(); if (index.isValid() && (sm && sm->isSelected(index))) { if ((button == Qt::LeftButton && (me->modifiers() & Qt::ControlModifier)) || (button == Qt::MidButton)) { QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(m_contentWidget->model()); if (contentModel) { QHelpContentItem *itm = contentModel->contentItemAt(index); if (itm && !isPdfFile(itm)) CentralWidget::instance()->setSourceInNewTab(itm->url()); } } else if (button == Qt::LeftButton) { itemClicked(index); } } } return QWidget::eventFilter(o, e); }
void ContentWindow::itemClicked(const QModelIndex &index) { QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(m_contentWidget->model()); if (contentModel) { QHelpContentItem *itm = contentModel->contentItemAt(index); if (itm) emit linkActivated(itm->url()); } }
void ContentWindow::showContextMenu(const QPoint &pos) { if (!m_contentWidget->indexAt(pos).isValid()) return; QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(m_contentWidget->model()); QHelpContentItem *itm = contentModel->contentItemAt(m_contentWidget->currentIndex()); QMenu menu; QAction *curTab = menu.addAction(tr("Open Link")); QAction *newTab = menu.addAction(tr("Open Link as New Page")); if (!HelpViewer::canOpenPage(itm->url().path())) newTab->setEnabled(false); menu.move(m_contentWidget->mapToGlobal(pos)); QAction *action = menu.exec(); if (curTab == action) emit linkActivated(itm->url()); else if (newTab == action) OpenPagesManager::instance().createPage(itm->url()); }
void ContentWindow::showContextMenu(const QPoint &pos) { if (!m_contentWidget->indexAt(pos).isValid()) return; QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(m_contentWidget->model()); QHelpContentItem *itm = contentModel->contentItemAt(m_contentWidget->currentIndex()); QMenu menu; QAction *curTab = menu.addAction(tr("Open Link")); QAction *newTab = menu.addAction(tr("Open Link in New Tab")); if (isPdfFile(itm)) newTab->setEnabled(false); menu.move(m_contentWidget->mapToGlobal(pos)); QAction *action = menu.exec(); if (curTab == action) emit linkActivated(itm->url()); else if (newTab == action) CentralWidget::instance()->setSourceInNewTab(itm->url()); }
void QHelpContentProvider::run() { QString title; QString link; int depth = 0; QHelpContentItem *item = 0; m_mutex.lock(); m_rootItem = new QHelpContentItem(QString(), QString(), 0); m_rootItems.enqueue(m_rootItem); QStringList atts = m_filterAttributes; const QStringList fileNames = m_helpEngine->orderedFileNameList; m_mutex.unlock(); foreach (const QString &dbFileName, fileNames) { m_mutex.lock(); if (m_abort) { m_abort = false; m_mutex.unlock(); break; } m_mutex.unlock(); QHelpDBReader reader(dbFileName, QHelpGlobal::uniquifyConnectionName(dbFileName + QLatin1String("FromQHelpContentProvider"), QThread::currentThread()), 0); if (!reader.init()) continue; foreach (const QByteArray& ba, reader.contentsForFilter(atts)) { if (ba.size() < 1) continue; int _depth = 0; bool _root = false; QStack<QHelpContentItem*> stack; QDataStream s(ba); for (;;) { s >> depth; s >> link; s >> title; if (title.isEmpty()) break; CHECK_DEPTH: if (depth == 0) { m_mutex.lock(); item = new QHelpContentItem(title, link, m_helpEngine->fileNameReaderMap.value(dbFileName), m_rootItem); m_rootItem->appendChild(item); m_mutex.unlock(); stack.push(item); _depth = 1; _root = true; } else { if (depth > _depth && _root) { _depth = depth; stack.push(item); } if (depth == _depth) { item = new QHelpContentItem(title, link, m_helpEngine->fileNameReaderMap.value(dbFileName), stack.top()); stack.top()->appendChild(item); } else if (depth < _depth) { stack.pop(); --_depth; goto CHECK_DEPTH; } } } } }