| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 #include "chrome/browser/ui/views/download/download_shelf_view.h" | 5 #include "chrome/browser/ui/views/download/download_shelf_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 87 |
| 88 int CenterPosition(int size, int target_size) { | 88 int CenterPosition(int size, int target_size) { |
| 89 return std::max((target_size - size) / 2, kTopBottomPadding); | 89 return std::max((target_size - size) / 2, kTopBottomPadding); |
| 90 } | 90 } |
| 91 | 91 |
| 92 } // namespace | 92 } // namespace |
| 93 | 93 |
| 94 DownloadShelfView::DownloadShelfView(Browser* browser, BrowserView* parent) | 94 DownloadShelfView::DownloadShelfView(Browser* browser, BrowserView* parent) |
| 95 : browser_(browser), | 95 : browser_(browser), |
| 96 parent_(parent), | 96 parent_(parent), |
| 97 auto_closed_(true), | |
| 98 ALLOW_THIS_IN_INITIALIZER_LIST( | 97 ALLOW_THIS_IN_INITIALIZER_LIST( |
| 99 mouse_watcher_(new views::MouseWatcherViewHost(this, gfx::Insets()), | 98 mouse_watcher_(new views::MouseWatcherViewHost(this, gfx::Insets()), |
| 100 this)) { | 99 this)) { |
| 101 mouse_watcher_.set_notify_on_exit_time( | 100 mouse_watcher_.set_notify_on_exit_time( |
| 102 base::TimeDelta::FromMilliseconds(kNotifyOnExitTimeMS)); | 101 base::TimeDelta::FromMilliseconds(kNotifyOnExitTimeMS)); |
| 103 set_id(VIEW_ID_DOWNLOAD_SHELF); | 102 set_id(VIEW_ID_DOWNLOAD_SHELF); |
| 104 parent->AddChildView(this); | 103 parent->AddChildView(this); |
| 105 } | 104 } |
| 106 | 105 |
| 107 DownloadShelfView::~DownloadShelfView() { | 106 DownloadShelfView::~DownloadShelfView() { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 120 new_item_animation_->Reset(); | 119 new_item_animation_->Reset(); |
| 121 new_item_animation_->Show(); | 120 new_item_animation_->Show(); |
| 122 } | 121 } |
| 123 | 122 |
| 124 void DownloadShelfView::DoAddDownload(DownloadItem* download) { | 123 void DownloadShelfView::DoAddDownload(DownloadItem* download) { |
| 125 DownloadItemView* view = new DownloadItemView(download, this); | 124 DownloadItemView* view = new DownloadItemView(download, this); |
| 126 AddDownloadView(view); | 125 AddDownloadView(view); |
| 127 } | 126 } |
| 128 | 127 |
| 129 void DownloadShelfView::MouseMovedOutOfHost() { | 128 void DownloadShelfView::MouseMovedOutOfHost() { |
| 130 Close(); | 129 Close(AUTOMATIC); |
| 131 } | 130 } |
| 132 | 131 |
| 133 void DownloadShelfView::OnWillChangeFocus(views::View* focused_before, | 132 void DownloadShelfView::OnWillChangeFocus(views::View* focused_before, |
| 134 views::View* focused_now) { | 133 views::View* focused_now) { |
| 135 SchedulePaintForDownloadItem(focused_before); | 134 SchedulePaintForDownloadItem(focused_before); |
| 136 SchedulePaintForDownloadItem(focused_now); | 135 SchedulePaintForDownloadItem(focused_now); |
| 137 } | 136 } |
| 138 | 137 |
| 139 void DownloadShelfView::OnDidChangeFocus(views::View* focused_before, | 138 void DownloadShelfView::OnDidChangeFocus(views::View* focused_before, |
| 140 views::View* focused_now) { | 139 views::View* focused_now) { |
| 141 AccessiblePaneView::OnDidChangeFocus(focused_before, focused_now); | 140 AccessiblePaneView::OnDidChangeFocus(focused_before, focused_now); |
| 142 } | 141 } |
| 143 | 142 |
| 144 void DownloadShelfView::RemoveDownloadView(View* view) { | 143 void DownloadShelfView::RemoveDownloadView(View* view) { |
| 145 DCHECK(view); | 144 DCHECK(view); |
| 146 std::vector<DownloadItemView*>::iterator i = | 145 std::vector<DownloadItemView*>::iterator i = |
| 147 find(download_views_.begin(), download_views_.end(), view); | 146 find(download_views_.begin(), download_views_.end(), view); |
| 148 DCHECK(i != download_views_.end()); | 147 DCHECK(i != download_views_.end()); |
| 149 download_views_.erase(i); | 148 download_views_.erase(i); |
| 150 RemoveChildView(view); | 149 RemoveChildView(view); |
| 151 delete view; | 150 delete view; |
| 152 if (download_views_.empty()) | 151 if (download_views_.empty()) |
| 153 Close(); | 152 Close(AUTOMATIC); |
| 154 else if (CanAutoClose()) | 153 else if (CanAutoClose()) |
| 155 mouse_watcher_.Start(); | 154 mouse_watcher_.Start(); |
| 156 Layout(); | 155 Layout(); |
| 157 SchedulePaint(); | 156 SchedulePaint(); |
| 158 } | 157 } |
| 159 | 158 |
| 160 views::View* DownloadShelfView::GetDefaultFocusableChild() { | 159 views::View* DownloadShelfView::GetDefaultFocusableChild() { |
| 161 return download_views_.empty() ? | 160 return download_views_.empty() ? |
| 162 static_cast<View*>(show_all_view_) : download_views_[0]; | 161 static_cast<View*>(show_all_view_) : download_views_[0]; |
| 163 } | 162 } |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 void DownloadShelfView::OnThemeChanged() { | 377 void DownloadShelfView::OnThemeChanged() { |
| 379 UpdateColorsFromTheme(); | 378 UpdateColorsFromTheme(); |
| 380 } | 379 } |
| 381 | 380 |
| 382 void DownloadShelfView::LinkClicked(views::Link* source, int event_flags) { | 381 void DownloadShelfView::LinkClicked(views::Link* source, int event_flags) { |
| 383 chrome::ShowDownloads(browser_); | 382 chrome::ShowDownloads(browser_); |
| 384 } | 383 } |
| 385 | 384 |
| 386 void DownloadShelfView::ButtonPressed( | 385 void DownloadShelfView::ButtonPressed( |
| 387 views::Button* button, const ui::Event& event) { | 386 views::Button* button, const ui::Event& event) { |
| 388 auto_closed_ = false; | 387 Close(USER_ACTION); |
| 389 Close(); | |
| 390 } | 388 } |
| 391 | 389 |
| 392 bool DownloadShelfView::IsShowing() const { | 390 bool DownloadShelfView::IsShowing() const { |
| 393 return shelf_animation_->IsShowing(); | 391 return shelf_animation_->IsShowing(); |
| 394 } | 392 } |
| 395 | 393 |
| 396 bool DownloadShelfView::IsClosing() const { | 394 bool DownloadShelfView::IsClosing() const { |
| 397 return shelf_animation_->IsClosing(); | 395 return shelf_animation_->IsClosing(); |
| 398 } | 396 } |
| 399 | 397 |
| 400 void DownloadShelfView::DoShow() { | 398 void DownloadShelfView::DoShow() { |
| 401 shelf_animation_->Show(); | 399 shelf_animation_->Show(); |
| 402 } | 400 } |
| 403 | 401 |
| 404 void DownloadShelfView::DoClose() { | 402 void DownloadShelfView::DoClose(CloseReason reason) { |
| 405 int num_in_progress = 0; | 403 int num_in_progress = 0; |
| 406 for (size_t i = 0; i < download_views_.size(); ++i) { | 404 for (size_t i = 0; i < download_views_.size(); ++i) { |
| 407 if (download_views_[i]->download()->IsInProgress()) | 405 if (download_views_[i]->download()->IsInProgress()) |
| 408 ++num_in_progress; | 406 ++num_in_progress; |
| 409 } | 407 } |
| 410 download_util::RecordShelfClose( | 408 download_util::RecordShelfClose(download_views_.size(), |
| 411 download_views_.size(), num_in_progress, auto_closed_); | 409 num_in_progress, |
| 410 reason == AUTOMATIC); |
| 412 parent_->SetDownloadShelfVisible(false); | 411 parent_->SetDownloadShelfVisible(false); |
| 413 shelf_animation_->Hide(); | 412 shelf_animation_->Hide(); |
| 414 auto_closed_ = true; | |
| 415 } | 413 } |
| 416 | 414 |
| 417 Browser* DownloadShelfView::browser() const { | 415 Browser* DownloadShelfView::browser() const { |
| 418 return browser_; | 416 return browser_; |
| 419 } | 417 } |
| 420 | 418 |
| 421 void DownloadShelfView::Closed() { | 419 void DownloadShelfView::Closed() { |
| 422 // Don't remove completed downloads if the shelf is just being auto-hidden | 420 // Don't remove completed downloads if the shelf is just being auto-hidden |
| 423 // rather than explicitly closed by the user. | 421 // rather than explicitly closed by the user. |
| 424 if (is_hidden()) | 422 if (is_hidden()) |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 const DownloadItemView* download_item_view) { | 471 const DownloadItemView* download_item_view) { |
| 474 gfx::Rect bounds = download_item_view->bounds(); | 472 gfx::Rect bounds = download_item_view->bounds(); |
| 475 | 473 |
| 476 #if defined(TOOLKIT_VIEWS) | 474 #if defined(TOOLKIT_VIEWS) |
| 477 bounds.set_height(bounds.height() - 1); | 475 bounds.set_height(bounds.height() - 1); |
| 478 bounds.Offset(0, 3); | 476 bounds.Offset(0, 3); |
| 479 #endif | 477 #endif |
| 480 | 478 |
| 481 return bounds; | 479 return bounds; |
| 482 } | 480 } |
| OLD | NEW |