Enlightenment CVS committal Author : moom Project : e17 Module : proto
Dir : e17/proto/etk/src/bin Modified Files: etk_text_view_test.c Log Message: * [Theme] Fix a "bug" in the colorpicker theme, and improve the scrollbar look. * [Signal] Fix a bug when calling etk_signal_stop(). * [Widget] Remove etk_widget_event_key_propagation_stop() since we don't need it anymore. Use etk_signal_stop() instead. * [Textblock] A lot of fixes, TODO-- and work on it. Add a small IM-like test app. =================================================================== RCS file: /cvs/e/e17/proto/etk/src/bin/etk_text_view_test.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- etk_text_view_test.c 22 Jul 2006 15:32:07 -0000 1.12 +++ etk_text_view_test.c 26 Jul 2006 14:57:18 -0000 1.13 @@ -1,18 +1,84 @@ #include "etk_test.h" +#include <stdlib.h> +#include <string.h> + +typedef struct _IM_Button_Type +{ + Etk_Stock_Id stock_id; + char *open_tag; + char *close_tag; +} IM_Button_Type; + +static void _etk_test_text_view_tag_window_create(void *data); +static void _etk_test_text_view_im_window_create(void *data); +static void _etk_test_im_editor_key_down_cb(Etk_Object *object, void *event, void *data); + +static IM_Button_Type _im_buttons[] = +{ + { ETK_STOCK_FORMAT_TEXT_BOLD, "<b>", "</b>" }, + { ETK_STOCK_FORMAT_TEXT_ITALIC, "<i>", "</i>" }, + { ETK_STOCK_FORMAT_TEXT_UNDERLINE, "<u>", "</u>" } +}; +static char *_im_buddies[] = +{ + "<b><font color=#16569e>Jack B:</font></b> ", + "<b><font color=#609028>Chloe O:</font></b> ", + "<b><font color=#a82f2f>David P:</font></b> " +}; +static int _num_im_buttons = sizeof(_im_buttons) / sizeof(_im_buttons[0]); +static int _num_im_buddies = sizeof(_im_buddies) / sizeof(_im_buddies[0]); +static int _num_messages = 0; /* Creates the window for the text view test */ void etk_test_text_view_window_create(void *data) { static Etk_Widget *win = NULL; Etk_Widget *vbox; + Etk_Widget *button; + + if (win) + { + etk_widget_show(win); + return; + } + + win = etk_window_new(); + etk_window_title_set(ETK_WINDOW(win), "Etk Text View Test"); + etk_signal_connect("delete_event", ETK_OBJECT(win), ETK_CALLBACK(etk_window_hide_on_delete), NULL); + + vbox = etk_vbox_new(ETK_TRUE, 0); + etk_container_add(ETK_CONTAINER(win), vbox); + + button = etk_button_new_with_label("Tag Presentation"); + etk_signal_connect_swapped("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_text_view_tag_window_create), NULL); + etk_box_pack_start(ETK_BOX(vbox), button, ETK_TRUE, ETK_FALSE, 0); + + button = etk_button_new_with_label("Instant Messenger"); + etk_signal_connect_swapped("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_text_view_im_window_create), NULL); + etk_box_pack_start(ETK_BOX(vbox), button, ETK_TRUE, ETK_FALSE, 0); + + etk_widget_show_all(win); +} + +/************************** + * + * Tag Presentation + * + **************************/ + +/* Creates the window for the tag presentation */ +static void _etk_test_text_view_tag_window_create(void *data) +{ + static Etk_Widget *win = NULL; + Etk_Widget *vbox; Etk_Widget *text_view; if (win) { - etk_widget_show_all(ETK_WIDGET(win)); + etk_widget_show(win); return; - } - + } + win = etk_window_new(); etk_window_title_set(ETK_WINDOW(win), "Etk Text View Test"); etk_widget_size_request_set(win, 150, 150); @@ -71,8 +137,117 @@ etk_box_pack_start(ETK_BOX(vbox), text_view, ETK_TRUE, ETK_TRUE, 0); - //printf("%s\n", etk_string_get(etk_textblock_text_get(ETK_TEXT_VIEW(text_view)->textblock, ETK_FALSE))); - etk_textblock_printf(ETK_TEXT_VIEW(text_view)->textblock); + etk_widget_show_all(win); +} + +/************************** + * + * Instant Messenger + * + **************************/ + +/* Creates the window of the instant messenger test app */ +static void _etk_test_text_view_im_window_create(void *data) +{ + static Etk_Widget *win = NULL; + Etk_Widget *vpaned; + Etk_Widget *vbox, *hbox; + Etk_Widget *button; + Etk_Widget *message_view, *editor_view; + Etk_Textblock *tb; + int i; + + if (win) + { + etk_widget_show(win); + return; + } + + win = etk_window_new(); + etk_window_title_set(ETK_WINDOW(win), "Etk Text View Test: Instant Messenger"); + etk_window_resize(ETK_WINDOW(win), 300, 300); + etk_container_border_width_set(ETK_CONTAINER(win), 3); + etk_signal_connect("delete_event", ETK_OBJECT(win), ETK_CALLBACK(etk_window_hide_on_delete), NULL); + + vpaned = etk_vpaned_new(); + etk_container_add(ETK_CONTAINER(win), vpaned); + + message_view = etk_text_view_new(); + etk_widget_size_request_set(message_view, 200, 100); + etk_paned_child1_set(ETK_PANED(vpaned), message_view, ETK_TRUE); + tb = etk_text_view_textblock_get(ETK_TEXT_VIEW(message_view)); + etk_textblock_text_set(tb, + "<i>Connected with David P. and Chloe O.</i>\n\n" + "<b><font color=#a82f2f>David P:</font></b> Hello Jack!\n" + "<b><font color=#a82f2f>David P:</font></b> How are you my friend?\n", + ETK_TRUE); + + vbox = etk_vbox_new(ETK_FALSE, 0); + etk_paned_child2_set(ETK_PANED(vpaned), vbox, ETK_FALSE); + + + /* TODO: We must use a toolbar here instead */ + hbox = etk_hbox_new(ETK_FALSE, 0); + etk_box_pack_start(ETK_BOX(vbox), hbox, ETK_FALSE, ETK_TRUE, 0); + for (i = 0; i < _num_im_buttons; i++) + { + button = etk_button_new_from_stock(_im_buttons[i].stock_id); + etk_box_pack_start(ETK_BOX(hbox), button, ETK_FALSE, ETK_TRUE, 0); + } + + + editor_view = etk_text_view_new(); + etk_widget_size_request_set(editor_view, 200, 80); + etk_box_pack_start(ETK_BOX(vbox), editor_view, ETK_TRUE, ETK_TRUE, 0); + etk_signal_connect("key_down", ETK_OBJECT(editor_view), ETK_CALLBACK(_etk_test_im_editor_key_down_cb), message_view); etk_widget_show_all(win); +} + +/* Called when a key is pressed when the editor text view is focused */ +static void _etk_test_im_editor_key_down_cb(Etk_Object *object, void *event, void *data) +{ + Etk_Event_Key_Up_Down *key_event; + Etk_Textblock *message_tb, *editor_tb; + Etk_Textblock_Iter *iter, *cursor; + Etk_String *message; + int buddy_id; + + if (!(message_tb = etk_text_view_textblock_get(ETK_TEXT_VIEW(data)))) + return; + if (!(editor_tb = etk_text_view_textblock_get(ETK_TEXT_VIEW(object)))) + return; + + key_event = event; + message = etk_textblock_text_get(editor_tb, ETK_TRUE); + if ((strcmp(key_event->key, "Return") == 0 || strcmp(key_event->key, "KP_Enter") == 0)) + { + iter = etk_textblock_iter_new(message_tb); + etk_textblock_iter_forward_end(iter); + + /* TODO: we need to wrap the modifiers! */ + if (evas_key_modifier_is_set(key_event->modifiers, "Shift")) + { + cursor = etk_text_view_cursor_get(ETK_TEXT_VIEW(object)); + etk_textblock_insert(editor_tb, cursor, "\n", -1); + } + else + { + if (etk_string_length_get(message) > 0) + { + + buddy_id = _num_messages % _num_im_buddies; + etk_textblock_insert_markup(message_tb, iter, _im_buddies[buddy_id], -1); + etk_textblock_insert_markup(message_tb, iter, etk_string_get(message), -1); + etk_textblock_insert(message_tb, iter, "\n", -1); + + etk_textblock_clear(editor_tb); + etk_object_destroy(ETK_OBJECT(message)); + _num_messages++; + } + } + + etk_textblock_iter_free(iter); + etk_signal_stop(); + } } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs