| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VIEWS_WINDOW_WINDOW_H_ | 5 #ifndef VIEWS_WINDOW_WINDOW_H_ |
| 6 #define VIEWS_WINDOW_WINDOW_H_ | 6 #define VIEWS_WINDOW_WINDOW_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "ui/gfx/native_widget_types.h" | 9 #include "ui/gfx/native_widget_types.h" |
| 10 #include "views/widget/widget.h" | 10 #include "views/widget/widget.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 // | 32 // |
| 33 // TODO(beng): Subclass Widget as part of V2. | 33 // TODO(beng): Subclass Widget as part of V2. |
| 34 // | 34 // |
| 35 // TODO(beng): Note that this class being non-abstract means that we have a | 35 // TODO(beng): Note that this class being non-abstract means that we have a |
| 36 // violation of Google style in that we are using multiple | 36 // violation of Google style in that we are using multiple |
| 37 // inheritance. The intention is to split this into a separate | 37 // inheritance. The intention is to split this into a separate |
| 38 // object associated with but not equal to a NativeWidget | 38 // object associated with but not equal to a NativeWidget |
| 39 // implementation. Multiple inheritance is required for this | 39 // implementation. Multiple inheritance is required for this |
| 40 // transitional step. | 40 // transitional step. |
| 41 // | 41 // |
| 42 class Window : public internal::NativeWindowDelegate { | 42 class Window : public Widget, |
| 43 public internal::NativeWindowDelegate { |
| 43 public: | 44 public: |
| 44 struct InitParams { | 45 struct InitParams { |
| 45 // |window_delegate| cannot be NULL. | 46 // |window_delegate| cannot be NULL. |
| 46 explicit InitParams(WindowDelegate* window_delegate); | 47 explicit InitParams(WindowDelegate* window_delegate); |
| 47 | 48 |
| 48 WindowDelegate* window_delegate; | 49 WindowDelegate* window_delegate; |
| 49 gfx::NativeWindow parent_window; | 50 gfx::NativeWindow parent_window; |
| 50 NativeWindow* native_window; | 51 NativeWindow* native_window; |
| 51 Widget::InitParams widget_init_params; | 52 Widget::InitParams widget_init_params; |
| 52 }; | 53 }; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 64 // Returns the preferred size of the contents view of this window based on | 65 // Returns the preferred size of the contents view of this window based on |
| 65 // its localized size data. The width in cols is held in a localized string | 66 // its localized size data. The width in cols is held in a localized string |
| 66 // resource identified by |col_resource_id|, the height in the same fashion. | 67 // resource identified by |col_resource_id|, the height in the same fashion. |
| 67 // TODO(beng): This should eventually live somewhere else, probably closer to | 68 // TODO(beng): This should eventually live somewhere else, probably closer to |
| 68 // ClientView. | 69 // ClientView. |
| 69 static int GetLocalizedContentsWidth(int col_resource_id); | 70 static int GetLocalizedContentsWidth(int col_resource_id); |
| 70 static int GetLocalizedContentsHeight(int row_resource_id); | 71 static int GetLocalizedContentsHeight(int row_resource_id); |
| 71 static gfx::Size GetLocalizedContentsSize(int col_resource_id, | 72 static gfx::Size GetLocalizedContentsSize(int col_resource_id, |
| 72 int row_resource_id); | 73 int row_resource_id); |
| 73 | 74 |
| 74 // Closes all windows that aren't identified as "app windows" via | |
| 75 // IsAppWindow. Called during application shutdown when the last "app window" | |
| 76 // is closed. | |
| 77 static void CloseAllSecondaryWindows(); | |
| 78 | |
| 79 // Used by |CloseAllSecondaryWindows|. If |widget|'s window is a secondary | |
| 80 // window, the window is closed. If |widget| has no window, it is closed. | |
| 81 // Does nothing if |widget| is null. | |
| 82 static void CloseSecondaryWidget(Widget* widget); | |
| 83 | |
| 84 // Initializes the window. Must be called before any post-configuration | 75 // Initializes the window. Must be called before any post-configuration |
| 85 // operations are performed. | 76 // operations are performed. |
| 86 void InitWindow(const InitParams& params); | 77 void InitWindow(const InitParams& params); |
| 87 | 78 |
| 88 // Retrieves the window's bounds, including its frame. | 79 // Retrieves the window's bounds, including its frame. |
| 89 gfx::Rect GetBounds() const; | 80 gfx::Rect GetBounds() const; |
| 90 | 81 |
| 91 // Retrieves the restored bounds for the window. | 82 // Retrieves the restored bounds for the window. |
| 92 gfx::Rect GetNormalBounds() const; | 83 gfx::Rect GetNormalBounds() const; |
| 93 | 84 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 117 // Activates the window, assuming it already exists and is visible. | 108 // Activates the window, assuming it already exists and is visible. |
| 118 void Activate(); | 109 void Activate(); |
| 119 | 110 |
| 120 // Deactivates the window, making the next window in the Z order the active | 111 // Deactivates the window, making the next window in the Z order the active |
| 121 // window. | 112 // window. |
| 122 void Deactivate(); | 113 void Deactivate(); |
| 123 | 114 |
| 124 // Closes the window, ultimately destroying it. The window hides immediately, | 115 // Closes the window, ultimately destroying it. The window hides immediately, |
| 125 // and is destroyed after a return to the message loop. Close() can be called | 116 // and is destroyed after a return to the message loop. Close() can be called |
| 126 // multiple times. | 117 // multiple times. |
| 127 void CloseWindow(); | 118 virtual void Close() OVERRIDE; |
| 128 | 119 |
| 129 // Maximizes/minimizes/restores the window. | 120 // Maximizes/minimizes/restores the window. |
| 130 void Maximize(); | 121 void Maximize(); |
| 131 void Minimize(); | 122 void Minimize(); |
| 132 void Restore(); | 123 void Restore(); |
| 133 | 124 |
| 134 // Whether or not the window is currently active. | 125 // Whether or not the window is currently active. |
| 135 bool IsActive() const; | 126 bool IsActive() const; |
| 136 | 127 |
| 137 // Whether or not the window is currently visible. | 128 // Whether or not the window is currently visible. |
| 138 bool IsVisible() const; | 129 bool IsVisible() const; |
| 139 | 130 |
| 140 // Whether or not the window is maximized or minimized. | 131 // Whether or not the window is maximized or minimized. |
| 141 bool IsMaximized() const; | 132 virtual bool IsMaximized() const; |
| 142 bool IsMinimized() const; | 133 bool IsMinimized() const; |
| 143 | 134 |
| 144 // Accessors for fullscreen state. | 135 // Accessors for fullscreen state. |
| 145 void SetFullscreen(bool fullscreen); | 136 void SetFullscreen(bool fullscreen); |
| 146 bool IsFullscreen() const; | 137 bool IsFullscreen() const; |
| 147 | 138 |
| 148 // Sets whether or not the window should show its frame as a "transient drag | 139 // Sets whether or not the window should show its frame as a "transient drag |
| 149 // frame" - slightly transparent and without the standard window controls. | 140 // frame" - slightly transparent and without the standard window controls. |
| 150 void SetUseDragFrame(bool use_drag_frame); | 141 void SetUseDragFrame(bool use_drag_frame); |
| 151 | 142 |
| 152 // Returns true if the Window is considered to be an "app window" - i.e. | |
| 153 // any window which when it is the last of its type closed causes the | |
| 154 // application to exit. | |
| 155 virtual bool IsAppWindow() const; | |
| 156 | |
| 157 // Toggles the enable state for the Close button (and the Close menu item in | 143 // Toggles the enable state for the Close button (and the Close menu item in |
| 158 // the system menu). | 144 // the system menu). |
| 159 void EnableClose(bool enable); | 145 void EnableClose(bool enable); |
| 160 | 146 |
| 161 // Tell the window to update its title from the delegate. | 147 // Tell the window to update its title from the delegate. |
| 162 void UpdateWindowTitle(); | 148 void UpdateWindowTitle(); |
| 163 | 149 |
| 164 // Tell the window to update its icon from the delegate. | 150 // Tell the window to update its icon from the delegate. |
| 165 void UpdateWindowIcon(); | 151 void UpdateWindowIcon(); |
| 166 | 152 |
| 167 // Sets whether or not the window is always-on-top. | 153 // Sets whether or not the window is always-on-top. |
| 168 void SetIsAlwaysOnTop(bool always_on_top); | 154 void SetIsAlwaysOnTop(bool always_on_top); |
| 169 | 155 |
| 170 // Creates an appropriate NonClientFrameView for this window. | 156 // Creates an appropriate NonClientFrameView for this window. |
| 171 virtual NonClientFrameView* CreateFrameViewForWindow(); | 157 virtual NonClientFrameView* CreateFrameViewForWindow(); |
| 172 | 158 |
| 173 // Updates the frame after an event caused it to be changed. | 159 // Updates the frame after an event caused it to be changed. |
| 174 virtual void UpdateFrameAfterFrameChange(); | 160 virtual void UpdateFrameAfterFrameChange(); |
| 175 | 161 |
| 176 // Retrieves the Window's native window handle. | 162 // Retrieves the Window's native window handle. |
| 177 gfx::NativeWindow GetNativeWindow() const; | 163 gfx::NativeWindow GetNativeWindow() const; |
| 178 | 164 |
| 179 // Whether we should be using a native frame. | 165 // Whether we should be using a native frame. |
| 180 bool ShouldUseNativeFrame() const; | 166 bool ShouldUseNativeFrame() const; |
| 181 | 167 |
| 182 // Tell the window that something caused the frame type to change. | 168 // Tell the window that something caused the frame type to change. |
| 183 void FrameTypeChanged(); | 169 void FrameTypeChanged(); |
| 184 | 170 |
| 185 // TODO(beng): remove once Window subclasses Widget. | |
| 186 Widget* AsWidget(); | |
| 187 const Widget* AsWidget() const; | |
| 188 | |
| 189 WindowDelegate* window_delegate() { | 171 WindowDelegate* window_delegate() { |
| 190 return const_cast<WindowDelegate*>( | 172 return const_cast<WindowDelegate*>( |
| 191 const_cast<const Window*>(this)->window_delegate()); | 173 const_cast<const Window*>(this)->window_delegate()); |
| 192 } | 174 } |
| 193 const WindowDelegate* window_delegate() const { | 175 const WindowDelegate* window_delegate() const { |
| 194 return window_delegate_; | 176 return window_delegate_; |
| 195 } | 177 } |
| 196 | 178 |
| 197 NonClientView* non_client_view() { | 179 NonClientView* non_client_view() { |
| 198 return const_cast<NonClientView*>( | 180 return const_cast<NonClientView*>( |
| 199 const_cast<const Window*>(this)->non_client_view()); | 181 const_cast<const Window*>(this)->non_client_view()); |
| 200 } | 182 } |
| 201 const NonClientView* non_client_view() const { | 183 const NonClientView* non_client_view() const { |
| 202 return non_client_view_; | 184 return non_client_view_; |
| 203 } | 185 } |
| 204 | 186 |
| 205 ClientView* client_view() { | 187 ClientView* client_view() { |
| 206 return const_cast<ClientView*>( | 188 return const_cast<ClientView*>( |
| 207 const_cast<const Window*>(this)->client_view()); | 189 const_cast<const Window*>(this)->client_view()); |
| 208 } | 190 } |
| 209 const ClientView* client_view() const { | 191 const ClientView* client_view() const { |
| 210 return non_client_view()->client_view(); | 192 return non_client_view()->client_view(); |
| 211 } | 193 } |
| 212 | 194 |
| 213 NativeWindow* native_window() { return native_window_; } | 195 NativeWindow* native_window() { return native_window_; } |
| 214 | 196 |
| 215 protected: | 197 protected: |
| 216 // TODO(beng): Temporarily provided as a way to associate the subclass' | |
| 217 // implementation of NativeWidget with this. | |
| 218 void SetNativeWindow(NativeWindow* native_window); | |
| 219 | |
| 220 // Overridden from NativeWindowDelegate: | 198 // Overridden from NativeWindowDelegate: |
| 221 virtual bool CanActivate() const OVERRIDE; | 199 virtual bool CanActivate() const OVERRIDE; |
| 222 virtual bool IsInactiveRenderingDisabled() const OVERRIDE; | 200 virtual bool IsInactiveRenderingDisabled() const OVERRIDE; |
| 223 virtual void EnableInactiveRendering() OVERRIDE; | 201 virtual void EnableInactiveRendering() OVERRIDE; |
| 224 virtual bool IsModal() const OVERRIDE; | 202 virtual bool IsModal() const OVERRIDE; |
| 225 virtual bool IsDialogBox() const OVERRIDE; | 203 virtual bool IsDialogBox() const OVERRIDE; |
| 226 virtual bool IsUsingNativeFrame() const OVERRIDE; | 204 virtual bool IsUsingNativeFrame() const OVERRIDE; |
| 227 virtual gfx::Size GetMinimumSize() const OVERRIDE; | 205 virtual gfx::Size GetMinimumSize() const OVERRIDE; |
| 228 virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE; | 206 virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE; |
| 229 virtual bool ExecuteCommand(int command_id) OVERRIDE; | 207 virtual bool ExecuteCommand(int command_id) OVERRIDE; |
| 230 virtual void OnNativeWindowCreated(const gfx::Rect& bounds) OVERRIDE; | 208 virtual void OnNativeWindowCreated(const gfx::Rect& bounds) OVERRIDE; |
| 231 virtual void OnNativeWindowActivationChanged(bool active) OVERRIDE; | 209 virtual void OnNativeWindowActivationChanged(bool active) OVERRIDE; |
| 232 virtual void OnNativeWindowBeginUserBoundsChange() OVERRIDE; | 210 virtual void OnNativeWindowBeginUserBoundsChange() OVERRIDE; |
| 233 virtual void OnNativeWindowEndUserBoundsChange() OVERRIDE; | 211 virtual void OnNativeWindowEndUserBoundsChange() OVERRIDE; |
| 234 virtual void OnNativeWindowDestroying() OVERRIDE; | 212 virtual void OnNativeWindowDestroying() OVERRIDE; |
| 235 virtual void OnNativeWindowDestroyed() OVERRIDE; | 213 virtual void OnNativeWindowDestroyed() OVERRIDE; |
| 236 virtual void OnNativeWindowBoundsChanged() OVERRIDE; | 214 virtual void OnNativeWindowBoundsChanged() OVERRIDE; |
| 215 virtual Window* AsWindow() OVERRIDE; |
| 216 virtual internal::NativeWidgetDelegate* AsNativeWidgetDelegate() OVERRIDE; |
| 237 | 217 |
| 238 private: | 218 private: |
| 239 // Sizes and positions the window just after it is created. | 219 // Sizes and positions the window just after it is created. |
| 240 void SetInitialBounds(const gfx::Rect& bounds); | 220 void SetInitialBounds(const gfx::Rect& bounds); |
| 241 | 221 |
| 242 // Persists the window's restored position and maximized state using the | 222 // Persists the window's restored position and maximized state using the |
| 243 // window delegate. | 223 // window delegate. |
| 244 void SaveWindowPosition(); | 224 void SaveWindowPosition(); |
| 245 | 225 |
| 246 NativeWindow* native_window_; | 226 NativeWindow* native_window_; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 267 | 247 |
| 268 // Set to true if the window is in the process of closing . | 248 // Set to true if the window is in the process of closing . |
| 269 bool window_closed_; | 249 bool window_closed_; |
| 270 | 250 |
| 271 DISALLOW_COPY_AND_ASSIGN(Window); | 251 DISALLOW_COPY_AND_ASSIGN(Window); |
| 272 }; | 252 }; |
| 273 | 253 |
| 274 } // namespace views | 254 } // namespace views |
| 275 | 255 |
| 276 #endif // #ifndef VIEWS_WINDOW_WINDOW_H_ | 256 #endif // #ifndef VIEWS_WINDOW_WINDOW_H_ |
| OLD | NEW |