mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 09:51:41 +00:00
[qwaq] Handle debug events at the app level
The debugger displays the source file but doesn't highlight the current line yet.
This commit is contained in:
parent
c7597b94d2
commit
0d8815f274
4 changed files with 63 additions and 23 deletions
|
@ -6,8 +6,10 @@
|
|||
#include "event.h"
|
||||
#include "qwaq-rect.h"
|
||||
|
||||
@class Array;
|
||||
@class Group;
|
||||
@class TextContext;
|
||||
@class View;
|
||||
|
||||
@interface QwaqApplication: Object
|
||||
{
|
||||
|
@ -19,9 +21,12 @@
|
|||
TextContext *screen;
|
||||
Extent screenSize;
|
||||
int autocount;
|
||||
|
||||
Array *debuggers;
|
||||
}
|
||||
-(Extent)size;
|
||||
-(TextContext *)screen;
|
||||
-addView:(View *)view;
|
||||
-run;
|
||||
@end
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ int fence;
|
|||
#include "color.h"
|
||||
#include "qwaq-app.h"
|
||||
#include "qwaq-curses.h"
|
||||
#include "qwaq-debugger.h"
|
||||
#include "qwaq-group.h"
|
||||
#include "qwaq-view.h"
|
||||
|
||||
|
@ -49,6 +50,8 @@ arp_end (void)
|
|||
[screen scrollok: 1];
|
||||
[screen clear];
|
||||
wrefresh (stdscr);//FIXME
|
||||
|
||||
debuggers = [[Array array] retain];
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -69,32 +72,50 @@ arp_end (void)
|
|||
return self;
|
||||
}
|
||||
|
||||
-(Debugger *)find_debugger:(qdb_target_t) target
|
||||
{
|
||||
Debugger *debugger;
|
||||
|
||||
for (int i = [debuggers count]; i-- > 0; ) {
|
||||
debugger = [debuggers objectAtIndex: i];
|
||||
if ([debugger debug_target].handle == target.handle) {
|
||||
return debugger;
|
||||
}
|
||||
}
|
||||
debugger = [[Debugger alloc] initWithTarget: target];
|
||||
[debuggers addObject: debugger];
|
||||
return debugger;
|
||||
}
|
||||
|
||||
-handleEvent: (qwaq_event_t *) event
|
||||
{
|
||||
if (event.what == qe_resize) {
|
||||
Extent delta;
|
||||
delta.width = event.resize.width - screenSize.width;
|
||||
delta.height = event.resize.height - screenSize.height;
|
||||
switch (event.what) {
|
||||
case qe_resize:
|
||||
Extent delta;
|
||||
delta.width = event.resize.width - screenSize.width;
|
||||
delta.height = event.resize.height - screenSize.height;
|
||||
|
||||
resizeterm (event.resize.width, event.resize.height);
|
||||
[screen resizeTo: {event.resize.width, event.resize.height}];
|
||||
screenSize = [screen size];
|
||||
[objects resize: delta];
|
||||
[screen refresh];
|
||||
event.what = qe_none;
|
||||
return self;
|
||||
resizeterm (event.resize.width, event.resize.height);
|
||||
[screen resizeTo: {event.resize.width, event.resize.height}];
|
||||
screenSize = [screen size];
|
||||
[objects resize: delta];
|
||||
[screen refresh];
|
||||
event.what = qe_none;
|
||||
break;
|
||||
case qe_key:
|
||||
if (event.key.code == '\x18' || event.key.code == '\x11') {
|
||||
endState = event.message.int_val;
|
||||
event.what = qe_none;
|
||||
}
|
||||
break;
|
||||
case qe_debug_event:
|
||||
[[self find_debugger:{event.message.int_val}] handleDebugEvent];
|
||||
event.what = qe_none;
|
||||
break;
|
||||
}
|
||||
if (event.what == qe_key
|
||||
&& (event.key.code == '\x18' || event.key.code == '\x11')) {
|
||||
event.what = qe_command;
|
||||
event.message.int_val = qc_exit;
|
||||
if (event.what != qe_none) {
|
||||
[objects handleEvent: event];
|
||||
}
|
||||
if (event.what == qe_command
|
||||
&& (event.message.int_val == qc_exit
|
||||
|| event.message.int_val == qc_error)) {
|
||||
endState = event.message.int_val;;
|
||||
}
|
||||
[objects handleEvent: event];
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -114,6 +135,13 @@ arp_end (void)
|
|||
} while (!endState);
|
||||
return self;
|
||||
}
|
||||
|
||||
-addView:(View *)view
|
||||
{
|
||||
[objects insertSelected: view];
|
||||
[screen refresh];
|
||||
return self;
|
||||
}
|
||||
@end
|
||||
|
||||
QwaqApplication *application;
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
Editor *current_file;
|
||||
qdb_target_t debug_target;
|
||||
}
|
||||
-(qdb_target_t)debug_target;
|
||||
-initWithTarget:(qdb_target_t) target;
|
||||
-handleDebugEvent;
|
||||
@end
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include <Array.h>
|
||||
|
||||
#include "qwaq-app.h"
|
||||
#include "qwaq-curses.h"
|
||||
#include "qwaq-debugger.h"
|
||||
#include "qwaq-editor.h"
|
||||
|
@ -7,6 +8,10 @@
|
|||
#include "qwaq-window.h"
|
||||
|
||||
@implementation Debugger
|
||||
-(qdb_target_t)debug_target
|
||||
{
|
||||
return debug_target;
|
||||
}
|
||||
|
||||
-initWithTarget:(qdb_target_t) target
|
||||
{
|
||||
|
@ -16,8 +21,8 @@
|
|||
debug_target = target;
|
||||
|
||||
files = [[Array array] retain];
|
||||
//FIXME need a window manager
|
||||
source_window = [[Window alloc] initWithRect: getwrect (stdscr)];
|
||||
source_window = [[Window alloc] initWithRect: {nil, [application size]}];
|
||||
[application addView:source_window];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -47,6 +52,7 @@
|
|||
file_proxy = [[ProxyView alloc] initWithView: current_file];
|
||||
//FIXME id<View>?
|
||||
[source_window insertSelected: (View *) file_proxy];
|
||||
[source_window redraw];
|
||||
}
|
||||
|
||||
-handleDebugEvent
|
||||
|
|
Loading…
Reference in a new issue