Page MenuHomePhabricator

Enlightenment Settings Pane
Updated 1,416 Days AgoPublic

Enlightenment Settings Pane

Currently the enlightenment settings pane is in a little mess, this page is a summary what should be done.

Generel Improvments

Generel Tasks

In e20 Enlightenment will use Elementary to display widgets etc. this means the complete Settings pane have to be rewritten.

Solutions

In the end things will get displayed in the Elementary Settingspane

The core settings panel will be in core enlightenment. Modules (or other bits of E) will register categories/items along with string(s) for searching through as well as a callback for providing the panel for that item in the config tree. That callback creates widgets for that Panel. It may be necessary for that Panel to actually have a standard vertical box in a scroller?) and there be multiple callbacks registered for that one item, with them being called in priority order to fill the box, so you can have a series of settings widgets vertically that come from different places. This will not be used often, but may be used to place settings in multiple places where they may be logical.

Example:

CPUFreq settings may belong in both CPUFreq and in Power management settings. Mouse settings may contain both Bindings for mouse and Mouse look and size. Mouse Look may belong under Mouse and under Appearance. etc.

Api

/**
 * How does this work ?:
 * An Item is a "voice" in the panel tree menu
 * A Panel is the whole page associated with a given Item
 * A Part is single "piece" of a page
 *
 * Example:
 * Item: "Look" 
 * Item: "Look/Theme"
 * Part: "Look/Theme" "gtk_theme"
 * Part: "Look/Theme" "icon_theme"
 *
 * TODO: need_save callback?
 *
 */
typedef struct 
{
   const char *path;
   const char *icon;
   const char *label;
   const char *help;
   int priority;
   
   Eina_List *parts;
} E_Config_Panel_Item;
 
typedef struct
{
   const char *name;
   const char *title;
   const char *help;
   int priority;
  
   E_Config_Panel_Create_Cb *create_func;
   E_Config_Panel_Apply_Cb *apply_func;
   void *data;
} E_Config_Panel_Part;

typedef Evas_Object* (*E_Config_Panel_Create_Cb)(char *path, char *part, Evas_Object *parent, void *data);
typedef Eina_Bool (*E_Config_Panel_Apply_Cb)(char *path, char *part, Evas_Object *obj, void *data);

EAPI void e_config_panel_item_add(char *path, char *icon, char *label, char *help, int priority);
EAPI void e_config_panel_item_del(char *path);

EAPI void e_config_panel_part_add(char *path, char *part, char *title, char *help, int priority,
                                  E_Config_Panel_Create_Cb *create_cb,
                                  E_Config_Panel_Apply_Cb *apply_cb,
                                  void *data);
EAPI void e_config_panel_part_del(char *path, char *part);

EAPI void e_config_panel_show(char *item); // NULL to start in the main menu
Last Author
bu5hm4n
Last Edited
Jan 24 2015, 9:21 AM
Projects
None
Subscribers
None