toolbarhelper.cpp 25 KB

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