forked from enlightenment/efl
From: Sumanth Krishna Mannam <sumanth.m@samsung.com>
Subject: [E-devel] [Patch] Elementary : New widget Elm_datetime patch Attached to the mail is the patch for new elementary widget elm_datetime. Refer to the below EFL post history for more details. The datetime widget provides an option to display Date & time based on current locale format and the user can edit them through dynamic Modules. Dynamic modules can be based on 1. Content Popup/diskselector based list 2. Elm_entry with ISE based input 3. Elm_Spinner based etc. Refer to the Screenshots: <1.ctxpopup_diskselector_UI> <2.entry_ise_UI> <3.spinner_selection_UI> Can someone review and push this patch to EFL repository? Change description: New widget Elm_datetime is added. Datetime widget displays the Date &Time fields and provides a customizable way to edit them. The widget is implemented in a modular fashion for date/time field inputs. Ctxpopup based input is proposed as the default selection module. Localization support based on Libc is also supported. Sign-Off By: Sumanth M.V.K <sumanth.m@samsug.com> SVN revision: 68696
This commit is contained in:
parent
7a8cef6b6f
commit
14df28cdae
|
@ -53,3 +53,4 @@ Hyunsil Park <hyunsil.park@samsung.com>
|
||||||
Goun Lee <gouni.lee@samsung.com>
|
Goun Lee <gouni.lee@samsung.com>
|
||||||
Mikael Sans <sans.mikael@gmail.com>
|
Mikael Sans <sans.mikael@gmail.com>
|
||||||
Doyoun Kang <doyoun.kang@samsung.com>
|
Doyoun Kang <doyoun.kang@samsung.com>
|
||||||
|
M.V.K. Sumanth <sumanth.m@samsung.com> <mvksumanth@gmail.com>
|
||||||
|
|
|
@ -26,7 +26,7 @@ group "Elm_Config" struct {
|
||||||
value "finger_size" int: 40;
|
value "finger_size" int: 40;
|
||||||
value "fps" double: 60.0;
|
value "fps" double: 60.0;
|
||||||
value "theme" string: "default";
|
value "theme" string: "default";
|
||||||
value "modules" string: "";
|
value "modules" string: "datetime_input_ctxpopup>datetime/api";
|
||||||
value "tooltip_delay" double: 1.0;
|
value "tooltip_delay" double: 1.0;
|
||||||
value "cursor_engine_only" uchar: 1;
|
value "cursor_engine_only" uchar: 1;
|
||||||
value "focus_highlight_enable" uchar: 0;
|
value "focus_highlight_enable" uchar: 0;
|
||||||
|
|
|
@ -30,7 +30,7 @@ group "Elm_Config" struct {
|
||||||
value "finger_size" int: 40;
|
value "finger_size" int: 40;
|
||||||
value "fps" double: 60.0;
|
value "fps" double: 60.0;
|
||||||
value "theme" string: "default";
|
value "theme" string: "default";
|
||||||
value "modules" string: "";
|
value "modules" string: "datetime_input_ctxpopup>datetime/api";
|
||||||
value "tooltip_delay" double: 1.0;
|
value "tooltip_delay" double: 1.0;
|
||||||
value "cursor_engine_only" uchar: 1;
|
value "cursor_engine_only" uchar: 1;
|
||||||
value "focus_highlight_enable" uchar: 0;
|
value "focus_highlight_enable" uchar: 0;
|
||||||
|
|
|
@ -711,6 +711,7 @@ src/lib/Elementary.h
|
||||||
src/bin/Makefile
|
src/bin/Makefile
|
||||||
src/modules/Makefile
|
src/modules/Makefile
|
||||||
src/modules/access_output/Makefile
|
src/modules/access_output/Makefile
|
||||||
|
src/modules/datetime_input_ctxpopup/Makefile
|
||||||
src/modules/test_entry/Makefile
|
src/modules/test_entry/Makefile
|
||||||
src/modules/test_map/Makefile
|
src/modules/test_map/Makefile
|
||||||
src/edje_externals/Makefile
|
src/edje_externals/Makefile
|
||||||
|
|
|
@ -324,6 +324,7 @@ collections {
|
||||||
#include "widgets/button.edc"
|
#include "widgets/button.edc"
|
||||||
#include "widgets/toggle.edc"
|
#include "widgets/toggle.edc"
|
||||||
#include "widgets/clock.edc"
|
#include "widgets/clock.edc"
|
||||||
|
#include "widgets/datetime.edc"
|
||||||
#include "widgets/menu.edc"
|
#include "widgets/menu.edc"
|
||||||
#include "widgets/frame.edc"
|
#include "widgets/frame.edc"
|
||||||
#include "widgets/tooltip.edc"
|
#include "widgets/tooltip.edc"
|
||||||
|
|
|
@ -0,0 +1,349 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// datetime
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define DATETIME_FIELD(_pos) \
|
||||||
|
part {\
|
||||||
|
name: "field"#_pos; \
|
||||||
|
type: SWALLOW; \
|
||||||
|
scale: 1;\
|
||||||
|
clip_to: "clipper";\
|
||||||
|
description { state: "default" 0.0; \
|
||||||
|
visible: 0;\
|
||||||
|
min: 0 0;\
|
||||||
|
align: 0.0 0.5;\
|
||||||
|
fixed: 1 0;\
|
||||||
|
rel1 {\
|
||||||
|
relative: 1.0 0.0;\
|
||||||
|
to: "separator"#_pos;\
|
||||||
|
}\
|
||||||
|
rel2 {\
|
||||||
|
relative: 1.0 1.0;\
|
||||||
|
to: "separator"#_pos;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
description { state: "enable" 0.0;\
|
||||||
|
inherit: "default" 0.0;\
|
||||||
|
visible: 1;\
|
||||||
|
min: 25 25;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
programs{\
|
||||||
|
program {\
|
||||||
|
name: "field_"#_pos"enabled";\
|
||||||
|
signal: "field"#_pos",enable";\
|
||||||
|
source: "elm";\
|
||||||
|
action: STATE_SET "enable" 0.0;\
|
||||||
|
target: "field"#_pos;\
|
||||||
|
}\
|
||||||
|
program {\
|
||||||
|
name: "field_"#_pos"disabled";\
|
||||||
|
signal: "field"#_pos",disable";\
|
||||||
|
source: "elm";\
|
||||||
|
action: STATE_SET "default" 0.0;\
|
||||||
|
target: "field"#_pos;\
|
||||||
|
}\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DATETIME_SEPARATOR(_pos,_after) \
|
||||||
|
part {\
|
||||||
|
name: "separator"#_pos; \
|
||||||
|
type: TEXT;\
|
||||||
|
scale: 1;\
|
||||||
|
description {\
|
||||||
|
state: "default" 0.0;\
|
||||||
|
visible: 0;\
|
||||||
|
min: 0 0;\
|
||||||
|
align: 0.0 0.5;\
|
||||||
|
fixed: 1 0;\
|
||||||
|
rel1 {\
|
||||||
|
relative: 1.0 0.0;\
|
||||||
|
to: "field"#_after;\
|
||||||
|
}\
|
||||||
|
rel2 {\
|
||||||
|
relative: 1.0 1.0;\
|
||||||
|
to: "field"#_after;\
|
||||||
|
}\
|
||||||
|
color: 100 100 100 255;\
|
||||||
|
text {\
|
||||||
|
font: "SLP:style=Roman";\
|
||||||
|
size: 13;\
|
||||||
|
min: 1 0;\
|
||||||
|
align: 0.2 0.5;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
description { state: "enable" 0.0;\
|
||||||
|
inherit: "default" 0.0;\
|
||||||
|
visible: 1;\
|
||||||
|
min: 13 25;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
programs {\
|
||||||
|
program {\
|
||||||
|
name: "separator"#_pos",enabled";\
|
||||||
|
signal: "field"#_after",enable";\
|
||||||
|
source: "elm";\
|
||||||
|
action: STATE_SET "enable" 0.0;\
|
||||||
|
target: "separator"#_pos;\
|
||||||
|
}\
|
||||||
|
program {\
|
||||||
|
name: "separator"#_pos",disabled";\
|
||||||
|
signal: "field"#_after",disable";\
|
||||||
|
source: "elm";\
|
||||||
|
action: STATE_SET "default" 0.0;\
|
||||||
|
target: "separator"#_pos;\
|
||||||
|
}\
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
group { name: "elm/datetime/base/default";
|
||||||
|
parts {
|
||||||
|
part {
|
||||||
|
name: "bg";
|
||||||
|
type: RECT;
|
||||||
|
scale: 1;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
color: 0 0 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part {
|
||||||
|
name: "separator0";
|
||||||
|
type: RECT;
|
||||||
|
scale: 1;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
visible: 0;
|
||||||
|
min: 13 25;
|
||||||
|
align: 0.0 0.5;
|
||||||
|
fixed: 1 0;
|
||||||
|
rel2 {
|
||||||
|
relative: 0.0 1.0;
|
||||||
|
to: "bg";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DATETIME_FIELD(0)
|
||||||
|
DATETIME_SEPARATOR(1,0)
|
||||||
|
DATETIME_FIELD(1)
|
||||||
|
DATETIME_SEPARATOR(2,1)
|
||||||
|
DATETIME_FIELD(2)
|
||||||
|
DATETIME_SEPARATOR(3,2)
|
||||||
|
DATETIME_FIELD(3)
|
||||||
|
DATETIME_SEPARATOR(4,3)
|
||||||
|
DATETIME_FIELD(4)
|
||||||
|
DATETIME_SEPARATOR(5,4)
|
||||||
|
DATETIME_FIELD(5)
|
||||||
|
DATETIME_SEPARATOR(6,5)
|
||||||
|
part {
|
||||||
|
name: "clipper";
|
||||||
|
type: RECT;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
rel1 {
|
||||||
|
relative: 0.0 0.0;
|
||||||
|
to: "separator0";
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
to: "separator6";
|
||||||
|
}
|
||||||
|
color: 255 255 255 255;
|
||||||
|
}
|
||||||
|
description { state: "enable" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
color: 255 255 255 127;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part {
|
||||||
|
name: "disabler";
|
||||||
|
type: RECT;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
color: 0 0 0 0;
|
||||||
|
visible: 0;
|
||||||
|
}
|
||||||
|
description { state: "visible" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
programs {
|
||||||
|
program {
|
||||||
|
name: "disble_datetime";
|
||||||
|
signal: "elm,state,disabled";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "visible" 0.0;
|
||||||
|
target: "disabler";
|
||||||
|
target: "clipper";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "enable_datetime";
|
||||||
|
signal: "elm,state,enabled";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "disabler";
|
||||||
|
target: "clipper";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//end datetime group
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// diskselector item : datetime style
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
group { name: "elm/diskselector/item/datetime/default";
|
||||||
|
data {
|
||||||
|
item: "len_threshold" "10";
|
||||||
|
item: "min_height" "-1";
|
||||||
|
item: "min_width" "-1";
|
||||||
|
}
|
||||||
|
parts {
|
||||||
|
part {
|
||||||
|
name: "elm.text";
|
||||||
|
type: TEXT;
|
||||||
|
mouse_events: 0;
|
||||||
|
scale: 1;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
min: 25 25;
|
||||||
|
fixed: 1 1;
|
||||||
|
align: 0.0 0.0;
|
||||||
|
color: 172 172 172 255;
|
||||||
|
visible: 1;
|
||||||
|
text {
|
||||||
|
font: "Sans,Edje-Vera";
|
||||||
|
size: 13;
|
||||||
|
min: 1 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description {
|
||||||
|
state: "center_sel" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
color: 255 255 255 255;
|
||||||
|
}
|
||||||
|
description { state: "left_side" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
color: 152 152 152 255;
|
||||||
|
text.size: 10;
|
||||||
|
text.align: 0.2 0.5;
|
||||||
|
}
|
||||||
|
description { state: "left_side_sel" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
color: 255 255 255 255;
|
||||||
|
text.size: 10;
|
||||||
|
text.align: 0.2 0.5;
|
||||||
|
}
|
||||||
|
description { state: "right_side" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
color: 152 152 152 255;
|
||||||
|
text.size: 10;
|
||||||
|
text.align: 0.8 0.5;
|
||||||
|
}
|
||||||
|
description { state: "right_side_sel" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
color: 255 255 255 255;
|
||||||
|
text.size: 10;
|
||||||
|
text.align: 0.8 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part {
|
||||||
|
name: "over1";
|
||||||
|
mouse_events: 1;
|
||||||
|
repeat_events: 1;
|
||||||
|
ignore_flags: ON_HOLD;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
programs {
|
||||||
|
script {
|
||||||
|
public field_pos; // center = 0,left = 1, right =2.
|
||||||
|
public field_selected; //field is selected(1) or not(0).
|
||||||
|
|
||||||
|
public update_state() {
|
||||||
|
new pos, is_sel;
|
||||||
|
pos = get_int(field_pos)
|
||||||
|
is_sel = get_int(field_selected);
|
||||||
|
|
||||||
|
if (is_sel == 1)
|
||||||
|
{
|
||||||
|
if (pos == 0)
|
||||||
|
set_state(PART:"elm.text", "center_sel", 0.0);
|
||||||
|
else if (pos == 1)
|
||||||
|
set_state(PART:"elm.text", "left_side_sel", 0.0);
|
||||||
|
else if (pos == 2)
|
||||||
|
set_state(PART:"elm.text", "right_side_sel", 0.0);
|
||||||
|
}
|
||||||
|
else if (is_sel == 0)
|
||||||
|
{
|
||||||
|
if (pos == 0)
|
||||||
|
set_state(PART:"elm.text", "default", 0.0);
|
||||||
|
else if (pos == 1)
|
||||||
|
set_state(PART:"elm.text", "left_side", 0.0);
|
||||||
|
else if (pos == 2)
|
||||||
|
set_state(PART:"elm.text", "right_side", 0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "selected_text";
|
||||||
|
signal: "elm,state,selected";
|
||||||
|
source: "elm";
|
||||||
|
script {
|
||||||
|
set_int(field_selected, 1);
|
||||||
|
update_state();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "default_text";
|
||||||
|
signal: "elm,state,default";
|
||||||
|
source: "elm";
|
||||||
|
script {
|
||||||
|
set_int(field_selected, 0);
|
||||||
|
update_state();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program { name: "center_text";
|
||||||
|
signal: "elm,state,center";
|
||||||
|
source: "elm";
|
||||||
|
script {
|
||||||
|
set_int(field_pos, 0);
|
||||||
|
update_state();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program { name: "center_small_text";
|
||||||
|
signal: "elm,state,center_small";
|
||||||
|
source: "elm";
|
||||||
|
script {
|
||||||
|
set_int(field_pos, 0);
|
||||||
|
update_state();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program { name: "l_side_text";
|
||||||
|
signal: "elm,state,left_side";
|
||||||
|
source: "elm";
|
||||||
|
script {
|
||||||
|
set_int(field_pos, 1);
|
||||||
|
update_state();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program { name: "r_side_text";
|
||||||
|
signal: "elm,state,right_side";
|
||||||
|
source: "elm";
|
||||||
|
script {
|
||||||
|
set_int(field_pos, 2);
|
||||||
|
update_state();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "field_click";
|
||||||
|
signal: "mouse,clicked,1";
|
||||||
|
source: "over1";
|
||||||
|
action: SIGNAL_EMIT "elm,action,click" "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// end of datetime style
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
|
@ -33,6 +33,9 @@ WGT_PREVIEW = \
|
||||||
frame:preview-00.png:widget_preview_frame:100:50 \
|
frame:preview-00.png:widget_preview_frame:100:50 \
|
||||||
label:preview-00.png:widget_preview_label:70:30 \
|
label:preview-00.png:widget_preview_label:70:30 \
|
||||||
clock:preview-00.png:widget_preview_clock:200:100 \
|
clock:preview-00.png:widget_preview_clock:200:100 \
|
||||||
|
datetime:preview-00.png:widget_preview_datetime1:360:60 \
|
||||||
|
datetime:preview-01.png:widget_preview_datetime2:200:60 \
|
||||||
|
datetime:preview-02.png:widget_preview_datetime3:200:60 \
|
||||||
slider:preview-00.png:widget_preview_slider:200:100 \
|
slider:preview-00.png:widget_preview_slider:200:100 \
|
||||||
panes:preview-00.png:widget_preview_panes:200:100 \
|
panes:preview-00.png:widget_preview_panes:200:100 \
|
||||||
toolbar:preview-00.png:widget_preview_toolbar:300:100 \
|
toolbar:preview-00.png:widget_preview_toolbar:300:100 \
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
*
|
*
|
||||||
* @ref clock_example
|
* @ref clock_example
|
||||||
*
|
*
|
||||||
|
* @ref datetime_example
|
||||||
|
*
|
||||||
* @ref mapbuf_example
|
* @ref mapbuf_example
|
||||||
|
|
||||||
* @ref map_example_01
|
* @ref map_example_01
|
||||||
|
@ -1697,6 +1699,51 @@
|
||||||
* @example clock_example.c
|
* @example clock_example.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @page datetime_example Datetime widget example
|
||||||
|
*
|
||||||
|
* This code places three Elementary Datetime widgets on a window, each of
|
||||||
|
* them exemplifying the widget's different usage.
|
||||||
|
*
|
||||||
|
* The first of them is <b>"only Date display"</b>:
|
||||||
|
* @dontinclude datetime_example.c
|
||||||
|
* @skip only DATE
|
||||||
|
* @until evas_object_show
|
||||||
|
*
|
||||||
|
* For <b>"only Time display"</b>, see the second datetime:
|
||||||
|
* @dontinclude datetime_example.c
|
||||||
|
* @skip only TIME
|
||||||
|
* @until evas_object_show
|
||||||
|
*
|
||||||
|
* The third one will display datetime shows both <b>Date and Time</b>, corresponding format will be
|
||||||
|
* taken from system @b locale. Note, besides, that the strings are different
|
||||||
|
* for different language settings.
|
||||||
|
*
|
||||||
|
* <b>Datetime format</b> can be programmatically set by using
|
||||||
|
* elm_datetime_format_set():
|
||||||
|
* @dontinclude datetime_example.c
|
||||||
|
* @skip DATE and TIME
|
||||||
|
* @until evas_object_show
|
||||||
|
* The default format of any locale consists:
|
||||||
|
* - Year Field
|
||||||
|
* - Month Field
|
||||||
|
* - Date Field
|
||||||
|
* - Hour Field(12hr/24hr format)
|
||||||
|
* - Minute Field
|
||||||
|
* - AM/PM (if exists).
|
||||||
|
*
|
||||||
|
* This is how the example program's window looks like with the datetime widget
|
||||||
|
* showing only date, only time and both date & time:
|
||||||
|
*
|
||||||
|
* @image html screenshots/datetime_example.png
|
||||||
|
* @image latex screenshots/datetime_example.eps width=\textwidth
|
||||||
|
*
|
||||||
|
* See the full @ref datetime_example_c "source code" for
|
||||||
|
* this example.
|
||||||
|
*
|
||||||
|
* @example datetime_example.c
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @page mapbuf_example Mapbuf Widget Example
|
* @page mapbuf_example Mapbuf Widget Example
|
||||||
*
|
*
|
||||||
|
@ -6164,6 +6211,12 @@
|
||||||
* @example clock_example.c
|
* @example clock_example.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @page datetime_example_c Datetime example
|
||||||
|
* @include datetime_example.c
|
||||||
|
* @example datetime_example.c
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @page flipselector_example_c Flipselector example
|
* @page flipselector_example_c Flipselector example
|
||||||
* @include flipselector_example.c
|
* @include flipselector_example.c
|
||||||
|
|
|
@ -83,6 +83,10 @@
|
||||||
*
|
*
|
||||||
* @image html img/widget/ctxpopup/preview-00.png
|
* @image html img/widget/ctxpopup/preview-00.png
|
||||||
* @image latex img/widget/ctxpopup/preview-00.eps
|
* @image latex img/widget/ctxpopup/preview-00.eps
|
||||||
|
* @li @ref Datetime
|
||||||
|
*
|
||||||
|
* @image html img/widget/datetime/preview-00.png
|
||||||
|
* @image latex img/widget/datetime/preview-00.eps
|
||||||
* @li @ref Diskselector
|
* @li @ref Diskselector
|
||||||
*
|
*
|
||||||
* @image html img/widget/diskselector/preview-00.png
|
* @image html img/widget/diskselector/preview-00.png
|
||||||
|
|
|
@ -32,6 +32,9 @@ widget_preview_spinner \
|
||||||
widget_preview_bubble1 \
|
widget_preview_bubble1 \
|
||||||
widget_preview_bubble2 \
|
widget_preview_bubble2 \
|
||||||
widget_preview_bubble3 \
|
widget_preview_bubble3 \
|
||||||
|
widget_preview_datetime1 \
|
||||||
|
widget_preview_datetime2 \
|
||||||
|
widget_preview_datetime3 \
|
||||||
widget_preview_fileselector_button1 \
|
widget_preview_fileselector_button1 \
|
||||||
widget_preview_fileselector_button2 \
|
widget_preview_fileselector_button2 \
|
||||||
widget_preview_fileselector_button3 \
|
widget_preview_fileselector_button3 \
|
||||||
|
@ -122,6 +125,9 @@ EXTRA_DIST = \
|
||||||
widget_preview_mapbuf.c \
|
widget_preview_mapbuf.c \
|
||||||
widget_preview_map.c \
|
widget_preview_map.c \
|
||||||
widget_preview_ctxpopup.c \
|
widget_preview_ctxpopup.c \
|
||||||
|
widget_preview_datetime1.c \
|
||||||
|
widget_preview_datetime2.c \
|
||||||
|
widget_preview_datetime3.c \
|
||||||
widget_preview_diskselector.c \
|
widget_preview_diskselector.c \
|
||||||
widget_preview_entry1.c \
|
widget_preview_entry1.c \
|
||||||
widget_preview_entry2.c \
|
widget_preview_entry2.c \
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include "widget_preview_tmpl_head.c"
|
||||||
|
|
||||||
|
Evas_Object *bx = elm_box_add(win);
|
||||||
|
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
elm_win_resize_object_add(win, bx);
|
||||||
|
evas_object_show(bx);
|
||||||
|
evas_object_size_hint_min_set(bx, 360, 60);
|
||||||
|
|
||||||
|
Evas_Object *datetime = elm_datetime_add(win);
|
||||||
|
evas_object_size_hint_weight_set(datetime, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_align_set(datetime, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
elm_box_pack_end(bx, datetime);
|
||||||
|
evas_object_show(datetime);
|
||||||
|
|
||||||
|
#include "widget_preview_tmpl_foot.c"
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "widget_preview_tmpl_head.c"
|
||||||
|
|
||||||
|
Evas_Object *bx = elm_box_add(win);
|
||||||
|
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
elm_win_resize_object_add(win, bx);
|
||||||
|
evas_object_show(bx);
|
||||||
|
evas_object_size_hint_min_set(bx, 200, 60);
|
||||||
|
|
||||||
|
Evas_Object *datetime = elm_datetime_add(win);
|
||||||
|
evas_object_size_hint_weight_set(datetime, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_align_set(datetime, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_HOUR, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_MINUTE, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_AMPM, EINA_FALSE);
|
||||||
|
elm_box_pack_end(bx, datetime);
|
||||||
|
evas_object_show(datetime);
|
||||||
|
|
||||||
|
#include "widget_preview_tmpl_foot.c"
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "widget_preview_tmpl_head.c"
|
||||||
|
|
||||||
|
Evas_Object *bx = elm_box_add(win);
|
||||||
|
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
elm_win_resize_object_add(win, bx);
|
||||||
|
evas_object_show(bx);
|
||||||
|
evas_object_size_hint_min_set(bx, 200, 60);
|
||||||
|
|
||||||
|
Evas_Object *datetime = elm_datetime_add(win);
|
||||||
|
evas_object_size_hint_weight_set(datetime, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_align_set(datetime, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_YEAR, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_MONTH, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_DATE, EINA_FALSE);
|
||||||
|
elm_box_pack_end(bx, datetime);
|
||||||
|
evas_object_show(datetime);
|
||||||
|
|
||||||
|
#include "widget_preview_tmpl_foot.c"
|
|
@ -48,6 +48,7 @@ test_colorselector.c \
|
||||||
test_conform.c \
|
test_conform.c \
|
||||||
test_ctxpopup.c \
|
test_ctxpopup.c \
|
||||||
test_cursor.c \
|
test_cursor.c \
|
||||||
|
test_datetime.c \
|
||||||
test_diskselector.c \
|
test_diskselector.c \
|
||||||
test_entry.c \
|
test_entry.c \
|
||||||
test_factory.c \
|
test_factory.c \
|
||||||
|
|
|
@ -163,6 +163,7 @@ void test_glview(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_3d(void *data, Evas_Object *obj, void *event_info);
|
void test_3d(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_naviframe(void *data, Evas_Object *obj, void *event_info);
|
void test_naviframe(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_factory(void *data, Evas_Object *obj, void *event_info);
|
void test_factory(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
void test_datetime(void *data, Evas_Object *obj, void *event_info);
|
||||||
#ifdef HAVE_EMOTION
|
#ifdef HAVE_EMOTION
|
||||||
void test_video(void *data, Evas_Object *obj, void *event_info);
|
void test_video(void *data, Evas_Object *obj, void *event_info);
|
||||||
#endif
|
#endif
|
||||||
|
@ -508,6 +509,7 @@ add_tests:
|
||||||
ADD_TEST(NULL, "Times & Dates", "Clock", test_clock);
|
ADD_TEST(NULL, "Times & Dates", "Clock", test_clock);
|
||||||
ADD_TEST(NULL, "Times & Dates", "Clock 2", test_clock2);
|
ADD_TEST(NULL, "Times & Dates", "Clock 2", test_clock2);
|
||||||
ADD_TEST(NULL, "Times & Dates", "Clock 3", test_clock3);
|
ADD_TEST(NULL, "Times & Dates", "Clock 3", test_clock3);
|
||||||
|
ADD_TEST(NULL, "Times & Dates", "Datetime", test_datetime);
|
||||||
|
|
||||||
//------------------------------//
|
//------------------------------//
|
||||||
ADD_TEST(NULL, "Text", "Anchorview", test_anchorview);
|
ADD_TEST(NULL, "Text", "Anchorview", test_anchorview);
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
#include <Elementary.h>
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "elementary_config.h"
|
||||||
|
#endif
|
||||||
|
#ifndef ELM_LIB_QUICKLAUNCH
|
||||||
|
|
||||||
|
/* A simple test, just displaying datetime in its default format */
|
||||||
|
|
||||||
|
static void
|
||||||
|
_changed_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
printf("Datetime value is changed\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_datetime(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Evas_Object *win, *bg, *bx, *datetime;
|
||||||
|
time_t t;
|
||||||
|
struct tm time1;
|
||||||
|
|
||||||
|
win = elm_win_add(NULL, "Datetime", ELM_WIN_BASIC);
|
||||||
|
elm_win_title_set(win, "Datetime");
|
||||||
|
elm_win_autodel_set(win, 1);
|
||||||
|
|
||||||
|
bg = elm_bg_add(win);
|
||||||
|
elm_win_resize_object_add(win, bg);
|
||||||
|
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_show(bg);
|
||||||
|
|
||||||
|
bx = elm_box_add(win);
|
||||||
|
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
elm_win_resize_object_add(win, bx);
|
||||||
|
elm_box_horizontal_set(bx, EINA_FALSE);
|
||||||
|
evas_object_show(bx);
|
||||||
|
evas_object_size_hint_min_set(bx, 360, 240);
|
||||||
|
|
||||||
|
datetime = elm_datetime_add(bx);
|
||||||
|
evas_object_size_hint_weight_set(datetime, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_align_set(datetime, EVAS_HINT_FILL, 0.5);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_HOUR, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_MINUTE, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_AMPM, EINA_FALSE);
|
||||||
|
elm_box_pack_end(bx, datetime);
|
||||||
|
evas_object_show(datetime);
|
||||||
|
|
||||||
|
datetime = elm_datetime_add(bx);
|
||||||
|
evas_object_size_hint_weight_set(datetime, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_align_set(datetime, EVAS_HINT_FILL, 0.5);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_YEAR, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_MONTH, EINA_FALSE);
|
||||||
|
elm_datetime_field_visible_set(datetime, ELM_DATETIME_DATE, EINA_FALSE);
|
||||||
|
elm_box_pack_end(bx, datetime);
|
||||||
|
evas_object_show(datetime);
|
||||||
|
|
||||||
|
datetime = elm_datetime_add(bx);
|
||||||
|
evas_object_size_hint_weight_set(datetime, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_align_set(datetime, EVAS_HINT_FILL, 0.5);
|
||||||
|
|
||||||
|
// get the current local time
|
||||||
|
t = time(NULL);
|
||||||
|
localtime_r(&t, &time1);
|
||||||
|
// set the max year as 2030 and the remaining fields are equal to current time values
|
||||||
|
time1.tm_year = 130;
|
||||||
|
elm_datetime_value_max_set(datetime, &time1);
|
||||||
|
// set the min time limit as "1980 January 10th 02:30 PM"
|
||||||
|
time1.tm_year = 80;
|
||||||
|
time1.tm_mon = 4;
|
||||||
|
time1.tm_mday = 10;
|
||||||
|
time1.tm_hour = 14;
|
||||||
|
time1.tm_min = 30;
|
||||||
|
elm_datetime_value_min_set(datetime, &time1);
|
||||||
|
// minutes can be input only in between 15 and 45
|
||||||
|
elm_datetime_field_limit_set(datetime, ELM_DATETIME_MINUTE, 15, 45);
|
||||||
|
evas_object_smart_callback_add(datetime, "changed", _changed_cb, datetime);
|
||||||
|
elm_box_pack_end(bx, datetime);
|
||||||
|
evas_object_show(datetime);
|
||||||
|
|
||||||
|
evas_object_show(win);
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -61,6 +61,7 @@ SRCS = \
|
||||||
calendar_example_04.c \
|
calendar_example_04.c \
|
||||||
calendar_example_05.c \
|
calendar_example_05.c \
|
||||||
calendar_example_06.c \
|
calendar_example_06.c \
|
||||||
|
datetime_example.c \
|
||||||
map_example_01.c \
|
map_example_01.c \
|
||||||
map_example_02.c \
|
map_example_02.c \
|
||||||
map_example_03.c \
|
map_example_03.c \
|
||||||
|
@ -170,6 +171,7 @@ examples_PROGRAMS += \
|
||||||
calendar_example_04 \
|
calendar_example_04 \
|
||||||
calendar_example_05 \
|
calendar_example_05 \
|
||||||
calendar_example_06 \
|
calendar_example_06 \
|
||||||
|
datetime_example \
|
||||||
map_example_01 \
|
map_example_01 \
|
||||||
map_example_02 \
|
map_example_02 \
|
||||||
map_example_03 \
|
map_example_03 \
|
||||||
|
@ -259,6 +261,7 @@ SCREENSHOTS = \
|
||||||
calendar_example_04:calendar_example_04.png:0.0 \
|
calendar_example_04:calendar_example_04.png:0.0 \
|
||||||
calendar_example_05:calendar_example_05.png:0.0 \
|
calendar_example_05:calendar_example_05.png:0.0 \
|
||||||
calendar_example_06:calendar_example_06.png:0.0 \
|
calendar_example_06:calendar_example_06.png:0.0 \
|
||||||
|
datetime_example:datetime_example.png:0.0 \
|
||||||
map_example_01:map_example_01.png:2 \
|
map_example_01:map_example_01.png:2 \
|
||||||
map_example_02:map_example_02.png:2.5 \
|
map_example_02:map_example_02.png:2.5 \
|
||||||
map_example_03:map_example_03.png:2 \
|
map_example_03:map_example_03.png:2 \
|
||||||
|
|
|
@ -189,6 +189,7 @@ EAPI extern Elm_Version *elm_version;
|
||||||
#include <elm_config.h>
|
#include <elm_config.h>
|
||||||
#include <elm_conform.h> // XXX: comments in elm_conform.h
|
#include <elm_conform.h> // XXX: comments in elm_conform.h
|
||||||
#include <elm_cursor.h> // XXX: comments in elm_cursor.h. review was not finished.
|
#include <elm_cursor.h> // XXX: comments in elm_cursor.h. review was not finished.
|
||||||
|
#include <elm_datetime.h>
|
||||||
#include <elm_debug.h> // OK
|
#include <elm_debug.h> // OK
|
||||||
#include <elm_diskselector.h>
|
#include <elm_diskselector.h>
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ elm_colorselector.h \
|
||||||
elm_config.h \
|
elm_config.h \
|
||||||
elm_conform.h \
|
elm_conform.h \
|
||||||
elm_cursor.h \
|
elm_cursor.h \
|
||||||
|
elm_datetime.h \
|
||||||
elm_debug.h \
|
elm_debug.h \
|
||||||
elm_deprecated.h \
|
elm_deprecated.h \
|
||||||
elm_deprecated_before.h \
|
elm_deprecated_before.h \
|
||||||
|
@ -162,6 +163,7 @@ elm_cnp.c \
|
||||||
elm_colorselector.c \
|
elm_colorselector.c \
|
||||||
elm_config.c \
|
elm_config.c \
|
||||||
elm_conform.c \
|
elm_conform.c \
|
||||||
|
elm_datetime.c \
|
||||||
elm_diskselector.c \
|
elm_diskselector.c \
|
||||||
elm_entry.c \
|
elm_entry.c \
|
||||||
elm_factory.c \
|
elm_factory.c \
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,596 @@
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup Datetime Datetime
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @image html img/widget/datetime/preview-00.png
|
||||||
|
* @image latex img/widget/datetime/preview-00.eps
|
||||||
|
*
|
||||||
|
* @image html img/widget/datetime/preview-01.png
|
||||||
|
* @image latex img/widget/datetime/preview-01.eps
|
||||||
|
*
|
||||||
|
* @image html img/widget/datetime/preview-02.png
|
||||||
|
* @image latex img/widget/datetime/preview-02.eps
|
||||||
|
*
|
||||||
|
* Datetime widget is used to display and input date & time values.
|
||||||
|
* This widget displays date and time as per the <b>system's locale</b> settings (Date
|
||||||
|
* includes Day, Month & Year along with the defined separators and
|
||||||
|
* Time includes Hour, Minute & AM/PM fields. Separator for AM/PM field is ignored.
|
||||||
|
*
|
||||||
|
* The corresponding Month, AM/PM strings are displayed according to the
|
||||||
|
* system’s language settings.
|
||||||
|
*
|
||||||
|
* Datetime format is a combination of LIBC standard characters like
|
||||||
|
* “%%d %%b %%Y %%I : %%M %%p” which, as a whole represents both Date as well as Time
|
||||||
|
* format.
|
||||||
|
*
|
||||||
|
* Elm_datetime supports only the following sub set of libc date format specifiers:
|
||||||
|
*
|
||||||
|
* @b %%Y : The year as a decimal number including the century (example: 2011).
|
||||||
|
*
|
||||||
|
* @b %%y : The year as a decimal number without a century (range 00 to 99)
|
||||||
|
*
|
||||||
|
* @b %%m : The month as a decimal number (range 01 to 12).
|
||||||
|
*
|
||||||
|
* @b %%b : The abbreviated month name according to the current locale.
|
||||||
|
*
|
||||||
|
* @b %%B : The full month name according to the current locale.
|
||||||
|
*
|
||||||
|
* @b %%h : The abbreviated month name according to the current locale(same as %%b).
|
||||||
|
*
|
||||||
|
* @b %%d : The day of the month as a decimal number (range 01 to 31).
|
||||||
|
*
|
||||||
|
* @b %%e : The day of the month as a decimal number (range 1 to 31). single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%I : The hour as a decimal number using a 12-hour clock (range 01 to 12).
|
||||||
|
*
|
||||||
|
* @b %%H : The hour as a decimal number using a 24-hour clock (range 00 to 23).
|
||||||
|
*
|
||||||
|
* @b %%k : The hour (24-hour clock) as a decimal number (range 0 to 23). single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%l : The hour (12-hour clock) as a decimal number (range 1 to 12); single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%M : The minute as a decimal number (range 00 to 59).
|
||||||
|
*
|
||||||
|
* @b %%p : Either 'AM' or 'PM' according to the given time value, or the
|
||||||
|
* corresponding strings for the current locale. Noon is treated as 'PM'
|
||||||
|
* and midnight as 'AM'
|
||||||
|
*
|
||||||
|
* @b %%P : Like %p but in lower case: 'am' or 'pm' or a corresponding string for
|
||||||
|
* the current locale.
|
||||||
|
*
|
||||||
|
* @b %%c : The preferred date and time representation for the current locale.
|
||||||
|
*
|
||||||
|
* @b %%x : The preferred date representation for the current locale without the time.
|
||||||
|
*
|
||||||
|
* @b %%X : The preferred time representation for the current locale without the date.
|
||||||
|
*
|
||||||
|
* @b %%r : The complete calendar time using the AM/PM format of the current locale.
|
||||||
|
*
|
||||||
|
* @b %%R : The hour and minute in decimal numbers using the format %H:%M.
|
||||||
|
*
|
||||||
|
* @b %%T : The time of day in decimal numbers using the format %H:%M:%S.
|
||||||
|
*
|
||||||
|
* @b %%D : The date using the format %%m/%%d/%%y.
|
||||||
|
*
|
||||||
|
* @b %%F : The date using the format %%Y-%%m-%%d.
|
||||||
|
*
|
||||||
|
* (For more reference on the available <b>LIBC date format specifiers</b>, please
|
||||||
|
* visit the link:
|
||||||
|
* http://www.gnu.org/s/hello/manual/libc.html#Formatting-Calendar-Time )
|
||||||
|
*
|
||||||
|
* Datetime widget can provide Unicode @b separators in between its fields
|
||||||
|
* except for AM/PM field.
|
||||||
|
* A separator can be any <b>Unicode character</b> other than the LIBC standard
|
||||||
|
* date format specifiers.( Example: In the format %%b %%d @b , %%y %%H @b : %%M
|
||||||
|
* comma(,) is separator for date field %%d and colon(:) is separator for
|
||||||
|
* hour field %%H ).
|
||||||
|
*
|
||||||
|
* The default format is a predefined one, based on the system Locale.
|
||||||
|
*
|
||||||
|
* Hour format 12hr(1-12) or 24hr(0-23) display can be selected by setting
|
||||||
|
* the corresponding user format.
|
||||||
|
*
|
||||||
|
* Datetime supports six fields: Year, Month, Date, Hour, Minute, AM/PM.
|
||||||
|
* Depending on the Datetime module that is loaded, the user can see
|
||||||
|
* different UI to select the individual field values.
|
||||||
|
*
|
||||||
|
* The individual fields of Datetime can be arranged in any order according to the format
|
||||||
|
* set by application.
|
||||||
|
*
|
||||||
|
* There is a provision to set the visibility of a particular field as TRUE/ FALSE
|
||||||
|
* so that <b>only time/ only date / only required fields</b> will be displayed.
|
||||||
|
*
|
||||||
|
* Each field is having a default minimum and maximum values just like the daily
|
||||||
|
* calendar information. These min/max values can be modified as per the application usage.
|
||||||
|
*
|
||||||
|
* User can enter the values only in between the range of maximum and minimum.
|
||||||
|
* Apart from these APIs, there is a provision to display only a limited set of
|
||||||
|
* values out of the possible values. APIs to select the individual field limits
|
||||||
|
* are intended for this purpose.
|
||||||
|
*
|
||||||
|
* The whole widget is left aligned and its size grows horizontally depending
|
||||||
|
* on the current format and each field's visible/disabled state.
|
||||||
|
*
|
||||||
|
* Datetime individual field selection is implemented in a modular style.
|
||||||
|
* Module can be implemented as a Ctxpopup based selection or an ISE based
|
||||||
|
* selection or even a spinner like selection etc.
|
||||||
|
*
|
||||||
|
* <b>Datetime Module design:</b>
|
||||||
|
*
|
||||||
|
* The following functions are expected to be implemented in a Datetime module:
|
||||||
|
*
|
||||||
|
* <b>Field creation:</b>
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* __________ __________
|
||||||
|
* | |----- obj_hook() ---------------------->>>| |
|
||||||
|
* | |<<<----------------returns Mod_data ------| |
|
||||||
|
* | Datetime |_______ | |
|
||||||
|
* | widget | |Assign module call backs | Module |
|
||||||
|
* | base |<<<____| | |
|
||||||
|
* | | | |
|
||||||
|
* | |----- field_create() ------------------>>>| |
|
||||||
|
* |__________|<<<----------------returns field_obj -----|__________|
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <b>Field value setting:</b>
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* __________ __________
|
||||||
|
* | | | |
|
||||||
|
* | Datetime |<<<----------elm_datetime_value_set()---| |
|
||||||
|
* | widget | | Module |
|
||||||
|
* | base |----display_field_value()------------>>>| |
|
||||||
|
* |__________| |__________|
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <b>del_hook:</b>
|
||||||
|
* <pre>
|
||||||
|
* __________ __________
|
||||||
|
* | | | |
|
||||||
|
* | Datetime |----obj_unhook()-------------------->>>>| |
|
||||||
|
* | widget | | Module |
|
||||||
|
* | base | <<<-----frees mod_data---------| |
|
||||||
|
* |__________| |__________|
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Any module can use the following shared functions that are implemented in elm_datetime.c :
|
||||||
|
*
|
||||||
|
* <b>field_format_get()</b> - gives the field format.
|
||||||
|
*
|
||||||
|
* <b>field_limit_get()</b> - gives the field minimum, maximum limits.
|
||||||
|
*
|
||||||
|
* To enable a module, set the ELM_MODULES environment variable as shown:
|
||||||
|
*
|
||||||
|
* <b>export ELM_MODULES="datetime_input_ctxpopup>datetime/api"</b>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Datetime widgets emits the following signals:
|
||||||
|
*
|
||||||
|
* @li @b "changed" - whenever Datetime field value is changed, this signal is sent.
|
||||||
|
*
|
||||||
|
* @li @b "language,changed" - whenever system locale changes, this signal is sent.
|
||||||
|
*
|
||||||
|
* Here is an example on its usage:
|
||||||
|
* @li @ref datetime_example
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Datetime
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifies a Datetime field, The widget supports 6 fields : Year, month,
|
||||||
|
* Date, Hour, Minute, AM/PM
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
typedef enum _Elm_Datetime_Field_Type
|
||||||
|
{
|
||||||
|
ELM_DATETIME_YEAR = 0, /**< Indicates Year field */
|
||||||
|
ELM_DATETIME_MONTH = 1, /**< Indicates Month field */
|
||||||
|
ELM_DATETIME_DATE = 2, /**< Indicates Date field */
|
||||||
|
ELM_DATETIME_HOUR = 3, /**< Indicates Hour field */
|
||||||
|
ELM_DATETIME_MINUTE = 4, /**< Indicates Minute field */
|
||||||
|
ELM_DATETIME_AMPM = 5, /**< Indicates AM/PM field */
|
||||||
|
} Elm_Datetime_Field_Type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Adds a new datetime Widget
|
||||||
|
*
|
||||||
|
* The default datetime format and corresponding strings are based on current locale.
|
||||||
|
*
|
||||||
|
* @param parent The parent object
|
||||||
|
* @return The new object or NULL if it cannot be created
|
||||||
|
*
|
||||||
|
* This function inserts a new datetime widget on the canvas.
|
||||||
|
*
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI Evas_Object *elm_datetime_add(Evas_Object *parent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the datetime format. Format is a combination of allowed Libc date format
|
||||||
|
* specifiers like: "%b %d, %Y %I : %M %p".
|
||||||
|
*
|
||||||
|
* Maximum allowed format length is 64 chars.
|
||||||
|
*
|
||||||
|
* Format can include separators for each individual datetime field except
|
||||||
|
* for AM/PM field.
|
||||||
|
*
|
||||||
|
* Each separator can be a maximum of 6 UTF-8 bytes.
|
||||||
|
* Space is also taken as a separator but it can come only once for each field.
|
||||||
|
*
|
||||||
|
* Following are the allowed set of format specifiers for each datetime field.
|
||||||
|
*
|
||||||
|
* @b %%Y : The year as a decimal number including the century.
|
||||||
|
*
|
||||||
|
* @b %%y : The year as a decimal number without a century (range 00 to 99).
|
||||||
|
*
|
||||||
|
* @b %%m : The month as a decimal number (range 01 to 12).
|
||||||
|
*
|
||||||
|
* @b %%b : The abbreviated month name according to the current locale.
|
||||||
|
*
|
||||||
|
* @b %%B : The full month name according to the current locale.
|
||||||
|
*
|
||||||
|
* @b %%h : The abbreviated month name according to the current locale(same as %%b).
|
||||||
|
*
|
||||||
|
* @b %%d : The day of the month as a decimal number (range 01 to 31).
|
||||||
|
*
|
||||||
|
* @b %%e : The day of the month as a decimal number (range 1 to 31). single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%I : The hour as a decimal number using a 12-hour clock (range 01 to 12).
|
||||||
|
*
|
||||||
|
* @b %%H : The hour as a decimal number using a 24-hour clock (range 00 to 23).
|
||||||
|
*
|
||||||
|
* @b %%k : The hour (24-hour clock) as a decimal number (range 0 to 23). single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%l : The hour (12-hour clock) as a decimal number (range 1 to 12); single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%M : The minute as a decimal number (range 00 to 59).
|
||||||
|
*
|
||||||
|
* @b %%p : Either 'AM' or 'PM' according to the given time value, or the
|
||||||
|
* corresponding strings for the current locale. Noon is treated as 'PM'
|
||||||
|
* and midnight as 'AM'.
|
||||||
|
*
|
||||||
|
* @b %%P : Like %p but in lower case: 'am' or 'pm' or a corresponding string for
|
||||||
|
* the current locale.
|
||||||
|
*
|
||||||
|
* @b %%c : The preferred date and time representation for the current locale.
|
||||||
|
*
|
||||||
|
* @b %%x : The preferred date representation for the current locale without the time.
|
||||||
|
*
|
||||||
|
* @b %%X : The preferred time representation for the current locale without the date.
|
||||||
|
*
|
||||||
|
* @b %%r : The complete calendar time using the AM/PM format of the current locale.
|
||||||
|
*
|
||||||
|
* @b %%R : The hour and minute in decimal numbers using the format %H:%M.
|
||||||
|
*
|
||||||
|
* @b %%T : The time of day in decimal numbers using the format %H:%M:%S.
|
||||||
|
*
|
||||||
|
* @b %%D : The date using the format %%m/%%d/%%y.
|
||||||
|
*
|
||||||
|
* @b %%F : The date using the format %%Y-%%m-%%d.
|
||||||
|
*
|
||||||
|
* These specifiers can be arranged in any order and the widget will display the
|
||||||
|
* fields accordingly.
|
||||||
|
*
|
||||||
|
* Default format is taken as per the system locale settings.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @return The datetime format string. Example: "%b %d, %Y %I : %M %p"
|
||||||
|
*
|
||||||
|
* @see elm_datetime_format_set()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI const char *elm_datetime_format_get(const Evas_Object *obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the datetime format. Format is a combination of allowed Libc date format
|
||||||
|
* specifiers like: "%b %d, %Y %I : %M %p".
|
||||||
|
*
|
||||||
|
* Maximum allowed format length is 64 chars.
|
||||||
|
*
|
||||||
|
* Format can include separators for each individual datetime field except
|
||||||
|
* for AM/PM field.
|
||||||
|
*
|
||||||
|
* Each separator can be a maximum of 6 UTF-8 bytes.
|
||||||
|
* Space is also taken as a separator but it can come only once for each field.
|
||||||
|
*
|
||||||
|
* Following are the allowed set of format specifiers for each datetime field.
|
||||||
|
*
|
||||||
|
* @b %%Y : The year as a decimal number including the century.
|
||||||
|
*
|
||||||
|
* @b %%y : The year as a decimal number without a century (range 00 to 99).
|
||||||
|
*
|
||||||
|
* @b %%m : The month as a decimal number (range 01 to 12).
|
||||||
|
*
|
||||||
|
* @b %%b : The abbreviated month name according to the current locale.
|
||||||
|
*
|
||||||
|
* @b %%B : The full month name according to the current locale.
|
||||||
|
*
|
||||||
|
* @b %%h : The abbreviated month name according to the current locale(same as %%b).
|
||||||
|
*
|
||||||
|
* @b %%d : The day of the month as a decimal number (range 01 to 31).
|
||||||
|
*
|
||||||
|
* @b %%e : The day of the month as a decimal number (range 1 to 31). single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%I : The hour as a decimal number using a 12-hour clock (range 01 to 12).
|
||||||
|
*
|
||||||
|
* @b %%H : The hour as a decimal number using a 24-hour clock (range 00 to 23).
|
||||||
|
*
|
||||||
|
* @b %%k : The hour (24-hour clock) as a decimal number (range 0 to 23). single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%l : The hour (12-hour clock) as a decimal number (range 1 to 12); single
|
||||||
|
* digits are preceded by a blank.
|
||||||
|
*
|
||||||
|
* @b %%M : The minute as a decimal number (range 00 to 59).
|
||||||
|
*
|
||||||
|
* @b %%p : Either 'AM' or 'PM' according to the given time value, or the
|
||||||
|
* corresponding strings for the current locale. Noon is treated as 'PM'
|
||||||
|
* and midnight as 'AM'.
|
||||||
|
*
|
||||||
|
* @b %%P : Like %p but in lower case: 'am' or 'pm' or a corresponding string for
|
||||||
|
* the current locale.
|
||||||
|
*
|
||||||
|
* @b %%c : The preferred date and time representation for the current locale.
|
||||||
|
*
|
||||||
|
* @b %%x : The preferred date representation for the current locale without the time.
|
||||||
|
*
|
||||||
|
* @b %%X : The preferred time representation for the current locale without the date.
|
||||||
|
*
|
||||||
|
* @b %%r : The complete calendar time using the AM/PM format of the current locale.
|
||||||
|
*
|
||||||
|
* @b %%R : The hour and minute in decimal numbers using the format %H:%M.
|
||||||
|
*
|
||||||
|
* @b %%T : The time of day in decimal numbers using the format %H:%M:%S.
|
||||||
|
*
|
||||||
|
* @b %%D : The date using the format %%m/%%d/%%y.
|
||||||
|
*
|
||||||
|
* @b %%F : The date using the format %%Y-%%m-%%d.
|
||||||
|
*
|
||||||
|
* These specifiers can be arranged in any order and the widget will display the
|
||||||
|
* fields accordingly.
|
||||||
|
*
|
||||||
|
* Default format is taken as per the system locale settings.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param fmt The datetime format
|
||||||
|
*
|
||||||
|
* @see elm_datetime_format_get()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI void elm_datetime_format_set(Evas_Object *obj, const char *fmt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the upper boundary of a field.
|
||||||
|
*
|
||||||
|
* Year: years since 1900. Negative value represents year below 1900 (year
|
||||||
|
* value -30 represents 1870). Year default range is from 70 to 137.
|
||||||
|
*
|
||||||
|
* Month: default value range is from 0 to 11.
|
||||||
|
*
|
||||||
|
* Date: default value range is from 1 to 31 according to the month value.
|
||||||
|
*
|
||||||
|
* Hour: default value will be in terms of 24 hr format (0~23)
|
||||||
|
*
|
||||||
|
* Minute: default value range is from 0 to 59.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param maxtime Time structure containing the maximum time value.
|
||||||
|
* @return int The maximum value of the field.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_value_max_set()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool elm_datetime_value_max_get(const Evas_Object *obj, struct tm *maxtime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the upper boundary of a field.
|
||||||
|
*
|
||||||
|
* Year: years since 1900. Negative value represents year below 1900 (year
|
||||||
|
* value -30 represents 1870). Year default range is from 70 to 137.
|
||||||
|
*
|
||||||
|
* Month: default value range is from 0 to 11.
|
||||||
|
*
|
||||||
|
* Date: default value range is from 1 to 31 according to the month value.
|
||||||
|
*
|
||||||
|
* Hour: default value will be in terms of 24 hr format (0~23)
|
||||||
|
*
|
||||||
|
* Minute: default value range is from 0 to 59.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param maxtime Time structure containing the maximum time value.
|
||||||
|
* @return EINA_TRUE if maximum value is accepted.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_value_max_get()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool elm_datetime_value_max_set(Evas_Object *obj, const struct tm *maxtime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the lower boundary of a field.
|
||||||
|
*
|
||||||
|
* Year: years since 1900. Negative value represents year below 1900 (year
|
||||||
|
* value -30 represents 1870). Year default range is from 70 to 137.
|
||||||
|
*
|
||||||
|
* Month: default value range is from 0 to 11.
|
||||||
|
*
|
||||||
|
* Date: default value range is from 1 to 31 according to the month value.
|
||||||
|
*
|
||||||
|
* Hour: default value will be in terms of 24 hr format (0~23)
|
||||||
|
*
|
||||||
|
* Minute: default value range is from 0 to 59.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param mintime Time structure.
|
||||||
|
* @return EINA_TRUE if minimum value is successfully returned.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_value_min_set()
|
||||||
|
* @ingroup Datepicker
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool elm_datetime_value_min_get(const Evas_Object *obj, struct tm *mintime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the lower boundary of a field.
|
||||||
|
*
|
||||||
|
* Year: years since 1900. Negative value represents year below 1900 (year
|
||||||
|
* value -30 represents 1870). Year default range is from 70 to 137.
|
||||||
|
*
|
||||||
|
* Month: default value range is from 0 to 11.
|
||||||
|
*
|
||||||
|
* Date: default value range is from 1 to 31 according to the month value.
|
||||||
|
*
|
||||||
|
* Hour: default value will be in terms of 24 hr format (0~23)
|
||||||
|
*
|
||||||
|
* Minute: default value range is from 0 to 59.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object.
|
||||||
|
* @param mintime Time structure containing the minimum time value.
|
||||||
|
* @return EINA_TRUE if minimum value is accepted.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_value_min_get()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool elm_datetime_value_min_set(Evas_Object *obj, const struct tm *mintime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the field limits of a field.
|
||||||
|
*
|
||||||
|
* Limits can be set to individual fields, independently, except for AM/PM field.
|
||||||
|
* Any field can display the values only in between these Minimum and Maximum limits unless
|
||||||
|
* the corresponding time value is restricted from MinTime to MaxTime.
|
||||||
|
* That is, Min/ Max field limits always works under the limitations of MinTime/ MaxTime.
|
||||||
|
*
|
||||||
|
* There is no provision to set the limits of AM/PM field.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param fieldtype Type of the field. ELM_DATETIME_YEAR etc.
|
||||||
|
* @param min Reference to field's minimum value
|
||||||
|
* @param max Reference to field's maximum value
|
||||||
|
*
|
||||||
|
* @see elm_datetime_field_limit_set()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI void elm_datetime_field_limit_get(const Evas_Object *obj, Elm_Datetime_Field_Type fieldtype, int *min, int *max);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the field limits of a field.
|
||||||
|
*
|
||||||
|
* Limits can be set to individual fields, independently, except for AM/PM field.
|
||||||
|
* Any field can display the values only in between these Minimum and Maximum limits unless
|
||||||
|
* the corresponding time value is restricted from MinTime to MaxTime.
|
||||||
|
* That is, Min/ Max field limits always works under the limitations of MinTime/ MaxTime.
|
||||||
|
*
|
||||||
|
* There is no provision to set the limits of AM/PM field.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param fieldtype Type of the field. ELM_DATETIME_YEAR etc.
|
||||||
|
* @param min Reference to field's minimum value
|
||||||
|
* @param max Reference to field's maximum value
|
||||||
|
*
|
||||||
|
* @see elm_datetime_field_limit_set()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI void elm_datetime_field_limit_set(Evas_Object *obj, Elm_Datetime_Field_Type fieldtype, int min, int max);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the current value of a field.
|
||||||
|
*
|
||||||
|
* Year: years since 1900. Negative value represents year below 1900 (year
|
||||||
|
* value -30 represents 1870). Year default range is from 70 to 137.
|
||||||
|
*
|
||||||
|
* Month: default value range is from 0 to 11.
|
||||||
|
*
|
||||||
|
* Date: default value range is from 1 to 31 according to the month value.
|
||||||
|
*
|
||||||
|
* Hour: default value will be in terms of 24 hr format (0~23)
|
||||||
|
*
|
||||||
|
* Minute: default value range is from 0 to 59.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object.
|
||||||
|
* @param currtime Time structure.
|
||||||
|
* @return EINA_TRUE if current time is returned successfully.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_field_value_set()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool elm_datetime_value_get(const Evas_Object *obj, struct tm *currtime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the current value of a Datetime object.
|
||||||
|
*
|
||||||
|
* Year: years since 1900. Negative value represents year below 1900 (year
|
||||||
|
* value -30 represents 1870). Year default range is from 70 to 137.
|
||||||
|
*
|
||||||
|
* Month: default value range is from 0 to 11.
|
||||||
|
*
|
||||||
|
* Date: default value range is from 1 to 31 according to the month value.
|
||||||
|
*
|
||||||
|
* Hour: default value will be in terms of 24 hr format (0~23)
|
||||||
|
*
|
||||||
|
* Minute: default value range is from 0 to 59.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param obj The datetime object.
|
||||||
|
* @param newtime Time structure filled with values to be set.
|
||||||
|
* @return EINA_TRUE if current time is set successfully.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_value_set()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool elm_datetime_value_set(Evas_Object *obj, const struct tm *newtime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get whether a field can be visible/not
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param fieldtype Type of the field. ELM_DATETIME_YEAR etc
|
||||||
|
* @return bool @c EINA_TRUE, if field can be visible. @c EINA_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_field_visible_set()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool elm_datetime_field_visible_get(const Evas_Object *obj, Elm_Datetime_Field_Type fieldtype);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set a field to be visible or not.
|
||||||
|
* Setting this API True does not ensure that the field is visible, apart from
|
||||||
|
* this, the field's format must be present in Datetime overall format.
|
||||||
|
* If a field's visibility is set to False then it won't appear even though
|
||||||
|
* its format is present in overall format.
|
||||||
|
* So if and only if this API is set true and the corresponding field's format
|
||||||
|
* is present in Datetime format, the field is visible.
|
||||||
|
*
|
||||||
|
* By default the field visibility is set to True.
|
||||||
|
*
|
||||||
|
* @param obj The datetime object
|
||||||
|
* @param fieldtype Type of the field. ELM_DATETIME_YEAR etc.
|
||||||
|
* @param visible @c EINA_TRUE field can be visible, @c EINA_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* @see elm_datetime_field_visible_get()
|
||||||
|
* @ingroup Datetime
|
||||||
|
*/
|
||||||
|
EAPI void elm_datetime_field_visible_set(Evas_Object *obj, Elm_Datetime_Field_Type fieldtype, Eina_Bool visible);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -43,6 +43,7 @@
|
||||||
|
|
||||||
typedef struct _Elm_Config Elm_Config;
|
typedef struct _Elm_Config Elm_Config;
|
||||||
typedef struct _Elm_Module Elm_Module;
|
typedef struct _Elm_Module Elm_Module;
|
||||||
|
typedef struct _Elm_Datetime_Module_Data Elm_Datetime_Module_Data;
|
||||||
|
|
||||||
struct _Elm_Theme
|
struct _Elm_Theme
|
||||||
{
|
{
|
||||||
|
@ -186,6 +187,13 @@ struct _Elm_Module
|
||||||
int references;
|
int references;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _Elm_Datetime_Module_Data
|
||||||
|
{
|
||||||
|
Evas_Object *base;
|
||||||
|
void (*field_limit_get)(Evas_Object *obj, Elm_Datetime_Field_Type field_type, int *range_min, int *range_max);
|
||||||
|
const char *(*field_format_get)(Evas_Object * obj, Elm_Datetime_Field_Type field_type);
|
||||||
|
};
|
||||||
|
|
||||||
int _elm_ews_wm_init(void);
|
int _elm_ews_wm_init(void);
|
||||||
void _elm_ews_wm_shutdown(void);
|
void _elm_ews_wm_shutdown(void);
|
||||||
void _elm_ews_wm_rescale(Elm_Theme *th, Eina_Bool use_theme);
|
void _elm_ews_wm_rescale(Elm_Theme *th, Eina_Bool use_theme);
|
||||||
|
|
|
@ -4,4 +4,5 @@ MAINTAINERCLEANFILES = Makefile.in
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
test_entry \
|
test_entry \
|
||||||
test_map \
|
test_map \
|
||||||
access_output
|
access_output \
|
||||||
|
datetime_input_ctxpopup
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
AM_CPPFLAGS = \
|
||||||
|
-DELM_INTERNAL_API_ARGESFSDFEFC=1 \
|
||||||
|
-I. \
|
||||||
|
-I$(top_builddir) \
|
||||||
|
-I$(top_srcdir) \
|
||||||
|
-I$(top_srcdir)/src/lib \
|
||||||
|
-I$(top_builddir)/src/lib \
|
||||||
|
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
||||||
|
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
||||||
|
@ELEMENTARY_CFLAGS@ \
|
||||||
|
@ELEMENTARY_X_CFLAGS@ \
|
||||||
|
@ELEMENTARY_FB_CFLAGS@ \
|
||||||
|
@ELEMENTARY_WIN32_CFLAGS@ \
|
||||||
|
@ELEMENTARY_WINCE_CFLAGS@ \
|
||||||
|
@ELEMENTARY_EDBUS_CFLAGS@ \
|
||||||
|
@ELEMENTARY_EFREET_CFLAGS@ \
|
||||||
|
@ELEMENTARY_ETHUMB_CFLAGS@
|
||||||
|
|
||||||
|
if ELEMENTARY_WINDOWS_BUILD
|
||||||
|
AM_CPPFLAGS += -DELEMENTARY_BUILD
|
||||||
|
endif
|
||||||
|
|
||||||
|
pkgdir = $(libdir)/elementary/modules/datetime_input_ctxpopup/$(MODULE_ARCH)
|
||||||
|
pkg_LTLIBRARIES = module.la
|
||||||
|
|
||||||
|
module_la_SOURCES = datetime_input_ctxpopup.c
|
||||||
|
|
||||||
|
module_la_LIBADD = @ELEMENTARY_LIBS@ $(top_builddir)/src/lib/libelementary.la
|
||||||
|
module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
|
||||||
|
module_la_LIBTOOLFLAGS = --tag=disable-static
|
|
@ -0,0 +1,325 @@
|
||||||
|
#include <Elementary.h>
|
||||||
|
#include "elm_priv.h"
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "elementary_config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DATETIME_FIELD_COUNT 6
|
||||||
|
#define FIELD_FORMAT_LEN 3
|
||||||
|
#define DISKSELECTOR_MIN_ITEMS 4
|
||||||
|
#define BUFF_SIZE 1024
|
||||||
|
|
||||||
|
typedef struct _Ctxpopup_Module_Data Ctxpopup_Module_Data;
|
||||||
|
typedef struct _DiskItem_Data DiskItem_Data;
|
||||||
|
|
||||||
|
struct _Ctxpopup_Module_Data
|
||||||
|
{
|
||||||
|
Elm_Datetime_Module_Data mod_data;
|
||||||
|
Evas_Object *ctxpopup;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _DiskItem_Data
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
Elm_Datetime_Field_Type sel_field_type;
|
||||||
|
unsigned int sel_field_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
_diskselector_item_free_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
if (data) free(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ctxpopup_dismissed_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__ )
|
||||||
|
{
|
||||||
|
Evas_Object *diskselector;
|
||||||
|
|
||||||
|
diskselector = elm_object_content_unset(obj);
|
||||||
|
if (diskselector) evas_object_del(diskselector);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_datetime_resize_cb(void *data, Evas *e __UNUSED__,Evas_Object *obj __UNUSED__,
|
||||||
|
void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)data;
|
||||||
|
if (!ctx_mod) return;
|
||||||
|
|
||||||
|
evas_object_hide(ctx_mod->ctxpopup);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ctxpopup_parent_resize_cb(void *data, Evas *e __UNUSED__,Evas_Object *obj __UNUSED__,
|
||||||
|
void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)data;
|
||||||
|
if (!ctx_mod) return;
|
||||||
|
elm_ctxpopup_hover_parent_set(ctx_mod->ctxpopup, elm_widget_top_get(ctx_mod->mod_data.base));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_datetime_move_cb(void *data, Evas *e __UNUSED__,Evas_Object *obj __UNUSED__,
|
||||||
|
void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)data;
|
||||||
|
if (!ctx_mod) return;
|
||||||
|
|
||||||
|
evas_object_hide(ctx_mod->ctxpopup);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_field_value_set(struct tm *time, Elm_Datetime_Field_Type field_type, int val)
|
||||||
|
{
|
||||||
|
if (field_type >= DATETIME_FIELD_COUNT - 1) return;
|
||||||
|
|
||||||
|
int *timearr[]= { &time->tm_year, &time->tm_mon, &time->tm_mday, &time->tm_hour, &time->tm_min };
|
||||||
|
*timearr[field_type] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_field_value_get(struct tm *time, Elm_Datetime_Field_Type field_type)
|
||||||
|
{
|
||||||
|
if (field_type >= DATETIME_FIELD_COUNT - 1) return -1;
|
||||||
|
|
||||||
|
int *timearr[]= { &time->tm_year, &time->tm_mon, &time->tm_mday, &time->tm_hour, &time->tm_min };
|
||||||
|
return (*timearr[field_type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_diskselector_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
DiskItem_Data *disk_data;
|
||||||
|
struct tm curr_time;
|
||||||
|
const char *fmt;
|
||||||
|
|
||||||
|
disk_data = (DiskItem_Data *)data;
|
||||||
|
if (!disk_data || !(disk_data->ctx_mod)) return;
|
||||||
|
|
||||||
|
elm_datetime_value_get(disk_data->ctx_mod->mod_data.base, &curr_time);
|
||||||
|
fmt = disk_data->ctx_mod->mod_data.field_format_get(disk_data->ctx_mod->mod_data.base, disk_data->sel_field_type);
|
||||||
|
if ((disk_data->sel_field_type == ELM_DATETIME_HOUR) && ((!strncmp(fmt, "%I", FIELD_FORMAT_LEN)) ||
|
||||||
|
(!strncmp(fmt, "%l", FIELD_FORMAT_LEN))) && (curr_time.tm_hour >= 12))
|
||||||
|
disk_data->sel_field_value += 12;
|
||||||
|
_field_value_set(&curr_time, disk_data->sel_field_type, disk_data->sel_field_value);
|
||||||
|
elm_datetime_value_set(disk_data->ctx_mod->mod_data.base, &curr_time);
|
||||||
|
evas_object_hide(disk_data->ctx_mod->ctxpopup);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ampm_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
struct tm curr_time;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)data;
|
||||||
|
if (!ctx_mod) return;
|
||||||
|
|
||||||
|
elm_datetime_value_get(ctx_mod->mod_data.base, &curr_time);
|
||||||
|
if (curr_time.tm_hour >= 12) curr_time.tm_hour -= 12;
|
||||||
|
else curr_time.tm_hour += 12;
|
||||||
|
elm_datetime_value_set(ctx_mod->mod_data.base, &curr_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_field_clicked_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
Evas_Object *diskselector;
|
||||||
|
Elm_Object_Item *item;
|
||||||
|
DiskItem_Data *disk_data;
|
||||||
|
Elm_Datetime_Field_Type field_type;
|
||||||
|
time_t t;
|
||||||
|
struct tm time1;
|
||||||
|
char buf[BUFF_SIZE], label[BUFF_SIZE];
|
||||||
|
const char *fmt;
|
||||||
|
int idx, min, max, val;
|
||||||
|
unsigned int display_item_num, text_len = 0;
|
||||||
|
Evas_Coord x = 0, y = 0, w = 0, h = 0, width;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)data;
|
||||||
|
if (!ctx_mod || !ctx_mod->ctxpopup) return;
|
||||||
|
|
||||||
|
// because of the diskselector behaviour, it is being recreated
|
||||||
|
diskselector = elm_diskselector_add(elm_widget_top_get(ctx_mod->mod_data.base));
|
||||||
|
snprintf(buf, sizeof(buf), "datetime/%s", elm_object_style_get(obj));
|
||||||
|
elm_object_style_set(diskselector, buf);
|
||||||
|
elm_object_content_set(ctx_mod->ctxpopup, diskselector);
|
||||||
|
|
||||||
|
t = time(NULL);
|
||||||
|
localtime_r(&t, &time1);
|
||||||
|
|
||||||
|
field_type = (Elm_Datetime_Field_Type )evas_object_data_get(obj, "_field_type");
|
||||||
|
fmt = ctx_mod->mod_data.field_format_get(ctx_mod->mod_data.base, field_type);
|
||||||
|
elm_datetime_value_get(ctx_mod->mod_data.base, &time1);
|
||||||
|
val = _field_value_get(&time1, field_type);
|
||||||
|
ctx_mod->mod_data.field_limit_get(ctx_mod->mod_data.base, field_type, &min, &max);
|
||||||
|
|
||||||
|
time1.tm_mday = 1; // To avoid month wrapping, set the first day of the month to start with.
|
||||||
|
|
||||||
|
if ((field_type == ELM_DATETIME_HOUR) && ((!strncmp(fmt, "%I", FIELD_FORMAT_LEN)) ||
|
||||||
|
(!strncmp(fmt, "%l", FIELD_FORMAT_LEN))))
|
||||||
|
{
|
||||||
|
if (max >= 12) max -= 12;
|
||||||
|
if (val >= 12) val -= 12;
|
||||||
|
if (min >= 12) min -= 12;
|
||||||
|
}
|
||||||
|
for (idx = min; idx <= max; idx++)
|
||||||
|
{
|
||||||
|
_field_value_set(&time1, field_type, idx);
|
||||||
|
strftime(label, BUFF_SIZE, fmt, &time1);
|
||||||
|
if (strlen(label) > text_len) text_len = strlen(label);
|
||||||
|
if (idx == val)
|
||||||
|
{
|
||||||
|
item = elm_diskselector_item_append(diskselector, label, NULL, NULL, NULL);
|
||||||
|
elm_diskselector_item_selected_set(item, EINA_TRUE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
disk_data = (DiskItem_Data *) malloc (sizeof(DiskItem_Data));
|
||||||
|
disk_data->ctx_mod = ctx_mod;
|
||||||
|
disk_data->sel_field_type = field_type;
|
||||||
|
disk_data->sel_field_value = idx;
|
||||||
|
item = elm_diskselector_item_append(diskselector, label, NULL, _diskselector_cb, disk_data);
|
||||||
|
elm_object_item_del_cb_set(item, _diskselector_item_free_cb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elm_diskselector_side_label_length_set(diskselector, text_len);
|
||||||
|
|
||||||
|
evas_object_geometry_get(obj, &x, &y, &w, &h);
|
||||||
|
evas_object_geometry_get(elm_widget_top_get(ctx_mod->mod_data.base), NULL, NULL, &width, NULL);
|
||||||
|
evas_object_size_hint_min_set(ctx_mod->ctxpopup, width, -1);
|
||||||
|
display_item_num = width / (w + elm_finger_size_get());
|
||||||
|
// always display even number of items to avoid autoselection
|
||||||
|
if (display_item_num % 2) display_item_num -= 1;
|
||||||
|
if (display_item_num < DISKSELECTOR_MIN_ITEMS)
|
||||||
|
display_item_num = DISKSELECTOR_MIN_ITEMS;
|
||||||
|
elm_diskselector_display_item_num_set(diskselector, display_item_num);
|
||||||
|
elm_diskselector_round_set(diskselector, EINA_TRUE);
|
||||||
|
|
||||||
|
elm_ctxpopup_direction_priority_set(ctx_mod->ctxpopup, ELM_CTXPOPUP_DIRECTION_DOWN,
|
||||||
|
ELM_CTXPOPUP_DIRECTION_UP, -1, -1);
|
||||||
|
evas_object_move(ctx_mod->ctxpopup, (x+w/2), (y+h));
|
||||||
|
|
||||||
|
// if the direction of Ctxpopup is upwards, move it to the top of datetime
|
||||||
|
if (elm_ctxpopup_direction_get (ctx_mod->ctxpopup) == ELM_CTXPOPUP_DIRECTION_UP)
|
||||||
|
{
|
||||||
|
elm_ctxpopup_direction_priority_set(ctx_mod->ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
|
||||||
|
ELM_CTXPOPUP_DIRECTION_DOWN, -1, -1);
|
||||||
|
evas_object_move(ctx_mod->ctxpopup, (x+w/2), y);
|
||||||
|
}
|
||||||
|
evas_object_show(ctx_mod->ctxpopup);
|
||||||
|
}
|
||||||
|
|
||||||
|
// module fucns for the specific module type
|
||||||
|
EAPI void
|
||||||
|
field_value_display(Elm_Datetime_Module_Data *module_data, Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
Elm_Datetime_Field_Type field_type;
|
||||||
|
struct tm time;
|
||||||
|
char buf[BUFF_SIZE];
|
||||||
|
const char *fmt;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)module_data;
|
||||||
|
if (!ctx_mod || !obj) return;
|
||||||
|
|
||||||
|
elm_datetime_value_get(ctx_mod->mod_data.base, &time);
|
||||||
|
field_type = (Elm_Datetime_Field_Type )evas_object_data_get(obj, "_field_type");
|
||||||
|
fmt = ctx_mod->mod_data.field_format_get(ctx_mod->mod_data.base, field_type);
|
||||||
|
strftime(buf, sizeof(buf), fmt, &time);
|
||||||
|
elm_object_text_set(obj, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Evas_Object *
|
||||||
|
field_create(Elm_Datetime_Module_Data *module_data, Elm_Datetime_Field_Type field_type)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
Evas_Object *field_obj;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)module_data;
|
||||||
|
if (!ctx_mod) return NULL;
|
||||||
|
|
||||||
|
if (field_type == ELM_DATETIME_AMPM)
|
||||||
|
{
|
||||||
|
field_obj = elm_button_add(ctx_mod->mod_data.base);
|
||||||
|
evas_object_smart_callback_add(field_obj, "clicked", _ampm_clicked_cb, ctx_mod);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
field_obj = elm_entry_add(ctx_mod->mod_data.base);
|
||||||
|
elm_entry_single_line_set(field_obj, EINA_TRUE);
|
||||||
|
elm_entry_editable_set(field_obj, EINA_FALSE);
|
||||||
|
elm_entry_input_panel_enabled_set(field_obj, EINA_FALSE);
|
||||||
|
elm_entry_context_menu_disabled_set(field_obj, EINA_TRUE);
|
||||||
|
evas_object_smart_callback_add(field_obj, "clicked", _field_clicked_cb, ctx_mod);
|
||||||
|
}
|
||||||
|
evas_object_data_set(field_obj, "_field_type", (void *)field_type);
|
||||||
|
return field_obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Elm_Datetime_Module_Data *
|
||||||
|
obj_hook(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
char buf[BUFF_SIZE];
|
||||||
|
|
||||||
|
ctx_mod = ELM_NEW(Ctxpopup_Module_Data);
|
||||||
|
if (!ctx_mod) return NULL;
|
||||||
|
|
||||||
|
ctx_mod->ctxpopup = elm_ctxpopup_add(elm_widget_top_get(obj));
|
||||||
|
snprintf(buf, sizeof(buf), "datetime/%s", elm_object_style_get(obj));
|
||||||
|
elm_object_style_set(ctx_mod->ctxpopup, buf);
|
||||||
|
elm_ctxpopup_horizontal_set(ctx_mod->ctxpopup, EINA_TRUE);
|
||||||
|
evas_object_size_hint_weight_set(ctx_mod->ctxpopup, EVAS_HINT_EXPAND,
|
||||||
|
EVAS_HINT_EXPAND);
|
||||||
|
evas_object_size_hint_align_set(ctx_mod->ctxpopup, EVAS_HINT_FILL, 0.5);
|
||||||
|
evas_object_smart_callback_add(ctx_mod->ctxpopup, "dismissed",
|
||||||
|
_ctxpopup_dismissed_cb, ctx_mod);
|
||||||
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
|
||||||
|
_datetime_resize_cb, ctx_mod);
|
||||||
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
|
||||||
|
_datetime_move_cb, ctx_mod);
|
||||||
|
evas_object_event_callback_add(elm_widget_top_get(obj), EVAS_CALLBACK_RESIZE,
|
||||||
|
_ctxpopup_parent_resize_cb, ctx_mod);
|
||||||
|
|
||||||
|
return ((Elm_Datetime_Module_Data*)ctx_mod);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
obj_unhook(Elm_Datetime_Module_Data *module_data)
|
||||||
|
{
|
||||||
|
Ctxpopup_Module_Data *ctx_mod;
|
||||||
|
|
||||||
|
ctx_mod = (Ctxpopup_Module_Data *)module_data;
|
||||||
|
if (!ctx_mod) return;
|
||||||
|
|
||||||
|
if (ctx_mod->ctxpopup)
|
||||||
|
evas_object_del(ctx_mod->ctxpopup);
|
||||||
|
|
||||||
|
if (ctx_mod)
|
||||||
|
{
|
||||||
|
free(ctx_mod);
|
||||||
|
ctx_mod = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// module api funcs needed
|
||||||
|
EAPI int
|
||||||
|
elm_modapi_init(void *m __UNUSED__)
|
||||||
|
{
|
||||||
|
return 1; // succeed always
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
elm_modapi_shutdown(void *m __UNUSED__)
|
||||||
|
{
|
||||||
|
return 1; // succeed always
|
||||||
|
}
|
Loading…
Reference in New Issue