mirror of https://github.com/Airr/nim-cocoa.git
parent
bfbe13a301
commit
0d67f969db
@ -1,3 +1,3 @@ |
|||||||
# ---> Nim |
.DS_Store |
||||||
nimcache/ |
*.app |
||||||
|
|
||||||
|
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/button.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newButton*(parent: ID; caption: cstring; left: cint; top: cint; width: cint; height: cint; `func`: ACTION): ID {.cdecl, importc: "createButton".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/checkbox.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newCheckBox*(parent: ID, caption: cstring, left, top, width, height:int): ID {.cdecl, importc: "createCheckBox".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/combobox.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newComboBox*(parent: ID; left: cint; top: cint; width: cint; height: cint; `callback`: ACTION): ID {.cdecl, importc: "createComboBox".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/dialog.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newDialog*(title, message: cstring, height: cint): cint {.cdecl, importc: "createDialog".} |
@ -0,0 +1,56 @@ |
|||||||
|
{.compile: "widgets/functions.m".} |
||||||
|
|
||||||
|
type |
||||||
|
ID* = pointer |
||||||
|
ACTION* = proc (a2: ID) |
||||||
|
|
||||||
|
# GUI ANCHOR SYSTEM |
||||||
|
const |
||||||
|
akNone* = 0 |
||||||
|
akRight* = 1 |
||||||
|
akWidth* = 2 |
||||||
|
akLeft* = 4 |
||||||
|
akBottom* = 8 |
||||||
|
akHeight* = 16 |
||||||
|
akFull* = 18 |
||||||
|
akTop* = 32 |
||||||
|
|
||||||
|
# Flags for GUI Anchor System |
||||||
|
|
||||||
|
# akNone No Anchor |
||||||
|
# akRight Anchor to Right of Window |
||||||
|
# akWidth Anchor to Left and Right (width) |
||||||
|
# akLeft Anchor to Left |
||||||
|
# akBottom Anchor to Bottom |
||||||
|
# akHeight Anchor to Top and Bottom |
||||||
|
# akFull Anchor to Left/Right/Top/Bottom |
||||||
|
# akTop Anchor to Top |
||||||
|
|
||||||
|
proc `anchor=`*(widget: ID; value: cint) {.cdecl, importc: "Pin".} |
||||||
|
proc Cocoa_Init*() {.cdecl, importc: "Cocoa_Init".} |
||||||
|
proc Cocoa_Run*() {.cdecl, importc: "Cocoa_Run".} |
||||||
|
proc `text=`*(widget: ID; txt: cstring) {.cdecl, importc: "SetText".} |
||||||
|
proc `text`*(widget: ID): cstring {.cdecl, importc: "GetText".} |
||||||
|
proc `item=`*(widget: ID; txt: cstring) {.cdecl, importc: "AddItem".} |
||||||
|
proc `item`*(widget: ID) {.cdecl, importc: "GetItem".} |
||||||
|
proc `value=`*(widget: ID, value: cint) {.cdecl, importc: "SetValue".} |
||||||
|
proc `value`*(widget: ID): cint {.cdecl, importc: "GetValue".} |
||||||
|
|
||||||
|
|
||||||
|
# proc `text=`*(widget: ID; txt: cstring) = |
||||||
|
# widget.SetText(txt) |
||||||
|
|
||||||
|
# proc `text`*(widget: ID): cstring = |
||||||
|
# GetText(widget) |
||||||
|
|
||||||
|
# proc `item`*(widget: ID): cstring = |
||||||
|
# GetItem(widget) |
||||||
|
|
||||||
|
# proc `anchor=`*(widget: ID; value: cint) = |
||||||
|
# widget.AutoSizeMask(value) |
||||||
|
|
||||||
|
# proc `value=`*(widget: ID, value: cint) = |
||||||
|
# widget.SetValue(value) |
||||||
|
|
||||||
|
# proc `value`*(widget: ID): cint = |
||||||
|
# result = widget.GetValue() |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/label.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newLabel*(parent: ID; txt: cstring, left, top, width, height: int): ID {.cdecl, importc: "createLabel".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/line.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newLine*(parent: ID, left, top, width: cint): ID {.cdecl, importc: "createLine".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/listbox.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newListBox*(parent: ID, left, top, width, height: cint): ID {.cdecl, importc: "createListBox".} |
@ -0,0 +1,7 @@ |
|||||||
|
{.compile: "widgets/menu.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newMenu*(title: cstring): ID {.cdecl, importc: "createMenu".} |
||||||
|
proc newMenuItem*(parent: ID, caption, key: cstring, `callback`:ACTION) {.cdecl, importc: "createMenuItem".} |
||||||
|
proc newMenuSeparator*(parent: ID) {.cdecl, importc: "createMenuSeparator".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/messagebox.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newMessageBox*(title, message: cstring, height: cint): cint {.cdecl, importc: "createMessageBox".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/opendialog.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newOpenDialog*(parent: ID, types: cstring): cstring {.cdecl, importc: "createOpenDialog".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/savedialog.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newSaveDialog*(parent: ID, types: cstring): cstring {.cdecl, importc: "createSaveDialog".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/slider.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newSlider*(parent: ID; left, top, width, height: int, `func`: ACTION): ID {.cdecl, importc: "createSlider".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/textedit.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newTextEdit*(parent: ID; txt: cstring, left, top, width, height: int): ID {.cdecl, importc: "createTextEdit".} |
@ -0,0 +1,5 @@ |
|||||||
|
{.compile: "widgets/textfield.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
proc newTextField*(parent: ID; txt: cstring; left: cint; top: cint; width: cint; height: cint): ID {.cdecl, importc: "createTextField".} |
@ -0,0 +1,8 @@ |
|||||||
|
{.compile: "widgets/window.m".} |
||||||
|
{.compile: "widgets/saneview.m".} |
||||||
|
|
||||||
|
import NSFunctions |
||||||
|
|
||||||
|
{.passL: "-fobjc-arc -framework Cocoa"} |
||||||
|
|
||||||
|
proc newWindow*(title: cstring, width, height: int): ID {.importc: "createWindow".} |
@ -0,0 +1,33 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@implementation CocoaButton |
||||||
|
|
||||||
|
@synthesize buttonAction; |
||||||
|
|
||||||
|
|
||||||
|
- (void) click:(id)sender { |
||||||
|
buttonAction(sender); |
||||||
|
} |
||||||
|
@end |
||||||
|
|
||||||
|
id createButton(id parent, const char* caption, int l, int t, int w, int h, ACTION func){ |
||||||
|
CocoaButton *widget = [[[CocoaButton alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease]; |
||||||
|
[widget setButtonType:NSMomentaryPushInButton]; |
||||||
|
[widget setBezelStyle: NSRoundedBezelStyle]; |
||||||
|
[widget setTitle: [NSString stringWithUTF8String:caption]]; |
||||||
|
[widget setTarget: widget]; |
||||||
|
// [widget setAutoresizingMask: NSViewMinXMargin ]; |
||||||
|
|
||||||
|
if (func) { |
||||||
|
[widget setButtonAction:func]; |
||||||
|
[widget setAction: @selector(click:)]; |
||||||
|
} |
||||||
|
[[parent contentView] addSubview:widget]; |
||||||
|
return widget; |
||||||
|
} |
||||||
|
|
@ -0,0 +1,29 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
id createCheckBox(id parent, const char* caption, int l, int t, int w, int h){ |
||||||
|
NSButton *self = [[[NSButton alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease]; |
||||||
|
[self setButtonType:NSSwitchButton]; |
||||||
|
[self setBezelStyle: 0]; |
||||||
|
[self setTitle: [NSString stringWithUTF8String:caption]]; |
||||||
|
[self setTarget: self]; |
||||||
|
|
||||||
|
[[parent contentView] addSubview:self]; |
||||||
|
return self; |
||||||
|
} |
||||||
|
|
||||||
|
void SetState(id widget, bool state) { |
||||||
|
if (state == TRUE) { |
||||||
|
[widget setState: NSOnState]; |
||||||
|
}else{ |
||||||
|
[widget setState: NSOffState]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int State(id widget) { |
||||||
|
return [widget state]; |
||||||
|
} |
@ -0,0 +1,562 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
typedef void* id; |
||||||
|
#define NSSTR(txt) [NSString stringWithUTF8String:txt] |
||||||
|
#define BeginMenu dispatch_async(dispatch_get_main_queue(), ^{ |
||||||
|
#define EndMenu }); |
||||||
|
|
||||||
|
|
||||||
|
#ifndef NSWindowStyleMaskTitled |
||||||
|
#define NSWindowStyleMaskTitled NSTitledWindowMask |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSWindowStyleMaskClosable |
||||||
|
#define NSWindowStyleMaskClosable NSClosableWindowMask |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSWindowStyleMaskMiniaturizable |
||||||
|
#define NSWindowStyleMaskMiniaturizable NSMiniaturizableWindowMask |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSWindowStyleMaskResizable |
||||||
|
#define NSWindowStyleMaskResizable NSResizableWindowMask |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSAlertStyleWarning |
||||||
|
#define NSAlertStyleWarning NSWarningAlertStyle |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSTextAlignmentLeft |
||||||
|
#define NSTextAlignmentLeft NSLeftTextAlignment |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSAlertStyleWarning |
||||||
|
#define NSAlertStyleWarning NSWarningAlertStyle |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSEventTypeKeyDown |
||||||
|
#define NSEventTypeKeyDown NSKeyDown |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSEventModifierFlagCommand |
||||||
|
#define NSEventModifierFlagCommand NSCommandKeyMask |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef NSEventModifierFlagOption |
||||||
|
#define NSEventModifierFlagOption NSAlternateKeyMask |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef void(*ACTION)(id); |
||||||
|
/**
|
||||||
|
Used by Internal Callback System |
||||||
|
to route callback to user provided |
||||||
|
subroutine |
||||||
|
|
||||||
|
Subroutine must not return value |
||||||
|
|
||||||
|
Ex: |
||||||
|
void Example(void); |
||||||
|
*/ |
||||||
|
|
||||||
|
enum { |
||||||
|
akNone, |
||||||
|
akRight, |
||||||
|
akWidth, |
||||||
|
akLeft = 4, |
||||||
|
akBottom = 8, |
||||||
|
akHeight = 16, |
||||||
|
akFull = 18, |
||||||
|
akTop = 32 |
||||||
|
|
||||||
|
}; |
||||||
|
/**
|
||||||
|
Flags for Widget Anchor System |
||||||
|
|
||||||
|
akNone No Anchor |
||||||
|
akRight Anchor to Right of Window |
||||||
|
akWidth Anchor to Left and Right (width) |
||||||
|
akLeft Anchor to Left |
||||||
|
akBottom Anchor to Bottom |
||||||
|
akHeight Anchor to Top and Bottom |
||||||
|
akTop Anchor to Top |
||||||
|
*/ |
||||||
|
|
||||||
|
@interface SaneView : NSClipView |
||||||
|
- (BOOL)isFlipped; |
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaWindow : NSWindow <NSApplicationDelegate,NSUserNotificationCenterDelegate,NSWindowDelegate> |
||||||
|
{ |
||||||
|
// NOT USED
|
||||||
|
} |
||||||
|
|
||||||
|
- (void)applicationDidFinishLaunching: (NSNotification *)notification; |
||||||
|
- (BOOL)applicationShouldTerminateAfterLastWindowClosed: (NSNotification *)notification; |
||||||
|
- (id) initFormWithTitle:(NSString*)title width:(NSInteger)width height:(NSInteger)height; |
||||||
|
- (void)createApplicationMenu; |
||||||
|
@end |
||||||
|
|
||||||
|
@interface awColorPanel: NSColorPanel { |
||||||
|
NSColor* theColor; |
||||||
|
NSModalSession modalSession; |
||||||
|
} |
||||||
|
@property (copy) NSColor* theColor;
|
||||||
|
|
||||||
|
- (void)colorUpdate:(NSColorPanel*)colorPanel; |
||||||
|
|
||||||
|
- (const char *) hexColor; |
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaListBox : NSScrollView <NSTableViewDataSource, NSTableViewDelegate> |
||||||
|
{
|
||||||
|
NSTableView *tbl; |
||||||
|
NSTableColumn *tblc; |
||||||
|
NSMutableArray *db; |
||||||
|
|
||||||
|
|
||||||
|
int cnt; |
||||||
|
} |
||||||
|
@property (retain) NSTableView *tbl; |
||||||
|
@property (retain) NSMutableArray *db; |
||||||
|
|
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame; |
||||||
|
- (void)doubleclicked:(id)sender; |
||||||
|
- (void)selected:(id)sender; |
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaButton: NSButton{ |
||||||
|
ACTION buttonAction; |
||||||
|
} |
||||||
|
@property ACTION buttonAction; |
||||||
|
|
||||||
|
|
||||||
|
- (void) click:(id)sender; |
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaComboBox : NSComboBox { |
||||||
|
// NSInteger currentItem;
|
||||||
|
ACTION comboCallBack; |
||||||
|
} |
||||||
|
|
||||||
|
@property ACTION comboCallBack; |
||||||
|
@property NSInteger currentItem; |
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame; |
||||||
|
|
||||||
|
/* notification responders */ |
||||||
|
- (void)comboBoxSelectionDidChange:(NSNotification *)notification; |
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaTextEdit : NSScrollView <NSTextViewDelegate,NSMenuDelegate> |
||||||
|
{ |
||||||
|
NSTextView *widget; |
||||||
|
} |
||||||
|
@property (retain) NSTextView *widget; |
||||||
|
- (id)initWithFrame:(NSRect)frame; |
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaMenu : NSMenu <NSMenuDelegate> |
||||||
|
{ |
||||||
|
ACTION menuAction; |
||||||
|
} |
||||||
|
|
||||||
|
@property (retain) NSMenu *menu; |
||||||
|
@property ACTION menuAction; |
||||||
|
|
||||||
|
|
||||||
|
- (void) CreateMenu: (NSString*) Title; |
||||||
|
- (void) AddItem: (NSString*)Title withShortcut: (NSString*)key andCallback: (ACTION) callback; |
||||||
|
// - (void) click:(id)sender;
|
||||||
|
- (void) SetAction: (id) widget Callback: (ACTION) func; |
||||||
|
- (void)addSeparator; |
||||||
|
//- (void) click:(id)sender;
|
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaMenuItem : NSMenuItem
|
||||||
|
{ |
||||||
|
ACTION menuItemAction; |
||||||
|
} |
||||||
|
@property ACTION menuItemAction; |
||||||
|
|
||||||
|
- (void) click:(id)sender; |
||||||
|
@end |
||||||
|
|
||||||
|
@interface CocoaSlider: NSSlider |
||||||
|
{ |
||||||
|
int Value; |
||||||
|
ACTION sliderAction; |
||||||
|
} |
||||||
|
@property int Value; |
||||||
|
@property ACTION sliderAction; |
||||||
|
|
||||||
|
- (IBAction)onChanged:(id)sender; |
||||||
|
- (id) initWithFrame:(NSRect)rect callBack:(ACTION)func; |
||||||
|
@end |
||||||
|
|
||||||
|
id createWindow(const char* title, int width, int height); |
||||||
|
/**
|
||||||
|
\brief Creates Main Window |
||||||
|
|
||||||
|
parameters: |
||||||
|
String: Title of Window, |
||||||
|
INT: Width of Window, |
||||||
|
INT: Height of Window |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer: Created Window |
||||||
|
*/ |
||||||
|
|
||||||
|
void Pin(id widget, NSInteger value); |
||||||
|
/**
|
||||||
|
\brief Specifies how child widget responds to resize of Parent |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Widget |
||||||
|
INT: Anchor point (see Enum above) |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/ |
||||||
|
|
||||||
|
void Cocoa_Init(); |
||||||
|
/**
|
||||||
|
\brief Initializes Cocoa GUI |
||||||
|
|
||||||
|
parameters: |
||||||
|
None |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/
|
||||||
|
|
||||||
|
void Cocoa_Run(); |
||||||
|
/**
|
||||||
|
\brief Passes control over to Cocoa Runtime |
||||||
|
|
||||||
|
parameters: |
||||||
|
None |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/ |
||||||
|
|
||||||
|
void Cocoa_Quit(); |
||||||
|
/**
|
||||||
|
\brief Terminates Cocoa Runtime |
||||||
|
|
||||||
|
parameters: |
||||||
|
None |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/ |
||||||
|
|
||||||
|
void Cocoa_About(); |
||||||
|
/**
|
||||||
|
\brief Displays Cocoa About Dialog |
||||||
|
|
||||||
|
parameters: |
||||||
|
None |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
|
||||||
|
Note: |
||||||
|
Utilizes information contained in Application Bundle's Info.plist |
||||||
|
*/ |
||||||
|
|
||||||
|
void SetText(id widget, const char* txt); |
||||||
|
/**
|
||||||
|
\brief Sets Widget Text |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Target Widget |
||||||
|
Text to set |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/
|
||||||
|
|
||||||
|
const char* GetText(id widget); |
||||||
|
/**
|
||||||
|
\brief Retrives Text from Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Target Widget |
||||||
|
|
||||||
|
Returns: |
||||||
|
String: from Widget |
||||||
|
*/ |
||||||
|
|
||||||
|
int GetValue(id widget); |
||||||
|
/**
|
||||||
|
\brief Retrieves INT value from Widget |
||||||
|
parameters: |
||||||
|
Pointer: Target Widget |
||||||
|
|
||||||
|
Returns: |
||||||
|
integer: from Widget |
||||||
|
*/ |
||||||
|
|
||||||
|
void SetValue(id widget, int value); |
||||||
|
/**
|
||||||
|
\brief Sets INT value for Widget |
||||||
|
parameters: |
||||||
|
Pointer: Target Widget |
||||||
|
INT: Value to set |
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
void AddItem(id widget, const char* txt ); |
||||||
|
/**
|
||||||
|
\brief Adds TEXT Item to ComboBox/ListBox |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Target Widget |
||||||
|
String: Text to Add |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/ |
||||||
|
|
||||||
|
// char* GetItem(id widget);
|
||||||
|
/**
|
||||||
|
\brief Retrieves Selected Text from ComboBox/ListBox |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Target Widget |
||||||
|
|
||||||
|
Returns: |
||||||
|
String: Text of Selected Item |
||||||
|
*/ |
||||||
|
|
||||||
|
id createTextField(id parent,const char* txt,int l, int t, int w, int h); |
||||||
|
/**
|
||||||
|
\brief Creates TextField (TextBox/TextEntry) Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
String: Default Text to Display, |
||||||
|
INT: Left Position in Parent, |
||||||
|
INT: Top Position in Parent, |
||||||
|
INT: Width of Widget, |
||||||
|
INT: Height of Widget |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer: Created TextField |
||||||
|
*/ |
||||||
|
|
||||||
|
id createComboBox(id parent,int l, int t, int w, int h, ACTION callback); |
||||||
|
/**
|
||||||
|
\brief Creates ComboBox Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
INT: Left Position in Parent, |
||||||
|
INT: Top Position in Parent, |
||||||
|
INT: Width of Widget, |
||||||
|
INT: Height of Widget, |
||||||
|
ACTION: Callback Function or NULL |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer: Created ComboBox |
||||||
|
*/ |
||||||
|
|
||||||
|
id createButton(id parent, const char* caption, int l, int t, int w, int h, ACTION func); |
||||||
|
/**
|
||||||
|
\brief Creates Button Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
String: Button Caption, |
||||||
|
INT: Left Position in Parent, |
||||||
|
INT: Top Position in Parent, |
||||||
|
INT: Width of Widget, |
||||||
|
INT: Height of Widget, |
||||||
|
ACTION: Callback Function or NULL |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer to Created Button |
||||||
|
*/ |
||||||
|
|
||||||
|
void SetAction(id widget, SEL func); |
||||||
|
|
||||||
|
id createCheckBox(id parent, const char* caption, int l, int t, int w, int h); |
||||||
|
/**
|
||||||
|
\brief Creates CheckBox Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
String: CheckBox Caption, |
||||||
|
INT: Left Position in Parent, |
||||||
|
INT: Top Position in Parent, |
||||||
|
INT: Width of Widget, |
||||||
|
INT: Height of Widget, |
||||||
|
ACTION: Callback Function or NULL |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer to Created TextField |
||||||
|
*/ |
||||||
|
|
||||||
|
void SetState(id widget, bool state); |
||||||
|
/**
|
||||||
|
\brief Sets State of CheckBox Widget (Checked/Unchecked) |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
BOOL: State (True for on, False for off) |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/ |
||||||
|
|
||||||
|
int State(id widget); |
||||||
|
/**
|
||||||
|
\brief Retrieves State of Checkbox (On[True], Off[False]) |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Checkbox Widget, |
||||||
|
|
||||||
|
Returns: |
||||||
|
BOOL: State [True/False] |
||||||
|
*/ |
||||||
|
|
||||||
|
id createListBox(id parent,int l, int t, int w, int h); |
||||||
|
/**
|
||||||
|
\brief Creates ListBox Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
INT: Left Position in Parent, |
||||||
|
INT: Top Position in Parent, |
||||||
|
INT: Width of Widget, |
||||||
|
INT: Height of Widget |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer: Created ListBox Widget |
||||||
|
*/ |
||||||
|
|
||||||
|
void LB_Clear(id widget); |
||||||
|
void SetItem(id widget, int pos); |
||||||
|
void RemoveItem(id widget, int pos); |
||||||
|
|
||||||
|
|
||||||
|
char* createOpenDialog( id parent, const char *types); |
||||||
|
/**
|
||||||
|
\brief Displays OpenFile Dialog Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
String: File Types Filter, separated by ":" |
||||||
|
|
||||||
|
Returns: |
||||||
|
String: Path to Selected File, or Blank String |
||||||
|
|
||||||
|
Example: |
||||||
|
char *fName = OpenDialog(mywin,"txt:c:h"); |
||||||
|
*/ |
||||||
|
|
||||||
|
char* createSaveDialog(id parent, const char* title, const char *types); |
||||||
|
/**
|
||||||
|
\brief Displays SaveFile Dialog Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
String: Dialog Title, |
||||||
|
String: File Types Filter, separated by ":" |
||||||
|
|
||||||
|
Returns: |
||||||
|
String: Path to Selected File, or Blank String |
||||||
|
|
||||||
|
Example: |
||||||
|
char *fName = SaveDialog(mywin,"txt:c:h"); |
||||||
|
*/ |
||||||
|
|
||||||
|
int createDialog(const char *title, const char *message, int type); |
||||||
|
int createMessageBox(const char *title, const char *message, int type); |
||||||
|
/**
|
||||||
|
\brief Displays MessageBox Dialog Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
String: Dialog Title, |
||||||
|
String: Message to Display, |
||||||
|
INT: Type of Dialog(?) |
||||||
|
|
||||||
|
Returns: |
||||||
|
INT: Value corresponding to OK or Cancel |
||||||
|
|
||||||
|
Example: |
||||||
|
char *fName = SaveDialog(mywin,"txt:c:h"); |
||||||
|
*/ |
||||||
|
|
||||||
|
id createColorDialog(); |
||||||
|
const char *getColor(id panel); |
||||||
|
const char* hexColor(id cPanel); |
||||||
|
|
||||||
|
id createLabel(id parent, const char* txt, int l, int t, int w, int h); |
||||||
|
/**
|
||||||
|
\brief Creates Label Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
String: Caption of Label, |
||||||
|
INT: Left Position in Parent, |
||||||
|
INT: Top Position in Parent, |
||||||
|
INT: Width of Widget, |
||||||
|
INT: Height of Widget |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer: Label Widget |
||||||
|
*/
|
||||||
|
|
||||||
|
id createTextEdit(id parent, const char* txt, int l, int t, int w, int h); |
||||||
|
/**
|
||||||
|
\brief Creates TextEdit Widget |
||||||
|
|
||||||
|
parameters: |
||||||
|
Pointer: Parent Widget, |
||||||
|
String: Default Text, |
||||||
|
INT: Left Position in Parent, |
||||||
|
INT: Top Position in Parent, |
||||||
|
INT: Width of Widget, |
||||||
|
INT: Height of Widget |
||||||
|
|
||||||
|
Returns: |
||||||
|
Pointer: Label Widget |
||||||
|
*/
|
||||||
|
|
||||||
|
void Notify(const char *title, const char * subtitle, const char *text); |
||||||
|
/**
|
||||||
|
\brief Sends Notification to macOS Notification System |
||||||
|
|
||||||
|
parameters: |
||||||
|
String: Title of Notification, |
||||||
|
String: Subtitle of Notification, |
||||||
|
String: Message to Display |
||||||
|
|
||||||
|
Returns: |
||||||
|
None |
||||||
|
*/
|
||||||
|
|
||||||
|
id createLine(id parent, int x, int y, int width); |
||||||
|
|
||||||
|
id createMenu(const char * Title); |
||||||
|
void createMenuItem(id parent, const char *caption, const char *key, ACTION callback); |
||||||
|
void createMenuSeparator(id parent); |
||||||
|
|
||||||
|
id createSlider(id parent, int left, int top, int width, int height, ACTION callback); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
// #endif
|
@ -0,0 +1,98 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#include "col.h" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@implementation awColorPanel |
||||||
|
@synthesize theColor; |
||||||
|
|
||||||
|
- (void)colorUpdate:(awColorPanel*)colorPanel{ |
||||||
|
theColor = colorPanel.color; |
||||||
|
// printf("%s\n",[self hexColor]); |
||||||
|
} |
||||||
|
|
||||||
|
- (const char *) hexColor { |
||||||
|
NSString* hexString = [NSString stringWithFormat:@"%02X%02X%02X", |
||||||
|
(int) (theColor.redComponent * 0xFF), |
||||||
|
(int) (theColor.greenComponent * 0xFF), |
||||||
|
(int) (theColor.blueComponent * 0xFF)]; |
||||||
|
return [hexString UTF8String]; |
||||||
|
} |
||||||
|
@end |
||||||
|
|
||||||
|
id createColorDialog() { |
||||||
|
NSColorPanel *cp = [awColorPanel sharedColorPanel]; |
||||||
|
[cp setTarget:cp]; |
||||||
|
[cp setAction:@selector(colorUpdate:)]; |
||||||
|
// [NSApp runModalForWindow: cp]; |
||||||
|
[cp makeKeyAndOrderFront:nil]; |
||||||
|
|
||||||
|
return cp; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
const char* hexColor(awColorPanel* cPanel) { |
||||||
|
return [cPanel hexColor]; |
||||||
|
} |
||||||
|
// @interface NSColorPanel (CPL) |
||||||
|
// |
||||||
|
// - (void)disablePanel; |
||||||
|
// - (void)enablePanel; |
||||||
|
// + (NSString *)strColor; |
||||||
|
// |
||||||
|
// @end |
||||||
|
// |
||||||
|
// #include <tgmath.h> |
||||||
|
// |
||||||
|
// static BOOL colorPanelEnabled = YES; |
||||||
|
// |
||||||
|
// |
||||||
|
// @implementation NSColorPanel (CPL) |
||||||
|
// |
||||||
|
// - (void)disablePanel { |
||||||
|
// colorPanelEnabled = NO; |
||||||
|
// } |
||||||
|
// |
||||||
|
// - (void)enablePanel { |
||||||
|
// colorPanelEnabled = YES; |
||||||
|
// } |
||||||
|
|
||||||
|
// - (void)orderFront:(id)sender { |
||||||
|
// if (colorPanelEnabled) { |
||||||
|
// NSColorPanel *panel = [BFColorPickerPopover sharedPopover].colorPanel; |
||||||
|
// if (panel) { |
||||||
|
// self.contentView = panel.contentView; |
||||||
|
// } |
||||||
|
// [super orderFront:sender]; |
||||||
|
// } else { |
||||||
|
// // Don't do anything. |
||||||
|
// } |
||||||
|
// } |
||||||
|
|
||||||
|
// + (NSString *)strColor { |
||||||
|
// NSColorPanel *panel = [NSColorPanel sharedColorPanel]; |
||||||
|
// [panel orderFront:nil]; |
||||||
|
// NSColor *color = [panel.color colorUsingColorSpaceName: NSDeviceRGBColorSpace]; |
||||||
|
// return [NSString stringWithFormat:@"r: %d, g: %d, b: %d, a: %d", |
||||||
|
// (int)round([color redComponent]*255), |
||||||
|
// (int)round([color greenComponent]*255), |
||||||
|
// (int)round([color blueComponent]*255), |
||||||
|
// (int)round([color alphaComponent]*255)]; |
||||||
|
// // return @""; |
||||||
|
// } |
||||||
|
// @end |
||||||
|
|
||||||
|
// const char* ColorDialog() { |
||||||
|
// NSColorPanel *panel = [NSColorPanel sharedColorPanel]; |
||||||
|
// [panel orderFront:nil]; |
||||||
|
// NSString *aColor = [NSColorPanel strColor]; |
||||||
|
// return [[NSString stringWithFormat:@"r: %d, g: %d, b: %d, a: %d", |
||||||
|
// (int)round([color redComponent]*255), |
||||||
|
// (int)round([color greenComponent]*255), |
||||||
|
// (int)round([color blueComponent]*255), |
||||||
|
// (int)round([color alphaComponent]*255)] UTF8String]; |
||||||
|
// return [aColor UTF8String]; |
||||||
|
// } |
@ -0,0 +1,43 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@implementation CocoaComboBox |
||||||
|
|
||||||
|
@synthesize currentItem; |
||||||
|
@synthesize comboCallBack; |
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame |
||||||
|
{ |
||||||
|
self = [super initWithFrame:frame]; |
||||||
|
if (self) { |
||||||
|
[self setEditable: NO]; |
||||||
|
[[NSNotificationCenter defaultCenter] |
||||||
|
addObserver:self |
||||||
|
selector:@selector(comboBoxSelectionDidChange:) |
||||||
|
name:NSComboBoxSelectionDidChangeNotification |
||||||
|
object:self]; |
||||||
|
} |
||||||
|
return self; |
||||||
|
} |
||||||
|
|
||||||
|
- (void)comboBoxSelectionDidChange:(NSNotification *)notification { |
||||||
|
// [self setCurrentItem: [self indexOfSelectedItem]]; |
||||||
|
self.currentItem = [self indexOfSelectedItem]; |
||||||
|
if (self.comboCallBack != NULL) comboCallBack(self); |
||||||
|
} |
||||||
|
@end |
||||||
|
|
||||||
|
id createComboBox(id parent,int l, int t, int w, int h, ACTION callback){ |
||||||
|
id widget = [[[CocoaComboBox alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease]; |
||||||
|
if (callback) { |
||||||
|
[widget setComboCallBack:callback]; |
||||||
|
// [widget setAction: @selector(click:)]; |
||||||
|
} |
||||||
|
|
||||||
|
[[parent contentView] addSubview:widget]; |
||||||
|
return widget; |
||||||
|
} |
||||||
|
|
@ -0,0 +1,15 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#include "col.h" |
||||||
|
|
||||||
|
|
||||||
|
int createDialog(const char *title, const char *message, int type) { |
||||||
|
NSAlert *alert = [[NSAlert new] autorelease]; |
||||||
|
[alert addButtonWithTitle:@"Continue"]; |
||||||
|
[alert addButtonWithTitle:@"Cancel"]; |
||||||
|
[alert setMessageText:[NSString stringWithUTF8String:title] ]; |
||||||
|
[alert setInformativeText:[NSString stringWithUTF8String:message] ]; |
||||||
|
[alert setAlertStyle:NSAlertStyleWarning]; |
||||||
|
return [alert runModal]; |
||||||
|
} |
||||||
|
|
@ -0,0 +1,154 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
void Pin(id widget, NSInteger value) { |
||||||
|
[(NSView*)widget setAutoresizingMask: value]; |
||||||
|
} |
||||||
|
|
||||||
|
void SetText(id widget, const char* txt){ |
||||||
|
NSString *widgetClass = [[widget class] description]; |
||||||
|
|
||||||
|
if ([widgetClass isEqualToString:@"CocoaTextEdit"]) |
||||||
|
{ |
||||||
|
[[widget documentView] setString: [NSString stringWithUTF8String: txt]]; |
||||||
|
[widget setNeedsDisplay: YES]; |
||||||
|
}else if ([widgetClass isEqualToString:@"CocoaWindow"]) { |
||||||
|
[widget setTitle: [NSString stringWithUTF8String: txt]]; |
||||||
|
}else{ |
||||||
|
[widget setStringValue:[NSString stringWithUTF8String:txt]]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void AddItem(id widget, const char* txt ){ |
||||||
|
NSString *widgetClass = [[widget class] description]; |
||||||
|
|
||||||
|
/* ListBox */ |
||||||
|
if ([widgetClass isEqualToString:@"CocoaListBox"]) |
||||||
|
{ |
||||||
|
[[widget db] addObject: [NSString stringWithUTF8String: txt]]; |
||||||
|
[[widget tbl] reloadData]; |
||||||
|
}else{ |
||||||
|
/* ComboBox */ |
||||||
|
[widget addItemWithObjectValue:[NSString stringWithUTF8String:txt]]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const char* GetText(id widget) { |
||||||
|
NSString *widgetClass = [[widget class] description]; |
||||||
|
|
||||||
|
/* ListBox */ |
||||||
|
if ([widgetClass isEqualToString:@"CocoaListBox"]) { |
||||||
|
NSInteger row = [[widget tbl] selectedRow]; |
||||||
|
// NSString *dbValue = [[widget db]objectAtIndex:row]; |
||||||
|
// return strdup([dbValue UTF8String]); |
||||||
|
return [[[widget db]objectAtIndex:row] UTF8String]; |
||||||
|
|
||||||
|
/* TextEdit */ |
||||||
|
}else if ([widgetClass isEqualToString:@"CocoaTextEdit"]) { |
||||||
|
if ( [[[widget textStorage] string] length] > 0) { |
||||||
|
return [[[widget textStorage] string] UTF8String]; |
||||||
|
}else{ |
||||||
|
return @"".UTF8String; |
||||||
|
} |
||||||
|
// const char* str = [[[widget textStorage] string] UTF8String]; |
||||||
|
// if (strlen(str)>0) { |
||||||
|
// return strdup(str); |
||||||
|
// }else{ |
||||||
|
// return strdup(""); |
||||||
|
// } |
||||||
|
/* ComboBox */ |
||||||
|
}else if ([widgetClass isEqualToString: @"CocoaComboBox"]) { |
||||||
|
return [[widget objectValueOfSelectedItem] UTF8String]; |
||||||
|
|
||||||
|
}else{ |
||||||
|
/* Everything Else */ |
||||||
|
return [[widget stringValue] UTF8String]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int GetValue(id widget) { |
||||||
|
NSString *widgetClass = [[widget class] description]; |
||||||
|
|
||||||
|
/* Slider */ |
||||||
|
if ([widgetClass isEqualToString: @"CocoaSlider"]) { |
||||||
|
return [widget Value]; |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
void SetValue(id widget, int value) { |
||||||
|
NSString *widgetClass = [[widget class] description]; |
||||||
|
|
||||||
|
/* Slider */ |
||||||
|
if ([widgetClass isEqualToString: @"CocoaSlider"]) { |
||||||
|
[widget setIntValue:value]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void SetItem(id widget, int pos) { |
||||||
|
NSString *widgetClass = [[widget class] description]; |
||||||
|
if ([widgetClass isEqualToString:@"CocoaListbox"]) { |
||||||
|
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:pos]; |
||||||
|
[widget selectRowIndexes: indexSet byExtendingSelection:NO]; |
||||||
|
}else if ([widgetClass isEqualToString:@"CocoaComboBox"]) { |
||||||
|
[widget selectItemAtIndex:pos]; |
||||||
|
[widget setObjectValue:[widget objectValueOfSelectedItem]]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void RemoveItem(id widget, int index) { |
||||||
|
NSString *widgetClass = [[widget class] description]; |
||||||
|
|
||||||
|
if ([widgetClass isEqualToString:@"CocoaListBox"]) { |
||||||
|
[[widget db]removeObjectAtIndex: index]; |
||||||
|
[[widget tbl] reloadData]; |
||||||
|
}else if ([widgetClass isEqualToString:@"CocoaComboBox"]) { |
||||||
|
[widget removeItemAtIndex: index]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void LB_Clear(id widget) { |
||||||
|
[[widget db] removeAllObjects]; |
||||||
|
[[widget tbl] reloadData]; |
||||||
|
} |
||||||
|
|
||||||
|
void Cocoa_Init() { |
||||||
|
[NSApplication sharedApplication]; |
||||||
|
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; |
||||||
|
} |
||||||
|
|
||||||
|
void Cocoa_Run() { |
||||||
|
// NSApplicationMain(0,0); |
||||||
|
// [NSApp setDelegate:mainWin]; |
||||||
|
[NSApp activateIgnoringOtherApps:YES]; |
||||||
|
[NSApp run]; |
||||||
|
} |
||||||
|
|
||||||
|
void Cocoa_Quit() { |
||||||
|
[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; |
||||||
|
} |
||||||
|
|
||||||
|
void Cocoa_About() { |
||||||
|
[NSApp performSelector:@selector(orderFrontStandardAboutPanel:) withObject:nil afterDelay:0.0]; |
||||||
|
} |
||||||
|
|
||||||
|
void Notify(const char *title, const char * subtitle, const char *text) { |
||||||
|
if (strlen(title)>0 && strlen(text)>0) { |
||||||
|
|
||||||
|
NSUserNotificationCenter *nc = NSUserNotificationCenter.defaultUserNotificationCenter; |
||||||
|
|
||||||
|
NSUserNotification *note = NSUserNotification.new; |
||||||
|
note.title = [NSString stringWithUTF8String:title]; |
||||||
|
note.subtitle = [NSString stringWithUTF8String:subtitle]; |
||||||
|
note.informativeText = [NSString stringWithUTF8String:text]; |
||||||
|
note.soundName = NSUserNotificationDefaultSoundName; |
||||||
|
|
||||||
|
[nc deliverNotification:note]; |
||||||
|
|
||||||
|
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,14 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
id createLabel(id parent, const char* txt, int l, int t, int w, int h){ |
||||||
|
NSTextField *widget = [[[NSTextField alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease]; |
||||||
|
[widget setStringValue:[NSString stringWithUTF8String:txt]]; |
||||||
|
[widget setEditable: NO]; |
||||||
|
[widget setAlignment: NSTextAlignmentLeft]; |
||||||
|
[widget setDrawsBackground: NO]; |
||||||
|
[widget setBordered: NO]; |
||||||
|
[[parent contentView] addSubview:widget]; |
||||||
|
return widget; |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
id createLine(id parent, int x, int y, int width) { |
||||||
|
NSBox *widget = [[[NSBox alloc] initWithFrame:NSMakeRect(x,y,width,1)] autorelease]; |
||||||
|
widget.boxType = NSBoxSeparator; |
||||||
|
[[parent contentView] addSubview:widget]; |
||||||
|
return widget; |
||||||
|
} |
||||||
|
|
||||||
|
// create a horizontally oriented separator |
||||||
|
|
||||||
|
// NSBox *horizontalSeparator=[[NSBox alloc] initWithFrame:NSMakeRect(15.0,250.0,250.0,1.0)]; |
||||||
|
|
||||||
|
// [horizontalSeparator setBoxType:NSBoxSeparator]; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// create a vertically oriented separator |
||||||
|
|
||||||
|
// NSBox *verticalSeparator=[[NSBox alloc] initWithFrame:NSMakeRect(250.0,15.0,1.0,250.0)]; |
||||||
|
|
||||||
|
// [verticalSeparator setBoxType:NSBoxSeparator]; |
@ -0,0 +1,85 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
@implementation CocoaListBox |
||||||
|
|
||||||
|
@synthesize tbl; |
||||||
|
@synthesize db; |
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame { |
||||||
|
self = [super initWithFrame:frame]; |
||||||
|
db = [NSMutableArray new]; |
||||||
|
|
||||||
|
if (self) { |
||||||
|
tblc = [[NSTableColumn alloc] initWithIdentifier: @"Name"]; |
||||||
|
[tblc setEditable: NO]; |
||||||
|
|
||||||
|
tbl = [[NSTableView alloc] initWithFrame: NSMakeRect(5,40,335,185)]; |
||||||
|
[tbl setGridStyleMask: NSTableViewGridNone]; |
||||||
|
[tbl setAllowsColumnSelection: NO]; |
||||||
|
[tbl setAllowsColumnReordering: NO]; |
||||||
|
[tbl setAllowsEmptySelection: NO]; |
||||||
|
[tbl setAllowsMultipleSelection: NO]; |
||||||
|
[tbl setColumnAutoresizingStyle: NSTableViewUniformColumnAutoresizingStyle]; |
||||||
|
[tbl addTableColumn: tblc]; |
||||||
|
[tbl setDataSource: self]; |
||||||
|
[tbl setDelegate: self]; |
||||||
|
[tbl setTarget:self]; |
||||||
|
[tbl setDoubleAction:@selector(doubleclicked:)]; |
||||||
|
// [tbl setAction:@selector(selected:)]; |
||||||
|
|
||||||
|
[tbl setHeaderView:nil]; |
||||||
|
|
||||||
|
[self setHasHorizontalScroller: NO]; |
||||||
|
[self setHasVerticalScroller: YES]; |
||||||
|
[self setDocumentView: tbl]; |
||||||
|
// [self setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; |
||||||
|
|
||||||
|
[tblc setResizingMask: NSTableColumnAutoresizingMask]; |
||||||
|
[tblc setWidth:10000]; |
||||||
|
[tbl reloadData]; |
||||||
|
|
||||||
|
cnt = 0; |
||||||
|
} |
||||||
|
return self; |
||||||
|
} |
||||||
|
|
||||||
|
- (void)doubleclicked:(id)sender |
||||||
|
{ |
||||||
|
// int rowIndex = [sender selectedRow]; |
||||||
|
} |
||||||
|
|
||||||
|
- (void)selected:(id)sender |
||||||
|
{ |
||||||
|
// [tbl selectRowIndexes:[NSIndexSet indexSetWithIndex:item->row] byExtendingSelection:NO]; |
||||||
|
} |
||||||
|
|
||||||
|
-(void)tableViewSelectionDidChange:(NSNotification *)notification |
||||||
|
{ |
||||||
|
NSInteger row = [tbl selectedRow]; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
- (long)numberOfRowsInTableView:(NSTableView *)aTableView |
||||||
|
{ |
||||||
|
return db.count; |
||||||
|
} |
||||||
|
|
||||||
|
-(id)tableView:(NSTableView *)tableView |
||||||
|
objectValueForTableColumn:(NSTableColumn *)tableColumn |
||||||
|
row:(NSInteger)row |
||||||
|
{ |
||||||
|
return self.db[row]; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
|
||||||
|
id createListBox(id parent,int l, int t, int w, int h){ |
||||||
|
id self = [[[CocoaListBox alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease]; |
||||||
|
[[parent contentView] addSubview:self]; |
||||||
|
return self; |
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
#import "col.h" |
||||||
|
|
||||||
|
@implementation CocoaMenuItem |
||||||
|
@synthesize menuItemAction; |
||||||
|
|
||||||
|
- (void) click:(id)sender { |
||||||
|
menuItemAction(sender); |
||||||
|
} |
||||||
|
@end |
||||||
|
|
||||||
|
@implementation CocoaMenu |
||||||
|
|
||||||
|
@synthesize menu; |
||||||
|
@synthesize menuAction; |
||||||
|
|
||||||
|
|
||||||
|
- (void) CreateMenu: (NSString*) Title { |
||||||
|
NSMenuItem *newMenuItem = [[NSMenuItem alloc] initWithTitle:Title action:NULL keyEquivalent:@""]; |
||||||
|
|
||||||
|
self.menu = [[NSMenu alloc] initWithTitle:Title]; |
||||||
|
[newMenuItem setSubmenu:self.menu]; |
||||||
|
[[[NSApplication sharedApplication] mainMenu] addItem: newMenuItem]; |
||||||
|
} |
||||||
|
|
||||||
|
- (void) AddItem: (NSString*)Title withShortcut: (NSString*)key andCallback: (ACTION) callback { |
||||||
|
CocoaMenuItem *item = [[[CocoaMenuItem alloc] init] autorelease]; |
||||||
|
[item setTitle:Title]; |
||||||
|
[item setTarget:item]; |
||||||
|
[item setKeyEquivalent: key]; |
||||||
|
|
||||||
|
if (callback != NULL) { |
||||||
|
[item setMenuItemAction: callback]; |
||||||
|
[item setAction: @selector(click:)]; |
||||||
|
} |
||||||
|
|
||||||
|
[self.menu addItem: item]; |
||||||
|
} |
||||||
|
|
||||||
|
- (void)addSeparator { |
||||||
|
[self.menu addItem: [NSMenuItem separatorItem]]; |
||||||
|
} |
||||||
|
|
||||||
|
- (void) SetAction: (id) widget Callback: (ACTION) func { |
||||||
|
[widget setMenuAction:func]; |
||||||
|
} |
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
|
||||||
|
id createMenu(const char * Title) { |
||||||
|
id widget = [CocoaMenu new]; |
||||||
|
[widget CreateMenu: NSSTR(Title)]; |
||||||
|
return widget; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void createMenuItem(id parent, const char *caption, const char *key, ACTION callback) { |
||||||
|
|
||||||
|
[parent AddItem: NSSTR(caption) withShortcut: NSSTR(key) andCallback: callback]; |
||||||
|
|
||||||
|
} |
||||||
|
void createMenuSeparator(id parent){ |
||||||
|
[parent addSeparator]; |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int createMessageBox(const char *title, const char *message, int type) { |
||||||
|
NSAlert *alert = [[NSAlert new] autorelease]; |
||||||
|
[alert addButtonWithTitle:@"Ok"]; |
||||||
|
[alert setMessageText:[NSString stringWithUTF8String:title] ]; |
||||||
|
[alert setInformativeText:[NSString stringWithUTF8String:message] ]; |
||||||
|
[alert setAlertStyle:NSAlertStyleWarning]; |
||||||
|
return [alert runModal]; |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
@implementation CocoaSlider |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
@synthesize Value; |
||||||
|
@synthesize sliderAction; |
||||||
|
|
||||||
|
- (IBAction)onChanged:(id)sender{ |
||||||
|
self.Value = [sender intValue]; |
||||||
|
sliderAction(sender); |
||||||
|
} |
||||||
|
|
||||||
|
- (id) initWithFrame:(NSRect)rect callBack:(ACTION)func { |
||||||
|
self = [super initWithFrame: rect]; |
||||||
|
[self setMinValue:0]; |
||||||
|
[self setMaxValue:100]; |
||||||
|
[self setAllowsTickMarkValuesOnly:NO]; |
||||||
|
[self setNumberOfTickMarks:0]; |
||||||
|
[self setTickMarkPosition:1]; |
||||||
|
[self setTarget:self]; |
||||||
|
if (func != NULL) { |
||||||
|
[self setSliderAction: func]; |
||||||
|
[self setAction: @selector(onChanged:)]; |
||||||
|
} |
||||||
|
return self; |
||||||
|
} |
||||||
|
@end |
@ -0,0 +1,43 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
char* createOpenDialog( id parent, const char *types) { |
||||||
|
NSOpenPanel* widget = [NSOpenPanel openPanel]; |
||||||
|
|
||||||
|
// Enable the selection of files in the dialog. |
||||||
|
[widget setCanChooseFiles:YES]; |
||||||
|
|
||||||
|
widget.showsResizeIndicator = YES; |
||||||
|
widget.showsHiddenFiles = NO; |
||||||
|
widget.canCreateDirectories = YES; |
||||||
|
|
||||||
|
// Change "Open" dialog button to "Select" |
||||||
|
[widget setPrompt:@"Select"]; |
||||||
|
|
||||||
|
// Set FileTypes |
||||||
|
if ( strlen(types) > 0 ) { |
||||||
|
NSString *fileTypes = [NSString stringWithUTF8String:types]; |
||||||
|
NSArray *fTypes = [fileTypes componentsSeparatedByString:@":"]; |
||||||
|
|
||||||
|
[widget setAllowedFileTypes:fTypes]; |
||||||
|
} |
||||||
|
|
||||||
|
// if ( [widget runModal] == NSModalResponseOK ) { |
||||||
|
// NSString* path = [[widget URL] path]; |
||||||
|
// return strdup([path UTF8String]); |
||||||
|
// } |
||||||
|
[widget beginSheetModalForWindow:parent completionHandler:^(NSInteger result) { |
||||||
|
[NSApp stopModalWithCode:result]; |
||||||
|
}]; |
||||||
|
if ([NSApp runModalForWindow:parent] == NSFileHandlingPanelOKButton) { |
||||||
|
NSString* path = [[widget URL] path]; |
||||||
|
return strdup([path UTF8String]); |
||||||
|
} |
||||||
|
|
||||||
|
return strdup(""); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
@implementation SaneView |
||||||
|
- (BOOL)isFlipped |
||||||
|
{ |
||||||
|
return YES; |
||||||
|
} |
||||||
|
@end |
@ -0,0 +1,48 @@ |
|||||||
|
#include <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
|
||||||
|
char* createSaveDialog(id parent, const char* title, const char* types) { |
||||||
|
NSString* path = @""; |
||||||
|
NSSavePanel *widget = [NSSavePanel savePanel]; |
||||||
|
|
||||||
|
if (strlen(title)>0) { |
||||||
|
widget.title = [NSString stringWithUTF8String: title]; |
||||||
|
}else{ |
||||||
|
widget.title = @"Save File"; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// Set FileTypes |
||||||
|
if ( strlen(types) > 0 ) { |
||||||
|
NSString *fileTypes = [NSString stringWithUTF8String:types]; |
||||||
|
NSArray *fTypes = [fileTypes componentsSeparatedByString:@":"]; |
||||||
|
|
||||||
|
[widget setAllowedFileTypes:fTypes]; |
||||||
|
} |
||||||
|
|
||||||
|
widget.showsResizeIndicator = YES; |
||||||
|
widget.showsHiddenFiles = NO; |
||||||
|
widget.canCreateDirectories = YES; |
||||||
|
widget.allowsOtherFileTypes = YES; |
||||||
|
|
||||||
|
|
||||||
|
// if ( [widget runModal] == NSModalResponseOK ) { |
||||||
|
// path = [[widget URL] path]; |
||||||
|
// } |
||||||
|
|
||||||
|
[widget beginSheetModalForWindow:parent completionHandler:^(NSInteger result) { |
||||||
|
[NSApp stopModalWithCode:result]; |
||||||
|
}]; |
||||||
|
|
||||||
|
if ([NSApp runModalForWindow:parent] == NSFileHandlingPanelOKButton) { |
||||||
|
NSString* path = [[widget URL] path]; |
||||||
|
// return strdup([path UTF8String]); |
||||||
|
} |
||||||
|
return strdup([path UTF8String]); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,38 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
@implementation CocoaSlider |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
@synthesize Value; |
||||||
|
@synthesize sliderAction; |
||||||
|
|
||||||
|
- (IBAction)onChanged:(id)sender{ |
||||||
|
self.Value = [sender intValue]; |
||||||
|
sliderAction(sender); |
||||||
|
} |
||||||
|
|
||||||
|
- (id) initWithFrame:(NSRect)rect callBack:(ACTION)callback { |
||||||
|
self = [super initWithFrame: rect]; |
||||||
|
[self setMinValue:0]; |
||||||
|
[self setMaxValue:100]; |
||||||
|
[self setAllowsTickMarkValuesOnly:NO]; |
||||||
|
[self setNumberOfTickMarks:0]; |
||||||
|
[self setTickMarkPosition:1]; |
||||||
|
[self setTarget:self]; |
||||||
|
[self setContinuous: YES]; |
||||||
|
if (callback != NULL) { |
||||||
|
[self setSliderAction: callback]; |
||||||
|
[self setAction: @selector(onChanged:)]; |
||||||
|
} |
||||||
|
return self; |
||||||
|
} |
||||||
|
@end |
||||||
|
|
||||||
|
id createSlider(id parent, int left, int top, int width, int height, ACTION callback) { |
||||||
|
id widget = [[CocoaSlider alloc] initWithFrame:NSMakeRect(left, top, width, height) callBack:callback]; |
||||||
|
|
||||||
|
[[parent contentView] addSubview:widget]; |
||||||
|
return widget; |
||||||
|
} |
@ -0,0 +1,83 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
@implementation CocoaTextEdit |
||||||
|
@synthesize widget; |
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame { |
||||||
|
self = [super initWithFrame:frame]; |
||||||
|
if (self) { |
||||||
|
self.widget = [[[NSTextView alloc] initWithFrame:frame] autorelease]; |
||||||
|
[[self.widget textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)]; |
||||||
|
[[self.widget textContainer] setWidthTracksTextView:NO]; |
||||||
|
[self.widget setHorizontallyResizable:YES]; |
||||||
|
[self.widget setTextContainerInset:NSMakeSize(2.0,2.0)]; |
||||||
|
[self setHasHorizontalScroller: YES]; |
||||||
|
[self setHasVerticalScroller: YES]; |
||||||
|
[self.widget setFont: [NSFont userFontOfSize:13.0]]; |
||||||
|
[self.widget setDelegate:self]; |
||||||
|
[self.widget becomeFirstResponder]; |
||||||
|
// [self.widget setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; |
||||||
|
[self setDocumentView: widget]; |
||||||
|
} |
||||||
|
return self; |
||||||
|
} |
||||||
|
|
||||||
|
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent |
||||||
|
{ |
||||||
|
if (([theEvent type] == NSEventTypeKeyDown) && ([theEvent modifierFlags] & NSEventModifierFlagCommand)) { |
||||||
|
NSResponder * responder = [[self window] firstResponder]; |
||||||
|
|
||||||
|
if ((responder != nil) && [responder isKindOfClass:[NSTextView class]]) { |
||||||
|
NSTextView * textView = (NSTextView *)responder; |
||||||
|
NSRange range = [textView selectedRange]; |
||||||
|
bool bHasSelectedTexts = (range.length > 0); |
||||||
|
|
||||||
|
unsigned short keyCode = [theEvent keyCode]; |
||||||
|
|
||||||
|
bool bHandled = false; |
||||||
|
|
||||||
|
//6 Z, 7 X, 8 C, 9 V |
||||||
|
if (keyCode == 6) { |
||||||
|
if ([[textView undoManager] canUndo]) |
||||||
|
{ |
||||||
|
[[textView undoManager] undo]; |
||||||
|
bHandled = true; |
||||||
|
} |
||||||
|
} |
||||||
|
else if (keyCode == 7 && bHasSelectedTexts) { |
||||||
|
[textView cut:self]; |
||||||
|
bHandled = true; |
||||||
|
} |
||||||
|
else if (keyCode== 8 && bHasSelectedTexts) { |
||||||
|
[textView copy:self]; |
||||||
|
bHandled = true; |
||||||
|
} |
||||||
|
else if (keyCode == 9) { |
||||||
|
[textView paste:self]; |
||||||
|
bHandled = true; |
||||||
|
} |
||||||
|
|
||||||
|
if (bHandled) |
||||||
|
return YES; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return NO; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
id createTextEdit(id parent, const char* txt, int l, int t, int w, int h) { |
||||||
|
CocoaTextEdit *widget = [[[CocoaTextEdit alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease]; |
||||||
|
if (strlen(txt)>0) { |
||||||
|
NSString *str = [NSString stringWithUTF8String:txt]; |
||||||
|
[[widget documentView] setString:str]; |
||||||
|
} |
||||||
|
|
||||||
|
[[parent contentView] addSubview:widget]; |
||||||
|
return widget; |
||||||
|
} |
||||||
|
|
@ -0,0 +1,11 @@ |
|||||||
|
#import <Cocoa/Cocoa.h> |
||||||
|
|
||||||
|
#import "col.h" |
||||||
|
|
||||||
|
id createTextField(id parent, const char* txt, int l, int t, int w, int h){ |
||||||
|
NSTextField *widget = [[[NSTextField alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease]; |
||||||
|
[widget setStringValue:[NSString stringWithUTF8String:txt]]; |
||||||
|
// [widget setAutoresizingMask: NSViewWidthSizable]; |
||||||
|
[[parent contentView] addSubview:widget]; |
||||||
|
return widget; |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
import Cocoa / [NSWindow, NSFunctions, NSLabel, NSSlider] |
||||||
|
|
||||||
|
const |
||||||
|
width = 320 |
||||||
|
height = 120 |
||||||
|
|
||||||
|
var mainWindow, label, slider: ID |
||||||
|
|
||||||
|
proc sliderCB(sender: ID) = |
||||||
|
label.text = "Slider Value: " & $slider.value |
||||||
|
|
||||||
|
proc main() = |
||||||
|
|
||||||
|
Cocoa_Init() |
||||||
|
|
||||||
|
mainWindow = newWindow("Nim Mac GUI Slider Demo", width,height) |
||||||
|
label = newLabel(mainWindow,"Slider Value: 0", 16,20,120,24) |
||||||
|
label.anchor = akWidth |
||||||
|
slider = newSlider(mainWindow, 16,40,width-40,24, sliderCB) |
||||||
|
slider.anchor = akWidth |
||||||
|
|
||||||
|
|
||||||
|
Cocoa_Run() |
||||||
|
|
||||||
|
when isMainModule: |
||||||
|
main() |
@ -0,0 +1,41 @@ |
|||||||
|
import Cocoa / [NSWindow, NSTextfield, NSButton, NSFunctions, NSCombobox, NSCheckbox, NSLabel, NSSlider, NSTextedit, NSOpenDialog] |
||||||
|
|
||||||
|
const |
||||||
|
width = 800 |
||||||
|
height = 600 |
||||||
|
|
||||||
|
var mainWindow, txt1, btn1, combo, chkbox, label1, slider1, editor: ID |
||||||
|
|
||||||
|
proc btnClicked(sender:ID) = |
||||||
|
let fName = newOpenDialog(mainWindow, "nim") |
||||||
|
if fName.len > 0: |
||||||
|
txt1.text = fName |
||||||
|
let fText = readFile($fName) |
||||||
|
editor.text = fText |
||||||
|
proc sliderCallback(sender: ID) = |
||||||
|
echo label1.text |
||||||
|
|
||||||
|
proc main() = |
||||||
|
Cocoa_Init() |
||||||
|
|
||||||
|
mainWindow = createWindow("Nim Cocoa Module GUI Test", width, height) |
||||||
|
txt1 = newTextField(mainWindow,"Welcome to AIR's Cocoa Demo", 16, 20, width-122, 22) |
||||||
|
btn1 = newButton(mainWindow, "Open", width-100, 20, 90, 24, btnClicked) |
||||||
|
combo = newComboBox(mainWindow, 16,54,210,26, nil) |
||||||
|
for item in ["One", "Two", "Three"]: combo.AddItem(item) |
||||||
|
combo.text = "Two" |
||||||
|
|
||||||
|
chkbox = newCheckBox(mainWindow,"Check Box 1", 240, 54, 100, 24) |
||||||
|
label1 = newLabel(mainWindow,"This is a Label", 360, 57, 100, 24) |
||||||
|
slider1 = newSlider(mainWindow, 680, 57, 100, 24, sliderCallback) |
||||||
|
slider1.value = 1 |
||||||
|
editor = newTextEdit(mainWindow, "", 16, 96, width-32, height-120) |
||||||
|
|
||||||
|
txt1.anchor = akWidth |
||||||
|
btn1.anchor = akRight |
||||||
|
editor.anchor = akFull |
||||||
|
|
||||||
|
Cocoa_Run() |
||||||
|
|
||||||
|
when isMainModule: |
||||||
|
main() |
Loading…
Reference in new issue