void HelpSearchView::CreateQtPartControl(QWidget* parent) { if (m_ResultWidget == nullptr) { m_Parent = parent; auto vLayout = new QVBoxLayout(parent); // This will be lead to strange behavior when using multiple instances of this view // because the QHelpSearchResultWidget instance is shared. The new view will // reparent the widget. m_ResultWidget = m_SearchEngine->resultWidget(); m_QueryWidget = new QHelpSearchQueryWidget(); vLayout->addWidget(m_QueryWidget); vLayout->addWidget(m_ResultWidget); connect(m_QueryWidget, SIGNAL(search()), this, SLOT(search())); connect(m_ResultWidget, SIGNAL(requestShowLink(QUrl)), this, SLOT(requestShowLink(QUrl))); connect(m_SearchEngine, SIGNAL(searchingStarted()), this, SLOT(searchingStarted())); connect(m_SearchEngine, SIGNAL(searchingFinished(int)), this, SLOT(searchingFinished(int))); QTextBrowser* browser = m_ResultWidget->findChild<QTextBrowser*>(); if (browser) // Will be null if QtHelp was configured not to use CLucene. { browser->viewport()->installEventFilter(this); browser->setContextMenuPolicy(Qt::CustomContextMenu); connect(browser, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showContextMenu(QPoint))); } }
QT_BEGIN_NAMESPACE SearchWidget::SearchWidget(QHelpSearchEngine *engine, QWidget *parent) : QWidget(parent) , zoomCount(0) , searchEngine(engine) { TRACE_OBJ QVBoxLayout *vLayout = new QVBoxLayout(this); resultWidget = searchEngine->resultWidget(); QHelpSearchQueryWidget *queryWidget = searchEngine->queryWidget(); vLayout->addWidget(queryWidget); vLayout->addWidget(resultWidget); setFocusProxy(queryWidget); connect(queryWidget, SIGNAL(search()), this, SLOT(search())); connect(resultWidget, SIGNAL(requestShowLink(QUrl)), this, SIGNAL(requestShowLink(QUrl))); connect(searchEngine, SIGNAL(searchingStarted()), this, SLOT(searchingStarted())); connect(searchEngine, SIGNAL(searchingFinished(int)), this, SLOT(searchingFinished(int))); QTextBrowser* browser = resultWidget->findChild<QTextBrowser*>(); if (browser) // Will be null if lib was configured not to use CLucene. browser->viewport()->installEventFilter(this); }
bool BookmarkWidget::eventFilter(QObject *object, QEvent *e) { if ((object == this) || (object == treeView->viewport())) { QModelIndex index = treeView->currentIndex(); if (e->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast<QKeyEvent*>(e); if (index.isValid() && searchField->text().isEmpty()) { const QModelIndex &src = filterBookmarkModel->mapToSource(index); if (ke->key() == Qt::Key_F2) { QStandardItem *item = bookmarkManager->treeBookmarkModel()->itemFromIndex(src); if (item) { item->setEditable(true); treeView->edit(index); item->setEditable(false); } } else if (ke->key() == Qt::Key_Delete) { bookmarkManager->removeBookmarkItem(treeView, src); } } switch (ke->key()) { default: break; case Qt::Key_Up: { case Qt::Key_Down: treeView->subclassKeyPressEvent(ke); } break; case Qt::Key_Enter: { case Qt::Key_Return: index = treeView->selectionModel()->currentIndex(); if (index.isValid()) { QString data = index.data(Qt::UserRole + 10).toString(); if (!data.isEmpty() && data != QLatin1String("Folder")) emit requestShowLink(data); } } break; case Qt::Key_Escape: { emit escapePressed(); } break; } } else if (e->type() == QEvent::MouseButtonRelease) { if (index.isValid()) { QMouseEvent *me = static_cast<QMouseEvent*>(e); bool controlPressed = me->modifiers() & Qt::ControlModifier; if(((me->button() == Qt::LeftButton) && controlPressed) || (me->button() == Qt::MidButton)) { QString data = index.data(Qt::UserRole + 10).toString(); if (!data.isEmpty() && data != QLatin1String("Folder")) { //CentralWidget::instance()->setSourceInNewTab(data); emit requestShowLinkInNewTab(data); } } } } } return QWidget::eventFilter(object, e); }
void HelpWindow::setHelpEngine(QHelpEngine* engine) { mpHelpEngine = engine; mpSearchEngine = engine->searchEngine(); ui->textBrowser->setHelpEngine(engine); QTabWidget* tWidget = new QTabWidget; tWidget->setMaximumWidth(200); QWidget *widget = new QWidget(this); QVBoxLayout *vLayout = new QVBoxLayout(widget); QHelpSearchQueryWidget* queryWidget = mpSearchEngine->queryWidget(); QHelpSearchResultWidget* resultWidget = mpSearchEngine->resultWidget(); QHelpContentWidget * contentWidget = engine->contentWidget(); vLayout->addWidget(queryWidget); vLayout->addWidget(resultWidget); widget->setLayout(vLayout); widget->setFocusProxy(queryWidget); mpSearchEngine->reindexDocumentation(); tWidget->addTab(contentWidget, "Contents"); tWidget->addTab(widget, "Search"); // no use in displaying the index for now as we don't // have one specified yet //tWidget->addTab(engine->indexWidget(), "Index"); ui->dockWidget->setWidget(tWidget); connect(queryWidget, SIGNAL(search()), this, SLOT(search())); connect(resultWidget, SIGNAL(requestShowLink(QUrl)), ui->textBrowser, SLOT(setSource(QUrl))); connect(contentWidget, SIGNAL(linkActivated(QUrl)), ui->textBrowser, SLOT(setSource(QUrl))); connect(engine->indexWidget(), SIGNAL(linkActivated(QUrl, QString)), ui->textBrowser, SLOT(setSource(QUrl))); contentWidget->setItemsExpandable(true); ui->textBrowser->setSource(QUrl("qthelp://org.sphinx.deviser.1.0/doc/deviser.html")); // expanding the content for whatever reason does not work // right away, so we delay it for a bit. QTimer::singleShot(100, contentWidget, SLOT(expandAll())); }
void BookmarkWidget::activated(const QModelIndex &index) { if (!index.isValid()) return; QString data = index.data(Qt::UserRole + 10).toString(); if (data != QLatin1String("Folder")) emit requestShowLink(data); }
void BookmarkWidget::customContextMenuRequested(const QPoint &point) { QModelIndex index = treeView->indexAt(point); if (!index.isValid()) return; QAction *showItem = 0; QAction *removeItem = 0; QAction *renameItem = 0; QAction *showItemNewTab = 0; QMenu menu(QLatin1String(""), this); QString data = index.data(Qt::UserRole + 10).toString(); if (data == QLatin1String("Folder")) { removeItem = menu.addAction(tr("Delete Folder")); renameItem = menu.addAction(tr("Rename Folder")); } else { showItem = menu.addAction(tr("Show Bookmark")); showItemNewTab = menu.addAction(tr("Show Bookmark in New Tab")); if (searchField->text().isEmpty()) { menu.addSeparator(); removeItem = menu.addAction(tr("Delete Bookmark")); renameItem = menu.addAction(tr("Rename Bookmark")); } } QAction *pickedAction = menu.exec(treeView->mapToGlobal(point)); if (!pickedAction) return; if (pickedAction == showItem) { emit requestShowLink(data); } else if (pickedAction == showItemNewTab) { //CentralWidget::instance()->setSourceInNewTab(data); emit requestShowLinkInNewTab(data); } else if (pickedAction == removeItem) { bookmarkManager->removeBookmarkItem(treeView, filterBookmarkModel->mapToSource(index)); } else if (pickedAction == renameItem) { const QModelIndex &source = filterBookmarkModel->mapToSource(index); QStandardItem *item = bookmarkManager->treeBookmarkModel()->itemFromIndex(source); if (item) { item->setEditable(true); treeView->edit(index); item->setEditable(false); } } }
QObject* GCF::Components::HelpSystemComponent::fetchObject(const QString& completeName) const { QStringList comps = completeName.split('.'); GCF::Components::HelpSystemComponent* that = const_cast<GCF::Components::HelpSystemComponent*>(this); if(comps.last() == "controller") return that; if(comps.last() == "helpEngine") { if( !d->helpEngine ) { qDebug("Help Collection File is: %s", qPrintable(d->helpCollectionFile)); d->helpEngine = new QHelpEngine(d->helpCollectionFile, that); bool success = d->helpEngine->setupData(); if( !success ) qDebug("Could not initialize help engine"); d->contentModel = d->helpEngine->contentModel(); d->contentWidget = d->helpEngine->contentWidget(); d->indexModel = d->helpEngine->indexModel(); d->indexWidget = d->helpEngine->indexWidget(); d->helpSearchEngine = d->helpEngine->searchEngine(); d->helpSearchEngine->reindexDocumentation(); d->searchPanel = new QWidget; QVBoxLayout* layout = new QVBoxLayout(d->searchPanel); layout->setMargin(5); layout->addWidget( d->helpSearchEngine->queryWidget() ); layout->addWidget( d->helpSearchEngine->resultWidget() ); d->indexPanel = new QWidget; QLabel* lf = new QLabel("&Look For"); d->indexFilterLineEdit = new QLineEdit; lf->setBuddy(d->indexFilterLineEdit); d->indexFilterLineEdit->installEventFilter(that); layout = new QVBoxLayout(d->indexPanel); layout->setMargin(5); layout->addWidget(lf); layout->addWidget(d->indexFilterLineEdit); layout->addWidget(d->indexWidget); connect(d->indexWidget, SIGNAL(linkActivated(QUrl,QString)), d->helpView, SLOT(showHelp(QUrl))); connect(d->indexWidget, SIGNAL(linksActivated(QMap<QString, QUrl>,QString)), d->helpView, SLOT(showHelp(QMap<QString, QUrl>,QString))); connect(d->helpSearchEngine->resultWidget(), SIGNAL(requestShowLink(QUrl)), d->helpView, SLOT(showHelp(QUrl))); connect(d->helpSearchEngine->queryWidget(), SIGNAL(search()), this, SLOT(slotBeginSearch())); connect(d->indexFilterLineEdit, SIGNAL(textEdited(const QString&)), d->indexWidget, SLOT(filterIndices(const QString&))); connect(d->indexFilterLineEdit, SIGNAL(returnPressed()), d->indexWidget, SLOT(activateCurrentItem())); connect(d->contentWidget, SIGNAL(clicked(const QModelIndex&)), this,SLOT(slotContentItemClicked(const QModelIndex&))); } return d->helpEngine; }