14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef COMPONENTS_WEB_MODAL_MODAL_DIALOG_HOST_H_
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define COMPONENTS_WEB_MODAL_MODAL_DIALOG_HOST_H_
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/native_widget_types.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace gfx {
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Point;
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Size;
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace gfx
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace web_modal {
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Observer to be implemented to update modal dialogs when the host indicates
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// their position needs to be changed.
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ModalDialogHostObserver {
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~ModalDialogHostObserver();
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnPositionRequiresUpdate() = 0;
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnHostDestroying() = 0;
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Interface for supporting positioning of modal dialogs over a window/widget.
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ModalDialogHost {
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~ModalDialogHost();
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Returns the view against which the dialog is positioned and parented.
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual gfx::NativeView GetHostView() const = 0;
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Gets the position for the dialog in coordinates relative to the host view.
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual gfx::Point GetDialogPosition(const gfx::Size& size) = 0;
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Add/remove observer.
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void AddObserver(ModalDialogHostObserver* observer) = 0;
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void RemoveObserver(ModalDialogHostObserver* observer) = 0;
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace web_modal
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // COMPONENTS_WEB_MODAL_MODAL_DIALOG_HOST_H_
45