Annotation of OpenXM/src/cfep/MyOutputWindowController.m, Revision 1.4
1.1 takayama 1: //
2: // MyOutputWindowController.m
3: // cfep
4: //
5: // Created by nobuki on 06/01/25.
6: // Copyright 2006 __MyCompanyName__. All rights reserved.
7: //
8:
9: #import "MyOutputWindowController.h"
10: #import "MyDocument.h"
11:
12: @implementation MyOutputWindowController
13:
14: +(MyOutputWindowController *) sharedMyOutputWindowController: (MyDocument *) sender action: (enum actionType) act {
15: static NSMutableDictionary * sharedMOWC; // class variable.
16: MyOutputWindowController *owin;
17: if (sharedMOWC == nil) {
18: sharedMOWC = [NSMutableDictionary dictionaryWithCapacity: 1024]; //BUG. finite number.
19: [sharedMOWC retain];
20: }
21: if (act == FIND) {
22: owin = [sharedMOWC objectForKey: [sender getMyDocumentKey]];
23: if (owin != nil) return owin;
24: owin = [[MyOutputWindowController allocWithZone:[MyOutputWindowController zone]] init];
25: [owin retain];
26: NSLog(@"MyOutputWindowController. new owc is created.\n");
27: [sharedMOWC setObject: owin forKey: [sender getMyDocumentKey]];
28: return owin;
29: }else{ // REMOVE
30: owin = [sharedMOWC objectForKey: [sender getMyDocumentKey]];
31: if (!owin) [sharedMOWC removeObjectForKey: [sender getMyDocumentKey]];
32: // [owin autorelease];
33: return owin;
34: }
35: }
36:
37: +(MyOutputWindowController *) sharedMyOutputWindowController: (MyDocument *)sender {
38: return [self sharedMyOutputWindowController: sender action: FIND];
39: }
40:
41:
42: -(id) init {
43: static int serial;
44: self = [self initWithWindowNibName: @"MyOutputWindow"];
45: if (self) [self setWindowFrameAutosaveName: @"cfep Output View"];
46: winNo = serial++;
47: return self;
48: }
49:
50: -(void) windowDidLoad {
51: [super windowDidLoad];
52: // [textViewOut retain]; ?
53: }
54:
55: -(void) dealloc {
56: NSLog(@"dealloc of MyOutputWindowController instance.\n");
57: [[NSNotificationCenter defaultCenter] removeObserver: self];
58: [super dealloc];
59: }
60:
61: -(void) closeMyOutputWindow: (MyDocument *) md {
62: NSLog(@"closeMyOutputWindow. \n");
63: [MyOutputWindowController sharedMyOutputWindowController: md action: REMOVE];
64: removable = 1;
65: [self close];
66: }
67:
68: -(BOOL) windowShouldClose: (NSWindow *)sender { // book. p.149 Delegate outlet of Window should me File's owner.
69: if (removable) return [super windowShouldClose: sender];
70: return NO;
71: }
72:
73: -(void)outputStringToOutputWindow:(NSString *)msg {
1.3 takayama 74: [self outputStringToOutputWindow: msg withColor: [NSColor blackColor]];
75: }
76: -(void)outputStringToOutputWindow:(NSString *)msg withColor: (NSColor *) color {
77: int oldEnd, newEnd;
1.1 takayama 78: NSRange myRange = NSMakeRange([[textViewOut textStorage] length],0);
1.3 takayama 79: oldEnd = myRange.location;
1.1 takayama 80: // NSLog(@"<MyOutputWindowController> outputStringToOutputWindow\n");
81: [textViewOut replaceCharactersInRange: myRange withString: msg];
1.3 takayama 82: myRange = NSMakeRange([[textViewOut textStorage] length],0);
83: newEnd = myRange.location;
84: [textViewOut setTextColor: color range: NSMakeRange(oldEnd,newEnd-oldEnd)];
85: [textViewOut scrollRangeToVisible: myRange];
1.1 takayama 86: }
1.3 takayama 87:
1.2 takayama 88: -(void)insertText: (id) text {
1.3 takayama 89: NSRange myRange = NSMakeRange([[textViewOut textStorage] length],0);
1.4 ! takayama 90: [textViewOut setSelectedRange: myRange]; // goto the end of output window.
1.2 takayama 91: [textViewOut insertText: text];
92: [textViewOut scrollRangeToVisible: NSMakeRange([[textViewOut textStorage] length],0)];
93: }
1.1 takayama 94:
95: -(void)printErrorMessageToOutputWindow:(NSString *)msg {
96: int oldEnd;
97: int newEnd;
98: oldEnd = [[textViewOut textStorage] length];
99: NSRange myRange = NSMakeRange(oldEnd,0);
100: [textViewOut replaceCharactersInRange: myRange withString: msg];
101: newEnd = [[textViewOut textStorage] length];
102: [textViewOut setTextColor: [NSColor redColor] range: NSMakeRange(oldEnd,newEnd-oldEnd)];
103: [textViewOut scrollRangeToVisible: NSMakeRange(newEnd,0)];
104: }
105:
106: -(void)clearOutputWindow {
107: NSRange myRange = NSMakeRange(0,[[textViewOut textStorage] length]);
108: [textViewOut replaceCharactersInRange: myRange withString: @""];
109: }
110: -(void)changeWindowTitle: (NSString *)msg {
111: NSLog(@"title=%@\n",[window title]);
112: // [window setTitle: msg]; it does not work. Why?
113: }
114: -(void)showUp {
115: if (displayed == 0) {
116: [self showWindow: nil];
117: displayed = 1;
118: [self changeWindowTitle: [[NSString stringWithFormat: @"OutputView %d",winNo] retain]];
119: }
120: }
121:
122: -(void) printDocument: (id) sender {
123: [textViewOut print: sender];
124: }
125:
126:
127: @end
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>