Home | History | Annotate | Download | only in download
      1 // Copyright (c) 2012 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 <Cocoa/Cocoa.h>
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "base/time/time.h"
      9 
     10 @class ChromeUILocalizer;
     11 @class DownloadItemCell;
     12 @class DownloadItemButton;
     13 class DownloadItemMac;
     14 class DownloadItemModel;
     15 class DownloadShelfContextMenuMac;
     16 @class DownloadShelfController;
     17 @class GTMWidthBasedTweaker;
     18 
     19 namespace content {
     20 class DownloadItem;
     21 class PageNavigator;
     22 }
     23 
     24 namespace gfx {
     25 class Font;
     26 }
     27 
     28 namespace ui {
     29 class MenuModel;
     30 }
     31 
     32 // A controller class that manages one download item.
     33 
     34 @interface DownloadItemController : NSViewController {
     35  @private
     36   IBOutlet DownloadItemButton* progressView_;
     37   IBOutlet DownloadItemCell* cell_;
     38 
     39   // This is shown instead of progressView_ for dangerous downloads.
     40   IBOutlet NSView* dangerousDownloadView_;
     41   IBOutlet NSTextField* dangerousDownloadLabel_;
     42   IBOutlet NSButton* dangerousDownloadConfirmButton_;
     43 
     44   // Needed to find out how much the tweaker changed sizes to update the
     45   // other views.
     46   IBOutlet GTMWidthBasedTweaker* buttonTweaker_;
     47 
     48   // Because the confirm text and button for dangerous downloads are determined
     49   // at runtime, an outlet to the localizer is needed to construct the layout
     50   // tweaker in awakeFromNib in order to adjust the UI after all strings are
     51   // determined.
     52   IBOutlet ChromeUILocalizer* localizer_;
     53 
     54   IBOutlet NSImageView* image_;
     55 
     56   scoped_ptr<DownloadItemMac> bridge_;
     57   scoped_ptr<DownloadShelfContextMenuMac> menuBridge_;
     58 
     59   // Weak pointer to the shelf that owns us.
     60   DownloadShelfController* shelf_;
     61 
     62   // The time at which this view was created.
     63   base::Time creationTime_;
     64 
     65   // Default font to use for text metrics.
     66   scoped_ptr<gfx::Font> font_;
     67 
     68   // The state of this item.
     69   enum DownoadItemState {
     70     kNormal,
     71     kDangerous
     72   } state_;
     73 };
     74 
     75 // Initialize controller for |downloadItem|.
     76 - (id)initWithDownload:(content::DownloadItem*)downloadItem
     77                  shelf:(DownloadShelfController*)shelf
     78              navigator:(content::PageNavigator*)navigator;
     79 
     80 // Updates the UI and menu state from |downloadModel|.
     81 - (void)setStateFromDownload:(DownloadItemModel*)downloadModel;
     82 
     83 // Remove ourself from the download UI.
     84 - (void)remove;
     85 
     86 // Update item's visibility depending on if the item is still completely
     87 // contained in its parent.
     88 - (void)updateVisibility:(id)sender;
     89 
     90 // Called after a download is opened.
     91 - (void)downloadWasOpened;
     92 
     93 // Asynchronous icon loading callback.
     94 - (void)setIcon:(NSImage*)icon;
     95 
     96 // Download item button clicked
     97 - (IBAction)handleButtonClick:(id)sender;
     98 
     99 // Returns the size this item wants to have.
    100 - (NSSize)preferredSize;
    101 
    102 // Returns the DownloadItem model object belonging to this item.
    103 - (content::DownloadItem*)download;
    104 
    105 // Returns the MenuModel for the download item context menu. The returned
    106 // MenuModel is owned by the DownloadItemController and will be valid until the
    107 // DownloadItemController is destroyed.
    108 - (ui::MenuModel*)contextMenuModel;
    109 
    110 // Updates the tooltip with the download's path.
    111 - (void)updateToolTip;
    112 
    113 // Handling of dangerous downloads
    114 - (void)clearDangerousMode;
    115 - (BOOL)isDangerousMode;
    116 - (IBAction)saveDownload:(id)sender;
    117 - (IBAction)discardDownload:(id)sender;
    118 
    119 @end
    120