diff options
Diffstat (limited to 'chrome/views/window/window_delegate.h')
-rw-r--r-- | chrome/views/window/window_delegate.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/chrome/views/window/window_delegate.h b/chrome/views/window/window_delegate.h new file mode 100644 index 0000000..52dd86a8 --- /dev/null +++ b/chrome/views/window/window_delegate.h @@ -0,0 +1,162 @@ +// 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_VIEWS_WINDOW_WINDOW_DELEGATE_H_ +#define CHROME_VIEWS_WINDOW_WINDOW_DELEGATE_H_ + +#include <string> + +#include "base/scoped_ptr.h" + +class SkBitmap; + +namespace gfx { +class Rect; +} +// TODO(maruel): Remove once gfx::Rect is used instead. +namespace WTL { +class CRect; +} +using WTL::CRect; + +namespace views { + +class ClientView; +class DialogDelegate; +class View; +class Window; + +/////////////////////////////////////////////////////////////////////////////// +// +// WindowDelegate +// +// WindowDelegate is an interface implemented by objects that wish to show a +// Window. The window that is displayed uses this interface to determine how +// it should be displayed and notify the delegate object of certain events. +// +/////////////////////////////////////////////////////////////////////////////// +class WindowDelegate { + public: + WindowDelegate(); + virtual ~WindowDelegate(); + + virtual DialogDelegate* AsDialogDelegate() { return NULL; } + + // Returns true if the window can ever be resized. + virtual bool CanResize() const { + return false; + } + + // Returns true if the window can ever be maximized. + virtual bool CanMaximize() const { + return false; + } + + // Returns true if the window should be placed on top of all other windows on + // the system, even when it is not active. If HasAlwaysOnTopMenu() returns + // true, then this method is only used the first time the window is opened, it + // is stored in the preferences for next runs. + virtual bool IsAlwaysOnTop() const { + return false; + } + + // Returns whether an "always on top" menu should be added to the system menu + // of the window. + virtual bool HasAlwaysOnTopMenu() const { + return false; + } + + // Returns true if the dialog should be displayed modally to the window that + // opened it. Only windows with WindowType == DIALOG can be modal. + virtual bool IsModal() const { + return false; + } + + // Returns the text to be displayed in the window title. + virtual std::wstring GetWindowTitle() const { + return L""; + } + + // Returns the view that should have the focus when the dialog is opened. If + // NULL no view is focused. + virtual View* GetInitiallyFocusedView() { return NULL; } + + // Returns true if the window should show a title in the title bar. + virtual bool ShouldShowWindowTitle() const { + return true; + } + + // Returns the icon to be displayed in the window. + virtual SkBitmap GetWindowIcon(); + + // Returns true if a window icon should be shown. + virtual bool ShouldShowWindowIcon() const { + return false; + } + + // Execute a command in the window's controller. Returns true if the command + // was handled, false if it was not. + virtual bool ExecuteWindowsCommand(int command_id) { return false; } + + // Returns the window's name identifier. Used to identify this window for + // state restoration. + virtual std::wstring GetWindowName() const { + return std::wstring(); + } + + // Saves the window's bounds, maximized and always-on-top states. By default + // this uses the process' local state keyed by window name (See GetWindowName + // above). This behavior can be overridden to provide additional + // functionality. + virtual void SaveWindowPlacement(const gfx::Rect& bounds, + bool maximized, + bool always_on_top); + + // Retrieves the window's bounds, maximized and always-on-top states. By + // default, this uses the process' local state keyed by window name (See + // GetWindowName above). This behavior can be overridden to provide + // additional functionality. + virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const; + virtual bool GetSavedMaximizedState(bool* maximized) const; + virtual bool GetSavedAlwaysOnTopState(bool* always_on_top) const; + + // Called when the window closes. + virtual void WindowClosing() { } + + // Called when the window is destroyed. No events must be sent or received + // after this point. The delegate can use this opportunity to delete itself at + // this time if necessary. + virtual void DeleteDelegate() { } + + // Returns the View that is contained within this Window. + virtual View* GetContentsView() { + return NULL; + } + + // Called by the Window to create the Client View used to host the contents + // of the window. + virtual ClientView* CreateClientView(Window* window); + + // An accessor to the Window this delegate is bound to. + Window* window() const { return window_.get(); } + + protected: + // Releases the Window* we maintain. This should be done by a delegate in its + // WindowClosing handler if it intends to be re-cycled to be used on a + // different Window. + void ReleaseWindow(); + + private: + friend class WindowWin; + // This is a little unusual. We use a scoped_ptr here because it's + // initialized to NULL automatically. We do this because we want to allow + // people using this helper to not have to call a ctor on this object. + // Instead we just release the owning ref this pointer has when we are + // destroyed. + scoped_ptr<Window> window_; +}; + +} // namespace views + +#endif // CHROME_VIEWS_WINDOW_WINDOW_DELEGATE_H_ |