Hildon banner truncations, * hildon-widgets/hildon-banner.c (force_to_wrap_truncated...
authorLuc Pionchon <luc.pionchon@nokia.com>
Mon, 1 May 2006 14:05:52 +0000 (14:05 +0000)
committerLuc Pionchon <luc.pionchon@nokia.com>
Mon, 1 May 2006 14:05:52 +0000 (14:05 +0000)
* hildon-widgets/hildon-banner.c
        (HILDON_BANNER_LABEL_MAX_PROGRESS): increase value 265 -> 320 to
        satisfy N#26624, N#26161, N#27875

        * ut/tc_banner_truncate.c: new file. Test cases for banner truncations.

ChangeLog
hildon-widgets/hildon-banner.c
ut/tc_banner_truncate.c [new file with mode: 0644]

index b19b60c..14d260b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
 2006-05-01  Luc Pionchon  <luc.pionchon@nokia.com>
 
+       Hildon banner truncations,
+       * hildon-widgets/hildon-banner.c
+       (force_to_wrap_truncated): new function. Force to wrap truncated
+       label by setting explicit size request. See N#27000 and G#329646
+       (hildon_banner_check_position): call force_to_wrap_truncated()
+       fixes N#27000, N#25305, N#26203
+
+       * hildon-widgets/hildon-banner.c
+       (HILDON_BANNER_LABEL_MAX_PROGRESS): increase value 265 -> 320 to
+       satisfy N#26624, N#26161, N#27875
+
+       * ut/tc_banner_truncate.c: new file. Test cases for banner truncations.
+
+
+2006-05-01  Luc Pionchon  <luc.pionchon@nokia.com>
+
        * hildon-widgets/hildon-banner.[ch]: code cleanup.
 
 
index 8096032..63f1853 100644 (file)
@@ -40,7 +40,7 @@
 /* max widths */
 #define HILDON_BANNER_PROGRESS_WIDTH      104
 #define HILDON_BANNER_LABEL_MAX_TIMED     375
-#define HILDON_BANNER_LABEL_MAX_PROGRESS  265
+#define HILDON_BANNER_LABEL_MAX_PROGRESS  320 /*265*/
 
 /* default timeout */
 #define HILDON_BANNER_TIMEOUT             3000
@@ -400,12 +400,39 @@ static gboolean hildon_banner_map_event(GtkWidget *widget, GdkEventAny *event)
    return result;
 }  
 
