Python-EFL: 5 new tests about Focus.
Also add some missed values to Elm_Object_Focus_Direction enum.
This commit is contained in:
parent
6db1f9d0d6
commit
9089706286
|
@ -145,6 +145,10 @@ cdef extern from "Elementary.h":
|
|||
ctypedef enum Elm_Focus_Direction:
|
||||
ELM_FOCUS_PREVIOUS
|
||||
ELM_FOCUS_NEXT
|
||||
ELM_FOCUS_UP
|
||||
ELM_FOCUS_DOWN
|
||||
ELM_FOCUS_RIGHT
|
||||
ELM_FOCUS_LEFT
|
||||
|
||||
ctypedef enum Elm_Genlist_Item_Type:
|
||||
ELM_GENLIST_ITEM_NONE
|
||||
|
|
|
@ -78,6 +78,29 @@ Focus direction
|
|||
|
||||
Focus next
|
||||
|
||||
.. data:: ELM_FOCUS_UP
|
||||
|
||||
Focus up
|
||||
|
||||
.. versionadded:: 1.8.1
|
||||
|
||||
.. data:: ELM_FOCUS_DOWN
|
||||
|
||||
Focus down
|
||||
|
||||
.. versionadded:: 1.8.1
|
||||
|
||||
.. data:: ELM_FOCUS_RIGHT
|
||||
|
||||
Focus right
|
||||
|
||||
.. versionadded:: 1.8.1
|
||||
|
||||
.. data:: ELM_FOCUS_LEFT
|
||||
|
||||
Focus left
|
||||
|
||||
.. versionadded:: 1.8.1
|
||||
|
||||
.. _Elm_Input_Event_Type:
|
||||
|
||||
|
@ -221,6 +244,10 @@ cimport enums
|
|||
|
||||
ELM_FOCUS_PREVIOUS = enums.ELM_FOCUS_PREVIOUS
|
||||
ELM_FOCUS_NEXT = enums.ELM_FOCUS_NEXT
|
||||
ELM_FOCUS_UP = enums.ELM_FOCUS_UP
|
||||
ELM_FOCUS_DOWN = enums.ELM_FOCUS_DOWN
|
||||
ELM_FOCUS_RIGHT = enums.ELM_FOCUS_RIGHT
|
||||
ELM_FOCUS_LEFT = enums.ELM_FOCUS_LEFT
|
||||
|
||||
EVAS_CALLBACK_KEY_DOWN = evasenums.EVAS_CALLBACK_KEY_DOWN
|
||||
EVAS_CALLBACK_KEY_UP = evasenums.EVAS_CALLBACK_KEY_UP
|
||||
|
|
|
@ -113,6 +113,13 @@ items = [
|
|||
("Entry Scrolled", "test_entry", "entry_scrolled_clicked"),
|
||||
("Entry Anchor", "test_entry", "entry_anchor_clicked"),
|
||||
("MultiButtonEntry", "test_multibuttonentry", "multibuttonentry_clicked"),
|
||||
]),
|
||||
("Focus", [
|
||||
("Focus", "test_focus", "focus_clicked"),
|
||||
("Focus 2", "test_focus", "focus2_clicked"),
|
||||
("Focus 3", "test_focus", "focus3_clicked"),
|
||||
("Focus 4", "test_focus", "focus4_clicked"),
|
||||
("Focus Custom", "test_focus", "focus5_clicked"),
|
||||
]),
|
||||
("Geographic", [
|
||||
("Map", "test_map", "map_clicked"),
|
||||
|
|
|
@ -0,0 +1,596 @@
|
|||
#!/usr/bin/env python
|
||||
# encoding: utf-8
|
||||
|
||||
import os
|
||||
|
||||
from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL
|
||||
from efl import elementary
|
||||
from efl import edje
|
||||
from efl.elementary.window import StandardWindow
|
||||
from efl.elementary.box import Box
|
||||
from efl.elementary.bubble import Bubble
|
||||
from efl.elementary.button import Button
|
||||
from efl.elementary.label import Label
|
||||
from efl.elementary.layout import Layout
|
||||
from efl.elementary.list import List
|
||||
from efl.elementary.frame import Frame
|
||||
from efl.elementary.separator import Separator
|
||||
from efl.elementary.scroller import Scroller
|
||||
from efl.elementary.spinner import Spinner
|
||||
from efl.elementary.check import Check
|
||||
from efl.elementary.entry import Entry
|
||||
from efl.elementary.table import Table
|
||||
from efl.elementary.toolbar import Toolbar, ELM_TOOLBAR_SHRINK_MENU
|
||||
from efl.elementary.object import ELM_FOCUS_DOWN, ELM_FOCUS_UP
|
||||
from efl.elementary.configuration import Configuration
|
||||
from efl.elementary.theme import theme_overlay_add
|
||||
|
||||
EXPAND_BOTH = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
|
||||
EXPAND_HORIZ = EVAS_HINT_EXPAND, 0.0
|
||||
FILL_BOTH = EVAS_HINT_FILL, EVAS_HINT_FILL
|
||||
FILL_HORIZ = EVAS_HINT_FILL, 0.5
|
||||
|
||||
script_path = os.path.dirname(os.path.abspath(__file__))
|
||||
edj_file = os.path.join(script_path, "test.edj")
|
||||
conf = Configuration()
|
||||
|
||||
# Focus
|
||||
def _tb_sel(tb, item):
|
||||
print(item)
|
||||
print(item.text)
|
||||
|
||||
def focus_clicked(obj, item=None):
|
||||
win = StandardWindow("focus", "Focus", autodel=True, size=(800,600))
|
||||
|
||||
win.focus_highlight_enabled = True
|
||||
|
||||
tbx = Box(win, size_hint_weight=EXPAND_BOTH)
|
||||
win.resize_object_add(tbx)
|
||||
tbx.show()
|
||||
|
||||
### Toolbar
|
||||
tbar = Toolbar(win, shrink_mode=ELM_TOOLBAR_SHRINK_MENU,
|
||||
size_hint_align=(EVAS_HINT_FILL,0.0))
|
||||
|
||||
tb_it = tbar.item_append("document-print", "Hello", _tb_sel)
|
||||
tb_it.disabled = True
|
||||
tb_it = tbar.item_append("folder-new", "World", _tb_sel)
|
||||
tb_it = tbar.item_append("object-rotate-right", "H", _tb_sel)
|
||||
tb_it = tbar.item_append("mail-send", "Comes", _tb_sel)
|
||||
tb_it = tbar.item_append("clock", "Elementary", _tb_sel)
|
||||
|
||||
tb_it = tbar.item_append("refresh", "Menu", _tb_sel)
|
||||
tb_it.menu = True
|
||||
tbar.menu_parent = win
|
||||
menu = tb_it.menu
|
||||
|
||||
menu.item_add(None, "Shrink", "edit-cut", _tb_sel)
|
||||
menu_it = menu.item_add(None, "Mode", "edit-copy", _tb_sel)
|
||||
menu.item_add(menu_it, "is set to", "edit-paste", _tb_sel)
|
||||
menu.item_add(menu_it, "or to", "edit-paste", _tb_sel)
|
||||
menu.item_add(None, "Menu", "edit-delete", _tb_sel)
|
||||
|
||||
tbx.pack_end(tbar)
|
||||
tbar.show()
|
||||
|
||||
|
||||
mainbx = Box(win, horizontal=True, size_hint_weight=EXPAND_BOTH)
|
||||
tbx.pack_end(mainbx)
|
||||
mainbx.show()
|
||||
|
||||
## First Col
|
||||
bx = Box(win, size_hint_weight=EXPAND_BOTH)
|
||||
mainbx.pack_end(bx)
|
||||
bx.show()
|
||||
|
||||
lb = Label(win, text="<b>Use Tab or Shift+Tab<br/>or Arrow keys</b>",
|
||||
size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(lb)
|
||||
lb.show()
|
||||
|
||||
tg = Check(win, style="toggle")
|
||||
tg.part_text_set("on", "Yes")
|
||||
tg.part_text_set("off", "No")
|
||||
bx.pack_end(tg)
|
||||
tg.show()
|
||||
|
||||
en = Entry(win, scrollable=True, single_line=True, text="This is a single line",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bx.pack_end(en)
|
||||
en.show()
|
||||
|
||||
#
|
||||
bx2 = Box(win, horizontal=True, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(bx2)
|
||||
bx2.show()
|
||||
|
||||
for i in range(2):
|
||||
bt = Button(win, text="Box", size_hint_align=FILL_BOTH, disabled=(i % 2))
|
||||
bx2.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
sc = Scroller(win, bounce=(True,True), content_min_limit=(1,1),
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(sc)
|
||||
sc.show()
|
||||
|
||||
bt = Button(win, text="Scroller", size_hint_align=FILL_BOTH)
|
||||
sc.content = bt
|
||||
bt.show()
|
||||
|
||||
#
|
||||
bt = Button(win, text="Box", size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
#
|
||||
bx2 = Box(win, horizontal=True, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(bx2)
|
||||
bx2.show()
|
||||
|
||||
for i in range(2):
|
||||
bx3 = Box(win, size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(bx3)
|
||||
bx3.show()
|
||||
|
||||
for j in range(3):
|
||||
bt = Button(win, text="Box", size_hint_align=FILL_BOTH)
|
||||
bx3.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
|
||||
sc = Scroller(win, bounce=(False, True), content_min_limit=(1,0),
|
||||
size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
|
||||
sc.content_min_limit=(1,1)
|
||||
bx2.pack_end(sc)
|
||||
sc.show()
|
||||
|
||||
bx3 = Box(win, size_hint_align=FILL_BOTH)
|
||||
sc.content = bx3
|
||||
bx3.show()
|
||||
|
||||
for i in range(5):
|
||||
bt = Button(win, text="BX Scroller", size_hint_align=FILL_BOTH)
|
||||
bx3.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
|
||||
## Second Col
|
||||
ly = Layout(win, size_hint_weight=EXPAND_BOTH)
|
||||
ly.file = edj_file, "twolines"
|
||||
mainbx.pack_end(ly)
|
||||
ly.show()
|
||||
|
||||
bx2 = Box(win, horizontal=True, size_hint_align=FILL_BOTH)
|
||||
ly.part_content_set("element1", bx2)
|
||||
bx2.show()
|
||||
|
||||
for i in range(3):
|
||||
bt = Button(win, text="Layout", size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(bt)
|
||||
bt.show()
|
||||
bx2.focus_custom_chain_prepend(bt)
|
||||
|
||||
bx2 = Box(win, size_hint_align=FILL_BOTH)
|
||||
ly.part_content_set("element2", bx2)
|
||||
bx2.show()
|
||||
|
||||
bt = Button(win, text="Disable", size_hint_align=FILL_BOTH)
|
||||
bt.callback_clicked_add(lambda b: b.disabled_set(True))
|
||||
bx2.pack_end(bt)
|
||||
bt.show()
|
||||
bx2.focus_custom_chain_prepend(bt)
|
||||
|
||||
bt2 = Button(win, text="Enable", size_hint_align=FILL_BOTH)
|
||||
bt2.callback_clicked_add(lambda b, b1: b1.disabled_set(False), bt)
|
||||
bx2.pack_end(bt2)
|
||||
bt2.show()
|
||||
bx2.focus_custom_chain_append(bt2)
|
||||
|
||||
## Third Col
|
||||
bx = Box(win, size_hint_weight=EXPAND_BOTH)
|
||||
mainbx.pack_end(bx)
|
||||
bx.show()
|
||||
|
||||
fr = Frame(win, text="Frame", )
|
||||
bx.pack_end(fr)
|
||||
fr.show()
|
||||
|
||||
tb = Table(win, size_hint_weight=EXPAND_BOTH)
|
||||
fr.content = tb
|
||||
tb.show()
|
||||
|
||||
for j in range(1):
|
||||
for i in range(2):
|
||||
bt = Button(win, text="Table", size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
|
||||
tb.pack(bt, i, j, 1, 1)
|
||||
bt.show()
|
||||
|
||||
#
|
||||
fr = Bubble(win, text="Bubble", size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
|
||||
bx.pack_end(fr)
|
||||
fr.show()
|
||||
|
||||
tb = Table(win, size_hint_weight=EXPAND_BOTH)
|
||||
fr.content = tb
|
||||
tb.show()
|
||||
|
||||
for j in range(2):
|
||||
for i in range(1):
|
||||
bt = Button(win, text="Table", size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
|
||||
tb.pack(bt, i, j, 1, 1)
|
||||
bt.show()
|
||||
|
||||
|
||||
win.show()
|
||||
|
||||
|
||||
# Focus 2
|
||||
def _focus_obj(bt, newfocus):
|
||||
print newfocus
|
||||
newfocus.focus = True
|
||||
|
||||
def _focus_layout_part(bt, layout):
|
||||
newfocus = layout.edje.part_object_get("sky")
|
||||
print newfocus
|
||||
newfocus.focus = True
|
||||
|
||||
|
||||
def focus2_clicked(obj, item=None):
|
||||
win = StandardWindow("focus2", "Focus 2", autodel=True, size=(400, 400))
|
||||
|
||||
win.focus_highlight_enabled = True
|
||||
|
||||
bx = Box(win, size_hint_weight=EXPAND_BOTH)
|
||||
win.resize_object_add(bx)
|
||||
bx.show()
|
||||
|
||||
PARENT = bx
|
||||
|
||||
en = Entry(PARENT, scrollable=True, single_line=True,
|
||||
text="Entry that should get focus",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bx.pack_end(en)
|
||||
en.show()
|
||||
|
||||
bt = Button(PARENT, text="Give focus to entry")
|
||||
bt.callback_clicked_add(_focus_obj, en)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
ly = Layout(PARENT, size_hint_weight=EXPAND_BOTH)
|
||||
ly.file = edj_file, "layout"
|
||||
bx.pack_end(ly)
|
||||
ly.show()
|
||||
|
||||
bt1 = bt = Button(ly, text="Button 1")
|
||||
ly.part_content_set("element1", bt)
|
||||
|
||||
en1 = Entry(ly, scrollable=True, single_line=True,
|
||||
text="Scrolled Entry that should get focus",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ )
|
||||
ly.part_content_set("element2", en1)
|
||||
|
||||
bt = Button(ly, text="Button 2")
|
||||
ly.part_content_set("element3", bt)
|
||||
|
||||
|
||||
bt = Button(PARENT, text="Give focus to layout",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bt.callback_clicked_add(_focus_obj, ly)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
bt = Button(PARENT, text="Give focus to layout part",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bt.callback_clicked_add(_focus_layout_part, ly)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
bt = Button(PARENT, text="Give focus to layout 'Button 1'",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bt.callback_clicked_add(_focus_obj, bt1)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
bt = Button(PARENT, text="Give focus to layout 'Entry'",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bt.callback_clicked_add(_focus_obj, en1)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
bt.focus_next_object_set(en, ELM_FOCUS_DOWN)
|
||||
en.focus_next_object_set(bt, ELM_FOCUS_UP)
|
||||
win.show()
|
||||
|
||||
|
||||
# Focus 3
|
||||
focused = None
|
||||
def _focused_cb(obj):
|
||||
global focused
|
||||
print obj
|
||||
focused = obj
|
||||
|
||||
def _unfocused_cb(obj):
|
||||
global focused
|
||||
print obj
|
||||
focused = None
|
||||
|
||||
def _add_cb(bt, win, bx):
|
||||
en = Entry(win, scrollable=True, single_line=True, text="An entry",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
en.callback_focused_add(_focused_cb)
|
||||
en.callback_unfocused_add(_unfocused_cb)
|
||||
bx.pack_start(en)
|
||||
en.show()
|
||||
|
||||
def _del_cb(bt, bx):
|
||||
if focused:
|
||||
focused.delete()
|
||||
|
||||
def _hide_cb(bt):
|
||||
if focused:
|
||||
focused.hide()
|
||||
|
||||
def focus3_clicked(obj, item=None):
|
||||
win = StandardWindow("focus3", "Focus 3", autodel=True, size=(320, 480))
|
||||
|
||||
win.focus_highlight_enabled = True
|
||||
|
||||
bx = Box(win, size_hint_weight=EXPAND_BOTH)
|
||||
win.resize_object_add(bx)
|
||||
bx.show()
|
||||
|
||||
en = Entry(win, scrollable=True, single_line=True, text="An entry",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
en.callback_focused_add(_focused_cb)
|
||||
en.callback_unfocused_add(_unfocused_cb)
|
||||
bx.pack_end(en)
|
||||
en.show()
|
||||
|
||||
bt = Button(win, text="Add", focus_allow=False,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bt.callback_clicked_add(_add_cb, win, bx)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
bt = Button(win, text="Del", focus_allow=False,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bt.callback_clicked_add(_del_cb, bx)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
bt = Button(win, text="hide", focus_allow=False,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
|
||||
bt.callback_clicked_add(_hide_cb)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
win.show()
|
||||
|
||||
|
||||
# Focus 4
|
||||
def _highlight_enabled_cb(chk, win):
|
||||
conf.focus_highlight_enabled = chk.state
|
||||
|
||||
def _highlight_animate_cb(chk, win):
|
||||
conf.focus_highlight_animate = chk.state
|
||||
|
||||
def _win_highlight_enabled_cb(chk, win):
|
||||
win.focus_highlight_enabled = chk.state
|
||||
|
||||
def _win_highlight_animate_cb(chk, win):
|
||||
win.focus_highlight_animate = chk.state
|
||||
|
||||
def _custom_chain_cb(chk, bx):
|
||||
print chk.state
|
||||
if chk.state is True:
|
||||
i = 0
|
||||
custom_chain = []
|
||||
for child in bx.children:
|
||||
print child
|
||||
if i == 0:
|
||||
c = child
|
||||
custom_chain.append(child)
|
||||
bx.focus_custom_chain_set(custom_chain)
|
||||
elif i == 1:
|
||||
bx.focus_custom_chain_prepend(child, c)
|
||||
elif i == 2:
|
||||
bx.focus_custom_chain_append(child, c)
|
||||
c = child
|
||||
elif i == 3:
|
||||
bx.focus_custom_chain_prepend(child, c);
|
||||
i += 1
|
||||
|
||||
else:
|
||||
bx.focus_custom_chain_unset()
|
||||
|
||||
def focus4_clicked(obj, item=None):
|
||||
win = StandardWindow("focus4", "Focus 4", autodel=True, size=(320, 320))
|
||||
|
||||
win.focus_highlight_enabled = True
|
||||
win.focus_highlight_animate = True
|
||||
|
||||
fr = Frame(win, style="pad_large",
|
||||
size_hint_weight=EXPAND_BOTH);
|
||||
win.resize_object_add(fr)
|
||||
fr.show()
|
||||
|
||||
# First Example - Using Focus Highlight
|
||||
bx = Box(fr)
|
||||
fr.content = bx
|
||||
bx.show()
|
||||
|
||||
tg = Check(bx, text="Focus Highlight Enabled (Config)", state=True,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
tg.callback_changed_add(_highlight_enabled_cb, win)
|
||||
|
||||
bx.pack_end(tg)
|
||||
tg.show()
|
||||
|
||||
tg = Check(bx, text="Focus Highlight Animate (Config)", state=True,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
tg.callback_changed_add(_highlight_animate_cb, win)
|
||||
bx.pack_end(tg)
|
||||
tg.show()
|
||||
|
||||
tg = Check(bx, text="Focus Highlight Enabled (Win)", state=True,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
tg.callback_changed_add(_win_highlight_enabled_cb, win)
|
||||
bx.pack_end(tg)
|
||||
tg.show()
|
||||
|
||||
tg = Check(bx, text="Focus Highlight Animate (Win)", state=True,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
tg.callback_changed_add(_win_highlight_animate_cb, win)
|
||||
bx.pack_end(tg)
|
||||
tg.show()
|
||||
|
||||
sp = Separator(win, horizontal=True,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(sp)
|
||||
sp.show()
|
||||
|
||||
# Second Example - Using Custom Chain
|
||||
lb = Label(bx, text="Custom Chain: Please use tab key to check",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(lb)
|
||||
lb.show()
|
||||
|
||||
bx2 = Box(bx, horizontal=True,
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(bx2)
|
||||
bx2.show()
|
||||
|
||||
bt1 = Button(bx2, text="Button 1",
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(bt1)
|
||||
bt1.show()
|
||||
|
||||
bt2 = Button(bx2, text="Button 2",
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(bt2)
|
||||
bt2.show()
|
||||
|
||||
bt3 = Button(bx2, text="Button 3",
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(bt3)
|
||||
bt3.show()
|
||||
|
||||
bt4 = Button(bx2, text="Button 4",
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(bt4)
|
||||
bt4.show()
|
||||
|
||||
bx2.focus_custom_chain = [bt2, bt1, bt4, bt3]
|
||||
|
||||
tg = Check(bx, text="Custom Chain", state=False,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
tg.callback_changed_add(_custom_chain_cb, bx)
|
||||
bx.pack_end(tg)
|
||||
tg.show()
|
||||
|
||||
|
||||
win.show()
|
||||
|
||||
|
||||
# Focus 5 (custom)
|
||||
def _glow_effect_on_cb(btn, win, chk):
|
||||
if chk.state:
|
||||
win.focus_highlight_style = "glow_effect"
|
||||
|
||||
def _glow_effect_off_cb(btn, win, chk):
|
||||
if chk.state:
|
||||
win.focus_highlight_style = "glow"
|
||||
|
||||
def focus5_clicked(obj, item=None):
|
||||
|
||||
theme_overlay_add(os.path.join(script_path, "test_focus_custom.edj"))
|
||||
|
||||
win = StandardWindow("focus5", "Focus Custom", autodel=True, size=(320, 320))
|
||||
win.focus_highlight_enabled = True
|
||||
win.focus_highlight_animate = True
|
||||
win.focus_highlight_style = "glow"
|
||||
|
||||
fr = Frame(win, style="pad_large",
|
||||
size_hint_weight=EXPAND_BOTH);
|
||||
win.resize_object_add(fr)
|
||||
fr.show()
|
||||
|
||||
bx = Box(fr)
|
||||
fr.content = bx
|
||||
bx.show()
|
||||
|
||||
chk = Check(bx, text='Enable glow effect on "Glow" Button', state=True,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(chk)
|
||||
chk.show()
|
||||
|
||||
spinner = Spinner(bx, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(spinner)
|
||||
spinner.show()
|
||||
|
||||
bt = Button(bx, text="Glow Button",
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
bt.callback_focused_add(_glow_effect_on_cb, win, chk)
|
||||
bt.callback_unfocused_add(_glow_effect_off_cb, win, chk)
|
||||
bx.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
sp = Separator(bx, horizontal=True,
|
||||
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(sp)
|
||||
sp.show()
|
||||
|
||||
bx2 = Box(bx, horizontal=True,
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx.pack_end(bx2)
|
||||
bx2.show()
|
||||
|
||||
for i in range (1, 5):
|
||||
bt = Button(bx2, text="Button %d" % i,
|
||||
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
bx2.pack_end(bt)
|
||||
bt.show()
|
||||
|
||||
win.show()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
elementary.init()
|
||||
win = StandardWindow("test", "python-elementary test application",
|
||||
size=(320,520))
|
||||
win.callback_delete_request_add(lambda o: elementary.exit())
|
||||
|
||||
box0 = Box(win, size_hint_weight=EXPAND_BOTH)
|
||||
win.resize_object_add(box0)
|
||||
box0.show()
|
||||
|
||||
lb = Label(win)
|
||||
lb.text_set("Please select a test from the list below<br>"
|
||||
"by clicking the test button to show the<br>"
|
||||
"test window.")
|
||||
lb.show()
|
||||
|
||||
fr = Frame(win, text="Information", content=lb)
|
||||
box0.pack_end(fr)
|
||||
fr.show()
|
||||
|
||||
items = [("Focus", focus_clicked),
|
||||
("Focus 2", focus2_clicked),
|
||||
("Focus 3", focus3_clicked),
|
||||
("Focus 4", focus4_clicked),
|
||||
("Focus Custom", focus5_clicked)]
|
||||
|
||||
li = List(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
|
||||
box0.pack_end(li)
|
||||
li.show()
|
||||
|
||||
for item in items:
|
||||
li.item_append(item[0], callback=item[1])
|
||||
|
||||
li.go()
|
||||
|
||||
win.show()
|
||||
elementary.run()
|
||||
elementary.shutdown()
|
|
@ -0,0 +1,389 @@
|
|||
// c1 - c4
|
||||
// |base|
|
||||
// | |
|
||||
// c3 - c2
|
||||
#define OUTER_BASE_PARTS(w, h) \
|
||||
part { name: "base"; type: SPACER; \
|
||||
description { \
|
||||
state: "default" 0.0; } } \
|
||||
part { name: "c1"; type: SPACER; \
|
||||
description { state: "default" 0.0; \
|
||||
rel1.to: "base"; \
|
||||
rel2.to: "base"; \
|
||||
rel2.relative: 0 0; \
|
||||
align: 1 1; \
|
||||
min: w h; \
|
||||
max: w h; } } \
|
||||
part { name: "c3"; type: SPACER; \
|
||||
description { state: "default" 0.0; \
|
||||
rel1.to: "base"; \
|
||||
rel2.to: "base"; \
|
||||
rel1.relative: 0 1; \
|
||||
rel2.relative: 0 1; \
|
||||
align: 1 0; \
|
||||
min: w h; \
|
||||
max: w h; } } \
|
||||
part { name: "c4"; type: SPACER; \
|
||||
description { state: "default" 0.0; \
|
||||
rel1.to: "base"; \
|
||||
rel2.to: "base"; \
|
||||
rel1.relative: 1 0; \
|
||||
rel2.relative: 1 0; \
|
||||
min: w h; \
|
||||
max: w h; } } \
|
||||
part { name: "c2"; type: SPACER; \
|
||||
mouse_events: 0; \
|
||||
description { state: "default" 0.0; \
|
||||
rel1.to: "base"; \
|
||||
rel1.relative: 1 1; \
|
||||
rel2.to: "base"; \
|
||||
rel2.relative: 1 1; \
|
||||
align: 0 0; \
|
||||
min: w h; \
|
||||
max: w h; } }
|
||||
|
||||
collections {
|
||||
group { name: "elm/focus_highlight/top/glow";
|
||||
images {
|
||||
image: "border6.png" COMP;
|
||||
}
|
||||
data.item: "animate" "on";
|
||||
|
||||
script {
|
||||
public src_x, src_y, src_w, src_h;
|
||||
public diffx, diffy, diffw, diffh;
|
||||
public anim_highlight(val, Float:pos) {
|
||||
new x, y, w, h, dx, dy, dw, dh;
|
||||
|
||||
dx = round(float_mul(float(get_int(diffx)), pos));
|
||||
x = get_int(src_x) + dx;
|
||||
dy = round(float_mul(float(get_int(diffy)), pos));
|
||||
y = get_int(src_y) + dy;
|
||||
dw = round(float_mul(float(get_int(diffw)), pos));
|
||||
w = get_int(src_w) + dw;
|
||||
dh = round(float_mul(float(get_int(diffh)), pos));
|
||||
h = get_int(src_h) + dh;
|
||||
|
||||
update_offset(x, y, w, h);
|
||||
|
||||
if(pos >= 1.0) {
|
||||
emit("elm,action,focus,anim,end", "");
|
||||
set_state(PART:"highlight", "default", 0.0);
|
||||
}
|
||||
}
|
||||
public update_offset(x, y, w, h) {
|
||||
set_state_val(PART:"base", STATE_REL1_OFFSET, x, y);
|
||||
set_state_val(PART:"base", STATE_REL2_OFFSET, x + w, y + h);
|
||||
}
|
||||
public message(Msg_Type:type, id, ...) {
|
||||
if((type == MSG_INT_SET) && (id == 1)) {
|
||||
new x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
x1 = getarg(2);
|
||||
y1 = getarg(3);
|
||||
w1 = getarg(4);
|
||||
h1 = getarg(5);
|
||||
x2 = getarg(6);
|
||||
y2 = getarg(7);
|
||||
w2 = getarg(8);
|
||||
h2 = getarg(9);
|
||||
|
||||
set_int(src_x, x1);
|
||||
set_int(src_y, y1);
|
||||
set_int(src_w, w1);
|
||||
set_int(src_h, h1);
|
||||
set_int(diffx, x2 - x1);
|
||||
set_int(diffy, y2 - y1);
|
||||
set_int(diffw, w2 - w1);
|
||||
set_int(diffh, h2 - h1);
|
||||
|
||||
custom_state(PART:"base", "default", 0.0);
|
||||
set_state_val(PART:"base", STATE_REL1, 0.0, 0.0);
|
||||
set_state_val(PART:"base", STATE_REL2, 0.0, 0.0);
|
||||
update_offset(x1, y1, w1, h1);
|
||||
set_state(PART:"base", "custom", 0.0);
|
||||
anim(0.2, "anim_highlight", 0);
|
||||
}
|
||||
}
|
||||
} //script ends
|
||||
parts {
|
||||
OUTER_BASE_PARTS(12, 12);
|
||||
part { name: "highlight"; type: IMAGE;
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
image.normal: "border6.png";
|
||||
image.border: 20 20 20 20;
|
||||
rel1.to: "c1";
|
||||
rel2.to: "c2";
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
}
|
||||
description { state: "invisible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 0;
|
||||
}
|
||||
}
|
||||
} //parts ends
|
||||
programs {
|
||||
program { name: "show";
|
||||
signal: "elm,action,focus,show";
|
||||
source: "elm";
|
||||
action: ACTION_STOP;
|
||||
target: "hide";
|
||||
target: "hide_start";
|
||||
target: "hide_end";
|
||||
after: "show_start";
|
||||
}
|
||||
program { name: "show_start";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
transition: SIN 0.2;
|
||||
target: "highlight";
|
||||
after: "show_end";
|
||||
}
|
||||
program { name: "show_end";
|
||||
action: SIGNAL_EMIT "elm,action,focus,show,end" "";
|
||||
}
|
||||
program { name: "hide";
|
||||
signal: "elm,action,focus,hide";
|
||||
source: "elm";
|
||||
action: ACTION_STOP;
|
||||
target: "show";
|
||||
target: "show_start";
|
||||
target: "show_end";
|
||||
after: "hide_start";
|
||||
}
|
||||
program { name: "hide_start";
|
||||
action: STATE_SET "invisible" 0.0;
|
||||
transition: SIN 0.2;
|
||||
target: "highlight";
|
||||
after: "hide_end";
|
||||
}
|
||||
program { name: "hide_end";
|
||||
action: SIGNAL_EMIT "elm,action,focus,hide,end" "";
|
||||
}
|
||||
} //programs ends
|
||||
} //group ends
|
||||
|
||||
group { name: "elm/focus_highlight/top/glow_effect";
|
||||
inherit: "elm/focus_highlight/top/glow";
|
||||
images {
|
||||
image: "border.png" COMP;
|
||||
image: "border2.png" COMP;
|
||||
image: "border3.png" COMP;
|
||||
image: "border4.png" COMP;
|
||||
image: "border5.png" COMP;
|
||||
image: "border6.png" COMP;
|
||||
}
|
||||
data.item: "animate" "on";
|
||||
|
||||
script {
|
||||
public src_x, src_y, src_w, src_h;
|
||||
public diffx, diffy, diffw, diffh;
|
||||
public anim_highlight(val, Float:pos) {
|
||||
new x, y, w, h, dx, dy, dw, dh, Float:p;
|
||||
p = 1.0 - ((1.0 - pos) * (1.0 - pos) * (1.0 - pos));
|
||||
|
||||
dx = round(float_mul(float(get_int(diffx)), p));
|
||||
x = get_int(src_x) + dx;
|
||||
dy = round(float_mul(float(get_int(diffy)), p));
|
||||
y = get_int(src_y) + dy;
|
||||
dw = round(float_mul(float(get_int(diffw)), p));
|
||||
w = get_int(src_w) + dw;
|
||||
dh = round(float_mul(float(get_int(diffh)), p));
|
||||
h = get_int(src_h) + dh;
|
||||
|
||||
update_offset(x, y, w, h);
|
||||
|
||||
if(pos >= 1.0) {
|
||||
emit("elm,action,focus,anim,end", "");
|
||||
set_state(PART:"highlight", "default", 0.0);
|
||||
emit("dim", "");
|
||||
}
|
||||
}
|
||||
public update_offset(x, y, w, h) {
|
||||
set_state_val(PART:"base", STATE_REL1_OFFSET, x, y);
|
||||
set_state_val(PART:"base", STATE_REL2_OFFSET, x + w, y + h);
|
||||
}
|
||||
public message(Msg_Type:type, id, ...) {
|
||||
if((type == MSG_INT_SET) && (id == 1)) {
|
||||
new x1, y1, w1, h1, x2, y2, w2, h2;
|
||||
|
||||
x1 = getarg(2);
|
||||
y1 = getarg(3);
|
||||
w1 = getarg(4);
|
||||
h1 = getarg(5);
|
||||
x2 = getarg(6);
|
||||
y2 = getarg(7);
|
||||
w2 = getarg(8);
|
||||
h2 = getarg(9);
|
||||
|
||||
set_int(src_x, x1);
|
||||
set_int(src_y, y1);
|
||||
set_int(src_w, w1);
|
||||
set_int(src_h, h1);
|
||||
set_int(diffx, x2 - x1);
|
||||
set_int(diffy, y2 - y1);
|
||||
set_int(diffw, w2 - w1);
|
||||
set_int(diffh, h2 - h1);
|
||||
|
||||
custom_state(PART:"base", "default", 0.0);
|
||||
set_state_val(PART:"base", STATE_REL1, 0.0, 0.0);
|
||||
set_state_val(PART:"base", STATE_REL2, 0.0, 0.0);
|
||||
update_offset(x1, y1, w1, h1);
|
||||
set_state(PART:"base", "custom", 0.0);
|
||||
anim(0.2, "anim_highlight", 0);
|
||||
}
|
||||
}
|
||||
} //script ends
|
||||
parts {
|
||||
part { name: "highlight"; type: IMAGE;
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
image.normal: "border6.png";
|
||||
image.border: 16 16 16 16;
|
||||
rel1.to: "c1";
|
||||
rel2.to: "c2";
|
||||
visible: 1;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
}
|
||||
description { state: "visible" 0.1;
|
||||
inherit: "visible" 0.0;
|
||||
image.normal: "border2.png";
|
||||
image.border: 18 18 18 18;
|
||||
}
|
||||
description { state: "visible" 0.2;
|
||||
inherit: "visible" 0.0;
|
||||
image.normal: "border3.png";
|
||||
image.border: 19 19 19 19;
|
||||
}
|
||||
description { state: "visible" 0.3;
|
||||
inherit: "visible" 0.0;
|
||||
image.normal: "border4.png";
|
||||
image.border: 20 20 20 20;
|
||||
}
|
||||
description { state: "visible" 0.4;
|
||||
inherit: "visible" 0.0;
|
||||
image.normal: "border5.png";
|
||||
image.border: 21 21 21 21;
|
||||
}
|
||||
description { state: "visible" 0.5;
|
||||
inherit: "visible" 0.0;
|
||||
image.normal: "border6.png";
|
||||
image.border: 25 25 25 25;
|
||||
}
|
||||
description { state: "invisible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 0;
|
||||
}
|
||||
}
|
||||
}//parts ends
|
||||
programs {
|
||||
program { name: "show";
|
||||
signal: "elm,action,focus,show";
|
||||
source: "elm";
|
||||
action: ACTION_STOP;
|
||||
target: "hide";
|
||||
target: "hide_start";
|
||||
target: "hide_end";
|
||||
after: "show_start";
|
||||
}
|
||||
program { name: "show_start";
|
||||
action: SIGNAL_EMIT "dim" "";
|
||||
after: "show_end";
|
||||
}
|
||||
program { name: "dim_start";
|
||||
signal: "dim";
|
||||
in: 2 0.4;
|
||||
source: "";
|
||||
action: STATE_SET "visible" 0.4;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "dim1";
|
||||
}
|
||||
program { name: "dim1";
|
||||
action: STATE_SET "visible" 0.3;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "dim2";
|
||||
}
|
||||
program { name: "dim2";
|
||||
action: STATE_SET "visible" 0.2;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "dim3";
|
||||
}
|
||||
program { name: "dim3";
|
||||
action: STATE_SET "visible" 0.1;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "dim_end";
|
||||
}
|
||||
program { name: "dim_end";
|
||||
action: SIGNAL_EMIT "glow" "";
|
||||
}
|
||||
program { name: "glow_start";
|
||||
signal: "glow";
|
||||
source: "";
|
||||
in: 1 0.4;
|
||||
action: STATE_SET "visible" 0.0;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "glow1";
|
||||
}
|
||||
program { name: "glow1";
|
||||
action: STATE_SET "visible" 0.1;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "glow2";
|
||||
}
|
||||
program { name: "glow2";
|
||||
action: STATE_SET "visible" 0.2;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "glow3";
|
||||
}
|
||||
program { name: "glow3";
|
||||
action: STATE_SET "visible" 0.3;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "glow4";
|
||||
}
|
||||
program { name: "glow4";
|
||||
action: STATE_SET "visible" 0.4;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "glow5";
|
||||
}
|
||||
program { name: "glow5";
|
||||
action: STATE_SET "visible" 0.5;
|
||||
transition: SINUSOIDAL 0.2;
|
||||
target: "highlight";
|
||||
after: "glow1";
|
||||
}
|
||||
program { name: "show_end";
|
||||
action: SIGNAL_EMIT "elm,action,focus,show,end" "";
|
||||
}
|
||||
program { name: "hide";
|
||||
signal: "elm,action,focus,hide";
|
||||
source: "elm";
|
||||
action: ACTION_STOP;
|
||||
target: "show";
|
||||
target: "show_start";
|
||||
target: "show_end";
|
||||
after: "hide_start";
|
||||
}
|
||||
program { name: "hide_start";
|
||||
action: STATE_SET "invisible" 0.0;
|
||||
transition: LIN 0.2;
|
||||
target: "highlight";
|
||||
after: "hide_end";
|
||||
}
|
||||
program { name: "hide_end";
|
||||
action: SIGNAL_EMIT "elm,action,focus,hide,end" "";
|
||||
}
|
||||
} //programs ends
|
||||
} //group ends
|
||||
}
|
Binary file not shown.
Loading…
Reference in New Issue