summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download/download_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/download/download_util.h')
-rw-r--r--chrome/browser/download/download_util.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/chrome/browser/download/download_util.h b/chrome/browser/download/download_util.h
new file mode 100644
index 0000000..0ad10ab
--- /dev/null
+++ b/chrome/browser/download/download_util.h
@@ -0,0 +1,192 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Download utilities.
+
+#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UTIL_H__
+#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UTIL_H__
+
+#include <objidl.h>
+
+#include "base/basictypes.h"
+#include "base/task.h"
+#include "chrome/browser/views/download_item_view.h"
+#include "chrome/views/event.h"
+#include "chrome/views/menu.h"
+#include "chrome/views/view.h"
+
+class DownloadItem;
+class SkBitmap;
+
+namespace download_util {
+
+// DownloadContextMenu ---------------------------------------------------------
+
+// The base class of context menus that provides the various commands.
+// Subclasses are responsible for creating and running the menu.
+class BaseContextMenu : public Menu::Delegate {
+ public:
+ explicit BaseContextMenu(DownloadItem* download);
+ virtual ~BaseContextMenu();
+
+ enum ContextMenuCommands {
+ SHOW_IN_FOLDER = 1, // Open an Explorer window with the item highlighted
+ COPY_LINK, // Copy the download's URL to the clipboard
+ COPY_PATH, // Copy the download's full path to the clipboard
+ COPY_FILE, // Copy the downloaded file to the clipboard
+ OPEN_WHEN_COMPLETE, // Open the download when it's finished
+ ALWAYS_OPEN_TYPE, // Default this file extension to always open
+ REMOVE_ITEM, // Remove the download
+ CANCEL, // Cancel the download
+ MENU_LAST
+ };
+
+ // Menu::Delegate interface
+ virtual bool IsItemChecked(int id) const;
+ virtual bool IsItemDefault(int id) const;
+ virtual std::wstring GetLabel(int id) const;
+ virtual bool SupportsCommand(int id) const;
+ virtual bool IsCommandEnabled(int id) const;
+ virtual void ExecuteCommand(int id);
+
+ protected:
+ // Information source.
+ DownloadItem* download_;
+
+ private:
+ DISALLOW_EVIL_CONSTRUCTORS(BaseContextMenu);
+};
+
+// Menu for the download shelf.
+class DownloadShelfContextMenu : public BaseContextMenu {
+ public:
+ DownloadShelfContextMenu(DownloadItem* download,
+ HWND window,
+ DownloadItemView::BaseDownloadItemModel* model,
+ const CPoint& point);
+ virtual ~DownloadShelfContextMenu();
+
+ virtual bool IsItemDefault(int id) const;
+ virtual void ExecuteCommand(int id);
+
+ private:
+ // A model to control the cancel behavior.
+ DownloadItemView::BaseDownloadItemModel* model_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(DownloadShelfContextMenu);
+};
+
+// Menu for the download destination view.
+class DownloadDestinationContextMenu : public BaseContextMenu {
+ public:
+ DownloadDestinationContextMenu(DownloadItem* download,
+ HWND window,
+ const CPoint& point);
+ virtual ~DownloadDestinationContextMenu();
+
+ private:
+ DISALLOW_EVIL_CONSTRUCTORS(DownloadDestinationContextMenu);
+};
+
+// DownloadProgressTask --------------------------------------------------------
+
+// A class for managing the timed progress animations for a download view. The
+// view must implement an UpdateDownloadProgress() method.
+template<class DownloadView>
+class DownloadProgressTask : public Task {
+ public:
+ DownloadProgressTask(DownloadView* view) : view_(view) {}
+ virtual ~DownloadProgressTask() {}
+ virtual void Run() {
+ view_->UpdateDownloadProgress();
+ }
+ private:
+ DownloadView* view_;
+ DISALLOW_EVIL_CONSTRUCTORS(DownloadProgressTask);
+};
+
+// Download opening ------------------------------------------------------------
+
+// Whether it is OK to open this download.
+bool CanOpenDownload(DownloadItem* download);
+
+// Open the file associated with this download (wait for the download to
+// complete if it is in progress).
+void OpenDownload(DownloadItem* download);
+
+// Download progress animations ------------------------------------------------
+
+// Arc sweep angle for use with downloads of unknown size
+const int kUnknownAngleDegrees = 50;
+
+// Rate of progress for use with downloads of unknown size
+const int kUnknownIncrementDegrees = 12;
+
+// Start angle for downloads with known size (midnight position)
+const int kStartAngleDegrees = -90;
+
+// A circle
+const int kMaxDegrees = 360;
+
+// Progress animation timer period, in milliseconds.
+const int kProgressRateMs = 150;
+
+// XP and Vista must support icons of this size.
+const int kSmallIconSize = 16;
+const int kBigIconSize = 32;
+
+// Our progress halo around the icon
+const int kSmallProgressIconSize = 39;
+const int kBigProgressIconSize = 52;
+
+// The offset required to center the icon in the progress bitmaps.
+const int kSmallProgressIconOffset =
+ (kSmallProgressIconSize - kSmallIconSize) / 2;
+const int kBigProgressIconOffset = (kBigProgressIconSize - kBigIconSize) / 2;
+
+enum PaintDownloadProgressSize {
+ SMALL = 0,
+ BIG
+};
+
+// Paint the common download animation progress foreground and background,
+// clipping the foreground to 'percent' full. If percent is -1, then we don't
+// know the total size, so we just draw a rotating segment until we're done.
+//
+// |containing_view| is the View subclass within which the progress animation
+// is drawn (generally either DownloadItemTabView or DownloadItemView). We
+// require the containing View in addition to the canvas because if we are
+// drawing in a right-to-left locale, we need to mirror the position of the
+// progress animation within the containing View.
+void PaintDownloadProgress(ChromeCanvas* canvas,
+ ChromeViews::View* containing_view,
+ int origin_x,
+ int origin_y,
+ int start_angle,
+ int percent,
+ PaintDownloadProgressSize size);
+
+void PaintDownloadComplete(ChromeCanvas* canvas,
+ ChromeViews::View* containing_view,
+ int origin_x,
+ int origin_y,
+ double animation_progress,
+ PaintDownloadProgressSize size);
+
+// Drag support ----------------------------------------------------------------
+
+// Helper function for download views to use when acting as a drag source for a
+// DownloadItem. If 'icon' is NULL, no image will be accompany the drag.
+void DragDownload(const DownloadItem* download, SkBitmap* icon);
+
+// Executable file support -----------------------------------------------------
+
+// Copy all executable file extensions.
+void InitializeExeTypes(std::set<std::wstring>* exe_extensions);
+
+} // namespace download_util
+
+
+#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UTIL_H__
+