edj_mgr - refactoring.

removed edj_mgr instance handling outside of the edj_mgr.
edj_mgr is also singleton instance.
don't need to handle the instant unnecessarily.
This commit is contained in:
ChunEon Park 2014-02-04 22:20:40 +09:00
parent 542e2a9075
commit d72b0756d2
8 changed files with 76 additions and 74 deletions

View File

@ -414,8 +414,7 @@ program_run(edit_data *ed, char *cur)
char *program = parser_name_get(ed->pd, cur);
if (program)
{
edj_mgr *em = edj_mgr_get();
view_data *vd = edj_mgr_view_get(em, NULL);
view_data *vd = edj_mgr_view_get(NULL);
view_program_run(vd, program);
free(program);
}

View File

@ -3,27 +3,49 @@
const double VIEW_CACHING_TIME = 60 * 30;
static edj_mgr *g_em;
typedef struct edj_data_s
{
view_data *vd;
Ecore_Timer *timer;
} edj_data;
struct edj_mgr_s
typedef struct edj_mgr_s
{
Eina_List *edjs;
edj_data *edj;
Evas_Object *layout;
Eina_Bool reload_need : 1;
};
} edj_mgr;
static edj_mgr *g_em = NULL;
static void
view_del_cb(void *data)
{
edj_mgr *em = g_em;
edj_data *edj = data;
em->edjs = eina_list_remove(em->edjs, edj);
if (edj->timer) ecore_timer_del(edj->timer);
if (em->edj == edj) em->edj = NULL;
free(edj);
}
static Eina_Bool
view_del_timer_cb(void *data)
{
view_data *vd = data;
edj_data *edj = view_data_get(vd);
edj->timer = NULL;
edj_mgr_view_del(vd);
return ECORE_CALLBACK_CANCEL;
}
void
edj_mgr_clear(edj_mgr *em)
edj_mgr_clear()
{
edj_data *edj;
edj_mgr *em = g_em;
EINA_LIST_FREE(em->edjs, edj)
{
@ -36,36 +58,34 @@ edj_mgr_clear(edj_mgr *em)
em->reload_need = EINA_FALSE;
}
edj_mgr *
void
edj_mgr_init(Evas_Object *parent)
{
edj_mgr *em = calloc(1, sizeof(edj_mgr));
g_em = em;
Evas_Object *layout = elm_layout_add(parent);
elm_layout_file_set(layout, EDJE_PATH, "viewer_layout");
evas_object_show(layout);
em->layout = layout;
g_em = em;
return em;
}
edj_mgr *
edj_mgr_get()
{
return g_em;
}
void
edj_mgr_term(edj_mgr *em)
edj_mgr_term()
{
edj_mgr *em = g_em;
edj_mgr_clear(em);
evas_object_del(em->layout);
free(em);
}
view_data *
edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group)
edj_mgr_view_get(Eina_Stringshare *group)
{
if (!em) em = g_em;
edj_mgr *em = g_em;
if (!em) return NULL;
if (!group && em->edj) return em->edj->vd;
edj_data *edj;
@ -79,8 +99,9 @@ edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group)
}
void
edj_mgr_view_del(edj_mgr *em, view_data *vd)
edj_mgr_view_del(view_data *vd)
{
edj_mgr *em = g_em;
edj_data *edj = view_data_get(vd);
em->edjs = eina_list_remove(em->edjs, edj);
if (edj->timer) ecore_timer_del(edj->timer);
@ -88,20 +109,11 @@ edj_mgr_view_del(edj_mgr *em, view_data *vd)
free(edj);
}
static void
view_del_cb(void *data)
view_data *
edj_mgr_view_new(const char *group, stats_data *sd)
{
edj_mgr *em = g_em;
edj_data *edj = data;
em->edjs = eina_list_remove(em->edjs, edj);
if (edj->timer) ecore_timer_del(edj->timer);
if (em->edj == edj) em->edj = NULL;
free(edj);
}
view_data *
edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd)
{
edj_data *edj = calloc(1, sizeof(edj_data));
if (!edj) return NULL;
@ -113,26 +125,18 @@ edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd)
}
edj->vd = vd;
edj_mgr_view_switch_to(em, vd);
edj_mgr_view_switch_to(vd);
em->edjs = eina_list_append(em->edjs, edj);
return vd;
}
static Eina_Bool
view_del_timer_cb(void *data)
{
view_data *vd = data;
edj_data *edj = view_data_get(vd);
edj->timer = NULL;
edj_mgr_view_del(g_em, vd);
return ECORE_CALLBACK_CANCEL;
}
view_data *
edj_mgr_view_switch_to(edj_mgr *em, view_data *vd)
edj_mgr_view_switch_to(view_data *vd)
{
edj_mgr *em = g_em;
if (em->edj && (em->edj->vd == vd)) return vd;
//Switch views
@ -178,19 +182,22 @@ edj_mgr_view_switch_to(edj_mgr *em, view_data *vd)
}
Evas_Object *
edj_mgr_obj_get(edj_mgr *em)
edj_mgr_obj_get()
{
edj_mgr *em = g_em;
return em->layout;
}
void
edj_mgr_reload_need_set(edj_mgr *em, Eina_Bool reload)
edj_mgr_reload_need_set(Eina_Bool reload)
{
edj_mgr *em = g_em;
em->reload_need = reload;
}
Eina_Bool
edj_mgr_reload_need_get(edj_mgr *em)
edj_mgr_reload_need_get()
{
edj_mgr *em = g_em;
return em->reload_need;
}

