aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--launcher/ui/widgets/WideBar.cpp30
-rw-r--r--launcher/ui/widgets/WideBar.h6
2 files changed, 36 insertions, 0 deletions
diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp
index ed7dc5fa..2ad2caec 100644
--- a/launcher/ui/widgets/WideBar.cpp
+++ b/launcher/ui/widgets/WideBar.cpp
@@ -200,4 +200,34 @@ void WideBar::contextMenuEvent(QContextMenuEvent* event)
m_bar_menu->popup(event->globalPos());
}
+[[nodiscard]] QByteArray WideBar::getVisibilityState() const
+{
+ QByteArray state;
+
+ for (auto const& entry : m_entries) {
+ if (entry.type != BarEntry::Type::Action)
+ continue;
+
+ state.append(entry.bar_action->isVisible() ? '1' : '0');
+ }
+
+ return state;
+}
+
+void WideBar::setVisibilityState(QByteArray&& state)
+{
+ qsizetype i = 0;
+ for (auto& entry : m_entries) {
+ if (entry.type != BarEntry::Type::Action)
+ continue;
+ if (i == state.size())
+ break;
+
+ entry.bar_action->setVisible(state.at(i++) == '1');
+
+ // NOTE: This is needed so that disabled actions get reflected on the button when it is made visible.
+ static_cast<ActionButton*>(widgetForAction(entry.bar_action))->actionChanged();
+ }
+}
+
#include "WideBar.moc"
diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h
index 8421eaf4..0d60f8a4 100644
--- a/launcher/ui/widgets/WideBar.h
+++ b/launcher/ui/widgets/WideBar.h
@@ -26,6 +26,12 @@ class WideBar : public QToolBar {
QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString());
void contextMenuEvent(QContextMenuEvent*) override;
+ // 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 {
enum class Type { None, Action, Separator, Spacer } type = Type::None;