From 6de0c44b1416d8a4f606e36f85b4eac66ec98321 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 18 Apr 2023 21:54:04 +0200 Subject: [PATCH] Nspanel event (#689) * upd: hmi2txt export * upd: sync latest dev * upd: currentpage * upd: lightsettings * upd: coversettings * upd: touchevent * Fix error preventing long click on button pages * upd: climate * upd: lastclick w.o. blueprint * Upd: Long_press - Lights * Update: Everything else (#688) Still a bug with confirmation message and long press button. * Fix: Notifications * Fix: Button long press * Fix: Climate page * Fix: Indoor temp when no sensor defined * fix: open climate from homepage triggers mulitple --------- Co-authored-by: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> --- nspanel_blueprint.yaml | 4576 +++++++++++++------------- nspanel_esphome.yaml | 169 +- nspanel_eu.HMI | Bin 21307134 -> 21307134 bytes nspanel_eu.tft | Bin 6477436 -> 6432100 bytes nspanel_eu_code/Program.s.txt | 11 + nspanel_eu_code/boot.txt | 302 ++ nspanel_eu_code/buttonpage01.txt | 1254 +++++++ nspanel_eu_code/buttonpage02.txt | 1254 +++++++ nspanel_eu_code/buttonpage03.txt | 1254 +++++++ nspanel_eu_code/buttonpage04.txt | 1254 +++++++ nspanel_eu_code/climate.txt | 916 ++++++ nspanel_eu_code/coversettings.txt | 455 +++ nspanel_eu_code/entitypage01.txt | 797 +++++ nspanel_eu_code/entitypage02.txt | 797 +++++ nspanel_eu_code/entitypage03.txt | 797 +++++ nspanel_eu_code/entitypage04.txt | 797 +++++ nspanel_eu_code/home.txt | 1324 ++++++++ nspanel_eu_code/lightsettings.txt | 983 ++++++ nspanel_eu_code/notification.txt | 268 ++ nspanel_eu_code/nspanel_eu_Stats.txt | 98 + nspanel_eu_code/qrcode.txt | 168 + nspanel_eu_code/screensaver.txt | 48 + nspanel_eu_code/settings.txt | 418 +++ nspanel_eu_code/weather01.txt | 516 +++ nspanel_eu_code/weather02.txt | 516 +++ nspanel_eu_code/weather03.txt | 516 +++ nspanel_eu_code/weather04.txt | 516 +++ nspanel_eu_code/weather05.txt | 516 +++ nspanel_us.HMI | Bin 21307134 -> 21307134 bytes nspanel_us.tft | Bin 8051752 -> 8006416 bytes nspanel_us_code/Program.s.txt | 10 + nspanel_us_code/boot.txt | 302 ++ nspanel_us_code/buttonpage01.txt | 1254 +++++++ nspanel_us_code/buttonpage02.txt | 1254 +++++++ nspanel_us_code/buttonpage03.txt | 1254 +++++++ nspanel_us_code/buttonpage04.txt | 1254 +++++++ nspanel_us_code/climate.txt | 912 +++++ nspanel_us_code/coversettings.txt | 457 +++ nspanel_us_code/entitypage01.txt | 797 +++++ nspanel_us_code/entitypage02.txt | 797 +++++ nspanel_us_code/entitypage03.txt | 797 +++++ nspanel_us_code/entitypage04.txt | 797 +++++ nspanel_us_code/home.txt | 1324 ++++++++ nspanel_us_code/lightsettings.txt | 983 ++++++ nspanel_us_code/notification.txt | 297 ++ nspanel_us_code/nspanel_us_Stats.txt | 98 + nspanel_us_code/qrcode.txt | 168 + nspanel_us_code/screensaver.txt | 45 + nspanel_us_code/settings.txt | 430 +++ nspanel_us_code/weather01.txt | 516 +++ nspanel_us_code/weather02.txt | 516 +++ nspanel_us_code/weather03.txt | 516 +++ nspanel_us_code/weather04.txt | 516 +++ nspanel_us_code/weather05.txt | 516 +++ 54 files changed, 33818 insertions(+), 2512 deletions(-) create mode 100644 nspanel_eu_code/Program.s.txt create mode 100644 nspanel_eu_code/boot.txt create mode 100644 nspanel_eu_code/buttonpage01.txt create mode 100644 nspanel_eu_code/buttonpage02.txt create mode 100644 nspanel_eu_code/buttonpage03.txt create mode 100644 nspanel_eu_code/buttonpage04.txt create mode 100644 nspanel_eu_code/climate.txt create mode 100644 nspanel_eu_code/coversettings.txt create mode 100644 nspanel_eu_code/entitypage01.txt create mode 100644 nspanel_eu_code/entitypage02.txt create mode 100644 nspanel_eu_code/entitypage03.txt create mode 100644 nspanel_eu_code/entitypage04.txt create mode 100644 nspanel_eu_code/home.txt create mode 100644 nspanel_eu_code/lightsettings.txt create mode 100644 nspanel_eu_code/notification.txt create mode 100644 nspanel_eu_code/nspanel_eu_Stats.txt create mode 100644 nspanel_eu_code/qrcode.txt create mode 100644 nspanel_eu_code/screensaver.txt create mode 100644 nspanel_eu_code/settings.txt create mode 100644 nspanel_eu_code/weather01.txt create mode 100644 nspanel_eu_code/weather02.txt create mode 100644 nspanel_eu_code/weather03.txt create mode 100644 nspanel_eu_code/weather04.txt create mode 100644 nspanel_eu_code/weather05.txt create mode 100644 nspanel_us_code/Program.s.txt create mode 100644 nspanel_us_code/boot.txt create mode 100644 nspanel_us_code/buttonpage01.txt create mode 100644 nspanel_us_code/buttonpage02.txt create mode 100644 nspanel_us_code/buttonpage03.txt create mode 100644 nspanel_us_code/buttonpage04.txt create mode 100644 nspanel_us_code/climate.txt create mode 100644 nspanel_us_code/coversettings.txt create mode 100644 nspanel_us_code/entitypage01.txt create mode 100644 nspanel_us_code/entitypage02.txt create mode 100644 nspanel_us_code/entitypage03.txt create mode 100644 nspanel_us_code/entitypage04.txt create mode 100644 nspanel_us_code/home.txt create mode 100644 nspanel_us_code/lightsettings.txt create mode 100644 nspanel_us_code/notification.txt create mode 100644 nspanel_us_code/nspanel_us_Stats.txt create mode 100644 nspanel_us_code/qrcode.txt create mode 100644 nspanel_us_code/screensaver.txt create mode 100644 nspanel_us_code/settings.txt create mode 100644 nspanel_us_code/weather01.txt create mode 100644 nspanel_us_code/weather02.txt create mode 100644 nspanel_us_code/weather03.txt create mode 100644 nspanel_us_code/weather04.txt create mode 100644 nspanel_us_code/weather05.txt diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index 05fd9da..8e238e6 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -2331,16 +2331,10 @@ trigger_variables: {% if nspanel_entities | count > 0 %}{{ (nspanel_entities | selectattr(None, 'search', '_nextion_inited') | list | first).split('.')[1].split('_nextion_inited')[0] }} {% elif nspanel_name_temp is string %}{{ nspanel_name_temp | replace('-','_') | replace(' ','_') | replace('___','_') | replace('__','_') }} {% endif %} - last_click: "sensor.{{ nspanel_name }}_last_click" - last_click_lightsettings: "sensor.{{ nspanel_name }}_last_click_lightsettings" - last_click_coversettings: "sensor.{{ nspanel_name }}_last_click_coversettings" - last_click_climatesettings: "sensor.{{ nspanel_name }}_last_click_climatesettings" left_button: "binary_sensor.{{ nspanel_name }}_left_button" right_button: "binary_sensor.{{ nspanel_name }}_right_button" - #weather_forcast_button: "binary_sensor.{{ nspanel_name }}_weather_forcast" nextion_inited: "switch.{{ nspanel_name }}_nextion_inited" - #current_page: "sensor.{{ nspanel_name }}_current_page" - current_page: "sensor.{{ nspanel_name }}_currentpage" + nspanelevent: "sensor.{{ nspanel_name }}_nspanel_event" hotwatercharge: !input "hotwatercharge" display_target_temperature: "sensor.{{ nspanel_name }}_display_target_temperature" relay01_entity: "switch.{{ nspanel_name }}_relay_1" @@ -2367,6 +2361,9 @@ variables: notification_sound: "switch.{{ nspanel_name }}_notification_sound" confirmation_message: "switch.{{ nspanel_name }}_confirmation_message" + nspanel_event: '{{ states(nspanelevent) if nspanelevent is string and states(nspanelevent) not in ["unavailable", "unknown", None] else { "page": "unknown", "component": "unknown", "value": "unknown" } }}' + + ##### Nextion dict #### nextion: colors: @@ -2445,7 +2442,6 @@ variables: - "entitypage02" - "entitypage03" - "entitypage04" - current: "{{ states(current_page) | default('unavailable') if current_page is string else 'unavailable' }}" pics: hvac: button: @@ -3194,13 +3190,13 @@ variables: name: !input "left_button_name" color_rgb: !input "left_button_color" hold_select: !input "left_button_hold_select" - #sequence: !input left_button_hold_custom_action + #custom_action: !input "left_button_hold_custom_action" right: entity: !input "right_button_entity" name: !input "right_button_name" color_rgb: !input "right_button_color" hold_select: !input "right_button_hold_select" - #sequence: !input right_button_hold_custom_action + #custom_action: !input "right_button_hold_custom_action" qrcode_enabled: !input "qrcode_enabled" ###### SYNC SETTINGS ##### @@ -3232,469 +3228,402 @@ variables: ############################################################# trigger: - - ##### Trigger - General ################################################################################################################# - - ###### DELME - Trigger "nspanel_boot_init" ###### - - platform: state - entity_id: input_boolean.trigger_nspanel_boot - to: 'on' - id: nspanel_boot_init - - ##### Reboot - Trigger "nspanel_boot_init" ##### - - platform: template - value_template: "{{ is_state(nextion_inited, 'on') | default(false) if nextion_inited is string else false }}" - for: - seconds: 1 - id: nspanel_boot_init - - ##### settings_entity - Trigger "settings_entity" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ settings_entity }}" - id: settings_entity - - ##### Automation reload - - platform: event - event_type: automation_reloaded - id: automation_reloaded - - ##### TFT Upload - Trigger "tft_upload" ##### - - platform: event - event_type: folder_watcher - event_data: - event_type: modified - path: !input "tft_path" - id: tft_upload - - ##### Time - Trigger "time_state" ##### - - platform: time_pattern - seconds: 0 - id: time_state - - #### Weather state changed ####### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "weather_entity" - id: weather_state_change - - ##### HOME Value 01 - Trigger "home_value01_state" ##### - - platform: state - entity_id: !input "home_value01" - not_to: - - unknown - - unavailable - id: home_value01_state - - ##### HOME Value 01 - Trigger "home_value02_state" ##### - - platform: state - entity_id: !input "home_value02" - not_to: - - unknown - - unavailable - id: home_value02_state - - ##### HOME Value 01 - Trigger "home_value03_state" ##### - - platform: state - entity_id: !input "home_value03" - not_to: - - unknown - - unavailable - id: home_value03_state - - ##### Climate - Trigger "climate_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "climate" - id: climate_state - - ##### Hot Water - Trigger "hotwatertemp_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "hotwatertemp" - id: hotwatertemp_state - - ##### Outdoor Temp - Trigger "outdoortemp_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "outdoortemp" - id: outdoortemp_state - - ##### indoor Temp Sensor - Trigger "indoortemp_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "indoortemp" - id: indoortemp_state - - ##### NSPAnel Temp Sensor - Trigger "nspaneltemp_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ nspaneltemp }}" - id: nspaneltemp_state - - ##### Hot Water Charge - Trigger "hotwatercharge_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "hotwatercharge" - id: hotwatercharge_state - - ##### Chip 01 - Trigger "chip01_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "chip01" - id: chip01_state - - ##### Chip 02 - Trigger "chip02_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "chip02" - id: chip02_state - - ##### Chip 03 - Trigger "chip03_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "chip03" - id: chip03_state - - ##### Chip 04 - Trigger "chip04_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "chip04" - id: chip04_state - - ##### Chip 05 - Trigger "chip05_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "chip05" - id: chip05_state - - ##### Chip 06 - Trigger "chip06_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "chip06" - id: chip06_state - - ##### Chip 07 - Trigger "chip07_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "chip07" - id: chip07_state - - ##### Relay01 - Trigger "relay01_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ relay01_entity }}" - id: relay01_state - - ##### Relay02 - Trigger "relay02_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ relay02_entity }}" - id: relay02_state - - ##### Left Button - Trigger "left_button_press" ##### - - platform: template - value_template: "{{ is_state(left_button, 'on') | default(false) if left_button is string else false }}" - id: left_button_press - - ##### Right Button - Trigger "right_button_press" ##### - - platform: template - value_template: "{{ is_state(right_button, 'on') | default(false) if right_button is string else false }}" - id: right_button_press - - ##### Left Button - State "left_button_state" ##### - - platform: state - entity_id: !input "left_button_entity" - to: - - 'on' - - 'off' - id: left_button_state - - ##### Right Button - State "right_button_state" ##### - - platform: state - entity_id: !input "right_button_entity" - to: - - 'on' - - 'off' - id: right_button_state - - ##### Notification Text - Trigger "notification_text_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ notification_text }}" - id: notification_text_state - - ##### Notification Text - Trigger "notification_text_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ notification_unread }}" - id: notification_unread_state - - #### Show notification - Trigger #### - - platform: template - value_template: "{{ is_state(last_click, 'homebutton04release') | default(false) if last_click is string else false }}" - id: open_notification_page - - #### Notification clear - Trigger #### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'notificationclearrelease') if last_click is string else false }}" - id: btn_notificationclearrelease - - #### Notification accept - Trigger #### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'notificationacceptrelease') if last_click is string else false }}" - id: btn_notificationacceptrelease - - #### Show QR code - Trigger #### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'homebutton05release') if last_click is string else false }}" - id: open_qrcode_page - - #### Show ENTITIES - Trigger #### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'homebutton06release') if last_click is string else false }}" - id: open_entity_page - - #### Show Climate - Trigger #### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'weatherpagerelease') if last_click is string else false }}" - id: open_weather_page - - #### Climate - Trigger #### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'climaterelease') if last_click is string else false }}" - id: open_climate_page - - ##### Trigger - Button General ################################################################################################################# - - ##### Page Button - Trigger "short_press" - SHORT Press via "last_click" ##### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'releasebutton') if last_click is string else false }}" - id: short_press - - ##### Page Button - Trigger "long_press" - LONG Press via "last_click" - Button LONG Press for jump to Lightsetting or Coversetting Page ##### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'press') if last_click is string else false }}" - for: - seconds: 1 - id: long_press - - ##### Page Lightsettings - Trigger "light_settings" - Changes Lightsettings Page via "last_click_lightsettings" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ last_click_lightsettings }}" - id: light_settings - - ##### Page Coversettings - Trigger "cover_settings" - Changes Coversettings Page via "last_click_coversettings" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ last_click_coversettings }}" - id: cover_settings - - ##### Page Climatesettings - Trigger "climate_settings" - Changes Climatesettings Page via "last_click_climatesettings" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ last_click_climatesettings }}" - id: climate_settings - - ##### Current page changed ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ current_page }}" - id: current_page_changed - - ##### Page Button - Trigger "button_page" Entity sync ##### - - platform: template - value_template: "{{ (states(last_click) | default('unavailable') is match 'button') if last_click is string else false }}" - id: button_page - - - - ##### Trigger - Button State change ################################################################################################################# - - ##### Button01 Sync - Trigger "current_state_entity01" ##### - - platform: state - entity_id: !input "entity01" - id: current_state_entity01 - - ##### Button02 Sync - Trigger "current_state_entity02" ##### - - platform: state - entity_id: !input "entity02" - id: current_state_entity02 - - ##### Button03 Sync - Trigger "current_state_entity03" ##### - - platform: state - entity_id: !input "entity03" - id: current_state_entity03 - - ##### Button04 Sync - Trigger "current_state_entity04" ##### - - platform: state - entity_id: !input "entity04" - id: current_state_entity04 - - ##### Button05 Sync - Trigger "current_state_entity05" ##### - - platform: state - entity_id: !input "entity05" - id: current_state_entity05 - - ##### Button06 Sync - Trigger "current_state_entity06" ##### - - platform: state - entity_id: !input "entity06" - id: current_state_entity06 - - ##### Button07 Sync - Trigger "current_state_entity07" ##### - - platform: state - entity_id: !input "entity07" - id: current_state_entity07 - - ##### Button08 Sync - Trigger "current_state_entity08" ##### - - platform: state - entity_id: !input "entity08" - id: current_state_entity08 - - ##### Button09 Sync - Trigger "current_state_entity09" ##### - - platform: state - entity_id: !input "entity09" - id: current_state_entity09 - - ##### Button10 Sync - Trigger "current_state_entity10" ##### - - platform: state - entity_id: !input "entity10" - id: current_state_entity10 - - ##### Button11 Sync - Trigger "current_state_entity11" ##### - - platform: state - entity_id: !input "entity11" - id: current_state_entity11 - - ##### Button12 Sync - Trigger "current_state_entity12" ##### - - platform: state - entity_id: !input "entity12" - id: current_state_entity12 - - ##### Button13 Sync - Trigger "current_state_entity13" ##### - - platform: state - entity_id: !input "entity13" - id: current_state_entity13 - - ##### Button14 Sync - Trigger "current_state_entity14" ##### - - platform: state - entity_id: !input "entity14" - id: current_state_entity14 - - ##### Button15 Sync - Trigger "current_state_entity15" ##### - - platform: state - entity_id: !input "entity15" - id: current_state_entity15 - - ##### Button16 Sync - Trigger "current_state_entity16" ##### - - platform: state - entity_id: !input "entity16" - id: current_state_entity16 - - ##### Button17 Sync - Trigger "current_state_entity17" ##### - - platform: state - entity_id: !input "entity17" - id: current_state_entity17 - - ##### Button18 Sync - Trigger "current_state_entity18" ##### - - platform: state - entity_id: !input "entity18" - id: current_state_entity18 - - ##### Button19 Sync - Trigger "current_state_entity19" ##### - - platform: state - entity_id: !input "entity19" - id: current_state_entity19 - - ##### Button20 Sync - Trigger "current_state_entity20" ##### - - platform: state - entity_id: !input "entity20" - id: current_state_entity20 - - ##### Button21 Sync - Trigger "current_state_entity21" ##### - - platform: state - entity_id: !input "entity21" - id: current_state_entity21 - - ##### Button22 Sync - Trigger "current_state_entity22" ##### - - platform: state - entity_id: !input "entity22" - id: current_state_entity22 - - ##### Button23 Sync - Trigger "current_state_entity23" ##### - - platform: state - entity_id: !input "entity23" - id: current_state_entity23 - - ##### Button24 Sync - Trigger "current_state_entity24" ##### - - platform: state - entity_id: !input "entity24" - id: current_state_entity24 - - ##### Button25 Sync - Trigger "current_state_entity25" ##### - - platform: state - entity_id: !input "entity25" - id: current_state_entity25 - - ##### Button26 Sync - Trigger "current_state_entity26" ##### - - platform: state - entity_id: !input "entity26" - id: current_state_entity26 - - ##### Button27 Sync - Trigger "current_state_entity27" ##### - - platform: state - entity_id: !input "entity27" - id: current_state_entity27 - - ##### Button28 Sync - Trigger "current_state_entity28" ##### - - platform: state - entity_id: !input "entity28" - id: current_state_entity28 - - ##### Button29 Sync - Trigger "current_state_entity29" ##### - - platform: state - entity_id: !input "entity29" - id: current_state_entity29 - - ##### Button30 Sync - Trigger "current_state_entity30" ##### - - platform: state - entity_id: !input "entity30" - id: current_state_entity30 - - ##### Button31 Sync - Trigger "current_state_entity31" ##### - - platform: state - entity_id: !input "entity31" - id: current_state_entity31 - - ##### Button32 Sync - Trigger "current_state_entity32" ##### - - platform: state - entity_id: !input "entity32" - id: current_state_entity32 - + + ##### Trigger - General ################################################################################################################# + ##### settings_entity - Trigger "settings_entity" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ settings_entity }}" + id: settings_entity + + ##### Reboot - Trigger "nspanel_boot_init" ##### + - platform: template + value_template: "{{ is_state(nextion_inited, 'on') | default(false) if nextion_inited is string else false }}" + for: + seconds: 1 + id: nspanel_boot_init + + ##### NSPanel event changed ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ nspanelevent }}" + id: nspanelevent_changed + + ##### Automation reload + - platform: event + event_type: automation_reloaded + id: automation_reloaded + + ##### Trigger - Buttons - State change ################################################################################################################# + ##### Button01 Sync - Trigger "current_state_entity01" ##### + - platform: state + entity_id: !input "entity01" + id: current_state_entity01 + + ##### Button02 Sync - Trigger "current_state_entity02" ##### + - platform: state + entity_id: !input "entity02" + id: current_state_entity02 + + ##### Button03 Sync - Trigger "current_state_entity03" ##### + - platform: state + entity_id: !input "entity03" + id: current_state_entity03 + + ##### Button04 Sync - Trigger "current_state_entity04" ##### + - platform: state + entity_id: !input "entity04" + id: current_state_entity04 + + ##### Button05 Sync - Trigger "current_state_entity05" ##### + - platform: state + entity_id: !input "entity05" + id: current_state_entity05 + + ##### Button06 Sync - Trigger "current_state_entity06" ##### + - platform: state + entity_id: !input "entity06" + id: current_state_entity06 + + ##### Button07 Sync - Trigger "current_state_entity07" ##### + - platform: state + entity_id: !input "entity07" + id: current_state_entity07 + + ##### Button08 Sync - Trigger "current_state_entity08" ##### + - platform: state + entity_id: !input "entity08" + id: current_state_entity08 + + ##### Button09 Sync - Trigger "current_state_entity09" ##### + - platform: state + entity_id: !input "entity09" + id: current_state_entity09 + + ##### Button10 Sync - Trigger "current_state_entity10" ##### + - platform: state + entity_id: !input "entity10" + id: current_state_entity10 + + ##### Button11 Sync - Trigger "current_state_entity11" ##### + - platform: state + entity_id: !input "entity11" + id: current_state_entity11 + + ##### Button12 Sync - Trigger "current_state_entity12" ##### + - platform: state + entity_id: !input "entity12" + id: current_state_entity12 + + ##### Button13 Sync - Trigger "current_state_entity13" ##### + - platform: state + entity_id: !input "entity13" + id: current_state_entity13 + + ##### Button14 Sync - Trigger "current_state_entity14" ##### + - platform: state + entity_id: !input "entity14" + id: current_state_entity14 + + ##### Button15 Sync - Trigger "current_state_entity15" ##### + - platform: state + entity_id: !input "entity15" + id: current_state_entity15 + + ##### Button16 Sync - Trigger "current_state_entity16" ##### + - platform: state + entity_id: !input "entity16" + id: current_state_entity16 + + ##### Button17 Sync - Trigger "current_state_entity17" ##### + - platform: state + entity_id: !input "entity17" + id: current_state_entity17 + + ##### Button18 Sync - Trigger "current_state_entity18" ##### + - platform: state + entity_id: !input "entity18" + id: current_state_entity18 + + ##### Button19 Sync - Trigger "current_state_entity19" ##### + - platform: state + entity_id: !input "entity19" + id: current_state_entity19 + + ##### Button20 Sync - Trigger "current_state_entity20" ##### + - platform: state + entity_id: !input "entity20" + id: current_state_entity20 + + ##### Button21 Sync - Trigger "current_state_entity21" ##### + - platform: state + entity_id: !input "entity21" + id: current_state_entity21 + + ##### Button22 Sync - Trigger "current_state_entity22" ##### + - platform: state + entity_id: !input "entity22" + id: current_state_entity22 + + ##### Button23 Sync - Trigger "current_state_entity23" ##### + - platform: state + entity_id: !input "entity23" + id: current_state_entity23 + + ##### Button24 Sync - Trigger "current_state_entity24" ##### + - platform: state + entity_id: !input "entity24" + id: current_state_entity24 + + ##### Button25 Sync - Trigger "current_state_entity25" ##### + - platform: state + entity_id: !input "entity25" + id: current_state_entity25 + + ##### Button26 Sync - Trigger "current_state_entity26" ##### + - platform: state + entity_id: !input "entity26" + id: current_state_entity26 + + ##### Button27 Sync - Trigger "current_state_entity27" ##### + - platform: state + entity_id: !input "entity27" + id: current_state_entity27 + + ##### Button28 Sync - Trigger "current_state_entity28" ##### + - platform: state + entity_id: !input "entity28" + id: current_state_entity28 + + ##### Button29 Sync - Trigger "current_state_entity29" ##### + - platform: state + entity_id: !input "entity29" + id: current_state_entity29 + + ##### Button30 Sync - Trigger "current_state_entity30" ##### + - platform: state + entity_id: !input "entity30" + id: current_state_entity30 + + ##### Button31 Sync - Trigger "current_state_entity31" ##### + - platform: state + entity_id: !input "entity31" + id: current_state_entity31 + + ##### Button32 Sync - Trigger "current_state_entity32" ##### + - platform: state + entity_id: !input "entity32" + id: current_state_entity32 + + ##### Trigger - Home - Chips - State change ################################################################################################################# + ##### Chip 01 - Trigger "chip01_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "chip01" + id: chip01_state + + ##### Chip 02 - Trigger "chip02_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "chip02" + id: chip02_state + + ##### Chip 03 - Trigger "chip03_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "chip03" + id: chip03_state + + ##### Chip 04 - Trigger "chip04_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "chip04" + id: chip04_state + + ##### Chip 05 - Trigger "chip05_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "chip05" + id: chip05_state + + ##### Chip 06 - Trigger "chip06_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "chip06" + id: chip06_state + + ##### Chip 07 - Trigger "chip07_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "chip07" + id: chip07_state + + ##### Trigger - Home - Values - State change ################################################################################################################# + + ##### HOME Value 01 - Trigger "home_value01_state" ##### + - platform: state + entity_id: !input "home_value01" + not_to: + - unknown + - unavailable + id: home_value01_state + + ##### HOME Value 02 - Trigger "home_value02_state" ##### + - platform: state + entity_id: !input "home_value02" + not_to: + - unknown + - unavailable + id: home_value02_state + + ##### HOME Value 03 - Trigger "home_value03_state" ##### + - platform: state + entity_id: !input "home_value03" + not_to: + - unknown + - unavailable + id: home_value03_state + + ##### Trigger - Relays - State change ################################################################################################################# + + ##### Relay01 - Trigger "relay01_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ relay01_entity }}" + id: relay01_state + + ##### Relay02 - Trigger "relay02_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ relay02_entity }}" + id: relay02_state + + ##### Trigger - Climate - State change ################################################################################################################# + ##### Climate - Trigger "climate_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "climate" + id: climate_state + + ##### Trigger - Notifications ################################################################################################################# + + ##### Notification Text - Trigger "notification_text_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ notification_text }}" + id: notification_text_state + + ##### Notification Text - Trigger "notification_text_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ notification_unread }}" + id: notification_unread_state + + ##### Trigger - Hardware buttons ################################################################################################################# + + ##### Left Button - Trigger "left_button_press" ##### + - platform: template + value_template: "{{ is_state(left_button, 'on') | default(false) if left_button is string else false }}" + id: left_button_press + + ##### Right Button - Trigger "right_button_press" ##### + - platform: template + value_template: "{{ is_state(right_button, 'on') | default(false) if right_button is string else false }}" + id: right_button_press + + ##### Left Button - State "left_button_state" ##### + - platform: state + entity_id: !input "left_button_entity" + to: + - 'on' + - 'off' + id: left_button_state + + ##### Right Button - State "right_button_state" ##### + - platform: state + entity_id: !input "right_button_entity" + to: + - 'on' + - 'off' + id: right_button_state + + ##### Trigger - Time ################################################################################################################# + + ##### Time - Trigger "time_state" ##### + - platform: time_pattern + seconds: 0 + id: time_state + + ##### Trigger - Temperatures ################################################################################################################# + + ##### Outdoor Temp - Trigger "outdoortemp_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "outdoortemp" + id: outdoortemp_state + + ##### indoor Temp Sensor - Trigger "indoortemp_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "indoortemp" + id: indoortemp_state + + ##### NSPAnel Temp Sensor - Trigger "nspaneltemp_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ nspaneltemp }}" + id: nspaneltemp_state + + ##### Trigger - Weather ################################################################################################################# + #### Weather state changed ####### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "weather_entity" + id: weather_state_change + + ##### Trigger - Hot water ################################################################################################################# + + ##### Hot Water Charge - Trigger "hotwatercharge_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "hotwatercharge" + id: hotwatercharge_state + + ##### Hot Water - Trigger "hotwatertemp_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "hotwatertemp" + id: hotwatertemp_state + + ##### Trigger - TFT ################################################################################################################# + + ##### TFT Upload - Trigger "tft_upload" ##### + - platform: event + event_type: folder_watcher + event_data: + event_type: modified + path: !input "tft_path" + id: tft_upload ############################################################# ##### CLOSE - Trigger ##### @@ -3706,7 +3635,6 @@ condition: "{{ is_state(nextion_inited, 'on') | default(false) if nextion_inited ##### START - Action ##### ############################################################# action: - # main - alias: "choose alias (name)" - alias: Main choices choose: ##### JUMP TO - settings page lightsettings /coversettings / climate (SETTINGS ENTITY CHANGED) ##### @@ -3718,21 +3646,14 @@ action: sequence: - &variables-settings_entity variables: - settings_entity_value: "{{ states(settings_entity) | default('unavailable') if settings_entity is string else 'unavailable' }}" - settings_entity_split: "{{ settings_entity_value.split(',') if settings_entity_value is string and settings_entity_value not in ['unavailable', 'unknown', None] else [] }}" - settings_entity_count: "{{ settings_entity_split | count if settings_entity_split else 0 }}" - entity_long: "{{ settings_entity_split[0] if settings_entity_count >= 1 else 'unknown' }}" - entity_back: "{{ settings_entity_split[1] if settings_entity_count >= 2 else 'unknown' }}" - entity_long_name: "{{ settings_entity_split[2] if settings_entity_count >= 3 else 'unknown' }}" - entity_long_icon: "{{ settings_entity_split[3] if settings_entity_count >= 4 else 'unknown' }}" - entity_long_icon_color: "{{ settings_entity_split[4] if settings_entity_count >= 5 else 'unknown' }}" - - variables: - entity_long_domain: "{{ entity_long.split('.')[0] if entity_long.split('.') | count > 0 else 'unknown' }}" - - if: "{{ entity_long_domain in ['light', 'cover', 'climate'] }}" + settings_entity_state: "{{ states(settings_entity) if settings_entity is string else 'unknown' }}" + settings_entity_dict: '{{ settings_entity_state if settings_entity_state is mapping else { "page": "home", "entity": "unknown" } }}' + settings_entity_domain: "{{ settings_entity_dict.entity.split('.')[0] if settings_entity_dict.entity is defined and settings_entity_dict.entity is string and settings_entity_dict.entity.split('.') | count > 0 else 'unknown' }}" + - if: "{{ settings_entity_domain in ['light', 'cover', 'climate'] }}" then: - service: "{{ nextion.commands.printf }}" data: - cmd: "page {{ nextion.pages[entity_long_domain] }}" + cmd: "page {{ nextion.pages[settings_entity_domain] }}" continue_on_error: true ##### BOOT NSPANEL - boot init ##### @@ -3740,7 +3661,7 @@ action: conditions: - condition: trigger id: nspanel_boot_init - - "{{ nextion.pages.current != nextion.pages.home or (is_state(last_click, ['unavailable', 'unknown', None]) | default(False) if last_click is string else False) }}" + - "{{ nspanel_event.page != nextion.pages.home or (is_state(settings_entity, ['unavailable', 'unknown', None]) | default(False) if settings_entity is string else False) }}" sequence: ##### NSPanel boot init only ##### - delay: @@ -3785,1371 +3706,1807 @@ action: cmd: page home continue_on_error: true - ##### PAGE CHANGED - changes when page changed ##### - - alias: Page changed + ##### NSPanel event ##### + - alias: NSPanel Event conditions: - condition: trigger - id: current_page_changed + id: nspanelevent_changed sequence: - ##### climate-page left - apply climate temperature if climate_optimistic ##### ## TODO - remove from here - - if: "{{ trigger.event.data.old_state.state == nextion.pages.climate and climate_optimistic }}" - then: - - variables: - display_target_temperature_state: "{{ states(display_target_temperature) | default('unavailable') if display_target_temperature is string else 'unavailable' }}" - - if: "{{ is_number(display_target_temperature_state) }}" - then: - - *variables-settings_entity - - service: climate.set_temperature - data: - entity_id: "{{ entity_long }}" - #hvac_mode: 'heat' - temperature: "{{ display_target_temperature_state }}" - continue_on_error: true - - choose: - ## PAGE HOME ## - - alias: Home page - conditions: "{{ trigger.event.data.new_state.state == nextion.pages.home }}" - sequence: &refresh_page_home - - service: "{{ nextion.commands.set_settings_entity }}" - data: - entity: 'unknown' - continue_on_error: true - ##### NSPanel Date ##### - ### DATE Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.date - message: "{{ page_home.general.date.label.color_rgb if is_number(page_home.general.date.label.color_rgb) else ((page_home.general.date.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.date.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.date.label.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### DATE Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.date - message: "{{ (dict.values(mui[language].weekdays) | list)[now().weekday()] ~ ', ' ~ as_timestamp(now()) | timestamp_custom(date_format) }}" - continue_on_error: true - ##### NSPanel Time ##### - ### TIME Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.time - message: "{{ page_home.general.time.label.color_rgb if is_number(page_home.general.time.label.color_rgb) else ((page_home.general.time.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.time.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.time.label.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### TIME Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.time - message: "{{ time }}" - continue_on_error: true - - if: "{{ meridiem }}" - then: - ### TIME Meridiem Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.meridiem - message: "{{ page_home.general.time.label.color_rgb if is_number(page_home.general.time.label.color_rgb) else ((page_home.general.time.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.time.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.time.label.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### TIME Meridiem Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.meridiem - message: "{{ meridiem }}" - continue_on_error: true - - ##### NSPanel Outdoor Temp ##### - - variables: - outdoor_temp_state: "{{ states(outdoortemp) | default('unavailable') if outdoortemp is string else 'unavailable' }}" - outdoor_temp: "{{ outdoor_temp_state if is_number(outdoor_temp_state) else state_attr(weather_entity, 'temperature') | default('unavailable') if weather_entity is string else 'unavailable' }}" - - if: "{{ is_number(outdoor_temp) }}" - then: - ### LABEL Outdoor Temp Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.outdoor_temp - message: "{{ page_home.general.outdoor_temp.label.color_rgb if is_number(page_home.general.outdoor_temp.label.color_rgb) else ((page_home.general.outdoor_temp.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.outdoor_temp.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.outdoor_temp.label.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### LABEL Outdoor Temp Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.outdoor_temp - message: "{{ outdoor_temp | round(1) ~ temperature_units }}" - continue_on_error: true - - ##### NSPanel Indoor Temp ##### - - variables: - indoor_temp_state: "{{ states(indoortemp) | default('unavailable') if indoortemp is string else 'unavailable' }}" - - if: "{{ is_number(indoor_temp_state) }}" - then: - ### ICON Indoor Temp Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.indoortempicon - message: "{{ page_home.general.indoor_temp.icon.color_rgb if is_number(page_home.general.indoor_temp.icon.color_rgb) else ((page_home.general.indoor_temp.icon.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.indoor_temp.icon.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.indoor_temp.icon.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### ICON Indoor Temp Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.indoortempicon - message: "{{ nextion.icons.all[page_home.general.indoor_temp.icon.icon.split(':')[1]] | default(page_home.general.indoor_temp.icon.icon if page_home.general.indoor_temp.icon.icon is string else '\U0000E2D5') }}" - continue_on_error: true - ### LABEL Indoor Temp Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.current_temp - message: "{{ page_home.general.indoor_temp.label.color_rgb if is_number(page_home.general.indoor_temp.label.color_rgb) else ((page_home.general.indoor_temp.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.indoor_temp.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.indoor_temp.label.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### LABEL Indoor Temp Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.current_temp - message: "{{ (indoor_temp_state | round(1) ~ temperature_units) if is_number(indoor_temp_state) else (mui[language].unavailable if indoor_temp_state in ['unavailable', 'unknown', None] else indoor_temp_state) }}" - continue_on_error: true - - ##### Weather Icon Home Page ##### - - *delay-default - - service: "{{ nextion.commands.printf }}" - data: - cmd: home.weather.pic={{ nextion.pics.weather[states(weather_entity) | default('unavailable') if weather_entity is string else 'unavailable'] | default(None) }} - continue_on_error: true - - ##### NSPanel Buttons ##### - - variables: - left_button_state: "{{ states(page_home.hardware.buttons.left.entity) | default('unavailable') if page_home.hardware.buttons.left.entity is string else 'unavailable' }}" - right_button_state: "{{ states(page_home.hardware.buttons.right.entity) | default('unavailable') if page_home.hardware.buttons.right.entity is string else 'unavailable' }}" - - ##### NSPanel Left Button Name ##### - - if: "{{ page_home.hardware.buttons.left.name | length > 0 }}" - then: - ### LABEL Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.left_bt_text - message: "{{ page_home.hardware.buttons.left.color_rgb if is_number(page_home.hardware.buttons.left.color_rgb) else ((page_home.hardware.buttons.left.color_rgb[0] //(2**3)) *(2**11))+((page_home.hardware.buttons.left.color_rgb[1] //(2**2)) *(2**5))+(page_home.hardware.buttons.left.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### LABEL Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.left_bt_text - message: "{{ page_home.hardware.buttons.left.name }}" - continue_on_error: true - - ##### SET Left Hardware Button PIC on Home Page #### - - if: "{{ left_button_state not in ['unavailable', 'unknown', None] }}" + - alias: NSPanel Event component changed + choose: + - alias: Page changed + conditions: '{{ nspanel_event.component == "currentpage" }}' + sequence: + - alias: old state + variables: + old_state: "{{ trigger.event.data.old_state.state }}" + ##### climate-page left - apply climate temperature if climate_optimistic ##### ## TODO - remove from here + - if: "{{ old_state.page == nextion.pages.climate and climate_optimistic }}" then: - variables: - # Hardware Button PIC - left_hardware_button_state: "{{ nextion.pics.hardware.button[left_button_state] | default(None) }}" - - *delay-default - - service: "{{ nextion.commands.printf }}" - data: - cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} - continue_on_error: true - - ##### NSPanel Right Button Name ##### - - if: "{{ page_home.hardware.buttons.right.name | length > 0 }}" - then: - ### LABEL Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.right_bt_text - message: "{{ page_home.hardware.buttons.right.color_rgb if is_number(page_home.hardware.buttons.right.color_rgb) else ((page_home.hardware.buttons.right.color_rgb[0] //(2**3)) *(2**11))+((page_home.hardware.buttons.right.color_rgb[1] //(2**2)) *(2**5))+(page_home.hardware.buttons.right.color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### LABEL Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.right_bt_text - message: "{{ page_home.hardware.buttons.right.name }}" - continue_on_error: true - - ##### SET Right Hardware Button PIC on Home Page ##### - - if: "{{ right_button_state not in ['unavailable', 'unknown', None] }}" - then: - - variables: - # Hardware Button PIC - right_hardware_button_state: "{{ nextion.pics.hardware.button[right_button_state] | default(None) }}" - - *delay-default - - service: "{{ nextion.commands.printf }}" - data: - cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} - continue_on_error: true - - ###### Status bar ###### - - &variables-home_page_status_bar - variables: - thermostat_icon: !input "thermostat_icon" #E50E - heat_icon: !input "heat_icon" #\U0000E50F - climate_state: "{{ states(climate) | default('unavailable') if climate is string else 'unavailable' }}" - climate_action: "{{ state_attr(climate, 'hvac_action') | default('unavailable') if climate is string else 'unavailable' }}" - home_page_status_bar: - - entity: "{{ relay01_entity }}" - icon: !input "relay01_icon" #E3A5 - icon_color_rgb: !input "relay01_icon_color" - component: home.icon_top_01 - - entity: "{{ relay02_entity }}" - icon: !input "relay02_icon" #E3A8 - icon_color_rgb: !input "relay02_icon_color" - component: home.icon_top_02 - - entity: "{{ climate }}" - icon: "{{ (nextion.icons.all[heat_icon.split(':')[1]] | default(heat_icon if heat_icon is string else '\U0000E2D5') if climate_action == 'heating' else nextion.icons.all[thermostat_icon.split(':')[1]] | default(thermostat_icon if thermostat_icon is string else '\U0000E2D5')) if climate_state == 'heat' else nextion.icons.blank }}" - icon_color_rgb: !input "thermostat_icon_color" - component: home.icon_top_03 - - entity: !input "chip01" - icon: !input "chip01_icon" - icon_color_rgb: !input "chip01_icon_color" - component: home.icon_top_04 - - entity: !input "chip02" - icon: !input "chip02_icon" - icon_color_rgb: !input "chip02_icon_color" - component: home.icon_top_05 - - entity: !input "chip03" - icon: !input "chip03_icon" - icon_color_rgb: !input "chip03_icon_color" - component: home.icon_top_06 - - entity: !input "chip04" - icon: !input "chip04_icon" - icon_color_rgb: !input "chip04_icon_color" - component: home.icon_top_07 - - entity: !input "chip05" - icon: !input "chip05_icon" - icon_color_rgb: !input "chip05_icon_color" - component: home.icon_top_08 - - entity: !input "chip06" - icon: !input "chip06_icon" - icon_color_rgb: !input "chip06_icon_color" - component: home.icon_top_09 - - entity: !input "chip07" - icon: !input "chip07_icon" - icon_color_rgb: !input "chip07_icon_color" - component: home.icon_top_10 - - repeat: - for_each: "{{ home_page_status_bar }}" - sequence: - - &display-home_page_status_bar - if: "{{ repeat.item.entity is defined and repeat.item.entity is string and repeat.item.entity | length > 0 }}" - then: - - variables: - repeat_item_state: "{{ states(repeat.item.entity) | default('unavailable') }}" - repeat_item_state_is_on: "{{ repeat_item_state in ['on', 'open'] }}" - repeat_item_icon: > - {% if repeat_item_state_is_on and repeat.item.icon is string and repeat.item.icon | length > 0 %}{{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon) }} - {% elif repeat_item_state_is_on and state_attr(repeat.item.entity, 'icon') | default('') not in ['unavailable', 'unknown', '', None] %}{{ nextion.icons.all[state_attr(repeat.item.entity, 'icon').split(':')[1]] | default(nextion.icons.blank) }} - {% else %}{{ nextion.icons.blank }} - {% endif %} - - if: "{{ repeat_item_state_is_on }}" - then: - ### ICON Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: "{{ repeat.item.component }}" - message: "{{ repeat.item.icon_color_rgb if is_number(repeat.item.icon_color_rgb) else ((repeat.item.icon_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.icon_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.icon_color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### ICON Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: "{{ repeat.item.component }}" - message: "{{ repeat_item_icon }}" - continue_on_error: true - # {{ is_state(repeat.item.entity, 'on') | default(False) if repeat.item.entity is string else 'unavailable' }} - - ##### HOME VALUE 01 - 03 - - *delay-default - - &variables-home_page_values - variables: - home_page_values: - - entity: !input "home_value01" - icon: !input "home_value01_icon" - icon_color_rgb: !input "home_value01_icon_color" - label_color_rgb: !input "home_value01_label_color" - component: home.value01 - - entity: !input "home_value02" - icon: !input "home_value02_icon" - icon_color_rgb: !input "home_value02_icon_color" - label_color_rgb: !input "home_value02_label_color" - component: home.value02 - - entity: !input "home_value03" - icon: !input "home_value03_icon" - icon_color_rgb: !input "home_value03_icon_color" - label_color_rgb: !input "home_value03_label_color" - component: home.value03 - - repeat: - for_each: "{{ home_page_values }}" - sequence: - - &display-home_page_value - if: "{{ repeat.item.entity is string and repeat.item.entity is match 'sensor.' and states(repeat.item.entity) not in ['unavailable', 'unknown', None] }}" - then: - - if: "{{ repeat.item.icon | length > 0 }}" - then: - ### ICON Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: "{{ repeat.item.component }}_icon" - message: "{{ repeat.item.icon_color_rgb if is_number(repeat.item.icon_color_rgb) else ((repeat.item.icon_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.icon_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.icon_color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### ICON Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: "{{ repeat.item.component }}_icon" - message: "{{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon if repeat.item.icon is string else '\U0000E2D5') }}" - continue_on_error: true - - variables: - repeat_item_state: "{{ states(repeat.item.entity) | default('unavailable') }}" - repeat_item_state_available: "{{ repeat_item_state not in ['unavailable', 'unknown', None] }}" - - if: "{{ repeat_item_state_available }}" - then: - ### LABEL Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: "{{ repeat.item.component }}_state" - message: "{{ repeat.item.label_color_rgb if is_number(repeat.item.label_color_rgb) else ((repeat.item.label_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.label_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.label_color_rgb[2] //(2**3)) }}" - continue_on_error: true - ### LABEL Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: "{{ repeat.item.component }}_state" - message: "{{ (repeat_item_state | round(1) ~ state_attr(repeat.item.entity, 'unit_of_measurement') | default('')) if is_number(repeat_item_state) else repeat_item_state }}" - continue_on_error: true - - ##### Set notify icon ##### - - variables: - notification_unread_state: "{{ states(notification_unread) | default('unavailable') if notification_unread is string else 'unavailable' }}" - - if: "{{ notification_unread_state in ['on', 'off'] }}" - then: - - variables: - notification_text_state: "{{ states(notification_text) | default(None) if notification_text is string else None }}" - set_button04_icon: "{{ nextion.icons.all[page_home.buttons[3].icon.split(':')[1]] | default(page_home.buttons[3].icon if page_home.buttons[3].icon is string else '\U0000E2D5') if notification_unread_state == 'on' and notification_text_state | length > 0 else nextion.icons.blank }}" - set_button04_icon_font: "{{ (page_home.buttons[3].color_rgb[notification_unread_state] if is_number(page_home.buttons[3].color_rgb[notification_unread_state]) else ((page_home.buttons[3].color_rgb[notification_unread_state][0] //(2**3)) *(2**11))+((page_home.buttons[3].color_rgb[notification_unread_state][1] //(2**2)) *(2**5))+(page_home.buttons[3].color_rgb[notification_unread_state][2] //(2**3))) if notification_unread_state in ['on', 'off'] and notification_text_state | length > 0 else nextion.colors.grey_light }}" - ##### SET ICON Font - Notify ##### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.button04_icon - message: "{{ set_button04_icon }}" - continue_on_error: true - - ##### SET ICON Font Color - Notify ##### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: home.button04_icon - message: "{{ set_button04_icon_font }}" - continue_on_error: true - - ###### QR Code - Icon ###### - - *delay-default - - if: "{{ qrcode_enabled == true }}" - then: # Display QR code icon - ### ICON Font Color ### - - service: "{{ nextion.commands.font_color }}" - data: - component: home.button05_icon - message: "{{ page_home.buttons[4].color_rgb.on if is_number(page_home.buttons[4].color_rgb.on) else ((page_home.buttons[4].color_rgb.on[0] //(2**3)) *(2**11))+((page_home.buttons[4].color_rgb.on[1] //(2**2)) *(2**5))+(page_home.buttons[4].color_rgb.on[2] //(2**3)) }}" - continue_on_error: true - ### ICON Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.button05_icon - message: "{{ nextion.icons.all[page_home.buttons[4].icon.split(':')[1]] | default(page_home.buttons[4].icon if page_home.buttons[4].icon is string else '\U0000E2D5') }}" - continue_on_error: true - else: # Display blank icon - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.button05_icon - message: "{{ nextion.icons.blank }}" - continue_on_error: true - - ###### ENTITIES - Icon ###### - - *delay-default - - if: "{{ entitypages_enabled }}" - then: # Display entities icon - ### ICON Font Color ### - - service: "{{ nextion.commands.font_color }}" - data: - component: home.button06_icon - message: "{{ page_home.buttons[5].color_rgb.on if is_number(page_home.buttons[5].color_rgb.on) else ((page_home.buttons[5].color_rgb.on[0] //(2**3)) *(2**11))+((page_home.buttons[5].color_rgb.on[1] //(2**2)) *(2**5))+(page_home.buttons[5].color_rgb.on[2] //(2**3)) }}" - continue_on_error: true - ### ICON Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.button06_icon - message: "{{ nextion.icons.all[page_home.buttons[5].icon.split(':')[1]] | default(page_home.buttons[5].icon if page_home.buttons[5].icon is string else '\U0000E2D5') }}" - continue_on_error: true - else: # Display blank icon - - service: "{{ nextion.commands.text_printf }}" - data: - component: home.button06_icon - message: "{{ nextion.icons.blank }}" - continue_on_error: true - - ###### SHOW All component when page loading done ##### - - *delay-default - - service: "{{ nextion.commands.show_all }}" - continue_on_error: true - - ## BUTTON PAGES 01 - 04 ## - - alias: Button pages - conditions: "{{ trigger.event.data.new_state.state in nextion.pages.buttonpages }}" - sequence: &refresh_page_buttonpage - - &variables-page_buttons - variables: - button_page_index: "{{ (nextion.pages.current[-2:] | int(-1)) - 1 }}" - first_button: "{{ button_page_index * 8 }}" - last_button: "{{ first_button + 8 }}" - ##### BUTTON Page Labels ##### - button_pages_labels: - - label: !input button_page01_label - - label: !input button_page02_label - - label: !input button_page03_label - - label: !input button_page04_label - ##### BUTTONS Page - Buttons 1 - 32 ##### - button_pages_buttons: - - entity: !input "entity01" - name: !input "entity01_name" - icon: !input "entity01_icon" - icon_color_rgb: !input "entity01_icon_color" - confirm: !input "entity01_confirm" - component: buttonpage01.button01 - - entity: !input "entity02" - name: !input "entity02_name" - icon: !input "entity02_icon" - icon_color_rgb: !input "entity02_icon_color" - confirm: !input "entity02_confirm" - component: buttonpage01.button02 - - entity: !input "entity03" - name: !input "entity03_name" - icon: !input "entity03_icon" - icon_color_rgb: !input "entity03_icon_color" - confirm: !input "entity03_confirm" - component: buttonpage01.button03 - - entity: !input "entity04" - name: !input "entity04_name" - icon: !input "entity04_icon" - icon_color_rgb: !input "entity04_icon_color" - confirm: !input "entity04_confirm" - component: buttonpage01.button04 - - entity: !input "entity05" - name: !input "entity05_name" - icon: !input "entity05_icon" - icon_color_rgb: !input "entity05_icon_color" - confirm: !input "entity05_confirm" - component: buttonpage01.button05 - - entity: !input "entity06" - name: !input "entity06_name" - icon: !input "entity06_icon" - icon_color_rgb: !input "entity06_icon_color" - confirm: !input "entity06_confirm" - component: buttonpage01.button06 - - entity: !input "entity07" - name: !input "entity07_name" - icon: !input "entity07_icon" - icon_color_rgb: !input "entity07_icon_color" - confirm: !input "entity07_confirm" - component: buttonpage01.button07 - - entity: !input "entity08" - name: !input "entity08_name" - icon: !input "entity08_icon" - icon_color_rgb: !input "entity08_icon_color" - confirm: !input "entity08_confirm" - component: buttonpage01.button08 - - entity: !input "entity09" - name: !input "entity09_name" - icon: !input "entity09_icon" - icon_color_rgb: !input "entity09_icon_color" - confirm: !input "entity09_confirm" - component: buttonpage02.button01 - - entity: !input "entity10" - name: !input "entity10_name" - icon: !input "entity10_icon" - icon_color_rgb: !input "entity10_icon_color" - confirm: !input "entity10_confirm" - component: buttonpage02.button02 - - entity: !input "entity11" - name: !input "entity11_name" - icon: !input "entity11_icon" - icon_color_rgb: !input "entity11_icon_color" - confirm: !input "entity11_confirm" - component: buttonpage02.button03 - - entity: !input "entity12" - name: !input "entity12_name" - icon: !input "entity12_icon" - icon_color_rgb: !input "entity12_icon_color" - confirm: !input "entity12_confirm" - component: buttonpage02.button04 - - entity: !input "entity13" - name: !input "entity13_name" - icon: !input "entity13_icon" - icon_color_rgb: !input "entity13_icon_color" - confirm: !input "entity13_confirm" - component: buttonpage02.button05 - - entity: !input "entity14" - name: !input "entity14_name" - icon: !input "entity14_icon" - icon_color_rgb: !input "entity14_icon_color" - confirm: !input "entity14_confirm" - component: buttonpage02.button06 - - entity: !input "entity15" - name: !input "entity15_name" - icon: !input "entity15_icon" - icon_color_rgb: !input "entity15_icon_color" - confirm: !input "entity15_confirm" - component: buttonpage02.button07 - - entity: !input "entity16" - name: !input "entity16_name" - icon: !input "entity16_icon" - icon_color_rgb: !input "entity16_icon_color" - confirm: !input "entity16_confirm" - component: buttonpage02.button08 - - entity: !input "entity17" - name: !input "entity17_name" - icon: !input "entity17_icon" - icon_color_rgb: !input "entity17_icon_color" - confirm: !input "entity17_confirm" - component: buttonpage03.button01 - - entity: !input "entity18" - name: !input "entity18_name" - icon: !input "entity18_icon" - icon_color_rgb: !input "entity18_icon_color" - confirm: !input "entity18_confirm" - component: buttonpage03.button02 - - entity: !input "entity19" - name: !input "entity19_name" - icon: !input "entity19_icon" - icon_color_rgb: !input "entity19_icon_color" - confirm: !input "entity19_confirm" - component: buttonpage03.button03 - - entity: !input "entity20" - name: !input "entity20_name" - icon: !input "entity20_icon" - icon_color_rgb: !input "entity20_icon_color" - confirm: !input "entity20_confirm" - component: buttonpage03.button04 - - entity: !input "entity21" - name: !input "entity21_name" - icon: !input "entity21_icon" - icon_color_rgb: !input "entity21_icon_color" - confirm: !input "entity21_confirm" - component: buttonpage03.button05 - - entity: !input "entity22" - name: !input "entity22_name" - icon: !input "entity22_icon" - icon_color_rgb: !input "entity22_icon_color" - confirm: !input "entity22_confirm" - component: buttonpage03.button06 - - entity: !input "entity23" - name: !input "entity23_name" - icon: !input "entity23_icon" - icon_color_rgb: !input "entity23_icon_color" - confirm: !input "entity23_confirm" - component: buttonpage03.button07 - - entity: !input "entity24" - name: !input "entity24_name" - icon: !input "entity24_icon" - icon_color_rgb: !input "entity24_icon_color" - confirm: !input "entity24_confirm" - component: buttonpage03.button08 - - entity: !input "entity25" - name: !input "entity25_name" - icon: !input "entity25_icon" - icon_color_rgb: !input "entity25_icon_color" - confirm: !input "entity25_confirm" - component: buttonpage04.button01 - - entity: !input "entity26" - name: !input "entity26_name" - icon: !input "entity26_icon" - icon_color_rgb: !input "entity26_icon_color" - confirm: !input "entity26_confirm" - component: buttonpage04.button02 - - entity: !input "entity27" - name: !input "entity27_name" - icon: !input "entity27_icon" - icon_color_rgb: !input "entity27_icon_color" - confirm: !input "entity27_confirm" - component: buttonpage04.button03 - - entity: !input "entity28" - name: !input "entity28_name" - icon: !input "entity28_icon" - icon_color_rgb: !input "entity28_icon_color" - confirm: !input "entity28_confirm" - component: buttonpage04.button04 - - entity: !input "entity29" - name: !input "entity29_name" - icon: !input "entity29_icon" - icon_color_rgb: !input "entity29_icon_color" - confirm: !input "entity29_confirm" - component: buttonpage04.button05 - - entity: !input "entity30" - name: !input "entity30_name" - icon: !input "entity30_icon" - icon_color_rgb: !input "entity30_icon_color" - confirm: !input "entity30_confirm" - component: buttonpage04.button06 - - entity: !input "entity31" - name: !input "entity31_name" - icon: !input "entity31_icon" - icon_color_rgb: !input "entity31_icon_color" - confirm: !input "entity31_confirm" - component: buttonpage04.button07 - - entity: !input "entity32" - name: !input "entity32_name" - icon: !input "entity32_icon" - icon_color_rgb: !input "entity32_icon_color" - confirm: !input "entity32_confirm" - component: buttonpage04.button08 - - if: "{{ button_page_index >= 0 and button_page_index <= 3 }}" - then: - - service: "{{ nextion.commands.set_settings_entity }}" - data: - entity: 'unknown' - continue_on_error: true - ##### Button Page Label ##### - - if: "{{ button_pages_labels[button_page_index].label | length > 0 }}" + display_target_temperature_state: "{{ states(display_target_temperature) | default('unavailable') if display_target_temperature is string else 'unavailable' }}" + - if: "{{ is_number(display_target_temperature_state) }}" then: + - *variables-settings_entity + - if: "{{ settings_entity_domain == 'climate' }}" + then: + - service: climate.set_temperature + data: + entity_id: "{{ settings_entity_dict.entity }}" + temperature: "{{ display_target_temperature_state }}" + continue_on_error: true + - choose: + ## PAGE HOME ## + - alias: Home page + conditions: "{{ nspanel_event.page == nextion.pages.home }}" + sequence: &refresh_page_home + - service: "{{ nextion.commands.set_settings_entity }}" + data: + entity: "{{ nspanel_event }}" + continue_on_error: true + ##### NSPanel Date ##### + ### DATE Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.date + message: "{{ page_home.general.date.label.color_rgb if is_number(page_home.general.date.label.color_rgb) else ((page_home.general.date.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.date.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.date.label.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### DATE Font ### + - *delay-default - service: "{{ nextion.commands.text_printf }}" data: - component: "{{ 'bpage%02d_label' | format(button_page_index+1) }}" - message: "{{ button_pages_labels[button_page_index].label }}" + component: home.date + message: "{{ (dict.values(mui[language].weekdays) | list)[now().weekday()] ~ ', ' ~ as_timestamp(now()) | timestamp_custom(date_format) }}" + continue_on_error: true + ##### NSPanel Time ##### + ### TIME Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.time + message: "{{ page_home.general.time.label.color_rgb if is_number(page_home.general.time.label.color_rgb) else ((page_home.general.time.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.time.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.time.label.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### TIME Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.time + message: "{{ time }}" + continue_on_error: true + - if: "{{ meridiem }}" + then: + ### TIME Meridiem Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.meridiem + message: "{{ page_home.general.time.label.color_rgb if is_number(page_home.general.time.label.color_rgb) else ((page_home.general.time.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.time.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.time.label.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### TIME Meridiem Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.meridiem + message: "{{ meridiem }}" + continue_on_error: true + + ##### NSPanel Outdoor Temp ##### + - variables: + outdoor_temp_state: "{{ states(outdoortemp) | default('unavailable') if outdoortemp is string else 'unavailable' }}" + outdoor_temp: "{{ outdoor_temp_state if is_number(outdoor_temp_state) else state_attr(weather_entity, 'temperature') | default('unavailable') if weather_entity is string else 'unavailable' }}" + - if: "{{ is_number(outdoor_temp) }}" + then: + ### LABEL Outdoor Temp Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.outdoor_temp + message: "{{ page_home.general.outdoor_temp.label.color_rgb if is_number(page_home.general.outdoor_temp.label.color_rgb) else ((page_home.general.outdoor_temp.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.outdoor_temp.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.outdoor_temp.label.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### LABEL Outdoor Temp Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.outdoor_temp + message: "{{ outdoor_temp | round(1) ~ temperature_units }}" + continue_on_error: true + + ##### NSPanel Indoor Temp ##### + - variables: + indoor_temp_state: "{{ states(indoortemp) | default('unavailable') if indoortemp is string and indoortemp is match 'sensor.' else states(nspaneltemp) }}" + - if: "{{ is_number(indoor_temp_state) }}" + then: + ### ICON Indoor Temp Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.indoortempicon + message: "{{ page_home.general.indoor_temp.icon.color_rgb if is_number(page_home.general.indoor_temp.icon.color_rgb) else ((page_home.general.indoor_temp.icon.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.indoor_temp.icon.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.indoor_temp.icon.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### ICON Indoor Temp Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.indoortempicon + message: "{{ nextion.icons.all[page_home.general.indoor_temp.icon.icon.split(':')[1]] | default(page_home.general.indoor_temp.icon.icon if page_home.general.indoor_temp.icon.icon is string else '\U0000E2D5') }}" + continue_on_error: true + ### LABEL Indoor Temp Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.current_temp + message: "{{ page_home.general.indoor_temp.label.color_rgb if is_number(page_home.general.indoor_temp.label.color_rgb) else ((page_home.general.indoor_temp.label.color_rgb[0] //(2**3)) *(2**11))+((page_home.general.indoor_temp.label.color_rgb[1] //(2**2)) *(2**5))+(page_home.general.indoor_temp.label.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### LABEL Indoor Temp Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.current_temp + message: "{{ (indoor_temp_state | round(1) ~ temperature_units) if is_number(indoor_temp_state) else (mui[language].unavailable if indoor_temp_state in ['unavailable', 'unknown', None] else indoor_temp_state) }}" + continue_on_error: true + + ##### Weather Icon Home Page ##### + - *delay-default + - service: "{{ nextion.commands.printf }}" + data: + cmd: home.weather.pic={{ nextion.pics.weather[states(weather_entity) | default('unavailable') if weather_entity is string else 'unavailable'] | default(None) }} continue_on_error: true - ##### NSPanel build Button page ##### - - repeat: - for_each: "{{ button_pages_buttons[first_button:last_button] }}" - sequence: &display-button_page_button - - if: "{{ repeat.item.entity is string and repeat.item.entity | length > 0 and repeat.item.entity.split('.') | default([]) | count > 0 }}" - then: - - variables: - item_domain: "{{ repeat.item.entity.split('.')[0] | default('unknown') }}" - # {{ states(entity_id) | default('unavailable') if entity_id is string else 'unavailable' }} - current_entity_state: "{{ states(repeat.item.entity) | default('unavailable') }}" - current_entity_state_available: "{{ current_entity_state not in ['unavailable'] }}" - # Button PIC GRAY/WHITE - btn_pic: "{{ nextion.pics.button.on if current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') else nextion.pics.button.off }}" - # TEXT, BRIGHTNESS and ICON Background - btn_bg: "{{ nextion.colors.white if current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') else nextion.colors.grey_dark }}" - # ICON Font Color - btn_icon_font: > - {% if not current_entity_state_available %} {{ nextion.colors.red }} - {% elif item_domain in ['button', 'input_button', 'scene'] or current_entity_state in ['off', 'closed', 'closing'] or (item_domain == 'person' and current_entity_state != 'home') %} {{ nextion.colors.grey_light }} - {% elif current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') %} {{ repeat.item.icon_color_rgb if is_number(repeat.item.icon_color_rgb) else ((repeat.item.icon_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.icon_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.icon_color_rgb[2] //(2**3)) }} - {% else %} {{ nextion.colors.red }} - {% endif %} - # LABEL Font Color - btn_txt_font: >- - {% if not current_entity_state_available %} {{ nextion.colors.white }} - {% elif item_domain in ['button', 'input_button', 'scene'] or current_entity_state in ['off', 'closed', 'closing'] or (item_domain == 'person' and current_entity_state != 'home') %} {{ nextion.colors.white }} - {% elif current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') %} {{ nextion.colors.grey_dark }} - {% else %} {{ nextion.colors.white }} - {% endif %} - # BRIGHTNESS Font Color - btn_bri_font: "{{ btn_txt_font }}" #"{{ nextion.colors.grey_dark }}" - # ICON Value - btn_icon: > - {% if not current_entity_state_available %} {{ nextion.icons.buttons.unknown }} - {% elif repeat.item.icon | length > 0 %} {{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon if repeat.item.icon is string else '\U0000E2D5') }} - {% elif repeat.item.entity and repeat.item.entity.split('.') | count > 1 %} {{ nextion.icons.buttons[repeat.item.entity.split('.')[0] if repeat.item.entity else 'unknown'] }} - {% else %} {{ nextion.icons.buttons.unknown }} - {% endif %} - # LABEL Value - btn_label: "{{ repeat.item.name }}" - # BRIGHTNESS Value - btn_bri_txt: >- - {% if not current_entity_state_available %} 0 - {% elif item_domain == 'light' and current_entity_state == 'on' and state_attr(repeat.item.entity, 'brightness') != None %} {{ (state_attr(repeat.item.entity, 'brightness') | int * 100 /255) | round(0) }}% - {% elif item_domain == 'cover' and current_entity_state in ['open', 'opening', 'closing'] and state_attr(repeat.item.entity, 'current_position') != None %} {{ (state_attr(repeat.item.entity, 'current_position') | int(100)) | round(0) }}% - {% elif item_domain == 'climate' and current_entity_state != 'off' and state_attr(repeat.item.entity, "current_temperature") != None %} {{ (state_attr(repeat.item.entity, "current_temperature") | float) | round(0) }}{{ temperature_units }} - {% else -%} 0 - {% endif -%} - - *delay-default - - service: "{{ nextion.commands.set_button }}" - data: - btn_id: "{{ repeat.item.component }}" - btn_pic: "{{ btn_pic }}" - btn_bg: "{{ btn_bg }}" - btn_icon_font: "{{ btn_icon_font }}" - btn_txt_font: "{{ btn_txt_font }}" - btn_bri_font: "{{ btn_bri_font }}" - btn_icon: "{{ btn_icon }}" - btn_label: "{{ btn_label }}" - btn_bri_txt: "{{ btn_bri_txt }}" - continue_on_error: true - ###### SHOW All component when page loading done ##### - - *delay-default - - service: "{{ nextion.commands.show_all }}" - continue_on_error: true - - ## PAGE LIGHTSETTINGS ## - - alias: Light settings page - conditions: "{{ trigger.event.data.new_state.state == nextion.pages.light }}" - sequence: - - *variables-settings_entity - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.light_name - message: "{{ entity_long_name }}" - continue_on_error: true - ##### LIGHT ICON - ON / OFF ##### - - variables: - lightsettings_icon_font: "{{ nextion.icons.all[entity_long_icon.split(':')[1]] | default(entity_long_icon if entity_long_icon is string else nextion.icons.buttons.light) if entity_long_icon not in ['unavailable', 'unknown', None] and entity_long_icon | length > 0 else nextion.icons.buttons.light }}" - lightsettings_icon_font_color: "{{ entity_long_icon_color if is_state(entity_long, 'on') else nextion.colors.grey_light }}" - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.icon_state - message: "{{ lightsettings_icon_font }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: lightsettings.icon_state - message: "{{ lightsettings_icon_font_color }}" - continue_on_error: true - ##### LIGHT State ##### - - *delay-default - - if: "{{ state_attr(entity_long, 'brightness') != none }}" - then: - - service: "{{ nextion.commands.value }}" - data: - component: lightsettings.lightslider - message: "{{ (state_attr(entity_long, 'brightness') | int * 100 / 255) | round(0) }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.light_value - message: "{{ (state_attr(entity_long, 'brightness') | int * 100 / 255) | round(0) }}%" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.light_value_2 - message: "{{ (state_attr(entity_long, 'brightness') | int * 100 /255) | round(0) }}%" - continue_on_error: true - else: - - service: "{{ nextion.commands.value }}" - data: - component: lightsettings.lightslider - message: '0' - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.light_value - message: '0 %' - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.light_value_2 - message: '0 %' - continue_on_error: true - - ##### LIGHT Check Color_Temp Value is available when yes send some current Values ##### - - if: "{{ state_attr(entity_long, 'color_temp') != none }}" - then: - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.temp_value - message: "{{ (state_attr(entity_long, 'color_temp') | int ) | round(0) }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: lightsettings.temp_value_2 - message: "{{ (state_attr(entity_long, 'color_temp') | int ) | round(0) }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.value }}" - data: - component: lightsettings.tempslider - message: "{{ (state_attr(entity_long, 'color_temp') | int ) | round(0) }}" - continue_on_error: true - - ## PAGE COVERSETTINGS ## - - alias: Cover settings page - conditions: "{{ trigger.event.data.new_state.state == nextion.pages.cover }}" - sequence: - ##### COVER - OPEN / CLOSE ##### - - *variables-settings_entity - - variables: - coversettings_icon_font: "{{ nextion.icons.all[entity_long_icon.split(':')[1]] | default(entity_long_icon if entity_long_icon is string else nextion.icons.buttons.cover) if entity_long_icon | length > 0 else nextion.icons.buttons.cover }}" - coversettings_icon_font_color: "{{ entity_long_icon_color if is_state(entity_long, 'open') else nextion.colors.grey_light }}" - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: coversettings.icon_state - message: "{{ coversettings_icon_font }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: coversettings.icon_state - message: "{{ coversettings_icon_font_color }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: coversettings.cover_name - message: "{{ entity_long_name }}" - continue_on_error: true - - ##### COVER State - - service: "{{ nextion.commands.value }}" - data: - component: coversettings.coverslider - message: "{{ (state_attr(entity_long, 'current_position') | int ) | round(0) }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: coversettings.cover_value - message: "{{ (state_attr(entity_long, 'current_position') | int ) | round(0) }} %" - continue_on_error: true - - ##### COVER Battery ICON Yes / NO ##### - - variables: - battery_level: > - {% if state_attr(entity_long, 'battery') | default('unavailable') not in ['unavailable', 'unknown', None] %} - {{ state_attr(entity_long, 'battery') | default('unavailable') }} - {% elif expand(device_entities(device_id(entity_long))) | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | map(attribute='state') | map('float') | list | count > 0 %} - {{ expand(device_entities(device_id(entity_long))) | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | map(attribute='state') | map('float') | list | first }} - {% elif states(entity_long | replace('cover.','sensor.') ~ '_battery') | default('unavailable') not in ['unavailable', 'unknown', None] %} - {{ states(entity_long | replace('cover.','sensor.') ~ '_battery') | default('unavailable') }} - {% elif states(entity_long | replace('cover.','sensor.') | replace('cover', 'battery')) | default('unavailable') not in ['unavailable', 'unknown', None] %} - {{ states(entity_long | replace('cover.','sensor.') | replace('cover', 'battery')) | default('unavailable') }} - {% else %} unavailable - {% endif %} - - if: "{{ is_number(battery_level) }}" - then: - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: coversettings.battery_value - message: "{{ battery_level | round(0) }} %" - continue_on_error: true - ### ICON Battery Font Color ### - - *delay-default - - service: "{{ nextion.commands.font_color }}" - data: - component: coversettings.battery_icon - message: "{{ nextion.colors.grey_super_light }}" - continue_on_error: true - ### ICON Battery Font ### - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: coversettings.battery_icon - message: "{{ nextion.icons.battery }}" - continue_on_error: true - - ## ENTITY PAGES 01 - 04 ## - - alias: Entity pages - conditions: "{{ trigger.event.data.new_state.state in nextion.pages.entitypages }}" - sequence: &refresh-entity_pages - - &variables-entity_pages - variables: - ##### Entity pages ##### - entity_pages_labels: - - label: !input "entity_page01_label" - - label: !input "entity_page02_label" - - label: !input "entity_page03_label" - - label: !input "entity_page04_label" - entity_pages_entities: - - entity: !input "entities_entity01" - name: !input "entities_entity01_name" - icon: !input "entities_entity01_icon" - component: entitypage01.value01 - - entity: !input "entities_entity02" - name: !input "entities_entity02_name" - icon: !input "entities_entity02_icon" - component: entitypage01.value02 - - entity: !input "entities_entity03" - name: !input "entities_entity03_name" - icon: !input "entities_entity03_icon" - component: entitypage01.value03 - - entity: !input "entities_entity04" - name: !input "entities_entity04_name" - icon: !input "entities_entity04_icon" - component: entitypage01.value04 - - entity: !input "entities_entity05" - name: !input "entities_entity05_name" - icon: !input "entities_entity05_icon" - component: entitypage01.value05 - - entity: !input "entities_entity06" - name: !input "entities_entity06_name" - icon: !input "entities_entity06_icon" - component: entitypage01.value06 - - entity: !input "entities_entity07" - name: !input "entities_entity07_name" - icon: !input "entities_entity07_icon" - component: entitypage01.value07 - - entity: !input "entities_entity08" - name: !input "entities_entity08_name" - icon: !input "entities_entity08_icon" - component: entitypage01.value08 - - entity: !input "entities_entity09" - name: !input "entities_entity09_name" - icon: !input "entities_entity09_icon" - component: entitypage02.value01 - - entity: !input "entities_entity10" - name: !input "entities_entity10_name" - icon: !input "entities_entity10_icon" - component: entitypage02.value02 - - entity: !input "entities_entity11" - name: !input "entities_entity11_name" - icon: !input "entities_entity11_icon" - component: entitypage02.value03 - - entity: !input "entities_entity12" - name: !input "entities_entity12_name" - icon: !input "entities_entity12_icon" - component: entitypage02.value04 - - entity: !input "entities_entity13" - name: !input "entities_entity13_name" - icon: !input "entities_entity13_icon" - component: entitypage02.value05 - - entity: !input "entities_entity14" - name: !input "entities_entity14_name" - icon: !input "entities_entity14_icon" - component: entitypage02.value06 - - entity: !input "entities_entity15" - name: !input "entities_entity15_name" - icon: !input "entities_entity15_icon" - component: entitypage02.value07 - - entity: !input "entities_entity16" - name: !input "entities_entity16_name" - icon: !input "entities_entity16_icon" - component: entitypage02.value08 - - entity: !input "entities_entity17" - name: !input "entities_entity17_name" - icon: !input "entities_entity17_icon" - component: entitypage03.value01 - - entity: !input "entities_entity18" - name: !input "entities_entity18_name" - icon: !input "entities_entity18_icon" - component: entitypage03.value02 - - entity: !input "entities_entity19" - name: !input "entities_entity19_name" - icon: !input "entities_entity19_icon" - component: entitypage03.value03 - - entity: !input "entities_entity20" - name: !input "entities_entity20_name" - icon: !input "entities_entity20_icon" - component: entitypage03.value04 - - entity: !input "entities_entity21" - name: !input "entities_entity21_name" - icon: !input "entities_entity21_icon" - component: entitypage03.value05 - - entity: !input "entities_entity22" - name: !input "entities_entity22_name" - icon: !input "entities_entity22_icon" - component: entitypage03.value06 - - entity: !input "entities_entity23" - name: !input "entities_entity23_name" - icon: !input "entities_entity23_icon" - component: entitypage03.value07 - - entity: !input "entities_entity24" - name: !input "entities_entity24_name" - icon: !input "entities_entity24_icon" - component: entitypage03.value08 - - entity: !input "entities_entity25" - name: !input "entities_entity25_name" - icon: !input "entities_entity25_icon" - component: entitypage04.value01 - - entity: !input "entities_entity26" - name: !input "entities_entity26_name" - icon: !input "entities_entity26_icon" - component: entitypage04.value02 - - entity: !input "entities_entity27" - name: !input "entities_entity27_name" - icon: !input "entities_entity27_icon" - component: entitypage04.value03 - - entity: !input "entities_entity28" - name: !input "entities_entity28_name" - icon: !input "entities_entity28_icon" - component: entitypage04.value04 - - entity: !input "entities_entity29" - name: !input "entities_entity29_name" - icon: !input "entities_entity29_icon" - component: entitypage04.value05 - - entity: !input "entities_entity30" - name: !input "entities_entity30_name" - icon: !input "entities_entity30_icon" - component: entitypage04.value06 - - entity: !input "entities_entity31" - name: !input "entities_entity31_name" - icon: !input "entities_entity31_icon" - component: entitypage04.value07 - - entity: !input "entities_entity32" - name: !input "entities_entity32_name" - icon: !input "entities_entity32_icon" - component: entitypage04.value08 - - variables: - entity_page_index: "{{ (nextion.pages.current[-2:] | int(-1)) - 1 }}" - first_entity: "{{ entity_page_index * 8 }}" - last_entity: "{{ first_entity + 8 }}" - ##### Entity page - Label ##### - - if: "{{ entity_pages_labels[entity_page_index].label | length > 0 }}" - then: - - service: "{{ nextion.commands.text_printf }}" - data: - component: "{{ 'entity%02d_label' | format(entity_page_index + 1) }}" - message: "{{ entity_pages_labels[entity_page_index].label }}" - continue_on_error: true - - *delay-default - ##### Entities ##### - - repeat: - for_each: "{{ entity_pages_entities[first_entity:last_entity] }}" - sequence: &update-entity_page_entity - - if: "{{ repeat.item.entity is string and repeat.item.entity | length > 0 }}" - then: - - variables: - repeat_item_state: "{{ states(repeat.item.entity) | default('unavailable') }}" - repeat_item_icon: > - {% if repeat.item.icon is string and repeat.item.icon | length > 0 %}{{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon) }} - {% elif state_attr(repeat.item.entity, 'icon') | default('') not in ['unavailable', 'unknown', '', None] %}{{ nextion.icons.all[state_attr(repeat.item.entity, 'icon').split(':')[1]] | default(None) }} - {% endif %} - - service: "{{ nextion.commands.set_entity }}" - data: - ent_id: "{{ repeat.item.component }}" - ent_icon: "{{ repeat_item_icon }}" - ent_label: >- - {%- if repeat.item.name | length > 0 -%} {{ repeat.item.name }} - {%- elif repeat_item_state in ['unavailable', 'unknown', None] -%} {{ repeat.item.entity }} - {%- else -%} {{ state_attr(repeat.item.entity, 'friendly_name') | default(mui[language].no_name) }} - {%- endif -%} - ent_value: "{{ repeat_item_state ~ ((state_attr(repeat.item.entity, 'unit_of_measurement') | default('')) if state_attr(repeat.item.entity, 'unit_of_measurement') else '') }}" - continue_on_error: true - - ## PAGE CLIMATE ## - - alias: Climate page - conditions: "{{ trigger.event.data.new_state.state == nextion.pages.climate }}" - sequence: - - *variables-settings_entity - - variables: - hvac_mode: "{{ states(entity_long) | default('unavailable') if entity_long is string else 'unavailable' }}" - outdoor_temp_state: "{{ states(outdoortemp) | default('unavailable') if outdoortemp is string else 'unavailable' }}" - outdoor_temp: "{{ outdoor_temp_state if is_number(outdoor_temp_state) else state_attr(weather_entity, 'temperature') | default('unavailable') if weather_entity is string else 'unavailable' }}" - heating_state: "{{ mui[language].climate.states.off if hvac_mode == 'off' else mui[language].climate.states.on }}" - - service: "{{ nextion.commands.text_printf }}" - data: - component: climate.climate_label - message: "{{ entity_long_name }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: outdoor_temp - message: "{{ (outdoor_temp | round(1) ~ temperature_units) if is_number(outdoor_temp) else (mui[language].unavailable if outdoor_temp in ['unavailable', 'unknown', None] else outdoor_temp) }}" - continue_on_error: true - - - service: "{{ nextion.commands.text_printf }}" - data: - component: current_temp - message: "{{ (state_attr(entity_long, 'current_temperature') | round(1) ~ temperature_units) if is_number(state_attr(entity_long, 'current_temperature')) else '' }}" # mui[language].unavailable? - continue_on_error: true - - if: "{{ hvac_mode != 'off' and is_number(state_attr(entity_long, 'temperature')) }}" - then: - - variables: - target_temp: "{{state_attr(entity_long, 'temperature') | round(1)}}" - - service: "{{ nextion.commands.thermostat_cycle }}" - data: - value: "{{ target_temp }}" - continue_on_error: true - else: - - service: "{{ nextion.commands.thermostat_cycle }}" - data: - value: "0" - continue_on_error: true - - service: "{{ nextion.commands.text_printf }}" - data: - component: target_temp - message: " " - continue_on_error: true - - service: "{{ nextion.commands.text_printf }}" - data: - component: heating_state - message: "{{ heating_state }}" - continue_on_error: true - - # HVAC Button PIC - - variables: - heating_bt_pic: "{{ nextion.pics.heating.button.off if hvac_mode == 'off' else nextion.pics.heating.button.on }}" - - *delay-default - - service: "{{ nextion.commands.printf }}" - data: - cmd: heating_bt_pic.pic={{ heating_bt_pic }} - continue_on_error: true - - variables: - hotwatercharge_state: "{{ states(hotwatercharge) | default('unavailable') if hotwatercharge is string else 'unavailable' }}" - hotwatertemp_state: "{{ states(hotwatertemp) | default('unavailable') if hotwatertemp is string else 'unavailable' }}" - hotw_bt_pic: "{{ nextion.pics.hvac.button[hotwatercharge_state] | default(nextion.pics.hvac.button.blank) if hotwatercharge_state not in ['unavailable', 'unknown', None] else nextion.pics.hvac.button.blank }}" - - *delay-default - - service: "{{ nextion.commands.printf }}" - data: - cmd: hotw_bt_pic.pic={{ hotw_bt_pic }} - continue_on_error: true - - if: "{{ hotwatertemp_state not in ['unavailable', 'unknown', None] }}" - then: - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: climate.hotwater_temp - message: "{{ (hotwatertemp_state | round(1) ~ temperature_units) if is_number(hotwatertemp_state) else hotwatertemp_state }}" - continue_on_error: true - - ## PAGE WEATHER (WEATHER01 to WEATHER05) ## - - alias: Weather pages - conditions: "{{ trigger.event.data.new_state.state in nextion.pages.weatherpages }}" - sequence: - - variables: - weather_attribution: "{{ state_attr(weather_entity, 'attribution') if weather_entity is string }}" - weather_type: > - {% if not weather_attribution %} unavailable - {% elif 'AccuWeather' in weather_attribution %} AccuWeather - {% elif 'OpenWeatherMap' in weather_attribution %} OpenWeather - {% elif 'SMHI' in weather_attribution %} SMHI - {% elif 'met.no' in weather_attribution %} Met.no - {% elif 'OpenWeatherMap' in weather_attribution %} OpenWeather - {% else %} Other - {% endif %} - weather_units: - hours_of_sun: "{{ state_attr(weather_entity, 'hours_of_sun_unit') | default('h') if weather_entity is string and state_attr(weather_entity, 'hours_of_sun_unit') else 'h' }}" - precipitation: "{{ state_attr(weather_entity, 'precipitation_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'precipitation_unit') }}" - precipitation_probability: "{{ state_attr(weather_entity, 'precipitation_probability_unit') | default('%') if weather_entity is string and state_attr(weather_entity, 'precipitation_probability_unit') else '%' }}" - pressure: "{{ state_attr(weather_entity, 'pressure_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'pressure_unit') }}" - #temperature: "{{ state_attr(weather_entity, 'temperature_unit') | default('°') if weather_entity is string and state_attr(weather_entity, 'temperature_unit') else '°' }}" - thunderstorm_probability: "{{ state_attr(weather_entity, 'thunderstorm_probability_unit') | default('%') if weather_entity is string and state_attr(weather_entity, 'thunderstorm_probability_unit') else '%' }}" - uv_index: "{{ state_attr(weather_entity, 'uv_index_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'uv_index_unit') }}" - #visibility: "{{ state_attr(weather_entity, 'visibility_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'visibility_unit') }}" - wind_speed: "{{ state_attr(weather_entity, 'wind_speed_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'wind_speed_unit') }}" - page_name: "{{ trigger.event.data.new_state.state }}" - page_index: "{{ (page_name[-2:] | int(0)) - 1 }}" - - ##### Display relative day ##### - - service: "{{ nextion.commands.text_printf }}" - data: - component: "{{ page_name }}.day" - message: "{{ (dict.values(mui[language].relative_day) | list)[page_index] }}" - continue_on_error: true - - *delay-default - - ##### Display date (long) ##### - - service: "{{ nextion.commands.text_printf }}" - data: - component: "{{ page_name }}.date" - message: "{{ (dict.values(mui[language].weekdays) | list)[(now() + timedelta(days= (page_index))).weekday()] ~ ', ' ~ as_timestamp(now() + timedelta(days= (page_index))) | timestamp_custom(date_format) }}" - continue_on_error: true - - *delay-default - - ##### Display weather data only when available ##### - - variables: - forecast_day: > - {{ state_attr(weather_entity, 'forecast') | default([]) - | selectattr('datetime', 'defined') - | selectattr('datetime', '>=', (today_at('00:00') + timedelta(days= page_index )) | as_timestamp | timestamp_local ) - | selectattr('datetime', '<', (today_at('00:00') + timedelta(days= (page_index+1))) | as_timestamp | timestamp_local ) - | list - }} - - if: "{{ forecast_day | count > 0 or page_index == 0 }}" - then: # Display forecast - - variables: - metnoweather: "{{ weather_type == 'Met.no' }}" - metnoweather_hourly_forecast: "{{ state_attr(weather_entity ~ '_hourly', 'forecast') if metnoweather and states(weather_entity ~ '_hourly') not in ['unavailable', 'unknown', None] }}" - forecast_day: > - {% if forecast_day | count > 0 %}{{ forecast_day }} - {% elif metnoweather and metnoweather_hourly_forecast %} - {{ metnoweather_hourly_forecast - | selectattr('datetime', 'defined') - | selectattr('datetime', '>=', (today_at('00:00') + timedelta(days= page_index )) | as_timestamp | timestamp_local ) - | selectattr('datetime', '<', (today_at('00:00') + timedelta(days= (page_index+1))) | as_timestamp | timestamp_local ) - | list - }} - {% endif %} - - variables: - forecast_day: > - {% if forecast_day | count > 0 %}{{ forecast_day }} - {% elif page_index == 0 %} - [ - { - "condition": "{{ states(weather_entity) }}", - "temperature": "{{ state_attr(weather_entity, 'temperature') }}", - "wind_speed": "{{ state_attr(weather_entity, 'wind_speed') }}" - } - ] - {% endif %} - - if: "{{ forecast_day | count > 0 }}" - then: + ##### NSPanel Buttons ##### - variables: - accuweather: "{{ weather_type == 'AccuWeather' }}" - accuweather_day_name: "{{ 'day_' ~ page_index }}" - accuweather_sensor_prefix: "{{ 'sensor.' ~ (weather_entity | replace('weather.','')) ~ '_' }}" - accuweather_sensor_sufix: "{{ '_' ~ page_index ~ 'd' }}" - temp_min: > - {{ forecast_day | selectattr('templow', 'defined') | map(attribute='templow') | map('float') | list | min - if forecast_day | selectattr('templow', 'defined') | map(attribute='templow') | map('float') | list | count > 0 - else forecast_day | selectattr('temperature', 'defined') | map(attribute='temperature') | map('float') | list | min | default('unknown') - }} - temp_max: "{{ forecast_day | selectattr('temperature', 'defined') | map(attribute='temperature') | map('float') | list | max if forecast_day | selectattr('temperature', 'defined') | map(attribute='temperature') | map('float') | list | count > 0 }}" - condition: "{{ forecast_day | selectattr('condition', 'defined') | map(attribute='condition') | list | first if forecast_day | selectattr('condition', 'defined') | map(attribute='condition') | list | count > 0 }}" - precipitation: "{{ forecast_day | selectattr('precipitation', 'defined') | map(attribute='precipitation') | map('float') | list | sum if forecast_day | selectattr('precipitation', 'defined') | map(attribute='precipitation') | map('float') | list | count > 0 }}" - precipitation_probability: "{{ forecast_day | selectattr('precipitation_probability', 'defined') | map(attribute='precipitation_probability') | map('float') | list | max if forecast_day | selectattr('precipitation_probability', 'defined') | map(attribute='precipitation_probability') | map('float') | list | count > 0 }}" - pressure: "{{ forecast_day | selectattr('pressure', 'defined') | map(attribute='pressure') | map('float') | list | max if forecast_day | selectattr('pressure', 'defined') | map(attribute='pressure') | map('float') | list | count > 0 }}" - wind_speed: "{{ forecast_day | selectattr('wind_speed', 'defined') | map(attribute='wind_speed') | map('float') | list | max if forecast_day | selectattr('wind_speed', 'defined') | map(attribute='wind_speed') | map('float') | list | count > 0 }}" - hours_of_sun: "{{ states(accuweather_sensor_prefix ~ 'hours_of_sun' ~ accuweather_sensor_sufix) | default('unknown') if accuweather else (forecast_day | selectattr('hours_of_sun', 'defined') | map(attribute='hours_of_sun') | map('float') | list | sum if forecast_day | selectattr('hours_of_sun', 'defined') | map(attribute='hours_of_sun') | map('float') | list | count > 0) }}" - uv_index: "{{ states(accuweather_sensor_prefix ~ 'uv_index' ~ accuweather_sensor_sufix) | default('unknown') if accuweather else (forecast_day | selectattr('uv_index', 'defined') | map(attribute='uv_index') | map('float') | list | max if forecast_day | selectattr('uv_index', 'defined') | map(attribute='uv_index') | map('float') | list | count > 0) }}" - thunderstorm_probability: "{{ states(accuweather_sensor_prefix ~ 'thunderstorm_probability_day' ~ accuweather_sensor_sufix) | default('unknown') if accuweather else (forecast_day | selectattr('thunderstorm_probability', 'defined') | map(attribute='thunderstorm_probability') | map('float') | list | max if forecast_day | selectattr('thunderstorm_probability', 'defined') | map(attribute='thunderstorm_probability') | map('float') | list | count > 0) }}" - parameters: - - name: hours_of_sun - visibility: "{{ is_number(hours_of_sun) }}" - value: "{{ (hours_of_sun | round(0) ~ ' ' ~ weather_units.hours_of_sun) if is_number(hours_of_sun) }}" - icon: "{{ nextion.icons.weather.sun }}" - - name: thunderstorm_probability - visibility: "{{ is_number(thunderstorm_probability) }}" - value: "{{ (thunderstorm_probability | round(0) ~ weather_units.thunderstorm_probability) if is_number(thunderstorm_probability) }}" - icon: "{{ nextion.icons.weather.lightning }}" - - name: precipitation - visibility: "{{ is_number(precipitation) or is_number(precipitation_probability) }}" - value: > - {{ (precipitation | round(0) ~ ' ' ~ weather_units.precipitation) if is_number(precipitation) }} - {{ '-' if is_number(precipitation) and is_number(precipitation_probability) }} - {{ (precipitation_probability | round(0) ~ weather_units.precipitation_probability) if is_number(precipitation_probability) }} - icon: "{{ nextion.icons.weather.rain }}" - - name: uv_index - visibility: "{{ is_number(uv_index) }}" - value: > - {{ (state_attr(accuweather_sensor_prefix ~ 'uv_index' ~ accuweather_sensor_sufix, 'level') | default(None) ~ ': ') if weather_type == 'AccuWeather' }} - {{ (uv_index | round(0) ~ weather_units.uv_index) if is_number(uv_index) }} - icon: "{{ nextion.icons.weather.protect }}" - - name: wind_speed - visibility: "{{ is_number(wind_speed) }}" - value: "{{ (wind_speed | round(0) ~ ' ' ~ weather_units.wind_speed) if is_number(wind_speed) }}" - icon: "{{ nextion.icons.weather.wind }}" - - name: pressure - visibility: "{{ is_number(pressure) }}" - value: "{{ (pressure | round(0) ~ ' ' ~ weather_units.pressure) if is_number(pressure) }}" - icon: "{{ nextion.icons.weather.gauge }}" + left_button_state: "{{ states(page_home.hardware.buttons.left.entity) | default('unavailable') if page_home.hardware.buttons.left.entity is string else 'unavailable' }}" + right_button_state: "{{ states(page_home.hardware.buttons.right.entity) | default('unavailable') if page_home.hardware.buttons.right.entity is string else 'unavailable' }}" - ##### Display weather PIC when available - - if: "{{ condition not in ['unknown', None] }}" - then: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "{{ page_name }}.weather_icon.pic={{ nextion.pics.weather[states(weather_entity) | default('unavailable') if weather_entity is string else 'unavailable'] | default(None) if condition == 'unknown' and page_name == nextion.pages.weatherpages[0] else nextion.pics.weather[condition] | default(None) }}" - continue_on_error: true - - *delay-default - - ##### Display temperature min/max when available - - variables: - temperature_string: > - {{ (temp_min | round(0) ~ temperature_units) if is_number(temp_min) }} - {{ '/' if is_number(temp_min) and is_number(temp_max) and temp_min != temp_max }} - {{ (temp_max | round(0) ~ temperature_units) if is_number(temp_max) and temp_min != temp_max }} - - if: "{{ (is_number(temp_min) or is_number(temp_max)) and temperature_string is string and temperature_string | length > 0 }}" + ##### NSPanel Left Button Name ##### + - if: "{{ page_home.hardware.buttons.left.name | length > 0 }}" then: + ### LABEL Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.left_bt_text + message: "{{ page_home.hardware.buttons.left.color_rgb if is_number(page_home.hardware.buttons.left.color_rgb) else ((page_home.hardware.buttons.left.color_rgb[0] //(2**3)) *(2**11))+((page_home.hardware.buttons.left.color_rgb[1] //(2**2)) *(2**5))+(page_home.hardware.buttons.left.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### LABEL Font ### + - *delay-default - service: "{{ nextion.commands.text_printf }}" data: - component: "{{ page_name }}.temperature" ### Temperature MIN/MAX ### - message: "{{ temperature_string }}" + component: home.left_bt_text + message: "{{ page_home.hardware.buttons.left.name }}" continue_on_error: true - - *delay-default - ##### fields 1 to 5 (Parameters) ##### + ##### SET Left Hardware Button PIC on Home Page #### + - if: "{{ left_button_state not in ['unavailable', 'unknown', None] }}" + then: + - variables: + # Hardware Button PIC + left_hardware_button_state: "{{ nextion.pics.hardware.button[left_button_state] | default(None) }}" + - *delay-default + - service: "{{ nextion.commands.printf }}" + data: + cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} + continue_on_error: true + + ##### NSPanel Right Button Name ##### + - if: "{{ page_home.hardware.buttons.right.name | length > 0 }}" + then: + ### LABEL Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.right_bt_text + message: "{{ page_home.hardware.buttons.right.color_rgb if is_number(page_home.hardware.buttons.right.color_rgb) else ((page_home.hardware.buttons.right.color_rgb[0] //(2**3)) *(2**11))+((page_home.hardware.buttons.right.color_rgb[1] //(2**2)) *(2**5))+(page_home.hardware.buttons.right.color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### LABEL Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.right_bt_text + message: "{{ page_home.hardware.buttons.right.name }}" + continue_on_error: true + + ##### SET Right Hardware Button PIC on Home Page ##### + - if: "{{ right_button_state not in ['unavailable', 'unknown', None] }}" + then: + - variables: + # Hardware Button PIC + right_hardware_button_state: "{{ nextion.pics.hardware.button[right_button_state] | default(None) }}" + - *delay-default + - service: "{{ nextion.commands.printf }}" + data: + cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} + continue_on_error: true + + ###### Status bar ###### + - &variables-home_page_status_bar + variables: + thermostat_icon: !input "thermostat_icon" #E50E + heat_icon: !input "heat_icon" #\U0000E50F + climate_state: "{{ states(climate) | default('unavailable') if climate is string else 'unavailable' }}" + climate_action: "{{ state_attr(climate, 'hvac_action') | default('unavailable') if climate is string else 'unavailable' }}" + home_page_status_bar: + - entity: "{{ relay01_entity }}" + icon: !input "relay01_icon" #E3A5 + icon_color_rgb: !input "relay01_icon_color" + page: home + component: icon_top_01 + - entity: "{{ relay02_entity }}" + icon: !input "relay02_icon" #E3A8 + icon_color_rgb: !input "relay02_icon_color" + page: home + component: icon_top_02 + - entity: "{{ climate }}" + icon: "{{ (nextion.icons.all[heat_icon.split(':')[1]] | default(heat_icon if heat_icon is string else '\U0000E2D5') if climate_action == 'heating' else nextion.icons.all[thermostat_icon.split(':')[1]] | default(thermostat_icon if thermostat_icon is string else '\U0000E2D5')) if climate_state == 'heat' else nextion.icons.blank }}" + icon_color_rgb: !input "thermostat_icon_color" + page: home + component: icon_top_03 + - entity: !input "chip01" + icon: !input "chip01_icon" + icon_color_rgb: !input "chip01_icon_color" + page: home + component: icon_top_04 + - entity: !input "chip02" + icon: !input "chip02_icon" + icon_color_rgb: !input "chip02_icon_color" + page: home + component: icon_top_05 + - entity: !input "chip03" + icon: !input "chip03_icon" + icon_color_rgb: !input "chip03_icon_color" + page: home + component: icon_top_06 + - entity: !input "chip04" + icon: !input "chip04_icon" + icon_color_rgb: !input "chip04_icon_color" + page: home + component: icon_top_07 + - entity: !input "chip05" + icon: !input "chip05_icon" + icon_color_rgb: !input "chip05_icon_color" + page: home + component: icon_top_08 + - entity: !input "chip06" + icon: !input "chip06_icon" + icon_color_rgb: !input "chip06_icon_color" + page: home + component: icon_top_09 + - entity: !input "chip07" + icon: !input "chip07_icon" + icon_color_rgb: !input "chip07_icon_color" + page: home + component: icon_top_10 - repeat: - for_each: "{{ (parameters | selectattr('visibility', 'eq', true) | list)[:5] }}" + for_each: "{{ home_page_status_bar }}" sequence: + - &display-home_page_status_bar + if: "{{ repeat.item.entity is defined and repeat.item.entity is string and repeat.item.entity | length > 0 }}" + then: + - variables: + repeat_item_state: "{{ states(repeat.item.entity) | default('unavailable') }}" + repeat_item_state_is_on: "{{ repeat_item_state in ['on', 'open'] }}" + repeat_item_icon: > + {% if repeat_item_state_is_on and repeat.item.icon is string and repeat.item.icon | length > 0 %}{{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon) }} + {% elif repeat_item_state_is_on and state_attr(repeat.item.entity, 'icon') | default('') not in ['unavailable', 'unknown', '', None] %}{{ nextion.icons.all[state_attr(repeat.item.entity, 'icon').split(':')[1]] | default(nextion.icons.blank) }} + {% else %}{{ nextion.icons.blank }} + {% endif %} + - if: "{{ repeat_item_state_is_on }}" + then: + ### ICON Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: "{{ repeat.item.page }}.{{ repeat.item.component }}" + message: "{{ repeat.item.icon_color_rgb if is_number(repeat.item.icon_color_rgb) else ((repeat.item.icon_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.icon_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.icon_color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### ICON Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ repeat.item.page }}.{{ repeat.item.component }}" + message: "{{ repeat_item_icon }}" + continue_on_error: true + # {{ is_state(repeat.item.entity, 'on') | default(False) if repeat.item.entity is string else 'unavailable' }} + + ##### HOME VALUE 01 - 03 + - *delay-default + - &variables-home_page_values + variables: + home_page_values: + - entity: !input "home_value01" + icon: !input "home_value01_icon" + icon_color_rgb: !input "home_value01_icon_color" + label_color_rgb: !input "home_value01_label_color" + page: home + component: value01 + - entity: !input "home_value02" + icon: !input "home_value02_icon" + icon_color_rgb: !input "home_value02_icon_color" + label_color_rgb: !input "home_value02_label_color" + page: home + component: value02 + - entity: !input "home_value03" + icon: !input "home_value03_icon" + icon_color_rgb: !input "home_value03_icon_color" + label_color_rgb: !input "home_value03_label_color" + page: home + component: value03 + - repeat: + for_each: "{{ home_page_values }}" + sequence: + - &display-home_page_value + if: "{{ repeat.item.entity is string and repeat.item.entity is match 'sensor.' and states(repeat.item.entity) not in ['unavailable', 'unknown', None] }}" + then: + - if: "{{ repeat.item.icon | length > 0 }}" + then: + ### ICON Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: "{{ repeat.item.page }}.{{ repeat.item.component }}_icon" + message: "{{ repeat.item.icon_color_rgb if is_number(repeat.item.icon_color_rgb) else ((repeat.item.icon_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.icon_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.icon_color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### ICON Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ repeat.item.page }}.{{ repeat.item.component }}_icon" + message: "{{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon if repeat.item.icon is string else '\U0000E2D5') }}" + continue_on_error: true + - variables: + repeat_item_state: "{{ states(repeat.item.entity) | default('unavailable') }}" + repeat_item_state_available: "{{ repeat_item_state not in ['unavailable', 'unknown', None] }}" + - if: "{{ repeat_item_state_available }}" + then: + ### LABEL Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: "{{ repeat.item.page }}.{{ repeat.item.component }}_state" + message: "{{ repeat.item.label_color_rgb if is_number(repeat.item.label_color_rgb) else ((repeat.item.label_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.label_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.label_color_rgb[2] //(2**3)) }}" + continue_on_error: true + ### LABEL Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ repeat.item.page }}.{{ repeat.item.component }}_state" + message: "{{ (repeat_item_state | round(1) ~ state_attr(repeat.item.entity, 'unit_of_measurement') | default('')) if is_number(repeat_item_state) else repeat_item_state }}" + continue_on_error: true + + ##### Set notify icon ##### + - variables: + notification_unread_state: "{{ states(notification_unread) | default('unavailable') if notification_unread is string else 'unavailable' }}" + - if: "{{ notification_unread_state in ['on', 'off'] }}" + then: + - variables: + notification_text_state: "{{ states(notification_text) | default(None) if notification_text is string else None }}" + set_button04_icon: "{{ nextion.icons.all[page_home.buttons[3].icon.split(':')[1]] | default(page_home.buttons[3].icon if page_home.buttons[3].icon is string else '\U0000E2D5') if notification_unread_state == 'on' and notification_text_state | length > 0 else nextion.icons.blank }}" + set_button04_icon_font: "{{ (page_home.buttons[3].color_rgb[notification_unread_state] if is_number(page_home.buttons[3].color_rgb[notification_unread_state]) else ((page_home.buttons[3].color_rgb[notification_unread_state][0] //(2**3)) *(2**11))+((page_home.buttons[3].color_rgb[notification_unread_state][1] //(2**2)) *(2**5))+(page_home.buttons[3].color_rgb[notification_unread_state][2] //(2**3))) if notification_unread_state in ['on', 'off'] and notification_text_state | length > 0 else nextion.colors.grey_light }}" + ##### SET ICON Font - Notify ##### + - *delay-default - service: "{{ nextion.commands.text_printf }}" data: - component: "{{ page_name }}.value0{{ repeat.index }}" - message: "{{ repeat.item.value }}" + component: home.button04_icon + message: "{{ set_button04_icon }}" + continue_on_error: true + + ##### SET ICON Font Color - Notify ##### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: home.button04_icon + message: "{{ set_button04_icon_font }}" + continue_on_error: true + + ###### QR Code - Icon ###### + - *delay-default + - if: "{{ qrcode_enabled == true }}" + then: # Display QR code icon + ### ICON Font Color ### + - service: "{{ nextion.commands.font_color }}" + data: + component: home.button05_icon + message: "{{ page_home.buttons[4].color_rgb.on if is_number(page_home.buttons[4].color_rgb.on) else ((page_home.buttons[4].color_rgb.on[0] //(2**3)) *(2**11))+((page_home.buttons[4].color_rgb.on[1] //(2**2)) *(2**5))+(page_home.buttons[4].color_rgb.on[2] //(2**3)) }}" + continue_on_error: true + ### ICON Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.button05_icon + message: "{{ nextion.icons.all[page_home.buttons[4].icon.split(':')[1]] | default(page_home.buttons[4].icon if page_home.buttons[4].icon is string else '\U0000E2D5') }}" + continue_on_error: true + else: # Display blank icon + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.button05_icon + message: "{{ nextion.icons.blank }}" + continue_on_error: true + + ###### ENTITIES - Icon ###### + - *delay-default + - if: "{{ entitypages_enabled }}" + then: # Display entities icon + ### ICON Font Color ### + - service: "{{ nextion.commands.font_color }}" + data: + component: home.button06_icon + message: "{{ page_home.buttons[5].color_rgb.on if is_number(page_home.buttons[5].color_rgb.on) else ((page_home.buttons[5].color_rgb.on[0] //(2**3)) *(2**11))+((page_home.buttons[5].color_rgb.on[1] //(2**2)) *(2**5))+(page_home.buttons[5].color_rgb.on[2] //(2**3)) }}" + continue_on_error: true + ### ICON Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.button06_icon + message: "{{ nextion.icons.all[page_home.buttons[5].icon.split(':')[1]] | default(page_home.buttons[5].icon if page_home.buttons[5].icon is string else '\U0000E2D5') }}" + continue_on_error: true + else: # Display blank icon + - service: "{{ nextion.commands.text_printf }}" + data: + component: home.button06_icon + message: "{{ nextion.icons.blank }}" + continue_on_error: true + + ###### SHOW All component when page loading done ##### + - *delay-default + - service: "{{ nextion.commands.show_all }}" + continue_on_error: true + + ## BUTTON PAGES 01 - 04 ## + - alias: Button pages + conditions: "{{ nspanel_event.page in nextion.pages.buttonpages }}" + sequence: &refresh_page_buttonpage + - &variables-page_buttons + variables: + button_page_index: "{{ (nspanel_event.page[-2:] | int(-1)) - 1 }}" + first_button: "{{ button_page_index * 8 }}" + last_button: "{{ first_button + 8 }}" + ##### BUTTON Page Labels ##### + button_pages_labels: + - label: !input button_page01_label + - label: !input button_page02_label + - label: !input button_page03_label + - label: !input button_page04_label + ##### BUTTONS Page - Buttons 1 - 32 ##### + button_pages_buttons: + - entity: !input "entity01" + name: !input "entity01_name" + icon: !input "entity01_icon" + icon_color_rgb: !input "entity01_icon_color" + confirm: !input "entity01_confirm" + page: buttonpage01 + component: button01 + - entity: !input "entity02" + name: !input "entity02_name" + icon: !input "entity02_icon" + icon_color_rgb: !input "entity02_icon_color" + confirm: !input "entity02_confirm" + page: buttonpage01 + component: button02 + - entity: !input "entity03" + name: !input "entity03_name" + icon: !input "entity03_icon" + icon_color_rgb: !input "entity03_icon_color" + confirm: !input "entity03_confirm" + page: buttonpage01 + component: button03 + - entity: !input "entity04" + name: !input "entity04_name" + icon: !input "entity04_icon" + icon_color_rgb: !input "entity04_icon_color" + confirm: !input "entity04_confirm" + page: buttonpage01 + component: button04 + - entity: !input "entity05" + name: !input "entity05_name" + icon: !input "entity05_icon" + icon_color_rgb: !input "entity05_icon_color" + confirm: !input "entity05_confirm" + page: buttonpage01 + component: button05 + - entity: !input "entity06" + name: !input "entity06_name" + icon: !input "entity06_icon" + icon_color_rgb: !input "entity06_icon_color" + confirm: !input "entity06_confirm" + page: buttonpage01 + component: button06 + - entity: !input "entity07" + name: !input "entity07_name" + icon: !input "entity07_icon" + icon_color_rgb: !input "entity07_icon_color" + confirm: !input "entity07_confirm" + page: buttonpage01 + component: button07 + - entity: !input "entity08" + name: !input "entity08_name" + icon: !input "entity08_icon" + icon_color_rgb: !input "entity08_icon_color" + confirm: !input "entity08_confirm" + page: buttonpage01 + component: button08 + - entity: !input "entity09" + name: !input "entity09_name" + icon: !input "entity09_icon" + icon_color_rgb: !input "entity09_icon_color" + confirm: !input "entity09_confirm" + page: buttonpage02 + component: button01 + - entity: !input "entity10" + name: !input "entity10_name" + icon: !input "entity10_icon" + icon_color_rgb: !input "entity10_icon_color" + confirm: !input "entity10_confirm" + page: buttonpage02 + component: button02 + - entity: !input "entity11" + name: !input "entity11_name" + icon: !input "entity11_icon" + icon_color_rgb: !input "entity11_icon_color" + confirm: !input "entity11_confirm" + page: buttonpage02 + component: button03 + - entity: !input "entity12" + name: !input "entity12_name" + icon: !input "entity12_icon" + icon_color_rgb: !input "entity12_icon_color" + confirm: !input "entity12_confirm" + page: buttonpage02 + component: button04 + - entity: !input "entity13" + name: !input "entity13_name" + icon: !input "entity13_icon" + icon_color_rgb: !input "entity13_icon_color" + confirm: !input "entity13_confirm" + page: buttonpage02 + component: button05 + - entity: !input "entity14" + name: !input "entity14_name" + icon: !input "entity14_icon" + icon_color_rgb: !input "entity14_icon_color" + confirm: !input "entity14_confirm" + page: buttonpage02 + component: button06 + - entity: !input "entity15" + name: !input "entity15_name" + icon: !input "entity15_icon" + icon_color_rgb: !input "entity15_icon_color" + confirm: !input "entity15_confirm" + page: buttonpage02 + component: button07 + - entity: !input "entity16" + name: !input "entity16_name" + icon: !input "entity16_icon" + icon_color_rgb: !input "entity16_icon_color" + confirm: !input "entity16_confirm" + page: buttonpage02 + component: button08 + - entity: !input "entity17" + name: !input "entity17_name" + icon: !input "entity17_icon" + icon_color_rgb: !input "entity17_icon_color" + confirm: !input "entity17_confirm" + page: buttonpage03 + component: button01 + - entity: !input "entity18" + name: !input "entity18_name" + icon: !input "entity18_icon" + icon_color_rgb: !input "entity18_icon_color" + confirm: !input "entity18_confirm" + page: buttonpage03 + component: button02 + - entity: !input "entity19" + name: !input "entity19_name" + icon: !input "entity19_icon" + icon_color_rgb: !input "entity19_icon_color" + confirm: !input "entity19_confirm" + page: buttonpage03 + component: button03 + - entity: !input "entity20" + name: !input "entity20_name" + icon: !input "entity20_icon" + icon_color_rgb: !input "entity20_icon_color" + confirm: !input "entity20_confirm" + page: buttonpage03 + component: button04 + - entity: !input "entity21" + name: !input "entity21_name" + icon: !input "entity21_icon" + icon_color_rgb: !input "entity21_icon_color" + confirm: !input "entity21_confirm" + page: buttonpage03 + component: button05 + - entity: !input "entity22" + name: !input "entity22_name" + icon: !input "entity22_icon" + icon_color_rgb: !input "entity22_icon_color" + confirm: !input "entity22_confirm" + page: buttonpage03 + component: button06 + - entity: !input "entity23" + name: !input "entity23_name" + icon: !input "entity23_icon" + icon_color_rgb: !input "entity23_icon_color" + confirm: !input "entity23_confirm" + page: buttonpage03 + component: button07 + - entity: !input "entity24" + name: !input "entity24_name" + icon: !input "entity24_icon" + icon_color_rgb: !input "entity24_icon_color" + confirm: !input "entity24_confirm" + page: buttonpage03 + component: button08 + - entity: !input "entity25" + name: !input "entity25_name" + icon: !input "entity25_icon" + icon_color_rgb: !input "entity25_icon_color" + confirm: !input "entity25_confirm" + page: buttonpage04 + component: button01 + - entity: !input "entity26" + name: !input "entity26_name" + icon: !input "entity26_icon" + icon_color_rgb: !input "entity26_icon_color" + confirm: !input "entity26_confirm" + page: buttonpage04 + component: button02 + - entity: !input "entity27" + name: !input "entity27_name" + icon: !input "entity27_icon" + icon_color_rgb: !input "entity27_icon_color" + confirm: !input "entity27_confirm" + page: buttonpage04 + component: button03 + - entity: !input "entity28" + name: !input "entity28_name" + icon: !input "entity28_icon" + icon_color_rgb: !input "entity28_icon_color" + confirm: !input "entity28_confirm" + page: buttonpage04 + component: button04 + - entity: !input "entity29" + name: !input "entity29_name" + icon: !input "entity29_icon" + icon_color_rgb: !input "entity29_icon_color" + confirm: !input "entity29_confirm" + page: buttonpage04 + component: button05 + - entity: !input "entity30" + name: !input "entity30_name" + icon: !input "entity30_icon" + icon_color_rgb: !input "entity30_icon_color" + confirm: !input "entity30_confirm" + page: buttonpage04 + component: button06 + - entity: !input "entity31" + name: !input "entity31_name" + icon: !input "entity31_icon" + icon_color_rgb: !input "entity31_icon_color" + confirm: !input "entity31_confirm" + page: buttonpage04 + component: button07 + - entity: !input "entity32" + name: !input "entity32_name" + icon: !input "entity32_icon" + icon_color_rgb: !input "entity32_icon_color" + confirm: !input "entity32_confirm" + page: buttonpage04 + component: button08 + - if: "{{ button_page_index >= 0 and button_page_index <= 3 }}" + then: + - service: "{{ nextion.commands.set_settings_entity }}" + data: + entity: "{{ nspanel_event }}" + continue_on_error: true + ##### Button Page Label ##### + - if: "{{ button_pages_labels[button_page_index].label | length > 0 }}" + then: + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ 'bpage%02d_label' | format(button_page_index+1) }}" + message: "{{ button_pages_labels[button_page_index].label }}" + continue_on_error: true + + ##### NSPanel build Button page ##### + - repeat: + for_each: "{{ button_pages_buttons[first_button:last_button] }}" + sequence: &display-button_page_button + - if: "{{ repeat.item.entity is string and repeat.item.entity | length > 0 and repeat.item.entity.split('.') | default([]) | count > 0 }}" + then: + - variables: + item_domain: "{{ repeat.item.entity.split('.')[0] | default('unknown') }}" + # {{ states(entity_id) | default('unavailable') if entity_id is string else 'unavailable' }} + current_entity_state: "{{ states(repeat.item.entity) | default('unavailable') }}" + current_entity_state_available: "{{ current_entity_state not in ['unavailable'] }}" + # Button PIC GRAY/WHITE + btn_pic: "{{ nextion.pics.button.on if current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') else nextion.pics.button.off }}" + # TEXT, BRIGHTNESS and ICON Background + btn_bg: "{{ nextion.colors.white if current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') else nextion.colors.grey_dark }}" + # ICON Font Color + btn_icon_font: > + {% if not current_entity_state_available %} {{ nextion.colors.red }} + {% elif item_domain in ['button', 'input_button', 'scene'] or current_entity_state in ['off', 'closed', 'closing'] or (item_domain == 'person' and current_entity_state != 'home') %} {{ nextion.colors.grey_light }} + {% elif current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') %} {{ repeat.item.icon_color_rgb if is_number(repeat.item.icon_color_rgb) else ((repeat.item.icon_color_rgb[0] //(2**3)) *(2**11))+((repeat.item.icon_color_rgb[1] //(2**2)) *(2**5))+(repeat.item.icon_color_rgb[2] //(2**3)) }} + {% else %} {{ nextion.colors.red }} + {% endif %} + # LABEL Font Color + btn_txt_font: >- + {% if not current_entity_state_available %} {{ nextion.colors.white }} + {% elif item_domain in ['button', 'input_button', 'scene'] or current_entity_state in ['off', 'closed', 'closing'] or (item_domain == 'person' and current_entity_state != 'home') %} {{ nextion.colors.white }} + {% elif current_entity_state in ['on', 'open', 'opening', 'home'] or (item_domain == 'climate' and current_entity_state != 'off') %} {{ nextion.colors.grey_dark }} + {% else %} {{ nextion.colors.white }} + {% endif %} + # BRIGHTNESS Font Color + btn_bri_font: "{{ btn_txt_font }}" #"{{ nextion.colors.grey_dark }}" + # ICON Value + btn_icon: > + {% if not current_entity_state_available %} {{ nextion.icons.buttons.unknown }} + {% elif repeat.item.icon | length > 0 %} {{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon if repeat.item.icon is string else '\U0000E2D5') }} + {% elif repeat.item.entity and repeat.item.entity.split('.') | count > 1 %} {{ nextion.icons.buttons[repeat.item.entity.split('.')[0] if repeat.item.entity else 'unknown'] }} + {% else %} {{ nextion.icons.buttons.unknown }} + {% endif %} + # LABEL Value + btn_label: "{{ repeat.item.name }}" + # BRIGHTNESS Value + btn_bri_txt: >- + {% if not current_entity_state_available %} 0 + {% elif item_domain == 'light' and current_entity_state == 'on' and state_attr(repeat.item.entity, 'brightness') != None %} {{ (state_attr(repeat.item.entity, 'brightness') | int * 100 /255) | round(0) }}% + {% elif item_domain == 'cover' and current_entity_state in ['open', 'opening', 'closing'] and state_attr(repeat.item.entity, 'current_position') != None %} {{ (state_attr(repeat.item.entity, 'current_position') | int(100)) | round(0) }}% + {% elif item_domain == 'climate' and current_entity_state != 'off' and state_attr(repeat.item.entity, "current_temperature") != None %} {{ (state_attr(repeat.item.entity, "current_temperature") | float) | round(0) }}{{ temperature_units }} + {% else -%} 0 + {% endif -%} + - *delay-default + - service: "{{ nextion.commands.set_button }}" + data: + btn_id: "{{ repeat.item.page }}.{{ repeat.item.component }}" + btn_pic: "{{ btn_pic }}" + btn_bg: "{{ btn_bg }}" + btn_icon_font: "{{ btn_icon_font }}" + btn_txt_font: "{{ btn_txt_font }}" + btn_bri_font: "{{ btn_bri_font }}" + btn_icon: "{{ btn_icon }}" + btn_label: "{{ btn_label }}" + btn_bri_txt: "{{ btn_bri_txt }}" + continue_on_error: true + ###### SHOW All component when page loading done ##### + - *delay-default + - service: "{{ nextion.commands.show_all }}" + continue_on_error: true + + + ## PAGE LIGHTSETTINGS ## + - alias: Light settings page + conditions: "{{ nspanel_event.page == nextion.pages.light }}" + sequence: + - *variables-settings_entity + - if: "{{ settings_entity_domain == 'light' }}" + then: + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.light_name + message: "{{ settings_entity_dict.name if settings_entity_dict.name is defined and settings_entity_dict.name is string and settings_entity_dict.name | length > 0 else state_attr(settings_entity_dict.entity, 'friendly_name') if state_attr(settings_entity_dict.entity, 'friendly_name') | length > 0 else ('Light' ~ (': ' ~ settings_entity_dict.component) if settings_entity_dict.component is string and settings_entity_dict.component | length > 0) }}" + continue_on_error: true + ##### LIGHT ICON - ON / OFF ##### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.icon_state + message: "{{ nextion.icons.all[settings_entity_dict.icon.split(':')[1]] | default(settings_entity_dict.icon if settings_entity_dict.icon is defined and settings_entity_dict.icon is string else nextion.icons.buttons.light) if settings_entity_dict.icon not in ['unavailable', 'unknown', None] and settings_entity_dict.icon | length > 0 else nextion.icons.buttons.light }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: lightsettings.icon_state + message: "{{ (settings_entity_dict.icon_color_rgb if is_number(settings_entity_dict.icon_color_rgb) else ((settings_entity_dict.icon_color_rgb[0] //(2**3)) *(2**11))+((settings_entity_dict.icon_color_rgb[1] //(2**2)) *(2**5))+(settings_entity_dict.icon_color_rgb[2] //(2**3))) if is_state(settings_entity_dict.entity, 'on') else nextion.colors.grey_light }}" + continue_on_error: true + ##### LIGHT State ##### + - *delay-default + - if: "{{ state_attr(settings_entity_dict.entity, 'brightness') != none }}" + then: + - service: "{{ nextion.commands.value }}" + data: + component: lightsettings.lightslider + message: "{{ (state_attr(settings_entity_dict.entity, 'brightness') | int * 100 / 255) | round(0) }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.light_value + message: "{{ (state_attr(settings_entity_dict.entity, 'brightness') | int * 100 / 255) | round(0) }}%" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.light_value_2 + message: "{{ (state_attr(settings_entity_dict.entity, 'brightness') | int * 100 /255) | round(0) }}%" + continue_on_error: true + else: + - service: "{{ nextion.commands.value }}" + data: + component: lightsettings.lightslider + message: '0' + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.light_value + message: '0 %' + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.light_value_2 + message: '0 %' + continue_on_error: true + + ##### LIGHT Check Color_Temp Value is available when yes send some current Values ##### + - if: "{{ state_attr(settings_entity_dict.entity, 'color_temp') != none }}" + then: + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.temp_value + message: "{{ (state_attr(settings_entity_dict.entity, 'color_temp') | int ) | round(0) }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: lightsettings.temp_value_2 + message: "{{ (state_attr(settings_entity_dict.entity, 'color_temp') | int ) | round(0) }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.value }}" + data: + component: lightsettings.tempslider + message: "{{ (state_attr(settings_entity_dict.entity, 'color_temp') | int ) | round(0) }}" + continue_on_error: true + + ## PAGE COVERSETTINGS ## + - alias: Cover settings page + conditions: "{{ nspanel_event.page == nextion.pages.cover }}" + sequence: + ##### COVER - OPEN / CLOSE ##### + - *variables-settings_entity + - if: "{{ settings_entity_domain == 'cover' }}" + then: + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: coversettings.icon_state + message: "{{ nextion.icons.all[settings_entity_dict.icon.split(':')[1]] | default(settings_entity_dict.icon if settings_entity_dict.icon is defined and settings_entity_dict.icon is string else nextion.icons.buttons.cover) if settings_entity_dict.icon not in ['unavailable', 'unknown', None] and settings_entity_dict.icon | length > 0 else nextion.icons.buttons.cover }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: coversettings.icon_state + message: "{{ (settings_entity_dict.icon_color_rgb if is_number(settings_entity_dict.icon_color_rgb) else ((settings_entity_dict.icon_color_rgb[0] //(2**3)) *(2**11))+((settings_entity_dict.icon_color_rgb[1] //(2**2)) *(2**5))+(settings_entity_dict.icon_color_rgb[2] //(2**3))) if states(settings_entity_dict.entity) in ['open', 'opening'] else nextion.colors.grey_light }}" continue_on_error: true - *delay-default - service: "{{ nextion.commands.text_printf }}" data: - component: "{{ page_name }}.value0{{ repeat.index }}_icon" - message: "{{ repeat.item.icon }}" + component: coversettings.cover_name + message: "{{ settings_entity_dict.entity }}" + continue_on_error: true + + ##### COVER State + - service: "{{ nextion.commands.value }}" + data: + component: coversettings.coverslider + message: "{{ (state_attr(settings_entity_dict.entity, 'current_position') | int ) | round(0) }}" continue_on_error: true - *delay-default - else: &forecast_unavailable + - service: "{{ nextion.commands.text_printf }}" + data: + component: coversettings.cover_value + message: "{{ (state_attr(settings_entity_dict.entity, 'current_position') | int ) | round(0) }} %" + continue_on_error: true + + ##### COVER Battery ICON Yes / NO ##### + - variables: + battery_level: > + {% if state_attr(settings_entity_dict.entity, 'battery') | default('unavailable') not in ['unavailable', 'unknown', None] %} + {{ state_attr(settings_entity_dict.entity, 'battery') | default('unavailable') }} + {% elif expand(device_entities(device_id(settings_entity_dict.entity))) | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | map(attribute='state') | map('float') | list | count > 0 %} + {{ expand(device_entities(device_id(settings_entity_dict.entity))) | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | map(attribute='state') | map('float') | list | first }} + {% elif states(settings_entity_dict.entity | replace('cover.','sensor.') ~ '_battery') | default('unavailable') not in ['unavailable', 'unknown', None] %} + {{ states(settings_entity_dict.entity | replace('cover.','sensor.') ~ '_battery') | default('unavailable') }} + {% elif states(settings_entity_dict.entity | replace('cover.','sensor.') | replace('cover', 'battery')) | default('unavailable') not in ['unavailable', 'unknown', None] %} + {{ states(settings_entity_dict.entity | replace('cover.','sensor.') | replace('cover', 'battery')) | default('unavailable') }} + {% else %} unavailable + {% endif %} + - if: "{{ is_number(battery_level) }}" + then: + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: coversettings.battery_value + message: "{{ battery_level | round(0) }} %" + continue_on_error: true + ### ICON Battery Font Color ### + - *delay-default + - service: "{{ nextion.commands.font_color }}" + data: + component: coversettings.battery_icon + message: "{{ nextion.colors.grey_super_light }}" + continue_on_error: true + ### ICON Battery Font ### + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: coversettings.battery_icon + message: "{{ nextion.icons.battery }}" + continue_on_error: true + + ## PAGE CLIMATE ## + - alias: Climate page + conditions: "{{ nspanel_event.page == nextion.pages.climate }}" + sequence: + - *variables-settings_entity + - variables: + settings_entity_dict: > + {% if settings_entity_dict.entity is not defined and settings_entity_dict.page == nextion.pages.home and settings_entity_dict.component == "climate" %} + { + "page": "{{ settings_entity_dict.page }}", + "entity": "{{ climate }}", + "name": "{{ state_attr(climate, 'friendly_name') | default(mui[language].no_name) if climate is string and state_attr(climate, 'friendly_name') is string and state_attr(climate, 'friendly_name') | length > 0 else climate }}" + } + {% else %}{{ settings_entity_dict }} + {% endif %} + settings_entity_domain: "{{ settings_entity_dict.entity.split('.')[0] if settings_entity_dict.entity is defined and settings_entity_dict.entity is string and settings_entity_dict.entity.split('.') | count > 0 else 'unknown' }}" + - condition: "{{ settings_entity_domain == 'climate' }}" + - variables: + hvac_mode: "{{ states(settings_entity_dict.entity) | default('unavailable') if settings_entity_dict.entity is string else 'unavailable' }}" + outdoor_temp_state: "{{ states(outdoortemp) | default('unavailable') if outdoortemp is string else 'unavailable' }}" + outdoor_temp: "{{ outdoor_temp_state if is_number(outdoor_temp_state) else state_attr(weather_entity, 'temperature') | default('unavailable') if weather_entity is string else 'unavailable' }}" + heating_state: "{{ mui[language].climate.states.off if hvac_mode == 'off' else mui[language].climate.states.on }}" - service: "{{ nextion.commands.text_printf }}" data: - component: "{{ page_name }}.value01" - message: "{{ mui[language].unavailable }}" + component: climate.climate_label + message: "{{ settings_entity_dict.name }}" continue_on_error: true - *delay-default - else: *forecast_unavailable + - service: "{{ nextion.commands.text_printf }}" + data: + component: outdoor_temp + message: "{{ (outdoor_temp | round(1) ~ temperature_units) if is_number(outdoor_temp) else (mui[language].unavailable if outdoor_temp in ['unavailable', 'unknown', None] else outdoor_temp) }}" + continue_on_error: true - ## PAGE NOTIFICATION ## - - alias: Notification page - conditions: "{{ trigger.event.data.new_state.state == nextion.pages.notification }}" + - service: "{{ nextion.commands.text_printf }}" + data: + component: current_temp + message: "{{ (state_attr(settings_entity_dict.entity, 'current_temperature') | round(1) ~ temperature_units) if is_number(state_attr(settings_entity_dict.entity, 'current_temperature')) else '' }}" # mui[language].unavailable? + continue_on_error: true + - if: "{{ hvac_mode != 'off' and is_number(state_attr(settings_entity_dict.entity, 'temperature')) }}" + then: + - variables: + target_temp: "{{state_attr(settings_entity_dict.entity, 'temperature') | round(1)}}" + - service: "{{ nextion.commands.thermostat_cycle }}" + data: + value: "{{ target_temp }}" + continue_on_error: true + else: + - service: "{{ nextion.commands.thermostat_cycle }}" + data: + value: "0" + continue_on_error: true + - service: "{{ nextion.commands.text_printf }}" + data: + component: target_temp + message: " " + continue_on_error: true + - service: "{{ nextion.commands.text_printf }}" + data: + component: heating_state + message: "{{ heating_state }}" + continue_on_error: true + + # HVAC Button PIC + - variables: + heating_bt_pic: "{{ nextion.pics.heating.button.off if hvac_mode == 'off' else nextion.pics.heating.button.on }}" + - *delay-default + - service: "{{ nextion.commands.printf }}" + data: + cmd: heating_bt_pic.pic={{ heating_bt_pic }} + continue_on_error: true + - variables: + hotwatercharge_state: "{{ states(hotwatercharge) | default('unavailable') if hotwatercharge is string else 'unavailable' }}" + hotwatertemp_state: "{{ states(hotwatertemp) | default('unavailable') if hotwatertemp is string else 'unavailable' }}" + hotw_bt_pic: "{{ nextion.pics.hvac.button[hotwatercharge_state] | default(nextion.pics.hvac.button.blank) if hotwatercharge_state not in ['unavailable', 'unknown', None] else nextion.pics.hvac.button.blank }}" + - *delay-default + - service: "{{ nextion.commands.printf }}" + data: + cmd: hotw_bt_pic.pic={{ hotw_bt_pic }} + continue_on_error: true + - if: "{{ hotwatertemp_state not in ['unavailable', 'unknown', None] }}" + then: + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: climate.hotwater_temp + message: "{{ (hotwatertemp_state | round(1) ~ temperature_units) if is_number(hotwatertemp_state) else hotwatertemp_state }}" + continue_on_error: true + + ## ENTITY PAGES 01 - 04 ## + - alias: Entity pages + conditions: "{{ nspanel_event.page in nextion.pages.entitypages }}" + sequence: &refresh-entity_pages + - &variables-entity_pages + variables: + ##### Entity pages ##### + entity_pages_labels: + - label: !input "entity_page01_label" + - label: !input "entity_page02_label" + - label: !input "entity_page03_label" + - label: !input "entity_page04_label" + entity_pages_entities: + - entity: !input "entities_entity01" + name: !input "entities_entity01_name" + icon: !input "entities_entity01_icon" + page: entitypage01 + component: value01 + - entity: !input "entities_entity02" + name: !input "entities_entity02_name" + icon: !input "entities_entity02_icon" + page: entitypage01 + component: value02 + - entity: !input "entities_entity03" + name: !input "entities_entity03_name" + icon: !input "entities_entity03_icon" + page: entitypage01 + component: value03 + - entity: !input "entities_entity04" + name: !input "entities_entity04_name" + icon: !input "entities_entity04_icon" + page: entitypage01 + component: value04 + - entity: !input "entities_entity05" + name: !input "entities_entity05_name" + icon: !input "entities_entity05_icon" + page: entitypage01 + component: value05 + - entity: !input "entities_entity06" + name: !input "entities_entity06_name" + icon: !input "entities_entity06_icon" + page: entitypage01 + component: value06 + - entity: !input "entities_entity07" + name: !input "entities_entity07_name" + icon: !input "entities_entity07_icon" + page: entitypage01 + component: value07 + - entity: !input "entities_entity08" + name: !input "entities_entity08_name" + icon: !input "entities_entity08_icon" + page: entitypage01 + component: value08 + - entity: !input "entities_entity09" + name: !input "entities_entity09_name" + icon: !input "entities_entity09_icon" + page: entitypage02 + component: value01 + - entity: !input "entities_entity10" + name: !input "entities_entity10_name" + icon: !input "entities_entity10_icon" + page: entitypage02 + component: value02 + - entity: !input "entities_entity11" + name: !input "entities_entity11_name" + icon: !input "entities_entity11_icon" + page: entitypage02 + component: value03 + - entity: !input "entities_entity12" + name: !input "entities_entity12_name" + icon: !input "entities_entity12_icon" + page: entitypage02 + component: value04 + - entity: !input "entities_entity13" + name: !input "entities_entity13_name" + icon: !input "entities_entity13_icon" + page: entitypage02 + component: value05 + - entity: !input "entities_entity14" + name: !input "entities_entity14_name" + icon: !input "entities_entity14_icon" + page: entitypage02 + component: value06 + - entity: !input "entities_entity15" + name: !input "entities_entity15_name" + icon: !input "entities_entity15_icon" + page: entitypage02 + component: value07 + - entity: !input "entities_entity16" + name: !input "entities_entity16_name" + icon: !input "entities_entity16_icon" + page: entitypage02 + component: value08 + - entity: !input "entities_entity17" + name: !input "entities_entity17_name" + icon: !input "entities_entity17_icon" + page: entitypage03 + component: value01 + - entity: !input "entities_entity18" + name: !input "entities_entity18_name" + icon: !input "entities_entity18_icon" + page: entitypage03 + component: value02 + - entity: !input "entities_entity19" + name: !input "entities_entity19_name" + icon: !input "entities_entity19_icon" + page: entitypage03 + component: value03 + - entity: !input "entities_entity20" + name: !input "entities_entity20_name" + icon: !input "entities_entity20_icon" + page: entitypage03 + component: value04 + - entity: !input "entities_entity21" + name: !input "entities_entity21_name" + icon: !input "entities_entity21_icon" + page: entitypage03 + component: value05 + - entity: !input "entities_entity22" + name: !input "entities_entity22_name" + icon: !input "entities_entity22_icon" + page: entitypage03 + component: value06 + - entity: !input "entities_entity23" + name: !input "entities_entity23_name" + icon: !input "entities_entity23_icon" + page: entitypage03 + component: value07 + - entity: !input "entities_entity24" + name: !input "entities_entity24_name" + icon: !input "entities_entity24_icon" + page: entitypage03 + component: value08 + - entity: !input "entities_entity25" + name: !input "entities_entity25_name" + icon: !input "entities_entity25_icon" + page: entitypage04 + component: value01 + - entity: !input "entities_entity26" + name: !input "entities_entity26_name" + icon: !input "entities_entity26_icon" + page: entitypage04 + component: value02 + - entity: !input "entities_entity27" + name: !input "entities_entity27_name" + icon: !input "entities_entity27_icon" + page: entitypage04 + component: value03 + - entity: !input "entities_entity28" + name: !input "entities_entity28_name" + icon: !input "entities_entity28_icon" + page: entitypage04 + component: value04 + - entity: !input "entities_entity29" + name: !input "entities_entity29_name" + icon: !input "entities_entity29_icon" + page: entitypage04 + component: value05 + - entity: !input "entities_entity30" + name: !input "entities_entity30_name" + icon: !input "entities_entity30_icon" + page: entitypage04 + component: value06 + - entity: !input "entities_entity31" + name: !input "entities_entity31_name" + icon: !input "entities_entity31_icon" + page: entitypage04 + component: value07 + - entity: !input "entities_entity32" + name: !input "entities_entity32_name" + icon: !input "entities_entity32_icon" + page: entitypage04 + component: value08 + - variables: + entity_page_index: "{{ (nspanel_event.page[-2:] | int(-1)) - 1 }}" + first_entity: "{{ entity_page_index * 8 }}" + last_entity: "{{ first_entity + 8 }}" + ##### Entity page - Label ##### + - if: "{{ entity_pages_labels[entity_page_index].label | length > 0 }}" + then: + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ 'entity%02d_label' | format(entity_page_index + 1) }}" + message: "{{ entity_pages_labels[entity_page_index].label }}" + continue_on_error: true + - *delay-default + ##### Entities ##### + - repeat: + for_each: "{{ entity_pages_entities[first_entity:last_entity] }}" + sequence: &update-entity_page_entity + - if: "{{ repeat.item.entity is string and repeat.item.entity | length > 0 }}" + then: + - variables: + repeat_item_state: "{{ states(repeat.item.entity) | default('unavailable') }}" + repeat_item_icon: > + {% if repeat.item.icon is string and repeat.item.icon | length > 0 %}{{ nextion.icons.all[repeat.item.icon.split(':')[1]] | default(repeat.item.icon) }} + {% elif state_attr(repeat.item.entity, 'icon') | default('') not in ['unavailable', 'unknown', '', None] %}{{ nextion.icons.all[state_attr(repeat.item.entity, 'icon').split(':')[1]] | default(None) }} + {% endif %} + - service: "{{ nextion.commands.set_entity }}" + data: + ent_id: "{{ repeat.item.page }}.{{ repeat.item.component }}" + ent_icon: "{{ repeat_item_icon if repeat_item_icon else nextion.icons.blank }}" + ent_label: >- + {%- if repeat.item.name | length > 0 -%} {{ repeat.item.name }} + {%- elif repeat_item_state in ['unavailable', 'unknown', None] -%} {{ repeat.item.entity }} + {%- else -%} {{ state_attr(repeat.item.entity, 'friendly_name') | default(mui[language].no_name) }} + {%- endif -%} + ent_value: "{{ repeat_item_state ~ ((state_attr(repeat.item.entity, 'unit_of_measurement') | default('')) if state_attr(repeat.item.entity, 'unit_of_measurement') else '') }}" + continue_on_error: true + + ## PAGE WEATHER (WEATHER01 to WEATHER05) ## + - alias: Weather pages + conditions: "{{ nspanel_event.page in nextion.pages.weatherpages }}" + sequence: + - variables: + weather_attribution: "{{ state_attr(weather_entity, 'attribution') if weather_entity is string }}" + weather_type: > + {% if not weather_attribution %} unavailable + {% elif 'AccuWeather' in weather_attribution %} AccuWeather + {% elif 'OpenWeatherMap' in weather_attribution %} OpenWeather + {% elif 'SMHI' in weather_attribution %} SMHI + {% elif 'met.no' in weather_attribution %} Met.no + {% elif 'OpenWeatherMap' in weather_attribution %} OpenWeather + {% else %} Other + {% endif %} + weather_units: + hours_of_sun: "{{ state_attr(weather_entity, 'hours_of_sun_unit') | default('h') if weather_entity is string and state_attr(weather_entity, 'hours_of_sun_unit') else 'h' }}" + precipitation: "{{ state_attr(weather_entity, 'precipitation_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'precipitation_unit') }}" + precipitation_probability: "{{ state_attr(weather_entity, 'precipitation_probability_unit') | default('%') if weather_entity is string and state_attr(weather_entity, 'precipitation_probability_unit') else '%' }}" + pressure: "{{ state_attr(weather_entity, 'pressure_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'pressure_unit') }}" + #temperature: "{{ state_attr(weather_entity, 'temperature_unit') | default('°') if weather_entity is string and state_attr(weather_entity, 'temperature_unit') else '°' }}" + thunderstorm_probability: "{{ state_attr(weather_entity, 'thunderstorm_probability_unit') | default('%') if weather_entity is string and state_attr(weather_entity, 'thunderstorm_probability_unit') else '%' }}" + uv_index: "{{ state_attr(weather_entity, 'uv_index_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'uv_index_unit') }}" + #visibility: "{{ state_attr(weather_entity, 'visibility_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'visibility_unit') }}" + wind_speed: "{{ state_attr(weather_entity, 'wind_speed_unit') | default('') if weather_entity is string and state_attr(weather_entity, 'wind_speed_unit') }}" + page_name: "{{ nspanel_event.page }}" + page_index: "{{ (page_name[-2:] | int(0)) - 1 }}" + + ##### Display relative day ##### + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ page_name }}.day" + message: "{{ (dict.values(mui[language].relative_day) | list)[page_index] }}" + continue_on_error: true + - *delay-default + + ##### Display date (long) ##### + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ page_name }}.date" + message: "{{ (dict.values(mui[language].weekdays) | list)[(now() + timedelta(days= (page_index))).weekday()] ~ ', ' ~ as_timestamp(now() + timedelta(days= (page_index))) | timestamp_custom(date_format) }}" + continue_on_error: true + - *delay-default + + ##### Display weather data only when available ##### + - variables: + forecast_day: > + {{ state_attr(weather_entity, 'forecast') | default([]) + | selectattr('datetime', 'defined') + | selectattr('datetime', '>=', (today_at('00:00') + timedelta(days= page_index )) | as_timestamp | timestamp_local ) + | selectattr('datetime', '<', (today_at('00:00') + timedelta(days= (page_index+1))) | as_timestamp | timestamp_local ) + | list + }} + - if: "{{ forecast_day | count > 0 or page_index == 0 }}" + then: # Display forecast + - variables: + metnoweather: "{{ weather_type == 'Met.no' }}" + metnoweather_hourly_forecast: "{{ state_attr(weather_entity ~ '_hourly', 'forecast') if metnoweather and states(weather_entity ~ '_hourly') not in ['unavailable', 'unknown', None] }}" + forecast_day: > + {% if forecast_day | count > 0 %}{{ forecast_day }} + {% elif metnoweather and metnoweather_hourly_forecast %} + {{ metnoweather_hourly_forecast + | selectattr('datetime', 'defined') + | selectattr('datetime', '>=', (today_at('00:00') + timedelta(days= page_index )) | as_timestamp | timestamp_local ) + | selectattr('datetime', '<', (today_at('00:00') + timedelta(days= (page_index+1))) | as_timestamp | timestamp_local ) + | list + }} + {% endif %} + - variables: + forecast_day: > + {% if forecast_day | count > 0 %}{{ forecast_day }} + {% elif page_index == 0 %} + [ + { + "condition": "{{ states(weather_entity) }}", + "temperature": "{{ state_attr(weather_entity, 'temperature') }}", + "wind_speed": "{{ state_attr(weather_entity, 'wind_speed') }}" + } + ] + {% endif %} + - if: "{{ forecast_day | count > 0 }}" + then: + - variables: + accuweather: "{{ weather_type == 'AccuWeather' }}" + accuweather_day_name: "{{ 'day_' ~ page_index }}" + accuweather_sensor_prefix: "{{ 'sensor.' ~ (weather_entity | replace('weather.','')) ~ '_' }}" + accuweather_sensor_sufix: "{{ '_' ~ page_index ~ 'd' }}" + temp_min: > + {{ forecast_day | selectattr('templow', 'defined') | map(attribute='templow') | map('float') | list | min + if forecast_day | selectattr('templow', 'defined') | map(attribute='templow') | map('float') | list | count > 0 + else forecast_day | selectattr('temperature', 'defined') | map(attribute='temperature') | map('float') | list | min | default('unknown') + }} + temp_max: "{{ forecast_day | selectattr('temperature', 'defined') | map(attribute='temperature') | map('float') | list | max if forecast_day | selectattr('temperature', 'defined') | map(attribute='temperature') | map('float') | list | count > 0 }}" + condition: "{{ forecast_day | selectattr('condition', 'defined') | map(attribute='condition') | list | first if forecast_day | selectattr('condition', 'defined') | map(attribute='condition') | list | count > 0 }}" + precipitation: "{{ forecast_day | selectattr('precipitation', 'defined') | map(attribute='precipitation') | map('float') | list | sum if forecast_day | selectattr('precipitation', 'defined') | map(attribute='precipitation') | map('float') | list | count > 0 }}" + precipitation_probability: "{{ forecast_day | selectattr('precipitation_probability', 'defined') | map(attribute='precipitation_probability') | map('float') | list | max if forecast_day | selectattr('precipitation_probability', 'defined') | map(attribute='precipitation_probability') | map('float') | list | count > 0 }}" + pressure: "{{ forecast_day | selectattr('pressure', 'defined') | map(attribute='pressure') | map('float') | list | max if forecast_day | selectattr('pressure', 'defined') | map(attribute='pressure') | map('float') | list | count > 0 }}" + wind_speed: "{{ forecast_day | selectattr('wind_speed', 'defined') | map(attribute='wind_speed') | map('float') | list | max if forecast_day | selectattr('wind_speed', 'defined') | map(attribute='wind_speed') | map('float') | list | count > 0 }}" + hours_of_sun: "{{ states(accuweather_sensor_prefix ~ 'hours_of_sun' ~ accuweather_sensor_sufix) | default('unknown') if accuweather else (forecast_day | selectattr('hours_of_sun', 'defined') | map(attribute='hours_of_sun') | map('float') | list | sum if forecast_day | selectattr('hours_of_sun', 'defined') | map(attribute='hours_of_sun') | map('float') | list | count > 0) }}" + uv_index: "{{ states(accuweather_sensor_prefix ~ 'uv_index' ~ accuweather_sensor_sufix) | default('unknown') if accuweather else (forecast_day | selectattr('uv_index', 'defined') | map(attribute='uv_index') | map('float') | list | max if forecast_day | selectattr('uv_index', 'defined') | map(attribute='uv_index') | map('float') | list | count > 0) }}" + thunderstorm_probability: "{{ states(accuweather_sensor_prefix ~ 'thunderstorm_probability_day' ~ accuweather_sensor_sufix) | default('unknown') if accuweather else (forecast_day | selectattr('thunderstorm_probability', 'defined') | map(attribute='thunderstorm_probability') | map('float') | list | max if forecast_day | selectattr('thunderstorm_probability', 'defined') | map(attribute='thunderstorm_probability') | map('float') | list | count > 0) }}" + parameters: + - name: hours_of_sun + visibility: "{{ is_number(hours_of_sun) }}" + value: "{{ (hours_of_sun | round(0) ~ ' ' ~ weather_units.hours_of_sun) if is_number(hours_of_sun) }}" + icon: "{{ nextion.icons.weather.sun }}" + - name: thunderstorm_probability + visibility: "{{ is_number(thunderstorm_probability) }}" + value: "{{ (thunderstorm_probability | round(0) ~ weather_units.thunderstorm_probability) if is_number(thunderstorm_probability) }}" + icon: "{{ nextion.icons.weather.lightning }}" + - name: precipitation + visibility: "{{ is_number(precipitation) or is_number(precipitation_probability) }}" + value: > + {{ (precipitation | round(0) ~ ' ' ~ weather_units.precipitation) if is_number(precipitation) }} + {{ '-' if is_number(precipitation) and is_number(precipitation_probability) }} + {{ (precipitation_probability | round(0) ~ weather_units.precipitation_probability) if is_number(precipitation_probability) }} + icon: "{{ nextion.icons.weather.rain }}" + - name: uv_index + visibility: "{{ is_number(uv_index) }}" + value: > + {{ (state_attr(accuweather_sensor_prefix ~ 'uv_index' ~ accuweather_sensor_sufix, 'level') | default(None) ~ ': ') if weather_type == 'AccuWeather' }} + {{ (uv_index | round(0) ~ weather_units.uv_index) if is_number(uv_index) }} + icon: "{{ nextion.icons.weather.protect }}" + - name: wind_speed + visibility: "{{ is_number(wind_speed) }}" + value: "{{ (wind_speed | round(0) ~ ' ' ~ weather_units.wind_speed) if is_number(wind_speed) }}" + icon: "{{ nextion.icons.weather.wind }}" + - name: pressure + visibility: "{{ is_number(pressure) }}" + value: "{{ (pressure | round(0) ~ ' ' ~ weather_units.pressure) if is_number(pressure) }}" + icon: "{{ nextion.icons.weather.gauge }}" + + ##### Display weather PIC when available + - if: "{{ condition not in ['unknown', None] }}" + then: + - service: "{{ nextion.commands.printf }}" + data: + cmd: "{{ page_name }}.weather_icon.pic={{ nextion.pics.weather[states(weather_entity) | default('unavailable') if weather_entity is string else 'unavailable'] | default(None) if condition == 'unknown' and page_name == nextion.pages.weatherpages[0] else nextion.pics.weather[condition] | default(None) }}" + continue_on_error: true + - *delay-default + + ##### Display temperature min/max when available + - variables: + temperature_string: > + {{ (temp_min | round(0) ~ temperature_units) if is_number(temp_min) }} + {{ '/' if is_number(temp_min) and is_number(temp_max) and temp_min != temp_max }} + {{ (temp_max | round(0) ~ temperature_units) if is_number(temp_max) and temp_min != temp_max }} + - if: "{{ (is_number(temp_min) or is_number(temp_max)) and temperature_string is string and temperature_string | length > 0 }}" + then: + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ page_name }}.temperature" ### Temperature MIN/MAX ### + message: "{{ temperature_string }}" + continue_on_error: true + - *delay-default + + ##### fields 1 to 5 (Parameters) ##### + - repeat: + for_each: "{{ (parameters | selectattr('visibility', 'eq', true) | list)[:5] }}" + sequence: + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ page_name }}.value0{{ repeat.index }}" + message: "{{ repeat.item.value }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ page_name }}.value0{{ repeat.index }}_icon" + message: "{{ repeat.item.icon }}" + continue_on_error: true + - *delay-default + else: &forecast_unavailable + - service: "{{ nextion.commands.text_printf }}" + data: + component: "{{ page_name }}.value01" + message: "{{ mui[language].unavailable }}" + continue_on_error: true + - *delay-default + else: *forecast_unavailable + + ## PAGE NOTIFICATION ## + - alias: Notification page + conditions: "{{ nspanel_event.page == nextion.pages.notification }}" + sequence: + - service: "{{ nextion.commands.text_printf }}" + data: + component: notification.notifi_text01 + message: "{{ states(notification_text) | default(mui[language].unavailable) if notification_text is string else mui[language].unavailable }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: notification.notifi_label + message: "{{ states(notification_label) | default(mui[language].unavailable) if notification_label is string else mui[language].unavailable }}" + continue_on_error: true + + ## PAGE QR Code ## + - alias: QRCode page + conditions: "{{ nspanel_event.page == nextion.pages.qrcode }}" + sequence: + - variables: + qrcode_label: !input "qrcode_label" + qrcode_value: !input "qrcode_value" + - if: "{{ qrcode_label | length > 0 }}" + then: + - service: "{{ nextion.commands.text_printf }}" + data: + component: "qrcode_label" + message: "{{ qrcode_label }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: "qrcode_value" + message: "{{ qrcode_value }}" + continue_on_error: true + + ## PAGE SETTINGS ## + #- alias: Settings page + # conditions: "{{ nspanel_event.page == nextion.pages.settings }}" + # sequence: + + ## PAGE BOOT ## + #- alias: Boot page + # conditions: "{{ nspanel_event.page == nextion.pages.boot }}" + # sequence: + + ## PAGE SCREENSAVER ## + #- alias: Screensaver page + # conditions: "{{ nspanel_event.page == nextion.pages.screensaver }}" + # sequence: + + - alias: Page close # general + conditions: '{{ nspanel_event.component == "close" and nspanel_event.value == "release" }}' sequence: - - service: "{{ nextion.commands.text_printf }}" + - *variables-settings_entity + - service: "{{ nextion.commands.printf }}" data: - component: notification.notifi_text01 - message: "{{ states(notification_text) | default(mui[language].unavailable) if notification_text is string else mui[language].unavailable }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: notification.notifi_label - message: "{{ states(notification_label) | default(mui[language].unavailable) if notification_label is string else mui[language].unavailable }}" + cmd: "page {{ settings_entity_dict.page if settings_entity_dict.page is defined else nextion.pages.home }}" continue_on_error: true - ## PAGE QR Code ## - - alias: QRCode page - conditions: "{{ trigger.event.data.new_state.state == nextion.pages.qrcode }}" + - alias: lightsetting # rgb_color, brightness, color_temp + conditions: '{{ nspanel_event.component in ["rgb_color", "brightness_pct", "color_temp"] }}' sequence: - - variables: - qrcode_label: !input "qrcode_label" - qrcode_value: !input "qrcode_value" - - if: "{{ qrcode_label | length > 0 }}" + - *variables-settings_entity + - service: light.turn_on + data: + entity_id: "{{ settings_entity_dict.entity }}" + "{{ nspanel_event.component }}": "{{ nspanel_event.value }}" + continue_on_error: true + + - alias: coversetting position + conditions: '{{ nspanel_event.component == "cover_position" }}' + sequence: + - *variables-settings_entity + - service: "cover.set_cover_position" + data: + entity_id: "{{ settings_entity_dict.entity }}" + position: "{{ nspanel_event.value }}" + continue_on_error: true + + - alias: coversetting open close stop + conditions: '{{ nspanel_event.component in ["open_cover", "close_cover", "stop_cover"] }}' + sequence: + - *variables-settings_entity + - service: "cover.{{ nspanel_event.component }}" + data: + entity_id: "{{ settings_entity_dict.entity }}" + continue_on_error: true + + - alias: climate hotwater + conditions: '{{ nspanel_event.component == "hotwater" and nspanel_event.value == "release" }}' + sequence: + - service: >- + {% if hotwatercharge is match 'switch.' %} + switch.toggle + {% elif hotwatercharge is match 'input_boolean.' %} + input_boolean.toggle + {% endif %} + data: + entity_id: "{{ hotwatercharge }}" + continue_on_error: true + + - alias: climate heating + conditions: '{{ nspanel_event.component == "heating" and nspanel_event.value == "release" }}' + sequence: + - *variables-settings_entity + - if: "{{ settings_entity_dict.entity is string and states(settings_entity_dict.entity) == 'off' }}" then: - - service: "{{ nextion.commands.text_printf }}" + - service: climate.turn_on data: - component: "qrcode_label" - message: "{{ qrcode_label }}" + entity_id: "{{ settings_entity_dict.entity }}" continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" + else: + - service: climate.turn_off + data: + entity_id: "{{ settings_entity_dict.entity }}" + continue_on_error: true + + - alias: climate increasetemp decreasetemp + conditions: '{{ nspanel_event.component in ["decreasetemp", "increasetemp"] and nspanel_event.value == "release" }}' + sequence: + - *variables-settings_entity + - if: "{{ settings_entity_dict.entity is string and states(settings_entity_dict.entity) != 'off' }}" + then: + - variables: + delta: "{{ +0.5 if nspanel_event.component == 'increasetemp' else -0.5 }}" + - if: "{{ climate_optimistic == true }}" ## TODO - remove from here + then: + - variables: + current_setpoint: "{{ states(display_target_temperature) | default('unavailable') if display_target_temperature is string else 'unavailable' }}" + - if: "{{ is_number(current_setpoint) }}" + then: + - service: "{{ nextion.commands.thermostat_cycle }}" + data: + value: "{{ (current_setpoint + delta) | round(1) }}" + continue_on_error: true + else: + - variables: + current_setpoint: "{{state_attr(settings_entity_dict.entity, 'temperature') | default('unavailable') if settings_entity_dict.entity is string else 'unavailable' }}" + - if: "{{ is_number(current_setpoint) }}" + then: + - service: climate.set_temperature + data: + entity_id: "{{ settings_entity_dict.entity }}" + #hvac_mode: 'heat' + temperature: "{{ (current_setpoint + delta) | round(1) }}" + continue_on_error: true + + - alias: climate climateslider + conditions: '{{ nspanel_event.component == "climateslider" }}' + sequence: + - *variables-settings_entity + - if: "{{ settings_entity_dict.entity is string and states(settings_entity_dict.entity) != 'off' }}" + then: + - variables: + climateslider: "{{ nspanel_event.value | int(-1) }}" + new_setpoint: "{{ (13.0 + (climateslider * 0.5)) if climateslider >= 0 and climateslider <= 27 }}" + - if: "{{ climate_optimistic == true }}" ## TODO - remove from here + then: + - service: "{{ nextion.commands.thermostat_cycle }}" + data: + value: "{{ new_setpoint }}" + continue_on_error: true + else: + - service: climate.set_temperature + data: + entity_id: "{{ settings_entity_dict.entity }}" + #hvac_mode: 'heat' + temperature: "{{ new_setpoint }}" + continue_on_error: true + + - alias: Button page - Button press + conditions: + - "{{ nspanel_event.page in nextion.pages.buttonpages }}" + - "{{ nspanel_event.value == 'press' }}" + sequence: + - wait_template: > + {% set button_wait = states(nspanelevent) %} + {% set button_wait = button_wait | from_json if button_wait is string and button_wait not in ["unavailable", "unknown", None] else { "page": "unknown", "component": "unknown", "value": "unknown" } %} + {{ + button_wait.page == nspanel_event.page and + button_wait.component == nspanel_event.component and + button_wait.value == 'release' + }} + timeout: + seconds: 1 + continue_on_timeout: true + - *variables-page_buttons + - variables: + ##### Entity - Page Button - Toggle Entity ##### + button_wait: '{{ states(nspanelevent) if nspanelevent is string and states(nspanelevent) not in ["unavailable", "unknown", None] else { "page": "unknown", "component": "unknown", "value": "unknown" } }}' + last_click_button: "{{ button_pages_buttons | selectattr('page', 'defined') | selectattr('page', 'eq', nspanel_event.page) | selectattr('component', 'defined') | selectattr('component', 'eq', nspanel_event.component) | list }}" + - condition: "{{ last_click_button | count >= 0 }}" + - if: "{{ not wait.completed }}" + then: # Long press + - service: "{{ nextion.commands.set_settings_entity }}" + data: + entity: "{{ last_click_button[0] }}" + continue_on_error: true + else: # Short press + - variables: + last_click_button: "{{ last_click_button[0] }}" + entity_domain: "{{ (last_click_button.entity.split('.')[0] | default('unknown')) if last_click_button.entity is string and last_click_button.entity | length > 0 and last_click_button.entity.split('.') | count > 0 else 'unknown' }}" + - condition: "{{ entity_domain not in ['unknown', 'person', 'binary_sensor', 'sensor'] }}" + - if: "{{ entity_domain == 'climate' }}" + then: + - service: "{{ nextion.commands.set_settings_entity }}" + data: + entity: "{{ last_click_button }}" + continue_on_error: true + else: + - if: "{{ last_click_button.confirm }}" + then: + - variables: + btn_entity_name: >- + {%- if state_attr(last_click_button.entity, 'friendly_name') != None -%} {{ state_attr(last_click_button.entity, 'friendly_name') }} + {%- elif state_attr(last_click_button.entity, 'name') != None -%} {{ state_attr(last_click_button.entity, 'name') }} + {%- else -%} 'unknown' + {%- endif -%} + #### turn on switch confirmation_message + - service: switch.turn_on + data: + entity_id: "{{ confirmation_message }}" + continue_on_error: true + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.notification }}" + continue_on_error: true + - service: "{{ nextion.commands.text_printf }}" + data: + component: notification.notifi_text01 + message: "{{ btn_entity_name }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.text_printf }}" + data: + component: notification.notifi_label + message: "{{ mui[language].please_confirm }}" + continue_on_error: true + - wait_template: > + {% set notification_answer = states(nspanelevent) %} + {% set notification_answer = notification_answer | from_json if notification_answer is string and notification_answer not in ["unavailable", "unknown", None] else { "page": "unknown", "component": "unknown", "value": "unknown" } %} + {{ notification_answer.component in ["accept", "clear", "homepage"] }} + timeout: + seconds: 10 + continue_on_timeout: true + - variables: + notification_answer: '{{ states(nspanelevent) if nspanelevent is string and states(nspanelevent) not in ["unavailable", "unknown", None] else { "page": "unknown", "component": "unknown", "value": "unknown" } }}' + - choose: + - conditions: '{{ notification_answer.component == "accept" }}' + sequence: + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nspanel_event.page }}" + continue_on_error: true + - service: switch.turn_off + data: + entity_id: "{{ confirmation_message }}" + continue_on_error: true + - &service-button_changed + service: >- + {% if entity_domain in ['light', 'switch', 'cover', 'input_boolean', 'automation', 'fan'] %} + {{ entity_domain }}.toggle + {% elif entity_domain in ['button', 'input_button'] %} + {{ entity_domain }}.press + {% elif entity_domain in ['scene', 'script'] %} + {{ entity_domain }}.turn_on + {% else %} + homeassistant.update_entity + {% endif %} + data: + entity_id: "{{ last_click_button.entity }}" + continue_on_error: true + - conditions: "{{ notification_answer.component == 'clear' }}" + sequence: + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nspanel_event.page }}" + continue_on_error: true + - service: switch.turn_off + data: + entity_id: "{{ confirmation_message }}" + continue_on_error: true + - conditions: '{{ notification_answer.component == "homepage" }}' + sequence: + - service: switch.turn_off + data: + entity_id: "{{ confirmation_message }}" + continue_on_error: true + default: + - service: switch.turn_off + data: + entity_id: "{{ confirmation_message }}" + continue_on_error: true + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.home }}" + continue_on_error: true + else: + - *service-button_changed + + - alias: Jump to climate page + conditions: + - "{{ nspanel_event.page == nextion.pages.home }} " + - '{{ nspanel_event.component == "climate" }}' + - '{{ nspanel_event.value == "release" }}' + - "{{ climate | length > 0 }} " + sequence: + - service: "{{ nextion.commands.set_settings_entity }}" data: - component: "qrcode_value" - message: "{{ qrcode_value }}" + entity: "{{ dict(nspanel_event.items(), entity=climate, name=state_attr(climate, 'friendly_name')) }}" continue_on_error: true - ## PAGE SETTINGS ## - #- alias: Settings page - # conditions: "{{ trigger.event.data.new_state.state == nextion.pages.settings }}" - # sequence: + - alias: Jump to weather page + conditions: + - "{{ nspanel_event.page == nextion.pages.home }}" + - '{{ nspanel_event.component == "weather" }}' + sequence: + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.weatherpages[0] }}" + continue_on_error: true - ## PAGE BOOT ## - #- alias: Boot page - # conditions: "{{ trigger.event.data.new_state.state == nextion.pages.boot }}" - # sequence: + - alias: Jump to QR code page + conditions: + - "{{ qrcode_enabled == true }}" + - "{{ nspanel_event.page == nextion.pages.home }}" + - '{{ nspanel_event.component == "button05" }}' + sequence: + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.qrcode }}" + continue_on_error: true + + - alias: Jump to entity page + conditions: + - "{{ entitypages_enabled == true }}" + - "{{ nspanel_event.page == nextion.pages.home }}" + - '{{ nspanel_event.component == "button06" }}' + sequence: + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.entitypages[0] }}" + continue_on_error: true + + - alias: Jump to notification page + conditions: + - "{{ nspanel_event.page == nextion.pages.home }}" + - '{{ nspanel_event.component == "button04" }}' + - "{{ notification_text is string and states(notification_text) | length > 0 }}" + sequence: + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.notification }}" + continue_on_error: true + + - alias: Show button - Notification clear + conditions: + - "{{ nspanel_event.page == nextion.pages.notification }}" + - '{{ nspanel_event.component == "clear" }}' + - "{{ confirmation_message is string and states(confirmation_message) | default('unavailable') != 'on' }}" + sequence: + - service: switch.turn_off + data: + entity_id: "{{ notification_unread }}" + continue_on_error: true + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.home }}" + continue_on_error: true + + - alias: Show button - Notification accept + conditions: + - "{{ nspanel_event.page == nextion.pages.notification }}" + - '{{ nspanel_event.component == "accept" }}' + - "{{ confirmation_message is string and states(confirmation_message) | default('unavailable') != 'on' }}" + sequence: + - service: switch.turn_off + data: + entity_id: "{{ notification_unread }}" + continue_on_error: true + - service: "{{ nextion.commands.notification_clear }}" + data: {} + continue_on_error: true + - service: "{{ nextion.commands.printf }}" + data: + cmd: "page {{ nextion.pages.home }}" + continue_on_error: true - ## PAGE SCREENSAVER ## - #- alias: Screensaver page - # conditions: "{{ trigger.event.data.new_state.state == nextion.pages.screensaver }}" - # sequence: ##### BOOT NSPANEL - automation reload ##### - alias: Automation reloaded @@ -5159,15 +5516,15 @@ action: sequence: - choose: ## PAGE HOME ## - - conditions: "{{ nextion.pages.current == nextion.pages.home }}" + - conditions: "{{ nspanel_event.page == nextion.pages.home }}" sequence: *refresh_page_home ## PAGE BUTTON PAGES 01 - 04 ## - - conditions: "{{ nextion.pages.current in nextion.pages.buttonpages }}" + - conditions: "{{ nspanel_event.page in nextion.pages.buttonpages }}" sequence: *refresh_page_buttonpage ## ENTITY PAGES ## - - conditions: "{{ nextion.pages.current in nextion.pages.entitypages }}" + - conditions: "{{ nspanel_event.page in nextion.pages.entitypages }}" sequence: *refresh-entity_pages ##### UPDATE BUTTONS AND PAGES - button page / lightsettings page / coversettings page ##### @@ -5207,432 +5564,45 @@ action: - current_state_entity30 - current_state_entity31 - current_state_entity32 - - "{{ nextion.pages.current in nextion.pages.buttonpages and trigger.to_state.state not in ['unavailable', 'unknown'] }}" + - "{{ trigger.to_state.state not in ['unavailable', 'unknown'] }}" sequence: - - *variables-page_buttons - - variables: - buttonpage: "{{ nextion.pages.current }}" - - repeat: - for_each: "{{ button_pages_buttons | selectattr('component', 'defined') | selectattr('component', 'match', buttonpage) | selectattr('entity', 'defined') | selectattr('entity', 'eq', trigger.entity_id) | list }}" - sequence: *display-button_page_button - ##### release button/scene (stateless) ##### - - if: "{{ trigger.to_state.entity_id is match 'button.' or trigger.to_state.entity_id is match 'input_button.' or trigger.to_state.entity_id is match 'scene.' }}" - then: - - delay: - milliseconds: "1000" - - ##### SHORT PRESS BUTTON PAGE - toggle enities ##### - - alias: Button page - Short press - conditions: - - condition: trigger - id: short_press - - "{{ nextion.pages.current in nextion.pages.buttonpages }}" - sequence: - - *variables-page_buttons - - variables: - ##### Entity - Page Button - Toggle Entity ##### - last_click_state: "{{ states(last_click) | default('unavailable') if last_click is string else 'unavailable' }}" - last_click_coordinates: "{{ last_click_state.replace('releasebuttonpage', '').split('button') if last_click_state not in ['unavailable', 'unknown', None] else None }}" - last_click_entity_index: "{{ (last_click_coordinates[0] | int(-99) -1)*8 + last_click_coordinates[1] | int(-99) - 1 if last_click_coordinates and last_click_coordinates | count >= 1 else -1 }}" - - condition: "{{ last_click_entity_index >= 0 }}" - - variables: - last_click_button: "{{ button_pages_buttons[last_click_entity_index] | default([]) }}" - entity_short: "{{ last_click_button.entity | default('unavailable') if last_click_button and last_click_button.entity is defined }}" - entity_domain: "{{ (entity_short.split('.')[0] | default('unknown')) if entity_short is string and entity_short | length > 0 and entity_short.split('.') | count > 0 else 'unknown' }}" - - condition: "{{ entity_domain not in ['unknown', 'person', 'binary_sensor', 'sensor'] }}" - - if: "{{ entity_domain == 'climate' }}" - then: - - variables: - entity_long: "{{ entity_short }}" - entity_short_state: "{{ states(entity_short) | default('unavailable') if entity_short is string else 'unavailable' }}" - entity_long_name: "{{ entity_short if entity_short_state in ['unavailable', 'unknown'] else state_attr(entity_short, 'friendly_name') | default(mui[language].no_name) }}" - entity_back: "{{ nextion.pages.current }}" - - service: "{{ nextion.commands.set_settings_entity }}" - data: - entity: "{{ entity_long }},{{ entity_back }},{{ entity_long_name }}" - continue_on_error: true - else: - - if: "{{ last_click_button.confirm }}" - then: - - variables: - buttonpage: "{{ nextion.pages.current }}" - btn_entity_name: >- - {%- if state_attr(entity_short, 'friendly_name') != None -%} {{ state_attr(entity_short, 'friendly_name') }} - {%- elif state_attr(entity_short, 'name') != None -%} {{ state_attr(entity_short, 'name') }} - {%- else -%} 'unknown' - {%- endif -%} - #### turn on switch confirmation_message - - service: switch.turn_on - data: - entity_id: "{{ confirmation_message }}" - continue_on_error: true - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.notification }}" - continue_on_error: true - - service: "{{ nextion.commands.text_printf }}" - data: - component: notification.notifi_text01 - message: "{{ btn_entity_name }}" - continue_on_error: true - - *delay-default - - service: "{{ nextion.commands.text_printf }}" - data: - component: notification.notifi_label - message: "{{ mui[language].please_confirm }}" - continue_on_error: true - - wait_template: "{{ is_state(last_click, ['notificationacceptrelease', 'notificationclearrelease', 'homepage']) }}" - timeout: - seconds: 10 - continue_on_timeout: true - - choose: - - conditions: "{{ is_state(last_click, 'notificationacceptrelease') }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ buttonpage }}" - continue_on_error: true - - service: switch.turn_off - data: - entity_id: "{{ confirmation_message }}" - continue_on_error: true - - &service-button_changed - service: >- - {% if entity_domain in ['light', 'switch', 'cover', 'input_boolean', 'automation', 'fan'] %} - {{ entity_domain }}.toggle - {% elif entity_domain in ['button', 'input_button'] %} - {{ entity_domain }}.press - {% elif entity_domain in ['scene', 'script'] %} - {{ entity_domain }}.turn_on - {% else %} - homeassistant.update_entity - {% endif %} - data: - entity_id: "{{ entity_short }}" - continue_on_error: true - - conditions: "{{ is_state(last_click, 'notificationclearrelease') }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ buttonpage }}" - continue_on_error: true - - service: switch.turn_off - data: - entity_id: "{{ confirmation_message }}" - continue_on_error: true - - conditions: "{{ is_state(last_click, 'homepage') }}" - sequence: - - service: switch.turn_off - data: - entity_id: "{{ confirmation_message }}" - continue_on_error: true - default: - - service: switch.turn_off - data: - entity_id: "{{ confirmation_message }}" - continue_on_error: true - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.home }}" - continue_on_error: true - else: - - *service-button_changed - - ##### LONG PRESS BUTTON PAGE - save entity for settings pages ##### - - alias: Button page - Long press - conditions: - - condition: trigger - id: long_press - - "{{ nextion.pages.current in nextion.pages.buttonpages }}" - sequence: - - *variables-page_buttons - - variables: - last_click_state: "{{ trigger.to_state.state }}" - last_click_coordinates: "{{ last_click_state.replace('pressbuttonpage', '').split('button') }}" - last_click_entity_index: "{{ (last_click_coordinates[0] | int(-99) -1)*8 + last_click_coordinates[1] | int(-99) - 1 }}" - last_click_button: "{{ button_pages_buttons[last_click_entity_index] }}" - ##### Long Press Entity ##### - entity_long: "{{ last_click_button.entity }}" - entity_domain: "{{ (entity_long.split('.')[0] | default('unknown')) if entity_long | length > 0 else 'unknown' }}" - ##### Long Press Entity Name ##### - entity_long_name: "{{ last_click_button.name }}" - ##### Long Press Entity Icon ##### - entity_long_icon: "{{ (nextion.icons.all[last_click_button.icon.split(':')[1]] | default('\U0000E2D5') if last_click_button.icon.split(':') | count > 0 else last_click_button.icon) if last_click_button.icon is defined and last_click_button.icon is string and last_click_button.icon | length > 0 else '\U0000E2D5' }}" - ##### Long Press Entity Icon Color ##### - entity_long_icon_color: "{{ last_click_button.icon_color_rgb if is_number(last_click_button.icon_color_rgb) else ((last_click_button.icon_color_rgb[0] //(2**3)) *(2**11))+((last_click_button.icon_color_rgb[1] //(2**2)) *(2**5))+(last_click_button.icon_color_rgb[2] //(2**3)) }}" - ##### Current Page ##### - entity_back: "{{ nextion.pages.current }}" - - service: "{{ nextion.commands.set_settings_entity }}" - data: - entity: "{{ entity_long }},{{ entity_back }},{{ entity_long_name }},{{ entity_long_icon }},{{ entity_long_icon_color }}" - continue_on_error: true - - ##### LASTCLICK_LIGHTSETTINGS - changes on page lightsettings ##### - - alias: Changes on page lightsettings - conditions: - - condition: trigger - id: light_settings - - "{{ nextion.pages.current == nextion.pages.light }}" - sequence: - - *variables-settings_entity - - choose: - ##### Page Lightsettings - Brightness Slider MOVE ##### - - conditions: - #- '{{ trigger.event.data.new_state.state is match "brightness\d+" and trigger.event.data.new_state.state == states(last_click_lightsettings) }}' - - '{{ trigger.event.data.new_state.state is match "brightness\d+" }}' + - alias: choose current page + choose: + - alias: buttonpage + conditions: '{{ nspanel_event.page in nextion.pages.buttonpages }}' sequence: - - service: light.turn_on - data: - entity_id: "{{ entity_long }}" - brightness: "{{ (trigger.event.data.new_state.state | replace('brightness','') | int / 100 * 255) | round(0) }}" - continue_on_error: true - #### wird nicht mehr benötigt, da es im nextion editor nun direkt gemacht wird - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ nextion.commands.text_printf }}" - # data: - # component: lightsettings.light_value - # message: "{{ (trigger.event.data.new_state.state | replace('brightness','') | int * 100 /255) | round(0) }}%' - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ nextion.commands.text_printf }}" - # data: - # component: lightsettings.light_value_2 - # message: "{{ (trigger.event.data.new_state.state | replace('brightness','') | int * 100 /255) | round(0) }}%' - - # value_template: "{{ states(last_click_lightsettings) is match 'brightness\d+' }}" - # sequence: - # - service: light.turn_on - # data: - # entity_id: "{{ entity_long }}" - # brightness: "{{ states(last_click_lightsettings) | replace('brightness','') | int }}" - # - service: "{{ nextion.commands.text_printf }}" - # data: - # component: lightsettings.light_value - # message: "{{ (states(last_click_lightsettings) | replace('brightness','') | int * 100 /255) | round(0) }}" - - - ##### Page Lightsettings - color_Temp Slider MOVE ##### - - conditions: - - '{{ trigger.event.data.new_state.state is match "colortemp\d+" and trigger.event.data.new_state.state == (states(last_click_lightsettings) | default("unavailable") if last_click_lightsettings is string else "unavailable") }}' - sequence: - - service: light.turn_on - data: - entity_id: "{{ entity_long }}" - color_temp: "{{ trigger.event.data.new_state.state | replace('colortemp','') | int }}" - continue_on_error: true - #### wird nicht mehr benötigt, da es im nextion editor nun direkt gemacht wird - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ nextion.commands.text_printf }}" - # data: - # component: lightsettings.temp_value - # message: "{{ trigger.event.data.new_state.state | replace('colortemp','') | int }}" - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ nextion.commands.text_printf }}" - # data: - # component: lightsettings.temp_value_2 - # message: "{{ trigger.event.data.new_state.state | replace('colortemp','') | int }}" - - ##### Page Lightsettings - Color RGB Slider MOVE ##### - - conditions: - - '{{ trigger.event.data.new_state.state is match "\d+,\d+,\d+" }}' - sequence: - - service: light.turn_on - data: - entity_id: "{{ entity_long }}" - rgb_color: "{{ trigger.event.data.new_state.state.split(',') }}" - continue_on_error: true - - ##### Page Lightsettings - Close Lightsetting Page ##### - - conditions: - - "{{ trigger.event.data.new_state.state == 'releaselightsettingsclose' }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ entity_back }}" - continue_on_error: true - - ##### LASTCLICK_COVERSETTINGS - changes on page coversettings ##### - - alias: Changes on page coversettings - conditions: - - condition: trigger - id: cover_settings - - "{{ nextion.pages.current == nextion.pages.cover }}" - sequence: - - *variables-settings_entity - - choose: - ##### Page Coversettings - Cover Slider MOVE ##### - - conditions: - # - "{{ trigger.event.data.new_state.state is match 'coverposition\d+' and trigger.event.data.new_state.state == states(last_click_coversettings) }}" - - '{{ trigger.event.data.new_state.state is match "coverposition\d+" }}' - sequence: - - service: cover.set_cover_position - data: - entity_id: "{{ entity_long }}" - position: "{{ trigger.event.data.new_state.state | replace('coverposition','') | int }}" - continue_on_error: true - #### wird nicht mehr benötigt, da es im nextion editor nun direkt gemacht wird - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ nextion.commands.text_printf }}" - # data: - # component: coversettings.cover_value - # message: "{{ trigger.event.data.new_state.state | replace('coverposition','') | int }} %' - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ nextion.commands.text_printf }}" - # data: - # component: coversettings.cover_value_2 - # message: "{{ trigger.event.data.new_state.state | replace('coverposition','') | int }} %' - - ##### Page Coversettings - Cover CLOSE Button ##### - - conditions: - - "{{ trigger.event.data.new_state.state == 'cover_close_press' }}" - sequence: - - service: cover.close_cover - data: - entity_id: "{{ entity_long }}" - continue_on_error: true - - ##### Page Coversettings - Cover OPEN Button ##### - - conditions: - - "{{ trigger.event.data.new_state.state == 'cover_open_press' }}" - sequence: - - service: cover.open_cover - data: - entity_id: "{{ entity_long }}" - continue_on_error: true - - ##### Page Coversettings - Cover STOP Button ##### - - conditions: - - "{{ trigger.event.data.new_state.state == 'cover_stop_press' }}" - sequence: - - service: cover.stop_cover - data: - entity_id: "{{ entity_long }}" - continue_on_error: true - - ##### Page Coversettings - Close Coversettings Page ##### - - conditions: - - "{{ trigger.event.data.new_state.state == 'releasecoversettingsclose' }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ entity_back }}" - continue_on_error: true - - ##### LASTCLICK_CLIMATESETTINGS - changes on page climatesettings ##### - - alias: Changes on page climatesettings - conditions: - - condition: trigger - id: climate_settings - - "{{ nextion.pages.current == nextion.pages.climate }}" - sequence: - - *variables-settings_entity - - variables: - entity_long_state: "{{ states(entity_long) | default('unavailable') if entity_long is string else 'unavailable' }}" - - choose: - ##### Page Climatesettings - hotwater ##### - - conditions: "{{ trigger.event.data.new_state.state == 'releasehotwater' }}" - sequence: - - service: >- - {% if hotwatercharge is match 'switch.' %} - switch.toggle - {% elif hotwatercharge is match 'input_boolean.' %} - input_boolean.toggle - {% endif %} - data: - entity_id: "{{ hotwatercharge }}" - continue_on_error: true - - ##### Page Climatesettings - heating ##### - - conditions: "{{ trigger.event.data.new_state.state == 'releaseheating' }}" - sequence: - - if: "{{ entity_long_state == 'off' }}" + - *variables-page_buttons + - repeat: + for_each: "{{ button_pages_buttons | selectattr('page', 'defined') | selectattr('page', 'eq', nspanel_event.page) | selectattr('component', 'defined') | selectattr('component', 'eq', nspanel_event.component) | selectattr('entity', 'defined') | selectattr('entity', 'eq', trigger.entity_id) | list }}" + sequence: *display-button_page_button + ##### release button/scene (stateless) ##### + - if: "{{ trigger.to_state.entity_id is match 'button.' or trigger.to_state.entity_id is match 'input_button.' or trigger.to_state.entity_id is match 'scene.' }}" then: - - service: climate.turn_on ############ - data: - entity_id: "{{ entity_long }}" - continue_on_error: true - # - service: climate.set_temperature - # data: - # entity_id: !input climate - # hvac_mode: 'heat' - # temperature: "{{ state_attr(climate, 'temperature') }}" - else: - - service: climate.turn_off ############ - data: - entity_id: "{{ entity_long }}" - continue_on_error: true - # - service: climate.set_temperature - # data: - # entity_id: !input climate - # hvac_mode: 'off' - # temperature: "{{ state_attr(climate, 'temperature') }}" - - ##### Page Climatesettings - increase/decrease temp ##### - - conditions: "{{ trigger.event.data.new_state.state in [ 'releaseincreasetemp', 'releasedecreasetemp'] }}" + - delay: + milliseconds: "1000" + - alias: page climate + conditions: '{{ nspanel_event.page == nextion.pages.climate and trigger.entity_id is match "climate." }}' sequence: - - variables: - delta: "{{ +0.5 if trigger.event.data.new_state.state == 'releaseincreasetemp' else -0.5 }}" - - if: "{{ entity_long_state != 'off' }}" - then: - - if: "{{ climate_optimistic == true }}" ## TODO - remove from here - then: - - variables: - current_setpoint: "{{ states(display_target_temperature) | default('unavailable') if display_target_temperature is string else 'unavailable' }}" - - if: "{{ is_number(current_setpoint) }}" - then: - - service: "{{ nextion.commands.thermostat_cycle }}" - data: - value: "{{ (current_setpoint + delta) | round(1) }}" - continue_on_error: true - else: - - variables: - current_setpoint: "{{state_attr(entity_long, 'temperature') | default('unavailable') if entity_long is string else 'unavailable' }}" - - if: "{{ is_number(current_setpoint) }}" - then: - - service: climate.set_temperature - data: - entity_id: "{{ entity_long }}" - #hvac_mode: 'heat' - temperature: "{{ (current_setpoint + delta) | round(1) }}" - continue_on_error: true - - ##### Page Climatesettings - climateslider ##### - - conditions: '{{ trigger.event.data.new_state.state is match "climateslider\d+" and trigger.event.data.new_state.state == states(last_click_climatesettings) }}' - sequence: - - if: "{{ entity_long_state != 'off' }}" + - *variables-settings_entity + - if: "{{ trigger.entity_id == settings_entity_dict.entity }}" then: - variables: - climateslider: "{{ trigger.event.data.new_state.state | replace('climateslider','') | int(-1) }}" - new_setpoint: "{{ (13.0 + (climateslider * 0.5)) if climateslider >= 0 and climateslider <= 27 }}" - - if: "{{ climate_optimistic == true }}" ## TODO - remove from here - then: - - service: "{{ nextion.commands.thermostat_cycle }}" - data: - value: "{{ new_setpoint }}" - continue_on_error: true - else: - - service: climate.set_temperature - data: - entity_id: "{{ entity_long }}" - #hvac_mode: 'heat' - temperature: "{{ new_setpoint }}" - continue_on_error: true + hvac_mode: "{{ states(settings_entity_dict.entity) | default('unavailable') if settings_entity_dict.entity is string else 'unavailable' }}" + heating_state: "{{ mui[language].climate.states.off if hvac_mode == 'off' else mui[language].climate.states.on }}" + heating_bt_pic: "{{ nextion.pics.heating.button.off if hvac_mode == 'off' else nextion.pics.heating.button.on }}" + - service: "{{ nextion.commands.text_printf }}" + data: + component: heating_state + message: "{{ heating_state }}" + continue_on_error: true + - *delay-default + - service: "{{ nextion.commands.printf }}" + data: + cmd: heating_bt_pic.pic={{ heating_bt_pic }} + continue_on_error: true - #### Page Climate - Close Climate Page ##### - - conditions: - - "{{ trigger.event.data.new_state.state == 'releaseclimateclose' }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ entity_back }}" - continue_on_error: true -##### TRIGGER - HOME PAGE ###### + ########## TRIGGER - HOME PAGE ########### ##### HOME PAGE - Values ##### - alias: Home page - Values @@ -5642,10 +5612,9 @@ action: - home_value01_state - home_value02_state - home_value03_state - - "{{ nextion.pages.current == nextion.pages.home }}" + - "{{ nspanel_event.page == nextion.pages.home }}" sequence: - *variables-home_page_values - #- *display-home_page_values - repeat: for_each: "{{ home_page_values | selectattr('entity', 'defined') | selectattr('entity', 'eq', trigger.entity_id) | list }}" sequence: @@ -5666,7 +5635,7 @@ action: - chip05_state - chip06_state - chip07_state - - "{{ nextion.pages.current == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown'] }}" + - "{{ nspanel_event.page == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown'] }}" sequence: - *variables-home_page_status_bar - repeat: @@ -5674,81 +5643,6 @@ action: sequence: - *display-home_page_status_bar - ##### JUMP TO - climate page ##### - - alias: Jump to climate page - conditions: - - condition: trigger - id: open_climate_page - - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and climate | length > 0 }} " - sequence: - - variables: - entity_long: "{{ climate }}" - entity_long_state: "{{ states(climate) | default('unavailable') if climate is string else 'unavailable' }}" - entity_long_name: "{{ climate if entity_long_state in ['unavailable', 'unknown', None] else (state_attr(climate, 'friendly_name') | default(mui[language].no_name) if climate is string else mui[language].unavailable )}}" - entity_back: "{{ nextion.pages.home }}" - - service: "{{ nextion.commands.set_settings_entity }}" - data: - entity: "{{ entity_long }},{{ entity_back }},{{ entity_long_name }}" - continue_on_error: true - - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.climate }}" - continue_on_error: true - - ##### JUMP TO - Weather Page ##### - - alias: Jump to weather page - conditions: - - condition: trigger - id: open_weather_page - - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.weatherpages[0] }}" - continue_on_error: true - - ##### JUMP TO - QR Code Page ##### - - alias: Jump to QR code page - conditions: - - condition: trigger - id: open_qrcode_page - - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and qrcode_enabled == true }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.qrcode }}" - continue_on_error: true - - ##### JUMP TO - ENTITY Page ##### - - alias: Jump to entity page - conditions: - - condition: trigger - id: open_entity_page - - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and entitypages_enabled == true }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.entitypages[0] }}" - continue_on_error: true - - ##### JUMP TO - notification ##### - - alias: Jump to notification page - conditions: - - condition: trigger - id: open_notification_page - - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and notification_text is string and states(notification_text) | length > 0 }}" - sequence: - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.notification }}" - continue_on_error: true - #### SHOW BUTTON - notification #### - alias: Show button - Notification conditions: @@ -5757,7 +5651,7 @@ action: - notification_text_state - notification_unread_state - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" + value_template: "{{ nspanel_event.page == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" sequence: - alias: "Set notifiy pic" variables: @@ -5787,43 +5681,6 @@ action: message: "{{ set_button04_icon_font }}" continue_on_error: true - ##### SHOW BUTTON - notification clear ##### - - alias: Show button - Notification clear - conditions: - - condition: trigger - id: btn_notificationclearrelease - - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.notification and confirmation_message is string and states(confirmation_message) | default('unavailable') != 'on' }}" - sequence: - - service: switch.turn_off - data: - entity_id: "{{ notification_unread }}" - continue_on_error: true - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.home }}" - continue_on_error: true - - ##### SHOW BUTTON - notification accept ##### - - alias: Show button - Notification accept - conditions: - - condition: trigger - id: btn_notificationacceptrelease - - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.notification and confirmation_message is string and states(confirmation_message) | default('unavailable') != 'on' }}" - sequence: - - service: switch.turn_off - data: - entity_id: "{{ notification_unread }}" - continue_on_error: true - - service: "{{ nextion.commands.notification_clear }}" - data: {} - continue_on_error: true - - service: "{{ nextion.commands.printf }}" - data: - cmd: "page {{ nextion.pages.home }}" - continue_on_error: true - ##### BUTTON - press ##### - alias: Button - Press conditions: @@ -5842,20 +5699,9 @@ action: - choose: - conditions: "{{ button_context.hold_select == 'Default' and button_context.entity | length > 0 }}" sequence: - - variables: - entity_long: "{{ button_context.entity }}" - button_status: "{{ states(button_context.entity) | default('unavailable') if button_context.entity is string else 'unavailable' }}" - entity_long_name: >- - {%- if button_context.name | length > 0 -%} {{ button_context.name }} - {%- elif button_status in ['unavailable', 'unknown', None] -%} {{ button_context.entity }} - {%- else -%} {{ state_attr(button_context.entity, 'friendly_name') | default(mui[language].no_name) }} - {%- endif -%} - entity_back: "{{ nextion.pages.home }}" - entity_long_icon: "{{ nextion.icons.buttons[button_context.entity.split('.')[0] if button_context.entity else '\U0000E2D5'] }}" - entity_long_icon_color: 1055 - service: "{{ nextion.commands.set_settings_entity }}" data: - entity: "{{ entity_long }},{{ entity_back }},{{ entity_long_name }},{{ entity_long_icon }},{{ entity_long_icon_color }}" + entity: "{{ button_context }}" continue_on_error: true - conditions: "{{ button_context.hold_select == 'Custom Action' and trigger.id == 'left_button_press' }}" sequence: !input left_button_hold_custom_action @@ -5888,7 +5734,7 @@ action: - left_button_state - right_button_state - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home }}" + value_template: "{{ nspanel_event.page == nextion.pages.home }}" sequence: - variables: # Hardware Button PIC @@ -5905,7 +5751,7 @@ action: - condition: trigger id: time_state - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home }}" + value_template: "{{ nspanel_event.page == nextion.pages.home }}" sequence: ### TIME Font Color ### - *delay-default @@ -5956,7 +5802,7 @@ action: - condition: trigger id: outdoortemp_state - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and is_number(trigger.event.data.new_state.state) }}" + value_template: "{{ nspanel_event.page == nextion.pages.home and is_number(trigger.event.data.new_state.state) }}" sequence: ### LABEL Outdoor Temp Font Color ### - *delay-default @@ -5979,7 +5825,7 @@ action: - condition: trigger id: indoortemp_state - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" + value_template: "{{ nspanel_event.page == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" sequence: ### LABEL Indoor Temp Font Color ### - *delay-default @@ -6002,7 +5848,7 @@ action: - condition: trigger id: nspaneltemp_state - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and is_number(trigger.event.data.new_state.state) }}" + value_template: "{{ nspanel_event.page == nextion.pages.home and is_number(trigger.event.data.new_state.state) }}" sequence: - if: "{{ indoortemp is not match 'sensor.' }}" then: @@ -6027,7 +5873,7 @@ action: - condition: trigger id: weather_state_change - condition: template - value_template: "{{ nextion.pages.current == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" + value_template: "{{ nspanel_event.page == nextion.pages.home and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" sequence: - if: "{{ outdoortemp is not match 'sensor.' }}" then: @@ -6062,7 +5908,7 @@ action: id: climate_state - "{{ trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" # - condition: template - # value_template: "{{ nextion.pages.current == nextion.pages.climate }}" + # value_template: "{{ nspanel_event.page == nextion.pages.climate }}" # - condition: template # value_template: "{{ climate_optimistic == false }}" sequence: @@ -6106,7 +5952,7 @@ action: conditions: - condition: trigger id: hotwatercharge_state - - "{{ nextion.pages.current == nextion.pages.climate }}" + - "{{ nspanel_event.page == nextion.pages.climate }}" sequence: - variables: hotw_bt_pic: "{{ nextion.pics.hvac.button[trigger.event.data.new_state.state] }}" @@ -6120,7 +5966,7 @@ action: conditions: - condition: trigger id: hotwatertemp_state - - "{{ nextion.pages.current == nextion.pages.climate and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" + - "{{ nspanel_event.page == nextion.pages.climate and trigger.event.data.new_state.state not in ['unavailable', 'unknown', None] }}" sequence: - service: "{{ nextion.commands.text_printf }}" data: diff --git a/nspanel_esphome.yaml b/nspanel_esphome.yaml index df35e12..640abef 100644 --- a/nspanel_esphome.yaml +++ b/nspanel_esphome.yaml @@ -111,6 +111,13 @@ uart: rx_pin: 17 baud_rate: ${baud_rate} id: tf_uart + # debug: + # direction: BOTH + # dummy_receiver: false + # after: + # delimiter: "\n" + # sequence: + # - lambda: UARTDebug::log_string(direction, bytes); ##### START - BUTTON CONFIGURATION ##### button: @@ -150,7 +157,7 @@ api: # password: ${api_password} services: - ##### SERVICE TO UPDATE THE HMI FILE ##### + ##### SERVICE TO UPDATE THE HMI FILE ############## - service: upload_tft then: - switch.turn_off: nextion_init @@ -407,36 +414,6 @@ globals: restore_value: true initial_value: '0' - ##### lastclick_general State ##### - - id: lastclick_general_global - type: std::string - restore_value: no - initial_value: '' - - ##### lastclick_lightsettings State ##### - - id: lastclick_lightsettings_global - type: std::string - restore_value: no - initial_value: '' - - ##### lastclick_coversettings State ##### - - id: lastclick_coversettings_global - type: std::string - restore_value: no - initial_value: '' - - ##### lastclick_climatesettings State ##### - - id: lastclick_climatesettings_global - type: std::string - restore_value: no - initial_value: '' - - ##### lastclick_currentpage State ##### - - id: currentpage_global - type: std::string - restore_value: no - initial_value: '' - ##### START - BINARY SENSOR CONFIGURATION ##### binary_sensor: @@ -659,140 +636,35 @@ text_sensor: name: ${device_name} Settings Entity id: settings_entity - ##### last click sensor, the main action variable - push to HA ##### + ##### NSPanel event sensor, the main action sensor - push to HA ##### - platform: nextion nextion_id: disp1 - name: ${device_name} Last Click - id: disp1_lastclick_general - update_interval: 50ms - component_name: lastclick + name: ${device_name} NSPanel event + id: disp1_nspanel_event + component_name: nspanelevent internal: false filters: - lambda: |- - if (strcmp(x.c_str(), id(lastclick_general_global).c_str()) != 0) { - return x; - } else { - return {}; - } + x = x.c_str(); + x.shrink_to_fit(); + return x; on_value: then: - - globals.set: - id: lastclick_general_global - value: !lambda return x; - lambda: |- id(page_timer)->execute(int(id(page_timeout).state)); - ##### last click lightsettings page, the main action variable - push to HA ##### - - platform: nextion - nextion_id: disp1 - name: ${device_name} last click lightsettings - id: disp1_lastclick_lightsettings - update_interval: 50ms - component_name: lightsetting - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(lastclick_lightsettings_global).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: lastclick_lightsettings_global - value: !lambda return x; - - lambda: |- - id(page_timer)->execute(int(id(page_timeout).state)); - - ##### last click coversettings page, the main action variable - push to HA ##### - - platform: nextion - nextion_id: disp1 - name: ${device_name} last click coversettings - id: disp1_lastclick_coversettings - update_interval: 50ms - component_name: coversetting - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(lastclick_coversettings_global).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: lastclick_coversettings_global - value: !lambda return x; - - lambda: |- - id(page_timer)->execute(int(id(page_timeout).state)); - - ##### last click climate page, the main action variable - push to HA ##### - - platform: nextion - nextion_id: disp1 - name: ${device_name} last click climatesettings - id: disp1_lastclick_climatesettings - update_interval: 50ms - component_name: climatesetting - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(lastclick_climatesettings_global).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: lastclick_climatesettings_global - value: !lambda return x; - - lambda: |- - id(page_timer)->execute(int(id(page_timeout).state)); - - ##### currentpage sensor, the main action variable - push to HA ##### - - platform: nextion - nextion_id: disp1 - name: ${device_name} currentpage - id: disp1_currentpage - update_interval: 50ms - component_name: currentpage - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(currentpage_global).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: currentpage_global - value: !lambda return x; - - lambda: |- - id(page_timer)->execute(int(id(page_timeout).state)); - - ##### touchevent sensor, Reset the page timeout ##### - platform: nextion nextion_id: disp1 #name: ${device_name} touchevent id: disp1_touchevent - update_interval: 50ms component_name: touchevent internal: true filters: - lambda: |- - static std::string touchevent_history = ""; - if (strcmp(x.c_str(), touchevent_history.c_str()) != 0) { - touchevent_history = x; - return x; - // touchevent_history = ""; - } else { - return {}; - } + x = x.c_str(); + x.shrink_to_fit(); + return x; on_value: then: - lambda: |- @@ -1007,7 +879,10 @@ script: - lambda: ESP_LOGD("nspanel", "start page-timer delay %i", int(id(page_timeout).state)); - delay: !lambda return delay *1000; - lambda: |- - if (id(disp1_currentpage).state == "home" or id(disp1_currentpage).state == "screensaver" or id(disp1_currentpage).state == "boot" or int(id(page_timeout).state) == 0) { + DynamicJsonDocument doc(1024); + deserializeJson(doc, id(disp1_nspanel_event).state); + std::string page = doc["page"]; + if (page == "home" or page == "screensaver" or page == "boot" or int(id(page_timeout).state) == 0) { ESP_LOGD("nspanel", "no page-jump"); } else { ESP_LOGD("nspanel", "timer->home"); diff --git a/nspanel_eu.HMI b/nspanel_eu.HMI index 314db184a2414384b1991f8af5b15d8aab1827a7..4e3f5371b7b8157e3e094250a6af97a120404a0b 100644 GIT binary patch delta 77688 zcmeHQ34Bw<)}NcMlokqYfkJ^$Pzo(2DbSWxma@12Eg&uwx(kK2329lPU`mKhp@2Zz zj))Lk5TB@6i(Z!pt%BftvWXii?*Urzd&pB<5K+YM%w2jXOP8bxw7%S5XYOh4&CQ%S zb7sz*^S?9K_mu}+hr}G(#2hx&`30x%j8&treGo#I{^^6ZgnMx`{7cSjhpJJuH$u!i z#}PWILWeHp`ka08FkzXT4G@dl0goDjPhg~7kfyO*oedfnwo%O?(EiFU`L&?MB@UWR)geC_$k1Q)hUATu`1KADq z`kZhB2RWy#D?~%MYgZ70$_VPpUn6J3`a*QoixlEGQVtmsn_I|VgS=Yjzt%g!ilJ{; zEk%1mNEvc{5VRXYlY^WeuULu(1I-*#q3V7?5q>&kS&QiSYAs5PAm8rgtF*f2w?m8c zJ>ly@6>~KFOU`TdX;G*4@I6w+(8^3vZ~+c-e*8Tx8U-R3uN{x$ufaJGeR5KZqTzqI zSZxa3?xnN(QJ;e=(RBC$v9%GJ9OOLf+)C7sv=?Y?q)H2W^Vi6E`By8^cknNB0IC$) zQidGFjefQ6FhsVG_@Qg&O!oAs1kHl+MO#!W%CS4;^;qHUSkn@!FdK6FEl_0UtZi5SO zkn_VE_2>bhxoiJ8E>pjE+?3U0A2Y<%Cn7}0$xq;hk|nw_sssfDiBFv6ML&_bqXcyo zRS7t~G?x4pFf zn0ED?t+Qfe_midQ94WlO2uH)eEwde<+xnG4RuV2LfDmlj;S&IV5HF$FTu-IJw z3ZIXHYZu=J`m@hvN=sEuLQxyaP_@|T6qc3u#Sdi-HoDb!uS4DVIyX(|GhC+}V)@-4 zt2d)q6Z|MJqO^Lhe6k50%jd6=dgo~Pmz=-bYeLIFoj4|~zL)d037su~YeMA^njCP} zp^3A~(Vz~(7p*i)lUa`TWRow#fNG^#eGZqSH-&3)!z`KjBD$iU2~tpwA^1UZZdX%* zvZ2o+1&teGHALk9QGtdF+{alp$!9lK)?XtJUgjwCAnkybx@s?GDF1}QahHQiH3eP1pImo&9U3<~p{rw0#)o1#> z+TQ!>^8LA{bj48bqUVS1G_6o{^ZsyV!Y!-EDUIWl3?vyOFG${yd?5L<OA4WkUB4Py+q8O9pM8O9qX7?KPV z4U-I$4O0xa8}2aNX}HTU)iBL4-H>cZG0ZT`G|V#GZJ2Gi$8fLVKEwTnIfhijT*Ev= znjzhgVaPOO8L|yIh6fDu4GRpphJ}VjhCD;Qp}?TptKJzK^vvk5;q;LaoUyC|V#N9!I>9+&_i# z$bv$3MnO(q&eEKMqR1HfK7}HKy6>UXNOi{ioYcq>^3=$}EKN>ML1D(y98GFu41AEK z%2%rj;1T@wtR)%^{4PoU zqqZhMgq3}1xJos`Tvkuo*YA3Pa@}Ar`=)_pv zTf~P=>dc3$v$#<}igk9JsXq#7BK6D{**`|Ag9A)S$}lX~6%Jujiwn;&MsV7*39*_eZP4WR@FT<( zPb$|JpI)tv9zO-h3s8~dh=WS>5*p_)kbzjaqoEzP19uxaCbdUsg>cV1;CwL2*i8m) zF;q5bpQP0;Q03>uW@>WhFDNR=DJ+bIM&wjGPKD=*?cJgsFV zFIz;y_(c2K^G;RxsBv_#T23kgf z?<M3LYuY-*=HT`p0ldqkrqpX(&76In5((7_>5>7UQ-m zF0TB8ElOfpeuX^`RHp|E<8irvT^F|4R5o3hR7PV{um_^Pv{fgODC#nGaWZ{}2=u zaON$7gd@FNAV1D;1X3L5H&f&MR%)E@Mve33)HuJB8s}f7#`({vasGE|oWD+u^S;pI zK`#ftLdp`s*=krlwkni0Kc`9bjQqClQcu6<(thu?Fky-#Ok0BaIn9Z<5`MyCelb+W zZ00<^IC_S@3obgOIb{SaDEmO&!~M#GUjFs!5rXI>y3~=^rM*D@pI{q50aF^$X5I;~ zA<<@zq^2?3p&J%$<~`6ch&FQ#Ok+fw`Ku7gX7-_U$)D1tV6d5Ch8s;(33cTai=%sj zDIrdAZw0*<>A}7JhxF}@%_G?9yET7?;U3i`)D*Y9Ab-+%;+GF>Mz=dipRD53`r$O`zJV;2(%XZv|@q23ev^`y%BoOzYFwT&|8Wv;vZlW>V?nm z1gSnE&?i86;&YPal5gWkU+%kXBJ47(I{|kdyp>R(+C|iK=`9e^( zWy0s@VBjhe=)1u@7e7A&IwjH*K<9y;!~O7^k=ZRf`%Rl`@LS> z@UVcA{{ekF-M++q`Zlyp>zn=3+iS3`Qs0_id{^oln;u+JHKbu3JDBpteo4os4PEm; zpkwABqx*DhSew={`=xI)I@bK+yGX}a7}E~fS1);}KAU~r-#EkzFPT=?17BKKe5bK) zqaM;~NCviU<0DDhpzziI-A!Id<7aRid+4KeWCr)CU{scYQ7Oh8H&8}pB^Z^d!aYC2 zU^`WyZv&fNG%#NQn_i@E0h?Yc7?s<>re7}5UF6anz|$0o7v6aTF(aED8-0G8=yVM3tN(NWe)p>B z5%z>kpXg5JkGty%hvP>Mmz-kX{-)$Urt(TjF6J&Q`eD^X z@xM&G^z14ln>=ZanPHbDmlTZ;Iu&;1Ve&pDQN5m6an#fW2NYC<=~5vc|Bawe6ToW{ zE;RR4&^a;YpABwT3Pt)mm{mX+EXdDoV32QktDhY4&+a zv$H78K1*r#x0Gh*(wcpq((Eisv(HkRJ%`flPbke!p)~slrP-4y&3=c{?9r5FzfNoR zU`n%}r8K)IrP<|_X1Av_TTf~BRV&SAqb60xxl^g_Pou1SMy*+??K5Db60KONo5?}T zm3n_ybMOF$iD56KSEfv4mEV^w;9`*{gHlchUm!~q5Csp$zitNCP%V((dP4@sZm^og z(KZTnTO1glhDBMx!sU*h5I1~Gxc^nq=f?$ldN@MA3iRY&lJ$KD=&(5Y&j63Bh~T@o zFZY}g+(R#c)hq^6n1KlWP580r2T4ENPbs-scMOFG;pFEuBk|rF2wG{RTqB>%HJQ zcoW3}YSgq4tXZHqaD1S|mAf_F*fd-c)_7tGn7OC(eTbv^Tde%?62?Mt8oEh{}_E=cEgJ$-tC-icZEeNwF||B zoNjlk3QS4t_18)cLz7E)P6DLKxkh`qo*f57={t^XTmts+K19Can=c8OE@Xx3n3~sy z>eU_lN9j8?)tCT!6^}1nD(Qmv9oB~8+PrF?8ujKRCQycpJDKi*>HZ(MW1=w(n{kOh z`{(|WbT8sQI7wjt>>sPvzzcS@V@p!_xUapi6YkTyt~+s<$KZ$i0Jy6*X-%dVuK9LV z54>k@MFo4QukkQEBj0#?Z|=dkJZABoOmFTr8u$@!d^W!rvJ`y=(^>qm0|)D1`icL0 zO98n~@N4<3Vte+kg03#9su`W}J2 z%B!%~d%?UMWqAx5+n16(1`Rb)@fbAJ2y9o6u*aaGU+K4Nn^7GTRh`XQVZdDmjrqSv z2)-Je1y2JiyJ}j+tyrzo55>XW`ua}^Ry(Np^!02hx?eKg*z)MUh)nyav*cEp4vZtY#^L`zNPqFi!8oa-j zpHY<4sCRvVs%RP9qmjB>p>~?@M(t&9H6s{s1&2R=vbr=x(ezA;m^Af%pj^D_gVL^6 zUg4Ioyo2)RyelVaUl*i@}a5oD} zUH5xGXm(cSGi2#%;`Zue9v7R$MC;Z8{3Z-wH{^H{USko1cM%W~6N7h^@EXfV2=bBR z19&+}G$yA&WK4v%)xrx&^#MV!KCu9~84t#%_&&zn{Umw;7^0nJuu?QR9)!TW2!GoE zfjsdGPsT{}UVy)e1&W0ry<8~JG_Xqhz{?%vP)$PURv`#jaXUh{2=tqG!Ft^S{rhw& z%6NSS{Jt1w^qnQWE!7c%@nXm^Y_>%AxJRP<+zYrps6BGTLcm@Of$oNYy=XG`PnRN; ziJ4M_@?4I<41f&LoLu-}&Wp!FSaO<7H=J}6oWHplQ61qvg`&amV;))Vs?iS8GWs~C zWvi>1$1a8VNlmRLi3wpU&r~>v*lEyn*EBcQqj{?fMLNzxebmUoMXMyw9fnY34E}t# zCKM~;D}8HfhbA#!w8Psc)s4buf2s(SDHZseNp=13fD094A>LKBye?E{89{Bj*wV^s zY3i&ZtM1)#{}8_3U*Dq_{j;_KOFrJUdUD;cNRbb7aAp$I7i$;R#WVArVaed%mi^sV_B5GYqJ=+dtqHvAd|p8ytFP(#uRgVsouK>WM3 zw7PzUrvMhVrnvZa(7itIrI0-+h?T$rb)#)Cx`TzWR09~XkbK_hJ_Bt@&zs4CEA$+LTKlu#mzOP_gWo=|_G^6oRK*ai@;44O9-qAq(t1c6 zAUz6cBcx62@!6aE&J7B__Th76-y|}~$HF2!rf6Lh%-GurlWHY+0y+tU{CF7H#XN zUE)pt^CjA_P@++RM6XyZ(Z3eKmXw0X@N$WcUm?*S!;gsf6s?x%5F_|X#0#&il`f=g zkmyUB2zvU&!SefS7Ce^3^ps)ML{qRX(NQCuLz!d(w|248nM;a_R0Z4{MfS%_*P1M+ zN0g7Z>W#r6T3wq+!d8d!)f`yRYI^h<492 zMPT!rrVg%?hG4P$C8S}?i+iMjIo+7{mT506Mw!-f&E^zac-iYOAqZPu+$o4)r3pHz zvr9lXZm)5rZV0Pf{3S$U%ZqzN!XB+LopGUB#5?5zZk=PdEidkofq8DoL}qg3czhdM zoK!KG!Ji&*#J`X|Td1K}16ICFD<$Rt4${ zeh6`epw9r>AVMcDrXaLSa0i$uKSVJ2Aw)k%il<39W@&oc3y|Z9`6UDYJ<; zpV??`u*J3Zm>up?W{10p*@4ZsEX+H8WtjK?h>>!3hhRZ@D;1F$E;ON(PTNr7^+s1q zZ75!><}O!B|763j(zX0LZACS~uLF|BAG}t&-Imcf*D~s~0p&VI%_+Z=H*WW^rG0GK z9pYMcowlJ|%x;+Zncv7kY<=1ID%EkN+vz2VTYdLk= zhH^2dVdlg3C7a+{ex0_WT*ogiexuZEE7(NWGU~Ji)dZssxGSP~3o7l+(%!c04tFiP zPTNqfW0&{N;Qeow+ICQJt~I3M++|2PU|5*@{K>%nOTFK+$F6JbsJK>OM+xi}+hy0a z)>K?;u%c`&xQRx#Pq*MnRnu}j77Iej5jHf%b9?U$K@Zhvq z1SJV*T1(<9k7&Z!;!jE^`NYxDjiWtPhO5|UQT+$O0<2Bf zzZ}zx@HpCR7BsM2O>J>t^F<{ii!x{|#`_qUx6iHm~~Y7u~^%&BizQRUvQT zm!f`ooi-TnDAsqWNn?_jxeVT6uIARsW_{OHzY~Ku-iOz5JB$bA?d^)r!pmF)Yu25| zn&}c5ghZ%WdtV7^)`5bWb)leUlPRd#gA~;41qy1WrJ!aFzy8JnyU06e2wkI~W?Bkr zHkg8%eN92lex;yhrWQd#&0^e<{!dJA?5y&I3DZ!7SbbJChHOBXP7Q-{@_kuX1F#^}x>HO>J)v?2LO8 z-dX>f2X=PjH5YqeXCByD!w5R35d|LDS$0n067`@2M^S(t*qI~y{`5c|*jdwFRuAk< z9$8S>0Dj8@I|HC}#(ZH{z{YI1hQM=94-y>e(oxtMz1N!nKO2ZoyjJxYdufnqNg!F$ z>}1d`ORt0+ysNNM^NO4FCnn*JlD=_*Ro zFH)L5pVIU%DNUbCY5FNj(`QneevH!e+bK;yNNf5?O4DDVG<^W2={qP*?@DR<21?U? z(j`q_VX5hC)TBzc?%*V>r`&dx+&%*~D$!$H3tu1m>Bj#dgUV%c`g6` zyzdJZTeft;^WG^B^X%JFzn-aQ-xhHX7n^-sSlG7(_JnueW-azrqYZ7=VxNIl-#bxz zhBT9dmiJDtz#7&Qt3p`$!McSqJKMIX8T``Qn8K(wuk4Zq{=A4Y9%t!j>0Dr}E9)N=Mkd1?K0D?V{6A={Z5z?sd|3 z1!2pJdjwIxZwqV}^75Dp7fM4ARU6qUq@jkztA#Bu?vw^>-r~ys$#$EQwyPGlytqdY zWXl%Vo8tSSuI!&|_d032g0SVqJ%X^@x8**^cF}1_skza@cAJy7D-By-+#?NP%a&ue zz?LoYDHV?Gxz?yOY_~aSyV9`b#XZun+Onl;T17ARqidUeWmqw@B7)t1rBXGLca|g{ z87Ci3?{C`$*ABDeEQt_;6H~zrDsFOncYA4zl=B`R*CqNX;v zy%;XtGap={;yqf}E&`sz2R|-HN;j!*m2T35dsO_f>y&#`3+_?zL1jwm9=~DIbMz4A z5$`FdHk1jbHn}aMH@V$5L3&U)waIPy9nyoIg*X1i0!1cEKemn9SS|aU7`_yuY9=AfG&%%$0eh}Si ziS9*ja=UM>bRl(vME|~tgm1_ux9p>1s|LB#V`4w%(S|%G_8DkP9+PHr;3|(vd$#w) zs(=EAJR>upHm+n_I{Ay)YD%$`2{}oZ`*wOn`FN`hjKiqOfaKSRwA$Mi99{KOhKFb%Ifc!z&w%tyeqryWtquF; zI0r8Am8dtL52@MkV<5An0eH!GeQ*Su_Ijm*@Dlq{Xp_#AhFIZ;6Q$6e>`DXBzkGXb z>@B0_p&IyL`ijH~aHgaksEojA{jg)sl!o|dgU*zOSm8w?jQ1mUHU-s>&#l8#^%fh?3J`6J$Z<<{fj(7MNzsG_9G=<^fcQrpVN_@_|_S2dk z{gaq*KfH2NVW4s8{TR|?khVa29MV=uPe9rRX*(n{q#cl+g!B}ory)H9X(yy-A?=vCcZsiaFYqzga7Tb&|SreJ||&$o*Z(h4<^t&-lc{!$~|leSc%PirOm zzLgUFNik1z{LeH<7ft|JMy$H2WeB}1R99!f%82x*8zuS)lSF4!O7yK;B>LN}68-Xa zg#Hx7w`T|HfR+o~^nZo`aO7LH(`z28oWRIs01*m=X2HdT^HdqxgOtk7X7#mBumRK^ zeX9HEnl+oXcG*DP+jrS4Q02oa05N3kHC4V^RRC}J3TsO&(P-cwew6@nU6@1+C9AEI zPqP+e6p$4JR$BiSXo5K1o-|3${lUiO)j##pCCr9Pc^QR8u;M`0qS&J4MWZ7v97qk8 zW*O{$vmi%fGs|yIS6;sc1XI-Vp!U5j=U|LfnWQe=(}UOii=DuH1z=jItK4E$2xd2`B>Fwo!?57dRRb0<`PoT*Cyw4ig%zd?_kBaO$KY$N7? zo6EfDhyQJ(bo3T4w z_TT%FvY)-pC1r2f{MO;J6Ei#Fwec<~ddud4juxGje_XX(nruYDj&me(TO;4lpXumj z3_V}PhMs@LJS^z+-7jvo3gvoW?;hCuEn>*l1A8xm4fCY1tF^7(oKUWPAcyqK)*s4k zCI@zdhfN!L@Wu?8t&z2g_=N&Iuy;H2$;>4;FH-A)z1yAQiy~>61>XEwg|H-m2lig1 zDj*&dh5dd>6idry7|j<89lZ6x-W%1FmQ9=-6^RG--V7~i*?h41BJsf9iL;Wz$2H!0 zwQQ=}e6iSsay_tjYfrv7p0sQV-+YmfP_Bc3tcKc>2lie-=5IFd<@IR97mWu->E%=a z_hiuXzg(^xvW;IDIUd*csE*c^LU>CIf!;%fKp&?ss9 z`mvlrQXKC~2#1PG1pFK)g+Tp=!S9P9O0tfCNdG~FLzmwseg4yUi7uEV(f^^sq1jWV z&(Bcd(EDdepMMPD(E4QoQszh{JvL9`;Eqg*K9nQfGa*+Bf&M*D3W1JLOZTva5vSV*r!dIQp%klupycS!pn z?T1tYsTR`PklulG0MbE7??O5R=`f`CApHZ4yNM|6Og>(+mmyo`KR0rv6NarDa1L^-D{Rh$o zNZ&%b2+ WjV0MQl8qx(ZU(P7%8TiW)np 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%0D}R!i4o*uQsVZfx@IZQ?FKM{~wofhuXUkQ4 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 delta 216307 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 XZ~4E7ZqafB{&93G?UPZfR{Q?}IGarT diff --git a/nspanel_eu_code/Program.s.txt b/nspanel_eu_code/Program.s.txt new file mode 100644 index 0000000..81f0ee5 --- /dev/null +++ b/nspanel_eu_code/Program.s.txt @@ -0,0 +1,11 @@ +Program.s + //The following code is only run once when power on, and is generally used for global variable definition and power on initialization data + int sys0=0,sys1=0,sys2=0,swipex=0,swipey=0,swipex2=0,swipey2=0,swipec=0,swipec2=0,swipedx=100,swipedy=100 //At present, the definition of global variable only supports 4-byte signed integer (int), and other types of global quantity declaration are not supported. If you want to use string type, you can use variable control in the page to implement + int r=0,g=0,b=0 + int h=0,s=0,v=0 + int p=0,q=0,t=0,f=0 + bauds=115200//Configure baudrat + recmod=0//Serial data parsing mode:0-Passive mode;1-Active mod + printh 00 00 00 ff ff ff 88 ff ff ff//Output power on information to serial pore + lcd_dev fffb 0002 0000 0020// Fix touch offset for EU Version + page 8//Power on start page boot diff --git a/nspanel_eu_code/boot.txt b/nspanel_eu_code/boot.txt new file mode 100644 index 0000000..f69593e --- /dev/null +++ b/nspanel_eu_code/boot.txt @@ -0,0 +1,302 @@ +Page boot + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 98 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"boot\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + +Text ip_addr + Attributes + ID : 1 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 12 + Width : 172 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 98 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : Initializing... + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text t0 + Attributes + ID : 2 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 75 + Width : 250 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 4 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : Please wait... + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text t1 + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 109 + Width : 173 + Height : 36 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 1 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : The process can take several seconds! + Max. Text Size : 50 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text tft_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 168 + Width : 40 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : TFT: + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text esph_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 193 + Width : 95 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : ESPHome: + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bluep_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 218 + Width : 92 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : Blueprint: + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text tft_version + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 72 + y coordinate : 168 + Width : 95 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : 3.2.3 + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text esph_version + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 193 + Width : 95 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bluep_version + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 218 + Width : 95 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 98 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Dual-state Button a01 + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 26 + y coordinate : 267 + Width : 80 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : 3D auto + Font ID : 0 + Back. Color (Unpressed) : 50712 + Back. Picture ID (Pressed): 65535 + Back. Color (Pressed) : 9375 + Font Color (Unpressed) : 0 + Font Color (Pressed) : 65535 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : Reboot + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + diff --git a/nspanel_eu_code/buttonpage01.txt b/nspanel_eu_code/buttonpage01.txt new file mode 100644 index 0000000..dc220d7 --- /dev/null +++ b/nspanel_eu_code/buttonpage01.txt @@ -0,0 +1,1254 @@ +Page buttonpage01 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 115 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"buttonpage01\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis button_back,1 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage01\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage01\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 45 + Scope : local + Text : + Max. Text Size: 100 + +Text button01text + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01bri + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02text + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02bri + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03text + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03bri + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04text + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04bri + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05text + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05bri + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06text + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06bri + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07text + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07bri + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08text + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08bri + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bpage01_label + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01icon + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02icon + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04icon + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07icon + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08icon + Attributes + ID : 36 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture button01pic + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button02pic + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button03pic + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button04pic + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button05pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button06pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button07pic + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button08pic + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot button_back + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot button01 + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button01\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button02\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button03\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button04\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button05\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button06\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button07\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button08 + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button08\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage01\", \"component\": \"button08\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 home + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/buttonpage02.txt b/nspanel_eu_code/buttonpage02.txt new file mode 100644 index 0000000..d92a849 --- /dev/null +++ b/nspanel_eu_code/buttonpage02.txt @@ -0,0 +1,1254 @@ +Page buttonpage02 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 116 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"buttonpage02\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis button_back,1 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage02\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage02\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 45 + Scope : local + Text : + Max. Text Size: 100 + +Text button01text + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01bri + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02text + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02bri + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03text + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03bri + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04text + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04bri + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05text + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05bri + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06text + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06bri + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07text + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07bri + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08text + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08bri + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bpage02_label + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01icon + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02icon + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04icon + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07icon + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08icon + Attributes + ID : 36 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture button01pic + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button02pic + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button03pic + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button04pic + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button05pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button06pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button07pic + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button08pic + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot button_back + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot button01 + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button01\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button02\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button03\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button04\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button05\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button06\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button07\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button08 + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button08\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button08\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 buttonpage01 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page home + } + } + diff --git a/nspanel_eu_code/buttonpage03.txt b/nspanel_eu_code/buttonpage03.txt new file mode 100644 index 0000000..e09c8f7 --- /dev/null +++ b/nspanel_eu_code/buttonpage03.txt @@ -0,0 +1,1254 @@ +Page buttonpage03 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 117 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"buttonpage03\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis button_back,1 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage03\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage03\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 45 + Scope : local + Text : + Max. Text Size: 100 + +Text button01text + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01bri + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02text + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02bri + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03text + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03bri + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04text + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04bri + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05text + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05bri + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06text + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06bri + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07text + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07bri + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08text + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08bri + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bpage03_label + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01icon + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02icon + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04icon + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07icon + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08icon + Attributes + ID : 36 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture button01pic + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button02pic + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button03pic + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button04pic + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button05pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button06pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button07pic + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button08pic + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot button_back + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot button01 + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button01\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button02\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button03\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button04\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button05\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button06\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button07\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button08 + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button08\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button08\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 buttonpage02 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page home + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/buttonpage04.txt b/nspanel_eu_code/buttonpage04.txt new file mode 100644 index 0000000..170f4cb --- /dev/null +++ b/nspanel_eu_code/buttonpage04.txt @@ -0,0 +1,1254 @@ +Page buttonpage04 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 118 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"buttonpage04\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis button_back,1 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage04\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage04\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 45 + Scope : local + Text : + Max. Text Size: 100 + +Text button01text + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01bri + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02text + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02bri + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03text + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03bri + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04text + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 116 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04bri + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 55 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05text + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 27 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05bri + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 58 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06text + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06bri + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 165 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07text + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 241 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07bri + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 272 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08text + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 348 + y coordinate : 246 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08bri + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 379 + y coordinate : 186 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bpage04_label + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01icon + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02icon + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04icon + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 55 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 23 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 130 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07icon + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08icon + Attributes + ID : 36 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 344 + y coordinate : 186 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture button01pic + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button02pic + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button03pic + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button04pic + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button05pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button06pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button07pic + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button08pic + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot button_back + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot button01 + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button01\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button02\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button03\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 45 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button04\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 17 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button05\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 124 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button06\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 231 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button07\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button08 + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 338 + y coordinate : 176 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button08\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button08\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 buttonpage03 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/climate.txt b/nspanel_eu_code/climate.txt new file mode 100644 index 0000000..ef5ac56 --- /dev/null +++ b/nspanel_eu_code/climate.txt @@ -0,0 +1,916 @@ +Page climate + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 96 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"climate\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"climate\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"climate\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (int32) climateslider + Attributes + ID : 7 + Scope: local + Value: 0 + +Variable (int32) va0 + Attributes + ID : 21 + Scope: local + Value: 0 + +Variable (string) climatesetting + Attributes + ID : 24 + Scope : local + Text : + Max. Text Size: 100 + +Number sliderval + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 460 + y coordinate : 280 + Width : 20 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 1 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment : right + Vertical Alignment : center + Value : 0 + Significant digits shown: all + Format : decimal + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text current_temp + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 171 + y coordinate : 87 + Width : 105 + Height : 55 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 5 + Cropped Back. Picture ID: 96 + Horizontal Alignment : right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text target_temp + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 171 + y coordinate : 145 + Width : 105 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 4 + Cropped Back. Picture ID: 96 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text outdoor_temp + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 16 + y coordinate : 52 + Width : 60 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 96 + Horizontal Alignment : right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text hotwater_temp + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 368 + y coordinate : 52 + Width : 60 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 96 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text heating_state + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 169 + y coordinate : 201 + Width : 115 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text climate_label + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 260 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture climate_left + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 111 + y coordinate : 20 + Width : 58 + Height : 230 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 16 + + Events + Touch Press Event + slider.en=1 + + Touch Release Event + slider.en=0 + +Picture climate_middle + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 169 + y coordinate : 20 + Width : 114 + Height : 65 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 17 + + Events + Touch Press Event + slider.en=1 + + Touch Release Event + slider.en=0 + +Picture climate_right + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 283 + y coordinate : 20 + Width : 58 + Height : 230 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 18 + + Events + Touch Press Event + slider.en=1 + + Touch Release Event + slider.en=0 + +Picture climate_exit + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 415 + y coordinate : 10 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Picture hotw_bt_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 374 + y coordinate : 237 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 79 + +Picture heating_bt_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 211 + y coordinate : 239 + Width : 30 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 82 + +Hotspot decrease_temp + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 133 + y coordinate : 252 + Width : 51 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"decreasetemp\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"decreasetemp\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot increase_temp + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 268 + y coordinate : 252 + Width : 50 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"increasetemp\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"increasetemp\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot climate_back + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"close\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"close\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot hotwater_bt + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 369 + y coordinate : 232 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"hotwater\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"hotwater\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot heating_bt + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 206 + y coordinate : 232 + Width : 40 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"heating\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"heating\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +Timer slider + Attributes + ID : 6 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + // Left hand images vertical + if(tch0>=111&&tch0<169) // Left Hand images L/R coords + { + if(tch1>221&&tch1<=235) // step 0 + { + // climatesetting.txt="climateslider0" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 0}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>206&&tch1<=221) // step 1 + { + // climatesetting.txt="climateslider1" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 1}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>192&&tch1<=206) // step 2 + { + // climatesetting.txt="climateslider2" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 2}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>177&&tch1<=192) // step 3 + { + // climatesetting.txt="climateslider3" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 3}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>162&&tch1<=177) // step 4 + { + // climatesetting.txt="climateslider4" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 4}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>148&&tch1<=162) // step 5 up + { + // climatesetting.txt="climateslider5" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 5}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>133&&tch1<=148) // step 6 up + { + // climatesetting.txt="climateslider6" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 6}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>119&&tch1<=133) // step 7 up + { + // climatesetting.txt="climateslider7" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 7}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>105&&tch1<=119) // step 8 up + { + // climatesetting.txt="climateslider8" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 8}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>90&&tch1<=105) // step 9 up + { + // climatesetting.txt="climateslider9" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 9}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>70&&tch1<=90) // step 10 up + { + // climatesetting.txt="climateslider10" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 10}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>60&&tch1<=70) // step 11 up + { + // climatesetting.txt="climateslider11" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 11}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + } + // middle images horizontal + }else if(tch1>=35&&tch1<=80) // middle image U/D coords + { + if(tch0>169&&tch0<=188) // step 12 across + { + // climatesetting.txt="climateslider12" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 12}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>188&&tch0<=207) // step 13 + { + // climatesetting.txt="climateslider13" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 13}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>207&&tch0<=226) // step 14 + { + // climatesetting.txt="climateslider14" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 14}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>226&&tch0<=245) // step 15 + { + // climatesetting.txt="climateslider15" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 15}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>245&&tch0<=264) // step 16 + { + // climatesetting.txt="climateslider16" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 16}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>264&&tch0<=283) // step 17 + { + // climatesetting.txt="climateslider17" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 17}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + } + // right hand images vertical + }else if(tch0>=283&&tch0<=341) // right image L/R coords + { + if(tch1>60&&tch1<=80) // step 18 across + { + // climatesetting.txt="climateslider18" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 18}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>80&&tch1<=94) // step 19 + { + // climatesetting.txt="climateslider19" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 19}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>94&&tch1<=109) // step 20 + { + // climatesetting.txt="climateslider20" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 20}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>109&&tch1<=123) // step 21 + { + // climatesetting.txt="climateslider21" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 21}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>123&&tch1<=138) // step 22 + { + // climatesetting.txt="climateslider22" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 22}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>138&&tch1<=152) // step 23 + { + // climatesetting.txt="climateslider23" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 23}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>152&&tch1<=167) // step 24 + { + // climatesetting.txt="climateslider24" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 24}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>167&&tch1<=181) // step 25 + { + // climatesetting.txt="climateslider25" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 25}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>181&&tch1<=197) // step 26 + { + // climatesetting.txt="climateslider26" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 26}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>197&&tch1<=215) // step 27 + { + // climatesetting.txt="climateslider27" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 27}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>215&&tch1<=235) // step 28 + { + // climatesetting.txt="climateslider28" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 28}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + } + } + // pass climateslider.val + +TouchCap swipe + Attributes + ID : 1 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/coversettings.txt b/nspanel_eu_code/coversettings.txt new file mode 100644 index 0000000..a2bac87 --- /dev/null +++ b/nspanel_eu_code/coversettings.txt @@ -0,0 +1,455 @@ +Page coversettings + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : solid color + Back. Color : 0 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"coversettings\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"coversettings\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"coversettings\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) va1 + Attributes + ID : 9 + Scope : local + Text : newtxt + Max. Text Size: 10 + +Variable (string) coversetting + Attributes + ID : 15 + Scope : local + Text : + Max. Text Size: 100 + +Text battery_value + Attributes + ID : 1 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 326 + y coordinate : 69 + Width : 60 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text cover_value + Attributes + ID : 2 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 183 + y coordinate : 43 + Width : 83 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text cover_name + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 8 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_state + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 12 + y coordinate : 8 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text battery_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 291 + y coordinate : 66 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture cover_exit + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 415 + y coordinate : 10 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Slider coverslider + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 183 + y coordinate : 67 + Width : 83 + Height : 233 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : vertical + Fill : image + Cursor width : auto + Cursor height : 255 + Back. Picture ID : 63 + Slided Back. Picture ID: 62 + Position : 0 + Upper range limit : 100 + Lower range limit : 0 + + Events + Touch Release Event + covx coverslider.val,va1.txt,0,0 + cover_value.txt=va1.txt+"%" + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"cover_position\", \"value\": "+va1.txt+"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Button cover_open + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 295 + y coordinate : 186 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : image + Font ID : 1 + Background Picture ID (Unpressed): 57 + Back. Picture ID (Pressed) : 58 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"open_cover\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Button cover_close + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 295 + y coordinate : 250 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : image + Font ID : 1 + Background Picture ID (Unpressed): 59 + Back. Picture ID (Pressed) : 60 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"close_cover\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Button cover_stop + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 104 + y coordinate : 250 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : image + Font ID : 1 + Background Picture ID (Unpressed): 65 + Back. Picture ID (Pressed) : 66 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"stop_cover\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot cover_back + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"close\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"close\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 8 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 7 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/entitypage01.txt b/nspanel_eu_code/entitypage01.txt new file mode 100644 index 0000000..51a2560 --- /dev/null +++ b/nspanel_eu_code/entitypage01.txt @@ -0,0 +1,797 @@ +Page entitypage01 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 105 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage01\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage01\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage01\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 55 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 178 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 148 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 87 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 118 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity01_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 208 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 238 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 268 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 53 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 86 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 116 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 146 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 176 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 206 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 236 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 266 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 55 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 88 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 118 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 148 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 178 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 208 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 238 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 267 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity01_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage04 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page entitypage03 + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page entitypage04 + } + } + diff --git a/nspanel_eu_code/entitypage02.txt b/nspanel_eu_code/entitypage02.txt new file mode 100644 index 0000000..b65b823 --- /dev/null +++ b/nspanel_eu_code/entitypage02.txt @@ -0,0 +1,797 @@ +Page entitypage02 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 106 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage02\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage02\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage02\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 55 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 178 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 148 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 87 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 118 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity02_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 208 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 238 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 268 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 53 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 86 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 116 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 146 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 176 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 206 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 236 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 266 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 55 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 88 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 118 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 148 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 178 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 208 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 238 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 267 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity02_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage01 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/entitypage03.txt b/nspanel_eu_code/entitypage03.txt new file mode 100644 index 0000000..dc6f191 --- /dev/null +++ b/nspanel_eu_code/entitypage03.txt @@ -0,0 +1,797 @@ +Page entitypage03 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 107 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage03\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage03\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage03\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 55 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 178 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 148 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 87 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 118 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity03_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 208 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 238 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 268 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 53 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 86 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 116 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 146 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 176 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 206 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 236 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 266 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 55 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 88 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 118 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 148 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 178 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 208 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 238 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 267 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity03_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage02 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page entitypage01 + } + } + diff --git a/nspanel_eu_code/entitypage04.txt b/nspanel_eu_code/entitypage04.txt new file mode 100644 index 0000000..012c549 --- /dev/null +++ b/nspanel_eu_code/entitypage04.txt @@ -0,0 +1,797 @@ +Page entitypage04 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 108 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage04\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage04\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage04\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 55 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 178 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 148 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 87 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 118 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity04_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 208 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 238 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 268 + Width : 270 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 53 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 86 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 116 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 146 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 176 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 206 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 236 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 266 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 55 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 88 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 118 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 148 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 178 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 208 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 238 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 330 + y coordinate : 267 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity04_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage03 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page entitypage01 + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/home.txt b/nspanel_eu_code/home.txt new file mode 100644 index 0000000..ddbbc3d --- /dev/null +++ b/nspanel_eu_code/home.txt @@ -0,0 +1,1324 @@ +Page home + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 103 + + Events + Preinitialize Event + dim=brightness.val + dimtimer.en=1 + sleeptimer.en=1 + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"home\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis settings_click,1 + +Variable (int32) brightness + Attributes + ID : 2 + Scope: global + Value: 100 + +Variable (int32) brightdd + Attributes + ID : 3 + Scope: global + Value: 40 + +Variable (int32) disdim + Attributes + ID : 4 + Scope: global + Value: 0 + +Variable (int32) sleepmodus + Attributes + ID : 16 + Scope: global + Value: 0 + +Variable (string) lastclick + Attributes + ID : 54 + Scope : local + Text : + Max. Text Size: 100 + +Text time + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 251 + y coordinate : 45 + Width : 160 + Height : 62 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 6 + Cropped Back. Picture ID: 103 + Horizontal Alignment : right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text current_temp + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 59 + y coordinate : 178 + Width : 100 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 4 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text outdoor_temp + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 133 + y coordinate : 124 + Width : 87 + Height : 37 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 4 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : -28.7° + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 221 + y coordinate : 110 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_state + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 56 + y coordinate : 222 + Width : 120 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text left_bt_text + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 47 + y coordinate : 283 + Width : 120 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 1 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text right_bt_text + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 288 + y coordinate : 281 + Width : 120 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 1 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 13 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 42 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 71 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 100 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 129 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 158 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 216 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_09 + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 245 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_10 + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 274 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 29 + y coordinate : 220 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_state + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 314 + y coordinate : 5 + Width : 100 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 416 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 29 + y coordinate : 245 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_state + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 56 + y coordinate : 247 + Width : 120 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text wifi_icon + Attributes + ID : 36 + Scope : global + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 424 + y coordinate : 53 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text indoortempicon + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 24 + y coordinate : 184 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01_icon + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 292 + y coordinate : 176 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02_icon + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 339 + y coordinate : 176 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03_icon + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 386 + y coordinate : 176 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04_icon + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 245 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05_icon + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 292 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06_icon + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 339 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07_icon + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 386 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text meridiem + Attributes + ID : 53 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 414 + y coordinate : 87 + Width : 35 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather + Attributes + ID : 11 + Scope : global + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 34 + y coordinate : 66 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 13 + +Picture left_bt_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 47 + y coordinate : 307 + Width : 120 + Height : 3 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 77 + +Picture right_bt_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 288 + y coordinate : 307 + Width : 120 + Height : 3 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 77 + +Hotspot fc_weather + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 34 + y coordinate : 66 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"home\", \"component\": \"weather\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"weather\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot jump_climate + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 31 + y coordinate : 169 + Width : 108 + Height : 51 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"home\", \"component\": \"climate\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"climate\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button01 + Attributes + ID : 45 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 292 + y coordinate : 176 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 339 + y coordinate : 176 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 47 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 386 + y coordinate : 176 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 48 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 245 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 49 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 292 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 50 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 339 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 51 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 386 + y coordinate : 224 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot settings_click + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 247 + y coordinate : 37 + Width : 167 + Height : 86 + Effect : load + Effect Priority : 0 + Effect Time : 300 + +Timer dimtimer + Attributes + ID : 1 + Scope : global + Period (ms): 50000 + Enabled : yes + + Events + Timer Event + if(disdim.val==0) + { + dim=brightdd.val // Dim down screen to val set from HA + } + +Timer swipestore + Attributes + ID : 6 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +Timer sleeptimer + Attributes + ID : 15 + Scope : local + Period (ms): 65000 + Enabled : no + + Events + Timer Event + if(sleepmodus.val==1) + { + screensaver.orign.val=0 + // Go to screensaver page + page screensaver + } + +TouchCap swipe + Attributes + ID : 5 + Scope: local + Value: 0 + + Events + Touch Press Event + swipestore.en=1 // Start swipestore timer + dim=brightness.val // Set brightness to saved value (from HA) + dimtimer.en=1 // Enable timer to calc down for dimming screen + sleeptimer.en=1 + + Touch Release Event + swipestore.en=0 + // Touch has ended, x + if(tch0==0) + { + swipec=swipex-tch2 + // From Left to Right + if(swipec>swipedx) + { + page buttonpage04 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page buttonpage02 + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page buttonpage03 + } + } + diff --git a/nspanel_eu_code/lightsettings.txt b/nspanel_eu_code/lightsettings.txt new file mode 100644 index 0000000..d9ef5de --- /dev/null +++ b/nspanel_eu_code/lightsettings.txt @@ -0,0 +1,983 @@ +Page lightsettings + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : solid color + Back. Color : 0 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"lightsettings\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + 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 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"lightsettings\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"lightsettings\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +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 : 32 + Scope : local + Text : + Max. Text Size: 100 + +Number ring + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 459 + y coordinate : 188 + Width : 21 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 1 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment : right + Vertical Alignment : center + Value : 0 + Significant digits shown: all + Format : decimal + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Number field + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 459 + y coordinate : 233 + Width : 21 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 1 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment : right + Vertical Alignment : center + Value : 0 + Significant digits shown: all + Format : decimal + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text light_value + Attributes + ID : 1 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 183 + y coordinate : 43 + Width : 83 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text light_name + Attributes + ID : 2 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 8 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temp_value + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 183 + y coordinate : 43 + Width : 83 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text light_value_2 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 73 + y coordinate : 80 + Width : 50 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temp_value_2 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 331 + y coordinate : 80 + Width : 50 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_state + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 12 + y coordinate : 8 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture light_button + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 67 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 69 + +Picture color_button + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 389 + y coordinate : 130 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 73 + +Picture temp_button + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 389 + y coordinate : 67 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 71 + +Picture light_b_press + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 67 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 70 + +Picture temp_b_press + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 389 + y coordinate : 67 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 72 + +Picture color_b_pres + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 389 + y coordinate : 130 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 74 + +Picture colorwheel + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 125 + y coordinate : 68 + Width : 200 + Height : 200 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 50 + + 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\": \"lightsettings\", \"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="" + +Picture light_exit + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 415 + y coordinate : 10 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Slider lightslider + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 183 + y coordinate : 67 + Width : 85 + Height : 235 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : vertical + Fill : image + Cursor width : auto + Cursor height : 255 + Back. Picture ID : 75 + Slided Back. Picture ID: 76 + 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\": \"lightsettings\", \"component\": \"brightness_pct\", \"value\": "+va1.txt+"}" + printh 92 + prints "nspanelevent",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 : disabled + Opacity : 127 + x coordinate : 183 + y coordinate : 67 + Width : 85 + Height : 235 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : vertical + Fill : image + Cursor width : auto + Cursor height : 255 + Back. Picture ID : 64 + Slided Back. Picture ID: 64 + 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\": \"lightsettings\", \"component\": \"color_temp\", \"value\": "+va1.txt+"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lightsetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot hsv2rgb + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 440 + y coordinate : 278 + Width : 40 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 440 + y coordinate : 300 + Width : 40 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 67 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 389 + y coordinate : 67 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 389 + y coordinate : 130 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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 ##### + +Hotspot light_back + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lightsetting.txt="{\"page\": \"lightsettings\", \"component\": \"close\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lightsetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lightsetting.txt="{\"page\": \"lightsettings\", \"component\": \"close\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lightsetting.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 21 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/notification.txt b/nspanel_eu_code/notification.txt new file mode 100644 index 0000000..afe6a7a --- /dev/null +++ b/nspanel_eu_code/notification.txt @@ -0,0 +1,268 @@ +Page notification + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 114 + + Events + Preinitialize Event + dim=home.brightness.val + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"notification\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"notification\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"notification\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 10 + Scope : local + Text : + Max. Text Size: 100 + +Text notifi_text01 + Attributes + ID : 2 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 60 + Width : 398 + Height : 191 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 100 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text notifi_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 7 + Width : 300 + Height : 42 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture accept_pic + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 96 + y coordinate : 260 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 85 + +Picture clear_pic + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 270 + y coordinate : 260 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 86 + +Hotspot notifi_back + Attributes + ID : 1 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot accept + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 96 + y coordinate : 260 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"notification\", \"component\": \"accept\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot clear + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 270 + y coordinate : 260 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"notification\", \"component\": \"clear\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 9 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 8 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/nspanel_eu_Stats.txt b/nspanel_eu_code/nspanel_eu_Stats.txt new file mode 100644 index 0000000..c6a78b1 --- /dev/null +++ b/nspanel_eu_code/nspanel_eu_Stats.txt @@ -0,0 +1,98 @@ +Program.s + 0 Component(s) + 9 Line(s) of event code + 9 Unique line(s) of event code +screensaver + 3 Component(s) + 9 Line(s) of event code + 8 Unique line(s) of event code +qrcode + 6 Component(s) + 46 Line(s) of event code + 28 Unique line(s) of event code +notification + 11 Component(s) + 60 Line(s) of event code + 31 Unique line(s) of event code +boot + 11 Component(s) + 6 Line(s) of event code + 5 Unique line(s) of event code +weather03 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +weather04 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +weather05 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +settings + 15 Component(s) + 65 Line(s) of event code + 32 Unique line(s) of event code +entitypage02 + 29 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +entitypage04 + 29 Component(s) + 48 Line(s) of event code + 29 Unique line(s) of event code +coversettings + 16 Component(s) + 90 Line(s) of event code + 35 Unique line(s) of event code +weather01 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +weather02 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +lightsettings + 33 Component(s) + 306 Line(s) of event code + 164 Unique line(s) of event code +entitypage01 + 29 Component(s) + 49 Line(s) of event code + 30 Unique line(s) of event code +entitypage03 + 29 Component(s) + 48 Line(s) of event code + 30 Unique line(s) of event code +buttonpage01 + 46 Component(s) + 161 Line(s) of event code + 48 Unique line(s) of event code +climate + 25 Component(s) + 391 Line(s) of event code + 105 Unique line(s) of event code +buttonpage04 + 46 Component(s) + 161 Line(s) of event code + 48 Unique line(s) of event code +buttonpage02 + 46 Component(s) + 162 Line(s) of event code + 49 Unique line(s) of event code +buttonpage03 + 46 Component(s) + 162 Line(s) of event code + 49 Unique line(s) of event code +home + 55 Component(s) + 130 Line(s) of event code + 51 Unique line(s) of event code + +Total + 22 Page(s) + 570 Component(s) + 2185 Line(s) of event code + 432 Unique line(s) of event code diff --git a/nspanel_eu_code/qrcode.txt b/nspanel_eu_code/qrcode.txt new file mode 100644 index 0000000..faf3142 --- /dev/null +++ b/nspanel_eu_code/qrcode.txt @@ -0,0 +1,168 @@ +Page qrcode + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 104 + + Events + Preinitialize Event + dim=home.brightness.val + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"qrcode\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"qrcode\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"qrcode\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text qrcode_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 300 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +QR Code qrcode_value + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 113 + y coordinate : 62 + Width : 222 + Height : 222 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Logo overlay : no + Text : + Max. Text Size : 50 + +Hotspot qrcode_back + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/screensaver.txt b/nspanel_eu_code/screensaver.txt new file mode 100644 index 0000000..4f9030d --- /dev/null +++ b/nspanel_eu_code/screensaver.txt @@ -0,0 +1,48 @@ +Page screensaver + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : solid color + Back. Color : 0 + + Events + Preinitialize Event + dim=0 + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"screensaver\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + page home + +Variable (int32) orign + Attributes + ID : 2 + Scope: global + Value: 0 + +TouchCap wakeup + Attributes + ID : 1 + Scope: local + Value: 0 + + Events + Touch Press Event + page orign.val + diff --git a/nspanel_eu_code/settings.txt b/nspanel_eu_code/settings.txt new file mode 100644 index 0000000..865b2ac --- /dev/null +++ b/nspanel_eu_code/settings.txt @@ -0,0 +1,418 @@ +Page settings + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 99 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"settings\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"settings\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"settings\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text a03 + Attributes + ID : 5 + Scope : global + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 328 + y coordinate : 46 + Width : 40 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 99 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 3 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a04 + Attributes + ID : 6 + Scope : global + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 328 + y coordinate : 77 + Width : 40 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 99 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 3 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a06 + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 38 + Width : 120 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 99 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : Reboot + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a07 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 84 + Width : 120 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 99 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : Sleep + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a08 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 24 + y coordinate : 183 + Width : 85 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 1 + Cropped Back. Picture ID: 99 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : Brightness + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a09 + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 24 + y coordinate : 243 + Width : 85 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 1 + Cropped Back. Picture ID: 99 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : Dimming + Max. Text Size : 7 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture settings_exit + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 415 + y coordinate : 10 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Slider brightslider + Attributes + ID : 3 + Scope : global + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 140 + y coordinate : 183 + Width : 255 + Height : 41 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : horizontal + Fill : crop image + Cursor width : auto + Cursor height : 255 + Cropped Back. Picture ID : 99 + Cropped Slided Back. Picture ID: 100 + Position : 80 + Upper range limit : 100 + Lower range limit : 0 + + Events + Touch Release Event + printh 91 + prints "brightslider",0 + printh 00 + prints brightslider.val,0 + printh FF FF FF + +Slider dimslider + Attributes + ID : 4 + Scope : global + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 140 + y coordinate : 243 + Width : 255 + Height : 41 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : horizontal + Fill : crop image + Cursor width : auto + Cursor height : 255 + Cropped Back. Picture ID : 99 + Cropped Slided Back. Picture ID: 100 + Position : 20 + Upper range limit : 100 + Lower range limit : 0 + + Events + Touch Release Event + printh 91 + prints "dimslider",0 + printh 00 + prints dimslider.val,0 + printh FF FF FF + +Dual-state Button bt0 + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 136 + y coordinate : 36 + Width : 83 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Font ID : 1 + Cropped Back. Picture ID (Unpressed): 99 + Back. Picture ID (Pressed) : 65535 + Cropped Back. Picture ID (Pressed) : 100 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 0 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Dual-state Button bt1 + Attributes + ID : 14 + Scope : global + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 138 + y coordinate : 88 + Width : 83 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Font ID : 1 + Cropped Back. Picture ID (Unpressed): 99 + Back. Picture ID (Pressed) : 65535 + Cropped Back. Picture ID (Pressed) : 100 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 0 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot setings_back + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/weather01.txt b/nspanel_eu_code/weather01.txt new file mode 100644 index 0000000..db7ecd9 --- /dev/null +++ b/nspanel_eu_code/weather01.txt @@ -0,0 +1,516 @@ +Page weather01 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 109 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather01\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather01\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather01\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 218 + y coordinate : 55 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 97 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 148 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 162 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 278 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 249 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 191 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 219 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 159 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 188 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 218 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 245 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 275 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 41 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather05 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/weather02.txt b/nspanel_eu_code/weather02.txt new file mode 100644 index 0000000..e4ae451 --- /dev/null +++ b/nspanel_eu_code/weather02.txt @@ -0,0 +1,516 @@ +Page weather02 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 110 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather02\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather02\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather02\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 218 + y coordinate : 55 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 97 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 162 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 278 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 249 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 191 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 219 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 159 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 188 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 218 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 245 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 275 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 148 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 41 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather01 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/weather03.txt b/nspanel_eu_code/weather03.txt new file mode 100644 index 0000000..5aa6844 --- /dev/null +++ b/nspanel_eu_code/weather03.txt @@ -0,0 +1,516 @@ +Page weather03 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 111 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather03\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather03\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather03\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 218 + y coordinate : 55 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 97 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 162 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 278 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 249 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 191 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 219 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 159 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 188 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 218 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 245 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 275 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 148 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 41 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather02 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/weather04.txt b/nspanel_eu_code/weather04.txt new file mode 100644 index 0000000..391dd64 --- /dev/null +++ b/nspanel_eu_code/weather04.txt @@ -0,0 +1,516 @@ +Page weather04 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 112 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather04\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather04\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather04\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 218 + y coordinate : 55 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 97 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 162 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 278 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 249 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 191 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 219 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 159 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 188 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 218 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 245 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 275 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 148 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 41 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather03 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_eu_code/weather05.txt b/nspanel_eu_code/weather05.txt new file mode 100644 index 0000000..4e286ad --- /dev/null +++ b/nspanel_eu_code/weather05.txt @@ -0,0 +1,516 @@ +Page weather05 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 480 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 113 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather05\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather05\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather05\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 218 + y coordinate : 55 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 97 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 162 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 278 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 249 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 191 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 170 + y coordinate : 219 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 159 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 188 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 218 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 245 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 400 + y coordinate : 275 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 148 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 0 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 50 + y coordinate : 41 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 387 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather04 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us.HMI b/nspanel_us.HMI index 2c4e813317d2fd674fd6a2bf2701a86cabe5aacd..5b706c78254dccd284353b6e668ac121cdb8ae1b 100644 GIT binary patch delta 64142 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 YGzy_nD2>8s6i%bA?DqOk5v=3?0wEm^OaK4? diff --git a/nspanel_us.tft b/nspanel_us.tft index 44525cb01ed94ae3f3210c97d8c964bbe3d52bb6..eab306cd81367c337a33e4f441b95ae95e3d2bdb 100644 GIT binary patch delta 268878 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 z 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 delta 266725 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⪚#Sxey{ku?{5$bgn9;UaAc0pbY*x%e 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%0A^$B<~bSeGJLl;C}K3mr4=m z+cMAj;uOdQFKEC0WIGfxQ4oqamEyz!rGQf@;(1`$=a`8J z_)39KrO1!sQhO+B*owdg+FZYhy2LQ7E!E22VHnmHi2>z6q;kaVyL4&5dGv?}lmkxX zhzFDd&Z9>>pd9cN4`(ZT`{AaQ{j1@om7R0(NYl3}%vTIJ6(e35<|}65)qvwiJ?uEu zbHQr>_Ybt5H@20Xfv6ZK4k!kkiV?3A8%W{Y6JIg#saQq%d4y?YPxD);_dJdT)kIRC zz=CRmXm-;JS(Jr%;94FyWg%|gBqg7+#KS2I@htAyF#N-pSMXCjoZS-{Phvqekugv5 zMW3zgBv2DN-U9PA0ZvVbH-q__Sa?g|_)!l#PODt-*1&yD^t`dH>1@fKcV7Ic!z55z?0pIAtRqkPSFxi-%J-;#r8}%LaamhqE=J{RGGsmQ52N8@V)JHgI{ki9HJQ zWdlyxh}*5~X%;>dWB5@I;wFyW%5LMs1F~5Tb}Ks_C>tjZ$OfFU5s$!p*{nF+6JIvq zl#To-E~lS`Y@>h$WHbHKvS%V>8zrgFK{m1ivVld}h$kYlFB@>mMm!)JaLN`Br)EPOn0{HRBo6=y;& z__G1oEQg6E3PLduW#hyF*??0v;-g{M=a`8J__Bdd*~pLLviNz(HU(HfHq$>XFHMGQ zQ)JU*$VOH`Hn1og@xUb(aLPtJARBPX77wRv#Ivw#zHH#9cz7FLV!Z&_rbsh^Y~<2> z*}$c2#9o2nT7rTfnIm@qkvqsZ~6jS`p8}{`gvfpW@+ciD*9+ zS}l=HQ=t{PG+!%lsTHvmFkdU+)QY&>%FbtK@RbB|P3vJtmi+3h${c_2Udl#To-E`w)4wiCbtvYGyA={OUz zoscmzAsbl%*}$S~#HS&ozuJIPHsS%UwP!WIG|L??5(U zG+#DwDH}1nl|2nOWg~tP=F4W`b}KviCXU_8ZsUIjR-5JU7bY+dI#4#VlfG=gDI4)$ zVc2K&uqPnkuQu>08~IUOYQGEF*e4y3&Gb)8iT5B|qBMICvXK>#4J^t=JaD}RoU#!Q z$OfFU5f8`)oU#!Q$OfFU5m(o1vmsleY?=+(h|zr6z~$j4X1B7Z0jF%l?N)Xhw_DkX zn>cnWyN&0y+x_eTyOo_dWivbJ%LbgX5w}~}?Kn|+u-d??N)Z;CXU_8ZsS=2*(?XUm7NZh&FrKv8*s`-+-_yJ zCy2@e*}$i47SOD-iK^eWz+kRjjVudU{N;Wf$KHkl#O^mHsF+v zctAGbl#O^mHsF+vcpF}?eE`|2O0$KKjTp_B4O|{>Vs9`oO z<;a-Dkd3T>Y+z9~;(?1b;FOJcKsMl%jd(yd;FOJcKsMl%jkvm4TLRf~By}ldBS!OO z1DA)J*iA6MBmqv@h}*5~X%=p`vJ*FP>{fOg545t|19mGramr?P(w7Z5Wg~94vfFW@ z@<2B5DI57wTxu_aZ0wT`$Y%PdrNnZ`)>fJ=hiqg8WCM$`5f5Cq0jF%l1F`|9Y{Uby z0jF%l1F`|9Y{b=d+X~3mRyM7GY{Y23Y~b>66KfCiWdlyxh}*5~X%=p`vJ*FP>{fOg z545t|19mGramr?P(w7Z5Wg~94vfFW@@<2B5DI57wTuy)ZzgG5WJ;y?m2Wbip(*Ii7 zy@QeS-)?2cTfyq67nD6KaWhV}vKL=vTG=_u?7#+cKFkFRab^eNIWW^#M4Z`y_`wTs zW(VSSD?9nj4#e$Nb`O_|t4%9Ak;}j$v#2DkiPOrSjv<~v8FF$Bo{DN^ulbSR%Kr36 zaa!5aF*$uo$+sWDr})QcWiPunPAfZzRxA7XwQ*Y6)6s9uSXuJ(S|r>oDe*B9ZWa)` zD}gK?QsVXSr2In)oQIUS-IYK-4=HiGD}guW*!X-vC z371?ZN@7>QOu{A3giE|E%v=N7czNKUsD~Y=LN0hkyBW}Ss00V|AkOXtPMikNBwXT5 zxWsuD7#BMZW0-3|;z|mSsBzh_p5+ZN`*kwi^iRt>8&r9-X9LR{umZAyrOF%N_QeFf zRe1wEARBO1-T)8C23(alzyq=YSLF?Gwz41IsLGp;pRl|EM)PF@SCu8eZi4x;0axV> zup3~$Y!==KxG$R(r*STLlYnfNLsK}I2M+>e<4y)-1Fp&&;Mc>93;E^=ForK1aLUFw zQCvoDf^6M@1!Ob*({k@-$kt6>+6>vq3djZ)Wg~81x~BuDY{Uby0jF%l1F`|9Y{Uby z0jF%l*~&h13uNmiB|e30#Av>3;PP1$>k0E^15Vk9-v#q!v+!QPK~WFxyNQFIzPLCl z@L>+dVjS)oY``fS@$N9=Vo%J#zHH!AHu9smG~Q}j+0*?->dM=^R`z?g z;SHbRa0sXc9@Qdl-`1o*)gm5H3pmvx9#9K7)gm5H3pmvx{u**)pY2d4`*gOx`z_nKDr0bhB$Ohx@&1KI2{-~euR`8VMHE`x7&Ir9SC z?D9Xr{aps%>~d+GVg2{S>1Fr#SkCNWS(y1?!C}OBn((=P4D(Mb;5^-kf0PTp9yloK zVaM5!3%(IJer$ehFFOM@ETbppGxv)n;5^;9Lu+CKDV&l0(+zxmHkH^Lrl_QSVJ!!Jv z^s;}l-}JI`E{a5s-OEm#A`!QH*=^kJWw+zlz3euA0sA>sjr zfKwsj0fm55A>sjrfD@y!mp$cMWbYIi@-4Er!TszFE|ntAx&7=7oJtW-h55_O!Z|m7 z)Pv95#3_&qUeJF3$#y7Yq97D;D#eKdN&%-*#Ph(g&oL7d@Rb6eN|7JMWyW_XVk-h0 zXmkB8>M`GAZK+=NPrk?6A~B#Gh*XZaeVZ;FIFBCjfO5d89Pxm1z1F3!Jks>73iA~MPQ{2L)CyCUWK{zUs4=odjw^$6H{&Ccvo) z@n$ez6ANz%96#z|$7z)d-Ws^CiJmvMmz{yw>cWZbRu|&bgm}}~Knmxc_?m!EP4FG` zN8}7{iZx5I1q`UUnPr7RYy& zgWbzc2P(yh14;p>Qp7vJe95gi+!J3Z;8cqIC@zPNnO^pE(?BhojzgH~UU zDS<_;h)+WtUqj&3ig-XP;M6J}POXS%A&##V_$eOF-iVZ6p;aFl@+-6=m*#5)E{`#> z`(eITz^MuGdtv^nvhW9h<3~OC%uSqrx#0Z+T3HSQOcaD-AZo>l16l#6R>bdt`C3_V zxF^0=z^N7aQCw!6#A{O+Sm3qEG*HW!Q;;nz%T7TyvI4S!McIgdj*z}=z$qK?fNa1i zTRfby5zj&#UpDYlJe<7|8-IgrVX6B&WFwd6%LXnFH?c=yzHGoL8*#grJ>9~GVhlg( zLEOZ#d)aM#ctAGG!R}?J17+jH0oj04HsTSOFPjyId*aImoU)N0#ijQjkZlyOfNZ9L zTAH1PY@=kzX~;%aKsK-_8}UR$_GJT3*@y>Z15VlE;gpSd7Iw{-4g3@jXK%!)KOx&F zIrArEBbVmO1}+abv9T~;HsF+v_!yYK+AMrLaQvu8x)ok+Z0*$H)JE1=F0{yWh3?q%$E%~Wg~9) zvZq`4RE*(AJ&2n)b}ze)PYcLqIoQ4Ibf9dUI3OEv%0~P}m@k_ZhkN472Ar~yAI0U+ zKag!Euz+l)ds;S~Lrtc7+4G!70Z(E;IS{EF@xY}Qa4JVUpd4^27Z0a$#Ivw>zH;EF zcsSZ4CZ~ka%078WIJT2L9ZVi?MtBeA>js><5q}5fFEF!# z69u6dh`Mp&fNsF48}V5%UpFfb_r%u?ICUdGipvZ)?0qSFx@n)5F`+O!*_VaFv7PK> zQK==cz@-*&Dn&e?6mTjP52sSZv#>wDQsAd}I6ERXCP1nsQa2G=kxTQ}7`W7m*b11h z6>w@r-0o!Oz8icc#_*#a#7!K#likKw2eh&r>`rz%P%BOx&e; zr&i=gap`?YIJT2L-Ly|jvn0s2QHCTzwvF(#8(GMrY{cs!r2mQroU#$O8(GMwY{Ua{ z0;g=m?M4>zQ#@QmLwpm=Ut$)%6*zv>gL9fV z+j7CT2V}DxJ~L4eihr)=a$ajB38vh4*HNR6g_ zT2fOX+g_=g3fagC$OaZ=BObU!15Vk92V?_I*@y>Z15Vk92V?`D;^FEN?NZ3LSC(B0 z*~q2&vVqIPP3$1dmkl^&BfcNz%Vy!<0>_Vfq+4<9PIem)bh6t6b|*V=%4T-bmkl^& zBW`!H+i{}uKz{Hk8~IUO4&{YxCx8WHGwsu|DIa7zA!qVIHnIY;fkoMfPeVw5wE?GW z!~?Pcr)JLXa&{mKB0*WCdgci?R_9T&)48Y{Uby0jF%l1F`|9Y{Uby0jF%l)zw;I z$d)K|i$FGFG+#DwdANz$o$TqrDI0OSlikMcPIlrZj@`*_<9Y4gT6@6mWG7D9%uf2U z0jF%l?M`+(PE;POHt;DM`B7YYr$IKhNe5&z?bFgM9kOM}kaWmKRzNneC>!y>)f#Zh zMm!)JaLPtJARBPXMm!)JaLPtpU9A;`Y#DN^JN2^U@ zvLIVqS(XLa$O^~?7G)zIxNZYZ*@y>Z15Vk92V?_I*@y>Z15Vk9tLwJQAX{6hTNbhr zqxrId%fn5qJtGemVu1_83!NZA8LGZ74uW}MkIL@9@mpD!E1P0>o z#`r$=F(2r^XW;KKbzG!&Yj(>M!r&b}S2RdP1dL&uhX2=ZXb*}B} zI-6cgc3NWxDu*t2nxkE@@WNy#j0sxc@AuG`al>UP>hJ#eJ8Qn{JUCAOJqdq5ztMH3 z|HZ#$Lb-6J{QiEp;NlOaNfnAR11IX%F#4{FV+Ze&o?lI7h(D_Qy#7v-jV(ipgpj^14DP#3KvUx zK|wv;iQQYvr?tZU^Hj*A-Dk@9d&3#Y>aSrKZXj=56`r1Yj{?TH;{lZoO~Ai( ztx0_`@O2(}xobExe?e!38%DFhNN1bdH;+`mI=m>UD6;lbsnRJak|}wv3Fl1!ATu#r&Kqi$Pext`&tn+q znBS2VpThG=&+`>{9?K{F>R}I_%a7JFn3>sZ+e?G`*n{WtOS}5vMR~6&fNo0|ho$@F zk&OH+ykPK%B6 zrwqLban=_Rxe0OlgK{7Z`|}v$tZEF@cA7kv#*Mjl1fb=`pBYE zy9su;ZZX^@hnc5qwoT;DR@mLT#iUGA(2j!ADI=EFS&lUY?PxJcZU)*kQ1Ta#rS+F; zZ9torA;(F(4U{!;Xiv(@=AhkHTy`}FEvW=jAYg>f7Q4PJM z!qvY$+^yCm01jSZH7ok>YU{)+>~_X!m*!-<{hUdevhDWp*3gy&^+J(aSNZNs`UW9u z$**_dMI^hnlRU9|M(ChNX`m=SB^@Ot@mSJvY|DoZ;opqVj|$7KqdoriJZ?}PzbE~r zM$aUjRUW65$4TvRt@g-H)VtA0dAP}!VCGthNy*9BR&bTWIqgtaJKUcrbC*YolB%ZDz-zZs!ag=Jr-9p3b2XsJAkCzn>EnaO38M=|A5lvv@2Lh#C(5*l4jUTYU#nUq`}S0d%*kvZYAp|j;=)ji?$iPu!X0e&=F^Kj|wv3K4g+bpj=*2UfzL(f6x6``->__!%pz;ToEM; z>_Y!~lD{+jJ6DvheZz}NTv7=yJg^IC-CQXU2^S4rQb`JQ!8~)oDOFi6ErM6ipSob4 zIhCY(Kg`pvvg53ST^L}BRC@sPw5u!!?u5Tn1*KUPsd5DSxwI?%ohov^e|SOaz*ML9 zEDRQ_DpgYW(%c_|v#QA4Zt%LbD*BtNs#j$h-5syl0HoWGk@=Z@^E$QFlwef4GB|xo zNVW~YzMris!|uW^-hlCW7jWpCA}xDh7jL*yUK@z4{R=1^tLYb4ne`BM2ro|RbR6qBT&Emnhvuu%1)=xp5PBE?X2{MRk!%^gI$SC=(_=SO?4_X( z6?r=ouu z+NJ2*6n(3rU%xh7N@o9#LUMG4aNgAB%3)vV8|CnA=sV@`wQ|@)Os%&)+4}IE!8Y@1 zYrXBs*6XeP)%b|y)q1_%aBd;;*ZOAoxy?p>=GmJ{u4{yDFaE)GX$+hvaRohx` z$+h)*n~i~zbz=SN$^I@7e0FWM-jePB<>NYXT_K$6*FFHL@2H~}*m(@}y;e4N31`Xj zuHn?s`8sNWCC$7RABC+ekJP}*QHx{dwR%alsp~ka>ayU?l4rWZqfK2dsbwkWFi`P2 zJi%YD4rj<$12D^(x>Du|oXOV%o_n1fxf;Pb^uWON*U7dAQAHfVK!UEen6I6Osa*u>;pMl!jrhmcshv@9dqQ z2b51F^q4w-hK7cz^Jg&6A9*Vh&i0pAf6w7N8N&2RZd?IBR16RJrmb*5h~uad}C;o#u=_qWG_dUgu!q^w1mFmY1_9!>#15li`w~ zzr7tfu6VOTvlVYnXfAnbwP(n8r@|#B_Aen^Tk_#mk&M(+ioGzjRI!(ZmMb=wdWLNN zO|dfvW;nG^gLijM>~Xw5LFM{_96x`4P3W@_kM0-nPb;-k{m#G5V@HTf_p1rJtebDvi}jL5cr}8VeKK2bv0lfRf(CTC6h~>&4o-3HGvywOCs>(Tnvj4D@blE!Mx9=*2p{DK7k)S&MagQ@vPQ zHA8bC%v!9?o9V^+9AKxpwOF5PrWb3y=IGslS&Ow^bG=x91l;zP*k@)I>yOR#Vtp2z zbGKNF_1RnWVy)W(*9Z*osJCXZa{Rx% zSRcJj%lHbmt8cRw>!Y{n#d-z<1={Mxdh9m6SS#Ib7Hg^7^z{Y%#rk?X>}7jvvA*6; zFV<%5(V5iVTCC05>&1Es1Km4Vi}h4{y;!GpKv4~|7V9e=^kV%EaGQ?SV*RdzUaaFf zI?h>`wOGe>)Qh!tC&zgUcHuKKi?wzqy;#2ir&VWbv3}D@FV<%|JI-IQ3j=tI^_k9k zv0mK;pGfUuE!L~M=*7Al1C8#C^*4)kcbE8!b%gTycZ;=pcDPs`#lMKPI$AmW`?Wew z@&EH$ov3*KcCAiU?Ek!0Uj#3?YwTe(Yn9{w<+b|hU3&VX*cR$xt<_KO(rdMO569`& zL$B3_J@i@~($lQfzCHC?odIMeEcS#_SDiC@>a}_Xl-_q+YxPV|y;i5)jeA7BV*S0f zI_++~R-1ydxRK7j+k?1Iye4v4DDy$JP?M(soDHz*K7eB%R4X-M#zT&5UmGbM zdg&pxP-}hhkmDSIT|3ZmTEfg(QHpOgBn-np{6y%}&Q;EAr>9fP{Q`dTa9^SexPxHp zV0$dTENL(wm#JL_O1t^E8T}K6+(Eb`ggpQ=;jgg5?{uDY>N@W^`Q7U7PXndl0^G+M z1Frn~ez;WfW6EosyxzE9@rnJ*%YE;M$H=}9!ur}iw0@Wr_yGH}3A=jj@aP0)q8hUQ z1MJVHVR9O@S`UNrLmXO;^}b4fXRmV)-c{L+uV{IAxExrB>)qQ%;2L>^lzaf!luH-k zo&tgM=TCtm1C~WfNT+3y!g6*|`0-k&G1Bw#*gffHO|jQ$iZ>uLonme;=ky4fyBN1x zr^9C}?03tzzYJXxE|xeIkc@aDTxw$fI&ySLxM#IePap}v2Efcy?Qc!+rE{lS3(q0h zeag*vLWV8Hb9f%ycbwIH>BA*Xi7r|`DrQ}T6MBs2fhXj-X-Q)sdC zf!pyZDf1zo>T-;qgrz?nop6dA`w(}P7XvBopO)h*F~?;1Y=IrKd|#23t1!nz1y#XyXKT4~bvP{J)|k^N??_p-8mCji zk&g2)%*hR~iM4a7&ZW*7rzp;pEN8(;neY*Ac^}m8 zjix@Ne5Z%r#=g{&`D?K+#ec`;_}!<%8L5NS;GEC`4ko@I`T*PVq4)4_hPv}sOWZ%e z9XHb3`P4_0!?Msy<*+KWS~)CH4!rqRD>1vIy0aliPaB_M%4a>Ux;f4(a8B~E^5Gpg z_>|IjLxy|z6rNBXpX2JCqq}frPLJ)%gE!&eQCfQ}@jON64QQU0v%GQn8jY<>b&_=j^3QFB)S-E88z1L}trPjll=zKaswta%pfzLY5H_yuE z53o9BZNmL#0CI3yWd1dHQ@eJ_iTIEg%!D>uI|&tbZgy`+)Lzd0Zpn%A+Ggz9NATGl z$FHqCum!vJ(L@=!1-I==KZhzGCf66j+p39ZE#cyA=%VA{IqCOlczvEh80Dnx<$?Bi zYh3;Hs(Neu<*nf%h35cR>rqJStk2fa^yj4EHtff|NsjZ#^NuqE#&PrLCi%BxKjux6 z3fserQqN*|<78AjljYF%aQV>L=cT}B;RW(*9=yNEcl>4P@<_fsFEB`AC`Fwdc|xh` z7k;^A-{6CZI!x9m6%;fpXUn`a9itEQNd%A;basv5mAR84u5r-$qu9KGRZt-X%QB|B6{xm+8n zOBcEONTfulrh>d%e%8{vQ@P}XZc^hnhZ@l()ByixNMvxh@WlRQlejSUPmwln^(!h* zwF_s2@CV-fS#S;VbL|o@q7wmTj=$NaSlK7!B;uv@a=dz%cS^h{2R_HyxePuPUXo`v z@x^Qha`&8!DotL z#)sQSW#~?v5J@kK?8Lk)FkIx_0Q;*G$ooLAfxugI`35vIqh_?{k^9fH44 zla{*>rpK$&dl$l_PIa8YQ`K8Q2(ujTD5g2Rovm)_RB5#vG>tX5&I{yRswx_Oe-GcVK_OD5qJ=lZLG<-GzcHthJkYjtW2cc<_{58(t ziOX>Yzk037q3v45$=?7aFs&hWD0JmvL~ zyIy&1a5vH`v>N|rgjOjmJD)y_KP_YK`+lH&wz{9I@g43L%4du6*{pr?YoETC8=oc0 zXOFv|ovJA$2_AI%I8P-XBG2^`wO<^L*LUudervTn71zX zde3LI@;T}Lp?pree=467^a&j&rcUO^-q0uWzRz$n{ zSg$US(fh*Lp+op%AMeX2=;zjAmG|8898r$fI`zHsutY)wr=j&-ZIU1Ki6xb z_T0HPl9A`Qa=O`R>N_>V-BDd%=9kTt!YvcCFVXyboxLNH=ah14E}E4){ec*U}AQPp18}}a7Lc<%6E_xF~bQ%oJWkW?E5BM!hO&TsmqDC-_kN{ z#rBW4)RjYV{g(6FZ^?wev9v0_jqi<*YAUBAKHUBLTjrY>Kv z{T6d~nJJCG#lSxpxNDXi>4%o9n(h)e4_-E}bq~1z%#`Zip%Q$3mY!g{x78`-+;`z( z$*(Htn0FNFNZ;>KTi2Ye`CYxO;#)hH;%ri>tGct#y>hmk{~pi3${aN4!OZhE+i9}( z2R#2ObL7wu*wv>%d1a1V`Z#v=l+zexaV>n4YS?*dj%@o8?*o5>@jvG{(m5wmT4o)> zll*3mEItI!`g0xUwz<4LkttvOfPwmR<+a0@`2`HjhM5`7cAiWGw0jw3vraPQi@3*)EX=M-ZmPJZX0XmkMV+O8xoxa5RjxE!MHIg*!b@ z8vcUNpMiH6mbCycJBy-I9G3h?5&EJu?>dx~H7CPw zO1{)cMriqR8FmV_eVUgKS1H~HA=clu%nJ<#ZQ(Ccsu$zCC5- zU%0TkQ$aT;s0*tz;cm%40BF6^k+IuwJ~vH?%Ty8zq4z-D^Hq$=2``e7_)@~l*p?4X!oL}z=M6!!bIhr}q z7HN-i%ERhIn5=x(C48dBHzjOVK5OYCgMN!-tIMF<*J?=~!}cxjcZ%a(2Hn0^W#Zzy zFm&_BvFhcOJO6>myFf!;t`!00P#jv8wPpvSt?)LSL!UU$IFXN;s23%bT!)V5b#k^7 z(#<^wu@pp%Hi1Z}Asq?j97R;{x)G7j5sz28S!fd@Miu%|y^PY1j0H_CZ8vNCVUPw)vP z7R+?is>Nu-#TL`!36w&C)L!hiwG7zgT?VPa34)xQ*B%?NTsj z=})nbpX#RLoyY`i?L6(wb4q_I4fEiswm^r5ZiQI|=K1qKyT@3NN%zzUmYY|{nY^`D zQT}kxkdk=T{TtizA>NV6kT-q_USE~|1NSL5D2GreiHR;TSzXDM4>|a&xT|8A%d0-# zn%}G(@`nm5ha&1quDtZcwOi;?1(|lGX`aJ2~>+aYuFL-o@b@9{-!m?ko`0K%N!A?UMMl=LAeUwon7{K&r$7g9a(UxxdF z^WhgVtYBnOa;=?s2VtipkFH1Z?NA7(Vy&IhyAV9jVdTCqRVkH!zf&JeHPb2Jc683| zlvahY0~@}?C)Z(S|IK!|WEQ~=Z1_@Y7l|yY)nJ$7ybCkKX8WXdR@ZP2de85a(_ojB zNnslj)RbN%UAgL#aFr} z`lKkH-z{IsuA-4ec}wiU4Hg&!%bEe<3_Qy>yl1)EDX~XZ6@&X>GWO_h!51^&et3_} z$iP6?uW{?}Yqf--Pa{|B)4}cfwM;0E@ydH4{9bwYDJI7faICyn2A7B|O8FfF`SxM( zAKc==E<3K)q=)a$HCk$kBkgw7TD*c zBCllPj(7zZxYQ^eSy=qi1NdwR%p5JV&60DaBgGOhEE$;y^f)-j4@i~42voy)*W3G* zF7Ox1AWn;eIBGECZ?<)0YZ=7Bup9<2DdQU?)^FtN(}=Usx!Zdx8(rYCJqv-J1Ht(= zHqb3H^)dv)uq?SOvhb>I;B1Y?{|Y>fjPLQ~-7tF= z{ys$-l*7}&u(U6Sr?C&5WL0?5eb|N1;IQnkhzT$(e}Z>a%3<8phF!?} zJ1{}2tDiwt7koKb2@`w?ryGBYbu1`zDq{i+%f`x>;B{~c{2a@>A|a~5awx4QnCOBp z^QuIarauIy)v)81a~&C4HBv04pMtJdJ@rScMtWAyJc2e5*efveOzLm~@7*dp6_z;S z$nYyM!Df(4{eo9>nC~Plt6_o-D$adsf)A@y zVuCR$&Mq}Ums*&h0XWaW*4W&@1kvSO_qZb`YDGQ`)$!VEe^E~Pk_xfeT?%EhM5v~V z-&;J&2}LQMR9f}JXC{@wwtT1<{>=y#Raka)?a{~c_)U3~ORA(sD<@S^9+xYRvf87D z_L$~*{HZ)@CS9#YuSu${JgO@Xek1~KGt|@`yFHJ;l}G)g>(%HDNjEBw>y$@b?NLj6 z6!aSLofABkO_N%v(UwWA=pmDC4YyR)LH^(Mp{|DQ?cVRy%c~CZ|E{Zp=P)z_rmKUe zf7jK)=YIfE)xo+ybaikZNc!ohdPaJ$IynD_t_}u(vj22!bui$xt`6${={Rr0jJw%- z)j{1qb#>tUgz|3_B` z6F~UqAFDc;@QZ4L>8vh!J9FyVX8pDt7>$eV??@@j4VuEfZ?o= zE1d_ynZ+FbUy9rfGe^v9b%hXWnIOe7 z5oaAJwGv&aI#@k{XoavYLC%9v{8@Zy$UiXSZ??KZ2tAu9hsq#Mr%PPtp-WuZdm3@< z3Zc^_vMmd7c7kwYQfwSuAcS^aB8x9W8Tke%g_2`wxzz`6B*|-KBg={og3oIg_?hxx zfWo8YL9HbKuD}~3=DC<{f9ti+E)SL@OTR1d96G^gLmWR{9fUfiNV{@)4q16zXB^Cg zHQU^ZgRDH#usp&ahR^M(v3|NX2p!HN6)GV70#LFpjiu#Q8Z1ba0u>Q{IDC%A@za$- zX!xaa8njx?^SaJbnAvNy&8;wKo>vZ3LipnOT<2++;hU|l3qr;7$%e`Z|2-(T=8vW2 zRu+7pPv%yMEK6SmpM(N9Sz#u$R~0N!;i6T+mEFOa2RmSM121{e3#2YG^vcNc^!)gr zgLQ?ChegAynjlp{(VC#zhX4u{a-AHQ&kcl+)&xrnN~`MF{eIxCft|2@M3n^hDJWVJ zR4Y>$YY8?T7C(M8Rg^3&Wojb+XW(951cw&p`{;_`Qxzs!5mXxi&Q4fjn#B$5f3zZa ztcV=171`<+1l5(#|5*@Rr6?Cu5Y$#47gG>ir#vpEAZVyOE~X&3QF-KA5VR?-kKO=m zr+B~f$m@b20mCw_UHHS4of!KWrYeGjPXMpJC%i5(y(A!(1PLi6UFqK;ys-EUfZD^1 zerBs{f&>i9v-gD;CVv3VWu@?<(arjK!!o4+ zUSDo3?K&MxyHc-Eq%>ZEqN@S}GQ1!z{FZ=GK2si9kB=7dwm|{_=~D>4PiDH#ubHmo zU4gx@ZyaDiS{KG%w7~a4^@N$(%~sb22^f|-MR29?F*r4G6Vi;EZEnQ@_>z@|3C6?e zY#c{j9VB2_Qqu7x+F#~6{V$VFIT2pHMi(b=IRQfQ=OE;ib>)?=c%9|lg9IS5yJ%!# z-f3lBC;#Po=Tw1!=Ni3zfKgdp3=tjx<*Cc@I+}v}E4+b_07PbHVCV-7-Fk(t5g=Fe z76Jz3+2UZ#yTWx!m$QomAi79+q@3$ag2fgI7|}(-?-=e;-Yyb;FQF|!o&)?NJy#ZI)f_4DH2jD>LOtW2sxEv<9J2Fj*7ZSmA#U^S0hxZrfY=XLFrLFmX=$M@Ow2?BgkV-A{nk%5Uj1P3xe@AT<33?naXT)D+tEd z&;>!~ny&K+%<#?DD+oH*)CEC>TKLLgm>D+P+zNsUwRA!77knCBg%cBIe7u6-cNH#L z5L9~;oKvu}*%mkOiWg0N)2@b8Ek zoxihnMX&(eM0~Z|RWRR2R|IoZ7^@<<3!Fu;A8c+QezYRE^BP?dq}6tvUa-lqXnb{# zprC@Rir`}a8FgHzG0f)%;zuij)wP2a!Gp@@|EvfeR+NjW2!<$+i>U~PDvyh)2p(4+ z7gG^DtvqtA2%fL6kKPB^e(n9vqv=%y7}ga*2EH2XN|>$)@;2})f}0zfil9zIuOfI5 z&?uPE#B9Ba0K>W>_#T`#IdLii4Csnrc8=>5zdkmSR}o-XR|F4%Gv@j@6#)ixMQ|95 zJ8rNl0sy)q_}~WAB{#;Y2r!^4g2!%jo#$cZd6=zN5nxzX1iyjP{iax6ZWRIex*}K! zrz$tcI(iiWhIK_S3Y=*-$5sTubwv(a_AU2+B3n z6~QTtbZ;J~A~@AdR|IRCyUuQyQO0b&ieOE1T@lo|#dY4gB~C?9=N4TNB(%WsgBgFb z^(umd7P=zX3d)Zy;#34%Tj+|QNlRotnDIATuOevDQda~;Te;4YFf(knxm5&3Tj|>d zhv8GWbv9@ zCBdXNx+LfXpN(<+ypo{Pt-2&AcN!P6D9j>zub|EddqM+R!x+tjB&UGG! zy#+JAUQtj^K~_=l1%S)jqc(^6+`x-ov?$o#P8S6u!2KNNcCdVOQSg`wV-*E8z(-S`>`$sEdM|z z&i2u_333!<6$QTmXwunr2E+V)3B->U1t&TMi-PIO=l?7U-d2>0DGJ_E9v4#-%uyZ} zQxq&v9v4#-EK(lviUQR~`EhrB^uEXT(z}p(+l4O+ecWBP%}0%ybC>Jf3p0n8+Z5S4 zAY3e=9=P+$hi{yS?-9%QexzHiC%`*-0ax*@H`og}_dA!nSGYCZ3GNg4jOP2eFITOH z>%0uJ=iu*QdEf)Q!CtM0jQk+7sNff%9IQXg$= zx_PFRA~khesIHclZYyld%c+`d7&fiiwb5zQbZau*KNrP`yb#yzC8@dhuW=Myx zRC9k~w%4nz+5*{$q@B9EcPpn}Zg1t(RXJUfjBnZDM<+t&Ye_n(Df+qt6#GH>ZUiiC z)`in1_Ro>o9r1Cm0{6SlBQQfW+Z5~kN_CRGxACuV3fwQPR^yak0G}V?_|=fiHTaG$ z4xc~&m@`hcFN~Cw4r?OMCT8m{?GWlP$CH(Ft!jZ+gGym-p94&>x!U zzHCNymv*^r=(H}UJl}EVn6c1YJgsk4o4q?zf$j`5<~M1pkHGK?it z^22`l-4C?$`~JX)M11t1Z;mHuo-38-N6vafNZ8_^ zJ=dDbZ>#gU@3+JG!uYvc)Nk%)GpIiB5b{2_kmqXUyT{pYh7%4r2aT_cE~G#9kmnP1 zlB(2k)5X4fS`OVlc`rpRJ9QO85gq>aJ;*0XRo~ zO^u|38SOB-jHiIVYuWVneaVQ z^GXa=eb`(o{D3=;KxAGw+)(cQFmCk2%#>!EBIh<^>fR4a*B`Nm1qZv%P?#Au+lo@{ z5NHJl%lR#sXelUHgmtYhUww*QSUOm$A4Y(VVb@s?Gmd84Ud|mxfR16=wiUEHXW4wLt<%R+4?hR(8~=#Bb`-Q)kKzo1nP+IWOXPuLpw)U*8h!!V zm!RDASS)R$X!_{j8cpp69Ok2tipGUs>DMvjnSUq|qv9`D1Vrc>mq z#~HbP;`NDq;k+U7Mr_N6uEW0>p}Gpo&eXZ=QLpc#w(@A2*g}oAOl+k*8Y_=R+M|s2 znBsX{r#x;??4U+FCU&BS)T|K6NW^Cf2+Dx7=@f#|B_r$vuzgJ>!@nUDm$&JdRZ{h$o`e5Qi%Huxeaj*99n$~kXkH*R)lK7Y!9hx{yc??z_4--?F z^pcVKxR=BBmXTg2<+nm6U___V(HNTQ(R3<(3_~iFt{i1jY2UTsJoq0hs!VzWX#3Hz zdU~1k$S9pjCz29}=4H}}qje^&I|lDBz|6^Gwq7Q!J4R>H??7quOf1dIq~DFvnRF~D zXX4PjOgi=%ok_19i|ePcb|$@gtj?s5V&pK4yJ2P0N5|?+T4o&Hw;yL`QXo2$Zp6?v z<74;G%cL8}=}bBRlml^SUM3xYj}m6nRM)Aok{Dw;5sv4W-_z&GHIO`bSC{Cl-neh=4I0FU(lKK zSyJNAyiEG6=uBE~itD@!Gn1LEmr3hQ(V6rxDD7U1rFoh3@RazO^m*lSF`0CV^0=5x z`ik=S_nCB>;$KWAeN%Z{OeUSFJpNNA?KM>&(5JDTJ=M;n7}1&ZXHqq%vu( zX(p4ZqO{yJol3g`-U2g1nyr^gyH3-o^pe-n?Ey2xX6vQWOJ3KhbPgz`rpMB}R66H% zol4t*vMvtIOQr3m>s0Ez;W`h%%w%TkrBVkUvSm>^8cvz2!RZz|53p>!s3qZ|PL}11Pt>9ZU04=?`z|R5~7%zuvY} z>G-#GDy=>P_dQ@HzS(-IwE7I4N_T+L5H~E$u-SU4bjJ*xN(Y1TT^yR1N(ax>skG!Q z)ao!3#caJ)T5^_7rK>=x@=h$xOQox3=~UVSlx=ZnUMlVJj!vb?@8S%CnaRx7OQp&0 z>QwqJD8=84rFp6J-FI~=Z41iUI5aPnwtY{hQfD?^TVQ4~v-MJ`Gh3(9_dqE*Czj@= z()VWTRN5Yt4RL5*Ds4YUr_#i^c&0Ejnb~@&G;yv@rSm{3GcT6rrP6tGbt>%)%H}vU zFO_zl7eAGz%xC0_Nu_y}$Hk=5g39AxrP9|DaZ5wdFD8>_D36QDq@|R{f6AnL7V5)( z2HVRP*_jk0I+NbH2qMBLp3bDVf~Yd-+lvF4^u@(GlkNbVvm{neFO%+AtTSl@ltXc7 zUM7t!(V4XDQrCGFW=A+<=lU}ym zb($}?GimANI+OOq$aa`I9Q=HezP#_bTxZhc6=-o-VP{exI+M=BQ09lRd+24-c`I}# z?EuP#I5aPlcKA?d($GrR>ATX-q@k5MlfHqG0;^)@@iOTfD|IGq49fd)XkI35yh>-% zBcQZf9UINdq(@fiOgaISvvFu%CY`WaXVR@!=4H|?>vSd!gK{Vi&C8_W^*WPYu>o%y z!pvl5>t)g_Ht0;c9h8O}V`*L{-M%4yCVf=7Tude%t~~x_CY^9KGNW?%SBX@8PvI!V bznDxqR(V`ZCVf_Uswipedx) + { + page home + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/buttonpage02.txt b/nspanel_us_code/buttonpage02.txt new file mode 100644 index 0000000..240f41e --- /dev/null +++ b/nspanel_us_code/buttonpage02.txt @@ -0,0 +1,1254 @@ +Page buttonpage02 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 116 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"buttonpage02\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis button_back,1 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage02\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage02\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 45 + Scope : local + Text : + Max. Text Size: 100 + +Text button01text + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 123 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01bri + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 80 + y coordinate : 61 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02text + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 122 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02bri + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 61 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03text + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 224 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03bri + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 163 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04text + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 224 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04bri + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 163 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05text + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 326 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05bri + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 266 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06text + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 326 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06bri + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 221 + y coordinate : 266 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07text + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 427 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07bri + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 367 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08text + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 427 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08bri + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 367 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bpage02_label + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 8 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01icon + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 61 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02icon + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 61 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 163 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04icon + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 163 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 266 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 266 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07icon + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 367 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08icon + Attributes + ID : 36 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 367 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture button01pic + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button02pic + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button03pic + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button04pic + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button05pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button06pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button07pic + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button08pic + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot button_back + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot button01 + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button01\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button02\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button03\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button04\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button05\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button06\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button07\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button08 + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button08\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage02\", \"component\": \"button08\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 buttonpage01 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page home + } + } + diff --git a/nspanel_us_code/buttonpage03.txt b/nspanel_us_code/buttonpage03.txt new file mode 100644 index 0000000..0e7c16b --- /dev/null +++ b/nspanel_us_code/buttonpage03.txt @@ -0,0 +1,1254 @@ +Page buttonpage03 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 117 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"buttonpage03\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis button_back,1 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage03\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage03\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 45 + Scope : local + Text : + Max. Text Size: 100 + +Text button01text + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 123 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01bri + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 80 + y coordinate : 61 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02text + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 122 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02bri + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 61 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03text + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 224 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03bri + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 163 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04text + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 224 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04bri + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 163 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05text + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 326 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05bri + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 266 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06text + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 326 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06bri + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 221 + y coordinate : 266 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07text + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 427 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07bri + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 367 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08text + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 427 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08bri + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 367 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bpage03_label + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 8 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01icon + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 61 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02icon + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 61 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 163 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04icon + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 163 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 266 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 266 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07icon + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 367 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08icon + Attributes + ID : 36 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 367 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture button01pic + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button02pic + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button03pic + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button04pic + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button05pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button06pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button07pic + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button08pic + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot button_back + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 1 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot button01 + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button01\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button02\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button03\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button04\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button05\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button06\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button07\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button08 + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button08\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage03\", \"component\": \"button08\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 buttonpage02 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page home + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/buttonpage04.txt b/nspanel_us_code/buttonpage04.txt new file mode 100644 index 0000000..79d62fa --- /dev/null +++ b/nspanel_us_code/buttonpage04.txt @@ -0,0 +1,1254 @@ +Page buttonpage04 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 118 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"buttonpage04\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis button_back,1 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage04\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"buttonpage04\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 45 + Scope : local + Text : + Max. Text Size: 100 + +Text button01text + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 123 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01bri + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 80 + y coordinate : 61 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02text + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 122 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02bri + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 61 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03text + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 224 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03bri + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 163 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04text + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 224 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04bri + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 163 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05text + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 326 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05bri + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 266 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06text + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 326 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06bri + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 221 + y coordinate : 266 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07text + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 427 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07bri + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 79 + y coordinate : 367 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08text + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 427 + Width : 80 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 0 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08bri + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 222 + y coordinate : 367 + Width : 50 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 4 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text bpage04_label + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 8 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01icon + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 61 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02icon + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 61 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 163 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04icon + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 163 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 266 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 266 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07icon + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 44 + y coordinate : 367 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button08icon + Attributes + ID : 36 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 187 + y coordinate : 367 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture button01pic + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button02pic + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button03pic + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button04pic + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button05pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button06pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button07pic + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 38 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Picture button08pic + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 181 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot button_back + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot button01 + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button01\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 51 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button02\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button03\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 153 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button04\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button05\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 256 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button06\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 38 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button07\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button08 + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 181 + y coordinate : 357 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button08\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"buttonpage04\", \"component\": \"button08\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 buttonpage03 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/climate.txt b/nspanel_us_code/climate.txt new file mode 100644 index 0000000..109e141 --- /dev/null +++ b/nspanel_us_code/climate.txt @@ -0,0 +1,912 @@ +Page climate + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 126 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"climate\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"climate\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"climate\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (int32) climateslider + Attributes + ID : 7 + Scope: local + Value: 0 + +Variable (int32) va0 + Attributes + ID : 21 + Scope: local + Value: 0 + +Variable (string) climatesetting + Attributes + ID : 24 + Scope : local + Text : + Max. Text Size: 100 + +Number sliderval + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 299 + y coordinate : 440 + Width : 20 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 1 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment : right + Vertical Alignment : center + Value : 0 + Significant digits shown: all + Format : decimal + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text current_temp + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 108 + y coordinate : 161 + Width : 105 + Height : 55 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 5 + Cropped Back. Picture ID: 126 + Horizontal Alignment : right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text target_temp + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 112 + y coordinate : 220 + Width : 105 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 4 + Cropped Back. Picture ID: 126 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text outdoor_temp + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 48 + y coordinate : 73 + Width : 60 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 126 + Horizontal Alignment : right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text hotwater_temp + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 220 + y coordinate : 73 + Width : 60 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 126 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text heating_state + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 105 + y coordinate : 265 + Width : 115 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 126 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text climate_label + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 11 + Width : 250 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 126 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture climate_left + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 50 + y coordinate : 134 + Width : 51 + Height : 173 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 16 + + Events + Touch Press Event + slider.en=1 + + Touch Release Event + slider.en=0 + +Picture climate_middle + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 100 + y coordinate : 118 + Width : 114 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 17 + + Events + Touch Press Event + slider.en=1 + + Touch Release Event + slider.en=0 + +Picture climate_right + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 213 + y coordinate : 132 + Width : 58 + Height : 172 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 18 + + Events + Touch Press Event + slider.en=1 + + Touch Release Event + slider.en=0 + +Picture climate_exit + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 277 + y coordinate : 8 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Picture hotw_bt_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 387 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 79 + +Picture heating_bt_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 145 + y coordinate : 290 + Width : 30 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 82 + +Hotspot decrease_temp + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 52 + y coordinate : 350 + Width : 51 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"decreasetemp\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"decreasetemp\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot increase_temp + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 214 + y coordinate : 350 + Width : 50 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"increasetemp\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"increasetemp\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot climate_back + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 258 + y coordinate : 0 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"close\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"close\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot hotwater_bt + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 128 + y coordinate : 377 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"hotwater\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"hotwater\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot heating_bt + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 139 + y coordinate : 286 + Width : 40 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"heating\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + climatesetting.txt="{\"page\": \"climate\", \"component\": \"heating\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +Timer slider + Attributes + ID : 6 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + // Left hand images vertical + if(tch0>=111&&tch0<169) // Left Hand images L/R coords + { + if(tch1>221&&tch1<=235) // step 0 + { + // climatesetting.txt="climateslider0" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 0}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>206&&tch1<=221) // step 1 + { + // climatesetting.txt="climateslider1" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 1}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>192&&tch1<=206) // step 2 + { + // climatesetting.txt="climateslider2" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 2}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>177&&tch1<=192) // step 3 + { + // climatesetting.txt="climateslider3" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 3}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>162&&tch1<=177) // step 4 + { + // climatesetting.txt="climateslider4" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 4}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>148&&tch1<=162) // step 5 up + { + // climatesetting.txt="climateslider5" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 5}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>133&&tch1<=148) // step 6 up + { + // climatesetting.txt="climateslider6" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 6}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>119&&tch1<=133) // step 7 up + { + // climatesetting.txt="climateslider7" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 7}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>105&&tch1<=119) // step 8 up + { + // climatesetting.txt="climateslider8" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 8}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>90&&tch1<=105) // step 9 up + { + // climatesetting.txt="climateslider9" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 9}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>70&&tch1<=90) // step 10 up + { + // climatesetting.txt="climateslider10" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 10}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>60&&tch1<=70) // step 11 up + { + // climatesetting.txt="climateslider11" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 11}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + } + // middle images horizontal + }else if(tch1>=35&&tch1<=80) // middle image U/D coords + { + if(tch0>169&&tch0<=188) // step 12 across + { + // climatesetting.txt="climateslider12" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 12}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>188&&tch0<=207) // step 13 + { + // climatesetting.txt="climateslider13" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 13}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>207&&tch0<=226) // step 14 + { + // climatesetting.txt="climateslider14" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 14}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>226&&tch0<=245) // step 15 + { + // climatesetting.txt="climateslider15" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 15}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>245&&tch0<=264) // step 16 + { + // climatesetting.txt="climateslider16" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 16}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch0>264&&tch0<=283) // step 17 + { + // climatesetting.txt="climateslider17" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 17}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + } + // right hand images vertical + }else if(tch0>=283&&tch0<=341) // right image L/R coords + { + if(tch1>60&&tch1<=80) // step 18 across + { + // climatesetting.txt="climateslider18" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 18}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>80&&tch1<=94) // step 19 + { + // climatesetting.txt="climateslider19" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 19}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>94&&tch1<=109) // step 20 + { + // climatesetting.txt="climateslider20" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 20}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>109&&tch1<=123) // step 21 + { + // climatesetting.txt="climateslider21" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 21}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>123&&tch1<=138) // step 22 + { + // climatesetting.txt="climateslider22" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 22}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>138&&tch1<=152) // step 23 + { + // climatesetting.txt="climateslider23" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 23}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>152&&tch1<=167) // step 24 + { + // climatesetting.txt="climateslider24" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 24}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>167&&tch1<=181) // step 25 + { + // climatesetting.txt="climateslider25" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 25}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>181&&tch1<=197) // step 26 + { + // climatesetting.txt="climateslider26" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 26}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>197&&tch1<=215) // step 27 + { + // climatesetting.txt="climateslider27" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 27}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + }else if(tch1>215&&tch1<=235) // step 28 + { + // climatesetting.txt="climateslider28" + climatesetting.txt="{\"page\": \"climate\", \"component\": \"climateslider\", \"value\": 28}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints climatesetting.txt,0 + printh 00 + printh FF FF FF + } + } + // pass climateslider.val + +TouchCap swipe + Attributes + ID : 1 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/coversettings.txt b/nspanel_us_code/coversettings.txt new file mode 100644 index 0000000..e6c4255 --- /dev/null +++ b/nspanel_us_code/coversettings.txt @@ -0,0 +1,457 @@ +Page coversettings + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : solid color + Back. Color : 0 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"coversettings\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"coversettings\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"coversettings\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) va1 + Attributes + ID : 9 + Scope : local + Text : newtxt + Max. Text Size: 10 + +Variable (string) coversetting + Attributes + ID : 15 + Scope : local + Text : + Max. Text Size: 100 + +Text battery_value + Attributes + ID : 1 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 248 + y coordinate : 142 + Width : 60 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text cover_value + Attributes + ID : 2 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 119 + y coordinate : 120 + Width : 83 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text cover_name + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 46 + y coordinate : 8 + Width : 204 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_state + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 8 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text battery_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 213 + y coordinate : 142 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 52857 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture cover_exit + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 288 + y coordinate : 9 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Slider coverslider + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 119 + y coordinate : 143 + Width : 83 + Height : 233 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : vertical + Fill : image + Cursor width : auto + Cursor height : 255 + Back. Picture ID : 63 + Slided Back. Picture ID: 62 + Position : 0 + Upper range limit : 100 + Lower range limit : 0 + + Events + Touch Release Event + covx coverslider.val,va1.txt,0,0 + cover_value.txt=va1.txt+"%" + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"cover_position\", \"value\": "+va1.txt+"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Button cover_open + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 262 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : image + Font ID : 1 + Background Picture ID (Unpressed): 57 + Back. Picture ID (Pressed) : 58 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"open_cover\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Button cover_close + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 231 + y coordinate : 327 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : image + Font ID : 1 + Background Picture ID (Unpressed): 59 + Back. Picture ID (Pressed) : 60 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"close_cover\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Button cover_stop + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 327 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : image + Font ID : 1 + Background Picture ID (Unpressed): 65 + Back. Picture ID (Pressed) : 66 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"stop_cover\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot cover_back + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 258 + y coordinate : 0 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"close\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + coversetting.txt="{\"page\": \"coversettings\", \"component\": \"close\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints coversetting.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 8 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 7 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/entitypage01.txt b/nspanel_us_code/entitypage01.txt new file mode 100644 index 0000000..a851e8b --- /dev/null +++ b/nspanel_us_code/entitypage01.txt @@ -0,0 +1,797 @@ +Page entitypage01 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 105 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage01\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage01\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage01\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 60 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 260 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 210 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 110 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 160 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity01_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 310 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 360 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 410 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 60 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 110 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 160 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 210 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 260 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 310 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 360 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 410 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 105 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 60 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 110 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 160 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 210 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 260 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 310 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 360 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 410 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 105 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity01_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 257 + y coordinate : 2 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage04 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page entitypage03 + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page entitypage04 + } + } + diff --git a/nspanel_us_code/entitypage02.txt b/nspanel_us_code/entitypage02.txt new file mode 100644 index 0000000..8ef61df --- /dev/null +++ b/nspanel_us_code/entitypage02.txt @@ -0,0 +1,797 @@ +Page entitypage02 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 106 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage02\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage02\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage02\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 60 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 260 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 210 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 110 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 160 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity02_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 310 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 360 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 410 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 60 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 110 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 160 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 210 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 260 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 310 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 360 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 410 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 106 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 60 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 110 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 160 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 210 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 260 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 310 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 360 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 410 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 106 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity02_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 257 + y coordinate : 2 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage01 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/entitypage03.txt b/nspanel_us_code/entitypage03.txt new file mode 100644 index 0000000..89eb7bc --- /dev/null +++ b/nspanel_us_code/entitypage03.txt @@ -0,0 +1,797 @@ +Page entitypage03 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 107 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage03\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage03\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage03\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 60 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 260 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 210 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 110 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 160 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity03_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 310 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 360 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 410 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 60 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 110 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 160 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 210 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 260 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 310 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 360 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 410 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 107 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 60 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 110 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 160 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 210 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 260 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 310 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 360 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 410 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 107 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity03_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 257 + y coordinate : 2 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage02 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page entitypage01 + } + } + diff --git a/nspanel_us_code/entitypage04.txt b/nspanel_us_code/entitypage04.txt new file mode 100644 index 0000000..4d74634 --- /dev/null +++ b/nspanel_us_code/entitypage04.txt @@ -0,0 +1,797 @@ +Page entitypage04 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 108 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"entitypage04\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage04\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"entitypage04\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text value01_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 60 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 260 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_label + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 210 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_label + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 110 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_label + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 160 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text entity04_label + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 0 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_label + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 310 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_label + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 360 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_label + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 40 + y coordinate : 410 + Width : 150 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_pic + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 60 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_pic + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 110 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_pic + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 160 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_pic + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 210 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_pic + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 260 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06_pic + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 310 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 360 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 5 + y coordinate : 410 + Width : 28 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 108 + Horizontal Alignment : center + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 60 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 110 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 160 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 210 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 260 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 310 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 360 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 199 + y coordinate : 410 + Width : 120 + Height : 28 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 108 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot entity04_back + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 257 + y coordinate : 2 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 entitypage03 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page entitypage01 + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/home.txt b/nspanel_us_code/home.txt new file mode 100644 index 0000000..f7044e5 --- /dev/null +++ b/nspanel_us_code/home.txt @@ -0,0 +1,1324 @@ +Page home + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 103 + + Events + Preinitialize Event + dim=brightness.val + dimtimer.en=1 + sleeptimer.en=1 + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"home\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + vis 255,0 + vis settings_click,1 + +Variable (int32) brightness + Attributes + ID : 2 + Scope: global + Value: 100 + +Variable (int32) brightdd + Attributes + ID : 3 + Scope: global + Value: 40 + +Variable (int32) disdim + Attributes + ID : 4 + Scope: global + Value: 0 + +Variable (int32) sleepmodus + Attributes + ID : 16 + Scope: global + Value: 0 + +Variable (string) lastclick + Attributes + ID : 54 + Scope : local + Text : + Max. Text Size: 100 + +Text time + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 111 + y coordinate : 50 + Width : 160 + Height : 62 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 6 + Cropped Back. Picture ID: 103 + Horizontal Alignment : right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text current_temp + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 191 + y coordinate : 169 + Width : 100 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 4 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text outdoor_temp + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 30 + y coordinate : 264 + Width : 87 + Height : 37 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 4 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 8 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 41 + y coordinate : 117 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_state + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 213 + Width : 120 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text left_bt_text + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 16 + y coordinate : 444 + Width : 120 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 1 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text right_bt_text + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 184 + y coordinate : 441 + Width : 120 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 1 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_01 + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 16 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_02 + Attributes + ID : 22 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_03 + Attributes + ID : 23 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 74 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_04 + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 103 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_05 + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 132 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_06 + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 161 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_07 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 190 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_08 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 219 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_09 + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 248 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_top_10 + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 277 + y coordinate : 5 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 161 + y coordinate : 211 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_state + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 264 + Width : 120 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 161 + y coordinate : 262 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 34 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 161 + y coordinate : 236 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_state + Attributes + ID : 35 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 188 + y coordinate : 238 + Width : 120 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 103 + Horizontal Alignment : left + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text wifi_icon + Attributes + ID : 36 + Scope : global + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 284 + y coordinate : 58 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text indoortempicon + Attributes + ID : 37 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 156 + y coordinate : 175 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button01_icon + Attributes + ID : 38 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 156 + y coordinate : 325 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button02_icon + Attributes + ID : 39 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 203 + y coordinate : 325 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button03_icon + Attributes + ID : 40 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 250 + y coordinate : 325 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button04_icon + Attributes + ID : 41 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 109 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button05_icon + Attributes + ID : 42 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 156 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button06_icon + Attributes + ID : 43 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 203 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text button07_icon + Attributes + ID : 44 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 250 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 8 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text meridiem + Attributes + ID : 53 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 274 + y coordinate : 92 + Width : 35 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 2 + Cropped Back. Picture ID: 103 + Horizontal Alignment : center + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 2 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather + Attributes + ID : 11 + Scope : global + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 163 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 13 + +Picture left_bt_pic + Attributes + ID : 19 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 16 + y coordinate : 466 + Width : 120 + Height : 3 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 77 + +Picture right_bt_pic + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 183 + y coordinate : 466 + Width : 120 + Height : 3 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 77 + +Hotspot fc_weather + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 20 + y coordinate : 163 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"home\", \"component\": \"weather\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"weather\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot jump_climate + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 187 + y coordinate : 157 + Width : 108 + Height : 51 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lastclick.txt="{\"page\": \"home\", \"component\": \"climate\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"climate\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button01 + Attributes + ID : 45 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 156 + y coordinate : 325 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button01\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button02 + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 203 + y coordinate : 325 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button02\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button03 + Attributes + ID : 47 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 250 + y coordinate : 325 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button03\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button04 + Attributes + ID : 48 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 109 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button04\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button05 + Attributes + ID : 49 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 156 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button05\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button06 + Attributes + ID : 50 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 203 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button06\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot button07 + Attributes + ID : 51 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 250 + y coordinate : 373 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"home\", \"component\": \"button07\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot settings_click + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID: on press and release + Opacity : 127 + x coordinate : 103 + y coordinate : 39 + Width : 167 + Height : 86 + Effect : load + Effect Priority : 0 + Effect Time : 300 + +Timer dimtimer + Attributes + ID : 1 + Scope : global + Period (ms): 50000 + Enabled : yes + + Events + Timer Event + if(disdim.val==0) + { + dim=brightdd.val // Dim down screen to val set from HA + } + +Timer swipestore + Attributes + ID : 6 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +Timer sleeptimer + Attributes + ID : 15 + Scope : local + Period (ms): 65000 + Enabled : no + + Events + Timer Event + if(sleepmodus.val==1) + { + screensaver.orign.val=0 + // Go to screensaver page + page screensaver + } + +TouchCap swipe + Attributes + ID : 5 + Scope: local + Value: 0 + + Events + Touch Press Event + swipestore.en=1 // Start swipestore timer + dim=brightness.val // Set brightness to saved value (from HA) + dimtimer.en=1 // Enable timer to calc down for dimming screen + sleeptimer.en=1 + + Touch Release Event + swipestore.en=0 + // Touch has ended, x + if(tch0==0) + { + swipec=swipex-tch2 + // From Left to Right + if(swipec>swipedx) + { + page buttonpage04 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + page buttonpage02 + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + page buttonpage03 + } + } + diff --git a/nspanel_us_code/lightsettings.txt b/nspanel_us_code/lightsettings.txt new file mode 100644 index 0000000..c7635a8 --- /dev/null +++ b/nspanel_us_code/lightsettings.txt @@ -0,0 +1,983 @@ +Page lightsettings + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : solid color + Back. Color : 0 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"lightsettings\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + 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 + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"lightsettings\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"lightsettings\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +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 : 32 + Scope : local + Text : + Max. Text Size: 100 + +Number ring + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 312 + y coordinate : 440 + Width : 8 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 1 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment : right + Vertical Alignment : center + Value : 0 + Significant digits shown: all + Format : decimal + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Number field + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 305 + y coordinate : 440 + Width : 9 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 1 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment : right + Vertical Alignment : center + Value : 0 + Significant digits shown: all + Format : decimal + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text light_value + Attributes + ID : 1 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 117 + y coordinate : 180 + Width : 83 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text light_name + Attributes + ID : 2 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 46 + y coordinate : 8 + Width : 204 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temp_value + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 117 + y coordinate : 180 + Width : 83 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text light_value_2 + Attributes + ID : 27 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 25 + y coordinate : 123 + Width : 50 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temp_value_2 + Attributes + ID : 28 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 123 + Width : 50 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 2 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: right + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text icon_state + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 8 + Width : 35 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 8 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture light_button + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 25 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 69 + +Picture color_button + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 243 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 73 + +Picture temp_button + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 71 + +Picture light_b_press + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 25 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 70 + +Picture temp_b_press + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 72 + +Picture color_b_pres + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 243 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 74 + +Picture colorwheel + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 61 + y coordinate : 222 + Width : 200 + Height : 200 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 50 + + 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\": \"lightsettings\", \"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="" + +Picture light_exit + Attributes + ID : 29 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 287 + y coordinate : 8 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Slider lightslider + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 117 + y coordinate : 205 + Width : 85 + Height : 235 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : vertical + Fill : image + Cursor width : auto + Cursor height : 255 + Back. Picture ID : 75 + Slided Back. Picture ID: 76 + 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\": \"lightsettings\", \"component\": \"brightness_pct\", \"value\": "+va1.txt+"}" + printh 92 + prints "nspanelevent",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 : disabled + Opacity : 127 + x coordinate : 117 + y coordinate : 205 + Width : 85 + Height : 235 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : vertical + Fill : image + Cursor width : auto + Cursor height : 255 + Back. Picture ID : 64 + Slided Back. Picture ID: 64 + 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\": \"lightsettings\", \"component\": \"color_temp\", \"value\": "+va1.txt+"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lightsetting.txt,0 + printh 00 + printh FF FF FF + +Hotspot hsv2rgb + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 51 + y coordinate : 459 + Width : 40 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 8 + y coordinate : 458 + Width : 40 + Height : 20 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 25 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 134 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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: disabled + Opacity : 127 + x coordinate : 243 + y coordinate : 71 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + 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 ##### + +Hotspot light_back + Attributes + ID : 30 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 259 + y coordinate : 0 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + lightsetting.txt="{\"page\": \"lightsettings\", \"component\": \"close\", \"value\": \"press\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lightsetting.txt,0 + printh 00 + printh FF FF FF + + Touch Release Event + lightsetting.txt="{\"page\": \"lightsettings\", \"component\": \"close\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lightsetting.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 21 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/notification.txt b/nspanel_us_code/notification.txt new file mode 100644 index 0000000..2a95ef0 --- /dev/null +++ b/nspanel_us_code/notification.txt @@ -0,0 +1,297 @@ +Page notification + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 114 + + Events + Preinitialize Event + dim=home.brightness.val + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"notification\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"notification\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"notification\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Variable (string) lastclick + Attributes + ID : 11 + Scope : local + Text : + Max. Text Size: 100 + +Text notifi_text01 + Attributes + ID : 2 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 15 + y coordinate : 108 + Width : 291 + Height : 292 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 100 + Word wrap : enabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text notifi_label + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 56 + Width : 300 + Height : 42 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture accept_pic + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 35 + y coordinate : 403 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 85 + +Picture clear_pic + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 230 + y coordinate : 403 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 86 + +Hotspot notifi_back + Attributes + ID : 1 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Hotspot accept + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 35 + y coordinate : 403 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"notification\", \"component\": \"accept\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Hotspot clear + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 230 + y coordinate : 403 + Width : 50 + Height : 50 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Release Event + lastclick.txt="{\"page\": \"notification\", \"component\": \"clear\", \"value\": \"release\"}" + printh 92 + prints "nspanelevent",0 + printh 00 + prints lastclick.txt,0 + printh 00 + printh FF FF FF + +Timer swipestore + Attributes + ID : 9 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 8 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/nspanel_us_Stats.txt b/nspanel_us_code/nspanel_us_Stats.txt new file mode 100644 index 0000000..6e74753 --- /dev/null +++ b/nspanel_us_code/nspanel_us_Stats.txt @@ -0,0 +1,98 @@ +Program.s + 0 Component(s) + 8 Line(s) of event code + 8 Unique line(s) of event code +screensaver + 3 Component(s) + 8 Line(s) of event code + 7 Unique line(s) of event code +qrcode + 6 Component(s) + 46 Line(s) of event code + 28 Unique line(s) of event code +settings + 15 Component(s) + 65 Line(s) of event code + 32 Unique line(s) of event code +boot + 11 Component(s) + 6 Line(s) of event code + 5 Unique line(s) of event code +weather05 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +coversettings + 16 Component(s) + 90 Line(s) of event code + 35 Unique line(s) of event code +weather01 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +notification + 12 Component(s) + 60 Line(s) of event code + 31 Unique line(s) of event code +weather02 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +weather04 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +entitypage03 + 29 Component(s) + 48 Line(s) of event code + 30 Unique line(s) of event code +entitypage04 + 29 Component(s) + 48 Line(s) of event code + 29 Unique line(s) of event code +entitypage01 + 29 Component(s) + 49 Line(s) of event code + 30 Unique line(s) of event code +weather03 + 19 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +climate + 25 Component(s) + 391 Line(s) of event code + 105 Unique line(s) of event code +entitypage02 + 29 Component(s) + 47 Line(s) of event code + 29 Unique line(s) of event code +lightsettings + 33 Component(s) + 306 Line(s) of event code + 164 Unique line(s) of event code +buttonpage03 + 46 Component(s) + 162 Line(s) of event code + 49 Unique line(s) of event code +home + 55 Component(s) + 130 Line(s) of event code + 51 Unique line(s) of event code +buttonpage01 + 46 Component(s) + 161 Line(s) of event code + 48 Unique line(s) of event code +buttonpage02 + 46 Component(s) + 162 Line(s) of event code + 49 Unique line(s) of event code +buttonpage04 + 46 Component(s) + 161 Line(s) of event code + 48 Unique line(s) of event code + +Total + 22 Page(s) + 571 Component(s) + 2183 Line(s) of event code + 431 Unique line(s) of event code diff --git a/nspanel_us_code/qrcode.txt b/nspanel_us_code/qrcode.txt new file mode 100644 index 0000000..0fcb693 --- /dev/null +++ b/nspanel_us_code/qrcode.txt @@ -0,0 +1,168 @@ +Page qrcode + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 104 + + Events + Preinitialize Event + dim=home.brightness.val + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"qrcode\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"qrcode\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"qrcode\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text qrcode_label + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 10 + y coordinate : 7 + Width : 244 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 50712 + Horizontal Alignment: left + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 30 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +QR Code qrcode_value + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 51 + y coordinate : 127 + Width : 222 + Height : 222 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Logo overlay : no + Text : + Max. Text Size : 50 + +Hotspot qrcode_back + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 258 + y coordinate : 2 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/screensaver.txt b/nspanel_us_code/screensaver.txt new file mode 100644 index 0000000..53f4345 --- /dev/null +++ b/nspanel_us_code/screensaver.txt @@ -0,0 +1,45 @@ +Page screensaver + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : solid color + Back. Color : 0 + + Events + Preinitialize Event + dim=0 + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"screensaver\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + +Variable (int32) orign + Attributes + ID : 2 + Scope: global + Value: 0 + +TouchCap wakeup + Attributes + ID : 1 + Scope: local + Value: 0 + + Events + Touch Press Event + page orign.val + diff --git a/nspanel_us_code/settings.txt b/nspanel_us_code/settings.txt new file mode 100644 index 0000000..9fc45f7 --- /dev/null +++ b/nspanel_us_code/settings.txt @@ -0,0 +1,430 @@ +Page settings + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 124 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"settings\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"settings\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"settings\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text a03 + Attributes + ID : 3 + Scope : global + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 237 + y coordinate : 232 + Width : 40 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 10 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: right + Vertical Alignment : bottom + Input Type : character + Text : 80 + Max. Text Size : 3 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a04 + Attributes + ID : 4 + Scope : global + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 236 + y coordinate : 333 + Width : 40 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 10 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: right + Vertical Alignment : bottom + Input Type : character + Text : 10 + Max. Text Size : 3 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a06 + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 58 + Width : 80 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 10 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : Reboot + Max. Text Size : 6 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a07 + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 106 + Width : 80 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 10 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : Sleep + Max. Text Size : 5 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a08 + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 18 + y coordinate : 225 + Width : 85 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 9 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : Brightness + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text a09 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 18 + y coordinate : 325 + Width : 85 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 9 + Back. Color : 0 + Font Color : 65535 + Horizontal Alignment: left + Vertical Alignment : center + Input Type : character + Text : Dimming + Max. Text Size : 7 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture settings_exit + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 289 + y coordinate : 8 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 56 + +Slider brightslider + Attributes + ID : 1 + Scope : global + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 46 + y coordinate : 273 + Width : 227 + Height : 32 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : horizontal + Fill : crop image + Cursor width : auto + Cursor height : 255 + Cropped Back. Picture ID : 124 + Cropped Slided Back. Picture ID: 125 + Position : 80 + Upper range limit : 100 + Lower range limit : 0 + + Events + Touch Release Event + printh 91 + prints "brightslider",0 + printh 00 + prints brightslider.val,0 + printh FF FF FF + +Slider dimslider + Attributes + ID : 2 + Scope : global + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 46 + y coordinate : 374 + Width : 227 + Height : 32 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Direction : horizontal + Fill : crop image + Cursor width : auto + Cursor height : 255 + Cropped Back. Picture ID : 124 + Cropped Slided Back. Picture ID: 125 + Position : 20 + Upper range limit : 100 + Lower range limit : 0 + + Events + Touch Release Event + printh 91 + prints "dimslider",0 + printh 00 + prints dimslider.val,0 + printh FF FF FF + +Dual-state Button bt0 + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 117 + y coordinate : 59 + Width : 80 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Font ID : 9 + Cropped Back. Picture ID (Unpressed): 124 + Back. Picture ID (Pressed) : 65535 + Cropped Back. Picture ID (Pressed) : 125 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 0 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Dual-state Button bt1 + Attributes + ID : 14 + Scope : global + Dragging : 0 + Send Component ID : on press and release + Opacity : 127 + x coordinate : 113 + y coordinate : 105 + Width : 80 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Font ID : 9 + Cropped Back. Picture ID (Unpressed): 124 + Back. Picture ID (Pressed) : 65535 + Cropped Back. Picture ID (Pressed) : 125 + Horizontal Alignment : center + Vertical Alignment : center + State : unpressed + Text : + Max. Text Size : 0 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Hotspot setings_back + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 1 + Width : 60 + Height : 60 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 11 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 12 + 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(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/weather01.txt b/nspanel_us_code/weather01.txt new file mode 100644 index 0000000..7440bca --- /dev/null +++ b/nspanel_us_code/weather01.txt @@ -0,0 +1,516 @@ +Page weather01 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 109 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather01\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather01\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather01\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 97 + y coordinate : 59 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 67 + y coordinate : 102 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 21 + y coordinate : 249 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 308 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 428 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 398 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 338 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 368 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 305 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 335 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 365 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 395 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 425 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 143 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather05 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/weather02.txt b/nspanel_us_code/weather02.txt new file mode 100644 index 0000000..95784d4 --- /dev/null +++ b/nspanel_us_code/weather02.txt @@ -0,0 +1,516 @@ +Page weather02 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 110 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather02\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather02\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather02\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 97 + y coordinate : 59 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 110 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 308 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 110 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 428 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 110 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 398 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 110 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 338 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 110 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 368 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 110 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 305 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 110 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 335 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 110 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 365 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 110 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 395 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 110 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 425 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 110 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 67 + y coordinate : 102 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 21 + y coordinate : 249 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 143 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather01 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/weather03.txt b/nspanel_us_code/weather03.txt new file mode 100644 index 0000000..adca771 --- /dev/null +++ b/nspanel_us_code/weather03.txt @@ -0,0 +1,516 @@ +Page weather03 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 111 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather03\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather03\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather03\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 97 + y coordinate : 59 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 111 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 308 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 111 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 428 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 111 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 398 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 111 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 338 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 111 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 368 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 111 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 305 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 111 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 335 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 111 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 365 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 111 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 395 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 111 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 425 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 111 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 67 + y coordinate : 102 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 21 + y coordinate : 249 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 143 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather02 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/weather04.txt b/nspanel_us_code/weather04.txt new file mode 100644 index 0000000..5563d1a --- /dev/null +++ b/nspanel_us_code/weather04.txt @@ -0,0 +1,516 @@ +Page weather04 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 112 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather04\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather04\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather04\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 97 + y coordinate : 59 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 112 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 308 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 112 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 428 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 112 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 398 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 112 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 338 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 112 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 368 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 112 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 305 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 112 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 335 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 112 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 365 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 112 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 395 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 112 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 425 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 112 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 67 + y coordinate : 102 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 21 + y coordinate : 249 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 143 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather03 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } + diff --git a/nspanel_us_code/weather05.txt b/nspanel_us_code/weather05.txt new file mode 100644 index 0000000..e3d40f2 --- /dev/null +++ b/nspanel_us_code/weather05.txt @@ -0,0 +1,516 @@ +Page weather05 + Attributes + ID : 0 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + Width : 320 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Locked : no + Swide up page ID : disabled + Swide down page ID : disabled + Swide left page ID : disabled + Swide right page ID: disabled + Fill : picture + Back. Picture ID : 113 + + Events + Preinitialize Event + printh 92 + prints "nspanelevent",0 + printh 00 + prints "{\"page\": \"weather05\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0 + printh 00 + printh FF FF FF + + Touch Press Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather05\", \"component\": \"touchevent\", \"value\": \"press\"}",0 + printh 00 + printh FF FF FF + + Touch Release Event + printh 92 + prints "touchevent",0 + printh 00 + prints "{\"page\": \"weather05\", \"component\": \"touchevent\", \"value\": \"release\"}",0 + printh 00 + printh FF FF FF + +Text day + Attributes + ID : 4 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 97 + y coordinate : 59 + Width : 200 + Height : 40 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 113 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 20 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01 + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 308 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 113 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05 + Attributes + ID : 6 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 428 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 113 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04 + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 398 + Width : 220 + Height : 21 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 113 + Horizontal Alignment : right + Vertical Alignment : top + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02 + Attributes + ID : 8 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 338 + Width : 220 + Height : 22 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 113 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03 + Attributes + ID : 9 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 17 + y coordinate : 368 + Width : 220 + Height : 24 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 113 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value01_icon + Attributes + ID : 11 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 305 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 113 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value02_icon + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 335 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 113 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value03_icon + Attributes + ID : 13 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 365 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 113 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value04_icon + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 395 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 113 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text value05_icon + Attributes + ID : 15 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 246 + y coordinate : 425 + Width : 25 + Height : 25 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 7 + Cropped Back. Picture ID: 113 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 10 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text loading + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 45 + y coordinate : 5 + Width : 100 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : solid color + Style : flat + Associated Keyboard : none + Font ID : 3 + Back. Color : 0 + Font Color : 0 + Horizontal Alignment: center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 1 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text date + Attributes + ID : 17 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 67 + y coordinate : 102 + Width : 230 + Height : 30 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : right + Vertical Alignment : bottom + Input Type : character + Text : + Max. Text Size : 25 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Text temperature + Attributes + ID : 18 + Scope : local + Dragging : 0 + Send Component ID : disabled + Opacity : 127 + x coordinate : 21 + y coordinate : 249 + Width : 120 + Height : 23 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Fill : crop image + Associated Keyboard : none + Font ID : 3 + Cropped Back. Picture ID: 109 + Horizontal Alignment : center + Vertical Alignment : center + Input Type : character + Text : + Max. Text Size : 15 + Word wrap : disabled + Horizontal Spacing : 0 + Vertical Spacing : 0 + +Picture weather_icon + Attributes + ID : 3 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 20 + y coordinate : 143 + Width : 100 + Height : 100 + Effect : load + Effect Priority : 0 + Effect Time : 300 + Picture ID : 1 + +Hotspot weather_back + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID: disabled + Opacity : 127 + x coordinate : 260 + y coordinate : 0 + Width : 60 + Height : 35 + Effect : load + Effect Priority : 0 + Effect Time : 300 + + Events + Touch Press Event + page home + +Timer swipestore + Attributes + ID : 2 + Scope : local + Period (ms): 50 + Enabled : no + + Events + Timer Event + swipex=tch0 + swipey=tch1 + +TouchCap swipe + Attributes + ID : 1 + 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 weather04 + } + // Right to Left + swipec2=0-swipedx + if(swipec100) + { + //page + } + // Down to Up + swipec2=0-swipedy + if(swipec<-100) + { + //page + } + } +