summaryrefslogtreecommitdiffstats
path: root/print.c
diff options
context:
space:
mode:
authorGravatar Pierre-Yves Chibon <pingou@pingoured.fr>2012-08-29 18:02:47 +0200
committerGravatar Pierre-Yves Chibon <pingou@pingoured.fr>2012-08-29 18:02:47 +0200
commit823f266eea9479e909d09c2fccb9fba00b95718e (patch)
treef3b91a1b93e7d6beb6538d2de60979c02029413a /print.c
parentc4eeda1ef70651c3759afd3c0a9bbc38694248c5 (diff)
downloadsubsurface-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.c133
1 files changed, 87 insertions, 46 deletions
diff --git a/print.c b/print.c
index 8fbe62b3d..2c9c441fb 100644
--- a/print.c
+++ b/print.c
@@ -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);
}