Merge branch 'master' into elmfusion

Conflicts:
	efl/evas/efl.evas_object_textgrid.pxi
This commit is contained in:
Kai Huuhko 2015-05-07 14:24:00 +03:00
commit 74031458df
134 changed files with 308 additions and 406 deletions

View File

@ -1,3 +1,74 @@
===================
2015-08-03 v1.15.0
===================
Fixes:
Improvements:
Changes:
Additions:
Deprecation:
===================
2015-05-07 v1.14.0
===================
Fixes:
* Fixed evas.Textgrid to not leak on cellrow_set()
Improvements:
* Re-added evas.SmartObject (with incompatible API compared to the earlier
incarnation) and made elm.Object inherit from it.
* Better init/shutdown management in all modules, no more need to
manually call those functions (no harm in doing it though).
Changes:
* elm.List.callback_highlighted_add: Added item param to func
* elm.List.callback_unhighlighted_add: Added item param to func
* elm.Toolbar.callback_clicked_add: Added item param to func
* elm.Toolbar.callback_longpressed_add: Added item param to func
* elm.Slideshow: item_data are now a single value, instead of args/kargs,
like is implemented in Gengrid/Genlist
Additions:
* evas.Smart
* evas.Image.orient
* edje.Edje.text_class_get
* edje.text_class_get
* elm.systray
* elm.Configuration.window_auto_focus_animate
* elm.Configuration.window_auto_focus_enable
* elm.Image.memfile_set
* elm.MultiButtonEntry.callback_item_longpressed_add
* elm.MultiButtonEntry.callback_item_longpressed_del
* elm.NaviframeItem.pop_cb_set
* elm.Photocam.image_orient
* elm.Scrollable.loop
* elm.Slider.indicator_visible_mode
* elm.Transit.go_in
* elm.on_config_all_changed
* elm.on_ethumb_connect
* elm.on_policy_changed
* elm.on_process_background
* elm.LayoutClass.file is now also readable
* elm.Video.file is now also readable
Deprecation:
* evas.Rect.intercepts: Use intersects() instead
===================
2015-02-09 v1.13.0
@ -51,7 +122,8 @@ Deprecation:
* elm.Configuration.engine
* elm.Configuration.preferred_engine
===================
2014-11-23 v1.12.0
===================

1
TODO
View File

@ -43,4 +43,3 @@ Elm
- video
- web
- window ?
* How are the ecore events managed? for example: ELM_EVENT_PROCESS_FOREGROUND

View File

@ -55,8 +55,6 @@ params = {
"elementary": ("efl/elementary", "Elementary", "elm"),
}
EFL_MIN_VERSION = "1.9.99"
parser = argparse.ArgumentParser(
description="Reports EFL vs. Python-EFL API functions coverage"
)
@ -205,7 +203,7 @@ print("")
for lib in args.libs:
inc_paths = pkg_config(lib, EFL_MIN_VERSION)
inc_paths = pkg_config(lib)
inc_path = None
for p in inc_paths:
if lib in p:

View File

@ -20,5 +20,5 @@
# pre-release: "1.13.0-beta1" ( 1, 13, 0 )
# release: "1.13.0" ( 1, 13, 0 )
__version__ = "1.13.99"
__version_info__ = ( 1, 13, 99 )
__version__ = "1.14.99"
__version_info__ = ( 1, 14, 99 )

View File

@ -19,6 +19,8 @@
from cpython cimport PyMem_Malloc, PyMem_Free, PyUnicode_AsUTF8String
from efl.utils.deprecated cimport DEPRECATED
import atexit
def init(name=None):
"""Initialize the X display connection to the given display.
@ -322,3 +324,6 @@ def cursor_free(Ecore_X_Cursor c):
include "efl.ecore_x_window.pxi"
include "efl.ecore_x_events.pxi"
init()
atexit.register(shutdown)

View File

@ -30,10 +30,6 @@ Classes
"""
import traceback
import warnings
from cpython cimport PyMem_Malloc, PyMem_Free, PyUnicode_AsUTF8String
cimport libc.stdlib
from libc.stdint cimport uintptr_t
@ -45,6 +41,9 @@ from efl.eo cimport _object_mapping_register, object_from_instance, \
from efl.utils.conversions cimport _ctouni, _touni, \
eina_list_strings_to_python_list
import traceback
import warnings
import atexit
def init():
@ -288,3 +287,4 @@ include "efl.edje_object.pxi"
init()
atexit.register(shutdown)

