Vi: add config page

This commit is contained in:
Le Tan 2021-08-13 21:59:17 +08:00
parent e9799990f0
commit 721e821ca5
16 changed files with 211 additions and 37 deletions

@ -1 +1 @@
Subproject commit ac58baf5f07643f57a2a208629b7056c24516ffc Subproject commit 77cf66845ac2dee3e49cee440f5a6b40b777e8bd

View File

@ -6,6 +6,8 @@
#include "texteditorconfig.h" #include "texteditorconfig.h"
#include "markdowneditorconfig.h" #include "markdowneditorconfig.h"
#include <vtextedit/viconfig.h>
using namespace vnotex; using namespace vnotex;
#define READINT(key) readInt(appObj, userObj, (key)) #define READINT(key) readInt(appObj, userObj, (key))
@ -58,6 +60,9 @@ void EditorConfig::init(const QJsonObject &p_app,
loadImageHost(appObj, userObj); loadImageHost(appObj, userObj);
m_viConfig = QSharedPointer<vte::ViConfig>::create();
m_viConfig->fromJson(read(appObj, userObj, QStringLiteral("vi")).toObject());
m_textEditorConfig->init(appObj, userObj); m_textEditorConfig->init(appObj, userObj);
m_markdownEditorConfig->init(appObj, userObj); m_markdownEditorConfig->init(appObj, userObj);
} }
@ -139,6 +144,7 @@ QJsonObject EditorConfig::toJson() const
obj[m_markdownEditorConfig->getSessionName()] = m_markdownEditorConfig->toJson(); obj[m_markdownEditorConfig->getSessionName()] = m_markdownEditorConfig->toJson();
obj[QStringLiteral("core")] = saveCore(); obj[QStringLiteral("core")] = saveCore();
obj[QStringLiteral("image_host")] = saveImageHost(); obj[QStringLiteral("image_host")] = saveImageHost();
obj[QStringLiteral("vi")] = m_viConfig->toJson();
return obj; return obj;
} }
@ -304,3 +310,8 @@ void EditorConfig::setClearObsoleteImageAtImageHostEnabled(bool p_enabled)
{ {
updateConfig(m_clearObsoleteImageAtImageHost, p_enabled, this); updateConfig(m_clearObsoleteImageAtImageHost, p_enabled, this);
} }
const QSharedPointer<vte::ViConfig> &EditorConfig::getViConfig() const
{
return m_viConfig;
}

View File

@ -8,6 +8,11 @@
#include <QObject> #include <QObject>
#include <QVector> #include <QVector>
namespace vte
{
class ViConfig;
}
namespace vnotex namespace vnotex
{ {
class TextEditorConfig; class TextEditorConfig;
@ -120,6 +125,8 @@ namespace vnotex
bool isClearObsoleteImageAtImageHostEnabled() const; bool isClearObsoleteImageAtImageHostEnabled() const;
void setClearObsoleteImageAtImageHostEnabled(bool p_enabled); void setClearObsoleteImageAtImageHostEnabled(bool p_enabled);
const QSharedPointer<vte::ViConfig> &getViConfig() const;
private: private:
friend class MainConfig; friend class MainConfig;
@ -165,6 +172,8 @@ namespace vnotex
QString m_defaultImageHost; QString m_defaultImageHost;
bool m_clearObsoleteImageAtImageHost = false; bool m_clearObsoleteImageAtImageHost = false;
QSharedPointer<vte::ViConfig> m_viConfig;
}; };
} }

View File

@ -36,8 +36,6 @@
<file>icons/manage_notebooks.svg</file> <file>icons/manage_notebooks.svg</file>
<file>icons/up_parent_node.svg</file> <file>icons/up_parent_node.svg</file>
<file>icons/properties.svg</file> <file>icons/properties.svg</file>
<file>icons/remove_notebook.svg</file>
<file>icons/close_notebook.svg</file>
<file>icons/recycle_bin.svg</file> <file>icons/recycle_bin.svg</file>
<file>icons/search_location_list.svg</file> <file>icons/search_location_list.svg</file>
<file>icons/save_editor.svg</file> <file>icons/save_editor.svg</file>

View File

