summaryrefslogtreecommitdiff
path: root/ui/dockhandler.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-03-19 15:41:08 -0400
committerRusty Wagner <rusty@vector35.com>2019-03-20 13:00:17 -0400
commit411acbaa4a1d217e731d3df0b189445117be3b26 (patch)
tree49b5c5290058ffb98dd23ec9a7c1a49921254d15 /ui/dockhandler.h
parentca1bc587c22928bbd7198813064c9615c3c12771 (diff)
Add in progress UI API headers
Diffstat (limited to 'ui/dockhandler.h')
-rw-r--r--ui/dockhandler.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/ui/dockhandler.h b/ui/dockhandler.h
new file mode 100644
index 00000000..08392532
--- /dev/null
+++ b/ui/dockhandler.h
@@ -0,0 +1,112 @@
+#pragma once
+
+#include <QtCore/QObject>
+#include <QtCore/QSettings>
+#include <QtWidgets/QDockWidget>
+#include <map>
+
+#include "binaryninjaapi.h"
+#include "action.h"
+#include "uitypes.h"
+
+class ContextMenuManager;
+class DockHandler;
+class Menu;
+class View;
+class ViewFrame;
+
+struct BINARYNINJAUIAPI DockProperties
+{
+ DockProperties() { };
+ DockProperties(QDockWidget* dw, bool vis, Qt::DockWidgetArea dar, Qt::Orientation dor, bool dvis, bool vs) :
+ dockWidget(dw), visibleState(vis), defaultArea(dar), defaultOrientation(dor), defaultVisibility(dvis),
+ viewSensitive(vs), neverBeenVisible(true), sizeStash(0, 0), actionOnShow(nullptr) { }
+ DockProperties(const DockProperties &dp) :
+ dockWidget(dp.dockWidget), visibleState(dp.visibleState), defaultArea(dp.defaultArea),
+ defaultOrientation(dp.defaultOrientation), defaultVisibility(dp.defaultVisibility),
+ viewSensitive(dp.viewSensitive), neverBeenVisible(dp.neverBeenVisible), sizeStash(dp.sizeStash), actionOnShow(dp.actionOnShow) { }
+
+ QDockWidget* dockWidget;
+ bool visibleState;
+ Qt::DockWidgetArea defaultArea;
+ Qt::Orientation defaultOrientation;
+ bool defaultVisibility;
+ bool viewSensitive;
+ bool neverBeenVisible;
+ QSize sizeStash;
+ std::function<void()> actionOnShow;
+};
+
+struct DockSizePrefs
+{
+ DockSizePrefs() { }
+ QList<QDockWidget*> docks;
+ QList<int> hDockSizes;
+ QList<int> vDockSizes;
+ bool nonUniformVisibility = false;
+};
+
+class BINARYNINJAUIAPI DockContextHandler
+{
+protected:
+ QString m_name;
+ UIActionHandler m_actionHandler;
+ ContextMenuManager* m_contextMenuManager = nullptr;
+ Menu* m_menu = nullptr;
+ QWidget* m_parentWindow;
+
+public:
+ DockContextHandler(QWidget* widget, const QString& name);
+ virtual ~DockContextHandler();
+
+ QWidget* getParentWindow() { return m_parentWindow; }
+
+ virtual void focusInput() { };
+ virtual bool isAvailable(ViewFrame* /*frame*/) { return true; };
+ virtual void notifyViewChanged(ViewFrame* /*frame*/) { };
+ virtual bool shouldBeVisible(ViewFrame* /*frame*/) { return true; };
+ virtual void updateFonts() { };
+};
+
+class BINARYNINJAUIAPI DockHandler: public QObject
+{
+ Q_OBJECT
+
+ int m_windowIndex = 0;
+ ViewFrame* m_viewFrame = nullptr;
+ View* m_view = nullptr;
+ BinaryViewRef m_data;
+ std::map<QString, DockProperties> m_docks;
+ bool m_resizeDocksRequest = false;
+ bool m_shouldResizeDocks = false;
+ std::map<Qt::DockWidgetArea, bool> m_enableHiddenGroupSave;
+
+public:
+ explicit DockHandler(QObject* parent, int windowIndex);
+
+ void close();
+ void notifyRestoredFromState();
+ 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);
+ QDockWidget* getDockWidget(const QString& name);
+ ViewFrame* getViewFrame() { return m_viewFrame; }
+ bool isVisible(const QString& name);
+ void setVisible(const QString& name, bool visible);
+
+ void saveState(QSettings& settings, const QString& windowStateName);
+ void restoreState(QSettings& settings, const QString& windowStateName);
+ void saveDockSizes(bool nullFrame = false);
+ void restoreDockSizes();
+
+ bool shouldResizeDocks();
+ void updateFonts();
+ void addActionOnShow(const QString& name, const std::function<void()>& action);
+
+ static DockHandler* getActiveDockHandler();
+
+public Q_SLOTS:
+ void viewChanged(ViewFrame* frame);
+ void topLevelChanged(bool topLevel);
+};