Create bookmark panel to allow customising the name and picking it's folder
This commit is contained in:
parent
1c352fe0f3
commit
d1a4382fdf
|
@ -13,6 +13,7 @@
|
|||
-(id)initWithName: (NSString*)aName parent: (BookmarkFolder*)aParent;
|
||||
-(BookmarkFolder*)parentFolder;
|
||||
-(NSArray*)children;
|
||||
-(NSArray*)childFolders;
|
||||
-(NSString*)name;
|
||||
-(BOOL)isRootFolder;
|
||||
-(BOOL)isUnsortedFolder;
|
||||
|
|
|
@ -9,7 +9,6 @@ per website. Bookmark folders just mirror the directory structure. Child items a
|
|||
lazy-loaded when requested.
|
||||
*/
|
||||
|
||||
static BookmarkFolder *cachedRootFolder;
|
||||
@interface BookmarkFolder(Private)
|
||||
-(NSString*)path;
|
||||
-(void)setPath: (NSString*)aPath;
|
||||
|
@ -31,9 +30,6 @@ static BookmarkFolder *cachedRootFolder;
|
|||
}
|
||||
|
||||
-(void)dealloc {
|
||||
if ([self isRootFolder]) {
|
||||
cachedRootFolder = nil;
|
||||
}
|
||||
[children release];
|
||||
[name release];
|
||||
[path release];
|
||||
|
@ -49,6 +45,19 @@ static BookmarkFolder *cachedRootFolder;
|
|||
return children;
|
||||
}
|
||||
|
||||
-(NSArray*)childFolders {
|
||||
NSMutableArray *folders = [NSMutableArray array];
|
||||
NSArray *allChildren = [self children];
|
||||
id child;
|
||||
for (NSUInteger i = 0; i < [allChildren count]; i++) {
|
||||
child = [allChildren objectAtIndex: i];
|
||||
if ([child isKindOfClass: [BookmarkFolder class]]) {
|
||||
[folders addObject: child];
|
||||
}
|
||||
}
|
||||
return folders;
|
||||
}
|
||||
|
||||
-(NSString*)name {
|
||||
return name;
|
||||
}
|
||||
|
@ -103,8 +112,9 @@ static BookmarkFolder *cachedRootFolder;
|
|||
}
|
||||
|
||||
+(BookmarkFolder*)rootBookmarkFolder {
|
||||
static BookmarkFolder *cachedRootFolder;
|
||||
if (cachedRootFolder != nil) {
|
||||
return [cachedRootFolder autorelease];
|
||||
return cachedRootFolder;
|
||||
}
|
||||
|
||||
NSString *rootPath = [NSHomeDirectory() stringByAppendingPathComponent:
|
||||
|
@ -114,8 +124,8 @@ static BookmarkFolder *cachedRootFolder;
|
|||
[[NSFileManager defaultManager] createDirectoryAtPath: unsortedPath attributes: nil];
|
||||
BookmarkFolder *rootFolder = [[BookmarkFolder alloc] initWithName: @"" parent: nil];
|
||||
[rootFolder setPath: rootPath];
|
||||
cachedRootFolder = rootFolder;
|
||||
return [rootFolder autorelease];
|
||||
cachedRootFolder = [rootFolder retain];
|
||||
return rootFolder;
|
||||
}
|
||||
|
||||
+(BookmarkFolder*)unsortedBookmarkFolder {
|
||||
|
|
|
@ -11,8 +11,19 @@
|
|||
return self;
|
||||
}
|
||||
|
||||
-(BOOL)windowShouldClose: (id)sender {
|
||||
[topLevelFolders release];
|
||||
topLevelFolders = nil;
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(void)onWindowAppeared {
|
||||
topLevelFolders = [[BookmarkFolder rootBookmarkFolder] children];
|
||||
topLevelFolders = [[[BookmarkFolder rootBookmarkFolder] children] retain];
|
||||
[outlineView reloadData];
|
||||
for (NSUInteger i = 0; i < [topLevelFolders count]; i++) {
|
||||
[outlineView expandItem: [topLevelFolders objectAtIndex: i]
|
||||
expandChildren: NO];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)awakeFromNib {
|
||||
|
@ -35,24 +46,36 @@
|
|||
}
|
||||
|
||||
|
||||
-(id)outlineView: (NSOutlineView*)outlineView child: (NSInteger)index ofItem: (id)item {
|
||||
return nil;
|
||||
-(id)outlineView: (NSOutlineView*)outlineView child: (NSInteger)index ofItem: (id)item {
|
||||
if (item == nil) {
|
||||
return [topLevelFolders objectAtIndex: index];
|
||||
} else if ([item isKindOfClass: [BookmarkFolder class]]) {
|
||||
return [[item children] objectAtIndex: index];
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
-(BOOL)outlineView: (NSOutlineView*)outlineView isItemExpandable: (id)item {
|
||||
return NO;
|
||||
return [item isKindOfClass: [BookmarkFolder class]];
|
||||
}
|
||||
|
||||
-(NSInteger)outlineView: (NSOutlineView*)outlineView numberOfChildrenOfItem: (id)item {
|
||||
if (item == nil) {
|
||||
return [topLevelFolders count];
|
||||
} else if ([item isKindOfClass: [BookmarkFolder class]]) {
|
||||
return [[item children] count];
|
||||
} else {
|
||||
return [item count];
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
-(id)outlineView: (NSOutlineView*)outlineView objectValueForTableColumn: (NSTableColumn*)tableColumn byItem: (id)item {
|
||||
return nil;
|
||||
if ([item respondsToSelector: @selector(name)]) {
|
||||
return [item name];
|
||||
} else {
|
||||
return @"Error";
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#import "netsurf/mouse.h"
|
||||
#import "desktop/search.h"
|
||||
#import "BookmarkFolder.h"
|
||||
#import "CreateBookmarkPanelController.h"
|
||||
|
||||
@implementation BrowserWindowController
|
||||
|
||||
|
@ -185,7 +186,10 @@
|
|||
NSString *urlStr = [NSString stringWithCString: nsurl_access(url)];
|
||||
Website *website = [[Website alloc] initWithName: name
|
||||
url: urlStr];
|
||||
[[BookmarkFolder unsortedBookmarkFolder] addChild: website];
|
||||
CreateBookmarkPanelController *bmController = [[CreateBookmarkPanelController alloc]
|
||||
initForWebsite: website];
|
||||
[NSApp runModalForWindow: [bmController window]];
|
||||
[bmController release];
|
||||
[website release];
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
#import <AppKit/AppKit.h>
|
||||
#import "Website.h"
|
||||
#import "BookmarkFolder.h"
|
||||
|
||||
@interface CreateBookmarkPanelController : NSWindowController {
|
||||
id nameField;
|
||||
id folderButton;
|
||||
Website *website;
|
||||
NSArray *bookmarkFolders;
|
||||
|
||||
}
|
||||
-(void)didTapOkay: (id)sender;
|
||||
-(void)didTapCancel: (id)sender;
|
||||
@end
|
|
@ -0,0 +1,46 @@
|
|||
#import <AppKit/AppKit.h>
|
||||
#import "CreateBookmarkPanelController.h"
|
||||
#import "Website.h"
|
||||
#import "BookmarkFolder.h"
|
||||
|
||||
@implementation CreateBookmarkPanelController
|
||||
|
||||
-(id)initForWebsite: (Website*)aWebsite {
|
||||
if (self = [super initWithWindowNibName: @"CreateBookmark"]) {
|
||||
website = [aWebsite retain];
|
||||
bookmarkFolders = [[[BookmarkFolder rootBookmarkFolder] childFolders]
|
||||
retain];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)dealloc {
|
||||
[website release];
|
||||
[bookmarkFolders release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
-(void)awakeFromNib {
|
||||
NSLog(@"Awoke from nib");
|
||||
[nameField setStringValue: [website name]];
|
||||
for (NSUInteger i = 0; i < [bookmarkFolders count]; i++) {
|
||||
[folderButton addItemWithTitle: [[bookmarkFolders objectAtIndex: i]
|
||||
name]];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)didTapCancel: (id)sender {
|
||||
[self close];
|
||||
}
|
||||
|
||||
-(void)didTapOkay: (id)sender {
|
||||
Website *toSave = [[Website alloc] initWithName: [nameField stringValue]
|
||||
url: [website url]];
|
||||
BookmarkFolder *destination = [bookmarkFolders objectAtIndex: [folderButton
|
||||
indexOfSelectedItem]];
|
||||
[destination addChild: toSave];
|
||||
[toSave release];
|
||||
[self close];
|
||||
}
|
||||
|
||||
@end
|
|
@ -48,6 +48,7 @@ S_FRONTEND := \
|
|||
FindPanelController.m \
|
||||
HistoryWindowController.m \
|
||||
BookmarksWindowController.m \
|
||||
CreateBookmarkPanelController.m \
|
||||
Website.m \
|
||||
BookmarkFolder.m \
|
||||
tables/misc.m \
|
||||
|
@ -78,6 +79,7 @@ R_RESOURCES := \
|
|||
Find.gorm \
|
||||
History.gorm \
|
||||
Bookmarks.gorm \
|
||||
CreateBookmark.gorm \
|
||||
|
||||
R_RESOURCES := $(addprefix $(FRONTEND_RESOURCES_DIR)/,$(R_RESOURCES))
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"## Comment" = "Do NOT change this file, Gorm maintains it";
|
||||
CreateBookmarkPanelController = {
|
||||
Actions = (
|
||||
"didTapOkay:",
|
||||
"didTapCancel:"
|
||||
);
|
||||
Outlets = (
|
||||
nameField,
|
||||
folderButton
|
||||
);
|
||||
Super = NSWindowController;
|
||||
};
|
||||
FirstResponder = {
|
||||
Actions = (
|
||||
"didTapOkay:",
|
||||
"didTapCancel:"
|
||||
);
|
||||
Super = NSObject;
|
||||
};
|
||||
}
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue