From 90002d731b137988e4462374e35220db86731086 Mon Sep 17 00:00:00 2001 From: stuconnolly Date: Thu, 25 Mar 2010 22:16:56 +0000 Subject: Bunch of improvements to the server process list viewer, including: - It is now a separate window like the console to enable monitoring. - It now uses the same window style as the console. - The ability to show or hide the process ID, column. This could possibly be enabled for some of the other columns as well, suggestions? - The ability to enable or disable the use of SHOW FULL PROCESSLIST or just SHOW PROCESSLIST. This implements most of the enhancements requested in issue #607, with the exception of the option to enable auto-refresh, which is still being worked on. --- Interfaces/English.lproj/DatabaseProcessList.xib | 787 +++++++++++++++-------- Source/SPConstants.h | 2 + Source/SPConstants.m | 2 + Source/SPProcessListController.h | 9 +- Source/SPProcessListController.m | 68 +- Source/TableDocument.m | 2 +- 6 files changed, 575 insertions(+), 295 deletions(-) diff --git a/Interfaces/English.lproj/DatabaseProcessList.xib b/Interfaces/English.lproj/DatabaseProcessList.xib index 370da418..74bb98b4 100644 --- a/Interfaces/English.lproj/DatabaseProcessList.xib +++ b/Interfaces/English.lproj/DatabaseProcessList.xib @@ -7,25 +7,15 @@ 1038.25 458.00 - YES - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.brandonwalkin.BWToolkit - - - YES - 740 - 1.2.1 - + com.apple.InterfaceBuilder.CocoaPlugin + 740 YES - + YES - com.brandonwalkin.BWToolkit com.apple.InterfaceBuilder.CocoaPlugin @@ -51,7 +41,7 @@ 15 2 - {{386, 500}, {586, 349}} + {{386, 573}, {575, 203}} 1886912512 Processes NSWindow @@ -78,7 +68,7 @@ 256 - {575, 251} + {575, 130} YES @@ -90,7 +80,7 @@ - 256 + -2147483392 {{576, 0}, {12, 17}} @@ -354,26 +344,25 @@ 16 - 1514176512 + 1514143744 - 1 + 4 15 0 YES 0 - {{1, 17}, {575, 251}} + {{1, 17}, {575, 130}} - 4 - 256 + -2147483392 {{576, 17}, {11, 251}} 256 @@ -400,17 +389,15 @@ {{1, 0}, {575, 17}} - 4 - {{-1, 47}, {588, 269}} + {{-1, 22}, {577, 148}} - - 18 + 530 @@ -418,80 +405,10 @@ QSAAAEEgAABBkAAAQZAAAA - - - 289 - {{477, 13}, {94, 28}} - - YES - - 67239424 - 138018816 - Close - - - -2038284033 - 1 - - Helvetica - 11 - 16 - - - DQ - 200 - 25 - - - - - 260 - {{15, 13}, {111, 28}} - - YES - - -2080244224 - 134348800 - Save As... - - - -2038284033 - 129 - - - 200 - 25 - - - - - 268 - {{9, 324}, {117, 14}} - - YES - - 68288064 - 272761856 - Database Processes - - LucidaGrande-Bold - 11 - 16 - - - - 6 - System - controlColor - - - - - - 265 - {{367, 322}, {208, 19}} + 266 + {{10, 176}, {530, 19}} YES @@ -556,53 +473,192 @@ CAAAAA - + + + -2147482356 + + {{559, 178}, {16, 16}} + + 20746 + 100 + + - -2147483382 - {{128, 324}, {234, 14}} + 290 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{62, 0}, {513, 23}} YES - - 68288064 - 71439360 - 0 of 0 - - - - + + 130560 + 33554432 + + NSImage + button_bar_spacer + + 0 + 1 + 0 + YES + YES - + 289 - {{385, 13}, {94, 28}} + {{446, 2}, {118, 17}} YES - + -2080244224 134348800 - Refresh + Save As... - + -2038284033 - 268435585 + 164 - r + 200 25 - + - -2147482356 - - {{366, 20}, {16, 16}} + 292 + {{30, -1}, {32, 25}} - 20746 - 100 + YES + + -2080244224 + 134217728 + Clear + + LucidaGrande + 13 + 1044 + + + -2042347265 + 163 + + NSImage + button_refresh + + + + 400 + 75 + + + + + 292 + {{-10, 0}, {46, 25}} + + YES + + -2076049856 + 134219776 + + + -2042609409 + 35 + + + 400 + 75 + + + YES + + + 1048576 + 2147483647 + + NSImage + button_action + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + Show Process ID + + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + + + Show FULL Process List + + 2147483647 + 1 + + + _popUpItemAction: + + + + + 2 + YES + 1 + YES + YES + + + + + -2147483358 + {{67, 4}, {374, 14}} + + YES + + 68288064 + 272761856 + 0 of 0 + + + + 6 + System + controlColor + + + + - {586, 349} + {575, 203} {{0, 0}, {1680, 1028}} @@ -618,14 +674,8 @@ Copy 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - + + @@ -634,27 +684,35 @@ 2147483647 - - + + Kill Query 2147483647 - - + + Kill Connection 2147483647 - - + + + + + YES + ProcessListShowProcessID + ProcessListShowFullProcessList + + YES + @@ -667,14 +725,6 @@ 40 - - - closeSheet: - - - - 41 - delegate @@ -707,14 +757,6 @@ 45 - - - refreshProcessList: - - - - 48 - killProcessQuery: @@ -757,59 +799,115 @@ - saveProcessesButton + filterProcessesSearchField - + - 65 + 68 - refreshProcessesButton + refreshProgressIndicator - + - 66 + 70 - - closeProcessListButton + + saveServerProcesses: + + + + 89 + + + + refreshProcessList: - + - 67 + 90 - filterProcessesSearchField + refreshProcessesButton - + - 68 + 91 - refreshProgressIndicator + saveProcessesButton - + - 70 + 92 processesCountTextField - + - 71 + 95 + + + + value: values.ProcessListShowProcessID + + + + + + value: values.ProcessListShowProcessID + value + values.ProcessListShowProcessID + + NSConditionallySetsEnabled + + + 2 + + + 99 - saveServerProcesses: + toggleShowProcessID: - + - 73 + 100 + + + + toggeleShowFullProcessList: + + + + 101 + + + + value: values.ProcessListShowFullProcessList + + + + + + value: values.ProcessListShowFullProcessList + value + values.ProcessListShowFullProcessList + + NSConditionallySetsEnabled + + + 2 + + + 104 @@ -854,26 +952,17 @@ YES - - - - - + + + + + - - 5 - - - YES - - - - 6 @@ -895,48 +984,6 @@ - - 8 - - - YES - - - - - - 9 - - - YES - - - - - - 10 - - - YES - - - - - - 11 - - - - - 12 - - - - - 13 - - - 14 @@ -1001,11 +1048,6 @@ - - 23 - - - 28 @@ -1090,20 +1132,6 @@ - - 46 - - - YES - - - - - - 47 - - - 51 @@ -1142,6 +1170,111 @@ + + 74 + + + YES + + + + + + 75 + + + YES + + + + + + 76 + + + YES + + + + + + 77 + + + YES + + + + + + 78 + + + YES + + + + + + + + 79 + + + + + 82 + + + + + 84 + + + + + 85 + + + + + 86 + + + + + 87 + + + YES + + + + + + 88 + + + + + 93 + + + YES + + + + + + 94 + + + + + 96 + + + @@ -1149,11 +1282,6 @@ YES -3.IBPluginDependency - 10.IBPluginDependency - 10.ImportedFromIB2 - 11.IBPluginDependency - 12.IBPluginDependency - 13.IBPluginDependency 14.IBPluginDependency 14.IBShouldRemoveOnLegacySave 15.IBPluginDependency @@ -1171,7 +1299,6 @@ 21.IBPluginDependency 21.IBShouldRemoveOnLegacySave 22.IBPluginDependency - 23.IBPluginDependency 28.IBPluginDependency 29.IBPluginDependency 3.IBEditorWindowLastContentRect @@ -1195,9 +1322,6 @@ 39.IBPluginDependency 4.IBPluginDependency 4.ImportedFromIB2 - 46.IBPluginDependency - 47.IBPluginDependency - 5.IBPluginDependency 51.IBEditorWindowLastContentRect 51.IBPluginDependency 55.IBPluginDependency @@ -1208,8 +1332,21 @@ 69.IBPluginDependency 7.IBPluginDependency 7.ImportedFromIB2 - 8.IBPluginDependency - 9.IBPluginDependency + 75.IBAttributePlaceholdersKey + 75.IBPluginDependency + 76.IBPluginDependency + 77.IBPluginDependency + 78.IBEditorWindowLastContentRect + 78.IBPluginDependency + 79.IBPluginDependency + 82.IBPluginDependency + 84.IBAttributePlaceholdersKey + 84.IBPluginDependency + 85.IBPluginDependency + 87.IBPluginDependency + 88.IBPluginDependency + 93.IBPluginDependency + 94.IBPluginDependency YES @@ -1217,11 +1354,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.brandonwalkin.BWToolkit - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1238,10 +1370,9 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {{541, 371}, {575, 203}} com.apple.InterfaceBuilder.CocoaPlugin - {{402, 386}, {586, 349}} - com.apple.InterfaceBuilder.CocoaPlugin - {{402, 386}, {586, 349}} + {{541, 371}, {575, 203}} {{321, 508}, {411, 341}} @@ -1260,20 +1391,44 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {{523, 251}, {155, 73}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{523, 251}, {155, 73}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + + ToolTip + + ToolTip + + Clear Console + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{458, 293}, {223, 68}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Duplicate the selected table + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.brandonwalkin.BWToolkit com.apple.InterfaceBuilder.CocoaPlugin @@ -1293,7 +1448,7 @@ - 73 + 104 @@ -1333,6 +1488,13 @@ Source/SPContentFilterManager.h + + NSObject + + IBProjectSource + Source/SPMainThreadTrampoline.h + + NSObject @@ -1372,12 +1534,13 @@ YES YES - closeSheet: copy: killProcessConnection: killProcessQuery: refreshProcessList: saveServerProcesses: + toggeleShowFullProcessList: + toggleShowProcessID: YES @@ -1387,13 +1550,13 @@ id id id + id YES YES - closeProcessListButton filterProcessesSearchField processListTableView processesCountTextField @@ -1403,7 +1566,6 @@ YES - NSButton NSSearchField NSTableView NSTextField @@ -1471,6 +1633,13 @@ AppKit.framework/Headers/NSUserInterfaceItemSearching.h + + NSApplication + + IBFrameworkSource + BWToolkitFramework.framework/Headers/NSApplication+BWAdditions.h + + NSButton NSControl @@ -1503,6 +1672,14 @@ AppKit.framework/Headers/NSControl.h + + NSController + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSController.h + + NSFormatter NSObject @@ -1511,6 +1688,22 @@ Foundation.framework/Headers/NSFormatter.h + + NSImageCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSImageCell.h + + + + NSImageView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSImageView.h + + NSMenu NSObject @@ -1527,6 +1720,14 @@ AppKit.framework/Headers/NSMenuItem.h + + NSMenuItemCell + NSButtonCell + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItemCell.h + + NSObject @@ -1862,6 +2063,22 @@ WebKit.framework/Headers/WebUIDelegate.h + + NSPopUpButton + NSButton + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButton.h + + + + NSPopUpButtonCell + NSMenuItemCell + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButtonCell.h + + NSProgressIndicator NSView @@ -1954,6 +2171,14 @@ AppKit.framework/Headers/NSTextFieldCell.h + + NSUserDefaultsController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSUserDefaultsController.h + + NSView @@ -1977,6 +2202,13 @@ NSResponder + + NSView + + IBFrameworkSource + BWToolkitFramework.framework/Headers/NSView+BWAdditions.h + + NSWindow @@ -1999,6 +2231,13 @@ AppKit.framework/Headers/NSWindowScripting.h + + NSWindow + + IBFrameworkSource + BWToolkitFramework.framework/Headers/NSWindow+BWAdditions.h + + NSWindowController NSResponder diff --git a/Source/SPConstants.h b/Source/SPConstants.h index aabef38e..54bce4d1 100644 --- a/Source/SPConstants.h +++ b/Source/SPConstants.h @@ -198,6 +198,8 @@ extern NSString *SPConsoleShowHelps; extern NSString *SPEditInSheetEnabled; extern NSString *SPTableInformationPanelCollapsed; extern NSString *SPTableColumnWidths; +extern NSString *SPProcessListShowProcessID; +extern NSString *SPProcessListShowFullProcessList; // Hidden Prefs extern NSString *SPPrintWarningRowLimit; diff --git a/Source/SPConstants.m b/Source/SPConstants.m index 35b0a173..f0df9dac 100644 --- a/Source/SPConstants.m +++ b/Source/SPConstants.m @@ -128,6 +128,8 @@ NSString *SPConsoleShowConnections = @"ConsoleShowConnections"; NSString *SPEditInSheetEnabled = @"EditInSheetEnabled"; NSString *SPTableInformationPanelCollapsed = @"TableInformationPanelCollapsed"; NSString *SPTableColumnWidths = @"tableColumnWidths"; +NSString *SPProcessListShowProcessID = @"ProcessListShowProcessID"; +NSString *SPProcessListShowFullProcessList = @"ProcessListShowFullProcessList"; // Hidden Prefs NSString *SPPrintWarningRowLimit = @"PrintWarningRowLimit"; diff --git a/Source/SPProcessListController.h b/Source/SPProcessListController.h index 3e93f117..7832ec65 100644 --- a/Source/SPProcessListController.h +++ b/Source/SPProcessListController.h @@ -31,13 +31,15 @@ { MCPConnection *connection; + BOOL showFullProcessList; + + NSUserDefaults *prefs; NSMutableArray *processes, *processesFiltered; IBOutlet NSTableView *processListTableView; IBOutlet NSTextField *processesCountTextField; IBOutlet NSSearchField *filterProcessesSearchField; IBOutlet NSProgressIndicator *refreshProgressIndicator; - IBOutlet NSButton *closeProcessListButton; IBOutlet NSButton *saveProcessesButton; IBOutlet NSButton *refreshProcessesButton; } @@ -45,12 +47,13 @@ @property (readwrite, assign) MCPConnection *connection; - (IBAction)copy:(id)sender; -- (IBAction)closeSheet:(id)sender; - (IBAction)refreshProcessList:(id)sender; - (IBAction)saveServerProcesses:(id)sender; - (IBAction)killProcessQuery:(id)sender; - (IBAction)killProcessConnection:(id)sender; +- (IBAction)toggleShowProcessID:(id)sender; +- (IBAction)toggeleShowFullProcessList:(id)sender; -- (void)displayProcessListSheetAttachedToWindow:(NSWindow *)window; +- (void)displayProcessListWindow; @end diff --git a/Source/SPProcessListController.m b/Source/SPProcessListController.m index d655e776..81d66f0e 100644 --- a/Source/SPProcessListController.m +++ b/Source/SPProcessListController.m @@ -31,6 +31,8 @@ #import "SPConstants.h" #import "SPAlertSheets.h" +#define TABLEVIEW_ID_COLUMN_IDENTIFIER @"Id" + @interface SPProcessListController (PrivateAPI) - (void)_getDatabaseProcessList; @@ -51,6 +53,11 @@ { if ((self = [super initWithWindowNibName:@"DatabaseProcessList"])) { processes = [[NSMutableArray alloc] init]; + + prefs = [NSUserDefaults standardUserDefaults]; + + // Default the process list comment to SHOW FULL PROCESSLIST + showFullProcessList = [prefs boolForKey:SPProcessListShowFullProcessList]; } return self; @@ -60,8 +67,13 @@ * Interface initialisation */ - (void)awakeFromNib -{ - NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; +{ + [[self window] setTitle:[NSString stringWithFormat:@"%@ %@", [[[NSDocumentController sharedDocumentController] currentDocument] name], NSLocalizedString(@"Server Processes", @"server processes window title")]]; + + [self setWindowFrameAutosaveName:@"ProcessList"]; + + // Show/hide table columns + [[processListTableView tableColumnWithIdentifier:TABLEVIEW_ID_COLUMN_IDENTIFIER] setHidden:![prefs boolForKey:SPProcessListShowProcessID]]; // Set the process table view's vertical gridlines if required [processListTableView setGridStyleMask:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; @@ -128,15 +140,14 @@ /** * Close the process list sheet. */ -- (IBAction)closeSheet:(id)sender +- (void)close { - [NSApp endSheet:[self window] returnCode:[sender tag]]; - [[self window] orderOut:self]; - // If the filtered array is allocated and it's not a reference to the processes array get rid of it if ((processesFiltered) && (processesFiltered != processes)) { [processesFiltered release], processesFiltered = nil; - } + } + + [super close]; } /** @@ -150,7 +161,6 @@ // Disable controls [refreshProcessesButton setEnabled:NO]; - [closeProcessListButton setEnabled:NO]; [saveProcessesButton setEnabled:NO]; [filterProcessesSearchField setEnabled:NO]; @@ -166,7 +176,6 @@ // Enable controls [filterProcessesSearchField setEnabled:YES]; [saveProcessesButton setEnabled:YES]; - [closeProcessListButton setEnabled:YES]; [refreshProcessesButton setEnabled:YES]; // Stop progress Indicator @@ -244,13 +253,31 @@ [alert beginSheetModalForWindow:[self window] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:SPKillProcessConnectionMode]; } +/** + * + */ +- (IBAction)toggleShowProcessID:(id)sender +{ + [[processListTableView tableColumnWithIdentifier:TABLEVIEW_ID_COLUMN_IDENTIFIER] setHidden:([sender state])]; +} + +/** + * + */ +- (IBAction)toggeleShowFullProcessList:(id)sender +{ + showFullProcessList = (!showFullProcessList); + + [self refreshProcessList:self]; +} + #pragma mark - #pragma mark Other methods /** * Displays the process list sheet attached to the supplied window. */ -- (void)displayProcessListSheetAttachedToWindow:(NSWindow *)window +- (void)displayProcessListWindow { // Weak reference processesFiltered = processes; @@ -266,8 +293,7 @@ [self _updateServerProcessesFilterForFilterString:[filterProcessesSearchField stringValue]]; } - // Open the sheet - [NSApp beginSheet:[self window] modalForWindow:window modalDelegate:self didEndSelector:nil contextInfo:nil]; + [self showWindow:self]; } /** @@ -275,7 +301,6 @@ */ - (void)sheetDidEnd:(id)sheet returnCode:(NSInteger)returnCode contextInfo:(NSString *)contextInfo { - // Order out current sheet to suppress overlapping of sheets if ([sheet respondsToSelector:@selector(orderOut:)]) [sheet orderOut:nil]; @@ -342,6 +367,14 @@ return YES; } +/** + * NSWindow autosave name + */ +- (NSString *)windowFrameAutosaveName +{ + return @"ProcessList"; +} + /** * This method is called as part of Key Value Observing which is used to watch for prefernce changes which effect the interface. */ @@ -383,7 +416,7 @@ { id object = [[processesFiltered objectAtIndex:row] valueForKey:[tableColumn identifier]]; - return (![object isNSNull]) ? object : @"NULL"; + return (![object isNSNull]) ? object : [prefs stringForKey:SPNullValue]; } #pragma mark - @@ -408,7 +441,7 @@ */ - (void)dealloc { - [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:SPUseMonospacedFonts]; + [prefs removeObserver:self forKeyPath:SPUseMonospacedFonts]; [processes release], processes = nil; @@ -427,7 +460,8 @@ NSUInteger i = 0; // Get processes - MCPResult *processList = [connection queryString:@"SHOW PROCESSLIST"]; + MCPResult *processList = [connection queryString:(showFullProcessList) ? @"SHOW FULL PROCESSLIST" : @"SHOW PROCESSLIST"]; + [processList setReturnDataAsStrings:YES]; if ([processList numOfRows]) [processList dataSeek:0]; @@ -524,7 +558,7 @@ [processListTableView reloadData]; - [processesCountTextField setStringValue:[NSString stringWithFormat:NSLocalizedString(@"%lu of %lu", "filtered item count"), (unsigned long)[processesFiltered count], (unsigned long)[processes count]]]; + [processesCountTextField setStringValue:[NSString stringWithFormat:NSLocalizedString(@"Showing %lu of %lu processes", "filtered item count"), (unsigned long)[processesFiltered count], (unsigned long)[processes count]]]; [processesCountTextField setHidden:NO]; if ([processesFiltered count] == 0) return; diff --git a/Source/TableDocument.m b/Source/TableDocument.m index e764a44f..163f6d8b 100644 --- a/Source/TableDocument.m +++ b/Source/TableDocument.m @@ -976,7 +976,7 @@ [prefs addObserver:processListController forKeyPath:SPDisplayTableViewVerticalGridlines options:NSKeyValueObservingOptionNew context:NULL]; } - [processListController displayProcessListSheetAttachedToWindow:tableWindow]; + [processListController displayProcessListWindow]; } /** -- cgit v1.2.3