• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
14 namespace ui {
15 class KeyEvent;
16 class MouseEvent;
17 class SimpleMenuModel;
18 }  // namespace ui
19 
20 namespace views {
21 
22 class Textfield;
23 
24 // This defines the callback interface for other code to be notified of changes
25 // in the state of a text field.
26 class 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().
ContentsChanged(Textfield * sender,const base::string16 & new_contents)31   virtual void ContentsChanged(Textfield* sender,
32                                const base::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.
OnBeforeUserAction(Textfield * sender)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.
OnAfterUserAction(Textfield * sender)52   virtual void OnAfterUserAction(Textfield* sender) {}
53 
54   // Called after performing a Cut or Copy operation.
OnAfterCutOrCopy(ui::ClipboardType clipboard_type)55   virtual void OnAfterCutOrCopy(ui::ClipboardType clipboard_type) {}
56 
57   // Called after performing a Paste operation.
OnAfterPaste()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.
OnWriteDragData(ui::OSExchangeData * 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.
OnGetDragOperationsForTextfield(int * drag_operations)66   virtual void OnGetDragOperationsForTextfield(int* drag_operations) {}
67 
68   // Enables the controller to append to the accepted drop formats.
AppendDropFormats(int * formats,std::set<ui::OSExchangeData::CustomFormat> * custom_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.
UpdateContextMenu(ui::SimpleMenuModel * menu_contents)80   virtual void UpdateContextMenu(ui::SimpleMenuModel* menu_contents) {}
81 
82  protected:
~TextfieldController()83   virtual ~TextfieldController() {}
84 };
85 
86 }  // namespace views
87 
88 #endif  // UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_CONTROLLER_H_
89