Enlightenment CVS committal Author : lordchaos Project : e17 Module : proto
Dir : e17/proto/entropy/src/dialogs Modified Files: etk_mime_dialog_main.c Log Message: * Allow adding on new applications to a mime type =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/entropy/src/dialogs/etk_mime_dialog_main.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- etk_mime_dialog_main.c 19 Mar 2006 00:35:26 -0000 1.6 +++ etk_mime_dialog_main.c 19 Mar 2006 04:28:42 -0000 1.7 @@ -2,10 +2,19 @@ #include <Etk.h> static int _etk_mime_dialog_displayed = 0; -static Etk_Widget* mime_dialog_window; -static Etk_Widget* mime_dialog_add_edit_window; +static int _mime_current_binding = -1; +static Etk_Widget* mime_dialog_window = NULL; +static Etk_Widget* mime_dialog_add_edit_window = NULL; +static Etk_Widget* mime_dialog_add_edit_application_window = NULL; + static Etk_Widget* etk_mime_mime_entry; static Etk_Widget* etk_mime_desc_entry; + +static Etk_Widget* etk_mime_app_name_entry; +static Etk_Widget* etk_mime_app_exe_entry; +static Etk_Widget* etk_mime_app_args_entry; + + static Etk_Widget* _etk_mime_dialog_main_tree = NULL; static Etk_Widget* _etk_mime_dialog_sub_tree = NULL; @@ -15,8 +24,11 @@ void etk_mime_dialog_add_edit_create(); void etk_mime_dialog_create(); void etk_mime_dialog_tree_populate(); +void etk_mime_dialog_application_create(char* mime, int pos); +void _entropy_etk_mime_dialog_app_add_edit_final_cb(Etk_Object* w, void* user_data); +void etk_mime_dialog_populate_nth_binding_apps(int record); - +/*Various callbacks*/ static Etk_Bool _etk_window_deleted_cb (Etk_Object * object, void *data) { @@ -24,26 +36,134 @@ etk_object_destroy(ETK_OBJECT(mime_dialog_window)); /*Save the config*/ - entropy_config_eet_config_save() + entropy_config_eet_config_save(); return ETK_TRUE; } -static void _etk_mime_dialog_main_row_clicked(Etk_Object *object, Etk_Tree_Row *row, Etk_Event_Mouse_Up_Down *event, void *data) +static Etk_Bool +_etk_window_deleted_add_cb (Etk_Object * object, void *data) +{ + etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_window)); + mime_dialog_add_edit_window = NULL; + + return ETK_TRUE; +} + +static Etk_Bool +_etk_window_deleted_add_app_cb (Etk_Object * object, void *data) +{ + etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_application_window)); + mime_dialog_add_edit_application_window = NULL; + + return ETK_TRUE; +} + +void _entropy_etk_mime_dialog_add_edit_cancel_cb(Etk_Object* w, void* user_data) +{ + if (mime_dialog_add_edit_window) { + etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_window)); + mime_dialog_add_edit_window = NULL; + } +} + +void _entropy_etk_mime_dialog_app_add_edit_cancel_cb(Etk_Object* w, void* user_data) +{ + if (mime_dialog_add_edit_application_window) { + etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_application_window)); + mime_dialog_add_edit_application_window = NULL; + + } +} + + +void _entropy_etk_mime_dialog_add_edit_final_cb(Etk_Object* w, void* user_data) +{ + const char *type_text = etk_entry_text_get(ETK_ENTRY(etk_mime_mime_entry)); + const char *desc_text = etk_entry_text_get(ETK_ENTRY(etk_mime_desc_entry)); + + entropy_core_mime_action_add((char*)type_text, (char*)desc_text); + + etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_window)); + mime_dialog_add_edit_window= NULL; + + etk_mime_dialog_tree_populate(); +} + + +void _entropy_etk_mime_dialog_app_add_edit_final_cb(Etk_Object* w, void* user_data) +{ + const char *name = etk_entry_text_get(ETK_ENTRY(etk_mime_app_name_entry)); + const char *exe = etk_entry_text_get(ETK_ENTRY(etk_mime_app_exe_entry)); + const char *args = etk_entry_text_get(ETK_ENTRY(etk_mime_app_args_entry)); + const char *mime = user_data; + + if (mime && args && exe && name) + entropy_core_mime_application_add((char*)mime, (char*)name, (char*)exe, (char*)args); + + etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_application_window)); + mime_dialog_add_edit_application_window = NULL; + + + etk_mime_dialog_populate_nth_binding_apps(_mime_current_binding); +} + + +void _entropy_etk_mime_dialog_edit_cb(Etk_Object* w, void* user_data) +{ + Etk_Tree_Row* row = etk_tree_selected_row_get(ETK_TREE(_etk_mime_dialog_main_tree)); + char* mime = NULL; + char* program = NULL; + Etk_Tree_Col* col1; + Etk_Tree_Col* col2; + + col1 = etk_tree_nth_col_get(ETK_TREE(_etk_mime_dialog_main_tree), 0); + col2 = etk_tree_nth_col_get(ETK_TREE(_etk_mime_dialog_main_tree), 1); + + etk_tree_row_fields_get(row, col1, &mime, col2, &program,NULL); + + etk_mime_dialog_add_edit_create(mime,program); +} + + +void _entropy_etk_mime_dialog_add_cb(Etk_Object* w, void* user_data) +{ + etk_mime_dialog_add_edit_create(NULL,NULL); +} + +void _entropy_etk_mime_dialog_application_add_cb(Etk_Object* w, void* user_data) +{ + Etk_Tree_Col* col2; + Etk_Tree_Row* row; + char* mime_type = NULL; + + col2 = etk_tree_nth_col_get(ETK_TREE(_etk_mime_dialog_main_tree), 1); + row = etk_tree_selected_row_get(ETK_TREE(_etk_mime_dialog_main_tree)); + + if (row) { + etk_tree_row_fields_get(row, col2, &mime_type, NULL); + if (mime_type) { + etk_mime_dialog_application_create(mime_type,-1); + } + } +} + + +/*--------------------------*/ + +void etk_mime_dialog_populate_nth_binding_apps(int record) { - int record; Entropy_Config_Mime_Binding* binding; Evas_List* l; Entropy_Config_Mime_Binding_Action* action; - Etk_Widget* tree = _etk_mime_dialog_sub_tree; Etk_Tree_Col* col1; Etk_Tree_Col* col2; Etk_Tree_Col* col3; + Etk_Widget* tree = _etk_mime_dialog_sub_tree; + Etk_Tree_Row* row; - record = (int)etk_tree_row_data_get(row); - printf("Got record: %d\n", record); - + binding = evas_list_nth(entropy_core_get_core()->config->Config_Mimes->mime_bindings, record); etk_tree_freeze(ETK_TREE(tree)); @@ -72,26 +192,18 @@ } - -void _entropy_etk_mime_dialog_add_edit_cancel_cb(Etk_Object* w, void* user_data) +static void _etk_mime_dialog_main_row_clicked(Etk_Object *object, Etk_Tree_Row *row, Etk_Event_Mouse_Up_Down *event, void *data) { - if (mime_dialog_add_edit_window) { - etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_window)); - } -} + int record; + Etk_Widget* tree = _etk_mime_dialog_sub_tree; -void _entropy_etk_mime_dialog_add_edit_final_cb(Etk_Object* w, void* user_data) -{ - const char *type_text = etk_entry_text_get(ETK_ENTRY(etk_mime_mime_entry)); - const char *desc_text = etk_entry_text_get(ETK_ENTRY(etk_mime_desc_entry)); + record = (int)etk_tree_row_data_get(row); + _mime_current_binding = record; - entropy_core_mime_action_add((char*)type_text, (char*)desc_text); + etk_mime_dialog_populate_nth_binding_apps(record); +} - etk_object_destroy(ETK_OBJECT(mime_dialog_add_edit_window)); - mime_dialog_add_edit_window= NULL; - etk_mime_dialog_tree_populate(); -} void etk_mime_dialog_tree_populate() { @@ -135,11 +247,17 @@ Etk_Widget* label; Etk_Widget* button; + if (mime_dialog_add_edit_window) + return; + mime_dialog_add_edit_window = etk_window_new(); - etk_window_title_set(ETK_WINDOW(mime_dialog_add_edit_window), "Program Associations"); + etk_window_title_set(ETK_WINDOW(mime_dialog_add_edit_window), "MIME Type"); etk_window_wmclass_set(ETK_WINDOW(mime_dialog_add_edit_window), "mimedialog", "mimedialog"); etk_widget_size_request_set(ETK_WIDGET(mime_dialog_add_edit_window), 250, 80); + etk_signal_connect ("delete_event", ETK_OBJECT (mime_dialog_add_edit_window), + ETK_CALLBACK (_etk_window_deleted_add_cb), NULL); + table = etk_table_new(2,3,ETK_FALSE); label = etk_label_new("MIME-Type"); @@ -182,9 +300,6 @@ etk_signal_connect("pressed", ETK_OBJECT(button), ETK_CALLBACK(_entropy_etk_mime_dialog_add_edit_cancel_cb), NULL ); - - - etk_container_add(ETK_CONTAINER(mime_dialog_add_edit_window), table); @@ -199,26 +314,86 @@ } -void _entropy_etk_mime_dialog_edit_cb(Etk_Object* w, void* user_data) -{ - Etk_Tree_Row* row = etk_tree_selected_row_get(ETK_TREE(_etk_mime_dialog_main_tree)); - char* mime = NULL; - char* program = NULL; - Etk_Tree_Col* col1; - Etk_Tree_Col* col2; - col1 = etk_tree_nth_col_get(ETK_TREE(_etk_mime_dialog_main_tree), 0); - col2 = etk_tree_nth_col_get(ETK_TREE(_etk_mime_dialog_main_tree), 1); - etk_tree_row_fields_get(row, col1, &mime, col2, &program,NULL); +void etk_mime_dialog_application_create(char* mime, int pos) { + Etk_Widget* table; + Etk_Widget* label; + Etk_Widget* button; + Etk_Widget* window; + + if (mime_dialog_add_edit_application_window) + return; + + mime_dialog_add_edit_application_window = etk_window_new(); + window = mime_dialog_add_edit_application_window; - etk_mime_dialog_add_edit_create(mime,program); -} + etk_window_title_set(ETK_WINDOW(window), "Program Associations"); + etk_window_wmclass_set(ETK_WINDOW(window), "mimedialog", "mimedialog"); + etk_widget_size_request_set(ETK_WIDGET(window), 250, 80); + etk_signal_connect ("delete_event", ETK_OBJECT (window), + ETK_CALLBACK (_etk_window_deleted_add_app_cb), NULL); + + table = etk_table_new(2,4,ETK_FALSE); + + label = etk_label_new("Program Name (Description)"); + etk_table_attach(ETK_TABLE(table), label,0,0,0,0, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + + etk_mime_app_name_entry = etk_entry_new(); + /*if (mime) { + printf("Setting mime to '%s'...\n", mime); + etk_entry_text_set(ETK_ENTRY(etk_mime_mime_entry), mime); + }*/ + etk_table_attach(ETK_TABLE(table), etk_mime_app_name_entry,1,1,0,0, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + + label = etk_label_new("Executable"); + etk_table_attach(ETK_TABLE(table), label,0,0,1,1, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + + etk_mime_app_exe_entry = etk_entry_new(); + etk_table_attach(ETK_TABLE(table), etk_mime_app_exe_entry,1,1,1,1, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + + + label = etk_label_new("Arguments"); + etk_table_attach(ETK_TABLE(table), label,0,0,2,2, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + + etk_mime_app_args_entry = etk_entry_new(); + etk_table_attach(ETK_TABLE(table), etk_mime_app_args_entry,1,1,2,2, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + + + + button = etk_button_new_with_label("OK"); + etk_table_attach(ETK_TABLE(table), button,0,0,3,3, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + etk_signal_connect("pressed", ETK_OBJECT(button), ETK_CALLBACK(_entropy_etk_mime_dialog_app_add_edit_final_cb), + mime ); + + button = etk_button_new_with_label("Cancel"); + etk_table_attach(ETK_TABLE(table), button,1,1,3,3, + 0,0, + ETK_FILL_POLICY_HFILL | ETK_FILL_POLICY_VFILL | ETK_FILL_POLICY_HEXPAND); + etk_signal_connect("pressed", ETK_OBJECT(button), ETK_CALLBACK(_entropy_etk_mime_dialog_app_add_edit_cancel_cb), + NULL ); + + etk_container_add(ETK_CONTAINER(window), table); + + + + etk_widget_show_all(window); -void _entropy_etk_mime_dialog_add_cb(Etk_Object* w, void* user_data) -{ - etk_mime_dialog_add_edit_create(NULL,NULL); } void etk_mime_dialog_create() @@ -311,7 +486,7 @@ button = etk_button_new_with_label("Add"); etk_box_pack_start(ETK_BOX(hbox), button, ETK_FALSE, ETK_FALSE, 0); - //etk_signal_connect("pressed", ETK_OBJECT(button), ETK_CALLBACK(_entropy_etk_mime_dialog_edit_cb), NULL); + etk_signal_connect("pressed", ETK_OBJECT(button), ETK_CALLBACK(_entropy_etk_mime_dialog_application_add_cb), NULL); // button = etk_button_new_with_label("Edit"); etk_box_pack_start(ETK_BOX(hbox), button, ETK_FALSE, ETK_FALSE, 0); ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs