def event_cb(e): code = e.get_code() obj = e.get_target() if code == lv.EVENT.DRAW_PART_BEGIN: dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param()) # Change the draw descriptor the 2nd button if dsc.id == 1: dsc.rect_dsc.radius = 0 if obj.get_selected_btn() == dsc.id: dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.GREY, 3) else: dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE) dsc.rect_dsc.shadow_width = 6 dsc.rect_dsc.shadow_ofs_x = 3 dsc.rect_dsc.shadow_ofs_y = 3 dsc.label_dsc.color = lv.color_white() # Change the draw descriptor the 3rd button elif dsc.id == 2: dsc.rect_dsc.radius = lv.RADIUS.CIRCLE if obj.get_selected_btn() == dsc.id: dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.RED, 3) else: dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED) dsc.label_dsc.color = lv.color_white() elif dsc.id == 3: dsc.label_dsc.opa = lv.OPA.TRANSP # Hide the text if any if code == lv.EVENT.DRAW_PART_END: dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param()) # Add custom content to the 4th button when the button itself was drawn if dsc.id == 3: # LV_IMG_DECLARE(img_star); header = lv.img_header_t() res = lv.img.decoder_get_info(img_star_argb, header) if res != lv.RES.OK: print("error when getting image header") return else: a = lv.area_t() a.x1 = dsc.draw_area.x1 + (dsc.draw_area.get_width() - header.w) // 2 a.x2 = a.x1 + header.w - 1 a.y1 = dsc.draw_area.y1 + (dsc.draw_area.get_height() - header.h) // 2 a.y2 = a.y1 + header.h - 1 img_draw_dsc = lv.draw_img_dsc_t() img_draw_dsc.init() img_draw_dsc.recolor = lv.color_black() if obj.get_selected_btn() == dsc.id: img_draw_dsc.recolor_opa = lv.OPA._30 lv.draw_img(a, dsc.clip_area, img_star_argb, img_draw_dsc)
def event_cb(e): dsc = lv.obj_draw_part_dsc_t.cast(e.get_param()) if dsc.part != lv.PART.INDICATOR: return obj = lv.bar.__cast__(e.get_target()) label_dsc = lv.draw_label_dsc_t() label_dsc.init() # label_dsc.font = LV_FONT_DEFAULT; value_txt = str(obj.get_value()) txt_size = lv.point_t() lv.txt_get_size(txt_size, value_txt, label_dsc.font, label_dsc.letter_space, label_dsc.line_space, lv.COORD.MAX, label_dsc.flag) txt_area = lv.area_t() # If the indicator is long enough put the text inside on the right if dsc.draw_area.get_width() > txt_size.x + 20: txt_area.x2 = dsc.draw_area.x2 - 5 txt_area.x1 = txt_area.x2 - txt_size.x + 1 label_dsc.color = lv.color_white() # If the indicator is still short put the text out of it on the right*/ else: txt_area.x1 = dsc.draw_area.x2 + 5 txt_area.x2 = txt_area.x1 + txt_size.x - 1 label_dsc.color = lv.color_black() txt_area.y1 = dsc.draw_area.y1 + (dsc.draw_area.get_height() - txt_size.y) // 2 txt_area.y2 = txt_area.y1 + txt_size.y - 1 lv.draw_label(txt_area, dsc.clip_area, label_dsc, value_txt, None)
def __init__(self): self.mask_top_id = -1 self.mask_bottom_id = -1 # # Add an fade mask to roller. # style = lv.style_t() style.init() style.set_bg_color(lv.color_black()) style.set_text_color(lv.color_white()) lv.scr_act().add_style(style, 0) roller1 = lv.roller(lv.scr_act()) roller1.add_style(style, 0) roller1.set_style_border_width(0, 0) roller1.set_style_pad_all(0, 0) roller1.set_style_bg_opa(lv.OPA.TRANSP, lv.PART.SELECTED) #if LV_FONT_MONTSERRAT_22 # lv_obj_set_style_text_font(roller1, &lv_font_montserrat_22, LV_PART_SELECTED); #endif roller1.set_options( "\n".join([ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]), lv.roller.MODE.NORMAL) roller1.center() roller1.set_visible_row_count(3) roller1.add_event_cb(self.mask_event_cb, lv.EVENT.ALL, None)
def draw_event_cb(e): obj = e.get_target() dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param()) # If the cells are drawn... if dsc.part == lv.PART.ITEMS: chk = obj.has_cell_ctrl(dsc.id, 0, lv.table.CELL_CTRL.CUSTOM_1) rect_dsc = lv.draw_rect_dsc_t() rect_dsc.init() if chk: rect_dsc.bg_color = lv.theme_get_color_primary(obj) else: rect_dsc.bg_color = lv.palette_lighten(lv.PALETTE.GREY,2) rect_dsc.radius = lv.RADIUS.CIRCLE sw_area = lv.area_t() sw_area.x1 = dsc.draw_area.x2 - 50; sw_area.x2 = sw_area.x1 + 40; sw_area.y1 = dsc.draw_area.y1 + dsc.draw_area.get_height() // 2 - 10 sw_area.y2 = sw_area.y1 + 20; lv.draw_rect(sw_area, dsc.clip_area, rect_dsc) rect_dsc.bg_color = lv.color_white() if chk: sw_area.x2 -= 2 sw_area.x1 = sw_area.x2 - 16 else: sw_area.x1 += 2 sw_area.x2 = sw_area.x1 + 16 sw_area.y1 += 2; sw_area.y2 -= 2; lv.draw_rect(sw_area, dsc.clip_area, rect_dsc)
def event_cb(self, e): code = e.get_code() chart = lv.chart.__cast__(e.get_target()) if code == lv.EVENT.VALUE_CHANGED: # print("last_id: ",self.last_id) self.last_id = chart.get_pressed_point() if self.last_id != lv.CHART_POINT.NONE: p = lv.point_t() chart.get_point_pos_by_id(self.ser, self.last_id, p) chart.set_cursor_point(self.cursor, None, self.last_id) elif code == lv.EVENT.DRAW_PART_END: # print("EVENT.DRAW_PART_END") dsc = lv.obj_draw_part_dsc_t.cast(e.get_param()) # if dsc.p1 and dsc.p2: # print("p1, p2", dsc.p1,dsc.p2) # print("p1.y, p2.y", dsc.p1.y, dsc.p2.y) # print("last_id: ",self.last_id) if dsc.part == lv.PART.CURSOR and dsc.p1 and dsc.p2 and dsc.p1.y == dsc.p2.y and self.last_id >= 0: v = self.ser_p[self.last_id] # print("value: ",v) value_txt = str(v) size = lv.point_t() lv.txt_get_size(size, value_txt, lv.font_default(), 0, 0, lv.COORD.MAX, lv.TEXT_FLAG.NONE) a = lv.area_t() a.y2 = dsc.p1.y - 5 a.y1 = a.y2 - size.y - 10 a.x1 = dsc.p1.x + 10 a.x2 = a.x1 + size.x + 10 draw_rect_dsc = lv.draw_rect_dsc_t() draw_rect_dsc.init() draw_rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE) draw_rect_dsc.radius = 3 lv.draw_rect(a, dsc.clip_area, draw_rect_dsc) draw_label_dsc = lv.draw_label_dsc_t() draw_label_dsc.init() draw_label_dsc.color = lv.color_white() a.x1 += 5 a.x2 -= 5 a.y1 += 5 a.y2 -= 5 lv.draw_label(a, dsc.clip_area, draw_label_dsc, value_txt, None)
def chart_event_cb(e): dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param()) if (dsc.part == lv.PART.ITEMS): draw_rect_dsc = lv.draw_rect_dsc_t() draw_rect_dsc.init() 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 + 6 draw_rect_dsc.bg_color = lv.color_white() draw_rect_dsc.radius = 0 draw_rect_dsc.shadow_opa = 0 lv.draw_rect(a, dsc.clip_area, draw_rect_dsc)
def event_cb(e): code = e.get_code() chart = e.get_target() if code == lv.EVENT.VALUE_CHANGED: chart.invalidate() if code == lv.EVENT.REFR_EXT_DRAW_SIZE: e.set_ext_draw_size(20) elif code == lv.EVENT.DRAW_POST_END: id = lv.chart.get_pressed_point(chart) if id == lv.CHART_POINT.NONE: return # print("Selected point ", id) for i in range(len(series)): p = lv.point_t() chart.get_point_pos_by_id(series[i], id, p) value = series_points[i][id] buf = lv.SYMBOL.DUMMY + "$" + str(value) draw_rect_dsc = lv.draw_rect_dsc_t() draw_rect_dsc.init() draw_rect_dsc.bg_color = lv.color_black() draw_rect_dsc.bg_opa = lv.OPA._50 draw_rect_dsc.radius = 3 draw_rect_dsc.bg_img_src = buf draw_rect_dsc.bg_img_recolor = lv.color_white() a = lv.area_t() coords = lv.area_t() chart.get_coords(coords) a.x1 = coords.x1 + p.x - 20 a.x2 = coords.x1 + p.x + 20 a.y1 = coords.y1 + p.y - 30 a.y2 = coords.y1 + p.y - 10 clip_area = lv.area_t.cast(e.get_param()) lv.draw_rect(a, clip_area, draw_rect_dsc) elif code == lv.EVENT.RELEASED: chart.invalidate()
def createItem(self, parent, iconPath, value, unityPath, tips): col_dsc = [ lv.GRID.CONTENT, 5, lv.GRID.CONTENT, lv.GRID.CONTENT, lv.GRID_TEMPLATE.LAST ] row_dsc = [lv.GRID.CONTENT, lv.GRID.CONTENT, lv.GRID_TEMPLATE.LAST] cont = lv.obj(parent) cont.set_style_bg_opa(0, 0) cont.set_style_border_opa(0, 0) cont.set_style_pad_all(0, 0) cont.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT) cont.set_style_grid_column_dsc_array(col_dsc, 0) cont.set_style_grid_row_dsc_array(row_dsc, 0) cont.set_layout(lv.LAYOUT_GRID.value) img = lv.img(cont) img.set_src(iconPath) img.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.CENTER, 0, 2) label = lv.label(cont) label.set_text(value) label.set_style_text_color(lv.color_white(), 0) label.set_style_text_font(lv.font_montserrat_48, 0) label.set_style_pad_all(0, 0) label.set_grid_cell(lv.GRID_ALIGN.START, 2, 1, lv.GRID_ALIGN.CENTER, 0, 1) if (unityPath.strip()): iconImg = lv.img(cont) iconImg.set_src(unityPath) iconImg.set_zoom(205) iconImg.set_style_pad_bottom(0, 0) iconImg.set_grid_cell(lv.GRID_ALIGN.START, 3, 1, lv.GRID_ALIGN.CENTER, 0, 1) tip = lv.label(cont) tip.set_text(tips) tip.set_style_text_color(lv.color_make(0xCC, 0xCC, 0xCC), 0) tip.set_grid_cell(lv.GRID_ALIGN.START, 2, 2, lv.GRID_ALIGN.START, 1, 1)
import display_driver _CANVAS_WIDTH = 200 _CANVAS_HEIGHT = 150 LV_IMG_ZOOM_NONE = 256 rect_dsc = lv.draw_rect_dsc_t() rect_dsc.init() rect_dsc.radius = 10 rect_dsc.bg_opa = lv.OPA.COVER rect_dsc.bg_grad_dir = lv.GRAD_DIR.HOR rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED) rect_dsc.bg_grad_color = lv.palette_main(lv.PALETTE.BLUE) rect_dsc.border_width = 2 rect_dsc.border_opa = lv.OPA._90 rect_dsc.border_color = lv.color_white() rect_dsc.shadow_width = 5 rect_dsc.shadow_ofs_x = 5 rect_dsc.shadow_ofs_y = 5 label_dsc = lv.draw_label_dsc_t() label_dsc.init() label_dsc.color = lv.palette_main(lv.PALETTE.YELLOW) cbuf = bytearray(_CANVAS_WIDTH * _CANVAS_HEIGHT * 4) canvas = lv.canvas(lv.scr_act()) canvas.set_buffer(cbuf, _CANVAS_WIDTH, _CANVAS_HEIGHT, lv.img.CF.TRUE_COLOR) canvas.center() canvas.fill_bg(lv.palette_lighten(lv.PALETTE.GREY, 3), lv.OPA.COVER)
# Create styles from scratch for buttons. # style_btn = lv.style_t() style_btn_red = lv.style_t() style_btn_pressed = lv.style_t() # Create a simple button style style_btn.init() style_btn.set_radius(10) style_btn.set_bg_opa(lv.OPA.COVER) style_btn.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 3)) style_btn.set_bg_grad_color(lv.palette_main(lv.PALETTE.GREY)) style_btn.set_bg_grad_dir(lv.GRAD_DIR.VER) # Add a border style_btn.set_border_color(lv.color_white()) style_btn.set_border_opa(lv.OPA._70) style_btn.set_border_width(2) # Set the text style style_btn.set_text_color(lv.color_white()) # Create a red style. Change only some colors. style_btn_red.init() style_btn_red.set_bg_color(lv.palette_main(lv.PALETTE.RED)) style_btn_red.set_bg_grad_color(lv.palette_lighten(lv.PALETTE.RED, 2)) # Create a style for the pressed state. style_btn_pressed.init() style_btn_pressed.set_bg_color(lv.palette_main(lv.PALETTE.BLUE)) style_btn_pressed.set_bg_grad_color(lv.palette_darken(lv.PALETTE.RED, 3))
def createPage(self): global value global sound_ttf_alive print("Enter SoundTTF") # init scr scr = lv.obj() win = lv.obj(scr) win.set_size(scr.get_width(), scr.get_height()) win.set_style_border_opa(0, 0) win.set_style_radius(0, 0) win.set_style_bg_color(lv.color_black(), 0) win.clear_flag(lv.obj.FLAG.SCROLLABLE) win.set_style_pad_right(30, 0) title = lv.label(win) title.set_text("Sound TTF") title.set_style_text_color(lv.color_white(), 0) title.set_style_text_font(lv.font_montserrat_28, 0) title.align(lv.ALIGN.TOP_LEFT, 20, 0) decibel = lv.label(win) decibel.set_text(str(value) + "dB") decibel.set_style_text_color(lv.color_make(0xFF, 0xA8, 0x48), 0) decibel.set_style_text_font(lv.font_montserrat_28, 0) decibel.align(lv.ALIGN.TOP_RIGHT, 0, 0) chart = lv.chart(win) chart.set_type(lv.chart.TYPE.BAR) chart.set_style_border_opa(0, 0) chart.set_style_bg_opa(0, 0) chart.set_style_line_opa(0, 0) chart.set_width(280) chart.set_height(160) chart.set_div_line_count(6, 0) chart.set_point_count(12) chart.align(lv.ALIGN.BOTTOM_MID, 20, -5) chart.add_event_cb(chart_event_cb, lv.EVENT.DRAW_PART_END, None) ser1 = chart.add_series(lv.color_make(0x56, 0x56, 0x56), lv.chart.AXIS.PRIMARY_Y) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) backImg = lv.img(win) backImg.set_src(RESOURCES_ROOT + "images/back.png") backImg.set_style_align(lv.ALIGN.LEFT_MID, 0) backImg.add_flag(lv.obj.FLAG.CLICKABLE) backImg.add_event_cb(lambda e: sound_ttf_back_click_callback(e, win), lv.EVENT.CLICKED, None) backImg.set_ext_click_area(30) backImg.add_event_cb( lambda e: sound_ttf_back_press_callback(e, backImg), lv.EVENT.PRESSED, None) backImg.add_event_cb( lambda e: sound_ttf_back_release_callback(e, backImg), lv.EVENT.RELEASED, None) from smart_panel import needAnimation if (needAnimation): lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.MOVE_LEFT, 500, 0, True) else: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.NONE, 0, 0, True) sound_ttf_alive = True
# # Using multiple styles # # A base style style_base = lv.style_t() style_base.init() style_base.set_bg_color(lv.palette_main(lv.PALETTE.LIGHT_BLUE)) style_base.set_border_color(lv.palette_darken(lv.PALETTE.LIGHT_BLUE, 3)) style_base.set_border_width(2) style_base.set_radius(10) style_base.set_shadow_width(10) style_base.set_shadow_ofs_y(5) style_base.set_shadow_opa(lv.OPA._50) style_base.set_text_color(lv.color_white()) style_base.set_width(100) style_base.set_height(lv.SIZE.CONTENT) # Set only the properties that should be different style_warning = lv.style_t() style_warning.init() style_warning.set_bg_color(lv.palette_main(lv.PALETTE.YELLOW)) style_warning.set_border_color(lv.palette_darken(lv.PALETTE.YELLOW, 3)) style_warning.set_text_color(lv.palette_darken(lv.PALETTE.YELLOW, 4)) # Create an object with the base style only obj_base = lv.obj(lv.scr_act()) obj_base.add_style(style_base, 0) obj_base.align(lv.ALIGN.LEFT_MID, 20, 0)
def createPage(self): global isStarted global isAnimationComplete global arc global anim global timeCount global currentSelect global minuteLabel global secondLabel global millionLabel global anim_timeline global startLabel global currentValue global timer_alive print("Enter Timer") # init scr scr = lv.obj() win = lv.obj(scr) win.set_size(scr.get_width(), scr.get_height()) win.set_style_border_opa(0, 0) win.set_style_radius(0, 0) win.set_style_bg_color(lv.color_black(), 0) win.clear_flag(lv.obj.FLAG.SCROLLABLE) # back backImg = lv.img(win) backImg.set_src(RESOURCES_ROOT + "images/back.png") backImg.set_style_align(lv.ALIGN.LEFT_MID, 0) backImg.add_flag(lv.obj.FLAG.CLICKABLE) backImg.add_event_cb(lambda e: timer_back_click_callback(e, win), lv.EVENT.CLICKED, None) backImg.add_event_cb(lambda e: timer_back_press_callback(e, backImg), lv.EVENT.PRESSED, None) backImg.add_event_cb(lambda e: timer_back_release_callback(e, backImg), lv.EVENT.RELEASED, None) backImg.set_ext_click_area(30) isStarted = False currentSelect = 0 # count down func_col_dsc = [40, 5, 30, 5, 20, lv.GRID_TEMPLATE.LAST] func_row_dsc = [30, lv.GRID_TEMPLATE.LAST] timeContainer = lv.obj(win) timeContainer.set_style_bg_opa(0, 0) timeContainer.set_style_border_opa(0, 0) timeContainer.set_layout(lv.LAYOUT_GRID.value) timeContainer.set_style_grid_column_dsc_array(func_col_dsc, 0) timeContainer.set_style_grid_row_dsc_array(func_row_dsc, 0) timeContainer.set_grid_align(lv.GRID_ALIGN.SPACE_BETWEEN, lv.GRID_ALIGN.SPACE_BETWEEN) timeContainer.set_style_pad_all(0, 0) timeContainer.set_size(240, 70) timeContainer.center() minuteLabel = lv.label(timeContainer) minuteLabel.set_style_text_font(lv.font_montserrat_48, 0) minuteLabel.set_style_text_color(lv.color_white(), 0) minuteLabel.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.CENTER, 0, 1) signLabel = lv.label(timeContainer) signLabel.set_style_text_font(lv.font_montserrat_48, 0) signLabel.set_style_text_color(lv.color_white(), 0) signLabel.set_text(":") signLabel.set_grid_cell(lv.GRID_ALIGN.CENTER, 1, 1, lv.GRID_ALIGN.CENTER, 0, 1) secondLabel = lv.label(timeContainer) secondLabel.set_style_text_font(lv.font_montserrat_48, 0) secondLabel.set_style_text_color(lv.color_white(), 0) secondLabel.set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 0, 1) signLabel = lv.label(timeContainer) signLabel.set_style_text_font(lv.font_montserrat_48, 0) signLabel.set_style_text_color(lv.color_white(), 0) signLabel.set_text(":") signLabel.set_grid_cell(lv.GRID_ALIGN.CENTER, 3, 1, lv.GRID_ALIGN.CENTER, 0, 1) millionLabel = lv.label(timeContainer) millionLabel.set_style_text_font(lv.font_montserrat_36, 0) millionLabel.set_style_text_color(lv.color_white(), 0) millionLabel.set_grid_cell(lv.GRID_ALIGN.END, 4, 1, lv.GRID_ALIGN.START, 0, 1) setLabelValue(timeCount[currentSelect] * 60 * 50) startButton = lv.btn(win) startButton.align(lv.ALIGN.CENTER, 0, 40) startButton.set_size(126, 54) startButton.set_style_radius(45, lv.PART.MAIN) startButton.set_style_shadow_opa(0, 0) startButton.set_style_bg_color(lv.color_make(0xFF, 0xA8, 0x48), lv.PART.MAIN) startButton.align(lv.ALIGN.BOTTOM_LEFT, 12, -12) startButton.add_event_cb(start_button_event_handler, lv.EVENT.CLICKED, None) startLabel = lv.label(startButton) startLabel.set_text("START") startLabel.set_style_text_color(lv.color_black(), 0) startLabel.set_style_text_font(lv.font_montserrat_20, 0) startLabel.center() resetButton = lv.btn(win) resetButton.align(lv.ALIGN.CENTER, 0, 40) resetButton.set_size(126, 54) resetButton.set_style_radius(45, lv.PART.MAIN) resetButton.set_style_shadow_opa(0, 0) resetButton.set_style_bg_color(lv.color_white(), lv.PART.MAIN) resetButton.align(lv.ALIGN.BOTTOM_RIGHT, -12, -12) resetButton.add_event_cb(reset_button_event_handler, lv.EVENT.CLICKED, None) resetLabel = lv.label(resetButton) resetLabel.set_text("REST") resetLabel.set_style_text_color(lv.color_black(), 0) resetLabel.set_style_text_font(lv.font_montserrat_20, 0) resetLabel.center() # select time col_dsc = [75, 75, 75, 75, lv.GRID_TEMPLATE.LAST] row_dsc = [60, 80, 60, lv.GRID_TEMPLATE.LAST] funcContainer = lv.obj(win) funcContainer.set_layout(lv.LAYOUT_GRID.value) funcContainer.set_style_bg_opa(0, 0) funcContainer.set_style_border_opa(0, 0) funcContainer.set_style_grid_column_dsc_array(col_dsc, 0) funcContainer.set_style_grid_row_dsc_array(row_dsc, 0) funcContainer.set_grid_align(lv.GRID_ALIGN.SPACE_BETWEEN, lv.GRID_ALIGN.SPACE_BETWEEN) funcContainer.set_size(300, 90) funcContainer.set_style_align(lv.ALIGN.TOP_MID, 0) maxMillionSecond = timeCount[0] * 60 * 50 arc[0] = lv.arc(funcContainer) arc[0].set_style_arc_color(lv.color_white(), lv.PART.INDICATOR) arc[0].set_style_arc_color(lv.color_make(0x33, 0x33, 0x33), lv.PART.MAIN) arc[0].set_range(0, maxMillionSecond) arc[0].set_size(55, 55) arc[0].set_rotation(90) arc[0].set_bg_angles(0, 360) arc[0].remove_style(None, lv.PART.KNOB) arc[0].set_value(maxMillionSecond) arc[0].set_style_arc_width(8, lv.PART.INDICATOR) arc[0].set_style_arc_width(8, lv.PART.MAIN) arc[0].set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 1, lv.GRID_ALIGN.CENTER, 0, 1) arc[0].clear_flag(lv.obj.FLAG.CLICKABLE) totalTime = lv.label(funcContainer) totalTime.set_text(str(timeCount[0])) totalTime.set_style_text_font(lv.font_montserrat_18, 0) totalTime.set_style_text_color(lv.color_white(), 0) totalTime.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 1, lv.GRID_ALIGN.CENTER, 0, 1) totalTime.add_flag(lv.obj.FLAG.CLICKABLE) totalTime.add_event_cb(lambda e: arc_event_handler(e, 0), lv.EVENT.CLICKED, None) totalTime.set_ext_click_area(30) anim[0] = lv.anim_t() anim[0].init() anim[0].set_var(arc[0]) anim[0].set_time(maxMillionSecond * 20) anim[0].set_values(maxMillionSecond, 0) anim[0].set_custom_exec_cb(lambda a1, val: set_time_value(arc[0], val)) anim_timeline = lv.anim_timeline_create() lv.anim_timeline_add(anim_timeline, 0, anim[0]) arc[1] = lv.arc(funcContainer) arc[1].set_style_arc_color(lv.color_white(), lv.PART.INDICATOR) arc[1].set_style_arc_color(lv.color_make(0x33, 0x33, 0x33), lv.PART.MAIN) arc[1].set_range(0, maxMillionSecond) arc[1].set_size(55, 55) arc[1].set_rotation(90) arc[1].set_bg_angles(0, 360) arc[1].remove_style(None, lv.PART.KNOB) arc[1].set_value(0) arc[1].set_style_arc_width(2, lv.PART.INDICATOR) arc[1].set_style_arc_width(2, lv.PART.MAIN) arc[1].set_grid_cell(lv.GRID_ALIGN.CENTER, 1, 1, lv.GRID_ALIGN.CENTER, 0, 1) arc[1].clear_flag(lv.obj.FLAG.CLICKABLE) totalTime = lv.label(funcContainer) totalTime.set_text(str(timeCount[1])) totalTime.set_style_text_font(lv.font_montserrat_18, 0) totalTime.set_style_text_color(lv.color_white(), 0) totalTime.set_grid_cell(lv.GRID_ALIGN.CENTER, 1, 1, lv.GRID_ALIGN.CENTER, 0, 1) totalTime.add_flag(lv.obj.FLAG.CLICKABLE) totalTime.add_event_cb(lambda e: arc_event_handler(e, 1), lv.EVENT.CLICKED, None) totalTime.set_ext_click_area(30) arc[2] = lv.arc(funcContainer) arc[2].set_style_arc_color(lv.color_white(), lv.PART.INDICATOR) arc[2].set_style_arc_color(lv.color_make(0x33, 0x33, 0x33), lv.PART.MAIN) arc[2].set_range(0, maxMillionSecond) arc[2].set_size(55, 55) arc[2].set_rotation(90) arc[2].set_bg_angles(0, 360) arc[2].remove_style(None, lv.PART.KNOB) arc[2].set_value(0) arc[2].set_style_arc_width(2, lv.PART.INDICATOR) arc[2].set_style_arc_width(2, lv.PART.MAIN) arc[2].set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 0, 1) arc[2].clear_flag(lv.obj.FLAG.CLICKABLE) totalTime = lv.label(funcContainer) totalTime.set_text(str(timeCount[2])) totalTime.set_style_text_font(lv.font_montserrat_18, 0) totalTime.set_style_text_color(lv.color_white(), 0) totalTime.set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 0, 1) totalTime.add_flag(lv.obj.FLAG.CLICKABLE) totalTime.add_event_cb(lambda e: arc_event_handler(e, 2), lv.EVENT.CLICKED, None) totalTime.set_ext_click_area(30) arc[3] = lv.arc(funcContainer) arc[3].set_style_arc_color(lv.color_white(), lv.PART.INDICATOR) arc[3].set_style_arc_color(lv.color_make(0x33, 0x33, 0x33), lv.PART.MAIN) arc[3].set_range(0, maxMillionSecond) arc[3].set_size(55, 55) arc[3].set_rotation(90) arc[3].set_bg_angles(0, 360) arc[3].remove_style(None, lv.PART.KNOB) arc[3].set_value(0) arc[3].set_style_arc_width(2, lv.PART.INDICATOR) arc[3].set_style_arc_width(2, lv.PART.MAIN) arc[3].set_grid_cell(lv.GRID_ALIGN.CENTER, 3, 1, lv.GRID_ALIGN.CENTER, 0, 1) arc[3].clear_flag(lv.obj.FLAG.CLICKABLE) totalTime = lv.label(funcContainer) totalTime.set_text(str(timeCount[3])) totalTime.set_style_text_font(lv.font_montserrat_18, 0) totalTime.set_style_text_color(lv.color_white(), 0) totalTime.set_grid_cell(lv.GRID_ALIGN.CENTER, 3, 1, lv.GRID_ALIGN.CENTER, 0, 1) totalTime.add_flag(lv.obj.FLAG.CLICKABLE) totalTime.add_event_cb(lambda e: arc_event_handler(e, 3), lv.EVENT.CLICKED, None) totalTime.set_ext_click_area(30) from smart_panel import needAnimation if (needAnimation): lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.MOVE_LEFT, 500, 0, True) else: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.NONE, 0, 0, True) timer_alive = True
def createPage(self): global currentFunc global currentSelected global hvac_alive print("Enter Hvac") # init scr scr = lv.obj() win = lv.obj(scr) win.set_size(scr.get_width(), scr.get_height()) win.set_style_border_opa(0, 0) win.set_style_radius(0, 0) win.set_style_bg_color(lv.color_black(), 0) win.clear_flag(lv.obj.FLAG.SCROLLABLE) # --------- value container --------- col_dsc = [60, 65, 40, 60, lv.GRID_TEMPLATE.LAST] row_dsc = [48, lv.GRID_TEMPLATE.LAST] valueLayout = lv.obj(win) valueLayout.set_layout(lv.LAYOUT_GRID.value) valueLayout.set_style_bg_opa(0, 0) valueLayout.set_style_border_opa(0, 0) valueLayout.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT) valueLayout.set_grid_align(lv.GRID_ALIGN.SPACE_BETWEEN, lv.GRID_ALIGN.SPACE_BETWEEN) valueLayout.set_style_grid_column_dsc_array(col_dsc, 0) valueLayout.set_style_grid_row_dsc_array(row_dsc, 0) valueLayout.set_style_pad_top(20, 0) valueLayout.set_style_align(lv.ALIGN.TOP_MID, 0) # ----------- - -------------- subImage = lv.img(valueLayout) subImage.set_src(RESOURCES_ROOT + "images/subtraction.png") subImage.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.CENTER, 0, 1) subImage.add_flag(lv.obj.FLAG.CLICKABLE) subImage.add_event_cb(lambda e: sub_pressed_cb(e, self), lv.EVENT.PRESSED, None) # subImage.add_event_cb(lambda e: hvac_back_press_callback(e, subImage), lv.EVENT.PRESSED, None) # subImage.add_event_cb(lambda e: hvac_back_release_callback(e, subImage), lv.EVENT.RELEASED, None) subImage.set_ext_click_area(40) # ----------- value ----------- self.label = lv.label(valueLayout) self.label.set_text(str(self.value)) self.label.set_style_text_color(lv.color_white(), 0) self.label.set_style_text_font(lv.font_montserrat_48, 0) self.label.set_grid_cell(lv.GRID_ALIGN.CENTER, 1, 1, lv.GRID_ALIGN.CENTER, 0, 1) # ----------- ºC ------------ centigradeImage = lv.img(valueLayout) centigradeImage.set_src(RESOURCES_ROOT + "images/centigrade_s.png") centigradeImage.set_style_pad_bottom(8, 0) centigradeImage.set_grid_cell(lv.GRID_ALIGN.START, 2, 1, lv.GRID_ALIGN.END, 0, 1) # ----------- + ---------------- addImage = lv.img(valueLayout) addImage.set_src(RESOURCES_ROOT + "images/addition.png") addImage.set_grid_cell(lv.GRID_ALIGN.CENTER, 3, 1, lv.GRID_ALIGN.CENTER, 0, 1) addImage.add_flag(lv.obj.FLAG.CLICKABLE) addImage.add_event_cb(lambda e: add_pressed_cb(e, self), lv.EVENT.PRESSED, None) # addImage.add_event_cb(lambda e: hvac_back_press_callback(e, addImage), lv.EVENT.PRESSED, None) # addImage.add_event_cb(lambda e: hvac_back_release_callback(e, addImage), lv.EVENT.RELEASED, None) addImage.set_ext_click_area(40) # ----------- tips ---------- tips = lv.label(win) tips.set_text("Temperature") tips.set_style_text_color(lv.color_make(0xCC, 0xCC, 0xCC), 0) tips.set_style_pad_bottom(20, 0) tips.set_align(lv.ALIGN.CENTER) # ----------- function ---------- func_col_dsc = [70, 70, 70, 70, lv.GRID_TEMPLATE.LAST] func_row_dsc = [40, lv.GRID_TEMPLATE.LAST] funcContainer = lv.obj(win) funcContainer.set_style_bg_opa(0, 0) funcContainer.set_style_border_opa(0, 0) funcContainer.set_grid_dsc_array(func_col_dsc, func_row_dsc) funcContainer.set_width(300) funcContainer.set_height(90) funcContainer.set_layout(lv.LAYOUT_GRID.value) funcContainer.set_align(lv.ALIGN.BOTTOM_MID) funcContainer.set_grid_align(lv.GRID_ALIGN.SPACE_BETWEEN, lv.GRID_ALIGN.SPACE_BETWEEN) image = lv.img(funcContainer) image.set_src(functionImage[0]) image.add_flag(lv.obj.FLAG.CLICKABLE) image.set_ext_click_area(20) image.add_event_cb(lambda e: func_pressed_cb(e, 0), lv.EVENT.PRESSED, None) image.set_grid_cell(lv.GRID_ALIGN.CENTER, 0, 1, lv.GRID_ALIGN.CENTER, 0, 1) currentSelected = image currentSelected.set_src(functionImageSelected[0]) image1 = lv.img(funcContainer) image1.set_src(functionImage[1]) image1.add_flag(lv.obj.FLAG.CLICKABLE) image1.set_ext_click_area(20) image1.add_event_cb(lambda e: func_pressed_cb(e, 1), lv.EVENT.PRESSED, None) image1.set_grid_cell(lv.GRID_ALIGN.CENTER, 1, 1, lv.GRID_ALIGN.CENTER, 0, 1) image2 = lv.img(funcContainer) image2.set_src(functionImage[2]) image2.add_flag(lv.obj.FLAG.CLICKABLE) image2.set_ext_click_area(20) image2.add_event_cb(lambda e: func_pressed_cb(e, 2), lv.EVENT.PRESSED, None) image2.set_grid_cell(lv.GRID_ALIGN.CENTER, 2, 1, lv.GRID_ALIGN.CENTER, 0, 1) image3 = lv.img(funcContainer) image3.set_src(functionImage[3]) image3.add_flag(lv.obj.FLAG.CLICKABLE) image3.set_ext_click_area(20) image3.add_event_cb(lambda e: func_pressed_cb(e, 3), lv.EVENT.PRESSED, None) image3.set_grid_cell(lv.GRID_ALIGN.CENTER, 3, 1, lv.GRID_ALIGN.CENTER, 0, 1) # for i in range(4): # image = lv.img(funcContainer) # image.set_src(functionImage[i]) # image.add_flag(lv.obj.FLAG.CLICKABLE) # image.set_ext_click_area(20) # image.add_event_cb(lambda e: func_pressed_cb(e, i), lv.EVENT.PRESSED, None) # image.set_grid_cell(lv.GRID_ALIGN.CENTER, i, 1, lv.GRID_ALIGN.CENTER, 0, 1) # if (currentFunc == i): # currentSelected = image # currentSelected.set_src(functionImageSelected[i]) backImg = lv.img(win) backImg.set_src(RESOURCES_ROOT + "images/back.png") backImg.set_style_align(lv.ALIGN.LEFT_MID, 0) backImg.add_flag(lv.obj.FLAG.CLICKABLE) backImg.add_event_cb(lambda e: hvac_back_click_callback(e, win), lv.EVENT.CLICKED, None) backImg.add_event_cb(lambda e: hvac_back_press_callback(e, backImg), lv.EVENT.PRESSED, None) backImg.add_event_cb(lambda e: hvac_back_release_callback(e, backImg), lv.EVENT.RELEASED, None) backImg.set_ext_click_area(20) from smart_panel import needAnimation if (needAnimation): lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.MOVE_LEFT, 500, 0, True) else: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.NONE, 0, 0, True) hvac_alive = True
print("Could not find imgbtn_right.png") sys.exit() imgbtn_right_dsc = lv.img_dsc_t({ 'data_size': len(imgbtn_right_data), 'data': imgbtn_right_data }) # Create a transition animation on width transformation and recolor. tr_prop = [lv.STYLE.TRANSFORM_WIDTH, lv.STYLE.IMG_RECOLOR_OPA, 0] tr = lv.style_transition_dsc_t() tr.init(tr_prop, lv.anim_t.path_linear, 200, 0, None) style_def = lv.style_t() style_def.init() style_def.set_text_color(lv.color_white()) style_def.set_transition(tr) # Darken the button when pressed and make it wider style_pr = lv.style_t() style_pr.init() style_pr.set_img_recolor_opa(lv.OPA._30) style_pr.set_img_recolor(lv.color_black()) style_pr.set_transform_width(20) # Create an image button imgbtn1 = lv.imgbtn(lv.scr_act()) imgbtn1.set_src(lv.imgbtn.STATE.RELEASED, imgbtn_left_dsc, imgbtn_mid_dsc, imgbtn_right_dsc) imgbtn1.add_style(style_def, 0) imgbtn1.add_style(style_pr, lv.STATE.PRESSED)
def createPage(self): global anim global playedTime global durationTime global slider global audio_src global player global image global music_alive global currentMusic global albumCover global songTitle global albumTitle global totalTime global anim_timeline global scr print("Enter Music") # init scr scr = lv.obj() win = lv.obj(scr) win.set_size(scr.get_width(), scr.get_height()) win.set_style_border_opa(0, 0) win.set_style_radius(0, 0) win.set_style_bg_color(lv.color_black(), 0) win.clear_flag(lv.obj.FLAG.SCROLLABLE) backImg = lv.img(win) backImg.set_src(RESOURCES_ROOT + "images/back.png") backImg.set_style_align(lv.ALIGN.LEFT_MID, 0) backImg.add_flag(lv.obj.FLAG.CLICKABLE) backImg.add_event_cb(lambda e: music_back_click_callback(e, win), lv.EVENT.CLICKED, None) backImg.add_event_cb(lambda e: music_back_press_callback(e, backImg), lv.EVENT.PRESSED, None) backImg.add_event_cb(lambda e: music_back_release_callback(e, backImg), lv.EVENT.RELEASED, None) backImg.set_ext_click_area(30) albumCover = lv.img(win) albumCover.set_style_pad_left(12, 0) albumCover.set_style_pad_top(10, 0) songTitle = lv.label(win) songTitle.set_style_text_font(lv.font_montserrat_20, 0) songTitle.set_style_text_color(lv.color_white(), 0) songTitle.align_to(albumCover, lv.ALIGN.TOP_LEFT, 130, 3) albumTitle = lv.label(win) albumTitle.set_style_text_font(lv.font_montserrat_16, 0) albumTitle.set_style_text_color(lv.color_make(0xCC, 0xCC, 0xCC), 0) albumTitle.align_to(songTitle, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 12) props = [lv.STYLE.BG_COLOR, 0] transition_dsc = lv.style_transition_dsc_t() transition_dsc.init(props, lv.anim_t.path_linear, 300, 0, None) style_main = lv.style_t() style_indicator = lv.style_t() style_pressed_color = lv.style_t() style_main.init() style_main.set_bg_opa(lv.OPA.COVER) style_main.set_bg_color(lv.color_make(0x66, 0x66, 0x66)) style_main.set_radius(lv.RADIUS.CIRCLE) style_main.set_line_dash_width(1) style_indicator.init() style_indicator.set_bg_opa(lv.OPA.COVER) style_indicator.set_bg_color(lv.color_white()) style_indicator.set_radius(lv.RADIUS.CIRCLE) style_indicator.set_transition(transition_dsc) style_pressed_color.init() style_pressed_color.set_bg_color(lv.color_white()) # Create a slider and add the style slider = lv.slider(win) slider.remove_style_all() # Remove the styles coming from the theme slider.add_style(style_main, lv.PART.MAIN) slider.add_style(style_indicator, lv.PART.INDICATOR) slider.add_style(style_pressed_color, lv.PART.INDICATOR | lv.STATE.PRESSED) slider.align_to(albumTitle, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 25) slider.set_size(140, 1) anim = lv.anim_t() anim.init() anim.set_var(slider) playedTime = lv.label(win) setLabelValue(playedTime, 0) playedTime.set_style_text_font(lv.font_montserrat_16, 0) playedTime.set_style_text_color(lv.color_white(), 0) playedTime.align_to(slider, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 15) totalTime = lv.label(win) totalTime.set_style_text_font(lv.font_montserrat_16, 0) totalTime.set_style_text_color(lv.color_white(), 0) totalTime.align_to(slider, lv.ALIGN.OUT_BOTTOM_RIGHT, 0, 15) func_col_dsc = [80, 80, 80, 80, lv.GRID_TEMPLATE.LAST] func_row_dsc = [40, lv.GRID_TEMPLATE.LAST] funcContainer = lv.obj(win) funcContainer.set_style_bg_opa(0x00, 0) funcContainer.set_style_border_opa(0x00, 0) funcContainer.set_layout(lv.LAYOUT_GRID.value) funcContainer.set_grid_dsc_array(func_col_dsc, func_row_dsc) funcContainer.set_grid_align(lv.GRID_ALIGN.SPACE_BETWEEN, lv.GRID_ALIGN.SPACE_BETWEEN) funcContainer.set_align(lv.ALIGN.BOTTOM_MID) funcContainer.set_size(320, 70) for i in range(4): image[i] = lv.img(funcContainer) image[i].set_src(functionImage[i]) image[i].add_flag(lv.obj.FLAG.CLICKABLE) image[i].set_ext_click_area(20) image[i].set_grid_cell(lv.GRID_ALIGN.CENTER, i, 1, lv.GRID_ALIGN.CENTER, 0, 1) if (i == 0): image[i].add_event_cb(lambda e: controller_click_cb(e, "prev"), lv.EVENT.CLICKED, None) elif (i == 1): image[i].add_event_cb(lambda e: controller_click_cb(e, "play"), lv.EVENT.CLICKED, None) elif (i == 2): image[i].add_event_cb(lambda e: controller_click_cb(e, "next"), lv.EVENT.CLICKED, None) elif (i == 3): image[i].add_event_cb(lambda e: controller_click_cb(e, "fav"), lv.EVENT.CLICKED, None) anim.set_custom_exec_cb(lambda a1, val: setSpentTime(slider, val)) reset_music() from smart_panel import needAnimation if (needAnimation): lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.MOVE_LEFT, 500, 0, True) else: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.NONE, 0, 0, True) music_alive = True