mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-05-06 16:01:10 +00:00
[qwaq] Hook up the scroll bar
It's mostly working now, just some issues with clicking on the bar and the thumb tab doesn't work.
This commit is contained in:
parent
b8005a99c9
commit
1a34f3663a
4 changed files with 47 additions and 23 deletions
|
@ -73,6 +73,7 @@
|
||||||
file_proxy = [ProxyView withView: current_file];
|
file_proxy = [ProxyView withView: current_file];
|
||||||
[[current_file gotoLine:state.line - 1] highlightLine];
|
[[current_file gotoLine:state.line - 1] highlightLine];
|
||||||
[[current_file onEvent] addListener: self :@selector(proxy_event::)];
|
[[current_file onEvent] addListener: self :@selector(proxy_event::)];
|
||||||
|
[current_file setVerticalScrollBar:scrollbar];
|
||||||
//FIXME id<View>?
|
//FIXME id<View>?
|
||||||
[source_window insertSelected: (View *) file_proxy];
|
[source_window insertSelected: (View *) file_proxy];
|
||||||
[source_window setTitle: [current_file filename]];
|
[source_window setTitle: [current_file filename]];
|
||||||
|
@ -95,9 +96,11 @@
|
||||||
|
|
||||||
printf ("%s:%d\n", state.file, state.line);
|
printf ("%s:%d\n", state.file, state.line);
|
||||||
if (current_file != file) {
|
if (current_file != file) {
|
||||||
|
[current_file setVerticalScrollBar:nil];
|
||||||
[[current_file onEvent] removeListener:self :@selector(proxy_event::)];
|
[[current_file onEvent] removeListener:self :@selector(proxy_event::)];
|
||||||
[file_proxy setView:file];
|
[file_proxy setView:file];
|
||||||
[[file onEvent] addListener:self :@selector(proxy_event::)];
|
[[file onEvent] addListener:self :@selector(proxy_event::)];
|
||||||
|
[file setVerticalScrollBar:scrollbar];
|
||||||
[source_window setTitle: [file filename]];
|
[source_window setTitle: [file filename]];
|
||||||
current_file = file;
|
current_file = file;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,19 +25,15 @@
|
||||||
return [[[self alloc] initWithRect:rect file:filename] autorelease];
|
return [[[self alloc] initWithRect:rect file:filename] autorelease];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)onScroll:(id)sender
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
-setVerticalScrollBar:(ScrollBar *)scrollbar
|
-setVerticalScrollBar:(ScrollBar *)scrollbar
|
||||||
{
|
{
|
||||||
[scrollbar retain];
|
[scrollbar retain];
|
||||||
[[vScrollBar onScroll] removeListener:self :@selector(onScroll)];
|
[[vScrollBar onScroll] removeListener:self :@selector(onScroll:)];
|
||||||
[vScrollBar release];
|
[vScrollBar release];
|
||||||
|
|
||||||
vScrollBar = scrollbar;
|
vScrollBar = scrollbar;
|
||||||
[vScrollBar setRange:line_count];
|
[vScrollBar setRange:line_count];
|
||||||
[[vScrollBar onScroll] addListener:self :@selector(onScroll)];
|
[[vScrollBar onScroll] addListener:self :@selector(onScroll:)];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,6 +160,22 @@ static int handleEvent (Editor *self, qwaq_event_t *event)
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-scrollTo:(unsigned)target
|
||||||
|
{
|
||||||
|
if (target > scroll.y) {
|
||||||
|
base_index = [buffer nextLine:base_index :target - scroll.y];
|
||||||
|
} else if (target < scroll.y) {
|
||||||
|
base_index = [buffer prevLine:base_index :scroll.y - target];
|
||||||
|
}
|
||||||
|
scroll.y = target;
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)onScroll:(id)sender
|
||||||
|
{
|
||||||
|
[self scrollTo:[sender index]];
|
||||||
|
}
|
||||||
|
|
||||||
-recenter:(int) force
|
-recenter:(int) force
|
||||||
{
|
{
|
||||||
if (!force) {
|
if (!force) {
|
||||||
|
@ -177,12 +189,7 @@ static int handleEvent (Editor *self, qwaq_event_t *event)
|
||||||
} else {
|
} else {
|
||||||
target = cursor.y - ylen / 2;
|
target = cursor.y - ylen / 2;
|
||||||
}
|
}
|
||||||
if (target > scroll.y) {
|
[self scrollTo:target];
|
||||||
base_index = [buffer nextLine:base_index :target - scroll.y];
|
|
||||||
} else if (target < scroll.y) {
|
|
||||||
base_index = [buffer prevLine:base_index :scroll.y - target];
|
|
||||||
}
|
|
||||||
scroll.y = target;
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
-setPageStep:(unsigned)pageStep;
|
-setPageStep:(unsigned)pageStep;
|
||||||
-setSingleStep:(unsigned)singleStep;
|
-setSingleStep:(unsigned)singleStep;
|
||||||
-setIndex:(unsigned)index;
|
-setIndex:(unsigned)index;
|
||||||
|
-(unsigned)index;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif//__qwaq_ui_scrollbar_h
|
#endif//__qwaq_ui_scrollbar_h
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
if (!(self = [super initWithRect:rect])) {
|
if (!(self = [super initWithRect:rect])) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
options = ofRelativeEvents;
|
||||||
buffer = [[DrawBuffer buffer:size] retain];
|
buffer = [[DrawBuffer buffer:size] retain];
|
||||||
objects = [[Group withContext:buffer owner:self] retain];
|
objects = [[Group withContext:buffer owner:self] retain];
|
||||||
onScroll = [[ListenerGroup listener] retain];
|
onScroll = [[ListenerGroup listener] retain];
|
||||||
|
@ -27,13 +28,13 @@
|
||||||
[icons[0] addch:acs_char (ACS_UARROW)];
|
[icons[0] addch:acs_char (ACS_UARROW)];
|
||||||
[icons[1] addch:acs_char (ACS_DARROW)];
|
[icons[1] addch:acs_char (ACS_DARROW)];
|
||||||
thumbPos = {0, 1};
|
thumbPos = {0, 1};
|
||||||
thumbSel = @selector(verticalSlide);
|
thumbSel = @selector(verticalSlide:);
|
||||||
growMode &= ~gfGrowLoY;
|
growMode &= ~gfGrowLoY;
|
||||||
} else {
|
} else {
|
||||||
[icons[0] addch:acs_char (ACS_LARROW)];
|
[icons[0] addch:acs_char (ACS_LARROW)];
|
||||||
[icons[1] addch:acs_char (ACS_RARROW)];
|
[icons[1] addch:acs_char (ACS_RARROW)];
|
||||||
thumbPos = {1, 0};
|
thumbPos = {1, 0};
|
||||||
thumbSel = @selector(horizontalSlide);
|
thumbSel = @selector(horizontalSlide:);
|
||||||
growMode &= ~gfGrowLoX;
|
growMode &= ~gfGrowLoX;
|
||||||
}
|
}
|
||||||
bgchar = acs_char (ACS_CKBOARD);
|
bgchar = acs_char (ACS_CKBOARD);
|
||||||
|
@ -44,8 +45,8 @@
|
||||||
thumbTab = [Button withPos:thumbPos
|
thumbTab = [Button withPos:thumbPos
|
||||||
releasedIcon:icons[2] pressedIcon:icons[2]];
|
releasedIcon:icons[2] pressedIcon:icons[2]];
|
||||||
|
|
||||||
[[backButton onPress] addListener:self :@selector(scrollBack:)];
|
[[backButton onClick] addListener:self :@selector(scrollBack:)];
|
||||||
[[forwardButton onPress] addListener:self :@selector(scrollForward:)];
|
[[forwardButton onClick] addListener:self :@selector(scrollForward:)];
|
||||||
[[thumbTab onPress] addListener:self :thumbSel];
|
[[thumbTab onPress] addListener:self :thumbSel];
|
||||||
|
|
||||||
singleStep = 1;
|
singleStep = 1;
|
||||||
|
@ -86,16 +87,14 @@
|
||||||
|
|
||||||
-draw
|
-draw
|
||||||
{
|
{
|
||||||
syncprintf("scrollbar start");
|
|
||||||
if (vertical) {
|
|
||||||
[self mvvline:pos, bgchar, ylen];
|
|
||||||
} else {
|
|
||||||
[self mvhline:pos, bgchar, xlen];
|
|
||||||
}
|
|
||||||
[super draw];
|
[super draw];
|
||||||
|
if (vertical) {
|
||||||
|
[buffer mvvline:{0,0}, bgchar, ylen];
|
||||||
|
} else {
|
||||||
|
[buffer mvhline:{0,0}, bgchar, xlen];
|
||||||
|
}
|
||||||
[objects draw];
|
[objects draw];
|
||||||
[textContext blitFromBuffer:buffer to:pos from:[buffer rect]];
|
[textContext blitFromBuffer:buffer to:pos from:[buffer rect]];
|
||||||
syncprintf("scrollbar end");
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +111,7 @@ position_tab (ScrollBar *self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[self.thumbTab move:{p.x - o.x, p.y - o.y}];
|
[self.thumbTab move:{p.x - o.x, p.y - o.y}];
|
||||||
|
[self redraw];
|
||||||
}
|
}
|
||||||
|
|
||||||
-resize:(Extent)delta
|
-resize:(Extent)delta
|
||||||
|
@ -177,6 +177,14 @@ page (ScrollBar *self, Point pos)
|
||||||
[self page:singleStep dir:1];
|
[self page:singleStep dir:1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void)horizontalSlide:(id)sender
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)verticalSlide:(id)sender
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
-handleEvent:(qwaq_event_t *)event
|
-handleEvent:(qwaq_event_t *)event
|
||||||
{
|
{
|
||||||
[super handleEvent: event];
|
[super handleEvent: event];
|
||||||
|
@ -224,4 +232,9 @@ page (ScrollBar *self, Point pos)
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(unsigned)index
|
||||||
|
{
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in a new issue