diff options
author | Pierre-Yves Chibon <pingou@pingoured.fr> | 2012-08-29 18:02:47 +0200 |
---|---|---|
committer | Pierre-Yves Chibon <pingou@pingoured.fr> | 2012-08-29 18:02:47 +0200 |
commit | 823f266eea9479e909d09c2fccb9fba00b95718e (patch) | |
tree | f3b91a1b93e7d6beb6538d2de60979c02029413a /print.c | |
parent | c4eeda1ef70651c3759afd3c0a9bbc38694248c5 (diff) | |
download | subsurface-823f266eea9479e909d09c2fccb9fba00b95718e.tar.gz |
Have a nice table formating with choosing the 'Table print' option.
With this commit we finally have a nice table output when we want to print the
list of dives with minimal information.
Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
Diffstat (limited to 'print.c')
-rw-r--r-- | print.c | 133 |
1 files changed, 87 insertions, 46 deletions
@@ -141,27 +141,40 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, static void show_table_header(cairo_t *cr, double w, double h, PangoFontDescription *font) { - int len, width, height, maxwidth, maxheight; + int maxwidth, maxheight, colwidth, i, curwidth; PangoLayout *layout; - char buffer[160]; + char headers[7][80]= { "Dive#", "Date", "Depth", "Time", "Master", + "Buddy", "Location" }; maxwidth = w * PANGO_SCALE; maxheight = h * PANGO_SCALE * 0.9; + colwidth = maxwidth / 7; layout = pango_cairo_create_layout(cr); - pango_layout_set_width(layout, maxwidth); + + cairo_move_to(cr, 0, 0); pango_layout_set_height(layout, maxheight); + set_font(layout, font, FONT_LARGE, PANGO_ALIGN_LEFT); - len = snprintf(buffer, sizeof(buffer), - "Dive# - Date - Depth - Time - Master" - " Buddy -- Location"); - set_font(layout, font, FONT_LARGE, PANGO_ALIGN_LEFT); - pango_layout_set_text(layout, buffer, len); - pango_layout_get_size(layout, &width, &height); + curwidth = 0; + for (i = 0; i < 7; i++) { + cairo_move_to(cr, curwidth / PANGO_SCALE, 0); + if (i == 0 || i == 2 || i == 3 ){ + // Column 0, 2 and 3 (Dive #, Depth and Time) get 1/2 width + pango_layout_set_width(layout, colwidth/ (double) 2); + curwidth = curwidth + (colwidth / 2); + } else { + pango_layout_set_width(layout, colwidth); + curwidth = curwidth + colwidth; + } + pango_layout_set_text(layout, headers[i], -1); + pango_layout_set_justify(layout, 1); + pango_cairo_show_layout(cr, layout); + } - //cairo_move_to(cr, 0, 0); - pango_cairo_show_layout(cr, layout); + cairo_move_to(cr, 0, 0); + g_object_unref(layout); } static void show_dive_table(struct dive *dive, cairo_t *cr, double w, @@ -169,7 +182,7 @@ static void show_dive_table(struct dive *dive, cairo_t *cr, double w, { double depth; const char *unit; - int len, decimals, width, height, maxwidth, maxheight; + int len, decimals, maxwidth, maxheight, colwidth, curwidth; PangoLayout *layout; struct tm *tm; char buffer[160], divenr[20]; @@ -177,59 +190,86 @@ static void show_dive_table(struct dive *dive, cairo_t *cr, double w, maxwidth = w * PANGO_SCALE; maxheight = h * PANGO_SCALE * 0.9; + colwidth = maxwidth / 7; + layout = pango_cairo_create_layout(cr); - pango_layout_set_width(layout, maxwidth); + + cairo_move_to(cr, 0, 0); + pango_layout_set_width(layout, colwidth); pango_layout_set_height(layout, maxheight); + set_font(layout, font, FONT_NORMAL, PANGO_ALIGN_LEFT); + cairo_move_to(cr, 0, 0); + curwidth = 0; + // Col 1: Dive # *divenr = 0; if (dive->number) - snprintf(divenr, sizeof(divenr), "#%d -", dive->number); - - depth = get_depth_units(dive->maxdepth.mm, &decimals, &unit); + snprintf(divenr, sizeof(divenr), "#%d", dive->number); + pango_layout_set_width(layout, colwidth/ (double) 2); + pango_layout_set_text(layout, divenr, -1); + pango_layout_set_justify(layout, 1); + pango_cairo_show_layout(cr, layout); + curwidth = curwidth + (colwidth / 2); + // Col 2: Date # + pango_layout_set_width(layout, colwidth); tm = gmtime(&dive->when); len = snprintf(buffer, sizeof(buffer), - "%s %s, %s %d, %d %dh%02d - %.*f %s - %d min - %s %s -- %s", - divenr, + "%s, %s %d, %d %dh%02d", weekday(tm->tm_wday), monthname(tm->tm_mon), tm->tm_mday, tm->tm_year + 1900, - tm->tm_hour, tm->tm_min, - decimals, - depth, - unit, - (dive->duration.seconds+59) / 60, - dive->divemaster ? : " ", - dive->buddy ? : " ", - dive->location ? : " " + tm->tm_hour, tm->tm_min ); + cairo_move_to(cr, curwidth / PANGO_SCALE, 0); + pango_layout_set_text(layout, buffer, len); + pango_layout_set_justify(layout, 1); + pango_cairo_show_layout(cr, layout); + curwidth = curwidth + colwidth; - set_font(layout, font, FONT_NORMAL, PANGO_ALIGN_LEFT); + // Col 3: Depth + depth = get_depth_units(dive->maxdepth.mm, &decimals, &unit); + len = snprintf(buffer, sizeof(buffer), + "%.*f %s", decimals, depth, unit); + cairo_move_to(cr, curwidth / PANGO_SCALE, 0); + pango_layout_set_width(layout, colwidth/ (double) 2); pango_layout_set_text(layout, buffer, len); - pango_layout_get_size(layout, &width, &height); + pango_layout_set_justify(layout, 1); + pango_cairo_show_layout(cr, layout); + curwidth = curwidth + (colwidth / 2); + + // Col 4: Time + len = snprintf(buffer, sizeof(buffer), + "%d min",(dive->duration.seconds+59) / 60); + cairo_move_to(cr, curwidth / PANGO_SCALE, 0); + pango_layout_set_width(layout, colwidth/ (double) 2); + pango_layout_set_text(layout, buffer, len); + pango_layout_set_justify(layout, 1); + pango_cairo_show_layout(cr, layout); + curwidth = curwidth + (colwidth / 2); - cairo_move_to(cr, 0, 0); + // Col 5: Master + pango_layout_set_width(layout, colwidth); + cairo_move_to(cr, curwidth / PANGO_SCALE, 0); + pango_layout_set_text(layout, dive->divemaster ? : " ", -1); + pango_layout_set_justify(layout, 1); pango_cairo_show_layout(cr, layout); + curwidth = curwidth + colwidth; - ///* - //* Show the dive notes - //*/ - if (dive->notes) { - /* Move down by the size of the location (x2) */ - height = height * 1.3; - cairo_translate(cr, 20, height / (double) PANGO_SCALE); - maxheight -= height; + // Col 6: Buddy + cairo_move_to(cr, curwidth / PANGO_SCALE, 0); + pango_layout_set_text(layout, dive->buddy ? : " ", -1); + pango_layout_set_justify(layout, 1); + pango_cairo_show_layout(cr, layout); + curwidth = curwidth + colwidth; - /* Use the full width and remaining height for notes */ - pango_layout_set_height(layout, maxheight); - pango_layout_set_width(layout, maxwidth); - pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR); - pango_layout_set_justify(layout, 1); - pango_layout_set_text(layout, dive->notes, -1); + // Col 7: Location + cairo_move_to(cr, curwidth / PANGO_SCALE, 0); + pango_layout_set_width(layout, maxwidth - curwidth); + pango_layout_set_text(layout, dive->location ? : " ", -1); + pango_layout_set_justify(layout, 1); + pango_cairo_show_layout(cr, layout); - cairo_move_to(cr, 0, 0); - pango_cairo_show_layout(cr, layout); - } g_object_unref(layout); } @@ -412,6 +452,7 @@ static void draw_table(GtkPrintOperation *operation, print_table_header(cr, 0, 0+h, w, h, font); int i; for (i = 0; i < n_dive_per_page; i++) { + //for (i = 0; i < 1; i++) { print_table(nr+i, cr, 0, h*1.5+h*i, w, h, font); } |