ROOT logo
// @(#)root/gui:$Id: TGTextEntry.h 25233 2008-08-25 16:48:47Z bellenot $
// Author: Fons Rademakers   08/01/98

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TGTextEntry
#define ROOT_TGTextEntry


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGTextEntry                                                          //
//                                                                      //
// A TGTextEntry is a one line text input widget.                       //
//                                                                      //
// Changing text in the text entry widget will generate the event:      //
// kC_TEXTENTRY, kTE_TEXTCHANGED, widget id, 0.                         //
// Hitting the enter key will generate:                                 //
// kC_TEXTENTRY, kTE_ENTER, widget id, 0.                               //
// Hitting the tab key will generate:                                   //
// kC_TEXTENTRY, kTE_TAB, widget id, 0.                                 //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif
#ifndef ROOT_TGWidget
#include "TGWidget.h"
#endif
#ifndef ROOT_TGTextBuffer
#include "TGTextBuffer.h"
#endif

class TBlinkTimer;
class TGToolTip;
class TColor;

class TGTextEntry : public TGFrame, public TGWidget {

public:
   enum   EEchoMode { kNormal, kNoEcho, kPassword };
   enum   EInsertMode { kInsert, kReplace };

protected:
   TGTextBuffer     *fText;              // text buffer
   Int_t             fStartX;            // selection begin in pixels
   Int_t             fEndX;              // selection end in pixels
   Int_t             fStartIX;           // selection begin in characters
   Int_t             fEndIX;             // selection end in characters
   Bool_t            fSelectionOn;       // selection status (on/off)
   Int_t             fOffset;            // start position of text (in pixels)
   Int_t             fCursorX;           // cursor position in pixels
   Int_t             fCursorIX;          // cursor position in characters
   Bool_t            fCursorOn;          // cursor status (on/off)
   FontStruct_t      fFontStruct;        // text font
   TGGC              fNormGC;            // normal drawing context
   TGGC              fSelGC;             // selected text drawing context
   GContext_t        fSelbackGC;         // selected background drawing context
   Atom_t            fClipboard;         // clipboard property
   TBlinkTimer      *fCurBlink;          // cursor blink timer
   TGToolTip        *fTip;               // associated tooltip
   Int_t             fMaxLen;            // maximum length of text
   Bool_t            fEdited;            // kFALSE, if the line edit's contents have not been changed since the construction
   Bool_t            fFrameDrawn;        // kTRUE draw itself inside a two-pixel frame, kFALSE draw without any frame
   EEchoMode         fEchoMode;          // *OPTION={GetMethod="GetEchoMode";SetMethod="SetEchoMode";Items=(kNormal="Normal",kNoEcho="No Echo",kPassword="Password")}*
   EInsertMode       fInsertMode;        // *OPTION={GetMethod="GetInsertMode";SetMethod="SetInsertMode";Items=(kInsert="Insert",kReplace="Replace")}*
   ETextJustification fAlignment;        // *OPTION={GetMethod="GetAlignment";SetMethod="SetAlignment";Items=(kTextLeft="Left",kTextCenterX="Center",kTextRight="Right")}*
   Bool_t            fHasOwnFont;        // kTRUE - font defined locally,  kFALSE - globally

            void        CopyText() const;
   virtual  void        DoRedraw();
            Int_t       GetCharacterIndex(Int_t xcoord);
   virtual  void        Init();
   virtual  Bool_t      IsCursorOutOfFrame();
            void        Paste();
   virtual  void        PastePrimary(Window_t wid, Atom_t property, Bool_t del);
   virtual  void        ScrollByChar();
   virtual  void        UpdateOffset();

   static TString      *fgClipboardText; // application clipboard text
   static const TGFont *fgDefaultFont;
   static const TGGC   *fgDefaultSelectedGC;
   static const TGGC   *fgDefaultSelectedBackgroundGC;
   static const TGGC   *fgDefaultGC;

   static const TGGC   &GetDefaultSelectedGC();
   static const TGGC   &GetDefaultSelectedBackgroundGC();

private:
   TGTextEntry(const TGTextEntry&);              // not implemented
   TGTextEntry& operator=(const TGTextEntry&);   // not implemented

public:
   static FontStruct_t  GetDefaultFontStruct();
   static const TGGC   &GetDefaultGC();

