nib rearranging
[TestXSLT.git] / MyDocument.m
index 79493c5..89c6611 100644 (file)
                xsltDirty = NO;
        }
 
+       NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+    NSDictionary *appDefaults = [NSDictionary
+        dictionaryWithObject:@"YES" forKey:@"AnalyzeCode"];
+       
+    [defaults registerDefaults:appDefaults];
        
        
        return self;
 
        [uiUpdateTimer retain];
 
+       
 }
 
 - (void)uiUpdateTimerTarget:(NSTimer *)timer {
 
 
 
+
 - (void)doUpdateUI {
 
        NSString *activeTabIdentifier = [[tabView selectedTabViewItem] identifier];
        if (xmlTabIsVisible) {
                [saveXmlFilenameField setObjectValue:[workset xmlFilename]];
                [saveXmlFilenameField setToolTip:[workset xmlFilename]];
-               [saveXmlButton setEnabled:[workset hasXmlFilename] && xmlDirty];
-               [saveXmlAsButton setEnabled:[workset hasXmlCode]];
+               [saveXmlButton setEnabled:[self canSaveXmlNow]];
+               [saveXmlAsButton setEnabled:[self canSaveXmlAsNow]];
                [xmlTagStackField setStringValue:[xmlView calculateTagStack]];
        
                [xmlView checkWellFormed];
        } else if (xsltTabIsVisible) {
                [saveXsltFilenameField setObjectValue:[workset xsltFilename]];
                [saveXsltFilenameField setToolTip:[workset xsltFilename]];
-               [saveXsltButton setEnabled:[workset hasXsltFilename] && xsltDirty];
-               [saveXsltAsButton setEnabled:[workset hasXsltCode]];
+               [saveXsltButton setEnabled:[self canSaveXsltNow]];
+               [saveXsltAsButton setEnabled:[self canSaveXsltAsNow]];
                [xsltTagStackField setStringValue:[xsltView calculateTagStack]];
 
                [xsltView checkWellFormed];
                [paramRemoveButton setEnabled:[parameterTable selectedRow] != -1];
                [parameterTable reloadData];
        } else if (resultTabIsVisible) {
-               [saveResultAsButton setEnabled:[workset hasResult]];
-               [saveResultButton setEnabled:[workset hasResultFilename] && resultDirty];
+               [saveResultAsButton setEnabled:[self canSaveResultAsNow]];
+               [saveResultButton setEnabled:[self canSaveResultNow]];
                [autoSaveCheckbox setEnabled:[workset hasResultFilename]];
                [openResultURLButton setEnabled:[workset hasResultFilename]];
                [autoShowCheckbox setEnabled:[openResultURLButton isEnabled]];
 - (void)updateResultWebView {
        if (!webViewUpToDate) {
                WebFrame *mainFrame = [resultWebView mainFrame];
-               [mainFrame loadHTMLString:[workset stringResult] baseURL:nil];
+//             [mainFrame loadHTMLString:[workset stringResult] baseURL:nil];
+               [mainFrame loadHTMLString:[workset stringResult] baseURL:[NSURL URLWithString:[webViewBaseURL stringValue]]];
+//             [mainFrame loadHTMLString:[workset stringResult] baseURL:[NSURL URLWithString:@"file:///Users/liyanage/Sites/primavera/images/x"]];
                webViewUpToDate = YES;
        }
 }
 
 //     NSLog(@"validate: %@, tag: %d", menuItem, [menuItem tag]);
 
+       NSString *activeTabIdentifier = [[tabView selectedTabViewItem] identifier];
+       BOOL xmlTabIsVisible = [activeTabIdentifier isEqualToString:@"xmlTab"];
+       BOOL xsltTabIsVisible = !xmlTabIsVisible && [activeTabIdentifier isEqualToString:@"xsltTab"];
+       BOOL paramTabIsVisible = !(xmlTabIsVisible || xsltTabIsVisible) && [activeTabIdentifier isEqualToString:@"parametersTab"];
+       BOOL resultTabIsVisible = !(xmlTabIsVisible || xsltTabIsVisible || paramTabIsVisible);
+
+       
        switch ([menuItem tag]) {
 
                case 10:        // Process
                        return [self canJumpToLineNow];
                        break;
                        
+               case 17:        // Save Current Pane
+                       if (xmlTabIsVisible) {
+                               return [self canSaveXmlNow];
+                       } else if (xsltTabIsVisible) {
+                               return [self canSaveXsltNow];
+                       } else if (resultTabIsVisible) {
+                               return [self canSaveResultNow];
+                       }
+                       break;
+                       
+               case 18:        // Save Current Pane As...
+                       if (xmlTabIsVisible) {
+                               return [self canSaveXmlAsNow];
+                       } else if (xsltTabIsVisible) {
+                               return [self canSaveXsltAsNow];
+                       } else if (resultTabIsVisible) {
+                               return [self canSaveResultAsNow];
+                       }
+                       break;
                        
                default:
                        return YES;
 
 
 
+
+- (BOOL)canSaveXmlAsNow {
+       return [workset hasXmlCode];
+}
+
+- (BOOL)canSaveXmlNow {
+       return [workset hasXmlFilename] && xmlDirty;
+}
+
+- (BOOL)canSaveXsltAsNow {
+       return [workset hasXsltCode];
+}
+
+- (BOOL)canSaveXsltNow {
+       return [workset hasXsltFilename] && xsltDirty;
+}
+
+- (BOOL)canSaveResultAsNow {
+       return [workset hasResult];
+}
+
+- (BOOL)canSaveResultNow {
+       return [workset hasResultFilename] && resultDirty;
+}
+
+
+
+
 - (IBAction)saveXmlAs:(id)sender {
 
        NSSavePanel *panel = [NSSavePanel savePanel];
 }
 
 
+- (IBAction)saveCurrentAs:(id)sender {
+       
+       NSString *activeTabIdentifier = [[tabView selectedTabViewItem] identifier];
+       BOOL xmlTabIsVisible = [activeTabIdentifier isEqualToString:@"xmlTab"];
+       BOOL xsltTabIsVisible = !xmlTabIsVisible && [activeTabIdentifier isEqualToString:@"xsltTab"];
+       BOOL paramTabIsVisible = !(xmlTabIsVisible || xsltTabIsVisible) && [activeTabIdentifier isEqualToString:@"parametersTab"];
+       BOOL resultTabIsVisible = !(xmlTabIsVisible || xsltTabIsVisible || paramTabIsVisible);
+       
+       if (xmlTabIsVisible) {
+               return [self saveXmlAs:sender];
+       } else if (xsltTabIsVisible) {
+               return [self saveXsltAs:sender];
+       } else if (resultTabIsVisible) {
+               return [self saveResultAs:sender];
+       }
+
+}
+
+
+
+
+- (IBAction)saveCurrent:(id)sender {
+
+       NSString *activeTabIdentifier = [[tabView selectedTabViewItem] identifier];
+       BOOL xmlTabIsVisible = [activeTabIdentifier isEqualToString:@"xmlTab"];
+       BOOL xsltTabIsVisible = !xmlTabIsVisible && [activeTabIdentifier isEqualToString:@"xsltTab"];
+       BOOL paramTabIsVisible = !(xmlTabIsVisible || xsltTabIsVisible) && [activeTabIdentifier isEqualToString:@"parametersTab"];
+       BOOL resultTabIsVisible = !(xmlTabIsVisible || xsltTabIsVisible || paramTabIsVisible);
+       
+       if (xmlTabIsVisible) {
+               return [self saveXml:sender];
+       } else if (xsltTabIsVisible) {
+               return [self saveXslt:sender];
+       } else if (resultTabIsVisible) {
+               return [self saveResult:sender];
+       }
+       
+}
+
+
+
+
+
+
 - (IBAction)openResultURL:(id)sender {
 
 //     NSLog(@"openResultURL running...");
@@ -982,30 +1089,35 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn
 
        NSData *resultData = [xfr render:[workset result]];
 
+       [xfr release];
+
+       if (!resultData) {
+               NSLog(@"Unable to render, NULL result");
+               return;
+       }
+       
        [resultData retain];
        [pdfData release];
        pdfData = resultData;
        
        NSImage *pdfImage = [[[NSImage alloc] initWithData:resultData] autorelease];
        [pdfImage setBackgroundColor:[NSColor whiteColor]];
+       [pdfImage recache];
        [pdfImage setCacheMode:NSImageCacheNever];
        
+       NSClipView *clipView = (NSClipView *)[resultImageView superview];
+       NSScrollView *scrollView = (NSScrollView *)[clipView superview];
+       
        [resultImageView setImage:pdfImage];
        [resultImageView setFrameSize:[pdfImage size]];
+       [resultImageView display];
 
-       //:[[[pdfImage representations] objectAtIndex:0] bounds]
-       //[resultImageView sizeToFit];
-       
-       //[resultImageView setNeedsDisplay:YES];
-
-       //NSLog(@"image reps: -%@-", [pdfImage representations]);
-       //NSLog(@"count: -%d-", [[[pdfImage representations] objectAtIndex:0] pageCount]);
+       [clipView scrollToPoint:NSMakePoint([resultImageView frame].origin.x, [resultImageView frame].size.height - [clipView frame].size.height + [resultImageView frame].origin.y)];
+       [scrollView reflectScrolledClipView:clipView];
        
        pdfPageCount = [[[pdfImage representations] objectAtIndex:0] pageCount];
        pdfCurrentPage = 0;
                
-       [xfr release];
-       
 }
 
 
@@ -1061,7 +1173,7 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn
 
 - (void)resizeWebView {
        
-       [[[resultWebView mainFrame] frameView] setFrame:[resultWebView frame]];
+//     [[[resultWebView mainFrame] frameView] setFrame:[resultWebView frame]];
        [resultWebView setNeedsDisplay:YES];
 
 }
@@ -1085,13 +1197,11 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn
        NSSize errorDrawerSize;
 
        [super windowControllerDidLoadNib:aController];
-               
-       [resultImageView setImageAlignment:NSImageAlignTopLeft];
-       //      [resultImageView setImageFrameStyle:NSImageFrameGroove];
+
+       [resultImageView setImageFrameStyle:NSImageFramePhoto];
        [resultImageView setImageScaling:NSScaleNone];
+       [resultImageView setImageAlignment:NSImageAlignCenter];
        [resultImageView setEditable:NO];
-               
-       
        
        [resultWebView setTextSizeMultiplier:0.9];
        
@@ -1103,6 +1213,10 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn
        errorDrawerSize.height = 130;
        [errorDrawer setContentSize:errorDrawerSize];
        
+       NSFont *computerFont = [NSFont fontWithName:@"Courier" size:12.0];
+       [resultView setFont:computerFont];
+
+       [tabView registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];