Home | History | Annotate | Download | only in textfield
      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().
     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.
     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(ui::ClipboardType clipboard_type) {}
     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  protected:
     83   virtual ~TextfieldController() {}
     84 };
     85 
     86 }  // namespace views
     87 
     88 #endif  // UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_CONTROLLER_H_
     89