View File

@ -44,7 +44,7 @@ file_set_timer_cb(void *data)
return ECORE_CALLBACK_CANCEL;
}
edj_mgr_reload_need_set(edj_mgr_get(), EINA_TRUE);
edj_mgr_reload_need_set(EINA_TRUE);
return ECORE_CALLBACK_RENEW;
}

View File

@ -6,7 +6,6 @@
typedef struct app_s
{
edit_data *ed;
edj_mgr *em;
stats_data *sd;
Eio_Monitor *edc_monitor;
@ -312,7 +311,7 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev)
if (!ad->ctrl_pressed) return ECORE_CALLBACK_PASS_ON;
//Scale up/down layout
view_data *vd = edj_mgr_view_get(ad->em, NULL);
view_data *vd = edj_mgr_view_get(NULL);
double scale = config_view_scale_get();
if (event->z < 0) scale += 0.1;
@ -332,9 +331,9 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev)
static void
edc_view_set(app_data *ad, stats_data *sd, Eina_Stringshare *group)
{
view_data *vd = edj_mgr_view_get(ad->em, group);
if (vd) edj_mgr_view_switch_to(ad->em, vd);
else vd = edj_mgr_view_new(ad->em, group, sd);
view_data *vd = edj_mgr_view_get(group);
if (vd) edj_mgr_view_switch_to(vd);
else vd = edj_mgr_view_new(group, sd);
if (!vd) return;
@ -385,11 +384,11 @@ config_update_cb(void *data)
view_dummy_toggle(VIEW_DATA, EINA_FALSE);
//previous build was failed, Need to rebuild then reload the edj.
if (edj_mgr_reload_need_get(ad->em))
if (edj_mgr_reload_need_get())
{
build_edc();
edit_changed_set(ad->ed, EINA_FALSE);
edj_mgr_clear(ad->em);
edj_mgr_clear();
edc_view_set(ad, ad->sd, stats_group_name_get(ad->sd));
if (ad->edc_monitor) eio_monitor_del(ad->edc_monitor);
ad->edc_monitor = eio_monitor_add(config_edc_path_get());
@ -400,7 +399,7 @@ config_update_cb(void *data)
edit_changed_set(ad->ed, EINA_FALSE);
}
view_scale_set(edj_mgr_view_get(ad->em, NULL), config_view_scale_get());
view_scale_set(edj_mgr_view_get(NULL), config_view_scale_get());
}
static void
@ -511,8 +510,8 @@ elm_setup()
static void
edj_mgr_set(app_data *ad)
{
ad->em = edj_mgr_init(base_layout_get());
base_left_view_set(edj_mgr_obj_get(ad->em));
edj_mgr_init(base_layout_get());
base_left_view_set(edj_mgr_obj_get());
}
static void
@ -559,7 +558,7 @@ term(app_data *ad)
build_term();
menu_term();
edit_term(ad->ed);
edj_mgr_term(ad->em);
edj_mgr_term();
stats_term(ad->sd);
base_gui_term();
config_term();

View File

@ -675,7 +675,7 @@ edc_reload(menu_data *md, const char *edc_path)
{
config_edc_path_set(edc_path);
edit_new(md->ed);
edj_mgr_reload_need_set(edj_mgr_get(), EINA_TRUE);
edj_mgr_reload_need_set(EINA_TRUE);
config_apply();
}
@ -769,7 +769,7 @@ fileselector_save_done_cb(void *data, Evas_Object *obj, void *event_info)
return;
}
edj_mgr_reload_need_set(edj_mgr_get(), EINA_TRUE);
edj_mgr_reload_need_set(EINA_TRUE);
config_apply();
fileselector_close(md);

View File

@ -9,7 +9,6 @@ typedef struct parser_s parser_data;
typedef struct attr_value_s attr_value;
typedef struct syntax_helper_s syntax_helper;
typedef struct indent_s indent_data;
typedef struct edj_mgr_s edj_mgr;
#include "edc_editor.h"
#include "menu.h"

View File

@ -1,14 +1,14 @@
edj_mgr *edj_mgr_get();
edj_mgr *edj_mgr_init(Evas_Object *parent);
void edj_mgr_term(edj_mgr *em);
view_data * edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd);
view_data *edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group);
Evas_Object * edj_mgr_obj_get(edj_mgr *em);
view_data *edj_mgr_view_switch_to(edj_mgr *em, view_data *vd);
void edj_mgr_view_del(edj_mgr *em, view_data *vd);
#define VIEW_DATA edj_mgr_view_get(NULL)
void edj_mgr_reload_need_set(edj_mgr *em, Eina_Bool reload);
Eina_Bool edj_mgr_reload_need_get(edj_mgr *em);
void edj_mgr_clear(edj_mgr *em);
void edj_mgr_init(Evas_Object *parent);
void edj_mgr_term();
view_data * edj_mgr_view_new(const char *group, stats_data *sd);
view_data *edj_mgr_view_get(Eina_Stringshare *group);
Evas_Object * edj_mgr_obj_get();
view_data *edj_mgr_view_switch_to(view_data *vd);
void edj_mgr_view_del(view_data *vd);
void edj_mgr_reload_need_set(Eina_Bool reload);
Eina_Bool edj_mgr_reload_need_get();
void edj_mgr_clear();

View File

@ -1,5 +1,3 @@
#define VIEW_DATA edj_mgr_view_get(NULL, NULL)
void menu_init(edit_data *ed);
void menu_term();
void menu_toggle();