diff options
-rw-r--r-- | Source/SPConstants.h | 5 | ||||
-rw-r--r-- | Source/SPConstants.m | 5 | ||||
-rw-r--r-- | Source/SPPrintController.h | 1 | ||||
-rw-r--r-- | Source/SPPrintController.m | 59 | ||||
-rw-r--r-- | Source/TableContent.m | 18 |
5 files changed, 74 insertions, 14 deletions
diff --git a/Source/SPConstants.h b/Source/SPConstants.h index a7409ebc..0843a79c 100644 --- a/Source/SPConstants.h +++ b/Source/SPConstants.h @@ -89,7 +89,6 @@ extern NSString *SPDefaultEncoding; extern NSString *SPUseMonospacedFonts; extern NSString *SPDisplayTableViewVerticalGridlines; extern NSString *SPCustomQueryMaxHistoryItems; -extern NSString *SPDisplayServerVersionInWindowTitle; // Tables Prefpane extern NSString *SPReloadAfterAddingRow; @@ -156,6 +155,10 @@ extern NSString *SPEditInSheetEnabled; extern NSString *SPTableInformationPanelCollapsed; extern NSString *SPTableColumnWidths; +// Hidden Prefs +extern NSString *SPPrintWarningRowLimit; +extern NSString *SPDisplayServerVersionInWindowTitle; + // Import extern NSString *SPCSVImportFieldTerminator; extern NSString *SPCSVImportLineTerminator; diff --git a/Source/SPConstants.m b/Source/SPConstants.m index 7db91664..1b34b1c7 100644 --- a/Source/SPConstants.m +++ b/Source/SPConstants.m @@ -57,7 +57,6 @@ NSString *SPDefaultEncoding = @"DefaultEncoding"; NSString *SPUseMonospacedFonts = @"UseMonospacedFonts"; NSString *SPDisplayTableViewVerticalGridlines = @"DisplayTableViewVerticalGridlines"; NSString *SPCustomQueryMaxHistoryItems = @"CustomQueryMaxHistoryItems"; -NSString *SPDisplayServerVersionInWindowTitle = @"DisplayServerVersionInWindowTitle"; // Tables Prefpane NSString *SPReloadAfterAddingRow = @"ReloadAfterAddingRow"; @@ -124,6 +123,10 @@ NSString *SPEditInSheetEnabled = @"EditInSheetEnabled"; NSString *SPTableInformationPanelCollapsed = @"TableInformationPanelCollapsed"; NSString *SPTableColumnWidths = @"tableColumnWidths"; +// Hidden Prefs +NSString *SPPrintWarningRowLimit = @"PrintWarningRowLimit"; +NSString *SPDisplayServerVersionInWindowTitle = @"DisplayServerVersionInWindowTitle"; + // Import NSString *SPCSVImportFieldEnclosedBy = @"CSVImportFieldEnclosedBy"; NSString *SPCSVImportFieldEscapeCharacter = @"CSVImportFieldEscapeCharacter"; diff --git a/Source/SPPrintController.h b/Source/SPPrintController.h index 5d259be5..3982b152 100644 --- a/Source/SPPrintController.h +++ b/Source/SPPrintController.h @@ -27,6 +27,7 @@ @interface TableDocument (SPPrintController) +- (void)startPrintDocumentOperation; - (void)generateHTMLForPrinting; - (void)generateTableInfoHTMLForPrinting; diff --git a/Source/SPPrintController.m b/Source/SPPrintController.m index f83f3625..d12f764f 100644 --- a/Source/SPPrintController.m +++ b/Source/SPPrintController.m @@ -102,10 +102,61 @@ */ - (IBAction)printDocument:(id)sender { + // Only display warning for the 'Table Content' view + if ([tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]] == 1) { + + NSInteger rowLimit = [prefs integerForKey:SPPrintWarningRowLimit]; + + // Result count minus one because the first element is the column names + NSUInteger resultRows = ([[tableContentInstance currentResult] count] - 1); + + if (resultRows > rowLimit) { + + NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; + + [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; + + NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Continue to print?", @"continue to print message") + defaultButton:NSLocalizedString(@"Print", @"print button") + alternateButton:NSLocalizedString(@"Cancel", @"cancel button") + otherButton:nil + informativeTextWithFormat:[NSString stringWithFormat:NSLocalizedString(@"Are you sure you want to print the current content view of the table '%@'?\n\nIt currently contains %@ rows, which may take a significant amount of time to print.", @"continue to print informative message"), [self table], [numberFormatter stringFromNumber:[NSNumber numberWithLongLong:resultRows]]]]; + + NSArray *buttons = [alert buttons]; + + // Change the alert's cancel button to have the key equivalent of return + [[buttons objectAtIndex:0] setKeyEquivalent:@"p"]; + [[buttons objectAtIndex:0] setKeyEquivalentModifierMask:NSCommandKeyMask]; + [[buttons objectAtIndex:1] setKeyEquivalent:@"\r"]; + + [alert beginSheetModalForWindow:tableWindow modalDelegate:self didEndSelector:@selector(printWarningDidEnd:returnCode:contextInfo:) contextInfo:NULL]; + + return; + } + } + + [self startPrintDocumentOperation]; +} + +/** + * Called when the print warning dialog is dismissed. + */ +- (void)printWarningDidEnd:(id)sheet returnCode:(NSInteger)returnCode contextInfo:(NSString *)contextInfo +{ + if (returnCode == NSAlertDefaultReturn) { + [self startPrintDocumentOperation]; + } +} + +/** + * Starts tge print document operation by spawning a new thread if required. + */ +- (void)startPrintDocumentOperation +{ [self startTaskWithDescription:NSLocalizedString(@"Generating print document...", @"generating print document status message")]; BOOL isTableInformation = ([tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]] == 3); - + if ([NSThread isMainThread]) { printThread = [[NSThread alloc] initWithTarget:self selector:(isTableInformation) ? @selector(generateTableInfoHTMLForPrinting) : @selector(generateHTMLForPrinting) object:nil]; @@ -263,7 +314,7 @@ NSString *HTMLString = [engine processTemplateInFileAtPath:[[NSBundle mainBundle] pathForResource:SPHTMLPrintTemplate ofType:@"html"] withVariables:printData]; // Check if the operation has been cancelled - if ((printThread != nil) && (![NSThread isMainThread]) && ([printThread isCancelled])) { + if ((printThread != nil) && (![NSThread isMainThread]) && ([printThread isCancelled])) { [pool drain]; [self endTask]; @@ -300,6 +351,8 @@ [printData setObject:heading forKey:@"heading"]; [printData setObject:[[NSUnarchiver unarchiveObjectWithData:[prefs objectForKey:SPCustomQueryEditorFont]] fontName] forKey:@"font"]; + NSString *HTMLString = [engine processTemplateInFileAtPath:[[NSBundle mainBundle] pathForResource:SPHTMLTableInfoPrintTemplate ofType:@"html"] withVariables:printData]; + // Check if the operation has been cancelled if ((printThread != nil) && (![NSThread isMainThread]) && ([printThread isCancelled])) { [pool drain]; @@ -310,8 +363,6 @@ return; } - NSString *HTMLString = [engine processTemplateInFileAtPath:[[NSBundle mainBundle] pathForResource:SPHTMLTableInfoPrintTemplate ofType:@"html"] withVariables:printData]; - [self performSelectorOnMainThread:@selector(loadPrintWebViewWithHTMLString:) withObject:HTMLString waitUntilDone:NO]; [pool drain]; diff --git a/Source/TableContent.m b/Source/TableContent.m index b0e5e8fe..c5090573 100644 --- a/Source/TableContent.m +++ b/Source/TableContent.m @@ -1421,11 +1421,13 @@ [alert beginSheetModalForWindow:tableWindow modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:contextInfo]; } -//getter methods -- (NSArray *)currentDataResult -/* - returns the current result (as shown in table content view) as array, the first object containing the field names as array, the following objects containing the rows as array +// Accessors + +/** + * Returns the current result (as shown in table content view) as array, the first object containing the field + * names as array, the following objects containing the rows as array. */ +- (NSArray *)currentDataResult { NSArray *tableColumns; NSEnumerator *enumerator; @@ -1480,11 +1482,11 @@ return currentResult; } -//getter methods -- (NSArray *)currentResult -/* - returns the current result (as shown in table content view) as array, the first object containing the field names as array, the following objects containing the rows as array +/** + * Returns the current result (as shown in table content view) as array, the first object containing the field + * names as array, the following objects containing the rows as array. */ +- (NSArray *)currentResult { NSArray *tableColumns; NSEnumerator *enumerator; |