Added suport for model loading.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@2665 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Ovidiu Predescu 1997-12-04 01:58:57 +00:00
parent 6d56e48e78
commit 76741e1d40
33 changed files with 2684 additions and 43 deletions

9
Model/.cvsignore Normal file
View file

@ -0,0 +1,9 @@
GNUmakefile.local
*obj
*.app
*.debug
*.profile
.gdbinit
*.nib~
*.iconheader

8
Model/Controller.h Normal file
View file

@ -0,0 +1,8 @@
#import <AppKit/AppKit.h>
@interface Controller : NSObject
{
id textField;
}
- (void)buttonPressed:(id)sender;
@end

13
Model/Controller.m Normal file
View file

@ -0,0 +1,13 @@
#import "Controller.h"
@implementation Controller
- (void)buttonPressed:(id)sender
{
NSString* text
= [NSString stringWithFormat:@"\"%@\" button pressed", [sender title]];
[textField setStringValue:text];
}
@end

71
Model/GMAppKit.h Normal file
View file

@ -0,0 +1,71 @@
/*
GMAppKit.h
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _GNUstep_H_GMAppKit
#define _GNUstep_H_GMAppKit
#include <AppKit/AppKit.h>
#import <extensions/GMArchiver.h>
@interface NSApplication (GMArchiverMethods) <ModelCoding>
@end
@interface NSButton (GMArchiverMethods) <ModelCoding>
@end
@interface NSCell (GMArchiverMethods) <ModelCoding>
@end
@interface NSColor (GMArchiverMethods) <ModelCoding>
@end
@interface NSControl (GMArchiverMethods) <ModelCoding>
@end
@interface NSFont (GMArchiverMethods) <ModelCoding>
@end
@interface NSImage (GMArchiverMethods) <ModelCoding>
@end
@interface NSMenuItem (GMArchiverMethods) <ModelCoding>
@end
@interface NSMenu (GMArchiverMethods) <ModelCoding>
@end
@interface NSResponder (GMArchiverMethods) <ModelCoding>
@end
@interface NSTextField (GMArchiverMethods) <ModelCoding>
@end
@interface NSView (GMArchiverMethods) <ModelCoding>
@end
@interface NSWindow (GMArchiverMethods) <ModelCoding>
@end
#endif /* _GNUstep_H_GMAppKit */

733
Model/GMAppKit.m Normal file
View file

