123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*************************************************************************
- * 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 "GVExportViewController.h"
- #import "GVZGraph.h"
- static NSMutableArray *_formatRenders = nil;
- @implementation GVExportViewController
- @synthesize URL = _url;
- @synthesize render = _render;
- + (void)initialize
- {
- if (!_formatRenders) {
- _formatRenders = [[NSMutableArray alloc] init];
-
- NSString *lastFormat = nil;
- NSMutableArray *lastRenders = nil;
- for (NSString *device in [GVZGraph pluginsWithAPI:API_device]) {
- NSArray *deviceComponents = [device componentsSeparatedByString:@":"];
- NSUInteger componentCount = [deviceComponents count];
-
- if (componentCount > 0) {
- NSString *format = [deviceComponents objectAtIndex:0];
- if (![lastFormat isEqualToString:format]) {
- lastFormat = format;
- lastRenders = [NSMutableArray array];
- [_formatRenders addObject:[NSDictionary dictionaryWithObjectsAndKeys:lastFormat, @"format", lastRenders, @"renders", nil]];
- }
- }
-
- if (componentCount > 1)
- [lastRenders addObject:[deviceComponents objectAtIndex:1]];
- }
- }
- }
- - (id)init
- {
- if (self = [super initWithNibName:@"Export" bundle:nil]) {
- _panel = nil;
- _url = nil;
-
- _formatRender = nil;
- _render = nil;
- for (NSDictionary *formatRender in _formatRenders)
- if ([[formatRender objectForKey:@"format"] isEqualToString:@"pdf"]) {
- _formatRender = [formatRender retain];
- if ([[formatRender objectForKey:@"renders"] containsObject:@"quartz"])
- _render = @"quartz";
- break;
- }
- }
- return self;
- }
- - (NSArray *)formatRenders
- {
- return _formatRenders;
- }
- - (NSString *)device
- {
- NSString *format = [_formatRender objectForKey:@"format"];
- return _render ? [NSString stringWithFormat:@"%@:%@", format, _render] : format;
- }
- - (NSDictionary *)formatRender
- {
- return _formatRender;
- }
- - (void)setFormatRender:(NSDictionary *)formatRender
- {
- if (_formatRender != formatRender) {
- [_formatRender release];
- _formatRender = [formatRender retain];
-
- /* force save panel to use this file type */
- [_panel setAllowedFileTypes:[NSArray arrayWithObject:[_formatRender objectForKey:@"format"]]];
-
- /* remove existing render if it's not compatible with format */
- if (![[_formatRender objectForKey:@"renders"] containsObject:_render])
- [self setRender:nil];
- }
- }
- - (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)modalDelegate didEndSelector:(SEL)selector
- {
- /* remember to invoke end selector on the modal delegate */
- NSInvocation *endInvocation = [NSInvocation invocationWithMethodSignature:[modalDelegate methodSignatureForSelector:selector]];
- [endInvocation setTarget:modalDelegate];
- [endInvocation setSelector:selector];
- [endInvocation setArgument:&self atIndex:2];
- [endInvocation retain];
- _panel = [NSSavePanel savePanel];
- [_panel setAccessoryView:[self view]];
- [_panel setAllowedFileTypes:[NSArray arrayWithObject:[_formatRender objectForKey:@"format"]]];
- [_panel setDirectoryURL:[_url URLByDeletingLastPathComponent]];
- [_panel setNameFieldStringValue:[_url lastPathComponent]];
- [_panel beginSheetModalForWindow:window completionHandler:^(NSInteger result) {
- if (result == NSOKButton) {
- NSURL *url = [_panel URL];
- if (_url != url) {
- [_url release];
- _url = [url retain];
- }
- /* invoke the end selector on the modal delegate */
- [endInvocation invoke];
- }
- [endInvocation release];
- [_panel setAccessoryView:nil];
- _panel = nil;
- }];
- }
- - (void)dealloc
- {
- [_panel release];
- [_url release];
- [_formatRender release];
- [_render release];
- [super dealloc];
- }
- @end
|