diff --git a/src/main.cpp b/src/main.cpp index e5390f42..8ef268bd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,8 @@ #include "vmainwindow.h" #include +#include #include +#include "utils/vutils.h" int main(int argc, char *argv[]) { @@ -13,5 +15,11 @@ int main(int argc, char *argv[]) VMainWindow w; w.show(); + QString style = VUtils::readFileFromDisk(":/resources/vnote.qss"); + if (!style.isEmpty()) { + VUtils::processStyle(style); + app.setStyleSheet(style); + } + return app.exec(); } diff --git a/src/resources/icons/create_rootdir_tb.svg b/src/resources/icons/create_rootdir_tb.svg index 610c0cf5..fa77fea2 100644 --- a/src/resources/icons/create_rootdir_tb.svg +++ b/src/resources/icons/create_rootdir_tb.svg @@ -2,13 +2,9 @@ - - - - - - + width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve"> + diff --git a/src/resources/vnote.qss b/src/resources/vnote.qss new file mode 100644 index 00000000..a2a860d0 --- /dev/null +++ b/src/resources/vnote.qss @@ -0,0 +1,37 @@ +QPushButton[OnMainWindow="true"] { + padding: 3px; + border: none; + background-color: transparent; +} + +QPushButton[OnMainWindow="true"]::menu-indicator { + image: none; +} + +QPushButton[OnMainWindow="true"]::hover { + background-color: @hover-color; +} + +QToolBar { + border: none; +} + +QToolButton::hover { + background-color: @hover-color; +} + +QMenuBar { + border: none; +} + +QMenuBar::item:selected { + background-color: @hover-color; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: none; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background-color: @hover-color; +} diff --git a/src/utils/vutils.cpp b/src/utils/vutils.cpp index 3f9f3817..1a4b0360 100644 --- a/src/utils/vutils.cpp +++ b/src/utils/vutils.cpp @@ -76,3 +76,18 @@ QString VUtils::generateImageFileName(const QString &path, const QString &title, } return imageName; } + +void VUtils::processStyle(QString &style) +{ + QVector > varMap; + + // Initialize varMap + addQssVarToMap(varMap, "base-color", "#4CAF50"); + addQssVarToMap(varMap, "hover-color", "#42A5F5"); + + // Process style + for (int i = 0; i < varMap.size(); ++i) { + const QPair &map = varMap[i]; + style.replace("@" + map.first, map.second); + } +} diff --git a/src/utils/vutils.h b/src/utils/vutils.h index 43f99618..59110517 100644 --- a/src/utils/vutils.h +++ b/src/utils/vutils.h @@ -3,6 +3,8 @@ #include #include +#include +#include #include "vconfigmanager.h" class VUtils @@ -16,6 +18,16 @@ public: static QRgb QRgbFromString(const QString &str); static QString generateImageFileName(const QString &path, const QString &title, const QString &format = "png"); + static void processStyle(QString &style); +private: + static inline void addQssVarToMap(QVector > &map, + const QString &key, const QString &value); }; +inline void VUtils::addQssVarToMap(QVector > &map, + const QString &key, const QString &value) +{ + map.append(QPair(key, value)); +} + #endif // VUTILS_H diff --git a/src/veditarea.cpp b/src/veditarea.cpp index 44e43dd2..a2c3739c 100644 --- a/src/veditarea.cpp +++ b/src/veditarea.cpp @@ -21,6 +21,7 @@ void VEditArea::setupUI() QHBoxLayout *mainLayout = new QHBoxLayout(); mainLayout->addWidget(splitter); + mainLayout->setContentsMargins(0, 0, 0, 0); setLayout(mainLayout); } diff --git a/src/vedittab.cpp b/src/vedittab.cpp index 0ad88bed..3857d45b 100644 --- a/src/vedittab.cpp +++ b/src/vedittab.cpp @@ -258,17 +258,19 @@ void VEditTab::updateTocFromHtml(const QString &tocHtml) QVector &headers = tableOfContent.headers; headers.clear(); - QXmlStreamReader xml(tocHtml); - if (xml.readNextStartElement()) { - if (xml.name() == "ul") { - parseTocUl(xml, headers, 1); - } else { - qWarning() << "error: TOC HTML does not start with
    "; + if (!tocHtml.isEmpty()) { + QXmlStreamReader xml(tocHtml); + if (xml.readNextStartElement()) { + if (xml.name() == "ul") { + parseTocUl(xml, headers, 1); + } else { + qWarning() << "error: TOC HTML does not start with
      "; + } + } + if (xml.hasError()) { + qWarning() << "error: fail to parse TOC in HTML"; + return; } - } - if (xml.hasError()) { - qWarning() << "error: fail to parse TOC in HTML"; - return; } tableOfContent.filePath = QDir::cleanPath(QDir(noteFile->basePath).filePath(noteFile->fileName)); diff --git a/src/veditwindow.cpp b/src/veditwindow.cpp index c91a8d36..c37c6194 100644 --- a/src/veditwindow.cpp +++ b/src/veditwindow.cpp @@ -42,6 +42,7 @@ void VEditWindow::setupCornerWidget() rightBtn = new QPushButton(QIcon(":/resources/icons/corner_menu.svg"), "", this); + rightBtn->setProperty("OnMainWindow", true); QMenu *rightMenu = new QMenu(this); rightMenu->addAction(splitAct); rightMenu->addAction(removeSplitAct); @@ -54,6 +55,7 @@ void VEditWindow::setupCornerWidget() this, &VEditWindow::tabListJump); leftBtn = new QPushButton(QIcon(":/resources/icons/corner_tablist.svg"), "", this); + leftBtn->setProperty("OnMainWindow", true); QMenu *leftMenu = new QMenu(this); leftBtn->setMenu(leftMenu); setCornerWidget(leftBtn, Qt::TopLeftCorner); diff --git a/src/vfilelist.cpp b/src/vfilelist.cpp index da547e3a..c4961c15 100644 --- a/src/vfilelist.cpp +++ b/src/vfilelist.cpp @@ -20,6 +20,7 @@ void VFileList::setupUI() QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(fileList); + mainLayout->setContentsMargins(0, 0, 0, 0); connect(fileList, &QListWidget::customContextMenuRequested, this, &VFileList::contextMenuRequested); diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp index b73b3f22..82b31d27 100644 --- a/src/vmainwindow.cpp +++ b/src/vmainwindow.cpp @@ -42,10 +42,13 @@ void VMainWindow::setupUI() newNotebookBtn = new QPushButton(QIcon(":/resources/icons/create_notebook.svg"), ""); newNotebookBtn->setToolTip(tr("Create a new notebook")); + newNotebookBtn->setProperty("OnMainWindow", true); deleteNotebookBtn = new QPushButton(QIcon(":/resources/icons/delete_notebook.svg"), ""); deleteNotebookBtn->setToolTip(tr("Delete current notebook")); + deleteNotebookBtn->setProperty("OnMainWindow", true); notebookInfoBtn = new QPushButton(QIcon(":/resources/icons/notebook_info.svg"), ""); notebookInfoBtn->setToolTip(tr("View and edit current notebook's information")); + notebookInfoBtn->setProperty("OnMainWindow", true); notebookComboBox = new QComboBox(); notebookComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); @@ -57,14 +60,13 @@ void VMainWindow::setupUI() nbBtnLayout->addWidget(newNotebookBtn); nbBtnLayout->addWidget(deleteNotebookBtn); nbBtnLayout->addWidget(notebookInfoBtn); - QHBoxLayout *dirBtnLayout = new QHBoxLayout; - dirBtnLayout->addWidget(directoryLabel); - dirBtnLayout->addStretch(); + nbBtnLayout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *nbLayout = new QVBoxLayout; nbLayout->addLayout(nbBtnLayout); nbLayout->addWidget(notebookComboBox); - nbLayout->addLayout(dirBtnLayout); + nbLayout->addWidget(directoryLabel); nbLayout->addWidget(directoryTree); + nbLayout->setContentsMargins(5, 0, 0, 0); QWidget *nbContainer = new QWidget(); nbContainer->setLayout(nbLayout); nbContainer->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding); diff --git a/src/vnote.qrc b/src/vnote.qrc index a337cd4b..c7c01cfe 100644 --- a/src/vnote.qrc +++ b/src/vnote.qrc @@ -61,5 +61,6 @@ resources/icons/create_rootdir_tb.svg resources/icons/vnote.svg resources/icons/vnote.ico + resources/vnote.qss