@ -0,0 +1,733 @@
/*
GMAppKit.m
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#import <Foundation/NSArray.h>
#import <Foundation/NSException.h>
#include "GMAppKit.h"
void __dummy_GMAppKit_functionForLinking() {}
@implementation NSApplication (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
#if NeXT_GUI_LIBRARY
NSArray* windows1 = [self windows];
NSMutableArray* windows2 = [NSMutableArray array];
int i, count = [windows1 count];
for (i = 0; i < count; i++) {
NSWindow* window = [windows1 objectAtIndex:i];
if (![window isKindOfClass:[NSMenu class]])
[windows2 addObject:window];
}
[archiver encodeObject:windows2 withName:@"windows"];
#else
[archiver encodeObject:[self windows] withName:@"windows"];
#endif
[archiver encodeObject:[self keyWindow] withName:@"keyWindow"];
[archiver encodeObject:[self mainWindow] withName:@"mainWindow"];
[archiver encodeObject:[self mainMenu] withName:@"mainMenu"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
NSArray* windows;
NSWindow* keyWindow;
NSWindow* mainWindow;
NSMenu* mainMenu;
#if GNU_GUI_LIBRARY
mainMenu = [unarchiver decodeObjectWithName:@"mainMenu"];
[self setMainMenu:mainMenu];
#endif
windows = [unarchiver decodeObjectWithName:@"windows"];
keyWindow = [unarchiver decodeObjectWithName:@"keyWindow"];
mainWindow = [unarchiver decodeObjectWithName:@"mainWindow"];
#if NeXT_GUI_LIBRARY
mainMenu = [unarchiver decodeObjectWithName:@"mainMenu"];
[self setMainMenu:mainMenu];
#endif
[keyWindow makeKeyWindow];
[mainWindow makeMainWindow];
return self;
}
- (void)awakeFromModel
{
NSMenu* mainMenu = [self mainMenu];
[mainMenu update];
#if XDPS_BACKEND_LIBRARY
[mainMenu display];
#endif
}
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
return [NSApplication sharedApplication];
}
- (Class)classForModelArchiver
{
return [NSApplication class];
}
@end /* NSApplication (GMArchiverMethods) */
@implementation NSButton (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
float delay, interval;
id theCell = [self cell];
[self getPeriodicDelay:&delay interval:&interval];
[archiver encodeInt:[self state] withName:@"state"];
[archiver encodeFloat:delay withName:@"delay"];
[archiver encodeFloat:interval withName:@"interval"];
[archiver encodeString:[self title] withName:@"title"];
[archiver encodeString:[self alternateTitle] withName:@"alternateTitle"];
[archiver encodeObject:[self image] withName:@"image"];
[archiver encodeObject:[self alternateImage] withName:@"alternateImage"];
[archiver encodeInt:[self imagePosition] withName:@"imagePosition"];
[archiver encodeBOOL:[self isBordered] withName:@"isBordered"];
[archiver encodeBOOL:[self isTransparent] withName:@"isTransparent"];
[archiver encodeString:[self keyEquivalent] withName:@"keyEquivalent"];
[archiver encodeInt:[theCell highlightsBy] withName:@"highlightsBy"];
[archiver encodeInt:[theCell showsStateBy] withName:@"showsStateBy"];
[super encodeWithModelArchiver:archiver];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
float delay, interval;
id theCell = [self cell];
self = [super initWithModelUnarchiver:unarchiver];
[self setState:[unarchiver decodeIntWithName:@"state"]];
delay = [unarchiver decodeFloatWithName:@"delay"];
interval = [unarchiver decodeFloatWithName:@"interval"];
[self setPeriodicDelay:delay interval:interval];
[self setTitle:[unarchiver decodeStringWithName:@"title"]];
[self setAlternateTitle:[unarchiver decodeStringWithName:@"alternateTitle"]];
[self setImage:[unarchiver decodeObjectWithName:@"image"]];
[self setAlternateImage:[unarchiver decodeObjectWithName:@"alternateImage"]];
[self setImagePosition:[unarchiver decodeIntWithName:@"imagePosition"]];
[self setBordered:[unarchiver decodeBOOLWithName:@"isBordered"]];
[self setTransparent:[unarchiver decodeBOOLWithName:@"isTransparent"]];
[self setKeyEquivalent:[unarchiver decodeStringWithName:@"keyEquivalent"]];
[theCell setHighlightsBy:[unarchiver decodeIntWithName:@"highlightsBy"]];
[theCell setShowsStateBy:[unarchiver decodeIntWithName:@"showsStateBy"]];
return self;
}
- (Class)classForModelArchiver
{
return [NSButton class];
}
@end /* NSButton (GMArchiverMethods) */
@implementation NSCell (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeObject:[self font] withName:@"font"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
NSFont* font = [unarchiver decodeObjectWithName:@"font"];
if (!font)
font = [NSFont userFontOfSize:0];
[self setFont:font];
return self;
}
- (Class)classForModelArchiver
{
return [NSCell class];
}
@end /* NSCell (GMArchiverMethods) */
@implementation NSColor (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
NSString* colorSpaceName = [self colorSpaceName];
[archiver encodeString:colorSpaceName withName:@"colorSpaceName"];
if ([colorSpaceName isEqual:@"NSDeviceCMYKColorSpace"]) {
[archiver encodeFloat:[self cyanComponent] withName:@"cyan"];
[archiver encodeFloat:[self magentaComponent] withName:@"magenta"];
[archiver encodeFloat:[self yellowComponent] withName:@"yellow"];
[archiver encodeFloat:[self blackComponent] withName:@"black"];
[archiver encodeFloat:[self alphaComponent] withName:@"alpha"];
}
else if ([colorSpaceName isEqual:@"NSDeviceWhiteColorSpace"]
|| [colorSpaceName isEqual:@"NSCalibratedWhiteColorSpace"]) {
[archiver encodeFloat:[self whiteComponent] withName:@"white"];
[archiver encodeFloat:[self alphaComponent] withName:@"alpha"];
}
else if ([colorSpaceName isEqual:@"NSDeviceRGBColorSpace"]
|| [colorSpaceName isEqual:@"NSCalibratedRGBColorSpace"]) {
[archiver encodeFloat:[self redComponent] withName:@"red"];
[archiver encodeFloat:[self greenComponent] withName:@"green"];
[archiver encodeFloat:[self blueComponent] withName:@"blue"];
[archiver encodeFloat:[self alphaComponent] withName:@"alpha"];
[archiver encodeFloat:[self hueComponent] withName:@"hue"];
[archiver encodeFloat:[self saturationComponent] withName:@"saturation"];
[archiver encodeFloat:[self brightnessComponent] withName:@"brightness"];
}
else if ([colorSpaceName isEqual:@"NSNamedColorSpace"]) {
// TODO: change it when NSColor in GNUstep will have named color lists
#if 1
NSColor* new
= [self colorUsingColorSpaceName:@"NSCalibratedRGBColorSpace"];
[new encodeWithModelArchiver:archiver];
#else
[unarchiver encodeString:[self catalogNameComponent]
withName:@"catalogName"];
[unarchiver encodeString:[self colorNameComponent] withName:@"colorName"];
#endif
}
}
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
NSString* colorSpaceName
= [unarchiver decodeStringWithName:@"colorSpaceName"];
if ([colorSpaceName isEqual:@"NSDeviceCMYKColorSpace"]) {
float cyan = [unarchiver decodeFloatWithName:@"cyan"];
float magenta = [unarchiver decodeFloatWithName:@"magenta"];
float yellow = [unarchiver decodeFloatWithName:@"yellow"];
float black = [unarchiver decodeFloatWithName:@"black"];
float alpha = [unarchiver decodeFloatWithName:@"alpha"];
return [NSColor colorWithDeviceCyan:cyan
magenta:magenta
yellow:yellow
black:black
alpha:alpha];
}
else if ([colorSpaceName isEqual:@"NSDeviceWhiteColorSpace"]) {
float white = [unarchiver decodeFloatWithName:@"white"];
float alpha = [unarchiver decodeFloatWithName:@"alpha"];
return [NSColor colorWithDeviceWhite:white alpha:alpha];
}
else if ([colorSpaceName isEqual:@"NSCalibratedWhiteColorSpace"]) {
float white = [unarchiver decodeFloatWithName:@"white"];
float alpha = [unarchiver decodeFloatWithName:@"alpha"];
return [NSColor colorWithCalibratedWhite:white alpha:alpha];
}
else if ([colorSpaceName isEqual:@"NSDeviceRGBColorSpace"]) {
float red = [unarchiver decodeFloatWithName:@"red"];
float green = [unarchiver decodeFloatWithName:@"green"];
float blue = [unarchiver decodeFloatWithName:@"blue"];
float alpha = [unarchiver decodeFloatWithName:@"alpha"];
return [self colorWithDeviceRed:red green:green blue:blue alpha:alpha];
}
else if ([colorSpaceName isEqual:@"NSCalibratedRGBColorSpace"]) {
float red = [unarchiver decodeFloatWithName:@"red"];
float green = [unarchiver decodeFloatWithName:@"green"];
float blue = [unarchiver decodeFloatWithName:@"blue"];
float alpha = [unarchiver decodeFloatWithName:@"alpha"];
return [self colorWithCalibratedRed:red green:green blue:blue alpha:alpha];
}
else if ([colorSpaceName isEqual:@"NSNamedColorSpace"]) {
NSAssert (0, @"Named color spaces not supported yet!");
}
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
return self;
}
- (Class)classForModelArchiver
{
return [NSColor class];
}
@end /* NSColor (GMArchiverMethods) */
@implementation NSControl (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
id target;
SEL action;
if ((target = [self target]))
[archiver encodeObject:target withName:@"target"];
if ((action = [self action]))
[archiver encodeSelector:action withName:@"action"];
[archiver encodeBOOL:[self isEnabled] withName:@"isEnabled"];
[archiver encodeInt:[self alignment] withName:@"alignment"];
[archiver encodeObject:[self font] withName:@"font"];
[archiver encodeBOOL:[self isContinuous] withName:@"isContinuous"];
[archiver encodeInt:[self tag] withName:@"tag"];
[archiver encodeBOOL:[self ignoresMultiClick] withName:@"ignoresMultiClick"];
[super encodeWithModelArchiver:archiver];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
self = [super initWithModelUnarchiver:unarchiver];
[self setTarget:[unarchiver decodeObjectWithName:@"target"]];
[self setAction:[unarchiver decodeSelectorWithName:@"action"]];
[self setEnabled:[unarchiver decodeBOOLWithName:@"isEnabled"]];
[self setAlignment:[unarchiver decodeIntWithName:@"alignment"]];
[self setFont:[unarchiver decodeObjectWithName:@"font"]];
[self setContinuous:[unarchiver decodeBOOLWithName:@"isContinuous"]];
[self setTag:[unarchiver decodeIntWithName:@"tag"]];
[self setIgnoresMultiClick:
[unarchiver decodeBOOLWithName:@"ignoresMultiClick"]];
return self;
}
- (Class)classForModelArchiver
{
return [NSControl class];
}
@end /* NSControl (GMArchiverMethods) */
@implementation NSFont (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeString:[self fontName] withName:@"name"];
[archiver encodeFloat:[self pointSize] withName:@"size"];
}
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
return [NSFont fontWithName:[unarchiver decodeStringWithName:@"name"]
size:[unarchiver decodeFloatWithName:@"size"]];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
return self;
}
- (Class)classForModelArchiver
{
return [NSFont class];
}
@end /* NSFont (GMArchiverMethods) */
@implementation NSImage (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeString:[self name] withName:@"name"];
[archiver encodeSize:[self size] withName:@"size"];
}
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
return [NSImage imageNamed:[unarchiver decodeStringWithName:@"name"]];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
[self setSize:[unarchiver decodeSizeWithName:@"size"]];
return self;
}
- (Class)classForModelArchiver
{
return [NSImage class];
}
@end /* NSImage (GMArchiverMethods) */
@implementation NSMenuItem (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
#if XDPS_BACKEND_LIBRARY
[super encodeWithModelArchiver:archiver];
#endif
[archiver encodeObject:[self target] withName:@"target"];
[archiver encodeSelector:[self action] withName:@"action"];
[archiver encodeString:[self title] withName:@"title"];
[archiver encodeInt:[self tag] withName:@"tag"];
[archiver encodeBOOL:[self isEnabled] withName:@"isEnabled"];
[archiver encodeString:[self keyEquivalent] withName:@"keyEquivalent"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
#if XDPS_BACKEND_LIBRARY
self = [super initWithModelUnarchiver:unarchiver];
#endif
[self setTarget:[unarchiver decodeObjectWithName:@"target"]];
[self setAction:[unarchiver decodeSelectorWithName:@"action"]];
[self setTitle:[unarchiver decodeStringWithName:@"title"]];
[self setTag:[unarchiver decodeIntWithName:@"tag"]];
[self setEnabled:[unarchiver decodeBOOLWithName:@"isEnabled"]];
[self setKeyEquivalent:[unarchiver decodeStringWithName:@"keyEquivalent"]];
#if 0
NSLog (@"menu item %@: target = %@, isEnabled = %d",
[self title], [self target], [self isEnabled]);
#endif
return self;
}
- (Class)classForModelArchiver
{
return [NSMenuItem class];
}
@end /* NSMenuItem (GMArchiverMethods) */
@implementation NSMenu (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeObject:[self itemArray] withName:@"itemArray"];
[archiver encodeBOOL:[self autoenablesItems] withName:@"autoenablesItems"];
[archiver encodeString:[self title] withName:@"title"];
}
/* Define this method here because on OPENSTEP 4.x the NSMenu is inherited from
NSWindow and we don't want the NSWindow's method to be called. */
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
NSString* theTitle = [unarchiver decodeStringWithName:@"title"];
return [[[self allocWithZone:[unarchiver objectZone]] initWithTitle:theTitle]
autorelease];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
int i, count;
NSMutableArray* itemArray = [self itemArray];
NSMutableArray* decodedItems
= [unarchiver decodeObjectWithName:@"itemArray"];
for (i = 0, count = [decodedItems count]; i < count; i++)
[self addItemWithTitle:@"dummy" action:NULL keyEquivalent:@""];
[itemArray replaceObjectsInRange:NSMakeRange(0, count)
withObjectsFromArray:decodedItems];
for (i = 0; i < count; i++) {
id item = [itemArray objectAtIndex:i];
id target = [item target];
if ([target isKindOfClass:[NSMenu class]])
[self setSubmenu:target forItem:item];
}
[self setAutoenablesItems:
[unarchiver decodeBOOLWithName:@"autoenablesItems"]];
[self sizeToFit];
return self;
}
- (Class)classForModelArchiver
{
return [NSMenu class];
}
@end /* NSMenu (GMArchiverMethods) */
@implementation NSResponder (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
id nextResponder;
if ((nextResponder = [self nextResponder]))
[archiver encodeObject:nextResponder withName:@"nextResponder"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
[self setNextResponder:[unarchiver decodeObjectWithName:@"nextResponder"]];
return self;
}
- (Class)classForModelArchiver
{
return [NSResponder class];
}
@end /* NSResponder (GMArchiverMethods) */
@implementation NSTextField (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
id theCell = [self cell];
[super encodeWithModelArchiver:archiver];
[archiver encodeBOOL:[self isSelectable] withName:@"isSelectable"];
[archiver encodeSelector:[self errorAction] withName:@"errorAction"];
[archiver encodeObject:[self textColor] withName:@"textColor"];
[archiver encodeObject:[self backgroundColor] withName:@"backgroundColor"];
[archiver encodeBOOL:[self drawsBackground] withName:@"drawsBackground"];
[archiver encodeBOOL:[self isBordered] withName:@"isBordered"];
[archiver encodeBOOL:[self isBezeled] withName:@"isBezeled"];
[archiver encodeObject:[self nextText] withName:@"nextText"];
[archiver encodeObject:[self previousText] withName:@"previousText"];
[archiver encodeObject:[self delegate] withName:@"delegate"];
[archiver encodeString:[self stringValue] withName:@"stringValue"];
[archiver encodeBOOL:[self isEditable] withName:@"isEditable"];
[archiver encodeBOOL:[theCell isScrollable] withName:@"isScrollable"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
id theCell = [self cell];
BOOL flag;
self = [super initWithModelUnarchiver:unarchiver];
[self setSelectable:[unarchiver decodeBOOLWithName:@"isSelectable"]];
[self setErrorAction:[unarchiver decodeSelectorWithName:@"errorAction"]];
[self setTextColor:[unarchiver decodeObjectWithName:@"textColor"]];
[self setBackgroundColor:
[unarchiver decodeObjectWithName:@"backgroundColor"]];
[self setDrawsBackground:[unarchiver decodeBOOLWithName:@"drawsBackground"]];
flag = [unarchiver decodeBOOLWithName:@"isBordered"];
if (flag)
[self setBordered:flag];
flag = [unarchiver decodeBOOLWithName:@"isBezeled"];
if (flag)
[self setBezeled:flag];
[self setNextText:[unarchiver decodeObjectWithName:@"nextText"]];
[self setPreviousText:[unarchiver decodeObjectWithName:@"previousText"]];
[self setDelegate:[unarchiver decodeObjectWithName:@"delegate"]];
[theCell setStringValue:[unarchiver decodeStringWithName:@"stringValue"]];
[self setEditable:[unarchiver decodeBOOLWithName:@"isEditable"]];
[theCell setScrollable:[unarchiver decodeBOOLWithName:@"isScrollable"]];
return self;
}
- (Class)classForModelArchiver
{
return [NSTextField class];
}
@end /* NSTextField (GMArchiverMethods) */
@implementation NSView (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[super encodeWithModelArchiver:archiver];
[archiver encodeConditionalObject:[self superview] withName:@"superview"];
[archiver encodeObject:[self subviews] withName:@"subviews"];
[archiver encodeRect:[self frame] withName:@"frame"];
[archiver encodeRect:[self bounds] withName:@"bounds"];
[archiver encodeBOOL:[self postsFrameChangedNotifications]
withName:@"postsFrameChangedNotifications"];
[archiver encodeBOOL:[self postsBoundsChangedNotifications]
withName:@"postsBoundsChangedNotifications"];
[archiver encodeBOOL:[self autoresizesSubviews]
withName:@"autoresizesSubviews"];
[archiver encodeUnsignedInt:[self autoresizingMask]
withName:@"autoresizingMask"];
}
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
NSRect rect = [unarchiver decodeRectWithName:@"frame"];
NSView* view = [[[self allocWithZone:[unarchiver objectZone]]
initWithFrame:rect]
autorelease];
return view;
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
NSArray* subviews;
int i, count;
id superview;
self = [super initWithModelUnarchiver:unarchiver];
superview = [unarchiver decodeObjectWithName:@"superview"];
[superview addSubview:self];
subviews = [unarchiver decodeObjectWithName:@"subviews"];
for (i = 0, count = [subviews count]; i < count; i++)
[self addSubview:[subviews objectAtIndex:i]];
[self setBounds:[unarchiver decodeRectWithName:@"bounds"]];
[self setPostsFrameChangedNotifications:
[unarchiver decodeBOOLWithName:@"postsFrameChangedNotifications"]];
[self setPostsBoundsChangedNotifications:
[unarchiver decodeBOOLWithName:@"postsBoundsChangedNotifications"]];
[self setAutoresizesSubviews:
[unarchiver decodeBOOLWithName:@"autoresizesSubviews"]];
[self setAutoresizingMask:
[unarchiver decodeUnsignedIntWithName:@"autoresizingMask"]];
return self;
}
- (Class)classForModelArchiver
{
return [NSView class];
}
@end /* NSView (GMArchiverMethods) */
@implementation NSWindow (GMArchiverMethods)
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeRect:[self frame] withName:@"frame"];
[archiver encodeSize:[self maxSize] withName:@"maxSize"];
[archiver encodeSize:[self minSize] withName:@"minSize"];
[archiver encodeString:[self frameAutosaveName]
withName:@"frameAutosaveName"];
[archiver encodeInt:[self level] withName:@"level"];
[archiver encodeBOOL:[self isVisible] withName:@"isVisible"];
[archiver encodeBOOL:[self isAutodisplay] withName:@"isAutodisplay"];
[archiver encodeString:[self title] withName:@"title"];
[archiver encodeString:[self representedFilename]
withName:@"representedFilename"];
[archiver encodeBOOL:[self isReleasedWhenClosed]
withName:@"isReleasedWhenClosed"];
[archiver encodeObject:[self contentView] withName:@"contentView"];
[archiver encodeBOOL:[self hidesOnDeactivate]
withName:@"hidesOnDeactivate"];
[archiver encodeObject:[self backgroundColor] withName:@"backgroundColor"];
[archiver encodeUnsignedInt:[self styleMask] withName:@"styleMask"];
[archiver encodeUnsignedInt:[self backingType] withName:@"backingType"];
}
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
unsigned backingType = [unarchiver decodeUnsignedIntWithName:@"backingType"];
unsigned styleMask = [unarchiver decodeUnsignedIntWithName:@"styleMask"];
NSRect aRect = [unarchiver decodeRectWithName:@"frame"];
NSWindow* win = [[[NSWindow allocWithZone:[unarchiver objectZone]]
initWithContentRect:aRect
styleMask:styleMask backing:backingType defer:YES]
autorelease];
return win;
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
NSString* frameAutosaveName;
[self setContentView:[unarchiver decodeObjectWithName:@"contentView"]];
[self setMaxSize:[unarchiver decodeSizeWithName:@"maxSize"]];
[self setMinSize:[unarchiver decodeSizeWithName:@"minSize"]];
frameAutosaveName = [unarchiver decodeStringWithName:@"frameAutosaveName"];
if (frameAutosaveName)
[self setFrameAutosaveName:frameAutosaveName];
[self setLevel:[unarchiver decodeIntWithName:@"level"]];
[self setAutodisplay:[unarchiver decodeBOOLWithName:@"isAutodisplay"]];
[self setTitle:[unarchiver decodeStringWithName:@"title"]];
[self setRepresentedFilename:
[unarchiver decodeStringWithName:@"representedFilename"]];
[self setReleasedWhenClosed:
[unarchiver decodeBOOLWithName:@"isReleasedWhenClosed"]];
[self setHidesOnDeactivate:
[unarchiver decodeBOOLWithName:@"hidesOnDeactivate"]];
[self setBackgroundColor:
[unarchiver decodeObjectWithName:@"backgroundColor"]];
if ([unarchiver decodeBOOLWithName:@"isVisible"])
[self orderFront:nil];
#if GNU_GUI_LIBRARY
[[[self contentView] superview] _unconditionallyResetNeedsDisplayInAllViews];
[[self contentView] setNeedsDisplay:YES];
#endif
return self;
}
- (Class)classForModelArchiver
{
return [NSWindow class];
}
@end /* NSWindow (GMArchiverMethods) */

68
Model/GNUmakefile Normal file
View file

@ -0,0 +1,68 @@
# GNUmakefile
#
# Copyright (C) 1996 Free Software Foundation, Inc.
#
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Date: November 1997
#
# This file is part of the GNUstep GUI Library.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/common.make
LIBRARY_NAME = libgmodel
ifeq ($(GUI_LIB), nx)
TOOL_NAME = nib2gmodel
endif
APP_NAME = test
libgmodel_OBJC_FILES = IMCustomObject.m IMConnectors.m IMLoading.m GMAppKit.m
test_OBJC_FILES = test.m Controller.m
nib2gmodel_OBJC_FILES = IBClasses.m Translator.m nib2gmodel.m
# Additional library directories the linker should search
ifeq ($(FOUNDATION_LIB), nx)
ADDITIONAL_LIB_DIRS += -framework AppKit
endif
# Additional flags to pass to the Objective-C compiler
ADDITIONAL_OBJCFLAGS = -Wall
ADDITIONAL_CPPFLAGS += $(RUNTIME_DEFINE) $(GUI_DEFINE) $(BACKEND_DEFINE)
ADDITIONAL_LIB_DIRS += -L$(GNUSTEP_OBJ_DIR)
ADDITIONAL_TOOL_LIBS += -lgmodel -lFoundationExt
ADDITIONAL_OBJC_FLAGS += $(BACKEND_DEFINE)
# What are the libraries this library depends upon. This is needed for some
# systems where building a shared library requires to pass to the linker
# all the libraries the target library depends upon.
LIBRARIES_DEPEND_UPON = -lFoundationExt $(FND_LIBS) $(GUI_LIBS) \
$(BACKEND_LIBS) $(SYSTEM_LIBS)
-include GNUmakefile.local
include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/library.make
include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/tool.make
include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/application.make
-include GNUmakefile.postamble

