kuuko pushed a commit to branch master.
commit 9d5ed471a4cf7ee1affac2b8822bcdc264b611c5
Author: Kai Huuhko <[email protected]>
Date: Sun Apr 7 23:15:58 2013 +0000
Evas: Actually commit Textgrid code and TODO ++--.
Sleep++
---
TODO | 5 +-
efl/evas/object_textgrid.pxi | 436 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 438 insertions(+), 3 deletions(-)
diff --git a/TODO b/TODO
index 15bd0ad..97a8ad9 100644
--- a/TODO
+++ b/TODO
@@ -32,12 +32,11 @@ TODO
* include python-ethumb
* include python-e_dbus (or make edbus2 ??)
* elm.Notify align_set/get/prop
-* cleanup elementary_object
* Review the internal functions and name them consistently
* Add more documentation for the use of callbacks
* Document our use of exceptions
-* evas.TextGrid
-* Split Evas to individual modules
+* Split Evas to individual modules?
+* Tests for evas.Textgrid
IMAGES
diff --git a/efl/evas/object_textgrid.pxi b/efl/evas/object_textgrid.pxi
new file mode 100644
index 0000000..f10e728
--- /dev/null
+++ b/efl/evas/object_textgrid.pxi
@@ -0,0 +1,436 @@
+# 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 <http://www.gnu.org/licenses/>.
+
+"""
+
+Evas_Textgrid_Palette
+
+The palette to use for the forgraound and background colors.
+
+@since 1.7
+
+EVAS_TEXTGRID_PALETTE_NONE, /**< No palette is used */
+EVAS_TEXTGRID_PALETTE_STANDARD, /**< standard palette (around 16 colors) */
+EVAS_TEXTGRID_PALETTE_EXTENDED, /**< extended palette (at max 256 colors) */
+EVAS_TEXTGRID_PALETTE_LAST /**< ignore it */
+
+Evas_Textgrid_Font_Style
+
+The style to give to each character of the grid.
+
+@since 1.7
+
+EVAS_TEXTGRID_FONT_STYLE_NORMAL = (1 << 0), /**< Normal style */
+EVAS_TEXTGRID_FONT_STYLE_BOLD = (1 << 1), /**< Bold style */
+EVAS_TEXTGRID_FONT_STYLE_ITALIC = (1 << 2) /**< Oblique style */
+
+"""
+
+EVAS_TEXTGRID_PALETTE_NONE = enums.EVAS_TEXTGRID_PALETTE_NONE
+EVAS_TEXTGRID_PALETTE_STANDARD = enums.EVAS_TEXTGRID_PALETTE_STANDARD
+EVAS_TEXTGRID_PALETTE_EXTENDED = enums.EVAS_TEXTGRID_PALETTE_EXTENDED
+EVAS_TEXTGRID_PALETTE_LAST = enums.EVAS_TEXTGRID_PALETTE_LAST
+
+EVAS_TEXTGRID_FONT_STYLE_NORMAL = enums.EVAS_TEXTGRID_FONT_STYLE_NORMAL
+EVAS_TEXTGRID_FONT_STYLE_BOLD = enums.EVAS_TEXTGRID_FONT_STYLE_BOLD
+EVAS_TEXTGRID_FONT_STYLE_ITALIC = enums.EVAS_TEXTGRID_FONT_STYLE_ITALIC
+
+
+cdef class TextgridCell(object):
+ """
+
+ The values that describes each cell.
+
+ @since 1.7
+
+ """
+
+ cdef Evas_Textgrid_Cell cell
+
+ def __cinit__(self, Evas_Textgrid_Cell cell):
+ self.cell = cell
+
+ property codepoint:
+ """the UNICODE value of the character"""
+ def __set__(self, Eina_Unicode value):
+ self.cell.codepoint = value
+
+ def __get__(self):
+ return self.cell.codepoint
+
+ property fg:
+ """the index of the palette for the foreground color"""
+ def __set__(self, int value):
+ self.cell.fg = value
+
+ def __get__(self):
+ return self.cell.fg
+
+ property bg:
+ """the index of the palette for the background color"""
+ def __set__(self, int value):
+ self.cell.bg = value
+
+ def __get__(self):
+ return self.cell.bg
+
+ property bold:
+ """whether the character is bold"""
+ def __set__(self, bint value):
+ self.cell.bold = value
+
+ def __get__(self):
+ return self.cell.bold
+
+ property italic:
+ """whether the character is oblique"""
+ def __set__(self, bint value):
+ self.cell.italic = value
+
+ def __get__(self):
+ return self.cell.italic
+
+ property underline:
+ """whether the character is underlined"""
+ def __set__(self, bint value):
+ self.cell.underline = value
+
+ def __get__(self):
+ return self.cell.underline
+
+ property strikethrough:
+ """whether the character is strikethrough'ed"""
+ def __set__(self, bint value):
+ self.cell.strikethrough = value
+
+ def __get__(self):
+ return self.cell.strikethrough
+
+ property fg_extended:
+ """whether the extended palette is used for the foreground color"""
+ def __set__(self, bint value):
+ self.cell.fg_extended = value
+
+ def __get__(self):
+ return self.cell.fg_extended
+
+ property bg_extended:
+ """whether the extended palette is used for the background color"""
+ def __set__(self, bint value):
+ self.cell.bg_extended = value
+
+ def __get__(self):
+ return self.cell.bg_extended
+
+ property double_width:
+ """if the codepoint is merged with the following cell to the right
visually (cells must be in pairs with 2nd cell being a duplicate in all ways
except codepoint is 0)"""
+ def __set__(self, bint value):
+ self.cell.double_width = value
+
+ def __get__(self):
+ return self.cell.double_width
+
+
+
+cdef class Textgrid(Object):
+
+ def __init__(self, Canvas canvas not None):
+ """
+
+ Add a textgrid to the given Evas.
+
+ :param e: The given evas.
+ :return: The new textgrid object.
+
+ This function adds a new textgrid object to the Evas @p e and returns
the object.
+
+ @since 1.7
+
+ """
+ self._set_obj(evas_object_textgrid_add(canvas.obj))
+
+ property size:
+ """
+
+ The size of the textgrid object.
+
+ The number of lines @p h and the number
+ of columns @p w of the textgrid object. Values
+ less than or equal to 0 are ignored.
+
+ :type: (int w, int h)
+
+ @since 1.7
+
+ """
+ def __set__(self, value):
+ cdef int w, h
+ w, h = value
+ evas_object_textgrid_size_set(self.obj, w, h)
+
+ def __get__(self):
+ cdef int w, h
+ evas_object_textgrid_size_get(self.obj, &w, &h)
+ return (w, h)
+
+ property font_source:
+ """
+
+ The font (source) file used on a given textgrid object.
+
+ This allows the font file to be explicitly
+ set for the textgrid object, overriding system lookup, which
+ will first occur in the given file's contents. If
+ None or an empty string is assigned, or the same font_source has
already
+ been set, or on error, this does nothing.
+
+ :type: unicode
+
+ .. seealso:: font
+
+ @since 1.7
+
+ """
+ def __set__(self, font_source):
+ a1 = font_source
+ if isinstance(a1, unicode): a1 = a1.encode("UTF-8")
+ evas_object_textgrid_font_source_set(self.obj,
+ <const_char *>a1 if a1 is not None else NULL)
+
+ def __get__(self):
+ return _ctouni(evas_object_textgrid_font_source_get(self.obj))
+
+ property font:
+ """
+
+ The font family and size on a given textgrid object.
+
+ :param font_name: The font (family) name.
+ :param font_size: The font size, in points.
+
+ This function allows the font name @p font_name and size
+ @p font_size of the textgrid object @p obj to be set. The @p font_name
+ string has to follow fontconfig's convention on naming fonts, as
+ it's the underlying library used to query system fonts by Evas (see
+ the @c fc-list command's output, on your system, to get an
+ idea). It also has to be a monospace font. If @p font_name is
+ @c NULL, or if it is an empty string, or if @p font_size is less or
+ equal than 0, or on error, this function does nothing.
+
+ @see evas_object_textgrid_font_get()
+ @see evas_object_textgrid_font_source_set()
+ @see evas_object_textgrid_font_source_get()
+
+ @since 1.7
+
+ """
+ def __set__(self, value):
+ cdef Evas_Font_Size font_size
+ font_name, font_size = value
+ a1 = font_name
+ if isinstance(a1, unicode): a1 = a1.encode("UTF-8")
+ evas_object_textgrid_font_set(self.obj,
+ <const_char *>a1 if a1 is not None else NULL,
+ font_size)
+
+ def __get__(self):
+ cdef:
+ const_char *font_name
+ Evas_Font_Size font_size
+ evas_object_textgrid_font_get(self.obj, &font_name, &font_size)
+ # font_name is owned by Evas, don't free it
+ return (_ctouni(font_name), font_size)
+
+ property cell_size:
+ """
+
+ The size of a cell of the given textgrid object in pixels.
+
+ :param width: A pointer to the location to store the width in pixels
of a cell.
+ :param height: A pointer to the location to store the height in
+ pixels of a cell.
+
+ This functions retrieves the width and height, in pixels, of a cell
+ of the textgrid object @p obj and store them respectively in the
+ buffers @p width and @p height. Their value depends on the
+ monospace font used for the textgrid object, as well as the
+ style. @p width and @p height can be @c NULL. On error, they are
+ set to 0.
+
+ @see evas_object_textgrid_font_set()
+ @see evas_object_textgrid_supported_font_styles_set()
+
+ @since 1.7
+
+ """
+ def __get__(self):
+ cdef:
+ Evas_Coord w, h
+ evas_object_textgrid_cell_size_get(self.obj, &w, &h)
+ return (w, h)
+
+ def palette_set(self, Evas_Textgrid_Palette pal, int idx, int r, int g,
int b, int a):
+ """
+
+ The set color to the given palette at the given index of the given
textgrid object.
+
+ :param pal: The type of the palette to set the color.
+ :param idx: The index of the paletter to wich the color is stored.
+ :param r: The red component of the color.
+ :param g: The green component of the color.
+ :param b: The blue component of the color.
+ :param a: The alpha component of the color.
+
+ This function sets the color for the palette of type @p pal at the
+ index @p idx of the textgrid object @p obj. The ARGB components are
+ given by @p r, @p g, @p b and @p a. This color can be used when
+ setting the #Evas_Textgrid_Cell structure. The components must set
+ a pre-multiplied color. If pal is #EVAS_TEXTGRID_PALETTE_NONE or
+ #EVAS_TEXTGRID_PALETTE_LAST, or if @p idx is not between 0 and 255,
+ or on error, this function does nothing. The color components are
+ clamped between 0 and 255. If @p idx is greater than the latest set
+ color, the colors between this last index and @p idx - 1 are set to
+ black (0, 0, 0, 0).
+
+ @see evas_object_textgrid_palette_get()
+
+ @since 1.7
+
+ """
+ evas_object_textgrid_palette_set(self.obj, pal, idx, r, g, b, a)
+
+ def palette_get(self, Evas_Textgrid_Palette pal, int idx):
+ """
+
+ The retrieve color to the given palette at the given index of the
given textgrid object.
+
+ :param pal: The type of the palette to set the color.
+ :param idx: The index of the paletter to wich the color is stored.
+ :param r: A pointer to the red component of the color.
+ :param g: A pointer to the green component of the color.
+ :param b: A pointer to the blue component of the color.
+ :param a: A pointer to the alpha component of the color.
+
+ This function retrieves the color for the palette of type @p pal at the
+ index @p idx of the textgrid object @p obj. The ARGB components are
+ stored in the buffers @p r, @p g, @p b and @p a. If @p idx is not
+ between 0 and the index of the latest set color, or if @p pal is
+ #EVAS_TEXTGRID_PALETTE_NONE or #EVAS_TEXTGRID_PALETTE_LAST, the
+ values of the components are 0. @p r, @p g, @pb and @p a can be
+ @c NULL.
+
+ @see evas_object_textgrid_palette_set()
+
+ @since 1.7
+
+ """
+ cdef:
+ int r, g, b, a
+ evas_object_textgrid_palette_get(self.obj, pal, idx, &r, &g, &b, &a)
+ return (r, g, b, a)
+
+
+ property supported_font_styles:
+ """ TODO: document this """
+ def __set__(self, Evas_Textgrid_Font_Style styles):
+ evas_object_textgrid_supported_font_styles_set(self.obj, styles)
+
+ def __get__(self):
+ return evas_object_textgrid_supported_font_styles_get(self.obj)
+
+ def cellrow_set(self, int y, list row not None):
+ """
+
+ Set the string at the given row of the given textgrid object.
+
+ :param y: The row index of the grid.
+ :param row: The string as a sequence of #Evas_Textgrid_Cell.
+
+ This function returns cells to the textgrid taken by
+ evas_object_textgrid_cellrow_get(). The row pointer @p row should be
the
+ same row pointer returned by evas_object_textgrid_cellrow_get() for the
+ same row @p y.
+
+ @see evas_object_textgrid_cellrow_get()
+ @see evas_object_textgrid_size_set()
+ @see evas_object_textgrid_update_add()
+
+ @since 1.7
+
+ """
+ cdef TextgridCell cell = row[0]
+ evas_object_textgrid_cellrow_set(self.obj, y, &cell.cell)
+
+ def cellrow_get(self, int y, int w):
+ """
+
+ Get the string at the given row of the given textgrid object.
+
+ :param y: The row index of the grid.
+ :return: A pointer to the first cell of the given row.
+
+ This function returns a pointer to the first cell of the line @p y
+ of the textgrid object @p obj. If @p y is not between 0 and the
+ number of lines of the grid - 1, or on error, this function return @c
NULL.
+
+ @see evas_object_textgrid_cellrow_set()
+ @see evas_object_textgrid_size_set()
+ @see evas_object_textgrid_update_add()
+
+ @since 1.7
+
+ """
+ cdef:
+ Evas_Textgrid_Cell *row =
evas_object_textgrid_cellrow_get(self.obj, y)
+ int i
+ list ret = []
+
+ for i in range(w):
+ cell = TextgridCell.__new__(TextgridCell)
+ cell.cell = row[i]
+ ret.append(cell)
+
+ return ret
+
+ 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.
+
+ :param x: The rect region of cells top-left x (column)
+ :param y: The rect region of cells top-left y (row)
+ :param w: The rect region size in number of cells (columns)
+ :param h: The rect region size in number of cells (rows)
+
+ This function declares to evas that a region of cells was updated by
+ code and needs refreshing. An application should modify cells like this
+ as an example::
+
+ cells = tg.cellrow_get(row)
+ for i in range(0, width):
+ cells[i].codepoint = 'E'
+ tg.cellrow_set(row, cells)
+ tg.update_add(0, row, width, 1)
+
+ @see evas_object_textgrid_cellrow_set()
+ @see evas_object_textgrid_cellrow_get()
+ @see evas_object_textgrid_size_set()
+
+ @since 1.7
+
+ """
+ evas_object_textgrid_update_add(self.obj, x, y, w, h)
--
------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire
the most talented Cisco Certified professionals. Visit the
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html