Update system info box to be read only and fixed scrolling.
This commit is contained in:
parent
d876bc1c55
commit
1a60fdcf54
6 changed files with 28 additions and 5 deletions
|
|
@ -669,8 +669,8 @@ static void showSystemInfo(void) {
|
||||||
ta->weight = 100;
|
ta->weight = 100;
|
||||||
wgtSetText(ta, info);
|
wgtSetText(ta, info);
|
||||||
|
|
||||||
// Mark read-only by disabling the text area
|
// Don't disable — wgtSetEnabled(false) blocks all input including scrollbar
|
||||||
wgtSetEnabled(ta, false);
|
wgtSetReadOnly(ta, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -338,6 +338,7 @@ typedef struct WidgetT {
|
||||||
// State
|
// State
|
||||||
bool visible;
|
bool visible;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
bool readOnly;
|
||||||
bool focused;
|
bool focused;
|
||||||
char accelKey; // lowercase accelerator character, 0 if none
|
char accelKey; // lowercase accelerator character, 0 if none
|
||||||
|
|
||||||
|
|
@ -895,6 +896,9 @@ const char *wgtGetText(const WidgetT *w);
|
||||||
// Enable/disable a widget
|
// Enable/disable a widget
|
||||||
void wgtSetEnabled(WidgetT *w, bool enabled);
|
void wgtSetEnabled(WidgetT *w, bool enabled);
|
||||||
|
|
||||||
|
// Set read-only mode (allows scrolling/selection but blocks editing)
|
||||||
|
void wgtSetReadOnly(WidgetT *w, bool readOnly);
|
||||||
|
|
||||||
// Show/hide a widget
|
// Show/hide a widget
|
||||||
void wgtSetVisible(WidgetT *w, bool visible);
|
void wgtSetVisible(WidgetT *w, bool visible);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -831,7 +831,8 @@ const char *platformGetSystemInfo(const DisplayT *display) {
|
||||||
|
|
||||||
if (__dpmi_get_free_memory_information(&memInfo) == 0) {
|
if (__dpmi_get_free_memory_information(&memInfo) == 0) {
|
||||||
if (memInfo.largest_available_free_block_in_bytes != 0xFFFFFFFFUL) {
|
if (memInfo.largest_available_free_block_in_bytes != 0xFFFFFFFFUL) {
|
||||||
sysInfoAppend("Largest free block: %lu KB", (unsigned long)(memInfo.largest_available_free_block_in_bytes / 1024));
|
uint32_t largestKb = memInfo.largest_available_free_block_in_bytes / 1024;
|
||||||
|
sysInfoAppend("Largest free block: %lu KB (%lu MB)", (unsigned long)largestKb, (unsigned long)(largestKb / 1024));
|
||||||
}
|
}
|
||||||
if (memInfo.total_number_of_physical_pages != 0xFFFFFFFFUL) {
|
if (memInfo.total_number_of_physical_pages != 0xFFFFFFFFUL) {
|
||||||
uint32_t totalKb = memInfo.total_number_of_physical_pages * 4;
|
uint32_t totalKb = memInfo.total_number_of_physical_pages * 4;
|
||||||
|
|
|
||||||
|
|
@ -466,6 +466,17 @@ void wgtSetEnabled(WidgetT *w, bool enabled) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// wgtSetReadOnly
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
void wgtSetReadOnly(WidgetT *w, bool readOnly) {
|
||||||
|
if (w) {
|
||||||
|
w->readOnly = readOnly;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// wgtSetText
|
// wgtSetText
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
|
||||||
|
|
@ -1319,6 +1319,11 @@ void widgetTextAreaOnKey(WidgetT *w, int32_t key, int32_t mod) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read-only: allow select-all, copy, and navigation but block editing
|
||||||
|
if (w->readOnly) {
|
||||||
|
goto navigation;
|
||||||
|
}
|
||||||
|
|
||||||
// Ctrl+V — paste
|
// Ctrl+V — paste
|
||||||
if (key == 22) {
|
if (key == 22) {
|
||||||
if (sClipboardLen > 0) {
|
if (sClipboardLen > 0) {
|
||||||
|
|
@ -1543,6 +1548,7 @@ void widgetTextAreaOnKey(WidgetT *w, int32_t key, int32_t mod) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
navigation:
|
||||||
// Left arrow
|
// Left arrow
|
||||||
if (key == (0x4B | 0x100)) {
|
if (key == (0x4B | 0x100)) {
|
||||||
SEL_BEGIN();
|
SEL_BEGIN();
|
||||||
|
|
@ -1712,8 +1718,8 @@ void widgetTextAreaOnKey(WidgetT *w, int32_t key, int32_t mod) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Printable character
|
// Printable character (blocked in read-only mode)
|
||||||
if (key >= 32 && key < 127) {
|
if (key >= 32 && key < 127 && !w->readOnly) {
|
||||||
if (*pLen < bufSize - 1) {
|
if (*pLen < bufSize - 1) {
|
||||||
textEditSaveUndo(buf, *pLen, CUR_OFF(), w->as.textArea.undoBuf, &w->as.textArea.undoLen, &w->as.textArea.undoCursor, bufSize);
|
textEditSaveUndo(buf, *pLen, CUR_OFF(), w->as.textArea.undoBuf, &w->as.textArea.undoLen, &w->as.textArea.undoCursor, bufSize);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -353,6 +353,7 @@ DXE_EXPORT_TABLE(shellExportTable)
|
||||||
DXE_EXPORT(wgtSetTooltip)
|
DXE_EXPORT(wgtSetTooltip)
|
||||||
DXE_EXPORT(wgtGetText)
|
DXE_EXPORT(wgtGetText)
|
||||||
DXE_EXPORT(wgtSetEnabled)
|
DXE_EXPORT(wgtSetEnabled)
|
||||||
|
DXE_EXPORT(wgtSetReadOnly)
|
||||||
DXE_EXPORT(wgtSetVisible)
|
DXE_EXPORT(wgtSetVisible)
|
||||||
DXE_EXPORT(wgtGetContext)
|
DXE_EXPORT(wgtGetContext)
|
||||||
DXE_EXPORT(wgtSetName)
|
DXE_EXPORT(wgtSetName)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue