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

Side by Side Diff: chrome/browser/views/download_item_view.h

Issue 6043: Added dangerous download prompting. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // A ChromeView that implements one download on the Download shelf. 5 // A ChromeView that implements one download on the Download shelf.
6 // Each DownloadItemView contains an application icon, a text label 6 // Each DownloadItemView contains an application icon, a text label
7 // indicating the download's file name, a text label indicating the 7 // indicating the download's file name, a text label indicating the
8 // download's status (such as the number of bytes downloaded so far) 8 // download's status (such as the number of bytes downloaded so far)
9 // and a button for canceling an in progress download, or opening 9 // and a button for canceling an in progress download, or opening
10 // the completed download. 10 // the completed download.
11 // 11 //
12 // The DownloadItemView lives in the Browser, and has a corresponding 12 // The DownloadItemView lives in the Browser, and has a corresponding
13 // DownloadController that receives / writes data which lives in the 13 // DownloadController that receives / writes data which lives in the
14 // Renderer. 14 // Renderer.
15 15
16 #ifndef CHROME_BROWSER_VIEWS_DOWNLOAD_ITEM_VIEW_H__ 16 #ifndef CHROME_BROWSER_VIEWS_DOWNLOAD_ITEM_VIEW_H__
17 #define CHROME_BROWSER_VIEWS_DOWNLOAD_ITEM_VIEW_H__ 17 #define CHROME_BROWSER_VIEWS_DOWNLOAD_ITEM_VIEW_H__
18 18
19 #include <string> 19 #include <string>
20 20
21 #include "base/basictypes.h" 21 #include "base/basictypes.h"
22 #include "base/scoped_ptr.h" 22 #include "base/scoped_ptr.h"
23 #include "base/timer.h" 23 #include "base/timer.h"
24 #include "chrome/common/slide_animation.h" 24 #include "chrome/common/slide_animation.h"
25 #include "chrome/browser/cancelable_request.h" 25 #include "chrome/browser/cancelable_request.h"
26 #include "chrome/browser/download/download_manager.h" 26 #include "chrome/browser/download/download_manager.h"
27 #include "chrome/browser/icon_manager.h" 27 #include "chrome/browser/icon_manager.h"
28 #include "chrome/views/event.h" 28 #include "chrome/views/event.h"
29 #include "chrome/views/native_button.h"
29 #include "chrome/views/view.h" 30 #include "chrome/views/view.h"
30 #include "chrome/views/label.h"
31 31
32 namespace ChromeViews {
33 class Label;
34 }
32 class DownloadShelfView; 35 class DownloadShelfView;
33 class SkBitmap; 36 class SkBitmap;
34 37
35 class DownloadItemView : public ChromeViews::View, 38 class DownloadItemView : public ChromeViews::NativeButton::Listener,
39 public ChromeViews::View,
36 public DownloadItem::Observer, 40 public DownloadItem::Observer,
37 public AnimationDelegate { 41 public AnimationDelegate {
38 public: 42 public:
39 // This class provides functions which have different behaviors between 43 // This class provides functions which have different behaviors between
40 // download and saving page. 44 // download and saving page.
41 class BaseDownloadItemModel { 45 class BaseDownloadItemModel {
42 public: 46 public:
43 // Cancel the task corresponding to the item. 47 // Cancel the task corresponding to the item.
44 virtual void CancelTask() = 0; 48 virtual void CancelTask() = 0;
45 49
46 // Get the status text to display. 50 // Get the status text to display.
47 virtual std::wstring GetStatusText() = 0; 51 virtual std::wstring GetStatusText() = 0;
48 }; 52 };
49 53
50 DownloadItemView(DownloadItem* download, 54 DownloadItemView(DownloadItem* download,
51 DownloadShelfView* parent, 55 DownloadShelfView* parent,
52 BaseDownloadItemModel* model); 56 BaseDownloadItemModel* model);
53 virtual ~DownloadItemView(); 57 virtual ~DownloadItemView();
54 58
55 // DownloadObserver method 59 // DownloadObserver method
56 virtual void OnDownloadUpdated(DownloadItem* download); 60 virtual void OnDownloadUpdated(DownloadItem* download);
57 61
58 // View overrides 62 // View overrides
63 virtual void Layout();
59 virtual void Paint(ChromeCanvas* canvas); 64 virtual void Paint(ChromeCanvas* canvas);
60 virtual void GetPreferredSize(CSize *out); 65 virtual void GetPreferredSize(CSize *out);
61 virtual void OnMouseExited(const ChromeViews::MouseEvent& event); 66 virtual void OnMouseExited(const ChromeViews::MouseEvent& event);
62 virtual void OnMouseMoved(const ChromeViews::MouseEvent& event); 67 virtual void OnMouseMoved(const ChromeViews::MouseEvent& event);
63 virtual bool OnMousePressed(const ChromeViews::MouseEvent& event); 68 virtual bool OnMousePressed(const ChromeViews::MouseEvent& event);
64 virtual void OnMouseReleased(const ChromeViews::MouseEvent& event, 69 virtual void OnMouseReleased(const ChromeViews::MouseEvent& event,
65 bool canceled); 70 bool canceled);
66 virtual bool OnMouseDragged(const ChromeViews::MouseEvent& event); 71 virtual bool OnMouseDragged(const ChromeViews::MouseEvent& event);
72 virtual void DidChangeBounds(const CRect& previous, const CRect& current);
73
74 // NativeButton::Listener implementation.
75 virtual void ButtonPressed(ChromeViews::NativeButton* sender);
67 76
68 // AnimationDelegate implementation. 77 // AnimationDelegate implementation.
69 virtual void AnimationProgressed(const Animation* animation); 78 virtual void AnimationProgressed(const Animation* animation);
70 79
71 // Timer callback for handling animations 80 // Timer callback for handling animations
72 void UpdateDownloadProgress(); 81 void UpdateDownloadProgress();
73 void StartDownloadProgress(); 82 void StartDownloadProgress();
74 void StopDownloadProgress(); 83 void StopDownloadProgress();
75 84
76 // IconManager::Client interface. 85 // IconManager::Client interface.
77 void OnExtractIconComplete(IconManager::Handle handle, SkBitmap* icon_bitmap); 86 void OnExtractIconComplete(IconManager::Handle handle, SkBitmap* icon_bitmap);
78 87
79 private: 88 private:
80 enum State { 89 enum State {
81 NORMAL = 0, 90 NORMAL = 0,
82 HOT, 91 HOT,
83 PUSHED, 92 PUSHED,
93 DANGEROUS
84 }; 94 };
85 95
86 // The image set associated with the part containing the icon and text. 96 // The image set associated with the part containing the icon and text.
87 struct BodyImageSet { 97 struct BodyImageSet {
88 SkBitmap* top_left; 98 SkBitmap* top_left;
89 SkBitmap* left; 99 SkBitmap* left;
90 SkBitmap* bottom_left; 100 SkBitmap* bottom_left;
91 SkBitmap* top; 101 SkBitmap* top;
92 SkBitmap* center; 102 SkBitmap* center;
93 SkBitmap* bottom; 103 SkBitmap* bottom;
(...skipping 20 matching lines...) Expand all
114 const SkBitmap* center_bitmap, 124 const SkBitmap* center_bitmap,
115 const SkBitmap* bottom_bitmap, 125 const SkBitmap* bottom_bitmap,
116 int x, 126 int x,
117 int y, 127 int y,
118 int height, 128 int height,
119 int width); 129 int width);
120 130
121 // Sets the state and triggers a repaint. 131 // Sets the state and triggers a repaint.
122 void SetState(State body_state, State drop_down_state); 132 void SetState(State body_state, State drop_down_state);
123 133
134 // Whether we are in the dangerous mode.
135 bool IsDangerousMode() { return body_state_ == DANGEROUS; }
136
137 // Reverts from dangerous mode to normal download mode.
138 void ClearDangerousMode();
139
140 // Sets |size| with the size of the Save and Discard buttons (they have the
141 // same size).
142 void GetButtonSize(CSize* size);
143
144 // Sizes the dangerous download label to a minimum width available using 2
145 // lines. The size is computed only the first time this method is invoked
146 // and simply returned on subsequent calls.
147 void SizeLabelToMinWidth();
148
124 // The different images used for the background. 149 // The different images used for the background.
125 BodyImageSet normal_body_image_set_; 150 BodyImageSet normal_body_image_set_;
126 BodyImageSet hot_body_image_set_; 151 BodyImageSet hot_body_image_set_;
127 BodyImageSet pushed_body_image_set_; 152 BodyImageSet pushed_body_image_set_;
153 BodyImageSet dangerous_mode_body_image_set_;
128 DropDownImageSet normal_drop_down_image_set_; 154 DropDownImageSet normal_drop_down_image_set_;
129 DropDownImageSet hot_drop_down_image_set_; 155 DropDownImageSet hot_drop_down_image_set_;
130 DropDownImageSet pushed_drop_down_image_set_; 156 DropDownImageSet pushed_drop_down_image_set_;
131 157
158 // The warning icon showns for dangerous downloads.
159 SkBitmap* warning_icon_;
160
132 // The model we query for display information 161 // The model we query for display information
133 DownloadItem* download_; 162 DownloadItem* download_;
134 163
135 // Our parent view that owns us. 164 // Our parent view that owns us.
136 DownloadShelfView* parent_; 165 DownloadShelfView* parent_;
137 166
138 // Elements of our particular download 167 // Elements of our particular download
139 std::wstring file_name_;
140 std::wstring status_text_; 168 std::wstring status_text_;
141 bool show_status_text_; 169 bool show_status_text_;
142 170
143 // The font used to print the file name and status. 171 // The font used to print the file name and status.
144 ChromeFont font_; 172 ChromeFont font_;
145 173
146 // The current state (normal, hot or pushed) of the body and drop-down. 174 // The current state (normal, hot or pushed) of the body and drop-down.
147 State body_state_; 175 State body_state_;
148 State drop_down_state_; 176 State drop_down_state_;
149 177
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 // Hover animations for our body and drop buttons. 210 // Hover animations for our body and drop buttons.
183 scoped_ptr<SlideAnimation> body_hover_animation_; 211 scoped_ptr<SlideAnimation> body_hover_animation_;
184 scoped_ptr<SlideAnimation> drop_hover_animation_; 212 scoped_ptr<SlideAnimation> drop_hover_animation_;
185 213
186 // Animation for download complete. 214 // Animation for download complete.
187 scoped_ptr<SlideAnimation> complete_animation_; 215 scoped_ptr<SlideAnimation> complete_animation_;
188 216
189 // Progress animation 217 // Progress animation
190 base::RepeatingTimer<DownloadItemView> progress_timer_; 218 base::RepeatingTimer<DownloadItemView> progress_timer_;
191 219
220 // Dangerous mode buttons.
221 ChromeViews::NativeButton* save_button_;
222 ChromeViews::NativeButton* discard_button_;
223
224 // Dangerous mode label.
225 ChromeViews::Label* dangerous_download_label_;
226
227 // Whether the dangerous mode label has been sized yet.
228 bool dangerous_download_label_sized_;
229
230 // The size of the buttons. Cached so animation works when hidden.
231 CSize cached_button_size_;
232
192 DISALLOW_EVIL_CONSTRUCTORS(DownloadItemView); 233 DISALLOW_EVIL_CONSTRUCTORS(DownloadItemView);
193 }; 234 };
194 235
195 #endif // CHROME_BROWSER_VIEWS_DOWNLOAD_ITEM_VIEW_H__ 236 #endif // CHROME_BROWSER_VIEWS_DOWNLOAD_ITEM_VIEW_H__
196 237
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698