[prev in list] [next in list] [prev in thread] [next in thread] 

List:       enlightenment-svn
Subject:    E CVS: libs/etk andrunko
From:       Enlightenment CVS <noreply () fitx-00 ! ewr ! caoslinux ! org>
Date:       2007-07-31 19:22:40
Message-ID: 20070731192240.0E556A30A2 () cvs ! caoslinux ! org
[Download RAW message or body]

Enlightenment CVS committal

Author  : andrunko
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
	etk_notebook.c etk_notebook.h 


Log Message:
Add support for notebook tabs homogeneous.

===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_notebook.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -3 -r1.37 -r1.38
--- etk_notebook.c	31 Jul 2007 18:42:35 -0000	1.37
+++ etk_notebook.c	31 Jul 2007 19:22:39 -0000	1.38
@@ -21,7 +21,8 @@
 
 enum Etk_Notebook_Property_Id
 {
-   ETK_NOTEBOOK_TABS_VISIBLE_PROPERTY
+   ETK_NOTEBOOK_TABS_VISIBLE_PROPERTY,
+   ETK_NOTEBOOK_TABS_HOMOGENEOUS_PROPERTY
 };
 
 static void _etk_notebook_constructor(Etk_Notebook *notebook);
@@ -75,6 +76,8 @@
       
       etk_type_property_add(notebook_type, "tabs-visible", \
                ETK_NOTEBOOK_TABS_VISIBLE_PROPERTY,
             ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, \
etk_property_value_bool(ETK_TRUE)); +      etk_type_property_add(notebook_type, \
"tabs-homogeneous", ETK_NOTEBOOK_TABS_HOMOGENEOUS_PROPERTY, +            \
ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, \
etk_property_value_bool(ETK_FALSE));  
       notebook_type->property_set = _etk_notebook_property_set;
       notebook_type->property_get = _etk_notebook_property_get;
@@ -472,6 +475,33 @@
    return notebook->tab_bar_visible;
 }
 
+/**
+ * @brief Sets whether the tab-bar tabs must have the same size or not
+ * @param notebook a notebook
+ * @param tabs_homogeneous if @a tabs_homogeneous is ETK_TRUE, the tab-bar tabs will \
have the same size. + */
+void etk_notebook_tabs_homogeneous_set(Etk_Notebook *notebook, Etk_Bool \
tabs_homogeneous) +{
+   if (!notebook || notebook->tab_bar_homogeneous == tabs_homogeneous)
+      return;
+
+   notebook->tab_bar_homogeneous = tabs_homogeneous;
+   etk_widget_size_recalc_queue(ETK_WIDGET(notebook));
+   etk_object_notify(ETK_OBJECT(notebook), "tabs-homogeneous");
+}
+
+/**
+ * @brief Gets whether or not the tab-bar tabs must have the same size
+ * @param notebook a notebook
+ * @return Returns ETK_TRUE if the tab bar tabs must have the same size, ETK_FALSE \
otherwise + */
+Etk_Bool etk_notebook_tabs_homogeneous_get(Etk_Notebook *notebook)
+{
+   if (!notebook)
+      return ETK_FALSE;
+   return notebook->tab_bar_homogeneous;
+}
+
 /**************************
  *
  * Etk specific functions
@@ -488,6 +518,7 @@
    notebook->current_page = NULL;
    notebook->tab_bar_focused = ETK_FALSE;
    notebook->tab_bar_visible = ETK_TRUE;
+   notebook->tab_bar_homogeneous = ETK_FALSE;
    
    _etk_notebook_tab_bar_create(notebook);
    
@@ -528,6 +559,9 @@
       case ETK_NOTEBOOK_TABS_VISIBLE_PROPERTY:
          etk_notebook_tabs_visible_set(notebook, \
etk_property_value_bool_get(value));  break;
+      case ETK_NOTEBOOK_TABS_HOMOGENEOUS_PROPERTY:
+         etk_notebook_tabs_homogeneous_set(notebook, \
etk_property_value_bool_get(value)); +         break;
       default:
          break;
    }
@@ -546,6 +580,9 @@
       case ETK_NOTEBOOK_TABS_VISIBLE_PROPERTY:
          etk_property_value_bool_set(value, notebook->tab_bar_visible);
          break;
+      case ETK_NOTEBOOK_TABS_HOMOGENEOUS_PROPERTY:
+         etk_property_value_bool_set(value, notebook->tab_bar_homogeneous);
+         break;
       default:
          break;
    }
@@ -623,9 +660,15 @@
    {
       p = l->data;
       etk_widget_size_request(p->tab, &tab_size);
-      size->w += tab_size.w;
+      if (notebook->tab_bar_homogeneous)
+         size->w = ETK_MAX(size->w, tab_size.w);
+      else
+         size->w += tab_size.w;
       size->h = ETK_MAX(size->h, tab_size.h);
    }
+
+   if (notebook->tab_bar_homogeneous)
+      size->w *= evas_list_count(notebook->pages);
 }
 
 /* Resizes the notebook's tab-bar to the allocated size */
