diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/SPCopyTable.m | 4 | ||||
-rw-r--r-- | Source/SPCustomQuery.m | 28 | ||||
-rw-r--r-- | Source/SPGeometryDataView.h | 33 | ||||
-rw-r--r-- | Source/SPGeometryDataView.m | 50 | ||||
-rw-r--r-- | Source/SPTableContent.m | 31 |
5 files changed, 126 insertions, 20 deletions
diff --git a/Source/SPCopyTable.m b/Source/SPCopyTable.m index 9d014839..736052dc 100644 --- a/Source/SPCopyTable.m +++ b/Source/SPCopyTable.m @@ -669,9 +669,9 @@ NSInteger MENU_EDIT_COPY_AS_SQL = 2003; // Retrieve the cell's content contentString = [tableStorage cellDataAtRow:i column:columnIndex]; - // TODO it's temporarily + // Get WKT string out of the MCPGeometryData for calculation if ([contentString isKindOfClass:[MCPGeometryData class]]) - contentString = [contentString description]; + contentString = [contentString wktString]; // Replace NULLs with their placeholder string else if ([contentString isNSNull]) { diff --git a/Source/SPCustomQuery.m b/Source/SPCustomQuery.m index 5184edf7..74505e23 100644 --- a/Source/SPCustomQuery.m +++ b/Source/SPCustomQuery.m @@ -2193,16 +2193,25 @@ NSPoint pos = [NSEvent mouseLocation]; pos.y -= 20; - // Try to get the original data. If not possible return nil. - // @try clause is used due to the multifarious cases of - // possible exceptions (eg for reloading tables etc.) - id theValue; - @try{ + id theValue = nil; + + // While the table is being loaded, additional validation is required - data + // locks must be used to avoid crashes, and indexes higher than the available + // rows or columns may be requested. Return "..." to indicate loading in these + // cases. + if (isWorking) { + pthread_mutex_lock(&resultDataLock); + if (row < resultDataCount && [[aTableColumn identifier] integerValue] < [resultData columnCount]) { + theValue = [[SPDataStorageObjectAtRowAndColumn(resultData, row, [[aTableColumn identifier] integerValue]) copy] autorelease]; + } + pthread_mutex_unlock(&resultDataLock); + + if (!theValue) theValue = @"..."; + } else { theValue = SPDataStorageObjectAtRowAndColumn(resultData, row, [[aTableColumn identifier] integerValue]); } - @catch(id ae) { - return nil; - } + + if(theValue == nil) return nil; // Get the original data for trying to display the blob data as an image if ([theValue isKindOfClass:[NSData class]]) { @@ -2212,6 +2221,9 @@ return nil; } } + else if ([theValue isKindOfClass:[MCPGeometryData class]]) { + ; // TODO + } // Show the cell string value as tooltip (including line breaks and tabs) // by using the cell's font diff --git a/Source/SPGeometryDataView.h b/Source/SPGeometryDataView.h new file mode 100644 index 00000000..a2a620bb --- /dev/null +++ b/Source/SPGeometryDataView.h @@ -0,0 +1,33 @@ +// +// $Id$ +// +// SPGeometryDataView.m +// sequel-pro +// +// Created by Hans-Jörg Bibiko on October 08, 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// More info at <http://code.google.com/p/sequel-pro/> + +#import <Cocoa/Cocoa.h> + + +@interface SPGeometryDataView : NSView +{ + +} + +@end diff --git a/Source/SPGeometryDataView.m b/Source/SPGeometryDataView.m new file mode 100644 index 00000000..8cfaf767 --- /dev/null +++ b/Source/SPGeometryDataView.m @@ -0,0 +1,50 @@ +// +// $Id$ +// +// SPGeometryDataView.h +// sequel-pro +// +// Created by Hans-Jörg Bibiko on October 08, 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// More info at <http://code.google.com/p/sequel-pro/> + +#import "SPGeometryDataView.h" + + +@implementation SPGeometryDataView + +/** + * Initialize SPGeometryDataView object + */ +- (id)initWithFrame:(NSRect)frame +{ + if ( self = [super initWithFrame:frame] ) + { + ; + } + return self; +} + +/** + * dealloc + */ +- (void)dealloc +{ + [super dealloc]; +} + +@end diff --git a/Source/SPTableContent.m b/Source/SPTableContent.m index a69ad5e2..50ce0617 100644 --- a/Source/SPTableContent.m +++ b/Source/SPTableContent.m @@ -3321,18 +3321,26 @@ NSPoint pos = [NSEvent mouseLocation]; pos.y -= 20; - // Try to get the original data. If not possible return nil. - // @try clause is used due to the multifarious cases of - // possible exceptions (eg for reloading tables etc.) - id theValue; - @try{ - theValue = [tableValues cellDataAtRow:row column:[[aTableColumn identifier] integerValue]]; - } - @catch(id ae) { - return nil; + id theValue = nil; + + // While the table is being loaded, additional validation is required - data + // locks must be used to avoid crashes, and indexes higher than the available + // rows or columns may be requested. Return "..." to indicate loading in these + // cases. + if (isWorking) { + pthread_mutex_lock(&tableValuesLock); + if (row < tableRowsCount && [[aTableColumn identifier] integerValue] < [tableValues columnCount]) { + theValue = [[SPDataStorageObjectAtRowAndColumn(tableValues, row, [[aTableColumn identifier] integerValue]) copy] autorelease]; + } + pthread_mutex_unlock(&tableValuesLock); + + if (!theValue) theValue = @"..."; + } else { + theValue = SPDataStorageObjectAtRowAndColumn(tableValues, row, [[aTableColumn identifier] integerValue]); } - // Get the original data for trying to display the blob data as an image + if(theValue == nil) return nil; + if ([theValue isKindOfClass:[NSData class]]) { image = [[[NSImage alloc] initWithData:theValue] autorelease]; if(image) { @@ -3340,6 +3348,9 @@ return nil; } } + else if ([theValue isKindOfClass:[MCPGeometryData class]]) { + ; // TODO + } // Show the cell string value as tooltip (including line breaks and tabs) // by using the cell's font |