GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
AG_EDITABLE(3) FreeBSD Library Functions Manual AG_EDITABLE(3)

AG_Editable
agar text input widget

#include <agar/core.h>
#include <agar/gui.h>

The AG_Editable widget implements low-level text edition. AG_Editable may be bound to a fixed-size buffer containing a "C" string (i.e., a NUL-terminated string), or a dynamically-sized AG_Text(3) buffer.

The string bound to AG_Editable may use different encodings (support for US-ASCII, UTF-8 and UCS-4 is built-in, conversion to/from other encodings requires that Agar be built with iconv(3) support).

Most applications will not use AG_Editable directly, and instead use AG_Textbox(3) (which adds scrollbars and cosmetics such as text labels). The bare-bones AG_Editable widget is designed to be easily embeddable into other widgets.

The API also includes methods for accessing the working buffer directly (see BUFFER ACCESS ROUTINES section below). This provides developers with a consistent interface for extending the low-level functionality of the widget (for example, the Copy/Paste/Delete or "Select All" functions could be implemented externally in this way).

AG_Object(3) -> AG_Widget(3) -> AG_Editable.

AG_Editable *
AG_EditableNew(AG_Widget *parent, Uint flags);


void
AG_EditableBindUTF8(AG_Editable *ed, char *buffer, size_t bufferSize);


void
AG_EditableBindASCII(AG_Editable *ed, char *buffer, size_t bufferSize);


void
AG_EditableBindEncoded(AG_Editable *ed, const char *encoding, char *buffer, size_t bufferSize);


void
AG_EditableBindText(AG_Editable *ed, AG_Text *txt);


void
AG_EditableSetLang(AG_Editable *ed, enum ag_language lang);


void
AG_EditableSetExcl(AG_Editable *ed, int enable);


void
AG_EditableSetPassword(AG_Editable *ed, int enable);


void
AG_EditableSetWordWrap(AG_Editable *ed, int enable);


void
AG_EditableSetIntOnly(AG_Editable *ed, int enable);


void
AG_EditableSetFltOnly(AG_Editable *ed, int enable);


void
AG_EditableSizeHint(AG_Editable *ed, const char *text);


void
AG_EditableSizeHintPixels(AG_Editable *ed, Uint w, Uint h);


void
AG_EditableSizeHintLines(AG_Editable *ed, Uint nLines);

The AG_EditableNew() function allocates, initializes, and attaches a new AG_Editable widget. Acceptable flags include:

AG_EDITABLE_MULTILINE
Causes newlines to be entered literally into the string, and arranges for horizontal and vertical scrollbars to appear if the text is larger than the display area.
AG_EDITABLE_MULTILINGUAL
Allow the user to select different languages from the right-click popup menu (provided the widget is bound to an AG_Text(3) element).
AG_EDITABLE_EXCL
By default, external changes to the contents of the buffer are allowed and handled in a safe manner (at the cost of frequent character set conversions and periodical redrawing of the widget). If AG_EDITABLE_EXCL is set, AG_Editable will assume exclusive access to the buffer, permitting some important optimizations (i.e., periodic redrawing and character set conversions are avoided).
AG_EDITABLE_PASSWORD
Password-style entry where characters are hidden. Use AG_EditableSetPassword() to change at runtime.
AG_EDITABLE_ABANDON_FOCUS
Arrange for the widget to abandon its focus when the return key is pressed.
AG_EDITABLE_INT_ONLY
Restricts input to integers only. Use AG_EditableSetIntOnly() to change at runtime.
AG_EDITABLE_FLT_ONLY
Restricts input to floating-point numbers in decimal and scientific notation ("inf" and the Unicode symbol for Infinity may also be used). Use AG_EditableSetFltOnly() to change at runtime.
AG_EDITABLE_CATCH_TAB
Cause tabs to be entered literally into the string (by default, the tab key moves focus to the next widget).
AG_EDITABLE_NOSCROLL
The view is normally scrolled automatically such that the cursor is always visible. This flag disables this behavior.
AG_EDITABLE_NOSCROLL_ONCE
Prevents automatic scrolling like AG_EDITABLE_NOSCROLL, but only for the next rendering cycle.
AG_EDITABLE_NOEMACS
Disable emacs-style function keys.
AG_EDITABLE_NOLATIN1
Disable traditional LATIN-1 key combinations.
AG_EDITABLE_NOPOPUP
Disable the standard right-click popup menu.
AG_EDITABLE_READONLY
Make the string read-only. This has the same effect as using AG_WidgetDisable(3), except that the textbox is not grayed out.
AG_EDITABLE_HFILL
Expand horizontally in parent (equivalent to invoking AG_ExpandHoriz(3)). This flag renders the use of AG_EditableSizeHint() unnecessary.
AG_EDITABLE_VFILL
Expand vertically in parent (equivalent to invoking AG_ExpandVert(3)). This flag renders the use of AG_EditableSizeHint() unnecessary.
AG_EDITABLE_EXPAND
Shorthand for AG_EDITABLE_HFILL|AG_EDITABLE_VFILL.

