00001 #include "dEvian.h"
00002
00003 static void _devian_main_menu_cb_add_devian(void *data, E_Menu *m, E_Menu_Item *mi);
00004 static void _devian_main_menu_cb_theme_change(void *data, E_Menu *m, E_Menu_Item *mi);
00005 static void _devian_main_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi);
00006 static void _devian_main_menu_cb_delete_all_devians(void *data, E_Menu *m, E_Menu_Item *mi);
00007 static E_Menu *_menu_theme_generate(void);
00008
00009 static void _devian_menu_cb_source_infos(void *data, E_Menu *m, E_Menu_Item *mi);
00010 static void _devian_menu_cb_source_viewer(void *data, E_Menu *m, E_Menu_Item *mi);
00011 static void _devian_menu_cb_devian_delete(void *data, E_Menu *m, E_Menu_Item *mi);
00012 static void _devian_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi);
00013 static void _devian_menu_cb_set_container_box(void *data, E_Menu *m, E_Menu_Item *mi);
00014 static void _devian_menu_cb_set_source_picture(void *data, E_Menu *m, E_Menu_Item *mi);
00015 static void _devian_menu_cb_edit_mode(void *data, E_Menu *m, E_Menu_Item *mi);
00016
00017
00018
00019 static void _devian_main_menu_cb_add_devian(void *data, E_Menu *m, E_Menu_Item *mi)
00020 {
00021 devian_devian_add(NULL);
00022 }
00023
00024 static void _devian_main_menu_cb_theme_change(void *data, E_Menu *m, E_Menu_Item *mi)
00025 {
00026 if (!mi->label)
00027 return;
00028
00029 devian_container_theme_set(mi->label);
00030 }
00031
00032 static void _devian_main_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi)
00033 {
00034 dEvianM->dialog_conf = devian_config_dialog_main(dEvianM->container);
00035 e_object_ref(E_OBJECT(dEvianM->dialog_conf));
00036 }
00037
00038 static void _devian_main_menu_cb_delete_all_devians(void *data, E_Menu *m, E_Menu_Item *mi)
00039 {
00040 devian_devian_del_all();
00041 }
00042
00043 static E_Menu *_menu_theme_generate(void)
00044 {
00045 char *file, *ext;
00046 char name[DEVIAN_MAX_PATH];
00047 char themes_path[DEVIAN_MAX_PATH];
00048 int name_l;
00049 E_Menu *mn;
00050 E_Menu_Item *mi;
00051 Ecore_List *list = NULL;
00052
00053 if (dEvianM->themes_menu)
00054 {
00055 e_menu_deactivate(dEvianM->themes_menu);
00056 e_object_del(E_OBJECT(dEvianM->themes_menu));
00057 }
00058 mn = e_menu_new();
00059 dEvianM->themes_menu = mn;
00060
00061 snprintf(themes_path, DEVIAN_MAX_PATH, "%s%s", e_module_dir_get(dEvianM->module), "/themes");
00062
00063 if (!ecore_file_is_dir(themes_path))
00064 return NULL;
00065
00066 list = ecore_file_ls(themes_path);
00067 if (ecore_list_is_empty(list) || !list)
00068 {
00069 char buf[4096];
00070 snprintf(buf, sizeof(buf),
00071 _(
00072 "<hilight>Directory %s is empty or doesnt exists.</hilight><br><br>"
00073 "No themes found !!!"
00074 ),
00075 themes_path
00076 );
00077 e_module_dialog_show(_("dEvian Module Error"), buf);
00078 return NULL;
00079 }
00080
00081 while ((file = (char*)ecore_list_next(list)))
00082 {
00083 ext = strrchr(file, '.');
00084 if (!ext)
00085 continue;
00086 name_l = strlen(file) - strlen(ext);
00087 if (name_l<=0)
00088 continue;
00089 name[name_l] = '\0';
00090 strncpy(name, file, name_l);
00091
00092 mi = e_menu_item_new(mn);
00093 e_menu_item_label_set(mi, name);
00094 e_menu_item_radio_set(mi, 1);
00095 e_menu_item_radio_group_set(mi, 1);
00096 if ( !strcmp(dEvianM->conf->theme, name) )
00097 e_menu_item_toggle_set(mi, 1);
00098 e_menu_item_callback_set(mi, _devian_main_menu_cb_theme_change, NULL);
00099 }
00100
00101 return mn;
00102 }
00103
00104 E_Menu *devian_menu_main_menu_init(void)
00105 {
00106 E_Menu_Item *mi;
00107 E_Menu *mn;
00108
00109 DMAIN(("dEvian : main menu"));
00110
00111 mn = e_menu_new();
00112
00113 mi = e_menu_item_new(mn);
00114 e_menu_item_label_set(mi, _("Add dEvian"));
00115 e_menu_item_callback_set(mi, _devian_main_menu_cb_add_devian, NULL);
00116
00117 mi = e_menu_item_new(mn);
00118 e_menu_item_separator_set(mi, 1);
00119
00120 if ( !(dEvianM->themes_menu = _menu_theme_generate()) )
00121 return NULL;
00122
00123 mi = e_menu_item_new(mn);
00124 e_menu_item_label_set(mi, _("Theme"));
00125 e_menu_item_submenu_set(mi, dEvianM->themes_menu);
00126
00127 mi = e_menu_item_new(mn);
00128 e_menu_item_separator_set(mi, 1);
00129
00130 mi = e_menu_item_new(mn);
00131 e_menu_item_label_set(mi, _("Configure Main"));
00132 e_menu_item_callback_set(mi, _devian_main_menu_cb_configure, NULL);
00133
00134 mi = e_menu_item_new(mn);
00135 e_menu_item_label_set(mi, _("Delete all dEvians"));
00136 e_menu_item_callback_set(mi, _devian_main_menu_cb_delete_all_devians, NULL);
00137
00138 dEvianM->main_menu = mn;
00139
00140 DMAIN(("dEvian : main menu fin"));
00141
00142 return mn;
00143 }
00144
00145 void devian_menu_main_menu_shutdown(void)
00146 {
00147 if (dEvianM->main_menu)
00148 {
00149 e_menu_deactivate(dEvianM->main_menu);
00150 e_object_del(E_OBJECT(dEvianM->main_menu));
00151 dEvianM->main_menu = NULL;
00152 }
00153 }
00154
00155 void devian_menu_main_menu_refresh(void)
00156 {
00157 devian_menu_main_menu_shutdown();
00158 if ( !(devian_menu_main_menu_init()) )
00159 {
00160 fprintf(stderr, "dEvian: Bad, main menu could be regenerated ... going to crash ...\n");
00161 }
00162
00163 }
00164
00165
00166
00167
00168
00169
00170
00171 static void _devian_menu_cb_source_infos(void *data, E_Menu *m, E_Menu_Item *mi)
00172 {
00173 dEvian *devian;
00174 devian = data;
00175
00176 devian_source_dialog_infos(devian);
00177 }
00178
00179 static void _devian_menu_cb_source_viewer(void *data, E_Menu *m, E_Menu_Item *mi)
00180 {
00181 dEvian *devian;
00182 devian = data;
00183
00184 devian_source_viewer(devian);
00185 }
00186
00187 static void _devian_menu_cb_devian_delete(void *data, E_Menu *m, E_Menu_Item *mi)
00188 {
00189 dEvian *devian;
00190
00191 devian = data;
00192
00193
00194 if (!devian)
00195 return;
00196 if ((!devian->source) || (!devian->conf) || (!devian->menu))
00197 return;
00198
00199 devian_devian_del(devian, 0);
00200 }
00201
00202 static void _devian_menu_cb_set_container_box(void *data, E_Menu *m, E_Menu_Item *mi)
00203 {
00204
00205 }
00206
00207 static void _devian_menu_cb_set_source_picture(void *data, E_Menu *m, E_Menu_Item *mi)
00208 {
00209
00210 }
00211
00212 static void _devian_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi)
00213 {
00214 dEvian *devian;
00215
00216 devian = data;
00217 devian->dialog_conf = devian_config_dialog_devian(dEvianM->container, devian);
00218 e_object_ref(E_OBJECT(devian->dialog_conf));
00219 }
00220
00221 static void _devian_menu_cb_edit_mode(void *data, E_Menu *m, E_Menu_Item *mi)
00222 {
00223 e_gadman_mode_set(dEvianM->container->gadman, E_GADMAN_MODE_EDIT);
00224 }
00225
00226 E_Menu *devian_menu_init(dEvian *devian)
00227 {
00228 E_Menu *mn;
00229 E_Menu_Item *mi;
00230
00231 DMAIN(("dEvian : menu"));
00232
00233 mn = e_menu_new();
00234
00235 mi = e_menu_item_new(mn);
00236 e_menu_item_label_set(mi, _("Source Infos"));
00237 e_menu_item_callback_set(mi, _devian_menu_cb_source_infos, devian);
00238 mi = e_menu_item_new(mn);
00239 e_menu_item_label_set(mi, _("Source Viewer"));
00240 e_menu_item_callback_set(mi, _devian_menu_cb_source_viewer, devian);
00241
00242 mi = e_menu_item_new(mn);
00243 e_menu_item_label_set(mi, _("delete dEvian"));
00244 e_menu_item_callback_set(mi, _devian_menu_cb_devian_delete, devian);
00245
00246 mi = e_menu_item_new(mn);
00247 e_menu_item_separator_set(mi, 1);
00248
00249
00250 mi = e_menu_item_new(mn);
00251 e_menu_item_label_set(mi, _("Container Box"));
00252 e_menu_item_radio_set(mi, 1);
00253 e_menu_item_radio_group_set(mi, 1);
00254 if ( devian->conf->container_type == CONTAINER_BOX )
00255 e_menu_item_toggle_set(mi, 1);
00256 e_menu_item_callback_set(mi, _devian_menu_cb_set_container_box, devian);
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267 mi = e_menu_item_new(mn);
00268 e_menu_item_separator_set(mi, 1);
00269
00270 mi = e_menu_item_new(mn);
00271 e_menu_item_label_set(mi, _("Source Picture"));
00272 e_menu_item_radio_set(mi, 1);
00273 e_menu_item_radio_group_set(mi, 2);
00274 if ( devian->conf->source_type == SOURCE_PICTURE )
00275 e_menu_item_toggle_set(mi, 1);
00276 e_menu_item_callback_set(mi, _devian_menu_cb_set_source_picture, devian);
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287 mi = e_menu_item_new(mn);
00288 e_menu_item_separator_set(mi, 1);
00289
00290 mi = e_menu_item_new(mn);
00291 e_menu_item_label_set(mi, _("Configure"));
00292 e_menu_item_callback_set(mi, _devian_menu_cb_configure, devian);
00293
00294 mi = e_menu_item_new(mn);
00295 e_menu_item_label_set(mi, _("General"));
00296 e_menu_item_submenu_set(mi, dEvianM->main_menu);
00297
00298 mi = e_menu_item_new(mn);
00299 e_menu_item_label_set(mi, _("Edit Mode"));
00300 e_menu_item_callback_set(mi, _devian_menu_cb_edit_mode, devian);
00301
00302 DMAIN(("dEvian : menu fin"));
00303
00304 return mn;
00305 }
00306
00307 void devian_menu_shutdown(dEvian *devian)
00308 {
00309 if (devian->menu)
00310 {
00311 e_menu_deactivate(devian->menu);
00312 e_object_del(E_OBJECT(devian->menu));
00313 devian->menu = NULL;
00314 }
00315 }
00316
00317