Ejemplo n.º 1
0
    def __init__(self, manifest: DandelionAppManifest):

        self.manifest = manifest

        self.scr = lv.obj()

        # Top bar base
        self.top_bar = lv.cont(self.scr)
        # self.top_bar.set_style_local_bg_color(lv.cont.PART.MAIN,
        #                                       lv.STATE.DEFAULT,
        #                                       lv.color_hex(0x0))
        self.top_bar.set_width(lv.scr_act().get_width())
        self.top_bar.set_height(TOP_BAR_HEIGHT)
        self.top_bar.align(self.scr, lv.ALIGN.IN_TOP_MID, 0, 0)
        self.top_bar.set_event_cb(self.top_bar_event_cb)

        # Top bar content

        # App name (if not launcher), static, does not update
        if not self.manifest.launcher:
            self.title_label = lv.label(self.top_bar)
            self.title_label.set_text(self.manifest.name)
            self.title_label.align(self.top_bar, lv.ALIGN.CENTER, 0, 0)

        # Time label, value set in refresh, align based on title presence
        self.clock_label = lv.label(self.top_bar)

        # App container
        self.app_container = lv.cont(self.scr)
        self.app_container.set_width(lv.scr_act().get_width())
        self.app_container.set_height(lv.scr_act().get_height() -
                                      self.top_bar.get_height())
        self.app_container.align(self.top_bar, lv.ALIGN.OUT_BOTTOM_MID, 0, 0)
Ejemplo n.º 2
0
    def __init__(self, size, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._text = "txt"
        self.text_prev = "txt_prev"

        # We have a container that parents a label (QR code)
        self.set_auto_realign(True)
        self.align_origo(None, lv.ALIGN.CENTER, 0, 0)
        self.set_layout(lv.LAYOUT.OFF)

        # label which holds the QR code
        self.lbl = lv.label(self)
        self.lbl.set_long_mode(lv.label.LONG.BREAK)
        self.lbl.set_align(lv.label.ALIGN.CENTER)
        self.size = size
        self.max_size = None

        # in case the QR is animatable our container also parents a tip label
        self.cont = lv.cont(self)
        self.lbl_indx = lv.label(self.cont)
        self.lbl_indx.set_text('')
        self.cont.set_fit(lv.FIT.TIGHT)
        self.set_fit(lv.FIT.TIGHT)
        self.isQRbig = False
        self.animation_tip = True

        QrA.init(self.next)
        self.set_event_cb(QrA.qr_cb)
Ejemplo n.º 3
0
def m2():
    print("This is callback for M2")

    scr = lv.obj()
    lv.scr_load(scr)

    #make container
    con = lv.cont(scr)
    con.set_auto_realign(True)
    con.set_layout(lv.LAYOUT.CENTER)
    con.align(scr, lv.ALIGN.CENTER, 0, 0)
    con.set_fit(lv.FIT.TIGHT)

    #make label in container
    label = lv.label(con)
    label.set_text(""" This is the second screen""")

    ta = lv.textarea(con)
    kb = lv.keyboard(con)
    #kb.set_style_local_radius(0,0,0)
    kb.set_textarea(ta)

    btn = lv.btn(con)
    label = lv.label(btn)
    label.set_text("Skip la")
    btn.set_event_cb(lambda obj, event: m4()
                     if event == lv.EVENT.CLICKED else None)
Ejemplo n.º 4
0
    def add_tile(self, x, y, id):
        self.log.debug("add tile no %d: x: %d y: %d, id= %s" %
                       (self.tile_entries, x, y, id))
        self.tile_entries += 1
        new_tile = Tile()
        new_tile.tile = lv.cont(self.mainbar, None)
        hor_res = lv.scr_act().get_disp().driver.hor_res
        ver_res = lv.scr_act().get_disp().driver.ver_res
        new_tile.tile.set_width(hor_res)
        new_tile.tile.set_height(ver_res)
        new_tile.tile.set_pos(hor_res * x, ver_res * y)
        new_tile.tile.add_style(lv.obj.PART.MAIN, self.mainbar_style)
        new_tile.x = x
        new_tile.y = y
        new_tile.id = id
        self.tile_table.append(new_tile)
        self.mainbar.add_element(new_tile.tile)
        new_pos = lv.point_t()
        new_pos.x = x
        new_pos.y = y
        self.tile_pos_table.append(new_pos)
        self.tile_table[self.tile_entries - 1].tile.add_style(
            lv.obj.PART.MAIN, self.mainbar_style)
        self.tile_table[self.tile_entries - 1].tile.set_pos(
            self.tile_pos_table[self.tile_entries - 1].x *
            lv.scr_act().get_disp().driver.hor_res,
            self.tile_pos_table[self.tile_entries - 1].y *
            lv.scr_act().get_disp().driver.ver_res)
        self.mainbar.set_valid_positions(self.tile_pos_table,
                                         self.tile_entries)

        return (self.tile_entries - 1)
Ejemplo n.º 5
0
 def __init__(self, parent):
     self.lv_obj = lv.cont(parent)
     self._set_custom_style()
     self.lv_obj.set_auto_realign(True)
     self.lv_obj.set_fit(lv.FIT.FLOOD)
     self.lv_obj.set_layout(lv.LAYOUT.PRETTY)
     self.width = self.lv_obj.get_width()
     self.half_width = self.width // 2 - 13
     self.third_width = self.width // 3 - 10
Ejemplo n.º 6
0
def init(parent):
    # global screen
    container = lv.obj(parent)
    container.set_size(parent.get_width(), parent.get_height())
    container.add_style(lv.obj.PART.MAIN, background)

    clock = lv.cont(container)
    clock.set_fit(lv.FIT.PARENT)
    clock.set_layout(lv.LAYOUT.CENTER)
    clock.set_size(container.get_width(), container.get_height())
    clock.add_style(lv.obj.PART.MAIN, background)

    batteryLabel = lv.label(container)

    hours = lv.label(clock)
    hours.set_text("00")
    hours.set_align(lv.label.ALIGN.CENTER)
    hours.add_style(lv.label.PART.MAIN, title)

    minutes = lv.label(clock)
    minutes.set_text("00")
    minutes.set_align(lv.label.ALIGN.CENTER)
    minutes.add_style(lv.label.PART.MAIN, title)

    date = lv.label(clock)
    date.set_text("1 jan. 2021")
    date.add_style(lv.label.PART.MAIN, subtitle)

    # minutes.align(hours, lv.ALIGN.OUT_BOTTOM_MID, 0, 0)

    batteryLabel.align(container, lv.ALIGN.IN_TOP_RIGHT, 0, 0)
    batteryLabel.set_align(lv.label.ALIGN.RIGHT)
    batteryLabel.add_style(lv.label.PART.MAIN, text)
    batteryLabel.set_style_local_text_color(lv.label.PART.MAIN,
                                            lv.STATE.DEFAULT, antracite_light)

    def update_clock(task):
        time = get_watch().rtc
        hours.set_text("{0:02n}".format(time.hours()))
        minutes.set_text("{0:02n}".format(time.minutes()))

        batteryLabel.set_text('{}%'.format(
            get_watch().pmu.getBattPercentage()))

        date.set_text("{} {} 20{}".format(time.date(), months[time.month()],
                                          time.year()))

    lv.task_create(update_clock, 500, lv.TASK_PRIO.HIGHEST, None)

    update_clock(None)

    return container
Ejemplo n.º 7
0
    def m3_1():
        
        #load values to begin and duration
    
        con2 = lv.cont(scr)
        con2.align(con, lv.ALIGN.OUT_BOTTOM_MID,0,0)
        con2.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT)
        con2.set_style_local_radius(0,0,0)
    
        position = drop.get_selected()
        
        con3 = lv.cont(con2)
        con3.align(con2, lv.ALIGN.IN_TOP_MID,0,0)
        con3.set_fit2(lv.FIT.PARENT,lv.FIT.TIGHT)
        tittle = lv.label(con3)
        tittle.align(con3, lv.ALIGN.CENTER,0,0)
        tittle.set_text("Set Begin Time")

    
        minute_btn = lv.btn(con2)
        minute_btn.align(con3, lv.ALIGN.OUT_BOTTOM_MID,0,0)
        minute_btn.set_style_local_radius(0,0,0)
        minute_btn.set_fit(lv.FIT.TIGHT)
        lbl_minute_btn = lv.label(minute_btn)
        lbl_minute_btn.set_text(str(trigger[position].bminute))
    
        hour_btn = lv.btn(con2)
        hour_btn.align(minute_btn, lv.ALIGN.OUT_LEFT_MID,0,0)
        hour_btn.set_style_local_radius(0,0,0)
        hour_btn.set_fit(lv.FIT.TIGHT)
        lbl_hour_btn = lv.label(hour_btn)
        lbl_hour_btn.set_text(str(trigger[position].bhour))
        
        second_btn = lv.btn(con2)
        second_btn.align(minute_btn, lv.ALIGN.OUT_RIGHT_MID,0,0)
        second_btn.set_style_local_radius(0,0,0)
        second_btn.set_fit(lv.FIT.TIGHT)
        lvl_second_btn = lv.label(second_btn)
        lvl_second_btn.set_text(str(trigger[position].bsecond))
Ejemplo n.º 8
0
def lv_line(screen):
    line_points = [[5,5], [70,70]]
    valid_pos = [lv.point_t(), lv.point_t(), lv.point_t(), lv.point_t(), lv.point_t(), lv.point_t(), lv.point_t()]
    valid_pos[0].x = 0
    valid_pos[0].y = 0
    valid_pos[1].x = 10
    valid_pos[1].y = 0
    valid_pos[2].x = 10
    valid_pos[2].y = 10
    valid_pos[3].x = 0
    valid_pos[3].y = 10
    valid_pos[4].x = 10
    valid_pos[4].y = 10
    valid_pos[5].x = 10
    valid_pos[5].y = 20
    valid_pos[6].x = 0
    valid_pos[6].y = 20

    line_style2 = lv.style_t()
    line_style2.init()
    line_style2.set_line_width(lv.STATE.DEFAULT, 8)
    line_style2.set_line_color(lv.STATE.DEFAULT, styles.LV_COLOR_BLUE)
    line_style2.set_line_rounded(lv.STATE.DEFAULT, True)

    cont_style = lv.style_t()
    cont_style.init()
    cont_style.set_border_opa(lv.STATE.DEFAULT, lv.OPA.TRANSP)
    cont_style.set_bg_opa(lv.STATE.DEFAULT, lv.OPA.TRANSP)
    # cont_style.set_bg_color(lv.STATE.DEFAULT, styles.LV_COLOR_WATCH)

    cont = lv.cont(screen)
    #cont.add_style(cont.PART.MAIN, cont_style)
    cont.set_auto_realign(True)
    cont.set_size(200,65)
    cont.set_pos(20,85)
    #cont.align_origo(None, lv.ALIGN.CENTER, 0, 0)
    cont.set_fit(lv.FIT.NONE)
    # cont.set_layout(lv.LAYOUT.PRETTY_MID)
    cont.set_layout(lv.LAYOUT.ROW_MID)

    line = lv.line(cont)
    points = styles.get_line_pts_from_num(1, size=40)
    line.set_points(points, len(points))
    line.add_style(line.PART.MAIN, line_style2)
    line.align(None, lv.ALIGN.CENTER, 0, 0)

    line2 = lv.line(cont)
    points = styles.get_line_pts_from_num(2, size=40)
    line2.set_points(points, len(points))
    line2.add_style(line2.PART.MAIN, line_style2)
    line2.align(None, lv.ALIGN.CENTER, 0, 0)
Ejemplo n.º 9
0
 def temp_init(self):
     """
     Initialize the temp display on the screen
     """
     # Temp Label
     temp_label = lv.label(self.main_scr)
     temp_label.set_text('Temp(`C):')
     temp_label.align(self.timer_cont, lv.ALIGN.OUT_BOTTOM_LEFT, -2, 5)
     # Temp Container
     temp_cont = lv.cont(self.main_scr, self.profile_title_cont)
     temp_cont.align(temp_label, lv.ALIGN.OUT_BOTTOM_LEFT, 2, 2)
     # Temp Text
     temp_text = lv.label(temp_cont)
     temp_text.set_text('- - -')
     return temp_text
Ejemplo n.º 10
0
 def timer_init(self):
     """
     Initialize the timer on the screen
     """
     # Time Label
     time_label = lv.label(self.main_scr)
     time_label.set_text('Time:')
     time_label.align(self.profile_title_cont, lv.ALIGN.OUT_BOTTOM_LEFT, -2, 5)
     # Time Container
     time_cont = lv.cont(self.main_scr, self.profile_title_cont)
     time_cont.align(time_label, lv.ALIGN.OUT_BOTTOM_LEFT, 2, 2)
     # Time Text
     time_text = lv.label(time_cont)
     time_text.set_text('00:00')
     return time_label, time_cont, time_text
Ejemplo n.º 11
0
 def profile_title_init(self):
     """
     Initialize reflow profile title on the screen
     """
     # Profile Label
     profile_label = lv.label(self.main_scr)
     profile_label.set_text('Profile:')
     profile_label.align(self.oven_title, lv.ALIGN.OUT_BOTTOM_LEFT, -4, 3)
     # Profile Container
     profile_cont = lv.cont(self.main_scr)
     profile_cont.set_size(80, 28)
     # profile_cont.set_auto_realign(True)
     profile_cont.align(profile_label, lv.ALIGN.OUT_BOTTOM_LEFT, 2, 2)
     profile_cont.set_fit(lv.FIT.NONE)
     profile_cont.set_layout(lv.LAYOUT.COL_M)
     # Profile Text
     profile_text = lv.label(profile_cont)
     profile_text.set_text('N/A')
     return profile_label, profile_cont, profile_text
Ejemplo n.º 12
0
 def stage_init(self):
     # Stage Container
     stage_cont = lv.cont(self.main_scr)
     stage_cont.set_size(140, 38)
     # stage_cont.set_auto_realign(True)
     stage_cont.align(self.start_btn, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 5)
     stage_cont.set_fit(lv.FIT.NONE)
     stage_cont.set_layout(lv.LAYOUT.CENTER)
     style_stage = lv.style_t()
     lv.style_copy(style_stage, lv.style_plain)
     style_stage.text.font = lv.font_roboto_22
     stage_cont.set_style(lv.label.STYLE.MAIN, style_stage)
     stage_label = lv.label(stage_cont)
     stage_label.set_style(lv.label.STYLE.MAIN, style_stage)
     stage_label.set_recolor(True)
     stage_label.set_long_mode(lv.label.LONG.SROLL)
     stage_label.set_width(128)
     stage_label.set_text('')
     return stage_cont, stage_label
Ejemplo n.º 13
0
 def draw_melting_dash_line(self, y_point, melting_temp):
     """
     Draw melting temp with dashed line over the chart
     """
     # Container for dashed line
     style_cont = lv.style_t()
     lv.style_copy(style_cont, lv.style_transp)
     dashed_segments = 10
     dashed_cont = lv.cont(self.chart)
     dashed_cont.set_style(lv.line.STYLE.MAIN, style_cont)
     dashed_cont.set_width(GUI.CHART_WIDTH)
     # Draw dashed line
     style_dash_line = lv.style_t()
     lv.style_copy(style_dash_line, lv.style_transp)
     style_dash_line.line.color = lv.color_make(0xFF, 0x68, 0x33)
     style_dash_line.line.width = 3
     dash_width = int(GUI.CHART_WIDTH / (dashed_segments * 2 - 1))
     dashed_points = [
         {'x': 0, 'y': 0},
         {'x': dash_width, 'y': 0}
     ]
     dashed_line0 = lv.line(dashed_cont)
     dashed_line0.set_points(dashed_points, len(dashed_points))
     dashed_line0.set_style(lv.line.STYLE.MAIN, style_dash_line)
     dashed_line0.align(None, lv.ALIGN.IN_LEFT_MID, 0, 0)
     for i in range(dashed_segments - 1):
         dl_name = 'dashed_line' + str(i+1)
         parent_name = 'dashed_line' + str(i)
         locals()[dl_name] = lv.line(dashed_cont, dashed_line0)
         locals()[dl_name].align(None, lv.ALIGN.IN_LEFT_MID, dash_width * (i+1) * 2, 0)
     # Melting temp
     melt_label = lv.label(dashed_cont)
     melt_label.set_recolor(True)
     melt_label.set_text('#FF6833 ' + str(melting_temp) + '#')
     # Put above elements in place
     dashed_cont.align_origo(self.chart, lv.ALIGN.IN_BOTTOM_MID, 0, -y_point)
     melt_label.align(dashed_cont, lv.ALIGN.IN_TOP_LEFT, 8, 12)
     return dashed_cont
Ejemplo n.º 14
0
def m1():
    scr = lv.obj()
    lv.scr_load(scr)

    #make container
    con = lv.cont(scr)
    con.set_auto_realign(True)
    con.set_layout(lv.LAYOUT.CENTER)
    con.align(scr, lv.ALIGN.CENTER, 0, 0)
    con.set_fit(lv.FIT.TIGHT)

    #make label in container
    label = lv.label(con)
    label.set_text(""" This is the first iteration
    of the water timer. The developer
    is not responsible for any
    damages caused by it. User is
    advise to proceed cautiously""")

    btn = lv.btn(con)
    label2 = lv.label(btn)
    label2.set_text("I Accept!")
    btn.set_event_cb(lambda obj, event: m2()
                     if event == lv.EVENT.CLICKED else None)
Ejemplo n.º 15
0
def m6():  #wifi
    def btn_event(obj, event):

        if obj == btn2 and event == lv.EVENT.CLICKED:

            m5()

        if obj == ta and event == lv.EVENT.CLICKED:
            kb = lv.keyboard(scr)
            kb.set_textarea(ta)

    scr = lv.obj()
    lv.scr_load(scr)

    tab = lv.tabview(scr)

    tab1 = tab.add_tab("Wifi Settings")

    btn2 = lv.btn(tab)
    btn2.align(tab, lv.ALIGN.IN_TOP_LEFT, 0, 0)
    lbl_btn2 = lv.label(btn2)
    lbl_btn2.set_text(lv.SYMBOL.HOME)
    btn2.set_fit(lv.FIT.TIGHT)
    btn2.set_event_cb(btn_event)

    cont = lv.cont(tab1)
    cont.align(tab1, lv.ALIGN.IN_TOP_MID, 0, 20)
    cont.set_fit2(lv.FIT.TIGHT, lv.FIT.TIGHT)

    ta = lv.textarea(cont)
    ta.align(cont, lv.ALIGN.IN_TOP_MID, 0, 10)
    ta.set_one_line(True)
    ta.set_event_cb(btn_event)

    btn = lv.btn(cont)
    btn.align(ta, lv.ALIGN.OUT_BOTTOM_MID, 0, 0)
Ejemplo n.º 16
0
import lvgl as lv
import display_driver
import time


def event_handler(source, evt):
    if evt == lv.EVENT.VALUE_CHANGED:
        if source.is_checked():
            print("State: checked")
        else:
            print("State: unchecked")


# create a container
cont = lv.cont(lv.scr_act(), None)
cont.set_auto_realign(True)  # Auto realign when the size changes
cont.align_mid(None, lv.ALIGN.CENTER, 0,
               0)  # This parameters will be sued when realigned
cont.set_fit(lv.FIT.TIGHT)
cont.set_layout(lv.LAYOUT.COLUMN_MID)
label = lv.label(cont)
label.set_text("Short text")

# Refresh and pause here for a while to see how `fit` works
time.sleep(1)

label = lv.label(cont)
label.set_text("It is a long text")

# Wait here too
Ejemplo n.º 17
0
def m4():

    scr = lv.obj()
    lv.scr_load(scr)

    #container for drop and switch
    cont = lv.cont(scr)
    cont.set_auto_realign(True)
    cont.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT)
    cont.set_layout(lv.LAYOUT.PRETTY_MID)
    cont.align(scr, lv.ALIGN.IN_TOP_MID, 0, 0)

    #dropdown
    drop = lv.dropdown(cont)
    drop.set_style_local_border_post(lv.BORDER_SIDE.NONE, lv.BORDER_SIDE.NONE,
                                     lv.BORDER_SIDE.NONE)
    drop.set_options(
        "Trigger 1\nTrigger 2\nTrigger 3\nTrigger 4\nTrigger 5\nTrigger 6\nTrigger 7\nTrigger 8\nTrigger 9\n Trigger 10"
    )

    #label
    lbl1 = lv.label(cont)
    lbl1.set_text("Arm?")

    #switch
    switch = lv.switch(cont)

    #tabview

    tab = lv.tabview(scr)
    tab.align(cont, lv.ALIGN.OUT_BOTTOM_MID, 0, 0)

    tab1 = tab.add_tab("Time")
    tab2 = tab.add_tab("Auto")
    tab3 = tab.add_tab("Switches")

    #tab1

    lbl2 = lv.label(tab1)
    lbl2.set_text("Start time [h][m][s]")
    lbl2.align(tab1, lv.ALIGN.IN_TOP_MID, 0, 0)

    trig_btn = lv.btnmatrix(tab1)
    trig_btn.set_height(200)
    trig_btn.align(lbl2, lv.ALIGN.OUT_BOTTOM_MID, 0, 0)

    def remap():
        btn_map = [
            lv.SYMBOL.UP, lv.SYMBOL.UP, lv.SYMBOL.UP, "\n",
            str(trigger[0].bhour),
            str(trigger[0].bminute),
            str(trigger[0].bsecond), "\n", lv.SYMBOL.DOWN, lv.SYMBOL.DOWN,
            lv.SYMBOL.DOWN, "\n", lv.SYMBOL.SAVE, "", ""
        ]

        print('remapped called')

        return btn_map

    trig_btn.set_map(remap())

    #trig_btn.set_style

    def event_handler(obj, event):
        if event == lv.EVENT.VALUE_CHANGED:
            txt = obj.get_active_btn()
            print("{} was pressed".format(txt))

            if (txt == 0):
                trigger[0].bhour += 1

            if (txt == 1):
                trigger[0].bminute += 1

            if (txt == 2):
                trigger[0].bsecond += 1

            if (txt == 6):
                trigger[0].bhour -= 1

            if (txt == 7):
                trigger[0].bminute -= 1

            if (txt == 8):
                trigger[0].bsecond -= 1

            trig_btn.set_map(remap())

    trig_btn.set_event_cb(event_handler)

    #label set duration
    lbl3 = lv.label(tab1)
    lbl3.align(trig_btn, lv.ALIGN.OUT_BOTTOM_MID, -100, 0)
    lbl3.set_text("Set trigger duration [h][m][s]")

    roller = lv.roller(tab1)
