gui: define signals for dialog class, create to-be-shared code.

This commit is contained in:
Martin Preuss
2026-05-11 00:41:16 +02:00
parent cd0d74d491
commit fc28a57b05

View File

@@ -19,6 +19,14 @@
.equ DIALOG_SIZE = DIALOG_OFFS_BEGIN+0
.equ DIALOG_OPTS_STDBTNS_BIT = 0 ; use standard buttons
; signals
.equ DIALOG_SIGNAL_TOGUI = WIDGET_SIGNAL_NEXTFREE+0
.equ DIALOG_SIGNAL_FROMGUI = WIDGET_SIGNAL_NEXTFREE+1
.equ DIALOG_SIGNAL_NEXT = WIDGET_SIGNAL_NEXTFREE+2
; selectors
.equ DIALOG_SEL_OKBUTTON = 1
.equ DIALOG_SEL_ABORTBUTTON = 2
@@ -41,12 +49,12 @@
;
; @param Y pointer to MainWindow
; @param X pointer to root window
; @param r16 value for OBJECT_OFFS_OPTS
; @param R21:R20 title ressource
; @return CFLAG set of okay, cleared otherwise
; @clobbers any, !Y
Dialog_Init:
ldi r16, 0 ; OPTS
ldi r17, (WIDGET_PACK_FILLED<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; PACK
bigcall MainWindow_Init
brcc Dialog_Init_ret
@@ -67,7 +75,7 @@ Dialog_Init_ret:
; ---------------------------------------------------------------------------
; @routine Dialog_AddDefaultButtons @global
;
; @param Y pointer to MainWindow
; @param Y pointer to dialog
; @clobbers any, !Y
Dialog_AddDefaultButtons:
@@ -91,6 +99,34 @@ Dialog_AddDefaultButtons_ret:
; ---------------------------------------------------------------------------
; @routine Dialog_toGui @global
;
; @param Y pointer to dialog
; @clobbers any, !Y
Dialog_toGui:
ldi r16, DIALOG_SIGNAL_TOGUI
clr r17
bigjmp OBJ_HandleSignal
; @end
; ---------------------------------------------------------------------------
; @routine Dialog_fromGui @global
;
; @param Y pointer to dialog
; @clobbers any, !Y
Dialog_fromGui:
ldi r16, DIALOG_SIGNAL_FROMGUI
clr r17
bigjmp OBJ_HandleSignal
; @end
; ***************************************************************************
@@ -103,6 +139,7 @@ Dialog_AddDefaultButtons_ret:
; @clobbers any, !Y
Dialog_OnOk:
rcall Dialog_fromGui
ldi r16, WIDGET_SIGNAL_DIALOG_END
ldi xl, LOW(DIALOG_RESULT_OK)
ldi xh, HIGH(DIALOG_RESULT_OK)
@@ -130,6 +167,108 @@ Dialog_OnAbort:
; ---------------------------------------------------------------------------
; @routine Dialog_OnShow @global
;
; @param Y pointer to dialog
; @clobbers any, !Y
Dialog_OnShow:
ldd r16, Y+OBJECT_OFFS_FLAGS
sbrc r16, WIDGET_FLAGS_VISIBLE_BIT
rjmp Dialog_OnShow_ret
bigcall MainWindow_CreateContentWidget
brcc Dialog_OnShow_ret
bigcall CDialog_CreateContent
brcc Dialog_OnShow_ret
ldd r16, Y+OBJECT_OFFS_OPTS
sbrs r16, DIALOG_OPTS_STDBTNS_BIT
rjmp Dialog_OnShow_toGui
bigcall Dialog_AddDefaultButtons ; (any, !Y)
brcc Dialog_OnShow_ret
Dialog_OnShow_toGui:
rcall Dialog_toGui
; set VISIBLE flag
ldd r16, Y+OBJECT_OFFS_FLAGS
sbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_DIRTY_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
Dialog_OnShow_ret:
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine Dialog_OnHide @global
;
; @param Y pointer to dialog
; @return CFLAG set of okay, cleared otherwise
; @clobbers any, !Y
Dialog_OnHide:
ldd r16, Y+OBJECT_OFFS_FLAGS
sbrs r16, WIDGET_FLAGS_VISIBLE_BIT
rjmp Dialog_OnHide_ret
; read data into settings struct
rcall Dialog_fromGui
; prepare destruction of content
bigcall MainWindow_GetContentWidget
brcc Dialog_OnHide_ret
push yl
push yh
mov yl, r18
mov yh, r19
ldd r16, Y+OBJECT_OFFS_FLAGS
sbr r16, (1<<OBJECT_FLAGS_DESTROY_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
pop yh
pop yl
; clr VISIBLE flag
ldd r16, Y+OBJECT_OFFS_FLAGS
cbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
Dialog_OnHide_ret:
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine Dialog_OnFromGui @global
;
; @param Y pointer to dialog
; @clobbers any, !Y
Dialog_OnFromGui:
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine Dialog_OnToGui @global
;
; @param Y pointer to dialog
; @clobbers any, !Y
Dialog_OnToGui:
sec
ret
; @end
; ***************************************************************************
; data in FLASH
@@ -201,6 +340,10 @@ Dialog_DefaultSignalmap:
; entries
.db DIALOG_SEL_OKBUTTON, WIDGET_SIGNAL_COMMAND, LOW(Dialog_OnOk), HIGH(Dialog_OnOk)
.db DIALOG_SEL_ABORTBUTTON, WIDGET_SIGNAL_COMMAND, LOW(Dialog_OnAbort), HIGH(Dialog_OnAbort)
.db 0, WIDGET_SIGNAL_SHOW, LOW(Dialog_OnShow), HIGH(Dialog_OnShow)
.db 0, WIDGET_SIGNAL_HIDE, LOW(Dialog_OnHide), HIGH(Dialog_OnHide)
.db 0, DIALOG_SIGNAL_FROMGUI, LOW(Dialog_OnFromGui), HIGH(Dialog_OnFromGui)
.db 0, DIALOG_SIGNAL_TOGUI, LOW(Dialog_OnToGui), HIGH(Dialog_OnToGui)
; end of table
.db 0, 0, 0, 0