#pragma once #include "lts_widgets_export.h" #include #include #include #include #include class QMenu; class QLabel; namespace Ui { class LtsToolBarArea; } namespace LtsWidgets { class LtsDragIcon; struct ShortCut { int key = 0; QShortcut* shortcut = nullptr; QString name; QString identifier; LtsDragIcon* icon = nullptr; QString keyName() const { return shortcut ? shortcut->key().toString() : QString(); } void clear(); explicit ShortCut(QWidget* parent = nullptr) : shortcut(new QShortcut(parent)) {} ~ShortCut() { delete shortcut; } ShortCut(const ShortCut& o) : key(o.key), name(o.name), identifier(o.identifier), icon(o.icon) { if (o.shortcut) { delete shortcut; shortcut = new QShortcut(o.shortcut->key(), qobject_cast(o.shortcut->parent()), nullptr, nullptr, o.shortcut->context()); } } ShortCut& operator=(const ShortCut& o) { if (&o == this) return *this; key = o.key; name = o.name; identifier = o.identifier; icon = o.icon; QWidget* parent = qobject_cast(shortcut->parent()); delete shortcut; if (o.shortcut) shortcut = new QShortcut(o.shortcut->key(), qobject_cast(o.shortcut->parent()), nullptr, nullptr, o.shortcut->context()); else shortcut = new QShortcut(parent); return *this; } }; class LTSWIDGETS_EXPORT LtsToolBarArea : public QWidget { Q_OBJECT public: explicit LtsToolBarArea(QWidget* parent = nullptr); ~LtsToolBarArea(); void addMenuEntry(LtsDragIcon* entry, LtsDragIcon* after = nullptr); void clearToolBarArea(); void setMenuEntries(const QVector& actions); QStringList menuEntries() const; bool setFunctionKey(int fkey, const QString& action); QMap functionKeys() const; bool removeFunctionKey(const QString& action); void removeMenuAction(LtsDragIcon* icon); public slots: void showContextMenu(const QPoint& pos); void functionKeyMenuTriggered(); protected: void dragEnterEvent(QDragEnterEvent* event) override; void dropEvent(QDropEvent* event) override; private: QMenu* functionKeyMenu(QWidget* parent); QString m_currentIdentifierForContextMenue; QVector m_buttonMap; QVector m_foreignButtonMap; QMap m_functionKeys; QLabel* m_dummyLabel; Ui::LtsToolBarArea* m_ui; void saveSettings(); }; } // namespace LtsWidgets