toolbarhelper.cpp 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. #include "toolbarhelper.h"
  2. #include <QToolBar>
  3. #include <QToolButton>
  4. #include <QMenu>
  5. #include <QDebug>
  6. #include <QWhatsThis>
  7. #include <QUrl>
  8. #include <QDockWidget>
  9. #include <QApplication>
  10. #include <QDir>
  11. #include <QFileDialog>
  12. #include "mainwindow.h"
  13. #include <core/vnotex.h>
  14. #include "widgetsfactory.h"
  15. #include <utils/iconutils.h>
  16. #include <utils/widgetutils.h>
  17. #include <utils/docsutils.h>
  18. #include <utils/pathutils.h>
  19. #include "fullscreentoggleaction.h"
  20. #include <core/configmgr.h>
  21. #include <core/coreconfig.h>
  22. #include <core/sessionconfig.h>
  23. #include <core/fileopenparameters.h>
  24. #include "propertydefs.h"
  25. #include "dialogs/settings/settingsdialog.h"
  26. #include "messageboxhelper.h"
  27. #include "dialogs/updater.h"
  28. using namespace vnotex;
  29. ToolBarHelper::ToolBarHelper(MainWindow *p_mainWindow)
  30. : m_mainWindow(p_mainWindow)
  31. {
  32. }
  33. static QToolBar *createToolBar(MainWindow *p_win, const QString &p_title, const QString &p_name)
  34. {
  35. auto tb = p_win->addToolBar(p_title);
  36. tb->setObjectName(p_name);
  37. tb->setMovable(false);
  38. return tb;
  39. }
  40. QToolBar *ToolBarHelper::setupFileToolBar(MainWindow *p_win, QToolBar *p_toolBar)
  41. {
  42. auto tb = p_toolBar;
  43. if (!tb) {
  44. tb = createToolBar(p_win, MainWindow::tr("File"), "FileToolBar");
  45. }
  46. const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
  47. // Notebook.
  48. {
  49. auto act = tb->addAction(generateIcon("notebook_menu.svg"), MainWindow::tr("Notebook"));
  50. auto toolBtn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));
  51. Q_ASSERT(toolBtn);
  52. toolBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
  53. toolBtn->setPopupMode(QToolButton::InstantPopup);
  54. toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
  55. auto btnMenu = WidgetsFactory::createMenu(tb);
  56. toolBtn->setMenu(btnMenu);
  57. btnMenu->addAction(generateIcon("new_notebook.svg"),
  58. MainWindow::tr("New Notebook"),
  59. btnMenu,
  60. []() {
  61. emit VNoteX::getInst().newNotebookRequested();
  62. });
  63. // New notebook from folder.
  64. btnMenu->addAction(generateIcon("new_notebook_from_folder.svg"),
  65. MainWindow::tr("New Notebook From Folder"),
  66. btnMenu,
  67. []() {
  68. emit VNoteX::getInst().newNotebookFromFolderRequested();
  69. });
  70. btnMenu->addSeparator();
  71. // Import notebook.
  72. btnMenu->addAction(generateIcon("import_notebook.svg"),
  73. MainWindow::tr("Open Other Notebooks"),
  74. btnMenu,
  75. []() {
  76. emit VNoteX::getInst().importNotebookRequested();
  77. });
  78. // Import notebook of VNote 2.
  79. btnMenu->addAction(generateIcon("import_notebook_of_vnote2.svg"),
  80. MainWindow::tr("Open Legacy Notebooks Of VNote 2"),
  81. btnMenu,
  82. []() {
  83. emit VNoteX::getInst().importLegacyNotebookRequested();
  84. });
  85. btnMenu->addSeparator();
  86. // Manage notebook.
  87. btnMenu->addAction(generateIcon("manage_notebooks.svg"),
  88. MainWindow::tr("Manage Notebooks"),
  89. btnMenu,
  90. []() {
  91. emit VNoteX::getInst().manageNotebooksRequested();
  92. });
  93. }
  94. // New Note.
  95. {
  96. auto newBtn = WidgetsFactory::createToolButton(tb);
  97. newBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
  98. // Popup menu.
  99. auto newMenu = WidgetsFactory::createMenu(tb);
  100. newBtn->setMenu(newMenu);
  101. // New note.
  102. auto newNoteAct = newMenu->addAction(generateIcon("new_note.svg"),
  103. MainWindow::tr("New Note"),
  104. newMenu,
  105. []() {
  106. emit VNoteX::getInst().newNoteRequested();
  107. });
  108. WidgetUtils::addActionShortcut(newNoteAct,
  109. coreConfig.getShortcut(CoreConfig::Shortcut::NewNote));
  110. newBtn->setDefaultAction(newNoteAct);
  111. // To hide the shortcut text shown in button.
  112. newBtn->setText(MainWindow::tr("New Note"));
  113. // New folder.
  114. newMenu->addAction(generateIcon("new_folder.svg"),
  115. MainWindow::tr("New Folder"),
  116. newMenu,
  117. []() {
  118. emit VNoteX::getInst().newFolderRequested();
  119. });
  120. newMenu->addSeparator();
  121. // Open file.
  122. newMenu->addAction(MainWindow::tr("Open File"),
  123. newMenu,
  124. [p_win]() {
  125. static QString lastDirPath = QDir::homePath();
  126. auto files = QFileDialog::getOpenFileNames(p_win, MainWindow::tr("Open File"), lastDirPath);
  127. if (files.isEmpty()) {
  128. return;
  129. }
  130. lastDirPath = QFileInfo(files[0]).path();
  131. for (const auto &file : files) {
  132. emit VNoteX::getInst().openFileRequested(file,
  133. QSharedPointer<FileOpenParameters>::create());
  134. }
  135. });
  136. tb->addWidget(newBtn);
  137. }
  138. // Import.
  139. {
  140. auto act = tb->addAction(generateIcon("import_menu.svg"), MainWindow::tr("Import"));
  141. auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));
  142. Q_ASSERT(btn);
  143. btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
  144. btn->setPopupMode(QToolButton::InstantPopup);
  145. btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
  146. auto newMenu = WidgetsFactory::createMenu(tb);
  147. btn->setMenu(newMenu);
  148. // Import file.
  149. newMenu->addAction(MainWindow::tr("Import File"),
  150. newMenu,
  151. []() {
  152. emit VNoteX::getInst().importFileRequested();
  153. });
  154. // Import folder.
  155. newMenu->addAction(MainWindow::tr("Import Folder"),
  156. newMenu,
  157. []() {
  158. emit VNoteX::getInst().importFolderRequested();
  159. });
  160. }
  161. // Export.
  162. {
  163. auto exportAct = tb->addAction(generateIcon("export_menu.svg"),
  164. MainWindow::tr("Export (Convert Format)"),
  165. []() {
  166. emit VNoteX::getInst().exportRequested();
  167. });
  168. WidgetUtils::addActionShortcut(exportAct,
  169. coreConfig.getShortcut(CoreConfig::Shortcut::Export));
  170. // To hide the shortcut text shown in button.
  171. auto toolBtn = dynamic_cast<QToolButton *>(tb->widgetForAction(exportAct));
  172. Q_ASSERT(toolBtn);
  173. toolBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
  174. toolBtn->setText(MainWindow::tr("Export"));
  175. }
  176. return tb;
  177. }
  178. QToolBar *ToolBarHelper::setupQuickAccessToolBar(MainWindow *p_win, QToolBar *p_toolBar)
  179. {
  180. auto tb = p_toolBar;
  181. if (!tb) {
  182. tb = createToolBar(p_win, MainWindow::tr("Quick Access"), "QuickAccessToolBar");
  183. }
  184. const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
  185. // Flash Page.
  186. {
  187. auto flashPageAct = tb->addAction(generateIcon("flash_page_menu.svg"),
  188. MainWindow::tr("Flash Page"),
  189. tb,
  190. [p_win]() {
  191. const auto &flashPage = ConfigMgr::getInst().getSessionConfig().getFlashPage();
  192. if (flashPage.isEmpty()) {
  193. MessageBoxHelper::notify(
  194. MessageBoxHelper::Type::Information,
  195. MainWindow::tr("Please set the Flash Page location in the Settings dialog first."),
  196. MainWindow::tr("Flash Page is a temporary page for a flash of inspiration."),
  197. QString(),
  198. p_win);
  199. return;
  200. }
  201. auto paras = QSharedPointer<FileOpenParameters>::create();
  202. paras->m_mode = ViewWindowMode::Edit;
  203. emit VNoteX::getInst().openFileRequested(flashPage, paras);
  204. });
  205. WidgetUtils::addActionShortcut(flashPageAct,
  206. coreConfig.getShortcut(CoreConfig::Shortcut::FlashPage));
  207. }
  208. // Quick Access.
  209. {
  210. auto toolBtn = WidgetsFactory::createToolButton(tb);
  211. auto btnMenu = WidgetsFactory::createMenu(tb);
  212. toolBtn->setMenu(btnMenu);
  213. // Quick Acces.
  214. auto quickAccessAct = btnMenu->addAction(generateIcon("quick_access_menu.svg"), MainWindow::tr("Quick Access"));
  215. MainWindow::connect(quickAccessAct, &QAction::triggered,
  216. p_win, [p_win]() {
  217. const auto &quickAccess = ConfigMgr::getInst().getSessionConfig().getQuickAccessFiles();
  218. if (quickAccess.isEmpty()) {
  219. MessageBoxHelper::notify(
  220. MessageBoxHelper::Type::Information,
  221. MainWindow::tr("Please pin files to Quick Access first."),
  222. MainWindow::tr("Files could be pinned to Quick Access via context menu."),
  223. MainWindow::tr("Quick Access could be managed in the Settings dialog."),
  224. p_win);
  225. return;
  226. }
  227. emit VNoteX::getInst().openFileRequested(quickAccess.first(),
  228. QSharedPointer<FileOpenParameters>::create());
  229. });
  230. WidgetUtils::addActionShortcut(quickAccessAct,
  231. coreConfig.getShortcut(CoreConfig::Shortcut::QuickAccess));
  232. toolBtn->setDefaultAction(quickAccessAct);
  233. MainWindow::connect(btnMenu, &QMenu::aboutToShow,
  234. btnMenu, [btnMenu]() {
  235. btnMenu->clear();
  236. const auto &quickAccess = ConfigMgr::getInst().getSessionConfig().getQuickAccessFiles();
  237. if (quickAccess.isEmpty()) {
  238. auto act = btnMenu->addAction(MainWindow::tr("Quick Access Not Set"));
  239. act->setEnabled(false);
  240. return;
  241. }
  242. for (const auto &file : quickAccess) {
  243. auto act = btnMenu->addAction(PathUtils::fileName(file));
  244. act->setData(file);
  245. act->setToolTip(file);
  246. }
  247. });
  248. MainWindow::connect(btnMenu, &QMenu::triggered,
  249. btnMenu, [](QAction *p_act) {
  250. emit VNoteX::getInst().openFileRequested(p_act->data().toString(),
  251. QSharedPointer<FileOpenParameters>::create());
  252. });
  253. tb->addWidget(toolBtn);
  254. }
  255. return tb;
  256. }
  257. QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_toolBar)
  258. {
  259. auto tb = p_toolBar;
  260. if (!tb) {
  261. tb = createToolBar(p_win, MainWindow::tr("Settings"), "SettingsToolBar");
  262. }
  263. // Spacer.
  264. addSpacer(tb);
  265. // Expand.
  266. {
  267. const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
  268. auto btn = WidgetsFactory::createToolButton(tb);
  269. auto menu = WidgetsFactory::createMenu(tb);
  270. btn->setMenu(menu);
  271. auto expandAct = menu->addAction(generateIcon("expand.svg"),
  272. MainWindow::tr("Expand Content Area"));
  273. WidgetUtils::addActionShortcut(expandAct,
  274. coreConfig.getShortcut(CoreConfig::Shortcut::ExpandContentArea));
  275. expandAct->setCheckable(true);
  276. MainWindow::connect(expandAct, &QAction::triggered,
  277. p_win, &MainWindow::setContentAreaExpanded);
  278. MainWindow::connect(p_win, &MainWindow::layoutChanged,
  279. [expandAct, p_win]() {
  280. expandAct->setChecked(p_win->isContentAreaExpanded());
  281. });
  282. btn->setDefaultAction(expandAct);
  283. {
  284. auto fullScreenAct = new FullScreenToggleAction(p_win,
  285. generateIcon("fullscreen.svg"),
  286. menu);
  287. const auto shortcut = coreConfig.getShortcut(CoreConfig::Shortcut::FullScreen);
  288. WidgetUtils::addActionShortcut(fullScreenAct, shortcut);
  289. MainWindow::connect(fullScreenAct, &FullScreenToggleAction::fullScreenToggled,
  290. p_win, [shortcut](bool p_fullScreen) {
  291. if (p_fullScreen) {
  292. VNoteX::getInst().showTips(
  293. MainWindow::tr("Press %1 To Exit Full Screen").arg(shortcut));
  294. } else {
  295. VNoteX::getInst().showTips("");
  296. }
  297. });
  298. menu->addAction(fullScreenAct);
  299. }
  300. auto stayOnTopAct = menu->addAction(generateIcon("stay_on_top.svg"), MainWindow::tr("Stay On Top"),
  301. p_win, &MainWindow::setStayOnTop);
  302. stayOnTopAct->setCheckable(true);
  303. WidgetUtils::addActionShortcut(stayOnTopAct,
  304. coreConfig.getShortcut(CoreConfig::Shortcut::StayOnTop));
  305. menu->addSeparator();
  306. {
  307. // Windows.
  308. // MainWindow will clear the title of the dock widget for the tab bar, so we need to use
  309. // another action to wrap the no-text action.
  310. auto subMenu = menu->addMenu(MainWindow::tr("Windows"));
  311. for (auto dock : p_win->getDocks()) {
  312. // @act is owned by the QDockWidget.
  313. auto act = dock->toggleViewAction();
  314. auto actWrapper = subMenu->addAction(act->text());
  315. actWrapper->setCheckable(act->isCheckable());
  316. actWrapper->setChecked(act->isChecked());
  317. MainWindow::connect(act, &QAction::toggled,
  318. actWrapper, [actWrapper](bool checked) {
  319. if (actWrapper->isChecked() != checked) {
  320. actWrapper->setChecked(checked);
  321. }
  322. });
  323. MainWindow::connect(actWrapper, &QAction::triggered,
  324. act, [p_win, act]() {
  325. act->trigger();
  326. p_win->updateDockWidgetTabBar();
  327. });
  328. }
  329. }
  330. tb->addWidget(btn);
  331. }
  332. // Settings.
  333. {
  334. const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
  335. auto act = tb->addAction(generateIcon("settings_menu.svg"), MainWindow::tr("Settings"));
  336. auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));
  337. Q_ASSERT(btn);
  338. btn->setPopupMode(QToolButton::InstantPopup);
  339. btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
  340. auto menu = WidgetsFactory::createMenu(tb);
  341. btn->setMenu(menu);
  342. auto settingsAct = menu->addAction(generateIcon("settings.svg"),
  343. MainWindow::tr("Settings"),
  344. menu,
  345. [p_win]() {
  346. SettingsDialog dialog(p_win);
  347. dialog.exec();
  348. });
  349. WidgetUtils::addActionShortcut(settingsAct,
  350. coreConfig.getShortcut(CoreConfig::Shortcut::Settings));
  351. menu->addSeparator();
  352. menu->addAction(MainWindow::tr("Open User Configuration Folder"),
  353. menu,
  354. []() {
  355. auto folderPath = ConfigMgr::getInst().getUserFolder();
  356. WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
  357. });
  358. menu->addAction(MainWindow::tr("Open Default Configuration Folder"),
  359. menu,
  360. []() {
  361. auto folderPath = ConfigMgr::getInst().getAppFolder();
  362. WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
  363. });
  364. menu->addSeparator();
  365. menu->addAction(MainWindow::tr("Edit User Configuration"),
  366. menu,
  367. []() {
  368. auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::User);
  369. auto paras = QSharedPointer<FileOpenParameters>::create();
  370. emit VNoteX::getInst().openFileRequested(file, paras);
  371. });
  372. menu->addAction(MainWindow::tr("Open Default Configuration"),
  373. menu,
  374. []() {
  375. auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::App);
  376. auto paras = QSharedPointer<FileOpenParameters>::create();
  377. paras->m_readOnly = true;
  378. emit VNoteX::getInst().openFileRequested(file, paras);
  379. });
  380. menu->addSeparator();
  381. menu->addAction(MainWindow::tr("Reset Main Window Layout"),
  382. menu,
  383. [p_win]() {
  384. p_win->resetStateAndGeometry();
  385. });
  386. menu->addSeparator();
  387. menu->addAction(MainWindow::tr("Restart"),
  388. menu,
  389. [p_win]() {
  390. p_win->restart();
  391. });
  392. auto quitAct = menu->addAction(MainWindow::tr("Quit"),
  393. menu,
  394. [p_win]() {
  395. p_win->quitApp();
  396. });
  397. quitAct->setMenuRole(QAction::QuitRole);
  398. WidgetUtils::addActionShortcut(quitAct,
  399. coreConfig.getShortcut(CoreConfig::Shortcut::Quit));
  400. }
  401. // Help.
  402. {
  403. auto act = tb->addAction(generateIcon("help_menu.svg"), MainWindow::tr("Help"));
  404. auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));
  405. Q_ASSERT(btn);
  406. btn->setPopupMode(QToolButton::InstantPopup);
  407. btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
  408. auto menu = WidgetsFactory::createMenu(tb);
  409. btn->setMenu(menu);
  410. auto whatsThisAct = menu->addAction(generateIcon("whatsthis.svg"),
  411. MainWindow::tr("What's This?"),
  412. menu,
  413. []() {
  414. QWhatsThis::enterWhatsThisMode();
  415. });
  416. whatsThisAct->setToolTip(MainWindow::tr("Enter WhatsThis mode and click somewhere to show help information"));
  417. menu->addSeparator();
  418. menu->addAction(MainWindow::tr("Shortcuts Help"),
  419. menu,
  420. []() {
  421. const auto file = DocsUtils::getDocFile(QStringLiteral("shortcuts.md"));
  422. if (!file.isEmpty()) {
  423. auto paras = QSharedPointer<FileOpenParameters>::create();
  424. paras->m_readOnly = true;
  425. emit VNoteX::getInst().openFileRequested(file, paras);
  426. }
  427. });
  428. menu->addAction(MainWindow::tr("Markdown Guide"),
  429. menu,
  430. []() {
  431. const auto file = DocsUtils::getDocFile(QStringLiteral("markdown_guide.md"));
  432. if (!file.isEmpty()) {
  433. auto paras = QSharedPointer<FileOpenParameters>::create();
  434. paras->m_readOnly = true;
  435. emit VNoteX::getInst().openFileRequested(file, paras);
  436. }
  437. });
  438. menu->addSeparator();
  439. menu->addAction(MainWindow::tr("View Logs"),
  440. menu,
  441. []() {
  442. const auto file = ConfigMgr::getInst().getLogFile();
  443. if (QFileInfo::exists(file)) {
  444. auto paras = QSharedPointer<FileOpenParameters>::create();
  445. paras->m_readOnly = true;
  446. emit VNoteX::getInst().openFileRequested(file, paras);
  447. }
  448. });
  449. menu->addSeparator();
  450. menu->addAction(MainWindow::tr("%1 Home Page").arg(qApp->applicationDisplayName()),
  451. menu,
  452. []() {
  453. WidgetUtils::openUrlByDesktop(QUrl("https://vnotex.github.io/vnote"));
  454. });
  455. menu->addAction(MainWindow::tr("Feedback and Discussions"),
  456. menu,
  457. []() {
  458. WidgetUtils::openUrlByDesktop(QUrl("https://github.com/vnotex/vnote/discussions"));
  459. });
  460. menu->addSeparator();
  461. menu->addAction(MainWindow::tr("Check for Updates"),
  462. menu,
  463. [p_win]() {
  464. Updater updater(p_win);
  465. updater.exec();
  466. });
  467. menu->addAction(MainWindow::tr("About"),
  468. menu,
  469. [p_win]() {
  470. auto info = MainWindow::tr("<h3>%1</h3>\n<span>%2</span>\n").arg(qApp->applicationDisplayName(),
  471. qApp->applicationVersion());
  472. const auto text = DocsUtils::getDocText(QStringLiteral("about_vnotex.txt"));
  473. QMessageBox::about(p_win, MainWindow::tr("About"), info + text);
  474. });
  475. auto aboutQtAct = menu->addAction(MainWindow::tr("About Qt"));
  476. aboutQtAct->setMenuRole(QAction::AboutQtRole);
  477. MainWindow::connect(aboutQtAct, &QAction::triggered,
  478. qApp, &QApplication::aboutQt);
  479. }
  480. return tb;
  481. }
  482. static const QString c_fgPalette = QStringLiteral("widgets#toolbar#icon#fg");
  483. static const QString c_disabledPalette = QStringLiteral("widgets#toolbar#icon#disabled#fg");
  484. static const QString c_dangerousPalette = QStringLiteral("widgets#toolbar#icon#danger#fg");
  485. QIcon ToolBarHelper::generateIcon(const QString &p_iconName)
  486. {
  487. const auto &themeMgr = VNoteX::getInst().getThemeMgr();
  488. const auto fg = themeMgr.paletteColor(c_fgPalette);
  489. const auto disabledFg = themeMgr.paletteColor(c_disabledPalette);
  490. QVector<IconUtils::OverriddenColor> colors;
  491. colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal));
  492. colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled));
  493. auto iconFile = themeMgr.getIconFile(p_iconName);
  494. return IconUtils::fetchIcon(iconFile, colors);
  495. }
  496. QIcon ToolBarHelper::generateDangerousIcon(const QString &p_iconName)
  497. {
  498. const auto &themeMgr = VNoteX::getInst().getThemeMgr();
  499. const auto fg = themeMgr.paletteColor(c_fgPalette);
  500. const auto disabledFg = themeMgr.paletteColor(c_disabledPalette);
  501. const auto dangerousFg = themeMgr.paletteColor(c_dangerousPalette);
  502. QVector<IconUtils::OverriddenColor> colors;
  503. colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal));
  504. colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled));
  505. colors.push_back(IconUtils::OverriddenColor(dangerousFg, QIcon::Active));
  506. auto iconFile = themeMgr.getIconFile(p_iconName);
  507. return IconUtils::fetchIcon(iconFile, colors);
  508. }
  509. void ToolBarHelper::setupToolBars()
  510. {
  511. m_toolBars.clear();
  512. auto fileTab = setupFileToolBar(m_mainWindow, nullptr);
  513. m_toolBars.insert(fileTab->objectName(), fileTab);
  514. auto quickAccessTb = setupQuickAccessToolBar(m_mainWindow, nullptr);
  515. m_toolBars.insert(quickAccessTb->objectName(), quickAccessTb);
  516. auto settingsToolBar = setupSettingsToolBar(m_mainWindow, nullptr);
  517. m_toolBars.insert(settingsToolBar->objectName(), settingsToolBar);
  518. }
  519. void ToolBarHelper::setupToolBars(QToolBar *p_toolBar)
  520. {
  521. m_toolBars.clear();
  522. p_toolBar->setObjectName(QStringLiteral("UnifiedToolBar"));
  523. p_toolBar->setMovable(false);
  524. m_mainWindow->addToolBar(p_toolBar);
  525. setupFileToolBar(m_mainWindow, p_toolBar);
  526. setupQuickAccessToolBar(m_mainWindow, p_toolBar);
  527. setupSettingsToolBar(m_mainWindow, p_toolBar);
  528. m_toolBars.insert(p_toolBar->objectName(), p_toolBar);
  529. }
  530. void ToolBarHelper::addSpacer(QToolBar *p_toolBar)
  531. {
  532. auto spacer = new QWidget(p_toolBar);
  533. spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
  534. auto act = p_toolBar->addWidget(spacer);
  535. act->setEnabled(false);
  536. }