فهرست منبع

refine pure theme

Le Tan 3 سال پیش
والد
کامیت
719c7339cf

+ 1 - 1
src/core/coreconfig.cpp

@@ -66,7 +66,7 @@ void CoreConfig::init(const QJsonObject &p_app,
 
     m_docksTabBarIconSize = READINT(QStringLiteral("docks_tabbar_icon_size"));
     if (m_docksTabBarIconSize <= 0) {
-        m_docksTabBarIconSize = 20;
+        m_docksTabBarIconSize = 18;
     }
 
     loadNoteManagement(appObj, userObj);

+ 1 - 0
src/core/mainconfig.cpp

@@ -119,4 +119,5 @@ QString MainConfig::getVersion(const QJsonObject &p_jobj)
 void MainConfig::doVersionSpecificOverride()
 {
     // In a new version, we may want to change one value by force.
+    m_coreConfig->m_docksTabBarIconSize = 18;
 }

+ 1 - 1
src/core/theme.cpp

@@ -332,7 +332,7 @@ QString Theme::paletteColor(const QString &p_name) const
         return val;
     }
     qWarning() << "undefined or invalid palette color" << p_name;
-    return QString("#ff0000");
+    return QString();
 }
 
 QJsonObject Theme::readJsonFile(const QString &p_filePath)

+ 0 - 1
src/data/core/core.qrc

@@ -28,7 +28,6 @@
         <file>icons/view.svg</file>
         <file>icons/inplace_preview_editor.svg</file>
         <file>icons/image_host_editor.svg</file>
-        <file>icons/settings_menu.svg</file>
         <file>icons/help_menu.svg</file>
         <file>icons/import_menu.svg</file>
         <file>icons/export_menu.svg</file>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/data/core/icons/settings_menu.svg


+ 2 - 2
src/data/core/vnotex.json

@@ -91,7 +91,7 @@
         ],
         "shortcut_leader_key" : "Ctrl+G",
         "toolbar_icon_size" : 18,
