1 /*
2  * This file is part of the Code::Blocks IDE and licensed under the GNU General Public License, version 3
3  * http://www.gnu.org/licenses/gpl-3.0.html
4  */
5 
6 #ifndef X_DEBUGGER_MENU_H
7 #define X_DEBUGGER_MENU_H
8 
9 #include <wx/event.h>
10 #include <cbdebugger_interfaces.h>
11 
12 class cbDebuggerPlugin;
13 class wxToolBar;
14 
15 class DebuggerMenuHandler : public wxEvtHandler, public cbDebuggerMenuHandler
16 {
17     public:
18         DebuggerMenuHandler();
19 
20         void RegisterDefaultWindowItems();
21         void AppendWindowMenuItems(wxMenu &menu);
22 
23     public: // derived from cbDebuggerMenuHandler
24         virtual void SetActiveDebugger(cbDebuggerPlugin *active);
25         virtual void MarkActiveTargetAsValid(bool valid);
26         virtual void RebuildMenus();
27         virtual void BuildContextMenu(wxMenu &menu, const wxString& word_at_caret, bool is_running);
28 
29         virtual bool RegisterWindowMenu(const wxString &name, const wxString &help, cbDebuggerWindowMenuItem *item);
30         virtual void UnregisterWindowMenu(const wxString &name);
31     private:
32         void OnUpdateUI(wxUpdateUIEvent& event);
33         void OnStart(wxCommandEvent& event);
34         void OnBreak(wxCommandEvent& event);
35         void OnStop(wxCommandEvent& event);
36 
37         void OnContinue(wxCommandEvent& event);
38         void OnNext(wxCommandEvent& event);
39         void OnNextInstr(wxCommandEvent& event);
40         void OnStepIntoInstr(wxCommandEvent& event);
41         void OnStep(wxCommandEvent& event);
42         void OnStepOut(wxCommandEvent& event);
43         void OnRunToCursor(wxCommandEvent& event);
44         void OnSetNextStatement(wxCommandEvent& event);
45 
46         void OnToggleBreakpoint(wxCommandEvent& event);
47         void OnRemoveAllBreakpoints(wxCommandEvent& event);
48         void OnAddDataBreakpoint(wxCommandEvent& event);
49         void OnSendCommand(wxCommandEvent& event);
50         void OnAttachToProcess(wxCommandEvent& event);
51         void OnDetachFromProcess(wxCommandEvent& event);
52         void OnAddWatch(wxCommandEvent& event);
53 
54         void OnActiveDebuggerClick(wxCommandEvent& event);
55         void OnActiveDebuggerTargetsDefaultClick(wxCommandEvent& event);
56 
57         void LogActiveConfig();
58 
59         void OnWindowMenuItemUpdateUI(wxUpdateUIEvent &event);
60         void OnWindowMenuItemClicked(wxCommandEvent &event);
61 
62         DECLARE_EVENT_TABLE();
63     private:
64         struct WindowMenuItem
65         {
66             cb::shared_ptr<cbDebuggerWindowMenuItem> item;
67             wxString name, help;
68         };
69         typedef std::map<long, WindowMenuItem> WindowMenuItemsMap;
70     private:
71         WindowMenuItemsMap m_windowMenuItems;
72         cbDebuggerPlugin* m_activeDebugger;
73         wxString m_lastCommand;
74         bool m_disableContinue;
75 };
76 
77 class DebuggerToolbarHandler : public wxEvtHandler
78 {
79         friend class DebuggerManager;
80     public:
81         DebuggerToolbarHandler(DebuggerMenuHandler *menuHandler);
82         wxToolBar* GetToolbar(bool create = true);
83     private:
84         void OnUpdateUI(wxUpdateUIEvent& event);
85         void OnToolInfo(wxCommandEvent& event);
86         void OnDebugWindows(wxCommandEvent& event);
87         void OnStop(wxCommandEvent& event);
88 
89         wxToolBar *m_Toolbar;
90         DebuggerMenuHandler *m_menuHandler;
91 
92         DECLARE_EVENT_TABLE();
93 };
94 
95 #endif // X_DEBUGGER_MENU_H
96 
97