summaryrefslogtreecommitdiff
path: root/cocoa/FormSelectMenu.m
diff options
context:
space:
mode:
authorSven Weidauer <sven.weidauer@gmail.com>2011-01-25 15:09:06 +0000
committerSven Weidauer <sven.weidauer@gmail.com>2011-01-25 15:09:06 +0000
commitcca607fbe85ae6b6ad517a08eee80ac6a6e83c50 (patch)
tree1edbd4951c3c62630a351178adf7c19b57345285 /cocoa/FormSelectMenu.m
parent5615eb65af3cb4c775b36254e2579b98aa1439fe (diff)
downloadnetsurf-cca607fbe85ae6b6ad517a08eee80ac6a6e83c50.tar.gz
netsurf-cca607fbe85ae6b6ad517a08eee80ac6a6e83c50.tar.bz2
Creating select menus for forms
svn path=/trunk/netsurf/; revision=11484
Diffstat (limited to 'cocoa/FormSelectMenu.m')
-rw-r--r--cocoa/FormSelectMenu.m98
1 files changed, 98 insertions, 0 deletions
diff --git a/cocoa/FormSelectMenu.m b/cocoa/FormSelectMenu.m
new file mode 100644
index 000000000..62cb91220
--- /dev/null
+++ b/cocoa/FormSelectMenu.m
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "FormSelectMenu.h"
+
+#import "render/form.h"
+#import "render/box.h"
+
+@interface FormSelectMenu ()
+
+- (void) itemSelected: (id) sender;
+
+@end
+
+
+@implementation FormSelectMenu
+
+
+- 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;
+ for (struct form_option *opt = control->data.select.items; 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];
+
+ struct rect r;
+ box_bounds( control->box, &r );
+
+ [cell performClickWithFrame: NSMakeRect( r.x0, r.y0, r.x1 - r.x0, r.y1 - r.y0 )
+ inView: view];
+}
+
+- (void) itemSelected: (id) sender;
+{
+ form_select_process_selection( browser->current_content, control, [sender tag] );
+}
+
+- (void) menuDidClose: (NSMenu *) sender;
+{
+ [self release];
+}
+
+@end