swift
fontmenus.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "fontmenus.h"
5 
6 #include <QShortcut>
7 
8 #include "gui/guiapplication.h"
9 #include "gui/shortcut.h"
10 
11 using namespace swift::misc;
12 using namespace swift::gui::components;
13 
14 namespace swift::gui::menus
15 {
16  const QStringList &CFontMenu::getLogCategories()
17  {
18  static const QStringList cats { CLogCategories::guiComponent() };
19  return cats;
20  }
21 
22  CFontMenu::CFontMenu(QWidget *widget, Qt::ShortcutContext shortcutContext) : IMenuDelegate(widget), m_widget(widget)
23  {
24  m_fontDialogAction.reset(new QAction(CIcons::font16(), "Font", this));
25  QObject::connect(m_fontDialogAction.data(), &QAction::triggered, this, &CFontMenu::changeFontDialog);
26 
27  m_fontSizePlusShortcut = new QShortcut(CShortcut::keyFontPlus(), m_widget);
28  m_fontSizePlusShortcut->setContext(shortcutContext);
29  QObject::connect(m_fontSizePlusShortcut, &QShortcut::activated, this, &CFontMenu::onFontSizePlus);
30 
31  m_fontSizeMinusShortcut = new QShortcut(CShortcut::keyFontMinus(), m_widget);
32  m_fontSizeMinusShortcut->setContext(shortcutContext);
33  QObject::connect(m_fontSizeMinusShortcut, &QShortcut::activated, this, &CFontMenu::onFontSizeMinus);
34 
35  m_fontResetShortcut = new QShortcut(CShortcut::keyFontReset(), m_widget);
36  m_fontResetShortcut->setContext(shortcutContext);
37  QObject::connect(m_fontResetShortcut, &QShortcut::activated, this, &CFontMenu::onFontReset);
38  }
39 
41  {
42  menuActions.addAction(m_fontDialogAction.data(), CMenuAction::pathFont());
43  this->nestedCustomMenu(menuActions);
44  }
45 
46  QList<QAction *> CFontMenu::getActions() const { return QList<QAction *>({ m_fontDialogAction.data() }); }
47 
48  QList<QShortcut *> CFontMenu::getShortcuts() const
49  {
50  return QList<QShortcut *>({ m_fontResetShortcut, m_fontSizeMinusShortcut, m_fontSizePlusShortcut });
51  }
52 
53  void CFontMenu::changeFontDialog()
54  {
55  Q_ASSERT_X(m_widget, Q_FUNC_INFO, "No widget");
56  if (!m_dialog)
57  {
58  m_dialog.reset(new CSettingsFontDialog(m_widget));
59  m_dialog->setModal(true);
60  }
61  m_dialog->setFont(m_widget->font());
62  const int r = m_dialog->exec();
63  if (r == QDialog::Rejected) { return; }
64  const QString qss(m_dialog->getQss());
65  m_widget->setStyleSheet(qss);
66  }
67 
68  void CFontMenu::onFontSizePlus()
69  {
70  if (!m_widget) { return; }
71  const int pt = m_widget->font().pointSize() + 1;
72  if (pt > 24) { return; }
73 
74  m_widget->setStyleSheet(""); // avoid Qt crash
75  m_widget->setStyleSheet(CStyleSheetUtility::asStylesheet(m_widget, pt));
76 
77  emit this->fontSizePlus();
78  }
79 
80  void CFontMenu::onFontSizeMinus()
81  {
82  if (!m_widget) { return; }
83  const int pt = m_widget->font().pointSize() - 1;
84  if (pt < 5) { return; }
85 
86  m_widget->setStyleSheet(""); // avoid Qt crash
87  m_widget->setStyleSheet(CStyleSheetUtility::asStylesheet(m_widget, pt));
88 
89  emit this->fontSizeMinus();
90  }
91 
92  void CFontMenu::onFontReset()
93  {
94  Q_ASSERT_X(m_widget, Q_FUNC_INFO, "No widget");
95  m_widget->setStyleSheet("");
96  }
97 } // namespace swift::gui::menus
static const QKeySequence & keyFontPlus()
Font plus.
Definition: shortcut.cpp:79
static const QKeySequence & keyFontReset()
Font reset.
Definition: shortcut.cpp:91
static const QKeySequence & keyFontMinus()
Font minus.
Definition: shortcut.cpp:85
static QString asStylesheet(const QString &fontFamily, const QString &fontSize, const QString &fontStyle, const QString &fontWeight, const QString &fontColorString={})
Parameters as stylesheet.
QList< QAction * > getActions() const
Allow to use the actions directly.
Definition: fontmenus.cpp:46
virtual void customMenu(CMenuActions &menuActions)
Display custom menu.
Definition: fontmenus.cpp:40
void fontSizePlus()
Font size signals.
void fontSizeMinus()
Font size signals.
QList< QShortcut * > getShortcuts() const
The shortcus owned by QWidget.
Definition: fontmenus.cpp:48
static const QString & pathFont()
Font menus (font size etc.)
Definition: menuaction.h:200
Bunch of CMenuAction objects.
Definition: menuaction.h:384
CMenuAction addAction(const CMenuAction &menuAction)
Add menu action.
Definition: menuaction.cpp:210
Interface to implement a custom menu.
Definition: menudelegate.h:21
void nestedCustomMenu(CMenuActions &menuActions) const
Delegate down one level.
Definition: menudelegate.h:49
static const QString & guiComponent()
GUI components.
Definition: logcategories.h:94
High level reusable GUI components.
Definition: aboutdialog.cpp:13
Free functions in swift::misc.