Ejemplo n.º 18
0
def m3():

    global trigger

    print("This is callback for M3")

    scr = lv.obj()
    lv.scr_load(scr)

    #make container
    con = lv.cont(scr)
    con.set_auto_realign(True)
    #con.set_layout(lv.LAYOUT.PRETTY_TOP)
    con.align(scr, lv.ALIGN.IN_TOP_MID, 0, 0)
    con.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT)
    con.set_style_local_radius(0, 0, 0)

    #label = lv.label(con)
    #label.set_text("Trigger No:")
    #label.align(con, lv.ALIGN.IN_TOP_LEFT,10,10)

    drop = lv.dropdown(con)
    drop.align(con, lv.ALIGN.IN_LEFT_MID, 10, 0)
    drop.set_drag(False)
    drop.set_options(
        "trigger 1\ntrigger 2\ntrigger 3\ntrigger 4\ntrigger 5\ntrigger 6\ntrigger 7\n"
    )
    drop.set_event_cb(lambda obj, event: m3_1()
                      if event == lv.EVENT.VALUE_CHANGED else None)

    btn = lv.btn(con)
    label_btn = lv.label(btn)
    btn.set_height(drop.get_height())
    label_btn.set_text("New")
    btn.align(con, lv.ALIGN.IN_RIGHT_MID, -10, 0)

    def m3_1():

        #load values to begin and duration

        con2 = lv.cont(scr)
        con2.align(con, lv.ALIGN.OUT_BOTTOM_MID, 0, 0)
        con2.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT)
        con2.set_style_local_radius(0, 0, 0)

        position = drop.get_selected()

        con3 = lv.cont(con2)
        con3.align(con2, lv.ALIGN.IN_TOP_MID, 0, 0)
        con3.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT)
        tittle = lv.label(con3)
        tittle.align(con3, lv.ALIGN.CENTER, 0, 0)
        tittle.set_text("Set Begin Time")

        minute_btn = lv.btn(con2)
        minute_btn.align(con3, lv.ALIGN.OUT_BOTTOM_MID, 0, 0)
        minute_btn.set_style_local_radius(0, 0, 0)
        minute_btn.set_fit(lv.FIT.TIGHT)
        lbl_minute_btn = lv.label(minute_btn)
        lbl_minute_btn.set_text(str(trigger[position].bminute))

        hour_btn = lv.btn(con2)
        hour_btn.align(minute_btn, lv.ALIGN.OUT_LEFT_MID, 0, 0)
        hour_btn.set_style_local_radius(0, 0, 0)
        hour_btn.set_fit(lv.FIT.TIGHT)
        lbl_hour_btn = lv.label(hour_btn)
        lbl_hour_btn.set_text(str(trigger[position].bhour))

        second_btn = lv.btn(con2)
        second_btn.align(minute_btn, lv.ALIGN.OUT_RIGHT_MID, 0, 0)
        second_btn.set_style_local_radius(0, 0, 0)
        second_btn.set_fit(lv.FIT.TIGHT)
        lvl_second_btn = lv.label(second_btn)
        lvl_second_btn.set_text(str(trigger[position].bsecond))

    m3_1()
