1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_WIN_H_
6#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_WIN_H_
7#pragma once
8
9#include "base/basictypes.h"
10#include "chrome/browser/ui/views/frame/browser_frame.h"
11#include "chrome/browser/ui/views/frame/native_browser_frame.h"
12#include "views/window/window_win.h"
13
14class BrowserView;
15class Profile;
16
17///////////////////////////////////////////////////////////////////////////////
18// BrowserFrameWin
19//
20//  BrowserFrame is a WindowWin subclass that provides the window frame for the
21//  Chrome browser window.
22//
23class BrowserFrameWin : public BrowserFrame,
24                        public views::WindowWin,
25                        public NativeBrowserFrame {
26 public:
27  // Normally you will create this class by calling BrowserFrame::Create.
28  // Init must be called before using this class, which Create will do for you.
29  BrowserFrameWin(BrowserView* browser_view, Profile* profile);
30  virtual ~BrowserFrameWin();
31
32  // This initialization function must be called after construction, it is
33  // separate to avoid recursive calling of the frame from its constructor.
34  void InitBrowserFrame();
35
36  BrowserView* browser_view() const { return browser_view_; }
37
38  // Explicitly sets how windows are shown. Use a value of -1 to give the
39  // default behavior. This is used during testing and not generally useful
40  // otherwise.
41  static void SetShowState(int state);
42
43 protected:
44  // Overridden from views::WindowWin:
45  virtual int GetShowState() const OVERRIDE;
46  virtual gfx::Insets GetClientAreaInsets() const OVERRIDE;
47  virtual bool GetAccelerator(int cmd_id,
48                              ui::Accelerator* accelerator) OVERRIDE;
49  virtual void OnEndSession(BOOL ending, UINT logoff) OVERRIDE;
50  virtual void OnInitMenuPopup(HMENU menu,
51                               UINT position,
52                               BOOL is_system_menu) OVERRIDE;
53  virtual void OnWindowPosChanged(WINDOWPOS* window_pos) OVERRIDE;
54  virtual ui::ThemeProvider* GetThemeProvider() const OVERRIDE;
55  virtual void OnScreenReaderDetected() OVERRIDE;
56
57  // Overridden from views::Window:
58  virtual void Activate() OVERRIDE;
59  virtual bool IsAppWindow() const OVERRIDE { return true; }
60  virtual void UpdateFrameAfterFrameChange() OVERRIDE;
61  virtual views::RootView* CreateRootView() OVERRIDE;
62  virtual views::NonClientFrameView* CreateFrameViewForWindow() OVERRIDE;
63  virtual bool ShouldUseNativeFrame() const OVERRIDE;
64
65  // Overridden from NativeBrowserFrame:
66  virtual views::NativeWindow* AsNativeWindow() OVERRIDE;
67  virtual const views::NativeWindow* AsNativeWindow() const OVERRIDE;
68  virtual BrowserNonClientFrameView* CreateBrowserNonClientFrameView() OVERRIDE;
69  virtual int GetMinimizeButtonOffset() const OVERRIDE;
70  virtual ui::ThemeProvider* GetThemeProviderForFrame() const OVERRIDE;
71  virtual bool AlwaysUseNativeFrame() const OVERRIDE;
72  virtual void TabStripDisplayModeChanged() OVERRIDE;
73
74 private:
75  // Updates the DWM with the frame bounds.
76  void UpdateDWMFrame();
77
78  NativeBrowserFrameDelegate* delegate_;
79
80  // The BrowserView is our ClientView. This is a pointer to it.
81  BrowserView* browser_view_;
82
83  DISALLOW_COPY_AND_ASSIGN(BrowserFrameWin);
84};
85
86#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_WIN_H_
87