mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
c4eeda1ef7
commit
823f266eea
1 changed files with 93 additions and 52 deletions
145
print.c
145
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,
|
static void show_table_header(cairo_t *cr, double w, double h,
|
||||||
PangoFontDescription *font)
|
PangoFontDescription *font)
|
||||||
{
|
{
|
||||||
int len, width, height, maxwidth, maxheight;
|
int maxwidth, maxheight, colwidth, i, curwidth;
|
||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
char buffer[160];
|
char headers[7][80]= { "Dive#", "Date", "Depth", "Time", "Master",
|
||||||
|
"Buddy", "Location" };
|
||||||
|
|
||||||
maxwidth = w * PANGO_SCALE;
|
maxwidth = w * PANGO_SCALE;
|
||||||
maxheight = h * PANGO_SCALE * 0.9;
|
maxheight = h * PANGO_SCALE * 0.9;
|
||||||
|
colwidth = maxwidth / 7;
|
||||||
|
|
||||||
layout = pango_cairo_create_layout(cr);
|
layout = pango_cairo_create_layout(cr);
|
||||||
pango_layout_set_width(layout, maxwidth);
|
|
||||||
|
cairo_move_to(cr, 0, 0);
|
||||||
pango_layout_set_height(layout, maxheight);
|
pango_layout_set_height(layout, maxheight);
|
||||||
|
|
||||||
len = snprintf(buffer, sizeof(buffer),
|
|
||||||
"Dive# - Date - Depth - Time - Master"
|
|
||||||
" Buddy -- Location");
|
|
||||||
|
|
||||||
set_font(layout, font, FONT_LARGE, PANGO_ALIGN_LEFT);
|
set_font(layout, font, FONT_LARGE, PANGO_ALIGN_LEFT);
|
||||||
pango_layout_set_text(layout, buffer, len);
|
|
||||||
pango_layout_get_size(layout, &width, &height);
|
|
||||||
|
|
||||||
//cairo_move_to(cr, 0, 0);
|
|
||||||
pango_cairo_show_layout(cr, layout);
|
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);
|
||||||
|
g_object_unref(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_dive_table(struct dive *dive, cairo_t *cr, double w,
|
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;
|
double depth;
|
||||||
const char *unit;
|
const char *unit;
|
||||||
int len, decimals, width, height, maxwidth, maxheight;
|
int len, decimals, maxwidth, maxheight, colwidth, curwidth;
|
||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
struct tm *tm;
|
struct tm *tm;
|
||||||
char buffer[160], divenr[20];
|
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;
|
maxwidth = w * PANGO_SCALE;
|
||||||
maxheight = h * PANGO_SCALE * 0.9;
|
maxheight = h * PANGO_SCALE * 0.9;
|
||||||
|
|
||||||
layout = pango_cairo_create_layout(cr);
|
colwidth = maxwidth / 7;
|
||||||
pango_layout_set_width(layout, maxwidth);
|
|
||||||
pango_layout_set_height(layout, maxheight);
|
|
||||||
|
|
||||||
|
layout = pango_cairo_create_layout(cr);
|
||||||
|
|
||||||
|
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;
|
*divenr = 0;
|
||||||
if (dive->number)
|
if (dive->number)
|
||||||
snprintf(divenr, sizeof(divenr), "#%d -", dive->number);
|
snprintf(divenr, sizeof(divenr), "#%d", dive->number);
|
||||||
|
pango_layout_set_width(layout, colwidth/ (double) 2);
|
||||||
depth = get_depth_units(dive->maxdepth.mm, &decimals, &unit);
|
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);
|
tm = gmtime(&dive->when);
|
||||||
len = snprintf(buffer, sizeof(buffer),
|
len = snprintf(buffer, sizeof(buffer),
|
||||||
"%s %s, %s %d, %d %dh%02d - %.*f %s - %d min - %s %s -- %s",
|
"%s, %s %d, %d %dh%02d",
|
||||||
divenr,
|
|
||||||
weekday(tm->tm_wday),
|
weekday(tm->tm_wday),
|
||||||
monthname(tm->tm_mon),
|
monthname(tm->tm_mon),
|
||||||
tm->tm_mday, tm->tm_year + 1900,
|
tm->tm_mday, tm->tm_year + 1900,
|
||||||
tm->tm_hour, tm->tm_min,
|
tm->tm_hour, tm->tm_min
|
||||||
decimals,
|
|
||||||
depth,
|
|
||||||
unit,
|
|
||||||
(dive->duration.seconds+59) / 60,
|
|
||||||
dive->divemaster ? : " ",
|
|
||||||
dive->buddy ? : " ",
|
|
||||||
dive->location ? : " "
|
|
||||||
);
|
);
|
||||||
|
cairo_move_to(cr, curwidth / PANGO_SCALE, 0);
|
||||||
set_font(layout, font, FONT_NORMAL, PANGO_ALIGN_LEFT);
|
|
||||||
pango_layout_set_text(layout, buffer, len);
|
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;
|
||||||
|
|
||||||
cairo_move_to(cr, 0, 0);
|
// 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_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);
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
|
||||||
|
// 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);
|
pango_cairo_show_layout(cr, layout);
|
||||||
|
|
||||||
///*
|
|
||||||
//* 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;
|
|
||||||
|
|
||||||
/* 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);
|
|
||||||
|
|
||||||
cairo_move_to(cr, 0, 0);
|
|
||||||
pango_cairo_show_layout(cr, layout);
|
|
||||||
}
|
|
||||||
g_object_unref(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);
|
print_table_header(cr, 0, 0+h, w, h, font);
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < n_dive_per_page; 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);
|
print_table(nr+i, cr, 0, h*1.5+h*i, w, h, font);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue