Enlightenment CVS committal Author : moom Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_bin.c etk_bin.h etk_box.c etk_notebook.c etk_notebook.h etk_paned.c etk_paned.h Log Message: * Notebook, box and paned now correctly emit "child_added" and "child_removed" * Fix etk_notebook_page_remove() (not tested though) =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_bin.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- etk_bin.c 13 Aug 2006 22:42:23 -0000 1.13 +++ etk_bin.c 15 Aug 2006 22:26:55 -0000 1.14 @@ -244,7 +244,6 @@ if (!(bin = ETK_BIN(object)) || !bin->child) return; - /* TODO; warnings? */ etk_widget_swallow_widget(ETK_WIDGET(bin), "swallow_area", bin->child); } =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_bin.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- etk_bin.h 13 May 2006 12:04:00 -0000 1.6 +++ etk_bin.h 15 Aug 2006 22:26:55 -0000 1.7 @@ -23,7 +23,7 @@ #define ETK_IS_BIN(obj) (ETK_OBJECT_CHECK_TYPE((obj), ETK_BIN_TYPE)) /** - * @brief @widget The structure of a bin + * @brief @widget A container that can contain only one child * @structinfo */ struct Etk_Bin =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_box.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- etk_box.c 15 Aug 2006 20:20:43 -0000 1.14 +++ etk_box.c 15 Aug 2006 22:26:55 -0000 1.15 @@ -1,6 +1,8 @@ /** @file etk_box.c */ #include "etk_box.h" #include <stdlib.h> +#include "etk_signal.h" +#include "etk_signal_callback.h" #include "etk_utils.h" /** @@ -514,6 +516,8 @@ etk_widget_parent_set_full(widget, NULL, ETK_FALSE); etk_widget_size_recalc_queue(box_widget); free(cell); + + etk_signal_emit_by_name("child_removed", ETK_OBJECT(box), NULL, widget); } } @@ -1040,6 +1044,7 @@ } etk_widget_parent_set(child, ETK_WIDGET(box)); + etk_signal_emit_by_name("child_added", ETK_OBJECT(box), NULL, child); } /* Gets the cell of the box containing the widget */ =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_notebook.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- etk_notebook.c 8 Aug 2006 18:51:22 -0000 1.27 +++ etk_notebook.c 15 Aug 2006 22:26:55 -0000 1.28 @@ -2,10 +2,10 @@ #include "etk_notebook.h" #include <stdlib.h> #include <string.h> -#include "etk_utils.h" +#include "etk_radio_button.h" #include "etk_signal.h" #include "etk_signal_callback.h" -#include "etk_radio_button.h" +#include "etk_utils.h" /** * @addtogroup Etk_Notebook @@ -35,6 +35,8 @@ static void _etk_notebook_child_remove(Etk_Container *container, Etk_Widget *widget); static Evas_List *_etk_notebook_children_get(Etk_Container *container); +static void _etk_notebook_frame_child_added_cb(Etk_Object *object, Etk_Widget *child, void *data); +static void _etk_notebook_frame_child_removed_cb(Etk_Object *object, Etk_Widget *child, void *data); static void _etk_notebook_tab_toggled_cb(Etk_Object *object, void *data); static void _etk_notebook_tab_bar_focused_cb(Etk_Object *object, void *data); static void _etk_notebook_tab_bar_unfocused_cb(Etk_Object *object, void *data); @@ -129,7 +131,7 @@ } /** - * @brief Creates a new page and inserts it to the notebook at the given position + * @brief Creates a new page and inserts it to the notebook at a given position * @param notebook a notebook * @param tab_label the text to set to the tab's label * @param page_child the child of the new page. This widget will be shown when the page is set as the current one @@ -162,29 +164,40 @@ * @brief Removes from the notebook the page corresponding to the index * @param notebook a notebook * @param page_num the index of the page to remove + * @warning The widget of the child of the page will be automatically destroyed too. + * To avoid this, call etk_notebook_page_child_set(notebook, page_num, NULL); before */ void etk_notebook_page_remove(Etk_Notebook *notebook, int page_num) { Evas_List *l; - Etk_Notebook_Page *page; + Etk_Notebook_Page *page, *new_current = NULL; if (!notebook || !(l = evas_list_nth_list(notebook->pages, page_num))) return; - + page = l->data; - etk_widget_parent_set(page->frame, NULL); etk_object_destroy(ETK_OBJECT(page->frame)); - etk_widget_parent_set(page->tab, NULL); etk_object_destroy(ETK_OBJECT(page->tab)); - free(page); + + if (notebook->current_page == page) + { + if (l->next) + new_current = l->next->data; + else if (l->prev) + new_current = l->prev->data; + } + notebook->pages = evas_list_remove_list(notebook->pages, l); + free(page); + - if (!notebook->pages) + if (notebook->current_page != new_current) { - notebook->current_page = NULL; - ETK_WIDGET(notebook)->focus_order = evas_list_free(ETK_WIDGET(notebook)->focus_order); - etk_signal_emit(_etk_notebook_signals[ETK_NOTEBOOK_PAGE_CHANGED_SIGNAL], ETK_OBJECT(notebook), NULL); + etk_toggle_button_active_set(ETK_TOGGLE_BUTTON(new_current->tab), ETK_TRUE); + notebook->current_page = new_current; } + + etk_widget_size_recalc_queue(ETK_WIDGET(notebook)); } /** @@ -304,7 +317,7 @@ /** * @brief Sets the label of a tab of the notebook * @param notebook a notebook - * @param page_num the index of the page that you want you set the tab label + * @param page_num the index of the page you want to set the tab label of * @param tab_label the new label of the tab */ void etk_notebook_page_tab_label_set(Etk_Notebook *notebook, int page_num, const char *tab_label) @@ -319,7 +332,7 @@ /** * @brief Gets the label of a tab of the notebook * @param notebook a notebook - * @param page_num the index of the page that you want to get the tab label + * @param page_num the index of the page you want to get the tab label of * @return Returns the label, or NULL on failure */ const char *etk_notebook_page_tab_label_get(Etk_Notebook *notebook, int page_num) @@ -670,6 +683,26 @@ * **************************/ +/* Called when a child is added to a page frame */ +static void _etk_notebook_frame_child_added_cb(Etk_Object *object, Etk_Widget *child, void *data) +{ + Etk_Object *notebook; + + if (!(notebook = ETK_OBJECT(data))) + return; + etk_signal_emit_by_name("child_added", notebook, NULL, child); +} + +/* Called when a child is removed from a page frame */ +static void _etk_notebook_frame_child_removed_cb(Etk_Object *object, Etk_Widget *child, void *data) +{ + Etk_Object *notebook; + + if (!(notebook = ETK_OBJECT(data))) + return; + etk_signal_emit_by_name("child_removed", notebook, NULL, child); +} + /* Called when a tab is toggled (activated or deactivated) */ static void _etk_notebook_tab_toggled_cb(Etk_Object *object, void *data) { @@ -801,6 +834,7 @@ etk_widget_show(new_page->tab); etk_signal_connect("toggled", ETK_OBJECT(new_page->tab), ETK_CALLBACK(_etk_notebook_tab_toggled_cb), notebook); + if (notebook->tab_bar_visible) new_page->frame = etk_widget_new(ETK_BIN_TYPE, "theme_group", "frame", NULL); else @@ -808,6 +842,12 @@ etk_widget_parent_set(new_page->frame, ETK_WIDGET(notebook)); etk_widget_visibility_locked_set(new_page->frame, ETK_TRUE); etk_widget_hide(new_page->frame); + + etk_signal_connect("child_added", ETK_OBJECT(new_page->frame), + ETK_CALLBACK(_etk_notebook_frame_child_added_cb), notebook); + etk_signal_connect("child_removed", ETK_OBJECT(new_page->frame), + ETK_CALLBACK(_etk_notebook_frame_child_removed_cb), notebook); + etk_bin_child_set(ETK_BIN(new_page->frame), page_child); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_notebook.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- etk_notebook.h 8 Aug 2006 16:33:01 -0000 1.17 +++ etk_notebook.h 15 Aug 2006 22:26:55 -0000 1.18 @@ -9,12 +9,14 @@ /** TODO/FIXME list: * - Improve the default theme of the tabs * - Make the tab bar "swallowable" - * - Focus the first widget of the page when the current page is changed + * - Fix focus problems + * - Find a way to access clipped tabs when there are two many tabs (popup menus ?) */ /** * @defgroup Etk_Notebook Etk_Notebook - * @brief The Etk_Notebook widget is a container that can contain several widgets in different pages accessible via tabs + * @brief The Etk_Notebook widget is a container that can contain several widgets in different pages + * accessible through tabs * @{ */ @@ -34,7 +36,7 @@ } Etk_Notebook_Page; /** - * @brief @widget The structure of a notebook + * @brief @widget A container that can contain several widgets in different pages accessible through tabs * @structinfo */ struct Etk_Notebook @@ -54,28 +56,27 @@ Etk_Type *etk_notebook_type_get(); Etk_Widget *etk_notebook_new(); -int etk_notebook_page_prepend(Etk_Notebook *notebook, const char *tab_label, Etk_Widget *page_child); -int etk_notebook_page_append(Etk_Notebook *notebook, const char *tab_label, Etk_Widget *page_child); -int etk_notebook_page_insert(Etk_Notebook *notebook, const char *tab_label, Etk_Widget *page_child, int position); +int etk_notebook_page_prepend(Etk_Notebook *notebook, const char *tab_label, Etk_Widget *page_child); +int etk_notebook_page_append(Etk_Notebook *notebook, const char *tab_label, Etk_Widget *page_child); +int etk_notebook_page_insert(Etk_Notebook *notebook, const char *tab_label, Etk_Widget *page_child, int position); void etk_notebook_page_remove(Etk_Notebook *notebook, int page_num); -int etk_notebook_num_pages_get(Etk_Notebook *notebook); +int etk_notebook_num_pages_get(Etk_Notebook *notebook); void etk_notebook_current_page_set(Etk_Notebook *notebook, int page_num); -int etk_notebook_current_page_get(Etk_Notebook *notebook); -int etk_notebook_page_index_get(Etk_Notebook *notebook, Etk_Widget *child); +int etk_notebook_current_page_get(Etk_Notebook *notebook); +int etk_notebook_page_index_get(Etk_Notebook *notebook, Etk_Widget *child); int etk_notebook_page_prev(Etk_Notebook *notebook); int etk_notebook_page_next(Etk_Notebook *notebook); -void etk_notebook_page_tab_label_set(Etk_Notebook *notebook, int page_num, const char *tab_label); +void etk_notebook_page_tab_label_set(Etk_Notebook *notebook, int page_num, const char *tab_label); const char *etk_notebook_page_tab_label_get(Etk_Notebook *notebook, int page_num); -void etk_notebook_page_tab_widget_set(Etk_Notebook *notebook, int page_num, Etk_Widget *tab_widget); +void etk_notebook_page_tab_widget_set(Etk_Notebook *notebook, int page_num, Etk_Widget *tab_widget); Etk_Widget *etk_notebook_page_tab_widget_get(Etk_Notebook *notebook, int page_num); - -void etk_notebook_page_child_set(Etk_Notebook *notebook, int page_num, Etk_Widget *child); +void etk_notebook_page_child_set(Etk_Notebook *notebook, int page_num, Etk_Widget *child); Etk_Widget *etk_notebook_page_child_get(Etk_Notebook *notebook, int page_num); -void etk_notebook_tabs_visible_set(Etk_Notebook *notebook, Etk_Bool tabs_visible); +void etk_notebook_tabs_visible_set(Etk_Notebook *notebook, Etk_Bool tabs_visible); Etk_Bool etk_notebook_tabs_visible_get(Etk_Notebook *notebook); /** @} */ =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_paned.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- etk_paned.c 28 May 2006 15:56:06 -0000 1.9 +++ etk_paned.c 15 Aug 2006 22:26:55 -0000 1.10 @@ -120,8 +120,8 @@ * @brief Sets the first child of the paned (the left one for a hpaned, the top one for a vpaned) * @param paned a paned * @param child the child to set - * @param expand if @a expand == ETK_TRUE, when the paned will be resized, the first child will try to expand as much as - * possible + * @param expand if @a expand is ETK_TRUE, when the paned will be resized, the child will try to expand + * as much as possible */ void etk_paned_child1_set(Etk_Paned *paned, Etk_Widget *child, Etk_Bool expand) { @@ -140,6 +140,8 @@ etk_widget_parent_set(child, ETK_WIDGET(paned)); etk_widget_raise(paned->separator); + + etk_signal_emit_by_name("child_added", ETK_OBJECT(paned), NULL, child); } } @@ -147,8 +149,8 @@ * @brief Sets the second child of the paned (the right one for a hpaned, the bottom one for a vpaned) * @param paned a paned * @param child the child to set - * @param expand if @a expand == ETK_TRUE, when the paned will be resized, the first child will try to expand as much as - * possible + * @param expand if @a expand is ETK_TRUE, when the paned will be resized, the first child will try to expand + * as much as possible */ void etk_paned_child2_set(Etk_Paned *paned, Etk_Widget *child, Etk_Bool expand) { @@ -167,6 +169,8 @@ etk_widget_parent_set(child, ETK_WIDGET(paned)); etk_widget_raise(paned->separator); + + etk_signal_emit_by_name("child_added", ETK_OBJECT(paned), NULL, child); } } @@ -464,6 +468,7 @@ etk_widget_parent_set_full(widget, NULL, ETK_FALSE); etk_widget_size_recalc_queue(ETK_WIDGET(paned)); + etk_signal_emit_by_name("child_removed", ETK_OBJECT(paned), NULL, widget); } /* Returns the children of the paned */ @@ -654,8 +659,10 @@ * * @image html widgets/paned.png * Etk_Paned is the abstract class for two derived widgets: Etk_HPaned and Etk_VPaned. - * - Etk_HPaned is a paned where the two children are arranged horizontally and separated by a draggable vertical separator - * - Etk_VPaned is a paned where the two children are arranged vertically and separated by a draggable horizontal separator + * - Etk_HPaned is a paned where the two children are arranged horizontally and + * separated by a vertical draggable separator + * - Etk_VPaned is a paned where the two children are arranged vertically and + * separated by a horizontal draggable separator * @n @n * * \par Object Hierarchy: =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_paned.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- etk_paned.h 28 May 2006 15:56:06 -0000 1.5 +++ etk_paned.h 15 Aug 2006 22:26:55 -0000 1.6 @@ -38,7 +38,7 @@ #define ETK_IS_VPANED(obj) (ETK_OBJECT_CHECK_TYPE((obj), ETK_VPANED_TYPE)) /** - * @brief @widget The structure of a paned + * @brief @widget A container that can contain two children separated by a draggable separator * @structinfo */ struct Etk_Paned @@ -59,7 +59,7 @@ }; /** - * @brief @widget The structure of a hpaned + * @brief @widget An horizontal paned * @structinfo */ struct Etk_HPaned @@ -70,7 +70,7 @@ }; /** - * @brief @widget The structure of a vpaned + * @brief @widget A vertical paned * @structinfo */ struct Etk_VPaned ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs