4#ifndef IMGUI_DEFINE_MATH_OPERATORS
5#define IMGUI_DEFINE_MATH_OPERATORS
18#if defined(__APPLE__) && defined(__MACH__)
20#include <TargetConditionals.h>
22#import <CoreText/CoreText.h>
24#if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
27#elif TARGET_OS_MAC == 1
29#import <Cocoa/Cocoa.h>
31@interface AppDelegate : NSObject <NSApplicationDelegate>
43- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
48 [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSQuitAlwaysKeepsWindows"];
52 NSMenu *mainMenu = [NSApp mainMenu];
54 NSMenuItem *fileMenuItem = [mainMenu itemWithTitle:@"File"];
56 NSMenu *fileMenu = [[NSMenu alloc] initWithTitle:@"File"];
57 fileMenuItem = [[NSMenuItem alloc] initWithTitle:@"File" action:nil keyEquivalent:@""];
58 [fileMenuItem setSubmenu:fileMenu];
60 NSMenuItem *openItem = [[NSMenuItem alloc] initWithTitle:@"Open"
61 action:@selector(openFileAction:)
63 [fileMenu addItem:openItem];
66 NSMenu *openRecentMenu = [[NSMenu alloc] initWithTitle:@"Open Recent"];
67 NSMenuItem *openRecentMenuItem = [[NSMenuItem alloc] initWithTitle:@"Open Recent"
70 [openRecentMenuItem setSubmenu:openRecentMenu];
71 [fileMenu addItem:openRecentMenuItem];
74 [fileMenu addItem:[NSMenuItem separatorItem]];
77 NSMenuItem *saveItem = [[NSMenuItem alloc] initWithTitle:@"Save" action:nil keyEquivalent:@"s"];
78 [fileMenu addItem:saveItem];
81 [fileMenu addItem:[NSMenuItem separatorItem]];
84 NSMenu *optionsMenu = [[NSMenu alloc] initWithTitle:@"Options"];
85 NSMenuItem *optionsMenuItem = [[NSMenuItem alloc] initWithTitle:@"Options"
88 [optionsMenuItem setSubmenu:optionsMenu];
91 NSMenuItem *flagItem = [[NSMenuItem alloc] initWithTitle:@"Flag"
92 action:@selector(toggleFlagAction:)
94 [flagItem setTarget:self];
95 [flagItem setState:NSControlStateValueOff];
96 [optionsMenu addItem:flagItem];
97 [fileMenu addItem:optionsMenuItem];
99 [mainMenu insertItem:fileMenuItem atIndex:1];
102 NSMenuItem *editMenuItem = [mainMenu itemWithTitle:@"Edit"];
104 NSMenu *editMenu = [[NSMenu alloc] initWithTitle:@"Edit"];
105 editMenuItem = [[NSMenuItem alloc] initWithTitle:@"Edit" action:nil keyEquivalent:@""];
106 [editMenuItem setSubmenu:editMenu];
108 NSMenuItem *undoItem = [[NSMenuItem alloc] initWithTitle:@"Undo" action:nil keyEquivalent:@"z"];
110 [editMenu addItem:undoItem];
112 NSMenuItem *redoItem = [[NSMenuItem alloc] initWithTitle:@"Redo" action:nil keyEquivalent:@"Z"];
114 [editMenu addItem:redoItem];
117 [editMenu addItem:[NSMenuItem separatorItem]];
119 NSMenuItem *cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut"
120 action:@selector(cutAction:)
122 [editMenu addItem:cutItem];
124 NSMenuItem *copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:nil keyEquivalent:@"c"];
125 [editMenu addItem:copyItem];
127 NSMenuItem *pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste"
131 [editMenu addItem:pasteItem];
134 [editMenu addItem:[NSMenuItem separatorItem]];
136 NSMenuItem *selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All"
140 [editMenu addItem:selectAllItem];
142 [mainMenu insertItem:editMenuItem atIndex:2];
145 NSMenuItem *viewMenuItem = [mainMenu itemWithTitle:@"View"];
147 NSMenu *viewMenu = [[NSMenu alloc] initWithTitle:@"View"];
148 viewMenuItem = [[NSMenuItem alloc] initWithTitle:@"View" action:nil keyEquivalent:@""];
149 [viewMenuItem setSubmenu:viewMenu];
152 NSMenuItem *emulatorViewItem = [[NSMenuItem alloc] initWithTitle:@"Emulator View"
156 [viewMenu addItem:emulatorViewItem];
159 NSMenuItem *hexEditorViewItem = [[NSMenuItem alloc] initWithTitle:@"Hex Editor View"
163 [viewMenu addItem:hexEditorViewItem];
166 NSMenuItem *disassemblyViewItem = [[NSMenuItem alloc] initWithTitle:@"Disassembly View"
170 [viewMenu addItem:disassemblyViewItem];
173 NSMenuItem *memoryViewItem = [[NSMenuItem alloc] initWithTitle:@"Memory View"
177 [viewMenu addItem:memoryViewItem];
180 [viewMenu addItem:[NSMenuItem separatorItem]];
183 NSMenuItem *toggleFullscreenItem = [[NSMenuItem alloc] initWithTitle:@"Toggle Fullscreen"
187 [viewMenu addItem:toggleFullscreenItem];
189 [mainMenu insertItem:viewMenuItem atIndex:3];
192 NSMenuItem *helpMenuItem = [mainMenu itemWithTitle:@"Help"];
194 NSMenu *helpMenu = [[NSMenu alloc] initWithTitle:@"Help"];
195 helpMenuItem = [[NSMenuItem alloc] initWithTitle:@"Help" action:nil keyEquivalent:@""];
196 [helpMenuItem setSubmenu:helpMenu];
199 NSMenuItem *documentationItem = [[NSMenuItem alloc] initWithTitle:@"Documentation"
202 [helpMenu addItem:documentationItem];
204 [mainMenu insertItem:helpMenuItem atIndex:4];
209- (void)newFileAction:(
id)sender {
210 NSLog(
@"New File action triggered");
213- (void)toggleFlagAction:(
id)sender {
214 NSMenuItem *flagItem = (NSMenuItem *)sender;
215 if ([flagItem state] == NSControlStateValueOff) {
216 [flagItem setState:NSControlStateValueOn];
218 [flagItem setState:NSControlStateValueOff];
222- (void)openFileAction:(
id)sender {
235- (void)cutAction:(
id)sender {
239- (void)openRecentFileAction:(
id)sender {
240 NSLog(
@"Open Recent File action triggered");
245extern "C" void yaze_initialize_cococa() {
248 [NSApplication sharedApplication];
249 [NSApp setDelegate:delegate];
250 [NSApp finishLaunching];
254extern "C" int yaze_run_cocoa_app_delegate(
const char *filename) {
255 yaze_initialize_cococa();
256 auto controller = std::make_unique<yaze::Controller>();
258 while (controller->IsActive()) {
260 controller->OnInput();
261 if (
auto status = controller->OnLoad(); !status.ok()) {
262 NSAlert *alert = [[NSAlert alloc] init];
263 [alert setMessageText:@"Error"];
264 [alert setInformativeText:[NSString stringWithUTF8String:status.message().data()]];
265 [alert addButtonWithTitle:@"OK"];
269 controller->DoRender();
272 controller->OnExit();
#define EXIT_IF_ERROR(expression)