Page light
    Attributes
        ID                 : 0
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Locked             : no
        Swide up page ID   : disabled
        Swide down page ID : disabled
        Swide left page ID : disabled
        Swide right page ID: disabled
    
    Events
        Preinitialize Event
            if(api==0)
            {
                page home
            }else
            {
                vis light_b_press,1
                vis lightslider,1
                vis light_value,1
                // #### OFF Button #####
                vis temp_b_press,0
                vis color_b_pres,0
                // #### OFF Value #####
                vis temp_value,0
                vis light_value_2,0
                // #### OFF Slider #####
                vis tempslider,0
                vis colorwheel,0
                // #### Hide color & temp buttons #####
                vis temp_touch,0
                vis temp_value_2,0
                vis temp_button,0
                vis color_touch,0
                vis color_button,0
            }
        
        Postinitialize Event
            sendme
        
Variable (int32) rgb565
    Attributes
        ID   : 22
        Scope: local
        Value: 0
    
Variable (string) va1
    Attributes
        ID            : 23
        Scope         : local
        Text          : newtxt
        Max. Text Size: 20
    
Variable (string) va2
    Attributes
        ID            : 24
        Scope         : local
        Text          : newtxt
        Max. Text Size: 10
    
Variable (string) va3
    Attributes
        ID            : 25
        Scope         : local
        Text          : newtxt
        Max. Text Size: 10
    
Variable (int32) currenttab
    Attributes
        ID   : 26
        Scope: local
        Value: 0
    
Variable (string) lightsetting
    Attributes
        ID            : 30
        Scope         : local
        Text          : 
        Max. Text Size: 255
    
Number ring
    Attributes
        ID                 : 4
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Associated Keyboard: none
        Value              : 0
    
Number field
    Attributes
        ID                 : 5
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Associated Keyboard: none
        Value              : 0
    
Text light_value
    Attributes
        ID                 : 1
        Scope              : local
        Dragging           : 0
        Send Component ID  : disabled
        Associated Keyboard: none
        Text               : 
        Max. Text Size     : 10
    
Text page_label
    Attributes
        ID                 : 2
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Associated Keyboard: none
        Text               : 
        Max. Text Size     : 100
    
Text temp_value
    Attributes
        ID                 : 14
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Associated Keyboard: none
        Text               : 
        Max. Text Size     : 10
    
Text light_value_2
    Attributes
        ID                 : 27
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Associated Keyboard: none
        Text               : 
        Max. Text Size     : 10
    
Text temp_value_2
    Attributes
        ID                 : 28
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Associated Keyboard: none
        Text               : 
        Max. Text Size     : 10
    
Text icon_state
    Attributes
        ID                 : 29
        Scope              : local
        Dragging           : 0
        Send Component ID  : on press and release
        Associated Keyboard: none
        Text               : 
        Max. Text Size     : 10
    
Picture light_button
    Attributes
        ID               : 8
        Scope            : local
        Dragging         : 0
        Send Component ID: disabled
    
Picture color_button
    Attributes
        ID               : 9
        Scope            : local
        Dragging         : 0
        Send Component ID: disabled
    
Picture temp_button
    Attributes
        ID               : 10
        Scope            : local
        Dragging         : 0
        Send Component ID: disabled
    
Picture light_b_press
    Attributes
        ID               : 11
        Scope            : local
        Dragging         : 0
        Send Component ID: disabled
    
Picture temp_b_press
    Attributes
        ID               : 12
        Scope            : local
        Dragging         : 0
        Send Component ID: disabled
    
Picture color_b_pres
    Attributes
        ID               : 13
        Scope            : local
        Dragging         : 0
        Send Component ID: disabled
    
