Files
Aerofoil/PortabilityLayer/PLEditboxWidget.h
elasota 7548690c51 Fix up radio buttons, more editbox functionality.
All blocking issues with UI should now be fixed.
2020-02-16 21:57:02 -05:00

49 lines
1.1 KiB
C++

#pragma once
#include "PascalStr.h"
#include "PLWidgets.h"
namespace PortabilityLayer
{
class EditboxWidget final : public WidgetSpec<EditboxWidget>
{
public:
EditboxWidget(const WidgetBasicState &state);
~EditboxWidget();
bool Init(const WidgetBasicState &state) override;
void DrawControl(DrawSurface *surface) override;
void SetString(const PLPasStr &str) override;
PLPasStr GetString() const override;
void GainFocus() override;
void LoseFocus() override;
WidgetHandleState_t ProcessEvent(const TimeTaggedVOSEvent &evt) override;
bool HandlesTickEvents() const;
void SetSelection(size_t startChar, size_t endChar);
private:
static const unsigned int kCaratBlinkRate = 20;
void OnTick() override;
void Redraw();
void HandleCharacter(uint8_t keyChar, const uint32_t numRepeatsRequested);
void HandleBackspace(const uint32_t numRepeatsRequested);
void HandleForwardDelete(const uint32_t numRepeatsRequested);
uint8_t *m_chars;
size_t m_capacity;
size_t m_length;
size_t m_selStartChar;
size_t m_selEndChar;
bool m_hasFocus;
uint16_t m_caratTimer;
};
}