From ce1fd901e71294676c184e5e39e5e6cb55688c0e Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Wed, 6 May 2026 23:43:15 +0200 Subject: [PATCH] gui: added configuration-based dialog creates a dialog with widgets from a configuration stored as sequence of bytes in flash. --- avr/modules/lcd2/gui/base/cdialog.asm | 403 ++++++++++++++++++++++++++ 1 file changed, 403 insertions(+) create mode 100644 avr/modules/lcd2/gui/base/cdialog.asm diff --git a/avr/modules/lcd2/gui/base/cdialog.asm b/avr/modules/lcd2/gui/base/cdialog.asm new file mode 100644 index 0000000..b1b603d --- /dev/null +++ b/avr/modules/lcd2/gui/base/cdialog.asm @@ -0,0 +1,403 @@ +; *************************************************************************** +; copyright : (C) 2026 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_GUI_BASE_CDIALOG_ASM +#define AQH_AVR_GUI_BASE_CDIALOG_ASM + + +; *************************************************************************** +; defines + +; CDIALOG data +.equ CDIALOG_OFFS_BEGIN = MAINWINDOW_SIZE +.equ CDIALOG_OFFS_CONFIG_LO = CDIALOG_OFFS_BEGIN+0 +.equ CDIALOG_OFFS_CONFIG_HI = CDIALOG_OFFS_BEGIN+1 +.equ CDIALOG_SIZE = CDIALOG_OFFS_BEGIN+2 + + +; CDIALOG dialog configuration +.equ CDIALOGCFG_MAINWIDGET_TYPE_HLAYOUT = 1 +.equ CDIALOGCFG_MAINWIDGET_TYPE_VLAYOUT = 2 +.equ CDIALOGCFG_MAINWIDGET_TYPE_MLAYOUT = 3 +.equ CDIALOGCFG_MAINWIDGET_TYPE_NEXT = 4 + +.equ CDIALOGCFG_WIDGET_TYPE_LABEL = 1 +.equ CDIALOGCFG_WIDGET_TYPE_VALUELABEL = 2 +.equ CDIALOGCFG_WIDGET_TYPE_IMAGEVIEW = 3 +.equ CDIALOGCFG_WIDGET_TYPE_HSPINNER = 4 +.equ CDIALOGCFG_WIDGET_TYPE_TEXTBUTTON = 5 +.equ CDIALOGCFG_WIDGET_TYPE_IMAGEBUTTON = 6 +.equ CDIALOGCFG_WIDGET_TYPE_NEXT = 7 + +.equ CDIALOGCFG_WIDGET_FLAGS_MINMAXVALUES_BIT = 0 + +.equ CDIALOGCFG_OFFS_HEADER_TYPE = 0 ; HLAYOUT, VLAYOUT, MLAYOUT +.equ CDIALOGCFG_OFFS_HEADER_FLAGS = 1 +.equ CDIALOGCFG_OFFS_HEADER_PARAM1 = 2 ; R20 +.equ CDIALOGCFG_OFFS_HEADER_PARAM2 = 3 ; R21 +.equ CDIALOGCFG_HEADER_SIZE = 4 + +.equ CDIALOGCFG_OFFS_WIDGET_TYPE = 0 ; 0=end +.equ CDIALOGCFG_OFFS_WIDGET_FLAGS = 1 +.equ CDIALOGCFG_OFFS_WIDGET_SELECTOR = 2 +.equ CDIALOGCFG_OFFS_WIDGET_RESERVED = 3 +.equ CDIALOGCFG_OFFS_WIDGET_OPTS = 4 +.equ CDIALOGCFG_OFFS_WIDGET_PACK = 5 +.equ CDIALOGCFG_OFFS_WIDGET_STYLE_LO = 6 +.equ CDIALOGCFG_OFFS_WIDGET_STYLE_HI = 7 +.equ CDIALOGCFG_OFFS_WIDGET_PARAM1 = 8 ; R20 +.equ CDIALOGCFG_OFFS_WIDGET_PARAM2 = 9 ; R21 +.equ CDIALOGCFG_OFFS_WIDGET_PARAM3 = 10 ; R22 +.equ CDIALOGCFG_OFFS_WIDGET_PARAM4 = 11 ; R23 +.equ CDIALOGCFG_OFFS_WIDGET_MINVALUE_LO = 12 +.equ CDIALOGCFG_OFFS_WIDGET_MINVALUE_HI = 13 +.equ CDIALOGCFG_OFFS_WIDGET_MAXVALUE_LO = 14 +.equ CDIALOGCFG_OFFS_WIDGET_MAXVALUE_HI = 15 +.equ CDIALOGCFG_WIDGET_SIZE = 16 + + + + +; *************************************************************************** +; code + +.cseg + + + +; --------------------------------------------------------------------------- +; @routine CDialog__Init @global +; +; @param Y pointer to MainWindow +; @param X pointer to root window +; @param R21:R20 title ressource +; @param r23:r22 pointer to settings (byte addr for LPM!) +; @return CFLAG set of okay, cleared otherwise +; @clobbers any, !Y + +CDialog_Init: + push r22 + push r23 + ldi r16, 0 ; OPTS + ldi r17, (WIDGET_PACK_FILLED<