blob: ed85ebc93b8cfefa2e7ffd9f2e8738eb28bbebde [file] [log] [blame]
// Copyright (c) 2011 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_UI_VIEWS_ABOUT_CHROME_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_ABOUT_CHROME_VIEW_H_
#pragma once
#include <string>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "views/controls/image_view.h"
#include "views/controls/label.h"
#include "views/controls/link_listener.h"
#include "views/view.h"
#include "views/window/dialog_delegate.h"
#if defined(OS_WIN) && !defined(USE_AURA)
#include "chrome/browser/google/google_update.h"
#endif
namespace views {
class Textfield;
class Throbber;
}
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::DialogDelegateView,
public views::LinkListener
#if defined(OS_WIN) && !defined(USE_AURA)
, 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() OVERRIDE;
virtual void Layout() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void ViewHierarchyChanged(bool is_add,
views::View* parent,
views::View* child) OVERRIDE;
// Overridden from views::DialogDelegate:
virtual string16 GetDialogButtonLabel(
ui::MessageBoxFlags::DialogButton button) const OVERRIDE;
virtual bool IsDialogButtonEnabled(
ui::MessageBoxFlags::DialogButton button) const OVERRIDE;
virtual bool IsDialogButtonVisible(
ui::MessageBoxFlags::DialogButton button) const OVERRIDE;
virtual int GetDefaultDialogButton() const OVERRIDE;
virtual bool CanResize() const OVERRIDE;
virtual bool CanMaximize() const OVERRIDE;
virtual bool IsModal() const OVERRIDE;
virtual string16 GetWindowTitle() const OVERRIDE;
virtual bool Accept() OVERRIDE;
virtual views::View* GetContentsView() OVERRIDE;
// Overridden from views::LinkListener:
virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
#if defined(OS_WIN) && !defined(USE_AURA)
// Overridden from GoogleUpdateStatusListener:
virtual void OnReportResults(GoogleUpdateUpgradeResult result,
GoogleUpdateErrorCode error_code,
const std::wstring& version) OVERRIDE;
#endif
private:
#if defined(OS_WIN) && !defined(USE_AURA)
// Update the UI to show the status of the upgrade.
void UpdateStatus(GoogleUpdateUpgradeResult result,
GoogleUpdateErrorCode error_code);
#endif
Profile* profile_;
// UI elements on the dialog.
views::ImageView* about_dlg_background_logo_;
views::Label* about_title_label_;
views::Textfield* version_label_;
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 Restart Now button.
bool restart_button_visible_;
// 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_|.
string16 main_label_chunk1_;
string16 main_label_chunk2_;
string16 main_label_chunk3_;
string16 main_label_chunk4_;
string16 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(USE_AURA)
// 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
// 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_;
DISALLOW_COPY_AND_ASSIGN(AboutChromeView);
};
#endif // CHROME_BROWSER_UI_VIEWS_ABOUT_CHROME_VIEW_H_