mirror of https://github.com/Airr/nim-cocoa.git
parent
b5d3ed13d8
commit
b00a02b22e
@ -0,0 +1,15 @@ |
|||||||
|
{.compile: "widgets/statusbar.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newStatusBar*(resource: cstring): ID {.cdecl, importc: "createStatusBar".} |
||||||
|
proc newStatusMenu*(): ID {.cdecl, importc: "createStatusMenu".} |
||||||
|
proc newStatusMenuItem*(parent: ID, tag: int, title: cstring, callback: ACTION) {.cdecl, importc: "createStatusItem".} |
||||||
|
proc separator*(parent: ID) {.cdecl, importc: "addSeparator".} |
||||||
|
|
||||||
|
proc setStatusMenu*(parent, menu: ID) {.cdecl,importc: "setMenu".} |
||||||
|
proc tag*(widget: ID): int {.cdecl, importc: "tag".} |
||||||
|
proc Status_Init*() {.cdecl, importc: "Status_Init".} |
||||||
|
|
||||||
|
proc `menu=`*(parent,widget: ID ) = |
||||||
|
parent.setStatusMenu(widget) |
@ -0,0 +1,102 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
#import <SystemConfiguration/SystemConfiguration.h> |
||||||
|
#import <mach-o/getsect.h> |
||||||
|
#import <mach-o/ldsyms.h> |
||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
typedef void(*ACTION)(id); |
||||||
|
|
||||||
|
// SUBCLASSED NSMENUITEM ENABLING C-STYLE CALLBACKS |
||||||
|
@interface StatusMenuItem: NSMenuItem{ |
||||||
|
ACTION menuAction; |
||||||
|
} |
||||||
|
@property ACTION menuAction; |
||||||
|
|
||||||
|
|
||||||
|
- (void) click:(id)sender; |
||||||
|
@end |
||||||
|
|
||||||
|
@implementation StatusMenuItem |
||||||
|
|
||||||
|
@synthesize menuAction; |
||||||
|
|
||||||
|
|
||||||
|
- (void) click:(id)sender { |
||||||
|
menuAction(sender); |
||||||
|
} |
||||||
|
@end |
||||||
|
NSData *getResource(NSString *sectionName, NSString *itemName) { |
||||||
|
unsigned long size; |
||||||
|
void *ptr = getsectiondata(&_mh_execute_header, sectionName.UTF8String, itemName.UTF8String, &size); |
||||||
|
NSData *resourceData = [NSData dataWithBytesNoCopy:ptr length:size freeWhenDone:NO]; |
||||||
|
return resourceData; |
||||||
|
} |
||||||
|
|
||||||
|
id createStatusBar(const char *resource) { |
||||||
|
|
||||||
|
NSString *tmpStr = [NSString stringWithUTF8String: resource]; |
||||||
|
|
||||||
|
NSStatusItem *self; |
||||||
|
NSStatusBar *statusBar = [NSStatusBar systemStatusBar]; |
||||||
|
self = [statusBar statusItemWithLength:NSSquareStatusItemLength]; |
||||||
|
|
||||||
|
NSImage *icon = [[NSImage alloc] initWithContentsOfFile: tmpStr]; |
||||||
|
icon.template = YES; |
||||||
|
|
||||||
|
self.button.image = icon; |
||||||
|
return self; |
||||||
|
} |
||||||
|
|
||||||
|
void setMenu(id parent, id menu) { |
||||||
|
// ((NSStatusItem *)parent).menu = menu; |
||||||
|
[(NSStatusItem *)parent setMenu: menu]; |
||||||
|
} |
||||||
|
|
||||||
|
// FUNCTION TO CREATE MENU ITEMS/ENTRIES |
||||||
|
void createStatusItem(id parent, int tag, const char *title, ACTION func) { |
||||||
|
StatusMenuItem *self = [StatusMenuItem new]; |
||||||
|
self.title = [NSString stringWithUTF8String: title]; |
||||||
|
self.target = self; |
||||||
|
if (func) |
||||||
|
{ |
||||||
|
self.menuAction = func; |
||||||
|
self.action = @selector(click:); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
if (tag) {self.tag = tag;} |
||||||
|
|
||||||
|
[parent addItem: self]; |
||||||
|
|
||||||
|
// return self; |
||||||
|
} |
||||||
|
|
||||||
|
// FUNCTION THAT RETURNS A MENU OBJECT |
||||||
|
NSMenu *createStatusMenu() { |
||||||
|
return NSMenu.new; |
||||||
|
} |
||||||
|
|
||||||
|
void setTag(id widget, int number) { |
||||||
|
((NSMenuItem*)widget).tag = number; |
||||||
|
} |
||||||
|
|
||||||
|
int tag(id widget) { |
||||||
|
return ((NSMenuItem*)widget).tag; |
||||||
|
} |
||||||
|
|
||||||
|
// FUNCTION TO ADD A SEPARATOR TO A MENU |
||||||
|
void addSeparator(id parent) { |
||||||
|
[parent addItem: [NSMenuItem separatorItem]]; |
||||||
|
} |
||||||
|
|
||||||
|
void Status_Init() { |
||||||
|
[NSApplication sharedApplication]; |
||||||
|
[NSApp setActivationPolicy:NSApplicationActivationPolicyAccessory]; |
||||||
|
} |
||||||
|
|
||||||
|
// FUNCTION THAT PASSES CONTROL TO COCOA SUBSYSTEM |
||||||
|
void Status_Run(id obj) { |
||||||
|
[NSApp setDelegate: obj]; |
||||||
|
[NSApp run]; |
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue