diff options
Diffstat (limited to 'chrome/browser/download/download_shelf.cc')
-rw-r--r-- | chrome/browser/download/download_shelf.cc | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/chrome/browser/download/download_shelf.cc b/chrome/browser/download/download_shelf.cc index 826dc4e..3feca71 100644 --- a/chrome/browser/download/download_shelf.cc +++ b/chrome/browser/download/download_shelf.cc @@ -4,15 +4,23 @@ #include "chrome/browser/download/download_shelf.h" +#include "base/file_util.h" #include "chrome/browser/dom_ui/downloads_ui.h" +#include "chrome/browser/download/download_item_model.h" +#include "chrome/browser/download/download_manager.h" #include "chrome/browser/metrics/user_metrics.h" +#include "chrome/common/l10n_util.h" +#include "grit/generated_resources.h" #if defined(OS_WIN) +#include "chrome/browser/download/download_util.h" #include "chrome/browser/tab_contents/tab_contents.h" #elif defined(OS_POSIX) #include "chrome/common/temp_scaffolding_stubs.h" #endif +// DownloadShelf --------------------------------------------------------------- + void DownloadShelf::ShowAllDownloads() { #if defined(OS_WIN) Profile* profile = tab_contents_->profile(); @@ -32,3 +40,97 @@ void DownloadShelf::ChangeTabContents(TabContents* old_contents, DCHECK(old_contents == tab_contents_); tab_contents_ = new_contents; } + +// DownloadShelfContextMenu ---------------------------------------------------- + +DownloadShelfContextMenu::DownloadShelfContextMenu( + BaseDownloadItemModel* download_model) + : download_(download_model->download()), + model_(download_model) { +} + +DownloadShelfContextMenu::~DownloadShelfContextMenu() { +} + +bool DownloadShelfContextMenu::ItemIsChecked(int id) const { + switch (id) { + case OPEN_WHEN_COMPLETE: + return download_->open_when_complete(); + case ALWAYS_OPEN_TYPE: { + const FilePath::StringType extension = + file_util::GetFileExtensionFromPath(download_->full_path()); + return download_->manager()->ShouldOpenFileExtension(extension); + } + } + return false; +} + +bool DownloadShelfContextMenu::ItemIsDefault(int id) const { + return id == OPEN_WHEN_COMPLETE; +} + +std::wstring DownloadShelfContextMenu::GetItemLabel(int id) const { + switch (id) { + case SHOW_IN_FOLDER: + return l10n_util::GetString(IDS_DOWNLOAD_LINK_SHOW); + case OPEN_WHEN_COMPLETE: + if (download_->state() == DownloadItem::IN_PROGRESS) + return l10n_util::GetString(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE); + return l10n_util::GetString(IDS_DOWNLOAD_MENU_OPEN); + case ALWAYS_OPEN_TYPE: + return l10n_util::GetString(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); + case CANCEL: + return l10n_util::GetString(IDS_DOWNLOAD_MENU_CANCEL); + default: + NOTREACHED(); + } + return std::wstring(); +} + +bool DownloadShelfContextMenu::IsItemCommandEnabled(int id) const { + switch (id) { + case SHOW_IN_FOLDER: + case OPEN_WHEN_COMPLETE: + return download_->state() != DownloadItem::CANCELLED; + case ALWAYS_OPEN_TYPE: +#if defined(OS_WIN) + return download_util::CanOpenDownload(download_); +#else + // TODO(port): port download_util + NOTIMPLEMENTED(); + return true; +#endif + case CANCEL: + return download_->state() == DownloadItem::IN_PROGRESS; + default: + return id > 0 && id < MENU_LAST; + } +} + +void DownloadShelfContextMenu::ExecuteItemCommand(int id) { + switch (id) { + case SHOW_IN_FOLDER: + download_->manager()->ShowDownloadInShell(download_); + break; + case OPEN_WHEN_COMPLETE: +#if defined(OS_WIN) + download_util::OpenDownload(download_); +#else + // TODO(port): port download_util + NOTIMPLEMENTED(); +#endif + break; + case ALWAYS_OPEN_TYPE: { + const FilePath::StringType extension = + file_util::GetFileExtensionFromPath(download_->full_path()); + download_->manager()->OpenFilesOfExtension( + extension, !ItemIsChecked(ALWAYS_OPEN_TYPE)); + break; + } + case CANCEL: + model_->CancelTask(); + break; + default: + NOTREACHED(); + } +} |