View File

@ -19,9 +19,10 @@
include "slideshow_cdef.pxi"
cdef Evas_Object *_py_elm_slideshow_item_get(void *data, Evas_Object *obj) with gil:
cdef SlideshowItem item = <object>data
cdef evasObject icon
cdef SlideshowItemClass itc = item.cls
cdef:
SlideshowItem item = <SlideshowItem>data
SlideshowItemClass itc = item.item_class
evasObject icon
func = itc._get_func
if func is None:
@ -29,37 +30,39 @@ cdef Evas_Object *_py_elm_slideshow_item_get(void *data, Evas_Object *obj) with
try:
o = object_from_instance(obj)
ret = func(o, *item.args, **item.kwargs)
icon = func(o, item.item_data)
except Exception:
traceback.print_exc()
return NULL
if ret is None:
if icon is not None:
return icon.obj
else:
return NULL
icon = ret
return icon.obj
cdef void _py_elm_slideshow_item_del(void *data, Evas_Object *obj) with gil:
cdef SlideshowItem item = <object>data
cdef SlideshowItemClass itc = item.cls
cdef:
SlideshowItem item = <SlideshowItem>data
SlideshowItemClass itc = item.item_class
func = itc._del_func
if func is not None:
try:
o = object_from_instance(obj)
func(o, *item.args, **item.kwargs)
func(o, item.item_data)
except Exception:
traceback.print_exc()
# XXX: SlideShow item handling is weird
#item._unset_obj()
# item._unset_obj()
#Py_DECREF(item)
cdef int _py_elm_slideshow_compare_func(const void *data1, const void *data2) with gil:
cdef SlideshowItem item1 = <object>data1
cdef SlideshowItem item2 = <object>data2
cdef object func = item1.compare_func
cdef:
SlideshowItem item1 = <SlideshowItem>data1
SlideshowItem item2 = <SlideshowItem>data2
object func = item1.compare_func
if func is None:
return 0
@ -101,17 +104,17 @@ cdef class SlideshowItemClass (object):
``func(obj, item_data)``
.. note:: In all these signatures, 'obj' means Slideshow and
'item_data' is the value given to Slideshow item append/prepend
'item_data' is the value given to Slideshow item add/sorted_insert
methods, it should represent your item model as you want.
"""
cdef Elm_Slideshow_Item_Class obj
cdef Elm_Slideshow_Item_Class cls
cdef readonly object _get_func
cdef readonly object _del_func
def __cinit__(self, *a, **ka):
self.obj.func.get = _py_elm_slideshow_item_get
self.obj.func.del_ = _py_elm_slideshow_item_del
def __cinit__(self):
self.cls.func.get = _py_elm_slideshow_item_get
self.cls.func.del_ = _py_elm_slideshow_item_del
def __init__(self, get_func=None, del_func=None):
if get_func and not callable(get_func):
@ -137,7 +140,7 @@ cdef class SlideshowItemClass (object):
(type(self).__name__,
<uintptr_t><void *>self,
PY_REFCOUNT(self),
<uintptr_t>&self.obj,
<uintptr_t>&self.cls,
self._get_func,
self._del_func)
@ -145,7 +148,7 @@ cdef class SlideshowItemClass (object):
"""To be called by Slideshow for each item to get its icon.
:param obj: the Slideshow instance
:param item_data: the value given to slideshow append/prepend.
:param item_data: the value given to slideshow item_add func.
:return: icon object to be used and swallowed.
:rtype: evas Object or None
@ -160,8 +163,8 @@ cdef class SlideshowItem(ObjectItem):
"""
cdef:
SlideshowItemClass cls
object compare_func
readonly SlideshowItemClass item_class
object item_data, compare_func
cdef int _set_obj(self, Elm_Object_Item *item) except 0:
assert self.item == NULL, "Object must be clean"
@ -173,8 +176,10 @@ cdef class SlideshowItem(ObjectItem):
assert self.item != NULL, "Object must wrap something"
self.item = NULL
def __init__(self, SlideshowItemClass item_class not None, *args, **kwargs):
self.cls = item_class
def __init__(self, SlideshowItemClass item_class not None,
item_data=None, *args, **kwargs):
self.item_class = item_class
self.item_data = item_data
self.args = args
self.kwargs = kwargs
@ -184,9 +189,25 @@ cdef class SlideshowItem(ObjectItem):
(type(self).__name__,
<uintptr_t><void*>self,
PY_REFCOUNT(self),
<uintptr_t>self.obj,
type(self.cls).__name__,
self.args)
<uintptr_t>self.item,
type(self.item_class).__name__,
self.item_data)
property data:
""" The data (model) associated with this item.
This is the data that has been passed to the add/sorted_insert
functions, and the same that you get in the ItemClass get and delete
functions.
.. versionadded:: 1.14
"""
def __get__(self):
return self.item_data
def data_get(self):
return self.item_data
def add_to(self, Slideshow slideshow not None):
"""Add (append) a new item in a given slideshow widget.
@ -212,7 +233,8 @@ cdef class SlideshowItem(ObjectItem):
"""
cdef Elm_Object_Item *item
item = elm_slideshow_item_add(slideshow.obj, &self.cls.obj, <void*>self)
item = elm_slideshow_item_add(slideshow.obj, &self.item_class.cls,
<void*>self)
if item == NULL:
raise RuntimeError("The item could not be added to the widget.")
@ -256,8 +278,8 @@ cdef class SlideshowItem(ObjectItem):
self.compare_func = func
compare = _py_elm_slideshow_compare_func
item = elm_slideshow_item_sorted_insert(slideshow.obj, &self.cls.obj, \
<void*>self, compare)
item = elm_slideshow_item_sorted_insert(slideshow.obj,
&self.item_class.cls, <void*>self, compare)
if item == NULL:
raise RuntimeError("The item could not be added to the widget.")
@ -316,7 +338,7 @@ cdef class Slideshow(LayoutClass):
self._set_obj(elm_slideshow_add(parent.obj))
self._set_properties_from_keyword_args(kwargs)
def item_add(self, SlideshowItemClass item_class not None, *args, **kwargs):
def item_add(self, SlideshowItemClass item_class not None, item_data):
"""Add (append) a new item in a given slideshow widget.
Add a new item to ``obj's`` internal list of items, appending it.
@ -334,14 +356,19 @@ cdef class Slideshow(LayoutClass):
:param item_class: The item class for the item
:type item_class: :py:class:`SlideshowItemClass`
:param item_data: The data (model) associated with this item
:return: A handle to the item added or ``None``, on errors
:rtype: :py:class:`SlideshowItem`
.. versionchanged:: 1.14
use item_data param instead or args/kargs
"""
return SlideshowItem(item_class, *args, **kwargs).add_to(self)
return SlideshowItem(item_class, item_data).add_to(self)
def item_sorted_insert(self, SlideshowItemClass item_class not None,
func not None, *args, **kwargs):
func not None, item_data):
"""Insert a new item into the given slideshow widget, using the ``func``
function to sort items (by item handles).
@ -363,11 +390,18 @@ cdef class Slideshow(LayoutClass):
:param itc: The item class for the item
:param func: The comparing function to be used to sort slideshow
items **by SlideshowItemClass item handles**
:return: Returns The slideshow item handle, on success, or
``None``, on errors
:param item_data: The data (model) associated with this item
:return: A handle to the item added or ``None``, on errors
:rtype: :py:class:`SlideshowItem`
.. versionchanged:: 1.14
use item_data param instead or args/kargs
"""
return SlideshowItem(item_class, *args, **kwargs).sorted_insert(self, func)
return SlideshowItem(item_class, item_data).sorted_insert(self, func)
def next(self):
"""Slide to the **next** item, in a given slideshow widget