59
Model/IBClasses.h Normal file
View file

@ -0,0 +1,59 @@
/*
IBClasses.h
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* This is a list of classes used internally by the NeXT's NIB stuff. These
classes were generated using the class-dump utility. */
#ifndef _GNUstep_H_IBClasses
#define _GNUstep_H_IBClasses
#import <Foundation/NSObject.h>
@class NSString;
@interface NSCustomObject : NSObject
{
NSString *className;
id realObject;
id extension;
}
@end
@interface NSIBConnector : NSObject
{
id source;
id destination;
NSString *label;
}
@end
@interface NSIBOutletConnector : NSIBConnector
@end
@interface NSIBControlConnector : NSIBConnector
@end
#endif /* _GNUstep_H_IBClasses */

129
Model/IBClasses.m Normal file
View file

@ -0,0 +1,129 @@
/*
IBClasses.m
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#import <Foundation/NSCoder.h>
#import <Foundation/NSString.h>
#import <Foundation/NSArray.h>
#import <extensions/GMArchiver.h>
#import "IBClasses.h"
#import "Translator.h"
#import "IMConnectors.h"
#import "IMCustomObject.h"
//#define DEBUG
@implementation NSCustomObject (NibToGModel)
- (id)awakeAfterUsingCoder:(NSCoder*)aDecoder
{
#ifdef DEBUG
NSLog (@"%x awakeAfterUsingCoder NSCustomObject: className = %@, realObject = %@, "
@"extension = %@", self, className, realObject, extension);
#endif
[objects addObject:self];
return self;
}
- description
{
return [NSString stringWithFormat:@"className = %@, realObject = %@, extension = %@", className, realObject, extension];
}
- nibInstantiate
{
return self;
}
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeString:className withName:@"className"];
if (realObject)
[archiver encodeObject:realObject withName:@"realObject"];
if (extension)
[archiver encodeObject:extension withName:@"extension"];
}
- (Class)classForModelArchiver
{
return [IMCustomObject class];
}
@end /* NSCustomObject */
@implementation NSIBConnector (NibToGModel)
- (id)awakeAfterUsingCoder:(NSCoder*)aDecoder
{
#ifdef DEBUG
NSLog (@"%x awakeAfterUsingCoder %@: source = %@, destination = %@, label = %@",
self, NSStringFromClass(isa), source, destination, label);
#endif
[source retain];
[destination retain];
[label retain];
[connections addObject:self];
return self;
}
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeObject:source withName:@"source"];
[archiver encodeObject:destination withName:@"destination"];
[archiver encodeObject:label withName:@"label"];
}
- (Class)classForModelArchiver
{
return [IMConnector class];
}
@end /* NSIBConnector */
@implementation NSIBOutletConnector (NibToGModel)
- (void)establishConnection
{
}
- (Class)classForModelArchiver
{
return [IMOutletConnector class];
}
@end /* NSIBOutletConnector */
@implementation NSIBControlConnector (NibToGModel)
- (void)establishConnection
{
}
- (Class)classForModelArchiver
{
return [IMControlConnector class];
}
@end /* NSIBControlConnector */