   TGTextEntry(const TGWindow *p, TGTextBuffer *text, Int_t id = -1,
               GContext_t norm = GetDefaultGC()(),
               FontStruct_t font = GetDefaultFontStruct(),
               UInt_t option = kSunkenFrame | kDoubleBorder,
               Pixel_t back = GetWhitePixel());

   TGTextEntry(const TGWindow *parent = 0, const char *text = 0, Int_t id = -1);
   TGTextEntry(const TString &contents, const TGWindow *parent, Int_t id = -1);

   virtual ~TGTextEntry();

   virtual  void        AppendText(const char *text);
            void        Backspace();
            void        Clear(Option_t *option="");
            void        CursorLeft(Bool_t mark = kFALSE , Int_t steps = 1);
            void        CursorRight(Bool_t mark = kFALSE , Int_t steps = 1);
            void        CursorWordForward(Bool_t mark = kFALSE);
            void        CursorWordBackward(Bool_t mark = kFALSE);
            void        Cut();
            void        Del();
            void        Deselect();
   virtual  void        DrawBorder();
            void        End(Bool_t mark = kFALSE);
   ETextJustification   GetAlignment() const       { return fAlignment; }
   TGTextBuffer        *GetBuffer() const { return fText; }
            Int_t       GetCursorPosition() const  { return fCursorIX; }
            TString     GetDisplayText() const;
   EEchoMode            GetEchoMode() const        { return fEchoMode; }
   EInsertMode          GetInsertMode() const      { return fInsertMode; }
            TString     GetMarkedText() const;
            Int_t       GetMaxLength() const    { return fMaxLen; }
   const    char       *GetText() const { return fText->GetString(); }
   virtual TGToolTip   *GetToolTip() const { return fTip; }
   virtual const char  *GetTitle() const { return GetText(); }
            Bool_t      HasMarkedText() const  { return fSelectionOn && (fStartIX != fEndIX); }
            Pixel_t     GetTextColor() const { return fNormGC.GetForeground(); }
           FontStruct_t GetFontStruct() const { return fFontStruct; }
            void        Home(Bool_t mark = kFALSE);
   virtual  void        Insert(const char *);
   virtual  void        InsertText(const char *text, Int_t pos);
            Bool_t      IsFrameDrawn() const       { return fFrameDrawn; }
            Bool_t      IsEdited() const           { return fEdited; }
   virtual  void        Layout() { UpdateOffset(); }
            void        MarkWord(Int_t pos);
            Int_t       MaxMark() const { return fStartIX > fEndIX ? fStartIX : fEndIX; }
            Int_t       MinMark() const { return fStartIX < fEndIX ? fStartIX : fEndIX; }
            void        NewMark(Int_t pos);
            void        Remove();
   virtual  void        RemoveText(Int_t start, Int_t end);
   virtual  void        SetFont(TGFont *font, Bool_t local = kTRUE);
   virtual  void        SetFont(FontStruct_t font, Bool_t local = kTRUE);
   virtual  void        SetFont(const char *fontName, Bool_t local = kTRUE);
   virtual  void        SetTextColor(Pixel_t color, Bool_t local = kTRUE);
   virtual  void        SetTextColor(TColor *color, Bool_t local = kTRUE);
   virtual  void        SetText(const char *text, Bool_t emit = kTRUE);          //*MENU*
   virtual  void        SetToolTipText(const char *text, Long_t delayms = 500);  //*MENU*
   virtual  void        SetMaxLength(Int_t maxlen);                              //*MENU*
   virtual  void        SelectAll();
   virtual  void        SetAlignment(ETextJustification mode = kTextLeft);       //*SUBMENU*
   virtual  void        SetInsertMode(EInsertMode mode = kInsert);               //*SUBMENU*
   virtual  void        SetEchoMode(EEchoMode mode = kNormal);                   //*SUBMENU*
            void        SetEnabled(Bool_t flag = kTRUE) { SetState( flag ); }    //*TOGGLE* *GETTER=IsEnabled
   virtual  void        SetCursorPosition(Int_t pos);
            void        SetEdited(Bool_t flag = kTRUE) { fEdited = flag; }
   virtual  void        SetFocus();
   virtual  void        SetFrameDrawn(Bool_t flag = kTRUE);
   virtual  void        SetState(Bool_t state);
   virtual  void        SetTitle(const char *label) { SetText(label); }
   virtual  void        SetForegroundColor(Pixel_t fore) { SetTextColor(fore, kFALSE); }
   Pixel_t              GetForeground() const { return fNormGC.GetForeground(); }
   Bool_t               HasOwnFont() const { return fHasOwnFont; }

   virtual  void        SavePrimitive(ostream &out, Option_t *option = "");

   virtual  Bool_t      HandleButton(Event_t *event);
   virtual  Bool_t      HandleDoubleClick(Event_t *event);
   virtual  Bool_t      HandleCrossing(Event_t *event);
   virtual  Bool_t      HandleMotion(Event_t *event);
   virtual  Bool_t      HandleKey(Event_t *event);
   virtual  Bool_t      HandleFocusChange(Event_t *event);
   virtual  Bool_t      HandleSelection(Event_t *event);
   virtual  Bool_t      HandleSelectionClear(Event_t *event);
   virtual  Bool_t      HandleSelectionRequest(Event_t *event);
   virtual  Bool_t      HandleTimer(TTimer *t);
   virtual  Bool_t      HandleConfigureNotify(Event_t *event);

   virtual  void        TextChanged(const char *text = 0);      //*SIGNAL*
   virtual  void        ReturnPressed();                        //*SIGNAL*
   virtual  void        TabPressed();                           //*SIGNAL*
   virtual  void        ShiftTabPressed();                      //*SIGNAL*
   virtual  void        CursorOutLeft();                        //*SIGNAL*
   virtual  void        CursorOutRight();                       //*SIGNAL*
   virtual  void        CursorOutUp();                          //*SIGNAL*
   virtual  void        CursorOutDown();                        //*SIGNAL*
   virtual  void        DoubleClicked();                        //*SIGNAL*

   ClassDef(TGTextEntry,0) // The TGTextEntry widget is a simple line editor for inputting text
};

#endif
 TGTextEntry.h:1
 TGTextEntry.h:2
 TGTextEntry.h:3
 TGTextEntry.h:4
 TGTextEntry.h:5
 TGTextEntry.h:6
 TGTextEntry.h:7
 TGTextEntry.h:8
 TGTextEntry.h:9
 TGTextEntry.h:10
 TGTextEntry.h:11
 TGTextEntry.h:12
 TGTextEntry.h:13
 TGTextEntry.h:14
 TGTextEntry.h:15
 TGTextEntry.h:16
 TGTextEntry.h:17
 TGTextEntry.h:18
 TGTextEntry.h:19
 TGTextEntry.h:20
 TGTextEntry.h:21
 TGTextEntry.h:22
 TGTextEntry.h:23
 TGTextEntry.h:24
 TGTextEntry.h:25
 TGTextEntry.h:26
 TGTextEntry.h:27
 TGTextEntry.h:28
 TGTextEntry.h:29
 TGTextEntry.h:30
 TGTextEntry.h:31
 TGTextEntry.h:32
 TGTextEntry.h:33
 TGTextEntry.h:34
 TGTextEntry.h:35
 TGTextEntry.h:36
 TGTextEntry.h:37
 TGTextEntry.h:38
 TGTextEntry.h:39
 TGTextEntry.h:40
 TGTextEntry.h:41
 TGTextEntry.h:42
 TGTextEntry.h:43
 TGTextEntry.h:44
 TGTextEntry.h:45
 TGTextEntry.h:46
 TGTextEntry.h:47
 TGTextEntry.h:48
 TGTextEntry.h:49
 TGTextEntry.h:50
 TGTextEntry.h:51
 TGTextEntry.h:52
 TGTextEntry.h:53
 TGTextEntry.h:54
 TGTextEntry.h:55
 TGTextEntry.h:56
 TGTextEntry.h:57
 TGTextEntry.h:58
 TGTextEntry.h:59
 TGTextEntry.h:60
 TGTextEntry.h:61
 TGTextEntry.h:62
 TGTextEntry.h:63
 TGTextEntry.h:64
 TGTextEntry.h:65
 TGTextEntry.h:66
 TGTextEntry.h:67
 TGTextEntry.h:68
 TGTextEntry.h:69
 TGTextEntry.h:70
 TGTextEntry.h:71
 TGTextEntry.h:72
 TGTextEntry.h:73
 TGTextEntry.h:74
 TGTextEntry.h:75
 TGTextEntry.h:76
 TGTextEntry.h:77
 TGTextEntry.h:78
 TGTextEntry.h:79
 TGTextEntry.h:80
 TGTextEntry.h:81
 TGTextEntry.h:82
 TGTextEntry.h:83
 TGTextEntry.h:84
 TGTextEntry.h:85
 TGTextEntry.h:86
 TGTextEntry.h:87
 TGTextEntry.h:88
 TGTextEntry.h:89
 TGTextEntry.h:90
 TGTextEntry.h:91
 TGTextEntry.h:92
 TGTextEntry.h:93
 TGTextEntry.h:94
 TGTextEntry.h:95
 TGTextEntry.h:96
 TGTextEntry.h:97
 TGTextEntry.h:98
 TGTextEntry.h:99
 TGTextEntry.h:100
 TGTextEntry.h:101
 TGTextEntry.h:102
 TGTextEntry.h:103
 TGTextEntry.h:104
 TGTextEntry.h:105
 TGTextEntry.h:106
 TGTextEntry.h:107
 TGTextEntry.h:108
 TGTextEntry.h:109
 TGTextEntry.h:110
 TGTextEntry.h:111
 TGTextEntry.h:112
 TGTextEntry.h:113
 TGTextEntry.h:114
 TGTextEntry.h:115
 TGTextEntry.h:116
 TGTextEntry.h:117
 TGTextEntry.h:118
 TGTextEntry.h:119
 TGTextEntry.h:120
 TGTextEntry.h:121
 TGTextEntry.h:122
 TGTextEntry.h:123
 TGTextEntry.h:124
 TGTextEntry.h:125
 TGTextEntry.h:126
 TGTextEntry.h:127
 TGTextEntry.h:128
 TGTextEntry.h:129
 TGTextEntry.h:130
 TGTextEntry.h:131
 TGTextEntry.h:132
 TGTextEntry.h:133
 TGTextEntry.h:134
 TGTextEntry.h:135
 TGTextEntry.h:136
 TGTextEntry.h:137
 TGTextEntry.h:138
 TGTextEntry.h:139
 TGTextEntry.h:140
 TGTextEntry.h:141
 TGTextEntry.h:142
 TGTextEntry.h:143
 TGTextEntry.h:144
 TGTextEntry.h:145
 TGTextEntry.h:146
 TGTextEntry.h:147
 TGTextEntry.h:148
 TGTextEntry.h:149
 TGTextEntry.h:150
 TGTextEntry.h:151
 TGTextEntry.h:152
 TGTextEntry.h:153
 TGTextEntry.h:154
 TGTextEntry.h:155
 TGTextEntry.h:156
 TGTextEntry.h:157
 TGTextEntry.h:158
 TGTextEntry.h:159
 TGTextEntry.h:160
 TGTextEntry.h:161
 TGTextEntry.h:162
 TGTextEntry.h:163
 TGTextEntry.h:164
 TGTextEntry.h:165
 TGTextEntry.h:166
 TGTextEntry.h:167
 TGTextEntry.h:168
 TGTextEntry.h:169
 TGTextEntry.h:170
 TGTextEntry.h:171
 TGTextEntry.h:172
 TGTextEntry.h:173
 TGTextEntry.h:174
 TGTextEntry.h:175
 TGTextEntry.h:176
 TGTextEntry.h:177
 TGTextEntry.h:178
 TGTextEntry.h:179
 TGTextEntry.h:180
 TGTextEntry.h:181
 TGTextEntry.h:182
 TGTextEntry.h:183
 TGTextEntry.h:184
 TGTextEntry.h:185
 TGTextEntry.h:186
 TGTextEntry.h:187
 TGTextEntry.h:188
 TGTextEntry.h:189
 TGTextEntry.h:190
 TGTextEntry.h:191
 TGTextEntry.h:192
 TGTextEntry.h:193
 TGTextEntry.h:194
 TGTextEntry.h:195
 TGTextEntry.h:196
 TGTextEntry.h:197
 TGTextEntry.h:198
 TGTextEntry.h:199
 TGTextEntry.h:200
 TGTextEntry.h:201
 TGTextEntry.h:202
 TGTextEntry.h:203