efl/legacy/elementary/src/lib/Elementary.h

397 lines
17 KiB
C
Raw Normal View History

/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifndef ELEMENTARY_H
#define ELEMENTARY_H
/* What is this?
*
* This is a VERY SIMPLE toolkit - VERY SIMPLE. It is not meant for writing
* extensive applications. Small simple ones with simple needs. It is meant
* to make the programmers work almost brainless.
*
* I'm toying with backing this with etk or ewl - or not. right now I am
* unsure as some of the widgets will be faily complex edje creations. Do
* not consider any choices permanent - but the API should stay unbroken.
*
*/
/* Standard headers for standard system calls etc. */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/param.h>
#include <dlfcn.h>
#include <math.h>
#include <fnmatch.h>
#include <limits.h>
#include <ctype.h>
#include <time.h>
#include <dirent.h>
#include <pwd.h>
#include <grp.h>
#include <glob.h>
#include <locale.h>
#include <libintl.h>
#include <errno.h>
#include <signal.h>
/* EFL headers */
#include <Eina.h>
#include <Eet.h>
#include <Evas.h>
#include <Ecore.h>
#include <Ecore_Evas.h>
#include <Ecore_Job.h>
#include <Ecore_Txt.h>
#include <Ecore_File.h>
#include <Edje.h>
/* allow usage from c++ */
#ifdef __cplusplus
extern "C" {
#endif
/**************************************************************************/
/* Objects */
typedef enum _Elm_Win_Type
{
ELM_WIN_BASIC,
ELM_WIN_DIALOG_BASIC
} Elm_Win_Type;
typedef enum _Elm_Win_Keyboard_Mode
{
ELM_WIN_KEYBOARD_UNKNOWN,
ELM_WIN_KEYBOARD_OFF,
ELM_WIN_KEYBOARD_ON,
ELM_WIN_KEYBOARD_ALPHA,
ELM_WIN_KEYBOARD_NUMERIC,
ELM_WIN_KEYBOARD_PIN,
ELM_WIN_KEYBOARD_PHONE_NUMBER,
ELM_WIN_KEYBOARD_HEX,
ELM_WIN_KEYBOARD_TERMINAL,
ELM_WIN_KEYBOARD_PASSWORD
} Elm_Win_Keyboard_Mode;
/**************************************************************************/
/* General calls */
EAPI void elm_init(int argc, char **argv);
EAPI void elm_shutdown(void);
EAPI void elm_run(void);
EAPI void elm_exit(void);
EAPI Evas_Object *elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type);
EAPI void elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj);
EAPI void elm_win_resize_object_del(Evas_Object *obj, Evas_Object *subobj);
EAPI void elm_win_title_set(Evas_Object *obj, const char *title);
EAPI void elm_win_autodel_set(Evas_Object *obj, Evas_Bool autodel);
EAPI void elm_win_activate(Evas_Object *obj);
EAPI void elm_win_borderless_set(Evas_Object *obj, Evas_Bool borderless);
EAPI void elm_win_shaped_set(Evas_Object *obj, Evas_Bool shaped);
EAPI void elm_win_alpha_set(Evas_Object *obj, Evas_Bool alpha);
EAPI void elm_win_override_set(Evas_Object *obj, Evas_Bool override);
EAPI void elm_win_keyboard_mode_set(Evas_Object *obj, Elm_Win_Keyboard_Mode mode);
EAPI void elm_win_keyboard_win_set(Evas_Object *obj, Evas_Bool is_keyboard);
/* X specific calls - won't work on non-x engines (return 0) */
EAPI Ecore_X_Window elm_win_xwindow_get(Evas_Object *obj);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
* "delete-request" - the user requested to delete the window
*/
EAPI Evas_Object *elm_bg_add(Evas_Object *parent);
EAPI void elm_bg_file_set(Evas_Object *obj, const char *file, const char *group);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
*/
EAPI Evas_Object *elm_icon_add(Evas_Object *parent);
EAPI void elm_icon_file_set(Evas_Object *obj, const char *file, const char *group);
EAPI void elm_icon_standard_set(Evas_Object *obj, const char *name);
EAPI void elm_icon_smooth_set(Evas_Object *obj, Evas_Bool smooth);
EAPI void elm_icon_no_scale_set(Evas_Object *obj, Evas_Bool no_scale);
EAPI void elm_icon_scale_set(Evas_Object *obj, Evas_Bool scale_up, Evas_Bool scale_down);
EAPI void elm_icon_fill_outside_set(Evas_Object *obj, Evas_Bool fill_outside);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
* "clicked" - the user clicked the icon
*/
EAPI Evas_Object *elm_box_add(Evas_Object *parent);
EAPI void elm_box_horizontal_set(Evas_Object *obj, Evas_Bool horizontal);
EAPI void elm_box_homogenous_set(Evas_Object *obj, Evas_Bool homogenous);
EAPI void elm_box_pack_start(Evas_Object *obj, Evas_Object *subobj);
EAPI void elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj);
EAPI void elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before);
EAPI void elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
*/
EAPI Evas_Object *elm_button_add(Evas_Object *parent);
EAPI void elm_button_label_set(Evas_Object *obj, const char *label);
EAPI void elm_button_icon_set(Evas_Object *obj, Evas_Object *icon);
EAPI void elm_button_style_set(Evas_Object *obj, const char *style);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
* "clicked" - the user clicked the button
*/
EAPI Evas_Object *elm_scroller_add(Evas_Object *parent);
EAPI void elm_scroller_content_set(Evas_Object *obj, Evas_Object *child);
EAPI void elm_scroller_content_min_limit(Evas_Object *obj, Evas_Bool w, Evas_Bool h);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
*/
EAPI Evas_Object *elm_label_add(Evas_Object *parent);
EAPI void elm_label_label_set(Evas_Object *obj, const char *label);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
*/
EAPI Evas_Object *elm_toggle_add(Evas_Object *parent);
EAPI void elm_toggle_label_set(Evas_Object *obj, const char *label);
EAPI void elm_toggle_icon_set(Evas_Object *obj, Evas_Object *icon);
EAPI void elm_toggle_states_labels_set(Evas_Object *obj, const char *onlabel, const char *offlabel);
EAPI void elm_toggle_state_set(Evas_Object *obj, Evas_Bool state);
EAPI void elm_toggle_state_pointer_set(Evas_Object *obj, Evas_Bool *statep);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
* "changed" - the user toggled the state
*/
EAPI Evas_Object *elm_frame_add(Evas_Object *parent);
EAPI void elm_frame_label_set(Evas_Object *obj, const char *label);
EAPI void elm_frame_content_set(Evas_Object *obj, Evas_Object *content);
EAPI void elm_frame_style_set(Evas_Object *obj, const char *style);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
*/
EAPI Evas_Object *elm_table_add(Evas_Object *parent);
EAPI void elm_table_homogenous_set(Evas_Object *obj, Evas_Bool homogenous);
EAPI void elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
*/
EAPI Evas_Object *elm_clock_add(Evas_Object *parent);
EAPI void elm_clock_time_set(Evas_Object *obj, int hrs, int min, int sec);
EAPI void elm_clock_time_get(Evas_Object *obj, int *hrs, int *min, int *sec);
EAPI void elm_clock_edit_set(Evas_Object *obj, Evas_Bool edit);
EAPI void elm_clock_show_am_pm_set(Evas_Object *obj, Evas_Bool am_pm);
EAPI void elm_clock_show_seconds_set(Evas_Object *obj, Evas_Bool seconds);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
* "changed" - the user changed the time
*/
2008-10-07 00:45:49 -07:00
EAPI Evas_Object *elm_layout_add(Evas_Object *parent);
EAPI void elm_layout_file_set(Evas_Object *obj, const char *file, const char *group);
EAPI void elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content);
EAPI Evas_Object *elm_layout_edje_get(Evas_Object *obj);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
2008-10-07 00:45:49 -07:00
*/
typedef enum _Elm_Hover_Axis
{
ELM_HOVER_AXIS_NONE,
ELM_HOVER_AXIS_HORIZONTAL,
ELM_HOVER_AXIS_VERTICAL,
ELM_HOVER_AXIS_BOTH
} Elm_Hover_Axis;
EAPI Evas_Object *elm_hover_add(Evas_Object *parent);
EAPI void elm_hover_target_set(Evas_Object *obj, Evas_Object *target);
EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content);
EAPI void elm_hover_style_set(Evas_Object *obj, const char *style);
EAPI const char *elm_hover_best_content_location_get(Evas_Object *obj, Elm_Hover_Axis pref_axis);
2008-10-08 08:09:00 -07:00
/* smart callbacks called:
* "clicked" - the user clicked the empty space in the hover to dismiss
*/
typedef struct _Elm_Entry_Anchor_Info Elm_Entry_Anchor_Info;
struct _Elm_Entry_Anchor_Info
{
const char *name;
int button;
Evas_Coord x, y, w, h;
};
EAPI Evas_Object *elm_entry_add(Evas_Object *parent);
EAPI void elm_entry_single_line_set(Evas_Object *obj, Evas_Bool single_line);
EAPI void elm_entry_password_set(Evas_Object *obj, Evas_Bool password);
EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry);
EAPI const char *elm_entry_entry_get(Evas_Object *obj);
EAPI const char *elm_entry_selection_get(Evas_Object *obj);
EAPI void elm_entry_entry_insert(Evas_Object *obj, const char *entry);
EAPI void elm_entry_line_wrap_set(Evas_Object *obj, Evas_Bool wrap);
EAPI void elm_entry_editable_set(Evas_Object *obj, Evas_Bool editable);
EAPI void elm_entry_select_none(Evas_Object *obj);
EAPI void elm_entry_select_all(Evas_Object *obj);
/* smart callbacks called:
* "changed" - the text content changed
* "selection,start" - the user started selecting text
* "selection,changed" - the user modified the selection size/location
* "selection,cleared" - the user cleared the selection
* "selection,paste" - the user rrequested a paste of text
* "selection,copy" - the user copied the text
* "selection,cut" - the user cut the text
* "cursor,changed" - the cursor changed position
* "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchor_Info
* "activated" - when the enter key is pressed (useful for single line)
*/
/* composite widgets - these basically put together basic widgets above
* in convenient packages that do more than basic stuff */
typedef enum _Elm_Text_Format
{
ELM_TEXT_FORMAT_PLAIN_UTF8,
ELM_TEXT_FORMAT_MARKUP_UTF8
} Elm_Text_Format;
EAPI Evas_Object *elm_notepad_add(Evas_Object *parent);
EAPI void elm_notepad_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format);
/* smart callbacks called:
*/
typedef struct _Elm_Entry_Anchorview_Info Elm_Entry_Anchorview_Info;
struct _Elm_Entry_Anchorview_Info
{
const char *name;
int button;
Evas_Object *hover;
struct {
Evas_Coord x, y, w, h;
} anchor, hover_parent;
Evas_Bool hover_left : 1;
Evas_Bool hover_right : 1;
Evas_Bool hover_top : 1;
Evas_Bool hover_bottom : 1;
};
EAPI Evas_Object *elm_anchorview_add(Evas_Object *parent);
EAPI void elm_anchorview_text_set(Evas_Object *obj, const char *text);
EAPI void elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_anchorview_hover_style_set(Evas_Object *obj, const char *style);
EAPI void elm_anchorview_hover_end(Evas_Object *obj);
/* smart callbacks called:
* "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorview_Info
*/
typedef struct _Elm_Entry_Anchorblock_Info Elm_Entry_Anchorblock_Info;
struct _Elm_Entry_Anchorblock_Info
{
const char *name;
int button;
Evas_Object *hover;
struct {
Evas_Coord x, y, w, h;
} anchor, hover_parent;
Evas_Bool hover_left : 1;
Evas_Bool hover_right : 1;
Evas_Bool hover_top : 1;
Evas_Bool hover_bottom : 1;
};
EAPI Evas_Object *elm_anchorblock_add(Evas_Object *parent);
EAPI void elm_anchorblock_text_set(Evas_Object *obj, const char *text);
EAPI void elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style);
EAPI void elm_anchorblock_hover_end(Evas_Object *obj);
/* smart callbacks called:
* "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorblock_Info
*/
EAPI Evas_Object *elm_bubble_add(Evas_Object *parent);
EAPI void elm_bubble_label_set(Evas_Object *obj, const char *label);
EAPI void elm_bubble_info_set(Evas_Object *obj, const char *info);
EAPI void elm_bubble_content_set(Evas_Object *obj, Evas_Object *content);
EAPI void elm_bubble_icon_set(Evas_Object *obj, Evas_Object *icon);
2008-12-04 23:42:14 -08:00
EAPI void elm_bubble_corner_set(Evas_Object *obj, const char *corner);
/* smart callbacks called:
*/
2008-11-17 17:41:49 -08:00
2008-12-04 23:42:14 -08:00
EAPI Evas_Object *elm_photo_add(Evas_Object *parent);
EAPI void elm_photo_file_set(Evas_Object *obj, const char *file);
EAPI void elm_photo_size_set(Evas_Object *obj, int size);
/* smart callbacks called:
* "clicked" - the user clicked the icon
*/
2008-12-15 16:15:34 -08:00
typedef enum _Elm_Icon_Type
{
ELM_ICON_NONE,
ELM_ICON_FILE,
ELM_ICON_STANDARD
} Elm_Icon_Type;
typedef struct _Elm_Hoversel_Item Elm_Hoversel_Item;
EAPI Evas_Object *elm_hoversel_add(Evas_Object *parent);
EAPI void elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_hoversel_label_set(Evas_Object *obj, const char *label);
EAPI void elm_hoversel_icon_set(Evas_Object *obj, Evas_Object *icon);
EAPI void elm_hoversel_hover_end(Evas_Object *obj);
EAPI Elm_Hoversel_Item *elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data);
EAPI void elm_hoversel_item_del(Elm_Hoversel_Item *item);
typedef struct _Elm_Toolbar_Item Elm_Toolbar_Item;
EAPI Evas_Object *elm_toolbar_add(Evas_Object *parent);
EAPI Elm_Toolbar_Item *elm_toolbar_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data);
EAPI void elm_toolbar_item_del(Elm_Toolbar_Item *item);
EAPI void elm_toolbar_item_select(Elm_Toolbar_Item *item);
EAPI void elm_toolbar_scrollable_set(Evas_Object *obj, Evas_Bool scrollable);
////////////////////////////////////////////////////////////////////////////
/// FIXME: TODO LIST ///////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
2008-11-17 17:41:49 -08:00
//
//// (bugs - high priority)
// * scale change for hover doesnt seem to do new size alloc nicely
// * left/right arrow broken with password mode for entry + utf8 chars...
// * entry signal "changed" not called when deleting
// * bubble doesnt handle child size changes right
//
2008-11-17 17:41:49 -08:00
//// (incomplete - medium priority)
// * entry selection conflicts with finger scroll (make selection start/stop work on signals?)
//
// * add test for photo widget
// * add test for hoversel
// * disabled not supported
2008-10-07 00:45:49 -07:00
// * tab widget focusing (not useful for touchscreen tho...)
// * on the fly theme changes - test (should work)
// * need a hold-scroll counter in elm_widget
// * add fullscreen mode on/off for windows
// * hoversel only vertical right now - make horizontal
//
2008-11-17 17:41:49 -08:00
//// (more widgets/features - medium priority)
// * biglist widget (restricted format label + icon intended for massive lists)
// * listitem widget (can contain anything)
// * treeview widget (like biglist - but items can expand to sub-items)
2008-11-02 03:00:21 -08:00
// * radio widget + group handling
// * checkbox widget (like toggle)
// * page widget (for pushing/popping pages and going back and forward and flipping)
// * slider widget
//
// * toolbar widget (edje + box + button + separators)
// * in-window dialog container widget
// * separator widget (h/v)
// * slide-open "panel" that can hold stuff and optionally scroll
// * calendar widget (select date)
// * range selector (select range of values from X to Y over an interval)
// * "dialogbutton" widget (bigger button for bottom of wins)
// * dialog window widget
// * phone-number widget (hilight country dial prefixes, add flags, photos of contacts that match etc.)
// * imageview widget (for large not iconic images)
2008-11-14 21:18:36 -08:00
// * tiled image + zoom widget (tiled map viewer)
// * dialpad widget - need one with a phone dialpad
//
2008-11-17 17:41:49 -08:00
//// (improvements - low priority)
// * somehow a pdf(ps) viewer widget that doesnt make it gpl (lgpl)
// * emotion widget?
// * ewebkit widget
// * need url and path entry modes for vkbd
// * return list of toplevel window objects
// * widgets should show who is focused (not useful for touchscreen)
// * scroller could do with page up/down/left/right buttons and and idea of a page size
// * current sizing tree inefficient
// * need a way to filter entry data for entry (eg for phone numbers)
// * win should emit signals based on vkbd type - if it gets a message and is a vkbd win
// * win needs a way of setting aspect too
// * use the wrong call on the wrong widget and *BOOM*
//
//////////////////////////////////////////////////////////////////////////////
#endif