123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*************************************************************************
- * Copyright (c) 2011 AT&T Intellectual Property
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors: Details at http://www.graphviz.org/
- *************************************************************************/
- #import "GVWindowController.h"
- #import "GVZGraph.h"
- #import "GVDocument.h"
- @implementation GVWindowController
- - (id)init
- {
- if (self = [super initWithWindowNibName: @"Document"])
- ;
- return self;
- }
- - (void)setDocument: (NSDocument *)document
- {
- NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
-
- GVDocument *oldDocument = [self document];
- if (oldDocument)
- [defaultCenter removeObserver:self name:@"GVGraphDocumentDidChange" object:oldDocument];
- [super setDocument:document];
- [defaultCenter addObserver:self selector:@selector(graphDocumentDidChange:) name:@"GVGraphDocumentDidChange" object:document];
- }
- - (void)awakeFromNib
- {
- [self graphDocumentDidChange:nil];
-
- /* if window is not at standard size, make it standard size */
- NSWindow *window = [self window];
- if (![window isZoomed])
- [window zoom:self];
- [documentView setDelegate:self];
- }
- - (void)graphDocumentDidChange:(NSNotification*)notification
- {
- /* whenever the graph changes, rerender its PDF and display that */
- GVDocument *document = [self document];
- if ([document respondsToSelector:@selector(graph)])
- [documentView setDocument:[[[PDFDocument alloc] initWithData:[[document graph] renderWithFormat:@"pdf:quartz"]] autorelease]];
- }
- - (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)defaultFrame
- {
- /* standard size for zooming is whatever will fit the content exactly */
- NSRect currentFrame = [window frame];
- NSRect standardFrame = [window frameRectForContentRect:[[documentView documentView] bounds]];
- standardFrame.origin.x = currentFrame.origin.x;
- standardFrame.origin.y = currentFrame.origin.y + currentFrame.size.height - standardFrame.size.height;
- return standardFrame;
- }
- - (IBAction)actualSizeView:(id)sender
- {
- [documentView setScaleFactor:1.0];
- }
- - (IBAction)zoomInView:(id)sender
- {
- [documentView zoomIn:sender];
- }
- - (IBAction)zoomOutView:(id)sender
- {
- [documentView zoomOut:sender];
- }
- - (IBAction)zoomToFitView:(id)sender
- {
- [documentView setAutoScales:YES];
- [documentView setAutoScales:NO];
- }
- - (IBAction)printGraphDocument:(id)sender
- {
- [documentView printWithInfo:[[self document] printInfo] autoRotate:NO pageScaling:kPDFPrintPageScaleDownToFit];
- }
- - (void)PDFViewWillClickOnLink:(PDFView *)sender withURL:(NSURL *)URL
- {
- NSURL* baseURL = [[self document] fileURL];
- NSURL* targetURL = [NSURL URLWithString:[URL absoluteString] relativeToURL:baseURL];
- [[NSWorkspace sharedWorkspace] openURL:targetURL];
- }
- - (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem
- {
- /* validate toolbar or menu items */
- if ([anItem action] == @selector(actualSizeView:))
- return YES;
- else if ([anItem action] == @selector(zoomInView:))
- return [documentView canZoomIn];
- else if ([anItem action] == @selector(zoomOutView:))
- return [documentView canZoomOut];
- else if ([anItem action] == @selector(zoomToFitView:))
- return YES;
- else if ([anItem action] == @selector(printGraphDocument:))
- return YES;
- else
- return NO;
- }
- - (void)dealloc
- {
- [[NSNotificationCenter defaultCenter] removeObserver:self name:@"GVGraphDocumentDidChange" object:[self document]];
- [super dealloc];
- }
- @end
|