Wed, 26 Mar 2014 22:02:57 +0100
added undo and redo for motif
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2012 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #import <stdio.h> #import <stdlib.h> #import <sys/stat.h> #import <sys/types.h> #import <errno.h> #import "../common/document.h" #import "toolkit.h" #import "window.h" #import "toolbar.h" NSAutoreleasePool *pool; static char *application_name; static ui_callback appclose_fnc; static void *appclose_udata; void ui_init(char *appname, int argc, char **argv) { pool = [[NSAutoreleasePool alloc] init]; [NSApplication sharedApplication]; [NSBundle loadNibNamed:@"MainMenu" owner:NSApp]; uic_docmgr_init(); ui_toolbar_init(); // load item stock // ui_init_stock(); } void ui_show(UiObject *obj) { if([obj->widget class] == [UiCocoaWindow class]) { UiCocoaWindow *window = (UiCocoaWindow*)obj->widget; [window makeKeyAndOrderFront:nil]; } else { printf("Error: ui_show: Object is not a Window!\n"); } } void ui_main() { [NSApp run]; [pool release]; } @implementation EventWrapper - (EventWrapper*) initWithData: (void*)d callback:(ui_callback) f { data = d; callback = f; return self; } - (void*) data { return data; } - (void) setData:(void*)d { data = d; } - (ui_callback) callback { return callback; } - (void) setCallback: (ui_callback)f { callback = f; } - (BOOL)handleEvent:(id)sender { NSWindow *activeWindow = [NSApp keyWindow]; UiEvent event; if([activeWindow class] == [UiCocoaWindow class]) { event.obj = [(UiCocoaWindow*)activeWindow object]; event.window = event.obj->window; event.document = event.obj->document; event.intval = 0; } if(callback) { callback(&event, data); } return true; } @end