@@ -635,28 +678,48 @@
    Etk_Size requested_size;
    Etk_Size tab_size;
    Etk_Geometry tab_geometry;
-   float ratio;
+   int tab_w = 0;
+   int extra = 0;
+   float ratio = 0;
    Etk_Notebook_Page *p;
    Evas_List *l;
    
    if (!widget || !(notebook = ETK_NOTEBOOK(etk_object_data_get(ETK_OBJECT(widget), \
"_Etk_Notebook::Notebook"))))  return;
    
-   etk_widget_size_request(widget, &requested_size);
-   if (geometry.w >= requested_size.w)
-      ratio = 1.0;
+   if (notebook->tab_bar_homogeneous)
+   {
+      int count;
+
+      count = evas_list_count(notebook->pages);
+      tab_w = geometry.w / count;
+      extra = geometry.w % count;
+   }
    else
-      ratio = (float)geometry.w / requested_size.w;
-   
+   {
+      etk_widget_size_request(widget, &requested_size);
+      if (geometry.w >= requested_size.w)
+         ratio = 1.0;
+      else
+         ratio = (float)geometry.w / requested_size.w;
+   }
+
    tab_geometry.x = geometry.x;
    tab_geometry.y = geometry.y;
    tab_geometry.h = geometry.h;
-   
+
    for (l = notebook->pages; l; l = l->next)
    {
       p = l->data;
       etk_widget_size_request(p->tab, &tab_size);
-      tab_geometry.w = tab_size.w * ratio;
+      if (notebook->tab_bar_homogeneous)
+      {
+         tab_geometry.w = tab_w;
+         if (!l->next)
+            tab_geometry.w += extra;
+      }
+      else
+         tab_geometry.w = tab_size.w * ratio;
       etk_widget_size_allocate(p->tab, tab_geometry);
       tab_geometry.x += tab_geometry.w;
    }
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_notebook.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- etk_notebook.h	2 Apr 2007 09:48:29 -0000	1.21
+++ etk_notebook.h	31 Jul 2007 19:22:39 -0000	1.22
@@ -54,7 +54,8 @@
    Etk_Widget *tab_bar;
    Etk_Bool tab_bar_focused;
    Etk_Bool tab_bar_visible;
-   
+   Etk_Bool tab_bar_homogeneous;
+
    Evas_List *pages;
    Etk_Notebook_Page *current_page;
 };
@@ -85,6 +86,8 @@
 
 void        etk_notebook_tabs_visible_set(Etk_Notebook *notebook, Etk_Bool \
tabs_visible);  Etk_Bool    etk_notebook_tabs_visible_get(Etk_Notebook *notebook);
+void        etk_notebook_tabs_homogeneous_set(Etk_Notebook *notebook, Etk_Bool \
tabs_homogeneous); +Etk_Bool    etk_notebook_tabs_homogeneous_get(Etk_Notebook \
*notebook);  
 /** @} */
 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic