29 |
ICON_PATH = "/system/ui/icons/Debugger" |
ICON_PATH = "/system/ui/icons/Debugger" |
30 |
|
|
31 |
def DebuggerRenderFox.start(plugin) |
def DebuggerRenderFox.start(plugin) |
32 |
plugin["/system/ui/components/Debugger"].subscribe do |event, slot| |
|
|
if (event == :notify_slot_add && slot.parent.name == "Debugger") |
|
|
Renderer.new(plugin, slot) |
|
|
end |
|
|
end |
|
|
|
|
33 |
plugin[ICON_PATH].subscribe do |event, slot| |
plugin[ICON_PATH].subscribe do |event, slot| |
34 |
if event == :notify_slot_add |
if event == :notify_slot_add |
35 |
app = plugin['/system/ui/fox/FXApp'].data |
app = plugin['/system/ui/fox/FXApp'].data |
41 |
end |
end |
42 |
end |
end |
43 |
|
|
44 |
|
# Add command |
45 |
|
debugRenderer = Renderer.new(plugin) |
46 |
|
|
47 |
|
plugin["/system/ui/commands"].manager.add("App/View/Debugger","Debugger","View Debugger") do |cmd_slot| |
48 |
|
debugRenderer.toggle |
49 |
|
end |
50 |
|
plugin["/system/ui/commands"].manager.command("App/View/Debugger").icon = "/system/ui/icons/Debugger/startDebugger" |
51 |
|
plugin["/system/ui/keys"].manager.bind("App/View/Debugger", :F8) |
52 |
|
|
53 |
|
plugin["/system/ui/current/ToolBar"].manager.add_command("View", "App/View/Debugger") |
54 |
|
|
55 |
|
# Insert the inspector in the Tools menu |
56 |
|
viewmenu = plugin["/system/ui/components/MenuPane/View_menu"].manager |
57 |
|
viewmenu.add_command("App/View/Debugger") |
58 |
|
viewmenu.uncheck("App/View/Debugger") |
59 |
|
|
60 |
|
#plugin["/system/ui/components/Debugger"].subscribe do |event, slot| |
61 |
|
# if (event == :notify_slot_add && slot.parent.name == "Debugger") |
62 |
|
# Renderer.new(plugin, slot) |
63 |
|
# end |
64 |
|
#end |
65 |
|
|
66 |
# Now only is the plugin ready |
# Now only is the plugin ready |
67 |
plugin.transition(FreeBASE::RUNNING) |
plugin.transition(FreeBASE::RUNNING) |
68 |
end |
end |
76 |
include Fox |
include Fox |
77 |
attr_reader :plugin |
attr_reader :plugin |
78 |
|
|
79 |
def initialize(plugin, slot) |
def initialize(plugin) |
80 |
|
@docked = false |
81 |
@plugin = plugin |
@plugin = plugin |
82 |
@slot = slot |
@cmd_mgr = plugin['/system/ui/commands'].manager |
83 |
|
@viewmenu = plugin["/system/ui/components/MenuPane/View_menu"].manager |
84 |
@icons = @plugin[ICON_PATH] |
@icons = @plugin[ICON_PATH] |
|
|
|
85 |
@app = plugin['/system/ui/fox/FXApp'].data |
@app = plugin['/system/ui/fox/FXApp'].data |
86 |
|
|
|
@slot.subscribe do |event, slot| |
|
|
if event==:notify_slot_prune and slot == @slot |
|
|
#TODO: remove UI component |
|
|
end |
|
|
end |
|
|
|
|
87 |
# Create the frame for this plugin, attach it to the main window. |
# Create the frame for this plugin, attach it to the main window. |
88 |
# It will be reparented later on when the debugger is inserted |
# It will be reparented later on when the debugger is inserted |
89 |
# in a dockpane. Also hide it because we don;t want to see it now. |
# in a dockpane. Also hide it because we don;t want to see it now. |
94 |
@frm.hide |
@frm.hide |
95 |
@frm.create |
@frm.create |
96 |
create_ui() |
create_ui() |
|
@plugin.log_info << "Debugger Renderer created for : #{@slot.path}" |
|
97 |
#@slot.subscribe do |event, slot| |
#@slot.subscribe do |event, slot| |
98 |
# update(event,slot) if event == :notify_data_set |
# update(event,slot) if event == :notify_data_set |
99 |
#end |
#end |
100 |
dockpane_slot = plugin['/system/ui/components/DockPane'].manager.add("Debugger") |
@dockpane_slot = plugin['/system/ui/components/DockPane'].manager.add("Debugger") |
101 |
dockpane_slot.data = @frm |
@dockpane_slot.data = @frm |
102 |
dockpane_slot.manager.dock('south') |
@debugger = nil |
|
|
|
103 |
end |
end |
104 |
|
|
105 |
|
def toggle |
106 |
|
unless @docked |
107 |
|
@dockpane_slot.manager.dock('south') |
108 |
|
@docked = true |
109 |
|
@viewmenu.check("App/View/Debugger") |
110 |
|
update |
111 |
|
@checked = true |
112 |
|
#@plugin.properties["Open"] = true |
113 |
|
else |
114 |
|
if @checked |
115 |
|
@dockpane_slot.manager.hide |
116 |
|
@viewmenu.uncheck("App/View/Debugger") |
117 |
|
@checked = false |
118 |
|
#@plugin.properties["Open"] = false |
119 |
|
else |
120 |
|
@dockpane_slot.manager.show |
121 |
|
@checked = true |
122 |
|
@viewmenu.check("App/View/Debugger") |
123 |
|
#@plugin.properties["Open"] = true |
124 |
|
end |
125 |
|
end |
126 |
|
end |
127 |
|
|
128 |
|
|
129 |
## |
## |
130 |
# Create the debugger UI and put it in a top frame |
# Create the debugger UI and put it in a top frame |
131 |
# |
# |
132 |
def create_ui |
def create_ui |
|
|
|
|
# All plugins that goes into a dockpane must have an attr_frame attribute |
|
|
# in place which contain the top frame in which the plugin UI is built. |
|
|
# This attribute will be used by the DockPane renderer to display the |
|
|
# plugin frame in the right dockpane. |
|
|
@slot.attr_frame = @frm |
|
133 |
|
|
134 |
# now build the inside of the top frame |
# now build the inside of the top frame |
135 |
mx = FXMatrix.new(@frm,2, FRAME_NONE|MATRIX_BY_COLUMNS|PACK_UNIFORM_WIDTH|LAYOUT_FILL_Y) |
mx = FXMatrix.new(@frm,2, FRAME_NONE|MATRIX_BY_COLUMNS|PACK_UNIFORM_WIDTH|LAYOUT_FILL_Y) |
353 |
# Update the frame list (combobox) |
# Update the frame list (combobox) |
354 |
# |
# |
355 |
def update_frame_list(fr_list) |
def update_frame_list(fr_list) |
356 |
|
return unless @debugger |
357 |
@cbox_frame.clearItems |
@cbox_frame.clearItems |
358 |
idx = 0 |
idx = 0 |
359 |
fr_list.each do |f| |
fr_list.each do |f| |
388 |
end |
end |
389 |
|
|
390 |
## |
## |
|
# The debugger renderer is closed. An empty frame shows up |
|
|
# |
|
|
def close |
|
|
@frm.hide |
|
|
@frm.destroy |
|
|
@plugin.log_info << "Debugger Renderer closed : #{@slot.path}" |
|
|
@base_slot[@slot.name].prune |
|
|
end |
|
|
|
|
|
## |
|
391 |
# monitor the debuggee stderr and print any incoming text |
# monitor the debuggee stderr and print any incoming text |
392 |
# to the debugger text console |
# to the debugger text console |
393 |
# |
# |
533 |
|
|
534 |
|
|
535 |
def onCmdStart(sender, sel, ptr) |
def onCmdStart(sender, sel, ptr) |
536 |
|
return 0 unless @debugger |
537 |
@slot.manager.start |
@slot.manager.start |
538 |
return 1 |
return 1 |
539 |
end |
end |
540 |
|
|
541 |
def onUpdStart(sender, sel, ptr) |
def onUpdStart(sender, sel, ptr) |
542 |
update_state(sender,sel,ptr, !@slot.manager.running?) |
if @debugger |
543 |
|
update_state(sender,sel,ptr, !@debugger.running?) |
544 |
|
else |
545 |
|
update_state(sender,sel,ptr, false) |
546 |
|
end |
547 |
return 1 |
return 1 |
548 |
end |
end |
549 |
|
|
550 |
def onCmdStop(sender, sel, ptr) |
def onCmdStop(sender, sel, ptr) |
551 |
@slot.manager.stop |
@debugger.stop if @debugger |
552 |
return 1 |
return 1 |
553 |
end |
end |
554 |
|
|
555 |
def onUpdStop(sender, sel, ptr) |
def onUpdStop(sender, sel, ptr) |
556 |
update_state(sender,sel,ptr, @slot.manager.running?) |
if @debugger |
557 |
|
update_state(sender,sel,ptr, @debugger.running?) |
558 |
|
else |
559 |
|
update_state(sender,sel,ptr, false) |
560 |
|
end |
561 |
return 1 |
return 1 |
562 |
end |
end |
563 |
|
|
564 |
def onCmdClose(sender, sel, ptr) |
def onCmdClose(sender, sel, ptr) |
565 |
@slot.manager.send_command('CLOSE') |
@debugger.send_command('CLOSE') if @debugger |
566 |
return 1 |
return 1 |
567 |
end |
end |
568 |
|
|
569 |
def onCmdStepOver(sender, sel, ptr) |
def onCmdStepOver(sender, sel, ptr) |
570 |
@slot.manager.send_command('next') |
@debugger.send_command('next') if @debugger |
571 |
return 1 |
return 1 |
572 |
end |
end |
573 |
|
|
574 |
def onUpdStepOver(sender, sel, ptr) |
def onUpdStepOver(sender, sel, ptr) |
575 |
update_state(sender,sel,ptr, @slot.manager.running? && @slot.manager.paused?) |
if @debugger |
576 |
|
update_state(sender,sel,ptr, @debugger.running? && @debugger.paused?) |
577 |
|
else |
578 |
|
update_state(sender,sel,ptr, false) |
579 |
|
end |
580 |
return 1 |
return 1 |
581 |
end |
end |
582 |
|
|
583 |
def onCmdStepIn(sender, sel, ptr) |
def onCmdStepIn(sender, sel, ptr) |
584 |
@slot.manager.send_command('step') |
@debugger.send_command('step') if @debugger |
585 |
return 1 |
return 1 |
586 |
end |
end |
587 |
|
|
588 |
def onUpdStepIn(sender, sel, ptr) |
def onUpdStepIn(sender, sel, ptr) |
589 |
update_state(sender,sel,ptr, @slot.manager.running? && @slot.manager.paused?) |
if @debugger |
590 |
|
update_state(sender,sel,ptr, @debugger.running? && @debugger.paused?) |
591 |
|
else |
592 |
|
update_state(sender,sel,ptr, false) |
593 |
|
end |
594 |
return 1 |
return 1 |
595 |
end |
end |
596 |
|
|
597 |
def onCmdStepOut(sender, sel, ptr) |
def onCmdStepOut(sender, sel, ptr) |
598 |
@slot.manager.send_command('finish') |
@debugger.send_command('finish') if @debugger |
599 |
return 1 |
return 1 |
600 |
end |
end |
601 |
|
|
602 |
def onUpdStepOut(sender, sel, ptr) |
def onUpdStepOut(sender, sel, ptr) |
603 |
update_state(sender,sel,ptr, @slot.manager.running? && @slot.manager.paused?) |
if @debugger |
604 |
|
update_state(sender,sel,ptr, @debugger.running? && @debugger.paused?) |
605 |
|
else |
606 |
|
update_state(sender,sel,ptr, false) |
607 |
|
end |
608 |
return 1 |
return 1 |
609 |
end |
end |
610 |
|
|
611 |
def onCmdResume(sender, sel, ptr) |
def onCmdResume(sender, sel, ptr) |
612 |
@slot.manager.resume |
@debugger.resume if @debugger |
613 |
return 1 |
return 1 |
614 |
end |
end |
615 |
|
|
616 |
def onUpdResume(sender, sel, ptr) |
def onUpdResume(sender, sel, ptr) |
617 |
update_state(sender,sel,ptr, @slot.manager.running? && @slot.manager.paused?) |
if @debugger |
618 |
|
update_state(sender,sel,ptr, @debugger.running? && @debugger.paused?) |
619 |
|
else |
620 |
|
update_state(sender,sel,ptr, false) |
621 |
|
end |
622 |
return 1 |
return 1 |
623 |
end |
end |
624 |
|
|
625 |
def onCmdPause(sender, sel, ptr) |
def onCmdPause(sender, sel, ptr) |
626 |
@slot.manager.pause |
@debugger.pause if @debugger |
627 |
return 1 |
return 1 |
628 |
end |
end |
629 |
|
|
630 |
def onUpdPause(sender, sel, ptr) |
def onUpdPause(sender, sel, ptr) |
631 |
update_state(sender,sel,ptr, @slot.manager.running? && !@slot.manager.paused?) |
if @debugger |
632 |
|
update_state(sender,sel,ptr, @debugger.running? && !@debugger.paused?) |
633 |
|
else |
634 |
|
update_state(sender,sel,ptr, false) |
635 |
|
end |
636 |
return 1 |
return 1 |
637 |
end |
end |
638 |
|
|
639 |
def onCmdRunToCursor(sender, sel, ptr) |
def onCmdRunToCursor(sender, sel, ptr) |
640 |
@slot.manager.run_to_cursor |
@debugger.run_to_cursor |
641 |
return 1 |
return 1 |
642 |
end |
end |
643 |
|
|
644 |
def onUpdRunToCursor(sender, sel, ptr) |
def onUpdRunToCursor(sender, sel, ptr) |
645 |
update_state(sender,sel,ptr, @slot.manager.paused? && @slot.manager.running?) |
if @debugger |
646 |
|
update_state(sender,sel,ptr, @debugger.running? && @debugger.paused?) |
647 |
|
else |
648 |
|
update_state(sender,sel,ptr, false) |
649 |
|
end |
650 |
return 1 |
return 1 |
651 |
end |
end |
652 |
|
|
660 |
end |
end |
661 |
|
|
662 |
def onCmdShowExecPoint(sender, sel, ptr) |
def onCmdShowExecPoint(sender, sel, ptr) |
663 |
@slot.manager.show_exec_point |
@debugger.show_exec_point if @debugger |
664 |
return 1 |
return 1 |
665 |
end |
end |
666 |
|
|
667 |
def onUpdShowExecPoint(sender, sel, ptr) |
def onUpdShowExecPoint(sender, sel, ptr) |
668 |
update_state(sender,sel,ptr, @slot.manager.running?) |
if @debugger |
669 |
|
update_state(sender,sel,ptr, @debugger.running?) |
670 |
|
else |
671 |
|
update_state(sender,sel,ptr, false) |
672 |
|
end |
673 |
return 1 |
return 1 |
674 |
end |
end |
675 |
|
|
676 |
def onCmdHelp(sender, sel, ptr) |
def onCmdHelp(sender, sel, ptr) |
677 |
#TODO: to be done |
#TODO: to be done |
678 |
@slot.manager.show_thread_list |
@debugger.show_thread_list if @debugger |
679 |
return 1 |
return 1 |
680 |
end |
end |
681 |
|
|
702 |
def onCmdThreadSelect(sender, sel, ptr) |
def onCmdThreadSelect(sender, sel, ptr) |
703 |
# Get the index of the selected thread |
# Get the index of the selected thread |
704 |
idx = sender.currentItem |
idx = sender.currentItem |
705 |
@slot.manager.select_thread(sender.getItemData(idx)) |
@debugger.select_thread(sender.getItemData(idx)) if @debugger |
706 |
return 1 |
return 1 |
707 |
end |
end |
708 |
|
|
709 |
def onCmdFrameSelect(sender, sel, ptr) |
def onCmdFrameSelect(sender, sel, ptr) |
710 |
# Get the index of the selected frame |
# Get the index of the selected frame |
711 |
idx = sender.currentItem |
idx = sender.currentItem |
712 |
@slot.manager.select_frame(sender.getItemData(idx)) |
@debugger.select_frame(sender.getItemData(idx)) if @debugger |
713 |
return 1 |
return 1 |
714 |
end |
end |
715 |
|
|