; *************************************************************************** ; 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_CHECKBUTTON_ASM #define AQH_AVR_GUI_CHECKBUTTON_ASM ; *************************************************************************** ; This module uses a horizontal layout with two children: ; - a checkBox ; - a label ; ; The current state can be set with @ref CheckButton_SetState and retrieved ; with @ref CheckButton_GetState. ; *************************************************************************** ; *************************************************************************** ; defines .equ CHECKBUTTON_OFFS_BEGIN = BUTTON_SIZE .equ CHECKBUTTON_OFFS_CHECKBOX_LO = CHECKBUTTON_OFFS_BEGIN+0 .equ CHECKBUTTON_OFFS_CHECKBOX_HI = CHECKBUTTON_OFFS_BEGIN+1 .equ CHECKBUTTON_OFFS_MODE = CHECKBUTTON_OFFS_BEGIN+2 .equ CHECKBUTTON_SIZE = CHECKBUTTON_OFFS_BEGIN+3 ; modes .equ CHECKBUTTON_MODE_TOGGLE = 0 .equ CHECKBUTTON_MODE_ONLYON = 1 ; values .equ CHECKBUTTON_VALUE_STATE = IMAGEVIEW_VALUE_NEXTFREE+0 .equ CHECKBUTTON_VALUE_NEXTFREE = IMAGEVIEW_VALUE_NEXTFREE+1 ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine CheckButton_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 label text ressource ; @param r22 mode (see @ref BUTTON_MODE_NORMAL) ; @clobbers any CheckButton_new: push r20 push r21 push r22 ldi r24, LOW(CHECKBUTTON_SIZE) ldi r25, HIGH(CHECKBUTTON_SIZE) bigcall Object_Alloc ; (!r16, !r17, !X) pop r22 pop r21 pop r20 brcc CheckButton_new_ret rcall CheckButton_Init ; (r16, r17, X) sec CheckButton_new_ret: ret ; @end ; --------------------------------------------------------------------------- ; @routine CheckButton_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 label text ressource ; @param r22 mode (see @ref BUTTON_MODE_NORMAL) ; @clobbers r16, r17, X CheckButton_Init: push r20 push r21 mov r20, r22 ; mode ; call base class bigcall Button_Init pop r21 pop r20 brcc CheckButton_Init_ret ; set default signal map ldi r16, LOW(CheckButton_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_LO, r16 ldi r16, HIGH(CheckButton_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_HI, r16 rcall checkButtonCreateChildren CheckButton_Init_ret: ret ; @end ; --------------------------------------------------------------------------- ; @routine checkButtonCreateChildren ; ; @param Y address of widget ; @param r21:r20 label text ressource ; @clobbers any, !Y checkButtonCreateChildren: push yl push yh push r20 push r21 ; create HLayout ldi r20, VLAYOUT_MODE_EXPAND mov xl, yl ; use THIS as parent mov xh, yh ldi r16, 0 ldi r17, (WIDGET_PACK_FILLED<