Home | History | Annotate | Download | only in views
      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 // A dialog box that tells the user that we can't write to the specified user
      6 // data directory.  Provides the user a chance to pick a different directory.
      7 
      8 #ifndef CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_
      9 #define CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_
     10 #pragma once
     11 
     12 #include "base/basictypes.h"
     13 #include "base/message_loop.h"
     14 #include "chrome/browser/ui/shell_dialogs.h"
     15 #include "views/window/dialog_delegate.h"
     16 
     17 class FilePath;
     18 
     19 namespace views {
     20 class MessageBoxView;
     21 class Window;
     22 }
     23 
     24 class UserDataDirDialog : public views::DialogDelegate,
     25                           public MessageLoopForUI::Dispatcher,
     26                           public SelectFileDialog::Listener {
     27  public:
     28   // Creates and runs a user data directory picker dialog.  The method blocks
     29   // while the dialog is showing.  If the user picks a directory, this method
     30   // returns the chosen directory. |user_data_dir| is the value of the
     31   // directory we were not able to use.
     32   static FilePath RunUserDataDirDialog(const FilePath& user_data_dir);
     33   virtual ~UserDataDirDialog();
     34 
     35   FilePath user_data_dir() const { return user_data_dir_; }
     36 
     37   // views::DialogDelegate Methods:
     38   virtual std::wstring GetDialogButtonLabel(
     39       MessageBoxFlags::DialogButton button) const;
     40   virtual std::wstring GetWindowTitle() const;
     41   virtual void DeleteDelegate();
     42   virtual bool Accept();
     43   virtual bool Cancel();
     44 
     45   // views::WindowDelegate Methods:
     46   virtual bool IsAlwaysOnTop() const { return false; }
     47   virtual bool IsModal() const { return false; }
     48   virtual views::View* GetContentsView();
     49 
     50   // MessageLoop::Dispatcher Method:
     51   virtual bool Dispatch(const MSG& msg);
     52 
     53   // SelectFileDialog::Listener Methods:
     54   virtual void FileSelected(const FilePath& path, int index, void* params);
     55   virtual void FileSelectionCanceled(void* params);
     56 
     57  private:
     58   explicit UserDataDirDialog(const FilePath& user_data_dir);
     59 
     60   // Empty until the user picks a directory.
     61   FilePath user_data_dir_;
     62 
     63   views::MessageBoxView* message_box_view_;
     64   scoped_refptr<SelectFileDialog> select_file_dialog_;
     65 
     66   // Used to keep track of whether or not to block the message loop (still
     67   // waiting for the user to dismiss the dialog).
     68   bool is_blocking_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(UserDataDirDialog);
     71 };
     72 
     73 #endif  // CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_
     74