From e6b7670e97cd88e46eab4f32fb5162af9ea16a87 Mon Sep 17 00:00:00 2001 From: Rustam Gamidov Date: Thu, 9 Apr 2020 08:49:44 +0300 Subject: [PATCH] entry: add text selection abilities. windows part --- ui.h | 2 ++ ui_windows.h | 1 + windows/entry.cpp | 12 ++++++++++++ windows/text.cpp | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/ui.h b/ui.h index 022178e4..f2b21b3d 100644 --- a/ui.h +++ b/ui.h @@ -171,6 +171,8 @@ typedef struct uiEntry uiEntry; #define uiEntry(this) ((uiEntry *) (this)) _UI_EXTERN char *uiEntryText(uiEntry *e); _UI_EXTERN void uiEntrySetText(uiEntry *e, const char *text); +_UI_EXTERN void uiEntrySelectText(uiEntry *e, int start, int end); +_UI_EXTERN void uiEntrySelectAllText(uiEntry *e); _UI_EXTERN void uiEntryOnChanged(uiEntry *e, void (*f)(uiEntry *e, void *data), void *data); _UI_EXTERN void uiEntryOnKeyEvent(uiEntry *e, int (*f)(uiEntry *e, uiAreaKeyEvent *event)); _UI_EXTERN int uiEntryReadOnly(uiEntry *e); diff --git a/ui_windows.h b/ui_windows.h index 46cd9eee..523a9fec 100644 --- a/ui_windows.h +++ b/ui_windows.h @@ -218,6 +218,7 @@ _UI_EXTERN void uiWindowsEnsureGetWindowRect(HWND hwnd, RECT *r); // TODO document _UI_EXTERN char *uiWindowsWindowText(HWND hwnd); _UI_EXTERN void uiWindowsSetWindowText(HWND hwnd, const char *text); +_UI_EXTERN void uiWindowsSetlectWindowText(HWND hwnd, int start, int end); // TODO document _UI_EXTERN int uiWindowsWindowTextWidth(HWND hwnd); diff --git a/windows/entry.cpp b/windows/entry.cpp index 6dadf908..4042903d 100644 --- a/windows/entry.cpp +++ b/windows/entry.cpp @@ -121,6 +121,18 @@ void uiEntrySetText(uiEntry *e, const char *text) // don't queue the control for resize; entry sizes are independent of their contents } +void uiEntrySelectText(uiEntry *e, int start, int end) +{ + e->inhibitChanged = TRUE; + uiWindowsSetlectWindowText(e->hwnd, start, end); + e->inhibitChanged = FALSE; +} + +void uiEntrySelectAllText(uiEntry *e) +{ + uiEntrySelectText(e, 0, -1); +} + void uiEntryOnChanged(uiEntry *e, void (*f)(uiEntry *, void *), void *data) { e->onChanged = f; diff --git a/windows/text.cpp b/windows/text.cpp index eafbe714..46be9eb9 100644 --- a/windows/text.cpp +++ b/windows/text.cpp @@ -106,6 +106,11 @@ void uiWindowsSetWindowText(HWND hwnd, const char *text) uiprivFree(wtext); } +void uiWindowsSetlectWindowText(HWND hwnd, int start, int end) +{ + SendMessage(hwnd, EM_SETSEL, 0, -1); +} + int uiprivStricmp(const char *a, const char *b) { WCHAR *wa, *wb;