-        "docks_tabbar_icon_size" : 24,
+        "docks_tabbar_icon_size" : 18,
         "note_management" : {
             "external_node" : {
                 "//comment" : "Wildcard patterns of files and folders to exclude as external files",
@@ -494,7 +494,7 @@
         "//comment" : "Docks to ignore when expanding content area of main window",
         "main_window_keep_docks_expanding_content_area": ["OutlineDock.vnotex"],
         "snippet_panel_builtin_snippets_visible" : true,
-        "tag_explorer_two_columns_enabled" : true,
+        "tag_explorer_two_columns_enabled" : false,
         "new_note_default_file_type" : 0,
         "united_entry_expand_all" : false
     }

+ 2 - 2
src/data/extra/themes/moonlight/interface.qss

@@ -541,7 +541,7 @@ QMainWindow > QTabBar::tab:right {
     border-right: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: 6px 2px -10px 2px;
+    padding: 8px 8px -8px 8px;
 }
 
 /* Tabified QDockWidget */
@@ -549,7 +549,7 @@ QMainWindow > QTabBar::tab:left {
     border-left: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: -10px 2px 6px 2px;
+    padding: -8px 8px 8px 8px;
 }
 
 QTabBar::tab:hover {

+ 1 - 1
src/data/extra/themes/moonlight/palette.json

@@ -1,6 +1,6 @@
 {
     "metadata" : {
-        "revision" : 0,
+        "revision" : 1,
         "//comment" : "If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.",
         "//comment" : "Otherwise, this value specify the theme name to use for syntax highlighting.",
         "editor-highlight-theme" : "Breeze Dark",

+ 54 - 16
src/data/extra/themes/pure/interface.qss

@@ -77,6 +77,25 @@ vnotex--TitleBar QLabel[TitleBarTitle="true"] {
 }
 
 /* QDockWidget */
+QDockWidget[MainWindowSideBar="true"] QWidget {
+    background-color: @widgets#mainwindow#side_bar#widget#bg;
+}
+
+QDockWidget[MainWindowSideBar="true"] QToolButton:checked {
+    color: @widgets#qtoolbutton#checked#fg;
+    background-color: @widgets#qtoolbutton#checked#bg;
+}
+
+QDockWidget[MainWindowSideBar="true"] QToolButton:hover {
+    color: @widgets#qtoolbutton#hover#fg;
+    background-color: @widgets#qtoolbutton#hover#bg;
+}
+
+QDockWidget[MainWindowSideBar="true"] QToolButton:pressed {
+    color: @widgets#qtoolbutton#pressed#fg;
+    background-color: @widgets#qtoolbutton#pressed#bg;
+}
+
 QDockWidget {
     color: @widgets#qdockwidget#fg;
     background-color: @widgets#qdockwidget#bg;
@@ -504,6 +523,41 @@ QTabWidget::tab-bar {
 }
 
 /* QTabBar */
+QTabBar[MainWindowSideBar="true"] {
+    background-color: @widgets#mainwindow#side_bar#bg;
+}
+
+QTabBar[MainWindowSideBar="true"]::tab {
+    color: @widgets#mainwindow#side_bar#fg;
+    background-color: @widgets#mainwindow#side_bar#bg;
+    border: none;
+}
+
+QMainWindow > QTabBar::tab:right {
+    border-right: 3px solid transparent;
+    border-bottom: none;
+    margin: 0px;
+    padding: 8px 8px -8px 8px;
+}
+
+QMainWindow > QTabBar::tab:left {
+    border-left: 3px solid transparent;
+    border-bottom: none;
+    margin: 0px;
+    padding: -8px 8px 8px 8px;
+}
+
+/* Only the left one is the mainwindow side bar */
+QMainWindow > QTabBar::tab:left:hover {
+    color: @widgets#mainwindow#side_bar#hover#fg;
+    background-color: @widgets#mainwindow#side_bar#hover#bg;
+}
+
+QMainWindow > QTabBar::tab:left:selected {
+    color: @widgets#mainwindow#side_bar#selected#fg;
+    background-color: @widgets#mainwindow#side_bar#selected#bg;
+}
+
 QTabBar {
     border: none;
 }
@@ -536,22 +590,6 @@ QTabBar::tab:left {
     min-width: 20px;
 }
 
-/* Tabified QDockWidget */
-QMainWindow > QTabBar::tab:right {
-    border-right: 3px solid transparent;
-    border-bottom: none;
-    margin: 0px;
-    padding: 6px 2px -10px 2px;
-}
-
-/* Tabified QDockWidget */
-QMainWindow > QTabBar::tab:left {
-    border-left: 3px solid transparent;
-    border-bottom: none;
-    margin: 0px;
-    padding: -10px 2px 6px 2px;
-}
-
 QTabBar::tab:hover {
     color: @widgets#qtabbar#tab#hover#fg;
     background-color: @widgets#qtabbar#tab#hover#bg;

+ 28 - 4
src/data/extra/themes/pure/palette.json

@@ -1,6 +1,6 @@
 {
     "metadata" : {
-        "revision" : 0,
+        "revision" : 1,
         "//comment" : "If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.",
         "//comment" : "Otherwise, this value specify the theme name to use for syntax highlighting.",
         "editor-highlight-theme" : "Default",
@@ -38,7 +38,11 @@
         "fg15_3" : "#b0b0b0",
         "fg15_4" : "#7a7a7a",
         "fg15_5" : "#222222",
-        "bg11" : "#1976d2"
+        "bg11" : "#1976d2",
+        "layer1" : "#354259",
+        "layer2" : "#1b2430",
+        "layer3" : "#6b778d",
+        "layer4" : "#eeeeee"
     },
     "base" : {
         "normal" : {
@@ -260,7 +264,7 @@
             "fg" : "@base#normal#fg",
             "bg" : "@base#normal#bg",
             "separator" : {
-                "bg" : "@widgets#separator#bg"
+                "bg" : "transparent"
             }
         },
         "dragdropareaindicator" : {
@@ -490,7 +494,7 @@
             "bg" : "@base#footer#bg"
         },
         "qscrollbar" : {
-            "bg" : "@base#normal#bg",
+            "bg" : "transparent",
             "addpage" : {
                 "bg" : "transparent"
             },
@@ -631,6 +635,26 @@
             }
         },
         "mainwindow" : {
+            "side_bar" : {
+                "fg" : "@palette#bg3_5",
+                "bg" : "@palette#layer1",
+                "selected" : {
+                    "fg" : "@palette#bg2_7",
+                    "bg" : "@palette#layer2"
+                },
+                "icon" : {
+                    "fg" : "@widgets#mainwindow#side_bar#fg",
+                    "selected" : {
+                        "fg" : "@widgets#mainwindow#side_bar#selected#fg"
+                    }
+                },
+                "hover" : {
+                    "bg" : "@palette#layer3"
+                },
+                "widget" : {
+                    "bg" : "@palette#layer4"
+                }
+            },
             "dockwidget_tabbar" : {
                 "icon" : {
                     "fg" : "@base#icon#fg",

+ 2 - 2
src/data/extra/themes/solarized-dark/interface.qss

@@ -537,7 +537,7 @@ QMainWindow > QTabBar::tab:right {
     border-right: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: 6px 2px -10px 2px;
+    padding: 8px 8px -8px 8px;
 }
 
 /* Tabified QDockWidget */
@@ -545,7 +545,7 @@ QMainWindow > QTabBar::tab:left {
     border-left: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: -10px 2px 6px 2px;
+    padding: -8px 8px 8px 8px;
 }
 
 QTabBar::tab:hover {

+ 2 - 2
src/data/extra/themes/solarized-light/interface.qss

@@ -537,7 +537,7 @@ QMainWindow > QTabBar::tab:right {
     border-right: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: 6px 2px -10px 2px;
+    padding: 8px 8px -8px 8px;
 }
 
 /* Tabified QDockWidget */
@@ -545,7 +545,7 @@ QMainWindow > QTabBar::tab:left {
     border-left: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: -10px 2px 6px 2px;
+    padding: -8px 8px 8px 8px;
 }
 
 QTabBar::tab:hover {

+ 2 - 2
src/data/extra/themes/vscode-dark/interface.qss

@@ -537,7 +537,7 @@ QMainWindow > QTabBar::tab:right {
     border-right: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: 6px 2px -10px 2px;
+    padding: 8px 8px -8px 8px;
 }
 
 /* Tabified QDockWidget */
@@ -545,7 +545,7 @@ QMainWindow > QTabBar::tab:left {
     border-left: 3px solid transparent;
     border-bottom: none;
     margin: 0px;
-    padding: -10px 2px 6px 2px;
+    padding: -8px 8px 8px 8px;
 }
 
 QTabBar::tab:hover {

+ 43 - 21
src/widgets/dockwidgethelper.cpp

@@ -127,6 +127,12 @@ void DockWidgetHelper::setupDocks()
     }
 }
 
+static void addWidgetToDock(QDockWidget *p_dock, QWidget *p_widget)
+{
+    p_dock->setWidget(p_widget);
+    p_dock->setFocusProxy(p_widget);
+}
+
 void DockWidgetHelper::setupNavigationDock()
 {
     auto dock = createDockWidget(DockIndex::NavigationDock, tr("Navigation"), m_mainWindow);
@@ -134,8 +140,7 @@ void DockWidgetHelper::setupNavigationDock()
     dock->setObjectName(QStringLiteral("NavigationDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_notebookExplorer);
-    dock->setFocusProxy(m_mainWindow->m_notebookExplorer);
+    addWidgetToDock(dock, m_mainWindow->m_notebookExplorer);
     m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
 }
 
@@ -146,8 +151,7 @@ void DockWidgetHelper::setupOutlineDock()
     dock->setObjectName(QStringLiteral("OutlineDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_outlineViewer);
-    dock->setFocusProxy(m_mainWindow->m_outlineViewer);
+    addWidgetToDock(dock, m_mainWindow->m_outlineViewer);
     m_mainWindow->addDockWidget(Qt::RightDockWidgetArea, dock);
 }
 
@@ -158,8 +162,7 @@ void DockWidgetHelper::setupConsoleDock()
     dock->setObjectName(QStringLiteral("ConsoleDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_consoleViewer);
-    dock->setFocusProxy(m_mainWindow->m_consoleViewer);
+    addWidgetToDock(dock, m_mainWindow->m_consoleViewer);
     m_mainWindow->addDockWidget(Qt::BottomDockWidgetArea, dock);
     dock->hide();
 }
@@ -171,8 +174,7 @@ void DockWidgetHelper::setupSearchDock()
     dock->setObjectName(QStringLiteral("SearchDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_searchPanel);
-    dock->setFocusProxy(m_mainWindow->m_searchPanel);
+    addWidgetToDock(dock, m_mainWindow->m_searchPanel);
     m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
 }
 
@@ -183,8 +185,7 @@ void DockWidgetHelper::setupSnippetDock()
     dock->setObjectName(QStringLiteral("SnippetDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_snippetPanel);
-    dock->setFocusProxy(m_mainWindow->m_snippetPanel);
+    addWidgetToDock(dock, m_mainWindow->m_snippetPanel);
     m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
 }
 
@@ -195,8 +196,7 @@ void DockWidgetHelper::setupHistoryDock()
     dock->setObjectName(QStringLiteral("HistoryDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_historyPanel);
-    dock->setFocusProxy(m_mainWindow->m_historyPanel);
+    addWidgetToDock(dock, m_mainWindow->m_historyPanel);
     m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
 }
 
@@ -207,8 +207,7 @@ void DockWidgetHelper::setupTagDock()
     dock->setObjectName(QStringLiteral("TagDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_tagExplorer);
-    dock->setFocusProxy(m_mainWindow->m_tagExplorer);
+    addWidgetToDock(dock, m_mainWindow->m_tagExplorer);
     m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
 }
 
@@ -219,8 +218,7 @@ void DockWidgetHelper::setupLocationListDock()
     dock->setObjectName(QStringLiteral("LocationListDock.vnotex"));
     dock->setAllowedAreas(Qt::AllDockWidgetAreas);
 
-    dock->setWidget(m_mainWindow->m_locationList);
-    dock->setFocusProxy(m_mainWindow->m_locationList);
+    addWidgetToDock(dock, m_mainWindow->m_locationList);
     m_mainWindow->addDockWidget(Qt::BottomDockWidgetArea, dock);
     dock->hide();
 }
@@ -354,6 +352,12 @@ void DockWidgetHelper::updateDockWidgetTabBar()
         if (cnt == 1) {
             iconOnly = false;
         }
+
+        bool isSideBar = iconOnly && (tabShape == QTabBar::RoundedWest || tabShape == QTabBar::TriangularWest);
+        if (tabBar->property(PropertyDefs::c_mainWindowSideBar).toBool() != isSideBar) {
+            WidgetUtils::setPropertyDynamically(tabBar, PropertyDefs::c_mainWindowSideBar, isSideBar);
+        }
+
         for (int i = 0; i < cnt; ++i) {
             auto dock = reinterpret_cast<QDockWidget *>(tabBar->tabData(i).toULongLong());
             if (!dock) {
@@ -366,7 +370,11 @@ void DockWidgetHelper::updateDockWidgetTabBar()
             } else if (dock->windowTitle().isEmpty()) {
                 dock->setWindowTitle(dock->property(PropertyDefs::c_dockWidgetTitle).toString());
             }
-            tabBar->setTabIcon(i, getDockIcon(static_cast<DockIndex>(dockIdx)));
+            tabBar->setTabIcon(i, getDockIcon(static_cast<DockIndex>(dockIdx), isSideBar));
+
+            if (dock->property(PropertyDefs::c_mainWindowSideBar).toBool() != isSideBar) {
+                WidgetUtils::setPropertyDynamically(dock, PropertyDefs::c_mainWindowSideBar, isSideBar);
+            }
         }
     }
 
@@ -510,21 +518,35 @@ QVector<void *> DockWidgetHelper::getVisibleNavigationItems()
     return items;
 }
 
-const QIcon &DockWidgetHelper::getDockIcon(DockIndex p_dockIndex)
+const QIcon &DockWidgetHelper::getDockIcon(DockIndex p_dockIndex, bool p_isSideBar)
 {
     static const auto fg = VNoteX::getInst().getThemeMgr().paletteColor("widgets#mainwindow#dockwidget_tabbar#icon#fg");
     static const auto selectedFg = VNoteX::getInst().getThemeMgr().paletteColor("widgets#mainwindow#dockwidget_tabbar#icon#selected#fg");
+    static auto sideBarFg = VNoteX::getInst().getThemeMgr().paletteColor("widgets#mainwindow#side_bar#icon#fg");
+    static auto sideBarSelectedFg = VNoteX::getInst().getThemeMgr().paletteColor("widgets#mainwindow#side_bar#icon#selected#fg");
+
+    if (sideBarFg.isEmpty()) {
+        sideBarFg = fg;
+    }
+    if (sideBarSelectedFg.isEmpty()) {
+        sideBarSelectedFg = selectedFg;
+    }
+
     const auto area = m_mainWindow->dockWidgetArea(m_docks[p_dockIndex]);
     const int newAngle = rotationAngle(area);
-    if (m_dockIcons[p_dockIndex].m_rotationAngle != newAngle && area != Qt::NoDockWidgetArea) {
+    if ((m_dockIcons[p_dockIndex].m_rotationAngle != newAngle
+         || m_dockIcons[p_dockIndex].m_isSideBar != p_isSideBar)
+        && area != Qt::NoDockWidgetArea) {
         QVector<IconUtils::OverriddenColor> colors;
-        colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal));
+        colors.push_back(IconUtils::OverriddenColor(p_isSideBar ? sideBarFg : fg, QIcon::Normal));
         // FIXME: the Selected Mode is not used by the selected tab of a QTabBar.
-        colors.push_back(IconUtils::OverriddenColor(selectedFg, QIcon::Selected));
+        colors.push_back(IconUtils::OverriddenColor(p_isSideBar ? sideBarSelectedFg : selectedFg,
+                                                    QIcon::Selected));
 
         auto iconFile = VNoteX::getInst().getThemeMgr().getIconFile(iconFileName(p_dockIndex));
         m_dockIcons[p_dockIndex].m_icon = IconUtils::fetchIcon(iconFile, colors, newAngle);
         m_dockIcons[p_dockIndex].m_rotationAngle = newAngle;
+        m_dockIcons[p_dockIndex].m_isSideBar = p_isSideBar;
     }
 
     return m_dockIcons[p_dockIndex].m_icon;

+ 3 - 1
src/widgets/dockwidgethelper.h

@@ -92,6 +92,8 @@ namespace vnotex
             QIcon m_icon;
 
             int m_rotationAngle = INT_MIN;
+
+            bool m_isSideBar = false;
         };
 
         void setupNavigationDock();
@@ -118,7 +120,7 @@ namespace vnotex
 
         void setupDockActivateShortcut(QDockWidget *p_dock, const QString &p_keys);
 
-        const QIcon &getDockIcon(DockIndex p_dockIndex);
+        const QIcon &getDockIcon(DockIndex p_dockIndex, bool p_isSideBar);
 
         static QString iconFileName(DockIndex p_dockIndex);
 

+ 2 - 0
src/widgets/propertydefs.cpp

@@ -27,3 +27,5 @@ const char *PropertyDefs::c_dockWidgetIndex = "DockIndex";
 const char *PropertyDefs::c_dockWidgetTitle = "DockTitle";
 
 const char *PropertyDefs::c_hitSettingWidget = "HitSettingWidget";
+
+const char *PropertyDefs::c_mainWindowSideBar = "MainWindowSideBar";

+ 2 - 0
src/widgets/propertydefs.h

@@ -35,6 +35,8 @@ namespace vnotex
         static const char *c_dockWidgetTitle;
 
         static const char *c_hitSettingWidget;
+
+        static const char *c_mainWindowSideBar;
     };
 }
 

+ 1 - 1
src/widgets/titlebar.cpp

@@ -26,7 +26,7 @@ TitleBar::TitleBar(const QString &p_title,
                    bool p_hasInfoLabel,
                    TitleBar::Actions p_actionFlags,
                    QWidget *p_parent)
-    : QWidget(p_parent)
+    : QFrame(p_parent)
 {
     setupUI(p_title, p_hasInfoLabel, p_actionFlags);
 }

+ 2 - 2
src/widgets/titlebar.h

@@ -1,7 +1,7 @@
 #ifndef TITLEBAR_H
 #define TITLEBAR_H
 
-#include <QWidget>
+#include <QFrame>
 #include <QVector>
 #include <QMenu>
 
@@ -11,7 +11,7 @@ class QLabel;
 
 namespace vnotex
 {
-    class TitleBar : public QWidget
+    class TitleBar : public QFrame
     {
         Q_OBJECT
     public:

+ 57 - 69
src/widgets/toolbarhelper.cpp

@@ -405,8 +405,6 @@ QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_too
 
     setupExpandButton(p_win, tb);
 
-    setupSettingsButton(p_win, tb);
-
     setupMenuButton(p_win, tb);
 
     return tb;
@@ -586,11 +584,11 @@ void ToolBarHelper::setupExpandButton(MainWindow *p_win, QToolBar *p_toolBar)
     p_toolBar->addWidget(btn);
 }
 
-void ToolBarHelper::setupSettingsButton(MainWindow *p_win, QToolBar *p_toolBar)
+void ToolBarHelper::setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar)
 {
     const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
 
-    auto act = p_toolBar->addAction(generateIcon("settings_menu.svg"), MainWindow::tr("Settings"));
+    auto act = p_toolBar->addAction(generateIcon("menu.svg"), MainWindow::tr("Menu"));
     auto btn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));
     Q_ASSERT(btn);
     btn->setPopupMode(QToolButton::InstantPopup);
@@ -599,80 +597,70 @@ void ToolBarHelper::setupSettingsButton(MainWindow *p_win, QToolBar *p_toolBar)
     auto menu = WidgetsFactory::createMenu(p_toolBar);
     btn->setMenu(menu);
 
-    auto settingsAct = menu->addAction(MainWindow::tr("Settings"),
-                                       menu,
-                                       [p_win]() {
-                                           SettingsDialog dialog(p_win);
-                                           dialog.exec();
-                                       });
-    WidgetUtils::addActionShortcut(settingsAct,
-                                   coreConfig.getShortcut(CoreConfig::Shortcut::Settings));
-
-    menu->addSeparator();
-
-    menu->addAction(MainWindow::tr("Edit User Configuration File"),
-                    menu,
-                    []() {
-                        auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::User);
-                        auto paras = QSharedPointer<FileOpenParameters>::create();
-                        paras->m_sessionEnabled = false;
-                        emit VNoteX::getInst().openFileRequested(file, paras);
-                    });
+    {
+        auto settingsAct = menu->addAction(MainWindow::tr("Settings"),
+                                           menu,
+                                           [p_win]() {
+                                               SettingsDialog dialog(p_win);
+                                               dialog.exec();
+                                           });
+        WidgetUtils::addActionShortcut(settingsAct,
+                                       coreConfig.getShortcut(CoreConfig::Shortcut::Settings));
 
-    menu->addAction(MainWindow::tr("Open User Configuration Folder"),
-                    menu,
-                    []() {
-                        auto folderPath = ConfigMgr::getInst().getUserFolder();
-                        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
-                    });
+        menu->addSeparator();
 
-    menu->addAction(MainWindow::tr("Open Default Configuration Folder"),
-                    menu,
-                    []() {
-                        auto folderPath = ConfigMgr::getInst().getAppFolder();
-                        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
-                    });
+        menu->addAction(MainWindow::tr("Edit User Configuration File"),
+                        menu,
+                        []() {
+                            auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::User);
+                            auto paras = QSharedPointer<FileOpenParameters>::create();
+                            paras->m_sessionEnabled = false;
+                            emit VNoteX::getInst().openFileRequested(file, paras);
+                        });
 
-    menu->addSeparator();
+        menu->addAction(MainWindow::tr("Open User Configuration Folder"),
+                        menu,
+                        []() {
+                            auto folderPath = ConfigMgr::getInst().getUserFolder();
+                            WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
+                        });
 
-    {
-        auto act = menu->addAction(MainWindow::tr("Edit Markdown User Styles"),
-                                   menu,
-                                   []() {
-                                       const auto file = ConfigMgr::getInst().getUserMarkdownUserStyleFile();
-                                       auto paras = QSharedPointer<FileOpenParameters>::create();
-                                       paras->m_sessionEnabled = false;
-                                       paras->m_hooks[FileOpenParameters::PostSave] = []() {
-                                           qDebug() << "post save";
-                                           const auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();
-                                           HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownConfig, true);
-                                       };
-                                       emit VNoteX::getInst().openFileRequested(file, paras);
-                                   });
-        act->setStatusTip(MainWindow::tr("Edit the user styles of Markdown editor read mode"));
-    }
+        menu->addAction(MainWindow::tr("Open Default Configuration Folder"),
+                        menu,
+                        []() {
+                            auto folderPath = ConfigMgr::getInst().getAppFolder();
+                            WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
+                        });
 
-    menu->addSeparator();
+        menu->addSeparator();
 
-    menu->addAction(MainWindow::tr("Reset Main Window Layout"),
-                    menu,
-                    [p_win]() {
-                        p_win->resetStateAndGeometry();
-                    });
-}
+        {
+            auto act = menu->addAction(MainWindow::tr("Edit Markdown User Styles"),
+                                       menu,
+                                       []() {
+                                           const auto file = ConfigMgr::getInst().getUserMarkdownUserStyleFile();
+                                           auto paras = QSharedPointer<FileOpenParameters>::create();
+                                           paras->m_sessionEnabled = false;
+                                           paras->m_hooks[FileOpenParameters::PostSave] = []() {
+                                               qDebug() << "post save";
+                                               const auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();
+                                               HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownConfig, true);
+                                           };
+                                           emit VNoteX::getInst().openFileRequested(file, paras);
+                                       });
+            act->setStatusTip(MainWindow::tr("Edit the user styles of Markdown editor read mode"));
+        }
 
-void ToolBarHelper::setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar)
-{
-    const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
+        menu->addSeparator();
 
-    auto act = p_toolBar->addAction(generateIcon("menu.svg"), MainWindow::tr("Menu"));
-    auto btn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));
-    Q_ASSERT(btn);
-    btn->setPopupMode(QToolButton::InstantPopup);
-    btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
+        menu->addAction(MainWindow::tr("Reset Main Window Layout"),
+                        menu,
+                        [p_win]() {
+                            p_win->resetStateAndGeometry();
+                        });
+    }
 
-    auto menu = WidgetsFactory::createMenu(p_toolBar);
-    btn->setMenu(menu);
+    menu->addSeparator();
 
     menu->addAction(MainWindow::tr("View Logs"),
                     menu,

+ 0 - 2
src/widgets/toolbarhelper.h

@@ -46,8 +46,6 @@ namespace vnotex
 
         static void setupExpandButton(MainWindow *p_win, QToolBar *p_toolBar);
 
-        static void setupSettingsButton(MainWindow *p_win, QToolBar *p_toolBar);
-
         static void setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar);
 
         static void activateQuickAccess(const QString &p_file);

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است