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 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