// Copyright (c) 2012 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. // EditSearchEngineDialog provides text fields for editing a keyword: the title, // url and actual keyword. It is used by the KeywordEditorView of the Options // dialog, and also on its own to confirm the addition of a keyword added by // the ExternalJSObject via the RenderView. #ifndef CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_ #define CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_ #include "ui/views/controls/textfield/textfield_controller.h" #include "ui/views/window/dialog_delegate.h" namespace views { class Label; class ImageView; } class EditSearchEngineController; class EditSearchEngineControllerDelegate; class Profile; class TemplateURL; class EditSearchEngineDialog : public views::TextfieldController, public views::DialogDelegateView { public: // The |template_url| and/or |delegate| may be NULL. EditSearchEngineDialog(TemplateURL* template_url, EditSearchEngineControllerDelegate* delegate, Profile* profile); virtual ~EditSearchEngineDialog(); // Shows the dialog to the user. static void Show(gfx::NativeWindow parent, TemplateURL* template_url, EditSearchEngineControllerDelegate* delegate, Profile* profile); // views::DialogDelegate: virtual ui::ModalType GetModalType() const OVERRIDE; virtual string16 GetWindowTitle() const OVERRIDE; virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE; virtual bool Cancel() OVERRIDE; virtual bool Accept() OVERRIDE; virtual views::View* GetContentsView() OVERRIDE; // views::TextfieldController: // Updates whether the user can accept the dialog as well as updating image // views showing whether value is valid. virtual void ContentsChanged(views::Textfield* sender, const string16& new_contents) OVERRIDE; virtual bool HandleKeyEvent(views::Textfield* sender, const ui::KeyEvent& key_event) OVERRIDE; private: void Init(); // Create a Label containing the text with the specified message id. views::Label* CreateLabel(int message_id); // Creates a text field with the specified text. If |lowercase| is true, the // Textfield is configured to map all input to lower case. views::Textfield* CreateTextfield(const string16& text, bool lowercase); // Invokes UpdateImageView for each of the images views. void UpdateImageViews(); // Updates the tooltip and image of the image view based on is_valid. If // is_valid is false the tooltip of the image view is set to the message with // id invalid_message_id, otherwise the tooltip is set to the empty text. void UpdateImageView(views::ImageView* image_view, bool is_valid, int invalid_message_id); // View containing the buttons, text fields ... views::View* view_; // Text fields. views::Textfield* title_tf_; views::Textfield* keyword_tf_; views::Textfield* url_tf_; // Shows error images. views::ImageView* title_iv_; views::ImageView* keyword_iv_; views::ImageView* url_iv_; scoped_ptr controller_; DISALLOW_COPY_AND_ASSIGN(EditSearchEngineDialog); }; #endif // CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_