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;