diff options
Diffstat (limited to 'Source/SPPreferenceController.m')
-rw-r--r-- | Source/SPPreferenceController.m | 163 |
1 files changed, 150 insertions, 13 deletions
diff --git a/Source/SPPreferenceController.m b/Source/SPPreferenceController.m index 3985681c..4f249723 100644 --- a/Source/SPPreferenceController.m +++ b/Source/SPPreferenceController.m @@ -30,6 +30,7 @@ #import "SPDatabaseDocument.h" #import "SPConnectionController.h" #import "SPColorAdditions.h" +#import "SPColorWellCell.h" @interface SPPreferenceController (PrivateAPI) @@ -103,6 +104,47 @@ if (currentSortItem > -1) { [self _sortFavorites]; } + + + NSTableColumn* column; + SPColorWellCell* colorCell; + + column = [[colorSettingTableView tableColumns] objectAtIndex: 1]; + colorCell = [[[SPColorWellCell alloc] init] autorelease]; + [colorCell setEditable: YES]; + [colorCell setTarget: self]; + [colorCell setAction:@selector(colorClick:)]; + [column setDataCell:colorCell]; + + editorColors = [[NSArray arrayWithObjects: + SPCustomQueryEditorTextColor, + SPCustomQueryEditorBackgroundColor, + SPCustomQueryEditorCaretColor, + SPCustomQueryEditorCommentColor, + SPCustomQueryEditorSQLKeywordColor, + SPCustomQueryEditorNumericColor, + SPCustomQueryEditorQuoteColor, + SPCustomQueryEditorBacktickColor, + SPCustomQueryEditorVariableColor, + SPCustomQueryEditorHighlightQueryColor, + SPCustomQueryEditorSelectionColor, + nil + ] retain]; + editorNameForColors = [[NSArray arrayWithObjects: + NSLocalizedString(@"Text",@"text lable for color table"), + NSLocalizedString(@"Background",@"background lable for color table"), + NSLocalizedString(@"Caret",@"caret lable for color table"), + NSLocalizedString(@"Comment",@"comment lable for color table"), + NSLocalizedString(@"Keyword",@"keyword lable for color table"), + NSLocalizedString(@"Numeric",@"numeric lable for color table"), + NSLocalizedString(@"Quote",@"quote lable for color table"), + NSLocalizedString(@"Backtick Quote",@"backtick quote lable for color table"), + NSLocalizedString(@"Variable",@"variable lable for color table"), + NSLocalizedString(@"Query Background",@"query background lable for color table"), + NSLocalizedString(@"Selection",@"selection lable for color table"), + nil + ] retain]; + } #pragma mark - @@ -646,6 +688,9 @@ // ------------------------------------------------------------------------------- - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { + if(aTableView == colorSettingTableView) + return [editorColors count]; + return [[favoritesController arrangedObjects] count]; } @@ -654,14 +699,23 @@ // ------------------------------------------------------------------------------- - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)rowIndex { - if ([[tableColumn identifier] isEqualToString:@"default"] && (rowIndex == [prefs integerForKey:SPDefaultFavorite])) { - return [NSImage imageNamed:@"blue-tick"]; - } - else { - return [[[favoritesController arrangedObjects] objectAtIndex:rowIndex] objectForKey:[tableColumn identifier]]; + if(tableView == colorSettingTableView) { + if ([[tableColumn identifier] isEqualToString:@"name"]) + return [editorNameForColors objectAtIndex:rowIndex]; + else + return [NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:[editorColors objectAtIndex:rowIndex]]]; + } else { + if ([[tableColumn identifier] isEqualToString:@"default"] && (rowIndex == [prefs integerForKey:SPDefaultFavorite])) { + return [NSImage imageNamed:@"blue-tick"]; + } + else { + return [[[favoritesController arrangedObjects] objectAtIndex:rowIndex] objectForKey:[tableColumn identifier]]; + } } + return nil; } + #pragma mark - #pragma mark TableView drag & drop delegate methods @@ -670,6 +724,9 @@ // ------------------------------------------------------------------------------- - (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rows toPasteboard:(NSPasteboard*)pboard { + + if(aTableView == colorSettingTableView) return; + if ([rows count] == 1) { [pboard declareTypes:[NSArray arrayWithObject:SPFavoritesPasteboardDragType] owner:nil]; [pboard setString:[[NSNumber numberWithInteger:[rows firstIndex]] stringValue] forType:SPFavoritesPasteboardDragType]; @@ -686,6 +743,9 @@ // ------------------------------------------------------------------------------- - (NSDragOperation)tableView:(NSTableView *)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)operation { + + if(tv == colorSettingTableView) return NSDragOperationNone; + NSInteger originalRow; NSArray *pboardTypes = [[info draggingPasteboard] types]; @@ -707,6 +767,9 @@ // ------------------------------------------------------------------------------- - (BOOL)tableView:(NSTableView *)tv acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation { + + if(tv == colorSettingTableView) return NO; + NSInteger originalRow; NSInteger destinationRow; NSInteger lastFavoriteIndexCached; @@ -763,20 +826,66 @@ #pragma mark - #pragma mark TableView delegate methods + +- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex +{ + if(aTableView == colorSettingTableView) { + + NSColorPanel* panel; + + colorRow = rowIndex; + panel = [NSColorPanel sharedColorPanel]; + [panel setTarget:self]; + [panel setAction:@selector(colorChanged:)]; + [panel setColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:[editorColors objectAtIndex:colorRow]]]]; + [colorSettingTableView deselectAll:nil]; + [panel makeKeyAndOrderFront:self]; + + return NO; + + } + return YES; +} + // ------------------------------------------------------------------------------- // tableView:willDisplayCell:forTableColumn:row: // ------------------------------------------------------------------------------- - (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)index { - if ([cell isKindOfClass:[SPFavoriteTextFieldCell class]]) { - [cell setFavoriteName:[[[favoritesController arrangedObjects] objectAtIndex:index] objectForKey:@"name"]]; + + if(tableView == colorSettingTableView && [[tableColumn identifier] isEqualToString:@"name"]) { + if ([cell isKindOfClass:[NSTextFieldCell class]]) { + [cell setDrawsBackground:YES]; + switch(index) { + case 1: + [cell setTextColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorTextColor]]]; + [cell setBackgroundColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorBackgroundColor]]]; + break; + case 9: + [cell setTextColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorTextColor]]]; + [cell setBackgroundColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorHighlightQueryColor]]]; + break; + case 10: + [cell setTextColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorTextColor]]]; + [cell setBackgroundColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorSelectionColor]]]; + break; + default: + [cell setTextColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:[editorColors objectAtIndex:index]]]]; + [cell setBackgroundColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:SPCustomQueryEditorBackgroundColor]]]; + } + } + } else { + + if ([cell isKindOfClass:[SPFavoriteTextFieldCell class]]) { + [cell setFavoriteName:[[[favoritesController arrangedObjects] objectAtIndex:index] objectForKey:@"name"]]; - if ([[[[favoritesController arrangedObjects] objectAtIndex:index] objectForKey:@"type"] integerValue] == SPSocketConnection) { - [cell setFavoriteHost:@"localhost"]; - } - else { - [cell setFavoriteHost:[[[favoritesController arrangedObjects] objectAtIndex:index] objectForKey:@"host"]]; + if ([[[[favoritesController arrangedObjects] objectAtIndex:index] objectForKey:@"type"] integerValue] == SPSocketConnection) { + [cell setFavoriteHost:@"localhost"]; + } + else { + [cell setFavoriteHost:[[[favoritesController arrangedObjects] objectAtIndex:index] objectForKey:@"host"]]; + } } } } @@ -786,8 +895,11 @@ // ------------------------------------------------------------------------------- - (void)tableViewSelectionDidChange:(NSNotification *)notification { + + if([notification object] == colorSettingTableView) return; + if ([[favoritesTableView selectedRowIndexes] count] > 0) { - [favoritesController setSelectionIndexes:[favoritesTableView selectedRowIndexes]]; + [favoritesController setSelectionIndexes:[favoritesTableView selectedRowIndexes]]; } // If no selection is present, blank the password fields (which can't use bindings) @@ -1263,6 +1375,28 @@ [prefs setObject:[NSArchiver archivedDataWithRootObject:[NSColor blackColor]] forKey:SPCustomQueryEditorTextColor]; [prefs setObject:[NSArchiver archivedDataWithRootObject:[NSColor blackColor]] forKey:SPCustomQueryEditorCaretColor]; [prefs setObject:[NSArchiver archivedDataWithRootObject:[NSColor whiteColor]] forKey:SPCustomQueryEditorBackgroundColor]; + [colorSettingTableView reloadData]; +} + +- (void)colorClick:(id)sender +{ + NSColorPanel* panel; + + colorRow = [sender clickedRow]; + panel = [NSColorPanel sharedColorPanel]; + [panel setTarget:self]; + [panel setAction:@selector(colorChanged:)]; + [panel setColor:[NSUnarchiver unarchiveObjectWithData:[prefs dataForKey:[editorColors objectAtIndex:colorRow]]]]; + [colorSettingTableView deselectAll:nil]; + [panel makeKeyAndOrderFront:self]; +} + +- (void)colorChanged:(id)sender +{ + if(![[NSColorPanel sharedColorPanel] isVisible]) return; + [prefs setObject:[NSArchiver archivedDataWithRootObject:[sender color]] forKey:[editorColors objectAtIndex:colorRow]]; + [colorSettingTableView reloadData]; + } // Set font panel's valid modes @@ -1530,6 +1664,7 @@ } [theme release]; + [colorSettingTableView reloadData]; } else { @@ -1555,6 +1690,8 @@ */ - (void)dealloc { + if(editorColors) [editorColors release], editorColors = nil; + if(editorNameForColors) [editorNameForColors release], editorNameForColors = nil; if (keychain) [keychain release], keychain = nil; if (currentFavorite) [currentFavorite release]; |