From 0b8583f2934012dab78279285909ef8116f4b966 Mon Sep 17 00:00:00 2001 From: Christopher Michael Date: Thu, 15 Oct 2009 20:34:42 +0000 Subject: [PATCH] Actually commit panel files. SVN revision: 43101 --- legacy/elementary/src/bin/test_panel.c | 29 +++++ legacy/elementary/src/lib/elm_panel.c | 160 +++++++++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 legacy/elementary/src/bin/test_panel.c create mode 100644 legacy/elementary/src/lib/elm_panel.c diff --git a/legacy/elementary/src/bin/test_panel.c b/legacy/elementary/src/bin/test_panel.c new file mode 100644 index 0000000000..b2df437546 --- /dev/null +++ b/legacy/elementary/src/bin/test_panel.c @@ -0,0 +1,29 @@ +#include +#ifndef ELM_LIB_QUICKLAUNCH + +void +test_panel(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *panel; + + win = elm_win_add(NULL, "panel", ELM_WIN_BASIC); + elm_win_title_set(win, "Panel"); + 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); + + panel = elm_panel_add(win); + elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT); + elm_panel_timeout_set(panel, 2); + evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(panel); + + evas_object_resize(win, 300, 300); + evas_object_show(win); +} + +#endif diff --git a/legacy/elementary/src/lib/elm_panel.c b/legacy/elementary/src/lib/elm_panel.c new file mode 100644 index 0000000000..70990fd697 --- /dev/null +++ b/legacy/elementary/src/lib/elm_panel.c @@ -0,0 +1,160 @@ +#include +#include "elm_priv.h" + +/** + * @defgroup Panel Panel + * + * This is a panel object + */ + +typedef struct _Widget_Data Widget_Data; +struct _Widget_Data +{ + Evas_Object *parent, *panel, *btn, *icn; + Elm_Panel_Orient orient; + int timeout; + Ecore_Timer *timer; +}; + +static void _del_hook(Evas_Object *obj); +static void _theme_hook(Evas_Object *obj); +static void _sizing_eval(Evas_Object *obj); +static void _parent_resize(void *data, Evas *evas, Evas_Object *obj, void *event); +static void _btn_click(void *data, Evas_Object *obj, void *event); + +static void +_del_hook(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + + free(wd); +} + +static void +_theme_hook(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + + _elm_theme_set(wd->panel, "panel", "base", "default"); + edje_object_scale_set(wd->panel, elm_widget_scale_get(obj) * _elm_config->scale); + _sizing_eval(obj); +} + +static void +_sizing_eval(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Coord x, y, w, h; + Evas_Coord px, py, pw, ph; + + evas_object_geometry_get(wd->parent, &x, &y, &w, &h); + evas_object_geometry_get(wd->panel, &px, &py, &pw, &ph); + switch (wd->orient) + { + case ELM_PANEL_ORIENT_TOP: + evas_object_move(wd->panel, x, y); + evas_object_resize(wd->panel, w, 48); + break; + case ELM_PANEL_ORIENT_BOTTOM: + evas_object_move(wd->panel, x, h - 48); + evas_object_resize(wd->panel, w, 48); + break; + case ELM_PANEL_ORIENT_LEFT: + evas_object_move(wd->panel, x, y); + evas_object_resize(wd->panel, 48, h); + break; + case ELM_PANEL_ORIENT_RIGHT: + evas_object_move(wd->panel, (x + w - 48), y); + evas_object_resize(wd->panel, 48, h); + break; + } +} + +static void +_parent_resize(void *data, Evas *evas, Evas_Object *obj, void *event) +{ + _sizing_eval(data); +} + +static void +_btn_click(void *data, Evas_Object *obj, void *event) +{ + Evas_Object *o = data; + Widget_Data *wd = elm_widget_data_get(o); + + elm_icon_standard_set(wd->icn, "arrow_right"); +} + +EAPI Evas_Object * +elm_panel_add(Evas_Object *parent) +{ + Evas_Object *obj; + Evas *evas; + Widget_Data *wd; + + wd = ELM_NEW(Widget_Data); + wd->parent = parent; + evas = evas_object_evas_get(parent); + + obj = elm_widget_add(evas); + elm_widget_type_set(obj, "panel"); + elm_widget_sub_object_add(parent, obj); + elm_widget_data_set(obj, wd); + elm_widget_del_hook_set(obj, _del_hook); + elm_widget_theme_hook_set(obj, _theme_hook); + + wd->panel = edje_object_add(evas); + elm_panel_orient_set(obj, ELM_PANEL_ORIENT_LEFT); + elm_widget_resize_object_set(obj, wd->panel); + + wd->icn = elm_icon_add(obj); + elm_icon_standard_set(wd->icn, "arrow_left"); + evas_object_size_hint_aspect_set(wd->icn, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_widget_sub_object_add(obj, wd->icn); + + wd->btn = elm_button_add(obj); + elm_button_icon_set(wd->btn, wd->icn); + elm_object_style_set(wd->btn, "anchor"); + evas_object_size_hint_align_set(wd->btn, 0.0, 0.0); + elm_widget_sub_object_add(obj, wd->btn); + evas_object_smart_callback_add(wd->btn, "clicked", _btn_click, obj); + edje_object_part_swallow(wd->panel, "elm.swallow.arrow", wd->btn); + + evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_RESIZE, + _parent_resize, obj); + + return obj; +} + +EAPI void +elm_panel_orient_set(Evas_Object *obj, Elm_Panel_Orient orient) +{ + Widget_Data *wd = elm_widget_data_get(obj); + + wd->orient = orient; + switch (orient) + { + case ELM_PANEL_ORIENT_TOP: + _elm_theme_set(wd->panel, "panel", "base", "top"); + break; + case ELM_PANEL_ORIENT_BOTTOM: + _elm_theme_set(wd->panel, "panel", "base", "bottom"); + break; + case ELM_PANEL_ORIENT_LEFT: + _elm_theme_set(wd->panel, "panel", "base", "left"); + break; + case ELM_PANEL_ORIENT_RIGHT: + _elm_theme_set(wd->panel, "panel", "base", "right"); + break; + } + _sizing_eval(obj); +} + +EAPI void +elm_panel_timeout_set(Evas_Object *obj, int timeout) +{ + Widget_Data *wd = elm_widget_data_get(obj); + + wd->timeout = timeout; +// _timer_init(obj); +}