55
Model/IMConnectors.h Normal file
View file

@ -0,0 +1,55 @@
/*
IMConnectors.h
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* These classes were inspired by IBConnectors classes from objcX, "an
Objective-C class library for a window system". The code was originally
written by Scott Francis, Paul Kunz, Imran Qureshi and Libing Wang. */
#ifndef _GNUstep_H_IMConnectors
#define _GNUstep_H_IMConnectors
#import <Foundation/NSObject.h>
@interface IMConnector : NSObject
{
id source;
id destination;
NSString* label;
}
- source;
- destination;
- label;
@end
@interface IMControlConnector:IMConnector
- (void)establishConnection;
@end
@interface IMOutletConnector : IMConnector
- (void)establishConnection;
@end
#endif /* _GNUstep_H_IMConnectors */

130
Model/IMConnectors.m Normal file
View file

@ -0,0 +1,130 @@
/*
IMConnectors.m
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <string.h>
#import <AppKit/NSActionCell.h>
#include <extensions/GMArchiver.h>
#include <extensions/objc-runtime.h>
#include "IMCustomObject.h"
#include "IMConnectors.h"
static void
object_set_instance_variable (id anObject,
const char* variableName,
const void* value)
{
struct objc_class* class;
struct objc_ivar_list* ivars;
int i;
if (!anObject)
return;
// NSLog (@"%@: setting ivar '%s' to %x", anObject, variableName, value);
class = [anObject class];
ivars = class->ivars;
if (!ivars)
return;
for (i = 0; i < ivars->ivar_count; i++) {
struct objc_ivar ivar = ivars->ivar_list[i];
if (ivar.ivar_name && !strcmp (ivar.ivar_name, variableName)) {
/* We found it! */
*((id*)(((char*)anObject) + ivar.ivar_offset)) = value;
break;
}
}
}
@implementation IMConnector
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeObject:source withName:@"source"];
[archiver encodeObject:destination withName:@"destination"];
[archiver encodeObject:label withName:@"label"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
source = [unarchiver decodeObjectWithName:@"source"];
destination = [unarchiver decodeObjectWithName:@"destination"];
label = [unarchiver decodeObjectWithName:@"label"];
return self;
}
- (id)source { return source; }
- (id)destination { return destination; }
- (id)label { return label; }
@end /* IMConnector */
@implementation IMControlConnector:IMConnector
- (void)establishConnection
{
id _source = [source nibInstantiate];
id _destination = [destination nibInstantiate];
SEL action = NSSelectorFromString (label);
if ([_source respondsToSelector:@selector(setTarget:)]) {
// NSLog (@"%@: setting target to %@", _source, _destination);
[_source setTarget:_destination];
}
else
object_set_instance_variable (_source, "target", _destination);
if ([_source respondsToSelector:@selector(setAction:)]) {
// NSLog (@"%@: setting action to %@",
// _source, NSStringFromSelector(action));
[_source setAction:action];
}
else
object_set_instance_variable (_source, "action", action);
}
@end /* IMControlConnector:IMConnector */
@implementation IMOutletConnector
- (void)establishConnection
{
id _source = [source nibInstantiate];
id _destination = [destination nibInstantiate];
NSString* setMethodName = [@"set" stringByAppendingString:
[label capitalizedString]];
SEL setSelector = NSSelectorFromString (setMethodName);
if (setSelector && [_source respondsToSelector:setSelector])
[_source performSelector:setSelector withObject:_destination];
else
object_set_instance_variable(_source, [label cString], _destination);
}
@end /* IMOutletConnector */

54
Model/IMCustomObject.h Normal file
View file

@ -0,0 +1,54 @@
/*
IMCustomObject.h
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* This class was inspired by CustomObject class from objcX, "an Objective-C
class library for a window system". The code was originally written by
Paul Kunz and Imran Qureshi. */
#ifndef _GNUstep_H_IMCustomObject
#define _GNUstep_H_IMCustomObject
#import <Foundation/NSObject.h>
/* Add an archiving category to object so every object can respond to
-nibInstantiate
*/
@interface NSObject (ModelUnarchiving)
- (id)nibInstantiate;
@end
@interface IMCustomObject : NSObject
{
NSString* className;
id realObject;
id extension;
}
- (id)nibInstantiate;
@end
#endif /* _GNUstep_H_IMCustomObject */

89
Model/IMCustomObject.m Normal file
View file

@ -0,0 +1,89 @@
/*
IMCustomObject.m
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#import <Foundation/NSObjCRuntime.h>
#include <extensions/GMArchiver.h>
#include "IMCustomObject.h"
@implementation NSObject(ModelUnarchiving)
- (id)nibInstantiate
{
return self;
}
@end
@implementation IMCustomObject
extern id _nibOwner;
extern BOOL _fileOwnerDecoded;
+ (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver
{
IMCustomObject* customObject = [[self new] autorelease];
Class class;
customObject->className = [unarchiver decodeStringWithName:@"className"];
customObject->extension = [unarchiver decodeObjectWithName:@"extension"];
customObject->realObject = [unarchiver decodeObjectWithName:@"realObject"];
if (!_fileOwnerDecoded) {
_fileOwnerDecoded = YES;
customObject->realObject = _nibOwner;
return customObject;
}
class = NSClassFromString (customObject->className);
if (class)
customObject->realObject = [[class alloc] init];
else {
NSLog (@"Class %@ not linked into application!", customObject->className);
}
return customObject;
}
- (id)nibInstantiate
{
return realObject;
}
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeString:className withName:@"className"];
if (realObject)
[archiver encodeObject:realObject withName:@"realObject"];
if (extension)
[archiver encodeObject:extension withName:@"extension"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
return self;
}
@end

51
Model/IMLoading.h Normal file
View file

@ -0,0 +1,51 @@
/*
IMLoading.h
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _GNUstep_H_IMLoading
#define _GNUstep_H_IMLoading
#import <Foundation/NSBundle.h>
@interface NSObject (NibAwaking)
- (void)awakeFromModel;
@end
@interface NSBundle (IMLoading)
+ (BOOL)loadIMFile:(NSString*)filename owner:(id)owner;
@end
@interface GMModel : NSObject
{
NSArray* objects;
NSArray* connections;
}
+ (BOOL)loadIMFile:(NSString*)path owner:(id)owner;
- (void)_makeConnections;
- (void)_setObjects:objects connections:connections;
@end
#endif /* _GNUstep_H_IMLoading */

139
Model/IMLoading.m Normal file
View file