@ -1 +1,10 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1602768905506" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12426" xmlns:xlink="http://www.w3.org/1999/xlink" width="512" height="512"><defs><style type="text/css"></style></defs><path d="M761.6 701.44a21.333333 21.333333 0 0 1 0 30.293333l-29.866667 29.866667a21.333333 21.333333 0 0 1-30.293333 0L512 572.16l-189.44 189.44a21.333333 21.333333 0 0 1-30.293333 0l-29.866667-29.866667a21.333333 21.333333 0 0 1 0-30.293333L451.84 512 262.4 322.56a21.333333 21.333333 0 0 1 0-30.293333l29.866667-29.866667a21.333333 21.333333 0 0 1 30.293333 0L512 451.84l189.44-189.44a21.333333 21.333333 0 0 1 30.293333 0l29.866667 29.866667a21.333333 21.333333 0 0 1 0 30.293333L572.16 512z" p-id="12427" fill="#000000"></path></svg> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#000000" d="M341,128V99c0-19.1-14.5-35-34.5-35H205.4C185.5,64,171,79.9,171,99v29H80v32h9.2c0,0,5.4,0.6,8.2,3.4c2.8,2.8,3.9,9,3.9,9
l19,241.7c1.5,29.4,1.5,33.9,36,33.9h199.4c34.5,0,34.5-4.4,36-33.8l19-241.6c0,0,1.1-6.3,3.9-9.1c2.8-2.8,8.2-3.4,8.2-3.4h9.2v-32
h-91V128z M192,99c0-9.6,7.8-15,17.7-15h91.7c9.9,0,18.6,5.5,18.6,15v29H192V99z M183.5,384l-10.3-192h20.3L204,384H183.5z
M267.1,384h-22V192h22V384z M328.7,384h-20.4l10.5-192h20.3L328.7,384z"/>
</svg>

Before

Width:  |  Height:  |  Size: 907 B

After

Width:  |  Height:  |  Size: 955 B

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#000000" d="M341,128V99c0-19.1-14.5-35-34.5-35H205.4C185.5,64,171,79.9,171,99v29H80v32h9.2c0,0,5.4,0.6,8.2,3.4c2.8,2.8,3.9,9,3.9,9
l19,241.7c1.5,29.4,1.5,33.9,36,33.9h199.4c34.5,0,34.5-4.4,36-33.8l19-241.6c0,0,1.1-6.3,3.9-9.1c2.8-2.8,8.2-3.4,8.2-3.4h9.2v-32
h-91V128z M192,99c0-9.6,7.8-15,17.7-15h91.7c9.9,0,18.6,5.5,18.6,15v29H192V99z M183.5,384l-10.3-192h20.3L204,384H183.5z
M267.1,384h-22V192h22V384z M328.7,384h-20.4l10.5-192h20.3L328.7,384z"/>
</svg>

Before

Width:  |  Height:  |  Size: 955 B

View File

