Revision: 12973
          http://bibdesk.svn.sourceforge.net/bibdesk/?rev=12973&view=rev
Author:   hofman
Date:     2008-03-05 06:58:09 -0800 (Wed, 05 Mar 2008)

Log Message:
-----------
Rewrite preview updating code. Collapse some code.

Modified Paths:
--------------
    trunk/bibdesk/BibDocument+Menus.m
    trunk/bibdesk/BibDocument+Scripting.m
    trunk/bibdesk/BibDocument.h
    trunk/bibdesk/BibDocument.m
    trunk/bibdesk/BibDocument_Actions.m
    trunk/bibdesk/BibDocument_Search.m

Modified: trunk/bibdesk/BibDocument+Menus.m
===================================================================
--- trunk/bibdesk/BibDocument+Menus.m   2008-03-05 14:55:26 UTC (rev 12972)
+++ trunk/bibdesk/BibDocument+Menus.m   2008-03-05 14:58:09 UTC (rev 12973)
@@ -280,14 +280,12 @@
         return NO;
     // even if there is a selection, we may have an error condition with 
nothing to print
     // see comments on exception in -printableView, which is the main 
motivation for this validation
-    else if([currentPreviewView isEqual:previewerBox])
+    else if(bottomPreviewDisplay == BDSKPreviewDisplayTeX)
         return [[previewer pdfView] document] != nil;
-    else if ([currentPreviewView isEqual:previewBox])
-        return [previewPdfView document] != nil;
-    else if ([[previewer textView] isEqual:previewBox])
-        return [[previewer textView] textStorage] != nil;
+    else if (bottomPreviewDisplay == BDSKPreviewDisplayText)
+        return [bottomPreviewTextView textStorage] != nil;
     else
