Author: greg.ercolano
Date: 2013-03-16 23:06:52 -0700 (Sat, 16 Mar 2013)
New Revision: 9837
Log:
Small fix to column max width calculation: take into account width of header.


Modified:
   branches/branch-1.3/examples/table-sort.cxx

Modified: branches/branch-1.3/examples/table-sort.cxx
===================================================================
--- branches/branch-1.3/examples/table-sort.cxx 2013-03-17 05:24:58 UTC (rev 
9836)
+++ branches/branch-1.3/examples/table-sort.cxx 2013-03-17 06:06:52 UTC (rev 
9837)
@@ -39,7 +39,7 @@
 #ifdef WIN32
 // WINDOWS
 #  define DIRCMD          "dir"
-#  define DIRHEADER       { "Date", "Time", "Size", "Filename", "", "", "", 
"", "" }
+static const char *G_header[] = { "Date", "Time", "Size", "Filename", "", "", 
"", "", "", 0 };
 #  ifdef _MSC_VER
 #    define popen           _popen
 #  endif
@@ -47,9 +47,15 @@
 // UNIX
 #  include <ctype.h>
 #  define DIRCMD          "ls -l"
-#  define DIRHEADER       { "Perms", "#L", "Own", "Group", "Size", "Date", "", 
"", "Filename" }
+static const char *G_header[] = { "Perms", "#L", "Own", "Group", "Size", 
"Date", "", "", "Filename", 0 };
 #endif /*WIN32*/
 
+// Font face/sizes for header and rows
+#define HEADER_FONTFACE FL_HELVETICA_BOLD
+#define HEADER_FONTSIZE 16
+#define ROW_FONTFACE    FL_HELVETICA
+#define ROW_FONTSIZE    16
+
 // A single row of columns
 class Row {
 public:
@@ -147,12 +153,11 @@
     switch ( context ) {
         case CONTEXT_COL_HEADER:
             fl_push_clip(X,Y,W,H); {
-                static const char *head[] = DIRHEADER; 
                 fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_BACKGROUND_COLOR);
                 if ( C < 9 ) {
-                   fl_font(FL_HELVETICA_BOLD, 16);
+                   fl_font(HEADER_FONTFACE, HEADER_FONTSIZE);
                     fl_color(FL_BLACK);
-                    fl_draw(head[C], X+2,Y,W,H, FL_ALIGN_LEFT, 0, 0);         
// +2=pad left 
+                    fl_draw(G_header[C], X+2,Y,W,H, FL_ALIGN_LEFT, 0, 0);      
   // +2=pad left 
                     // Draw sort arrow
                     if ( C == _sort_lastcol ) {
                         draw_sort_arrow(X,Y,W,H);
@@ -166,7 +171,7 @@
                 // Bg color
                 Fl_Color bgcolor = row_selected(R) ? selection_color() : 
FL_WHITE;
                 fl_color(bgcolor); fl_rectf(X,Y,W,H); 
-               fl_font(FL_HELVETICA, 16);
+               fl_font(ROW_FONTFACE, ROW_FONTSIZE);
                 fl_color(FL_BLACK); fl_draw(s, X+2,Y,W,H, FL_ALIGN_LEFT);     
// +2=pad left 
                 // Border
                 fl_color(FL_LIGHT2); fl_rect(X,Y,W,H);
@@ -181,13 +186,17 @@
 
 // Automatically set column widths to widest data in each column
 void MyTable::autowidth(int pad) {
-    fl_font(FL_COURIER, 16); 
-    // Initialize all column widths to lowest value
-    for ( int c=0; c<cols(); c++ ) col_width(c, pad);
+    int w, h;
+    // Initialize all column widths to header width
+    fl_font(HEADER_FONTFACE, HEADER_FONTSIZE);
+    for ( int c=0; G_header[c]; c++ ) {
+       w=0; fl_measure(G_header[c], w, h, 0);                   // pixel width 
of header text
+        col_width(c, w+pad);
+    }
+    fl_font(ROW_FONTFACE, ROW_FONTSIZE);
     for ( int r=0; r<(int)_rowdata.size(); r++ ) {
-        int w, h;
         for ( int c=0; c<(int)_rowdata[r].cols.size(); c++ ) {
-            fl_measure(_rowdata[r].cols[c], w, h, 0);           // get pixel 
width of text
+            w=0; fl_measure(_rowdata[r].cols[c], w, h, 0);       // pixel 
width of row text
             if ( (w + pad) > col_width(c)) col_width(c, w + pad);
         }
     }

_______________________________________________
fltk-commit mailing list
fltk-commit@easysw.com
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to