Home | History | Annotate | Download | only in download
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #import "chrome/browser/ui/cocoa/download/download_item_button.h"
      6 
      7 #include "base/logging.h"
      8 #include "base/sys_string_conversions.h"
      9 #import "chrome/browser/ui/cocoa/download/download_item_cell.h"
     10 #import "chrome/browser/ui/cocoa/download/download_item_controller.h"
     11 
     12 @implementation DownloadItemButton
     13 
     14 @synthesize download = downloadPath_;
     15 @synthesize controller = controller_;
     16 
     17 // Overridden from DraggableButton.
     18 - (void)beginDrag:(NSEvent*)event {
     19   if (!downloadPath_.empty()) {
     20     NSString* filename = base::SysUTF8ToNSString(downloadPath_.value());
     21     [self dragFile:filename fromRect:[self bounds] slideBack:YES event:event];
     22   }
     23 }
     24 
     25 // Override to show a context menu on mouse down if clicked over the context
     26 // menu area.
     27 - (void)mouseDown:(NSEvent*)event {
     28   DCHECK(controller_);
     29   // Override so that we can pop up a context menu on mouse down.
     30   NSCell* cell = [self cell];
     31   DCHECK([cell respondsToSelector:@selector(isMouseOverButtonPart)]);
     32   if ([reinterpret_cast<DownloadItemCell*>(cell) isMouseOverButtonPart]) {
     33     [super mouseDown:event];
     34   } else {
     35     // Hold a reference to our controller in case the download completes and we
     36     // represent a file that's auto-removed (e.g. a theme).
     37     scoped_nsobject<DownloadItemController> ref([controller_ retain]);
     38     [cell setHighlighted:YES];
     39     [[self menu] setDelegate:self];
     40     [NSMenu popUpContextMenu:[self menu]
     41                    withEvent:[NSApp currentEvent]
     42                      forView:self];
     43   }
     44 }
     45 
     46 - (void)menuDidClose:(NSMenu*)menu {
     47   [[self cell] setHighlighted:NO];
     48 }
     49 
     50 - (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent*)event {
     51   return YES;
     52 }
     53 
     54 @end
     55