@ -0,0 +1,139 @@
/*
IMLoading.m
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#import <Foundation/NSDictionary.h>
#import <Foundation/NSArray.h>
#include <extensions/GMArchiver.h>
#include "IMLoading.h"
#include "IMCustomObject.h"
void __dummy_IMLoading_functionForLinking()
{
__dummy_IMLoading_functionForLinking();
}
@implementation NSBundle (IMLoading)
+ (BOOL)loadIMFile:(NSString*)path owner:(id)owner
{
return [GMModel loadIMFile:path owner:owner];
}
@end /* NSBundle(IMLoading) */
@implementation GMModel
id _nibOwner = nil;
BOOL _fileOwnerDecoded = NO;
+ (void)initialize
{
/* Force linking of AppKit GModel categories */
extern void __dummy_GMAppKit_functionForLinking();
__dummy_GMAppKit_functionForLinking ();
}
+ (BOOL)loadIMFile:(NSString*)path owner:(id)owner
{
GMUnarchiver* unarchiver = [GMUnarchiver unarchiverWithContentsOfFile:path];
id previousNibOwner = _nibOwner;
GMModel* decoded;
if (!unarchiver)
return NO;
/* Set the _nibOwner to `owner' so that the first decoded custom object
replaces itself with `owner'. Also set _fileOwnerDecoded so that the
first custom object knows it's the first. */
_nibOwner = owner;
_fileOwnerDecoded = NO;
decoded = [unarchiver decodeObjectWithName:@"RootObject"];
[decoded _makeConnections];
/* Restore the previous nib owner. We do this because loadIMFile:owner: can
be invoked recursively. */
_nibOwner = previousNibOwner;
return YES;
}
- (void)_makeConnections
{
int i, count;
[connections makeObjectsPerform:@selector(establishConnection)];
/* Send the -awakeFromModel method */
for (i = 0, count = [objects count]; i < count; i++) {
id object = [[objects objectAtIndex:i] nibInstantiate];
if ([object respondsToSelector:@selector(awakeFromModel)])
[object awakeFromModel];
}
}
- (void)dealloc
{
[objects release];
[connections release];
[super dealloc];
}
- (void)_setObjects:_objects connections:_connections
{
objects = [_objects retain];
connections = [_connections retain];
}
- (void)encodeWithModelArchiver:(GMArchiver*)archiver
{
[archiver encodeObject:objects withName:@"Objects"];
[archiver encodeObject:connections withName:@"Connections"];
}
- (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver
{
objects = [[unarchiver decodeObjectWithName:@"Objects"] retain];
connections = [[unarchiver decodeObjectWithName:@"Connections"] retain];
return self;
}
@end /* GMModel */
#if GNU_RUNTIME
#import "IMConnectors.h"
static void __dummyFunctionForLinking (void)
{
[IMCustomObject new];
[IMConnector new];
__dummyFunctionForLinking();
}
#endif

40
Model/Translator.h Normal file
View file

@ -0,0 +1,40 @@
/*
Translator.h
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _GNUstep_H_Translator
#define _GNUstep_H_Translator
#import <Foundation/NSObject.h>
@class NSMutableArray;
extern NSMutableArray* objects;
extern NSMutableArray* connections;
@interface Translator : NSObject
- (void)translateNibFile:(NSString*)nibFile toModelFile:(NSString*)gmodelFile;
@end
#endif /* _GNUstep_H_Translator */

69
Model/Translator.m Normal file
View file

@ -0,0 +1,69 @@
/*
Translator.m
Translate a NIB file to a GNU model file.
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* The original idea comes from the nib translator in objcX, an Objective-C
class library for Motif, translator whose authors are Paul Kunz and
Imran Qureshi.
*/
#import <AppKit/AppKit.h>
#import <extensions/GMArchiver.h>
#import "IMLoading.h"
#import "IBClasses.h"
#import "Translator.h"
NSMutableArray* objects;
NSMutableArray* connections;
@implementation Translator
- (void)translateNibFile:(NSString*)nibFile toModelFile:(NSString*)gmodelFile
{
GMArchiver* archiver;
GMModel* model;
objects = [[NSMutableArray new] autorelease];
connections = [[NSMutableArray new] autorelease];
model = [[GMModel new] autorelease];
[NSApplication sharedApplication];
if (![NSBundle loadNibFile:nibFile
externalNameTable:[NSDictionary dictionaryWithObjectsAndKeys:
NSApp, @"NSOwner", nil]
withZone:[NSApp zone]]) {
NSLog (@"Cannot load nib file %@!", nibFile);
exit (1);
}
archiver = [[GMArchiver new] autorelease];
[model _setObjects:objects connections:connections];
[archiver encodeRootObject:model withName:@"RootObject"];
if (![archiver writeToFile:gmodelFile])
NSLog (@"cannot write the model output file %@", gmodelFile);
}
@end

55
Model/nib2gmodel.m Normal file
View file

@ -0,0 +1,55 @@
/*
nib2gmodel.m
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Ovidiu Predescu <ovidiu@net-community.com>
Date: November 1997
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSProcessInfo.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSString.h>
#import "Translator.h"
int main ()
{
id pool = [NSAutoreleasePool new];
NSProcessInfo* processInfo = [NSProcessInfo processInfo];
NSArray* arguments = [processInfo arguments];
id translator;
if ([arguments count] != 3) {
printf ("Convert nib files to GNU model files.\n");
printf ("usage: %s nib-file gmodel-file\n",
[[processInfo processName] cString]);
exit (1);
}
translator = [[Translator new] autorelease];
[translator translateNibFile:[arguments objectAtIndex:1]
toModelFile:[arguments objectAtIndex:2]];
// [pool release];
return 0;
}

712
Model/test.gmodel Normal file
View file

@ -0,0 +1,712 @@
{
"Object 1" = {
elements = ("Object 2", "Object 51", "Object 52");
isa = NSMutableArray;
};
"Object 2" = {className = NSApplication; isa = IMCustomObject; realObject = "Object 3"; };
"Object 3" = {
isa = NSApplication;
keyWindow = nil;
mainMenu = "Object 30";
mainWindow = nil;
windows = "Object 4";
};
"Object 4" = {
elements = ("Object 5", "Object 9", "Object 11");
isa = NSMutableArray;
};
"Object 5" = {
backgroundColor = "Object 8";
backingType = 0;
contentView = "Object 6";
frame = "{x = 0; y = 0; width = 256; height = 128}";
frameAutosaveName = nil;
hidesOnDeactivate = NO;
isAutodisplay = NO;
isReleasedWhenClosed = NO;
isVisible = NO;
isa = NSWindow;
level = 0;
maxSize = "{width = 3.40282e+38; height = 3.40282e+38}";
minSize = "{width = 0; height = 0}";
representedFilename = "";
styleMask = 0;
title = "";
};
"Object 6" = {
autoresizesSubviews = YES;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 256; height = 128}";
frame = "{x = 0; y = 0; width = 256; height = 128}";
isa = NSView;
nextResponder = "Object 5";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
subviews = "Object 7";
superview = nil;
};
"Object 7" = {elements = (); isa = NSMutableArray; };
"Object 8" = {
alpha = 1.000000;
blue = 0.666667;
brightness = 0.666667;
colorSpaceName = NSCalibratedRGBColorSpace;
green = 0.666667;
hue = 0.000000;
isa = NSColor;
red = 0.666667;
saturation = 0.000000;
};
"Object 9" = {
backgroundColor = "Object 8";
backingType = 0;
contentView = "Object 10";
frame = "{x = 0; y = 0; width = 193; height = 208}";
frameAutosaveName = nil;
hidesOnDeactivate = NO;
isAutodisplay = NO;
isReleasedWhenClosed = NO;
isVisible = NO;
isa = NSWindow;
level = 0;
maxSize = "{width = 3.40282e+38; height = 3.40282e+38}";
minSize = "{width = 0; height = 0}";
representedFilename = "";
styleMask = 0;
title = "";
};
"Object 10" = {
autoresizesSubviews = YES;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 193; height = 208}";
frame = "{x = 0; y = 0; width = 193; height = 208}";
isa = NSView;
nextResponder = "Object 9";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
subviews = "Object 7";
superview = nil;
};
"Object 11" = {
backgroundColor = "Object 8";
backingType = 2;
contentView = "Object 12";
frame = "{x = 258; y = 519; width = 422; height = 296}";
frameAutosaveName = nil;
hidesOnDeactivate = NO;
isAutodisplay = YES;
isReleasedWhenClosed = NO;
isVisible = YES;
isa = NSWindow;
level = 0;
maxSize = "{width = 3.40282e+38; height = 3.40282e+38}";
minSize = "{width = 0; height = 0}";
representedFilename = "";
styleMask = 14;
title = "My Window";
};
"Object 12" = {
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 420; height = 264}";
frame = "{x = 1; y = 9; width = 420; height = 264}";
isa = NSView;
nextResponder = "Object 11";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
subviews = "Object 13";
superview = nil;
};
"Object 13" = {
elements = (
"Object 14",
"Object 16",
"Object 17",
"Object 18",
"Object 19",
"Object 20",
"Object 21",
"Object 24",
"Object 27"
);
isa = NSMutableArray;
};
"Object 14" = {
alignment = 2;
alternateImage = nil;
alternateTitle = Alternate;
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 114; height = 24}";
delay = 0.200000;
font = "Object 15";
frame = "{x = 16; y = 140; width = 114; height = 24}";
highlightsBy = 12;
ignoresMultiClick = NO;
image = nil;
imagePosition = 0;
interval = 0.025000;
isBordered = YES;
isContinuous = NO;
isEnabled = YES;
isTransparent = NO;
isa = NSButton;
keyEquivalent = "";
nextResponder = "Object 12";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
showsStateBy = 0;
state = 0;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
title = "Momentary Light";
};
"Object 15" = {isa = NSFont; name = Helvetica; size = 12.000000; };
"Object 16" = {
alignment = 2;
alternateImage = nil;
alternateTitle = Alternate;
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 114; height = 24}";
delay = 0.200000;
font = "Object 15";
frame = "{x = 16; y = 224; width = 114; height = 24}";
highlightsBy = 14;
ignoresMultiClick = NO;
image = nil;
imagePosition = 0;
interval = 0.025000;
isBordered = YES;
isContinuous = NO;
isEnabled = YES;
isTransparent = NO;
isa = NSButton;
keyEquivalent = "";
nextResponder = "Object 12";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
showsStateBy = 0;
state = 0;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
title = "Momentary Push";
};
"Object 17" = {
alignment = 2;
alternateImage = nil;
alternateTitle = Alternate;
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 114; height = 24}";
delay = 0.200000;
font = "Object 15";
frame = "{x = 16; y = 182; width = 114; height = 24}";
highlightsBy = 1;
ignoresMultiClick = NO;
image = nil;
imagePosition = 0;
interval = 0.025000;
isBordered = YES;
isContinuous = NO;
isEnabled = YES;
isTransparent = NO;
isa = NSButton;
keyEquivalent = "";
nextResponder = "Object 12";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
showsStateBy = 0;
state = 0;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
title = "Momentary change";
};
"Object 18" = {
alignment = 2;
alternateImage = nil;
alternateTitle = Alternate;
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 114; height = 24}";
delay = 0.200000;
font = "Object 15";
frame = "{x = 17; y = 98; width = 114; height = 24}";
highlightsBy = 14;
ignoresMultiClick = NO;
image = nil;
imagePosition = 0;
interval = 0.025000;
isBordered = YES;
isContinuous = NO;
isEnabled = YES;
isTransparent = NO;
isa = NSButton;
keyEquivalent = "";
nextResponder = "Object 12";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
showsStateBy = 12;
state = 0;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
title = PushOn/PushOff;
};
"Object 19" = {
alignment = 2;
alternateImage = nil;
alternateTitle = Alternate;
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 114; height = 24}";
delay = 0.200000;
font = "Object 15";
frame = "{x = 16; y = 56; width = 114; height = 24}";
highlightsBy = 12;
ignoresMultiClick = NO;
image = nil;
imagePosition = 0;
interval = 0.025000;
isBordered = YES;
isContinuous = NO;
isEnabled = YES;
isTransparent = NO;
isa = NSButton;
keyEquivalent = "";
nextResponder = "Object 12";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
showsStateBy = 12;
state = 0;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
title = On/Off;
};
"Object 20" = {
alignment = 2;
alternateImage = nil;
alternateTitle = Alternate;
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 114; height = 24}";
delay = 0.200000;
font = "Object 15";
frame = "{x = 16; y = 14; width = 114; height = 24}";
highlightsBy = 3;
ignoresMultiClick = NO;
image = nil;
imagePosition = 0;
interval = 0.025000;
isBordered = YES;
isContinuous = NO;
isEnabled = YES;
isTransparent = NO;
isa = NSButton;
keyEquivalent = "";
nextResponder = "Object 12";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
showsStateBy = 1;
state = 0;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
title = Toggle;
};
"Object 21" = {
alignment = 0;
alternateImage = "Object 23";
alternateTitle = Alternate;
autoresizesSubviews = NO;
autoresizingMask = 0;
bounds = "{x = 0; y = 0; width = 109; height = 15}";
delay = 0.200000;
font = "Object 15";
frame = "{x = 204; y = 208; width = 109; height = 15}";
highlightsBy = 3;
ignoresMultiClick = NO;
image = "Object 22";
imagePosition = 2;
interval = 0.025000;
isBordered = NO;
isContinuous = NO;
isEnabled = YES;
isTransparent = NO;
isa = NSButton;
keyEquivalent = "";
nextResponder = "Object 12";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
showsStateBy = 1;
state = 0;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
title = Switch;
};
"Object 22" = {isa = NSImage; name = NSSwitch; size = "{width = 15; height = 15}"; };
"Object 23" = {
isa = NSImage;
name = NSHighlightedSwitch;
size = "{width = 15; height = 15}";
};
"Object 24" = {
alignment = 2;
autoresizesSubviews = NO;
autoresizingMask = 0;
backgroundColor = "Object 8";
bounds = "{x = 0; y = 0; width = 132; height = 26}";
delegate = nil;
drawsBackground = NO;
errorAction = nil;
font = "Object 25";
frame = "{x = 194; y = 159; width = 132; height = 26}";
ignoresMultiClick = NO;
isBezeled = NO;
isBordered = YES;
isContinuous = NO;
isEditable = YES;
isEnabled = YES;
isScrollable = YES;
isSelectable = YES;
isa = NSTextField;
nextResponder = "Object 12";
nextText = "Object 18";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
previousText = "Object 14";
stringValue = Title;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
textColor = "Object 26";
};
"Object 25" = {isa = NSFont; name = Helvetica; size = 18.000000; };
"Object 26" = {
alpha = 1.000000;
blue = 0.000000;
brightness = 0.000000;
colorSpaceName = NSCalibratedRGBColorSpace;
green = 0.000000;
hue = 0.000000;
isa = NSColor;
red = 0.000000;
saturation = 0.000000;
};
"Object 27" = {
alignment = 2;
autoresizesSubviews = NO;
autoresizingMask = 0;
backgroundColor = "Object 29";
bounds = "{x = 0; y = 0; width = 214; height = 21}";
delegate = nil;
drawsBackground = YES;
errorAction = nil;
font = "Object 15";
frame = "{x = 172; y = 100; width = 214; height = 21}";
ignoresMultiClick = NO;
isBezeled = YES;
isBordered = NO;
isContinuous = NO;
isEditable = YES;
isEnabled = YES;
isScrollable = YES;
isSelectable = YES;
isa = NSTextField;
nextResponder = "Object 12";
nextText = "Object 19";
postsBoundsChangedNotifications = YES;
postsFrameChangedNotifications = YES;
previousText = "Object 18";
stringValue = Text;
subviews = "Object 7";
superview = "Object 12";
tag = 0;
textColor = "Object 28";
};
"Object 28" = {
alpha = 1.000000;
blue = 0.000000;
brightness = 0.000000;
colorSpaceName = NSCalibratedRGBColorSpace;
green = 0.000000;
hue = 0.000000;
isa = NSColor;
red = 0.000000;
saturation = 0.000000;
};
"Object 29" = {
alpha = 1.000000;
blue = 1.000000;
brightness = 1.000000;
colorSpaceName = NSCalibratedRGBColorSpace;
green = 1.000000;
hue = 0.000000;
isa = NSColor;
red = 1.000000;
saturation = 0.000000;
};
"Object 30" = {
autoenablesItems = YES;
isa = NSMenu;
itemArray = "Object 31";
title = test;
};
"Object 31" = {
elements = ("Object 32", "Object 38", "Object 49", "Object 50");
isa = NSMutableArray;
};
"Object 32" = {
action = "submenuAction:";
isEnabled = YES;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = "Object 33";
title = Info;
};
"Object 33" = {
autoenablesItems = YES;
isa = NSMenu;
itemArray = "Object 34";
title = Info;
};
"Object 34" = {
elements = ("Object 35", "Object 36", "Object 37");
isa = NSMutableArray;
};
"Object 35" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = nil;
title = "Info Panel...";
};
"Object 36" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = nil;
title = Preferences...;
};
"Object 37" = {
action = nil;
isEnabled = YES;
isa = NSMenuItem;
keyEquivalent = "?";
tag = 0;
target = nil;
title = Help...;
};
"Object 38" = {
action = "submenuAction:";
isEnabled = YES;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = "Object 39";
title = Document;
};
"Object 39" = {
autoenablesItems = YES;
isa = NSMenu;
itemArray = "Object 40";
title = Document;
};
"Object 40" = {
elements = (
"Object 41",
"Object 42",
"Object 43",
"Object 44",
"Object 45",
"Object 46",
"Object 47",
"Object 48"
);
isa = NSMutableArray;
};
"Object 41" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = o;
tag = 0;
target = nil;
title = Open...;
};
"Object 42" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = n;
tag = 0;
target = nil;
title = New;
};
"Object 43" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = s;
tag = 0;
target = nil;
title = Save;
};
"Object 44" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = S;
tag = 0;
target = nil;
title = "Save As...";
};
"Object 45" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = nil;
title = "Save To...";
};
"Object 46" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = nil;
title = "Save All";
};
"Object 47" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = nil;
title = "Revert to Saved";
};
"Object 48" = {
action = nil;
isEnabled = NO;
isa = NSMenuItem;
keyEquivalent = "";
tag = 0;
target = nil;
title = Close;
};
"Object 49" = {
action = nil;
isEnabled = YES;
isa = NSMenuItem;
keyEquivalent = h;
tag = 0;
target = nil;
title = Hide;
};
"Object 50" = {
action = nil;
isEnabled = YES;
isa = NSMenuItem;
keyEquivalent = q;
tag = 0;
target = nil;
title = Quit;
};
"Object 51" = {className = NSFontManager; isa = IMCustomObject; };
"Object 52" = {className = Controller; isa = IMCustomObject; };
"Object 53" = {
elements = (
"Object 54",
"Object 56",
"Object 58",
"Object 60",
"Object 62",
"Object 63",
"Object 64",
"Object 65",
"Object 66",
"Object 67"
);
isa = NSMutableArray;
};
"Object 54" = {
destination = "Object 2";
isa = IMControlConnector;
label = "Object 55";
source = "Object 50";
};
"Object 55" = {isa = NSString; string = "terminate:"; };
"Object 56" = {
destination = "Object 2";
isa = IMControlConnector;
label = "Object 57";
source = "Object 49";
};
"Object 57" = {isa = NSString; string = "hide:"; };
"Object 58" = {
destination = "Object 27";
isa = IMOutletConnector;
label = "Object 59";
source = "Object 52";
};
"Object 59" = {isa = NSString; string = textField; };
"Object 60" = {
destination = "Object 52";
isa = IMControlConnector;
label = "Object 61";
source = "Object 16";
};
"Object 61" = {isa = NSString; string = "buttonPressed:"; };
"Object 62" = {
destination = "Object 52";
isa = IMControlConnector;
label = "Object 61";
source = "Object 17";
};
"Object 63" = {
destination = "Object 52";
isa = IMControlConnector;
label = "Object 61";
source = "Object 14";
};
"Object 64" = {
destination = "Object 52";
isa = IMControlConnector;
label = "Object 61";
source = "Object 18";
};
"Object 65" = {
destination = "Object 52";
isa = IMControlConnector;
label = "Object 61";
source = "Object 19";
};
"Object 66" = {
destination = "Object 52";
isa = IMControlConnector;
label = "Object 61";
source = "Object 20";
};
"Object 67" = {
destination = "Object 52";
isa = IMControlConnector;
label = "Object 61";
source = "Object 21";
};
RootObject = {Connections = "Object 53"; Objects = "Object 1"; isa = GMModel; };
TopLevelObjects = (RootObject);
Version = 1;
}

40
Model/test.m Normal file
View file

@ -0,0 +1,40 @@
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import "IMLoading.h"
int main (int argc, char** argv, char** env)
{
id pool;
NSArray* arguments;
NSProcessInfo* processInfo;
pool = [NSAutoreleasePool new];
#if LIB_FOUNDATION_LIBRARY
[NSProcessInfo initializeWithArguments:argv count:argc environment:env];
#endif
processInfo = [NSProcessInfo processInfo];
arguments = [processInfo arguments];
if ([arguments count] != 2) {
printf ("usage: %s gmodel-file\n", [[processInfo processName] cString]);
exit (1);
}
#ifndef NX_CURRENT_COMPILER_RELEASE
initialize_gnustep_backend();
#endif
if (![GMModel loadIMFile:[arguments objectAtIndex:1]
owner:[NSApplication sharedApplication]]) {
printf ("Cannot load Interface Modeller file!\n");
exit (1);
}
[[NSApplication sharedApplication] run];
printf ("exiting...\n");
[pool release];
exit (0);
return 0;
}

View file

@ -0,0 +1,6 @@
"Controller" = {
ACTIONS = {"buttonPressed:" = id; };
OUTLETS = {textField = id; };
SUPERCLASS = NSObject;
};
"FirstResponder" = {ACTIONS = {}; OUTLETS = {}; SUPERCLASS = NSObject; };

BIN
Model/test.nib/objects.nib generated Normal file

Binary file not shown.