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