1// Copyright (c) 2012 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#ifndef UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_CONTROLLER_H_ 6#define UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_CONTROLLER_H_ 7 8#include <set> 9 10#include "base/strings/string16.h" 11#include "ui/base/dragdrop/os_exchange_data.h" 12#include "ui/views/views_export.h" 13 14namespace ui { 15class KeyEvent; 16class MouseEvent; 17class SimpleMenuModel; 18} // namespace ui 19 20namespace views { 21 22class Textfield; 23 24// This defines the callback interface for other code to be notified of changes 25// in the state of a text field. 26class VIEWS_EXPORT TextfieldController { 27 public: 28 // This method is called whenever the text in the field is changed by the 29 // user. It won't be called if the text is changed by calling 30 // Textfield::SetText() or Textfield::AppendText(). 31 virtual void ContentsChanged(Textfield* sender, 32 const string16& new_contents) {} 33 34 // This method is called to get notified about keystrokes in the edit. 35 // Returns true if the message was handled and should not be processed 36 // further. If it returns false the processing continues. 37 virtual bool HandleKeyEvent(Textfield* sender, 38 const ui::KeyEvent& key_event); 39 40 // This method is called to get notified about mouse events in the edit. 41 // Returns true if the message was handled and should not be processed 42 // further. Currently, only mouse down events are sent here. 43 virtual bool HandleMouseEvent(Textfield* sender, 44 const ui::MouseEvent& mouse_event); 45 46 // Called before performing a user action that may change the textfield. 47 // It's currently only supported by Views implementation. 48 virtual void OnBeforeUserAction(Textfield* sender) {} 49 50 // Called after performing a user action that may change the textfield. 51 // It's currently only supported by Views implementation. 52 virtual void OnAfterUserAction(Textfield* sender) {} 53 54 // Called after performing a Cut or Copy operation. 55 virtual void OnAfterCutOrCopy() {} 56 57 // Called after performing a Paste operation. 58 virtual void OnAfterPaste() {} 59 60 // Called after the textfield has written drag data to give the controller a 61 // chance to modify the drag data. 62 virtual void OnWriteDragData(ui::OSExchangeData* data) {} 63 64 // Called after the textfield has set default drag operations to give the 65 // controller a chance to update them. 66 virtual void OnGetDragOperationsForTextfield(int* drag_operations) {} 67 68 // Enables the controller to append to the accepted drop formats. 69 virtual void AppendDropFormats( 70 int* formats, 71 std::set<ui::OSExchangeData::CustomFormat>* custom_formats) {} 72 73 // Called when a drop of dragged data happens on the textfield. This method is 74 // called before regular handling of the drop. If this returns a drag 75 // operation other than |ui::DragDropTypes::DRAG_NONE|, regular handling is 76 // skipped. 77 virtual int OnDrop(const ui::OSExchangeData& data); 78 79 // Gives the controller a chance to modify the context menu contents. 80 virtual void UpdateContextMenu(ui::SimpleMenuModel* menu_contents) {} 81 82 // Returns true if the |command_id| should be enabled in the context menu. 83 virtual bool IsCommandIdEnabled(int command_id) const; 84 85 // Returns true if the item label for the |command_id| is dynamic in the 86 // context menu. 87 virtual bool IsItemForCommandIdDynamic(int command_id) const; 88 89 // Returns the label string for the |coomand_id|. 90 virtual string16 GetLabelForCommandId(int command_id) const; 91 92 // Returns whether the controller handles the specified command. This is used 93 // to handle a command the textfield would normally handle. For example, to 94 // have the controller handle |IDS_APP_PASTE| override and return true if 95 // |command_id| == |IDS_APP_PASTE|. 96 // This is only invoked if the command is enabled. 97 virtual bool HandlesCommand(int command_id) const; 98 99 // Execute context menu command specified by |command_id|. 100 virtual void ExecuteCommand(int command_id, int event_flag) {} 101 102 protected: 103 virtual ~TextfieldController() {} 104}; 105 106} // namespace views 107 108#endif // UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_CONTROLLER_H_ 109