View File

@ -41,6 +41,8 @@ from efl.utils.conversions cimport _ctouni
from efl.evas cimport Canvas, evas_object_smart_callback_add, \
evas_object_smart_callback_del
import atexit
cdef void _emotion_callback(void *data, Evas_Object *o, void *ei) with gil:
cdef Emotion obj
@ -1285,3 +1287,4 @@ _object_mapping_register("Emotion_Object", Emotion)
init()
atexit.register(shutdown)

View File

@ -15,6 +15,8 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this Python-EFL. If not, see <http://www.gnu.org/licenses/>.
import atexit
def init():
return ethumb_init()
@ -28,3 +30,4 @@ cdef class PyEthumb:
init()
atexit.register(shutdown)

View File

@ -42,6 +42,14 @@ cdef class TextgridCell(object):
self.fg_extended, self.bg_extended,
self.double_width)
@staticmethod
cdef TextgridCell create(Evas_Textgrid_Cell *cell):
if cell == NULL:
raise ValueError("Invalid pointer for evas textgrid cell!")
cdef TextgridCell ret = TextgridCell.__new__(TextgridCell)
ret.cell = cell
return ret
property codepoint:
"""the UNICODE value of the character
@ -167,6 +175,35 @@ cdef class TextgridCell(object):
def __get__(self):
return <bint>self.cell.double_width
cdef class TextgridCellRow:
cdef:
Evas_Textgrid_Cell *row
unsigned int rowsize
@staticmethod
cdef TextgridCellRow create(Evas_Textgrid_Cell *row, unsigned int rowsize):
if row == NULL:
raise ValueError("Invalid pointer for evas textgrid cell row!")
cdef TextgridCellRow ret = TextgridCellRow.__new__(TextgridCellRow)
ret.row = row
ret.rowsize = rowsize
return ret
def __len__(self):
return self.rowsize
def __getitem__(self, x):
if x > self.rowsize - 1:
raise IndexError
if x < 0:
x = self.rowsize - x
if x < 0:
raise IndexError
return TextgridCell.create(&self.row[x])
cdef class Textgrid(Object):
"""
@ -343,13 +380,13 @@ cdef class Textgrid(Object):
def __get__(self):
return evas_object_textgrid_supported_font_styles_get(self.obj)
def cellrow_set(self, int y, list row not None):
def cellrow_set(self, int y, TextgridCellRow row not None):
"""Set the string at the given row.
:param y: The row index of the grid.
:type y: int
:param row: The string as a sequence of :class:`TextgridCell`.
:type row: list
:type row: :class:`TextgridCellRow`
This method allows returning cells to the textgrid, retrieved with
:py:meth:`cellrow_get`.
@ -361,26 +398,14 @@ cdef class Textgrid(Object):
:py:meth:`update_add`
"""
cdef:
TextgridCell cell
Evas_Textgrid_Cell **crow
int rlen = len(row)
int i
crow = <Evas_Textgrid_Cell **>malloc(rlen * sizeof(Evas_Textgrid_Cell *))
for i in range(rlen):
cell = row[i]
crow[i] = cell.cell
evas_object_textgrid_cellrow_set(self.obj, y, crow[0])
evas_object_textgrid_cellrow_set(self.obj, y, row.row)
def cellrow_get(self, int y):
"""Get the string at the given row.
:param int y: The row index of the grid.
:return: A list of :class:`TextgridCell`
:rtype: list
:rtype: :class:`TextgridCellRow`
This method returns a list of cells in the line **y** of
the textgrid object. If **y** is not between 0 and the number
@ -393,21 +418,8 @@ cdef class Textgrid(Object):
:py:meth:`update_add`
"""
cdef:
Evas_Textgrid_Cell *row = evas_object_textgrid_cellrow_get(self.obj, y)
int i
list ret = []
TextgridCell cell
if row == NULL:
return None
for i in range(self.size[0]):
cell = TextgridCell.__new__(TextgridCell)
cell.cell = &row[i]
ret.append(cell)
return ret
return TextgridCellRow.create(
evas_object_textgrid_cellrow_get(self.obj, y), self.size[0])
def update_add(self, int x, int y, int w, int h):
"""Indicate for evas that part of a textgrid region (cells) has been updated.

View File

@ -20,7 +20,9 @@ from efl.elementary.label import Label
from efl.elementary.panes import Panes
from efl.elementary.popup import Popup
from efl.elementary.separator import Separator
from efl.elementary.genlist import Genlist, GenlistItem, GenlistItemClass
from efl.elementary.genlist import Genlist, GenlistItemClass, \
ELM_GENLIST_ITEM_GROUP, ELM_GENLIST_ITEM_TREE, \
ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY
from efl.dbus_mainloop import DBusEcoreMainLoop
@ -48,7 +50,7 @@ class DBusNode(object):
@property
def name(self):
return self._name
@property
def parent(self):
return self._parent
@ -72,17 +74,17 @@ class DBusInterface(DBusNode):
self._properties = []
self._methods = []
self._signals = []
parent_obj.interfaces.append(self)
@property
def properties(self):
return self._properties
@property
def methods(self):
return self._methods
@property
def signals(self):
return self._signals
@ -184,7 +186,7 @@ def recursive_introspect(bus, named_service, object_path, ret_data=None):
# found a new object
obj = DBusObject(object_path, named_service)
ret_data.append(obj)
for xml_node in xml_root:
# found an interface
if xml_node.tag == 'interface':
@ -253,12 +255,12 @@ class NamesList(Genlist):
# add private & public group items
self.public_group = self.item_append(self.itc_g, "Public Services",
flags=elm.ELM_GENLIST_ITEM_GROUP)
self.public_group.select_mode_set(elm.ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
flags=ELM_GENLIST_ITEM_GROUP)
self.public_group.select_mode_set(ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
self.private_group = self.item_append(self.itc_g, "Private Services",
flags=elm.ELM_GENLIST_ITEM_GROUP)
self.private_group.select_mode_set(elm.ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
flags=ELM_GENLIST_ITEM_GROUP)
self.private_group.select_mode_set(ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
# populate the genlist
self.populate()
@ -269,11 +271,11 @@ class NamesList(Genlist):
# keep the list updated when a name changes
if self.sig1: self.sig1.remove()
self.sig1 = bus.add_signal_receiver(self.name_owner_changed_cb,
self.sig1 = bus.add_signal_receiver(self.name_owner_changed_cb,
"NameOwnerChanged")
# bus.add_signal_receiver(self.name_acquired_cb, "NameAcquired")
# bus.add_signal_receiver(self.name_lost_cb, "NameLost")
def clear(self):
self.public_group.subitems_clear()
self.private_group.subitems_clear()
@ -281,10 +283,10 @@ class NamesList(Genlist):
def item_selected_cb(self, gl, item):
name = item.data
self.win.detail_list.populate(name)
def sort_cb(self, it1, it2):
return 1 if it1.data.lower() < it2.data.lower() else -1
def service_add(self, name):
print("service_add('%s')" % name)
@ -302,7 +304,7 @@ class NamesList(Genlist):
item.delete()
return
item = item.next
def name_owner_changed_cb(self, name, old_owner, new_owner):
print("NameOwnerChanged(name='%s', old_owner='%s', new_owner='%s')" %
(name, old_owner, new_owner))
@ -352,8 +354,8 @@ class DetailList(Genlist):
self.callback_contract_request_add(self.contract_request_cb)
self.callback_contracted_add(self.contracted_cb)
self.callback_clicked_double_add(self.double_click_cb)
def populate(self, name):
print("populate: %s" % name)
self.clear()
@ -361,9 +363,9 @@ class DetailList(Genlist):
# objects
for obj in recursive_introspect(bus, name, '/'):
obj_item = self.item_append(self.itc_g, obj,
flags=elm.ELM_GENLIST_ITEM_GROUP)
obj_item.select_mode_set(elm.ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
flags=ELM_GENLIST_ITEM_GROUP)
obj_item.select_mode_set(ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
# interfaces
for iface in obj.interfaces:
if options.hide_introspect_stuff and \
@ -371,7 +373,7 @@ class DetailList(Genlist):
continue
iface_item = self.item_append(self.itc, iface,
parent_item=obj_item,
flags=elm.ELM_GENLIST_ITEM_TREE)
flags=ELM_GENLIST_ITEM_TREE)
def sort_cb(self, it1, it2):
pri1 = pri2 = 0
@ -392,7 +394,7 @@ class DetailList(Genlist):
iface = item.data
for obj in iface.properties + iface.methods + iface.signals:
self.item_sorted_insert(self.itc, obj, self.sort_cb, parent_item=item)
def contract_request_cb(self, genlist, item):
item.expanded = False
@ -447,7 +449,7 @@ class MethodRunner(Popup):
sp.horizontal = True
sp.show()
vbox.pack_end(sp)
# returns label + entry
label = Label(parent)
label.size_hint_align = 0.0, 0.5
@ -558,13 +560,13 @@ class MyWin(StandardWindow):
self.resize_object_add(box)
box.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
box.show()
flip = FlipSelector(self)
flip.item_append("Session Bus", self.flip_selected_cb, session_bus)
flip.item_append("System Bus", self.flip_selected_cb, system_bus)
box.pack_end(flip)
flip.show()
panes = Panes(self)
panes.size_hint_weight = (evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
panes.size_hint_align = (evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
@ -594,8 +596,5 @@ class MyWin(StandardWindow):
if __name__ == "__main__":
elm.init()
win = MyWin()
elm.run()
elm.shutdown()

View File

@ -2,14 +2,13 @@
import sys
import efl.ecore
from efl.ecore.x import init, Window, on_window_configure_add
from efl.ecore_x import Window, on_window_configure_add
from subprocess import Popen, PIPE
init()
try:
filename = sys.argv[1]
except IndexError, e:
except IndexError:
raise SystemExit("Usage: %s <filename>" % sys.argv[0])
main_window = Window(w=800, h=600)
@ -40,5 +39,5 @@ def on_configure(event, main_window, sub_window):
on_window_configure_add(on_configure, main_window, sub_window)
efl.ecore.fd_handler_add(
p.stdout, efl.ecore.ECORE_FD_ALL, handle_read, p.stdout)
p.stdout, efl.ecore_x.ECORE_FD_ALL, handle_read, p.stdout)
efl.ecore.main_loop_begin()

View File

@ -1,9 +1,8 @@
#!/usr/bin/env python
import efl.ecore
from efl.ecore.x import init, Window, on_window_configure_add
from efl.ecore_x import Window, on_window_configure_add
init()
# method 1
main_window = Window(w=800, h=600)

View File

@ -309,7 +309,6 @@ def cb_filter(en, win):
menu_create(en.text_get(), win)
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "Python EFL test application")
win.callback_delete_request_add(destroy, "test1", "test2",
str3="test3", str4="test4")
@ -364,4 +363,3 @@ if __name__ == "__main__":
win.resize(480, 480)
win.show()
elementary.run()
elementary.shutdown()

View File

@ -224,10 +224,8 @@ def evas3d_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
evas3d_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -284,7 +284,6 @@ def access_clicked(obj, item=None):
# evas_object_show(win)
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application",
size=(320,520))
win.callback_delete_request_add(lambda o: elementary.exit())
@ -320,4 +319,3 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -143,9 +143,7 @@ def actionslider_clicked(obj):
win.show()
if __name__ == "__main__":
elementary.init()
actionslider_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -44,7 +44,6 @@ def bg_image_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application", size=(320,520))
win.callback_delete_request_add(lambda x: elementary.exit())
@ -76,5 +75,4 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -167,7 +167,6 @@ def box_transition_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application",
size=(320,520))
win.callback_delete_request_add(lambda x: elementary.exit())
@ -203,5 +202,4 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -83,7 +83,6 @@ def bubble_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application",
size=(320,520))
win.callback_delete_request_add(lambda x: elementary.exit())
@ -116,4 +115,3 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -52,10 +52,8 @@ def buttons_clicked(obj):
if __name__ == "__main__":
elementary.init()
buttons_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -231,7 +231,6 @@ def calendar3_clicked(obj, item=None):
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())
@ -267,4 +266,3 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -82,10 +82,8 @@ def check_clicked(obj):
if __name__ == "__main__":
elementary.init()
check_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -77,10 +77,8 @@ def clock_clicked(obj):
if __name__ == "__main__":
elementary.init()
clock_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -78,9 +78,7 @@ def cnp_clicked(obj):
win.show()
if __name__ == "__main__":
elementary.init()
cnp_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -139,10 +139,8 @@ def colorselector_clicked(obj):
if __name__ == "__main__":
elementary.init()
colorselector_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -356,9 +356,7 @@ def config_clicked(obj, data=None):
win.show()
if __name__ == "__main__":
elementary.init()
config_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -152,7 +152,6 @@ def conformant2_clicked(obj, item=None):
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())
@ -187,4 +186,3 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -77,9 +77,7 @@ def core_ecore_events_in_elm_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
core_ecore_events_in_elm_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -87,10 +87,8 @@ def core_evas_canvas_callbacks_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
core_evas_canvas_callbacks_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -151,9 +151,7 @@ def core_evas_object_callbacks_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
core_evas_object_callbacks_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -47,10 +47,8 @@ def core_evas_objects_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
core_evas_objects_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -203,7 +203,5 @@ if __name__ == "__main__":
efl_log_handler = logging.StreamHandler()
efl_log_handler.setFormatter(efl_log_form)
efl_log.addHandler(efl_log_handler)
elementary.init()
core_evas_smart_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -187,10 +187,8 @@ def ctxpopup_clicked(obj):
if __name__ == "__main__":
elementary.init()
ctxpopup_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -164,7 +164,6 @@ def cursor3_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application",
size=(320,520))
win.callback_delete_request_add(lambda o: elementary.exit())
@ -198,4 +197,3 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -60,9 +60,7 @@ def datetime_clicked(obj):
win.show()
if __name__ == "__main__":
elementary.init()
datetime_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -68,10 +68,8 @@ def dayselector_clicked(obj):
if __name__ == "__main__":
elementary.init()
dayselector_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -108,9 +108,7 @@ def diskselector_clicked(obj):
win.show()
if __name__ == "__main__":
elementary.init()
diskselector_clicked(None)
elementary.run()
elementary.shutdown()

View File

@ -577,7 +577,6 @@ def dnd_genlist_gengrid_clicked(obj, item=None):
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application",
size=(320,520))
win.callback_delete_request_add(lambda o: elementary.exit())
@ -613,4 +612,3 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -448,7 +448,6 @@ def entry_notepad_clicked(obj, item=None):
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())
@ -484,4 +483,3 @@ if __name__ == "__main__":
win.show()
elementary.run()
elementary.shutdown()

View File

@ -5,45 +5,54 @@ from efl import evas
from efl.evas import Textgrid, EVAS_TEXTGRID_PALETTE_STANDARD
from efl import elementary
from efl.elementary.window import StandardWindow
from efl.elementary.background import Background
if "unichr" not in dir(__builtins__):
unichr = chr
def evas_textgrid_clicked(obj, item=None):
win = StandardWindow("evastextgrid", "Evas Textgrid Test", autodel=True,
size=(320, 320))
win = StandardWindow(
"evastextgrid", "Evas Textgrid Test", autodel=True)
if obj is None:
win.callback_delete_request_add(lambda o: elementary.exit())
tg = Textgrid(win.evas)
tg.size = 15, 1
tg.size_hint_weight_set(1.0, 1.0)
win.resize_object_add(tg)
tg.font = "Courier", 20
tg.palette_set(EVAS_TEXTGRID_PALETTE_STANDARD, 0, 0, 0, 0, 255)
tg.palette_set(EVAS_TEXTGRID_PALETTE_STANDARD, 1, 255, 255, 255, 255)
W = 80
H = 26
row = tg.cellrow_get(0)
for cell in row:
cell.codepoint="ö"
cell.fg = 1
cell.bg = 0
tg.cellrow_set(0, row)
tg = Textgrid(
win.evas, size_hint_weight=(1.0, 1.0), size=(W, H),
font=("monospace", 14))
win.resize_object_add(tg)
tg.palette_set(EVAS_TEXTGRID_PALETTE_STANDARD, 0, 0, 0, 0, 255)
win.size_step = tg.cell_size
# XXX: Add 1 to size, else the last row/col won't fit. Unknown reason.
win.size = (W * tg.cell_size[0] + 1, H * tg.cell_size[1] + 1)