c03: use new CDIALOG class for LightSettings dialog.

This commit is contained in:
Martin Preuss
2026-05-06 23:44:46 +02:00
parent dfeedecf22
commit 1c90e66f74
2 changed files with 93 additions and 228 deletions

View File

@@ -535,6 +535,7 @@ GUI_MODULE_BEGIN:
.include "modules/lcd2/gui/base/keypad.asm"
.include "modules/lcd2/gui/base/keypad_num.asm"
.include "modules/lcd2/gui/base/d_numinput.asm"
.include "modules/lcd2/gui/base/cdialog.asm"
.include "modules/lcd2/gui/aqhome/sensorwatch.asm"
.include "modules/lcd2/gui/aqhome/lightsettings.asm"
.include "modules/lcd2/gui/screensavers/simple.asm"

View File

@@ -17,7 +17,7 @@
.equ LIGHTSETTINGSWIN_NUM_COLORS = 8
.equ LIGHTSETTINGSWIN_OFFS_BEGIN = MAINWINDOW_SIZE
.equ LIGHTSETTINGSWIN_OFFS_BEGIN = CDIALOG_SIZE
.equ LIGHTSETTINGSWIN_OFFS_SETTINGS_LO = LIGHTSETTINGSWIN_OFFS_BEGIN+0
.equ LIGHTSETTINGSWIN_OFFS_SETTINGS_HI = LIGHTSETTINGSWIN_OFFS_BEGIN+1
.equ LIGHTSETTINGSWIN_SIZE = LIGHTSETTINGSWIN_OFFS_BEGIN+2
@@ -73,7 +73,7 @@ LightSettingsWin_new_ret:
; ---------------------------------------------------------------------------
; @routine LightSettingsWin_new @global
; @routine LightSettingsWin_Init @global
;
; @param Y pointer to newly allocated widget data
; @param X pointer to root window
@@ -88,7 +88,9 @@ LightSettingsWin_Init:
ldi r17, (WIDGET_PACK_FILLED<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; PACK
ldi r20, LOW(RESSOURCE_TXT_LIGHTSETTINGS)
ldi r21, HIGH(RESSOURCE_TXT_LIGHTSETTINGS)
bigcall MainWindow_Init ; Y=main window
ldi r22, LOW(LightSettingsWin_Config*2)
ldi r23, HIGH(LightSettingsWin_Config*2)
bigcall CDialog_Init ; Y=main window
pop r21
pop r20
brcc LightSettingsWin_Init_ret
@@ -103,23 +105,6 @@ LightSettingsWin_Init:
ldi r16, HIGH(LightSettingsWin_DefaultSignalmap*2)
std Y+OBJECT_OFFS_SIGNALMAP_HI, r16
; create child widgets
bigcall MainWindow_GetContentWidget ; r19:r18=content window
brcc LightSettingsWin_Init_ret
mov xl, r18 ; use content window as parent
mov xh, r19
; Y=MainWindow
push yl ; main window
push yh
push xl ; content window
push xh
rcall lightSettingsWinCreateContent
pop xh ; content window
pop xl
bigcall C03App_CreateBackButton
pop yh ; main window
pop yl
LightSettingsWin_Init_ret:
ret
; @end
@@ -164,217 +149,96 @@ LightSettingsWin_OnDestroy_done:
; ---------------------------------------------------------------------------
; @routine lightSettingsWinCreateContent
;
; @param Y pointer to MainWindow
; @param X pointer to MainWindow content window (becomes parent)
; @return CFLAG set of okay, cleared otherwise
lightSettingsWinCreateContent:
mov zl, yl
mov zh, yh
; create MLayout
ldi r16, 0 ; OPTS
ldi r17, (WIDGET_PACK_FILLED<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; PACK
ldi r20, 2 ; columns per row
push zl
push zh
bigcall MCLayout_new
pop zh
pop zl
brcc lightSettingsWinCreateContent_ret
mov xl, yl ; use MLayout as parent
mov xh, yh
rcall lightSettingsWinCreateLine1
brcc lightSettingsWinCreateContent_ret
rcall lightSettingsWinCreateLine2
brcc lightSettingsWinCreateContent_ret
rcall lightSettingsWinCreateLine3
brcc lightSettingsWinCreateContent_ret
sec
lightSettingsWinCreateContent_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine lightSettingsWinCreateLine1
;
; @param X parent (mlayout widget)
; @param Z main window
; @clobbers any, !X, !Z
lightSettingsWinCreateLine1:
; label
ldi r20, LOW(RESSOURCE_TXT_LEDNODEADDR)
ldi r21, HIGH(RESSOURCE_TXT_LEDNODEADDR)
rcall lightSettingsWinCreateLabel ; Y=new widget (any, !X, !Z)
brcc lightSettingsWinCreateLine1_ret
; input
ldi r20, 0 ; postkomma digits
ldi r21, 3 ; total digits
ldi r22, LIGHTSETTINGSWIN_SEL_NODEADDR
ldi r18, 0
ldi r19, 255
rcall lightSettingsWinCreateHSpinner ; Y=new widget (any, !X, !Z)
lightSettingsWinCreateLine1_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine lightSettingsWinCreateLine2
;
; @param X parent (mlayout widget)
; @param Z main window
; @clobbers any, !X, !Z
lightSettingsWinCreateLine2:
; label
ldi r20, LOW(RESSOURCE_TXT_LEDCOUNT)
ldi r21, HIGH(RESSOURCE_TXT_LEDCOUNT)
rcall lightSettingsWinCreateLabel ; Y=new widget (any, !X, !Z)
brcc lightSettingsWinCreateLine2_ret
; input
ldi r20, 0 ; postkomma digits
ldi r21, 3 ; total digits
ldi r22, LIGHTSETTINGSWIN_SEL_LEDCOUNT
ldi r18, 1
ldi r19, 255
rcall lightSettingsWinCreateHSpinner ; Y=new widget (any, !X, !Z)
lightSettingsWinCreateLine2_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine lightSettingsWinCreateLine3
;
; @param X parent (mlayout widget)
; @param Z main window
; @clobbers any, !X, !Z
lightSettingsWinCreateLine3:
; label
ldi r20, LOW(RESSOURCE_TXT_LEDONTIME)
ldi r21, HIGH(RESSOURCE_TXT_LEDONTIME)
rcall lightSettingsWinCreateLabel ; Y=new widget (any, !X, !Z)
brcc lightSettingsWinCreateLine3_ret
; input
ldi r20, 0 ; postkomma digits
ldi r21, 5 ; total digits
ldi r22, LIGHTSETTINGSWIN_SEL_ONTIME
ldi r18, 1
ldi r19, 0
rcall lightSettingsWinCreateHSpinner ; Y=new widget (any, !X, !Z)
lightSettingsWinCreateLine3_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine lightSettingsWinCreateLabel
;
; @param X parent
; @param r21:r20 id of text ressource
; @return CFLAG set if created, cleared otherwise
; @return Y new object created
; @clobbers any, !X, !Z
lightSettingsWinCreateLabel:
push xl
push xh
push zl
push zh
ldi r16, 0
ldi r17, (WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | (WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT)
bigcall Label_new
pop zh
pop zl
pop xh
pop xl
ret
; @end
; ---------------------------------------------------------------------------
; @routine lightSettingsWinCreateHSpinner
;
; @param X parent
; @param r20 number of postkomma digits
; @param r21 total number of digits (including komma, if r20>0)
; @param r22 selector
; @param r18 minimum value
; @param r19 maximum value
; @param Z target
; @return CFLAG set if created, cleared otherwise
; @return Y new object created
; @clobbers any, !X, !Z
lightSettingsWinCreateHSpinner:
push r18
push r19
push r22
push xl
push xh
push zl
push zh
ldi r16, 0
ldi r17, (WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | (WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT)
bigcall HSpinner_new
pop zh
pop zl
pop xh
pop xl
pop r22
pop r19
pop r18
brcc lightSettingsWinCreateHSpinner_ret
std Y+OBJECT_OFFS_SELECTOR, r22
std Y+OBJECT_OFFS_TARGET_LO, zl ; main window
std Y+OBJECT_OFFS_TARGET_HI, zh
push xl
push xh
push zl
push zh
mov xl, r18
clr xh
push r19
bigcall HSpinner_SetMinValue
pop r19
mov xl, r19
clr xh
bigcall HSpinner_SetMaxValue
pop zh
pop zl
pop xh
pop xl
sec
lightSettingsWinCreateHSpinner_ret:
ret
; @end
; ***************************************************************************
; data in FLASH
LightSettingsWin_Config:
.db CDIALOGCFG_MAINWIDGET_TYPE_MLAYOUT, 0 ; TYPE, FLAGS
.db 2, 0 ; PARAM1, PARAM2
; line 1, left widget
.db CDIALOGCFG_WIDGET_TYPE_LABEL, 0 ; TYPE, FLAGS
.db 0, 0 ; SELECTOR, RESERVED
.db 0, (WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT) ; OPTS, PACK
.dw 0 ; STYLE
.dw RESSOURCE_TXT_LEDNODEADDR ; PARAM1, PARAM2
.dw 0 ; PARAM3, PARAM4
.dw 0, 0 ; MINVAL, MAXVAL
; line 1, right widget
.db CDIALOGCFG_WIDGET_TYPE_HSPINNER, (1<<CDIALOGCFG_WIDGET_FLAGS_MINMAXVALUES_BIT) ; TYPE, FLAGS
.db LIGHTSETTINGSWIN_SEL_NODEADDR, 0 ; SELECTOR, RESERVED
.db (1<<WIDGET_OPTS_BORDER_BIT), \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT) ; OPTS, PACK
.dw 0 ; STYLE
.db 0, 5 ; PARAM1, PARAM2 (postkomma digits, total digits)
.dw 0 ; PARAM3, PARAM4
.dw 1, 255 ; MINVAL, MAXVAL
; line 2, left widget
.db CDIALOGCFG_WIDGET_TYPE_LABEL, 0 ; TYPE, FLAGS
.db 0, 0 ; SELECTOR, RESERVED
.db 0, \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT) ; OPTS, PACK
.dw 0 ; STYLE
.dw RESSOURCE_TXT_LEDCOUNT ; PARAM1, PARAM2
.dw 0 ; PARAM3, PARAM4
.dw 0, 0 ; MINVAL, MAXVAL
; line 2, right widget
.db CDIALOGCFG_WIDGET_TYPE_HSPINNER, (1<<CDIALOGCFG_WIDGET_FLAGS_MINMAXVALUES_BIT) ; TYPE, FLAGS
.db LIGHTSETTINGSWIN_SEL_LEDCOUNT, 0 ; SELECTOR, RESERVED
.db (1<<WIDGET_OPTS_BORDER_BIT), \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT) ; OPTS, PACK
.dw 0 ; STYLE
.db 0, 5 ; PARAM1, PARAM2 (postkomma digits, total digits)
.dw 0 ; PARAM3, PARAM4
.dw 1, 300 ; MINVAL, MAXVAL
; line 3, left widget
.db CDIALOGCFG_WIDGET_TYPE_LABEL, 0 ; TYPE, FLAGS
.db 0, 0 ; SELECTOR, RESERVED
.db 0, \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT) ; OPTS, PACK
.dw 0 ; STYLE
.dw RESSOURCE_TXT_LEDONTIME ; PARAM1, PARAM2
.dw 0 ; PARAM3, PARAM4
.dw 0, 0 ; MINVAL, MAXVAL
; line 3, right widget
.db CDIALOGCFG_WIDGET_TYPE_HSPINNER, (1<<CDIALOGCFG_WIDGET_FLAGS_MINMAXVALUES_BIT) ; TYPE, FLAGS
.db LIGHTSETTINGSWIN_SEL_ONTIME, 0 ; SELECTOR, RESERVED
.db (1<<WIDGET_OPTS_BORDER_BIT), \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HSELF0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VSELF0_BIT) | \
(WIDGET_PACK_BEGIN<<WIDGET_PACK_HCONTENT0_BIT) | \
(WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT) ; OPTS, PACK
.dw 0 ; STYLE
.db 0, 5 ; PARAM1, PARAM2 (postkomma digits, total digits)
.dw 0 ; PARAM3, PARAM4
.dw 1, 60000 ; MINVAL, MAXVAL
; end of configuration
.dw 0
LightSettingsWin_DefaultSignalmap:
; header
.dw MainWindow_DefaultSignalmap*2 ; next table to use