Browse Source

add v_pure theme

Le Tan 8 years ago
parent
commit
1410c16280
44 changed files with 1747 additions and 34 deletions
  1. 1 1
      src/dialog/vconfirmdeletiondialog.cpp
  2. 1 0
      src/dialog/vdirinfodialog.cpp
  3. 2 0
      src/dialog/veditsnippetdialog.cpp
  4. 1 0
      src/dialog/vfileinfodialog.cpp
  5. 1 0
      src/dialog/vinsertimagedialog.cpp
  6. 1 0
      src/dialog/vinsertlinkdialog.cpp
  7. 1 0
      src/dialog/vnewdirdialog.cpp
  8. 1 0
      src/dialog/vnewfiledialog.cpp
  9. 1 0
      src/dialog/vnewnotebookdialog.cpp
  10. 1 0
      src/dialog/vnotebookinfodialog.cpp
  11. 1 0
      src/dialog/vorphanfileinfodialog.cpp
  12. 2 0
      src/dialog/vsettingsdialog.cpp
  13. 1 0
      src/dialog/vsortdialog.cpp
  14. 1 0
      src/dialog/vupdater.cpp
  15. 9 0
      src/resources/themes/v_pure/arrow_dropdown.svg
  16. 8 0
      src/resources/themes/v_pure/branch_closed.svg
  17. 7 0
      src/resources/themes/v_pure/branch_end.svg
  18. 7 0
      src/resources/themes/v_pure/branch_more.svg
  19. 8 0
      src/resources/themes/v_pure/branch_open.svg
  20. 7 0
      src/resources/themes/v_pure/checkbox_checked.svg
  21. 6 0
      src/resources/themes/v_pure/checkbox_unchecked.svg
  22. 10 0
      src/resources/themes/v_pure/close.svg
  23. 10 0
      src/resources/themes/v_pure/close_grey.svg
  24. 8 0
      src/resources/themes/v_pure/down.svg
  25. 8 0
      src/resources/themes/v_pure/down_disabled.svg
  26. 12 0
      src/resources/themes/v_pure/float.svg
  27. 8 0
      src/resources/themes/v_pure/left.svg
  28. 8 0
      src/resources/themes/v_pure/left_disabled.svg
  29. 6 0
      src/resources/themes/v_pure/line.svg
  30. 7 0
      src/resources/themes/v_pure/radiobutton_checked.svg
  31. 6 0
      src/resources/themes/v_pure/radiobutton_unchecked.svg
  32. 8 0
      src/resources/themes/v_pure/right.svg
  33. 8 0
      src/resources/themes/v_pure/right_disabled.svg
  34. 8 0
      src/resources/themes/v_pure/up.svg
  35. 8 0
      src/resources/themes/v_pure/up_disabled.svg
  36. 298 0
      src/resources/themes/v_pure/v_pure.palette
  37. 1102 0
      src/resources/themes/v_pure/v_pure.qss
  38. 14 0
      src/resources/themes/v_white/v_white.palette
  39. 115 24
      src/resources/themes/v_white/v_white.qss
  40. 10 3
      src/utils/vutils.cpp
  41. 1 3
      src/vconfigmanager.cpp
  42. 0 3
      src/vconfigmanager.h
  43. 1 0
      src/vexporter.cpp
  44. 23 0
      src/vnote.qrc

+ 1 - 1
src/dialog/vconfirmdeletiondialog.cpp

@@ -122,7 +122,7 @@ void VConfirmDeletionDialog::setupUI(const QString &p_title,
     m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
     connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
-    m_btnBox->button(QDialogButtonBox::Ok)->setStyleSheet(g_config->c_dangerBtnStyle);
+    m_btnBox->button(QDialogButtonBox::Ok)->setProperty("DangerBtn", true);
 
     QHBoxLayout *midLayout = new QHBoxLayout;
     midLayout->addWidget(m_listWidget);

+ 1 - 0
src/dialog/vdirinfodialog.cpp

@@ -53,6 +53,7 @@ void VDirInfoDialog::setupUI()
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_nameEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QVBoxLayout *mainLayout = new QVBoxLayout();

+ 2 - 0
src/dialog/veditsnippetdialog.cpp

@@ -79,6 +79,7 @@ void VEditSnippetDialog::setupUI(const QString &p_title, const QString &p_info)
 
     // Content.
     m_contentEdit = new QTextEdit();
+    m_contentEdit->setProperty("LineEdit", true);
     setContentEditByType();
 
     QFormLayout *topLayout = new QFormLayout();
@@ -100,6 +101,7 @@ void VEditSnippetDialog::setupUI(const QString &p_title, const QString &p_info)
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_nameEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QVBoxLayout *mainLayout = new QVBoxLayout();

+ 1 - 0
src/dialog/vfileinfodialog.cpp

@@ -75,6 +75,7 @@ void VFileInfoDialog::setupUI(const QString &p_title, const QString &p_info)
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_nameEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QVBoxLayout *mainLayout = new QVBoxLayout();

+ 1 - 0
src/dialog/vinsertimagedialog.cpp

@@ -59,6 +59,7 @@ void VInsertImageDialog::setupUI()
     m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
     connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+    m_btnBox->button(QDialogButtonBox::Ok)->setProperty("SpecialBtn", true);
 
     imagePreviewLabel = new QLabel();
     imagePreviewLabel->setVisible(false);

+ 1 - 0
src/dialog/vinsertlinkdialog.cpp

@@ -53,6 +53,7 @@ void VInsertLinkDialog::setupUI(const QString &p_title,
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_linkTextEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QVBoxLayout *mainLayout = new QVBoxLayout;

+ 1 - 0
src/dialog/vnewdirdialog.cpp

@@ -46,6 +46,7 @@ void VNewDirDialog::setupUI()
     m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
     connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+    m_btnBox->button(QDialogButtonBox::Ok)->setProperty("SpecialBtn", true);
 
     QHBoxLayout *topLayout = new QHBoxLayout();
     topLayout->addWidget(nameLabel);

+ 1 - 0
src/dialog/vnewfiledialog.cpp

@@ -111,6 +111,7 @@ void VNewFileDialog::setupUI(const QString &p_title,
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_templateCB->setMaximumWidth(okBtn->sizeHint().width() * 4);
 
     QVBoxLayout *mainLayout = new QVBoxLayout();

+ 1 - 0
src/dialog/vnewnotebookdialog.cpp

@@ -90,6 +90,7 @@ void VNewNotebookDialog::setupUI(const QString &p_title, const QString &p_info)
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     pathEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QVBoxLayout *mainLayout = new QVBoxLayout(this);

+ 1 - 0
src/dialog/vnotebookinfodialog.cpp

@@ -84,6 +84,7 @@ void VNotebookInfoDialog::setupUI(const QString &p_title, const QString &p_info)
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_pathEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QVBoxLayout *mainLayout = new QVBoxLayout();

+ 1 - 0
src/dialog/vorphanfileinfodialog.cpp

@@ -41,6 +41,7 @@ void VOrphanFileInfoDialog::setupUI()
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_imageFolderEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QVBoxLayout *mainLayout = new QVBoxLayout();

+ 2 - 0
src/dialog/vsettingsdialog.cpp

@@ -18,6 +18,7 @@ VSettingsDialog::VSettingsDialog(QWidget *p_parent)
     m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
     connect(m_btnBox, &QDialogButtonBox::accepted, this, &VSettingsDialog::saveConfiguration);
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+    m_btnBox->button(QDialogButtonBox::Ok)->setProperty("SpecialBtn", true);
 
     QHBoxLayout *tabLayout = new QHBoxLayout();
     tabLayout->addWidget(m_tabList);
@@ -208,6 +209,7 @@ QLayout *VGeneralTab::setupStartupPagesLayout()
             });
 
     m_startupPagesEdit = new QPlainTextEdit(this);
+    m_startupPagesEdit->setProperty("LineEdit", true);
     m_startupPagesEdit->setToolTip(tr("Absolute path of the notes to open on startup (one note per line)"));
 
     m_startupPagesAddBtn = new QPushButton(tr("Browse"), this);

+ 1 - 0
src/dialog/vsortdialog.cpp

@@ -112,6 +112,7 @@ void VSortDialog::setupUI(const QString &p_title, const QString &p_info)
     m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
     connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
     connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+    m_btnBox->button(QDialogButtonBox::Ok)->setProperty("SpecialBtn", true);
 
     QVBoxLayout *mainLayout = new QVBoxLayout;
     if (infoLabel) {

+ 1 - 0
src/dialog/vupdater.cpp

@@ -34,6 +34,7 @@ void VUpdater::setupUI()
     m_descriptionTb = new QTextBrowser();
 
     m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok);
+    m_btnBox->button(QDialogButtonBox::Ok)->setProperty("SpecialBtn", true);
     connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
 
     QVBoxLayout *verLayout = new QVBoxLayout();

+ 9 - 0
src/resources/themes/v_pure/arrow_dropdown.svg

@@ -0,0 +1,9 @@
+<?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" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	<polygon points="128,192 256,320 384,192 	"/>
+</g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/branch_closed.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="rotate(-90 256.00000000000006,256) " id="svg_1">
+   <polygon fill="#333333" id="svg_2" points="128,192 256,320 384,192  "/>
+  </g>
+ </g>
+</svg>

+ 7 - 0
src/resources/themes/v_pure/branch_end.svg

@@ -0,0 +1,7 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 2</title>
+  <rect stroke="null" fill="#E0E0E0" stroke-width="null" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" x="225.3" y="0.100029" width="51" height="281.537138" id="svg_3"/>
+  <rect fill="#E0E0E0" stroke-width="null" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" x="346.499997" y="116.499998" width="51" height="278.999996" id="svg_6" transform="rotate(90 372,256.00000000000006) " stroke="null"/>
+ </g>
+</svg>

+ 7 - 0
src/resources/themes/v_pure/branch_more.svg

@@ -0,0 +1,7 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 2</title>
+  <rect stroke="null" fill="#E0E0E0" stroke-width="null" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" x="225.3" y="0.100029" width="51" height="511.910139" id="svg_3"/>
+  <rect fill="#E0E0E0" stroke-width="null" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" x="346.499997" y="116.499998" width="51" height="278.999996" id="svg_6" transform="rotate(90 372,256.00000000000006) " stroke="null"/>
+ </g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/branch_open.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g id="svg_1">
+   <polygon fill="#333333" id="svg_2" points="128,192 256,320 384,192  "/>
+  </g>
+ </g>
+</svg>

+ 7 - 0
src/resources/themes/v_pure/checkbox_checked.svg

@@ -0,0 +1,7 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <rect fill="#000000" stroke="#333333" stroke-width="30" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" x="106" y="141.5" width="299" height="299" fill-opacity="0" id="svg_6"/>
+  <path stroke="#000000" fill="#333333" stroke-width="5" d="m125.49193,290.33243l27.93756,-27.94743l76.53449,76.52461l127.58052,-127.54102l27.94743,27.92768l-155.52795,155.50821" id="svg_3" stroke-opacity="0"/>
+ </g>
+</svg>

+ 6 - 0
src/resources/themes/v_pure/checkbox_unchecked.svg

@@ -0,0 +1,6 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <rect id="svg_6" fill-opacity="0" height="299" width="299" y="141.5" x="106" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="30" stroke="#333333" fill="#000000"/>
+ </g>
+</svg>

+ 10 - 0
src/resources/themes/v_pure/close.svg

@@ -0,0 +1,10 @@
+<?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 d="M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4
+	L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1
+	c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1
+	c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z"/>
+</svg>

+ 10 - 0
src/resources/themes/v_pure/close_grey.svg

@@ -0,0 +1,10 @@
+<?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:#9E9E9E" d="M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4
+	L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1
+	c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1
+	c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z"/>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/down.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="null" id="svg_1">
+   <polygon points="128,192 256,320 384,192  " id="svg_2" fill="#333333"/>
+  </g>
+ </g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/down_disabled.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="null" id="svg_1">
+   <polygon points="128,192 256,320 384,192  " id="svg_2" fill="#C0C0C0"/>
+  </g>
+ </g>
+</svg>

+ 12 - 0
src/resources/themes/v_pure/float.svg

@@ -0,0 +1,12 @@
+<?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">
+<g>
+	<path d="M64,144v304h303.9V144H64z M351.9,432H80V160h271.9V432z"/>
+	<g>
+		<polygon points="448,64 144,64 144,128 160,128 160,80 432,80 432,352 384,352 384,368 448,368 		"/>
+	</g>
+</g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/left.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="rotate(90 255.99999999999997,256.00000000000006) " id="svg_1">
+   <polygon points="128,192 256,320 384,192  " id="svg_2" fill="#333333"/>
+  </g>
+ </g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/left_disabled.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="rotate(90 255.99999999999997,256.00000000000006) " id="svg_1">
+   <polygon points="128,192 256,320 384,192  " id="svg_2" fill="#C0C0C0"/>
+  </g>
+ </g>
+</svg>

+ 6 - 0
src/resources/themes/v_pure/line.svg

@@ -0,0 +1,6 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 2</title>
+  <rect stroke="null" id="svg_3" height="510.999989" width="51" y="0.100029" x="225.3" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="null" fill="#E0E0E0"/>
+ </g>
+</svg>

+ 7 - 0
src/resources/themes/v_pure/radiobutton_checked.svg

@@ -0,0 +1,7 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <circle stroke="#333333" id="svg_9" r="142.96561" cy="291.50001" cx="255.49999" fill-opacity="0" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="30" fill="#000000"/>
+  <circle id="svg_11" r="83.2406" cy="290" cx="255" stroke-opacity="0" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="20" stroke="#000000" fill="#333333"/>
+ </g>
+</svg>

+ 6 - 0
src/resources/themes/v_pure/radiobutton_unchecked.svg

@@ -0,0 +1,6 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <circle stroke="#333333" id="svg_9" r="142.96561" cy="291.50001" cx="255.49999" fill-opacity="0" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="30" fill="#000000"/>
+ </g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/right.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="rotate(-90 256.00000000000006,256) " id="svg_1">
+   <polygon fill="#333333" id="svg_2" points="128,192 256,320 384,192  "/>
+  </g>
+ </g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/right_disabled.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="rotate(-90 256.00000000000006,256) " id="svg_1">
+   <polygon fill="#C0C0C0" id="svg_2" points="128,192 256,320 384,192  "/>
+  </g>
+ </g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/up.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="rotate(180 255.99999999999997,256) " id="svg_1">
+   <polygon points="128,192 256,320 384,192  " id="svg_2" fill="#333333"/>
+  </g>
+ </g>
+</svg>

+ 8 - 0
src/resources/themes/v_pure/up_disabled.svg

@@ -0,0 +1,8 @@
+<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g>
+  <title>Layer 1</title>
+  <g transform="rotate(180 255.99999999999997,256) " id="svg_1">
+   <polygon points="128,192 256,320 384,192  " id="svg_2" fill="#C0C0C0"/>
+  </g>
+ </g>
+</svg>

+ 298 - 0
src/resources/themes/v_pure/v_pure.palette

@@ -0,0 +1,298 @@
+; File path could be absolute path or relative path (related to this file).
+; Use @color_tag to reference a style.
+
+[metadata]
+qss_file=v_pure.qss
+
+[phony]
+; Abstract color attributes.
+master_fg=#F5F5F5
+master_bg=#556DE8
+
+base_fg=#222222
+base_bg=#EAEAEA
+
+main_fg=@base_fg
+main_bg=#base_bg
+
+title_fg=@base_fg
+title_bg=@base_bg
+
+disabled_fg=#9E9E9E
+
+content_fg=@base_fg
+content_bg=@base_bg
+
+border_bg=#D3D3D3
+
+separator_bg=#D3D3D3
+
+hover_fg=@base_fg
+hover_bg=#D0D0D0
+
+selected_fg=@base_fg
+selected_bg=#BDBDBD
+
+active_fg=@selected_fg
+active_bg=@selected_bg
+
+inactive_fg=@selected_fg
+inactive_bg=#D3D3D3
+
+focus_fg=@selected_fg
+focus_bg=@selected_bg
+
+pressed_fg=@base_fg
+pressed_bg=#B2B2B2
+
+edit_fg=#222222
+edit_bg=#F5F5F5
+edit_focus_bg=#E8EAF6
+edit_focus_border=@master_bg
+edit_selection_fg=@edit_fg
+edit_selection_bg=#CBD2F9
+
+danger_red=#C9302C
+icon_fg=#222222
+
+[soft_defined]
+; VAvatar.
+avatar_border_bg=@selected_bg
+avatar_fg=@base_bg
+avatar_bg=@base_fg
+; The border background color of the avatar when Captain mode is triggered.
+avatar_captain_mode_border_bg=@master_bg
+
+; Style of the label in Navigation mode.
+navigation_label_fg=@master_fg
+navigation_label_bg=@master_bg
+
+; Style of the bubble of VButtonWithWidget.
+bubble_fg=@master_fg
+bubble_bg=@master_bg
+
+; Icons' foreground.
+danger_icon_fg=@danger_red
+item_icon_fg=@icon_fg
+title_icon_fg=@icon_fg
+
+; VVimIndicator.
+vim_indicator_key_label_fg=@base_fg
+vim_indicator_mode_label_fg=@base_fg
+vim_indicator_cmd_edit_pending_bg=@selected_bg
+
+; VTabIndicator.
+tab_indicator_label_fg=@base_fg
+
+[widgets]
+; Widget color attributes.
+
+; QWidget.
+widget_fg=@base_fg
+
+; Separator of dock widgets.
+dock_separator_bg=@border_bg
+dock_separator_hover_bg=@border_bg
+
+; Menubar.
+menubar_bg=@main_bg
+menubar_fg=@main_fg
+menubar_item_selected_bg=@selected_bg
+
+; Menu.
+menu_bg=@base_bg
+menu_fg=@base_fg
+menu_item_disabled_fg=@disabled_fg
+menu_item_selected_fg=@selected_fg
+menu_item_selected_bg=@selected_bg
+menu_separator_bg=@separator_bg
+menu_icon_fg=@icon_fg
+menu_icon_danger_fg=@danger_icon_fg
+
+; Tooltip.
+tooltip_bg=@master_bg
+tooltip_fg=@master_fg
+
+; Toolbar.
+toolbar_bg=@main_bg
+toolbutton_hover_bg=@hover_bg
+toolbutton_pressed_bg=@pressed_bg
+toolbutton_checked_bg=@selected_bg
+toolbutton_icon_fg=@icon_fg
+toolbutton_icon_danger_fg=@danger_icon_fg
+
+; Toolbox.
+toolbox_icon_fg=@icon_fg
+
+; Dockwidget.
+dockwidget_title_fg=@title_fg
+dockwidget_title_bg=@title_bg
+dockwidget_button_hover_bg=@hover_bg
+
+; PushButton.
+pushbutton_fg=@base_fg
+pushbutton_bg=transparent
+pushbutton_border=@border_bg
+pushbutton_pressed_bg=@pressed_bg
+pushbutton_checked_bg=@selected_bg
+pushbutton_hover_bg=@hover_bg
+pushbutton_default_border=@master_bg
+
+pushbutton_specialbtn_fg=@master_fg
+pushbutton_specialbtn_bg=@master_bg
+pushbutton_specialbtn_hover_bg=#3F51B5
+pushbutton_specialbtn_checked_bg=#3949AB
+pushbutton_specialbtn_pressed_bg=#303F9F
+
+pushbutton_cornerbtn_hover_bg=@hover_bg
+pushbutton_cornerbtn_focus_bg=@focus_bg
+pushbutton_cornerbtn_pressed_bg=@pressed_bg
+
+pushbutton_statusbtn_hover_bg=@hover_bg
+pushbutton_statusbtn_focus_bg=@focus_bg
+pushbutton_statusbtn_pressed_bg=@pressed_bg
+
+pushbutton_flatbtn_hover_bg=@hover_bg
+pushbutton_flatbtn_focus_bg=@focus_bg
+pushbutton_flatbtn_pressed_bg=@pressed_bg
+
+pushbutton_selectionbtn_hover_bg=@hover_bg
+pushbutton_selectionbtn_focus_bg=@focus_bg
+pushbutton_selectionbtn_pressed_bg=@pressed_bg
+
+pushbutton_titlebtn_bg=@title_bg
+pushbutton_titlebtn_hover_bg=@hover_bg
+pushbutton_titlebtn_focus_bg=@focus_bg
+pushbutton_titlebtn_pressed_bg=@pressed_bg
+
+pushbutton_dangerbtn_fg=#FFF
+pushbutton_dangerbtn_border=#D43F3A
+pushbutton_dangerbtn_bg=#D9534F
+pushbutton_dangerbtn_hover_fg=#FFF
+pushbutton_dangerbtn_hover_bg=#C9302C
+pushbutton_dangerbtn_hover_border=#AC2925
+
+button_icon_fg=@icon_fg
+button_icon_danger_fg=@danger_icon_fg
+
+; ComboBox.
+combobox_border=@border_bg
+combobox_fg=@content_fg
+combobox_bg=@content_bg
+combobox_view_border=@border_bg
+combobox_view_selected_bg=@selected_bg
+combobox_view_selected_fg=@selected_fg
+combobox_view_item_hover_fg=@hover_fg
+combobox_view_item_hover_bg=@hover_bg
+combobox_focus_bg=@edit_focus_bg
+combobox_focus_border=@edit_focus_border
+combobox_item_icon_fg=@item_icon_fg
+
+; Label.
+label_fg=@base_fg
+label_titlelabel_fg=@title_fg
+label_titlelabel_bg=@title_bg
+
+; LineEdit.
+lineedit_border=@border_bg
+lineedit_fg=@edit_fg
+lineedit_bg=@edit_bg
+lineedit_focus_bg=@edit_focus_bg
+lineedit_focus_border=@edit_focus_border
+lineedit_selection_fg=@edit_selection_fg
+lineedit_selection_bg=@edit_selection_bg
+
+; TabWidget.
+tabwidget_pane_border=@selected_bg
+
+; TabBar.
+tabbar_fg=@base_fg
+tabbar_bg=@base_bg
+tabbar_border=@border_bg
+
+tabbar_selected_fg=@edit_fg
+tabbar_selected_bg=@edit_bg
+tabbar_selected_border=@border_bg
+
+tabbar_hover_fg=@hover_fg
+tabbar_hover_bg=@hover_bg
+
+tabbar_icon_fg=@icon_fg
+tabbar_icon_special_fg=@danger_red
+
+; SelectorItem.
+selectoritem_border=@base_fg
+selectoritem_fg=@base_fg
+selectoritem_bg=@base_bg
+
+; InsertSelector.
+insertselector_bg=@base_bg
+
+; TreeView.
+treeview_fg=@content_fg
+treeview_bg=@content_bg
+treeview_item_hover_fg=@hover_fg
+treeview_item_hover_bg=@hover_bg
+treeview_item_selected_fg=@selected_fg
+treeview_item_selected_bg=@selected_bg
+treeview_item_selected_avtive_fg=@active_fg
+treeview_item_selected_avtive_bg=@active_bg
+treeview_item_selected_inactive_fg=@inactive_fg
+treeview_item_selected_inactive_bg=@inactive_bg
+treeview_item_icon_fg=@item_icon_fg
+
+; ListView.
+listview_fg=@content_fg
+listview_bg=@content_bg
+listview_item_hover_fg=@hover_fg
+listview_item_hover_bg=@hover_bg
+listview_item_selected_fg=@selected_fg
+listview_item_selected_bg=@selected_bg
+listview_item_selected_avtive_fg=@active_fg
+listview_item_selected_avtive_bg=@active_bg
+listview_item_selected_inactive_fg=@inactive_fg
+listview_item_selected_inactive_bg=@inactive_bg
+
+; Splitter.
+splitter_handle_bg=@border_bg
+
+; StatusBar.
+statusbar_fg=@main_fg
+statusbar_bg=@main_bg
+
+; ScrollBar.
+scrollbar_bg=@base_bg
+scrollbar_page_bg=transparent
+scrollbar_handle_bg=#DADADA
+scrollbar_handle_hover_bg=@hover_bg
+scrollbar_handle_pressed_bg=@pressed_bg
+
+; VEditWindow.
+editwindow_corner_icon_fg=@master_bg
+editwindow_corner_icon_inactive_fg=#D3D3D3
+
+; CheckBox.
+checkbox_indicator_hover_bg=@hover_bg
+checkbox_indicator_pressed_bg=@pressed_bg
+
+; RadioButton.
+radiobutton_indicator_hover_bg=@hover_bg
+radiobutton_indicator_pressed_bg=@pressed_bg
+
+; SpinBox.
+spinbox_fg=@edit_fg
+spinbox_bg=@edit_bg
+spinbox_border=@border_bg
+spinbox_selection_fg=@edit_selection_fg
+spinbox_selection_bg=@edit_selection_bg
+spinbox_focus_border=@edit_focus_border
+spinbox_focus_bg=@edit_focus_bg
+spinbox_button_hover_bg=@hover_bg
+spinbox_button_pressed_bg=@pressed_bg
+
+; HeaderView.
+headerview_bg=#E0E0E0
+headerview_fg=@base_fg
+headerview_border=@border_bg
+headerview_checked_fg=@selected_fg
+headerview_checked_bg=@selected_bg

+ 1102 - 0
src/resources/themes/v_pure/v_pure.qss

@@ -0,0 +1,1102 @@
+QToolTip
+{
+    border: none;
+    background: @tooltip_bg;
+    color: @tooltip_fg;
+}
+
+/* QWidget */
+QWidget
+{
+    color: @widget_fg;
+}
+
+QWidget[NotebookPanel="true"] {
+    padding-left: 3px;
+}
+
+/* End QWidget */
+
+/* QMainWindow */
+QMainWindow {
+    color: @base_fg;
+    background: @base_bg;
+}
+
+QMainWindow::separator {
+    background: @dock_separator_bg;
+    width: 2px;
+    height: 2px;
+}
+
+QMainWindow::separator:hover {
+    background: @dock_separator_hover_bg;
+}
+/* End QMainWindow */
+
+QMenuBar {
+    border: none;
+    background: @menubar_bg;
+    color: @menubar_fg;
+}
+
+QMenuBar::item:selected {
+    background: @menubar_item_selected_bg;
+}
+
+/* QMenu */
+QMenu {
+    background: @menu_bg;
+    color: @menu_fg;
+    margin: 2px;
+}
+
+QMenu::icon {
+    margin: 5px;
+}
+
+QMenu::item {
+    padding: 5px 30px 5px 30px;
+    border: 1px solid transparent;
+}
+
+QMenu::item:disabled {
+    color: @menu_item_disabled_fg;
+}
+
+QMenu::item:selected {
+    color: @menu_item_selected_fg;
+    background: @menu_item_selected_bg;
+}
+
+QMenu::icon:checked { /* appearance of a 'checked' icon */
+    border: 2px solid @menu_fg;
+}
+
+QMenu::separator {
+    height: 2px;
+    background: @menu_separator_bg;
+    margin-left: 10px;
+    margin-right: 5px;
+}
+
+QMenu::indicator {
+    width: 20px;
+    height: 20px;
+}
+/* End QMenu */
+
+QToolBar {
+    border: none;
+    background: @toolbar_bg;
+}
+
+/* QToolButton */
+QToolButton {
+    border: none;
+    background: transparent;
+    margin: 1px 3px 1px 3px;
+    padding: 0px;
+}
+
+QToolButton[popupMode="1"] { /* only for MenuButtonPopup */
+    padding-right: 16px; /* make way for the popup button */
+}
+
+QToolButton[popupMode="2"] { /* only for InstantPopup */
+    padding-right: 10px; /* make way for the popup button */
+}
+
+QToolButton:hover {
+    border:none;
+    background: @toolbutton_hover_bg;
+}
+
+QToolButton:pressed {
+    background: @toolbutton_pressed_bg;
+}
+
+QToolButton:checked {
+    background: @toolbutton_checked_bg;
+}
+
+QToolButton:checked:hover {
+    background: @toolbutton_hover_bg;
+}
+
+/* the subcontrols below are used only in the MenuButtonPopup mode */
+QToolButton::menu-button {
+    border: none;
+    width: 16px;
+}
+
+QToolButton::menu-arrow {
+    image: url(arrow_dropdown.svg);
+    width: 16px;
+    height: 16px;
+}
+/* End QToolButton*/
+
+/* DockWidget */
+QDockWidget {
+    color: @dockwidget_title_fg;
+    titlebar-close-icon: url(close.svg);
+    titlebar-normal-icon: url(float.svg);
+}
+
+QDockWidget::Title {
+    background: @dockwidget_title_bg;
+    text-align: center left;
+}
+
+QDockWidget::close-button, QDockWidget::float-button {
+    border: none;
+}
+
+QDockWidget::close-button:hover, QDockWidget::float-button:hover {
+    background: @dockwidget_button_hover_bg;
+}
+/* End DockWidget */
+
+/* QPushButton */
+QPushButton {
+    color: @pushbutton_fg;
+    background: @pushbutton_bg;
+    border: 1px solid @pushbutton_border;
+    padding: 3px;
+    min-width: 80px;
+}
+
+QPushButton:pressed {
+    background-color: @pushbutton_pressed_bg;
+}
+
+QPushButton:checked {
+    background-color: @pushbutton_checked_bg;
+}
+
+QPushButton:checked:hover {
+    background-color: @pushbutton_hover_bg;
+}
+
+QPushButton:hover {
+    background-color: @pushbutton_hover_bg;
+}
+
+QPushButton:flat {
+    border: none;
+}
+
+QPushButton:default {
+    border-color: @pushbutton_default_border;
+}
+
+QPushButton::menu-indicator {
+    image: url(arrow_dropdown.svg);
+    width: 16px;
+    height: 16px;
+}
+
+QPushButton[SpecialBtn="true"] {
+    color: @pushbutton_specialbtn_fg;
+    background: @pushbutton_specialbtn_bg;
+}
+
+QPushButton[SpecialBtn="true"]:pressed {
+    background-color: @pushbutton_specialbtn_pressed_bg;
+}
+
+QPushButton[SpecialBtn="true"]:checked {
+    background-color: @pushbutton_specialbtn_checked_bg;
+}
+
+QPushButton[SpecialBtn="true"]:checked:hover {
+    background-color: @pushbutton_specialbtn_hover_bg;
+}
+
+QPushButton[SpecialBtn="true"]:hover {
+    background-color: @pushbutton_specialbtn_hover_bg;
+}
+
+QPushButton[CornerBtn="true"] {
+    padding: 4px -2px 4px -2px;
+    margin: 0px;
+    border: none;
+    background-color: transparent;
+    min-width: -1;
+}
+
+QPushButton[CornerBtn="true"]::menu-indicator {
+    image: none;
+}
+
+QPushButton[CornerBtn="true"]:hover {
+    background-color: @pushbutton_cornerbtn_hover_bg;
+}
+
+QPushButton[CornerBtn="true"]:focus {
+    background-color: @pushbutton_cornerbtn_focus_bg;
+}
+
+QPushButton[CornerBtn="true"]:pressed {
+    background-color: @pushbutton_cornerbtn_pressed_bg;
+}
+
+QPushButton[StatusBtn="true"] {
+    font: bold;
+    padding: 0px 2px 0px 2px;
+    margin: 0px;
+    border: none;
+    background-color: transparent;
+    min-width: -1;
+}
+
+QPushButton[StatusBtn="true"]:hover {
+    background-color: @pushbutton_statusbtn_hover_bg;
+}
+
+QPushButton[StatusBtn="true"]:focus {
+    background-color: @pushbutton_statusbtn_focus_bg;;
+}
+
+QPushButton[StatusBtn="true"]:pressed {
+    background-color: @pushbutton_statusbtn_pressed_bg;
+}
+
+QPushButton[FlatBtn="true"] {
+    padding: 4px;
+    margin: 0px;
+    border: none;
+    background-color: transparent;
+    min-width: -1;
+}
+
+QPushButton[FlatBtn="true"]:hover {
+    background-color: @pushbutton_flatbtn_hover_bg;
+}
+
+QPushButton[FlatBtn="true"]:focus {
+    background-color: @pushbutton_flatbtn_focus_bg;
+}
+
+QPushButton[FlatBtn="true"]:focus {
+    background-color: @pushbutton_flatbtn_pressed_bg;
+}
+
+QPushButton[SelectionBtn="true"] {
+    padding: 4px 10px 4px 10px;
+    border: none;
+    background-color: transparent;
+    font-size: 15pt;
+    text-align: left;
+    min-width: -1;
+}
+
+QPushButton[SelectionBtn="true"]:hover {
+    background-color: @pushbutton_selectionbtn_hover_bg;
+}
+
+QPushButton[SelectionBtn="true"]:focus {
+    background-color: @pushbutton_selectionbtn_focus_bg;
+}
+
+QPushButton[SelectionBtn="true"]:focus {
+    background-color: @pushbutton_selectionbtn_pressed_bg;
+}
+
+QPushButton[TitleBtn="true"] {
+    padding: 4px;
+    margin: 0px;
+    border: none;
+    background-color: @pushbutton_titlebtn_bg;
+    min-width: -1;
+}
+
+QPushButton[TitleBtn="true"]:hover {
+    background-color: @pushbutton_titlebtn_hover_bg;
+}
+
+QPushButton[TitleBtn="true"]:focus {
+    background-color: @pushbutton_titlebtn_focus_bg;
+}
+
+QPushButton[TitleBtn="true"]:focus {
+    background-color: @pushbutton_titlebtn_pressed_bg;
+}
+
+QPushButton[DangerBtn="true"] {
+    color: @pushbutton_dangerbtn_fg;
+    border-color: @pushbutton_dangerbtn_border;
+    background-color: @pushbutton_dangerbtn_bg;
+    min-width: -1;
+}
+
+QPushButton[DangerBtn="true"]:hover {
+    color: @pushbutton_dangerbtn_hover_fg;
+    border-color: @pushbutton_dangerbtn_hover_border;
+    background-color: @pushbutton_dangerbtn_hover_bg;
+}
+
+VButtonMenuItem {
+    padding: 5px;
+    padding-right: 30px;
+    border: 1px solid transparent;
+    background-color: transparent;
+    min-width: -1;
+    text-align: left;
+}
+
+VButtonMenuItem[Heading1="true"] {
+    font-size: 22pt;
+}
+
+VButtonMenuItem[Heading2="true"] {
+    font-size: 20pt;
+}
+
+VButtonMenuItem[Heading3="true"] {
+    font-size: 18pt;
+}
+
+VButtonMenuItem[Heading4="true"] {
+    font-size: 16pt;
+}
+
+VButtonMenuItem[Heading5="true"] {
+    font-size: 14pt;
+}
+
+VButtonMenuItem[Heading6="true"] {
+    font-size: 14pt;
+}
+
+VButtonMenuItem:hover {
+    background-color: @menubar_item_selected_bg;
+}
+
+VButtonMenuItem:focus {
+    background-color: @menubar_item_selected_bg;
+}
+/* End QPushButton*/
+
+/* QComboBox */
+QComboBox {
+    padding: 3px;
+    color: @combobox_fg;
+    background: @combobox_bg;
+    border: 1px solid @combobox_border;
+}
+
+QComboBox:focus, QComboBox:on {
+    background-color: @combobox_focus_bg;
+    border: 2px solid @combobox_focus_border;
+}
+
+QComboBox::drop-down {
+    subcontrol-origin: padding;
+    subcontrol-position: top right;
+    width: 20px;
+    border: none;
+    background: transparent;
+}
+
+QComboBox::down-arrow {
+    image: url(arrow_dropdown.svg);
+    width: 20px;
+    height: 20px;
+}
+
+QComboBox QAbstractItemView {
+    padding: 2px;
+    border: 1px solid @combobox_view_border;
+    background: @combobox_bg;
+    selection-color: @combobox_view_selected_fg;
+    selection-background-color: @combobox_view_selected_bg;
+}
+
+QComboBox QAbstractItemView::item {
+    background: transparent;
+    padding: 3px;
+}
+
+QComboBox QAbstractItemView::item:hover {
+    color: @combobox_view_item_hover_fg;
+    background: @combobox_view_item_hover_bg;
+}
+
+QComboBox#NotebookSelector {
+    border: none;
+    font-size: 13pt;
+    padding-top: 3px;
+    padding-bottom: 3px;
+    icon-size: 30px;
+}
+
+QComboBox#NotebookSelector:focus, QComboBox#NotebookSelector:on {
+    border: none;
+    background: @combobox_bg
+}
+
+QComboBox#NotebookSelector QListWidget {
+    border: 1px solid @combobox_view_border;
+    background-color: @combobox_bg;
+    font-size: 13pt;
+    icon-size: 30px;
+}
+
+QComboBox#NotebookSelector QListWidget::item {
+    padding-top: 10px;
+    padding-bottom: 10px;
+}
+
+QComboBox#NotebookSelector QListWidget::item:hover {
+    color: @combobox_view_item_hover_fg;
+    background-color: @combobox_view_item_hover_bg;
+}
+/* End QComboBox */
+
+/* QLabel */
+QLabel {
+    border: none;
+    color: @label_fg;
+    background: transparent;
+}
+
+QLabel[TitleLabel="true"] {
+    padding-top: 5px;
+    padding-bottom: 5px;
+    color: @label_titlelabel_fg;
+    background-color: @label_titlelabel_bg;
+}
+
+QLabel[ColorRedLabel="true"] {
+    padding-left: 5px;
+    padding-right: 5px;
+    font: bold;
+    color: white;
+    border-radius: 2px;
+    background-color: #D32F2F;
+}
+
+QLabel[ColorGreenLabel="true"] {
+    padding-left: 5px;
+    padding-right: 5px;
+    font: bold;
+    color: white;
+    border-radius: 2px;
+    background-color: #388E3C;
+}
+
+QLabel[ColorGreyLabel="true"] {
+    padding-left: 5px;
+    padding-right: 5px;
+    font: bold;
+    color: white;
+    border-radius: 2px;
+    background-color: #616161;
+}
+
+QLabel[ColorTealLabel="true"] {
+    padding-left: 5px;
+    padding-right: 5px;
+    font: bold;
+    color: white;
+    border-radius: 2px;
+    background-color: #00796B;
+}
+
+QLabel[MenuSeparator="true"] {
+    padding-top: 5px;
+    padding-bottom: 5px;
+    margin-top: 3px;
+    font: italic;
+    border-top: 1px solid @menu_separator_bg
+}
+
+VVimIndicator QLabel[VimIndicatorKeyLabel="true"] {
+    font: bold;
+    color: @vim_indicator_key_label_fg;
+    background: transparent;
+}
+
+VVimIndicator QLabel[VimIndicatorModeLabel="true"] {
+    padding: 0px 2px 0px 2px;
+    font: bold;
+    color: @vim_indicator_mode_label_fg;
+    /* background color will be controlled by the code. */
+}
+
+VTabIndicator QLabel[TabIndicatorLabel="true"] {
+    color: @tab_indicator_label_fg;
+    background: transparent;
+}
+/* End QLabel */
+
+/* QLineEdit */
+QLineEdit {
+    border: 1px solid @lineedit_border;
+    padding: 3px;
+    color: @lineedit_fg;
+    background: @lineedit_bg;
+    selection-color: @lineedit_selection_fg;
+    selection-background-color: @lineedit_selection_bg;
+}
+
+QLineEdit:focus {
+    border: 2px solid @lineedit_focus_border;
+    background: @lineedit_focus_bg;
+}
+
+QLineEdit[VimCommandLine="true"] {
+    padding: 0px;
+    margin: 0px;
+    border: none;
+    color: @lineedit_fg;
+    background: @lineedit_bg;
+}
+/* End QLineEdit */
+
+/* QPlainTextEdit QTextEdit */
+QPlainTextEdit[LineEdit="true"], QTextEdit[LineEdit="true"] {
+    border: 1px solid @lineedit_border;
+    padding: 3px;
+    color: @lineedit_fg;
+    background: @lineedit_bg;
+    selection-color: @lineedit_selection_fg;
+    selection-background-color: @lineedit_selection_bg;
+}
+
+QPlainTextEdit[LineEdit="true"]:focus, QTextEdit[LineEdit="true"]:focus {
+    border: 2px solid @lineedit_focus_border;
+    background: @lineedit_focus_bg;
+}
+/* End QPlainTextEdit QTextEdit */
+
+/* QTabWidget */
+QTabWidget {
+    border: none;
+}
+
+QTabWidget::pane {
+    border: none;
+}
+/* End QTabWidget */
+
+/* QTabBar */
+QTabBar::tab {
+    color: @tabbar_fg;
+    background: @tabbar_bg;
+    border: 1px solid @tabbar_border;
+    border-bottom: none;
+    border-top: none;
+    padding: 2px;
+}
+
+QTabBar::tab:selected {
+    color: @tabbar_selected_fg;
+    background: @tabbar_selected_bg;
+    border-bottom: 3px solid @master_bg;
+}
+
+QTabBar::tab:hover {
+    color: @tabbar_hover_fg;
+    background: @tabbar_hover_bg;
+}
+
+QTabBar::close-button {
+    image: url(close_grey.svg);
+}
+
+QTabBar::close-button:hover {
+    image: url(close.svg);
+}
+
+QTabBar::close-button:focus {
+    image: url(close.svg);
+}
+
+QTabBar::scroller {
+    width: 20px;
+}
+
+QTabBar QToolButton {
+    border: none;
+}
+
+QTabBar QToolButton::right-arrow:enabled {
+    image: url(right.svg);
+}
+
+QTabBar QToolButton::left-arrow:enabled {
+    image: url(left.svg);
+}
+
+QTabBar QToolButton::right-arrow:disabled {
+    image: url(right_disabled.svg);
+}
+
+QTabBar QToolButton::left-arrow:disabled {
+    image: url(left_disabled.svg);
+}
+/* End QTabBar */
+
+VSelectorItemWidget QLabel[SelectorItemShortcutLabel="true"] {
+    font: bold;
+    border: 2px solid @selectoritem_border;
+    padding: 3px;
+    border-radius: 5px;
+    background-color: @selectoritem_bg;
+    color: @selectoritem_fg;
+}
+
+VInsertSelector {
+    border: none;
+    background: @insertselector_bg;
+}
+
+/* QTreeView */
+QTreeView {
+    color: @treeview_fg;
+    background: @treeview_bg;
+    show-decoration-selected: 0;
+    border: none;
+    selection-background-color: transparent;
+    outline: none;
+}
+
+QTreeView::item {
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+QTreeView::item:hover {
+    color: @treeview_item_hover_fg;
+    background: @treeview_item_hover_bg;
+}
+
+QTreeView::item:selected {
+    color: @treeview_item_selected_fg;
+    background: @treeview_item_selected_bg;
+}
+
+QTreeView::item:selected:active {
+    color: @treeview_item_selected_active_fg;
+    background: @treeview_item_selected_active_bg;
+}
+
+QTreeView::item:selected:!active {
+    color: @treeview_item_selected_inactive_fg;
+    background: @treeview_item_selected_inactive_bg;
+}
+
+QTreeView::branch:has-siblings:!adjoins-item {
+    border-image: url(line.svg) 0;
+}
+
+QTreeView::branch:has-siblings:adjoins-item {
+    border-image: url(branch_more.svg) 0;
+}
+
+QTreeView::branch:!has-children:!has-siblings:adjoins-item {
+    border-image: url(branch_end.svg) 0;
+}
+
+QTreeView::branch:has-children:!has-siblings:closed,
+QTreeView::branch:closed:has-children:has-siblings {
+    border-image: none;
+    image: url(branch_closed.svg);
+}
+
+QTreeView::branch:open:has-children:!has-siblings,
+QTreeView::branch:open:has-children:has-siblings  {
+    border-image: none;
+    image: url(branch_open.svg);
+}
+/* End QTreeView */
+
+/* QListView */
+QListView {
+    color: @listview_fg;
+    background: @listview_bg;
+    show-decoration-selected: 0;
+    border: none;
+    selection-background-color: transparent;
+    outline: none;
+}
+
+QListView::item {
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+QListView::item:hover {
+    color: @listview_item_hover_fg;
+    background: @listview_item_hover_bg;
+}
+
+QListView::item:selected {
+    color: @listview_item_selected_fg;
+    background: @listview_item_selected_bg;
+}
+
+QListView::item:selected:active {
+    color: @listview_item_selected_active_fg;
+    background: @listview_item_selected_active_bg;
+}
+
+QListView::item:selected:!active {
+    color: @listview_item_selected_inactive_fg;
+    background: @listview_item_selected_inactive_bg;
+}
+/* End QListView */
+
+/* QSplitter */
+QSplitter {
+    border: none;
+}
+
+QSplitter::handle {
+    background-color: @splitter_handle_bg;
+}
+
+QSplitter::handle:vertical {
+    height: 2px;
+}
+
+QSplitter::handle:horizontal {
+    width: 2px;
+}
+
+QSplitter#MainSplitter {
+    border: none;
+}
+/* End QSplitter */
+
+/* QStatusBar */
+QStatusBar {
+    color: @statusbar_fg;
+    background: @statusbar_bg;
+}
+/* End QStatusBar */
+
+QWidget[MainEditor="true"] {
+    border: none;
+}
+
+QDialog {
+    color: @base_fg;
+    background: @base_bg;
+}
+
+/* QScrollBar */
+QScrollBar::add-page, QScrollBar::sub-page {
+    background: @scrollbar_page_bg;
+}
+
+QScrollBar:vertical {
+    background: @scrollbar_bg;
+    width: 16px;
+    margin: 16px 0px 16px 0px;
+    padding: 0px 2px 0px 2px;
+    border: none;
+}
+
+QScrollBar::handle:vertical {
+    background: @scrollbar_handle_bg;
+    min-height: 16px;
+}
+
+QScrollBar::handle:vertical:hover {
+    background: @scrollbar_handle_hover_bg;
+}
+
+QScrollBar::handle:vertical:pressed {
+    background: @scrollbar_handle_pressed_bg;
+}
+
+QScrollBar::add-line:vertical {
+    border: none;
+    background: @scrollbar_bg;
+    width: 16px;
+    height: 16px;
+    subcontrol-position: bottom;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical:hover {
+    background: @scrollbar_handle_hover_bg;
+}
+
+QScrollBar::add-line:vertical:pressed {
+    background: @scrollbar_handle_pressed_bg;
+}
+
+QScrollBar::sub-line:vertical {
+    border: none;
+    background: @scrollbar_bg;
+    width: 16px;
+    height: 16px;
+    subcontrol-position: top;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical:hover {
+    background: @scrollbar_handle_hover_bg;
+}
+
+QScrollBar::sub-line:vertical:pressed {
+    background: @scrollbar_handle_pressed_bg;
+}
+
+QScrollBar::down-arrow:vertical {
+    image: url(down.svg);
+    width: 16px;
+    height: 16px;
+}
+
+QScrollBar::up-arrow:vertical {
+    image: url(up.svg);
+    width: 16px;
+    height: 16px;
+}
+
+QScrollBar:horizontal {
+    background: @scrollbar_bg;
+    height: 16px;
+    margin: 0px 16px 0px 16px;
+    padding: 2px 0px 2px 0px;
+    border: none;
+}
+
+QScrollBar::handle:horizontal {
+    background: @scrollbar_handle_bg;
+    min-width: 16px;
+}
+
+QScrollBar::handle:horizontal:hover {
+    background: @scrollbar_handle_hover_bg;
+}
+
+QScrollBar::handle:horizontal:pressed {
+    background: @scrollbar_handle_pressed_bg;
+}
+
+QScrollBar::add-line:horizontal {
+    border: none;
+    background: @scrollbar_bg;
+    width: 16px;
+    height: 16px;
+    subcontrol-position: right;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:horizontal:hover {
+    background: @scrollbar_handle_hover_bg;
+}
+
+QScrollBar::add-line:horizontal:pressed {
+    background: @scrollbar_handle_pressed_bg;
+}
+
+QScrollBar::sub-line:horizontal {
+    border: none;
+    background: @scrollbar_bg;
+    width: 16px;
+    height: 16px;
+    subcontrol-position: left;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal:hover {
+    background: @scrollbar_handle_hover_bg;
+}
+
+QScrollBar::sub-line:horizontal:pressed {
+    background: @scrollbar_handle_pressed_bg;
+}
+
+QScrollBar::right-arrow:horizontal {
+    image: url(right.svg);
+    width: 16px;
+    height: 16px;
+}
+
+QScrollBar::left-arrow:horizontal {
+    image: url(left.svg);
+    width: 16px;
+    height: 16px;
+}
+/* End QScrollBar */
+
+/* QCheckBox */
+QCheckBox {
+    spacing: 5px;
+}
+
+QCheckBox::indicator {
+    width: 20px;
+    height: 20px;
+}
+
+QCheckBox::indicator:unchecked {
+    image: url(checkbox_unchecked.svg);
+}
+
+QCheckBox::indicator:unchecked:hover {
+    background: @checkbox_indicator_hover_bg;
+}
+
+QCheckBox::indicator:unchecked:pressed {
+    background: @checkbox_indicator_pressed_bg;
+}
+
+QCheckBox::indicator:checked {
+    image: url(checkbox_checked.svg);
+}
+
+QCheckBox::indicator:checked:hover {
+    background: @checkbox_indicator_hover_bg;
+}
+
+QCheckBox::indicator:checked:pressed {
+    background: @checkbox_indicator_pressed_bg;
+}
+
+QCheckBox::indicator:indeterminate:hover {
+    background: @checkbox_indicator_hover_bg;
+}
+
+QCheckBox::indicator:indeterminate:pressed {
+    background: @checkbox_indicator_pressed_bg;
+}
+/* End QCheckBox */
+
+/* QRadioButton */
+QRadioButton {
+    spacing: 5px;
+}
+
+QRadioButton::indicator {
+    width: 20px;
+    height: 20px;
+}
+
+QRadioButton::indicator:unchecked {
+    image: url(radiobutton_unchecked.svg);
+}
+
+QRadioButton::indicator:unchecked:hover {
+    background: @radiobutton_indicator_hover_bg;
+}
+
+QRadioButton::indicator:unchecked:pressed {
+    background: @radiobutton_indicator_pressed_bg;
+}
+
+QRadioButton::indicator:checked {
+    image: url(radiobutton_checked.svg);
+}
+
+QRadioButton::indicator:checked:hover {
+    background: @radiobutton_indicator_hover_bg;
+}
+
+QRadioButton::indicator:checked:pressed {
+    background: @radiobutton_indicator_pressed_bg;
+}
+/* End QRadioButton */
+
+/* QSpinBox */
+QSpinBox, QDoubleSpinBox {
+    border: 1px solid @spinbox_border;
+    color: @spinbox_fg;
+    background: @spinbox_bg;
+    padding-right: 25px;
+    min-height: 25px;
+    selection-color: @spinbox_selection_fg;
+    selection-background-color: @spinbox_selection_bg;
+}
+
+QSpinBox:focus, QDoubleSpinBox::focus {
+    border: 2px solid @spinbox_focus_border;
+    background: @spinbox_focus_bg;
+}
+
+QSpinBox::up-button, QDoubleSpinBox::up-button {
+    subcontrol-origin: border;
+    subcontrol-position: top right; /* position at the top right corner */
+    width: 25px;
+    border: none;
+    background: transparent;
+}
+
+QSpinBox::up-button:hover, QDoubleSpinBox::up-button:hover {
+    background: @spinbox_button_hover_bg;
+}
+
+QSpinBox::up-button:pressed, QDoubleSpinBox::up-button:pressed {
+    background: @spinbox_button_pressed_bg;
+}
+
+QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
+    image: url(up.svg);
+    width: 12px;
+    height: 12px;
+}
+
+QSpinBox::up-arrow:disabled, QSpinBox::up-arrow:off, QDoubleSpinBox::up-arrow:disabled, QDoubleSpinBox::up-arrow:off  {
+    image: url(up_disabled.svg);
+}
+
+QSpinBox::down-button, QDoubleSpinBox::down-button {
+    subcontrol-origin: border;
+    subcontrol-position: bottom right; /* position at the top right corner */
+    width: 25px;
+    border: none;
+    background: transparent;
+}
+
+QSpinBox::down-button:hover, QDoubleSpinBox::down-button:hover {
+    background: @spinbox_button_hover_bg;
+}
+
+QSpinBox::down-button:pressed, QDoubleSpinBox::down-button:pressed {
+    background: @spinbox_button_pressed_bg;
+}
+
+QSpinBox::down-arrow, QDoubleSpinBox::down-arrow {
+    image: url(down.svg);
+    width: 12px;
+    height: 12px;
+}
+
+QSpinBox::down-arrow:disabled, QSpinBox::down-arrow:off, QDoubleSpinBox::down-arrow:disabled, QDoubleSpinBox::down-arrow:off {
+    image: url(down_disabled.svg);
+}
+/* End QSpinBox */
+
+/* QHeaderView */
+QHeaderView::section {
+    background: @headerview_bg;
+    color: @headerview_fg;
+    padding-left: 4px;
+    border: none;
+    border-left: 1px solid @headerview_border;
+    border-bottom: 1px solid @headerview_border;
+}
+
+QHeaderView::section:checked
+{
+    color: @headerview_checked_fg;
+    background: @headerview_checked_bg;
+}
+
+/* style the sort indicator */
+QHeaderView::down-arrow {
+    image: url(down.svg);
+}
+
+QHeaderView::up-arrow {
+    image: url(up.svg);
+}
+/* End QHeaderView */

+ 14 - 0
src/resources/themes/v_white/v_white.palette

@@ -267,3 +267,17 @@ checkbox_indicator_pressed_bg=@pressed_bg
 ; RadioButton.
 radiobutton_indicator_hover_bg=@hover_bg
 radiobutton_indicator_pressed_bg=@pressed_bg
+
+; SpinBox.
+spinbox_fg=@content_fg
+spinbox_bg=@content_bg
+spinbox_border=@border_bg
+spinbox_button_hover_bg=@hover_bg
+spinbox_button_pressed_bg=@pressed_bg
+
+; HeaderView.
+headerview_bg=@base_bg
+headerview_fg=@base_fg
+headerview_border=@border_bg
+headerview_checked_fg=@selected_fg
+headerview_checked_bg=@selected_bg

+ 115 - 24
src/resources/themes/v_white/v_white.qss

@@ -3,7 +3,6 @@ QToolTip
     border: 1px solid @tooltip_border;
     background: @tooltip_bg;
     color: @tooltip_fg;
-    padding: 5px;
 }
 
 /* QWidget */
@@ -187,7 +186,7 @@ QPushButton:flat {
     border: none;
 }
 
-QPushButton::default {
+QPushButton:default {
     border-color: @pushbutton_default_border;
 }
 
@@ -750,17 +749,21 @@ QDialog {
 }
 
 /* QScrollBar */
+QScrollBar::sub-page, QScrollBar::add-page {
+    background: transparent;
+}
+
 QScrollBar:vertical {
     background: @scrollbar_bg;
-    width: 20px;
-    margin: 20px 0px 20px 0px;
+    width: 16px;
+    margin: 16px 0px 16px 0px;
     padding: 0px 2px 0px 2px;
     border: none;
 }
 
 QScrollBar::handle:vertical {
     background: @scrollbar_handle_bg;
-    min-height: 20px;
+    min-height: 16px;
 }
 
 QScrollBar::handle:vertical:hover {
@@ -774,8 +777,8 @@ QScrollBar::handle:vertical:pressed {
 QScrollBar::add-line:vertical {
     border: none;
     background: @scrollbar_bg;
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
     subcontrol-position: bottom;
     subcontrol-origin: margin;
 }
@@ -791,8 +794,8 @@ QScrollBar::add-line:vertical:pressed {
 QScrollBar::sub-line:vertical {
     border: none;
     background: @scrollbar_bg;
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
     subcontrol-position: top;
     subcontrol-origin: margin;
 }
@@ -807,27 +810,27 @@ QScrollBar::sub-line:vertical:pressed {
 
 QScrollBar::down-arrow:vertical {
     image: url(down.svg);
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
 }
 
 QScrollBar::up-arrow:vertical {
     image: url(up.svg);
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
 }
 
 QScrollBar:horizontal {
     background: @scrollbar_bg;
-    height: 20px;
-    margin: 0px 20px 0px 20px;
+    height: 16px;
+    margin: 0px 16px 0px 16px;
     padding: 2px 0px 2px 0px;
     border: none;
 }
 
 QScrollBar::handle:horizontal {
     background: @scrollbar_handle_bg;
-    min-width: 20px;
+    min-width: 16px;
 }
 
 QScrollBar::handle:horizontal:hover {
@@ -841,8 +844,8 @@ QScrollBar::handle:horizontal:pressed {
 QScrollBar::add-line:horizontal {
     border: none;
     background: @scrollbar_bg;
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
     subcontrol-position: right;
     subcontrol-origin: margin;
 }
@@ -858,8 +861,8 @@ QScrollBar::add-line:horizontal:pressed {
 QScrollBar::sub-line:horizontal {
     border: none;
     background: @scrollbar_bg;
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
     subcontrol-position: left;
     subcontrol-origin: margin;
 }
@@ -874,14 +877,14 @@ QScrollBar::sub-line:horizontal:pressed {
 
 QScrollBar::right-arrow:horizontal {
     image: url(right.svg);
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
 }
 
 QScrollBar::left-arrow:horizontal {
     image: url(left.svg);
-    width: 20px;
-    height: 20px;
+    width: 16px;
+    height: 16px;
 }
 /* End QScrollBar */
 
@@ -962,3 +965,91 @@ QRadioButton::indicator:checked:pressed {
     background: @radiobutton_indicator_pressed_bg;
 }
 /* End QRadioButton */
+
+/* QSpinBox */
+QSpinBox, QDoubleSpinBox {
+    border: 1px solid @spinbox_border;
+    color: @spinbox_fg;
+    background: @spinbox_bg;
+    padding-right: 25px;
+    min-height: 25px;
+}
+
+QSpinBox::up-button, QDoubleSpinBox::up-button {
+    subcontrol-origin: border;
+    subcontrol-position: top right; /* position at the top right corner */
+    width: 25px;
+    border: none;
+    background: transparent;
+}
+
+QSpinBox::up-button:hover, QDoubleSpinBox::up-button:hover {
+    background: @spinbox_button_hover_bg;
+}
+
+QSpinBox::up-button:pressed, QDoubleSpinBox::up-button:pressed {
+    background: @spinbox_button_pressed_bg;
+}
+
+QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
+    image: url(up.svg);
+    width: 12px;
+    height: 12px;
+}
+
+QSpinBox::up-arrow:disabled, QSpinBox::up-arrow:off, QDoubleSpinBox::up-arrow:disabled, QDoubleSpinBox::up-arrow:off  {
+    image: url(up_disabled.svg);
+}
+
+QSpinBox::down-button, QDoubleSpinBox::down-button {
+    subcontrol-origin: border;
+    subcontrol-position: bottom right; /* position at the top right corner */
+    width: 25px;
+    border: none;
+    background: transparent;
+}
+
+QSpinBox::down-button:hover, QDoubleSpinBox::down-button:hover {
+    background: @spinbox_button_hover_bg;
+}
+
+QSpinBox::down-button:pressed, QDoubleSpinBox::down-button:pressed {
+    background: @spinbox_button_pressed_bg;
+}
+
+QSpinBox::down-arrow, QDoubleSpinBox::down-arrow {
+    image: url(down.svg);
+    width: 12px;
+    height: 12px;
+}
+
+QSpinBox::down-arrow:disabled, QSpinBox::down-arrow:off, QDoubleSpinBox::down-arrow:disabled, QDoubleSpinBox::down-arrow:off {
+    image: url(down_disabled.svg);
+}
+/* End QSpinBox */
+
+/* QHeaderView */
+QHeaderView::section {
+    background: @headerview_bg;
+    color: @headerview_fg;
+    padding-left: 4px;
+    border: none;
+    border-left: 1px solid @headerview_border;
+    border-bottom: 1px solid @headerview_border;
+}
+
+QHeaderView::section:checked
+{
+    color: @headerview_checked_fg;
+    background: @headerview_checked_bg;
+}
+
+/* style the sort indicator */
+QHeaderView::down-arrow {
+    image: url(down.svg);
+}
+
+QHeaderView::up-arrow {
+    image: url(up.svg);
+}
+/* End QHeaderView */

+ 10 - 3
src/utils/vutils.cpp

@@ -394,8 +394,13 @@ bool VUtils::copyDirectory(const QString &p_srcDirPath, const QString &p_destDir
     return true;
 }
 
-int VUtils::showMessage(QMessageBox::Icon p_icon, const QString &p_title, const QString &p_text, const QString &p_infoText,
-                        QMessageBox::StandardButtons p_buttons, QMessageBox::StandardButton p_defaultBtn, QWidget *p_parent,
+int VUtils::showMessage(QMessageBox::Icon p_icon,
+                        const QString &p_title,
+                        const QString &p_text,
+                        const QString &p_infoText,
+                        QMessageBox::StandardButtons p_buttons,
+                        QMessageBox::StandardButton p_defaultBtn,
+                        QWidget *p_parent,
                         MessageBoxType p_type)
 {
     QMessageBox msgBox(p_icon, p_title, p_text, p_buttons, p_parent);
@@ -405,7 +410,9 @@ int VUtils::showMessage(QMessageBox::Icon p_icon, const QString &p_title, const
     if (p_type == MessageBoxType::Danger) {
         QPushButton *okBtn = dynamic_cast<QPushButton *>(msgBox.button(QMessageBox::Ok));
         if (okBtn) {
-            okBtn->setStyleSheet(g_config->c_dangerBtnStyle);
+            okBtn->setProperty("DangerBtn", true);
+            okBtn->style()->unpolish(okBtn);
+            okBtn->style()->polish(okBtn);
         }
     }
     return msgBox.exec();

+ 1 - 3
src/vconfigmanager.cpp

@@ -54,9 +54,6 @@ const QString VConfigManager::c_warningTextStyle = QString("color: red; font: bo
 
 const QString VConfigManager::c_dataTextStyle = QString("font: bold");
 
-const QString VConfigManager::c_dangerBtnStyle = QString("QPushButton {color: #fff; border-color: #d43f3a; background-color: #d9534f;}"
-                                                         "QPushButton::hover {color: #fff; border-color: #ac2925; background-color: #c9302c;}");
-
 const QString VConfigManager::c_vnoteNotebookFolderName = QString("vnote_notebooks");
 
 VConfigManager::VConfigManager(QObject *p_parent)
@@ -1367,6 +1364,7 @@ void VConfigManager::initThemes()
 
     // Built-in.
     m_themes.insert(tr("v_white"), ":/resources/themes/v_white/v_white.palette");
+    m_themes.insert(tr("v_pure"), ":/resources/themes/v_pure/v_pure.palette");
 
     // User theme folder.
     QDir dir(getThemeConfigFolder());

+ 0 - 3
src/vconfigmanager.h

@@ -85,9 +85,6 @@ public:
     // CSS style for data in label.
     static const QString c_dataTextStyle;
 
-    // QStylesheet for danger button. Should keep identical with DangerBtn in QSS.
-    static const QString c_dangerBtnStyle;
-
     QFont getMdEditFont() const;
 
     QPalette getMdEditPalette() const;

+ 1 - 0
src/vexporter.cpp

@@ -81,6 +81,7 @@ void VExporter::setupUI()
     connect(m_openBtn, &QPushButton::clicked, this, &VExporter::openTargetPath);
 
     QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
+    okBtn->setProperty("SpecialBtn", true);
     m_pathEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
 
     QGridLayout *mainLayout = new QGridLayout();

+ 23 - 0
src/vnote.qrc

@@ -163,5 +163,28 @@
         <file>resources/themes/v_white/checkbox_unchecked.svg</file>
         <file>resources/themes/v_white/radiobutton_checked.svg</file>
         <file>resources/themes/v_white/radiobutton_unchecked.svg</file>
+        <file>resources/themes/v_pure/arrow_dropdown.svg</file>
+        <file>resources/themes/v_pure/branch_closed.svg</file>
+        <file>resources/themes/v_pure/branch_end.svg</file>
+        <file>resources/themes/v_pure/branch_more.svg</file>
+        <file>resources/themes/v_pure/branch_open.svg</file>
+        <file>resources/themes/v_pure/checkbox_checked.svg</file>
+        <file>resources/themes/v_pure/checkbox_unchecked.svg</file>
+        <file>resources/themes/v_pure/close.svg</file>
+        <file>resources/themes/v_pure/close_grey.svg</file>
+        <file>resources/themes/v_pure/down.svg</file>
+        <file>resources/themes/v_pure/down_disabled.svg</file>
+        <file>resources/themes/v_pure/float.svg</file>
+        <file>resources/themes/v_pure/left.svg</file>
+        <file>resources/themes/v_pure/left_disabled.svg</file>
+        <file>resources/themes/v_pure/line.svg</file>
+        <file>resources/themes/v_pure/radiobutton_checked.svg</file>
+        <file>resources/themes/v_pure/radiobutton_unchecked.svg</file>
+        <file>resources/themes/v_pure/right.svg</file>
+        <file>resources/themes/v_pure/right_disabled.svg</file>
+        <file>resources/themes/v_pure/up.svg</file>
+        <file>resources/themes/v_pure/up_disabled.svg</file>
+        <file>resources/themes/v_pure/v_pure.palette</file>
+        <file>resources/themes/v_pure/v_pure.qss</file>
     </qresource>
 </RCC>