From 6dc73b519845a361327f5923ca30552d48d21201 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 12 Apr 2019 14:54:33 -0400 Subject: Add multiselect and keyboard navigation to graph view --- ui/flowgraphwidget.h | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'ui/flowgraphwidget.h') diff --git a/ui/flowgraphwidget.h b/ui/flowgraphwidget.h index 1ebaded2..8418a22c 100644 --- a/ui/flowgraphwidget.h +++ b/ui/flowgraphwidget.h @@ -59,6 +59,7 @@ class BINARYNINJAUIAPI FlowGraphWidget: public QAbstractScrollArea, public View, uint64_t address; size_t instrIndex; size_t lineIndexForAddress; + size_t tokenIndex; }; BinaryViewRef m_data; @@ -88,10 +89,15 @@ class BINARYNINJAUIAPI FlowGraphWidget: public QAbstractScrollArea, public View, bool m_scrollMode; int m_scrollBaseX, m_scrollBaseY; + bool m_mouseSelectMode; - FlowGraphNodeRef m_selectedNode; + FlowGraphNodeRef m_selectedNode, m_selectedEdgeSource; + bool m_selectedEdgeIncoming = false; + std::map m_selectedEdgeIncomingPriority, m_selectedEdgeOutgoingPriority; + BinaryNinja::FlowGraphEdge m_selectedEdge; CursorPosition m_cursorPos, m_selectionStartPos; HighlightTokenState m_highlight; + bool m_tokenSelection = false; ContextMenuManager m_contextMenuManager; QPointer m_commentDialog; @@ -138,6 +144,8 @@ protected: bool getNodeForMouseEvent(QMouseEvent* event, FlowGraphNodeRef& node); bool getLineForMouseEvent(QMouseEvent* event, CursorPosition& pos); + bool getEdgeForMouseEvent(QMouseEvent* event, FlowGraphNodeRef& source, + BinaryNinja::FlowGraphEdge& edge, bool& incoming); HighlightTokenState getTokenForMouseEvent(QMouseEvent* event); void showContextMenu(); @@ -147,6 +155,21 @@ protected: void setGraphInternal(FlowGraphRef graph, FlowGraphHistoryEntry* entry, bool useAddr, uint64_t addr, bool notify); + void up(bool selecting, size_t count = 1); + void down(bool selecting, size_t count = 1); + void left(bool selecting); + void right(bool selecting); + void leftToSymbol(bool selecting); + void rightToSymbol(bool selecting); + void pageUp(bool selecting); + void pageDown(bool selecting); + void moveToStartOfLine(bool selecting); + void moveToEndOfLine(bool selecting); + void moveToStartOfView(); + void selectAll(); + void selectNone(); + void navigateToHighlightedToken(); + public: FlowGraphWidget(QWidget* parent, BinaryViewRef view, FlowGraphRef graph = FlowGraphRef()); ~FlowGraphWidget(); @@ -214,6 +237,7 @@ public: void showTopNode(); void showNode(FlowGraphNodeRef node); void showLineInNode(FlowGraphNodeRef node, size_t lineIndex); + void ensureCursorVisible(); void viewInTypesView(std::string typeName); -- cgit v1.3.1