diff options
author | Bibiko <bibiko@eva.mpg.de> | 2009-06-13 13:25:59 +0000 |
---|---|---|
committer | Bibiko <bibiko@eva.mpg.de> | 2009-06-13 13:25:59 +0000 |
commit | a343ff6aa7e5789cd0d35a28caace8e39959e777 (patch) | |
tree | 478aea74e73770f5798a13aa96e878ff212df76c /Source | |
parent | 348de054eb77b5291c6046b36fdaaa600f9aaaed (diff) | |
download | sequelpro-a343ff6aa7e5789cd0d35a28caace8e39959e777.tar.gz sequelpro-a343ff6aa7e5789cd0d35a28caace8e39959e777.tar.bz2 sequelpro-a343ff6aa7e5789cd0d35a28caace8e39959e777.zip |
• moved code for de/increasing font and drag&drop feature (content or while holding ⌘ path) to SPTextViewAddition
- two finger zooming gesture is disabled for NSTableView cells
- i.e. all NSTextViews including NSTableView cells inherit these feature
• simplified QuickLookFormat IBActions
- added bin/text storing type to each action
• QuickLook animation set to SP's window middle point
• fixed issue that while having an image in editSheet an attribute change (font/size) in the editTextView destroyed the image data
• fix to allow again drag&drop an image to editSheet
• hide text/image/hex segment controll and QuickLook pull down button if user chose multipleLineEditingButton for non-blob fields
• disabled NSLog of print result in TableDocument
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CMTextView.h | 4 | ||||
-rw-r--r-- | Source/CMTextView.m | 214 | ||||
-rw-r--r-- | Source/SPTextViewAdditions.h | 7 | ||||
-rw-r--r-- | Source/SPTextViewAdditions.m | 222 | ||||
-rw-r--r-- | Source/TableContent.h | 16 | ||||
-rw-r--r-- | Source/TableContent.m | 109 | ||||
-rw-r--r-- | Source/TableDocument.m | 2 |
7 files changed, 299 insertions, 275 deletions
diff --git a/Source/CMTextView.h b/Source/CMTextView.h index 6c4da129..9b0d7659 100644 --- a/Source/CMTextView.h +++ b/Source/CMTextView.h @@ -77,10 +77,6 @@ - (unsigned int) getLineNumberForCharacterIndex:(unsigned int)anIndex; - (void) autoHelp; - (void) doSyntaxHighlighting; -- (void) insertFileContentOfFile:(NSString *)aPath; -- (unsigned int) characterIndexOfPoint:(NSPoint)aPoint; -- (void) makeTextSizeLarger; -- (void) makeTextSizeSmaller; - (void) setConnection:(CMMCPConnection *)theConnection withVersion:(int)majorVersion; - (void) doCompletion; - (NSArray *)suggestionsForSQLCompletionWith:(NSString *)currentWord dictMode:(BOOL)isDictMode; diff --git a/Source/CMTextView.m b/Source/CMTextView.m index 9c66b068..39c83977 100644 --- a/Source/CMTextView.m +++ b/Source/CMTextView.m @@ -1003,30 +1003,6 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) return [compl autorelease]; } -/* - * Increase the textView's font size by 1 - */ -- (void)makeTextSizeLarger -{ - NSFont *aFont = [self font]; - BOOL editableStatus = [self isEditable]; - [self setEditable:YES]; - [self setFont:[[NSFontManager sharedFontManager] convertFont:aFont toSize:[aFont pointSize]+1]]; - [self setEditable:editableStatus]; -} - -/* - * Decrease the textView's font size by 1 but not smaller than 4pt - */ -- (void)makeTextSizeSmaller -{ - NSFont *aFont = [self font]; - int newSize = ([aFont pointSize]-1 < 4) ? [aFont pointSize] : [aFont pointSize]-1; - BOOL editableStatus = [self isEditable]; - [self setEditable:YES]; - [self setFont:[[NSFontManager sharedFontManager] convertFont:aFont toSize:newSize]]; - [self setEditable:editableStatus]; -} /* * Hook to invoke the auto-uppercasing of SQL keywords after pasting @@ -2480,196 +2456,6 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) // Dragging methods /////////////////////////// -/* - * Insert the content of a dragged file path or if ⌘ is pressed - * while dragging insert the file path - */ -- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender -{ - NSPasteboard *pboard = [sender draggingPasteboard]; - - if ( [[pboard types] containsObject:NSFilenamesPboardType] ) { - NSArray *files = [pboard propertyListForType:NSFilenamesPboardType]; - - // Only one file path is allowed - if([files count] > 1) { - NSLog(@"%@", NSLocalizedString(@"Only one dragged item allowed.",@"Only one dragged item allowed.")); - NSBeep(); - return YES; - } - - NSString *filepath = [[pboard propertyListForType:NSFilenamesPboardType] objectAtIndex:0]; - - // Set the new insertion point - NSPoint draggingLocation = [sender draggingLocation]; - draggingLocation = [self convertPoint:draggingLocation fromView:nil]; - unsigned int characterIndex = [self characterIndexOfPoint:draggingLocation]; - [self setSelectedRange:NSMakeRange(characterIndex,0)]; - - // Check if user pressed ⌘ while dragging for inserting only the file path - if([sender draggingSourceOperationMask] == 4) - { - [self insertText:filepath]; - return YES; - } - - // Check size and NSFileType - NSDictionary *attr = [[NSFileManager defaultManager] fileAttributesAtPath:filepath traverseLink:YES]; - if(attr) - { - NSNumber *filesize = [attr objectForKey:NSFileSize]; - NSString *filetype = [attr objectForKey:NSFileType]; - if(filetype == NSFileTypeRegular && filesize) - { - // Ask for confirmation if file content is larger than 1MB - if([filesize unsignedLongValue] > 1000000) - { - NSAlert *alert = [[NSAlert alloc] init]; - [alert addButtonWithTitle:NSLocalizedString(@"OK", @"OK button")]; - [alert addButtonWithTitle:NSLocalizedString(@"Cancel", @"cancel button")]; - [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"Do you really want to proceed with %.1f MB of data?", @"message of panel asking for confirmation for inserting large text from dragging action"), - [filesize unsignedLongValue]/1048576.0]]; - [alert setHelpAnchor:filepath]; - [alert setMessageText:NSLocalizedString(@"Warning",@"Warning")]; - [alert setAlertStyle:NSWarningAlertStyle]; - [alert beginSheetModalForWindow:[self window] - modalDelegate:self - didEndSelector:@selector(dragAlertSheetDidEnd:returnCode:contextInfo:) - contextInfo:nil]; - [alert release]; - - } else - [self insertFileContentOfFile:filepath]; - } - } - return YES; - } - - return [super performDragOperation:sender]; -} - -/* - * Confirmation sheetDidEnd method - */ -- (void)dragAlertSheetDidEnd:(NSAlert *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo -{ - - [[sheet window] orderOut:nil]; - if ( returnCode == NSAlertFirstButtonReturn ) - [self insertFileContentOfFile:[sheet helpAnchor]]; - -} -/* - * Convert a NSPoint, usually the mouse location, to - * a character index of the text view. - */ -- (unsigned int)characterIndexOfPoint:(NSPoint)aPoint -{ - unsigned int glyphIndex; - NSLayoutManager *layoutManager = [self layoutManager]; - float fraction; - NSRange range; - - range = [layoutManager glyphRangeForTextContainer:[self textContainer]]; - glyphIndex = [layoutManager glyphIndexForPoint:aPoint - inTextContainer:[self textContainer] - fractionOfDistanceThroughGlyph:&fraction]; - if( fraction > 0.5 ) glyphIndex++; - - if( glyphIndex == NSMaxRange(range) ) - return [[self textStorage] length]; - else - return [layoutManager characterIndexForGlyphAtIndex:glyphIndex]; - -} - -/* - * Insert content of a plain text file for a given path. - * In addition it tries to figure out the file's text encoding heuristically. - */ -- (void)insertFileContentOfFile:(NSString *)aPath -{ - - NSError *err = nil; - NSStringEncoding enc; - NSString *content = nil; - - // Make usage of the UNIX command "file" to get an info - // about file type and encoding. - NSTask *task=[[NSTask alloc] init]; - NSPipe *pipe=[[NSPipe alloc] init]; - NSFileHandle *handle; - NSString *result; - [task setLaunchPath:@"/usr/bin/file"]; - [task setArguments:[NSArray arrayWithObjects:aPath, @"-Ib", nil]]; - [task setStandardOutput:pipe]; - handle=[pipe fileHandleForReading]; - [task launch]; - result=[[NSString alloc] initWithData:[handle readDataToEndOfFile] - encoding:NSASCIIStringEncoding]; - - [pipe release]; - [task release]; - - // UTF16/32 files are detected as application/octet-stream resp. audio/mpeg - if([result hasPrefix:@"application/octet-stream"] || [result hasPrefix:@"audio/mpeg"] || [result hasPrefix:@"text/plain"] || [[[aPath pathExtension] lowercaseString] isEqualToString:@"sql"]) - { - // if UTF16/32 cocoa will try to find the correct encoding - if([result hasPrefix:@"application/octet-stream"] || [result hasPrefix:@"audio/mpeg"] || [result rangeOfString:@"utf-16"].length) - enc = 0; - else if([result rangeOfString:@"utf-8"].length) - enc = NSUTF8StringEncoding; - else if([result rangeOfString:@"iso-8859-1"].length) - enc = NSISOLatin1StringEncoding; - else if([result rangeOfString:@"us-ascii"].length) - enc = NSASCIIStringEncoding; - else - enc = 0; - - if(enc == 0) // cocoa tries to detect the encoding - content = [NSString stringWithContentsOfFile:aPath usedEncoding:&enc error:&err]; - else - content = [NSString stringWithContentsOfFile:aPath encoding:enc error:&err]; - - if(content) - { - [self insertText:content]; - [result release]; - [self insertText:@""]; // Invoke keyword uppercasing - return; - } - // If UNIX "file" failed try cocoa's encoding detection - content = [NSString stringWithContentsOfFile:aPath encoding:enc error:&err]; - if(content) - { - [self insertText:content]; - [result release]; - [self insertText:@""]; // Invoke keyword uppercasing - return; - } - } - - [result release]; - - NSLog(@"%@ ‘%@’.", NSLocalizedString(@"Couldn't read the file content of", @"Couldn't read the file content of"), aPath); - NSBeep(); -} - -#pragma mark - -#pragma mark multi-touch trackpad support - -/* - * Trackpad two-finger zooming gesture in/decreases the font size - */ -- (void) magnifyWithEvent:(NSEvent *)anEvent -{ - if([anEvent deltaZ]>5.0) - [self makeTextSizeLarger]; - else if([anEvent deltaZ]<-5.0) - [self makeTextSizeSmaller]; - - [self insertText:@""]; -} - (void) dealloc { diff --git a/Source/SPTextViewAdditions.h b/Source/SPTextViewAdditions.h index d1fa91d8..ccf865fb 100644 --- a/Source/SPTextViewAdditions.h +++ b/Source/SPTextViewAdditions.h @@ -41,4 +41,11 @@ - (IBAction)doTranspose:(id)sender; - (IBAction)doRemoveDiacritics:(id)sender; +- (void)makeTextSizeLarger; +- (void)makeTextSizeSmaller; + +- (unsigned int)characterIndexOfPoint:(NSPoint)aPoint; + +- (void)insertFileContentOfFile:(NSString *)aPath; + @end
\ No newline at end of file diff --git a/Source/SPTextViewAdditions.m b/Source/SPTextViewAdditions.m index 34cbbab8..7e882dca 100644 --- a/Source/SPTextViewAdditions.m +++ b/Source/SPTextViewAdditions.m @@ -23,6 +23,7 @@ // More info at <http://code.google.com/p/sequel-pro/> #import "SPStringAdditions.h" +#import "SPTextViewAdditions.h" @implementation NSTextView (SPTextViewAdditions) @@ -384,4 +385,225 @@ } } +/* + * Insert the content of a dragged file path or if ⌘ is pressed + * while dragging insert the file path + */ +- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender +{ + NSPasteboard *pboard = [sender draggingPasteboard]; + + if ( [[pboard types] containsObject:NSFilenamesPboardType] ) { + NSArray *files = [pboard propertyListForType:NSFilenamesPboardType]; + + // Only one file path is allowed + if([files count] > 1) { + NSLog(@"%@", NSLocalizedString(@"Only one dragged item allowed.",@"Only one dragged item allowed.")); + return YES; + } + + NSString *filepath = [[pboard propertyListForType:NSFilenamesPboardType] objectAtIndex:0]; + + // Set the new insertion point + NSPoint draggingLocation = [sender draggingLocation]; + draggingLocation = [self convertPoint:draggingLocation fromView:nil]; + unsigned int characterIndex = [self characterIndexOfPoint:draggingLocation]; + [self setSelectedRange:NSMakeRange(characterIndex,0)]; + + // Check if user pressed ⌘ while dragging for inserting only the file path + if([sender draggingSourceOperationMask] == 4) + { + [self insertText:filepath]; + return YES; + } + + // Check size and NSFileType + NSDictionary *attr = [[NSFileManager defaultManager] fileAttributesAtPath:filepath traverseLink:YES]; + if(attr) + { + NSNumber *filesize = [attr objectForKey:NSFileSize]; + NSString *filetype = [attr objectForKey:NSFileType]; + if(filetype == NSFileTypeRegular && filesize) + { + // Ask for confirmation if file content is larger than 1MB + if([filesize unsignedLongValue] > 1000000) + { + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:NSLocalizedString(@"OK", @"OK button")]; + [alert addButtonWithTitle:NSLocalizedString(@"Cancel", @"cancel button")]; + [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"Do you really want to proceed with %.1f MB of data?", @"message of panel asking for confirmation for inserting large text from dragging action"), + [filesize unsignedLongValue]/1048576.0]]; + [alert setHelpAnchor:filepath]; + [alert setMessageText:NSLocalizedString(@"Warning",@"Warning")]; + [alert setAlertStyle:NSWarningAlertStyle]; + [alert beginSheetModalForWindow:[self window] + modalDelegate:self + didEndSelector:@selector(dragAlertSheetDidEnd:returnCode:contextInfo:) + contextInfo:nil]; + [alert release]; + + } else + [self insertFileContentOfFile:filepath]; + } + } + return YES; + } + + return [super performDragOperation:sender]; +} + +/* + * Confirmation sheetDidEnd method + */ +- (void)dragAlertSheetDidEnd:(NSAlert *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo +{ + + [[sheet window] orderOut:nil]; + if ( returnCode == NSAlertFirstButtonReturn ) + [self insertFileContentOfFile:[sheet helpAnchor]]; + +} +/* + * Convert a NSPoint, usually the mouse location, to + * a character index of the text view. + */ +- (unsigned int)characterIndexOfPoint:(NSPoint)aPoint +{ + unsigned int glyphIndex; + NSLayoutManager *layoutManager = [self layoutManager]; + float fraction; + NSRange range; + + range = [layoutManager glyphRangeForTextContainer:[self textContainer]]; + glyphIndex = [layoutManager glyphIndexForPoint:aPoint + inTextContainer:[self textContainer] + fractionOfDistanceThroughGlyph:&fraction]; + if( fraction > 0.5 ) glyphIndex++; + + if( glyphIndex == NSMaxRange(range) ) + return [[self textStorage] length]; + else + return [layoutManager characterIndexForGlyphAtIndex:glyphIndex]; + +} + +/* + * Insert content of a plain text file for a given path. + * In addition it tries to figure out the file's text encoding heuristically. + */ +- (void)insertFileContentOfFile:(NSString *)aPath +{ + + NSError *err = nil; + NSStringEncoding enc; + NSString *content = nil; + + // Make usage of the UNIX command "file" to get an info + // about file type and encoding. + NSTask *task=[[NSTask alloc] init]; + NSPipe *pipe=[[NSPipe alloc] init]; + NSFileHandle *handle; + NSString *result; + [task setLaunchPath:@"/usr/bin/file"]; + [task setArguments:[NSArray arrayWithObjects:aPath, @"-Ib", nil]]; + [task setStandardOutput:pipe]; + handle=[pipe fileHandleForReading]; + [task launch]; + result=[[NSString alloc] initWithData:[handle readDataToEndOfFile] + encoding:NSASCIIStringEncoding]; + + [pipe release]; + [task release]; + + // UTF16/32 files are detected as application/octet-stream resp. audio/mpeg + if([result hasPrefix:@"application/octet-stream"] || [result hasPrefix:@"audio/mpeg"] || [result hasPrefix:@"text/plain"] || [[[aPath pathExtension] lowercaseString] isEqualToString:@"sql"]) + { + // if UTF16/32 cocoa will try to find the correct encoding + if([result hasPrefix:@"application/octet-stream"] || [result hasPrefix:@"audio/mpeg"] || [result rangeOfString:@"utf-16"].length) + enc = 0; + else if([result rangeOfString:@"utf-8"].length) + enc = NSUTF8StringEncoding; + else if([result rangeOfString:@"iso-8859-1"].length) + enc = NSISOLatin1StringEncoding; + else if([result rangeOfString:@"us-ascii"].length) + enc = NSASCIIStringEncoding; + else + enc = 0; + + if(enc == 0) // cocoa tries to detect the encoding + content = [NSString stringWithContentsOfFile:aPath usedEncoding:&enc error:&err]; + else + content = [NSString stringWithContentsOfFile:aPath encoding:enc error:&err]; + + if(content) + { + [self insertText:content]; + [result release]; + [self insertText:@""]; // Invoke keyword uppercasing + return; + } + // If UNIX "file" failed try cocoa's encoding detection + content = [NSString stringWithContentsOfFile:aPath encoding:enc error:&err]; + if(content) + { + [self insertText:content]; + [result release]; + [self insertText:@""]; // Invoke keyword uppercasing + return; + } + } + + [result release]; + + NSLog(@"%@ ‘%@’.", NSLocalizedString(@"Couldn't read the file content of", @"Couldn't read the file content of"), aPath); +} + +/* + * Increase the textView's font size by 1 + */ +- (void)makeTextSizeLarger +{ + NSFont *aFont = [self font]; + BOOL editableStatus = [self isEditable]; + [self setEditable:YES]; + [self setFont:[[NSFontManager sharedFontManager] convertFont:aFont toSize:[aFont pointSize]+1]]; + [self setEditable:editableStatus]; +} + +/* + * Decrease the textView's font size by 1 but not smaller than 4pt + */ +- (void)makeTextSizeSmaller +{ + NSFont *aFont = [self font]; + int newSize = ([aFont pointSize]-1 < 4) ? [aFont pointSize] : [aFont pointSize]-1; + BOOL editableStatus = [self isEditable]; + [self setEditable:YES]; + [self setFont:[[NSFontManager sharedFontManager] convertFont:aFont toSize:newSize]]; + [self setEditable:editableStatus]; +} + + +#pragma mark - +#pragma mark multi-touch trackpad support + +/* + * Trackpad two-finger zooming gesture in/decreases the font size + */ +- (void) magnifyWithEvent:(NSEvent *)anEvent +{ + + //Avoid font resizing for NSTextViews in CMCopyTable or NSTableView + if([[[[self delegate] class] description] isEqualToString:@"CMCopyTable"] + || [[[[self delegate] class] description] isEqualToString:@"NSTableView"]) return; + + if([anEvent deltaZ]>5.0) + [self makeTextSizeLarger]; + else if([anEvent deltaZ]<-5.0) + [self makeTextSizeSmaller]; + + [self insertText:@""]; +} + + @end diff --git a/Source/TableContent.h b/Source/TableContent.h index b440bf6a..7ac59148 100644 --- a/Source/TableContent.h +++ b/Source/TableContent.h @@ -168,6 +168,8 @@ int numRows, currentlyEditingRow, maxNumRowsOfCurrentTable; bool areShowingAllRows; + BOOL editSheetWillBeInitialized; + int quickLookCloseMarker; } @@ -191,19 +193,11 @@ - (IBAction)openEditSheet:(id)sender; - (IBAction)saveEditSheet:(id)sender; - (IBAction)segmentControllerChanged:(id)sender; -- (IBAction)quickLookAsMovie:(id)sender; -- (IBAction)quickLookAsSoundLinear:(id)sender; -- (IBAction)quickLookAsSoundM4A:(id)sender; -- (IBAction)quickLookAsSoundMP3:(id)sender; -- (IBAction)quickLookAsImage:(id)sender; -- (IBAction)quickLookAsPDF:(id)sender; -- (IBAction)quickLookAsWordDoc:(id)sender; -- (IBAction)quickLookAsRTF:(id)sender; -- (IBAction)quickLookAsHTML:(id)sender; -- (void)invokeQuickLookOfType:(NSString *)type; +- (IBAction)quickLookFormatButton:(id)sender; +- (void)invokeQuickLookOfType:(NSString *)type treatAsText:(BOOL)isText; - (void)processUpdatedImageData:(NSData *)data; - (IBAction)dropImage:(id)sender; -- (void)textDidChange:(NSNotification *)notification; +- (void)textViewDidChangeSelection:(NSNotification *)aNotification; - (NSString *)dataToHex:(NSData *)data; //getter methods diff --git a/Source/TableContent.m b/Source/TableContent.m index f75cef3e..eb36e9ba 100644 --- a/Source/TableContent.m +++ b/Source/TableContent.m @@ -37,6 +37,7 @@ #import "SPQueryConsole.h" #import "SPStringAdditions.h" #import "SPArrayAdditions.h" +#import "SPTextViewAdditions.h" @implementation TableContent @@ -951,6 +952,7 @@ NSString *fileName = [panel filename]; // Write binary field types directly to the file + //// || [editSheetBinaryButton state] == NSOnState if ( [editData isKindOfClass:[NSData class]] ) { [editData writeToFile:fileName atomically:YES]; @@ -970,47 +972,25 @@ #pragma mark - #pragma mark QuickLook -- (IBAction)quickLookAsWordDoc:(id)sender +- (IBAction)quickLookFormatButton:(id)sender { - [self invokeQuickLookOfType:@"doc"]; -} -- (IBAction)quickLookAsRTF:(id)sender -{ - [self invokeQuickLookOfType:@"rtf"]; -} -- (IBAction)quickLookAsMovie:(id)sender -{ - [self invokeQuickLookOfType:@"mov"]; -} -- (IBAction)quickLookAsSoundM4A:(id)sender -{ - [self invokeQuickLookOfType:@"m4a"]; -} -- (IBAction)quickLookAsSoundMP3:(id)sender -{ - [self invokeQuickLookOfType:@"mp3"]; -} -- (IBAction)quickLookAsSoundLinear:(id)sender -{ - [self invokeQuickLookOfType:@"wav"]; -} -- (IBAction)quickLookAsImage:(id)sender -{ - [self invokeQuickLookOfType:@"pict"]; -} -- (IBAction)quickLookAsPDF:(id)sender -{ - [self invokeQuickLookOfType:@"pdf"]; -} -- (IBAction)quickLookAsHTML:(id)sender -{ - [self invokeQuickLookOfType:@"html"]; + switch([sender tag]) { + case 0: [self invokeQuickLookOfType:@"pict" treatAsText:NO]; break; + case 1: [self invokeQuickLookOfType:@"m4a" treatAsText:NO]; break; + case 2: [self invokeQuickLookOfType:@"mp3" treatAsText:NO]; break; + case 3: [self invokeQuickLookOfType:@"wav" treatAsText:NO]; break; + case 4: [self invokeQuickLookOfType:@"mov" treatAsText:NO]; break; + case 5: [self invokeQuickLookOfType:@"pdf" treatAsText:NO]; break; + case 6: [self invokeQuickLookOfType:@"html" treatAsText:YES]; break; + case 7: [self invokeQuickLookOfType:@"doc" treatAsText:NO]; break; + case 8: [self invokeQuickLookOfType:@"rtf" treatAsText:YES]; break; + } } /* * Opens QuickLook for current data if QuickLook is available */ -- (void)invokeQuickLookOfType:(NSString *)type +- (void)invokeQuickLookOfType:(NSString *)type treatAsText:(BOOL)isText { // Load private framework @@ -1023,7 +1003,7 @@ NSString *tmpFileName = [NSString stringWithFormat:@"/tmp/SequelProQuickLook.%@", type]; // if data are binary - if ( [editData isKindOfClass:[NSData class]] ) { + if ( [editData isKindOfClass:[NSData class]] || !isText) { [editData writeToFile:tmpFileName atomically:YES]; // write other field types' representations to the file via the current encoding @@ -1083,11 +1063,13 @@ // if user closes the QuickLook view quickLookCloseMarker = 1; - // TODO get QuickLook's pulldown button's frame to zoom out/in from/into it - NSRect r = [editSheetQuickLookButton convertRectToBase:[editSheetQuickLookButton frame]]; - // tentative setting - r.origin.y=400; - return r; + // Return the App's middle point + NSRect mwf = [[NSApp mainWindow] frame]; + return NSMakeRect( + mwf.origin.x+mwf.size.width/2, + mwf.origin.y+mwf.size.height/2, + 5, 5); + } @@ -1112,7 +1094,8 @@ NSString *contents = [[NSString alloc] initWithData:data encoding:[CMMCPConnection encodingForMySQLEncoding:[[tableDocumentInstance connectionEncoding] UTF8String]]]; // Set the string contents and hex representation - [editTextView setString:contents]; + if(contents) + [editTextView setString:contents]; [hexTextView setString:[self dataToHex:editData]]; [contents release]; @@ -1132,11 +1115,16 @@ } } -- (void)textDidChange:(NSNotification *)notification +- (void)textViewDidChangeSelection:(NSNotification *)notification /* invoked when the user changes the string in the editSheet */ { + + // Do nothing if user really didn't changed text (e.g. for font size changing return) + if(editSheetWillBeInitialized || ([[[notification object] textStorage] changeInLength]==0)) + return; + // clear the image and hex (since i doubt someone can "type" a gif) [editImage setImage:nil]; [hexTextView setString:@""]; @@ -1148,6 +1136,7 @@ // set edit data to text editData = [[editTextView string] retain]; + } - (NSString *)dataToHex:(NSData *)data @@ -2232,8 +2221,11 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn } } + BOOL isBlob = [tableDataInstance columnIsBlobOrText:[aTableColumn identifier]]; // Open the sheet if the multipleLineEditingButton is enabled or the column was a blob or a text. - if ( [multipleLineEditingButton state] == NSOnState || [tableDataInstance columnIsBlobOrText:[aTableColumn identifier]] ) { + if ( [multipleLineEditingButton state] == NSOnState || isBlob ) { + + editSheetWillBeInitialized = YES; theValue = [[filteredResult objectAtIndex:rowIndex] objectForKey:[aTableColumn identifier]]; NSImage *image = nil; @@ -2246,6 +2238,9 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn [editTextView setHidden:YES]; [editTextScrollView setHidden:YES]; + [editSheetQuickLookButton setHidden:(!isBlob)]; + [editSheetSegmentControl setHidden:(!isBlob)]; + // order out editSheet to inform the user that // SP is working [NSApp beginSheet:editSheet modalForWindow:tableWindow modalDelegate:self didEndSelector:nil contextInfo:nil]; @@ -2299,6 +2294,8 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn [editSheetProgressBar stopAnimation:self]; + editSheetWillBeInitialized = NO; + // wait for editSheet code = [NSApp runModalForWindow:editSheet]; @@ -2430,6 +2427,7 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn /** * Traps enter and return key and closes editSheet instead of inserting a linebreak when user hits return. + * Catch ⌘+ and ⌘- to de/increase font size of aTextView */ - (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector { @@ -2439,7 +2437,28 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn { [NSApp stopModalWithCode:1]; return YES; - } else { + } + else if([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask) + { + // increase text size by 1; ⌘+ and numpad + + if([[[NSApp currentEvent] charactersIgnoringModifiers] isEqualToString:@"+"]) + { + [aTextView makeTextSizeLarger]; + return YES; + } + // decrease text size by 1; ⌘- and numpad - + else if([[[NSApp currentEvent] charactersIgnoringModifiers] isEqualToString:@"-"]) + { + [aTextView makeTextSizeSmaller]; + return YES; + } + else + { + return NO; + } + } + else + { return NO; } } diff --git a/Source/TableDocument.m b/Source/TableDocument.m index d2a24fd3..c797b530 100644 --- a/Source/TableDocument.m +++ b/Source/TableDocument.m @@ -241,7 +241,7 @@ NSString *TableDocumentFavoritesControllerSelectionIndexDidChange = @"TableDocum // Process the template and display the results. NSString *result = [engine processTemplateInFileAtPath:templatePath withVariables:print_data]; - NSLog(@"result %@", result); + //NSLog(@"result %@", result); return result; } |