merge help branch
This commit is contained in:
commit
6dbc5fa409
17 changed files with 225 additions and 92 deletions
2
all.h
2
all.h
|
@ -160,6 +160,6 @@
|
|||
|
||||
#include <QHelpEngine>
|
||||
#include <QWidgetAction>
|
||||
#include <QHelpIndexModel>
|
||||
#include <QTextBrowser>
|
||||
#endif
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
namespace Ms {
|
||||
|
||||
static QHelpEngineCore* help;
|
||||
QHelpEngine* helpEngine;
|
||||
|
||||
//---------------------------------------------------------
|
||||
// HelpQuery
|
||||
|
@ -24,14 +24,18 @@ static QHelpEngineCore* help;
|
|||
HelpQuery::HelpQuery(QWidget* parent)
|
||||
: QWidgetAction(parent)
|
||||
{
|
||||
if (!help) {
|
||||
QString s = getSharePath() + "manual/doc.qhc";
|
||||
printf("====<%s>\n", qPrintable(s));
|
||||
help = new QHelpEngineCore(s);
|
||||
if (!help->setupData()) {
|
||||
delete help;
|
||||
help = 0;
|
||||
printf("cannot setup data for help engine\n");
|
||||
if (!helpEngine) {
|
||||
QString lang = mscore->getLocaleISOCode();
|
||||
if (lang == "en_US") // HACK
|
||||
lang = "en";
|
||||
|
||||
QString s = getSharePath() + "manual/doc_" + lang + ".qhc";
|
||||
qDebug("init Help from: <%s>", qPrintable(s));
|
||||
helpEngine = new QHelpEngine(s, this);
|
||||
if (!helpEngine->setupData()) {
|
||||
qDebug("cannot setup data for help engine: %s", qPrintable(helpEngine->error()));
|
||||
delete helpEngine;
|
||||
helpEngine = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -88,18 +92,14 @@ void HelpQuery::textChanged(const QString& s)
|
|||
if (a != this)
|
||||
menu->removeAction(a);
|
||||
}
|
||||
for (const QChar& c : s) {
|
||||
QAction* action = new QAction(QString(c), this);
|
||||
action->setData(QString(c));
|
||||
menu->addAction(action);
|
||||
}
|
||||
emptyState = false;
|
||||
|
||||
|
||||
QMap<QString,QUrl>list = help->linksForIdentifier(s);
|
||||
printf("=====links %d\n", list.size());
|
||||
for (const QUrl& s : list)
|
||||
printf(" %s\n", qPrintable(s.toString()));
|
||||
QMap<QString,QUrl>list = helpEngine->linksForIdentifier(s);
|
||||
for (const QUrl& s : list) {
|
||||
QAction* action = new QAction(s.toString(), this);
|
||||
action->setData(s);
|
||||
menu->addAction(action);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -110,7 +110,11 @@ void HelpQuery::actionTriggered(QAction* action)
|
|||
{
|
||||
if (action->data().isNull())
|
||||
return;
|
||||
printf("action <%s>\n", qPrintable(action->data().toString()));
|
||||
QUrl url = action->data().toUrl();
|
||||
if (url.isValid()) {
|
||||
printf("actionTriggered <%s>\n", qPrintable(url.toString()));
|
||||
mscore->showHelp(url);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
|
||||
namespace Ms {
|
||||
|
||||
class HelpEngine;
|
||||
|
||||
//---------------------------------------------------------
|
||||
// HelpQuery
|
||||
//---------------------------------------------------------
|
||||
|
@ -35,7 +37,11 @@ class HelpQuery : public QWidgetAction {
|
|||
HelpQuery(QWidget* parent);
|
||||
};
|
||||
|
||||
extern QHelpEngine* helpEngine;
|
||||
|
||||
} // end namespace Ms
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -12,9 +12,11 @@
|
|||
|
||||
#include "helpBrowser.h"
|
||||
#include "icons.h"
|
||||
#include "help.h"
|
||||
|
||||
namespace Ms {
|
||||
|
||||
|
||||
//---------------------------------------------------------
|
||||
// HelpBrowser
|
||||
//---------------------------------------------------------
|
||||
|
@ -22,7 +24,7 @@ namespace Ms {
|
|||
HelpBrowser::HelpBrowser(QWidget* parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
view = new WebView;
|
||||
view = new HelpView(helpEngine);
|
||||
toolbar = new QWidget;
|
||||
toolbar->setSizePolicy(QSizePolicy::Expanding,
|
||||
QSizePolicy::Fixed);
|
||||
|
@ -40,23 +42,25 @@ HelpBrowser::HelpBrowser(QWidget* parent)
|
|||
bl->addStretch(2);
|
||||
|
||||
QToolButton* previous = new QToolButton;
|
||||
previous->setDefaultAction(view->pageAction(QWebPage::Back));
|
||||
previous->setIcon(QIcon(*icons[int(Icons::goPrevious_ICON)]));
|
||||
bl->addWidget(previous);
|
||||
connect(previous, SIGNAL(clicked()), view, SLOT(backward()));
|
||||
connect(view, SIGNAL(backwardAvailable(bool)), previous, SLOT(setEnabled(bool)));
|
||||
|
||||
QToolButton* next = new QToolButton;
|
||||
next->setDefaultAction(view->pageAction(QWebPage::Forward));
|
||||
next->setIcon(QIcon(*icons[int(Icons::goNext_ICON)]));
|
||||
bl->addWidget(next);
|
||||
connect(next, SIGNAL(clicked()), view, SLOT(forward()));
|
||||
connect(view, SIGNAL(forwardAvailable(bool)), next, SLOT(setEnabled(bool)));
|
||||
|
||||
bl->addStretch(10);
|
||||
|
||||
QToolButton* reload = new QToolButton;
|
||||
QAction * reloadAction = view->pageAction(QWebPage::Reload);
|
||||
// QToolButton* reload = new QToolButton;
|
||||
// QAction * reloadAction = view->pageAction(QWebPage::Reload);
|
||||
//for an unknown reason setting icon on the QToolButton doesn't work here...
|
||||
reloadAction->setIcon(QIcon(*icons[int(Icons::viewRefresh_ICON)]));
|
||||
reload->setDefaultAction(reloadAction);
|
||||
bl->addWidget(reload);
|
||||
// reloadAction->setIcon(QIcon(*icons[int(Icons::viewRefresh_ICON)]));
|
||||
// reload->setDefaultAction(reloadAction);
|
||||
// bl->addWidget(reload);
|
||||
|
||||
toolbar->setLayout(bl);
|
||||
}
|
||||
|
@ -68,13 +72,14 @@ HelpBrowser::HelpBrowser(QWidget* parent)
|
|||
void HelpBrowser::setContent(const QString& path)
|
||||
{
|
||||
homePath = QUrl::fromLocalFile(path);
|
||||
view->setUrl(homePath);
|
||||
view->setSource(homePath);
|
||||
}
|
||||
|
||||
void HelpBrowser::setContent(const QUrl& url)
|
||||
{
|
||||
homePath = url;
|
||||
view->setUrl(url);
|
||||
printf("HelpBroser::setContent: <%s>\n", qPrintable(url.toString()));
|
||||
view->setSource(url);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -83,37 +88,19 @@ void HelpBrowser::setContent(const QUrl& url)
|
|||
|
||||
void HelpBrowser::homeClicked()
|
||||
{
|
||||
view->setUrl(homePath);
|
||||
view->setSource(homePath);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// wheelEvent
|
||||
// loadResource
|
||||
//---------------------------------------------------------
|
||||
|
||||
void WebView::wheelEvent(QWheelEvent* event)
|
||||
QVariant HelpView::loadResource(int type, const QUrl& name)
|
||||
{
|
||||
static int deltaSum = 0;
|
||||
deltaSum += event->delta();
|
||||
int step = deltaSum / 120;
|
||||
deltaSum %= 120;
|
||||
|
||||
if (event->modifiers() & Qt::ControlModifier) {
|
||||
qreal _mag = zoomFactor();
|
||||
|
||||
if (step > 0) {
|
||||
for (int i = 0; i < step; ++i)
|
||||
_mag *= 1.1;
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < -step; ++i)
|
||||
_mag /= 1.1;
|
||||
}
|
||||
setZoomFactor(_mag);
|
||||
event->accept();
|
||||
}
|
||||
else
|
||||
event->ignore();
|
||||
QWebView::wheelEvent(event);
|
||||
if (name.scheme() == "qthelp")
|
||||
return QVariant(helpEngine->fileData(name));
|
||||
return QTextBrowser::loadResource(type, name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -16,15 +16,16 @@
|
|||
namespace Ms {
|
||||
|
||||
//---------------------------------------------------------
|
||||
// WebView
|
||||
// HelpView
|
||||
//---------------------------------------------------------
|
||||
|
||||
class WebView : public QWebView {
|
||||
class HelpView : public QTextBrowser {
|
||||
Q_OBJECT
|
||||
virtual void wheelEvent(QWheelEvent*);
|
||||
QHelpEngine* helpEngine;
|
||||
|
||||
public:
|
||||
WebView(QWidget* parent = 0) :QWebView(parent) {}
|
||||
HelpView(QHelpEngine* he, QWidget* parent = 0) : QTextBrowser(parent), helpEngine(he) {}
|
||||
QVariant loadResource(int type, const QUrl& name);
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -33,7 +34,7 @@ class WebView : public QWebView {
|
|||
|
||||
class HelpBrowser : public QWidget {
|
||||
Q_OBJECT
|
||||
WebView* view;
|
||||
HelpView* view;
|
||||
QWidget* toolbar;
|
||||
QUrl homePath;
|
||||
|
||||
|
|
|
@ -893,8 +893,7 @@ MuseScore::MuseScore()
|
|||
HelpQuery* hw = new HelpQuery(menuHelp);
|
||||
menuHelp->addAction(hw);
|
||||
|
||||
if (enableExperimental)
|
||||
menuHelp->addAction(getAction("local-help"));
|
||||
menuHelp->addAction(getAction("local-help"));
|
||||
menuHelp->addAction(tr("&Online Handbook"), this, SLOT(helpBrowser1()));
|
||||
|
||||
menuHelp->addSeparator();
|
||||
|
@ -1011,34 +1010,45 @@ QString MuseScore::getLocaleISOCode() const
|
|||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// helpBrowser
|
||||
// showHelp
|
||||
// show local help
|
||||
//---------------------------------------------------------
|
||||
|
||||
void MuseScore::helpBrowser(QString tag) const
|
||||
void MuseScore::showHelp(const QUrl& url)
|
||||
{
|
||||
QString lang = getLocaleISOCode();
|
||||
qDebug("showHelp <%s>", qPrintable(url.toString()));
|
||||
|
||||
if (lang == "en_US") // HACK
|
||||
lang = "en";
|
||||
if (!helpEngine)
|
||||
return;
|
||||
|
||||
if (MScore::debugMode)
|
||||
qDebug("open handbook for language <%s>", qPrintable(lang));
|
||||
QAction* a = getAction("local-help");
|
||||
a->blockSignals(true);
|
||||
a->setChecked(true);
|
||||
a->blockSignals(false);
|
||||
|
||||
QString path(mscoreGlobalShare + "manual/reference-" + lang + ".pdf");
|
||||
if (!QFile::exists(path))
|
||||
path = mscoreGlobalShare + "manual/reference-en" + ".pdf";
|
||||
qDebug("helpBrowser::load <%s>", qPrintable(path));
|
||||
QUrl url(QUrl::fromLocalFile(path));
|
||||
if (!tag.isEmpty())
|
||||
url.setFragment(tag);
|
||||
if (enableExperimental)
|
||||
helpBrowser(url);
|
||||
if (!helpBrowser) {
|
||||
helpBrowser = new HelpBrowser;
|
||||
manualDock = new QDockWidget(tr("Manual"), 0);
|
||||
manualDock->setObjectName("Manual");
|
||||
|
||||
manualDock->setWidget(helpBrowser);
|
||||
Qt::DockWidgetArea area = Qt::RightDockWidgetArea;
|
||||
addDockWidget(area, manualDock);
|
||||
}
|
||||
manualDock->show();
|
||||
helpBrowser->setContent(url);
|
||||
}
|
||||
|
||||
void MuseScore::helpBrowser(const QUrl& url) const
|
||||
void MuseScore::showHelp(QString s)
|
||||
{
|
||||
QDesktopServices::openUrl(url);
|
||||
if (s.isEmpty())
|
||||
s = "manual";
|
||||
qDebug("showHelp <%s>", qPrintable(s));
|
||||
QMap<QString,QUrl>list = helpEngine->linksForIdentifier(s);
|
||||
if (!list.isEmpty())
|
||||
showHelp(*list.begin());
|
||||
else
|
||||
qDebug("help for <%s> not found", qPrintable(s));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -1080,7 +1090,7 @@ void MuseScore::helpBrowser1() const
|
|||
|
||||
//track visits. see: http://www.google.com/support/googleanalytics/bin/answer.py?answer=55578
|
||||
help += QString("?utm_source=software&utm_medium=menu&utm_content=r%1&utm_campaign=MuseScore%2").arg(rev.trimmed()).arg(QString(VERSION));
|
||||
helpBrowser(QUrl(help));
|
||||
QDesktopServices::openUrl(QUrl(help));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -4061,8 +4071,15 @@ void MuseScore::cmd(QAction* a, const QString& cmd)
|
|||
// transportTools->setVisible(!transportTools->isVisible());
|
||||
// else if (cmd == "toggle-noteinput")
|
||||
// entryTools->setVisible(!entryTools->isVisible());
|
||||
else if (cmd == "local-help")
|
||||
helpBrowser();
|
||||
else if (cmd == "local-help") {
|
||||
if (!a->isChecked()) {
|
||||
if (manualDock)
|
||||
manualDock->hide();
|
||||
a->setChecked(false);
|
||||
}
|
||||
else
|
||||
showHelp("manual");
|
||||
}
|
||||
else if (cmd == "follow")
|
||||
preferences.followSong = a->isChecked();
|
||||
else if (cmd == "split-h")
|
||||
|
|
|
@ -90,6 +90,7 @@ class Driver;
|
|||
class Seq;
|
||||
class ImportMidiPanel;
|
||||
class Startcenter;
|
||||
class HelpBrowser;
|
||||
|
||||
struct PluginDescription;
|
||||
enum class SelState : char;
|
||||
|
@ -287,6 +288,8 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
|
|||
QLabel* _modeText;
|
||||
QLabel* _positionLabel;
|
||||
NewWizard* newWizard { 0 };
|
||||
HelpBrowser* helpBrowser { 0 };
|
||||
QDockWidget* manualDock { 0 };
|
||||
|
||||
PaletteBox* paletteBox { 0 };
|
||||
Inspector* _inspector { 0 };
|
||||
|
@ -397,7 +400,6 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
|
|||
void showSynthControl(bool);
|
||||
void showSelectionWindow(bool);
|
||||
void showSearchDialog();
|
||||
void helpBrowser(const QUrl&) const;
|
||||
void splitWindow(bool horizontal);
|
||||
void removeSessionFile();
|
||||
void editChordStyle();
|
||||
|
@ -664,7 +666,8 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
|
|||
PluginCreator* pluginCreator() { return _pluginCreator; }
|
||||
ScoreView* currentScoreView() const { return cv; }
|
||||
void showMessage(const QString& s, int timeout);
|
||||
void helpBrowser(const QString = QString()) const;
|
||||
void showHelp(QString);
|
||||
void showHelp(const QUrl&);
|
||||
|
||||
void registerPlugin(PluginDescription*);
|
||||
void unregisterPlugin(PluginDescription*);
|
||||
|
|
|
@ -1057,7 +1057,7 @@ void ScoreView::objectPopup(const QPoint& pos, Element* obj)
|
|||
if (cmd == "list")
|
||||
mscore->showElementContext(obj);
|
||||
else if (cmd == "help")
|
||||
mscore->helpBrowser(obj->name());
|
||||
mscore->showHelp(obj->name());
|
||||
else if (cmd == "edit-element") {
|
||||
if (obj->isEditable()) {
|
||||
startEdit(obj);
|
||||
|
|
|
@ -37,7 +37,7 @@ Shortcut Shortcut::_sc[] = {
|
|||
QT_TRANSLATE_NOOP("action","Show local handbook"), // Appears if you use Help > What's This?
|
||||
Icons::Invalid_ICON,
|
||||
Qt::WindowShortcut,
|
||||
ShortcutFlags::NONE
|
||||
ShortcutFlags::NONE | ShortcutFlags::A_CHECKABLE
|
||||
},
|
||||
{
|
||||
MsWidget::MAIN_WINDOW,
|
||||
|
|
2
rdoc/.gitignore
vendored
Normal file
2
rdoc/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.qch
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
#=============================================================================
|
||||
# MuseScore
|
||||
# Music Composition & Notation
|
||||
# $Id:$
|
||||
#
|
||||
# Copyright (C) 2011 Werner Schweer
|
||||
#
|
||||
|
@ -13,13 +12,17 @@
|
|||
|
||||
add_custom_target(referenceDocumentation
|
||||
ALL
|
||||
DEPENDS doc.html doc.qhp
|
||||
DEPENDS en/doc.html de/doc.html en/doc.qhp de/doc.qhp
|
||||
)
|
||||
|
||||
add_custom_command(TARGET referenceDocumentation
|
||||
POST_BUILD
|
||||
COMMAND qcollectiongenerator ${PROJECT_SOURCE_DIR}/rdoc/doc.qhcp -o doc.qhc
|
||||
COMMAND qcollectiongenerator ${PROJECT_SOURCE_DIR}/rdoc/en/doc.qhcp -o doc_en.qhc
|
||||
COMMAND qcollectiongenerator ${PROJECT_SOURCE_DIR}/rdoc/de/doc.qhcp -o doc_de.qhc
|
||||
)
|
||||
|
||||
install(FILES ${PROJECT_BINARY_DIR}/rdoc/doc.qhc DESTINATION ${Mscore_SHARE_NAME}${Mscore_INSTALL_NAME}manual)
|
||||
install(FILES
|
||||
${PROJECT_BINARY_DIR}/rdoc/doc_en.qhc
|
||||
${PROJECT_BINARY_DIR}/rdoc/doc_de.qhc
|
||||
DESTINATION ${Mscore_SHARE_NAME}${Mscore_INSTALL_NAME}manual)
|
||||
|
||||
|
|
9
rdoc/de/doc.html
Normal file
9
rdoc/de/doc.html
Normal file
|
@ -0,0 +1,9 @@
|
|||
<html>
|
||||
|
||||
<body>
|
||||
Hallo MuseScore!
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
</html>
|
15
rdoc/de/doc.qhcp
Normal file
15
rdoc/de/doc.qhcp
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<QHelpCollectionProject version="1.0">
|
||||
<docFiles>
|
||||
<generate>
|
||||
<file>
|
||||
<input>doc.qhp</input>
|
||||
<output>doc.qch</output>
|
||||
</file>
|
||||
</generate>
|
||||
<register>
|
||||
<file>doc.qch</file>
|
||||
</register>
|
||||
</docFiles>
|
||||
</QHelpCollectionProject>
|
||||
|
31
rdoc/de/doc.qhp
Normal file
31
rdoc/de/doc.qhp
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<QtHelpProject version="1.0">
|
||||
<namespace>musescore.com.musescore.2.0</namespace>
|
||||
<virtualFolder>doc</virtualFolder>
|
||||
<customFilter name="de">
|
||||
<filterAttribute>MuseScore</filterAttribute>
|
||||
</customFilter>
|
||||
|
||||
<filterSection>
|
||||
<filterAttribute>MuseScore</filterAttribute>
|
||||
<toc>
|
||||
<section title="My Application Manual" ref="index.html">
|
||||
<section title="Chapter 1" ref="doc.html#chapter1"/>
|
||||
<section title="Chapter 2" ref="doc.html#chapter2"/>
|
||||
<section title="Chapter 3" ref="doc.html#chapter3"/>
|
||||
</section>
|
||||
</toc>
|
||||
<keywords>
|
||||
<keyword id="manual" ref="doc.html"/>
|
||||
<keyword name="bar" ref="doc.html#bar"/>
|
||||
<keyword id="MuseScore::foobar" ref="doc.html#foobar"/>
|
||||
<keyword id="mops" ref="doc.html#foobar"/>
|
||||
<keyword id="klops" ref="doc.html#foobar"/>
|
||||
</keywords>
|
||||
<files>
|
||||
<file>../classic.css</file>
|
||||
<file>doc.html</file>
|
||||
</files>
|
||||
</filterSection>
|
||||
|
||||
</QtHelpProject>
|
9
rdoc/en/doc.html
Normal file
9
rdoc/en/doc.html
Normal file
|
@ -0,0 +1,9 @@
|
|||
<html>
|
||||
|
||||
<body>
|
||||
Hello MuseScore!
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
</html>
|
15
rdoc/en/doc.qhcp
Normal file
15
rdoc/en/doc.qhcp
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<QHelpCollectionProject version="1.0">
|
||||
<docFiles>
|
||||
<generate>
|
||||
<file>
|
||||
<input>doc.qhp</input>
|
||||
<output>doc.qch</output>
|
||||
</file>
|
||||
</generate>
|
||||
<register>
|
||||
<file>doc.qch</file>
|
||||
</register>
|
||||
</docFiles>
|
||||
</QHelpCollectionProject>
|
||||
|
31
rdoc/en/doc.qhp
Normal file
31
rdoc/en/doc.qhp
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<QtHelpProject version="1.0">
|
||||
<namespace>musescore.com.musescore.2.0</namespace>
|
||||
<virtualFolder>doc</virtualFolder>
|
||||
<customFilter name="en">
|
||||
<filterAttribute>MuseScore</filterAttribute>
|
||||
</customFilter>
|
||||
|
||||
<filterSection>
|
||||
<filterAttribute>MuseScore</filterAttribute>
|
||||
<toc>
|
||||
<section title="My Application Manual" ref="index.html">
|
||||
<section title="Chapter 1" ref="doc.html#chapter1"/>
|
||||
<section title="Chapter 2" ref="doc.html#chapter2"/>
|
||||
<section title="Chapter 3" ref="doc.html#chapter3"/>
|
||||
</section>
|
||||
</toc>
|
||||
<keywords>
|
||||
<keyword id="manual" ref="doc.html"/>
|
||||
<keyword name="bar" ref="doc.html#bar"/>
|
||||
<keyword id="MuseScore::foobar" ref="doc.html#foobar"/>
|
||||
<keyword id="mops" ref="doc.html#foobar"/>
|
||||
<keyword id="klops" ref="doc.html#foobar"/>
|
||||
</keywords>
|
||||
<files>
|
||||
<file>../classic.css</file>
|
||||
<file>doc.html</file>
|
||||
</files>
|
||||
</filterSection>
|
||||
|
||||
</QtHelpProject>
|
Loading…
Reference in a new issue