diff options
| author | Brian Potchik <brian@vector35.com> | 2019-05-14 14:44:44 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2019-05-14 14:44:44 -0400 |
| commit | a8b00d8ea6c6e0b5c39c08ef28da4abf06610e09 (patch) | |
| tree | 54150252056ae9e109b7d6b151cf1b51aa0aa4c4 | |
| parent | 62cf046e921ff8917ad542bc8f6974ed4ee63bd9 (diff) | |
Add dynamic dock widget support for UI plugins.
| -rw-r--r-- | ui/dockhandler.h | 19 | ||||
| -rw-r--r-- | ui/viewframe.h | 12 |
2 files changed, 22 insertions, 9 deletions
diff --git a/ui/dockhandler.h b/ui/dockhandler.h index eb64cfc2..e0b62c27 100644 --- a/ui/dockhandler.h +++ b/ui/dockhandler.h @@ -15,6 +15,7 @@ class Menu; class View; class ViewFrame; + struct BINARYNINJAUIAPI DockProperties { DockProperties() { }; @@ -37,6 +38,7 @@ struct BINARYNINJAUIAPI DockProperties std::function<void()> actionOnShow; }; + struct DockSizePrefs { DockSizePrefs() { } @@ -46,6 +48,7 @@ struct DockSizePrefs bool nonUniformVisibility = false; }; + class BINARYNINJAUIAPI DockContextHandler { protected: @@ -59,6 +62,7 @@ public: DockContextHandler(QWidget* widget, const QString& name); virtual ~DockContextHandler(); + QString getName() { return m_name; } QWidget* getParentWindow() { return m_parentWindow; } virtual void notifyFontChanged() { } @@ -70,6 +74,7 @@ public: }; Q_DECLARE_INTERFACE(DockContextHandler, "binary.ninja.dockcontexthandler/1.0"); + class BINARYNINJAUIAPI DockHandler: public QObject { Q_OBJECT @@ -83,10 +88,13 @@ class BINARYNINJAUIAPI DockHandler: public QObject bool m_shouldResizeDocks = false; std::map<Qt::DockWidgetArea, bool> m_enableHiddenGroupSave; - // TODO + uint64_t m_currentOffset = 0; + friend class DockContextHandler; - std::map<QString, DockContextHandler*> m_dockContexts; - DockContextHandler* getDockContextHandler(const QString&, QWidget* widget, bool viewSensitive = false); + std::map<QWidget*, DockContextHandler*> m_contexts; + std::map<QString, std::function<QWidget*(const QString&, ViewFrame*, BinaryViewRef)>> m_widgetFactories; + DockContextHandler* getDockContextHandler(QWidget* widget); + bool addDockWidget(const QString& name, QWidget* widget, Qt::DockWidgetArea area, Qt::Orientation orientation, bool defaultVisibility); public: explicit DockHandler(QObject* parent, int windowIndex); @@ -96,7 +104,9 @@ public: void reset(bool initial = false); void reset(const QString& name); void resizeDocksOnShow(bool resizeDocks) { m_resizeDocksRequest = resizeDocks; } - bool addDockWidget(const QString& name, QWidget* primaryWidget, Qt::DockWidgetArea area = Qt::BottomDockWidgetArea, Qt::Orientation orientation = Qt::Horizontal, bool defaultVisibility = false); + bool addDockWidget(QWidget* widget, Qt::DockWidgetArea area = Qt::BottomDockWidgetArea, Qt::Orientation orientation = Qt::Horizontal, bool defaultVisibility = false); + bool addDockWidget(const QString& name, const std::function<QWidget*(const QString&, ViewFrame*, BinaryViewRef)>& createWidget, Qt::DockWidgetArea area = Qt::BottomDockWidgetArea, Qt::Orientation orientation = Qt::Horizontal, bool defaultVisibility = false); + void createDynamicWidgets(ViewFrame* frame, BinaryViewRef data, std::map<QString, QPointer<QWidget>>& store, std::vector<QString> filter, bool isExcludeFilter = true); QDockWidget* getDockWidget(const QString& name); ViewFrame* getViewFrame() { return m_viewFrame; } bool isVisible(const QString& name); @@ -122,4 +132,5 @@ public Q_SLOTS: void viewChanged(ViewFrame* frame); void visibilityChanged(bool visible); void topLevelChanged(bool topLevel); + void removeWidget(QObject* object); }; diff --git a/ui/viewframe.h b/ui/viewframe.h index 8abb63fa..d08fa38e 100644 --- a/ui/viewframe.h +++ b/ui/viewframe.h @@ -10,6 +10,7 @@ #include <stack> #include <utility> #include <vector> +#include "dockhandler.h" #include "filecontext.h" #include "viewtype.h" #include "action.h" @@ -79,8 +80,9 @@ public: void setBinaryDataNavigable(bool navigable) { m_binaryDataNavigable = navigable; } virtual bool closeRequest() { return true; } - virtual void closing() {} - virtual void updateFonts() {} + virtual void closing() { } + virtual void updateFonts() { } + virtual void updateTheme() { } virtual void undo(); virtual void redo(); @@ -161,11 +163,12 @@ class BINARYNINJAUIAPI ViewFrame : public QWidget Q_OBJECT private: - QWidget* createView(const QString& typeName, ViewType* type, BinaryViewRef data, bool createExtendedViews = true); + QWidget* createView(const QString& typeName, ViewType* type, BinaryViewRef data, bool createDynamicWidgets = true); HistoryEntry* getHistoryEntry(); FileContext* m_context; BinaryViewRef m_data; + DockHandler* m_docks; QWidget* m_view; QWidget* m_viewContainer; QVBoxLayout* m_viewLayout; @@ -187,7 +190,7 @@ protected: void setView(QWidget* view); public: - explicit ViewFrame(QWidget* parent, FileContext* file, const QString& type, bool createExtendedViews = false); + explicit ViewFrame(QWidget* parent, FileContext* file, const QString& type, bool createDynamicWidgets = false); virtual ~ViewFrame(); FileContext* getFileContext() const { return m_context; } @@ -227,7 +230,6 @@ public: void closing(); void updateFonts(); - void updateOffset(uint64_t offset); void updateTheme(); void addHistoryEntry(); void back(); |
