关于对话框,主要实现了让用户查看当前软件的版本、软件信息和检查升级的功能。因此这个类主要继续 ChromeViews::View 类、 ChromeViews::DialogDelegate 和 GoogleUpdateStatusListener 。其中 ChromeViews::View 实现窗口的布局和显示问题, ChromeViews::DialogDelegate 实现了事件响应,或者窗口某时是否可以显示按钮的问题, GoogleUpdateStatusListener 是用来实现接收更新程序状态信息。
这个类的声明如下:
class AboutChromeView : public ChromeViews::View,
public ChromeViews::DialogDelegate,
public GoogleUpdateStatusListener {
public:
explicit AboutChromeView(Profile* profile);
virtual ~AboutChromeView();
// Initialize the controls on the dialog.
void Init();
// Overridden from ChromeViews::View:
virtual void GetPreferredSize(CSize *out);
virtual void Layout();
virtual void ViewHierarchyChanged(bool is_add,
ChromeViews::View* parent,
ChromeViews::View* child);
// Overridden from ChromeViews::DialogDelegate:
virtual int GetDialogButtons() const;
virtual std::wstring GetDialogButtonLabel(DialogButton button) const;
virtual bool IsDialogButtonEnabled(DialogButton button) const;
virtual bool IsDialogButtonVisible(DialogButton button) 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 ChromeViews::View* GetContentsView();
// Overridden from GoogleUpdateStatusListener:
virtual void OnReportResults(GoogleUpdateUpgradeResult result,
GoogleUpdateErrorCode error_code,
const std::wstring& version);
private:
// The visible state of the Check For Updates button.
enum CheckButtonStatus {
CHECKBUTTON_HIDDEN = 0,
CHECKBUTTON_DISABLED,
CHECKBUTTON_ENABLED,
};
// Update the UI to show the status of the upgrade.
void UpdateStatus(GoogleUpdateUpgradeResult result,
GoogleUpdateErrorCode error_code);
Profile* profile_;
// UI elements on the dialog.
ChromeViews::ImageView* about_dlg_background_;
ChromeViews::Label* about_title_label_;
ChromeViews::TextField* version_label_;
ChromeViews::TextField* main_text_label_;
// UI elements we add to the parent view.
scoped_ptr<ChromeViews::Throbber> throbber_;
ChromeViews::ImageView success_indicator_;
ChromeViews::ImageView update_available_indicator_;
ChromeViews::ImageView timeout_indicator_;
ChromeViews::Label update_label_;
// Keeps track of the visible state of the Check For Updates button.
CheckButtonStatus check_button_status_;
// The class that communicates with Google Update to find out if an update is
// available and asks it to start an upgrade.
GoogleUpdate* google_updater_;
// Our current version.
std::wstring current_version_;
// The version Google Update reports is available to us.
std::wstring new_version_available_;
DISALLOW_EVIL_CONSTRUCTORS(AboutChromeView);
};
通过关于对话框的分析,可以理解到 chrome 浏览器窗口基本组成,以及窗口继承关系,还有事件的响应方式。前面三次分析,主要是入门的分析,也是了解这么一个大工程的一种手段。比如测试整个工程是否可以编译,是否可以修改代码等等。后面的分析会以浏览器输入 HTTP 连接开始,直到打开网页显示为一个主线,做一个基本的分析。