The AG_EditableBindUTF8() and AG_EditableBindASCII() functions bind the AG_Editable to a fixed-size buffer containing a C string in UTF-8 or US-ASCII encoding, respectively. The bufferSize argument indicates the complete size of the buffer in bytes.

AG_EditableBindEncoded() binds to a fixed-size buffer containing a C string in the specified encoding. Support for the "US-ASCII" and "UTF-8" encodings is built-in, but conversion to other encodings requires that Agar be compiled with iconv(3) support (see iconv_open(3) for the complete list of supported encodings).

The AG_EditableBindText() function binds the AG_Editable to a multilingual, variable-length AG_Text(3) element.

The AG_EditableSetLang() function selects the specified language for the current AG_Text(3) binding.

The AG_EditableSetExcl() function sets exclusive access to the buffer. Enable only if the bound string is guaranteed not to change externally (see AG_EDITABLE_EXCL flag description above).

The AG_EditableSetPassword() function enables or disables password-type input, where characters are substituted for ‘*’ in the display.

AG_EditableSetWordWrap() enables/disable word wrapping.

AG_EditableSetIntOnly() restricts input to integers (see flags) AG_EditableSetFltOnly() restricts input to real numbers (see flags).

AG_EditableSizeHint() requests that the initial geometry of ed is to be sufficient to display the string text in its entirety. The AG_EditableSizeHintPixels() variant accepts arguments in pixels. AG_EditableSizeHintLines() accepts a line count.

void
AG_EditablePrintf(AG_Editable *ed, const char *fmt, ...);


void
AG_EditableSetString(AG_Editable *ed, const char *s);


void
AG_EditableClearString(AG_Editable *ed);


char *
AG_EditableDupString(AG_Editable *ed);


size_t
AG_EditableCopyString(AG_Editable *ed, char *dst, size_t dst_size);


int
AG_EditableInt(AG_Editable *ed);


float
AG_EditableFlt(AG_Editable *ed);


double
AG_EditableDbl(AG_Editable *ed);

The AG_EditablePrintf() function uses vsnprintf(3) to overwrite the contents of the buffer. If the fmt argument is NULL, a NUL string is assigned instead.

AG_EditableSetString() overwrites the contents of the buffer with the given string. The argument may be NULL to clear the string.

AG_EditableClearString() clears the contents of the buffer.

The AG_EditableDupString() function returns a copy of the text buffer, as-is. If insufficient memory is available, NULL is returned. AG_EditableCopyString() copies the contents of the text buffer to a fixed-size buffer (up to dst_size - 1 bytes will be copied). Returns the number of bytes that would have been copied were dst_size unlimited (i.e., if the return value is >= dst_size, truncation occured). Both AG_EditableDupString() and AG_EditableCopyString() return the raw contents of the text buffer, without performing any character set conversion.

AG_EditableInt(), AG_EditableFlt() and AG_EditableDbl() perform conversion of the string contents to int float and double, respectively and return the value. Note that the AG_Numerical(3) widget is usually a better option than AG_Editable for editing numbers.

AG_EditableBuffer *
AG_EditableGetBuffer(AG_Editable *ed);


void
AG_EditableReleaseBuffer(AG_Editable *ed, AG_EditableBuffer *buf);


void
AG_EditableClearBuffer(AG_Editable *ed, AG_EditableBuffer *buf);


int
AG_EditableGrowBuffer(AG_Editable *ed, AG_EditableBuffer *buf, Uint32 *ins, size_t nIns);


int
AG_EditableCut(AG_Editable *ed, AG_EditableBuffer *buf, AG_EditableClipboard *cb);


void
AG_EditableCopyChunk(AG_Editable *ed, AG_EditableClipboard *cb);


int
AG_EditableCopy(AG_Editable *ed, AG_EditableBuffer *buf, AG_EditableClipboard *cb);


int
AG_EditablePaste(AG_Editable *ed, AG_EditableBuffer *buf, AG_EditableClipboard *cb);


int
AG_EditableDelete(AG_Editable *ed, AG_EditableBuffer *buf);


