GScheme-20060213.tar
This commit is contained in:
		
							parent
							
								
									b87ebad788
								
							
						
					
					
						commit
						10faaed845
					
				
							
								
								
									
										171
									
								
								#EnvWindow.m#
								
								
								
								
							
							
						
						
									
										171
									
								
								#EnvWindow.m#
								
								
								
								
							| 
						 | 
				
			
			@ -1,171 +0,0 @@
 | 
			
		|||
 | 
			
		||||
#import "EnvWindow.h"
 | 
			
		||||
#import "VScheme.h"
 | 
			
		||||
 | 
			
		||||
@implementation EnvWindow
 | 
			
		||||
 | 
			
		||||
#define WIDTH  300
 | 
			
		||||
#define HEIGHT 200
 | 
			
		||||
 | 
			
		||||
static int count = 0;
 | 
			
		||||
- initWithEnv:(Environment *)env
 | 
			
		||||
{
 | 
			
		||||
    NSWindow *window;
 | 
			
		||||
    Environment *layer; int lind;
 | 
			
		||||
    NSRect contentRect = {{0, 0}, {WIDTH, HEIGHT}};
 | 
			
		||||
    NSRect winRect = 
 | 
			
		||||
    {{250+(count%12)*24, 100+(count%12)*24}, {WIDTH, HEIGHT}};
 | 
			
		||||
    NSRect textRect;
 | 
			
		||||
    unsigned int style = NSTitledWindowMask | NSClosableWindowMask |
 | 
			
		||||
        NSMiniaturizableWindowMask | NSResizableWindowMask;
 | 
			
		||||
    NSString *title =              
 | 
			
		||||
        [NSString stringWithFormat:@"Scheme Env. # %d", ++count];              
 | 
			
		||||
 | 
			
		||||
    length = [env chainLength];
 | 
			
		||||
    names = NSZoneMalloc([self zone], length*sizeof(id));
 | 
			
		||||
    values = NSZoneMalloc([self zone], length*sizeof(id));
 | 
			
		||||
 | 
			
		||||
    NSAutoreleasePool *pool = [NSAutoreleasePool new];
 | 
			
		||||
    
 | 
			
		||||
    for(lind=length-1, layer = env; lind>=0; lind--){
 | 
			
		||||
        NSMapTable *data = [layer data];
 | 
			
		||||
 | 
			
		||||
        names[lind] = [NSMutableArray arrayWithArray:[data allKeys]];
 | 
			
		||||
        [names[lind] sortUsingSelector:@selector(compare:)];
 | 
			
		||||
	[names[lind] retain];
 | 
			
		||||
	
 | 
			
		||||
	values[lind] = [NSMutableArray arrayWithCapacity:[names[lind] count]];
 | 
			
		||||
	[values[lind] retain];
 | 
			
		||||
 | 
			
		||||
        NSMapEnumerator en = [names[lind] objectEnumerator];
 | 
			
		||||
	id key, val;
 | 
			
		||||
        while(NSNextMapEnumeratorPair(&enumerator, (void**)&key, (void**)&val)){
 | 
			
		||||
            id obj = NSMapGet(data, key);
 | 
			
		||||
	    [values[lind] addObject:[VScheme valToString:obj]];
 | 
			
		||||
        }
 | 
			
		||||
                
 | 
			
		||||
        layer = [layer parent];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [pool release];
 | 
			
		||||
 | 
			
		||||
    [self initWithContentRect:winRect
 | 
			
		||||
          styleMask:style
 | 
			
		||||
          backing:NSBackingStoreRetained
 | 
			
		||||
          defer:NO];
 | 
			
		||||
    [self setMinSize:NSMakeSize(WIDTH, HEIGHT)];
 | 
			
		||||
    [self setReleasedWhenClosed:YES];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    NSTableColumn *nameColumn, *valueColumn;
 | 
			
		||||
 | 
			
		||||
    nameColumn = 
 | 
			
		||||
	[(NSTableColumn *)[NSTableColumn alloc] 
 | 
			
		||||
			  initWithIdentifier: @"Name"];
 | 
			
		||||
    [nameColumn setEditable: NO];
 | 
			
		||||
    [[nameColumn headerCell] setStringValue: @"Name"];
 | 
			
		||||
    [nameColumn setMinWidth:WIDTH/2];
 | 
			
		||||
 | 
			
		||||
    valueColumn = 
 | 
			
		||||
	[(NSTableColumn *)[NSTableColumn alloc] 
 | 
			
		||||
			  initWithIdentifier: @"Value"];
 | 
			
		||||
    [valueColumn setEditable: NO];
 | 
			
		||||
    [[valueColumn headerCell] setStringValue: @"Value"];
 | 
			
		||||
    [valueColumn setMinWidth:WIDTH/2];
 | 
			
		||||
 | 
			
		||||
    table = 
 | 
			
		||||
	[[NSTableView alloc] initWithFrame:contentRect];
 | 
			
		||||
    [table addTableColumn:nameColumn]; RELEASE(nameColumn);
 | 
			
		||||
    [table addTableColumn:valueColumn]; RELEASE(valueColumn);
 | 
			
		||||
 | 
			
		||||
    current=length-1;
 | 
			
		||||
    [table setDataSource:self];
 | 
			
		||||
   
 | 
			
		||||
    scrollView = [[NSScrollView alloc] initWithFrame:contentRect];
 | 
			
		||||
    [scrollView setHasHorizontalScroller:YES];
 | 
			
		||||
    [scrollView setHasVerticalScroller:YES]; 
 | 
			
		||||
    [scrollView setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
 | 
			
		||||
    [[scrollView contentView] 
 | 
			
		||||
	setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
 | 
			
		||||
    [[scrollView contentView] setAutoresizesSubviews:YES];
 | 
			
		||||
 | 
			
		||||
    [table setFrameSize:[scrollView contentSize]];
 | 
			
		||||
    [scrollView setDocumentView:table];
 | 
			
		||||
 | 
			
		||||
    [self setContentView:scrollView];
 | 
			
		||||
    // RELEASE(scrollView);
 | 
			
		||||
 | 
			
		||||
    [self setTitle:title];
 | 
			
		||||
    [self display];
 | 
			
		||||
    [self makeKeyAndOrderFront:nil];
 | 
			
		||||
 | 
			
		||||
    return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- up:(id)sender
 | 
			
		||||
{
 | 
			
		||||
    if(!current){
 | 
			
		||||
        NSBeep();
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        current--;
 | 
			
		||||
	[table reloadData];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- down:(id)sender
 | 
			
		||||
{
 | 
			
		||||
    if(current==length-1){
 | 
			
		||||
        NSBeep();
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        current++;
 | 
			
		||||
	[table reloadData];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (int)numberOfRowsInTableView:(NSTableView *)aTableView
 | 
			
		||||
{
 | 
			
		||||
    return [names[current] count];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-            (id)tableView:(NSTableView *)aTableView 
 | 
			
		||||
 objectValueForTableColumn:(NSTableColumn *)aTableColumn 
 | 
			
		||||
                       row:(int)rowIndex
 | 
			
		||||
{
 | 
			
		||||
    if(rowIndex>=[names[current] count]){
 | 
			
		||||
	return nil;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if([[aTableColumn identifier] isEqualToString:@"Name"]){
 | 
			
		||||
	return [names[current] objectAtIndex:rowIndex];
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
	return [values[current] objectAtIndex:rowIndex];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)dealloc
 | 
			
		||||
{
 | 
			
		||||
    int ind;
 | 
			
		||||
 | 
			
		||||
    [table release];
 | 
			
		||||
    [scrollView release];
 | 
			
		||||
    
 | 
			
		||||
    for(ind=0; ind<length; ind++){
 | 
			
		||||
        // NSLog(@"%@ %d %d\n", self, ind, [tables[ind] retainCount]);
 | 
			
		||||
	[names[ind] release];
 | 
			
		||||
	[values[ind] release];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    NSZoneFree([self zone], names);
 | 
			
		||||
    NSZoneFree([self zone], values);
 | 
			
		||||
 | 
			
		||||
    [super dealloc];
 | 
			
		||||
}
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,8 +1,4 @@
 | 
			
		|||
 | 
			
		||||
GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT)
 | 
			
		||||
 | 
			
		||||
GNUSTEP_MAKEFILES = $(GNUSTEP_SYSTEM_ROOT)/Makefiles
 | 
			
		||||
 | 
			
		||||
include $(GNUSTEP_MAKEFILES)/common.make
 | 
			
		||||
 | 
			
		||||
# The application to be compiled
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue