UI: add support to "pin" menus, i.e., turn them into a floating toolboxes
This spares us the need of explicit toolbar in the UI and gives the
user the freedom of turning every menu into always-visible toolbar
is it suits her (actual) need. This idea is taken from good old
NeXTstep UI.
For now, this is only supported for "Exec" menu, but the support is
generic so it would work any menu.
"
jv:vdb - Visual / VM Debugger
Copyright (C) 2015-now Jan Vrany
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
"
"{ Package: 'jv:vdb' }"
"{ NameSpace: Smalltalk }"
VDBAbstractApplication subclass:#VDBDebuggerApplication
instanceVariableNames:'layoutSpecHolder selectedThreadGroupHolder selectedThreadHolder
selectedFrameHolder containerBottom canExecRestartHolder
canExecResumeHolder canExecRunHolder canExecStepIntoHolder
canExecStepOverHolder canExecStepReturnHolder
canExecSuspendHolder canExecTerminateHolder'
classVariableNames:''
poolDictionaries:''
category:'VDB-UI'
!
!VDBDebuggerApplication class methodsFor:'documentation'!
copyright
"
jv:vdb - Visual / VM Debugger
Copyright (C) 2015-now Jan Vrany
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
"
! !
!VDBDebuggerApplication class methodsFor:'initialization'!
initializeDefaultKeyboardMap
defaultKeyboardMap := DebugView defaultKeyboardMap copy.
defaultKeyboardMap bindValue: #DebuggerRestart to: ('Ctrl', (defaultKeyboardMap bindingForLogical: #DebuggerContinue)) asSymbol.
"Created: / 05-06-2017 / 23:01:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 11-06-2017 / 20:08:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication class methodsFor:'interface opening'!
open
^ self openFor: GDBDebugger new.
"Created: / 23-09-2014 / 16:39:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication class methodsFor:'interface specs'!
layoutEclipseSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIPainter may not be able to read the specification."
"
UIPainter new openOnClass:VDBDebuggerApplication andSelector:#layoutEclipseSpec
VDBDebuggerApplication new openInterface:#layoutEclipseSpec
"
<resource: #canvas>
^
#(FullSpec
name: layoutEclipseSpec
window:
(WindowSpec
label: 'Visual Debugger'
name: 'Visual Debugger'
min: (Point 10 10)
bounds: (Rectangle 0 0 718 390)
menu: mainMenu
)
component:
(SpecCollection
collection: (
(VariableVerticalPanelSpec
name: 'VariableVerticalPanel'
layout: (LayoutFrame 0 0 0 0 0 1 0 1)
showHandle: true
snapMode: both
component:
(SpecCollection
collection: (
(VariableHorizontalPanelSpec
name: 'StackAndFrameCanvas'
snapMode: both
component:
(SpecCollection
collection: (
(SubCanvasSpec
name: 'StackCanvas'
level: 0
hasHorizontalScrollBar: false
hasVerticalScrollBar: false
majorKey: VDBStackApplication
subAspectHolders:
(Array
(SubChannelInfoSpec
subAspect: selectedFrameHolder
aspect: selectedFrameHolder
)
(SubChannelInfoSpec
subAspect: selectedThreadGroupHolder
aspect: selectedThreadGroupHolder
)
(SubChannelInfoSpec
subAspect: selectedThreadHolder
aspect: selectedThreadHolder
)
)
createNewApplication: true
createNewBuilder: true
)
(SubCanvasSpec
name: 'FrameCanvas'
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
majorKey: VDBFrameApplication
subAspectHolders:
(Array
(SubChannelInfoSpec
subAspect: debuggerHolder
aspect: debuggerHolder
)
(SubChannelInfoSpec
subAspect: frameHolder
aspect: selectedFrameHolder
)
)
createNewApplication: true
createNewBuilder: true
)
)
)
handles: (Any 0.5 1.0)
)
(SubCanvasSpec
name: 'SourceCanvas'
hasHorizontalScrollBar: false
hasVerticalScrollBar: false
majorKey: VDBSourceApplication
subAspectHolders:
(Array
(SubChannelInfoSpec
subAspect: frameHolder
aspect: selectedFrameHolder
)
)
createNewApplication: true
createNewBuilder: true
)
(SubCanvasSpec
name: 'ContainerBottom'
level: 0
hasHorizontalScrollBar: false
hasVerticalScrollBar: false
clientHolder: containerBottom
subAspectHolders:
(Array
(SubChannelInfoSpec
subAspect: debuggerHolder
aspect: debuggerHolder
)
)
createNewApplication: true
createNewBuilder: true
)
)
)
handles: (Any 0.33333333333333337 0.66666666666666674 1.0)
)
)
)
)
"Modified: / 06-06-2017 / 08:12:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
layoutSingleSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIPainter may not be able to read the specification."
"
UIPainter new openOnClass:VDBDebuggerApplication andSelector:#windowSpec
VDBDebuggerApplication new openInterface:#windowSpec
VDBDebuggerApplication open
"
<resource: #canvas>
^
#(FullSpec
name: windowSpec
window:
(WindowSpec
label: 'Visual Debugger'
name: 'Visual Debugger'
min: (Point 10 10)
bounds: (Rectangle 0 0 718 390)
menu: mainMenu
)
component:
(SpecCollection
collection: (
(SubCanvasSpec
name: 'ContainerBottom'
layout: (LayoutFrame 0 0 0 0 0 1 0 1)
level: 0
hasHorizontalScrollBar: false
hasVerticalScrollBar: false
clientHolder: containerBottom
subAspectHolders:
(Array
(SubChannelInfoSpec
subAspect: debuggerHolder
aspect: debuggerHolder
)
)
createNewApplication: true
createNewBuilder: true
)
)
)
)
"Created: / 17-09-2014 / 22:34:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
windowSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIPainter may not be able to read the specification."
"
UIPainter new openOnClass:VDBDebuggerApplication andSelector:#windowSpec
VDBDebuggerApplication new openInterface:#windowSpec
VDBDebuggerApplication open
"
<resource: #canvas>
^
#(FullSpec
name: windowSpec
window:
(WindowSpec
label: 'Visual/VM Debugger'
name: 'Visual/VM Debugger'
min: (Point 10 10)
bounds: (Rectangle 0 0 800 600)
menu: mainMenu
)
component:
(SpecCollection
collection: (
(MenuPanelSpec
name: 'ToolBar'
layout: (LayoutFrame 0 0 0 0 0 1 25 0)
menu: toolbarMenu
textDefault: true
)
(SubCanvasSpec
name: 'Layout'
layout: (LayoutFrame 0 0 25 0 0 1 0 1)
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
specHolder: layoutSpecHolder
createNewBuilder: false
)
)
)
)
"Modified: / 02-06-2017 / 08:34:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication class methodsFor:'menu specs'!
execMenu
"This resource specification was automatically generated
by the MenuEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the MenuEditor may not be able to read the specification."
"
MenuEditor new openOnClass:VDBDebuggerApplication andSelector:#execMenu
(Menu new fromLiteralArrayEncoding:(VDBDebuggerApplication execMenu)) startUp
"
<resource: #menu>
^
#(Menu
(
(MenuItem
enabled: canExecRunHolder
label: 'Run'
itemValue: doExecRun
isVisible: true
labelImage: (ResourceRetriever VDBIconLibrary actionRun16x16 'Run')
)
(MenuItem
enabled: canExecResumeHolder
label: 'Resume'
itemValue: doExecResume
isVisible: true
shortcutKey: DebuggerContinue
labelImage: (ResourceRetriever VDBIconLibrary actionContinue16x16 'Resume')
)
(MenuItem
enabled: canExecSuspendHolder
label: 'Suspend'
itemValue: doExecSuspend
isVisible: true
labelImage: (ResourceRetriever VDBIconLibrary actionStop16x16 'Suspend')
)
(MenuItem
enabled: canExecTerminateHolder
label: 'Terminate'
itemValue: doExecTerminate
isVisible: true
labelImage: (ResourceRetriever VDBIconLibrary actionTerminate6x16 'Terminate')
)
(MenuItem
enabled: canExecRestartHolder
label: 'Restart'
itemValue: doExecRestart
isVisible: true
shortcutKey: DebuggerRestart
labelImage: (ResourceRetriever VDBIconLibrary actionTerminateAndRun6x16 'Restart')
)
(MenuItem
label: '-'
isVisible: true
)
(MenuItem
enabled: canExecStepOverHolder
label: 'Step Over'
itemValue: doExecStepOver
isVisible: true
shortcutKey: DebuggerNext
labelImage: (ResourceRetriever VDBIconLibrary actionStepOver6x16 'Step Over')
)
(MenuItem
enabled: canExecStepIntoHolder
label: 'Step Into'
itemValue: doExecStepInto
isVisible: true
shortcutKey: DebuggerSend
labelImage: (ResourceRetriever VDBIconLibrary actionStepInto6x16 'Step Into')
)
(MenuItem
enabled: canExecStepReturnHolder
label: 'Step Return'
itemValue: doExecStepReturn
isVisible: true
labelImage: (ResourceRetriever VDBIconLibrary actionStepReturn6x16 'Step Return')
)
(MenuItem
label: '-'
isVisible: true
)
(MenuItem
label: 'Pin Menu'
itemValue: doPinMenuAs:item:
isVisible: true
labelImage: (ResourceRetriever VDBIconLibrary pin 'Pin Menu')
argument: 'Execute'
)
)
nil
nil
)
!
mainMenu
"This resource specification was automatically generated
by the MenuEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the MenuEditor may not be able to read the specification."
"
MenuEditor new openOnClass:VDBDebuggerApplication andSelector:#mainMenu
(Menu new fromLiteralArrayEncoding:(VDBDebuggerApplication mainMenu)) startUp
"
<resource: #menu>
^
#(Menu
(
(MenuItem
label: 'File'
submenu:
(Menu
(
(MenuItem
label: 'Open Executable'
itemValue: doOpenExecutable
)
(MenuItem
label: '-'
)
(MenuItem
label: 'Quit'
itemValue: doQuit
)
)
nil
nil
)
)
(MenuItem
label: 'Run'
submenuChannel: execMenu
)
(MenuItem
label: 'View'
submenu:
(Menu
(
(MenuItem
label: 'Stack'
itemValue: doOpenToolApplicationClass:
argument: VDBStackApplication
)
(MenuItem
label: 'Frame'
itemValue: doOpenToolApplicationClass:
argument: VDBFrameApplication
)
(MenuItem
label: 'Breakpoints'
itemValue: doOpenToolApplicationClass:
argument: VDBBreakpointListApplication
)
(MenuItem
label: 'Memory'
itemValue: doOpenToolApplicationClass:
argument: VDBMemoryApplication
)
(MenuItem
label: '-'
)
(MenuItem
enabled: canViewEnableFrameFilters
label: 'Enable Frame Filters'
itemValue: doViewEnableFrameFilters
)
(MenuItem
enabled: canViewEnablePrettyPrinting
label: 'Enable Pretty Printing'
itemValue: doViewEnablePrettyPrinting
)
)
nil
nil
)
)
(MenuItem
label: 'Debug'
startGroup: right
submenu:
(Menu
(
(MenuItem
label: 'Inspect Debugger'
itemValue: doInspectDebugger
)
(MenuItem
label: 'Inspect Session Record'
itemValue: doInspectSessionRecord
)
(MenuItem
label: '-'
)
(MenuItem
label: 'Reopen'
itemValue: doDebugReopenDebugger
)
(MenuItem
label: 'Launcher'
itemValue: doDebugReopenLauncher
)
)
nil
nil
)
)
)
nil
nil
)
"Modified: / 14-03-2018 / 09:46:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
toolbarMenu
"This resource specification was automatically generated
by the MenuEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the MenuEditor may not be able to read the specification."
"
MenuEditor new openOnClass:VDBDebuggerApplication andSelector:#toolbarMenu
(Menu new fromLiteralArrayEncoding:(VDBDebuggerApplication toolbarMenu)) startUp
"
<resource: #menu>
^
#(Menu
(
(MenuItem
label: 'Exec Slice'
submenuChannel: toolbarMenuExecSlice
isMenuSlice: true
)
)
nil
nil
)
!
toolbarMenuExecSlice
"This resource specification was automatically generated
by the MenuEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the MenuEditor may not be able to read the specification."
"
MenuEditor new openOnClass:VDBDebuggerApplication andSelector:#toolbarMenuExecSlice
(Menu new fromLiteralArrayEncoding:(VDBDebuggerApplication toolbarMenuExecSlice)) startUp
"
<resource: #menu>
^
#(Menu
(
(MenuItem
enabled: canExecRunHolder
label: 'Run'
itemValue: doExecRun
labelImage: (ResourceRetriever VDBIconLibrary actionRun16x16)
)
(MenuItem
enabled: canExecResumeHolder
label: 'Resume'
itemValue: doExecResume
labelImage: (ResourceRetriever VDBIconLibrary actionContinue16x16)
)
(MenuItem
enabled: canExecSuspendHolder
label: 'Suspend'
itemValue: doExecSuspend
labelImage: (ResourceRetriever VDBIconLibrary actionStop16x16)
)
(MenuItem
enabled: canExecTerminateHolder
label: 'Terminate'
itemValue: doExecTerminate
labelImage: (ResourceRetriever VDBIconLibrary actionTerminate6x16)
)
(MenuItem
label: '-'
)
(MenuItem
enabled: canExecStepOverHolder
label: 'Step Over'
itemValue: doExecStepOver
labelImage: (ResourceRetriever VDBIconLibrary actionStepOver6x16)
)
(MenuItem
enabled: canExecStepIntoHolder
label: 'Step Into'
itemValue: doExecStepInto
labelImage: (ResourceRetriever VDBIconLibrary actionStepInto6x16)
)
(MenuItem
enabled: canExecStepReturnHolder
label: 'Step Return'
itemValue: doExecStepReturn
labelImage: (ResourceRetriever VDBIconLibrary actionStepReturn6x16)
)
)
nil
nil
)
! !
!VDBDebuggerApplication class methodsFor:'plugIn spec'!
aspectSelectors
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this. If it is corrupted,
the UIPainter may not be able to read the specification."
"Return a description of exported aspects;
these can be connected to aspects of an embedding application
(if this app is embedded in a subCanvas)."
^ #(
#debuggerHolder
#selectedFrameHolder
#selectedThreadGroupHolder
#selectedThreadHolder
).
"Modified: / 01-06-2017 / 23:32:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'accessing'!
currentThreadGroup
"Return 'current' thread group (inferior) or nil. 'Current' thread group is
either the selected one or, if none's selected or the only one thread group
(if there's only one)"
| tg |
tg := self selectedThreadGroup.
tg isNil ifTrue:[
| tgs |
tgs := debugger inferiors.
tgs size == 1 ifTrue:[
tg := tgs anyOne.
].
].
^ tg.
"Created: / 03-07-2017 / 06:58:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedThreadGroup
^ self selectedThreadGroupHolder value
"Created: / 03-07-2017 / 06:51:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'aspects'!
layoutSpecHolder
"return/create the 'layoutSpecHolder' value holder (automatically generated)"
layoutSpecHolder isNil ifTrue:[
layoutSpecHolder := ValueHolder with: #layoutEclipseSpec.
].
^ layoutSpecHolder
"Modified: / 18-09-2014 / 23:35:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedFrameHolder
"return/create the 'selectionHolder' value holder (automatically generated)"
selectedFrameHolder isNil ifTrue:[
selectedFrameHolder := ValueHolder new.
selectedFrameHolder addDependent:self.
].
^ selectedFrameHolder
"Created: / 21-09-2014 / 23:51:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedFrameHolder:aValueModel
"set the 'selectionHolder' value holder (automatically generated)"
|oldValue newValue|
selectedFrameHolder notNil ifTrue:[
oldValue := selectedFrameHolder value.
selectedFrameHolder removeDependent:self.
].
selectedFrameHolder := aValueModel.
selectedFrameHolder notNil ifTrue:[
selectedFrameHolder addDependent:self.
].
newValue := selectedFrameHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:selectedFrameHolder.
].
"Created: / 21-09-2014 / 23:50:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedThreadGroupHolder
"return/create the 'selectedThreadGroupHolder' value holder (automatically generated)"
selectedThreadGroupHolder isNil ifTrue:[
selectedThreadGroupHolder := ValueHolder new.
selectedThreadGroupHolder addDependent:self.
].
^ selectedThreadGroupHolder
!
selectedThreadGroupHolder:something
"set the 'selectedThreadGroupHolder' value holder (automatically generated)"
|oldValue newValue|
selectedThreadGroupHolder notNil ifTrue:[
oldValue := selectedThreadGroupHolder value.
selectedThreadGroupHolder removeDependent:self.
].
selectedThreadGroupHolder := something.
selectedThreadGroupHolder notNil ifTrue:[
selectedThreadGroupHolder addDependent:self.
].
newValue := selectedThreadGroupHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:selectedThreadGroupHolder.
].
!
selectedThreadHolder
"return/create the 'selectedThreadHolder' value holder (automatically generated)"
selectedThreadHolder isNil ifTrue:[
selectedThreadHolder := ValueHolder new.
selectedThreadHolder addDependent:self.
].
^ selectedThreadHolder
!
selectedThreadHolder:something
"set the 'selectedThreadHolder' value holder (automatically generated)"
|oldValue newValue|
selectedThreadHolder notNil ifTrue:[
oldValue := selectedThreadHolder value.
selectedThreadHolder removeDependent:self.
].
selectedThreadHolder := something.
selectedThreadHolder notNil ifTrue:[
selectedThreadHolder addDependent:self.
].
newValue := selectedThreadHolder value.
oldValue ~~ newValue ifTrue:[
self update:#value with:newValue from:selectedThreadHolder.
].
! !
!VDBDebuggerApplication methodsFor:'aspects-containers'!
containerBottom
containerBottom isNil ifTrue:[
containerBottom := VDBTabbingContainer new.
OperatingSystem isMSWINDOWSlike ifTrue:[
containerBottom addApplication:VDBWindowsDebuggerConsoleApplication new.
] ifFalse:[
containerBottom addApplication:VDBUnixDebuggerConsoleApplication new.
containerBottom addApplication:VDBUnixInferiorConsoleApplication new.
].
containerBottom addApplication:VDBEventLogApplication new.
].
^ containerBottom
"Created: / 10-06-2014 / 17:29:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 08-01-2018 / 18:57:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 12-01-2018 / 00:10:46 / jv"
! !
!VDBDebuggerApplication methodsFor:'change & update'!
update:aspect with:parameter from:sender
"Invoked when an object that I depend upon sends a change notification."
"stub code automatically generated - please change as required"
sender == selectedThreadGroupHolder ifTrue:[
self updateAfterSelectedThreadGroupHolderChanged.
].
sender == selectedFrameHolder ifTrue:[
self updateAfterSelectedFrameHolderChanged.
].
super update:aspect with:parameter from:sender
"Modified: / 01-06-2017 / 23:34:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateAfterSelectedFrameHolderChanged
| frame |
frame := selectedFrameHolder value.
frame notNil ifTrue:[
debugger
send:(GDBMI_thread_select new arguments:(Array with:frame thread id))
andWait:false.
debugger
send:(GDBMI_stack_select_frame new arguments:(Array with:frame level))
andWait:false.
].
"Created: / 27-02-2015 / 13:24:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateAfterSelectedThreadGroupHolderChanged
self updateButtonEnablements
"Created: / 01-06-2017 / 23:34:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateButtonEnablements
| inferior inferiorIsStopped inferiorIsRunning |
inferior := self currentThreadGroup.
inferiorIsStopped := inferior notNil and:[ inferior isStopped ].
inferiorIsRunning := inferior notNil and:[ inferior isRunning ].
self canExecResumeHolder value: inferiorIsRunning & inferiorIsStopped .
self canExecStepIntoHolder value: inferiorIsRunning & inferiorIsStopped.
self canExecStepOverHolder value: inferiorIsRunning & inferiorIsStopped.
self canExecStepReturnHolder value: inferiorIsRunning & inferiorIsStopped.
self canExecSuspendHolder value: inferiorIsRunning &(inferiorIsStopped not).
self canExecTerminateHolder value: ( inferiorIsRunning ).
self canExecRestartHolder value: ( true ).
self canExecRunHolder value: ( inferiorIsRunning not ).
"Created: / 01-06-2017 / 23:18:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 03-07-2017 / 07:00:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'event handling'!
onCommandResultEvent: aGDBStoppedEvent
self updateButtonEnablements
"Created: / 01-06-2017 / 23:43:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onExitEvent: aGDBStoppedEvent
self closeDownViews
"Created: / 01-06-2017 / 13:42:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onLogOutputEvent:aGDBLogOutputEvent
Transcript nextPutAll: aGDBLogOutputEvent value.
Transcript isView ifTrue:[
| flasher |
flasher := [
debugger announcer unsubscribe: flasher.
Transcript topView raise; flash.
].
debugger announcer when: GDBEventSetProcessingFinished do: flasher
].
"Created: / 02-02-2018 / 11:46:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 02-02-2018 / 21:02:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onRunningEvent: aGDBStoppedEvent
self updateButtonEnablements
"Created: / 21-09-2014 / 22:44:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 01-06-2017 / 23:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onStoppedEvent: aGDBStoppedEvent
self updateButtonEnablements
"Created: / 21-09-2014 / 22:44:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 01-06-2017 / 23:18:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onThreadGroupExitedEvent: aGDBStoppedEvent
self updateButtonEnablements
"Created: / 21-09-2014 / 22:45:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 01-06-2017 / 23:41:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'initialization & release'!
commonPostOpen
self updateButtonEnablements
"Created: / 05-06-2017 / 22:50:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
release
"remove all dependencies from the receiver"
super release.
self unsubscribe.
(debugger notNil and:[debugger isConnected]) ifTrue:[
debugger send: GDBMI_gdb_exit new andWait: false.
].
"Created: / 01-06-2017 / 13:41:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 12-06-2017 / 12:48:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
subscribe
"Register for debugger events. To be overrided by subclasses"
debugger announcer
when: GDBStoppedEvent send: #onStoppedEvent: to: self;
when: GDBRunningEvent send: #onRunningEvent: to: self;
when: GDBExitEvent send: #onExitEvent: to: self;
when: GDBCommandResultEvent send: #onCommandResultEvent: to: self;
when: GDBThreadGroupExitedEvent send: #onThreadGroupExitedEvent: to: self;
when: GDBLogOutputEvent send: #onLogOutputEvent: to: self.
"Created: / 21-09-2014 / 22:43:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 02-02-2018 / 21:02:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'menu actions'!
doDebugReopenDebugger
| d |
d := debugger.
self unsubscribe.
debugger := nil.
debuggerHolder setValue: nil.
self closeDownViews.
(Smalltalk at: self class name) openFor: d.
"Created: / 20-06-2017 / 20:56:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doDebugReopenLauncher
NewLauncher open
"Created: / 20-06-2017 / 20:58:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doOpenExecutable
| file |
file := Dialog requestFileName:'Selected executable to debug' pattern:'*'.
file isNil ifTrue:[ ^ self ].
file := file asFilename.
debugger send:(GDBMI_file_exec_and_symbols arguments:{ file asString }) andWait:false.
"Modified: / 12-06-2014 / 01:12:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified (format): / 08-03-2015 / 15:49:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doQuit
self closeRequest.
"Modified: / 01-06-2017 / 13:46:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doViewEnableFrameFilters
debugger enableFrameFilters.
"Modified (format): / 12-06-2017 / 09:42:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doViewEnablePrettyPrinting
debugger enablePrettyPrinting
"Modified: / 12-06-2017 / 09:42:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'menu actions-exec'!
doExec: command
debugger send: command
"Created: / 21-09-2014 / 21:50:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecRestart
<resource: #uiCallback>
self doExecTerminate; doExecRun.
"Modified: / 11-06-2017 / 20:12:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecResume
self doExec: GDBMI_exec_continue new.
"Modified: / 21-09-2014 / 21:50:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecRun
self doExec: GDBMI_exec_run new.
"Modified: / 21-09-2014 / 21:51:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecStepInto
self doExec: GDBMI_exec_step new.
"Modified: / 21-09-2014 / 21:52:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecStepOver
self doExec: GDBMI_exec_next new.
"Modified: / 21-09-2014 / 21:52:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecStepReturn
self doExec: GDBMI_exec_finish new.
"Modified: / 21-09-2014 / 21:53:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecSuspend
self doExec: (GDBMI_exec_interrupt arguments: #('--all'))
"Modified: / 29-09-2014 / 23:50:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doExecTerminate
self doExec: 'kill'
"Modified: / 05-06-2017 / 23:13:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'menu apects'!
canViewEnableFrameFilters
^ [ debugger isFrameFiltersEnabled not ]
"Modified: / 12-06-2017 / 09:54:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canViewEnablePrettyPrinting
^ [ debugger isPrettyPrintingEnabled not ].
"Modified: / 12-06-2017 / 09:54:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'menu aspects-exec'!
canExecRestartHolder
"return/create the 'canExecRestartHolder' value holder (automatically generated)"
canExecRestartHolder isNil ifTrue:[
canExecRestartHolder := ValueHolder with: false.
].
^ canExecRestartHolder
"Modified: / 01-06-2017 / 23:15:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canExecResumeHolder
"return/create the 'canExecResumeHolder' value holder (automatically generated)"
canExecResumeHolder isNil ifTrue:[
canExecResumeHolder := ValueHolder with: false.
].
^ canExecResumeHolder
"Modified: / 01-06-2017 / 23:15:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canExecRunHolder
"return/create the 'canExecRunHolder' value holder (automatically generated)"
canExecRunHolder isNil ifTrue:[
canExecRunHolder := ValueHolder with: false.
].
^ canExecRunHolder
"Modified: / 01-06-2017 / 23:15:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canExecStepIntoHolder
"return/create the 'canExecStepIntoHolder' value holder (automatically generated)"
canExecStepIntoHolder isNil ifTrue:[
canExecStepIntoHolder := ValueHolder with: false.
].
^ canExecStepIntoHolder
"Modified: / 01-06-2017 / 23:15:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canExecStepOverHolder
"return/create the 'canExecStepOverHolder' value holder (automatically generated)"
canExecStepOverHolder isNil ifTrue:[
canExecStepOverHolder := ValueHolder with: false.
].
^ canExecStepOverHolder
"Modified: / 01-06-2017 / 23:15:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canExecStepReturnHolder
"return/create the 'canExecStepReturn' value holder (automatically generated)"
canExecStepReturnHolder isNil ifTrue:[
canExecStepReturnHolder := ValueHolder with: false.
].
^ canExecStepReturnHolder
"Created: / 05-06-2017 / 22:41:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canExecSuspendHolder
"return/create the 'canExecSuspendHolder' value holder (automatically generated)"
canExecSuspendHolder isNil ifTrue:[
canExecSuspendHolder := ValueHolder with: false.
].
^ canExecSuspendHolder
"Modified: / 01-06-2017 / 23:15:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canExecTerminateHolder
"return/create the 'canExecTerminateHolder' value holder (automatically generated)"
canExecTerminateHolder isNil ifTrue:[
canExecTerminateHolder := ValueHolder with: false.
].
^ canExecTerminateHolder
"Modified: / 01-06-2017 / 23:16:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !