GUI program on Mac OS in D?

mrphobby mrp at spinrock.net
Thu Dec 21 15:18:36 UTC 2017


On Thursday, 14 December 2017 at 19:10:26 UTC, mrphobby wrote:
> On Thursday, 14 December 2017 at 14:07:25 UTC, Adam D. Ruppe 
> wrote:
>> I was playing with this myself based on Jacob's code and made 
>> it look like this:
>>
>> extern (Objective-C) interface ViewController : 
>> NSViewController {
>>         extern (C)
>>         @ObjCMethodOverride("loadView")
>>         static void loadView(ViewController self, SEL sel) {
>>                 printf("loadView\n");
>>         }
>>
>>         extern (C)
>>         @ObjCMethodOverride("viewDidLoad")
>>         static void viewDidLoad(ViewController self, SEL sel) {
>>                 printf("viewDidLoad\n");
>>         }
>>
>>         ViewController init() @selector("init");
>>         mixin RegisterObjCClass;
>> }
>>
> This looks pretty awesome and very much like something I was 
> looking for. Would really appreciate if you could share your 
> work. Otherwise I'll have to roll up my sleeves and try hacking 
> it on my own :)

Ok, I finally had some time to work this out today. Thanks to the 
ideas posted here I was able to wrap something up despite my very 
limited knowledge of D and its compile time features :)

Basically this is what your classes will look like:

extern (Objective-C)
@ObjCSuperClass("NSObject")
interface AppDelegate : NSApplicationDelegate {
	mixin ObjCClass;

	AppDelegate init() @selector("init");

	extern (C):

	@ObjCMethod("applicationDidFinishLaunching:")
	static void applicationDidFinishLaunching(AppDelegate self, SEL 
sel, NSNotification notification) {
         writefln("applicationDidFinishLaunching");
	}
}

In this case I needed to add the explicit superclass attribute 
since NSApplicationDelegate is a protocol and not a class. If 
your object inherits from an interface representing a regular 
Objective-C class you don't need this.

The actual registration and setup principle is based on Jacobs 
code and I added stuff to handle the attributes. Obviously you 
need declarations for Objective-C runtime calls but you can find 
those in Jacobs example source as well.

Anyway, hope this helps. Feel free to fork and improve!
https://gist.github.com/mrphobby/a247deb15d38aea86b3346079f32ce58




More information about the Digitalmars-d-learn mailing list