Example #1
0
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)));
    }
  }
Example #2
0
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);
}
Example #3
0
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);
}
Example #4
0
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()));

}
Example #5
0
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);
}
Example #6
0
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;
    }