diff options
Diffstat (limited to 'chrome/browser/views/about_chrome_view.h')
-rw-r--r-- | chrome/browser/views/about_chrome_view.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/chrome/browser/views/about_chrome_view.h b/chrome/browser/views/about_chrome_view.h new file mode 100644 index 0000000..ebfa73b --- /dev/null +++ b/chrome/browser/views/about_chrome_view.h @@ -0,0 +1,179 @@ +// 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. + +#ifndef CHROME_BROWSER_VIEWS_ABOUT_CHROME_VIEW_H_ +#define CHROME_BROWSER_VIEWS_ABOUT_CHROME_VIEW_H_ + +#include "views/controls/image_view.h" +#include "views/controls/label.h" +#include "views/controls/link.h" +#include "views/view.h" +#include "views/window/dialog_delegate.h" + +#if defined(OS_WIN) || defined(OS_CHROMEOS) +#include "chrome/browser/google_update.h" +#endif +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/version_loader.h" +#endif + +namespace views { +class Textfield; +class Throbber; +class Window; +} + +class AccessibleViewHelper; +class Profile; + +//////////////////////////////////////////////////////////////////////////////// +// +// The AboutChromeView class is responsible for drawing the UI controls of the +// About Chrome dialog that allows the user to see what version is installed +// and check for updates. +// +//////////////////////////////////////////////////////////////////////////////// +class AboutChromeView : public views::View, + public views::DialogDelegate, + public views::LinkController +#if defined(OS_WIN) || defined(OS_CHROMEOS) + , public GoogleUpdateStatusListener +#endif + { + public: + explicit AboutChromeView(Profile* profile); + virtual ~AboutChromeView(); + + // Initialize the controls on the dialog. + void Init(); + + // Overridden from views::View: + virtual gfx::Size GetPreferredSize(); + virtual void Layout(); + virtual void Paint(gfx::Canvas* canvas); + virtual void ViewHierarchyChanged(bool is_add, + views::View* parent, + views::View* child); + + // Overridden from views::DialogDelegate: + virtual std::wstring GetDialogButtonLabel( + MessageBoxFlags::DialogButton button) const; + virtual bool IsDialogButtonEnabled( + MessageBoxFlags::DialogButton button) const; + virtual bool IsDialogButtonVisible( + MessageBoxFlags::DialogButton button) const; + virtual int GetDefaultDialogButton() const; + virtual bool CanResize() const; + virtual bool CanMaximize() const; + virtual bool IsAlwaysOnTop() const; + virtual bool HasAlwaysOnTopMenu() const; + virtual bool IsModal() const; + virtual std::wstring GetWindowTitle() const; + virtual bool Accept(); + virtual views::View* GetContentsView(); + + // Overridden from views::LinkController: + virtual void LinkActivated(views::Link* source, int event_flags); +#if defined(OS_WIN) || defined(OS_CHROMEOS) + // Overridden from GoogleUpdateStatusListener: + virtual void OnReportResults(GoogleUpdateUpgradeResult result, + GoogleUpdateErrorCode error_code, + const std::wstring& version); +#endif + + private: + // The visible state of the Check For Updates button. + enum CheckButtonStatus { + CHECKBUTTON_HIDDEN = 0, + CHECKBUTTON_DISABLED, + CHECKBUTTON_ENABLED, + }; + +#if defined(OS_WIN) || defined(OS_CHROMEOS) + // Update the UI to show the status of the upgrade. + void UpdateStatus(GoogleUpdateUpgradeResult result, + GoogleUpdateErrorCode error_code); +#endif + +#if defined(OS_CHROMEOS) + // Callback from chromeos::VersionLoader giving the version. + void OnOSVersion(chromeos::VersionLoader::Handle handle, + std::string version); +#endif + + + Profile* profile_; + + // UI elements on the dialog. + views::ImageView* about_dlg_background_logo_; + views::Label* about_title_label_; + views::Textfield* version_label_; +#if defined(OS_CHROMEOS) + views::Textfield* os_version_label_; +#endif + views::Label* copyright_label_; + views::Label* main_text_label_; + int main_text_label_height_; + views::Link* chromium_url_; + gfx::Rect chromium_url_rect_; + views::Link* open_source_url_; + gfx::Rect open_source_url_rect_; + views::Link* terms_of_service_url_; + gfx::Rect terms_of_service_url_rect_; + // UI elements we add to the parent view. + scoped_ptr<views::Throbber> throbber_; + views::ImageView success_indicator_; + views::ImageView update_available_indicator_; + views::ImageView timeout_indicator_; + views::Label update_label_; + + // The dialog dimensions. + gfx::Size dialog_dimensions_; + + // Keeps track of the visible state of the Check For Updates button. + CheckButtonStatus check_button_status_; + + // The text to display as the main label of the About box. We draw this text + // word for word with the help of the WordIterator, and make room for URLs + // which are drawn using views::Link. See also |url_offsets_|. + std::wstring main_label_chunk1_; + std::wstring main_label_chunk2_; + std::wstring main_label_chunk3_; + std::wstring main_label_chunk4_; + std::wstring main_label_chunk5_; + // Determines the order of the two links we draw in the main label. + bool chromium_url_appears_first_; + +#if defined(OS_WIN) || defined(OS_CHROMEOS) + // The class that communicates with Google Update to find out if an update is + // available and asks it to start an upgrade. + scoped_refptr<GoogleUpdate> google_updater_; +#endif + + // Our current version. + std::wstring current_version_; + + // Additional information about the version (channel and build number). + std::wstring version_details_; + + // The version Google Update reports is available to us. + std::wstring new_version_available_; + + // Whether text direction is left-to-right or right-to-left. + bool text_direction_is_rtl_; + +#if defined(OS_CHROMEOS) + // Handles asynchronously loading the version. + chromeos::VersionLoader loader_; + + // Used to request the version. + CancelableRequestConsumer consumer_; +#endif + + scoped_ptr<AccessibleViewHelper> accessible_view_helper_; + + DISALLOW_COPY_AND_ASSIGN(AboutChromeView); +}; + +#endif // CHROME_BROWSER_VIEWS_ABOUT_CHROME_VIEW_H_ |