forked from qt-creator/qt-creator
Share code between "central" and other help viewers.
This removes a lot of duplication of actions and interaction. It's also a preparation step into making the external help window behave more like the full-fledged help mode. Change-Id: I318d831f229b0a75bb8702a5f163c96cce6a668c Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
@@ -31,22 +31,11 @@
|
|||||||
|
|
||||||
#include "helpviewer.h"
|
#include "helpviewer.h"
|
||||||
#include "localhelpmanager.h"
|
#include "localhelpmanager.h"
|
||||||
|
#include "topicchooser.h"
|
||||||
|
|
||||||
#include <topicchooser.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QEvent>
|
|
||||||
#include <QTimer>
|
|
||||||
|
|
||||||
#include <QKeyEvent>
|
|
||||||
#include <QLayout>
|
|
||||||
#include <QPageSetupDialog>
|
|
||||||
#include <QPrinter>
|
|
||||||
#include <QPrintDialog>
|
|
||||||
#include <QPrintPreviewDialog>
|
|
||||||
#include <QStackedWidget>
|
|
||||||
|
|
||||||
#include <QHelpEngine>
|
#include <QHelpEngine>
|
||||||
#include <QHelpSearchEngine>
|
|
||||||
|
|
||||||
using namespace Help::Internal;
|
using namespace Help::Internal;
|
||||||
|
|
||||||
@@ -54,29 +43,19 @@ CentralWidget *gStaticCentralWidget = 0;
|
|||||||
|
|
||||||
// -- CentralWidget
|
// -- CentralWidget
|
||||||
|
|
||||||
CentralWidget::CentralWidget(QWidget *parent)
|
CentralWidget::CentralWidget(const Core::Context &context, QWidget *parent)
|
||||||
: QWidget(parent)
|
: HelpWidget(context, HelpWidget::ModeWidget, parent)
|
||||||
, printer(0)
|
|
||||||
, m_stackedWidget(0)
|
|
||||||
{
|
{
|
||||||
Q_ASSERT(!gStaticCentralWidget);
|
QTC_CHECK(!gStaticCentralWidget);
|
||||||
gStaticCentralWidget = this;
|
gStaticCentralWidget = this;
|
||||||
|
|
||||||
QVBoxLayout *vboxLayout = new QVBoxLayout(this);
|
|
||||||
vboxLayout->setMargin(0);
|
|
||||||
m_stackedWidget = new QStackedWidget(this);
|
|
||||||
vboxLayout->addWidget(m_stackedWidget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CentralWidget::~CentralWidget()
|
CentralWidget::~CentralWidget()
|
||||||
{
|
{
|
||||||
#ifndef QT_NO_PRINTER
|
// TODO: this shouldn't be done here
|
||||||
delete printer;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QString zoomFactors;
|
QString zoomFactors;
|
||||||
QString currentPages;
|
QString currentPages;
|
||||||
for (int i = 0; i < m_stackedWidget->count(); ++i) {
|
for (int i = 0; i < viewerCount(); ++i) {
|
||||||
const HelpViewer * const viewer = viewerAt(i);
|
const HelpViewer * const viewer = viewerAt(i);
|
||||||
const QUrl &source = viewer->source();
|
const QUrl &source = viewer->source();
|
||||||
if (source.isValid()) {
|
if (source.isValid()) {
|
||||||
@@ -97,171 +76,6 @@ CentralWidget *CentralWidget::instance()
|
|||||||
return gStaticCentralWidget;
|
return gStaticCentralWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CentralWidget::isForwardAvailable() const
|
|
||||||
{
|
|
||||||
const HelpViewer* viewer = currentHelpViewer();
|
|
||||||
if (viewer)
|
|
||||||
return viewer->isForwardAvailable();
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CentralWidget::isBackwardAvailable() const
|
|
||||||
{
|
|
||||||
const HelpViewer* viewer = currentHelpViewer();
|
|
||||||
if (viewer)
|
|
||||||
return viewer->isBackwardAvailable();
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
HelpViewer* CentralWidget::viewerAt(int index) const
|
|
||||||
{
|
|
||||||
return qobject_cast<HelpViewer*> (m_stackedWidget->widget(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
HelpViewer* CentralWidget::currentHelpViewer() const
|
|
||||||
{
|
|
||||||
return qobject_cast<HelpViewer*> (m_stackedWidget->currentWidget());
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::addPage(HelpViewer *page, bool fromSearch)
|
|
||||||
{
|
|
||||||
page->installEventFilter(this);
|
|
||||||
page->setFocus(Qt::OtherFocusReason);
|
|
||||||
connectSignals(page);
|
|
||||||
m_stackedWidget->addWidget(page);
|
|
||||||
if (fromSearch) {
|
|
||||||
connect(currentHelpViewer(), SIGNAL(loadFinished()), this,
|
|
||||||
SLOT(highlightSearchTerms()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::removePage(int index)
|
|
||||||
{
|
|
||||||
m_stackedWidget->removeWidget(m_stackedWidget->widget(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
int CentralWidget::currentIndex() const
|
|
||||||
{
|
|
||||||
return m_stackedWidget->currentIndex();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::setCurrentPage(HelpViewer *page)
|
|
||||||
{
|
|
||||||
m_stackedWidget->setCurrentWidget(page);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CentralWidget::find(const QString &txt, Core::FindFlags flags,
|
|
||||||
bool incremental, bool *wrapped)
|
|
||||||
{
|
|
||||||
return currentHelpViewer()->findText(txt, flags, incremental, false, wrapped);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -- public slots
|
|
||||||
|
|
||||||
void CentralWidget::copy()
|
|
||||||
{
|
|
||||||
if (HelpViewer* viewer = currentHelpViewer())
|
|
||||||
viewer->copy();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::home()
|
|
||||||
{
|
|
||||||
if (HelpViewer* viewer = currentHelpViewer())
|
|
||||||
viewer->home();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::zoomIn()
|
|
||||||
{
|
|
||||||
HelpViewer* viewer = currentHelpViewer();
|
|
||||||
if (viewer)
|
|
||||||
viewer->scaleUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::zoomOut()
|
|
||||||
{
|
|
||||||
HelpViewer* viewer = currentHelpViewer();
|
|
||||||
if (viewer)
|
|
||||||
viewer->scaleDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::resetZoom()
|
|
||||||
{
|
|
||||||
HelpViewer* viewer = currentHelpViewer();
|
|
||||||
if (viewer)
|
|
||||||
viewer->resetScale();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::forward()
|
|
||||||
{
|
|
||||||
if (HelpViewer* viewer = currentHelpViewer())
|
|
||||||
viewer->forward();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::backward()
|
|
||||||
{
|
|
||||||
if (HelpViewer* viewer = currentHelpViewer())
|
|
||||||
viewer->backward();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::print()
|
|
||||||
{
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
if (HelpViewer* viewer = currentHelpViewer()) {
|
|
||||||
initPrinter();
|
|
||||||
|
|
||||||
QPrintDialog dlg(printer, this);
|
|
||||||
dlg.setWindowTitle(tr("Print Document"));
|
|
||||||
if (!viewer->selectedText().isEmpty())
|
|
||||||
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
|
|
||||||
dlg.addEnabledOption(QAbstractPrintDialog::PrintPageRange);
|
|
||||||
dlg.addEnabledOption(QAbstractPrintDialog::PrintCollateCopies);
|
|
||||||
|
|
||||||
if (dlg.exec() == QDialog::Accepted)
|
|
||||||
viewer->print(printer);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::pageSetup()
|
|
||||||
{
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
initPrinter();
|
|
||||||
QPageSetupDialog dlg(printer);
|
|
||||||
dlg.exec();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::printPreview()
|
|
||||||
{
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
initPrinter();
|
|
||||||
QPrintPreviewDialog preview(printer, this);
|
|
||||||
connect(&preview, SIGNAL(paintRequested(QPrinter*)),
|
|
||||||
SLOT(printPreview(QPrinter*)));
|
|
||||||
preview.exec();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::setSource(const QUrl &url)
|
|
||||||
{
|
|
||||||
if (HelpViewer* viewer = currentHelpViewer()) {
|
|
||||||
viewer->setSource(url);
|
|
||||||
viewer->setFocus(Qt::OtherFocusReason);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::setSourceFromSearch(const QUrl &url)
|
|
||||||
{
|
|
||||||
if (HelpViewer* viewer = currentHelpViewer()) {
|
|
||||||
connect(viewer, SIGNAL(loadFinished()), this,
|
|
||||||
SLOT(highlightSearchTerms()));
|
|
||||||
viewer->setSource(url);
|
|
||||||
viewer->setFocus(Qt::OtherFocusReason);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::showTopicChooser(const QMap<QString, QUrl> &links,
|
void CentralWidget::showTopicChooser(const QMap<QString, QUrl> &links,
|
||||||
const QString &keyword)
|
const QString &keyword)
|
||||||
{
|
{
|
||||||
@@ -269,99 +83,3 @@ void CentralWidget::showTopicChooser(const QMap<QString, QUrl> &links,
|
|||||||
if (tc.exec() == QDialog::Accepted)
|
if (tc.exec() == QDialog::Accepted)
|
||||||
setSource(tc.link());
|
setSource(tc.link());
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- protected
|
|
||||||
|
|
||||||
void CentralWidget::focusInEvent(QFocusEvent * /* event */)
|
|
||||||
{
|
|
||||||
// If we have a current help viewer then this is the 'focus proxy',
|
|
||||||
// otherwise it's the central widget. This is needed, so an embedding
|
|
||||||
// program can just set the focus to the central widget and it does
|
|
||||||
// The Right Thing(TM)
|
|
||||||
QObject *receiver = m_stackedWidget;
|
|
||||||
if (HelpViewer *viewer = currentHelpViewer())
|
|
||||||
receiver = viewer;
|
|
||||||
QTimer::singleShot(1, receiver, SLOT(setFocus()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// -- private slots
|
|
||||||
|
|
||||||
void CentralWidget::highlightSearchTerms()
|
|
||||||
{
|
|
||||||
if (HelpViewer *viewer = currentHelpViewer()) {
|
|
||||||
QHelpSearchEngine *searchEngine =
|
|
||||||
LocalHelpManager::helpEngine().searchEngine();
|
|
||||||
QList<QHelpSearchQuery> queryList = searchEngine->query();
|
|
||||||
|
|
||||||
QStringList terms;
|
|
||||||
foreach (const QHelpSearchQuery &query, queryList) {
|
|
||||||
switch (query.fieldName) {
|
|
||||||
default: break;
|
|
||||||
case QHelpSearchQuery::ALL: {
|
|
||||||
case QHelpSearchQuery::PHRASE:
|
|
||||||
case QHelpSearchQuery::DEFAULT:
|
|
||||||
case QHelpSearchQuery::ATLEAST:
|
|
||||||
foreach (QString term, query.wordList)
|
|
||||||
terms.append(term.remove(QLatin1Char('"')));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (const QString& term, terms)
|
|
||||||
viewer->findText(term, 0, false, true);
|
|
||||||
disconnect(viewer, SIGNAL(loadFinished()), this,
|
|
||||||
SLOT(highlightSearchTerms()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::printPreview(QPrinter *p)
|
|
||||||
{
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
HelpViewer *viewer = currentHelpViewer();
|
|
||||||
if (viewer)
|
|
||||||
viewer->print(p);
|
|
||||||
#else
|
|
||||||
Q_UNUSED(p)
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::handleSourceChanged(const QUrl &url)
|
|
||||||
{
|
|
||||||
if (sender() == currentHelpViewer())
|
|
||||||
emit sourceChanged(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -- private
|
|
||||||
|
|
||||||
void CentralWidget::initPrinter()
|
|
||||||
{
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
if (!printer)
|
|
||||||
printer = new QPrinter(QPrinter::HighResolution);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CentralWidget::connectSignals(HelpViewer *page)
|
|
||||||
{
|
|
||||||
connect(page, SIGNAL(sourceChanged(QUrl)), this, SLOT(handleSourceChanged(QUrl)));
|
|
||||||
connect(page, SIGNAL(forwardAvailable(bool)), this, SIGNAL(forwardAvailable(bool)));
|
|
||||||
connect(page, SIGNAL(backwardAvailable(bool)), this, SIGNAL(backwardAvailable(bool)));
|
|
||||||
connect(page, SIGNAL(printRequested()), this, SLOT(print()));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CentralWidget::eventFilter(QObject *object, QEvent *e)
|
|
||||||
{
|
|
||||||
if (e->type() != QEvent::KeyPress)
|
|
||||||
return QWidget::eventFilter(object, e);
|
|
||||||
|
|
||||||
HelpViewer *viewer = currentHelpViewer();
|
|
||||||
QKeyEvent *keyEvent = static_cast<QKeyEvent*> (e);
|
|
||||||
if (viewer == object && keyEvent->key() == Qt::Key_Backspace) {
|
|
||||||
if (viewer->isBackwardAvailable()) {
|
|
||||||
// this helps in case there is an html <input> field
|
|
||||||
if (!viewer->hasFocus())
|
|
||||||
viewer->backward();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return QWidget::eventFilter(object, e);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -30,90 +30,32 @@
|
|||||||
#ifndef CENTRALWIDGET_H
|
#ifndef CENTRALWIDGET_H
|
||||||
#define CENTRALWIDGET_H
|
#define CENTRALWIDGET_H
|
||||||
|
|
||||||
|
#include "helpwidget.h"
|
||||||
|
|
||||||
#include <coreplugin/find/ifindsupport.h>
|
#include <coreplugin/find/ifindsupport.h>
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QEvent)
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QAction)
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QStackedWidget)
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QFocusEvent)
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QPrinter)
|
|
||||||
|
|
||||||
namespace Help {
|
namespace Help {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class HelpViewer;
|
class HelpViewer;
|
||||||
class PrintHelper;
|
class PrintHelper;
|
||||||
|
|
||||||
class CentralWidget : public QWidget
|
class CentralWidget : public HelpWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CentralWidget(QWidget *parent = 0);
|
CentralWidget(const Core::Context &context, QWidget *parent = 0);
|
||||||
~CentralWidget();
|
~CentralWidget();
|
||||||
|
|
||||||
static CentralWidget *instance();
|
static CentralWidget *instance();
|
||||||
|
|
||||||
bool isForwardAvailable() const;
|
|
||||||
bool isBackwardAvailable() const;
|
|
||||||
|
|
||||||
HelpViewer *viewerAt(int index) const;
|
|
||||||
HelpViewer *currentHelpViewer() const;
|
|
||||||
|
|
||||||
void addPage(HelpViewer *page, bool fromSearch = false);
|
|
||||||
void removePage(int index);
|
|
||||||
|
|
||||||
int currentIndex() const;
|
|
||||||
void setCurrentPage(HelpViewer *page);
|
|
||||||
|
|
||||||
bool find(const QString &txt, Core::FindFlags findFlags,
|
|
||||||
bool incremental, bool *wrapped = 0);
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void copy();
|
|
||||||
void home();
|
|
||||||
|
|
||||||
void zoomIn();
|
|
||||||
void zoomOut();
|
|
||||||
void resetZoom();
|
|
||||||
|
|
||||||
void forward();
|
|
||||||
void backward();
|
|
||||||
|
|
||||||
void print();
|
|
||||||
void pageSetup();
|
|
||||||
void printPreview();
|
|
||||||
|
|
||||||
void setSource(const QUrl &url);
|
|
||||||
void setSourceFromSearch(const QUrl &url);
|
|
||||||
void showTopicChooser(const QMap<QString, QUrl> &links, const QString &key);
|
void showTopicChooser(const QMap<QString, QUrl> &links, const QString &key);
|
||||||
|
|
||||||
protected:
|
|
||||||
void focusInEvent(QFocusEvent *event);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void sourceChanged(const QUrl &url);
|
|
||||||
void forwardAvailable(bool available);
|
|
||||||
void backwardAvailable(bool available);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void highlightSearchTerms();
|
|
||||||
void printPreview(QPrinter *printer);
|
|
||||||
void handleSourceChanged(const QUrl &url);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void initPrinter();
|
|
||||||
void connectSignals(HelpViewer *page);
|
|
||||||
bool eventFilter(QObject *object, QEvent *e);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QPrinter *printer;
|
|
||||||
QStackedWidget *m_stackedWidget;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace Help
|
} // namespace Help
|
||||||
|
|
||||||
#endif // CENTRALWIDGET_H
|
#endif // CENTRALWIDGET_H
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ QWidget *GeneralSettingsPage::widget()
|
|||||||
connect(m_ui->blankPageButton, SIGNAL(clicked()), this, SLOT(setBlankPage()));
|
connect(m_ui->blankPageButton, SIGNAL(clicked()), this, SLOT(setBlankPage()));
|
||||||
connect(m_ui->defaultPageButton, SIGNAL(clicked()), this, SLOT(setDefaultPage()));
|
connect(m_ui->defaultPageButton, SIGNAL(clicked()), this, SLOT(setDefaultPage()));
|
||||||
|
|
||||||
HelpViewer *viewer = CentralWidget::instance()->currentHelpViewer();
|
HelpViewer *viewer = CentralWidget::instance()->currentViewer();
|
||||||
if (!viewer)
|
if (!viewer)
|
||||||
m_ui->currentPageButton->setEnabled(false);
|
m_ui->currentPageButton->setEnabled(false);
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@ void GeneralSettingsPage::apply()
|
|||||||
|
|
||||||
void GeneralSettingsPage::setCurrentPage()
|
void GeneralSettingsPage::setCurrentPage()
|
||||||
{
|
{
|
||||||
HelpViewer *viewer = CentralWidget::instance()->currentHelpViewer();
|
HelpViewer *viewer = CentralWidget::instance()->currentViewer();
|
||||||
if (viewer)
|
if (viewer)
|
||||||
m_ui->homePageLineEdit->setText(viewer->source().toString());
|
m_ui->homePageLineEdit->setText(viewer->source().toString());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,18 +107,6 @@ static const char kExternalWindowStateKey[] = "Help/ExternalWindowState";
|
|||||||
|
|
||||||
using namespace Core;
|
using namespace Core;
|
||||||
|
|
||||||
static QToolButton *toolButton(Core::Command *cmd, QAction *action)
|
|
||||||
{
|
|
||||||
QToolButton *button = new QToolButton;
|
|
||||||
button->setDefaultAction(action);
|
|
||||||
button->setPopupMode(QToolButton::DelayedPopup);
|
|
||||||
action->setToolTip(cmd->stringWithAppendedShortcut(action->text()));
|
|
||||||
QObject::connect(cmd, &Core::Command::keySequenceChanged, action, [cmd, action]() {
|
|
||||||
action->setToolTip(cmd->stringWithAppendedShortcut(action->text()));
|
|
||||||
});
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
HelpPlugin::HelpPlugin()
|
HelpPlugin::HelpPlugin()
|
||||||
: m_mode(0),
|
: m_mode(0),
|
||||||
m_centralWidget(0),
|
m_centralWidget(0),
|
||||||
@@ -131,8 +119,6 @@ HelpPlugin::HelpPlugin()
|
|||||||
m_firstModeChange(true),
|
m_firstModeChange(true),
|
||||||
m_helpManager(0),
|
m_helpManager(0),
|
||||||
m_openPagesManager(0),
|
m_openPagesManager(0),
|
||||||
m_backMenu(0),
|
|
||||||
m_nextMenu(0),
|
|
||||||
m_isSidebarVisible(true)
|
m_isSidebarVisible(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -175,9 +161,15 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
|||||||
addAutoReleasedObject(m_generalSettingsPage = new GeneralSettingsPage());
|
addAutoReleasedObject(m_generalSettingsPage = new GeneralSettingsPage());
|
||||||
addAutoReleasedObject(m_searchTaskHandler = new SearchTaskHandler);
|
addAutoReleasedObject(m_searchTaskHandler = new SearchTaskHandler);
|
||||||
|
|
||||||
|
m_centralWidget = new Help::Internal::CentralWidget(modecontext);
|
||||||
|
connect(m_centralWidget, SIGNAL(sourceChanged(QUrl)), this,
|
||||||
|
SLOT(updateSideBarSource(QUrl)));
|
||||||
|
connect(m_centralWidget, &CentralWidget::closeButtonClicked,
|
||||||
|
&OpenPagesManager::instance(), &OpenPagesManager::closeCurrentPage);
|
||||||
|
|
||||||
connect(m_generalSettingsPage, SIGNAL(fontChanged()), this,
|
connect(m_generalSettingsPage, SIGNAL(fontChanged()), this,
|
||||||
SLOT(fontChanged()));
|
SLOT(fontChanged()));
|
||||||
connect(m_generalSettingsPage, SIGNAL(returnOnCloseChanged()), this,
|
connect(m_generalSettingsPage, SIGNAL(returnOnCloseChanged()), m_centralWidget,
|
||||||
SLOT(updateCloseButton()));
|
SLOT(updateCloseButton()));
|
||||||
connect(HelpManager::instance(), SIGNAL(helpRequested(QUrl,Core::HelpManager::HelpViewerLocation)),
|
connect(HelpManager::instance(), SIGNAL(helpRequested(QUrl,Core::HelpManager::HelpViewerLocation)),
|
||||||
this, SLOT(handleHelpRequest(QUrl,Core::HelpManager::HelpViewerLocation)));
|
this, SLOT(handleHelpRequest(QUrl,Core::HelpManager::HelpViewerLocation)));
|
||||||
@@ -193,52 +185,9 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
|||||||
connect(HelpManager::instance(), SIGNAL(setupFinished()), this,
|
connect(HelpManager::instance(), SIGNAL(setupFinished()), this,
|
||||||
SLOT(unregisterOldQtCreatorDocumentation()));
|
SLOT(unregisterOldQtCreatorDocumentation()));
|
||||||
|
|
||||||
auto helpButtonBar = new Utils::StyledBar;
|
|
||||||
auto helpButtonLayout = new QHBoxLayout(helpButtonBar);
|
|
||||||
helpButtonLayout->setMargin(0);
|
|
||||||
helpButtonLayout->setSpacing(0);
|
|
||||||
|
|
||||||
m_splitter = new MiniSplitter;
|
m_splitter = new MiniSplitter;
|
||||||
Command *cmd;
|
Command *cmd;
|
||||||
m_centralWidget = new Help::Internal::CentralWidget();
|
QAction *action;
|
||||||
connect(m_centralWidget, SIGNAL(sourceChanged(QUrl)), this,
|
|
||||||
SLOT(updateSideBarSource(QUrl)));
|
|
||||||
// Add Home, Previous and Next actions (used in the toolbar)
|
|
||||||
QAction *action = new QAction(QIcon(QLatin1String(IMAGEPATH "home.png")),
|
|
||||||
tr("Home"), this);
|
|
||||||
cmd = ActionManager::registerAction(action, Constants::HELP_HOME, globalcontext);
|
|
||||||
connect(action, SIGNAL(triggered()), m_centralWidget, SLOT(home()));
|
|
||||||
helpButtonLayout->addWidget(toolButton(cmd, action));
|
|
||||||
|
|
||||||
QAction *back = new QAction(QIcon(QLatin1String(IMAGEPATH "previous.png")),
|
|
||||||
tr("Previous Page"), this);
|
|
||||||
cmd = ActionManager::registerAction(back, Constants::HELP_PREVIOUS, modecontext);
|
|
||||||
cmd->setDefaultKeySequence(QKeySequence::Back);
|
|
||||||
back->setEnabled(m_centralWidget->isBackwardAvailable());
|
|
||||||
connect(back, SIGNAL(triggered()), m_centralWidget, SLOT(backward()));
|
|
||||||
connect(m_centralWidget, SIGNAL(backwardAvailable(bool)), back,
|
|
||||||
SLOT(setEnabled(bool)));
|
|
||||||
helpButtonLayout->addWidget(toolButton(cmd, back));
|
|
||||||
|
|
||||||
QAction *next = new QAction(QIcon(QLatin1String(IMAGEPATH "next.png")), tr("Next Page"), this);
|
|
||||||
cmd = ActionManager::registerAction(next, Constants::HELP_NEXT, modecontext);
|
|
||||||
cmd->setDefaultKeySequence(QKeySequence::Forward);
|
|
||||||
next->setEnabled(m_centralWidget->isForwardAvailable());
|
|
||||||
connect(next, SIGNAL(triggered()), m_centralWidget, SLOT(forward()));
|
|
||||||
connect(m_centralWidget, SIGNAL(forwardAvailable(bool)), next,
|
|
||||||
SLOT(setEnabled(bool)));
|
|
||||||
helpButtonLayout->addWidget(toolButton(cmd, next));
|
|
||||||
helpButtonLayout->addWidget(new Utils::StyledSeparator(helpButtonBar));
|
|
||||||
|
|
||||||
setupNavigationMenus(back, next, helpButtonBar);
|
|
||||||
|
|
||||||
action = new QAction(QIcon(QLatin1String(IMAGEPATH "bookmark.png")),
|
|
||||||
tr("Add Bookmark"), this);
|
|
||||||
cmd = ActionManager::registerAction(action, Constants::HELP_BOOKMARK, modecontext);
|
|
||||||
cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? tr("Meta+M") : tr("Ctrl+M")));
|
|
||||||
connect(action, SIGNAL(triggered()), this, SLOT(addBookmark()));
|
|
||||||
helpButtonLayout->addWidget(toolButton(cmd, action));
|
|
||||||
helpButtonLayout->addWidget(new Utils::StyledSeparator(helpButtonBar));
|
|
||||||
|
|
||||||
// Add Contents, Index, and Context menu items
|
// Add Contents, Index, and Context menu items
|
||||||
action = new QAction(QIcon::fromTheme(QLatin1String("help-contents")),
|
action = new QAction(QIcon::fromTheme(QLatin1String("help-contents")),
|
||||||
@@ -268,34 +217,6 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
|||||||
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
||||||
connect(action, SIGNAL(triggered()), this, SLOT(slotReportBug()));
|
connect(action, SIGNAL(triggered()), this, SLOT(slotReportBug()));
|
||||||
|
|
||||||
action = new QAction(this);
|
|
||||||
ActionManager::registerAction(action, Core::Constants::PRINT, modecontext);
|
|
||||||
connect(action, SIGNAL(triggered()), m_centralWidget, SLOT(print()));
|
|
||||||
|
|
||||||
action = new QAction(this);
|
|
||||||
cmd = ActionManager::registerAction(action, Core::Constants::COPY, modecontext);
|
|
||||||
connect(action, SIGNAL(triggered()), m_centralWidget, SLOT(copy()));
|
|
||||||
action->setText(cmd->action()->text());
|
|
||||||
action->setIcon(cmd->action()->icon());
|
|
||||||
|
|
||||||
if (ActionContainer *advancedMenu = ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED)) {
|
|
||||||
// reuse TextEditor constants to avoid a second pair of menu actions
|
|
||||||
action = new QAction(tr("Increase Font Size"), this);
|
|
||||||
cmd = ActionManager::registerAction(action, TextEditor::Constants::INCREASE_FONT_SIZE, modecontext);
|
|
||||||
connect(action, SIGNAL(triggered()), m_centralWidget, SLOT(zoomIn()));
|
|
||||||
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
|
||||||
|
|
||||||
action = new QAction(tr("Decrease Font Size"), this);
|
|
||||||
cmd = ActionManager::registerAction(action, TextEditor::Constants::DECREASE_FONT_SIZE, modecontext);
|
|
||||||
connect(action, SIGNAL(triggered()), m_centralWidget, SLOT(zoomOut()));
|
|
||||||
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
|
||||||
|
|
||||||
action = new QAction(tr("Reset Font Size"), this);
|
|
||||||
cmd = ActionManager::registerAction(action, TextEditor::Constants::RESET_FONT_SIZE, modecontext);
|
|
||||||
connect(action, SIGNAL(triggered()), m_centralWidget, SLOT(resetZoom()));
|
|
||||||
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ActionContainer *windowMenu = ActionManager::actionContainer(Core::Constants::M_WINDOW)) {
|
if (ActionContainer *windowMenu = ActionManager::actionContainer(Core::Constants::M_WINDOW)) {
|
||||||
// reuse EditorManager constants to avoid a second pair of menu actions
|
// reuse EditorManager constants to avoid a second pair of menu actions
|
||||||
// Goto Previous In History Action
|
// Goto Previous In History Action
|
||||||
@@ -315,27 +236,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
|||||||
SLOT(gotoNextPage()));
|
SLOT(gotoNextPage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *toolBarWidget = new QWidget;
|
m_splitter->addWidget(m_centralWidget);
|
||||||
QHBoxLayout *toolBarLayout = new QHBoxLayout(toolBarWidget);
|
|
||||||
toolBarLayout->setMargin(0);
|
|
||||||
toolBarLayout->setSpacing(0);
|
|
||||||
toolBarLayout->addWidget(helpButtonBar);
|
|
||||||
toolBarLayout->addWidget(createWidgetToolBar());
|
|
||||||
|
|
||||||
QWidget *mainWidget = new QWidget;
|
|
||||||
m_splitter->addWidget(mainWidget);
|
|
||||||
QVBoxLayout *mainWidgetLayout = new QVBoxLayout(mainWidget);
|
|
||||||
mainWidgetLayout->setMargin(0);
|
|
||||||
mainWidgetLayout->setSpacing(0);
|
|
||||||
mainWidgetLayout->addWidget(toolBarWidget);
|
|
||||||
mainWidgetLayout->addWidget(m_centralWidget);
|
|
||||||
|
|
||||||
if (QLayout *layout = m_centralWidget->layout()) {
|
|
||||||
layout->setSpacing(0);
|
|
||||||
FindToolBarPlaceHolder *fth = new FindToolBarPlaceHolder(m_centralWidget);
|
|
||||||
fth->setObjectName(QLatin1String("HelpFindToolBarPlaceHolder"));
|
|
||||||
mainWidgetLayout->addWidget(fth);
|
|
||||||
}
|
|
||||||
|
|
||||||
HelpIndexFilter *helpIndexFilter = new HelpIndexFilter();
|
HelpIndexFilter *helpIndexFilter = new HelpIndexFilter();
|
||||||
addAutoReleasedObject(helpIndexFilter);
|
addAutoReleasedObject(helpIndexFilter);
|
||||||
@@ -516,8 +417,9 @@ void HelpPlugin::resetFilter()
|
|||||||
engine->setCustomValue(Help::Constants::PreviousFilterNameKey, filterName);
|
engine->setCustomValue(Help::Constants::PreviousFilterNameKey, filterName);
|
||||||
engine->setCurrentFilter(filterName);
|
engine->setCurrentFilter(filterName);
|
||||||
|
|
||||||
updateFilterComboBox();
|
LocalHelpManager::updateFilterModel();
|
||||||
connect(engine, SIGNAL(setupFinished()), this, SLOT(updateFilterComboBox()));
|
connect(engine, &QHelpEngineCore::setupFinished,
|
||||||
|
LocalHelpManager::instance(), &LocalHelpManager::updateFilterModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::saveExternalWindowSettings()
|
void HelpPlugin::saveExternalWindowSettings()
|
||||||
@@ -647,7 +549,7 @@ void HelpPlugin::modeChanged(IMode *mode, IMode *old)
|
|||||||
|
|
||||||
void HelpPlugin::updateSideBarSource()
|
void HelpPlugin::updateSideBarSource()
|
||||||
{
|
{
|
||||||
if (HelpViewer *viewer = m_centralWidget->currentHelpViewer()) {
|
if (HelpViewer *viewer = m_centralWidget->currentViewer()) {
|
||||||
const QUrl &url = viewer->source();
|
const QUrl &url = viewer->source();
|
||||||
if (url.isValid())
|
if (url.isValid())
|
||||||
updateSideBarSource(url);
|
updateSideBarSource(url);
|
||||||
@@ -660,14 +562,6 @@ void HelpPlugin::updateSideBarSource(const QUrl &newUrl)
|
|||||||
m_rightPaneSideBarWidget->currentViewer()->setSource(newUrl);
|
m_rightPaneSideBarWidget->currentViewer()->setSource(newUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::updateCloseButton()
|
|
||||||
{
|
|
||||||
const bool closeOnReturn = HelpManager::customValue(QLatin1String("ReturnOnClose"),
|
|
||||||
false).toBool();
|
|
||||||
m_closeButton->setEnabled((OpenPagesManager::instance().pageCount() > 1)
|
|
||||||
|| closeOnReturn);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::fontChanged()
|
void HelpPlugin::fontChanged()
|
||||||
{
|
{
|
||||||
if (!m_rightPaneSideBarWidget)
|
if (!m_rightPaneSideBarWidget)
|
||||||
@@ -677,23 +571,8 @@ void HelpPlugin::fontChanged()
|
|||||||
QFont font = fontSetting.isValid() ? fontSetting.value<QFont>()
|
QFont font = fontSetting.isValid() ? fontSetting.value<QFont>()
|
||||||
: m_rightPaneSideBarWidget->currentViewer()->viewerFont();
|
: m_rightPaneSideBarWidget->currentViewer()->viewerFont();
|
||||||
|
|
||||||
m_rightPaneSideBarWidget->currentViewer()->setViewerFont(font);
|
m_rightPaneSideBarWidget->setViewerFont(font);
|
||||||
const int count = OpenPagesManager::instance().pageCount();
|
CentralWidget::instance()->setViewerFont(font);
|
||||||
for (int i = 0; i < count; ++i) {
|
|
||||||
if (HelpViewer *viewer = CentralWidget::instance()->viewerAt(i))
|
|
||||||
viewer->setViewerFont(font);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QStackedLayout * layoutForWidget(QWidget *parent, QWidget *widget)
|
|
||||||
{
|
|
||||||
QList<QStackedLayout*> list = parent->findChildren<QStackedLayout*>();
|
|
||||||
foreach (QStackedLayout *layout, list) {
|
|
||||||
const int index = layout->indexOf(widget);
|
|
||||||
if (index >= 0)
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::setupHelpEngineIfNeeded()
|
void HelpPlugin::setupHelpEngineIfNeeded()
|
||||||
@@ -743,7 +622,7 @@ HelpViewer *HelpPlugin::viewerForHelpViewerLocation(Core::HelpManager::HelpViewe
|
|||||||
QTC_CHECK(actualLocation == Core::HelpManager::HelpModeAlways);
|
QTC_CHECK(actualLocation == Core::HelpManager::HelpModeAlways);
|
||||||
|
|
||||||
activateHelpMode(); // should trigger an createPage...
|
activateHelpMode(); // should trigger an createPage...
|
||||||
HelpViewer *viewer = m_centralWidget->currentHelpViewer();
|
HelpViewer *viewer = m_centralWidget->currentViewer();
|
||||||
if (!viewer)
|
if (!viewer)
|
||||||
viewer = OpenPagesManager::instance().createPage();
|
viewer = OpenPagesManager::instance().createPage();
|
||||||
return viewer;
|
return viewer;
|
||||||
@@ -850,69 +729,6 @@ void HelpPlugin::activateBookmarks()
|
|||||||
m_sideBar->activateItem(m_bookmarkItem);
|
m_sideBar->activateItem(m_bookmarkItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::StyledBar *HelpPlugin::createWidgetToolBar()
|
|
||||||
{
|
|
||||||
m_filterComboBox = new QComboBox;
|
|
||||||
m_filterComboBox->setMinimumContentsLength(15);
|
|
||||||
connect(m_filterComboBox, SIGNAL(activated(QString)), this,
|
|
||||||
SLOT(filterDocumentation(QString)));
|
|
||||||
connect(m_filterComboBox, SIGNAL(currentIndexChanged(int)), this,
|
|
||||||
SLOT(updateSideBarSource()));
|
|
||||||
|
|
||||||
m_closeButton = new QToolButton();
|
|
||||||
m_closeButton->setIcon(QIcon(QLatin1String(Core::Constants::ICON_BUTTON_CLOSE)));
|
|
||||||
m_closeButton->setToolTip(tr("Close current page"));
|
|
||||||
connect(m_closeButton, SIGNAL(clicked()), &OpenPagesManager::instance(),
|
|
||||||
SLOT(closeCurrentPage()));
|
|
||||||
connect(&OpenPagesManager::instance(), SIGNAL(pagesChanged()), this,
|
|
||||||
SLOT(updateCloseButton()));
|
|
||||||
|
|
||||||
Utils::StyledBar *toolBar = new Utils::StyledBar;
|
|
||||||
|
|
||||||
QHBoxLayout *layout = new QHBoxLayout(toolBar);
|
|
||||||
layout->setMargin(0);
|
|
||||||
layout->setSpacing(0);
|
|
||||||
layout->addWidget(OpenPagesManager::instance().openPagesComboBox(), 10);
|
|
||||||
layout->addSpacing(5);
|
|
||||||
layout->addWidget(new QLabel(tr("Filtered by:")));
|
|
||||||
layout->addWidget(m_filterComboBox);
|
|
||||||
layout->addStretch();
|
|
||||||
layout->addWidget(m_closeButton);
|
|
||||||
|
|
||||||
return toolBar;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::updateFilterComboBox()
|
|
||||||
{
|
|
||||||
const QHelpEngine &engine = LocalHelpManager::helpEngine();
|
|
||||||
QString curFilter = m_filterComboBox->currentText();
|
|
||||||
if (curFilter.isEmpty())
|
|
||||||
curFilter = engine.currentFilter();
|
|
||||||
m_filterComboBox->clear();
|
|
||||||
m_filterComboBox->addItems(engine.customFilters());
|
|
||||||
int idx = m_filterComboBox->findText(curFilter);
|
|
||||||
if (idx < 0)
|
|
||||||
idx = 0;
|
|
||||||
m_filterComboBox->setCurrentIndex(idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::filterDocumentation(const QString &customFilter)
|
|
||||||
{
|
|
||||||
LocalHelpManager::helpEngine().setCurrentFilter(customFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::addBookmark()
|
|
||||||
{
|
|
||||||
HelpViewer *viewer = m_centralWidget->currentHelpViewer();
|
|
||||||
|
|
||||||
const QString &url = viewer->source().toString();
|
|
||||||
if (url.isEmpty() || url == Help::Constants::AboutBlank)
|
|
||||||
return;
|
|
||||||
|
|
||||||
BookmarkManager *manager = &LocalHelpManager::bookmarkManager();
|
|
||||||
manager->showBookmarkDialog(m_centralWidget, viewer->title(), url);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::highlightSearchTermsInContextHelp()
|
void HelpPlugin::highlightSearchTermsInContextHelp()
|
||||||
{
|
{
|
||||||
if (m_contextHelpHighlightId.isEmpty())
|
if (m_contextHelpHighlightId.isEmpty())
|
||||||
@@ -950,20 +766,6 @@ void HelpPlugin::handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewe
|
|||||||
Core::ICore::raiseWindow(viewer);
|
Core::ICore::raiseWindow(viewer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::slotAboutToShowBackMenu()
|
|
||||||
{
|
|
||||||
m_backMenu->clear();
|
|
||||||
if (HelpViewer *viewer = m_centralWidget->currentHelpViewer())
|
|
||||||
viewer->addBackHistoryItems(m_backMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::slotAboutToShowNextMenu()
|
|
||||||
{
|
|
||||||
m_nextMenu->clear();
|
|
||||||
if (HelpViewer *viewer = m_centralWidget->currentHelpViewer())
|
|
||||||
viewer->addForwardHistoryItems(m_nextMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::slotOpenSupportPage()
|
void HelpPlugin::slotOpenSupportPage()
|
||||||
{
|
{
|
||||||
switchToHelpMode(QUrl(QLatin1String("qthelp://org.qt-project.qtcreator/doc/technical-support.html")));
|
switchToHelpMode(QUrl(QLatin1String("qthelp://org.qt-project.qtcreator/doc/technical-support.html")));
|
||||||
@@ -1005,21 +807,3 @@ Core::HelpManager::HelpViewerLocation HelpPlugin::contextHelpOption() const
|
|||||||
return Core::HelpManager::HelpViewerLocation(engine.customValue(QLatin1String("ContextHelpOption"),
|
return Core::HelpManager::HelpViewerLocation(engine.customValue(QLatin1String("ContextHelpOption"),
|
||||||
Core::HelpManager::SideBySideIfPossible).toInt());
|
Core::HelpManager::SideBySideIfPossible).toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::setupNavigationMenus(QAction *back, QAction *next, QWidget *parent)
|
|
||||||
{
|
|
||||||
if (!m_backMenu) {
|
|
||||||
m_backMenu = new QMenu(parent);
|
|
||||||
connect(m_backMenu, SIGNAL(aboutToShow()), this,
|
|
||||||
SLOT(slotAboutToShowBackMenu()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_nextMenu) {
|
|
||||||
m_nextMenu = new QMenu(parent);
|
|
||||||
connect(m_nextMenu, SIGNAL(aboutToShow()), this,
|
|
||||||
SLOT(slotAboutToShowNextMenu()));
|
|
||||||
}
|
|
||||||
|
|
||||||
back->setMenu(m_backMenu);
|
|
||||||
next->setMenu(m_nextMenu);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -41,7 +41,6 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QAction;
|
class QAction;
|
||||||
class QComboBox;
|
|
||||||
class QMenu;
|
class QMenu;
|
||||||
class QToolButton;
|
class QToolButton;
|
||||||
class QUrl;
|
class QUrl;
|
||||||
@@ -96,10 +95,6 @@ private slots:
|
|||||||
void activateOpenPages();
|
void activateOpenPages();
|
||||||
void activateBookmarks();
|
void activateBookmarks();
|
||||||
|
|
||||||
void addBookmark();
|
|
||||||
void updateFilterComboBox();
|
|
||||||
void filterDocumentation(const QString &customFilter);
|
|
||||||
|
|
||||||
void saveExternalWindowSettings();
|
void saveExternalWindowSettings();
|
||||||
void switchToHelpMode(const QUrl &source);
|
void switchToHelpMode(const QUrl &source);
|
||||||
void slotHideRightPane();
|
void slotHideRightPane();
|
||||||
@@ -110,14 +105,11 @@ private slots:
|
|||||||
|
|
||||||
void fontChanged();
|
void fontChanged();
|
||||||
|
|
||||||
void updateCloseButton();
|
|
||||||
void setupHelpEngineIfNeeded();
|
void setupHelpEngineIfNeeded();
|
||||||
|
|
||||||
void highlightSearchTermsInContextHelp();
|
void highlightSearchTermsInContextHelp();
|
||||||
void handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
void handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
||||||
|
|
||||||
void slotAboutToShowBackMenu();
|
|
||||||
void slotAboutToShowNextMenu();
|
|
||||||
void slotOpenSupportPage();
|
void slotOpenSupportPage();
|
||||||
void slotReportBug();
|
void slotReportBug();
|
||||||
|
|
||||||
@@ -127,7 +119,6 @@ private:
|
|||||||
void setupUi();
|
void setupUi();
|
||||||
void resetFilter();
|
void resetFilter();
|
||||||
void activateHelpMode();
|
void activateHelpMode();
|
||||||
Utils::StyledBar *createWidgetToolBar();
|
|
||||||
bool canShowHelpSideBySide() const;
|
bool canShowHelpSideBySide() const;
|
||||||
HelpViewer *viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location);
|
HelpViewer *viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location);
|
||||||
HelpViewer *viewerForContextHelp();
|
HelpViewer *viewerForContextHelp();
|
||||||
@@ -137,7 +128,6 @@ private:
|
|||||||
|
|
||||||
void doSetupIfNeeded();
|
void doSetupIfNeeded();
|
||||||
Core::HelpManager::HelpViewerLocation contextHelpOption() const;
|
Core::HelpManager::HelpViewerLocation contextHelpOption() const;
|
||||||
void setupNavigationMenus(QAction *back, QAction *next, QWidget *parent);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HelpMode *m_mode;
|
HelpMode *m_mode;
|
||||||
@@ -155,7 +145,6 @@ private:
|
|||||||
GeneralSettingsPage *m_generalSettingsPage;
|
GeneralSettingsPage *m_generalSettingsPage;
|
||||||
SearchTaskHandler *m_searchTaskHandler;
|
SearchTaskHandler *m_searchTaskHandler;
|
||||||
|
|
||||||
QComboBox *m_filterComboBox;
|
|
||||||
Core::SideBar *m_sideBar;
|
Core::SideBar *m_sideBar;
|
||||||
|
|
||||||
bool m_firstModeChange;
|
bool m_firstModeChange;
|
||||||
@@ -163,16 +152,11 @@ private:
|
|||||||
OpenPagesManager *m_openPagesManager;
|
OpenPagesManager *m_openPagesManager;
|
||||||
Core::MiniSplitter *m_splitter;
|
Core::MiniSplitter *m_splitter;
|
||||||
|
|
||||||
QToolButton *m_closeButton;
|
|
||||||
|
|
||||||
QString m_contextHelpHighlightId;
|
QString m_contextHelpHighlightId;
|
||||||
|
|
||||||
QPointer<HelpWidget> m_externalWindow;
|
QPointer<HelpWidget> m_externalWindow;
|
||||||
QRect m_externalWindowState;
|
QRect m_externalWindowState;
|
||||||
|
|
||||||
QMenu *m_backMenu;
|
|
||||||
QMenu *m_nextMenu;
|
|
||||||
|
|
||||||
bool m_isSidebarVisible;
|
bool m_isSidebarVisible;
|
||||||
QAction *m_toggleSideBarAction;
|
QAction *m_toggleSideBarAction;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -34,18 +34,26 @@
|
|||||||
#include "helpplugin.h"
|
#include "helpplugin.h"
|
||||||
#include "helpviewer.h"
|
#include "helpviewer.h"
|
||||||
#include "localhelpmanager.h"
|
#include "localhelpmanager.h"
|
||||||
|
#include "openpagesmanager.h"
|
||||||
|
|
||||||
#include <coreplugin/actionmanager/actioncontainer.h>
|
#include <coreplugin/actionmanager/actioncontainer.h>
|
||||||
#include <coreplugin/actionmanager/actionmanager.h>
|
#include <coreplugin/actionmanager/actionmanager.h>
|
||||||
#include <coreplugin/coreconstants.h>
|
#include <coreplugin/coreconstants.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/findplaceholder.h>
|
#include <coreplugin/findplaceholder.h>
|
||||||
|
#include <coreplugin/helpmanager.h>
|
||||||
#include <texteditor/texteditorconstants.h>
|
#include <texteditor/texteditorconstants.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
#include <utils/styledbar.h>
|
#include <utils/styledbar.h>
|
||||||
|
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
|
#include <QHelpEngine>
|
||||||
|
#include <QHelpSearchEngine>
|
||||||
|
#include <QHelpSearchQuery>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
#include <QPrinter>
|
||||||
|
#include <QPrintDialog>
|
||||||
|
#include <QStackedWidget>
|
||||||
#include <QToolButton>
|
#include <QToolButton>
|
||||||
|
|
||||||
static QToolButton *toolButton(QAction *action, Core::Command *cmd = 0)
|
static QToolButton *toolButton(QAction *action, Core::Command *cmd = 0)
|
||||||
@@ -67,10 +75,14 @@ namespace Internal {
|
|||||||
|
|
||||||
HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget *parent) :
|
HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
|
m_style(style),
|
||||||
|
m_switchToHelp(0),
|
||||||
|
m_filterComboBox(0),
|
||||||
|
m_closeAction(0),
|
||||||
m_scaleUp(0),
|
m_scaleUp(0),
|
||||||
m_scaleDown(0),
|
m_scaleDown(0),
|
||||||
m_resetScale(0),
|
m_resetScale(0),
|
||||||
m_style(style)
|
m_printer(0)
|
||||||
{
|
{
|
||||||
Utils::StyledBar *toolBar = new Utils::StyledBar();
|
Utils::StyledBar *toolBar = new Utils::StyledBar();
|
||||||
QHBoxLayout *layout = new QHBoxLayout(toolBar);
|
QHBoxLayout *layout = new QHBoxLayout(toolBar);
|
||||||
@@ -78,10 +90,12 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
layout->setMargin(0);
|
layout->setMargin(0);
|
||||||
Core::Command *cmd;
|
Core::Command *cmd;
|
||||||
|
|
||||||
m_switchToHelp = new QAction(tr("Go to Help Mode"), toolBar);
|
if (style != ModeWidget) {
|
||||||
cmd = Core::ActionManager::registerAction(m_switchToHelp, Constants::CONTEXT_HELP, context);
|
m_switchToHelp = new QAction(tr("Go to Help Mode"), toolBar);
|
||||||
connect(m_switchToHelp, SIGNAL(triggered()), this, SLOT(helpModeButtonClicked()));
|
cmd = Core::ActionManager::registerAction(m_switchToHelp, Constants::CONTEXT_HELP, context);
|
||||||
layout->addWidget(toolButton(m_switchToHelp, cmd));
|
connect(m_switchToHelp, SIGNAL(triggered()), this, SLOT(helpModeButtonClicked()));
|
||||||
|
layout->addWidget(toolButton(m_switchToHelp, cmd));
|
||||||
|
}
|
||||||
|
|
||||||
m_homeAction = new QAction(QIcon(QLatin1String(":/help/images/home.png")),
|
m_homeAction = new QAction(QIcon(QLatin1String(":/help/images/home.png")),
|
||||||
tr("Home"), this);
|
tr("Home"), this);
|
||||||
@@ -91,6 +105,7 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
|
|
||||||
m_backAction = new QAction(QIcon(QLatin1String(":/help/images/previous.png")),
|
m_backAction = new QAction(QIcon(QLatin1String(":/help/images/previous.png")),
|
||||||
tr("Back"), toolBar);
|
tr("Back"), toolBar);
|
||||||
|
connect(m_backAction, &QAction::triggered, this, &HelpWidget::backward);
|
||||||
m_backMenu = new QMenu(toolBar);
|
m_backMenu = new QMenu(toolBar);
|
||||||
connect(m_backMenu, SIGNAL(aboutToShow()), this, SLOT(updateBackMenu()));
|
connect(m_backMenu, SIGNAL(aboutToShow()), this, SLOT(updateBackMenu()));
|
||||||
m_backAction->setMenu(m_backMenu);
|
m_backAction->setMenu(m_backMenu);
|
||||||
@@ -100,6 +115,7 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
|
|
||||||
m_forwardAction = new QAction(QIcon(QLatin1String(":/help/images/next.png")),
|
m_forwardAction = new QAction(QIcon(QLatin1String(":/help/images/next.png")),
|
||||||
tr("Forward"), toolBar);
|
tr("Forward"), toolBar);
|
||||||
|
connect(m_forwardAction, &QAction::triggered, this, &HelpWidget::forward);
|
||||||
m_forwardMenu = new QMenu(toolBar);
|
m_forwardMenu = new QMenu(toolBar);
|
||||||
connect(m_forwardMenu, SIGNAL(aboutToShow()), this, SLOT(updateForwardMenu()));
|
connect(m_forwardMenu, SIGNAL(aboutToShow()), this, SLOT(updateForwardMenu()));
|
||||||
m_forwardAction->setMenu(m_forwardMenu);
|
m_forwardAction->setMenu(m_forwardMenu);
|
||||||
@@ -115,38 +131,45 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
layout->addWidget(new Utils::StyledSeparator(toolBar));
|
layout->addWidget(new Utils::StyledSeparator(toolBar));
|
||||||
layout->addWidget(toolButton(m_addBookmarkAction, cmd));
|
layout->addWidget(toolButton(m_addBookmarkAction, cmd));
|
||||||
|
|
||||||
|
if (style == ModeWidget) {
|
||||||
|
layout->addWidget(new Utils::StyledSeparator(toolBar));
|
||||||
|
layout->addWidget(OpenPagesManager::instance().openPagesComboBox(), 10);
|
||||||
|
m_filterComboBox = new QComboBox;
|
||||||
|
m_filterComboBox->setMinimumContentsLength(15);
|
||||||
|
m_filterComboBox->setModel(LocalHelpManager::filterModel());
|
||||||
|
layout->addWidget(m_filterComboBox);
|
||||||
|
connect(m_filterComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated),
|
||||||
|
LocalHelpManager::instance(), &LocalHelpManager::setFilterIndex);
|
||||||
|
connect(LocalHelpManager::instance(), &LocalHelpManager::filterIndexChanged,
|
||||||
|
m_filterComboBox, &QComboBox::setCurrentIndex);
|
||||||
|
}
|
||||||
|
|
||||||
layout->addStretch();
|
layout->addStretch();
|
||||||
|
|
||||||
m_viewer = HelpPlugin::createHelpViewer(qreal(0.0));
|
m_viewerStack = new QStackedWidget;
|
||||||
|
|
||||||
QVBoxLayout *vLayout = new QVBoxLayout(this);
|
QVBoxLayout *vLayout = new QVBoxLayout(this);
|
||||||
vLayout->setMargin(0);
|
vLayout->setMargin(0);
|
||||||
vLayout->setSpacing(0);
|
vLayout->setSpacing(0);
|
||||||
vLayout->addWidget(toolBar);
|
vLayout->addWidget(toolBar);
|
||||||
vLayout->addWidget(m_viewer);
|
vLayout->addWidget(m_viewerStack);
|
||||||
Core::FindToolBarPlaceHolder *fth = new Core::FindToolBarPlaceHolder(this);
|
Core::FindToolBarPlaceHolder *fth = new Core::FindToolBarPlaceHolder(this);
|
||||||
vLayout->addWidget(fth);
|
vLayout->addWidget(fth);
|
||||||
|
|
||||||
setFocusProxy(m_viewer);
|
setFocusProxy(m_viewerStack);
|
||||||
|
|
||||||
m_context = new Core::IContext(this);
|
m_context = new Core::IContext(this);
|
||||||
m_context->setContext(context);
|
m_context->setContext(context);
|
||||||
m_context->setWidget(m_viewer);
|
m_context->setWidget(m_viewerStack);
|
||||||
Core::ICore::addContextObject(m_context);
|
Core::ICore::addContextObject(m_context);
|
||||||
|
|
||||||
m_backAction->setEnabled(m_viewer->isBackwardAvailable());
|
m_printAction = new QAction(this);
|
||||||
connect(m_backAction, SIGNAL(triggered()), m_viewer, SLOT(backward()));
|
Core::ActionManager::registerAction(m_printAction, Core::Constants::PRINT, context);
|
||||||
connect(m_viewer, SIGNAL(backwardAvailable(bool)), m_backAction,
|
connect(m_printAction, &QAction::triggered, this, [this]() { print(currentViewer()); });
|
||||||
SLOT(setEnabled(bool)));
|
|
||||||
|
|
||||||
m_forwardAction->setEnabled(m_viewer->isForwardAvailable());
|
|
||||||
connect(m_forwardAction, SIGNAL(triggered()), m_viewer, SLOT(forward()));
|
|
||||||
connect(m_viewer, SIGNAL(forwardAvailable(bool)), m_forwardAction,
|
|
||||||
SLOT(setEnabled(bool)));
|
|
||||||
|
|
||||||
m_copy = new QAction(this);
|
m_copy = new QAction(this);
|
||||||
Core::ActionManager::registerAction(m_copy, Core::Constants::COPY, context);
|
Core::ActionManager::registerAction(m_copy, Core::Constants::COPY, context);
|
||||||
connect(m_copy, SIGNAL(triggered()), m_viewer, SLOT(copy()));
|
connect(m_copy, &QAction::triggered, this, &HelpWidget::copy);
|
||||||
|
|
||||||
Core::ActionContainer *advancedMenu = Core::ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED);
|
Core::ActionContainer *advancedMenu = Core::ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED);
|
||||||
QTC_CHECK(advancedMenu);
|
QTC_CHECK(advancedMenu);
|
||||||
@@ -155,37 +178,44 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
m_scaleUp = new QAction(tr("Increase Font Size"), this);
|
m_scaleUp = new QAction(tr("Increase Font Size"), this);
|
||||||
cmd = Core::ActionManager::registerAction(m_scaleUp, TextEditor::Constants::INCREASE_FONT_SIZE,
|
cmd = Core::ActionManager::registerAction(m_scaleUp, TextEditor::Constants::INCREASE_FONT_SIZE,
|
||||||
context);
|
context);
|
||||||
connect(m_scaleUp, SIGNAL(triggered()), m_viewer, SLOT(scaleUp()));
|
connect(m_scaleUp, &QAction::triggered, this, &HelpWidget::scaleUp);
|
||||||
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
||||||
|
|
||||||
m_scaleDown = new QAction(tr("Decrease Font Size"), this);
|
m_scaleDown = new QAction(tr("Decrease Font Size"), this);
|
||||||
cmd = Core::ActionManager::registerAction(m_scaleDown, TextEditor::Constants::DECREASE_FONT_SIZE,
|
cmd = Core::ActionManager::registerAction(m_scaleDown, TextEditor::Constants::DECREASE_FONT_SIZE,
|
||||||
context);
|
context);
|
||||||
connect(m_scaleDown, SIGNAL(triggered()), m_viewer, SLOT(scaleDown()));
|
connect(m_scaleDown, &QAction::triggered, this, &HelpWidget::scaleDown);
|
||||||
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
||||||
|
|
||||||
m_resetScale = new QAction(tr("Reset Font Size"), this);
|
m_resetScale = new QAction(tr("Reset Font Size"), this);
|
||||||
cmd = Core::ActionManager::registerAction(m_resetScale, TextEditor::Constants::RESET_FONT_SIZE,
|
cmd = Core::ActionManager::registerAction(m_resetScale, TextEditor::Constants::RESET_FONT_SIZE,
|
||||||
context);
|
context);
|
||||||
connect(m_resetScale, SIGNAL(triggered()), m_viewer, SLOT(resetScale()));
|
connect(m_resetScale, &QAction::triggered, this, &HelpWidget::resetScale);
|
||||||
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (style == SideBarWidget) {
|
if (style == ModeWidget) {
|
||||||
QAction *close = new QAction(QIcon(QLatin1String(Core::Constants::ICON_BUTTON_CLOSE)),
|
m_closeAction = new QAction(QIcon(QLatin1String(Core::Constants::ICON_BUTTON_CLOSE)),
|
||||||
QString(), toolBar);
|
QString(), toolBar);
|
||||||
connect(close, SIGNAL(triggered()), this, SIGNAL(closeButtonClicked()));
|
connect(m_closeAction, SIGNAL(triggered()), this, SIGNAL(closeButtonClicked()));
|
||||||
layout->addWidget(toolButton(close));
|
layout->addWidget(toolButton(m_closeAction));
|
||||||
m_viewer->setOpenInNewPageActionVisible(false);
|
} else if (style == SideBarWidget) {
|
||||||
|
m_closeAction = new QAction(QIcon(QLatin1String(Core::Constants::ICON_BUTTON_CLOSE)),
|
||||||
|
QString(), toolBar);
|
||||||
|
connect(m_closeAction, SIGNAL(triggered()), this, SIGNAL(closeButtonClicked()));
|
||||||
|
layout->addWidget(toolButton(m_closeAction));
|
||||||
} else if (style == ExternalWindow) {
|
} else if (style == ExternalWindow) {
|
||||||
static int windowId = 0;
|
static int windowId = 0;
|
||||||
Core::ICore::registerWindow(this,
|
Core::ICore::registerWindow(this,
|
||||||
Core::Context(Core::Id("Help.Window.").withSuffix(++windowId)));
|
Core::Context(Core::Id("Help.Window.").withSuffix(++windowId)));
|
||||||
setAttribute(Qt::WA_DeleteOnClose);
|
setAttribute(Qt::WA_DeleteOnClose);
|
||||||
setAttribute(Qt::WA_QuitOnClose, false); // don't prevent Qt Creator from closing
|
setAttribute(Qt::WA_QuitOnClose, false); // don't prevent Qt Creator from closing
|
||||||
connect(m_viewer, SIGNAL(titleChanged()), this, SLOT(updateWindowTitle()));
|
}
|
||||||
updateWindowTitle();
|
|
||||||
m_viewer->setOpenInNewPageActionVisible(false);
|
if (style != ModeWidget) {
|
||||||
|
HelpViewer *viewer = HelpPlugin::createHelpViewer(qreal(0.0));
|
||||||
|
addViewer(viewer);
|
||||||
|
setCurrentViewer(viewer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +223,8 @@ HelpWidget::~HelpWidget()
|
|||||||
{
|
{
|
||||||
Core::ICore::removeContextObject(m_context);
|
Core::ICore::removeContextObject(m_context);
|
||||||
Core::ActionManager::unregisterAction(m_copy, Core::Constants::COPY);
|
Core::ActionManager::unregisterAction(m_copy, Core::Constants::COPY);
|
||||||
Core::ActionManager::unregisterAction(m_switchToHelp, Constants::CONTEXT_HELP);
|
if (m_switchToHelp)
|
||||||
|
Core::ActionManager::unregisterAction(m_switchToHelp, Constants::CONTEXT_HELP);
|
||||||
Core::ActionManager::unregisterAction(m_homeAction, Constants::HELP_HOME);
|
Core::ActionManager::unregisterAction(m_homeAction, Constants::HELP_HOME);
|
||||||
Core::ActionManager::unregisterAction(m_forwardAction, Constants::HELP_NEXT);
|
Core::ActionManager::unregisterAction(m_forwardAction, Constants::HELP_NEXT);
|
||||||
Core::ActionManager::unregisterAction(m_backAction, Constants::HELP_PREVIOUS);
|
Core::ActionManager::unregisterAction(m_backAction, Constants::HELP_PREVIOUS);
|
||||||
@@ -208,7 +239,100 @@ HelpWidget::~HelpWidget()
|
|||||||
|
|
||||||
HelpViewer *HelpWidget::currentViewer() const
|
HelpViewer *HelpWidget::currentViewer() const
|
||||||
{
|
{
|
||||||
return m_viewer;
|
return qobject_cast<HelpViewer *>(m_viewerStack->currentWidget());
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::setCurrentViewer(HelpViewer *viewer)
|
||||||
|
{
|
||||||
|
m_viewerStack->setCurrentWidget(viewer);
|
||||||
|
m_backAction->setEnabled(viewer->isBackwardAvailable());
|
||||||
|
m_forwardAction->setEnabled(viewer->isForwardAvailable());
|
||||||
|
if (m_style == ExternalWindow)
|
||||||
|
updateWindowTitle();
|
||||||
|
emit sourceChanged(viewer->source());
|
||||||
|
}
|
||||||
|
|
||||||
|
int HelpWidget::currentIndex() const
|
||||||
|
{
|
||||||
|
return m_viewerStack->currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::addViewer(HelpViewer *viewer, bool highlightSearchTerms)
|
||||||
|
{
|
||||||
|
m_viewerStack->addWidget(viewer);
|
||||||
|
viewer->setFocus(Qt::OtherFocusReason);
|
||||||
|
if (m_style == SideBarWidget || m_style == ExternalWindow)
|
||||||
|
viewer->setOpenInNewPageActionVisible(false);
|
||||||
|
connect(viewer, &HelpViewer::sourceChanged, this, [viewer, this](const QUrl &url) {
|
||||||
|
if (currentViewer() == viewer)
|
||||||
|
emit sourceChanged(url);
|
||||||
|
});
|
||||||
|
connect(viewer, &HelpViewer::forwardAvailable, this, [viewer, this](bool available) {
|
||||||
|
if (currentViewer() == viewer)
|
||||||
|
m_forwardAction->setEnabled(available);
|
||||||
|
});
|
||||||
|
connect(viewer, &HelpViewer::backwardAvailable, this, [viewer, this](bool available) {
|
||||||
|
if (currentViewer() == viewer)
|
||||||
|
m_backAction->setEnabled(available);
|
||||||
|
});
|
||||||
|
connect(viewer, &HelpViewer::printRequested, this, [viewer, this]() {
|
||||||
|
print(viewer);
|
||||||
|
});
|
||||||
|
if (m_style == ExternalWindow)
|
||||||
|
connect(viewer, SIGNAL(titleChanged()), this, SLOT(updateWindowTitle()));
|
||||||
|
|
||||||
|
if (highlightSearchTerms)
|
||||||
|
connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
|
||||||
|
|
||||||
|
updateCloseButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::removeViewerAt(int index)
|
||||||
|
{
|
||||||
|
QWidget *viewerWidget = m_viewerStack->widget(index);
|
||||||
|
QTC_ASSERT(viewerWidget, return);
|
||||||
|
m_viewerStack->removeWidget(viewerWidget);
|
||||||
|
// do not delete, that is done in the model
|
||||||
|
// delete viewerWidget;
|
||||||
|
if (m_viewerStack->currentWidget())
|
||||||
|
setCurrentViewer(qobject_cast<HelpViewer *>(m_viewerStack->currentWidget()));
|
||||||
|
updateCloseButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::setViewerFont(const QFont &font)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_viewerStack->count(); ++i) {
|
||||||
|
HelpViewer *viewer = qobject_cast<HelpViewer *>(m_viewerStack->widget(i));
|
||||||
|
QTC_ASSERT(viewer, continue);
|
||||||
|
viewer->setFont(font);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int HelpWidget::viewerCount() const
|
||||||
|
{
|
||||||
|
return m_viewerStack->count();
|
||||||
|
}
|
||||||
|
|
||||||
|
HelpViewer *HelpWidget::viewerAt(int index) const
|
||||||
|
{
|
||||||
|
return qobject_cast<HelpViewer *>(m_viewerStack->widget(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::setSource(const QUrl &url)
|
||||||
|
{
|
||||||
|
HelpViewer* viewer = currentViewer();
|
||||||
|
QTC_ASSERT(viewer, return);
|
||||||
|
viewer->setSource(url);
|
||||||
|
viewer->setFocus(Qt::OtherFocusReason);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::setSourceFromSearch(const QUrl &url)
|
||||||
|
{
|
||||||
|
HelpViewer* viewer = currentViewer();
|
||||||
|
QTC_ASSERT(viewer, return);
|
||||||
|
connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
|
||||||
|
viewer->setSource(url);
|
||||||
|
viewer->setFocus(Qt::OtherFocusReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpWidget::closeEvent(QCloseEvent *)
|
void HelpWidget::closeEvent(QCloseEvent *)
|
||||||
@@ -219,18 +343,21 @@ void HelpWidget::closeEvent(QCloseEvent *)
|
|||||||
void HelpWidget::updateBackMenu()
|
void HelpWidget::updateBackMenu()
|
||||||
{
|
{
|
||||||
m_backMenu->clear();
|
m_backMenu->clear();
|
||||||
m_viewer->addBackHistoryItems(m_backMenu);
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->addBackHistoryItems(m_backMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpWidget::updateForwardMenu()
|
void HelpWidget::updateForwardMenu()
|
||||||
{
|
{
|
||||||
m_forwardMenu->clear();
|
m_forwardMenu->clear();
|
||||||
m_viewer->addForwardHistoryItems(m_forwardMenu);
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->addForwardHistoryItems(m_forwardMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpWidget::updateWindowTitle()
|
void HelpWidget::updateWindowTitle()
|
||||||
{
|
{
|
||||||
const QString pageTitle = m_viewer->title();
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
const QString pageTitle = currentViewer()->title();
|
||||||
if (pageTitle.isEmpty())
|
if (pageTitle.isEmpty())
|
||||||
setWindowTitle(tr("Help"));
|
setWindowTitle(tr("Help"));
|
||||||
else
|
else
|
||||||
@@ -239,11 +366,21 @@ void HelpWidget::updateWindowTitle()
|
|||||||
|
|
||||||
void HelpWidget::helpModeButtonClicked()
|
void HelpWidget::helpModeButtonClicked()
|
||||||
{
|
{
|
||||||
emit openHelpMode(m_viewer->source());
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
emit openHelpMode(currentViewer()->source());
|
||||||
if (m_style == ExternalWindow)
|
if (m_style == ExternalWindow)
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HelpWidget::updateCloseButton()
|
||||||
|
{
|
||||||
|
if (m_style == ModeWidget) {
|
||||||
|
const bool closeOnReturn = Core::HelpManager::customValue(QLatin1String("ReturnOnClose"),
|
||||||
|
false).toBool();
|
||||||
|
m_closeAction->setEnabled(closeOnReturn || m_viewerStack->count() > 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void HelpWidget::goHome()
|
void HelpWidget::goHome()
|
||||||
{
|
{
|
||||||
if (HelpViewer *viewer = currentViewer())
|
if (HelpViewer *viewer = currentViewer())
|
||||||
@@ -263,5 +400,84 @@ void HelpWidget::addBookmark()
|
|||||||
manager->showBookmarkDialog(this, viewer->title(), url);
|
manager->showBookmarkDialog(this, viewer->title(), url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HelpWidget::copy()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::forward()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->forward();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::backward()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->backward();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::scaleUp()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->scaleUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::scaleDown()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->scaleDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::resetScale()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(currentViewer(), return);
|
||||||
|
currentViewer()->resetScale();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::print(HelpViewer *viewer)
|
||||||
|
{
|
||||||
|
QTC_ASSERT(viewer, return);
|
||||||
|
if (!m_printer)
|
||||||
|
m_printer = new QPrinter(QPrinter::HighResolution);
|
||||||
|
QPrintDialog dlg(m_printer, this);
|
||||||
|
dlg.setWindowTitle(tr("Print Documentation"));
|
||||||
|
if (!viewer->selectedText().isEmpty())
|
||||||
|
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
|
||||||
|
dlg.addEnabledOption(QAbstractPrintDialog::PrintPageRange);
|
||||||
|
dlg.addEnabledOption(QAbstractPrintDialog::PrintCollateCopies);
|
||||||
|
|
||||||
|
if (dlg.exec() == QDialog::Accepted)
|
||||||
|
viewer->print(m_printer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpWidget::highlightSearchTerms()
|
||||||
|
{
|
||||||
|
if (HelpViewer *viewer = qobject_cast<HelpViewer *>(sender())) {
|
||||||
|
QHelpSearchEngine *searchEngine =
|
||||||
|
LocalHelpManager::helpEngine().searchEngine();
|
||||||
|
QList<QHelpSearchQuery> queryList = searchEngine->query();
|
||||||
|
|
||||||
|
QStringList terms;
|
||||||
|
foreach (const QHelpSearchQuery &query, queryList) {
|
||||||
|
switch (query.fieldName) {
|
||||||
|
default: break;
|
||||||
|
case QHelpSearchQuery::ALL: {
|
||||||
|
case QHelpSearchQuery::PHRASE:
|
||||||
|
case QHelpSearchQuery::DEFAULT:
|
||||||
|
case QHelpSearchQuery::ATLEAST:
|
||||||
|
foreach (QString term, query.wordList)
|
||||||
|
terms.append(term.remove(QLatin1Char('"')));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (const QString& term, terms)
|
||||||
|
viewer->findText(term, 0, false, true);
|
||||||
|
disconnect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
} // Help
|
} // Help
|
||||||
|
|||||||
@@ -37,7 +37,11 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QAction;
|
class QAction;
|
||||||
|
class QComboBox;
|
||||||
|
class QFont;
|
||||||
class QMenu;
|
class QMenu;
|
||||||
|
class QPrinter;
|
||||||
|
class QStackedWidget;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace Help {
|
namespace Help {
|
||||||
@@ -50,6 +54,7 @@ class HelpWidget : public QWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
enum WidgetStyle {
|
enum WidgetStyle {
|
||||||
|
ModeWidget,
|
||||||
SideBarWidget,
|
SideBarWidget,
|
||||||
ExternalWindow
|
ExternalWindow
|
||||||
};
|
};
|
||||||
@@ -58,6 +63,21 @@ public:
|
|||||||
~HelpWidget();
|
~HelpWidget();
|
||||||
|
|
||||||
HelpViewer *currentViewer() const;
|
HelpViewer *currentViewer() const;
|
||||||
|
void setCurrentViewer(HelpViewer *viewer);
|
||||||
|
int currentIndex() const;
|
||||||
|
void addViewer(HelpViewer *viewer, bool highlightSearchTerms = false);
|
||||||
|
void removeViewerAt(int index);
|
||||||
|
|
||||||
|
void setViewerFont(const QFont &font);
|
||||||
|
|
||||||
|
// so central widget can save the state
|
||||||
|
int viewerCount() const;
|
||||||
|
HelpViewer *viewerAt(int index) const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setSource(const QUrl &url);
|
||||||
|
void setSourceFromSearch(const QUrl &url);
|
||||||
|
void updateCloseButton();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent *);
|
void closeEvent(QCloseEvent *);
|
||||||
@@ -66,17 +86,29 @@ signals:
|
|||||||
void openHelpMode(const QUrl &url);
|
void openHelpMode(const QUrl &url);
|
||||||
void closeButtonClicked();
|
void closeButtonClicked();
|
||||||
void aboutToClose();
|
void aboutToClose();
|
||||||
|
void sourceChanged(const QUrl &url);
|
||||||
|
void filterActivated(const QString &name);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateBackMenu();
|
void updateBackMenu();
|
||||||
void updateForwardMenu();
|
void updateForwardMenu();
|
||||||
void updateWindowTitle();
|
void updateWindowTitle();
|
||||||
void helpModeButtonClicked();
|
void helpModeButtonClicked();
|
||||||
void goHome();
|
|
||||||
void addBookmark();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void goHome();
|
||||||
|
void addBookmark();
|
||||||
|
void copy();
|
||||||
|
void forward();
|
||||||
|
void backward();
|
||||||
|
void scaleUp();
|
||||||
|
void scaleDown();
|
||||||
|
void resetScale();
|
||||||
|
void print(HelpViewer *viewer);
|
||||||
|
void highlightSearchTerms();
|
||||||
|
|
||||||
Core::IContext *m_context;
|
Core::IContext *m_context;
|
||||||
|
WidgetStyle m_style;
|
||||||
QAction *m_switchToHelp;
|
QAction *m_switchToHelp;
|
||||||
QAction *m_homeAction;
|
QAction *m_homeAction;
|
||||||
QMenu *m_backMenu;
|
QMenu *m_backMenu;
|
||||||
@@ -84,13 +116,16 @@ private:
|
|||||||
QAction *m_backAction;
|
QAction *m_backAction;
|
||||||
QAction *m_forwardAction;
|
QAction *m_forwardAction;
|
||||||
QAction *m_addBookmarkAction;
|
QAction *m_addBookmarkAction;
|
||||||
|
QComboBox *m_filterComboBox;
|
||||||
|
QAction *m_closeAction;
|
||||||
QAction *m_scaleUp;
|
QAction *m_scaleUp;
|
||||||
QAction *m_scaleDown;
|
QAction *m_scaleDown;
|
||||||
QAction *m_resetScale;
|
QAction *m_resetScale;
|
||||||
|
QAction *m_printAction;
|
||||||
QAction *m_copy;
|
QAction *m_copy;
|
||||||
|
|
||||||
HelpViewer *m_viewer;
|
QStackedWidget *m_viewerStack;
|
||||||
WidgetStyle m_style;
|
QPrinter *m_printer;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include <app/app_version.h>
|
#include <app/app_version.h>
|
||||||
#include <coreplugin/helpmanager.h>
|
#include <coreplugin/helpmanager.h>
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QMutexLocker>
|
#include <QMutexLocker>
|
||||||
|
|
||||||
@@ -50,6 +51,10 @@ QHelpEngine* LocalHelpManager::m_guiEngine = 0;
|
|||||||
QMutex LocalHelpManager::m_bkmarkMutex;
|
QMutex LocalHelpManager::m_bkmarkMutex;
|
||||||
BookmarkManager* LocalHelpManager::m_bookmarkManager = 0;
|
BookmarkManager* LocalHelpManager::m_bookmarkManager = 0;
|
||||||
|
|
||||||
|
QStandardItemModel *LocalHelpManager::m_filterModel = 0;
|
||||||
|
QString LocalHelpManager::m_currentFilter = QString();
|
||||||
|
int LocalHelpManager::m_currentFilterIndex = -1;
|
||||||
|
|
||||||
LocalHelpManager::LocalHelpManager(QObject *parent)
|
LocalHelpManager::LocalHelpManager(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_guiNeedsSetup(true)
|
, m_guiNeedsSetup(true)
|
||||||
@@ -57,6 +62,7 @@ LocalHelpManager::LocalHelpManager(QObject *parent)
|
|||||||
{
|
{
|
||||||
m_instance = this;
|
m_instance = this;
|
||||||
qRegisterMetaType<Help::Internal::LocalHelpManager::HelpData>("Help::Internal::LocalHelpManager::HelpData");
|
qRegisterMetaType<Help::Internal::LocalHelpManager::HelpData>("Help::Internal::LocalHelpManager::HelpData");
|
||||||
|
m_filterModel = new QStandardItemModel(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalHelpManager::~LocalHelpManager()
|
LocalHelpManager::~LocalHelpManager()
|
||||||
@@ -227,3 +233,47 @@ LocalHelpManager::HelpData LocalHelpManager::helpData(const QUrl &url)
|
|||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QAbstractItemModel *LocalHelpManager::filterModel()
|
||||||
|
{
|
||||||
|
return m_filterModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalHelpManager::setFilterIndex(int index)
|
||||||
|
{
|
||||||
|
if (index == m_currentFilterIndex)
|
||||||
|
return;
|
||||||
|
m_currentFilterIndex = index;
|
||||||
|
QStandardItem *item = m_filterModel->item(index);
|
||||||
|
if (!item) {
|
||||||
|
helpEngine().setCurrentFilter(QString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
helpEngine().setCurrentFilter(item->text());
|
||||||
|
emit m_instance->filterIndexChanged(m_currentFilterIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalHelpManager::updateFilterModel()
|
||||||
|
{
|
||||||
|
const QHelpEngine &engine = helpEngine();
|
||||||
|
if (m_currentFilter.isEmpty())
|
||||||
|
m_currentFilter = engine.currentFilter();
|
||||||
|
m_filterModel->clear();
|
||||||
|
m_currentFilterIndex = -1;
|
||||||
|
int count = 0;
|
||||||
|
const QStringList &filters = engine.customFilters();
|
||||||
|
foreach (const QString &filterString, filters) {
|
||||||
|
m_filterModel->appendRow(new QStandardItem(filterString));
|
||||||
|
if (filterString == m_currentFilter)
|
||||||
|
m_currentFilterIndex = count;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filters.size() < 1)
|
||||||
|
return;
|
||||||
|
if (m_currentFilterIndex < 0) {
|
||||||
|
m_currentFilterIndex = 0;
|
||||||
|
m_currentFilter = filters.at(0);
|
||||||
|
}
|
||||||
|
emit m_instance->filterIndexChanged(m_currentFilterIndex);
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,10 +30,11 @@
|
|||||||
#ifndef LOCALHELPMANAGER_H
|
#ifndef LOCALHELPMANAGER_H
|
||||||
#define LOCALHELPMANAGER_H
|
#define LOCALHELPMANAGER_H
|
||||||
|
|
||||||
|
#include <QMetaType>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QMetaType>
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QHelpEngine)
|
QT_FORWARD_DECLARE_CLASS(QHelpEngine)
|
||||||
|
|
||||||
@@ -70,10 +71,22 @@ public:
|
|||||||
static QByteArray loadErrorMessage(const QUrl &url, const QString &errorString);
|
static QByteArray loadErrorMessage(const QUrl &url, const QString &errorString);
|
||||||
Q_INVOKABLE static Help::Internal::LocalHelpManager::HelpData helpData(const QUrl &url);
|
Q_INVOKABLE static Help::Internal::LocalHelpManager::HelpData helpData(const QUrl &url);
|
||||||
|
|
||||||
|
static QAbstractItemModel *filterModel();
|
||||||
|
static void setFilterIndex(int index);
|
||||||
|
|
||||||
|
static void updateFilterModel();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void filterIndexChanged(int index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_guiNeedsSetup;
|
bool m_guiNeedsSetup;
|
||||||
bool m_needsCollectionFile;
|
bool m_needsCollectionFile;
|
||||||
|
|
||||||
|
static QStandardItemModel *m_filterModel;
|
||||||
|
static QString m_currentFilter;
|
||||||
|
static int m_currentFilterIndex;
|
||||||
|
|
||||||
static QMutex m_guiMutex;
|
static QMutex m_guiMutex;
|
||||||
static QHelpEngine *m_guiEngine;
|
static QHelpEngine *m_guiEngine;
|
||||||
|
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ void OpenPagesManager::setupInitialPages()
|
|||||||
m_model->addPage(homePage);
|
m_model->addPage(homePage);
|
||||||
|
|
||||||
for (int i = 0; i < m_model->rowCount(); ++i)
|
for (int i = 0; i < m_model->rowCount(); ++i)
|
||||||
CentralWidget::instance()->addPage(m_model->pageAt(i));
|
CentralWidget::instance()->addViewer(m_model->pageAt(i));
|
||||||
|
|
||||||
emit pagesChanged();
|
emit pagesChanged();
|
||||||
setCurrentPage((initialPage >= m_model->rowCount())
|
setCurrentPage((initialPage >= m_model->rowCount())
|
||||||
@@ -202,7 +202,7 @@ HelpViewer *OpenPagesManager::createPage(const QUrl &url, bool fromSearch)
|
|||||||
|
|
||||||
const int index = m_model->rowCount() - 1;
|
const int index = m_model->rowCount() - 1;
|
||||||
HelpViewer * const page = m_model->pageAt(index);
|
HelpViewer * const page = m_model->pageAt(index);
|
||||||
CentralWidget::instance()->addPage(page, fromSearch);
|
CentralWidget::instance()->addViewer(page, fromSearch);
|
||||||
|
|
||||||
emit pagesChanged();
|
emit pagesChanged();
|
||||||
setCurrentPage(index);
|
setCurrentPage(index);
|
||||||
@@ -212,7 +212,7 @@ HelpViewer *OpenPagesManager::createPage(const QUrl &url, bool fromSearch)
|
|||||||
|
|
||||||
void OpenPagesManager::setCurrentPage(int index)
|
void OpenPagesManager::setCurrentPage(int index)
|
||||||
{
|
{
|
||||||
CentralWidget::instance()->setCurrentPage(m_model->pageAt(index));
|
CentralWidget::instance()->setCurrentViewer(m_model->pageAt(index));
|
||||||
|
|
||||||
m_comboBox->setCurrentIndex(index);
|
m_comboBox->setCurrentIndex(index);
|
||||||
if (m_openPagesWidget)
|
if (m_openPagesWidget)
|
||||||
@@ -294,7 +294,7 @@ void OpenPagesManager::removePage(int index)
|
|||||||
Q_ASSERT(m_model->rowCount() > 1);
|
Q_ASSERT(m_model->rowCount() > 1);
|
||||||
|
|
||||||
m_model->removePage(index);
|
m_model->removePage(index);
|
||||||
CentralWidget::instance()->removePage(index);
|
CentralWidget::instance()->removeViewerAt(index);
|
||||||
|
|
||||||
emit pagesChanged();
|
emit pagesChanged();
|
||||||
if (m_openPagesWidget)
|
if (m_openPagesWidget)
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ void ContentWindow::itemClicked(const QModelIndex &index)
|
|||||||
if (contentModel) {
|
if (contentModel) {
|
||||||
if (QHelpContentItem *itm = contentModel->contentItemAt(index)) {
|
if (QHelpContentItem *itm = contentModel->contentItemAt(index)) {
|
||||||
const QUrl &url = itm->url();
|
const QUrl &url = itm->url();
|
||||||
if (url != CentralWidget::instance()->currentHelpViewer()->source())
|
if (url != CentralWidget::instance()->currentViewer()->source())
|
||||||
emit linkActivated(itm->url());
|
emit linkActivated(itm->url());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user