| // Copyright (c) 2010 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_BROWSER_APP_MODAL_DIALOG_H_ |
| #define CHROME_BROWSER_APP_MODAL_DIALOG_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "build/build_config.h" |
| #include "chrome/common/notification_observer.h" |
| #include "chrome/common/notification_registrar.h" |
| |
| // Define NativeDialog type as platform specific dialog view. |
| #if defined(OS_WIN) |
| class ModalDialogDelegate; |
| typedef ModalDialogDelegate* NativeDialog; |
| #elif defined(OS_MACOSX) |
| typedef void* NativeDialog; |
| #elif defined(TOOLKIT_USES_GTK) |
| typedef struct _GtkDialog GtkDialog; |
| typedef struct _GtkWidget GtkWidget; |
| typedef int gint; |
| typedef GtkWidget* NativeDialog; |
| #endif |
| |
| class TabContents; |
| |
| // A controller+model base class for modal dialogs. |
| class AppModalDialog { |
| public: |
| // A union of data necessary to determine the type of message box to |
| // show. |tab_contents| parameter is optional, if provided that tab will be |
| // activated before the modal dialog is displayed. |
| AppModalDialog(TabContents* tab_contents, const std::wstring& title); |
| virtual ~AppModalDialog(); |
| |
| // Called by the app modal window queue when it is time to show this window. |
| void ShowModalDialog(); |
| |
| // Returns true if the dialog is still valid. As dialogs are created they are |
| // added to the AppModalDialogQueue. When the current modal dialog finishes |
| // and it's time to show the next dialog in the queue IsValid is invoked. |
| // If IsValid returns false the dialog is deleted and not shown. |
| virtual bool IsValid() { return !skip_this_dialog_; } |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // The following methods are platform specific and should be implemented in |
| // the platform specific .cc files. |
| // Create the platform specific NativeDialog and display it. When the |
| // NativeDialog is closed, it should call OnAccept or OnCancel to notify the |
| // renderer of the user's action. The NativeDialog is also expected to |
| // delete the AppModalDialog associated with it. |
| virtual void CreateAndShowDialog(); |
| |
| #if defined(TOOLKIT_USES_GTK) |
| virtual void HandleDialogResponse(GtkDialog* dialog, gint response_id) = 0; |
| // Callback for dialog response calls, passes results to specialized |
| // HandleDialogResponse() implementation. |
| static void OnDialogResponse(GtkDialog* dialog, gint response_id, |
| AppModalDialog* app_modal_dialog); |
| #endif |
| |
| // Close the dialog if it is showing. |
| virtual void CloseModalDialog(); |
| |
| // Called by the app modal window queue to activate the window. |
| void ActivateModalDialog(); |
| |
| // Completes dialog handling, shows next modal dialog from the queue. |
| void CompleteDialog(); |
| |
| // Dialog window title. |
| std::wstring title() { |
| return title_; |
| } |
| |
| // Helper methods used to query or control the dialog. This is used by |
| // automation. |
| virtual int GetDialogButtons() = 0; |
| virtual void AcceptWindow() = 0; |
| virtual void CancelWindow() = 0; |
| |
| protected: |
| // Cleans up the dialog class. |
| virtual void Cleanup(); |
| // Creates the actual platform specific dialog view class. |
| virtual NativeDialog CreateNativeDialog() = 0; |
| |
| // A reference to the platform native dialog box. |
| #if defined(OS_LINUX) || defined(OS_WIN) |
| NativeDialog dialog_; |
| #endif |
| |
| // Parent tab contents. |
| TabContents* tab_contents_; |
| |
| // Information about the message box is held in the following variables. |
| std::wstring title_; |
| |
| // True if the dialog should no longer be shown, e.g. because the underlying |
| // tab navigated away while the dialog was queued. |
| bool skip_this_dialog_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(AppModalDialog); |
| }; |
| |
| #endif // CHROME_BROWSER_APP_MODAL_DIALOG_H_ |