| Index: chrome/browser/cocoa/bookmark_groups_controller.mm
|
| diff --git a/chrome/browser/cocoa/bookmark_groups_controller.mm b/chrome/browser/cocoa/bookmark_groups_controller.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e6b14f365ed252ed1df0b9eabc44bf737feb1d29
|
| --- /dev/null
|
| +++ b/chrome/browser/cocoa/bookmark_groups_controller.mm
|
| @@ -0,0 +1,165 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import "chrome/browser/cocoa/bookmark_groups_controller.h"
|
| +
|
| +#include "base/sys_string_conversions.h"
|
| +#include "chrome/browser/bookmarks/bookmark_model.h"
|
| +#import "chrome/browser/cocoa/bookmark_manager_controller.h"
|
| +#import "chrome/browser/cocoa/bookmark_tree_controller.h"
|
| +#import "third_party/apple/ImageAndTextCell.h"
|
| +
|
| +
|
| +@interface BookmarkGroupsController ()
|
| +- (void)syncSelection;
|
| +- (void)reload;
|
| +@end
|
| +
|
| +
|
| +@implementation BookmarkGroupsController
|
| +
|
| +@synthesize groups = groups_, selectedGroup = selectedGroup_;
|
| +
|
| +-(void)dealloc {
|
| + [groups_ release];
|
| + [selectedGroup_ release];
|
| + [super dealloc];
|
| +}
|
| +
|
| +// Completely reloads the contents of the table view.
|
| +- (void)reload {
|
| + NSMutableArray* groups = [NSMutableArray array];
|
| + BookmarkModel* bookmarkModel = [manager_ bookmarkModel];
|
| + const BookmarkNode* node = bookmarkModel->GetBookmarkBarNode();
|
| + [groups addObject:[manager_ itemFromNode:node]];
|
| + node = bookmarkModel->other_node();
|
| + for (int i = 0; i < node->GetChildCount(); i++) {
|
| + const BookmarkNode* child = node->GetChild(i);
|
| + if (child->is_folder()) {
|
| + [groups addObject:[manager_ itemFromNode:child]];
|
| + }
|
| + }
|
| + //TODO(snej): Append Recents and Search groups
|
| +
|
| + if (![groups isEqual:[self groups]]) {
|
| + [self setGroups:groups];
|
| + [groupsTable_ reloadData];
|
| + [self syncSelection];
|
| + }
|
| +}
|
| +
|
| +// Responds to changes in the bookmark data model.
|
| +- (void)nodeChanged:(const BookmarkNode*)node
|
| + childrenChanged:(BOOL)childrenChanged {
|
| + if (node == [manager_ bookmarkModel]->other_node()) {
|
| + [self reload];
|
| + }
|
| +}
|
| +
|
| +// Returns the selected BookmarkNode.
|
| +- (const BookmarkNode*)selectedNode {
|
| + NSInteger row = [groupsTable_ selectedRow];
|
| + if (row < 0)
|
| + return NULL;
|
| + id item = [groups_ objectAtIndex:row];
|
| + return [manager_ nodeFromItem:item];
|
| +}
|
| +
|
| +- (id)selectedGroup {
|
| + return selectedGroup_;
|
| +}
|
| +
|
| +- (void)setSelectedGroup:(id)group {
|
| + [selectedGroup_ autorelease];
|
| + selectedGroup_ = [group retain];
|
| +
|
| + NSInteger row = group ? [groups_ indexOfObject:group] : NSNotFound;
|
| + if (row != NSNotFound)
|
| + [groupsTable_ selectRow:row byExtendingSelection:NO];
|
| + else
|
| + [groupsTable_ deselectAll:self];
|
| +}
|
| +
|
| +- (NSTableView*)groupsTable {
|
| + return groupsTable_;
|
| +}
|
| +
|
| +
|
| +#pragma mark -
|
| +#pragma mark COMMANDS:
|
| +
|
| +
|
| +// Updates the |selectedGroup| property based on the table view's selection.
|
| +- (void)syncSelection {
|
| + id selGroup = nil;
|
| + NSInteger row = [groupsTable_ selectedRow];
|
| + if (row >= 0) {
|
| + selGroup = [groups_ objectAtIndex:row];
|
| + if (![selGroup isKindOfClass:[NSValue class]])
|
| + selGroup = nil;
|
| + }
|
| + if (selGroup != [self selectedGroup])
|
| + [self setSelectedGroup:selGroup];
|
| +}
|
| +
|
| +// Called when a row is clicked; updates the |selectedGroup| property.
|
| +- (IBAction)tableClicked:(id)sender {
|
| + [self syncSelection];
|
| +}
|
| +
|
| +// The Delete command; also invoked by the delete key.
|
| +- (IBAction)delete:(id)sender {
|
| + const BookmarkNode* sel = [self selectedNode];
|
| + if (!sel) {
|
| + NSBeep();
|
| + return;
|
| + }
|
| + const BookmarkNode* parent = sel->GetParent();
|
| + [manager_ bookmarkModel]->Remove(parent, parent->IndexOfChild(sel));
|
| +}
|
| +
|
| +
|
| +#pragma mark -
|
| +#pragma mark LIST VIEW:
|
| +
|
| +
|
| +// Returns the number of rows in the table (NSTableView data source).
|
| +- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
|
| + return [groups_ count];
|
| +}
|
| +
|
| +// Returns the contents of a table cell (NSTableView data source).
|
| +- (id) tableView:(NSTableView*)tableView
|
| + objectValueForTableColumn:(NSTableColumn*)tableColumn
|
| + row:(NSInteger)row {
|
| + id item = [groups_ objectAtIndex:row];
|
| + return base::SysWideToNSString([manager_ nodeFromItem:item]->GetTitle());
|
| +}
|
| +
|
| +// Sets a table cell's icon before it's drawn (NSTableView delegate).
|
| +- (void)tableView:(NSTableView*)tableView
|
| + willDisplayCell:(id)cell
|
| + forTableColumn:(NSTableColumn*)tableColumn
|
| + row:(NSInteger)row {
|
| + id item = [groups_ objectAtIndex:row];
|
| + [(ImageAndTextCell*)cell setImage:[manager_ iconForItem:item]];
|
| +}
|
| +
|
| +@end
|
| +
|
| +
|
| +@implementation BookmarksTableView
|
| +
|
| +- (IBAction)delete:(id)sender {
|
| + [(BookmarkGroupsController*)[self delegate] delete:sender];
|
| +}
|
| +
|
| +- (void)keyDown:(NSEvent*)event {
|
| + if ([event keyCode] == 51) // Delete key
|
| + [self delete:self];
|
| + else
|
| + [super keyDown:event];
|
| +}
|
| +
|
| +@end
|
|
|