aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/widgets/WideBar.h
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-12-11 04:16:45 -0800
committerGitHub <noreply@github.com>2022-12-11 04:16:45 -0800
commitd95625ed88c30a58da050abff538a4b7f7157622 (patch)
treef9fcf09775ccd811ca7c380efcad75bd679226ed /launcher/ui/widgets/WideBar.h
parent5622bcc5632a0706634da1ab519a3346a018b159 (diff)
parent4a1d08261408b63308dc1164c687e53c4f1fd08e (diff)
downloadPrismLauncher-d95625ed88c30a58da050abff538a4b7f7157622.tar.gz
PrismLauncher-d95625ed88c30a58da050abff538a4b7f7157622.tar.bz2
PrismLauncher-d95625ed88c30a58da050abff538a4b7f7157622.zip
Merge pull request #486 from flowln/wide_bar_customization
Diffstat (limited to 'launcher/ui/widgets/WideBar.h')
-rw-r--r--launcher/ui/widgets/WideBar.h30
1 files changed, 25 insertions, 5 deletions
diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h
index 8ff62ef2..a0a7896c 100644
--- a/launcher/ui/widgets/WideBar.h
+++ b/launcher/ui/widgets/WideBar.h
@@ -2,9 +2,10 @@
#include <QAction>
#include <QMap>
+#include <QMenu>
#include <QToolBar>
-class QMenu;
+#include <memory>
class WideBar : public QToolBar {
Q_OBJECT
@@ -12,7 +13,7 @@ class WideBar : public QToolBar {
public:
explicit WideBar(const QString& title, QWidget* parent = nullptr);
explicit WideBar(QWidget* parent = nullptr);
- virtual ~WideBar();
+ ~WideBar() override = default;
void addAction(QAction* action);
void addSeparator();
@@ -23,12 +24,31 @@ class WideBar : public QToolBar {
void insertActionAfter(QAction* after, QAction* action);
QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString());
+ void showVisibilityMenu(const QPoint&);
+
+ // Ideally we would use a QBitArray for this, but it doesn't support string conversion,
+ // so using it in settings is very messy.
+
+ [[nodiscard]] QByteArray getVisibilityState() const;
+ void setVisibilityState(QByteArray&&);
private:
- struct BarEntry;
+ struct BarEntry {
+ enum class Type { None, Action, Separator, Spacer } type = Type::None;
+ QAction* bar_action = nullptr;
+ QAction* menu_action = nullptr;
+ };
- auto getMatching(QAction* act) -> QList<BarEntry*>::iterator;
+ auto getMatching(QAction* act) -> QList<BarEntry>::iterator;
+
+ /** Used to distinguish between versions of the WideBar with different actions */
+ [[nodiscard]] QByteArray getHash() const;
+ [[nodiscard]] bool checkHash(QByteArray const&) const;
private:
- QList<BarEntry*> m_entries;
+ QList<BarEntry> m_entries;
+
+ // Menu to toggle visibility from buttons in the bar
+ std::unique_ptr<QMenu> m_bar_menu = nullptr;
+ enum class MenuState { Fresh, Dirty } m_menu_state = MenuState::Dirty;
};