Picture colorwheel
    Attributes
        ID               : 16
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
    
    Events
        Touch Press Event
            // Circular Color Picker for Nextion (c) Max Zuidberg 2022
            // This Source Code Form is subject to the terms of the Mozilla Public
            // License, v. 2.0. If a copy of the MPL was not distributed with this
            // file, You can obtain one at http://mozilla.org/MPL/2.0/.
            //
            // Put this code in the touch press or release
            // event of the pic component with the color wheel.
            // Requires the two variables field.val and ring.val
            //
            // sya0 = x, sya1 = sya1
            // Note the usage of the hidden sya0, sya1 variables
            // within event code as local, temporary variable is fine.
            sya0=tch0
            sya1=tch1
            //
            // Convert absolute coordinates to coordinates relative to
            // the color wheel center.
            // sys0 = x_center, sys1 = y_center
            sys0=colorwheel.w/2
            sys0+=colorwheel.x
            sys1=colorwheel.h/2
            sys1+=colorwheel.y
            sya0-=sys0
            sya1-=sys1
            //
            // Determine ring
            ring.val=0
            // sys0 = r^2 = x^2 + y^2
            sys0=sya0*sya0
            sys1=sya1*sya1
            sys0+=sys1
            // repeat for all rings
            if(sys0>=156)
            {
                ring.val++
            }
            if(sys0>=625)
            {
                ring.val++
            }
            if(sys0>=1406)
            {
                ring.val++
            }
            if(sys0>=2500)
            {
                ring.val++
            }
            if(sys0>=3906)
            {
                ring.val++
            }
            if(sys0>=5625)
            {
                ring.val++
            }
            if(sys0>=7656)
            {
                ring.val++
            }
            //
            // Determine quadrant (0-3). Note: pixel y coords are inverted
            // compared to mathematical y coords. But we want math. quadrants.
            sya1*=-1
            sys2=0
            if(sya1<0)
            {
                sys2+=2
            }
            sys0=sya0*sya1
            if(sys0<0)
            {
                sys2+=1
                // In this case we also want to swap x and y otherwise the
                // atan(abs(x/y)) (calculated below) gives values running
                // "the wrong way" (cw instead of ccw).
                sys1=sya1
                sya1=sya0
                sya0=sys1
            }
            //
            field.val=sys2*6
            //
            // x,y sign is not required anymore
            if(sya0<0)
            {
                sya0*=-1
            }
            if(sya1<0)
            {
                sya1*=-1
            }
            //
            // Determine field in ring quadrant
            // Factor 100000 chosen more or less arbitrarily.
            // sys0 = 100000 * tan_a = 100000 * y / x
            sys0=100000*sya1
            sys0/=sya0
            // repeat for all fields
            if(sys0>=26794)
            {
                field.val++
            }
            if(sys0>=57735)
            {
                field.val++
            }
            if(sys0>=99999)
            {
                field.val++
            }
            if(sys0>=173205)
            {
                field.val++
            }
            if(sys0>=373205)
            {
                field.val++
            }
            covx r,va1.txt,0,0
            covx g,va2.txt,0,0
            covx b,va3.txt,0,0
            va1.txt=""
            va2.txt=""
            va3.txt=""
        
        Touch Release Event
            // Adjust field.val "orientation" and offset to match the h value of the colors in the wheel
            h=23-field.val// 0 <= field.val <= 23
            // h is expected to be 0-6*256 (see hsv2rgb)
            h*=6*256
            h/=24// Number of fields
            //
            // s is expected to be 0-256 (see hsv2rgb)
            s=ring.val*256
            s/=8// Number of rings
            // no "value" selectable; fix it to the maximum (matching the colors in the wheels shown.
            v=255
            click hsv2rgb,0
            click rgb888to565,0
            //colPreview.bco=rgb565.val
            covx r,va1.txt,0,0
            covx g,va2.txt,0,0
            covx b,va3.txt,0,0
            lightsetting.txt="{\"page\": \"light\", \"component\": \"rgb_color\", \"value\": ["+va1.txt+", "+va2.txt+", "+va3.txt+"]}"
            printh 92
            prints "nspanelevent",0
            printh 00
            prints lightsetting.txt,0
            printh 00
            printh FF FF FF
            va1.txt=""
            va2.txt=""
            va3.txt=""
        
Slider lightslider
    Attributes
        ID               : 3
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
        Position         : 0
        Upper range limit: 100
        Lower range limit: 0
    
    Events
        Touch Release Event
            covx lightslider.val,va1.txt,0,0
            light_value.txt=va1.txt+"%"
            light_value_2.txt=va1.txt+"%"
            lightsetting.txt="{\"page\": \"light\", \"key\": \"brightness_pct\", \"value\": "+va1.txt+"}"
            printh 92
            prints "localevent",0
            printh 00
            prints lightsetting.txt,0
            printh 00
            printh FF FF FF
        
Slider tempslider
    Attributes
        ID               : 15
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
        Position         : 0
        Upper range limit: 500
        Lower range limit: 153
    
    Events
        Touch Release Event
            covx tempslider.val,va1.txt,0,0
            temp_value.txt=va1.txt
            temp_value_2.txt=va1.txt
            lightsetting.txt="{\"page\": \"light\", \"key\": \"color_temp\", \"value\": "+va1.txt+"}"
            printh 92
            prints "localevent",0
            printh 00
            prints lightsetting.txt,0
            printh 00
            printh FF FF FF
        
Button button_back
    Attributes
        ID               : 31
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
        State            : unpressed
        Text             : î…˜
        Max. Text Size   : 3
    
    Events
        Touch Press Event
            page back_page_id
        
