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

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

Issue 149276: Mac version of the download shelf views (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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
« no previous file with comments | « chrome/browser/cocoa/download_item_controller.h ('k') | chrome/browser/cocoa/download_item_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/cocoa/download_item_controller.mm
===================================================================
--- chrome/browser/cocoa/download_item_controller.mm (revision 0)
+++ chrome/browser/cocoa/download_item_controller.mm (revision 0)
@@ -0,0 +1,133 @@
+// 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/download_item_controller.h"
+
+#include "app/l10n_util.h"
+#include "base/mac_util.h"
+#include "base/sys_string_conversions.h"
+#include "chrome/browser/cocoa/download_item_mac.h"
+#include "chrome/browser/download/download_item_model.h"
+#include "chrome/browser/download/download_shelf.h"
+
+// A class for the chromium-side part of the download shelf context menu.
+
+class DownloadShelfContextMenuMac : public DownloadShelfContextMenu {
+ public:
+ DownloadShelfContextMenuMac(BaseDownloadItemModel* model)
+ : DownloadShelfContextMenu(model) { }
+
+ using DownloadShelfContextMenu::ExecuteItemCommand;
+ using DownloadShelfContextMenu::ItemIsChecked;
+ using DownloadShelfContextMenu::IsItemCommandEnabled;
+
+ using DownloadShelfContextMenu::SHOW_IN_FOLDER;
+ using DownloadShelfContextMenu::OPEN_WHEN_COMPLETE;
+ using DownloadShelfContextMenu::ALWAYS_OPEN_TYPE;
+ using DownloadShelfContextMenu::CANCEL;
+};
+
+// Implementation of DownloadItemController
+
+@implementation DownloadItemController
+
+- (id)initWithFrame:(NSRect)frameRect
+ model:(BaseDownloadItemModel*)downloadModel {
+ if ((self = [super initWithNibName:@"DownloadItem"
+ bundle:mac_util::MainAppBundle()])) {
+ // Must be called before [self view], so that bridge_ is set in awakeFromNib
+ bridge_.reset(new DownloadItemMac(downloadModel, self));
+ menuBridge_.reset(new DownloadShelfContextMenuMac(downloadModel));
+
+ [[self view] setFrame:frameRect];
+ }
+ return self;
+}
+
+- (void)awakeFromNib {
+ [self setStateFromDownload:bridge_->download_model()];
+}
+
+- (void)setStateFromDownload:(BaseDownloadItemModel*)downloadModel {
+ // TODO(thakis): The windows version of this does all kinds of things
+ // (gratituous use of animation, special handling of dangerous downloads)
+ // that we don't currently do.
+
+ // Set correct popup menu.
+ if (downloadModel->download()->state() == DownloadItem::COMPLETE)
+ [popupButton_ setMenu:completeDownloadMenu_];
+ else
+ [popupButton_ setMenu:activeDownloadMenu_];
+
+ // Set name and icon of download.
+ FilePath downloadPath = downloadModel->download()->GetFileName();
+
+ // TODO(thakis): use filename eliding like gtk/windows versions.
+ NSString* titleString = base::SysWideToNSString(downloadPath.ToWStringHack());
+ [[popupButton_ itemAtIndex:0] setTitle:titleString];
+
+ // TODO(paulg): Use IconManager for loading icons on the file thread
+ // (crbug.com/16226).
+ NSString* extension = base::SysUTF8ToNSString(downloadPath.Extension());
+ [[popupButton_ itemAtIndex:0] setImage:
+ [[NSWorkspace sharedWorkspace] iconForFileType:extension]];
+
+ // Set status text.
+ std::wstring statusText = downloadModel->GetStatusText();
+ // Remove the status text label.
+ if (statusText.empty()) {
+ // TODO(thakis): Once there is a status label, hide it here.
+ return;
+ }
+
+ // TODO(thakis): Set status_text as status label.
+}
+
+// Sets the enabled and checked state of a particular menu item for this
+// download. We translate the NSMenuItem selection to menu selections understood
+// by the non platform specific download context menu.
+- (BOOL)validateMenuItem:(NSMenuItem *)item {
+ SEL action = [item action];
+
+ int actionId = 0;
+ if (action == @selector(handleOpen:)) {
+ actionId = DownloadShelfContextMenuMac::OPEN_WHEN_COMPLETE;
+ } else if (action == @selector(handleAlwaysOpen:)) {
+ actionId = DownloadShelfContextMenuMac::ALWAYS_OPEN_TYPE;
+ } else if (action == @selector(handleReveal:)) {
+ actionId = DownloadShelfContextMenuMac::SHOW_IN_FOLDER;
+ } else if (action == @selector(handleCancel:)) {
+ actionId = DownloadShelfContextMenuMac::CANCEL;
+ } else {
+ NOTREACHED();
+ return YES;
+ }
+
+ if (menuBridge_->ItemIsChecked(actionId))
+ [item setState:NSOnState];
+ else
+ [item setState:NSOffState];
+
+ return menuBridge_->IsItemCommandEnabled(actionId) ? YES : NO;
+}
+
+- (IBAction)handleOpen:(id)sender {
+ menuBridge_->ExecuteItemCommand(
+ DownloadShelfContextMenuMac::OPEN_WHEN_COMPLETE);
+}
+
+- (IBAction)handleAlwaysOpen:(id)sender {
+ menuBridge_->ExecuteItemCommand(
+ DownloadShelfContextMenuMac::ALWAYS_OPEN_TYPE);
+}
+
+- (IBAction)handleReveal:(id)sender {
+ menuBridge_->ExecuteItemCommand(DownloadShelfContextMenuMac::SHOW_IN_FOLDER);
+}
+
+- (IBAction)handleCancel:(id)sender {
+ menuBridge_->ExecuteItemCommand(DownloadShelfContextMenuMac::CANCEL);
+}
+
+@end
Property changes on: chrome/browser/cocoa/download_item_controller.mm
___________________________________________________________________
Name: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/cocoa/download_item_controller.h ('k') | chrome/browser/cocoa/download_item_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698