@ -344,6 +344,9 @@
], ],
"default_image_host" : "", "default_image_host" : "",
"clear_obsolete_image" : false "clear_obsolete_image" : false
},
"vi" : {
"control_c_to_copy" : false
} }
}, },
"widget" : { "widget" : {

View File

@ -18,6 +18,7 @@
#include "quickaccesspage.h" #include "quickaccesspage.h"
#include "themepage.h" #include "themepage.h"
#include "imagehostpage.h" #include "imagehostpage.h"
#include "vipage.h"
using namespace vnotex; using namespace vnotex;
@ -118,6 +119,12 @@ void SettingsDialog::setupPages()
addSubPage(subPage, item); addSubPage(subPage, item);
} }
// Vi.
{
auto subPage = new ViPage(this);
addSubPage(subPage, item);
}
// Text Editor. // Text Editor.
{ {
auto subPage = new TextEditorPage(this); auto subPage = new TextEditorPage(this);

View File

@ -0,0 +1,62 @@
#include "vipage.h"
#include <QCheckBox>
#include <QFormLayout>
#include <vtextedit/viconfig.h>
#include <widgets/widgetsfactory.h>
#include <core/editorconfig.h>
#include <core/configmgr.h>
#include <utils/widgetutils.h>
#include "editorpage.h"
using namespace vnotex;
ViPage::ViPage(QWidget *p_parent)
: SettingsPage(p_parent)
{
setupUI();
}
void ViPage::setupUI()
{
auto mainLayout = WidgetsFactory::createFormLayout(this);
{
const QString label(tr("Control-C to copy"));
m_controlCToCopyCheckBox = WidgetsFactory::createCheckBox(label, this);
m_controlCToCopyCheckBox->setToolTip(tr("Use Control-C to copy text"));
mainLayout->addRow(m_controlCToCopyCheckBox);
addSearchItem(label, m_controlCToCopyCheckBox->toolTip(), m_controlCToCopyCheckBox);
connect(m_controlCToCopyCheckBox, &QCheckBox::stateChanged,
this, &ViPage::pageIsChanged);
}
}
void ViPage::loadInternal()
{
const auto &viConfig = ConfigMgr::getInst().getEditorConfig().getViConfig();
m_controlCToCopyCheckBox->setChecked(viConfig->m_controlCToCopy);
}
bool ViPage::saveInternal()
{
auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
auto &viConfig = editorConfig.getViConfig();
viConfig->m_controlCToCopy = m_controlCToCopyCheckBox->isChecked();
editorConfig.update();
EditorPage::notifyEditorConfigChange();
return true;
}
QString ViPage::title() const
{
return tr("Vi Input Mode");
}

View File

@ -0,0 +1,30 @@
#ifndef VIPAGE_H
#define VIPAGE_H
#include "settingspage.h"
class QCheckBox;
namespace vnotex
{
class ViPage : public SettingsPage
{
Q_OBJECT
public:
explicit ViPage(QWidget *p_parent = nullptr);
QString title() const Q_DECL_OVERRIDE;
protected:
void loadInternal() Q_DECL_OVERRIDE;
bool saveInternal() Q_DECL_OVERRIDE;
private:
void setupUI();
QCheckBox *m_controlCToCopyCheckBox = nullptr;
};
}
#endif // VIPAGE_H

View File

@ -181,15 +181,13 @@ void MarkdownViewWindow::handleEditorConfigChange()
const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig(); const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();
if (markdownEditorConfig.revision() != m_markdownEditorConfigRevision) { if (updateConfigRevision()) {
m_markdownEditorConfigRevision = markdownEditorConfig.revision();
updatePreviewHelperFromConfig(markdownEditorConfig); updatePreviewHelperFromConfig(markdownEditorConfig);
HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig); HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig);
if (m_editor) { if (m_editor) {
auto config = createMarkdownEditorConfig(markdownEditorConfig); auto config = createMarkdownEditorConfig(editorConfig, markdownEditorConfig);
m_editor->setConfig(config); m_editor->setConfig(config);
m_editor->updateFromConfig(); m_editor->updateFromConfig();
@ -316,11 +314,10 @@ void MarkdownViewWindow::setupTextEditor()
const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig(); const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();
m_editorConfigRevision = editorConfig.revision(); updateConfigRevision();
m_markdownEditorConfigRevision = markdownEditorConfig.revision();
m_editor = new MarkdownEditor(markdownEditorConfig, m_editor = new MarkdownEditor(markdownEditorConfig,
createMarkdownEditorConfig(markdownEditorConfig), createMarkdownEditorConfig(editorConfig, markdownEditorConfig),
createMarkdownEditorParameters(editorConfig, markdownEditorConfig), createMarkdownEditorParameters(editorConfig, markdownEditorConfig),
this); this);
m_splitter->insertWidget(0, m_editor); m_splitter->insertWidget(0, m_editor);
@ -405,8 +402,7 @@ void MarkdownViewWindow::setupViewer()
const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig(); const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();
m_editorConfigRevision = editorConfig.revision(); updateConfigRevision();
m_markdownEditorConfigRevision = markdownEditorConfig.revision();
HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig); HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig);
@ -852,11 +848,12 @@ void MarkdownViewWindow::setupOutlineProvider()
}); });
} }
QSharedPointer<vte::MarkdownEditorConfig> MarkdownViewWindow::createMarkdownEditorConfig(const MarkdownEditorConfig &p_config) QSharedPointer<vte::MarkdownEditorConfig> MarkdownViewWindow::createMarkdownEditorConfig(const EditorConfig &p_editorConfig, const MarkdownEditorConfig &p_config)
{ {
const auto &themeMgr = VNoteX::getInst().getThemeMgr(); const auto &themeMgr = VNoteX::getInst().getThemeMgr();
auto textEditorConfig = TextViewWindowHelper::createTextEditorConfig(p_config.getTextEditorConfig(), auto textEditorConfig = TextViewWindowHelper::createTextEditorConfig(p_config.getTextEditorConfig(),
p_editorConfig.getViConfig(),
themeMgr.getFile(Theme::File::MarkdownEditorStyle), themeMgr.getFile(Theme::File::MarkdownEditorStyle),
themeMgr.getMarkdownEditorHighlightTheme()); themeMgr.getMarkdownEditorHighlightTheme());
@ -1126,3 +1123,27 @@ void MarkdownViewWindow::removeFromImageHost(const QString &p_url)
this); this);
} }
} }
bool MarkdownViewWindow::updateConfigRevision()
{
bool changed = false;
const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
if (m_editorConfigRevision != editorConfig.revision()) {
changed = true;
m_editorConfigRevision = editorConfig.revision();
}
if (m_textEditorConfigRevision != editorConfig.getTextEditorConfig().revision()) {
changed = true;
m_textEditorConfigRevision = editorConfig.getTextEditorConfig().revision();
}
if (m_markdownEditorConfigRevision != editorConfig.getMarkdownEditorConfig().revision()) {
changed = true;
m_markdownEditorConfigRevision = editorConfig.getMarkdownEditorConfig().revision();
}
return changed;
}

