python-efl/efl2/elementary/clock.pyx

329 lines
9.8 KiB
Cython

# Copyright (C) 2007-2014 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 3 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/>.
#
"""
Widget description
------------------
.. image:: /images/clock-preview.png
:align: left
This is a digital clock widget.
In its default theme, it has a vintage "flipping numbers clock" appearance,
which will animate sheets of individual algarisms individually as time goes
by.
A newly created clock will fetch system's time (already considering
local time adjustments) to start with, and will tick accordingly. It may
or may not show seconds.
Clocks have an **edition** mode. When in it, the sheets will display
extra arrow indications on the top and bottom and the user may click on
them to raise or lower the time values. After it's told to exit edition
mode, it will keep ticking with that new time set (it keeps the
difference from local time).
Also, when under edition mode, user clicks on the cited arrows which are
**held** for some time will make the clock to flip the sheet, thus
editing the time, continuously and automatically for the user. The
interval between sheet flips will keep growing in time, so that it helps
the user to reach a time which is distant from the one set.
The time display is, by default, in military mode (24h), but an am/pm
indicator may be optionally shown, too, when it will switch to 12h.
This widget emits the following signals, besides the ones sent from
:py:class:`~efl.elementary.layout_class.LayoutClass`:
- ``changed`` - the clock's user changed the time
- ``focused`` - When the clock has received focus. (since 1.8)
- ``unfocused`` - When the clock has lost focus. (since 1.8)
Enumerations
------------
.. _Elm_Clock_Edit_Mode:
Clock edit modes
================
.. data:: ELM_CLOCK_EDIT_DEFAULT
Default edit
.. data:: ELM_CLOCK_EDIT_HOUR_DECIMAL
Edit hours' decimal
.. data:: ELM_CLOCK_EDIT_HOUR_UNIT
Edit hours' unit
.. data:: ELM_CLOCK_EDIT_MIN_DECIMAL
Edit minutes' decimal
.. data:: ELM_CLOCK_EDIT_MIN_UNIT
Edit minutes' unit
.. data:: ELM_CLOCK_EDIT_SEC_DECIMAL
Edit seconds' decimal
.. data:: ELM_CLOCK_EDIT_SEC_UNIT
Edit seconds' unit
.. data:: ELM_CLOCK_EDIT_ALL
Edit all
"""
from efl.eo cimport _object_mapping_register
from efl.evas cimport Object as evasObject
from layout_class cimport LayoutClass
cimport enums
ELM_CLOCK_EDIT_DEFAULT = enums.ELM_CLOCK_EDIT_DEFAULT
ELM_CLOCK_EDIT_HOUR_DECIMAL = enums.ELM_CLOCK_EDIT_HOUR_DECIMAL
ELM_CLOCK_EDIT_HOUR_UNIT = enums.ELM_CLOCK_EDIT_HOUR_UNIT
ELM_CLOCK_EDIT_MIN_DECIMAL = enums.ELM_CLOCK_EDIT_MIN_DECIMAL
ELM_CLOCK_EDIT_MIN_UNIT = enums.ELM_CLOCK_EDIT_MIN_UNIT
ELM_CLOCK_EDIT_SEC_DECIMAL = enums.ELM_CLOCK_EDIT_SEC_DECIMAL
ELM_CLOCK_EDIT_SEC_UNIT = enums.ELM_CLOCK_EDIT_SEC_UNIT
ELM_CLOCK_EDIT_ALL = enums.ELM_CLOCK_EDIT_ALL
cdef class Clock(LayoutClass):
"""This is the class that actually implements the widget."""
def __init__(self, evasObject parent, *args, **kwargs):
self._set_obj(elm_clock_add(parent.obj))
self._set_properties_from_keyword_args(kwargs)
property time:
"""The clock widget's time
This property reflects the time that is showed by the clock widget.
Values **must** be set within the following ranges:
- 0 - 23, for hours
- 0 - 59, for minutes
- 0 - 59, for seconds,
even if the clock is not in "military" mode.
.. warning:: The behavior for values set out of those ranges is
**undefined**.
:type: (int **h**, int **m**, int **s**)
"""
def __get__(self):
cdef int hrs, min, sec
elm_clock_time_get(self.obj, &hrs, &min, &sec)
return (hrs, min, sec)
def __set__(self, value):
cdef int hrs, min, sec
hrs, min, sec = value
elm_clock_time_set(self.obj, hrs, min, sec)
def time_set(self, hours, minutes, seconds):
elm_clock_time_set(self.obj, hours, minutes, seconds)
def time_get(self):
cdef int hrs, min, sec
elm_clock_time_get(self.obj, &hrs, &min, &sec)
return (hrs, min, sec)
property edit:
"""Whether a given clock widget is under **edition mode** or under
(default) displaying-only mode.
This property reflects whether the clock editable or not **by user
interaction**. When in edition mode, clocks **stop** ticking, until
one brings them back to canonical mode. The :py:attr:`edit_mode`
property will influence which digits of the clock will be editable.
.. note:: am/pm sheets, if being shown, will **always** be editable
under edition mode.
:type: bool
"""
def __get__(self):
return bool(elm_clock_edit_get(self.obj))
def __set__(self, edit):
elm_clock_edit_set(self.obj, edit)
def edit_set(self, edit):
elm_clock_edit_set(self.obj, edit)
def edit_get(self, edit):
return bool(elm_clock_edit_get(self.obj))
property edit_mode:
"""Which digits of the given clock widget should be editable when in
edition mode.
:type: :ref:`Elm_Clock_Edit_Mode`
"""
def __get__(self):
return elm_clock_edit_mode_get(self.obj)
def __set__(self, mode):
elm_clock_edit_mode_set(self.obj, mode)
def edit_mode_set(self, mode):
elm_clock_edit_mode_set(self.obj, mode)
def edit_mode_get(self):
return elm_clock_edit_mode_get(self.obj)
property show_am_pm:
"""Whether the given clock widget must show hours in military or
am/pm mode
This property reflects if the clock must show hours in military or
am/pm mode. In some countries like Brazil the military mode
(00-24h-format) is used, in opposition to the USA, where the
am/pm mode is more commonly used.
``True``, if in am/pm mode, ``False`` if in military
:type: bool
"""
def __get__(self):
return elm_clock_show_am_pm_get(self.obj)
def __set__(self, am_pm):
elm_clock_show_am_pm_set(self.obj, am_pm)
def show_am_pm_set(self, am_pm):
elm_clock_show_am_pm_set(self.obj, am_pm)
def show_am_pm_get(self):
return elm_clock_show_am_pm_get(self.obj)
property show_seconds:
"""Whether the given clock widget must show time with seconds or not
By default, they are **not** shown.
:type: bool
"""
def __get__(self):
return elm_clock_show_seconds_get(self.obj)
def __set__(self, seconds):
elm_clock_show_seconds_set(self.obj, seconds)
def show_seconds_set(self, seconds):
elm_clock_show_seconds_set(self.obj, seconds)
def show_seconds_get(self):
return elm_clock_show_seconds_get(self.obj)
property first_interval:
"""The first interval on time updates for a user mouse button hold
on clock widgets' time edition.
This interval value is **decreased** while the user holds the
mouse pointer either incrementing or decrementing a given the
clock digit's value.
This helps the user to get to a given time distant from the
current one easier/faster, as it will start to flip quicker and
quicker on mouse button holds.
The calculation for the next flip interval value, starting from
the one set with this call, is the previous interval divided by
1.05, so it decreases a little bit.
The default starting interval value for automatic flips is
**0.85** seconds.
:type: float
"""
def __get__(self):
return elm_clock_first_interval_get(self.obj)
def __set__(self, interval):
elm_clock_first_interval_set(self.obj, interval)
def first_interval_set(self, interval):
elm_clock_first_interval_set(self.obj, interval)
def first_interval_get(self):
return elm_clock_first_interval_get(self.obj)
property pause:
""" The paused state of the clock widget
:type: bool
.. versionadded:: 1.9
"""
def __get__(self):
return bool(elm_clock_pause_get(self.obj))
def __set__(self, value):
elm_clock_pause_set(self.obj, value)
def pause_set(self, value):
elm_clock_pause_set(self.obj, value)
def pause_get(self):
return bool(elm_clock_pause_get(self.obj))
def callback_changed_add(self, func, *args, **kwargs):
"""The clock's user changed the time"""
self._callback_add("changed", func, *args, **kwargs)
def callback_changed_del(self, func):
self._callback_del("changed", func)
def callback_focused_add(self, func, *args, **kwargs):
"""When the clock has received focus.
.. versionadded:: 1.8
"""
self._callback_add("focused", func, *args, **kwargs)
def callback_focused_del(self, func):
self._callback_del("focused", func)
def callback_unfocused_add(self, func, *args, **kwargs):
"""When the clock has lost focus.
.. versionadded:: 1.8
"""
self._callback_add("unfocused", func, *args, **kwargs)
def callback_unfocused_del(self, func):
self._callback_del("unfocused", func)
_object_mapping_register("Elm_Clock", Clock)