Annotation of OpenXM/src/cfep/MyOpenGLController.m, Revision 1.1
1.1 ! takayama 1: //
! 2: // MyOpenGLController.m
! 3: // cfep
! 4: //
! 5: // Created by Nobuki Takayama on 06/02/18.
! 6: // Copyright 2006 OpenXM.org. All rights reserved.
! 7: //
! 8:
! 9: #import "MyOpenGLController.h"
! 10:
! 11: // MyOpenGL window id (gid) is an indeger.
! 12: static MyOpenGLController *oglWindow[GID_MAX]; // gid --> MyOpenGLController instance.
! 13: static MyDocument *oglParent[GID_MAX]; // gid --> parent MyDocument.
! 14: static int MyOpenGLControllerInitialized = 0;
! 15: static int Gid=0;
! 16:
! 17:
! 18: @implementation MyOpenGLController
! 19: +(void) initMyOpenGLController {
! 20: int i;
! 21: if (MyOpenGLControllerInitialized) return;
! 22: for (i=0; i<GID_MAX; i++) { oglWindow[i] = nil; oglParent[i] = nil; }
! 23: MyOpenGLControllerInitialized = 1;
! 24: }
! 25: +(MyOpenGLController *)getOglWindow: (int) tid {
! 26: return oglWindow[tid];
! 27: }
! 28: +(MyDocument *)getOglParent: (int) tid {
! 29: return oglParent[tid];
! 30: }
! 31:
! 32: +(int) myOpenGLControllerOwnedBy: (MyDocument *) owner with: (int) tid {
! 33: MyOpenGLController *ogl;
! 34: if ((tid >= 0) && (tid <GID_MAX)) {
! 35: if (oglWindow[tid]) return tid;
! 36: else {
! 37: ogl = [[MyOpenGLController allocWithZone:[MyOpenGLController zone]] init];
! 38: [ogl setGid: tid];
! 39: [ogl retain];
! 40: [ogl showWindow: nil];
! 41: oglWindow[tid] = ogl;
! 42: oglParent[tid] = owner;
! 43: return tid;
! 44: }
! 45: }
! 46: return -1;
! 47: }
! 48: +(int) myOpenGLControllerOwnedBy: (MyDocument *) owner {
! 49: int tid;
! 50:
! 51: [MyOpenGLController initMyOpenGLController];
! 52: tid = Gid;
! 53: if (tid < GID_MAX) {
! 54: Gid++;
! 55: return [MyOpenGLController myOpenGLControllerOwnedBy: owner with: tid];
! 56: }else{
! 57: return -1;
! 58: }
! 59: }
! 60: +(void) removeMyOpenGLControllerOwnedBy: (MyDocument *) owner {
! 61: int i;
! 62: [MyOpenGLController initMyOpenGLController];
! 63: for (i=0; i<GID_MAX; i++) {
! 64: if (oglParent[i] == owner) {
! 65: [MyOpenGLController removeMyOpenGLControllerWithGid: i];
! 66: }
! 67: }
! 68: }
! 69: +(MyOpenGLController *) removeMyOpenGLControllerWithGid: (int) tid {
! 70: MyOpenGLController *oglC;
! 71: [MyOpenGLController initMyOpenGLController];
! 72: oglC = oglWindow[tid];
! 73: if (oglWindow[tid]) [oglWindow[tid] closeMyOpenGL: oglParent[tid]];
! 74: oglWindow[tid] = nil;
! 75: oglParent[tid] = nil;
! 76: [oglC autorelease]; // it is OK?
! 77: return oglC;
! 78: }
! 79:
! 80: /* They are put at oxEvaluateSelected in MyDocument.m to test the system. --> gtest.rr
! 81: [MyOpenGLController addOglComm: @"[glColor4f,1.0,0.0,0.0,1.0]" to: 0 from: self];
! 82: [MyOpenGLController addOglComm: @"[glRectf,-0.5,-0.5,0.5,0.5]" to: 0 from: self];
! 83: [MyOpenGLController addOglComm: @"[glib_flush0]" to: 0 from: self];
! 84: */
! 85:
! 86: +(void) addOglComm: (NSString *)comm to: (int) tid from: (MyDocument *) owner {
! 87: if ((0<=tid) && (tid<GID_MAX)) {
! 88: if (oglWindow[tid] == nil) {
! 89: tid = [MyOpenGLController myOpenGLControllerOwnedBy: owner with: tid];
! 90: }
! 91: if (tid >= 0) [oglWindow[tid] addOglComm: comm];
! 92: }else ;
! 93: }
! 94: +(void) addOglInitComm: (NSString *)comm to: (int) tid from: (MyDocument *) owner {
! 95: if ((0<=tid) && (tid<GID_MAX)) {
! 96: if (oglWindow[tid] == nil) {
! 97: tid = [MyOpenGLController myOpenGLControllerOwnedBy: owner with: tid];
! 98: }
! 99: if (tid >= 0) [oglWindow[tid] addOglInitComm: comm];
! 100: }else ;
! 101: }
! 102:
! 103:
! 104: -(id) init {
! 105: self = [self initWithWindowNibName: @"MyOpenGL"];
! 106: if (self) [self setWindowFrameAutosaveName: @"cfep OpenGLView"];
! 107: return self;
! 108: }
! 109: -(void) setGid: (int) mygid {
! 110: gid = mygid;
! 111: }
! 112: -(int)getGid {
! 113: return gid;
! 114: }
! 115:
! 116: -(void) windowDidLoad {
! 117: [super windowDidLoad];
! 118: }
! 119:
! 120: -(void) dealloc {
! 121: NSLog(@"dealloc of MyOpenGL instance.\n");
! 122: // [[NSNotificationCenter defaultCenter] removeObserver: self];
! 123: [super dealloc];
! 124: }
! 125:
! 126: -(void) closeMyOpenGL: (MyDocument *) md {
! 127: NSLog(@"closeMyOpenGL. \n");
! 128: [self close];
! 129: }
! 130:
! 131: -(BOOL) windowShouldClose: (NSWindow *)sender {
! 132: // p.299 of O'reilly book. Connect "Window --> file's owner" to connect the delegate outlet of the window
! 133: // to MyOpenGLController.
! 134: NSLog(@"x is clicked.\n");
! 135: [MyOpenGLController removeMyOpenGLControllerWithGid: [self getGid]];
! 136: return YES;
! 137: }
! 138: -(void) addOglComm: (NSString *)comm {
! 139: [myogl addOglComm: comm by: self];
! 140: }
! 141: -(void) addOglInitComm: (NSString *)comm {
! 142: [myogl addOglInitComm: comm by: self];
! 143: }
! 144: -(void) output: (NSString *)msg {
! 145: [mymessage setStringValue: msg];
! 146: }
! 147:
! 148: @end
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>