From 28ff0cfb0af7d58244dfd06546b2c8ec37f01c75 Mon Sep 17 00:00:00 2001 From: Sven Weidauer Date: Tue, 1 Feb 2011 08:39:32 +0000 Subject: Factored Tree class out of TreeView svn path=/trunk/netsurf/; revision=11577 --- cocoa/Tree.m | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 cocoa/Tree.m (limited to 'cocoa/Tree.m') diff --git a/cocoa/Tree.m b/cocoa/Tree.m new file mode 100644 index 000000000..b5cbf2068 --- /dev/null +++ b/cocoa/Tree.m @@ -0,0 +1,140 @@ +/* + * Copyright 2011 Sven Weidauer + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "cocoa/Tree.h" +#import "cocoa/coordinates.h" + +#import "desktop/tree.h" + +@implementation Tree + +@synthesize delegate; + +static void tree_redraw_request( int x, int y, int w, int h, void *data ); +static void tree_resized( struct tree *tree, int w, int h, void *data ); +static void tree_scroll_visible( int y, int height, void *data ); +static void tree_get_window_dimensions( int *width, int *height, void *data ); + +static const struct treeview_table cocoa_tree_callbacks = { + .redraw_request = tree_redraw_request, + .resized = tree_resized, + .scroll_visible = tree_scroll_visible, + .get_window_dimensions = tree_get_window_dimensions +}; + +- initWithFlags: (unsigned int)flags; +{ + if ((self = [super init]) == nil) return nil; + + tree = tree_create( flags, &cocoa_tree_callbacks, self ); + if (tree == NULL) { + [self release]; + return nil; + } + + return self; +} + + +- (void) dealloc; +{ + tree_delete( tree ); + [super dealloc]; +} + +- (struct node *) rootNode; +{ + return tree_get_root( tree ); +} + +- (struct tree *) tree; +{ + return tree; +} + +- (BOOL) isRedrawing; +{ + return tree_get_redraw( tree ); +} + +- (void) setRedrawing: (BOOL) newRedrawing; +{ + tree_set_redraw( tree, newRedrawing ); +} + +//MARK: - +//MARK: Callbacks + +static void tree_redraw_request( int x, int y, int w, int h, void *data ) +{ + id delegate = ((Tree *)data)->delegate; + [delegate tree: (Tree *)data requestedRedrawInRect: cocoa_rect_wh( x, y, w, h )]; +} + +static void tree_resized( struct tree *tree, int w, int h, void *data ) +{ + id delegate = ((Tree *)data)->delegate; + [delegate tree: (Tree *)data resized: cocoa_size( w, h )]; +} + +static void tree_scroll_visible( int y, int height, void *data ) +{ + id delegate = ((Tree *)data)->delegate; + [delegate tree: (Tree *)data scrollPoint: cocoa_point( 0, y )]; +} + +static void tree_get_window_dimensions( int *width, int *height, void *data ) +{ + id delegate = ((Tree *)data)->delegate; + if (delegate == nil) return; + + NSSize size = [delegate treeWindowSize: (Tree *)data]; + + *width = cocoa_pt_to_px( size.width ); + *height = cocoa_pt_to_px( size.height ); +} + +@end + +@implementation Tree (ViewInterface) + +- (void) drawRect: (NSRect) rect inView: (NSView *) view; +{ + tree_draw( tree, 0, 0, cocoa_pt_to_px( NSMinX( rect ) ), cocoa_pt_to_px( NSMinY( rect )), + cocoa_pt_to_px( NSWidth( rect ) ), cocoa_pt_to_px( NSHeight( rect ) ) ); +} + +- (void) mouseAction: (browser_mouse_state)state atPoint: (NSPoint)point; +{ + tree_mouse_action( tree, state, cocoa_pt_to_px( point.x ), cocoa_pt_to_px( point.y ) ); +} + +- (void) mouseDragEnd: (browser_mouse_state)state fromPoint: (NSPoint)p0 toPoint: (NSPoint) p1; +{ + tree_drag_end( tree, state, + cocoa_pt_to_px( p0.x ), cocoa_pt_to_px( p0.y ), + cocoa_pt_to_px( p1.x ), cocoa_pt_to_px( p1.y ) ); +} + +- (void) keyPress: (uint32_t) key; +{ + tree_keypress( tree, key ); +} + +@end + -- cgit v1.2.3