pjs/embedding/tests/cocoaEmbed/MyBrowserView.mm

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