forked from tlrobinson/WebSaver
-
Notifications
You must be signed in to change notification settings - Fork 2
/
UKWebSaverView.m
175 lines (132 loc) · 5.09 KB
/
UKWebSaverView.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//
// UKWebSaverView.m
// WebSaver
//
// Created by Thomas Robinson on 10/13/09.
// Copyright (c) 2009, 280 North. All rights reserved.
//
#import "UKWebSaverView.h"
#import <WebKit/WebKit.h>
#import <AppKit/NSNibLoading.h>
NSString* UKWebSaverURL = @"UKWebSaverURL";
NSString* UKWebSaverScaleFactor = @"UKWebSaverScaleFactor";
NSString* UKWebSaver = @"UKWebSaver";
@implementation UKWebSaverView
-(id) initWithFrame: (NSRect)frame isPreview: (BOOL)isPreview
{
self = [super initWithFrame: frame isPreview: isPreview];
if( self )
{
webView = [[WebView alloc] initWithFrame:[ self bounds] frameName: nil groupName: nil];
[(NSScrollView*)webView setBackgroundColor: [NSColor blackColor]]; // Looks a little nicer on loading.
[self addSubview: webView];
NSRect spinnerBox = [self bounds];
spinnerBox.size.width = 800.0;
spinnerBox.size.height = 50.0;
spinnerBox = SSCenteredRectInRect( spinnerBox, [self bounds] );
pleaseWaitField = [[NSTextField alloc] initWithFrame: spinnerBox];
[pleaseWaitField setStringValue: @"One moment please…"];
[pleaseWaitField setFont: [NSFont systemFontOfSize: 48]];
[pleaseWaitField setAlignment: NSCenterTextAlignment];
[pleaseWaitField setTextColor: [NSColor whiteColor]];
[pleaseWaitField setDrawsBackground: NO];
[pleaseWaitField setBordered: NO];
[pleaseWaitField setBezeled: NO];
[pleaseWaitField setEditable: NO];
[[pleaseWaitField cell] setWraps: NO];
[self addSubview: pleaseWaitField];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(webViewProgressStarted:)
name: WebViewProgressStartedNotification
object: webView];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(webViewProgressFinished:)
name: WebViewProgressFinishedNotification
object: webView];
[self reloadSettings];
}
return self;
}
-(void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self name: WebViewProgressStartedNotification object: webView];
[[NSNotificationCenter defaultCenter] removeObserver: self name: WebViewProgressFinishedNotification object: webView];
[configureSheet release];
configureSheet = nil;
[webView release];
webView = nil;
[pleaseWaitField release];
pleaseWaitField = nil;
[super dealloc];
}
-(void) webViewProgressStarted: (NSNotification*)notif
{
[pleaseWaitField setHidden: NO];
}
-(void) webViewProgressFinished: (NSNotification*)notif
{
[pleaseWaitField setHidden: YES];
}
-(void) reloadSettings
{
if( !webView )
return;
// Set up any scaling:
NSNumber* scaleFactorObj = [[ScreenSaverDefaults defaultsForModuleWithName: UKWebSaver] objectForKey: UKWebSaverScaleFactor];
float scaleFactor = scaleFactorObj ? [scaleFactorObj floatValue] : 1.0;
[webView setTextSizeMultiplier: scaleFactor];
// Load URL:
NSString* urlString = [[ScreenSaverDefaults defaultsForModuleWithName: UKWebSaver] objectForKey: UKWebSaverURL];
if( !urlString ) // No URL? Use default.
urlString = [NSString stringWithFormat: @"file://%@/index.html", [[NSBundle bundleForClass:[self class]] resourcePath]];
[webView setMainFrameURL: urlString];
}
- (BOOL)hasConfigureSheet
{
return YES;
}
-(NSWindow*) configureSheet
{
// Create a sheet from the NIB, unless we already loaded it earlier:
if( !configureSheet )
{
NSBundle* myBundle = [NSBundle bundleForClass: [self class]];
[myBundle loadNibFile: [myBundle pathForResource: @"TANWebSaverConfigureSheet" ofType: @"nib"]
externalNameTable: [NSDictionary dictionaryWithObject: self forKey: @"NSOwner"] withZone: [self zone]];
}
// urlString == nil means default URL, so check the "default" radio, otherwise
// put the URL string in the edit field and check the other one:
NSString* urlString = [[ScreenSaverDefaults defaultsForModuleWithName: UKWebSaver] objectForKey: UKWebSaverURL];
[radioChoices selectCellAtRow: urlString ? 1 : 0 column: 0];
if( urlString )
[urlField setStringValue: urlString];
// Scale factor:
NSNumber* scaleFactorObj = [[ScreenSaverDefaults defaultsForModuleWithName: UKWebSaver] objectForKey: UKWebSaverScaleFactor];
float scaleFactor = scaleFactorObj ? [scaleFactorObj floatValue] : 1.0;
[scaleFactorSlider setDoubleValue: scaleFactor];
return configureSheet;
}
-(IBAction) doOKButton: (id)sender
{
[configureSheet orderOut: self];
// Use the user's radio choice to decide which URL to save:
if( [radioChoices selectedRow] == 0 )
[[ScreenSaverDefaults defaultsForModuleWithName: UKWebSaver] removeObjectForKey: UKWebSaverURL]; // No URL? Default.
else
[[ScreenSaverDefaults defaultsForModuleWithName: UKWebSaver] setObject: [urlField stringValue] forKey: UKWebSaverURL];
[[ScreenSaverDefaults defaultsForModuleWithName: UKWebSaver] setFloat: [scaleFactorSlider doubleValue] forKey: UKWebSaverScaleFactor];
[self reloadSettings];
[NSApp endSheet: configureSheet];
}
-(IBAction) doCancelButton: (id)sender
{
[configureSheet orderOut: self];
[NSApp endSheet: configureSheet];
}
-(void) setConfigureSheet: (NSWindow*)wd
{
if( configureSheet != wd )
{
[configureSheet release];
configureSheet = [wd retain];
}
}
@end