From d21447d096a320a08b3efb2b8768fad0dcdcfd64 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 5 May 2016 22:28:51 +0100 Subject: move frontends into sub directory --- frontends/cocoa/FormSelectMenu.m | 113 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 frontends/cocoa/FormSelectMenu.m (limited to 'frontends/cocoa/FormSelectMenu.m') diff --git a/frontends/cocoa/FormSelectMenu.m b/frontends/cocoa/FormSelectMenu.m new file mode 100644 index 000000000..84e04cd25 --- /dev/null +++ b/frontends/cocoa/FormSelectMenu.m @@ -0,0 +1,113 @@ +/* + * 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/FormSelectMenu.h" +#import "cocoa/coordinates.h" + +#import "desktop/browser.h" +#import "render/form.h" + +static inline NSRect cocoa_rect_for_control( struct browser_window *bw, struct form_control *control) +{ + struct rect r; + form_control_bounding_rect(control, &r); + return cocoa_scaled_rect(browser_window_get_scale(bw), + r.x0, + r.y0, + r.x1, + r.y1); +} + +@interface FormSelectMenu () + +- (void) itemSelected: (id) sender; + +@end + + +@implementation FormSelectMenu + +- (id) initWithControl: (struct form_control *) c forWindow: (struct browser_window *) w +{ + if ((self = [super init]) == nil) return nil; + + control = c; + browser = w; + + menu = [[NSMenu alloc] initWithTitle: @"Select"]; + if (menu == nil) { + [self release]; + return nil; + } + + [menu addItemWithTitle: @"" action: NULL keyEquivalent: @""]; + + NSInteger currentItemIndex = 0; + struct form_option *opt; + for (opt = form_select_get_option(control, 0); + opt != NULL; + opt = opt->next) { + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle: [NSString stringWithUTF8String: opt->text] + action: @selector( itemSelected: ) + keyEquivalent: @""]; + if (opt->selected) { + [item setState: NSOnState]; + } + [item setTarget: self]; + [item setTag: currentItemIndex++]; + [menu addItem: item]; + [item release]; + } + + [menu setDelegate: self]; + + return self; +} + +- (void) dealloc +{ + [cell release]; + [menu release]; + + [super dealloc]; +} + +- (void) runInView: (NSView *) view +{ + [self retain]; + + cell = [[NSPopUpButtonCell alloc] initTextCell: @"" pullsDown: YES]; + [cell setMenu: menu]; + + const NSRect rect = cocoa_rect_for_control(browser, control); + + [cell attachPopUpWithFrame: rect inView: view]; + [cell performClickWithFrame: rect inView: view]; +} + +- (void) itemSelected: (id) sender +{ + form_select_process_selection( control, [sender tag] ); +} + +- (void) menuDidClose: (NSMenu *) sender +{ + [self release]; +} + +@end -- cgit v1.2.3