Ejemplo n.º 19
0
def selectors_create(parent):
    page = lv.page.__cast__(parent)
    lv.page.set_scrl_layout(page, lv.LAYOUT.PRETTY_MID)

    grid_h = page.get_height_grid(1, 1)

    if disp_size <= lv.DISP_SIZE.SMALL:
        grid_w = page.get_width_grid(1, 1)
    else:
        grid_w = page.get_width_grid(2, 1)

    cal = lv.calendar(parent, None)
    cal.set_drag_parent(True)
    if disp_size > lv.DISP_SIZE.MEDIUM:
        cal.set_size(min(grid_h, grid_w), min(grid_h, grid_w))
    else:
        cal.set_size(grid_w, grid_w)
        if disp_size <= lv.DISP_SIZE.SMALL:
            cal.set_style_local_text_font(lv.calendat.PART.BG,
                                          lv.STATE.DEFAULT,
                                          lv.theme_get_font_small())

    hl = [{
        "year": 2020,
        "month": 1,
        "day": 5
    }, {
        "year": 2020,
        "month": 1,
        "day": 9
    }]

    h = lv.cont(parent, None)
    h.set_drag_parent(True)
    if disp_size <= lv.DISP_SIZE.SMALL:
        h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT)
        h.set_width(lv.page.get_width_fit(page))
        h.set_layout(lv.LAYOUT.COLUMN_MID)
    elif disp_size <= lv.DISP_SIZE.MEDIUM:
        h.set_size(lv.obj.get_width(lv.obj.__cast__(cal)),
                   lv.obj.get_height(lv.obj.__cast__(cal)))
        h.set_layout(lv.LAYOUT.PRETTY_TOP)
    else:
        h.set_click(False)
        h.set_style_local_bg_opa(lv.PART.MAIN, lv.STATE.DEFAULT, lv.OPA.TRANSP)
        h.set_style_local_border_opa(lv.PART.MAIN, lv.STATE.DEFAULT,
                                     lv.OPA.TRANSP)
        h.set_style_local_pad_left(lv.cont.PART.MAIN, lv.STATE.DEFAULT, 0)
        h.set_style_local_pad_right(lv.cont.PART.MAIN, lv.STATE.DEFAULT, 0)
        h.set_style_local_pad_top(lv.cont.PART_MAIN, LV_STATE_DEFAULT, 0)
        h.set_size(min(grid_h, grid_w), min(grid_h, grid_w))
        h.set_layout(lv.LAYOUT.PRETTY_TOP)

    roller = lv.roller(h, None)
    roller.add_style(lv.cont.PART.MAIN, style_box)
    roller.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT,
                                     "Roller")
    roller.set_auto_fit(False)
    roller.set_align(lv.label.ALIGN.CENTER)
    roller.set_visible_row_count(4)
    if disp_size <= lv.DISP_SIZE.SMALL:
        roller.set_width(lv.cont.get_width_grid(h, 1, 1))
    else:
        roller.set_width(lv.cont.get_width_grid(h, 2, 1))

    dd = lv.dropdown(h, None)
    dd.add_style(lv.cont.PART.MAIN, style_box)
    dd.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT,
                                 "Dropdown")
    if disp_size <= lv.DISP_SIZE.SMALL:
        dd.set_width(lv.cont.get_width_grid(h, 1, 1))
    else:
        dd.set_width(lv.cont.get_width_grid(h, 2, 1))

    dd.set_options(
        "Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf\nHotel\nIndia\nJuliette\nKilo\nLima\nMike\nNovember\n"
        "Oscar\nPapa\nQuebec\nRomeo\nSierra\nTango\nUniform\nVictor\nWhiskey\nXray\nYankee\nZulu"
    )

    list = lv.list(parent, None)
    list.set_scroll_propagation(True)
    list.set_size(grid_w, grid_h)

    txts = [
        lv.SYMBOL.SAVE, "Save", lv.SYMBOL.CUT, "Cut", lv.SYMBOL.COPY, "Copy",
        lv.SYMBOL.OK, "This is a quite long text to scroll on the list",
        lv.SYMBOL.EDIT, "Edit", lv.SYMBOL.WIFI, "Wifi", lv.SYMBOL.BLUETOOTH,
        "Bluetooth", lv.SYMBOL.GPS, "GPS", lv.SYMBOL.USB, "USB",
        lv.SYMBOL.SD_CARD, "SD card", lv.SYMBOL.CLOSE, "Close"
    ]

    for i in range(0, len(txts) // 2, 2):
        btn = list.add_btn(txts[i], txts[i + 1])
        lv.btn.set_checkable(lv.btn.__cast__(btn), True)

        # Make a button disabled
        if i == 4:
            btn.set_state(lv.btn.STATE.DISABLED)

    cal.set_highlighted_dates(hl, 2)
Ejemplo n.º 20
0
def visuals_create(parent):
    page = lv.page.__cast__(parent)
    lv.page.set_scrl_layout(page, lv.LAYOUT.PRETTY_TOP)

    disp_size = display.get_size_category()

    grid_h_chart = lv.page.get_height_grid(page, 1, 1)
    if disp_size <= lv.DISP_SIZE.LARGE:
        grid_w_chart = lv.page.get_width_grid(page, 1, 1)
    else:
        grid_w_chart = lv.page.get_width_grid(page, 1, 2)

    chart = lv.chart(parent, None)
    chart.add_style(lv.chart.PART.BG, style_box)
    if disp_size <= lv.DISP_SIZE.SMALL:
        chart.set_style_local_text_font(lv.chart.PART.SERIES_BG,
                                        lv.STATE.DEFAULT,
                                        lv.theme_get_font_small())

    chart.set_drag_parent(True)
    chart.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT,
                                    "Line chart")
    chart.set_width_margin(grid_w_chart)
    chart.set_height_margin(grid_h_chart)
    chart.set_div_line_count(3, 0)
    chart.set_point_count(8)
    chart.set_type(lv.chart.TYPE.LINE)

    if disp_size > lv.DISP_SIZE.SMALL:
        chart.set_style_local_pad_left(lv.chart.PART.BG, lv.STATE.DEFAULT,
                                       4 * (LV_DPI // 10))
        chart.set_style_local_pad_bottom(lv.chart.PART.BG, lv.STATE.DEFAULT,
                                         3 * (LV_DPI // 10))
        chart.set_style_local_pad_right(lv.chart.PART.BG, lv.STATE.DEFAULT,
                                        2 * (LV_DPI // 10))
        chart.set_style_local_pad_top(lv.chart.PART.BG, lv.STATE.DEFAULT,
                                      2 * (LV_DPI // 10))
        chart.set_y_tick_length(0, 0)
        chart.set_x_tick_length(0, 0)
        chart.set_y_tick_texts("600\n500\n400\n300\n200", 0,
                               lv.chart.AXIS.DRAW_LAST_TICK)
        chart.set_x_tick_texts("Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug", 0,
                               lv.chart.AXIS.DRAW_LAST_TICK)

    s1 = chart.add_series(LV_THEME_DEFAULT_COLOR_PRIMARY)
    s2 = chart.add_series(LV_THEME_DEFAULT_COLOR_SECONDARY)

    chart.set_next(s1, 10)
    chart.set_next(s1, 90)
    chart.set_next(s1, 30)
    chart.set_next(s1, 60)
    chart.set_next(s1, 10)
    chart.set_next(s1, 90)
    chart.set_next(s1, 30)
    chart.set_next(s1, 60)
    chart.set_next(s1, 10)
    chart.set_next(s1, 90)

    chart.set_next(s2, 32)
    chart.set_next(s2, 66)
    chart.set_next(s2, 5)
    chart.set_next(s2, 47)
    chart.set_next(s2, 32)
    chart.set_next(s2, 32)
    chart.set_next(s2, 66)
    chart.set_next(s2, 5)
    chart.set_next(s2, 47)
    chart.set_next(s2, 66)
    chart.set_next(s2, 5)
    chart.set_next(s2, 47)

    chart2 = lv.chart(parent, chart)
    chart2.set_type(lv.chart.TYPE.COLUMN)
    chart2.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT,
                                     "Column chart")

    s1 = chart2.add_series(LV_THEME_DEFAULT_COLOR_PRIMARY)
    s2 = chart2.add_series(LV_THEME_DEFAULT_COLOR_SECONDARY)

    chart2.set_next(s1, 10)
    chart2.set_next(s1, 90)
    chart2.set_next(s1, 30)
    chart2.set_next(s1, 60)
    chart2.set_next(s1, 10)
    chart2.set_next(s1, 90)
    chart2.set_next(s1, 30)
    chart2.set_next(s1, 60)
    chart2.set_next(s1, 10)
    chart2.set_next(s1, 90)

    chart2.set_next(s2, 32)
    chart2.set_next(s2, 66)
    chart2.set_next(s2, 5)
    chart2.set_next(s2, 47)
    chart2.set_next(s2, 32)
    chart2.set_next(s2, 32)
    chart2.set_next(s2, 66)
    chart2.set_next(s2, 5)
    chart2.set_next(s2, 47)
    chart2.set_next(s2, 66)
    chart2.set_next(s2, 5)
    chart2.set_next(s2, 47)

    if disp_size <= lv.DISP_SIZE.SMALL:
        grid_w_meter = lv.page.get_width_grid(page, 1, 1)
    elif disp_size <= lv.DISP_SIZE.MEDIUM:
        grid_w_meter = lv.page.get_width_grid(page, 2, 1)
    else:
        grid_w_meter = lv.page.get_width_grid(page, 3, 1)

    meter_h = lv.page.get_height_fit(page)
    if grid_w_meter < meter_h:
        meter_size = grid_w_meter
    else:
        meter_size = meter_h

    lmeter = lv.linemeter(parent, None)
    lmeter.set_drag_parent(True)
    lmeter.set_value(50)
    lmeter.set_size(meter_size, meter_size)
    lmeter.add_style(lv.linemeter.PART.MAIN, style_box)
    lmeter.set_style_local_value_str(lv.linemeter.PART.MAIN, lv.STATE.DEFAULT,
                                     "Line meter")

    label = lv.label(lmeter, None)
    label.align(lmeter, lv.ALIGN.CENTER, 0, 0)
    label.set_style_local_text_font(lv.label.PART.MAIN, lv.STATE.DEFAULT,
                                    lv.theme_get_font_title())

    a_lm = lv.anim_t()
    a_lm.init()
    a_lm.set_custom_exec_cb(lambda a, val: linemeter_anim(a, lmeter, val))
    a_lm.set_values(0, 100)
    a_lm.set_time(4000)
    a_lm.set_playback_time(1000)
    a_lm.set_repeat_count(LV_ANIM_REPEAT_INFINITE)
    lv.anim_t.start(a_lm)

    gauge = lv.gauge(parent, None)
    gauge.set_drag_parent(True)
    gauge.set_size(meter_size, meter_size)
    gauge.add_style(lv.gauge.PART.MAIN, style_box)
    gauge.set_style_local_value_str(lv.gauge.PART.MAIN, lv.STATE.DEFAULT,
                                    "Gauge")

    label = lv.label(gauge, label)
    label.align(gauge, lv.ALIGN.CENTER, 0, grid_w_meter // 3)

    a_ga = lv.anim_t()
    a_ga.init()
    a_ga.set_custom_exec_cb(lambda a, val: linemeter_anim(a, lmeter, val))
    a_ga.set_values(0, 100)
    a_ga.set_time(4000)
    a_ga.set_playback_time(1000)
    a_ga.set_repeat_count(LV_ANIM_REPEAT_INFINITE)
    a_ga.set_custom_exec_cb(lambda a, val: gauge_anim(a, gauge, val))
    lv.anim_t.start(a_ga)

    arc = lv.arc(parent, None)
    arc.set_drag_parent(True)
    arc.set_bg_angles(0, 360)
    arc.set_rotation(270)
    arc.set_angles(0, 0)
    arc.set_size(meter_size, meter_size)
    arc.add_style(lv.arc.PART.BG, style_box)
    arc.set_style_local_value_str(lv.arc.PART.BG, lv.STATE.DEFAULT, "Arc")

    label = lv.label(arc)
    label.align(arc, lv.ALIGN.CENTER, 0, 0)

    a_arc = lv.anim_t()
    a_arc.init()
    a_arc.set_custom_exec_cb(lambda a_arc, val: anim_phase1(a_arc, arc, val))
    a_arc.set_values(0, 360)
    a_arc.set_ready_cb(lambda a: arc_phase1_ready_cb(a, arc))
    # a_arc.set_repeat_count(LV_ANIM_REPEAT_INFINITE)
    a_arc.set_time(1000)
    lv.anim_t.start(a_arc)

    # Create a bar and use the backgrounds value style property to display the current value
    bar_h = lv.cont(parent, None)
    bar_h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT)
    bar_h.add_style(lv.cont.PART.MAIN, style_box)
    bar_h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Bar")

    if disp_size <= lv.DISP_SIZE.SMALL:
        bar_h.set_width(lv.page_get_width_grid(page, 1, 1))
    elif disp_size <= lv.DISP_SIZE.MEDIUM:
        bar_h.set_width(lv.page.get_width_grid(page, 2, 1))
    else:
        bar_h.set_width(lv.page.get_width_grid(parent, 3, 2))

    bar = lv.bar(bar_h, None)
    bar.set_width(lv.cont.get_width_fit(bar_h))
    bar.set_style_local_value_font(lv.bar.PART.BG, lv.STATE.DEFAULT,
                                   lv.theme_get_font_small())
    bar.set_style_local_value_align(lv.bar.PART.BG, lv.STATE.DEFAULT,
                                    lv.ALIGN.OUT_BOTTOM_MID)
    bar.set_style_local_value_ofs_y(lv.bar.PART.BG, lv.STATE.DEFAULT,
                                    LV_DPI // 20)
    bar.set_style_local_margin_bottom(lv.bar.PART.BG, lv.STATE.DEFAULT,
                                      LV_DPI // 7)
    bar.align(None, lv.ALIGN.CENTER, 0, 0)
    bar.set_value(30, lv.ANIM.OFF)

    led_h = lv.cont(parent, None)
    led_h.set_layout(lv.LAYOUT.PRETTY_MID)
    if disp_size <= lv.DISP_SIZE.SMALL:
        led_h.set_width(lv.page.get_width_grid(page, 1, 1))
    elif disp_size <= lv.DISP_SIZE.MEDIUM:
        led_h.set_width(lv.page.get_width_grid(page, 2, 1))
    else:
        led_h.set_width(lv.page.get_width_grid(page, 3, 1))

    led_h.set_height(lv.obj.get_height(lv.obj.__cast__(bar_h)))
    led_h.add_style(lv.cont.PART.MAIN, style_box)
    led_h.set_drag_parent(True)
    led_h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT,
                                    "LEDs")

    led = lv.led(led_h, None)
    led_size = lv.obj.get_height_fit(lv.obj.__cast__(led_h))
    led.set_size(led_size, led_size)
    led.off()

    led = lv.led(led_h, led)
    led.set_bright((LV_LED_BRIGHT_MAX - LV_LED_BRIGHT_MIN) // 2 +
                   LV_LED_BRIGHT_MIN)

    led = lv.led(led_h, led)
    led.on()

    if disp_size == lv.DISP_SIZE.MEDIUM:
        led_h.add_protect(lv.PROTECT.POS)
        led_h.align(
            bar_h, lv.ALIGN.OUT_BOTTOM_MID, 0,
            lv.obj.get_style_margin_top(lv.obj.__cast__(led_h),
                                        lv.obj.PART.MAIN) +
            lv.obj.get_style_pad_inner(parent, lv.page.PART.SCROLLABLE))

    task = lv.task_create_basic()
    task.set_cb(lambda task: bar_anim(task, bar))
    task.set_period(100)
    task.set_prio(lv.TASK_PRIO.LOWEST)
Ejemplo n.º 21
0
def controls_create(parent):
    lv.page.set_scrl_layout(lv.page.__cast__(parent), lv.LAYOUT.PRETTY_TOP)
    if LV_DEMO_WIDGETS_SLIDESHOW == 0:
        btns = ["Cancel", "Ok", ""]
        m = lv.msgbox(lv.scr_act(), None)
        m.add_btns(btns)
        btnm = lv.btnmatrix.__cast__(m.get_btnmatrix())
        # print("type(btnm): ",type(btnm))
        btnm.set_btn_ctrl(1, lv.btnmatrix.CTRL.CHECK_STATE)

    h = lv.cont(parent, None)
    h.set_layout(lv.LAYOUT.PRETTY_MID)
    h.add_style(lv.cont.PART.MAIN, style_box)
    h.set_drag_parent(True)

    h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Basics")

    disp_size = display.get_size_category()
    if disp_size <= lv.DISP_SIZE.SMALL:
        grid_w = lv.page.get_width_grid(lv.page.__cast__(parent), 1, 1)
        # print("grid_w: ",grid_w)
    else:
        grid_w = lv.page.get_width_grid(lv.page.__cast__(parent), 2, 1)
        # print("grid_w: ",grid_w)

    h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT)
    h.set_width(grid_w)
    btn = lv.btn(h, None)
    btn.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT)
    if disp_size <= lv.DISP_SIZE.SMALL:
        button_width = h.get_width_grid(1, 1)
    else:
        button_width = h.get_width_grid(2, 1)
    # print("button_width: %d"%button_width)

    btn.set_width(button_width)
    label = lv.label(btn, None)
    label.set_text("Button")

    btn = lv.btn(h, btn)
    btn.toggle()
    label = lv.label(btn, None)
    label.set_text("Button")

    lv.switch(h, None)

    lv.checkbox(h, None)

    fit_w = h.get_width_fit()

    slider = lv.slider(h, None)
    slider.set_value(40, lv.ANIM.OFF)
    slider.set_event_cb(slider_event_cb)
    slider.set_width_margin(fit_w)

    # Use the knobs style value the display the current value in focused state
    slider.set_style_local_margin_top(lv.slider.PART.BG, lv.STATE.DEFAULT,
                                      LV_DPX(25))
    slider.set_style_local_value_font(lv.slider.PART.KNOB, lv.STATE.DEFAULT,
                                      lv.theme_get_font_small())
    slider.set_style_local_value_ofs_y(lv.slider.PART.KNOB, lv.STATE.FOCUSED,
                                       -LV_DPX(25))
    slider.set_style_local_value_opa(lv.slider.PART.KNOB, lv.STATE.DEFAULT,
                                     lv.OPA.TRANSP)
    slider.set_style_local_value_opa(lv.slider.PART.KNOB, lv.STATE.FOCUSED,
                                     lv.OPA.COVER)
    slider.set_style_local_transition_time(lv.slider.PART.KNOB,
                                           lv.STATE.DEFAULT, 300)
    slider.set_style_local_transition_prop_5(lv.slider.PART.KNOB,
                                             lv.STATE.DEFAULT,
                                             lv.STYLE.VALUE_OFS_Y)
    slider.set_style_local_transition_prop_6(lv.slider.PART.KNOB,
                                             lv.STATE.DEFAULT,
                                             lv.STYLE.VALUE_OPA)

    slider = lv.slider(h, None)
    slider.set_type(lv.slider.TYPE.RANGE)
    slider.set_value(70, lv.ANIM.OFF)
    slider.set_left_value(30, lv.ANIM.OFF)
    slider.set_style_local_value_ofs_y(lv.slider.PART.INDIC, lv.STATE.DEFAULT,
                                       -LV_DPX(25))
    slider.set_style_local_value_font(lv.slider.PART.INDIC, lv.STATE.DEFAULT,
                                      lv.theme_get_font_small())
    slider.set_style_local_value_opa(lv.slider.PART.INDIC, lv.STATE.DEFAULT,
                                     lv.OPA.COVER)
    slider.set_event_cb(slider_event_cb)
    lv.event_send(slider, lv.EVENT.VALUE_CHANGED, None)  # To refresh the text
    if slider.get_width() > fit_w:
        slider.set_width(fit_w)

    h = lv.cont(parent, h)
    h.set_fit(lv.FIT.NONE)
    h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT,
                                "Text input")

    ta = lv.textarea(h, None)
    lv.cont.set_fit2(h, lv.FIT.PARENT, lv.FIT.NONE)
    ta.set_text("")
    ta.set_placeholder_text("E-mail address")
    ta.set_one_line(True)
    ta.set_cursor_hidden(True)
    #lv_obj_set_event_cb(ta, ta_event_cb);

    ta = lv.textarea(h, ta)
    ta.set_pwd_mode(True)
    ta.set_placeholder_text("Password")

    ta = lv.textarea(h, None)
    lv.cont.set_fit2(h, lv.FIT.PARENT, lv.FIT.NONE)
    ta.set_text("")
    ta.set_placeholder_text("Message")
    ta.set_cursor_hidden(True)
    #lv_obj_set_event_cb(ta, ta_event_cb);
    lv.cont.set_fit4(h, lv.FIT.PARENT, lv.FIT.PARENT, lv.FIT.NONE,
                     lv.FIT.PARENT)
    def __init__(self, parent, x_pos, y_pos, gui_ctrl):
        super().__init__(parent)
        self._gui_ctrl = gui_ctrl

        btn_style = self.get_style(lv.tabview.STYLE.BTN_REL)
        btn_style_or = lv.style_t()
        lv.style_copy(btn_style_or, btn_style)
        btn_style.body.padding.left = (parent.get_width() - x_pos) // 5 // 2
        btn_style.body.padding.right = (parent.get_width() - x_pos) // 5 // 2
        self.set_style(lv.tabview.STYLE.BTN_REL, btn_style)

        self.set_size(parent.get_width() - x_pos, parent.get_height() - y_pos)
        self.set_pos(x_pos, y_pos)

        self.set_anim_time(0)
        self.set_sliding(False)
        self.set_btns_pos(lv.tabview.BTNS_POS.LEFT)

        self.set_event_cb(self._tab_change_handler)

        self._t_start = self.add_tab("New Session")
        self._t_cal = self.add_tab("Calibration")
        self._t_other = self.add_tab("Other")
        self._t_done = self.add_tab("Done")

        self.set_tab_act(3, lv.ANIM.OFF)

        # Session screen
        # Stat new session
        self._new_sess = lv.cont(self._t_start)
        self._new_sess.set_fit(lv.FIT.FLOOD)
        self._new_sess.set_layout(lv.LAYOUT.PRETTY)

        self._new_session_label = RealignLabel(
            self._new_sess, "Set info, and start a new measuring session!",
            False)

        self._material_sel = lv.roller(self._new_sess)
        self._material_sel.set_options(
            "\n".join(material for material in MATERIAL_TYPE),
            lv.roller.MODE.INIFINITE)

        self._thickness_sel = lv.roller(self._new_sess)
        self._thickness_sel.set_options(
            "\n".join(thickness for thickness in THICKNESS_TYPE),
            lv.roller.MODE.INIFINITE)

        self._start_btn = TextBtn(self._new_sess, "Start", self._new_sess_cb)
        self._start_btn.set_style(lv.btn.STYLE.REL, btn_style_or)

        # Measuring Screen
        self._session = lv.cont(self._t_start)
        self._session.set_fit(lv.FIT.FLOOD)
        self._session.set_layout(lv.LAYOUT.PRETTY)

        self._session_label = RealignLabel(self._session, "\n\n\n", True)

        self._start_measure_btn = TextBtn(self._session, "New Panel",
                                          self._start_measure_cb)
        self._start_measure_btn.set_style(lv.btn.STYLE.REL, btn_style_or)

        self._done_measure_btn = TextBtn(self._session, "Finish",
                                         self._done_measure_cb)
        self._done_measure_btn.set_style(lv.btn.STYLE.REL, btn_style_or)

        self._re_measure_btn = TextBtn(self._session, "Re-measure",
                                       self._re_measure_cb)
        self._re_measure_btn.set_style(lv.btn.STYLE.REL, btn_style_or)

        self._chart = lv.chart(self._session)
        self._chart.set_height(90)
        self._chart.set_point_count(700)
        self._chart.set_range(11000, 13000)
        self._ser1 = self._chart.add_series(lv.color_hex(0x0000b3))
        self._ser2 = self._chart.add_series(lv.color_hex(0xe60000))
        self._ser3 = self._chart.add_series(lv.color_hex(0x00e600))
        self._ser4 = self._chart.add_series(lv.color_hex(0xffffff))

        self._session.set_hidden(True)

        lv.page.glue_obj(self._new_sess, True)
        lv.page.glue_obj(self._session, True)

        self._preload_cont = lv.cont(self._t_start)
        self._preload_cont.set_fit(lv.FIT.FLOOD)
        self._preload_cont.set_layout(lv.LAYOUT.CENTER)
        self._preload = lv.preload(self._preload_cont)

        self._preload_cont.set_hidden(True)

        # Calibration Screen
        self._cal_label = RealignLabel(self._t_cal, "Output: \n", False)

        self._cal_num_input = NumTextArea(self._t_cal, self.ta_test)
        self._cal_num_input.set_auto_realign(True)
        self._cal_num_input.align(self._cal_label, lv.ALIGN.OUT_BOTTOM_LEFT, 0,
                                  0)

        self._set_cal_1 = TextBtn(self._t_cal, "Set Amp 1", self._set_amp_1_cb)
        self._set_cal_1.set_style(lv.btn.STYLE.REL, btn_style_or)
        self._set_cal_1.align(self._cal_num_input, lv.ALIGN.OUT_RIGHT_MID, 0,
                              0)

        self._set_cal_2 = TextBtn(self._t_cal, "Set Amp 2", self._set_amp_2_cb)
        self._set_cal_2.set_style(lv.btn.STYLE.REL, btn_style_or)
        self._set_cal_2.align(self._set_cal_1, lv.ALIGN.OUT_RIGHT_MID, 0, 0)

        self._kb = lv.kb(self._t_cal)
        self._kb.set_map(["1", "2", "3","\n","4","5", "6",\
                          "\n","7", "8", "9","\n","0",".","Bksp",""])

        self._kb.set_height(180)
        self._kb.set_y(85)
        self._kb.set_ta(self._cal_num_input)

        # Laser Off Screen
        self._text = RealignLabel(self._t_done, "Laser Off", False)

        # Other Screen
        self._cal = lv.calendar(self._t_other)
        return
Ejemplo n.º 23
0
    def __init__(self,
                 x=None,
                 y=None,
                 min_value=0,
                 max_value=100,
                 value=50,
                 divisions=5,
                 legend=None,
                 label_text=None,
                 value_text_format=None,
                 bar_color=lv_colors.BLUE,
                 legend_color=lv_colors.YELLOW,
                 value_color=lv_colors.WHITE,
                 bg_color=lv_colors.BLACK):

        self.x = x
        self.y = y
        self.min_value = min_value
        self.max_value = max_value
        self.value = value
        self.width = 40
        self.height = 104
        self.label_text = label_text
        self.value_text_format = value_text_format
        self.bg_color = bg_color
        self.bar_color = bar_color
        self.value_color = value_color
        self.legend_color = legend_color
        self.base = 102
        if legend:
            self.divisions = len(legend) - 1
        else:
            self.divisions = divisions

        scr_style = lv.style_t()
        scr_style.set_bg_color(lv.STATE.DEFAULT, self.bg_color)
        lv.scr_act().add_style(lv.obj.PART.MAIN, scr_style)

        # create a container

        self.container = lv.cont(lv.scr_act(), None)
        self.container.set_fit(lv.FIT.TIGHT)
        self.container.align(None, lv.ALIGN.CENTER, 0, 0)
        if self.x:
            self.container.set_x(self.x)
        if self.y:
            self.container.set_y(self.y)
        self.container.add_style(lv.obj.PART.MAIN, scr_style)

        cbuf = bytearray(self.width * self.height * 4)

        # create a canvas
        self.canvas = lv.canvas(self.container, None)
        self.canvas.set_buffer(cbuf, self.width, self.height,
                               lv.img.CF.TRUE_COLOR)
        self.canvas.align(self.container, lv.ALIGN.CENTER, 0, -50)

        text_style = lv.style_t()
        text_style.init()
        text_style.set_text_color(lv.STATE.DEFAULT, self.legend_color)

        if self.value_text_format:
            value_text_style = lv.style_t()
            value_text_style.init()
            value_text_style.set_text_color(lv.STATE.DEFAULT, self.value_color)
            self.value_label = lv.label(self.container)
            self.value_label.add_style(lv.label.PART.MAIN, value_text_style)
            value_text = self.value_text_format.format(self.value)
            self.value_label.set_text(value_text)

        if self.label_text:
            self.label = lv.label(self.container)
            self.label.set_text(label_text)
            self.label.align(self.canvas, lv.ALIGN.OUT_BOTTOM_MID, 0, 10)

            self.label.add_style(lv.label.PART.MAIN, text_style)
            if self.value_text_format:
                self.value_label.align(self.label, lv.ALIGN.OUT_BOTTOM_MID, 0,
                                       0)
        else:
            self.value_label.align(self.canvas, lv.ALIGN.OUT_BOTTOM_MID, 0, 10)

        #bar = lv_bar(container)

        p1 = lv.point_t()
        p2 = lv.point_t()
        point_array = [p1, p2]

        # style for horizontal lines
        self.hline_dsc = lv.draw_line_dsc_t()
        self.hline_dsc.init()
        self.hline_dsc.color = self.legend_color
        self.hline_dsc.opa = lv.OPA.COVER

        rect_dsc = lv.draw_rect_dsc_t()
        rect_dsc.init()
        rect_dsc.bg_opa = lv.OPA.TRANSP
        rect_dsc.border_color = self.legend_color
        rect_dsc.bg_color = lv_colors.BLACK
        rect_dsc.border_width = 1

        # draw the outline, tock marks, legend and value text

        self.canvas.draw_rect(0, 0, self.width, self.height, rect_dsc)
        if self.divisions > 0:
            dy = (self.height - 4) / self.divisions  # Tick marks
            # print("dy: ",dy)
            for tick in range(self.divisions + 1):
                ypos = int(dy * tick)
                p1.x = self.width // 5
                p1.y = ypos + 2
                p2.x = p1.x + self.width - 2 * self.width // 5
                p2.y = p1.y
                self.canvas.draw_line(point_array, 2, self.hline_dsc)

                # print("tick: %d, pos: %d"%(tick,p1.y))

                if legend:
                    label = lv.label(self.container)
                    label.align(self.canvas, lv.ALIGN.OUT_RIGHT_TOP, 5,
                                ypos - 5)
                    label.set_text(legend[self.divisions - tick])
                    label.add_style(lv.label.PART.MAIN, text_style)
        self.base = p1.y

        # draw the value rectangle
        # print("max: ",self.max_value)
        value_y = round(
            (self.height - 4) / (self.max_value - self.min_value) * self.value)
        rect_dsc.bg_color = self.bar_color
        rect_dsc.bg_opa = lv.OPA.COVER
        rect_dsc.border_width = 0
        # print("Pos of last tick: ",p1.y)
        # print("bar height: ",value_y)
        self.canvas.draw_rect(self.width // 5 + 5, self.base - value_y,
                              2 * self.width // 5, value_y, rect_dsc)
Ejemplo n.º 24
0
    def main_page(self, tile_num):
        # create the GUI
        self.weather_app_tile = self.mainbar.get_tile_obj(tile_num)
        weather_style = lv.style_t()
        weather_style.copy(self.mainbar.get_style())

        weather_cont = lv.obj(self.weather_app_tile, None)
        weather_cont.set_size(lv.scr_act().get_disp().driver.hor_res, 30)
        weather_cont.add_style(lv.cont.PART.MAIN, weather_style)

        # create date label and left right buttons
        btn_style = lv.style_t()
        btn_style.copy(weather_style)
        btn_style.set_radius(lv.btn.STATE.RELEASED, 2)
        self.left_button = lv.btn(weather_cont, None)
        self.left_button.set_size(25, 25)
        self.left_button.add_style(lv.btn.PART.MAIN, btn_style)
        left_label = lv.label(self.left_button, None)
        left_label.set_text(lv.SYMBOL.LEFT)
        self.left_button.align(weather_cont, lv.ALIGN.IN_LEFT_MID, 5, 0)
        self.left_button.set_hidden(True)
        self.left_button.set_event_cb(self.decrement_day)

        self.date_label = lv.label(weather_cont, None)
        self.date_label.set_text(self.date[self.day_index])
        self.date_label.align(weather_cont, lv.ALIGN.CENTER, 0, 0)

        self.right_button = lv.btn(weather_cont, None)
        self.right_button.set_size(25, 25)
        self.right_button.add_style(lv.btn.PART.MAIN, btn_style)
        right_label = lv.label(self.right_button, None)
        right_label.set_text(lv.SYMBOL.RIGHT)
        self.right_button.align(weather_cont, lv.ALIGN.IN_RIGHT_MID, -5, 0)
        self.right_button.set_event_cb(self.increment_day)

        icon_cont_style = lv.style_t()
        icon_cont_style.copy(weather_style)
        icon_cont_style.set_bg_opa(lv.obj.PART.MAIN, lv.OPA.TRANSP)

        icon_cont = lv.cont(self.weather_app_tile, None)
        icon_cont.set_layout(lv.LAYOUT.COLUMN_LEFT)
        icon_cont.add_style(lv.cont.PART.MAIN, icon_cont_style)
        icon_cont.set_fit(lv.FIT.TIGHT)

        self.icon = lv.img(icon_cont, None)
        key_list = list(self.icon_filename.keys())
        self.log.debug(key_list)
        index = key_list.index(self.weather_state_abbr[self.day_index])
        self.log.debug("index of %s: %d" %
                       (self.weather_state_abbr[self.day_index], index))
        self.icon.set_src(self.icon_dsc[index])
        icon_cont.align(weather_cont, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0)
        self.state_label = lv.label(icon_cont, None)
        self.state_label.set_width(100)
        self.state_label.set_text(self.weather_state_name[self.day_index])

        info_cont_style = lv.style_t()
        info_cont_style.copy(weather_style)
        info_cont_style.set_pad_top(lv.STATE.DEFAULT, 6)
        info_cont_style.set_pad_inner(lv.STATE.DEFAULT, 4)

        info_cont = lv.cont(self.weather_app_tile, None)
        info_cont.set_size(lv.scr_act().get_disp().driver.hor_res, 90)
        info_cont.set_layout(lv.LAYOUT.COLUMN_LEFT)
        info_cont.add_style(lv.cont.PART.MAIN, icon_cont_style)
        info_cont.set_fit(lv.FIT.NONE)
        info_cont.align(icon_cont, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0)
        info_cont.add_style(lv.cont.PART.MAIN, info_cont_style)

        self.confidence_label = lv.label(info_cont, None)
        self.confidence_label.set_text("Confidence level: {}%".format(
            self.predic[self.day_index]))
        self.temp_label = lv.label(info_cont, None)
        self.temp_label.set_text(
            "Temp: min: %3.1f°C, max: %3.1f°C" %
            (self.min_temp[self.day_index], self.max_temp[self.day_index]))
        self.humidity_label = lv.label(info_cont, None)
        self.humidity_label.set_text("Humidity: {}%".format(
            self.humid[self.day_index]))
        self.pressure_label = lv.label(info_cont, None)
        self.pressure_label.set_text("Air pressure: %d hPa" %
                                     self.air_pressure[self.day_index])

        info_cont2 = lv.cont(self.weather_app_tile, None)
        # info_cont2.set_size(140,120)
        info_cont2.set_layout(lv.LAYOUT.COLUMN_LEFT)
        info_cont2.add_style(lv.cont.PART.MAIN, icon_cont_style)
        info_cont2.set_fit(lv.FIT.TIGHT)
        info_cont2.align(icon_cont, lv.ALIGN.OUT_RIGHT_TOP, -5, 0)
        info_cont2.add_style(lv.cont.PART.MAIN, info_cont_style)

        self.location_label = lv.label(info_cont2, None)
        self.location_label.set_text("Location: " + self.location)
        self.wind_label = lv.label(info_cont2, None)
        self.wind_label.set_text("Wind:\nspeed: %5.1f kph\ndir: %s" %
                                 (self.wind_speed[self.day_index],
                                  self.wind_direction[self.day_index]))

        exit_btn = lv.imgbtn(self.weather_app_tile, None)
        exit_btn.set_src(lv.btn.STATE.RELEASED,
                         self.mainbar.get_exit_btn_dsc())
        exit_btn.set_src(lv.btn.STATE.PRESSED, self.mainbar.get_exit_btn_dsc())
        exit_btn.set_src(lv.btn.STATE.CHECKED_RELEASED,
                         self.mainbar.get_exit_btn_dsc())
        exit_btn.set_src(lv.btn.STATE.CHECKED_PRESSED,
                         self.mainbar.get_exit_btn_dsc())
        exit_btn.align(self.weather_app_tile, lv.ALIGN.IN_BOTTOM_RIGHT, -10,
                       -10)
        exit_btn.set_event_cb(self.exit_weather_app_event_cb)
Ejemplo n.º 25
0
    def usb_icon_event_cb(self, obj, evt):
        if evt == lv.EVENT.CLICKED:
            self.anim_out_all(lv.scr_act(), 0)

            delay = 200

            back = self.add_back(self.back_to_print_event_cb)
            self.anim_in(back, delay)

            title = self.add_title("PRINTING FROM USB DRIVE")
            self.anim_in(title, delay)

            box_w = self.LV_HOR_RES * 5 // 10
            list = lv.list(lv.scr_act(), None)
            list.set_size(box_w, self.LV_VER_RES // 2)
            list.align(None, lv.ALIGN.IN_TOP_LEFT, self.LV_HOR_RES // 20,
                       self.LV_VER_RES // 5)

            dummy_file_list = [
                "Contract 12.pdf", "Scanned_05_21.pdf", "Photo_132210.jpg",
                "Photo_232141.jpg", "Photo_091640.jpg", "Photo_124019.jpg",
                "Photo_232032.jpg", "Photo_232033.jpg", "Photo_232034.jpg",
                "Monday schedule.pdf", "Email from John.txt", "New file.txt",
                "Untitled.txt", "Untitled (1).txt", "Gallery_40.jpg",
                "Gallery_41.jpg", "Gallery_42.jpg", "Gallery_43.jpg",
                "Gallery_44.jpg"
            ]

            for filename in dummy_file_list:
                btn = lv.btn.__cast__(list.add_btn(lv.SYMBOL.FILE, filename))
                btn.set_checkable(True)
                self.theme.apply(btn, lv.THEME.LIST_BTN)

            dropdown_box = lv.obj(lv.scr_act(), None)
            dropdown_box.set_size(box_w, self.LV_VER_RES // 5)
            dropdown_box.align(list, lv.ALIGN.OUT_BOTTOM_MID, 0,
                               self.LV_HOR_RES // 30)

            dropdown = lv.dropdown(dropdown_box, None)
            dropdown.align(None, lv.ALIGN.IN_LEFT_MID, self.LV_HOR_RES // 60,
                           0)
            dropdown.set_max_height(self.LV_VER_RES // 3)
            dropdown.set_options_static("Best\nNormal\nDraft")
            dropdown.set_width((box_w - 3 * self.LV_HOR_RES // 60) // 2)
            dropdown.set_ext_click_area(5, 5, 5, 5)
            self.theme.apply(dropdown, lv.THEME.DROPDOWN)

            dropdown = lv.dropdown(dropdown_box, dropdown)
            dropdown.align(None, lv.ALIGN.IN_RIGHT_MID, -self.LV_HOR_RES // 60,
                           0)
            # dropdown.set_options_static("100 DPI\n200 DPI\n300 DPI\n400 DPI\n500 DPI\n1500 DPI")
            dropdown.set_options_static("\n".join([
                "100 DPI", "200 DPI", "300 DPI", "400 DPI", "500 DPI",
                "1500 DPI"
            ]))
            self.theme.apply(dropdown, lv.THEME.DROPDOWN)

            box_w = 320 - 40
            settings_box = lv.obj(lv.scr_act(), None)
            settings_box.set_size(box_w, self.LV_VER_RES // 2)
            settings_box.align(list, lv.ALIGN.OUT_RIGHT_TOP,
                               self.LV_HOR_RES // 20, 0)

            self.print_cnt = 1
            numbox = lv.cont(settings_box, None)
            self.theme.apply(numbox, LV_DEMO_PRINTER_THEME_BOX_BORDER)
            numbox.set_size(self.LV_HOR_RES // 7, self.LV_HOR_RES // 13)
            numbox.align(settings_box, lv.ALIGN.IN_TOP_MID, 0,
                         self.LV_VER_RES // 10)
            numbox.set_style_local_value_str(lv.obj.PART.MAIN,
                                             lv.STATE.DEFAULT, "Copies")
            numbox.set_style_local_value_align(lv.obj.PART.MAIN,
                                               lv.STATE.DEFAULT,
                                               lv.ALIGN.OUT_TOP_MID)
            numbox.set_style_local_value_ofs_y(lv.obj.PART.MAIN,
                                               lv.STATE.DEFAULT,
                                               -self.LV_VER_RES // 50)
            numbox.set_style_local_value_font(lv.obj.PART.MAIN,
                                              lv.STATE.DEFAULT,
                                              self.theme.get_font_subtitle())
            numbox.set_layout(lv.LAYOUT.CENTER)

            self.print_cnt_label = lv.label(numbox, None)
            self.print_cnt_label.set_text("1")
            self.print_cnt_label.set_style_local_text_font(
                lv.label.PART.MAIN, lv.STATE.DEFAULT,
                self.theme.get_font_subtitle())

            btn = lv.btn(settings_box, None)
            btn.set_size(self.LV_HOR_RES // 13, self.LV_HOR_RES // 13)
            btn.align(numbox, lv.ALIGN.OUT_LEFT_MID, -self.LV_VER_RES // 60, 0)
            btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                          lv.SYMBOL.DOWN)
            btn.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           self.theme.get_font_subtitle())
            btn.set_event_cb(self.print_cnt_btn_event_cb)
            btn.set_ext_click_area(10, 10, 10, 10)
            self.theme.apply(btn, lv.THEME.BTN)

            sw = lv.switch(settings_box, None)
            sw.set_size(self.LV_HOR_RES // 10, self.LV_VER_RES // 12)
            sw.align(btn, lv.ALIGN.OUT_BOTTOM_LEFT, self.LV_HOR_RES // 50,
                     self.LV_VER_RES // 7)
            sw.set_style_local_value_ofs_y(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           -self.LV_VER_RES // 50)
            sw.set_style_local_value_align(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           lv.ALIGN.OUT_TOP_MID)
            sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                         "Color")
            sw.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                          self.theme.get_font_subtitle())
            self.theme.apply(sw, lv.THEME.SWITCH)

            btn = lv.btn(settings_box, btn)
            btn.align(numbox, lv.ALIGN.OUT_RIGHT_MID, self.LV_VER_RES // 60, 0)
            btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                          lv.SYMBOL.UP)
            btn.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           self.theme.get_font_subtitle())
            self.theme.apply(btn, lv.THEME.BTN)
            btn.set_event_cb(self.print_cnt_btn_event_cb)

            sw = lv.switch(settings_box, sw)
            sw.align(btn, lv.ALIGN.OUT_BOTTOM_RIGHT, -self.LV_HOR_RES // 50,
                     self.LV_VER_RES // 7)
            sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                         "Vertical")
            self.theme.apply(sw, lv.THEME.SWITCH)

            print_btn = lv.btn(lv.scr_act(), None)
            self.theme.apply(print_btn, LV_DEMO_PRINTER_THEME_BTN_CIRCLE)
            print_btn.set_size(box_w, 60)

            btn_ofs_y = (dropdown_box.get_height() -
                         print_btn.get_height()) // 2
            print_btn.align(settings_box, lv.ALIGN.OUT_BOTTOM_MID, 0,
                            self.LV_HOR_RES // 30 + btn_ofs_y)
            print_btn.set_style_local_value_str(lv.obj.PART.MAIN,
                                                lv.STATE.DEFAULT, "PRINT")
            print_btn.set_style_local_value_font(
                lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                self.theme.get_font_subtitle())
            print_btn.set_style_local_bg_color(lv.obj.PART.MAIN,
                                               lv.STATE.DEFAULT,
                                               LV_DEMO_PRINTER_GREEN)
            print_btn.set_style_local_bg_color(
                lv.obj.PART.MAIN, lv.STATE.PRESSED,
                LV_DEMO_PRINTER_GREEN.color_darken(lv.OPA._20))
            print_btn.set_event_cb(self.print_start_event_cb)

            delay += self.LV_DEMO_PRINTER_ANIM_DELAY
            self.anim_in(list, delay)

            delay += self.LV_DEMO_PRINTER_ANIM_DELAY
            self.anim_in(settings_box, delay)

            delay += self.LV_DEMO_PRINTER_ANIM_DELAY
            self.anim_in(dropdown_box, delay)

            delay += self.LV_DEMO_PRINTER_ANIM_DELAY
            self.anim_in(print_btn, delay)

            self.anim_bg(0, LV_DEMO_PRINTER_BLUE,
                         self.LV_DEMO_PRINTER_BG_NORMAL)
Ejemplo n.º 26
0
    def home_open(self, delay):

        self.bg_top.set_style_local_bg_opa(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           lv.OPA.COVER)
        self.bg_top.set_style_local_bg_color(lv.obj.PART.MAIN,
                                             lv.STATE.DEFAULT,
                                             LV_DEMO_PRINTER_BLUE)
        self.bg_top.set_y(self.LV_DEMO_PRINTER_BG_NORMAL)

        self.cont = lv.cont(lv.scr_act(), None)
        self.cont.set_size(350, 80)
        self.cont.clean_style_list(lv.cont.PART.MAIN)
        self.cont.align(None, lv.ALIGN.IN_TOP_LEFT, 60, 0)

        icon = lv.img(self.cont, None)
        icon.set_src(self.icon_wifi_dsc)
        icon.align(None, lv.ALIGN.IN_TOP_LEFT, 20, 45)
        self.anim_in(icon, delay)

        icon = lv.img(self.cont, None)
        icon.set_src(self.icon_tel_dsc)
        icon.align(None, lv.ALIGN.IN_TOP_LEFT, 110, 45)
        self.anim_in(icon, delay)

        icon = lv.img(self.cont, None)
        icon.set_src(self.icon_eco_dsc)
        icon.align(None, lv.ALIGN.IN_TOP_LEFT, 200, 45)
        self.anim_in(icon, delay)

        icon = lv.img(self.cont, None)
        icon.set_src(self.icon_pc_dsc)
        icon.align(None, lv.ALIGN.IN_TOP_LEFT, 290, 45)
        self.anim_in(icon, delay)

        title = self.add_title("23 February 2021 20:13")
        title.align(None, lv.ALIGN.IN_TOP_RIGHT, -60,
                    LV_DEMO_PRINTER_TITLE_PAD)

        delay += self.LV_DEMO_PRINTER_ANIM_DELAY
        self.anim_in(title, delay)

        box_w = 720
        box = lv.obj(lv.scr_act(), None)
        box.set_size(box_w, 260)
        self.theme.apply(box, lv.THEME.CONT)

        box.align(None, lv.ALIGN.IN_TOP_MID, 0, 100)

        delay += self.LV_DEMO_PRINTER_ANIM_DELAY
        self.anim_in(box, delay)

        icon = self.add_icon(box, self.img_btn_bg_1_dsc, self.img_copy_dsc,
                             "COPY")
        icon.align(None, lv.ALIGN.IN_LEFT_MID, 1 * (box_w - 20) // 8 - 80, 0)
        icon.set_event_cb(self.copy_open_icon_event_cb)
        icon.fade_in(self.LV_DEMO_PRINTER_ANIM_TIME * 2,
                     delay + self.LV_DEMO_PRINTER_ANIM_TIME + 50)

        icon = self.add_icon(box, self.img_btn_bg_2_dsc, self.img_scan_dsc,
                             "SCAN")
        icon.align(None, lv.ALIGN.IN_LEFT_MID, 3 * (box_w - 20) // 8 - 80, 0)
        icon.fade_in(self.LV_DEMO_PRINTER_ANIM_TIME * 2,
                     delay + self.LV_DEMO_PRINTER_ANIM_TIME + 50)
        icon.set_event_cb(self.scan_open_icon_event_cb)

        icon = self.add_icon(box, self.img_btn_bg_3_dsc, self.img_print_dsc,
                             "PRINT")
        icon.align(None, lv.ALIGN.IN_LEFT_MID, 5 * (box_w - 20) // 8 - 80, 0)
        icon.fade_in(self.LV_DEMO_PRINTER_ANIM_TIME * 2,
                     delay + self.LV_DEMO_PRINTER_ANIM_TIME + 50)
        icon.set_event_cb(self.print_open_event_cb)

        icon = self.add_icon(box, self.img_btn_bg_4_dsc, self.img_setup_dsc,
                             "SETUP")
        icon.align(None, lv.ALIGN.IN_LEFT_MID, 7 * (box_w - 20) // 8 - 80, 0)
        icon.fade_in(self.LV_DEMO_PRINTER_ANIM_TIME * 2,
                     delay + self.LV_DEMO_PRINTER_ANIM_TIME + 50)
        icon.set_event_cb(self.setup_icon_event_cb)

        box = lv.obj(lv.scr_act(), None)
        box.set_size(500, 80)
        box.align(None, lv.ALIGN.IN_BOTTOM_LEFT, self.LV_HOR_RES // 20,
                  -self.LV_HOR_RES // 40)
        label = lv.label(box, None)
        label.set_text("What do you want to do today?")
        self.theme.apply(label, lv.THEME.LABEL)
        label.align(box, lv.ALIGN.CENTER, 0, 0)

        delay += self.LV_DEMO_PRINTER_ANIM_DELAY
        self.anim_in(box, delay)

        box = lv.obj(lv.scr_act(), None)
        box_w = 200
        box.set_size(box_w, 80)
        box.align(None, lv.ALIGN.IN_BOTTOM_RIGHT, -self.LV_HOR_RES // 20,
                  -self.LV_HOR_RES // 40)

        bar = lv.bar(box, None)
        bar.set_style_local_bg_color(lv.bar.PART.INDIC, lv.STATE.DEFAULT,
                                     lv.color_hex(0x01d3d4))
        bar.set_size(25, 50)
        bar.align(None, lv.ALIGN.IN_LEFT_MID, 1 * (box_w - 20) // 8 + 10, 0)
        bar.set_value(60, lv.ANIM.ON)

        bar = lv.bar(box, None)
        bar.set_style_local_bg_color(lv.bar.PART.INDIC, lv.STATE.DEFAULT,
                                     lv.color_hex(0xe600e6))
        bar.set_size(25, 50)
        bar.align(None, lv.ALIGN.IN_LEFT_MID, 3 * (box_w - 20) // 8 + 10, 0)
        bar.set_value(30, lv.ANIM.ON)

        bar = lv.bar(box, None)
        bar.set_style_local_bg_color(lv.bar.PART.INDIC, lv.STATE.DEFAULT,
                                     lv.color_hex(0xefef01))
        bar.set_size(25, 50)
        bar.align(None, lv.ALIGN.IN_LEFT_MID, 5 * (box_w - 20) // 8 + 10, 0)
        bar.set_value(80, lv.ANIM.ON)

        bar = lv.bar(box, None)
        bar.set_style_local_bg_color(lv.bar.PART.INDIC, lv.STATE.DEFAULT,
                                     lv.color_hex(0x1d1d25))
        bar.set_size(25, 50)
        bar.align(None, lv.ALIGN.IN_LEFT_MID, 7 * (box_w - 20) // 8 + 10, 0)
        bar.set_value(20, lv.ANIM.ON)
Ejemplo n.º 27
0
# Set a very visible color for the screen to clearly see what happens
lv.scr_act().set_style_local_bg_color(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                      lv.color_hex3(0xf33))

om = lv.objmask(lv.scr_act(), None)
om.set_size(200, 200)
om.align(None, lv.ALIGN.CENTER, 0, 0)
label = lv.label(om, None)
label.set_long_mode(lv.label.LONG.BREAK)
label.set_align(lv.label.ALIGN.CENTER)
label.set_width(180)
label.set_text("This label will be masked out. See how it works.")
label.align(None, lv.ALIGN.IN_TOP_MID, 0, 20)

cont = lv.cont(om, None)
cont.set_size(180, 100)
cont.set_drag(True)
cont.align(None, lv.ALIGN.IN_BOTTOM_MID, 0, -10)

btn = lv.btn(cont, None)
btn.align(None, lv.ALIGN.CENTER, 0, 0)
btn.set_style_local_value_str(lv.btn.PART.MAIN, lv.STATE.DEFAULT, "Button")

lv.refr_now(None)
t = lv.tick_get()
while lv.tick_elaps(t) < 1000:
    pass

a = lv.area_t()
r1 = lv.draw_mask_radius_param_t()
Ejemplo n.º 28
0
# m7() # dashboard

#btn_event

def btn_event(obj, event):

    if obj == home_button and event == lv.EVENT.CLICKED:
        m5()

#gui code

scr = lv.obj()
lv.scr_load(scr)

cont = lv.cont(scr)
cont.align(scr, lv.ALIGN.IN_TOP_MID, 0, 0)
cont.set_style_local_radius(0, 0, 0)
cont.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT)

home_button = lv.btn(cont)
home_button.align(cont, lv.ALIGN.IN_LEFT_MID,0,10)
home_button.set_fit(lv.FIT.TIGHT)


lbl_home = lv.label(home_button)
lbl_home.set_text(lv.SYMBOL.HOME)
lbl_home.set_event_cb(btn_event)

lbl_header = lv.label(cont)
lbl_header.set_text("Dashboard")
Ejemplo n.º 29
0
    def scan_next_event_cb(self, obj, evt):
        LV_IMG_ZOOM_NONE = 250
        if evt == lv.EVENT.CLICKED:
            self.anim_out_all(lv.scr_act(), 0)

            delay = 400

            back = self.add_back(self.back_to_home_event_cb)
            self.anim_in(back, delay)

            title = self.add_title("ADJUST IMAGE")
            self.anim_in(title, delay)

            box_w = 400
            self.scan_img.set_pivot(0, 0)
            self.scan_img.set_antialias(False)

            a = lv.anim_t()
            a.init()
            a.set_var(self.scan_img)
            a.set_custom_exec_cb(
                lambda a, val: self.set_zoom(self.scan_img, val))
            a.set_values(LV_IMG_ZOOM_NONE, 190)
            a.set_time(200)
            a.set_delay(200)
            lv.anim_t.start(a)

            # self.scan_img = None    # To allow anim out

            dropdown_box = lv.obj(lv.scr_act(), None)
            dropdown_box.set_size(box_w, self.LV_VER_RES // 5)
            dropdown_box.align(None, lv.ALIGN.IN_BOTTOM_LEFT, 40, -20)

            dropdown = lv.dropdown(dropdown_box, None)
            dropdown.align(None, lv.ALIGN.IN_LEFT_MID, self.LV_HOR_RES // 60,
                           0)
            dropdown.set_max_height(self.LV_VER_RES // 3)
            dropdown.set_options_static("Best\nNormal\nDraft")
            dropdown.set_width((box_w - 3 * self.LV_HOR_RES // 60) // 2)
            self.theme.apply(dropdown, lv.THEME.DROPDOWN)

            dropdown = lv.dropdown(dropdown_box, dropdown)
            dropdown.align(None, lv.ALIGN.IN_RIGHT_MID, -self.LV_HOR_RES // 60,
                           0)
            dropdown.set_options_static(
                "72 DPI\n96 DPI\n150 DPI\n300 DPI\n600 DPI\n900 DPI\n1200 DPI")
            self.theme.apply(dropdown, lv.THEME.DROPDOWN)

            box_w = 320 - 40
            settings_box = lv.obj(lv.scr_act(), None)
            settings_box.set_size(box_w, self.LV_VER_RES // 2)
            settings_box.align(None, lv.ALIGN.IN_TOP_RIGHT, -40, 100)

            numbox = lv.cont(settings_box, None)
            self.theme.apply(numbox, LV_DEMO_PRINTER_THEME_BOX_BORDER)
            numbox.set_size(self.LV_HOR_RES // 7, self.LV_HOR_RES // 13)
            numbox.align(settings_box, lv.ALIGN.IN_TOP_MID, 0,
                         self.LV_VER_RES // 10)
            numbox.set_style_local_value_str(lv.obj.PART.MAIN,
                                             lv.STATE.DEFAULT, "Copies")
            numbox.set_style_local_value_align(lv.obj.PART.MAIN,
                                               lv.STATE.DEFAULT,
                                               lv.ALIGN.OUT_TOP_MID)
            numbox.set_style_local_value_ofs_y(lv.obj.PART.MAIN,
                                               lv.STATE.DEFAULT,
                                               -self.LV_VER_RES // 50)
            numbox.set_style_local_value_font(lv.obj.PART.MAIN,
                                              lv.STATE.DEFAULT,
                                              self.theme.get_font_subtitle())
            numbox.set_layout(lv.LAYOUT.CENTER)

            self.print_cnt = 1
            self.print_cnt_label = lv.label(numbox, None)
            self.print_cnt_label.set_text("1")
            self.print_cnt_label.set_style_local_text_font(
                lv.label.PART.MAIN, lv.STATE.DEFAULT,
                self.theme.get_font_subtitle())

            btn = lv.btn(settings_box, None)
            btn.set_size(self.LV_HOR_RES // 13, self.LV_HOR_RES // 13)
            btn.align(numbox, lv.ALIGN.OUT_LEFT_MID, -self.LV_VER_RES // 60, 0)
            btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                          lv.SYMBOL.DOWN)
            btn.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           self.theme.get_font_subtitle())
            btn.set_event_cb(self.print_cnt_btn_event_cb)
            btn.set_ext_click_area(10, 10, 10, 10)
            self.theme.apply(btn, lv.THEME.BTN)

            sw = lv.switch(settings_box, None)
            sw.set_size(self.LV_HOR_RES // 10, self.LV_VER_RES // 12)
            sw.align(btn, lv.ALIGN.OUT_BOTTOM_LEFT, self.LV_HOR_RES // 50,
                     self.LV_VER_RES // 7)
            sw.set_style_local_value_ofs_y(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           -self.LV_VER_RES // 50)
            sw.set_style_local_value_align(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                           lv.ALIGN.OUT_TOP_MID)
            sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                         "Color")
            sw.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                          self.theme.get_font_subtitle())
            self.theme.apply(sw, lv.THEME.SWITCH)

            btn = lv.btn(settings_box, btn)
            btn.align(numbox, lv.ALIGN.OUT_RIGHT_MID, self.LV_VER_RES // 60, 0)
            btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                          lv.SYMBOL.UP)
            btn.set_event_cb(self.print_cnt_btn_event_cb)
            self.theme.apply(btn, lv.THEME.BTN)

            sw = lv.switch(settings_box, sw)
            sw.align(btn, lv.ALIGN.OUT_BOTTOM_RIGHT, -self.LV_HOR_RES // 50,
                     self.LV_VER_RES // 7)
            sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                                         "Vertical")

            print_btn = lv.btn(lv.scr_act(), None)
            self.theme.apply(print_btn, LV_DEMO_PRINTER_THEME_BTN_CIRCLE)
            print_btn.set_size(box_w, 60)
            print_btn.set_event_cb(self.print_start_event_cb)

            btn_ofs_y = (dropdown_box.get_height() -
                         print_btn.get_height()) // 2
            print_btn.align(settings_box, lv.ALIGN.OUT_BOTTOM_MID, 0,
                            self.LV_HOR_RES // 30 + btn_ofs_y)
            print_btn.set_style_local_value_str(lv.obj.PART.MAIN,
                                                lv.STATE.DEFAULT, "PRINT")
            print_btn.set_style_local_value_font(
                lv.obj.PART.MAIN, lv.STATE.DEFAULT,
                self.theme.get_font_subtitle())
            print_btn.set_style_local_bg_color(lv.obj.PART.MAIN,
                                               lv.STATE.DEFAULT,
                                               LV_DEMO_PRINTER_GREEN)
            print_btn.set_style_local_bg_color(
                lv.obj.PART.MAIN, lv.STATE.PRESSED,
                LV_DEMO_PRINTER_GREEN.color_darken(lv.OPA._20))

            delay += self.LV_DEMO_PRINTER_ANIM_DELAY
            self.anim_in(settings_box, delay)

            delay += self.LV_DEMO_PRINTER_ANIM_DELAY
            self.anim_in(dropdown_box, delay)

            delay += self.LV_DEMO_PRINTER_ANIM_DELAY
            self.anim_in(print_btn, delay)

            self.anim_bg(0, LV_DEMO_PRINTER_BLUE,
                         self.LV_DEMO_PRINTER_BG_NORMAL)
Ejemplo n.º 30
0
    def popup_pid_params(self):
        """
        The popup window of PID params settings
        """
        modal_style = lv.style_t()
        lv.style_copy(modal_style, lv.style_plain_color)
        modal_style.body.main_color = modal_style.body.grad_color = lv.color_make(
            0, 0, 0)
        modal_style.body.opa = lv.OPA._50
        bg = lv.obj(self.main_scr)
        bg.set_style(modal_style)
        bg.set_pos(0, 0)
        bg.set_size(self.main_scr.get_width(), self.main_scr.get_height())
        bg.set_opa_scale_enable(True)

        # init mbox and title
        popup_pid = lv.mbox(bg)
        popup_pid.set_text('Set PID Params')
        popup_pid.set_size(220, 300)
        popup_pid.align(bg, lv.ALIGN.CENTER, 0, 0)

        input_cont = lv.cont(popup_pid)
        input_cont.set_size(210, 180)

        def input_event_cb(ta, event):
            if event == lv.EVENT.CLICKED:
                self.current_input_placeholder = ta.get_placeholder_text()
                if self.current_input_placeholder == 'Set Offset':
                    popup_pid.align(bg, lv.ALIGN.CENTER, 0, -55)
                else:
                    popup_pid.align(bg, lv.ALIGN.CENTER, 0, 0)
                if kb.get_hidden():
                    kb.set_hidden(False)
                # Focus on the clicked text area
                kb.set_ta(ta)

        def keyboard_event_cb(event_kb, event):
            event_kb.def_event_cb(event)
            if event == lv.EVENT.CANCEL or event == lv.EVENT.APPLY:
                kb.set_hidden(True)
                if self.current_input_placeholder == 'Set Offset':
                    popup_pid.align(bg, lv.ALIGN.CENTER, 0, 0)

        # init keyboard
        kb = lv.kb(bg)
        kb.set_cursor_manage(True)
        kb.set_event_cb(keyboard_event_cb)
        lv.kb.set_mode(kb, lv.kb.MODE.NUM)
        rel_style = lv.style_t()
        pr_style = lv.style_t()
        lv.style_copy(rel_style, lv.style_btn_rel)
        rel_style.body.radius = 0
        rel_style.body.border.width = 1
        lv.style_copy(pr_style, lv.style_btn_pr)
        pr_style.body.radius = 0
        pr_style.body.border.width = 1
        kb.set_style(lv.kb.STYLE.BG, lv.style_transp_tight)
        kb.set_style(lv.kb.STYLE.BTN_REL, rel_style)
        kb.set_style(lv.kb.STYLE.BTN_PR, pr_style)

        # init text areas
        kp_input = lv.ta(input_cont)
        kp_input.set_text(str(self.pid_params.get('kp')))
        kp_input.set_placeholder_text('Set Kp')
        kp_input.set_accepted_chars('0123456789.+-')
        kp_input.set_one_line(True)
        kp_input.set_width(120)
        kp_input.align(input_cont, lv.ALIGN.IN_TOP_MID, 30, 20)
        kp_input.set_event_cb(input_event_cb)
        kp_label = lv.label(input_cont)
        kp_label.set_text("Kp: ")
        kp_label.align(kp_input, lv.ALIGN.OUT_LEFT_MID, 0, 0)
        pid_title_label = lv.label(input_cont)
        pid_title_label.set_text("PID Params:")
        pid_title_label.align(kp_input, lv.ALIGN.OUT_TOP_LEFT, -65, 0)

        ki_input = lv.ta(input_cont)
        ki_input.set_text(str(self.pid_params.get('ki')))
        ki_input.set_placeholder_text('Set Ki')
        ki_input.set_accepted_chars('0123456789.+-')
        ki_input.set_one_line(True)
        ki_input.set_width(120)
        ki_input.align(input_cont, lv.ALIGN.IN_TOP_MID, 30, 55)
        ki_input.set_event_cb(input_event_cb)
        ki_input.set_cursor_type(lv.CURSOR.LINE | lv.CURSOR.HIDDEN)
        ki_label = lv.label(input_cont)
        ki_label.set_text("Ki: ")
        ki_label.align(ki_input, lv.ALIGN.OUT_LEFT_MID, 0, 0)

        kd_input = lv.ta(input_cont)
        kd_input.set_text(str(self.pid_params.get('kd')))
        kd_input.set_placeholder_text('Set Kd')
        kd_input.set_accepted_chars('0123456789.+-')
        kd_input.set_one_line(True)
        kd_input.set_width(120)
        kd_input.align(input_cont, lv.ALIGN.IN_TOP_MID, 30, 90)
        kd_input.set_event_cb(input_event_cb)
        kd_input.set_cursor_type(lv.CURSOR.LINE | lv.CURSOR.HIDDEN)
        kd_label = lv.label(input_cont)
        kd_label.set_text("Kd: ")
        kd_label.align(kd_input, lv.ALIGN.OUT_LEFT_MID, 0, 0)

        temp_offset_input = lv.ta(input_cont)
        temp_offset_input.set_text(str(self.temp_offset))
        temp_offset_input.set_placeholder_text('Set Offset')
        temp_offset_input.set_accepted_chars('0123456789.+-')
        temp_offset_input.set_one_line(True)
        temp_offset_input.set_width(120)
        temp_offset_input.align(input_cont, lv.ALIGN.IN_TOP_MID, 30, 145)
        temp_offset_input.set_event_cb(input_event_cb)
        temp_offset_input.set_cursor_type(lv.CURSOR.LINE | lv.CURSOR.HIDDEN)
        temp_offset_label = lv.label(input_cont)
        temp_offset_label.set_text("Offset: ")
        temp_offset_label.align(temp_offset_input, lv.ALIGN.OUT_LEFT_MID, 0, 0)
        offset_title_label = lv.label(input_cont)
        offset_title_label.set_text("Temp Correction:")
        offset_title_label.align(temp_offset_input, lv.ALIGN.OUT_TOP_LEFT, -65,
                                 0)

        # set btns to mbox
        btns = ['Save', 'Cancel', '']
        popup_pid.add_btns(btns)

        lv.cont.set_fit(popup_pid, lv.FIT.NONE)
        mbox_style = popup_pid.get_style(popup_pid.STYLE.BTN_REL)
        popup_pid_style = lv.style_t()
        lv.style_copy(popup_pid_style, mbox_style)
        popup_pid_style.body.padding.bottom = 46
        popup_pid.set_style(popup_pid.STYLE.BTN_REL, popup_pid_style)
        popup_pid.set_size(220, 300)

        def event_handler(obj, event):
            if event == lv.EVENT.VALUE_CHANGED:
                active_btn_text = popup_pid.get_active_btn_text()
                if active_btn_text == 'Save':
                    kp_value = float(kp_input.get_text())
                    ki_value = float(ki_input.get_text())
                    kd_value = float(kd_input.get_text())
                    temp_offset_value = float(temp_offset_input.get_text())
                    self.config['pid'] = {
                        'kp': kp_value,
                        'ki': ki_value,
                        'kd': kd_value
                    }
                    self.config['sensor_offset'] = temp_offset_value
                    self.pid_params = self.config.get('pid')
                    self.temp_offset = self.config.get('sensor_offset')
                    # Save settings to config.json
                    with open('config.json', 'w') as f:
                        ujson.dump(self.config, f)
                    # Apply settings immediately
                    self.pid.reset(kp_value, ki_value, kd_value)
                    self.sensor.set_offset(temp_offset_value)
                bg.del_async()
                popup_pid.start_auto_close(5)

        popup_pid.set_event_cb(event_handler)
        popup_pid.align(bg, lv.ALIGN.CENTER, 0, 0)
        kb.set_ta(kp_input)
        kb.set_hidden(True)