aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPBundleEditorController.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPBundleEditorController.m')
-rw-r--r--Source/SPBundleEditorController.m159
1 files changed, 84 insertions, 75 deletions
diff --git a/Source/SPBundleEditorController.m b/Source/SPBundleEditorController.m
index 387bfcf1..8d4d1c65 100644
--- a/Source/SPBundleEditorController.m
+++ b/Source/SPBundleEditorController.m
@@ -40,17 +40,18 @@
#define SP_BUNDLEEDITOR_SPLITVIEW_AUTOSAVE_STRING @"SPBundleEditorSplitView"
-@interface SPBundleEditorController (PrivateAPI)
+@interface SPBundleEditorController ()
- (void)_updateBundleDataView;
+- (void)_updateBundleMetaSummary;
- (id)_currentSelectedObject;
- (id)_currentSelectedNode;
-- (void)_enableBundleDataInput:(BOOL)enabled;
-- (void)_enableMetaDataInput:(BOOL)enabled;
+- (void)_enableBundleDataInput:(BOOL)enabled bundleEnabled:(BOOL)bundleEnabled;
- (void)_initTree;
- (NSUInteger)_arrangedScopeIndexForScopeIndex:(NSUInteger)scopeIndex;
- (NSUInteger)_scopeIndexForArrangedScopeIndex:(NSUInteger)scopeIndex;
- (NSUInteger)_arrangedCategoryIndexForScopeIndex:(NSUInteger)scopeIndex andCategory:(NSString*)category;
+- (void)_metaSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;
@end
@@ -73,12 +74,10 @@
}
return self;
-
}
- (void)dealloc
{
-
[inputGeneralScopePopUpMenu release];
[inputInputFieldScopePopUpMenu release];
[inputDataTableScopePopUpMenu release];
@@ -106,14 +105,13 @@
[shellVariableSuggestions release];
[deletedDefaultBundles release];
- if(touchedBundleArray) [touchedBundleArray release], touchedBundleArray = nil;
- if(commandBundleTree) [commandBundleTree release], commandBundleTree = nil;
- if(sortDescriptor) [sortDescriptor release], sortDescriptor = nil;
- if(bundlePath) [bundlePath release], bundlePath = nil;
+ if (touchedBundleArray) [touchedBundleArray release], touchedBundleArray = nil;
+ if (commandBundleTree) [commandBundleTree release], commandBundleTree = nil;
+ if (sortDescriptor) [sortDescriptor release], sortDescriptor = nil;
+ if (bundlePath) [bundlePath release], bundlePath = nil;
if (esUndoManager) [esUndoManager release], esUndoManager = nil;
[super dealloc];
-
}
- (void)awakeFromNib
@@ -800,14 +798,6 @@
}
/**
- * Show/Hide meta data input fields
- */
-- (IBAction)metaButtonChanged:(id)sender
-{
- [self _enableMetaDataInput:([sender state] == NSOnState) ? YES : NO];
-}
-
-/**
* Read all installed bundles and order front the Bundle Editor
*/
- (IBAction)showWindow:(id)sender
@@ -841,7 +831,21 @@
[sender orderOut:nil];
else if ([sender respondsToSelector:@selector(window)])
[[sender window] orderOut:nil];
+}
+- (IBAction)displayBundleMetaInfo:(id)sender
+{
+ [NSApp beginSheet:metaInfoSheet
+ modalForWindow:[self window]
+ modalDelegate:self
+ didEndSelector:@selector(_metaSheetDidEnd:returnCode:contextInfo:)
+ contextInfo:nil];
+}
+
+- (IBAction)closeSheet:(id)sender
+{
+ [NSApp endSheet:[sender window] returnCode:[sender tag]];
+ [[sender window] orderOut:self];
}
/**
@@ -849,7 +853,6 @@
*/
- (IBAction)saveAndCloseWindow:(id)sender
{
-
// Commit all pending edits
if([commandBundleTreeController commitEditing]) {
@@ -1283,7 +1286,6 @@
*/
- (void)outlineViewSelectionDidChange:(NSNotification *)aNotification
{
-
if([aNotification object] != commandsOutlineView) return;
// Remember selected bundle name to reset the name if the user cancelled
@@ -1291,9 +1293,9 @@
if(oldBundleName) [oldBundleName release], oldBundleName = nil;
if(![[self _currentSelectedObject] objectForKey:kChildrenKey]) {
oldBundleName = [[[self _currentSelectedObject] objectForKey:kBundleNameKey] retain];
- [self _enableBundleDataInput:YES];
+ [self _enableBundleDataInput:YES bundleEnabled:![[[self _currentSelectedObject] objectForKey:@"disabled"] boolValue]];
} else {
- [self _enableBundleDataInput:NO];
+ [self _enableBundleDataInput:NO bundleEnabled:NO];
if(oldBundleName) [oldBundleName release], oldBundleName = nil;
}
@@ -1303,6 +1305,7 @@
[touchedBundleArray addObject:oldBundleName];
[self _updateBundleDataView];
+
[commandTextView setSelectedRange:NSMakeRange(0,0)];
}
@@ -1478,7 +1481,6 @@
[commandBundleTreeController rearrangeObjects];
[commandsOutlineView reloadData];
}
-
}
#pragma mark -
@@ -1489,17 +1491,17 @@
*/
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem
{
-
SEL action = [menuItem action];
- if ( (action == @selector(duplicateCommandBundle:))
- || (action == @selector(revealCommandBundleInFinder:))
- || (action == @selector(saveBundle:))
- || (action == @selector(removeCommandBundle:))
- )
+ if ((action == @selector(duplicateCommandBundle:)) ||
+ (action == @selector(revealCommandBundleInFinder:)) ||
+ (action == @selector(saveBundle:)) ||
+ (action == @selector(removeCommandBundle:)) ||
+ (action == @selector(displayBundleMetaInfo:)))
{
// Allow to record short-cuts used by the Bundle Editor
if([[NSApp mainWindow] firstResponder] == keyEquivalentField) return NO;
+
return ([[commandBundleTreeController selectedObjects] count] == 1 && ![[[commandBundleTreeController selectedObjects] objectAtIndex:0] objectForKey:kChildrenKey]);
}
@@ -1508,7 +1510,6 @@
}
return YES;
-
}
#pragma mark -
@@ -1675,18 +1676,8 @@
doGroupDueToChars = YES;
}
-@end
-
-#pragma mark -
-
-@implementation SPBundleEditorController (PrivateAPI)
-
- (void)_initTree
{
-
- [showHideMetaButton setState:NSOffState];
- [self _enableMetaDataInput:NO];
-
// Re-init commandBundleTree
[[[commandBundleTree objectForKey:kChildrenKey] objectAtIndex:kInputFieldScopeArrayIndex] setObject:[NSMutableArray array] forKey:kChildrenKey];
[[[commandBundleTree objectForKey:kChildrenKey] objectAtIndex:kDataTableScopeArrayIndex] setObject:[NSMutableArray array] forKey:kChildrenKey];
@@ -1814,7 +1805,7 @@
[commandsOutlineView expandItem:[commandsOutlineView itemAtRow:0] expandChildren:NO];
[self _updateBundleDataView];
- [self _enableBundleDataInput:NO];
+ [self _enableBundleDataInput:NO bundleEnabled:NO];
}
/**
@@ -1822,7 +1813,6 @@
*/
- (void)_updateBundleDataView
{
-
NSInteger anIndex;
if([commandsOutlineView selectedRow] < 0) return;
@@ -1963,6 +1953,9 @@
[fallbackLabelField setHidden:YES];
}
+ // Update the bundle summary text
+ [self _updateBundleMetaSummary];
+
// Validate add and remove bundle button in left bar
[removeButton setEnabled:([[commandBundleTreeController selectedObjects] count] == 1 && ![[[commandBundleTreeController selectedObjects] objectAtIndex:0] objectForKey:kChildrenKey])];
[addButton setEnabled:([[commandBundleTreeController selectionIndexPath] length] > 1)];
@@ -1970,6 +1963,29 @@
}
/**
+ * Update the bundle meta summary text
+ */
+- (void)_updateBundleMetaSummary
+{
+ NSDictionary *currentDict = [self _currentSelectedObject];
+ if (!currentDict) {
+ [metaInfoSummary setStringValue:@""];
+ return;
+ }
+
+ NSMutableString *metaString = [[[NSMutableString alloc] init] autorelease];
+ if ([currentDict objectForKey:@"author"]) {
+ [metaString appendFormat:@"(%@) ", [currentDict objectForKey:@"author"]];
+ } else if ([currentDict objectForKey:@"contact"]) {
+ [metaString appendFormat:@"(%@) ", [currentDict objectForKey:@"contact"]];
+ }
+
+ if ([currentDict objectForKey:@"description"]) [metaString appendString:[currentDict objectForKey:@"description"]];
+
+ [metaInfoSummary setStringValue:metaString];
+}
+
+/**
* Return the current selected object as NSDictionary
*/
- (id)_currentSelectedObject
@@ -1990,7 +2006,6 @@
*/
- (NSUInteger)_arrangedScopeIndexForScopeIndex:(NSUInteger)scopeIndex
{
-
NSString *unsortedBundleName = [[[commandBundleTree objectForKey:kChildrenKey] objectAtIndex:scopeIndex] objectForKey:kBundleNameKey];
if(!unsortedBundleName || ![unsortedBundleName length]) return scopeIndex;
@@ -2005,7 +2020,6 @@
}
return k;
-
}
/**
@@ -2013,7 +2027,6 @@
*/
- (NSUInteger)_scopeIndexForArrangedScopeIndex:(NSUInteger)scopeIndex
{
-
NSString *bName = [[[[[[[commandBundleTreeController arrangedObjects] childNodes] objectAtIndex:0] childNodes] objectAtIndex:scopeIndex] representedObject] objectForKey:kBundleNameKey];
NSUInteger k = 0;
for(id i in [commandBundleTree objectForKey:kChildrenKey]) {
@@ -2027,40 +2040,29 @@
/**
* Enable / disable data input
*/
-- (void)_enableBundleDataInput:(BOOL)enabled
-{
- [nameTextField setEnabled:enabled];
- [inputPopupButton setEnabled:enabled];
- [inputFallbackPopupButton setEnabled:enabled];
- [scopePopupButton setEnabled:enabled];
- [commandTextView setEditable:enabled];
- [outputPopupButton setEnabled:enabled];
- [triggerPopupButton setEnabled:enabled];
- [disabledCheckbox setEnabled:enabled];
- [keyEquivalentField setEnabled:enabled];
- [categoryTextField setEnabled:enabled];
- [tooltipTextField setEnabled:enabled];
+- (void)_enableBundleDataInput:(BOOL)enabled bundleEnabled:(BOOL)bundleEnabled
+{
+
+ // Most of the interface requires both a bundle selected and enabled
+ BOOL enableInterface = enabled && bundleEnabled;
+ [nameTextField setEnabled:enableInterface];
+ [inputPopupButton setEnabled:enableInterface];
+ [inputFallbackPopupButton setEnabled:enableInterface];
+ [scopePopupButton setEnabled:enableInterface];
+ [commandTextView setEditable:enableInterface];
+ [outputPopupButton setEnabled:enableInterface];
+ [triggerPopupButton setEnabled:enableInterface];
+ [keyEquivalentField setEnabled:enableInterface];
+ [categoryTextField setEnabled:enableInterface];
+ [tooltipTextField setEnabled:enableInterface];
+
+ // Always leave the meta fields enabled, and the disabled checkbox.
[authorTextField setEnabled:enabled];
[contactTextField setEnabled:enabled];
[descriptionTextView setEditable:enabled];
-}
+ [displayMetaInfoButton setEnabled:enabled];
-/**
- * Enable / disable meta input
- */
-- (void)_enableMetaDataInput:(BOOL)enabled
-{
- [commandTextView setHidden:enabled];
- [disabledCheckbox setHidden:enabled];
- [commandLabelField setHidden:enabled];
- [commandScrollView setHidden:enabled];
- [authorLabelField setHidden:!enabled];
- [contactLabelField setHidden:!enabled];
- [descriptionLabelField setHidden:!enabled];
- [descriptionTextView setHidden:!enabled];
- [authorTextField setHidden:!enabled];
- [contactTextField setHidden:!enabled];
- [descriptionScrollView setHidden:!enabled];
+ [disabledCheckbox setEnabled:enabled];
}
/**
@@ -2117,5 +2119,12 @@
return returnIndex;
}
+- (void)_metaSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
+{
+ [sheet makeFirstResponder:nil];
+
+ [self _updateBundleMetaSummary];
+}
+
@end