void
AG_EditableSelectAll(AG_Editable *ed, AG_EditableBuffer *buf);

The AG_EditableGetBuffer() function returns a locked handle to the internal, working buffer associated with an AG_Editable widget. The buffer structure is defined as follows:

typedef struct ag_editable_buffer {
	AG_Variable *var;            /* Variable binding (if any) */
	Uint32 *s;                   /* String buffer (UCS-4 encoding) */
	size_t len;                  /* String length (chars) */
	size_t maxLen;               /* Available buffer size (bytes) */
	int reallocable;             /* Buffer can be realloc'd */
} AG_EditableBuffer;

The contents of s may be modified directly (any change to the effective string length must be reflected in the len field).

The AG_EditableReleaseBuffer() function unlocks and releases working buffer. It must be called following the AG_EditableGetBuffer() call, once the caller has finished accessing the buffer.

AG_EditableClearBuffer() frees the contents of the buffer, reinitializing to an empty string.

The AG_EditableGrowBuffer() function attempts to increase the size of the buffer in order to accomodate the nIns characters in the ins argument. If insufficient space is available (e.g., this is a fixed-size buffer or we ran out of memory), the function fails and returns -1.

AG_EditableCopyChunk() copies the specified string of characters to the clipboard. AG_EditableCopy() copies the whole selection to the clipboard (the AG_EditableCut() variant subsequently deletes the selection). AG_EditablePaste() pastes the contents of the clipboard to the current cursor position. AG_EditableDelete() deletes the current selection, if any. The return value of those functions is 1 if the buffer has been modified, or 0 if the buffer is unchanged.

AG_EditableSelectAll() selects all characters in the buffer.

int
AG_EditableMapPosition(AG_Editable *ed, AG_EditableBuffer *buf, int x, int y, int *pos);


int
AG_EditableMoveCursor(AG_Editable *ed, AG_EditableBuffer *buf, int x, int y);


int
AG_EditableGetCursorPos(AG_Editable *ed);


int
AG_EditableSetCursorPos(AG_Editable *ed, AG_EditableBuffer *buf, int pos);

The AG_EditableMapPosition() function translates pixel coordinates x and y to a character position within the text buffer. On success, the position is returned into pos. The function returns 0 on success or -1 on failure.

AG_EditableMoveCursor() moves the text cursor to the position closest to the pixel coordinates mx and my.

AG_EditableGetCursorPos() returns the current position of the cursor in the text. The return value is only valid as long as the widget remains locked. The position can also be retrieved from the pos variable (see STRUCTURE DATA).

AG_EditableSetCursorPos() tries to move the cursor to the specified position in the string (bounds checking is performed). If the pos argument is -1, the cursor is moved to the end of the string. The new position of the cursor is returned.

The AG_Editable widget provides the following bindings:

char *string
Bound fixed-size buffer containing a "C" string (i.e., a NUL-terminated string) in the specified encoding (UTF-8 by default).
AG_Text *text
Bound AG_Text(3) element containing an table of variable-length C strings (entries in this table map to different languages).

The AG_Editable widget generates the following events:
editable-return(void)
Return was pressed and AG_EDITABLE_MULTILINE is not set.
editable-prechg(void)
The string is about to be modified.
editable-postchg(void)
The string was just modified.

For the AG_Editable object:

int pos
Current cursor position (ranging from 0 to the current buffer's len value).
int sel
Current selection, expressed as an offset from the cursor (0 = there is no selection).
AG_Text *text
An initially empty AG_Text(3) object used as the default binding (where AG_EditableBind*() is not used).
char *encoding
Character set for the bound string. This may be set to "US-ASCII" or "UTF-8" (the default). Other character sets are supported if Agar was compiled with iconv(3) support.
enum ag_language lang
Currently selected language (for AG_Text(3) bindings only). Read-only; use AG_EditableSetLang() to change.

The following code fragment binds a AG_Editable to a string contained in a fixed-size buffer:
char name[32];
AG_Editable *ed;

ed = AG_EditableNew(parent, 0);
AG_EditableBindUTF8(ed, name, sizeof(name));

See tests/textbox.c and tests/charsets.c in the Agar source distribution.

AG_Intro(3), AG_Text(3), AG_TextElement(3), AG_Tlist(3), AG_Widget(3), AG_Window(3)

The AG_Editable widget first appeared in Agar 1.0. It was mostly rewritten as AG_Editable(3) was added in Agar 1.3.2. The clipboard and direct buffer access routines were added in Agar 1.4.2.
January 8, 2008 FreeBSD 13.1-RELEASE

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.