• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // EditSearchEngineDialog provides text fields for editing a keyword: the title,
6 // url and actual keyword. It is used by the KeywordEditorView of the Options
7 // dialog, and also on its own to confirm the addition of a keyword added by
8 // the ExternalJSObject via the RenderView.
9 
10 #ifndef CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_
11 #define CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_
12 #pragma once
13 
14 #include <windows.h>
15 
16 #include "views/controls/textfield/textfield_controller.h"
17 #include "views/window/dialog_delegate.h"
18 
19 namespace views {
20 class Label;
21 class ImageView;
22 class Window;
23 }
24 
25 class EditSearchEngineController;
26 class EditSearchEngineControllerDelegate;
27 class Profile;
28 class TemplateURL;
29 class TemplateURLModel;
30 
31 class EditSearchEngineDialog : public views::View,
32                                public views::TextfieldController,
33                                public views::DialogDelegate {
34  public:
35   // The |template_url| and/or |delegate| may be NULL.
36   EditSearchEngineDialog(const TemplateURL* template_url,
37                          EditSearchEngineControllerDelegate* delegate,
38                          Profile* profile);
~EditSearchEngineDialog()39   virtual ~EditSearchEngineDialog() {}
40 
41   // Shows the dialog to the user.
42   static void Show(gfx::NativeWindow parent,
43                    const TemplateURL* template_url,
44                    EditSearchEngineControllerDelegate* delegate,
45                    Profile* profile);
46 
47   // views::DialogDelegate:
48   virtual bool IsModal() const;
49   virtual std::wstring GetWindowTitle() const;
50   virtual bool IsDialogButtonEnabled(
51       MessageBoxFlags::DialogButton button) const;
52   virtual bool Cancel();
53   virtual bool Accept();
54   virtual views::View* GetContentsView();
55 
56   // views::TextfieldController:
57   // Updates whether the user can accept the dialog as well as updating image
58   // views showing whether value is valid.
59   virtual void ContentsChanged(views::Textfield* sender,
60                                const std::wstring& new_contents);
61   virtual bool HandleKeyEvent(views::Textfield* sender,
62                               const views::KeyEvent& key_event);
63 
64  private:
65   void Init();
66 
67   // Create a Label containing the text with the specified message id.
68   views::Label* CreateLabel(int message_id);
69 
70   // Creates a text field with the specified text. If |lowercase| is true, the
71   // Textfield is configured to map all input to lower case.
72   views::Textfield* CreateTextfield(const std::wstring& text, bool lowercase);
73 
74   // Invokes UpdateImageView for each of the images views.
75   void UpdateImageViews();
76 
77   // Updates the tooltip and image of the image view based on is_valid. If
78   // is_valid is false the tooltip of the image view is set to the message with
79   // id invalid_message_id, otherwise the tooltip is set to the empty text.
80   void UpdateImageView(views::ImageView* image_view,
81                        bool is_valid,
82                        int invalid_message_id);
83 
84   // Used to parent window to. May be NULL or an invalid window.
85   HWND parent_;
86 
87   // View containing the buttons, text fields ...
88   views::View* view_;
89 
90   // Text fields.
91   views::Textfield* title_tf_;
92   views::Textfield* keyword_tf_;
93   views::Textfield* url_tf_;
94 
95   // Shows error images.
96   views::ImageView* title_iv_;
97   views::ImageView* keyword_iv_;
98   views::ImageView* url_iv_;
99 
100   scoped_ptr<EditSearchEngineController> controller_;
101 
102   DISALLOW_COPY_AND_ASSIGN(EditSearchEngineDialog);
103 };
104 
105 #endif  // CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_
106