Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(733)

Unified Diff: chrome/browser/cocoa/bookmark_groups_controller.mm

Issue 501073: Native Cocoa bookmark manager, part 1 (Closed)
Patch Set: Style fixes, and copy/paste unit tests Created 10 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698