From 396146d916e53989df140616a36092769f437703 Mon Sep 17 00:00:00 2001 From: Christian Loose Date: Thu, 13 Nov 2014 21:54:30 +0100 Subject: [PATCH 01/34] Introduce Styles class that handles the builtin styles --- app-static/app-static.pro | 6 +- app-static/styles.cpp | 121 ++++++++++++++++++++++++++++++++++++++ app-static/styles.h | 59 +++++++++++++++++++ app/mainwindow.cpp | 58 ++++++++++-------- app/mainwindow.h | 2 + 5 files changed, 221 insertions(+), 25 deletions(-) create mode 100644 app-static/styles.cpp create mode 100644 app-static/styles.h diff --git a/app-static/app-static.pro b/app-static/app-static.pro index dbb17ebc..fb4ac104 100644 --- a/app-static/app-static.pro +++ b/app-static/app-static.pro @@ -24,7 +24,8 @@ SOURCES += \ slidelinemapping.cpp \ viewsynchronizer.cpp \ revealviewsynchronizer.cpp \ - htmlviewsynchronizer.cpp + htmlviewsynchronizer.cpp \ + styles.cpp HEADERS += \ snippets/snippet.h \ @@ -44,7 +45,8 @@ HEADERS += \ slidelinemapping.h \ viewsynchronizer.h \ revealviewsynchronizer.h \ - htmlviewsynchronizer.h + htmlviewsynchronizer.h \ + styles.h #unix:!symbian { # maemo5 { diff --git a/app-static/styles.cpp b/app-static/styles.cpp new file mode 100644 index 00000000..96ec8d76 --- /dev/null +++ b/app-static/styles.cpp @@ -0,0 +1,121 @@ +/* + * Copyright 2014 Christian Loose + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "styles.h" + + +Styles::Styles() +{ + setupBuiltinMarkdownHighlightings(); + setupBuiltinCodeHighlightings(); + setupBuiltinPreviewStylesheets(); + setupBuiltinStyles(); +} + +Style Styles::style(const QString &name) const +{ + return m_styles[name]; +} + +QStringList Styles::markdownHighlightings() const +{ + return QStringList(m_markdownHighlightings.keys()); +} + +QString Styles::pathForMarkdownHighlighting(const Style &style) const +{ + return m_markdownHighlightings[style.markdownHighlighting]; +} + +QStringList Styles::codeHighlightings() const +{ + return QStringList(m_codeHighlightings.keys()); +} + +QString Styles::pathForCodeHighlighting(const Style &style) const +{ + return m_codeHighlightings[style.codeHighlighting]; +} + +QStringList Styles::previewStylesheets() const +{ + return QStringList(m_previewStylesheets.keys()); +} + +QString Styles::pathForPreviewStylesheet(const Style &style) const +{ + return m_previewStylesheets[style.previewStylesheet]; +} + +void Styles::setupBuiltinMarkdownHighlightings() +{ + m_markdownHighlightings.insert("Default", ":/theme/default.txt"); + m_markdownHighlightings.insert("Solarized Light", ":/theme/solarized-light+.txt"); + m_markdownHighlightings.insert("Solarized Dark", ":/theme/solarized-dark+.txt"); + m_markdownHighlightings.insert("Clearness Dark", ":/theme/clearness-dark+.txt"); + m_markdownHighlightings.insert("Byword Dark", ":/theme/byword-dark.txt"); +} + +void Styles::setupBuiltinCodeHighlightings() +{ + m_codeHighlightings.insert("Default", "default"); + m_codeHighlightings.insert("Github", "github"); + m_codeHighlightings.insert("Solarized Light", "solarized_light"); + m_codeHighlightings.insert("Solarized Dark", "solarized_dark"); +} + +void Styles::setupBuiltinPreviewStylesheets() +{ + m_previewStylesheets.insert("Default", "qrc:/css/markdown.css"); + m_previewStylesheets.insert("Github", "qrc:/css/github.css"); + m_previewStylesheets.insert("Solarized Light", "qrc:/css/solarized-light.css"); + m_previewStylesheets.insert("Solarized Dark", "qrc:/css/solarized-dark.css"); + m_previewStylesheets.insert("Clearness", "qrc:/css/clearness.css"); + m_previewStylesheets.insert("Clearness Dark", "qrc:/css/clearness-dark.css"); + m_previewStylesheets.insert("Byword Dark", "qrc:/css/byword-dark.css"); +} + +#include +void Styles::setupBuiltinStyles() +{ + Style defaultStyle = { "Default", "Default", "Default" }; + m_styles.insert("Default", defaultStyle); + + Style githubStyle = { "Default", "Github", "Github" }; + m_styles.insert("Github", githubStyle); + + Style solarizedLightStyle = { "Solarized Light", "Solarized Light", "Solarized Light" }; + m_styles.insert("Solarized Light", solarizedLightStyle); + + Style solarizedDarkStyle = { "Solarized Dark", "Solarized Dark", "Solarized Dark" }; + m_styles.insert("Solarized Dark", solarizedDarkStyle); + + Style clearnessStyle = { "Default", "Default", "Clearness" }; + m_styles.insert("Clearness", clearnessStyle); + + Style clearnessDarkStyle = { "Clearness Dark", "Default", "Clearness Dark" }; + m_styles.insert("Clearness Dark", clearnessDarkStyle); + + Style bywordDarkStyle = { "Byword Dark", "Default", "Byword Dark" }; + m_styles.insert("Byword Dark", bywordDarkStyle); + qDebug() << m_styles; +} + +QDebug operator<<(QDebug dbg, const Style &s) +{ + dbg << s.markdownHighlighting << s.codeHighlighting << s.previewStylesheet; + return dbg.space(); +} diff --git a/app-static/styles.h b/app-static/styles.h new file mode 100644 index 00000000..387c3367 --- /dev/null +++ b/app-static/styles.h @@ -0,0 +1,59 @@ +/* + * Copyright 2014 Christian Loose + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef STYLES_H +#define STYLES_H + +#include +#include +#include + +struct Style +{ + QString markdownHighlighting; + QString codeHighlighting; + QString previewStylesheet; +}; + +class Styles +{ +public: + Styles(); + + Style style(const QString &name) const; + + QStringList markdownHighlightings() const; + QString pathForMarkdownHighlighting(const Style &style) const; + + QStringList codeHighlightings() const; + QString pathForCodeHighlighting(const Style &style) const; + + QStringList previewStylesheets() const; + QString pathForPreviewStylesheet(const Style &style) const; + +private: + void setupBuiltinMarkdownHighlightings(); + void setupBuiltinCodeHighlightings(); + void setupBuiltinPreviewStylesheets(); + void setupBuiltinStyles(); + + QMap m_markdownHighlightings; + QMap m_codeHighlightings; + QMap m_previewStylesheets; + QMap m_styles; +}; + +#endif // STYLES_H diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index df528bc0..2fe60f70 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -64,6 +64,7 @@ #include "optionsdialog.h" #include "revealviewsynchronizer.h" #include "snippetcompleter.h" +#include "styles.h" #include "tabletooldialog.h" MainWindow::MainWindow(const QString &fileName, QWidget *parent) : @@ -80,6 +81,7 @@ MainWindow::MainWindow(const QString &fileName, QWidget *parent) : generator(new HtmlPreviewGenerator(options, this)), snippetCollection(new SnippetCollection(this)), viewSynchronizer(0), + styles(new Styles()), splitFactor(0.5), rightViewCollapsed(false) { @@ -148,6 +150,9 @@ void MainWindow::initializeApp() // set default style styleDefault(); + qDebug() << styles->markdownHighlightings(); + qDebug() << styles->codeHighlightings(); + qDebug() << styles->previewStylesheets(); ui->plainTextEdit->tabWidthChanged(options->tabWidth()); @@ -490,70 +495,77 @@ void MainWindow::viewChangeSplit() void MainWindow::styleDefault() { - generator->setCodeHighlightingStyle("default"); + Style defaultStyle = styles->style("Default"); + generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting(defaultStyle)); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/default.txt"); - ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl("qrc:/css/markdown.css")); + ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting(defaultStyle)); + ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl(styles->pathForPreviewStylesheet(defaultStyle))); styleLabel->setText(ui->actionDefault->text()); } void MainWindow::styleGithub() { - generator->setCodeHighlightingStyle("github"); + Style githubStyle = styles->style("Github"); + generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting(githubStyle)); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/default.txt"); - ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl("qrc:/css/github.css")); + ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting(githubStyle)); + ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl(styles->pathForPreviewStylesheet(githubStyle))); styleLabel->setText(ui->actionGithub->text()); } void MainWindow::styleSolarizedLight() { - generator->setCodeHighlightingStyle("solarized_light"); + Style solarizedLightStyle = styles->style("Solarized Light"); + generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting(solarizedLightStyle)); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/solarized-light+.txt"); - ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl("qrc:/css/solarized-light.css")); + ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting(solarizedLightStyle)); + ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl(styles->pathForPreviewStylesheet(solarizedLightStyle))); styleLabel->setText(ui->actionSolarizedLight->text()); } void MainWindow::styleSolarizedDark() { - generator->setCodeHighlightingStyle("solarized_dark"); + Style solarizedDarkStyle = styles->style("Solarized Dark"); + generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting(solarizedDarkStyle)); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/solarized-dark+.txt"); - ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl("qrc:/css/solarized-dark.css")); + ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting(solarizedDarkStyle)); + ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl(styles->pathForPreviewStylesheet(solarizedDarkStyle))); styleLabel->setText(ui->actionSolarizedDark->text()); } void MainWindow::styleClearness() { - generator->setCodeHighlightingStyle("default"); + Style clearnessStyle = styles->style("Clearness"); + generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting(clearnessStyle)); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/default.txt"); - ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl("qrc:/css/clearness.css")); + ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting(clearnessStyle)); + ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl(styles->pathForPreviewStylesheet(clearnessStyle))); styleLabel->setText(ui->actionClearness->text()); } void MainWindow::styleClearnessDark() { - generator->setCodeHighlightingStyle("default"); + Style clearnessDarkStyle = styles->style("Clearness Dark"); + generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting(clearnessDarkStyle)); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/clearness-dark+.txt"); - ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl("qrc:/css/clearness-dark.css")); + ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting(clearnessDarkStyle)); + ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl(styles->pathForPreviewStylesheet(clearnessDarkStyle))); styleLabel->setText(ui->actionClearnessDark->text()); } void MainWindow::styleBywordDark() { - generator->setCodeHighlightingStyle("default"); + Style bywordDarkStyle = styles->style("Byword Dark"); + generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting(bywordDarkStyle)); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/byword-dark.txt"); - ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl("qrc:/css/byword-dark.css")); + ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting(bywordDarkStyle)); + ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl(styles->pathForPreviewStylesheet(bywordDarkStyle))); styleLabel->setText(ui->actionBywordDark->text()); } @@ -562,9 +574,9 @@ void MainWindow::styleCustomStyle() { QAction *action = qobject_cast(sender()); - generator->setCodeHighlightingStyle("default"); + //generator->setCodeHighlightingStyle(styles->pathForCodeHighlighting("Default")); - ui->plainTextEdit->loadStyleFromStylesheet(":/theme/default.txt"); + //ui->plainTextEdit->loadStyleFromStylesheet(styles->pathForMarkdownHighlighting("Default")); ui->webView->page()->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile(action->data().toString())); styleLabel->setText(action->text()); diff --git a/app/mainwindow.h b/app/mainwindow.h index adf04a14..cd2e15db 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -37,6 +37,7 @@ class RecentFilesMenu; class Options; class SlideLineMapping; class SnippetCollection; +class Styles; class ViewSynchronizer; @@ -167,6 +168,7 @@ private slots: HtmlHighlighter *htmlHighlighter; SnippetCollection *snippetCollection; ViewSynchronizer *viewSynchronizer; + Styles *styles; QString fileName; float splitFactor; bool rightViewCollapsed; From d8092778b4b228a2a12c89009f5e46d7bcc6a6b5 Mon Sep 17 00:00:00 2001 From: Christian Loose Date: Fri, 14 Nov 2014 21:55:36 +0100 Subject: [PATCH 02/34] Use new Styles class to setup actions for builtin styles --- app-static/styles.cpp | 48 +++++++---------- app-static/styles.h | 4 +- app/mainwindow.cpp | 123 ++++++++++++------------------------------ app/mainwindow.h | 9 +--- app/mainwindow.ui | 7 --- 5 files changed, 58 insertions(+), 133 deletions(-) diff --git a/app-static/styles.cpp b/app-static/styles.cpp index 96ec8d76..7044e5ac 100644 --- a/app-static/styles.cpp +++ b/app-static/styles.cpp @@ -16,6 +16,13 @@ */ #include "styles.h" +static const Style BUILTIN_DEFAULT_STYLE = { "Default", "Default", "Default" }; +static const Style BUILTIN_GITHUB_STYLE = { "Default", "Github", "Github" }; +static const Style BUILTIN_SOLARIZED_LIGHT_STYLE = { "Solarized Light", "Solarized Light", "Solarized Light" }; +static const Style BUILTIN_SOLARIZED_DARK_STYLE = { "Solarized Dark", "Solarized Dark", "Solarized Dark" }; +static const Style BUILTIN_CLEARNESS_STYLE = { "Default", "Default", "Clearness" }; +static const Style BUILTIN_CLEARNESS_DARK_STYLE = { "Clearness Dark", "Default", "Clearness Dark" }; +static const Style BUILTIN_BYWORD_DARK_STYLE = { "Byword Dark", "Default", "Byword Dark" }; Styles::Styles() { @@ -25,9 +32,14 @@ Styles::Styles() setupBuiltinStyles(); } +QStringList Styles::styleNames() const +{ + return QStringList(m_stylesIndex); +} + Style Styles::style(const QString &name) const { - return m_styles[name]; + return m_styles[m_stylesIndex.indexOf(name)]; } QStringList Styles::markdownHighlightings() const @@ -88,34 +100,14 @@ void Styles::setupBuiltinPreviewStylesheets() m_previewStylesheets.insert("Byword Dark", "qrc:/css/byword-dark.css"); } -#include void Styles::setupBuiltinStyles() { - Style defaultStyle = { "Default", "Default", "Default" }; - m_styles.insert("Default", defaultStyle); - - Style githubStyle = { "Default", "Github", "Github" }; - m_styles.insert("Github", githubStyle); - - Style solarizedLightStyle = { "Solarized Light", "Solarized Light", "Solarized Light" }; - m_styles.insert("Solarized Light", solarizedLightStyle); - - Style solarizedDarkStyle = { "Solarized Dark", "Solarized Dark", "Solarized Dark" }; - m_styles.insert("Solarized Dark", solarizedDarkStyle); - - Style clearnessStyle = { "Default", "Default", "Clearness" }; - m_styles.insert("Clearness", clearnessStyle); - - Style clearnessDarkStyle = { "Clearness Dark", "Default", "Clearness Dark" }; - m_styles.insert("Clearness Dark", clearnessDarkStyle); - - Style bywordDarkStyle = { "Byword Dark", "Default", "Byword Dark" }; - m_styles.insert("Byword Dark", bywordDarkStyle); - qDebug() << m_styles; + m_stylesIndex << "Default" << "Github" << "Solarized Light" + << "Solarized Dark" << "Clearness" << "Clearness Dark" + << "Byword Dark"; + m_styles << BUILTIN_DEFAULT_STYLE << BUILTIN_GITHUB_STYLE + << BUILTIN_SOLARIZED_LIGHT_STYLE << BUILTIN_SOLARIZED_DARK_STYLE + << BUILTIN_CLEARNESS_STYLE << BUILTIN_CLEARNESS_DARK_STYLE + << BUILTIN_BYWORD_DARK_STYLE; } -QDebug operator<<(QDebug dbg, const Style &s) -{ - dbg << s.markdownHighlighting << s.codeHighlighting << s.previewStylesheet; - return dbg.space(); -} diff --git a/app-static/styles.h b/app-static/styles.h index 387c3367..3492597d 100644 --- a/app-static/styles.h +++ b/app-static/styles.h @@ -33,6 +33,7 @@ class Styles public: Styles(); + QStringList styleNames() const; Style style(const QString &name) const; QStringList markdownHighlightings() const; @@ -53,7 +54,8 @@ class Styles QMap m_markdownHighlightings; QMap m_codeHighlightings; QMap m_previewStylesheets; - QMap m_styles; + QList m_stylesIndex; + QList