Hotspot hsv2rgb
    Attributes
        ID               : 6
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
    
    Events
        Touch Release Event
            // https://de.wikipedia.org/wiki/HSV-Farbraum#Umrechnung_HSV_in_RGB
            // The values range from 0..255 instead of 0..1
            // h ranges from 0..(6*256)
            if(s>=256)
            {
                s=255
            }else if(s<0)
            {
                s=0
            }
            if(v>=256)
            {
                v=255
            }else if(v<0)
            {
                v=0
            }
            f=h&0xff
            p=256-s
            p*=v
            p=p>>8// / 256
            q=s*f// 0-256*256 = 0-65536
            q=65536-q
            q*=v
            q=q>>16
            t=256-f
            t*=s
            t=65536-t
            t*=v
            t=t>>16
            //
            f=h>>8
            if(f==1)
            {
                r=q
                g=v
                b=p
            }else if(f==2)
            {
                r=p
                g=v
                b=t
            }else if(f==3)
            {
                r=p
                g=q
                b=v
            }else if(f==4)
            {
                r=t
                g=p
                b=v
            }else if(f==5)
            {
                r=v
                g=p
                b=q
            }else
            {
                r=v
                g=t
                b=p
            }
        
Hotspot rgb888to565
    Attributes
        ID               : 7
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
    
    Events
        Touch Release Event
            r=r&0xff
            g=g&0xff
            b=b&0xff
            sys1=r>>3
            sys2=sys1<<6
            sys1=g>>2
            sys2+=sys1
            sys2=sys2<<5
            sys1=b>>3
            sys2+=sys1
            rgb565.val=sys2
        
Hotspot light_touch
    Attributes
        ID               : 17
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
    
    Events
        Touch Press Event
            vis light_b_press,1
            vis lightslider,1
            vis light_value,1
            vis temp_value_2,1
            // #### OFF Button #####
            vis temp_b_press,0
            vis color_b_pres,0
            // #### OFF Value #####
            vis temp_value,0
            vis light_value_2,0
            // #### OFF Slider #####
            vis tempslider,0
            vis colorwheel,0
        
Hotspot temp_touch
    Attributes
        ID               : 18
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
    
    Events
        Touch Press Event
            vis temp_b_press,1
            vis tempslider,1
            vis temp_value,1
            vis light_value_2,1
            // #### OFF Button #####
            vis light_b_press,0
            vis color_b_pres,0
            // #### OFF Value #####
            vis light_value,0
            vis temp_value_2,0
            // #### OFF Slider #####
            vis lightslider,0
            vis colorwheel,0
        
Hotspot color_touch
    Attributes
        ID               : 19
        Scope            : local
        Dragging         : 0
        Send Component ID: on press and release
    
    Events
        Touch Press Event
            vis color_b_pres,1
            vis colorwheel,1
            vis light_value_2,1
            // #### OFF Button #####
            vis light_b_press,0
            vis temp_b_press,0
            // #### OFF Value #####
            vis light_value,0
            vis temp_value,0
            vis temp_value_2,0
            // #### OFF Slider #####
            vis lightslider,0
            vis tempslider,0
            // #### OFF Color #####
        
Timer swipestore
    Attributes
        ID         : 21
        Scope      : local
        Period (ms): 50
        Enabled    : no
    
    Events
        Timer Event
            swipex=tch0
            swipey=tch1
        
Timer wakeup_timer
    Attributes
        ID         : 32
        Scope      : local
        Period (ms): 100
        Enabled    : yes
    
    Events
        Timer Event
            if(dim<brightness)
            {
                dimdelta=brightness-dim
                dimdelta/=10
                if(dimdelta<1)
                {
                    dimdelta=1
                }
                dim+=dimdelta
            }else
            {
                wakeup_timer.en=0
            }
        
TouchCap swipe
    Attributes
        ID   : 20
        Scope: local
        Value: 0
    
    Events
        Touch Press Event
            swipestore.en=1 // Start swipestore timer
        
        Touch Release Event
            swipestore.en=0
            // Touch has ended, x
            if(tch0==0)
            {
                swipec=swipex-tch2
                // From Left to Right
                if(swipec>swipedx)
                {
                    //page
                }
                // Right to Left
                swipec2=0-swipedx
                if(swipec<swipec2)
                {
                    //page
                }
            }
            // Touch has ended, y
            if(tch1==0)
            {
                swipec=swipey-tch3
                // From Up to Down
                if(swipec>100)
                {
                    //page
                }
                // Down to Up
                swipec2=0-swipedy
                if(swipec<-100)
                {
                    //page
                }
            }
        
