diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/SPAppController.m | 20 | ||||
-rw-r--r-- | Source/SPCopyTable.h | 2 | ||||
-rw-r--r-- | Source/SPCopyTable.m | 35 | ||||
-rw-r--r-- | Source/SPDatabaseDocument.m | 7 | ||||
-rw-r--r-- | Source/SPTextViewAdditions.m | 4 |
5 files changed, 61 insertions, 7 deletions
diff --git a/Source/SPAppController.m b/Source/SPAppController.m index 9a4e23e6..609593a8 100644 --- a/Source/SPAppController.m +++ b/Source/SPAppController.m @@ -573,17 +573,31 @@ } } + BOOL userTerminated = NO; + while(1) { NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES]; - // if(!event) continue; + + if ([event type] == NSKeyDown) { + unichar key = [[event characters] length] == 1 ? [[event characters] characterAtIndex:0] : 0; + if (([event modifierFlags] & NSCommandKeyMask) && key == '.') { + userTerminated = YES; + break; + } + } [NSApp sendEvent:event]; if(![processDocument isWorking]) break; usleep(1000); } + if(userTerminated) { + NSBeep(); + return; + } + if(processDocument && command && [command isEqualToString:@"passToDoc"]) { NSMutableDictionary *cmdDict = [NSMutableDictionary dictionary]; [cmdDict setObject:parameter forKey:@"parameter"]; @@ -693,8 +707,8 @@ [[NSFileManager defaultManager] removeItemAtPath:bundleInputFilePath error:nil]; - if(err == nil && output && [cmdData objectForKey:SPBundleFileOutputActionKey]) { - if([[cmdData objectForKey:SPBundleFileOutputActionKey] length] + if(err == nil && output) { + if([cmdData objectForKey:SPBundleFileOutputActionKey] && [[cmdData objectForKey:SPBundleFileOutputActionKey] length] && ![[cmdData objectForKey:SPBundleFileOutputActionKey] isEqualToString:SPBundleOutputActionNone]) { NSString *action = [[cmdData objectForKey:SPBundleFileOutputActionKey] lowercaseString]; NSPoint pos = [NSEvent mouseLocation]; diff --git a/Source/SPCopyTable.h b/Source/SPCopyTable.h index d46caf02..89030976 100644 --- a/Source/SPCopyTable.h +++ b/Source/SPCopyTable.h @@ -167,6 +167,8 @@ - (IBAction)executeBundleItemForDataTable:(id)sender; +- (void)selectTableRows:(NSArray*)rowIndices; + @end extern NSInteger MENU_EDIT_COPY; diff --git a/Source/SPCopyTable.m b/Source/SPCopyTable.m index 28fcb476..4de00d00 100644 --- a/Source/SPCopyTable.m +++ b/Source/SPCopyTable.m @@ -802,6 +802,26 @@ NSInteger MENU_EDIT_COPY_AS_SQL = 2003; } +- (void)selectTableRows:(NSArray*)rowIndices +{ + + if(!rowIndices || ![rowIndices count]) return; + + NSMutableIndexSet *selection = [NSMutableIndexSet indexSet]; + NSInteger rows = [[self delegate] numberOfRowsInTableView:self]; + NSUInteger i; + if(rows > 0) { + for(NSString* idx in rowIndices) { + i = [idx longLongValue]; + if(i >= 0 && i < rows) + [selection addIndex:i]; + } + + [self selectRowIndexes:selection byExtendingSelection:NO]; + } + +} + - (IBAction)executeBundleItemForDataTable:(id)sender { NSInteger idx = [sender tag] - 1000000; @@ -857,6 +877,17 @@ NSInteger MENU_EDIT_COPY_AS_SQL = 2003; if([[self delegate] respondsToSelector:@selector(usedQuery)] && [[self delegate] usedQuery]) [env setObject:[[self delegate] usedQuery] forKey:@"SP_USED_QUERY_FOR_TABLE"]; + if([self numberOfSelectedRows]) { + NSMutableArray *sel = [NSMutableArray array]; + NSIndexSet *selectedRows = [self selectedRowIndexes]; + NSUInteger rowIndex = [selectedRows firstIndex]; + while ( rowIndex != NSNotFound ) { + [sel addObject:[NSString stringWithFormat:@"%ld", rowIndex]]; + rowIndex = [selectedRows indexGreaterThanIndex:rowIndex]; + } + [env setObject:[sel componentsJoinedByString:@"\t"] forKey:@"SP_SELECTED_ROW_INDICES"]; + } + NSError *inputFileError = nil; NSString *input = @""; if([inputAction isEqualToString:SPBundleInputSourceSelectedTableRowsAsTab]) { @@ -896,8 +927,8 @@ NSInteger MENU_EDIT_COPY_AS_SQL = 2003; [[NSFileManager defaultManager] removeItemAtPath:bundleInputFilePath error:nil]; - if(err == nil && output && [cmdData objectForKey:SPBundleFileOutputActionKey]) { - if([[cmdData objectForKey:SPBundleFileOutputActionKey] length] + if(err == nil && output) { + if([cmdData objectForKey:SPBundleFileOutputActionKey] && [[cmdData objectForKey:SPBundleFileOutputActionKey] length] && ![[cmdData objectForKey:SPBundleFileOutputActionKey] isEqualToString:SPBundleOutputActionNone]) { NSString *action = [[cmdData objectForKey:SPBundleFileOutputActionKey] lowercaseString]; NSPoint pos = [NSEvent mouseLocation]; diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m index 4626f031..270892f0 100644 --- a/Source/SPDatabaseDocument.m +++ b/Source/SPDatabaseDocument.m @@ -4563,6 +4563,13 @@ return; } + if([command isEqualToString:@"SelectTableRows"]) { + if([params count] > 1 && [[[NSApp mainWindow] firstResponder] respondsToSelector:@selector(selectTableRows:)]) { + [[[NSApp mainWindow] firstResponder] selectTableRows:[params subarrayWithRange:NSMakeRange(1, [params count]-1)]]; + } + return; + } + if([command isEqualToString:@"ReloadContentTable"]) { [tableContentInstance reloadTable:self]; return; diff --git a/Source/SPTextViewAdditions.m b/Source/SPTextViewAdditions.m index 1bc45aad..4afea05f 100644 --- a/Source/SPTextViewAdditions.m +++ b/Source/SPTextViewAdditions.m @@ -607,8 +607,8 @@ [[NSFileManager defaultManager] removeItemAtPath:bundleInputFilePath error:nil]; - if(err == nil && output && [cmdData objectForKey:SPBundleFileOutputActionKey]) { - if([[cmdData objectForKey:SPBundleFileOutputActionKey] length] + if(err == nil && output) { + if([cmdData objectForKey:SPBundleFileOutputActionKey] && [[cmdData objectForKey:SPBundleFileOutputActionKey] length] && ![[cmdData objectForKey:SPBundleFileOutputActionKey] isEqualToString:SPBundleOutputActionNone]) { NSString *action = [[cmdData objectForKey:SPBundleFileOutputActionKey] lowercaseString]; |