-        return [previewTextView textStorage] != nil;
+        return NO;
 }
 
 - (BOOL) validateToggleToggleCustomCiteDrawerMenuItem:(NSMenuItem*) menuItem {
@@ -532,10 +530,10 @@
 - (BOOL)validateChangePreviewDisplayMenuItem:(NSMenuItem *)menuItem {
     int tag = [menuItem tag], state = NSOffState;
     NSString *style = [menuItem representedObject];
-    if (tag == previewDisplay && tag != BDSKPreviewDisplayText) {
+    if (tag == bottomPreviewDisplay && tag != BDSKPreviewDisplayText) {
         state = NSOnState;
-    } else if (tag == BDSKPreviewDisplayText && [style 
isEqualToString:previewDisplayTemplate]) {
-        if (tag == previewDisplay || [menuItem menu] == templatePreviewMenu)
+    } else if (tag == BDSKPreviewDisplayText && [style 
isEqualToString:bottomPreviewDisplayTemplate]) {
+        if (tag == bottomPreviewDisplay || [menuItem menu] == 
bottomTemplatePreviewDisplayMenu)
             state = NSOnState;
     }
     [menuItem setState:state];

Modified: trunk/bibdesk/BibDocument+Scripting.m
===================================================================
--- trunk/bibdesk/BibDocument+Scripting.m       2008-03-05 14:55:26 UTC (rev 
12972)
+++ trunk/bibdesk/BibDocument+Scripting.m       2008-03-05 14:58:09 UTC (rev 
12973)
@@ -138,15 +138,14 @@
 }
 
 - (id)handlePrintScriptCommand:(NSScriptCommand *)command {
-    if([currentPreviewView isEqual:previewerBox] || [currentPreviewView 
isEqual:previewBox]) {
-        // we let the PDFView handle printing
+    if (bottomPreviewDisplay == BDSKPreviewDisplayTeX) {
         
         NSDictionary *args = [command evaluatedArguments];
         id settings = [args objectForKey:@"PrintSettings"];
         // PDFView does not allow printing without showing the dialog, so we 
just ignore that setting
         
         NSPrintInfo *printInfo = [self printInfo];
-        PDFView *pdfView = (PDFView *)[(NSBox *)currentPreviewView 
contentView];
+        PDFView *pdfView = [previewer pdfView];
         
         if ([settings isKindOfClass:[NSDictionary class]]) {
             settings = [[settings mutableCopy] autorelease];

Modified: trunk/bibdesk/BibDocument.h
===================================================================
--- trunk/bibdesk/BibDocument.h 2008-03-05 14:55:26 UTC (rev 12972)
+++ trunk/bibdesk/BibDocument.h 2008-03-05 14:58:09 UTC (rev 12973)
@@ -139,37 +139,34 @@
     IBOutlet BDSKGradientView *groupGradientView;
        NSString *currentGroupField;
     
-#pragma mark File pane variables
+#pragma mark Side preview variables
 
-    IBOutlet FileView *fileView;
-    NSTextView *sidePreviewTextView;
-    NSView *currentSidePreviewView;
+    IBOutlet NSTabView *sidePreviewTabView;
+    IBOutlet NSView *sidePreviewView;
+    IBOutlet NSTextView *sidePreviewTextView;
+    IBOutlet FileView *sideFileView;
     IBOutlet BDSKCollapsibleView *fileCollapsibleView;
     IBOutlet BDSKGradientView *fileGradientView;
     
-    BDSKFileMigrationController *migrationController;
-    
     int sidePreviewDisplay;
     NSString *sidePreviewDisplayTemplate;
     
     IBOutlet NSSegmentedControl *sidePreviewButton;
     NSMenu *sideTemplatePreviewMenu;
     
-#pragma mark Preview variables
+#pragma mark Bottom preview variables
 
-    IBOutlet NSTextView *previewTextView;
-    IBOutlet NSView *currentPreviewView;
+    IBOutlet NSTabView *bottomPreviewTabView;
+    IBOutlet NSView *bottomPreviewView;
+    IBOutlet NSTextView *bottomPreviewTextView;
+    IBOutlet FileView *bottomFileView;
     BDSKPreviewer *previewer;
-    BDSKEdgeView *previewerBox;
-    BDSKZoomablePDFView *previewPdfView;
-    BDSKEdgeView *previewBox;
-    FileView *bottomFileView;
     
-    int previewDisplay;
-    NSString *previewDisplayTemplate;
+    int bottomPreviewDisplay;
+    NSString *bottomPreviewDisplayTemplate;
        
-    IBOutlet NSSegmentedControl *previewButton;
-    NSMenu *templatePreviewMenu;
+    IBOutlet NSSegmentedControl *bottomPreviewButton;
+    NSMenu *bottomTemplatePreviewDisplayMenu;
     
 #pragma mark Toolbar variables
     
@@ -257,6 +254,8 @@
     BDSKSearchButtonController *searchButtonController;
     BDSKDocumentSearch *documentSearch;
     
+    BDSKFileMigrationController *migrationController;
+    
 }
 
 
@@ -324,12 +323,12 @@
 - (void)updatePreviewer:(BDSKPreviewer *)aPreviewer;
 
 /*!
-    @method updatePreviewPane
+    @method updateBottomPreviewPane
     @abstract Handles writing the preview pane. (Not the PDF Preview)
     @discussion -
     
 */
-- (void)updatePreviewPane;
+- (void)updateBottomPreviewPane;
 - (void)updateSidePreviewPane;
 
 /*!

Modified: trunk/bibdesk/BibDocument.m
===================================================================
--- trunk/bibdesk/BibDocument.m 2008-03-05 14:55:26 UTC (rev 12972)
+++ trunk/bibdesk/BibDocument.m 2008-03-05 14:58:09 UTC (rev 12973)
@@ -225,8 +225,8 @@
         pboardHelper = [[BDSKItemPasteboardHelper alloc] init];
         [pboardHelper setDelegate:self];
         
-        previewDisplay = BDSKPreviewDisplayText;
-        previewDisplayTemplate = [[[OFPreferenceWrapper 
sharedPreferenceWrapper] stringForKey:BDSKPreviewTemplateStyleKey] retain];
+        bottomPreviewDisplay = BDSKPreviewDisplayText;
+        bottomPreviewDisplayTemplate = [[[OFPreferenceWrapper 
sharedPreferenceWrapper] stringForKey:BDSKPreviewTemplateStyleKey] retain];
         sidePreviewDisplay = BDSKPreviewDisplayFiles;
         sidePreviewDisplayTemplate = [[[OFPreferenceWrapper 
sharedPreferenceWrapper] stringForKey:BDSKPreviewTemplateStyleKey] retain];
         
@@ -305,14 +305,8 @@
     [toolbarItems release];
        [statusBar release];
     [[tableView enclosingScrollView] release];
-    [[previewTextView enclosingScrollView] release];
-    [[bottomFileView enclosingScrollView] release];
-    [[fileView enclosingScrollView] release];
-    [[sidePreviewTextView enclosingScrollView] release];
     [previewer release];
-    [previewerBox release];
-    [previewBox release];
-    [previewDisplayTemplate release];
+    [bottomPreviewDisplayTemplate release];
     [sidePreviewDisplayTemplate release];
     [macroWC release];
     [infoWC release];
@@ -429,14 +423,20 @@
                [[mainBox superview] addSubview:statusBar 
positioned:NSWindowBelow relativeTo:nil];
        }
        [statusBar 
setProgressIndicatorStyle:BDSKProgressIndicatorSpinningStyle];
-    [statusBar setTextOffset:NSMaxX([previewButton frame]) - 2.0];
+    [statusBar setTextOffset:NSMaxX([bottomPreviewButton frame]) - 2.0];
     
-    templatePreviewMenu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] 
autorelease];
-    [templatePreviewMenu setDelegate:self];
-    [previewButton setMenu:templatePreviewMenu forSegment:0];
-    [previewButton setEnabled:[pw boolForKey:BDSKUsesTeXKey] 
forSegment:BDSKPreviewDisplayTeX];
-    [previewButton selectSegmentWithTag:previewDisplay];
+    [bottomPreviewTabView setFrame:[bottomPreviewView frame]];
+    [[bottomPreviewView superview] replaceSubview:bottomPreviewView 
with:bottomPreviewTabView];
     
+    bottomTemplatePreviewDisplayMenu = [[[NSMenu allocWithZone:[NSMenu 
menuZone]] init] autorelease];
+    [bottomTemplatePreviewDisplayMenu setDelegate:self];
+    [bottomPreviewButton setMenu:bottomTemplatePreviewDisplayMenu 
forSegment:0];
+    [bottomPreviewButton setEnabled:[pw boolForKey:BDSKUsesTeXKey] 
forSegment:BDSKPreviewDisplayTeX];
+    [bottomPreviewButton selectSegmentWithTag:bottomPreviewDisplay];
+    
+    [sidePreviewTabView setFrame:[sidePreviewView frame]];
+    [[sidePreviewView superview] replaceSubview:sidePreviewView 
with:sidePreviewTabView];
+    
     sideTemplatePreviewMenu = [[[NSMenu allocWithZone:[NSMenu menuZone]] init] 
autorelease];
     [sideTemplatePreviewMenu setDelegate:self];
     [sidePreviewButton setMenu:sideTemplatePreviewMenu forSegment:0];
@@ -489,8 +489,6 @@
     [[tableView enclosingScrollView] retain];
     [[tableView enclosingScrollView] setFrame:[mainView bounds]];
     
-    [[previewTextView enclosingScrollView] retain];
-    
     // TableView setup
     [tableView removeAllTableColumns];
     
@@ -511,20 +509,19 @@
     [tableView registerForDraggedTypes:dragTypes];
     [groupTableView registerForDraggedTypes:dragTypes];
     
-    [fileView setBackgroundColor:[[fileView enclosingScrollView] 
backgroundColor]];
+    [bottomFileView setBackgroundColor:[[bottomFileView enclosingScrollView] 
backgroundColor]];
     
+    [[sideFileView enclosingScrollView] setBackgroundColor:[sideFileView 
backgroundColor]];
+    
     [fileCollapsibleView setCollapseEdges:BDSKMaxXEdgeMask];
     [fileCollapsibleView setMinSize:NSMakeSize(65.0, 20.0)];
     [fileGradientView setUpperColor:[NSColor colorWithCalibratedWhite:0.9 
alpha:1.0]];
     [fileGradientView setLowerColor:[NSColor colorWithCalibratedWhite:0.75 
alpha:1.0]];
     
-    [fileView setIconScale:[[OFPreferenceWrapper sharedPreferenceWrapper] 
floatForKey:BDSKMainFileViewIconScaleKey]];
-    [fileView setAutoScales:YES];
-    [fileView addObserver:self forKeyPath:@"iconScale" options:0 context:NULL];
+    [sideFileView setIconScale:[[OFPreferenceWrapper sharedPreferenceWrapper] 
floatForKey:BDSKMainFileViewIconScaleKey]];
+    [sideFileView setAutoScales:YES];
+    [sideFileView addObserver:self forKeyPath:@"iconScale" options:0 
context:NULL];
     
-    currentSidePreviewView = [fileView enclosingScrollView];
-    [currentSidePreviewView retain];
-    
        // ImagePopUpButtons setup
        [actionMenuButton setShowsMenuWhenIconClicked:YES];
        [[actionMenuButton cell] setAltersStateOfSelectedItem:NO];
@@ -632,9 +629,9 @@
     [pboardHelper release];
     pboardHelper = nil;
     
-    [fileView removeObserver:self forKeyPath:@"iconScale"];
-    [fileView setDataSource:nil];
-    [fileView setDelegate:nil];
+    [sideFileView removeObserver:self forKeyPath:@"iconScale"];
+    [sideFileView setDataSource:nil];
+    [sideFileView setDelegate:nil];
     
     // safety call here, in case the pasteboard is retaining the document; we 
don't want notifications after the window closes, since all the pointers to UI 
elements will be garbage
     [[NSNotificationCenter defaultCenter] removeObserver:self];
@@ -697,9 +694,9 @@
             [dictionary setFloatValue:[previewer PDFScaleFactor] 
forKey:BDSKPreviewPDFScaleFactorKey];
             [dictionary setFloatValue:[previewer RTFScaleFactor] 
forKey:BDSKPreviewRTFScaleFactorKey];
         }
-        if(previewPdfView){
-            [dictionary setFloatValue:[previewPdfView autoScales] ? 0.0 : 
[previewPdfView scaleFactor] forKey:BDSKPreviewLinkedFileScaleFactorKey];
-        }
+        //if(previewPdfView){
+        //    [dictionary setFloatValue:[previewPdfView autoScales] ? 0.0 : 
[previewPdfView scaleFactor] forKey:BDSKPreviewLinkedFileScaleFactorKey];
+        //}
         
         if(fileSearchController){
             [dictionary setObject:[fileSearchController sortDescriptorData] 
forKey:BDSKFileContentSearchSortDescriptorKey];
@@ -2725,7 +2722,7 @@
     // don't update if the note was posted by editors that don't belong to us
     /*
     if ([notification object] == self || [notification object] == nil) {
-        [self updatePreviewPane];
+        [self updateBottomPreviewPane];
         [self updateSidePreviewPane];
         
         int tag = [[OFPreferenceWrapper sharedPreferenceWrapper] 
integerForKey:BDSKPreviewDisplayKey];
@@ -2733,7 +2730,7 @@
             tag = BDSKDetailsPreviewDisplay;
         else if (tag == BDSKRTFPreviewDisplay)
             tag = BDSKPDFPreviewDisplay;
-        [previewButton selectSegmentWithTag:tag];
+        [bottomPreviewButton selectSegmentWithTag:tag];
     }
     */
 }
@@ -2748,7 +2745,7 @@
 }
 
 - (void)handleUsesTeXChangedNotification:(NSNotification *)notification{
-    [previewButton setEnabled:[[OFPreferenceWrapper sharedPreferenceWrapper] 
boolForKey:BDSKUsesTeXKey] forSegment:BDSKPreviewDisplayTeX];
+    [bottomPreviewButton setEnabled:[[OFPreferenceWrapper 
sharedPreferenceWrapper] boolForKey:BDSKUsesTeXKey] 
forSegment:BDSKPreviewDisplayTeX];
 }
 
 - (void)handleBibItemAddDelNotification:(NSNotification *)notification{
@@ -2999,8 +2996,8 @@
 }
 
 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
change:(NSDictionary *)change context:(void *)context {
-    if (object == fileView && [keyPath isEqualToString:@"iconScale"]) {
-        [[OFPreferenceWrapper sharedPreferenceWrapper] setFloat:[fileView 
iconScale] forKey:BDSKMainFileViewIconScaleKey];
+    if (object == sideFileView && [keyPath isEqualToString:@"iconScale"]) {
+        [[OFPreferenceWrapper sharedPreferenceWrapper] setFloat:[sideFileView 
iconScale] forKey:BDSKMainFileViewIconScaleKey];
     } else {
         [super observeValueForKeyPath:keyPath ofObject:object change:change 
context:context];
     }
@@ -3017,7 +3014,7 @@
     OBASSERT([NSThread inMainThread]);
     
     //take care of the preview field (NSTextView below the pub table); if the 
enumerator is nil, the view will get cleared out
-    [self updatePreviewPane];
+    [self updateBottomPreviewPane];
     [self updateSidePreviewPane];
     
     if([[OFPreferenceWrapper sharedPreferenceWrapper] 
boolForKey:BDSKUsesTeXKey] &&
@@ -3040,52 +3037,28 @@
     [aPreviewer updateWithBibTeXString:bibString citeKeys:[items 
valueForKey:@"citeKey"]];
 }
 
-- (void)displayTeXPreviewInPreviewPane{
-    if([[OFPreferenceWrapper sharedPreferenceWrapper] 
boolForKey:BDSKUsesTeXKey] == NO)
-        return;
-    
-    if(previewer == nil){
-        previewer = [[BDSKPreviewer alloc] init];
-        NSDictionary *xatrrDefaults = [self 
mainWindowSetupDictionaryFromExtendedAttributes];
-        [previewer setPDFScaleFactor:[xatrrDefaults 
floatForKey:BDSKPreviewPDFScaleFactorKey defaultValue:0.0]];
-        [previewer setRTFScaleFactor:[xatrrDefaults 
floatForKey:BDSKPreviewRTFScaleFactorKey defaultValue:1.0]];
-        previewerBox = [[BDSKEdgeView alloc] init];
-        [previewerBox setEdges:BDSKEveryEdgeMask];
-        [previewerBox setColor:[NSColor lightGrayColor] forEdge:NSMaxYEdge];
-        [previewerBox setContentView:[previewer pdfView]];
-    }
-    
-    // may be the pdflatex or latex2rtf generated preview
-    NSView *view = (NSView *)previewerBox;
-    if(currentPreviewView != view){
-        [view setFrame:[currentPreviewView frame]];
-        [[currentPreviewView superview] replaceSubview:currentPreviewView 
with:view];
-        currentPreviewView = view;
-        [[previewer progressOverlay] overlayView:currentPreviewView];
-    }
-    [self updatePreviewer:previewer];
-    
-}
-
+/*
 - (void)displayErrorMessageInPreviewTextView:(NSString *)errorMessage{
     NSParameterAssert(errorMessage != nil);
+    
     // make sure we have the correct view in place (NSTextView)
-    NSView *view = [previewTextView enclosingScrollView];
-    [[previewer progressOverlay] remove];
-    [previewer updateWithBibTeXString:nil];
-    if(currentPreviewView != view){
-        [view setFrame:[currentPreviewView frame]];
-        [[currentPreviewView superview] replaceSubview:currentPreviewView 
with:view];
-        currentPreviewView = view;
+    int tabIndex = [bottomPreviewTabView 
indexOfTabViewItem:[bottomPreviewTabView selectedTabViewItem]];
+    if (tabIndex != BDSKPreviewDisplayText) {
+        if (tabIndex == BDSKPreviewDisplayTeX) {
+            [[previewer progressOverlay] remove];
+            [previewer updateWithBibTeXString:nil];
+        }
+        [bottomPreviewTabView selectTabViewItemAtIndex:BDSKPreviewDisplayText];
     }
+    
     NSFont *font = [NSFontManager bodyFontForFamily:[[OFPreferenceWrapper 
sharedPreferenceWrapper] objectForKey:BDSKPreviewPaneFontFamilyKey]];
     NSAttributedString *attrString = [[NSAttributedString alloc] 
initWithString:errorMessage attributeName:NSFontAttributeName 
attributeValue:font];
-    [[previewTextView textStorage] setAttributedString:attrString];
+    [[bottomPreviewTextView textStorage] setAttributedString:attrString];
     [attrString release];
 }
 
 - (void)displayLinkedFileInPreviewPane{
-    NSView *view = [previewTextView enclosingScrollView];
+    NSView *view = [bottomPreviewTextView enclosingScrollView];
     [[previewer progressOverlay] remove];
     [previewer updateWithBibTeXString:nil];
     
@@ -3109,10 +3082,10 @@
                 [previewPdfView release];
             }
             view = previewBox;
-            if(currentPreviewView != view){
-                [view setFrame:[currentPreviewView frame]];
-                [[currentPreviewView superview] 
replaceSubview:currentPreviewView with:view];
-                currentPreviewView = view;
+            if(bottomPreviewView != view){
+                [view setFrame:[bottomPreviewView frame]];
+                [[bottomPreviewView superview] 
replaceSubview:bottomPreviewView with:view];
+                bottomPreviewView = view;
             }
             
             // if it's an image, first convert it to PDF
@@ -3167,10 +3140,10 @@
 
         } else {
             // if it's not PDF/PS or an image, try reading it with 
NSAttributedString, which handles a variety of common formats
-            if(currentPreviewView != view){
-                [view setFrame:[currentPreviewView frame]];
-                [[currentPreviewView superview] 
replaceSubview:currentPreviewView with:view];
-                currentPreviewView = view;
+            if(bottomPreviewView != view){
+                [view setFrame:[bottomPreviewView frame]];
+                [[bottomPreviewView superview] 
replaceSubview:bottomPreviewView with:view];
+                bottomPreviewView = view;
             }
             
             NSError *nsError;
@@ -3178,7 +3151,7 @@
             if (nil == attrString) {
                 [self displayErrorMessageInPreviewTextView:([nsError 
localizedFailureReason] ? [nsError localizedFailureReason] : [nsError 
localizedDescription])];
             } else {
-                [[previewTextView textStorage] setAttributedString:attrString];
+                [[bottomPreviewTextView textStorage] 
setAttributedString:attrString];
                 [attrString release];
             }
         }
@@ -3189,55 +3162,11 @@
         [self displayErrorMessageInPreviewTextView:errString];
     }
 }    
+*/
 
-- (void)displayFileViewInPreviewPane{
-    // set up the view hierarchy
-    if (bottomFileView == nil) {
-        bottomFileView = [[FileView alloc] init];
-        [bottomFileView setBackgroundColor:[NSColor controlBackgroundColor]];
-        [bottomFileView setAutoresizingMask:NSViewWidthSizable | 
NSViewHeightSizable];
-        
-        NSScrollView *scrollView = [[NSScrollView alloc] init];
-        [scrollView setHasHorizontalScroller:YES];
-        [scrollView setHasVerticalScroller:YES];
-        [scrollView setAutohidesScrollers:YES];
-        [scrollView setBorderType:NSBezelBorder];
-        [scrollView setDrawsBackground:YES];
-        [scrollView setBackgroundColor:[NSColor controlBackgroundColor]];
-        [scrollView setDocumentView:bottomFileView];
-        [scrollView setAutoresizingMask:NSViewWidthSizable | 
NSViewHeightSizable];
-        [bottomFileView release];
-        
-        [bottomFileView setDataSource:self];
-        [bottomFileView setDelegate:self];
-    }
+- (void)displayTemplatedPreview:(NSString *)templateName 
inTextView:(NSTextView *)textView {
     
-    NSView *view = [bottomFileView enclosingScrollView];
-    if(currentPreviewView != view){
-        [[previewer progressOverlay] remove];
-        [previewer updateWithBibTeXString:nil];
-        [view setFrame:[currentPreviewView frame]];
-        [[currentPreviewView superview] replaceSubview:currentPreviewView 
with:view];
-        currentPreviewView = view;
-    }
-    
-}    
-
-- (void)displayAttributedTextPreviewInPreviewPane{
-    
-    //int displayType = [[OFPreferenceWrapper sharedPreferenceWrapper] 
integerForKey:BDSKPreviewDisplayKey];
-
-    NSView *view = [previewTextView enclosingScrollView];
-
-    if(currentPreviewView != view){
-        [[previewer progressOverlay] remove];
-        [previewer updateWithBibTeXString:nil];
-        [view setFrame:[currentPreviewView frame]];
-        [[currentPreviewView superview] replaceSubview:currentPreviewView 
with:view];
-        currentPreviewView = view;
-    }
-    
-    if(NSIsEmptyRect([previewTextView visibleRect]))
+    if([textView isHidden] || NSIsEmptyRect([textView visibleRect]))
         return;
     
     /*
@@ -3260,13 +3189,13 @@
     if (maxItems > 0 && [items count] > maxItems)
         items = [items subarrayWithRange:NSMakeRange(0, maxItems)];
     
-    NSTextStorage *textStorage = [previewTextView textStorage];
+    NSTextStorage *textStorage = [textView textStorage];
     
     // do this _before_ messing with the text storage; otherwise you can have 
a leftover selection that ends up being out of range
     NSRange zeroRange = NSMakeRange(0, 0);
     static NSArray *zeroRanges = nil;
     if(!zeroRanges) zeroRanges = [[NSArray alloc] initWithObjects:[NSValue 
valueWithRange:zeroRange], nil];
-    [previewTextView setSelectedRanges:zeroRanges];
+    [textView setSelectedRanges:zeroRanges];
     
     NSLayoutManager *layoutManager = [[textStorage layoutManagers] lastObject];
     [layoutManager retain];
@@ -3324,7 +3253,7 @@
         case BDSKTemplatePreviewDisplay:
 */
             {
-                BDSKTemplate *template = [BDSKTemplate 
templateForStyle:previewDisplayTemplate];
+                BDSKTemplate *template = [BDSKTemplate 
templateForStyle:templateName];
                 if (template == nil)
                     template = [BDSKTemplate templateForStyle:[BDSKTemplate 
defaultStyleNameForFileType:@"rtf"]];
                 NSAttributedString *templateString;
@@ -3352,117 +3281,53 @@
     [layoutManager release];
     
     if([NSString isEmptyString:[searchField stringValue]] == NO)
-        [previewTextView highlightComponentsOfSearchString:[searchField 
stringValue]];    
+        [textView highlightComponentsOfSearchString:[searchField 
stringValue]];    
 }
 
-- (void)updatePreviewPane{
-    if(previewDisplay == BDSKPreviewDisplayTeX){
-        [self displayTeXPreviewInPreviewPane];
-    }else if(previewDisplay == BDSKPreviewDisplayFiles){
-        [self displayFileViewInPreviewPane];
-    }else{
-        [self displayAttributedTextPreviewInPreviewPane];
+- (void)prepareForTeXPreview {
+    if(bottomPreviewDisplay == BDSKPreviewDisplayTeX && previewer == nil && 
[[OFPreferenceWrapper sharedPreferenceWrapper] boolForKey:BDSKUsesTeXKey]){
+        previewer = [[BDSKPreviewer alloc] init];
+        NSDictionary *xatrrDefaults = [self 
mainWindowSetupDictionaryFromExtendedAttributes];
+        [previewer setPDFScaleFactor:[xatrrDefaults 
floatForKey:BDSKPreviewPDFScaleFactorKey defaultValue:0.0]];
+        [previewer setRTFScaleFactor:[xatrrDefaults 
floatForKey:BDSKPreviewRTFScaleFactorKey defaultValue:1.0]];
+        BDSKEdgeView *previewerBox = [[[BDSKEdgeView alloc] init] autorelease];
+        [previewerBox setEdges:BDSKEveryEdgeMask];
+        [previewerBox setColor:[NSColor lightGrayColor] forEdge:NSMaxYEdge];
+        [previewerBox setContentView:[previewer pdfView]];
+        [[bottomPreviewTabView tabViewItemAtIndex:BDSKPreviewDisplayTeX] 
setView:previewerBox];
     }
+    [[previewer progressOverlay] overlayView:bottomPreviewTabView];
 }
 
-- (void)displayFileViewInSidePreviewPane{
-    NSView *view = [fileView enclosingScrollView];
-    if(currentSidePreviewView != view){
-        [view setFrame:[currentSidePreviewView frame]];
-        [[currentSidePreviewView superview] 
replaceSubview:currentSidePreviewView with:view];
-        currentSidePreviewView = view;
-    }
-}    
+- (void)cleanupAfterTeXPreview {
+    [[previewer progressOverlay] remove];
+    [previewer updateWithBibTeXString:nil];
+}
 
-- (void)displayAttributedTextPreviewInSidePreviewPane{
-    
-    if (sidePreviewTextView == nil) {
-        sidePreviewTextView = [[BDSKPreviewTextView alloc] init];
-        [sidePreviewTextView setBackgroundColor:[NSColor 
controlBackgroundColor]];
-        [sidePreviewTextView setEditable:NO];
-        [sidePreviewTextView setSelectable:YES];
-        [sidePreviewTextView setRichText:YES];
-        [sidePreviewTextView setUsesFontPanel:YES];
-        [sidePreviewTextView setAutoresizingMask:NSViewWidthSizable | 
NSViewHeightSizable];
-        
-        NSScrollView *scrollView = [[NSScrollView alloc] init];
-        [scrollView setHasHorizontalScroller:YES];
-        [scrollView setHasVerticalScroller:YES];
-        [scrollView setAutohidesScrollers:YES];
-        [scrollView setBorderType:NSBezelBorder];
-        [scrollView setDrawsBackground:YES];
-        [scrollView setBackgroundColor:[NSColor controlBackgroundColor]];
-        [scrollView setDocumentView:sidePreviewTextView];
-        [scrollView setAutoresizingMask:NSViewWidthSizable | 
NSViewHeightSizable];
-        [sidePreviewTextView release];
-        
-        [sidePreviewTextView setDelegate:self];
+- (void)updateBottomPreviewPane{
+    int tabIndex = [bottomPreviewTabView 
indexOfTabViewItem:[bottomPreviewTabView selectedTabViewItem]];
+    if (tabIndex != bottomPreviewDisplay) {
+        if (tabIndex == BDSKPreviewDisplayTeX)
+            [self cleanupAfterTeXPreview];
+        else if (bottomPreviewDisplay == BDSKPreviewDisplayTeX)
+            [self prepareForTeXPreview];
+        [bottomPreviewTabView selectTabViewItemAtIndex:bottomPreviewDisplay];
     }
-
-    NSView *view = [sidePreviewTextView enclosingScrollView];
-
-    if(currentSidePreviewView != view){
-        [view setFrame:[currentSidePreviewView frame]];
-        [[currentSidePreviewView superview] 
replaceSubview:currentSidePreviewView with:view];
-        currentSidePreviewView = view;
-    }
     
-    if(NSIsEmptyRect([sidePreviewTextView visibleRect]))
-        return;
-    
-    NSArray *items = [self selectedPublications];
-    unsigned int maxItems = [[OFPreferenceWrapper sharedPreferenceWrapper] 
integerForKey:BDSKPreviewMaxNumberKey];
-    
-    if (maxItems > 0 && [items count] > maxItems)
-        items = [items subarrayWithRange:NSMakeRange(0, maxItems)];
-    
-    NSTextStorage *textStorage = [sidePreviewTextView textStorage];
-    
-    // do this _before_ messing with the text storage; otherwise you can have 
a leftover selection that ends up being out of range
-    NSRange zeroRange = NSMakeRange(0, 0);
-    static NSArray *zeroRanges = nil;
-    if(!zeroRanges) zeroRanges = [[NSArray alloc] initWithObjects:[NSValue 
valueWithRange:zeroRange], nil];
-    [sidePreviewTextView setSelectedRanges:zeroRanges];
-    
-    NSLayoutManager *layoutManager = [[textStorage layoutManagers] lastObject];
-    [layoutManager retain];
-    [textStorage removeLayoutManager:layoutManager]; // optimization: make 
sure the layout manager doesn't do any work while we're loading
-    
-    [textStorage beginEditing];
-    [[textStorage mutableString] setString:@""];
-    
-    BDSKTemplate *template = [BDSKTemplate 
templateForStyle:sidePreviewDisplayTemplate];
-    if (template == nil)
-        template = [BDSKTemplate templateForStyle:[BDSKTemplate 
defaultStyleNameForFileType:@"rtf"]];
-    NSAttributedString *templateString;
-    
-    // make sure this is really one of the attributed string types...
-    if([template templateFormat] & BDSKRichTextTemplateFormat){
-        templateString = [BDSKTemplateObjectProxy 
attributedStringByParsingTemplate:template withObject:self publications:items 
documentAttributes:NULL];
-        [textStorage appendAttributedString:templateString];
-    } else if([template templateFormat] & BDSKTextTemplateFormat){
-        // parse as plain text, so the HTML is interpreted properly by 
NSAttributedString
-        NSString *str = [BDSKTemplateObjectProxy 
stringByParsingTemplate:template withObject:self publications:items];
-        // we generally assume UTF-8 encoding for all template-related files
-        templateString = [[NSAttributedString alloc] initWithHTML:[str 
dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:NULL];
-        [textStorage appendAttributedString:templateString];
-        [templateString release];
-    }
-    
-    [textStorage endEditing];
-    [textStorage addLayoutManager:layoutManager];
-    [layoutManager release];
-    
-    if([NSString isEmptyString:[searchField stringValue]] == NO)
-        [sidePreviewTextView highlightComponentsOfSearchString:[searchField 
stringValue]];    
+    if (bottomPreviewDisplay == BDSKPreviewDisplayText)
+        [self displayTemplatedPreview:bottomPreviewDisplayTemplate 
inTextView:bottomPreviewTextView];
+    else if (bottomPreviewDisplay == BDSKPreviewDisplayTeX)
+        [self updatePreviewer:previewer];
 }
 
 - (void)updateSidePreviewPane{
-    if(sidePreviewDisplay == BDSKPreviewDisplayFiles){
-        [self displayFileViewInSidePreviewPane];
-    }else{
-        [self displayAttributedTextPreviewInSidePreviewPane];
+    int tabIndex = [sidePreviewTabView indexOfTabViewItem:[sidePreviewTabView 
selectedTabViewItem]];
+    if (tabIndex != sidePreviewDisplay) {
+        [sidePreviewTabView selectTabViewItemAtIndex:sidePreviewDisplay];
     }
+    
+    if (sidePreviewDisplay == BDSKPreviewDisplayText)
+        [self displayTemplatedPreview:sidePreviewDisplayTemplate 
inTextView:sidePreviewTextView];
 }
 
 #pragma mark FileView
@@ -3511,7 +3376,7 @@
     [shownFiles release];
     shownFiles = nil;
     
-    [fileView reloadIcons];
+    [sideFileView reloadIcons];
     [bottomFileView reloadIcons];
 }
 
@@ -3786,7 +3651,7 @@
 #pragma mark Template Menu
 
 - (void)menuNeedsUpdate:(NSMenu *)menu {
-    if (menu == templatePreviewMenu || menu == sideTemplatePreviewMenu) {
+    if (menu == bottomTemplatePreviewDisplayMenu || menu == 
sideTemplatePreviewMenu) {
         NSMutableArray *styles = [NSMutableArray arrayWithArray:[BDSKTemplate 
allStyleNamesForFileType:@"rtf"]];
         [styles addObjectsFromArray:[BDSKTemplate 
allStyleNamesForFileType:@"rtfd"]];
         [styles addObjectsFromArray:[BDSKTemplate 
allStyleNamesForFileType:@"doc"]];
@@ -3798,7 +3663,7 @@
         NSEnumerator *styleEnum = [styles objectEnumerator];
         NSString *style;
         NSMenuItem *item;
-        SEL action = menu == templatePreviewMenu ? 
@selector(changePreviewDisplay:) : @selector(changeSidePreviewDisplay:);
+        SEL action = menu == bottomTemplatePreviewDisplayMenu ? 
@selector(changePreviewDisplay:) : @selector(changeSidePreviewDisplay:);
         
         while (style = [styleEnum nextObject]) {
             item = [menu addItemWithTitle:style action:action 
keyEquivalent:@""];
@@ -3813,31 +3678,29 @@
 #pragma mark Printing support
 
 - (IBAction)printDocument:(id)sender{
-    if([currentPreviewView isEqual:previewerBox])
+    if(bottomPreviewDisplay == BDSKPreviewDisplayTeX)
         [[previewer pdfView] printWithInfo:[self printInfo] autoRotate:NO];
-    else if([currentPreviewView isEqual:previewBox])
-        [previewPdfView printWithInfo:[self printInfo] autoRotate:NO];
     else
         [super printDocument:sender];
 }
 
 - (NSView *)printableView{
     id printableView = nil;
-    if(previewDisplay == BDSKPreviewDisplayTeX){
+    if(bottomPreviewDisplay == BDSKPreviewDisplayTeX){
         // we don't reach this, we let the pdfView do the printing
         printableView = [previewer pdfView]; 
-    }else if(previewDisplay == BDSKPreviewDisplayText || sidePreviewDisplay == 
BDSKPreviewDisplayText){
+    }else if(bottomPreviewDisplay == BDSKPreviewDisplayText || 
sidePreviewDisplay == BDSKPreviewDisplayText){
         printableView = [[[BDSKPrintableView alloc] initForScreenDisplay:NO] 
autorelease];
         NSTextStorage *ts = nil;
-        if (previewDisplay == BDSKPreviewDisplayText)
-            ts = [previewTextView textStorage];
+        if (bottomPreviewDisplay == BDSKPreviewDisplayText)
+            ts = [bottomPreviewTextView textStorage];
         else
             ts = [sidePreviewTextView textStorage];
         if (ts)
             [printableView setAttributedString:ts];
         else
             [printableView setString:NSLocalizedString(@"Error: nothing to 
print from document preview", @"printing error")];
-        [printableView setAttributedString:[previewTextView textStorage]];    
+        [printableView setAttributedString:[bottomPreviewTextView 
textStorage]];    
     }
     return printableView;
 }

Modified: trunk/bibdesk/BibDocument_Actions.m
===================================================================
--- trunk/bibdesk/BibDocument_Actions.m 2008-03-05 14:55:26 UTC (rev 12972)
+++ trunk/bibdesk/BibDocument_Actions.m 2008-03-05 14:58:09 UTC (rev 12973)
@@ -1087,19 +1087,19 @@
     NSString *style = [sender respondsToSelector:@selector(representedObject)] 
? [sender representedObject] : nil;
     BOOL changed = NO;
     
-    if (previewDisplay != tag) {
-        previewDisplay = tag;
+    if (bottomPreviewDisplay != tag) {
+        bottomPreviewDisplay = tag;
         changed = YES;
     }
-    if (tag == BDSKPreviewDisplayText && style && NO == [style 
isEqualToString:previewDisplayTemplate]) {
-        [previewDisplayTemplate release];
-        previewDisplayTemplate = [style retain];
+    if (tag == BDSKPreviewDisplayText && style && NO == [style 
isEqualToString:bottomPreviewDisplayTemplate]) {
+        [bottomPreviewDisplayTemplate release];
+        bottomPreviewDisplayTemplate = [style retain];
         changed = YES;
     }
     if (changed) {
-        [self updatePreviewPane];
-        if ([sender isEqual:previewButton] == NO)
-            [previewButton selectSegmentWithTag:previewDisplay];
+        [self updateBottomPreviewPane];
+        if ([sender isEqual:bottomPreviewButton] == NO)
+            [bottomPreviewButton selectSegmentWithTag:bottomPreviewDisplay];
     }
 }
 
@@ -1127,12 +1127,12 @@
 - (void)pageDownInPreview:(id)sender{
     NSScrollView *scrollView = nil;
     
-    if([currentPreviewView isEqual:previewerBox])
+    if(bottomPreviewDisplay == BDSKPreviewDisplayText)
+        scrollView = [bottomPreviewTextView enclosingScrollView];
+    else if(bottomPreviewDisplay == BDSKPreviewDisplayFiles)
+        scrollView = [bottomFileView enclosingScrollView];
+    else if(bottomPreviewDisplay == BDSKPreviewDisplayTeX)
         scrollView = [(BDSKZoomablePDFView *)[previewer pdfView] scrollView];
-    else if([currentPreviewView isEqual:previewBox])
-        scrollView = [previewPdfView scrollView];
-    else
-        scrollView = (NSScrollView *)currentPreviewView;
     
     NSPoint p = [[scrollView documentView] scrollPositionAsPercentage];
     
@@ -1152,12 +1152,12 @@
 - (void)pageUpInPreview:(id)sender{
     NSScrollView *scrollView = nil;
     
-    if([currentPreviewView isEqual:previewerBox])
+    if(bottomPreviewDisplay == BDSKPreviewDisplayText)
+        scrollView = [bottomPreviewTextView enclosingScrollView];
+    else if(bottomPreviewDisplay == BDSKPreviewDisplayFiles)
+        scrollView = [bottomFileView enclosingScrollView];
+    else if(bottomPreviewDisplay == BDSKPreviewDisplayTeX)
         scrollView = [(BDSKZoomablePDFView *)[previewer pdfView] scrollView];
-    else if([currentPreviewView isEqual:previewBox])
-        scrollView = [previewPdfView scrollView];
-    else
-        scrollView = (NSScrollView *)currentPreviewView;
     
     NSPoint p = [[scrollView documentView] scrollPositionAsPercentage];
     

Modified: trunk/bibdesk/BibDocument_Search.m
===================================================================
--- trunk/bibdesk/BibDocument_Search.m  2008-03-05 14:55:26 UTC (rev 12972)
+++ trunk/bibdesk/BibDocument_Search.m  2008-03-05 14:58:09 UTC (rev 12973)
@@ -359,14 +359,11 @@
 
 - (NSString *)selectedStringForFind;
 {
-    if([currentPreviewView isHidden])
-        return nil;
-    if([currentPreviewView isEqual:previewerBox]){
+    // @@ should check hidden?
+    if (bottomPreviewDisplay == BDSKPreviewDisplayTeX) {
         return [[[previewer pdfView] currentSelection] string];
-    }else if([currentPreviewView isEqual:previewBox]){
-        return [[previewPdfView currentSelection] string];
-    }else{
-        NSTextView *textView = (NSTextView *)[(NSScrollView 
*)currentPreviewView documentView];
+    } else if(bottomPreviewDisplay == BDSKPreviewDisplayText || 
sidePreviewDisplay == BDSKPreviewDisplayText) {
+        NSTextView *textView = bottomPreviewDisplay == BDSKPreviewDisplayText 
? bottomPreviewTextView : sidePreviewTextView;
         NSRange selRange = [textView selectedRange];
         if (selRange.location == NSNotFound)
             return nil;
@@ -378,8 +375,11 @@
 // OAFindControllerAware informal protocol
 - (id <OAFindControllerTarget>)omniFindControllerTarget;
 {
-    if([currentPreviewView isKindOfClass:[NSScrollView class]] && 
[currentPreviewView isHidden] == NO)
-        return [(NSScrollView *)currentPreviewView documentView];
+    // @@ should check hidden?
+    if (bottomPreviewDisplay == BDSKPreviewDisplayText)
+        return bottomPreviewTextView;
+    else if (sidePreviewDisplay == BDSKPreviewDisplayText)
+        return sidePreviewTextView;
     else
         return nil;
 }
@@ -391,8 +391,10 @@
         case NSFindPanelActionShowFindPanel:
         case NSFindPanelActionNext:
         case NSFindPanelActionPrevious:
-            if([currentPreviewView isKindOfClass:[NSScrollView class]] && 
[currentPreviewView isHidden] == NO)
-                [(NSTextView *)[(NSScrollView *)currentPreviewView 
documentView] performFindPanelAction:sender];
+            if(bottomPreviewDisplay == BDSKPreviewDisplayText)
+               [bottomPreviewTextView performFindPanelAction:sender];
+            else if(sidePreviewDisplay == BDSKPreviewDisplayText)
+               [sidePreviewTextView performFindPanelAction:sender];
             else
                 NSBeep();
             break;
@@ -406,7 +408,10 @@
                 [searchField selectText:nil];
             } else {
                 [[BDSKFindController sharedFindController] 
setFindString:selString];
-                [previewTextView performFindPanelAction:sender];
+                if(bottomPreviewDisplay == BDSKPreviewDisplayText)
+                   [bottomPreviewTextView performFindPanelAction:sender];
+                else if(sidePreviewDisplay == BDSKPreviewDisplayText)
+                   [sidePreviewTextView performFindPanelAction:sender];
             }
             break;
         default:


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to