Restrictions applied to resource creation sheet to prevent type/ID clashes occuring.

This commit is contained in:
Nicholas Shanks 2002-02-12 01:24:53 +00:00
parent 25ffdd2023
commit 40c8861964
11 changed files with 45 additions and 48 deletions

View File

@ -1,4 +1,6 @@
#import <Cocoa/Cocoa.h>
#import <Carbon/Carbon.h>
#import "Resource.h"
#import "ResourceDataSource.h"
@interface CreateResourceSheetController : NSWindowController
@ -14,6 +16,8 @@
IBOutlet NSWindow *parent;
}
- (void)controlTextDidChange:(NSNotification *)notification;
- (IBAction)showCreateResourceSheet:(id)sender;
- (IBAction)hideCreateResourceSheet:(id)sender;
- (IBAction)typePopupSelection:(id)sender;

View File

@ -1,8 +1,27 @@
#import "CreateResourceSheetController.h"
#import <Carbon/Carbon.h>
@implementation CreateResourceSheetController
- (void)controlTextDidChange:(NSNotification *)notification
{
BOOL enableButton = NO, clash = NO;
NSString *type = [typeView stringValue];
NSNumber *resID = [NSNumber numberWithInt:[resIDView intValue]];
if( [type length] == 4 && [[resIDView stringValue] length] > 0 )
{
Resource *resource;
NSEnumerator *enumerator = [[dataSource resources] objectEnumerator];
while( resource = [enumerator nextObject] )
{
if( [type isEqualToString:[resource type]] && [resID isEqualToNumber:[resource resID]] )
clash = YES;
}
if( !clash ) enableButton = YES;
}
[createButton setEnabled:enableButton];
}
- (IBAction)showCreateResourceSheet:(id)sender
{
[NSApp beginSheet:[self window] modalForWindow:parent modalDelegate:self didEndSelector:NULL contextInfo:nil];
@ -26,7 +45,8 @@
- (IBAction)typePopupSelection:(id)sender
{
[typeView setStringValue:[typePopup titleOfSelectedItem]];
[typeView selectText:sender];
}
@end

View File

@ -24,5 +24,6 @@
- (NSOutlineView *)outlineView;
- (ResourceDataSource *)dataSource;
- (NSArray *)resources; // return the array as non-mutable
@end

View File

@ -474,4 +474,9 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
return dataSource;
}
- (NSArray *)resources
{
return resources;
}
@end

Binary file not shown.

View File

@ -6,10 +6,6 @@
<string>104 127 480 547 0 0 1024 746 </string>
<key>IBFramework Version</key>
<string>248.0</string>
<key>IBOpenObjects</key>
<array>
<integer>5</integer>
</array>
<key>IBSystem Version</key>
<string>5P48</string>
<key>IBUserGuides</key>

View File

@ -182,6 +182,7 @@
- (NSRange)asciiRangeFromByteRange:(NSRange)byteRange;
{
#warning There's a bug in this somewhere!
// assumes 16 byte wide window
NSRange asciiRange = NSMakeRange(0,0);
@ -191,47 +192,14 @@
return asciiRange;
}
/*
- (void)textViewDidChangeSelection:(NSNotification *)notification;
{
}
- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString;
{
if( textView == hex ) // we're editing in hexadecimal constrain to 0-9, A-F
{
return YES;
}
else return YES; // we're editing in ASCII
}*/
/*
Raphael Sebbe's code
- (void)textViewDidChangeSelection:(NSNotification *)aNotification
{
BOOL shouldUpdate = NO;
id textView = [aNotification object];
if(textView == _hexText)
{
NSRange hexRange = [textView selectedRange];
NSRange byteRange = [HVHexInterpreter byteRangeFromHexRange:hexRange];
_selectedByteRange = byteRange; shouldUpdate = YES;
}
else if(textView == _asciiText)
{
NSRange asciiRange = [textView selectedRange];
NSRange byteRange = [HVHexInterpreter byteRangeFromAsciiRange:asciiRange];
_selectedByteRange = byteRange; shouldUpdate = YES;
}
if(shouldUpdate)
{
[self updateSelectionFeedback];
[self updateSelectionOffsetTF];
[self updateForms];
}
}
*/
- (NSTextView *)hex
{

View File

@ -20,8 +20,8 @@
- (id)initWithResource:(id)newResource;
// normal methods
- (void)resourceDidChange:(NSNotification *)notification;
- (void)viewDidScroll:(NSNotification *)notification;
- (void)resourceDidChange:(NSNotification *)notification;
- (void)refreshData:(NSData *)data;
// accessors

View File

@ -36,6 +36,9 @@ NSString *ResourceChangedNotification = @"ResourceChangedNotification";
{
[super windowDidLoad];
// swap text views to instances of my class instead
// An experianced NeXT programmer told me that poseAsClass would come back to bite me in the ass at some point, and that I should instead instanciate some HexTextViews and swap them in for now, and use IB do do things properly once IB is fixed. But, for now I think I'll not bother :-P
// we don't want this notification until we have a window!
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resourceDidChange:) name:ResourceChangedNotification object:nil];
@ -51,13 +54,6 @@ NSString *ResourceChangedNotification = @"ResourceChangedNotification";
[self showWindow:self];
}
- (void)resourceDidChange:(NSNotification *)notification
{
// see if it's our resource which got changed (we receive notifications for any resource being changed, allowing multi-resource editors)
if( [notification object] == resource )
[self refreshData:[(id <ResKnifeResourceProtocol>)resource data]];
}
- (void)viewDidScroll:(NSNotification *)notification
{
// get object refs for increased speed
@ -97,6 +93,13 @@ NSString *ResourceChangedNotification = @"ResourceChangedNotification";
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDidScroll:) name:NSViewBoundsDidChangeNotification object:asciiClip];
}
- (void)resourceDidChange:(NSNotification *)notification
{
// see if it's our resource which got changed (we receive notifications for any resource being changed, allowing multi-resource editors)
if( [notification object] == resource )
[self refreshData:[(id <ResKnifeResourceProtocol>)resource data]];
}
- (void)refreshData:(NSData *)data;
{
// clear delegates (see HexEditorDelegate class for explanation of why)