ui/cocoa/toolbar.m

changeset 49
a80ba8741be6
parent 25
78ae3efe463f
child 126
f190d03dce0f
--- a/ui/cocoa/toolbar.m	Mon May 19 21:15:43 2014 +0200
+++ b/ui/cocoa/toolbar.m	Tue May 20 13:29:53 2014 +0200
@@ -53,9 +53,14 @@
     callback = f;
     userdata = data;
     groups = NULL;
+    isToggleButton = NO;
     return self;
 }
 
+- (void) setIsToggleButton:(BOOL)t {
+    isToggleButton = t;
+}
+
 - (void) addGroup:(int)group {
     groups = ucx_list_append(groups, (void*)(intptr_t)group);
 }
@@ -90,18 +95,23 @@
         [button setImage:[NSImage imageNamed: NSImageNameRemoveTemplate]];
     }
     [button setBezelStyle: NSTexturedRoundedBezelStyle];
-    [item setView:button];
     
     // event
     EventWrapper *event = [[EventWrapper alloc]
                            initWithData:userdata callback:callback];
-    [button setAction:@selector(handleEvent:)];
+    if(isToggleButton) {
+        [button setButtonType: NSPushOnPushOffButton];
+        [button setAction:@selector(handleToggleEvent:)];
+    } else {
+        [button setAction:@selector(handleEvent:)];
+    }
     [button setTarget:event];
     
     if(groups) {
         uic_add_group_widget(obj->ctx, item, groups);
     }
     
+    [item setView:button];
     return item;
 }
 
@@ -210,24 +220,42 @@
 }
 
 void ui_toolitem_stgr(char *name, char *stockid, ui_callback f, void *udata, ...) {
+    va_list ap;
+    va_start(ap, udata);
+    ui_toolbar_stock_button(name, stockid, NO, f, udata, ap);
+    va_end(ap);
+}
+
+void ui_toolitem_toggle_st(char *name, char *stockid, ui_callback f, void *udata) {
+    ui_toolitem_toggle_stgr(name, stockid, f, udata, -1);
+}
+
+void ui_toolitem_toggle_stgr(char *name, char *stockid, ui_callback f, void *udata, ...) {
+    va_list ap;
+    va_start(ap, udata);
+    ui_toolbar_stock_button(name, stockid, YES, f, udata, ap);
+    va_end(ap);
+}
+
+
+void ui_toolbar_stock_button(char *name, char *stockid, BOOL toggle, ui_callback f, void *udata, va_list ap) {
     UiToolbarStockItem *item = [[UiToolbarStockItem alloc]
                                 initWithIdentifier: name
                                 stockID: stockid
                                 callback: f
                                 userdata: udata];
+    [item setIsToggleButton: toggle];
     NSString *identifier = [[NSString alloc]initWithUTF8String:name];
     [toolbar_delegate addItem: identifier item: item];
     
     // add groups
-    va_list ap;
-    va_start(ap, udata);
     int group;
     while((group = va_arg(ap, int)) != -1) {
         [item addGroup: group];
     }
-    va_end(ap);
 }
 
+
 void ui_toolbar_add_default(char *name) {
     NSString *identifier = [[NSString alloc]initWithUTF8String:name];
     [toolbar_delegate addDefault: identifier];

mercurial