Create bookmark panel to allow customising the name and picking it's folder

This commit is contained in:
anthony 2021-01-09 19:29:34 +00:00
parent 1c352fe0f3
commit d1a4382fdf
10 changed files with 135 additions and 14 deletions

View File

@ -13,6 +13,7 @@
-(id)initWithName: (NSString*)aName parent: (BookmarkFolder*)aParent;
-(BookmarkFolder*)parentFolder;
-(NSArray*)children;
-(NSArray*)childFolders;
-(NSString*)name;
-(BOOL)isRootFolder;
-(BOOL)isUnsortedFolder;

View File

@ -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 {

View File

@ -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

View File

@ -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];
}

View File

@ -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

View File

@ -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

View File

@ -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))

View File

@ -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.