aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPTablesList.m
diff options
context:
space:
mode:
authorBibiko <bibiko@eva.mpg.de>2010-08-15 13:06:10 +0000
committerBibiko <bibiko@eva.mpg.de>2010-08-15 13:06:10 +0000
commit6b1b086cd39169d1cdf35c1e89251215ec09907d (patch)
tree2d504cc64208959eb8fab5ba67d183f5ae3abdbf /Source/SPTablesList.m
parenta9f195cffdb8fae186e6e9a053bb48fbeebbb618 (diff)
downloadsequelpro-6b1b086cd39169d1cdf35c1e89251215ec09907d.tar.gz
sequelpro-6b1b086cd39169d1cdf35c1e89251215ec09907d.tar.bz2
sequelpro-6b1b086cd39169d1cdf35c1e89251215ec09907d.zip
• made SP more robust against issues which are caused by different table name encodings
Diffstat (limited to 'Source/SPTablesList.m')
-rw-r--r--Source/SPTablesList.m43
1 files changed, 34 insertions, 9 deletions
diff --git a/Source/SPTablesList.m b/Source/SPTablesList.m
index 60961e98..bd428cbf 100644
--- a/Source/SPTablesList.m
+++ b/Source/SPTablesList.m
@@ -657,10 +657,16 @@
*/
- (void)updateSelectionWithTaskString:(NSString *)taskString
{
- if (![mySQLConnection isConnected]) return;
+ if (![mySQLConnection isConnected] || [tablesListView selectedRow] < 0) {
+ return;
+ }
+ id selectedItem = [filteredTables objectAtIndex:[tablesListView selectedRow]];
+ if(![selectedItem isKindOfClass:[NSString class]]) {
+ return;
+ }
// If there is a multiple or blank selection, clear all views directly.
- if ( [tablesListView numberOfSelectedRows] != 1 || ![(NSString *)[filteredTables objectAtIndex:[tablesListView selectedRow]] length] ) {
+ if ( [tablesListView numberOfSelectedRows] != 1 || ![(NSString *)selectedItem length] ) {
// Update the selection variables and the interface
[self performSelectorOnMainThread:@selector(setSelection:) withObject:nil waitUntilDone:YES];
@@ -1470,16 +1476,28 @@
* Loads a table in content or source view (if tab selected)
*/
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
-{
+{
+
+ if([tablesListView selectedRow] < 0) {
+ [self updateSelectionWithTaskString:NSLocalizedString(@"Reloading...", @"Reloading table task string")];
+ return;
+ }
+
+ id selectedItem = [filteredTables objectAtIndex:[tablesListView selectedRow]];
+
+ if(![selectedItem isKindOfClass:[NSString class]]) {
+ [self updateSelectionWithTaskString:NSLocalizedString(@"Reloading...", @"Reloading table task string")];
+ return;
+ }
// Reset selectability after change if necessary
if ([tableDocumentInstance isWorking]) tableListIsSelectable = NO;
// Perform no action if the selected table hasn't actually changed - reselection etc
if ([tablesListView numberOfSelectedRows] == 1
- && [(NSString *)[filteredTables objectAtIndex:[tablesListView selectedRow]] length]
- && [selectedTableName isEqualToString:[filteredTables objectAtIndex:[tablesListView selectedRow]]]
- && selectedTableType == [[filteredTableTypes objectAtIndex:[tablesListView selectedRow]] integerValue])
+ && [(NSString *)selectedItem length]
+ && [selectedTableName isEqualToString:(NSString *)selectedItem]
+ && selectedTableType == [(NSString *)selectedItem integerValue])
{
return;
}
@@ -1488,7 +1506,7 @@
[spHistoryControllerInstance updateHistoryEntries];
NSString *tableName = @"data";
- if ([tablesListView numberOfSelectedRows] == 1 && [(NSString *)[filteredTables objectAtIndex:[tablesListView selectedRow]] length])
+ if ([tablesListView numberOfSelectedRows] == 1 && [selectedItem isKindOfClass:[NSString class]] && [(NSString *)selectedItem length])
tableName = [filteredTables objectAtIndex:[tablesListView selectedRow]];
[self updateSelectionWithTaskString:[NSString stringWithFormat:NSLocalizedString(@"Loading %@...", @"Loading table task string"), tableName]];
@@ -1516,6 +1534,9 @@
// Disallow selection while the document is working on a task
if ([tableDocumentInstance isWorking]) return NO;
+ if(![[filteredTables objectAtIndex:rowIndex] isKindOfClass:[NSString class]])
+ return NO;
+
//return (rowIndex != 0);
if( [filteredTableTypes count] == 0 )
return (rowIndex != 0 );
@@ -1540,7 +1561,11 @@
{
if (rowIndex > 0 && rowIndex < [filteredTableTypes count]
&& [[aTableColumn identifier] isEqualToString:@"tables"]) {
- if ([[filteredTableTypes objectAtIndex:rowIndex] integerValue] == SPTableTypeView) {
+ if(![[filteredTables objectAtIndex:rowIndex] isKindOfClass:[NSString class]]) {
+ [(ImageAndTextCell*)aCell setImage:nil];
+ [(ImageAndTextCell*)aCell setIndentationLevel:0];
+ }
+ else if ([[filteredTableTypes objectAtIndex:rowIndex] integerValue] == SPTableTypeView) {
[(ImageAndTextCell*)aCell setImage:[NSImage imageNamed:@"table-view-small"]];
} else if ([[filteredTableTypes objectAtIndex:rowIndex] integerValue] == SPTableTypeTable) {
[(ImageAndTextCell*)aCell setImage:[NSImage imageNamed:@"table-small"]];
@@ -1779,7 +1804,7 @@
// Add a "no matches" title if nothing matches the current filter settings
if (![filteredTables count]) {
[filteredTables addObject:NSLocalizedString(@"NO MATCHES",@"header for no matches in filtered list")];
- [filteredTableTypes addObject:[NSNumber numberWithInteger:SPTableTypeNone]];
+ [filteredTableTypes addObject:[NSNumber numberWithInteger:SPTableTypeNone]];
}
// If the currently selected table isn't present in the filter list, add it as a special entry