diff --git a/Cocoa/English.lproj/Localizable.strings b/Cocoa/English.lproj/Localizable.strings index dd8f764..b844bf1 100644 Binary files a/Cocoa/English.lproj/Localizable.strings and b/Cocoa/English.lproj/Localizable.strings differ diff --git a/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/info.nib b/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/info.nib index b0cf457..d14c849 100644 --- a/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/info.nib +++ b/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/info.nib @@ -7,7 +7,7 @@ IBEditorPositions 23 - 412 326 270 342 0 0 1024 746 + 379 326 270 342 0 0 1024 746 IBFramework Version 326.0 diff --git a/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/objects.nib b/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/objects.nib index f5a817d..38eb304 100644 Binary files a/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/objects.nib and b/NuTemplateEditor/English.lproj/NuTemplateWindow.nib/objects.nib differ diff --git a/NuTemplateEditor/Localizable.strings b/NuTemplateEditor/Localizable.strings new file mode 100644 index 0000000..8cc7365 --- /dev/null +++ b/NuTemplateEditor/Localizable.strings @@ -0,0 +1,2 @@ +/* Name we give the "Create New Resource..." menu item: */ +"Create List Entry" = "Create List Entry"; \ No newline at end of file diff --git a/NuTemplateEditor/NuTemplateLSTBElement.m b/NuTemplateEditor/NuTemplateLSTBElement.m index ddb4591..f45df23 100644 --- a/NuTemplateEditor/NuTemplateLSTBElement.m +++ b/NuTemplateEditor/NuTemplateLSTBElement.m @@ -83,5 +83,11 @@ } +-(IBAction) clear: (id)sender +{ + [containing removeObject: self]; + [self autorelease]; +} + @end diff --git a/NuTemplateEditor/NuTemplateWindowController.h b/NuTemplateEditor/NuTemplateWindowController.h index 063bf83..2f9e257 100644 --- a/NuTemplateEditor/NuTemplateWindowController.h +++ b/NuTemplateEditor/NuTemplateWindowController.h @@ -40,6 +40,7 @@ NSMutableArray* templateStructure; // Pre-parsed form of our template. NSMutableArray* resourceStructure; // Parsed form of our resource. id resource; // The resource we operate on. + NSMenuItem* createFieldItem; // "Create Resource" menu item we usurp to create list items. } -(void) readTemplate: (id )tmplRes; @@ -48,6 +49,10 @@ -(void) writeResData; -(IBAction) showCreateResourceSheet: (id)sender; +-(IBAction) cut: (id)sender; +-(IBAction) copy: (id)sender; +-(IBAction) paste: (id)sender; +-(IBAction) clear: (id)sender; @end diff --git a/NuTemplateEditor/NuTemplateWindowController.m b/NuTemplateEditor/NuTemplateWindowController.m index 83495b8..4420707 100644 --- a/NuTemplateEditor/NuTemplateWindowController.m +++ b/NuTemplateEditor/NuTemplateWindowController.m @@ -65,6 +65,7 @@ return self; } + createFieldItem = nil; resource = [newResource retain]; templateStructure = [[NSMutableArray alloc] init]; resourceStructure = [[NSMutableArray alloc] init]; @@ -248,6 +249,42 @@ } +-(IBAction) cut: (id)sender; +{ + NuTemplateElement *selItem = (NuTemplateElement*) [dataList selectedItem]; + + [selItem cut: sender]; // Let selected item do its magic. + + [dataList reloadData]; // Update our display. +} + +-(IBAction) copy: (id)sender; +{ + NuTemplateElement *selItem = (NuTemplateElement*) [dataList selectedItem]; + + [selItem copy: sender]; // Let selected item do its magic. + + [dataList reloadData]; // Update our display. +} + +-(IBAction) paste: (id)sender; +{ + NuTemplateElement *selItem = (NuTemplateElement*) [dataList selectedItem]; + + [selItem paste: sender]; // Let selected item do its magic. + + [dataList reloadData]; // Update our display. +} + +-(IBAction) clear: (id)sender; +{ + NuTemplateElement *selItem = (NuTemplateElement*) [dataList selectedItem]; + + [selItem clear: sender]; // Let selected item do its magic. + + [dataList reloadData]; // Update our display. +} + /* showCreateResourceSheet: we mis-use this menu item for creating new template fields. This works by selecting an item that serves as a template (another LSTB), or knows how to create an item (LSTE) and passing the message on to it. */ @@ -264,14 +301,38 @@ -(BOOL) validateMenuItem: (NSMenuItem*)item { - NuTemplateElement *selItem = (NuTemplateElement*) [dataList selectedItem]; + NuTemplateElement *selElement = (NuTemplateElement*) [dataList selectedItem]; if( [item action] == @selector(showCreateResourceSheet:) ) - return( selItem != nil && [selItem respondsToSelector: @selector(showCreateResourceSheet:)] ); + { + createFieldItem = item; + [item setTitle: NSLocalizedString(@"Create List Entry",@"")]; + + return( selElement != nil && [selElement respondsToSelector: @selector(showCreateResourceSheet:)] ); + } + else if( [item action] == @selector(cut:) ) + return( selElement != nil && [selElement respondsToSelector: @selector(cut:)] ); + else if( [item action] == @selector(copy:) ) + return( selElement != nil && [selElement respondsToSelector: @selector(copy:)] ); + else if( [item action] == @selector(paste:) && selElement != nil + && [selElement respondsToSelector: @selector(validateMenuItem:)] ) + return( [selElement validateMenuItem: item] ); + else if( [item action] == @selector(clear:) ) + return( selElement != nil && [selElement respondsToSelector: @selector(clear:)] ); else return [super validateMenuItem:item]; } +-(void) windowDidResignKey: (NSNotification*)notification +{ + if( createFieldItem ) + { + [createFieldItem setTitle: NSLocalizedString(@"Create New Resource...",@"")]; + createFieldItem = nil; + } +} + + -(BOOL) windowShouldClose: (id)sender // Window delegate. { [self writeResData]; // Save resource. diff --git a/ResKnife.pbproj/project.pbxproj b/ResKnife.pbproj/project.pbxproj index cdbd684..00965de 100644 --- a/ResKnife.pbproj/project.pbxproj +++ b/ResKnife.pbproj/project.pbxproj @@ -258,6 +258,7 @@ 3D0933BF04DF151C00DD74B1, 3D0933EB04DF319F00DD74B1, 3D0B38B504DEF465005AED5E, + 3D2EE5E204E5C56F00515930, ); isa = PBXGroup; path = NuTemplateEditor; @@ -313,6 +314,7 @@ files = ( 3D0B38C204DEF5E5005AED5E, 3D0933F504DFD7CF00DD74B1, + 3D2EE5E304E5C56F00515930, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -461,6 +463,18 @@ settings = { }; }; + 3D2EE5E204E5C56F00515930 = { + fileEncoding = 4; + isa = PBXFileReference; + path = Localizable.strings; + refType = 4; + }; + 3D2EE5E304E5C56F00515930 = { + fileRef = 3D2EE5E204E5C56F00515930; + isa = PBXBuildFile; + settings = { + }; + }; 3D3292F604DC1980008C719F = { fileRef = 3D3B99B104DC15600056861E; isa = PBXBuildFile;