shelves... for holding gadcons. now i have a test shelf ... i can go back to

gadcon


SVN revision: 20272
This commit is contained in:
Carsten Haitzler 2006-02-04 06:45:13 +00:00
parent 04146f9dd8
commit 19d04b63db
8 changed files with 270 additions and 2 deletions

View File

@ -52,7 +52,8 @@ default_ilist.edc \
default_tlist.edc \
default_slider.edc \
default_exebuf.edc \
default_textblock.edc
default_textblock.edc \
default_shelf.edc
default.edj: Makefile $(EXTRA_DIST)
$(EDJE_CC) $(EDJE_FLAGS) \

View File

@ -61,5 +61,6 @@ collections {
#include "default_slider.edc"
#include "default_exebuf.edc"
#include "default_textblock.edc"
#include "default_shelf.edc"
}

View File

@ -0,0 +1,90 @@
images {
image: "e17_menu_bg.png" COMP;
image: "e17_menu_bg_border.png" COMP;
}
group {
name: "shelf/default/base";
parts {
part {
name: "base";
mouse_events: 0;
type: RECT;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 1.0;
offset: 1 0;
to_y: "base2";
}
rel2 {
relative: 1.0 1.0;
offset: -2 -2;
}
color: 221 221 221 255;
}
}
part {
name: "base2";
mouse_events: 0;
description {
state: "default" 0.0;
max: 99999 48;
align: 0.5 0.0;
rel1 {
relative: 0.0 0.0;
offset: 1 1;
}
rel2 {
relative: 1.0 1.0;
offset: -2 -2;
}
image {
normal: "e17_menu_bg.png";
}
fill {
smooth: 0;
}
}
}
part {
name: "base3";
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: 0 0;
}
rel2 {
relative: 1.0 1.0;
offset: -1 -1;
}
image {
normal: "e17_menu_bg_border.png";
border: 1 1 1 1;
middle: 0;
}
fill {
smooth: 0;
}
}
}
part {
name: "items";
mouse_events: 0;
type: SWALLOW;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: 2 2;
}
rel2 {
relative: 1.0 1.0;
offset: -3 -3;
}
}
}
}
}

View File

@ -139,7 +139,8 @@ e_color_class.h \
e_widget_textblock.h \
e_apps_error.h \
e_stolen.h \
e_gadcon.h
e_gadcon.h \
e_shelf.h
enlightenment_src = \
e_user.c \
@ -260,6 +261,7 @@ e_widget_textblock.c \
e_apps_error.c \
e_stolen.c \
e_gadcon.c \
e_shelf.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \

View File

@ -118,3 +118,4 @@
#include "e_apps_error.h"
#include "e_stolen.h"
#include "e_gadcon.h"
#include "e_shelf.h"

View File

@ -602,6 +602,20 @@ main(int argc, char **argv)
_e_main_shutdown(-1);
}
_e_main_shutdown_push(e_color_class_shutdown);
/* setup gadcon */
if (!e_gadcon_init())
{
e_error_message_show(_("Enlightenment cannot set up its gadget control system."));
_e_main_shutdown(-1);
}
_e_main_shutdown_push(e_gadcon_shutdown);
/* setup shelves */
if (!e_shelf_init())
{
e_error_message_show(_("Enlightenment cannot set up its shelf system."));
_e_main_shutdown(-1);
}
_e_main_shutdown_push(e_shelf_shutdown);
if (ipc_failed)
e_error_dialog_show(_("Enlightenment IPC setup error!"),
@ -641,6 +655,39 @@ main(int argc, char **argv)
/* run any testing code now we are set up */
e_test();
/* FIXME: for testing only */
if (0)
{
Evas_List *l, *l2, *l3, *managers;
int snum;
snum = 0;
for (l = e_manager_list(); l; l = l->next)
{
E_Manager *man;
man = l->data;
for (l2 = man->containers; l2; l2 = l2->next)
{
E_Container *con;
con = l2->data;
for (l3 = con->zones; l3; l3 = l3->next)
{
E_Zone *zone;
E_Shelf *es;
char buf[256];
zone = l3->data;
snprintf(buf, sizeof(buf), "shelf.%i", snum);
snum++;
es = e_shelf_zone_new(zone, buf);
e_shelf_populate(es);
}
}
}
}
/* no longer starting up */
starting = 0;
/* start our main loop */

90
src/bin/e_shelf.c Normal file
View File

@ -0,0 +1,90 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "e.h"
static void _e_shelf_free(E_Shelf *es);
static Evas_List *shelves = NULL;
/* externally accessible functions */
EAPI int
e_shelf_init(void)
{
return 1;
}
EAPI int
e_shelf_shutdown(void)
{
return 1;
}
EAPI E_Shelf *
e_shelf_zone_new(E_Zone *zone, char *name)
{
E_Shelf *es;
char buf[1024];
es = E_OBJECT_ALLOC(E_Shelf, E_SHELF_TYPE, _e_shelf_free);
if (!es) return NULL;
/* FIXME: geometry, layer and style shoudl be loaded from config for this
named shelf */
es->popup = e_popup_new(zone, 0, 0, zone->w, 32);
e_popup_layer_set(es->popup, 255);
es->style = strdup("default");
es->ee = es->popup->ecore_evas;
es->evas = es->popup->evas;
es->o_base = edje_object_add(es->evas);
es->name = strdup(name);
snprintf(buf, sizeof(buf), "shelf/%s/base", es->style);
evas_object_resize(es->o_base, es->popup->w, es->popup->h);
if (!e_theme_edje_object_set(es->o_base, "base/theme/shelf", buf))
e_theme_edje_object_set(es->o_base, "base/theme/shelf", "shelf/default/base");
evas_object_show(es->o_base);
e_popup_edje_bg_object_set(es->popup, es->o_base);
e_popup_show(es->popup);
es->gadcon = e_gadcon_swallowed_new(es->o_base, "items");
shelves = evas_list_append(shelves, es);
return es;
}
EAPI E_Shelf *
e_shelf_inline_new(Ecore_Evas *ee, char *name)
{
E_Shelf *es;
/* not done yet */
return NULL;
es = E_OBJECT_ALLOC(E_Shelf, E_SHELF_TYPE, _e_shelf_free);
if (!es) return NULL;
return es;
}
EAPI void
e_shelf_populate(E_Shelf *es)
{
E_OBJECT_CHECK(es);
E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
/* actually tell all the moduels that livbed in this shelf to populate it */
}
/* local subsystem functions */
static void
_e_shelf_free(E_Shelf *es)
{
shelves = evas_list_remove(shelves, es);
e_object_del(E_OBJECT(es->gadcon));
E_FREE(es->name);
E_FREE(es->style);
evas_object_del(es->o_base);
e_object_del(E_OBJECT(es->popup));
free(es);
}

36
src/bin/e_shelf.h Normal file
View File

@ -0,0 +1,36 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
typedef struct _E_Shelf E_Shelf;
#else
#ifndef E_SHELF_H
#define E_SHELF_H
#define E_SHELF_TYPE 0xE0b01024
struct _E_Shelf
{
E_Object e_obj_inherit;
E_Popup *popup; /* NULL if its within an existing canvas */
Evas_Object *o_base;
Ecore_Evas *ee;
Evas *evas;
E_Gadcon *gadcon;
char *name;
char *style;
/* FIXME: we need a more powerful sizing/placement policy rather than just
* x,y, width & height
*/
};
EAPI int e_shelf_init(void);
EAPI int e_shelf_shutdown(void);
EAPI E_Shelf *e_shelf_zone_new(E_Zone *zone, char *name);
EAPI E_Shelf *e_shelf_inline_new(Ecore_Evas *ee, char *name);
EAPI void e_shelf_populate(E_Shelf *es);
#endif
#endif