From d21447d096a320a08b3efb2b8768fad0dcdcfd64 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 5 May 2016 22:28:51 +0100 Subject: move frontends into sub directory --- frontends/cocoa/BookmarksController.m | 223 ++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 frontends/cocoa/BookmarksController.m (limited to 'frontends/cocoa/BookmarksController.m') diff --git a/frontends/cocoa/BookmarksController.m b/frontends/cocoa/BookmarksController.m new file mode 100644 index 000000000..0bd51b273 --- /dev/null +++ b/frontends/cocoa/BookmarksController.m @@ -0,0 +1,223 @@ +/* + * Copyright 2011 Sven Weidauer + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "utils/messages.h" +#import "utils/utils.h" +#import "desktop/browser.h" +#import "desktop/hotlist.h" +#import "desktop/tree.h" +#import "content/hlcache.h" + +#import "cocoa/BookmarksController.h" +#import "cocoa/Tree.h" +#import "cocoa/TreeView.h" +#import "cocoa/NetsurfApp.h" +#import "cocoa/BrowserViewController.h" +#import "cocoa/gui.h" + + +@interface BookmarksController () +- (void) noteAppWillTerminate: (NSNotification *) note; +- (void) save; +@end + +@implementation BookmarksController + +@synthesize defaultMenu; +@synthesize view; + +static const char *cocoa_hotlist_path( void ) +{ + NSString *path = [[NSUserDefaults standardUserDefaults] + stringForKey: kHotlistFileOption]; + return [path UTF8String]; +} + +- (id)init +{ + if ((self = [super initWithWindowNibName: @"BookmarksWindow"]) == nil) { + return nil; + } + tree_hotlist_path = cocoa_hotlist_path(); + tree = [[Tree alloc] initWithFlags: TREE_HOTLIST]; + nodeForMenu = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, + NSNonOwnedPointerMapValueCallBacks, + 0); + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(noteAppWillTerminate:) + name:NSApplicationWillTerminateNotification + object:NSApp]; + + return self; +} + +- (void) noteAppWillTerminate: (NSNotification *)note +{ + [self save]; +} + +- (void) save +{ + hotlist_export( cocoa_hotlist_path(), NULL ); +} + +- (void) dealloc +{ + [self setView: nil]; + NSFreeMapTable( nodeForMenu ); + [tree release]; + + [[NSNotificationCenter defaultCenter] removeObserver: self]; + + [super dealloc]; +} + +- (void) menuNeedsUpdate: (NSMenu *)menu +{ +#if 0 + for (NSMenuItem *item in [menu itemArray]) { + if ([item hasSubmenu]) NSMapRemove( nodeForMenu, [item submenu] ); + [menu removeItem: item]; + } + + bool hasSeparator = true; + struct node *node = (struct node *)NSMapGet( nodeForMenu, menu ); + if (node == NULL) { + for (NSMenuItem *item in [defaultMenu itemArray]) { + [menu addItem: [[item copy] autorelease]]; + } + hasSeparator = false; + } + + for (struct node *child = tree_node_get_child( node ); + child != NULL; + child = tree_node_get_next( child )) { + + if (tree_node_is_deleted( child )) continue; + + if (!hasSeparator) { + [menu addItem: [NSMenuItem separatorItem]]; + hasSeparator = true; + } + + NSString *title = [NSString stringWithUTF8String: tree_url_node_get_title( child )]; + + NSMenuItem *item = [menu addItemWithTitle: title action: NULL keyEquivalent: @""]; + if (tree_node_is_folder( child )) { + NSMenu *subMenu = [[[NSMenu alloc] initWithTitle: title] autorelease]; + NSMapInsert( nodeForMenu, subMenu, child ); + [subMenu setDelegate: self]; + [menu setSubmenu: subMenu forItem: item]; + } else { + [item setRepresentedObject: [NSString stringWithUTF8String: tree_url_node_get_url( child )]]; + [item setTarget: self]; + [item setAction: @selector( openBookmarkURL: )]; + } + } +#endif +} + +- (IBAction) openBookmarkURL: (id)sender +{ + const char *urltxt = [[sender representedObject] UTF8String]; + NSParameterAssert( urltxt != NULL ); + + nsurl *url; + nserror error; + + error = nsurl_create(urltxt, &url); + if (error == NSERROR_OK) { + BrowserViewController *tab = [(NetSurfApp *)NSApp frontTab]; + if (tab != nil) { + error = browser_window_navigate([tab browser], + url, + NULL, + BW_NAVIGATE_HISTORY, + NULL, + NULL, + NULL); + } else { + error = browser_window_create(BW_CREATE_HISTORY, + url, + NULL, + NULL, + NULL); + } + nsurl_unref(url); + } + if (error != NSERROR_OK) { + cocoa_warning(messages_get_errorcode(error), 0); + } +} + +- (IBAction) addBookmark: (id)sender +{ + struct browser_window *bw = [[(NetSurfApp *)NSApp frontTab] browser]; + if (bw != NULL) { + hotlist_add_url(browser_window_get_url(bw)); + } +} + +- (BOOL) validateUserInterfaceItem: (id)item +{ + SEL action = [item action]; + + if (action == @selector( addBookmark: )) { + return [(NetSurfApp *)NSApp frontTab] != nil; + } + + return YES; +} + +- (void) windowDidLoad +{ + hotlist_expand(false); + hotlist_contract(true); + + [view setTree: tree]; +} + + ++ (void) initialize +{ + [[NSUserDefaults standardUserDefaults] + registerDefaults: + [NSDictionary + dictionaryWithObjectsAndKeys:cocoa_get_user_path( @"Bookmarks.html" ), + kHotlistFileOption, + nil]]; +} + +- (IBAction) editSelected: (id)sender +{ + hotlist_edit_selection(); +} + +- (IBAction) deleteSelected: (id)sender +{ + hotlist_keypress(NS_KEY_DELETE_LEFT); +} + +- (IBAction) addFolder: (id)sender +{ + hotlist_add_folder(NULL, false, 0); +} + +@end -- cgit v1.2.3