1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#ifndef CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_BUTTON_CELL_H_
621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#define CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_BUTTON_CELL_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#import "base/mac/cocoa_protocols.h"
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#import "chrome/browser/ui/cocoa/gradient_button_cell.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BookmarkNode;
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A button cell that handles drawing/highlighting of buttons in the
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// bookmark bar.  This cell forwards mouseEntered/mouseExited events
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to its control view so that pseudo-menu operations
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// (e.g. hover-over to open) can be implemented.
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@interface BookmarkButtonCell : GradientButtonCell<NSMenuDelegate> {
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch @private
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BOOL empty_;  // is this an "empty" button placeholder button cell?
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Starting index of bookmarkFolder children that we care to use.
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int startingChildIndex_;
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Should we draw the folder arrow as needed?  Not used for the bar
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // itself but used on the folder windows.
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BOOL drawFolderArrow_;
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Arrow for folders
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_nsobject<NSImage> arrowImage_;
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen@property(nonatomic, readwrite, assign) const BookmarkNode* bookmarkNode;
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen@property(nonatomic, readwrite, assign) int startingChildIndex;
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen@property(nonatomic, readwrite, assign) BOOL drawFolderArrow;
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Create a button cell which draws with a theme.
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch+ (id)buttonCellForNode:(const BookmarkNode*)node
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            contextMenu:(NSMenu*)contextMenu
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch               cellText:(NSString*)cellText
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              cellImage:(NSImage*)cellImage;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Initialize a button cell which draws with a theme.
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Designated initializer.
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (id)initForNode:(const BookmarkNode*)node
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      contextMenu:(NSMenu*)contextMenu
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch         cellText:(NSString*)cellText
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        cellImage:(NSImage*)cellImage;
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (BOOL)empty;  // returns YES if empty.
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)setEmpty:(BOOL)empty;
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// |-setBookmarkCellText:image:| is used to set the text and image of
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// a BookmarkButtonCell, and align the image to the left (NSImageLeft)
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// if there is text in the title, and centered (NSImageCenter) if
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// there is not.  If |title| is nil, do not reset the title.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)setBookmarkCellText:(NSString*)title
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      image:(NSImage*)image;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Set the color of text in this cell.
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)setTextColor:(NSColor*)color;
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen- (BOOL)isFolderButtonCell;
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@end
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
6721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#endif  // CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_BUTTON_CELL_H_
68