; *************************************************************************** ; 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_TEXTSEL_ASM #define AQH_AVR_GUI_TEXTSEL_ASM ; *************************************************************************** ; *************************************************************************** ; *************************************************************************** ; defines .equ TEXTSEL_OFFS_BEGIN = HLAYOUT_SIZE .equ TEXTSEL_OFFS_CURVALUE_LO = TEXTSEL_OFFS_BEGIN+0 .equ TEXTSEL_OFFS_CURVALUE_HI = TEXTSEL_OFFS_BEGIN+1 .equ TEXTSEL_OFFS_TEXTLIST_LO = TEXTSEL_OFFS_BEGIN+2 .equ TEXTSEL_OFFS_TEXTLIST_HI = TEXTSEL_OFFS_BEGIN+3 .equ TEXTSEL_OFFS_CURRIDX = TEXTSEL_OFFS_BEGIN+4 .equ TEXTSEL_OFFS_COUNT = TEXTSEL_OFFS_BEGIN+5 .equ TEXTSEL_SIZE = TEXTSEL_OFFS_BEGIN+6 ; selectors .equ TEXTSEL_SEL_LEFT = 1 .equ TEXTSEL_SEL_RIGHT = 2 ; child widgets .equ TEXTSEL_CHILDIDX_LEFT = 0 .equ TEXTSEL_CHILDIDX_VALUE = 1 .equ TEXTSEL_CHILDIDX_EIGHT = 2 ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine TextSel_new @global ; ; @return CFLAG set of okay, cleared otherwise ; @return Y address of newly created object ; @param X parent widget ; @param r16 value for OBJECT_OFFS_OPTS ; @param r17 value for WIDGET_OFFS_PACK ; @param r21:r20 pointer to null-terminated list of text ressources in FLASH (byte address for LPM!) ; @clobbers any TextSel_new: ldi r24, LOW(TEXTSEL_SIZE) ldi r25, HIGH(TEXTSEL_SIZE) push r20 push r21 bigcall Object_Alloc ; (!r16, !r17, !X) pop r21 pop r20 brcc TextSel_new_ret rcall TextSel_Init ; (any, !Y) sec TextSel_new_ret: ret ; @end ; --------------------------------------------------------------------------- ; @routine TextSel_Init @global ; ; @param Y address of widget ; @param X parent widget (if any) ; @param r16 value for OBJECT_OFFS_OPTS ; @param r17 value for WIDGET_OFFS_PACK ; @param r21:r20 pointer to null-terminated list of text ressources in FLASH (byte address for LPM!) ; @clobbers any, !Y TextSel_Init: ; call base class push r20 push r21 ldi r20, HLAYOUT_MODE_EXPAND bigcall HLayout_Init pop r21 pop r20 brcc TextSel_Init_ret ; set values std Y+TEXTSEL_OFFS_TEXTLIST_LO, r20 std Y+TEXTSEL_OFFS_TEXTLIST_HI, r21 ; set default signal map ldi r16, LOW(TextSel_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_LO, r16 ldi r16, HIGH(TextSel_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_HI, r16 rcall textSelCreateChildren ; (any, !Y) TextSel_Init_ret: ret ; @end ; --------------------------------------------------------------------------- ; @routine textSelCreateChildren ; ; @param Y spinner object ; @clobbers any, !Y textSelCreateChildren: push yl push yh mov xl, yl ; parent mov xh, yh ; create left button call textSelCreateLeftButton brcc textSelCreateChildren_popRet ; create label ldi r16, 0 ; OPTS ldi r17, (WIDGET_PACK_END<