Cutting, pasting, removing individual websites working
This commit is contained in:
parent
0157ab1322
commit
7c9d6cce8d
|
@ -73,9 +73,12 @@ lazy-loaded when requested.
|
||||||
-(void)updateChild: (id)child {
|
-(void)updateChild: (id)child {
|
||||||
if ([child isKindOfClass: [Website class]]) {
|
if ([child isKindOfClass: [Website class]]) {
|
||||||
BOOL ok = NO;
|
BOOL ok = NO;
|
||||||
NSString * destPath = [path stringByAppendingPathComponent: [self
|
NSString *filename = [child filename];
|
||||||
pathNameForWebsite: child]];
|
if (filename != nil) {
|
||||||
ok = [[child asDictionary] writeToFile: destPath atomically: YES];
|
NSString * destPath = [path stringByAppendingPathComponent:
|
||||||
|
filename];
|
||||||
|
ok = [[child asDictionary] writeToFile: destPath atomically: YES];
|
||||||
|
}
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
NSLog(@"Failed to resave the child");
|
NSLog(@"Failed to resave the child");
|
||||||
}
|
}
|
||||||
|
@ -105,11 +108,10 @@ lazy-loaded when requested.
|
||||||
-(void)removeChild: (id)child {
|
-(void)removeChild: (id)child {
|
||||||
[self initChildrenIfNeeded];
|
[self initChildrenIfNeeded];
|
||||||
BOOL ok = NO;
|
BOOL ok = NO;
|
||||||
NSError *err;
|
NSError *err = nil;
|
||||||
NSString *destPath = nil;
|
NSString *destPath = nil;
|
||||||
if ([child isKindOfClass: [Website class]]) {
|
if ([child isKindOfClass: [Website class]] && [child filename] != nil) {
|
||||||
destPath = [path stringByAppendingPathComponent: [self pathNameForWebsite:
|
destPath = [path stringByAppendingPathComponent: [child filename]];
|
||||||
child]];
|
|
||||||
} else if ([child isKindOfClass: [BookmarkFolder class]]) {
|
} else if ([child isKindOfClass: [BookmarkFolder class]]) {
|
||||||
destPath = [child path];
|
destPath = [child path];
|
||||||
}
|
}
|
||||||
|
@ -118,7 +120,7 @@ lazy-loaded when requested.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ok = [[NSFileManager defaultManager] removeItemAtPath: destPath error: &err];
|
ok = [[NSFileManager defaultManager] removeItemAtPath: destPath error: &err];
|
||||||
if (ok) {
|
if (ok && err == nil) {
|
||||||
[children removeObject: child];
|
[children removeObject: child];
|
||||||
} else {
|
} else {
|
||||||
NSLog(@"Failed to remove child");
|
NSLog(@"Failed to remove child");
|
||||||
|
@ -188,13 +190,9 @@ lazy-loaded when requested.
|
||||||
children = [someChildren retain];
|
children = [someChildren retain];
|
||||||
}
|
}
|
||||||
-(NSString*)pathNameForWebsite: (Website*)aWebsite {
|
-(NSString*)pathNameForWebsite: (Website*)aWebsite {
|
||||||
if ([aWebsite filename] != nil) {
|
NSTimeInterval time = [[NSDate date] timeIntervalSinceReferenceDate];
|
||||||
return [aWebsite filename];
|
NSNumber *num = [NSNumber numberWithDouble: time];
|
||||||
} else {
|
return [num stringValue];
|
||||||
NSTimeInterval time = [[NSDate date] timeIntervalSinceReferenceDate];
|
|
||||||
NSNumber *num = [NSNumber numberWithDouble: time];
|
|
||||||
return [num stringValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
-(void)initChildrenIfNeeded {
|
-(void)initChildrenIfNeeded {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
@interface BookmarksWindowController (Private)
|
@interface BookmarksWindowController (Private)
|
||||||
-(void)copySelectedItems;
|
-(NSArray*)selectedItems;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation BookmarksWindowController
|
@implementation BookmarksWindowController
|
||||||
|
@ -45,12 +45,14 @@
|
||||||
|
|
||||||
-(void)cut: (id)sender {
|
-(void)cut: (id)sender {
|
||||||
isCutting = YES;
|
isCutting = YES;
|
||||||
[self copySelectedItems];
|
[copiedItems release];
|
||||||
|
copiedItems = [[self selectedItems] retain];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)copy: (id)sender {
|
-(void)copy: (id)sender {
|
||||||
isCutting = NO;
|
isCutting = NO;
|
||||||
[self copySelectedItems];
|
[copiedItems release];
|
||||||
|
copiedItems = [[self selectedItems] retain];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)paste: (id)sender {
|
-(void)paste: (id)sender {
|
||||||
|
@ -86,10 +88,18 @@
|
||||||
[copiedItems release];
|
[copiedItems release];
|
||||||
copiedItems = nil;
|
copiedItems = nil;
|
||||||
}
|
}
|
||||||
|
[outlineView reloadData];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)remove: (id)sender {
|
-(void)remove: (id)sender {
|
||||||
|
NSArray *selectedItems = [self selectedItems];
|
||||||
|
id item;
|
||||||
|
for (NSUInteger i = 0; i < [selectedItems count]; i++) {
|
||||||
|
item = [selectedItems objectAtIndex: i];
|
||||||
|
NSLog(@"Removing item %@", item);
|
||||||
|
[[item parentFolder] removeChild: item];
|
||||||
|
}
|
||||||
|
[outlineView reloadData];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)newFolder: (id)sender {
|
-(void)newFolder: (id)sender {
|
||||||
|
@ -171,11 +181,10 @@
|
||||||
[(BookmarkFolder*)item setName: object];
|
[(BookmarkFolder*)item setName: object];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
-(NSArray*)selectedItems {
|
||||||
-(void)copySelectedItems {
|
|
||||||
NSEnumerator *selected = [outlineView selectedRowEnumerator];
|
NSEnumerator *selected = [outlineView selectedRowEnumerator];
|
||||||
NSMutableArray *copiedFolders = [NSMutableArray array];
|
NSMutableArray *selectedFolders = [NSMutableArray array];
|
||||||
NSMutableArray *toCopy = [NSMutableArray array];
|
NSMutableArray *selectedItems = [NSMutableArray array];
|
||||||
BOOL addedToPB = NO;
|
BOOL addedToPB = NO;
|
||||||
id row, item;
|
id row, item;
|
||||||
while ((row = [selected nextObject]) != NULL) {
|
while ((row = [selected nextObject]) != NULL) {
|
||||||
|
@ -186,15 +195,14 @@
|
||||||
addedToPB = YES;
|
addedToPB = YES;
|
||||||
}
|
}
|
||||||
if ([item isKindOfClass: [BookmarkFolder class]]) {
|
if ([item isKindOfClass: [BookmarkFolder class]]) {
|
||||||
[copiedFolders addObject: item];
|
[selectedFolders addObject: item];
|
||||||
}
|
}
|
||||||
if ([copiedFolders containsObject: [item parentFolder]]) {
|
if ([selectedFolders containsObject: [item parentFolder]]) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
[toCopy addObject: item];
|
[selectedItems addObject: item];
|
||||||
}
|
}
|
||||||
[copiedItems release];
|
return selectedItems;
|
||||||
copiedItems = [toCopy retain];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
memcpy(data->data, [aName cString], nlen);
|
memcpy(data->data, [aName cString], nlen);
|
||||||
memcpy(data->data + nlen, [aUrl cString], urlen);
|
memcpy(data->data + nlen, [aUrl cString], urlen);
|
||||||
fileOffset = -1;
|
fileOffset = -1;
|
||||||
|
filename = nil;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +27,7 @@
|
||||||
if (self = [super init]) {
|
if (self = [super init]) {
|
||||||
data = someData;
|
data = someData;
|
||||||
fileOffset = aFileOffset;
|
fileOffset = aFileOffset;
|
||||||
|
filename = nil;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -71,7 +73,7 @@
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
-(void)setFilename: (NSString*)aFilename {
|
-(void)setFilename: (NSString*)aFilename {
|
||||||
[filename release];
|
[filename autorelease];
|
||||||
filename = [aFilename retain];
|
filename = [aFilename retain];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue