1 /* Public domain */ 2 3 #ifndef _AGAR_GUI_TEXTBOX_H_ 4 #define _AGAR_GUI_TEXTBOX_H_ 5 6 #include <agar/gui/widget.h> 7 #include <agar/gui/editable.h> 8 #include <agar/gui/label.h> 9 #include <agar/gui/scrollbar.h> 10 11 #include <agar/gui/begin.h> 12 13 typedef struct ag_textbox { 14 struct ag_widget _inherit; 15 struct ag_editable *ed; 16 17 AG_Label *lbl; /* Textbox label */ 18 Uint flags; 19 #define AG_TEXTBOX_MULTILINE 0x000001 /* Enable multiline edition */ 20 #define AG_TEXTBOX_PASSWORD 0x000004 /* Hide buffer contents */ 21 #define AG_TEXTBOX_ABANDON_FOCUS 0x000008 /* Lose focus on return */ 22 #define AG_TEXTBOX_COMBO 0x000010 /* Used by AG_Combo */ 23 #define AG_TEXTBOX_HFILL 0x000020 24 #define AG_TEXTBOX_VFILL 0x000040 25 #define AG_TEXTBOX_EXPAND (AG_TEXTBOX_HFILL|AG_TEXTBOX_VFILL) 26 #define AG_TEXTBOX_READONLY 0x000100 /* Disable user input */ 27 #define AG_TEXTBOX_INT_ONLY 0x000200 /* Accepts only valid strtol() input */ 28 #define AG_TEXTBOX_FLT_ONLY 0x000400 /* Accepts only valid strtof() input */ 29 #define AG_TEXTBOX_CATCH_TAB 0x000800 /* Enter literal tabs into text 30 instead of cycling focus */ 31 #define AG_TEXTBOX_CURSOR_MOVING 0x001000 /* Cursor is being moved */ 32 #define AG_TEXTBOX_EXCL 0x004000 /* Exclusive access to buffer */ 33 #define AG_TEXTBOX_NOEMACS 0x008000 /* Disable emacs-style fn keys */ 34 #define AG_TEXTBOX_NOLATIN1 0x020000 /* Disable LATIN-1 combinations */ 35 #define AG_TEXTBOX_WORDWRAP 0x040000 /* Enable word wrapping */ 36 #define AG_TEXTBOX_NOPOPUP 0x080000 /* Disable popup menu */ 37 #define AG_TEXTBOX_MULTILINGUAL 0x100000 /* Enable multilingual edition */ 38 39 int boxPadX, boxPadY; /* Padding around textbox */ 40 AG_Scrollbar *hBar, *vBar; /* Scrollbars for MULTILINE */ 41 AG_Rect r; /* View area */ 42 AG_Text *text; /* Pointer to default binding */ 43 } AG_Textbox; 44 45 #define AGTEXTBOX(p) ((AG_Textbox *)(p)) 46 #ifdef _AGAR_INTERNAL 47 #define TEXTBOX(p) AGTEXTBOX(p) 48 #endif 49 50 __BEGIN_DECLS 51 extern AG_WidgetClass agTextboxClass; 52 53 AG_Textbox *AG_TextboxNew(void *, Uint, const char *, ...) 54 FORMAT_ATTRIBUTE(printf,3,4); 55 AG_Textbox *AG_TextboxNewS(void *, Uint, const char *); 56 #define AG_TextboxSizeHint(tb,text) AG_EditableSizeHint((tb)->ed,(text)) 57 #define AG_TextboxSizeHintPixels(tb,w,h) \ 58 AG_EditableSizeHintPixels((tb)->ed,(w),(h)) 59 #define AG_TextboxSizeHintLines(tb,l) \ 60 AG_EditableSizeHintLines((tb)->ed,(l)) 61 void AG_TextboxSetLabel(AG_Textbox *, const char *, ...) 62 FORMAT_ATTRIBUTE(printf,2,3) 63 NONNULL_ATTRIBUTE(2); 64 void AG_TextboxSetLabelS(AG_Textbox *, const char *); 65 void AG_TextboxSetWordWrap(AG_Textbox *, int); 66 void AG_TextboxPrintf(AG_Textbox *, const char *, ...); 67 68 #define AG_TextboxSetPassword(tb,flag) AG_EditableSetPassword((tb)->ed,(flag)) 69 #define AG_TextboxSetExcl(tb,flag) AG_EditableSetExcl((tb)->ed,(flag)) 70 #define AG_TextboxSetFltOnly(tb,flag) AG_EditableSetFltOnly((tb)->ed,(flag)) 71 #define AG_TextboxSetIntOnly(tb,flag) AG_EditableSetIntOnly((tb)->ed,(flag)) 72 #define AG_TextboxSetLang(tb,lang) AG_EditableSetLang((tb)->ed,(lang)) 73 74 int AG_TextboxMapPosition(AG_Textbox *, int, int, int *); 75 void AG_TextboxMoveCursor(AG_Textbox *, int, int); 76 void AG_TextboxSetCursorPos(AG_Textbox *, int); 77 #define AG_TextboxGetCursorPos(tb) AG_EditableGetCursorPos((tb)->ed) 78 79 #define AG_TextboxBindUTF8(tb,p,sz) AG_EditableBindUTF8((tb)->ed,(p),(sz)) 80 #define AG_TextboxBindASCII(tb,p,sz) AG_EditableBindASCII((tb)->ed,(p),(sz)) 81 #define AG_TextboxBindEncoded(tb,enc,p,sz) AG_EditableBindEncoded((tb)->ed,(enc),(p),(sz)) 82 #define AG_TextboxBindText(tb,txt) AG_EditableBindText((tb)->ed,(txt)) 83 84 #define AG_TextboxSetString(tb,s) AG_EditableSetString((tb)->ed,(s)) 85 #define AG_TextboxClearString(tb) AG_EditableSetString((tb)->ed,NULL) 86 #define AG_TextboxDupString(tb) AG_EditableDupString((tb)->ed) 87 #define AG_TextboxCopyString(tb,p,len) AG_EditableCopyString((tb)->ed,(p),(len)) 88 89 #define AG_TextboxInt(tb) AG_EditableInt((tb)->ed) 90 #define AG_TextboxFlt(tb) AG_EditableFlt((tb)->ed) 91 #define AG_TextboxDbl(tb) AG_EditableDbl((tb)->ed) 92 93 #ifdef AG_LEGACY 94 # define AG_TEXTBOX_NOWORDSEEK 0 95 # define AG_TEXTBOX_STATIC AG_TEXTBOX_EXCL 96 # define AG_TextboxSetStatic AG_TextboxSetExcl 97 # define AG_TextboxPrescale AG_TextboxSizeHint 98 # define AG_TextboxSetWriteable(tb,flag) do { \ 99 if (flag) { \ 100 AG_WidgetEnable(tb); \ 101 } else { \ 102 AG_WidgetDisable(tb); \ 103 } \ 104 } while (0) 105 #endif /* AG_LEGACY */ 106 107 __END_DECLS 108 109 #include <agar/gui/close.h> 110 #endif /* _AGAR_GUI_TEXTBOX_H_ */ 111