View File

@ -152,10 +152,12 @@ namespace vnotex
void removeFromImageHost(const QString &p_url); void removeFromImageHost(const QString &p_url);
bool updateConfigRevision();
template <class T> template <class T>
static QSharedPointer<Outline> headingsToOutline(const QVector<T> &p_headings); static QSharedPointer<Outline> headingsToOutline(const QVector<T> &p_headings);
static QSharedPointer<vte::MarkdownEditorConfig> createMarkdownEditorConfig(const MarkdownEditorConfig &p_config); static QSharedPointer<vte::MarkdownEditorConfig> createMarkdownEditorConfig(const EditorConfig &p_editorConfig, const MarkdownEditorConfig &p_config);
static QSharedPointer<vte::TextEditorParameters> createMarkdownEditorParameters(const EditorConfig &p_editorConfig, const MarkdownEditorConfig &p_config); static QSharedPointer<vte::TextEditorParameters> createMarkdownEditorParameters(const EditorConfig &p_editorConfig, const MarkdownEditorConfig &p_config);
@ -184,6 +186,8 @@ namespace vnotex
int m_viewerBufferRevision = 0; int m_viewerBufferRevision = 0;
int m_textEditorConfigRevision = 0;
int m_markdownEditorConfigRevision = 0; int m_markdownEditorConfigRevision = 0;
ViewWindowMode m_previousMode = ViewWindowMode::Invalid; ViewWindowMode m_previousMode = ViewWindowMode::Invalid;

View File

