aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/SPAppController.m20
-rw-r--r--Source/SPCopyTable.h2
-rw-r--r--Source/SPCopyTable.m35
-rw-r--r--Source/SPDatabaseDocument.m7
-rw-r--r--Source/SPTextViewAdditions.m4
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];