diff --git a/doc/evas/class-grid.rst b/doc/evas/class-grid.rst new file mode 100644 index 0000000..03747db --- /dev/null +++ b/doc/evas/class-grid.rst @@ -0,0 +1,4 @@ +:class:`efl.evas.Grid` Class +============================ + +.. autoclass:: efl.evas.Grid diff --git a/doc/evas/evas.rst b/doc/evas/evas.rst index f1a86d9..1b698a9 100644 --- a/doc/evas/evas.rst +++ b/doc/evas/evas.rst @@ -214,6 +214,7 @@ Reference class-object-textblock class-object-box class-object-smart + class-grid class-table class-textgrid class-map diff --git a/efl/evas/efl.evas.pyx b/efl/evas/efl.evas.pyx index 6a92bc1..4b96ec9 100644 --- a/efl/evas/efl.evas.pyx +++ b/efl/evas/efl.evas.pyx @@ -322,6 +322,7 @@ include "efl.evas_object_textblock.pxi" include "efl.evas_object_box.pxi" include "object_textgrid.pxi" include "object_table.pxi" +include "object_grid.pxi" init() diff --git a/efl/evas/object_grid.pxi b/efl/evas/object_grid.pxi new file mode 100644 index 0000000..909d972 --- /dev/null +++ b/efl/evas/object_grid.pxi @@ -0,0 +1,135 @@ +# Copyright (C) 2007-2013 various contributors (see AUTHORS) +# +# This file is part of Python-EFL. +# +# Python-EFL is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# Python-EFL is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this Python-EFL. If not, see . + + +cdef class Grid(Object): + + def __init__(self, Canvas canvas not None): + self._set_obj(evas_object_grid_add(canvas.obj)) + + @classmethod + def add_to(cls, Object parent): + """Create a grid that is child of a given element @a parent.""" + Object._set_obj(cls, evas_object_grid_add_to(parent.obj)) + + property grid_size: + """The virtual resolution for the grid + + :type: (int **w**, int **h**) + + """ + + cpdef grid_size_set(self, int w, int h): + evas_object_grid_size_set(self.obj, w, h) + + cpdef grid_size_get(self): + cdef int w, h + evas_object_grid_size_get(self.obj, &w, &h) + return (w, h) + + property mirrored: + """The mirrored mode of the grid. + + In mirrored mode the grid items go from right to left instead of left to + right. That is, 0,0 is top right, not top left. + + :type: bool + + """ + + cpdef mirrored_set(self, bint mirrored): + evas_object_grid_mirrored_set(self.obj, mirrored) + + cpdef bint mirrored_get(self): + return bool(evas_object_grid_mirrored_get(self.obj)) + + def pack(self, Object child not None, int x, int y, int w, int h): + """pack(Object child, int x, int y, int w, int h) + + Add a new child to a grid object. + + :param child: The child object to add. + :param x: The virtual x coordinate of the child + :param y: The virtual y coordinate of the child + :param w: The virtual width of the child + :param h: The virtual height of the child + :raise RuntimeError: if the child could not be packed to the grid. + + """ + if not evas_object_grid_pack(self.obj, child.obj, x, y, w, h): + raise RuntimeError("Could not pack child to grid.") + + def unpack(self, Object child not None): + """unpack(Object child) + + Remove child from grid. + + :param child: + :raise RuntimeError: if removing the child fails. + + .. note:: + + removing a child will immediately call a walk over children in order + to recalculate numbers of columns and rows. If you plan to remove + all children, use evas_object_grid_clear() instead. + + """ + if not evas_object_grid_unpack(self.obj, child.obj): + raise RuntimeError("Could not remove child from grid.") + + def clear(self, bint clear): + """clear(bool clear) + + Faster way to remove all child objects from a grid object. + + :param clear: if True, it will delete just removed children. + + """ + evas_object_grid_clear(self.obj, clear) + + def pack_get(self, Object child not None): + """pack_get(Object child) -> tuple + + Get the pack options for a grid child + + Get the pack x, y, width and height in virtual coordinates set by + evas_object_grid_pack() + + :param child: The grid child to query for coordinates + :return: (int **x**, int **y**, int **w**, int **h**) + :raise RuntimeError: if packing information could not be fetched. + + """ + cdef int x, y, w, h + if not evas_object_grid_pack_get(self.obj, child.obj, &x, &y, &w, &h): + raise RuntimeError("Could not get packing information for child.") + else: + return (x, y, w, h) + + property children: + """Get the list of children for the grid. + + :type: list + + """ + + cpdef children_get(self): + cdef: + Eina_List *lst = evas_object_grid_children_get(self.obj) + list ret = _object_list_to_python(lst) + eina_list_free(lst) + return ret diff --git a/include/efl.evas.pxd b/include/efl.evas.pxd index 58029b9..436374d 100644 --- a/include/efl.evas.pxd +++ b/include/efl.evas.pxd @@ -848,6 +848,23 @@ cdef extern from "Evas.h": Eina_List *evas_object_table_children_get(const_Evas_Object *o) Evas_Object *evas_object_table_child_get(const_Evas_Object *o, unsigned short col, unsigned short row) + #################################################################### + # Grid + # + Evas_Object *evas_object_grid_add(Evas *evas) + Evas_Object *evas_object_grid_add_to(Evas_Object *parent) + void evas_object_grid_size_set(Evas_Object *o, int w, int h) + void evas_object_grid_size_get(const_Evas_Object *o, int *w, int *h) + void evas_object_grid_mirrored_set(Evas_Object *o, Eina_Bool mirrored) + Eina_Bool evas_object_grid_mirrored_get(const_Evas_Object *o) + Eina_Bool evas_object_grid_pack(Evas_Object *o, Evas_Object *child, int x, int y, int w, int h) + Eina_Bool evas_object_grid_unpack(Evas_Object *o, Evas_Object *child) + void evas_object_grid_clear(Evas_Object *o, Eina_Bool clear) + Eina_Bool evas_object_grid_pack_get(const_Evas_Object *o, Evas_Object *child, int *x, int *y, int *w, int *h) + # FIXME: Is this needed? Eina_Iterator *evas_object_grid_iterator_new(const_Evas_Object *o) + # FIXME: Is this needed? Eina_Accessor *evas_object_grid_accessor_new(const_Evas_Object *o) + Eina_List *evas_object_grid_children_get(const_Evas_Object *o) + #################################################################### # Python classes