summaryrefslogtreecommitdiff
path: root/ui/dockhandler.h
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2019-05-14 14:44:44 -0400
committerBrian Potchik <brian@vector35.com>2019-05-14 14:44:44 -0400
commita8b00d8ea6c6e0b5c39c08ef28da4abf06610e09 (patch)
tree54150252056ae9e109b7d6b151cf1b51aa0aa4c4 /ui/dockhandler.h
parent62cf046e921ff8917ad542bc8f6974ed4ee63bd9 (diff)
Add dynamic dock widget support for UI plugins.
Diffstat (limited to 'ui/dockhandler.h')
-rw-r--r--ui/dockhandler.h19
1 files changed, 15 insertions, 4 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);
};