зеркало из https://github.com/mozilla/pjs.git
162 строки
3.3 KiB
Plaintext
162 строки
3.3 KiB
Plaintext
#import "MyBrowserView.h"
|
|
|
|
#define DOCUMENT_DONE_STRING @"Document: Done"
|
|
#define LOADING_STRING @"Loading..."
|
|
|
|
@implementation MyBrowserView
|
|
|
|
- (IBAction)load:(id)sender
|
|
{
|
|
NSString* str = [urlbar stringValue];
|
|
NSURL* url = [NSURL URLWithString:str];
|
|
[browserView loadURI:url flags:NSLoadFlagsNone];
|
|
}
|
|
|
|
- (void)awakeFromNib
|
|
{
|
|
NSRect bounds = [self bounds];
|
|
browserView = [[NSBrowserView alloc] initWithFrame:bounds];
|
|
[self addSubview:browserView];
|
|
[browserView setContainer:self];
|
|
[browserView addListener:self];
|
|
|
|
defaultStatus = NULL;
|
|
loadingStatus = DOCUMENT_DONE_STRING;
|
|
[status setStringValue:loadingStatus];
|
|
|
|
[progress retain];
|
|
[progress removeFromSuperview];
|
|
}
|
|
|
|
- (void)setFrame:(NSRect)frameRect
|
|
{
|
|
[super setFrame:frameRect];
|
|
NSRect bounds = [self bounds];
|
|
[browserView setFrame:bounds];
|
|
}
|
|
|
|
- (void)onLoadingStarted
|
|
{
|
|
if (defaultStatus) {
|
|
[defaultStatus release];
|
|
defaultStatus = NULL;
|
|
}
|
|
|
|
[progressSuper addSubview:progress];
|
|
[progress release];
|
|
[progress setIndeterminate:YES];
|
|
[progress startAnimation:self];
|
|
|
|
loadingStatus = LOADING_STRING;
|
|
[status setStringValue:loadingStatus];
|
|
|
|
#ifdef DEBUG_vidur
|
|
printf("Starting to load\n");
|
|
#endif
|
|
}
|
|
|
|
- (void)onLoadingCompleted:(BOOL)succeeded
|
|
{
|
|
[progress setIndeterminate:YES];
|
|
[progress stopAnimation:self];
|
|
[progress retain];
|
|
[progress removeFromSuperview];
|
|
|
|
loadingStatus = DOCUMENT_DONE_STRING;
|
|
if (defaultStatus) {
|
|
[status setStringValue:defaultStatus];
|
|
}
|
|
else {
|
|
[status setStringValue:loadingStatus];
|
|
}
|
|
|
|
#ifdef DEBUG_vidur
|
|
printf("Loading completed\n");
|
|
#endif
|
|
}
|
|
|
|
- (void)onProgressChange:(int)currentBytes outOf:(int)maxBytes
|
|
{
|
|
if (maxBytes > 0) {
|
|
BOOL isIndeterminate = [progress isIndeterminate];
|
|
if (isIndeterminate) {
|
|
[progress setIndeterminate:NO];
|
|
}
|
|
double val = ((double)currentBytes / (double)maxBytes) * 100.0;
|
|
[progress setDoubleValue:val];
|
|
#ifdef DEBUG_vidur
|
|
printf("Progress notification: %f%%\n", val);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
- (void)onLocationChange:(NSURL*)url
|
|
{
|
|
NSString* spec = [url absoluteString];
|
|
[urlbar setStringValue:spec];
|
|
|
|
#ifdef DEBUG_vidur
|
|
const char* str = [spec cString];
|
|
printf("Location changed to: %s\n", str);
|
|
#endif
|
|
}
|
|
|
|
- (void)setStatus:(NSString *)statusString ofType:(NSStatusType)type
|
|
{
|
|
if (type == NSStatusTypeScriptDefault) {
|
|
if (defaultStatus) {
|
|
[defaultStatus release];
|
|
}
|
|
defaultStatus = statusString;
|
|
if (defaultStatus) {
|
|
[defaultStatus retain];
|
|
}
|
|
}
|
|
else if (!statusString) {
|
|
if (defaultStatus) {
|
|
[status setStringValue:defaultStatus];
|
|
}
|
|
else {
|
|
[status setStringValue:loadingStatus];
|
|
}
|
|
}
|
|
else {
|
|
[status setStringValue:statusString];
|
|
}
|
|
}
|
|
|
|
- (NSString *)title
|
|
{
|
|
NSWindow* window = [self window];
|
|
NSString* str = [window title];
|
|
return str;
|
|
}
|
|
|
|
- (void)setTitle:(NSString *)title
|
|
{
|
|
NSWindow* window = [self window];
|
|
[window setTitle:title];
|
|
}
|
|
|
|
- (void)sizeBrowserTo:(NSSize)dimensions
|
|
{
|
|
NSRect bounds = [self bounds];
|
|
float dx = dimensions.width - bounds.size.width;
|
|
float dy = dimensions.height - bounds.size.height;
|
|
|
|
NSWindow* window = [self window];
|
|
NSRect frame = [window frame];
|
|
frame.size.width += dx;
|
|
frame.size.height += dy;
|
|
|
|
[window setFrame:frame display:YES];
|
|
}
|
|
|
|
- (NSBrowserView*)createBrowserWindow:(unsigned int)mask
|
|
{
|
|
// XXX not implemented
|
|
return NULL;
|
|
}
|
|
|
|
@end
|