Skip to content

Text Box

The GUITextBox class is used to create and manage text box elements in the GUI.

Sample text box screenshot

Public Types

enum Flag

enum Flag {
    FlagDrawBox = 1 << 3,  // Enables drawing the text box's outline and background.
    FlagEditable = 1 << 8  // Allows the contents of the text box to be modified.
};

Constructors

GUITextBox

GUITextBox(int x, int y, int width, int maxLength, bool countLengthByBytes);

Creates a GUITextBox with specified position, width, maximum length, and length counting method.

  • x: The X coordinate of the top-left corner.
  • y: The Y coordinate of the top-left corner.
  • width: The width of the text box.
  • maxLength: The maximum length of the text box content.
  • countLengthByBytes: If true, length is counted by bytes; otherwise, by characters.
GUITextBox(int x, int y, int width, const char *text, int maxLength, bool countLengthByBytes);

Creates a GUITextBox with specified position, width, initial text, maximum length, and length counting method.

  • x: The X coordinate of the top-left corner.
  • y: The Y coordinate of the top-left corner.
  • width: The width of the text box.
  • text: The initial text of the text box.
  • maxLength: The maximum length of the text box content.
  • countLengthByBytes: If true, length is counted by bytes; otherwise, by characters.

Public Methods

const char *GetText()

const char *GetText();

Returns the current text of the text box.

void SetText(const char *text)

void SetText(const char *text);

Sets the text of the text box.

  • text: The text to set.

Usage

// create a new element
GUITextBox m_textBox = new GUITextBox(
        GetLeftX() + 10, GetTopY() + 100, GetRightX() - GetLeftX() - 10,
        "Loading...",
        100, false
    )

// change the text
m_label.SetText("Loaded, edit me");
m_label.Refresh();

// get the text in the userInput variable
userInput = m_label.GetText();

Use in C++ dialog

This component is part of the 👨‍💻 demo gui that you can look for a complete example.

Text repeater

Below is a simple dialog that repeats the input text on a label when clicking the button:

#include <appdef.hpp>
#include <sdk/calc/calc.hpp>
#include <sdk/os/debug.hpp>
#include <sdk/os/gui.hpp>
#include <sdk/os/lcd.hpp>
#include <sdk/os/mem.hpp>
#include <sdk/os/string.hpp>

/*
 * Fill this section in with some information about your app.
 * All fields are optional - so if you don't need one, take it out.
 */
APP_NAME("Tutorial textBox app")
APP_DESCRIPTION("Testing a textBox")
APP_AUTHOR("Demo")
APP_VERSION("1.0.0")


class MyDialog : public GUIDialog {
public:
    MyDialog() : GUIDialog(
        GUIDialog::Height55, GUIDialog::AlignTop,
        "My Demo Dialog",
        GUIDialog::KeyboardStateABC
    ), m_label(
        GetLeftX() + 10, GetTopY() + 10,
        "The text is:"
    ), m_button(
        GetLeftX() + 10, GetTopY() + 50,
        GetRightX() - 10, GetTopY() + 90,
        "Set Text", BUTTON_EVENT_ID
    ), m_textBox(
        GetLeftX() + 10, GetTopY() + 100, GetRightX() - GetLeftX() - 10,
        "Enter text here...",
        100, false
    ) {
        AddElement(m_label);
        AddElement(m_button);
        AddElement(m_textBox);
    }

    virtual int OnEvent(struct GUIDialog_Wrapped *dialog, struct GUIDialog_OnEvent_Data *event) {
        if (event->GetEventID() == BUTTON_EVENT_ID) {
            const char *text = m_textBox.GetText();
            char labelText[100];
            snprintf(labelText, sizeof(labelText), "The text is: %s", text);
            m_label.SetText(labelText);
            m_label.Refresh();
            Refresh();
            return 0;
        }
        return GUIDialog::OnEvent(dialog, event);
    }

private:
    const uint16_t BUTTON_EVENT_ID = 1;

    GUILabel m_label;
    GUIButton m_button;
    GUITextBox m_textBox;
};

void main() {
    MyDialog dialog;
    dialog.ShowDialog();
}