mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-14 06:42:58 +08:00
1470 lines
57 KiB
Python
Executable File
1470 lines
57 KiB
Python
Executable File
#!/opt/bin/lv_micropython -i
|
|
import lvgl as lv
|
|
import display_driver_utils
|
|
import fs_driver
|
|
import time,os,sys
|
|
|
|
SCREEN_SIZE_SMALL = (320,240)
|
|
SCREEN_SIZE_MEDIUM = (480,320)
|
|
SCREEN_SIZE_LARGE = (800,600)
|
|
SCREEN_SIZE = SCREEN_SIZE_MEDIUM
|
|
|
|
LV_THEME_DEFAULT_DARK = 0
|
|
LV_OBJ_FLAG_FLEX_IN_NEW_TRACK = 1<<23
|
|
LV_USE_DRAW_MASKS = True
|
|
|
|
global session_desktop,session_tablet,session_mobile
|
|
global down1,down2,down2
|
|
global calendar
|
|
calendar = None
|
|
|
|
session_desktop = 1000
|
|
session_tablet = 1000
|
|
session_mobile = 1000
|
|
|
|
down1 = False
|
|
down2 = False
|
|
down3 = False
|
|
|
|
|
|
def LV_GRID_FR(x):
|
|
return lv.COORD.MAX -100 +x
|
|
|
|
def profile_create(parent):
|
|
panel1 = lv.obj(parent)
|
|
panel1.set_height(lv.SIZE_CONTENT)
|
|
panel1.set_width(lv.SIZE_CONTENT)
|
|
|
|
# Create an image from the png file
|
|
try:
|
|
if osVersion == "esp32":
|
|
with open('images/avatar.png','rb') as f:
|
|
png_data = f.read()
|
|
else:
|
|
with open(script_path + '/assets/avatar.png','rb') as f:
|
|
png_data = f.read()
|
|
except:
|
|
print("Could not find avatar.png")
|
|
sys.exit()
|
|
|
|
avatar_argb = lv.img_dsc_t({
|
|
'data_size': len(png_data),
|
|
'data': png_data
|
|
})
|
|
|
|
avatar = lv.img(panel1)
|
|
avatar.set_src(avatar_argb)
|
|
|
|
name = lv.label(panel1)
|
|
name.set_text("Elena Smith")
|
|
name.add_style(style_title, 0)
|
|
|
|
dsc = lv.label(panel1)
|
|
dsc.add_style(style_text_muted, 0)
|
|
dsc.set_text("This is a short description of me.\nTake a look at my profile!" )
|
|
dsc.set_long_mode(lv.label.LONG.WRAP)
|
|
|
|
email_icn = lv.label(panel1)
|
|
email_icn.add_style(style_icon, 0)
|
|
email_icn.set_text(lv.SYMBOL.KEYBOARD)
|
|
|
|
email_label = lv.label(panel1)
|
|
email_label.set_text("elena@smith.com")
|
|
|
|
call_icn = lv.label(panel1)
|
|
call_icn.add_style(style_icon, 0)
|
|
call_icn.set_text(lv.SYMBOL.CALL)
|
|
|
|
call_label = lv.label(panel1)
|
|
call_label.set_text("+79 246 123 4567")
|
|
|
|
log_out_btn = lv.btn(panel1)
|
|
log_out_btn.set_height(lv.SIZE_CONTENT)
|
|
|
|
label = lv.label(log_out_btn)
|
|
label.set_text("Log out")
|
|
label.center()
|
|
|
|
invite_btn = lv.btn(panel1)
|
|
invite_btn.add_state(lv.STATE.DISABLED)
|
|
invite_btn.set_height(lv.SIZE_CONTENT)
|
|
|
|
label = lv.label(invite_btn)
|
|
label.set_text("Invite")
|
|
label.center()
|
|
|
|
# Create a keyboard
|
|
|
|
kb = lv.keyboard(lv.scr_act())
|
|
kb.add_flag(lv.obj.FLAG.HIDDEN)
|
|
|
|
# Create the second panel
|
|
panel2 = lv.obj(parent)
|
|
panel2.set_height(lv.SIZE_CONTENT)
|
|
|
|
panel2_title = lv.label(panel2)
|
|
panel2_title.set_text("Your profile")
|
|
panel2_title.add_style(style_title, 0)
|
|
|
|
user_name_label = lv.label(panel2)
|
|
user_name_label.set_text("User name")
|
|
user_name_label.add_style(style_text_muted, 0)
|
|
|
|
user_name = lv.textarea(panel2)
|
|
user_name.set_one_line(True)
|
|
user_name.set_placeholder_text("Your name")
|
|
user_name.add_event(lambda e: ta_event_cb(e,kb,tv),lv.EVENT.ALL,None)
|
|
|
|
password_label = lv.label(panel2)
|
|
password_label.set_text("Password")
|
|
password_label.add_style(style_text_muted, 0)
|
|
|
|
password = lv.textarea(panel2)
|
|
password.set_one_line(True)
|
|
password.set_password_mode(True)
|
|
password.set_placeholder_text("Min. 8 chars.")
|
|
password.add_event(lambda e: ta_event_cb(e,kb,tv),lv.EVENT.ALL,None)
|
|
|
|
gender_label = lv.label(panel2)
|
|
gender_label.set_text("Gender")
|
|
gender_label.add_style(style_text_muted, 0)
|
|
|
|
gender = lv.dropdown(panel2)
|
|
gender.set_options_static("Male\nFemale\nOther")
|
|
|
|
birthday_label = lv.label(panel2)
|
|
birthday_label.set_text("Birthday")
|
|
birthday_label.add_style(style_text_muted, 0)
|
|
|
|
birthdate = lv.textarea(panel2)
|
|
birthdate.set_one_line(True)
|
|
birthdate.add_event(birthday_event_cb, lv.EVENT.ALL, None)
|
|
|
|
# Create the third panel
|
|
panel3 = lv.obj(parent)
|
|
panel3_title = lv.label(panel3)
|
|
panel3_title.set_text("Your skills")
|
|
panel3_title.add_style(style_title, 0)
|
|
|
|
experience_label = lv.label(panel3)
|
|
experience_label.set_text("Experience")
|
|
experience_label.add_style(style_text_muted, 0)
|
|
|
|
slider1 = lv.slider(panel3)
|
|
slider1.set_width(lv.pct(95))
|
|
# slider1.add_event(slider_event_cb, lv.event.ALL, None)
|
|
slider1.refresh_ext_draw_size()
|
|
|
|
team_player_label = lv.label(panel3)
|
|
team_player_label.set_text("Team player")
|
|
team_player_label.add_style(style_text_muted, 0)
|
|
|
|
sw1 = lv.switch(panel3)
|
|
|
|
hard_working_label = lv.label(panel3)
|
|
hard_working_label.set_text("Hard-working")
|
|
hard_working_label.add_style(style_text_muted, 0)
|
|
|
|
sw2 = lv.switch(panel3)
|
|
|
|
if disp_size == DISP_LARGE:
|
|
grid_main_col_dsc = [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_main_row_dsc = [lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_TEMPLATE_LAST]
|
|
|
|
# Create the top panel
|
|
grid_1_col_dsc = [lv.GRID_CONTENT, 5, lv.GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_1_row_dsc = [lv.GRID_CONTENT, lv.GRID_CONTENT, 10, lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_TEMPLATE_LAST]
|
|
|
|
grid_2_col_dsc = [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_2_row_dsc = [
|
|
lv.GRID_CONTENT, # Title
|
|
5, # Separator
|
|
lv.GRID_CONTENT, # Box title
|
|
30, # Boxes
|
|
5, # Separator
|
|
lv.GRID_CONTENT, # Box title
|
|
30, # Boxes
|
|
lv.GRID_TEMPLATE_LAST]
|
|
|
|
|
|
parent.set_grid_dsc_array(grid_main_col_dsc, grid_main_row_dsc)
|
|
|
|
panel1.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
|
|
panel1.set_grid_dsc_array(grid_1_col_dsc, grid_1_row_dsc)
|
|
avatar.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 1, lv.GRID_ALIGN.CENTER, 0, 5)
|
|
name.set_grid_cell(lv.GRID_ALIGN.START, 2, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
dsc.set_grid_cell(lv.GRID_ALIGN.STRETCH, 2, 4, lv.GRID_ALIGN.START, 1, 1)
|
|
email_icn.set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
email_label.set_grid_cell(lv.GRID_ALIGN.START, 3, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
call_icn.set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
call_label.set_grid_cell(lv.GRID_ALIGN.START, 3, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
log_out_btn.set_grid_cell(lv.GRID_ALIGN.STRETCH, 4, 1, lv.GRID_ALIGN.CENTER, 3, 2)
|
|
invite_btn.set_grid_cell(lv.GRID_ALIGN.STRETCH, 5, 1, lv.GRID_ALIGN.CENTER, 3, 2)
|
|
|
|
panel2.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.START, 1, 1)
|
|
panel2.set_grid_dsc_array(grid_2_col_dsc, grid_2_row_dsc)
|
|
panel2_title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
user_name.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
user_name_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
password.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
password_label.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
birthdate.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.CENTER, 6, 1)
|
|
birthday_label.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.START, 5, 1)
|
|
gender.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.CENTER, 6, 1)
|
|
gender_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 5, 1)
|
|
|
|
panel3.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.STRETCH, 1, 1)
|
|
panel3.set_grid_dsc_array(grid_2_col_dsc, grid_2_row_dsc)
|
|
panel3_title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
slider1.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 2, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
experience_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
sw2.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.CENTER, 6, 1)
|
|
hard_working_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 5, 1)
|
|
sw1.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.CENTER, 6, 1)
|
|
team_player_label.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.START, 5, 1)
|
|
|
|
elif disp_size == DISP_MEDIUM :
|
|
grid_main_col_dsc = [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_main_row_dsc = [lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_TEMPLATE_LAST]
|
|
|
|
|
|
# Create the top panel
|
|
grid_1_col_dsc = [lv.GRID_CONTENT, 1, lv.GRID_CONTENT, LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_1_row_dsc = [
|
|
lv.GRID_CONTENT, # Name
|
|
lv.GRID_CONTENT, # Description
|
|
lv.GRID_CONTENT, # Email
|
|
-20,
|
|
lv.GRID_CONTENT, # Phone
|
|
lv.GRID_CONTENT, # Buttons
|
|
lv.GRID_TEMPLATE_LAST]
|
|
|
|
grid_2_col_dsc= [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_2_row_dsc = [
|
|
lv.GRID_CONTENT, # Title
|
|
5, # Separator
|
|
lv.GRID_CONTENT, # Box title
|
|
40, # Box
|
|
lv.GRID_CONTENT, # Box title
|
|
40, # Box
|
|
lv.GRID_CONTENT, # Box title
|
|
40, # Box
|
|
lv.GRID_CONTENT, # Box title
|
|
40, # Box
|
|
lv.GRID_TEMPLATE_LAST]
|
|
|
|
|
|
parent.set_grid_dsc_array(grid_main_col_dsc, grid_main_row_dsc)
|
|
panel1.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
|
|
log_out_btn.set_width(120)
|
|
invite_btn.set_width(120)
|
|
|
|
panel1.set_grid_dsc_array(grid_1_col_dsc, grid_1_row_dsc)
|
|
avatar.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 1, lv.GRID_ALIGN.START, 0, 4)
|
|
name.set_grid_cell(lv.GRID_ALIGN.START, 2, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
dsc.set_grid_cell(lv.GRID_ALIGN.STRETCH, 2, 2, lv.GRID_ALIGN.START, 1, 1)
|
|
email_label.set_grid_cell(lv.GRID_ALIGN.START, 3, 1, lv.GRID_ALIGN.CENTER, 2, 1)
|
|
email_icn.set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 2, 1)
|
|
call_icn.set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
call_label.set_grid_cell(lv.GRID_ALIGN.START, 3, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
log_out_btn.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.CENTER, 5, 1)
|
|
invite_btn.set_grid_cell(lv.GRID_ALIGN.END, 3, 1, lv.GRID_ALIGN.CENTER, 5, 1)
|
|
|
|
panel2.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.START, 1, 1)
|
|
panel2.set_grid_dsc_array(grid_2_col_dsc, grid_2_row_dsc)
|
|
panel2_title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
user_name_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 2, 1)
|
|
user_name.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 3, 1)
|
|
password_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 4, 1)
|
|
password.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 5, 1)
|
|
birthday_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 6, 1)
|
|
birthdate.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 7, 1)
|
|
gender_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 8, 1)
|
|
gender.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 9, 1)
|
|
|
|
panel3.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.STRETCH, 1, 1)
|
|
panel3.set_grid_dsc_array(grid_2_col_dsc, grid_2_row_dsc)
|
|
panel3_title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
slider1.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 2, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
experience_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
hard_working_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 4, 1)
|
|
sw2.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 5, 1)
|
|
team_player_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 6, 1)
|
|
sw1.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 7, 1)
|
|
|
|
else :
|
|
grid_main_col_dsc = [LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_main_row_dsc = [lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_TEMPLATE_LAST]
|
|
parent.set_grid_dsc_array(grid_main_col_dsc, grid_main_row_dsc)
|
|
|
|
# Create the top panel
|
|
grid_1_col_dsc = [lv.GRID_CONTENT, LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_1_row_dsc = [lv.GRID_CONTENT, # Avatar
|
|
lv.GRID_CONTENT, # Name
|
|
lv.GRID_CONTENT, # Description
|
|
lv.GRID_CONTENT, # Email
|
|
lv.GRID_CONTENT, # Phone number
|
|
lv.GRID_CONTENT, # Button1
|
|
lv.GRID_CONTENT, # Button2
|
|
lv.GRID_TEMPLATE_LAST]
|
|
|
|
panel1.set_grid_dsc_array(grid_1_col_dsc, grid_1_row_dsc)
|
|
|
|
|
|
grid_2_col_dsc = [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_2_row_dsc = [
|
|
lv.GRID_CONTENT, # Title
|
|
5, # Separator
|
|
lv.GRID_CONTENT, # Box title
|
|
40, # Box
|
|
lv.GRID_CONTENT, # Box title
|
|
40, # Box
|
|
lv.GRID_CONTENT, # Box title
|
|
40, # Box
|
|
lv.GRID_CONTENT, # Box title
|
|
40, lv.GRID_TEMPLATE_LAST ] # Box
|
|
|
|
|
|
panel2.set_grid_dsc_array(grid_2_col_dsc, grid_2_row_dsc)
|
|
panel3.set_grid_dsc_array(grid_2_col_dsc, grid_2_row_dsc)
|
|
|
|
panel1.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
|
|
dsc.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
|
|
|
|
avatar.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
name.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 2, lv.GRID_ALIGN.CENTER, 1, 1)
|
|
dsc.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 2, 1)
|
|
email_icn.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
email_label.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
call_icn.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
call_label.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
log_out_btn.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.CENTER, 5, 1)
|
|
invite_btn.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.CENTER, 6, 1)
|
|
|
|
panel2.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.START, 1, 1)
|
|
panel2_title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
user_name_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 2, 1)
|
|
user_name.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 3, 1)
|
|
password_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 4, 1)
|
|
password.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 5, 1)
|
|
birthday_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 6, 1)
|
|
birthdate.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 7, 1)
|
|
gender_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 8, 1)
|
|
gender.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 2, lv.GRID_ALIGN.START, 9, 1)
|
|
|
|
panel3.set_height(lv.SIZE_CONTENT)
|
|
panel3.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
panel3_title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
experience_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
slider1.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 2, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
hard_working_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 4, 1)
|
|
sw1.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 5, 1)
|
|
team_player_label.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.START, 4, 1)
|
|
sw2.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.START, 5, 1)
|
|
|
|
def analytics_create(parent):
|
|
parent.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
|
|
|
grid_chart_row_dsc = [lv.GRID_CONTENT, LV_GRID_FR(1), 10, lv.GRID_TEMPLATE_LAST]
|
|
grid_chart_col_dsc = [20, LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
|
|
chart1_cont = lv.obj(parent)
|
|
chart1_cont.set_flex_grow(1)
|
|
chart1_cont.set_grid_dsc_array(grid_chart_col_dsc, grid_chart_row_dsc)
|
|
|
|
chart1_cont.set_height(lv.pct(100))
|
|
chart1_cont.set_style_max_height(300, 0)
|
|
|
|
title = lv.label(chart1_cont)
|
|
title.set_text("Unique visitors")
|
|
title.add_style(style_title, 0)
|
|
title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 0, 1)
|
|
|
|
chart1 = lv.chart(chart1_cont)
|
|
lv.group_get_default().add_obj(chart1)
|
|
chart1.add_flag(lv.obj.FLAG.SCROLL_ON_FOCUS)
|
|
chart1.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.STRETCH, 1, 1)
|
|
chart1.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 0, 0, 5, 1, True, 80)
|
|
chart1.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 0, 0, 12, 1, True, 50)
|
|
chart1.set_div_line_count(0, 12)
|
|
chart1.set_point_count(12)
|
|
chart1.add_event(chart_event_cb, lv.EVENT.ALL, None)
|
|
if disp_size == DISP_SMALL:
|
|
chart1.set_zoom_x(256 * 3)
|
|
elif disp_size == DISP_MEDIUM:
|
|
chart1.set_zoom_x(256 * 2)
|
|
|
|
chart1.set_style_border_side(lv.BORDER_SIDE.LEFT | lv.BORDER_SIDE.BOTTOM, 0)
|
|
chart1.set_style_radius(0, 0)
|
|
|
|
ser1 = chart1.add_series(lv.theme_get_color_primary(chart1), lv.chart.AXIS.PRIMARY_Y)
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
chart1.set_next_value(ser1, lv.rand(10, 80))
|
|
|
|
chart2_cont = lv.obj(parent)
|
|
chart2_cont.add_flag(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
chart2_cont.set_flex_grow(1)
|
|
|
|
chart2_cont.set_height(lv.pct(100))
|
|
chart2_cont.set_style_max_height(300, 0)
|
|
|
|
chart2_cont.set_grid_dsc_array(grid_chart_col_dsc, grid_chart_row_dsc)
|
|
|
|
title = lv.label(chart2_cont)
|
|
title.set_text("Monthly revenue")
|
|
title.add_style(style_title, 0)
|
|
title.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 0, 1)
|
|
|
|
chart2 = lv.chart(chart2_cont)
|
|
lv.group_get_default().add_obj(chart2)
|
|
chart2.add_flag(lv.obj.FLAG.SCROLL_ON_FOCUS)
|
|
|
|
chart2.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.STRETCH, 1, 1)
|
|
chart2.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 0, 0, 5, 1, True, 80)
|
|
chart2.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 0, 0, 12, 1, True, 50)
|
|
chart2.set_size(lv.pct(100), lv.pct(100))
|
|
chart2.set_type(lv.chart.TYPE.BAR)
|
|
chart2.set_div_line_count(6, 0)
|
|
chart2.set_point_count(12)
|
|
chart2.add_event(chart_event_cb, lv.EVENT.ALL, None)
|
|
chart2.set_zoom_x(256 * 2)
|
|
chart2.set_style_border_side(lv.BORDER_SIDE.LEFT | lv.BORDER_SIDE.BOTTOM, 0)
|
|
chart2.set_style_radius(0, 0)
|
|
|
|
if disp_size == DISP_SMALL:
|
|
chart2.set_style_pad_gap(0, lv.PART.ITEMS)
|
|
chart2.set_style_pad_gap(2, lv.PART.MAIN)
|
|
|
|
elif disp_size == DISP_LARGE:
|
|
chart2.set_style_pad_gap(16, 0)
|
|
|
|
ser2 = chart2.add_series(lv.palette_lighten(lv.PALETTE.GREY, 1), lv.chart.AXIS.PRIMARY_Y)
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
chart2.set_next_value(ser2, lv.rand(10, 80))
|
|
|
|
ser3 = chart2.add_series(lv.theme_get_color_primary(chart1), lv.chart.AXIS.PRIMARY_Y)
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
chart2.set_next_value(ser3, lv.rand(10, 80))
|
|
|
|
meter1 = create_meter_box(parent, "Monthly Target", "Revenue: 63%", "Sales: 44%", "Costs: 58%")
|
|
lv.obj.get_parent(lv.obj.__cast__(meter1)).add_flag(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
meter1.set_scale_range(0, 100, 270, 90)
|
|
meter1.set_scale_ticks(0, 0, 0, lv.color_black())
|
|
indic1 = meter1.add_arc(15, lv.palette_main(lv.PALETTE.BLUE), 0)
|
|
indic2 = meter1.add_arc(15, lv.palette_main(lv.PALETTE.RED), -20)
|
|
indic3 = meter1.add_arc(15, lv.palette_main(lv.PALETTE.GREEN), -40)
|
|
|
|
a1 = lv.anim_t()
|
|
a1.init()
|
|
a1.set_values(20, 100)
|
|
a1.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
|
a1.set_time(4100)
|
|
a1.set_var(indic1)
|
|
a1.set_playback_time(2700)
|
|
a1.set_custom_exec_cb(lambda a1,val: meter1_indic1_anim_cb(meter1,indic1,val))
|
|
lv.anim_t.start(a1)
|
|
|
|
a2 = lv.anim_t()
|
|
a2.init()
|
|
a2.set_values(20, 100)
|
|
a2.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
|
a2.set_var(indic2)
|
|
a2.set_time(2600)
|
|
a2.set_playback_time(3200)
|
|
a2.set_custom_exec_cb(lambda a2,val: meter1_indic2_anim_cb(meter1,indic2,val))
|
|
lv.anim_t.start(a2)
|
|
|
|
a3 = lv.anim_t()
|
|
a3.init()
|
|
a3.set_values(20, 100)
|
|
a3.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
|
a3.set_var(indic3)
|
|
a3.set_time(2800)
|
|
a3.set_playback_time(1800)
|
|
a3.set_custom_exec_cb(lambda a3,val: meter1_indic3_anim_cb(meter1,indic3,val))
|
|
lv.anim_t.start(a3)
|
|
|
|
meter2 = create_meter_box(parent, "Sessions", "Desktop: ", "Tablet: ", "Mobile: ")
|
|
if disp_size < DISP_LARGE:
|
|
lv.obj.get_parent(lv.obj.__cast__(meter2)).add_flag(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
|
|
meter2.set_scale_range(0, 100, 360, 90)
|
|
meter2.set_scale_ticks(0, 0, 0, lv.color_black())
|
|
|
|
meter2_indic= [None]*3
|
|
meter2_indic[0] = meter2.add_arc(20, lv.palette_main(lv.PALETTE.RED), -10)
|
|
meter2.set_indicator_start_value(meter2_indic[0], 0)
|
|
meter2.set_indicator_end_value(meter2_indic[0], 39)
|
|
|
|
meter2_indic[1] = meter2.add_arc(30, lv.palette_main(lv.PALETTE.BLUE), 0)
|
|
meter2.set_indicator_start_value(meter2_indic[1], 40)
|
|
meter2.set_indicator_end_value(meter2_indic[1], 69)
|
|
|
|
meter2_indic[2] = meter2.add_arc(10, lv.palette_main(lv.PALETTE.GREEN), -20)
|
|
meter2.set_indicator_start_value(meter2_indic[2], 70)
|
|
meter2.set_indicator_end_value(meter2_indic[2], 99)
|
|
|
|
lv.timer_create(lambda t: meter2_timer_cb(t,meter2,meter2_indic), 100, None)
|
|
|
|
meter3 = create_meter_box(parent, "Network Speed", "Low speed", "Normal Speed", "High Speed")
|
|
if disp_size < DISP_LARGE:
|
|
lv.obj.get_parent(lv.obj.__cast__(meter3)).add_flag(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
|
|
# Add a special circle to the needle's pivot
|
|
meter3.set_style_pad_hor(10, 0)
|
|
meter3.set_style_size(10, 10, lv.PART.INDICATOR)
|
|
meter3.set_style_radius(lv.RADIUS_CIRCLE, lv.PART.INDICATOR)
|
|
meter3.set_style_bg_opa(lv.OPA.COVER, lv.PART.INDICATOR)
|
|
meter3.set_style_bg_color(lv.palette_darken(lv.PALETTE.GREY, 4), lv.PART.INDICATOR)
|
|
meter3.set_style_outline_color(lv.color_white(), lv.PART.INDICATOR)
|
|
meter3.set_style_outline_width(3, lv.PART.INDICATOR)
|
|
meter3.set_style_text_color(lv.palette_darken(lv.PALETTE.GREY, 1), lv.PART.TICKS)
|
|
|
|
meter2.set_scale_range(10, 60, 220, 360 - 220)
|
|
meter3.set_scale_ticks(21, 3, 17, lv.color_white())
|
|
meter3.set_scale_major_ticks(4, 4, 22, lv.color_white(), 15)
|
|
|
|
indic4 = meter3.add_arc(10, lv.palette_main(lv.PALETTE.RED), 0)
|
|
meter3.set_indicator_start_value(indic4, 0)
|
|
meter3.set_indicator_end_value(indic4, 20)
|
|
|
|
indic5 = meter3.add_scale_lines(lv.palette_darken(lv.PALETTE.RED, 3), lv.palette_darken(lv.PALETTE.RED, 3), True, 0)
|
|
meter3.set_indicator_start_value(indic5, 0)
|
|
meter3.set_indicator_end_value(indic5, 20)
|
|
|
|
indic6 = meter3.add_arc(12, lv.palette_main(lv.PALETTE.BLUE), 0)
|
|
meter3.set_indicator_start_value(indic6, 20)
|
|
meter3.set_indicator_end_value(indic6, 40)
|
|
|
|
indic7 = meter3.add_scale_lines(lv.palette_darken(lv.PALETTE.BLUE, 3), lv.palette_darken(lv.PALETTE.BLUE, 3), True, 0)
|
|
meter3.set_indicator_start_value(indic7, 20)
|
|
meter3.set_indicator_end_value(indic7, 40)
|
|
|
|
indic8 = meter3.add_arc(10, lv.palette_main(lv.PALETTE.GREEN), 0)
|
|
meter3.set_indicator_start_value(indic8, 40)
|
|
meter3.set_indicator_end_value(indic8, 60)
|
|
|
|
indic9 = meter3.add_scale_lines(lv.palette_darken(lv.PALETTE.GREEN, 3), lv.palette_darken(lv.PALETTE.GREEN, 3), True, 0)
|
|
meter3.set_indicator_start_value(indic9, 40)
|
|
meter3.set_indicator_end_value(indic9, 60)
|
|
|
|
indic10 = meter3.add_needle_line(4, lv.palette_darken(lv.PALETTE.GREY, 4), -25)
|
|
|
|
mbps_label = lv.label(meter3)
|
|
mbps_label.set_text("-- Mbps")
|
|
mbps_label.add_style(style_title, 0)
|
|
|
|
# mbps_unit_label = lv.label(meter3)
|
|
# mbps_unit_label.set_text("Mbps")
|
|
|
|
a4= lv.anim_t()
|
|
a4.init()
|
|
a4.set_values(10, 60)
|
|
a4.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
|
a4.set_var(indic10)
|
|
a4.set_time(4100)
|
|
a4.set_playback_time(800)
|
|
a4.set_custom_exec_cb(lambda a4,val: meter3_anim_cb(meter3,indic10,mbps_label,val))
|
|
lv.anim_t.start(a4)
|
|
|
|
parent.update_layout()
|
|
if disp_size == DISP_MEDIUM:
|
|
meter1.set_size(200, 200)
|
|
meter2.set_size(200, 200)
|
|
meter3.set_size(200, 200)
|
|
else :
|
|
meter_w = meter1.get_width()
|
|
meter1.set_height(meter_w)
|
|
meter2.set_height(meter_w)
|
|
meter3.set_height(meter_w)
|
|
|
|
mbps_label.align(lv.ALIGN.TOP_MID, 10, lv.pct(55))
|
|
# mbps_unit_label.align_to(mbps_label, lv.ALIGN.OUT_RIGHT_BOTTOM, 10, 0)
|
|
|
|
def create_meter_box(parent, title, text1, text2, text3):
|
|
|
|
cont = lv.obj(parent)
|
|
cont.set_height(lv.SIZE_CONTENT)
|
|
cont.set_flex_grow(1)
|
|
|
|
title_label = lv.label(cont)
|
|
title_label.set_text(title)
|
|
title_label.add_style(style_title, 0)
|
|
|
|
meter = lv.meter(cont)
|
|
meter.remove_style(None, lv.PART.MAIN)
|
|
meter.remove_style(None, lv.PART.INDICATOR)
|
|
meter.set_width(lv.pct(100))
|
|
|
|
bullet1 = lv.obj(cont)
|
|
bullet1.set_size(13, 13)
|
|
bullet1.remove_style(None, lv.PART.SCROLLBAR)
|
|
bullet1.add_style(style_bullet, 0)
|
|
bullet1.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), 0)
|
|
label1 = lv.label(cont)
|
|
label1.set_text(text1)
|
|
|
|
bullet2 = lv.obj(cont)
|
|
bullet2.set_size(13, 13)
|
|
bullet2.remove_style(None, lv.PART.SCROLLBAR)
|
|
bullet2.add_style(style_bullet, 0)
|
|
bullet2.set_style_bg_color(lv.palette_main(lv.PALETTE.BLUE), 0)
|
|
label2 = lv.label(cont)
|
|
label2.set_text(text2)
|
|
|
|
bullet3 = lv.obj(cont)
|
|
bullet3.set_size(13, 13)
|
|
bullet3.remove_style(None, lv.PART.SCROLLBAR)
|
|
bullet3.add_style(style_bullet, 0)
|
|
bullet3.set_style_bg_color(lv.palette_main(lv.PALETTE.GREEN), 0)
|
|
label3 = lv.label(cont)
|
|
label3.set_text(text3)
|
|
|
|
if disp_size == DISP_MEDIUM:
|
|
grid_col_dsc = [lv.GRID_CONTENT, LV_GRID_FR(1), lv.GRID_CONTENT,LV_GRID_FR(8), lv.GRID_TEMPLATE_LAST]
|
|
grid_row_dsc = [lv.GRID_CONTENT, LV_GRID_FR(1), lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_CONTENT, LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
|
|
cont.set_grid_dsc_array(grid_col_dsc, grid_row_dsc)
|
|
title_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 4, lv.GRID_ALIGN.START, 0, 1)
|
|
meter.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 1, 3)
|
|
bullet1.set_grid_cell(lv.GRID_ALIGN.START, 2, 1, lv.GRID_ALIGN.CENTER, 2, 1)
|
|
bullet2.set_grid_cell(lv.GRID_ALIGN.START, 2, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
bullet3.set_grid_cell(lv.GRID_ALIGN.START, 2, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
label1.set_grid_cell(lv.GRID_ALIGN.STRETCH, 3, 1, lv.GRID_ALIGN.CENTER, 2, 1)
|
|
label2.set_grid_cell(lv.GRID_ALIGN.STRETCH, 3, 1, lv.GRID_ALIGN.CENTER, 3, 1)
|
|
label3.set_grid_cell(lv.GRID_ALIGN.STRETCH, 3, 1, lv.GRID_ALIGN.CENTER, 4, 1)
|
|
|
|
else:
|
|
grid_col_dsc = [lv.GRID_CONTENT, LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_row_dsc = [lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_CONTENT, lv.GRID_TEMPLATE_LAST]
|
|
cont.set_grid_dsc_array(grid_col_dsc, grid_row_dsc)
|
|
title_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 0, 1)
|
|
meter.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 1, 1)
|
|
bullet1.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
bullet2.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 3, 1)
|
|
bullet3.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 4, 1)
|
|
label1.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
label2.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.START, 3, 1)
|
|
label3.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.START, 4, 1)
|
|
|
|
return meter
|
|
|
|
def shop_create(parent):
|
|
parent.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
|
|
|
panel1 = lv.obj(parent)
|
|
panel1.set_size(lv.pct(100), lv.SIZE_CONTENT)
|
|
panel1.set_style_pad_bottom(30, 0)
|
|
|
|
title = lv.label(panel1)
|
|
title.set_text("Monthly Summary")
|
|
title.add_style(style_title, 0)
|
|
|
|
date = lv.label(panel1)
|
|
date.set_text("8-15 July, 2021")
|
|
date.add_style(style_text_muted, 0)
|
|
|
|
amount = lv.label(panel1)
|
|
amount.set_text("$27,123.25")
|
|
amount.add_style(style_title, 0)
|
|
|
|
hint = lv.label(panel1)
|
|
hint.set_text(lv.SYMBOL.UP + " 17% growth this week")
|
|
hint.set_style_text_color(lv.palette_main(lv.PALETTE.GREEN), 0)
|
|
|
|
chart3 = lv.chart(panel1)
|
|
chart3.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 0, 0, 6, 1, True, 80)
|
|
chart3.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 0, 0, 7, 1, True, 50)
|
|
chart3.set_type(lv.chart.TYPE.BAR)
|
|
chart3.set_div_line_count(6, 0)
|
|
chart3.set_point_count(7)
|
|
chart3.add_event(shop_chart_event_cb, lv.EVENT.ALL, None)
|
|
|
|
ser4 = chart3.add_series(lv.theme_get_color_primary(chart3), lv.chart.AXIS.PRIMARY_Y)
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
chart3.set_next_value(ser4, lv.rand(60, 90))
|
|
|
|
if disp_size == DISP_LARGE:
|
|
grid1_col_dsc = [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid1_row_dsc = [
|
|
lv.GRID_CONTENT, # Title
|
|
lv.GRID_CONTENT, # Sub title
|
|
20, # Spacer
|
|
lv.GRID_CONTENT, # Amount
|
|
lv.GRID_CONTENT, # Hint
|
|
lv.GRID_TEMPLATE_LAST]
|
|
|
|
chart3.set_size(lv.pct(100), lv.pct(100))
|
|
chart3.set_style_pad_column(lv.dpx(30), 0)
|
|
|
|
panel1.set_grid_dsc_array(grid1_col_dsc, grid1_row_dsc)
|
|
title.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 0, 1)
|
|
date.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 1, 1)
|
|
amount.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 3, 1)
|
|
hint.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 4, 1)
|
|
chart3.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.STRETCH, 0, 5)
|
|
|
|
elif disp_size == DISP_MEDIUM :
|
|
grid1_col_dsc = [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid1_row_dsc = [
|
|
lv.GRID_CONTENT, # Title + Date
|
|
lv.GRID_CONTENT, # Amount + Hint
|
|
200, # Chart
|
|
lv.GRID_TEMPLATE_LAST ]
|
|
|
|
panel1.update_layout()
|
|
chart3.set_width(lv.obj.get_content_width(panel1) - 20)
|
|
chart3.set_style_pad_column(lv.dpx(30), 0)
|
|
|
|
panel1.set_grid_dsc_array(grid1_col_dsc, grid1_row_dsc)
|
|
title.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
date.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.CENTER, 0, 1)
|
|
amount.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.CENTER, 1, 1)
|
|
hint.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.CENTER, 1, 1)
|
|
chart3.set_grid_cell(lv.GRID_ALIGN.END, 0, 2, lv.GRID_ALIGN.STRETCH, 2, 1)
|
|
else:
|
|
grid1_col_dsc = [LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid1_row_dsc = [
|
|
lv.GRID_CONTENT, # Title
|
|
lv.GRID_CONTENT, # Date
|
|
lv.GRID_CONTENT, # Amount
|
|
lv.GRID_CONTENT, # Hint
|
|
lv.GRID_CONTENT, # Chart
|
|
lv.GRID_TEMPLATE_LAST]
|
|
|
|
chart3.set_width(lv.pct(95))
|
|
chart3.set_height(LV_VER_RES - 70)
|
|
chart3.set_style_max_height(300, 0)
|
|
chart3.set_zoom_x(512)
|
|
|
|
panel1.set_grid_dsc_array(grid1_col_dsc, grid1_row_dsc)
|
|
title.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 0, 1)
|
|
date.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 1, 1)
|
|
amount.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 2, 1)
|
|
hint.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 3, 1)
|
|
chart3.set_grid_cell(lv.GRID_ALIGN.END, 0, 1, lv.GRID_ALIGN.START, 4, 1)
|
|
|
|
list = lv.obj(parent)
|
|
if disp_size == DISP_SMALL:
|
|
list.add_flag(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
list.set_height(lv.pct(100))
|
|
else:
|
|
list.set_height(lv.pct(100))
|
|
list.set_style_max_height(300, 0)
|
|
|
|
list.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
|
list.set_flex_grow(1)
|
|
list.add_flag(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
|
|
title = lv.label(list)
|
|
title.set_text("Top products")
|
|
title.add_style(style_title, 0)
|
|
|
|
# Create an image from the png file
|
|
try:
|
|
if osVersion == "esp32":
|
|
with open('images/clothes.png','rb') as f:
|
|
png_data = f.read()
|
|
else:
|
|
with open(script_path + '/assets/clothes.png','rb') as f:
|
|
png_data = f.read()
|
|
except:
|
|
print("Could not find clothes.png")
|
|
sys.exit()
|
|
|
|
clothes_argb = lv.img_dsc_t({
|
|
'data_size': len(png_data),
|
|
'data': png_data
|
|
})
|
|
|
|
create_shop_item(list, clothes_argb, "Blue jeans", "Clothes", "$722")
|
|
create_shop_item(list, clothes_argb, "Blue jeans", "Clothes", "$917")
|
|
create_shop_item(list, clothes_argb, "Blue jeans", "Clothes", "$64")
|
|
create_shop_item(list, clothes_argb, "Blue jeans", "Clothes", "$805")
|
|
|
|
notifications = lv.obj(parent)
|
|
if disp_size == DISP_SMALL:
|
|
notifications.set_height(lv.pct(100))
|
|
notifications.add_flag(LV_OBJ_FLAG_FLEX_IN_NEW_TRACK)
|
|
else:
|
|
notifications.set_height(lv.pct(100))
|
|
notifications.set_style_max_height(300, 0)
|
|
|
|
notifications.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
|
notifications.set_flex_grow(1)
|
|
|
|
title = lv.label(notifications)
|
|
title.set_text("Notification")
|
|
title.add_style(style_title, 0)
|
|
|
|
cb = lv.checkbox(notifications)
|
|
cb.set_text("Item purchased")
|
|
|
|
cb = lv.checkbox(notifications)
|
|
cb.set_text("New connection")
|
|
|
|
cb = lv.checkbox(notifications)
|
|
cb.set_text("New subscriber")
|
|
cb.add_state(lv.STATE.CHECKED)
|
|
|
|
cb = lv.checkbox(notifications)
|
|
cb.set_text("New message")
|
|
cb.add_state(lv.STATE.DISABLED)
|
|
|
|
cb = lv.checkbox(notifications)
|
|
cb.set_text("Milestone reached")
|
|
cb.add_state(lv.STATE.CHECKED | lv.STATE.DISABLED)
|
|
|
|
cb = lv.checkbox(notifications)
|
|
cb.set_text("Out of stock")
|
|
|
|
def create_shop_item(parent, img_src, name, category, price):
|
|
grid_col_dsc = [lv.GRID_CONTENT, 5, LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
grid_row_dsc = [LV_GRID_FR(1), LV_GRID_FR(1), lv.GRID_TEMPLATE_LAST]
|
|
|
|
cont = lv.obj(parent)
|
|
cont.remove_style_all()
|
|
cont.set_size(lv.pct(100), lv.SIZE_CONTENT)
|
|
cont.set_grid_dsc_array(grid_col_dsc, grid_row_dsc)
|
|
|
|
img = lv.img(cont)
|
|
img.set_src(img_src)
|
|
img.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 0, 2)
|
|
|
|
label = lv.label(cont)
|
|
label.set_text(name)
|
|
label.set_grid_cell(lv.GRID_ALIGN.START, 2, 1, lv.GRID_ALIGN.END, 0, 1)
|
|
|
|
label = lv.label(cont)
|
|
label.set_text(category)
|
|
label.add_style(style_text_muted, 0)
|
|
label.set_grid_cell(lv.GRID_ALIGN.START, 2, 1, lv.GRID_ALIGN.START, 1, 1)
|
|
|
|
label = lv.label(cont)
|
|
label.set_text(price)
|
|
label.set_grid_cell(lv.GRID_ALIGN.END, 3, 1, lv.GRID_ALIGN.END, 0, 1)
|
|
|
|
return cont
|
|
|
|
|
|
|
|
# Check on which system we are running
|
|
try:
|
|
osVersion=os.uname()[0]
|
|
except:
|
|
osVersion="unix"
|
|
|
|
print("System name: ",osVersion)
|
|
|
|
# get the directory in which the script is running
|
|
try:
|
|
script_path = __file__[:__file__.rfind('/')] if __file__.find('/') >= 0 else '.'
|
|
except NameError:
|
|
script_path = ''
|
|
|
|
driver = display_driver_utils.driver(width=SCREEN_SIZE[0],height=SCREEN_SIZE[1],orientation=display_driver_utils.ORIENT_LANDSCAPE)
|
|
|
|
# Create a screen and load it
|
|
scr=lv.obj()
|
|
lv.scr_load(scr)
|
|
|
|
# needed for dynamic font loading
|
|
fs_drv = lv.fs_drv_t()
|
|
fs_driver.fs_register(fs_drv, 'S')
|
|
|
|
LV_HOR_RES = lv.scr_act().get_disp().get_hor_res()
|
|
LV_VER_RES = lv.scr_act().get_disp().get_ver_res()
|
|
|
|
print("Screen resolution: {:d}x{:d}".format(LV_HOR_RES,LV_VER_RES))
|
|
|
|
DISP_SMALL = 0
|
|
DISP_MEDIUM = 1
|
|
DISP_LARGE = 2
|
|
|
|
if LV_HOR_RES <= 320:
|
|
disp_size = DISP_SMALL
|
|
elif LV_HOR_RES < 720:
|
|
disp_size = DISP_MEDIUM
|
|
else:
|
|
disp_size = DISP_LARGE
|
|
|
|
if disp_size == DISP_LARGE:
|
|
tab_h = 70
|
|
try:
|
|
font_large = lv.font_montserrat_24
|
|
except:
|
|
print("Dynamically loading font_montserrat_24")
|
|
if osVersion == "esp32":
|
|
font_large = lv.font_load("S:font/montserrat-24.fnt")
|
|
else:
|
|
font_large = lv.font_load("S:" + script_path + "/assets/font/montserrat-24.fnt")
|
|
|
|
try:
|
|
font_normal = lv.font_montserrat_16
|
|
except:
|
|
print("Dynamically loading font_montserrat_16")
|
|
if osVersion == "esp32":
|
|
font_normal = lv.font_load("S:/font/montserrat-16.fnt")
|
|
else :
|
|
font_normal = lv.font_load("S:" + script_path + "/assets/font/montserrat-16.fnt")
|
|
|
|
elif disp_size == DISP_MEDIUM:
|
|
tab_h = 45
|
|
try:
|
|
font_large = lv.font_montserrat_20
|
|
except:
|
|
print("Dynamically loading font_montserrat_20")
|
|
if osVersion == "esp32":
|
|
font_large = lv.font_load("S:/font/montserrat-20.fnt")
|
|
else:
|
|
font_large = lv.font_load("S:" + script_path + "/assets/font/montserrat-20.fnt")
|
|
|
|
try:
|
|
font_normal = lv.font_montserrat_14
|
|
except:
|
|
print("Dynamically loading font_montserrat_14")
|
|
if osVersion == "esp32":
|
|
font_normal = lv.font_load("S:/font/montserrat-14.fnt")
|
|
else:
|
|
font_normal = lv.font_load("S:" + script_path + "/assets/font/montserrat-14.fnt")
|
|
|
|
else: # disp_size == DISP_SMALL
|
|
tab_h = 45
|
|
try:
|
|
font_large = lv.font_montserrat_18
|
|
except:
|
|
print("Dynamically loading font_montserrat_18")
|
|
if osVersion == "esp32":
|
|
font_large = lv.font_load("S:/font/montserrat-18.fnt")
|
|
else:
|
|
font_large = lv.font_load("S:" + script_path + "/assets/font/montserrat-18.fnt")
|
|
|
|
try:
|
|
font_normal = lv.font_montserrat_12
|
|
except:
|
|
print("Dynamically loading font_montserrat_12")
|
|
if osVersion == "esp32":
|
|
font_normal = lv.font_load("S:/font/montserrat-12.fnt")
|
|
else:
|
|
font_normal = lv.font_load("S:" + script_path + "/assets/font/montserrat-12.fnt")
|
|
|
|
if not font_large or not font_normal:
|
|
print("font loading failed")
|
|
|
|
lv.theme_default_init(None,lv.palette_main(lv.PALETTE.BLUE),lv.palette_main(lv.PALETTE.RED),
|
|
LV_THEME_DEFAULT_DARK,font_normal)
|
|
|
|
style_text_muted = lv.style_t()
|
|
style_text_muted.init()
|
|
style_text_muted.set_text_opa(lv.OPA._50)
|
|
|
|
style_title = lv.style_t()
|
|
style_title.init()
|
|
style_title.set_text_font(font_large)
|
|
|
|
style_icon = lv.style_t()
|
|
style_icon.init()
|
|
style_icon.set_text_color(lv.theme_get_color_primary(None))
|
|
style_icon.set_text_font(font_large)
|
|
|
|
style_bullet = lv.style_t()
|
|
style_bullet.init()
|
|
style_bullet.set_border_width(0)
|
|
style_bullet.set_radius(lv.RADIUS_CIRCLE)
|
|
|
|
tv = lv.tabview(lv.scr_act(), lv.DIR.TOP, tab_h)
|
|
|
|
lv.scr_act().set_style_text_font(font_normal, 0)
|
|
|
|
if disp_size == DISP_LARGE:
|
|
tab_btns = tv.get_tab_btns()
|
|
tab_btns.set_style_pad_left(LV_HOR_RES // 2, 0)
|
|
|
|
# Create an image from the png file
|
|
try:
|
|
if osVersion == "esp32":
|
|
with open('images/lvgl_logo.png','rb') as f:
|
|
png_data = f.read()
|
|
else:
|
|
with open(script_path + '/assets/lvgl_logo.png','rb') as f:
|
|
png_data = f.read()
|
|
except:
|
|
print("Could not find lvgl_logo.png")
|
|
sys.exit()
|
|
|
|
lvgl_logo_argb = lv.img_dsc_t({
|
|
'data_size': len(png_data),
|
|
'data': png_data
|
|
})
|
|
|
|
logo = lv.img(tab_btns)
|
|
|
|
logo.set_src(lvgl_logo_argb)
|
|
logo.align(lv.ALIGN.LEFT_MID, -LV_HOR_RES // 2 + 25, 0)
|
|
|
|
label = lv.label(tab_btns)
|
|
label.add_style(style_title, 0)
|
|
label.set_text("LVGL v8")
|
|
label.align_to(logo, lv.ALIGN.OUT_RIGHT_TOP, 10, 0)
|
|
|
|
label = lv.label(tab_btns)
|
|
label.set_text("Widgets demo")
|
|
label.add_style(style_text_muted, 0)
|
|
label.align_to(logo, lv.ALIGN.OUT_RIGHT_BOTTOM, 10, 0)
|
|
|
|
def color_changer_create(parent):
|
|
palette = [
|
|
lv.PALETTE.BLUE, lv.PALETTE.GREEN, lv.PALETTE.BLUE_GREY, lv.PALETTE.ORANGE,
|
|
lv.PALETTE.RED, lv.PALETTE.PURPLE, lv.PALETTE.TEAL]
|
|
|
|
color_cont = lv.obj(parent)
|
|
color_cont.remove_style_all()
|
|
color_cont.set_flex_flow(lv.FLEX_FLOW.ROW)
|
|
color_cont.set_flex_align(lv.FLEX_ALIGN.SPACE_EVENLY, lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER)
|
|
color_cont.add_flag(lv.obj.FLAG.FLOATING)
|
|
|
|
color_cont.set_style_bg_color(lv.color_white(), 0)
|
|
if disp_size == DISP_SMALL:
|
|
color_cont.set_style_pad_right(lv.dpx(47),0)
|
|
else :
|
|
color_cont.set_style_pad_right(lv.dpx(55), 0)
|
|
|
|
color_cont.set_style_bg_opa(lv.OPA.COVER, 0)
|
|
color_cont.set_style_radius(lv.RADIUS_CIRCLE, 0)
|
|
|
|
if disp_size == DISP_SMALL:
|
|
color_cont.set_size(lv.dpx(52), lv.dpx(52))
|
|
else:
|
|
color_cont.set_size(lv.dpx(60), lv.dpx(60))
|
|
|
|
color_cont.align(lv.ALIGN.BOTTOM_RIGHT, - lv.dpx(10), - lv.dpx(10))
|
|
|
|
for i in palette:
|
|
# for(i = 0; palette[i] != _LV_PALETTE_LAST; i++) {
|
|
c = lv.btn(color_cont)
|
|
c.set_style_bg_color(lv.palette_main(i), 0)
|
|
c.set_style_radius(lv.RADIUS_CIRCLE, 0)
|
|
c.set_style_opa(lv.OPA.TRANSP, 0)
|
|
c.set_size(20, 20)
|
|
# c.add_event(c, color_event_cb, LV_EVENT_ALL, &palette[i])
|
|
c.clear_flag(lv.obj.FLAG.SCROLL_ON_FOCUS)
|
|
|
|
btn = lv.btn(parent)
|
|
btn.add_flag(lv.obj.FLAG.FLOATING | lv.obj.FLAG.CLICKABLE)
|
|
btn.set_style_bg_color(lv.color_white(), lv.STATE.CHECKED)
|
|
btn.set_style_pad_all(10, 0)
|
|
btn.set_style_radius(lv.RADIUS_CIRCLE, 0)
|
|
# btn.add_event(color_changer_event_cb, lv.EVENT-ALL, color_cont)
|
|
btn.set_style_shadow_width(0, 0)
|
|
btn.set_style_bg_img_src(lv.SYMBOL.NEW_LINE, 0)
|
|
|
|
if disp_size == DISP_SMALL:
|
|
btn.set_size(lv.dpx(42), lv.dpx(42))
|
|
btn.align(lv.ALIGN.BOTTOM_RIGHT, -lv.dpx(15), -lv.dpx(15))
|
|
else :
|
|
btn.set_size(lv.dpx(50), lv.dpx(50))
|
|
btn.align(lv.ALIGN.BOTTOM_RIGHT, -lv.dpx(15), -lv.dpx(15))
|
|
|
|
def shop_chart_event_cb(e) :
|
|
|
|
code = e.get_code()
|
|
if code == lv.EVENT.DRAW_PART_BEGIN :
|
|
dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param())
|
|
# Set the markers' text
|
|
if dsc.part == lv.PART.TICKS and dsc.id == lv.chart.AXIS.PRIMARY_X :
|
|
month = ["Jan", "Febr", "March", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]
|
|
dsc.text = month[dsc.value]
|
|
|
|
if dsc.part == lv.PART.ITEMS:
|
|
dsc.rect_dsc.bg_opa = lv.OPA.TRANSP # We will draw it later
|
|
|
|
if code == lv.EVENT.DRAW_PART_END :
|
|
dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param())
|
|
# Add the faded area before the lines are drawn
|
|
if dsc.part == lv.PART.ITEMS :
|
|
devices = [32, 43, 21, 56, 29, 36, 19, 25, 62, 35]
|
|
clothes = [12, 19, 23, 31, 27, 32, 32, 11, 21, 32]
|
|
services = [56, 38, 56, 13, 44, 32, 49, 64, 17, 33]
|
|
|
|
draw_rect_dsc = lv.draw_rect_dsc_t()
|
|
draw_rect_dsc.init()
|
|
|
|
h = dsc.draw_area.get_height()
|
|
|
|
a = lv.area_t()
|
|
a.x1 = dsc.draw_area.x1
|
|
a.x2 = dsc.draw_area.x2
|
|
|
|
a.y1 = dsc.draw_area.y1
|
|
a.y2 = a.y1 + 4 + (devices[dsc.id] * h) // 100 # +4 to overlap the radius
|
|
draw_rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED)
|
|
draw_rect_dsc.radius = 4
|
|
dsc.draw_ctx.rect(draw_rect_dsc,a)
|
|
# lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);
|
|
|
|
a.y1 = a.y2 - 4 # -4 to overlap the radius
|
|
a.y2 = a.y1 + (clothes[dsc.id] * h) // 100
|
|
draw_rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE)
|
|
draw_rect_dsc.radius = 0
|
|
dsc.draw_ctx.rect(draw_rect_dsc,a)
|
|
# lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);
|
|
|
|
a.y1 = a.y2
|
|
a.y2 = a.y1 + (services[dsc.id] * h) // 100
|
|
draw_rect_dsc.bg_color = lv.palette_main(lv.PALETTE.GREEN)
|
|
dsc.draw_ctx.rect(draw_rect_dsc,a)
|
|
# lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);
|
|
|
|
def meter1_indic1_anim_cb(meter,indic,val):
|
|
|
|
meter.set_indicator_end_value(indic, val)
|
|
|
|
card = lv.obj.get_parent(lv.obj.__cast__(meter))
|
|
label = lv.obj.get_child(lv.obj.__cast__(card), -5)
|
|
label.set_text("Revenue : {:d}%".format(val))
|
|
|
|
def meter1_indic2_anim_cb(meter,indic,val) :
|
|
|
|
meter.set_indicator_end_value(indic, val)
|
|
|
|
card = lv.obj.get_parent(lv.obj.__cast__(meter))
|
|
label = lv.obj.get_child(lv.obj.__cast__(card), -3)
|
|
label.set_text("Sales : {:d}%".format(val))
|
|
|
|
def meter1_indic3_anim_cb(meter, indic, val) :
|
|
|
|
meter.set_indicator_end_value(indic, val)
|
|
|
|
card = lv.obj.get_parent(lv.obj.__cast__(meter))
|
|
label = lv.obj.get_child(lv.obj.__cast__(card), -1)
|
|
label.set_text("Cost : {:d}%".format(val))
|
|
|
|
|
|
def meter2_timer_cb(timer,meter,indics) :
|
|
|
|
global session_desktop,session_tablet,session_mobile
|
|
global down1,down2,down3
|
|
|
|
if down1 :
|
|
session_desktop -= 137
|
|
if session_desktop < 1400:
|
|
down1 = False
|
|
else :
|
|
session_desktop += 116
|
|
if session_desktop > 4500:
|
|
down1 = True
|
|
|
|
if down2:
|
|
session_tablet -= 3
|
|
if session_tablet < 1400 :
|
|
down2 = False
|
|
else :
|
|
session_tablet += 9
|
|
if session_tablet > 450:
|
|
down2 = True
|
|
|
|
if down3 :
|
|
session_mobile -= 57
|
|
if session_mobile < 1400 :
|
|
down3 = False
|
|
else :
|
|
session_mobile += 76
|
|
if session_mobile > 4500:
|
|
down3 = True
|
|
|
|
all = session_desktop + session_tablet + session_mobile
|
|
pct1 = (session_desktop * 97) // all
|
|
pct2 = (session_tablet * 97) // all
|
|
|
|
meter.set_indicator_start_value(indics[0], 0)
|
|
meter.set_indicator_end_value(indics[0], pct1)
|
|
|
|
meter.set_indicator_start_value(indics[1], pct1 + 1)
|
|
meter.set_indicator_end_value(indics[1], pct1 + 1 + pct2)
|
|
|
|
meter.set_indicator_start_value(indics[2], pct1 + 1 + pct2 + 1)
|
|
meter.set_indicator_end_value(indics[2], 99)
|
|
|
|
card = lv.obj.get_parent(lv.obj.__cast__(meter))
|
|
|
|
label = lv.obj.get_child(lv.obj.__cast__(card), -5)
|
|
label.set_text("Desktop : {:d}".format(session_desktop))
|
|
# lv_label_set_text_fmt(label, "Desktop: %"LV_PRIu32, session_desktop);
|
|
|
|
label = lv.obj.get_child(lv.obj.__cast__(card), -3)
|
|
label.set_text("Tablet : {:d}".format(session_desktop))
|
|
# lv_label_set_text_fmt(label, "Tablet: %"LV_PRIu32, session_tablet);
|
|
|
|
label = lv.obj.get_child(lv.obj.__cast__(card), -1)
|
|
label.set_text("Tablet : {:d}".format(session_desktop))
|
|
#lv_label_set_text_fmt(label, "Mobile: %"LV_PRIu32, session_mobile);
|
|
|
|
|
|
def meter3_anim_cb(meter,indic, label, val) :
|
|
|
|
meter.set_indicator_value(indic, val)
|
|
|
|
# label = lv.obj.get_child(lv.obj.__cast__(meter), -0)
|
|
label.set_text(" "+str(val) + "Mbps")
|
|
|
|
def ta_event_cb(e,kb,tv) :
|
|
|
|
code = e.get_code()
|
|
ta = e.get_target_obj()
|
|
# lv_obj_t * kb = lv_event_get_user_data(e);
|
|
|
|
indev = lv.indev_get_act()
|
|
if code == lv.EVENT.FOCUSED :
|
|
if (not indev) or indev.get_type() != lv.INDEV_TYPE.KEYPAD :
|
|
kb.set_textarea(ta)
|
|
kb.set_style_max_height(LV_HOR_RES * 2 // 3, 0)
|
|
tv.update_layout() # Be sure the sizes are recalculated
|
|
tv.set_height(LV_VER_RES - kb.get_height())
|
|
kb.clear_flag(lv.obj.FLAG.HIDDEN)
|
|
ta.scroll_to_view_recursive(lv.ANIM.OFF)
|
|
|
|
elif code == lv.EVENT.DEFOCUSED :
|
|
kb.set_textarea(None)
|
|
tv.set_height(LV_VER_RES)
|
|
kb.add_flag(lv.obj.FLAG.HIDDEN)
|
|
if (indev) :
|
|
indev.reset(None)
|
|
|
|
elif code == lv.EVENT.READY or code == lv.EVENT.CANCEL:
|
|
tv.set_height(LV_VER_RES)
|
|
kb.add_flag(lv.obj.FLAG.HIDDEN)
|
|
ta.clear_state(lv.STATE.FOCUSED)
|
|
if (indev) :
|
|
indev.reset(None) # To forget the last clicked object to make it focusable again
|
|
|
|
def birthday_event_cb(e):
|
|
global calendar
|
|
code = e.get_code()
|
|
ta = e.get_target_obj()
|
|
|
|
if code == lv.EVENT.FOCUSED :
|
|
indev = lv.indev_get_act()
|
|
if (not indev) or indev.get_type() == lv.INDEV_TYPE.POINTER:
|
|
if calendar == None:
|
|
top_layer = lv.layer_top()
|
|
top_layer.add_flag(lv.obj.FLAG.CLICKABLE)
|
|
calendar = lv.calendar(top_layer)
|
|
top_layer.set_style_bg_opa(lv.OPA._50, 0)
|
|
top_layer.set_style_bg_color(lv.palette_main(lv.PALETTE.GREY), 0)
|
|
if disp_size == DISP_SMALL:
|
|
calendar.set_size(180, 200)
|
|
elif disp_size == DISP_MEDIUM:
|
|
calendar.set_size(200, 220)
|
|
else :
|
|
calendar.set_size(300, 330)
|
|
calendar.set_showed_date(1990, 01)
|
|
calendar.align(lv.ALIGN.CENTER, 0, 30)
|
|
# password.add_event(lambda e: ta_event_cb(e,kb,tv),lv.EVENT.ALL,None)
|
|
|
|
calendar.add_event(lambda e: calendar_event_cb(e,ta), lv.EVENT.ALL, None)
|
|
|
|
header = lv.calendar_header_dropdown(calendar)
|
|
|
|
def calendar_event_cb(e,ta) :
|
|
global calendar
|
|
code = e.get_code()
|
|
obj = lv.calendar.__cast__(e.get_target())
|
|
if code == lv.EVENT.VALUE_CHANGED:
|
|
d = lv.calendar_date_t()
|
|
obj.get_pressed_date(d)
|
|
ta.set_text("{:02d}.{:02d}.{:d}".format(d.day,d.month,d.year))
|
|
|
|
calendar.delete()
|
|
calendar = None
|
|
lv.layer_top().clear_flag(lv.obj.FLAG.CLICKABLE)
|
|
lv.layer_top().set_style_bg_opa(lv.OPA.TRANSP, 0)
|
|
|
|
def _lv_area_intersect(a1_p, a2_p) :
|
|
|
|
# Get the smaller area from 'a1_p' and 'a2_p'
|
|
res_p = lv.area_t()
|
|
|
|
res_p.x1 = max(a1_p.x1, a2_p.x1)
|
|
res_p.y1 = max(a1_p.y1, a2_p.y1)
|
|
res_p.x2 = min(a1_p.x2, a2_p.x2)
|
|
res_p.y2 = min(a1_p.y2, a2_p.y2)
|
|
|
|
# If x1 or y1 greater than x2 or y2 then the areas union is empty
|
|
|
|
if res_p.x1 > res_p.x2 or res_p.y1 > res_p.y2:
|
|
return None
|
|
|
|
return res_p
|
|
|
|
def chart_event_cb(e):
|
|
|
|
code = e.get_code()
|
|
obj = e.get_target_obj()
|
|
dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param())
|
|
|
|
if code == lv.EVENT.PRESSED or code == lv.EVENT.RELEASED :
|
|
obj.invalidate() #To make the value boxes visible
|
|
|
|
elif code == lv.EVENT.DRAW_PART_BEGIN:
|
|
# Set the markers' text
|
|
if dsc.part == lv.PART.TICKS and dsc.id == lv.chart.AXIS.PRIMARY_X:
|
|
if obj.get_type() == lv.chart.TYPE.BAR:
|
|
month = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"]
|
|
dsc.text = month[dsc.value]
|
|
else :
|
|
month = ["Jan", "Febr", "March", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]
|
|
dsc.text = month[dsc.value]
|
|
|
|
# Add the faded area before the lines are drawn
|
|
|
|
elif dsc.part == lv.PART.ITEMS:
|
|
if LV_USE_DRAW_MASKS:
|
|
# Add a line mask that keeps the area below the line
|
|
if dsc.p1 and dsc.p2:
|
|
line_mask_param = lv.draw_mask_line_param_t()
|
|
line_mask_param.points_init(dsc.p1.x, dsc.p1.y, dsc.p2.x, dsc.p2.y, lv.DRAW_MASK_LINE_SIDE.BOTTOM)
|
|
|
|
line_mask_id = lv.draw_mask_add(line_mask_param, None)
|
|
# Add a fade effect: transparent bottom covering top
|
|
h = obj.get_height()
|
|
coords = lv.area_t()
|
|
obj.get_coords(coords)
|
|
|
|
fade_mask_param = lv.draw_mask_fade_param_t()
|
|
fade_mask_param.init(coords, lv.OPA.COVER, coords.y1 + h // 8, lv.OPA.TRANSP,coords.y2)
|
|
fade_mask_id = lv.draw_mask_add(fade_mask_param,None)
|
|
|
|
# Draw a rectangle that will be affected by the mask
|
|
draw_rect_dsc = lv.draw_rect_dsc_t()
|
|
draw_rect_dsc.init()
|
|
draw_rect_dsc.bg_opa = lv.OPA._50
|
|
draw_rect_dsc.bg_color = dsc.line_dsc.color
|
|
# obj_clip_area = lv.area_t()
|
|
obj_clip_area = _lv_area_intersect(dsc.draw_ctx.clip_area, coords)
|
|
|
|
clip_area_ori = dsc.draw_ctx.clip_area
|
|
dsc.draw_ctx.clip_area = obj_clip_area
|
|
|
|
a = lv.area_t()
|
|
a.x1 = dsc.p1.x
|
|
a.x2 = dsc.p2.x - 1
|
|
a.y1 = min(dsc.p1.y, dsc.p2.y)
|
|
a.y2 = coords.y2
|
|
|
|
dsc.draw_ctx.rect(draw_rect_dsc,a)
|
|
dsc.draw_ctx.clip_area = clip_area_ori
|
|
|
|
# Remove the masks
|
|
lv.draw_mask_free_param(line_mask_param)
|
|
lv.draw_mask_remove_id(line_mask_id)
|
|
lv.draw_mask_remove_id(fade_mask_id)
|
|
|
|
ser = lv.chart_series_t.__cast__(dsc.sub_part_ptr)
|
|
|
|
if obj.get_pressed_point() == dsc.id :
|
|
if obj.get_type() == lv.chart.TYPE.LINE:
|
|
dsc.rect_dsc.outline_color = lv.color_white()
|
|
dsc.rect_dsc.outline_width = 2
|
|
else :
|
|
dsc.rect_dsc.shadow_color = ser.color
|
|
dsc.rect_dsc.shadow_width = 15
|
|
dsc.rect_dsc.shadow_spread = 0
|
|
|
|
buf = "{:2d}".format(dsc.value)
|
|
text_size = lv.point_t()
|
|
lv.txt_get_size(text_size, buf, font_normal, 0, 0, lv.COORD.MAX, lv.TEXT_FLAG.NONE)
|
|
|
|
txt_area = lv.area_t()
|
|
if obj.get_type() == lv.chart.TYPE.BAR :
|
|
txt_area.y2 = dsc.draw_area.y1 - lv.dpx(15)
|
|
txt_area.y1 = txt_area.y2 - text_size.y
|
|
if ser == obj.get_series_next(None) :
|
|
txt_area.x1 = dsc.draw_area.x1 + dsc.draw_area.get_width() // 2
|
|
txt_area.x2 = txt_area.x1 + text_size.x
|
|
else :
|
|
txt_area.x2 = dsc.draw_area.x1 + dsc.draw_area.get_width() // 2
|
|
txt_area.x1 = txt_area.x2 - text_size.x
|
|
else :
|
|
txt_area.x1 = dsc.draw_area.x1 + dsc.draw_area.get_width() // 2 - text_size.x // 2
|
|
txt_area.x2 = txt_area.x1 + text_size.x
|
|
txt_area.y2 = dsc.draw_area.y1 - lv.dpx(15)
|
|
txt_area.y1 = txt_area.y2 - text_size.y
|
|
|
|
bg_area = lv.area_t()
|
|
bg_area.x1 = txt_area.x1 - lv.dpx(8)
|
|
bg_area.x2 = txt_area.x2 + lv.dpx(8)
|
|
bg_area.y1 = txt_area.y1 - lv.dpx(8)
|
|
bg_area.y2 = txt_area.y2 + lv.dpx(8)
|
|
|
|
rect_dsc = lv.draw_rect_dsc_t()
|
|
rect_dsc.init()
|
|
rect_dsc.bg_color = ser.color
|
|
rect_dsc.radius = lv.dpx(5)
|
|
dsc.draw_ctx.rect(rect_dsc,bg_area)
|
|
|
|
label_dsc = lv.draw_label_dsc_t()
|
|
label_dsc.init()
|
|
label_dsc.color = lv.color_white()
|
|
label_dsc.font = font_normal
|
|
dsc.draw_ctx.label(label_dsc,txt_area,buf,None)
|
|
|
|
else :
|
|
dsc.rect_dsc.outline_width = 0
|
|
dsc.rect_dsc.shadow_width = 0
|
|
|
|
t1 = tv.add_tab("Profile")
|
|
t2 = tv.add_tab("Analytics")
|
|
t3 = tv.add_tab("Shop")
|
|
|
|
profile_create(t1)
|
|
analytics_create(t2)
|
|
shop_create(t3)
|
|
|
|
color_changer_create(tv)
|