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)
Example #2
0
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)
Example #3
0
    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)
Example #5
0
    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)
Example #6
0
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)
Example #7
0
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()
Example #8
0
    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))
Example #11
0
    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
Example #12
0
#
# 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)
Example #13
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
Example #14
0
    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
Example #15
0
    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)
Example #16
0
    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