1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// EditSearchEngineDialog provides text fields for editing a keyword: the title, 64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// url and actual keyword. It is used by the KeywordEditorView of the Options 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// dialog, and also on its own to confirm the addition of a keyword added by 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// the ExternalJSObject via the RenderView. 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_ 114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_ 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once 134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <windows.h> 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/textfield/textfield_controller.h" 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/window/dialog_delegate.h" 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views { 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Label; 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass ImageView; 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Window; 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass EditSearchEngineController; 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass EditSearchEngineControllerDelegate; 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Profile; 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TemplateURL; 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TemplateURLModel; 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass EditSearchEngineDialog : public views::View, 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public views::TextfieldController, 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public views::DialogDelegate { 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The |template_url| and/or |delegate| may be NULL. 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EditSearchEngineDialog(const TemplateURL* template_url, 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EditSearchEngineControllerDelegate* delegate, 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Profile* profile); 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual ~EditSearchEngineDialog() {} 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Shows the dialog to the user. 424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static void Show(gfx::NativeWindow parent, 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const TemplateURL* template_url, 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EditSearchEngineControllerDelegate* delegate, 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Profile* profile); 464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // views::DialogDelegate: 484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool IsModal() const; 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual std::wstring GetWindowTitle() const; 504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool IsDialogButtonEnabled( 514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageBoxFlags::DialogButton button) const; 524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool Cancel(); 534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool Accept(); 544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual views::View* GetContentsView(); 554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // views::TextfieldController: 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Updates whether the user can accept the dialog as well as updating image 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // views showing whether value is valid. 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void ContentsChanged(views::Textfield* sender, 604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::wstring& new_contents); 613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual bool HandleKeyEvent(views::Textfield* sender, 623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const views::KeyEvent& key_event); 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void Init(); 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Create a Label containing the text with the specified message id. 684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::Label* CreateLabel(int message_id); 694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Creates a text field with the specified text. If |lowercase| is true, the 714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Textfield is configured to map all input to lower case. 724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::Textfield* CreateTextfield(const std::wstring& text, bool lowercase); 734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invokes UpdateImageView for each of the images views. 754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void UpdateImageViews(); 764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Updates the tooltip and image of the image view based on is_valid. If 784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // is_valid is false the tooltip of the image view is set to the message with 794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // id invalid_message_id, otherwise the tooltip is set to the empty text. 804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void UpdateImageView(views::ImageView* image_view, 814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool is_valid, 824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int invalid_message_id); 834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Used to parent window to. May be NULL or an invalid window. 854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch HWND parent_; 864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // View containing the buttons, text fields ... 884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::View* view_; 894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Text fields. 914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::Textfield* title_tf_; 924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::Textfield* keyword_tf_; 934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::Textfield* url_tf_; 944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Shows error images. 964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::ImageView* title_iv_; 974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::ImageView* keyword_iv_; 984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::ImageView* url_iv_; 994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch scoped_ptr<EditSearchEngineController> controller_; 1014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(EditSearchEngineDialog); 1034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 1044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif // CHROME_BROWSER_UI_VIEWS_EDIT_SEARCH_ENGINE_DIALOG_H_ 106