File: DAPMainView.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (117 lines) | stat: -rw-r--r-- 3,330 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#ifndef DAPMAINVIEW_H
#define DAPMAINVIEW_H

#include "UI.h"
#include "clModuleLogger.hpp"
#include "dap/Client.hpp"
#include "dap/DAPEvent.hpp"
#include "dap/dap.hpp"

#include <unordered_set>
#include <wx/timer.h>

class wxTimer;
class DebugAdapterClient;

// variable items client data
struct VariableClientData : public wxTreeItemData {
    int reference = wxNOT_FOUND;
    wxString value; // untrucated value
    VariableClientData(int ref, const wxString& v)
        : reference(ref)
        , value(v)
    {
    }
    virtual ~VariableClientData() {}
};

enum class FrameOrThread {
    THREAD,
    FRAME,
};

// every entry in the threads tree has this item data
struct FrameOrThreadClientData : public wxTreeItemData {
    FrameOrThread type;
    dap::StackFrame frame_info;
    dap::Thread thread_info;
    bool loaded = false;

    FrameOrThreadClientData(const dap::StackFrame& frameInfo)
        : type(FrameOrThread::FRAME)
        , frame_info(frameInfo)
    {
    }

    FrameOrThreadClientData(const dap::Thread& threadInfo)
        : type(FrameOrThread::THREAD)
        , thread_info(threadInfo)
    {
    }

    virtual ~FrameOrThreadClientData() {}

    bool IsFrame() const { return type == FrameOrThread::FRAME; }
    bool IsThread() const { return type == FrameOrThread::THREAD; }

    int GetId() const
    {
        if(IsFrame()) {
            return frame_info.id;
        } else {
            return thread_info.id;
        }
    }
};

/// --------------------------------------------------------------------

class DAPMainView : public DAPMainViewBase
{
    DebugAdapterClient* m_plugin = nullptr;
    wxTimer* m_timer = nullptr;
    // the variables displayed in the view are owned by this frame Id
    int m_scopesFrameId = wxNOT_FOUND;

    clModuleLogger& LOG;

protected:
    wxTreeItemId FindThreadNode(int threadId);
    wxTreeItemId FindVariableNode(int refId);

    FrameOrThreadClientData* GetFrameClientData(const wxTreeItemId& item);
    VariableClientData* GetVariableClientData(const wxTreeItemId& item);

    void OnTimerCheckCanInteract(wxTimerEvent& event);
    int GetThreadId(const wxTreeItemId& item);
    int GetVariableId(const wxTreeItemId& item);
    int GetFrameId(const wxTreeItemId& item);

    void DoThreadExpanding(const wxTreeItemId& item);
    bool DoCopyBacktrace(const wxTreeItemId& item, wxString* content);
    void OnThreadItemExpanding(wxTreeEvent& event);
    void OnFrameItemSelected(wxTreeEvent& event);
    void OnThreadsListMenu(wxTreeEvent& event);
    void OnVariablesMenu(wxTreeEvent& event);
    void OnScopeItemExpanding(wxTreeEvent& event);
    void Clear();

public:
    DAPMainView(wxWindow* parent, DebugAdapterClient* plugin, clModuleLogger& log);
    virtual ~DAPMainView();

    void UpdateThreads(int activeThreadId, dap::ThreadsResponse* response);
    void UpdateFrames(int threadId, dap::StackTraceResponse* response);
    void UpdateScopes(int frameId, dap::ScopesResponse* response);
    void UpdateVariables(int parentRef, dap::VariablesResponse* response);
    /**
     * @brief return list of thread-id that are expanded in the UI
     */
    std::unordered_set<int> GetExpandedThreads();

    void SetDisabled(bool b);
    bool IsDisabled() const;

    int GetCurrentFrameId() const { return m_scopesFrameId; }
};
#endif // DAPMAINVIEW_H