+
+/* force to wrap truncated label by setting explicit size request
+ * see N#27000 and G#329646 */
+static void force_to_wrap_truncated(HildonBanner *banner){
+  GtkLabel *label;
+  PangoLayout *layout;
+  int width_text, width_max;
+
+  label = GTK_LABEL(banner->priv->label);
+
+  layout = gtk_label_get_layout(label);
+  width_text  = pango_layout_get_width(layout)/1000;
+  /* = width to which the lines of the PangoLayout should be wrapped */
+
+  width_max = banner->priv->is_timed ? HILDON_BANNER_LABEL_MAX_TIMED
+                                     : HILDON_BANNER_LABEL_MAX_PROGRESS;
+
+  if(width_text > width_max){
+    /* explicitly request maximum size to force wrapping */
+    gtk_widget_set_size_request (GTK_WIDGET(label), width_max, -1);
+  }
+}
+
+
 static void hildon_banner_check_position(GtkWidget *widget)
 {
    gint x, y;
    GtkRequisition req;
 
+   force_to_wrap_truncated(widget); /* see N#27000 and G#329646 */
+
    gtk_widget_size_request(widget, &req);
+
    if (req.width == 0)
    {
      return;
diff --git a/ut/tc_banner_truncate.c b/ut/tc_banner_truncate.c
new file mode 100644 (file)
index 0000000..5fd1fba
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+
+ gcc `pkg-config --cflags gtk+-2.0 hildon-libs` `pkg-config --libs gtk+-2.0 hildon-libs`  -o tc_banner_truncate tc_banner_truncate.c && DISPLAY=:2 run-standalone.sh  ./tc_banner_truncate 1
+
+ Usage 1: tc_banner_truncate <case #>
+ Usage 2: tc_banner_truncate <1|2|3> the string you like to be displayed
+                              1 -> information banner
+                              2 -> progress banner
+                              3 -> animation banner
+*/
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include <hildon-widgets/hildon-banner.h>
+
+#define WAIT g_timeout_add(3000, (GSourceFunc)(gtk_main_quit), NULL);
+
+#define TC_INFO(string) hildon_banner_show_information(window,  NULL, string); WAIT;
+#define TC_ANIM(string) banner = hildon_banner_show_animation(NULL, NULL, string);
+#define TC_PROG(string) banner = hildon_banner_show_progress (NULL, NULL, string);
+
+static void get_argv_string(int argc, char ** argv, char *text);
+
+int main(int argc, char **argv)
+{
+  GtkWidget *window;
+  GtkWidget *banner;
+  int n;
+  char text[10000];
+
+  if(argc <  2){ fprintf(stderr, "Add case # as parameter.\n");  return 1;}
+  if(argc >= 2){ if(sscanf(argv[1], "%d", &n) == 0) n = 1;}
+  if(argc >  2){ get_argv_string(argc, argv, text);}
+
+  gtk_init(&argc, &argv);
+  
+  window = gtk_dialog_new();
+  
+  if(argc > 2){
+    /* text is given in the command line */
+    switch (n){
+    case 1: TC_INFO(text); break;
+    case 2: TC_PROG(text); break;
+    case 3: TC_ANIM(text); break;
+    default:TC_INFO(text); break;
+    }
+    n = -99999;
+  }
+
+  switch (n) {
+  /* NOTE: comments (*) are given for 0.12.12, with default theme (orange)
+   *       (*) "truncated", WRAPPED", etc.
+   */
+
+  case 0: TC_INFO(""); break;
+  case 1: TC_INFO("loading..."); break;
+
+  case 11: TC_INFO("mmmmmmmmmmmmmmmmmm m.."       ); break; //1 line
+  case 12: TC_INFO("mmmmmmmmmmmmmmmmmm m..."      ); break; //truncated
+  case 13: TC_INFO("mmmmmmmmmmmmmmmmmm m...."     ); break; //truncated
+  case 14: TC_INFO("mmmmmmmmmmmmmmmmmm m....."    ); break; //truncated
+  case 15: TC_INFO("mmmmmmmmmmmmmmmmmm m......"   ); break; //truncated
+  case 16: TC_INFO("mmmmmmmmmmmmmmmmmm m......."  ); break; //truncated
+  case 17: TC_INFO("mmmmmmmmmmmmmmmmmm m........" ); break; //truncated
+  case 18: TC_INFO("mmmmmmmmmmmmmmmmmm m........."); break; //WRAPPED
+
+  case 21: TC_INFO("maximum number of characters xxxxxxxx");  break; //WRAPPED
+  case 22: TC_INFO("maximum number of characters xxxxxxxi");  break; //truncated
+
+  case 23: TC_INFO("Maximum number of characters reache"   ); break; //1 line
+  case 24: TC_INFO("Maximum number of characters reached"  ); break; //truncated
+  case 25: TC_INFO("Maximum number of characters reached." ); break; //truncated
+  case 26: TC_INFO("Maximum number of characters reached " ); break; //truncated
+  case 27: TC_INFO("Maximum number of characters reached a"); break; //WRAPPED
+
+  /* progress banners */
+  case 101: TC_PROG(""               ); break;
+  case 102: TC_PROG("hello"          ); break;
+  case 103: TC_PROG("hello progress" ); break;
+
+  /* Bugzilla related TC */
+  case -1: case 25305: TC_INFO("Maximum number of characters reached");      break;
+  case -2: case 23430: TC_INFO("Unable to manage folders during searching"); break; //PASSED
+  case -3: case 26624: TC_ANIM("Connection Manager - Loading");              break;
+  case -4: case 26161: TC_ANIM("Painel de Controle - carregando");           break;
+  case -5: case 26203: TC_ANIM("Caricamento di Pannello di controllo");      break;
+  case -6: case 27875: TC_ANIM("Instant messaging - loading");               break;
+
+
+  /* word longer than max width */
+  case 201: TC_INFO("mmmmmmmmmmmmmmmmmmmmmmmmmmmmm 1 2 3 4");  break;
+
+  /* misc */
+  case 202: TC_INFO("Maximum number of characters reached osaidfh galds hgdslf helius grkdsz vfliesdfrjaesfrszri os o ozx oyli l ilij ero worjw aeowaijf osijf a jfaowijef aoweijf s faoij flsaijf sajfd oaijfe aosi e 1 2 3 4"); break; /* TRUNCATED after last 'e' */
+
+
+  /* TC for plain GTK (no theme) */
+  case -1031: TC_INFO("iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil i."); break; //1 line
+  case -1032: TC_INFO("iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil i."); break; //WRAPPED
+
+  case -1033: TC_INFO("mmmmmmmmmmmmmmmmmm m................................................i" ); break; //1 line
+  case -1034: TC_INFO("mmmmmmmmmmmmmmmmmm m.................................................i"); break; //WRAPPED
+
+
+  default:
+    WAIT;
+  }
+
+  gtk_main();
+  return 0;
+}
+
+
+
+
+
+
+
+
+/* ############################################################################## */
+/* ############################################################################## */
+/* ############################################################################## */
+
+static void get_argv_string(int argc, char ** argv, char *text){
+  int i,j;
+  char * s;
+  s = text;
+  for(i=2; i<argc; i++){
+    for(j=0; argv[i][j] != '\0'; j++){
+      *s = argv[i][j];
+      s++;
+    }
+    if(i<(argc-1)){
+      *s=' ';
+      s++;
+    }
+  }
+  /* hem */
+}