}
+- (void)textViewDidChangeSelection:(NSNotification *)aNotification {
+ [self updateUI];
+}
+
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem {
- NSLog(@"switch tab xyz x");
[[self undoManager] removeAllActions];
- if ([[tabViewItem identifier] isEqualToString:@"htmlResult"]) {
- [self resizeWebView];
- [self updateResultWebView];
- } else if ([[tabViewItem identifier] isEqualToString:@"xslfoResult"]) {
- [self updateResultImageView];
- }
-
+ [self doUpdateUI];
}
[uiUpdateTimer invalidate];
[uiUpdateTimer release];
- uiUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(uiUpdateTimerTarget:) userInfo:nil repeats:NO];
+ uiUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(uiUpdateTimerTarget:) userInfo:nil repeats:NO];
[uiUpdateTimer retain];
- (void)doUpdateUI {
-// NSLog(@"doUpdateUI running...");
-// NSLog(@"debug: %@", [[[NSApp mainWindow] document] tabView]);
-
-
- [saveXmlAsButton setEnabled:[workset hasXmlCode]];
- [saveXsltAsButton setEnabled:[workset hasXsltCode]];
- [saveResultAsButton setEnabled:[workset hasResult]];
-
- [saveResultButton setEnabled:[workset hasResultFilename] && resultDirty];
- [autoSaveCheckbox setEnabled:[workset hasResultFilename]];
-
- [openResultURLButton setEnabled:[workset hasResultFilename]];
- [autoShowCheckbox setEnabled:[openResultURLButton isEnabled]];
-
- [paramRemoveButton setEnabled:[parameterTable selectedRow] != -1];
-
- [processButton setEnabled:[self canProcessNow]];
-
- [saveResultFilenameField setObjectValue:[workset resultFilename]];
- [saveResultFilenameField setToolTip:[workset resultFilename]];
-
-
- [saveXmlFilenameField setObjectValue:[workset xmlFilename]];
- [saveXmlFilenameField setToolTip:[workset xmlFilename]];
- [saveXmlButton setEnabled:[workset hasXmlFilename] && xmlDirty];
+ NSString *activeTabIdentifier = [[tabView selectedTabViewItem] identifier];
+ NSString *activeResultTabIdentifier = [[resultTabView 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);
+ BOOL resultTabHtmlIsVisible = resultTabIsVisible && [activeResultTabIdentifier isEqualToString:@"htmlResult"];
+ BOOL resultTabXslfoIsVisible = resultTabIsVisible && !resultTabHtmlIsVisible && [activeResultTabIdentifier isEqualToString:@"xslfoResult"];
+ BOOL resultTabTextIsVisible = resultTabIsVisible && !(resultTabHtmlIsVisible || resultTabXslfoIsVisible);
- [saveXsltFilenameField setObjectValue:[workset xsltFilename]];
- [saveXsltFilenameField setToolTip:[workset xsltFilename]];
- [saveXsltButton setEnabled:[workset hasXsltFilename] && xsltDirty];
-
- [self updateWellFormedIcons];
+// NSLog(@"xml: %d, xslt: %d, param: %d, result: %d, reshtml: %d, resxslfo: %d, restext: %d", xmlTabIsVisible, xsltTabIsVisible, paramTabIsVisible, resultTabIsVisible, resultTabHtmlIsVisible, resultTabXslfoIsVisible, resultTabTextIsVisible);
- [parameterTable reloadData];
-
+ if (xmlTabIsVisible) {
+ [saveXmlFilenameField setObjectValue:[workset xmlFilename]];
+ [saveXmlFilenameField setToolTip:[workset xmlFilename]];
+ [saveXmlButton setEnabled:[workset hasXmlFilename] && xmlDirty];
+ [saveXmlAsButton setEnabled:[workset hasXmlCode]];
+ [xmlTagStackField setStringValue:[xmlView calculateTagStack]];
- [resultView setString:[workset result]];
-
- if ([[[resultTabView selectedTabViewItem] identifier] isEqualToString:@"htmlResult"]) {
- [self updateResultWebView];
- } else if ([[[resultTabView selectedTabViewItem] identifier] isEqualToString:@"xslfoResult"]) {
- [self updateResultImageView];
+ [xmlView checkWellFormed];
+ if ([workset hasXmlCode] && [xmlView hasError]) {
+ [xmlWellFormedIcon setImage:warningIcon];
+ [xmlWellFormedIcon setToolTip:[xmlView valueForKey:@"errorString"]];
+ } else {
+ [xmlWellFormedIcon setImage:nil];
+ [xmlWellFormedIcon setToolTip:nil];
+ }
+
+ } else if (xsltTabIsVisible) {
+ [saveXsltFilenameField setObjectValue:[workset xsltFilename]];
+ [saveXsltFilenameField setToolTip:[workset xsltFilename]];
+ [saveXsltButton setEnabled:[workset hasXsltFilename] && xsltDirty];
+ [saveXsltAsButton setEnabled:[workset hasXsltCode]];
+ [xsltTagStackField setStringValue:[xsltView calculateTagStack]];
+
+ [xsltView checkWellFormed];
+ if ([workset hasXsltCode] && [xsltView hasError]) {
+ [xsltWellFormedIcon setImage:warningIcon];
+ [xsltWellFormedIcon setToolTip:[xsltView valueForKey:@"errorString"]];
+ } else {
+ [xsltWellFormedIcon setImage:nil];
+ [xsltWellFormedIcon setToolTip:nil];
+ }
+
+ } else if (paramTabIsVisible) {
+ [paramRemoveButton setEnabled:[parameterTable selectedRow] != -1];
+ [parameterTable reloadData];
+ } else if (resultTabIsVisible) {
+ [saveResultAsButton setEnabled:[workset hasResult]];
+ [saveResultButton setEnabled:[workset hasResultFilename] && resultDirty];
+ [autoSaveCheckbox setEnabled:[workset hasResultFilename]];
+ [openResultURLButton setEnabled:[workset hasResultFilename]];
+ [autoShowCheckbox setEnabled:[openResultURLButton isEnabled]];
+ [saveResultFilenameField setObjectValue:[workset resultFilename]];
+ [saveResultFilenameField setToolTip:[workset resultFilename]];
+
+ if (resultTabHtmlIsVisible) {
+ [self resizeWebView];
+ [self updateResultWebView];
+ } else if (resultTabXslfoIsVisible) {
+ [self updateResultImageView];
+ [pdfCurrentPageField setIntValue: (pdfPageCount ? (pdfCurrentPage + 1) : 0)];
+ [pdfPageCountField setIntValue:pdfPageCount];
+
+ [pdfPreviousPageButton setEnabled:pdfCurrentPage > 0];
+ [pdfNextPageButton setEnabled:pdfCurrentPage < (pdfPageCount - 1)];
+ [pdfSaveAsButton setEnabled:(pdfPageCount > 0)];
+// } else if (resultTabTextIsVisible) {
+
+ }
}
- [pdfCurrentPageField setIntValue: (pdfPageCount ? (pdfCurrentPage + 1) : 0)];
- [pdfPageCountField setIntValue:pdfPageCount];
+
+ [processButton setEnabled:[self canProcessNow]];
- [pdfPreviousPageButton setEnabled:pdfCurrentPage > 0];
- [pdfNextPageButton setEnabled:pdfCurrentPage < (pdfPageCount - 1)];
- [pdfSaveAsButton setEnabled:(pdfPageCount > 0)];
+ // move this to xmlview.
+// [self updateWellFormedIcons];
+
+
+ [resultView setString:[workset stringResult]];
}
- (void)updateResultWebView {
if (!webViewUpToDate) {
WebFrame *mainFrame = [resultWebView mainFrame];
- [mainFrame loadHTMLString:[workset result] baseURL:nil];
+ [mainFrame loadHTMLString:[workset stringResult] baseURL:nil];
webViewUpToDate = YES;
}
}
}
-- (void)updateWellFormedIcons {
-
- if (![workset hasXmlCode] || [wellFormedParser checkWellFormedString:[workset xmlCode]]) {
- [xmlWellFormedIcon setImage:nil];
- [xmlWellFormedIcon setToolTip:nil];
- } else {
- [xmlWellFormedIcon setImage:warningIcon];
- [xmlWellFormedIcon setToolTip:[NSString stringWithFormat:@"The XML code is not well-formed, error at line %d:\n%@", [wellFormedParser errorLine], [wellFormedParser errorMessage]]];
- }
-
-
- if (![workset hasXsltCode] || [wellFormedParser checkWellFormedString:[workset xsltCode]]) {
- [xsltWellFormedIcon setImage:nil];
- [xsltWellFormedIcon setToolTip:nil];
- } else {
- [xsltWellFormedIcon setImage:warningIcon];
- [xsltWellFormedIcon setToolTip:[NSString stringWithFormat:@"The XSLT code is not well-formed, error at line %d:\n%@", [wellFormedParser errorLine], [wellFormedParser errorMessage]]];
- }
-
-
-}
-
- (BOOL)canProcessNow {
case 16: // Jump to Line
return [self canJumpToLineNow];
break;
-
+
+
default:
return YES;
break;
}
-
-
- (void)textDidChange:(NSNotification *)aNotification {
id sender = [aNotification object];
[processor setBaseUri:[NSString stringWithFormat:@"file://%@", [workset xsltFilename]]];
}
- if (![processor processStrings:[workset xmlCode] withXslt:[workset xsltCode] andParameters:params]) {
+ if (![processor processStrings:[XMLUtils getDataWithEncodingFromString:[workset xmlCode]] withXslt:[XMLUtils getDataWithEncodingFromString:[workset xsltCode]] andParameters:params]) {
[drawerMessageField setStringValue:[NSString stringWithFormat:@"Error on line %d of your %@ code:\n%@", [processor errorLine], ([processor errorSource] == XSLT_ERROR_SOURCE_XML ? @"XML" : @"XSLT"), [processor errorMessage]]];
processingTime = ((tend.tv_sec * 1000000 + tend.tv_usec) - (tstart.tv_sec * 1000000 + tstart.tv_usec)) / 1000;
[workset setResult:[processor result]];
+ [workset setResultEncoding:[processor resultEncoding]];
resultDirty = YES;
[self autoSave];
[errorDrawer close];
// NSLog(@"choosen: %@", [[panel filenames] objectAtIndex:0]);
- [workset setXmlCode:[NSString stringWithContentsOfFile:[[panel filenames] objectAtIndex:0]]];
+ [workset setXmlCode:[XMLUtils getStringWithEncodingFromFile:[[panel filenames] objectAtIndex:0]]];
[workset setXmlFilename:[[panel filenames] objectAtIndex:0]];
[self updateChangeCount:NSChangeDone];
[self updateCompleteUI];
// NSLog(@"choosen: %@", [[panel filenames] objectAtIndex:0]);
- [workset setXsltCode:[NSString stringWithContentsOfFile:[[panel filenames] objectAtIndex:0]]];
+ [workset setXsltCode:[XMLUtils getStringWithEncodingFromFile:[[panel filenames] objectAtIndex:0]]];
[workset setXsltFilename:[[panel filenames] objectAtIndex:0]];
[self updateChangeCount:NSChangeDone];
[self updateCompleteUI];
[self switchProcessorToType:newType updateUI:NO];
- NSLog(@"change processor type menu: %d", [sender tag]);
-
}
- (BOOL)handleDroppedFile:(NSString *)filename forTextView:(NSTextView *)sender {
-
- NSString *fileContents = [NSString stringWithContentsOfFile:filename];
+ NSString *fileContents = [XMLUtils getStringWithEncodingFromFile:filename];
- if (fileContents == nil) {
- return NO;
- }
-
- if ([sender isEqual:xmlView]) {
+ if ([sender isEqual: xmlView]) {
[self setXmlcode:fileContents];
[workset setXmlFilename:filename];
}
+
+
- (NSString *)xmlcode {
return [workset xmlCode];
}
- (NSString *)result {
- return [workset result];
+ return [workset stringResult];
}
//[resultImageView setNeedsDisplay:YES];
- NSLog(@"image reps: -%@-", [pdfImage representations]);
- NSLog(@"count: -%d-", [[[pdfImage representations] objectAtIndex:0] pageCount]);
+ //NSLog(@"image reps: -%@-", [pdfImage representations]);
+ //NSLog(@"count: -%d-", [[[pdfImage representations] objectAtIndex:0] pageCount]);
pdfPageCount = [[[pdfImage representations] objectAtIndex:0] pageCount];
pdfCurrentPage = 0;
- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
- NSFont *computerFont = [resultView font];
+
- NSLog(@"resultview: ", resultView);
- NSLog(@"font: ", computerFont);
NSSize errorDrawerSize;
[super windowControllerDidLoadNib:aController];
-
+
[resultImageView setImageAlignment:NSImageAlignTopLeft];
-// [resultImageView setImageFrameStyle:NSImageFrameGroove];
+ // [resultImageView setImageFrameStyle:NSImageFrameGroove];
[resultImageView setImageScaling:NSScaleNone];
[resultImageView setEditable:NO];
+
+
-
- // Add any code here that need to be executed once the windowController has loaded the document's window.
-
- // register our two input text views to receive file drags
- //
-// [xmlView registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
-// [xsltView registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
-
-/*
- [xmlView setFont:computerFont];
- [xsltView setFont:computerFont];
-*/
- [xmlView setAllowsUndo:YES];
- [xsltView setAllowsUndo:YES];
-
[resultWebView setTextSizeMultiplier:0.9];
warningIcon = [xmlWellFormedIcon image];
[self updateCompleteUI];
-
+
errorDrawerSize = [errorDrawer contentSize];
errorDrawerSize.height = 130;
[errorDrawer setContentSize:errorDrawerSize];
+
+
+
if (findPanelController == nil) {
findPanelController = [[FindPanelController alloc] initWithWindowNibName:@"FindPanel"];
// NSLog(@"init find panel controller: %@", findPanelController);
}
-
- (IBAction)showErrorLocation:(id)sender {
XMLTextView *textView;