From 2b1111d26762ad18f2b758872e774335ac314d7c Mon Sep 17 00:00:00 2001 From: Bibiko Date: Mon, 25 May 2009 19:33:23 +0000 Subject: =?UTF-8?q?=E2=80=A2=20improved=20narrow-down=20completion=20-=20f?= =?UTF-8?q?irst=20trial=20to=20use=20images=20for=20suggestions=20(up=20to?= =?UTF-8?q?=20now=20supported:=20=20tables/views,=20funcs,=20procs,=20dbs,?= =?UTF-8?q?=20otherwise=20show=20a=20transparent=20dummy)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Resources/Images/database-small.png | Bin 0 -> 718 bytes Resources/Images/dummy-small.png | Bin 0 -> 136 bytes Resources/Images/table-small-square.tiff | Bin 0 -> 4546 bytes Source/CMTextView.h | 1 + Source/CMTextView.m | 65 ++++++++++++++++++++++++------- sequel-pro.xcodeproj/project.pbxproj | 12 ++++++ 6 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 Resources/Images/database-small.png create mode 100644 Resources/Images/dummy-small.png create mode 100644 Resources/Images/table-small-square.tiff diff --git a/Resources/Images/database-small.png b/Resources/Images/database-small.png new file mode 100644 index 00000000..ca40549e Binary files /dev/null and b/Resources/Images/database-small.png differ diff --git a/Resources/Images/dummy-small.png b/Resources/Images/dummy-small.png new file mode 100644 index 00000000..eaebd4a5 Binary files /dev/null and b/Resources/Images/dummy-small.png differ diff --git a/Resources/Images/table-small-square.tiff b/Resources/Images/table-small-square.tiff new file mode 100644 index 00000000..762977ae Binary files /dev/null and b/Resources/Images/table-small-square.tiff differ diff --git a/Source/CMTextView.h b/Source/CMTextView.h index 0ada18ed..152ddbc9 100644 --- a/Source/CMTextView.h +++ b/Source/CMTextView.h @@ -62,6 +62,7 @@ - (BOOL) shiftSelectionLeft; - (NSArray *) completionsForPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int *)index; - (NSArray *) keywords; +- (NSArray *) functions; - (void) setAutoindent:(BOOL)enableAutoindent; - (BOOL) autoindent; - (void) setAutoindentIgnoresEnter:(BOOL)enableAutoindentIgnoresEnter; diff --git a/Source/CMTextView.m b/Source/CMTextView.m index c147678a..9b5fb9aa 100644 --- a/Source/CMTextView.m +++ b/Source/CMTextView.m @@ -138,13 +138,17 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) [queryResult dataSeek:0]; for (i = 0 ; i < [queryResult numOfRows] ; i++) { - [possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:0]]; + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:[[queryResult fetchRowAsArray] objectAtIndex:0], @"display", @"table-small-square", @"image", nil]]; + //[possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:0]]; } // Add field names to completions list for currently selected table if ([[[self window] delegate] table] != nil) { id columnNames = [[[[self window] delegate] valueForKeyPath:@"tableDataInstance"] valueForKey:@"columnNames"]; - [possibleCompletions addObjectsFromArray:columnNames]; + // [possibleCompletions addObjectsFromArray:columnNames]; + NSString *s; + enumerate(columnNames, s) + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:s, @"display", @"dummy-small", @"image", nil]]; } // Add all database names to completions list @@ -153,7 +157,8 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) [queryResult dataSeek:0]; for (i = 0 ; i < [queryResult numOfRows] ; i++) { - [possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:0]]; + // [possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:0]]; + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:[[queryResult fetchRowAsArray] objectAtIndex:0], @"display", @"database-small", @"image", nil]]; } // Add proc/func only for MySQL version 5 or higher @@ -164,7 +169,8 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) [queryResult dataSeek:0]; for (i = 0 ; i < [queryResult numOfRows] ; i++) { - [possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:1]]; + // [possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:1]]; + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:[[queryResult fetchRowAsArray] objectAtIndex:1], @"display", @"proc-small", @"image", nil]]; } // Add all function to completions list for currently selected table @@ -173,7 +179,8 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) [queryResult dataSeek:0]; for (i = 0 ; i < [queryResult numOfRows] ; i++) { - [possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:1]]; + // [possibleCompletions addObject:[[queryResult fetchRowAsArray] objectAtIndex:1]]; + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:[[queryResult fetchRowAsArray] objectAtIndex:1], @"display", @"func-small", @"image", nil]]; } } @@ -192,19 +199,39 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) enumerate(textViewWords, s) if(![uniqueArray containsObject:s]) [uniqueArray addObject:s]; - + + // Remove current word from list + [uniqueArray removeObject:currentWord]; + int reverseSort = NO; NSArray *sortedArray = [[[uniqueArray mutableCopy] autorelease] sortedArrayUsingFunction:alphabeticSort context:&reverseSort]; - [possibleCompletions addObjectsFromArray:sortedArray]; + // [possibleCompletions addObjectsFromArray:sortedArray]; + NSString *w; + enumerate(sortedArray, w) + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:w, @"display", @"dummy-small", @"image", nil]]; + + + // Remove the current word + // [possibleCompletions removeObject:currentWord]; } } // Add predefined keywords - if(!isDictMode) - [possibleCompletions addObjectsFromArray:[self keywords]]; - - // Remove the current word - [possibleCompletions removeObject:currentWord]; + if(!isDictMode) { + // [possibleCompletions addObjectsFromArray:[self keywords]]; + NSString *s; + enumerate([self keywords], s) + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:s, @"display", @"dummy-small", @"image", nil]]; + } + + + // Add predefined functions + if(!isDictMode) { + // [possibleCompletions addObjectsFromArray:[self functions]]; + NSString *s; + enumerate([self functions], s) + [possibleCompletions addObject:[NSDictionary dictionaryWithObjectsAndKeys:s, @"display", @"func-small", @"image", nil]]; + } // Build array of dictionaries as e.g.: // [NSDictionary dictionaryWithObjectsAndKeys:@"foo", @"display", @"`foo`", @"insert", @"func-small", @"image", nil] @@ -212,7 +239,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) enumerate(possibleCompletions, candidate) { if(![compl containsObject:candidate]) - [compl addObject:[NSDictionary dictionaryWithObjectsAndKeys:candidate, @"display", nil]]; + [compl addObject:candidate]; } [possibleCompletions release]; @@ -1646,8 +1673,16 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) @"YEAR_MONTH", @"ZEROFILL", - //functions - + nil]; +} + +/* + * List of fucntions for autocompletion. If you add a keyword here, + * it should also be added to the flex file SPEditorTokens.l + */ +-(NSArray *)functions +{ + return [NSArray arrayWithObjects: @"ABS", @"ACOS", @"ADDDATE", diff --git a/sequel-pro.xcodeproj/project.pbxproj b/sequel-pro.xcodeproj/project.pbxproj index b3fdbe31..d90f4a2c 100644 --- a/sequel-pro.xcodeproj/project.pbxproj +++ b/sequel-pro.xcodeproj/project.pbxproj @@ -131,7 +131,10 @@ B5E92F400F75B32100012500 /* toolbar-export-xml.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B5E92F3A0F75B32100012500 /* toolbar-export-xml.tiff */; }; B5EAC0FD0EC87FF900CC579C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5EAC0FC0EC87FF900CC579C /* Security.framework */; }; B5F4F7810F7BCF990059AE84 /* toolbar-switch-to-procedures.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B5F4F7800F7BCF990059AE84 /* toolbar-switch-to-procedures.tiff */; }; + BC26D7A90FCB28F900A4F918 /* dummy-small.png in Resources */ = {isa = PBXBuildFile; fileRef = BC26D7A80FCB28F900A4F918 /* dummy-small.png */; }; BC2C8E220FA8C2DB008468C7 /* sequel-pro-mysql-help-template.html in Resources */ = {isa = PBXBuildFile; fileRef = BC2C8E210FA8C2DB008468C7 /* sequel-pro-mysql-help-template.html */; }; + BC6B05A80FCB26A500AC02A6 /* database-small.png in Resources */ = {isa = PBXBuildFile; fileRef = BC6B05A70FCB26A500AC02A6 /* database-small.png */; }; + BCA509480FCB25F200D3879C /* table-small-square.tiff in Resources */ = {isa = PBXBuildFile; fileRef = BCA509450FCB25F200D3879C /* table-small-square.tiff */; }; BCB151910FC9542B00977C87 /* SPNarrowDownCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB151900FC9542B00977C87 /* SPNarrowDownCompletion.m */; }; BCD0AD490FBBFC340066EA5C /* SPSQLTokenizer.l in Sources */ = {isa = PBXBuildFile; fileRef = BCD0AD480FBBFC340066EA5C /* SPSQLTokenizer.l */; }; /* End PBXBuildFile section */ @@ -359,7 +362,10 @@ B5E92F3A0F75B32100012500 /* toolbar-export-xml.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "toolbar-export-xml.tiff"; sourceTree = ""; }; B5EAC0FC0EC87FF900CC579C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; B5F4F7800F7BCF990059AE84 /* toolbar-switch-to-procedures.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "toolbar-switch-to-procedures.tiff"; sourceTree = ""; }; + BC26D7A80FCB28F900A4F918 /* dummy-small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "dummy-small.png"; sourceTree = ""; }; BC2C8E210FA8C2DB008468C7 /* sequel-pro-mysql-help-template.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "sequel-pro-mysql-help-template.html"; sourceTree = ""; }; + BC6B05A70FCB26A500AC02A6 /* database-small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "database-small.png"; sourceTree = ""; }; + BCA509450FCB25F200D3879C /* table-small-square.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-small-square.tiff"; sourceTree = ""; }; BCB1518F0FC9542B00977C87 /* SPNarrowDownCompletion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPNarrowDownCompletion.h; sourceTree = ""; }; BCB151900FC9542B00977C87 /* SPNarrowDownCompletion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPNarrowDownCompletion.m; sourceTree = ""; }; BCD0AD480FBBFC340066EA5C /* SPSQLTokenizer.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = SPSQLTokenizer.l; sourceTree = ""; }; @@ -645,6 +651,9 @@ 17E6418B0EF01FF7001BC333 /* Images */ = { isa = PBXGroup; children = ( + BC26D7A80FCB28F900A4F918 /* dummy-small.png */, + BC6B05A70FCB26A500AC02A6 /* database-small.png */, + BCA509450FCB25F200D3879C /* table-small-square.tiff */, 384582C60FB9603600DDACB6 /* proc-small.png */, 384582C30FB95FF800DDACB6 /* func-small.png */, 17E6418C0EF02036001BC333 /* appicon.icns */, @@ -952,6 +961,9 @@ B5D93ABB0FC5121300710017 /* toolbar-preferences-network.tiff in Resources */, B5D93ABC0FC5121300710017 /* toolbar-preferences-queryeditor.tiff in Resources */, B5D93ABD0FC5121300710017 /* toolbar-preferences-shortcuts.png in Resources */, + BCA509480FCB25F200D3879C /* table-small-square.tiff in Resources */, + BC6B05A80FCB26A500AC02A6 /* database-small.png in Resources */, + BC26D7A90FCB28F900A4F918 /* dummy-small.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; -- cgit v1.2.3