@ -30,12 +30,11 @@ void TextViewWindow::setupUI()
const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
const auto &textEditorConfig = editorConfig.getTextEditorConfig(); const auto &textEditorConfig = editorConfig.getTextEditorConfig();
m_editorConfigRevision = editorConfig.revision(); updateConfigRevision();
m_textEditorConfigRevision = textEditorConfig.revision();
// Central widget. // Central widget.
{ {
m_editor = new TextEditor(createTextEditorConfig(textEditorConfig), m_editor = new TextEditor(createTextEditorConfig(editorConfig, textEditorConfig),
createTextEditorParameters(editorConfig, textEditorConfig), createTextEditorParameters(editorConfig, textEditorConfig),
this); this);
setCentralWidget(m_editor); setCentralWidget(m_editor);
@ -133,15 +132,33 @@ void TextViewWindow::handleEditorConfigChange()
const auto &editorConfig = ConfigMgr::getInst().getEditorConfig(); const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
const auto &textEditorConfig = editorConfig.getTextEditorConfig(); const auto &textEditorConfig = editorConfig.getTextEditorConfig();
if (m_textEditorConfigRevision != textEditorConfig.revision()) { if (updateConfigRevision()) {
m_textEditorConfigRevision = textEditorConfig.revision(); auto config = createTextEditorConfig(editorConfig, textEditorConfig);
auto config = createTextEditorConfig(textEditorConfig);
m_editor->setConfig(config); m_editor->setConfig(config);
updateEditorFromConfig(); updateEditorFromConfig();
} }
} }
bool TextViewWindow::updateConfigRevision()
{
bool changed = false;
const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();
if (m_editorConfigRevision != editorConfig.revision()) {
changed = true;
m_editorConfigRevision = editorConfig.revision();
}
if (m_textEditorConfigRevision != editorConfig.getTextEditorConfig().revision()) {
changed = true;
m_textEditorConfigRevision = editorConfig.getTextEditorConfig().revision();
}
return changed;
}
void TextViewWindow::setBufferRevisionAfterInvalidation(int p_bufferRevision) void TextViewWindow::setBufferRevisionAfterInvalidation(int p_bufferRevision)
{ {
m_bufferRevision = p_bufferRevision; m_bufferRevision = p_bufferRevision;
@ -153,10 +170,11 @@ void TextViewWindow::setMode(ViewWindowMode p_mode)
Q_ASSERT(false); Q_ASSERT(false);
} }
QSharedPointer<vte::TextEditorConfig> TextViewWindow::createTextEditorConfig(const TextEditorConfig &p_config) QSharedPointer<vte::TextEditorConfig> TextViewWindow::createTextEditorConfig(const EditorConfig &p_editorConfig, const TextEditorConfig &p_config)
{ {
const auto &themeMgr = VNoteX::getInst().getThemeMgr(); const auto &themeMgr = VNoteX::getInst().getThemeMgr();
auto config = TextViewWindowHelper::createTextEditorConfig(p_config, auto config = TextViewWindowHelper::createTextEditorConfig(p_config,
p_editorConfig.getViConfig(),
themeMgr.getFile(Theme::File::TextEditorStyle), themeMgr.getFile(Theme::File::TextEditorStyle),
themeMgr.getEditorHighlightTheme()); themeMgr.getEditorHighlightTheme());
return config; return config;

View File

@ -80,7 +80,9 @@ namespace vnotex
void handleFileOpenParameters(const QSharedPointer<FileOpenParameters> &p_paras); void handleFileOpenParameters(const QSharedPointer<FileOpenParameters> &p_paras);
static QSharedPointer<vte::TextEditorConfig> createTextEditorConfig(const TextEditorConfig &p_config); bool updateConfigRevision();
static QSharedPointer<vte::TextEditorConfig> createTextEditorConfig(const EditorConfig &p_editorConfig, const TextEditorConfig &p_config);
static QSharedPointer<vte::TextEditorParameters> createTextEditorParameters(const EditorConfig &p_editorConfig, const TextEditorConfig &p_config); static QSharedPointer<vte::TextEditorParameters> createTextEditorParameters(const EditorConfig &p_editorConfig, const TextEditorConfig &p_config);

View File

@ -14,6 +14,11 @@
#include "quickselector.h" #include "quickselector.h"
namespace vte
{
class ViConfig;
}
namespace vnotex namespace vnotex
{ {
class TextEditorConfig; class TextEditorConfig;
@ -57,11 +62,14 @@ namespace vnotex
} }
static QSharedPointer<vte::TextEditorConfig> createTextEditorConfig(const TextEditorConfig &p_config, static QSharedPointer<vte::TextEditorConfig> createTextEditorConfig(const TextEditorConfig &p_config,
const QSharedPointer<vte::ViConfig> &p_viConfig,
const QString &p_themeFile, const QString &p_themeFile,
const QString &p_syntaxTheme) const QString &p_syntaxTheme)
{ {
auto editorConfig = QSharedPointer<vte::TextEditorConfig>::create(); auto editorConfig = QSharedPointer<vte::TextEditorConfig>::create();
editorConfig->m_viConfig = p_viConfig;
if (!p_themeFile.isEmpty()) { if (!p_themeFile.isEmpty()) {
editorConfig->m_theme = vte::Theme::createThemeFromFile(p_themeFile); editorConfig->m_theme = vte::Theme::createThemeFromFile(p_themeFile);
} }

View File

@ -28,6 +28,7 @@ SOURCES += \
$$PWD/dialogs/settings/settingsdialog.cpp \ $$PWD/dialogs/settings/settingsdialog.cpp \
$$PWD/dialogs/settings/texteditorpage.cpp \ $$PWD/dialogs/settings/texteditorpage.cpp \
$$PWD/dialogs/settings/themepage.cpp \ $$PWD/dialogs/settings/themepage.cpp \
$$PWD/dialogs/settings/vipage.cpp \
$$PWD/dialogs/snippetinfowidget.cpp \ $$PWD/dialogs/snippetinfowidget.cpp \
$$PWD/dialogs/snippetpropertiesdialog.cpp \ $$PWD/dialogs/snippetpropertiesdialog.cpp \
$$PWD/dialogs/sortdialog.cpp \ $$PWD/dialogs/sortdialog.cpp \
@ -140,6 +141,7 @@ HEADERS += \
$$PWD/dialogs/settings/settingsdialog.h \ $$PWD/dialogs/settings/settingsdialog.h \
$$PWD/dialogs/settings/texteditorpage.h \ $$PWD/dialogs/settings/texteditorpage.h \
$$PWD/dialogs/settings/themepage.h \ $$PWD/dialogs/settings/themepage.h \
$$PWD/dialogs/settings/vipage.h \
$$PWD/dialogs/snippetinfowidget.h \ $$PWD/dialogs/snippetinfowidget.h \
$$PWD/dialogs/snippetpropertiesdialog.h \ $$PWD/dialogs/snippetpropertiesdialog.h \
$$PWD/dialogs/sortdialog.h \ $$PWD/dialogs/sortdialog.h \