diff --git a/checks/Makefile.am b/checks/Makefile.am index e2a7450d34..cd5492a4eb 100644 --- a/checks/Makefile.am +++ b/checks/Makefile.am @@ -6,6 +6,7 @@ checks_DATA = \ deluxe.chk \ liberty.chk \ quicken.chk \ + voucher.chk \ quicken_wallet.chk else checks_DATA = \ diff --git a/checks/gnomeprint/quicken.chk b/checks/gnomeprint/quicken.chk index f666d894b0..5e4aec9af2 100644 --- a/checks/gnomeprint/quicken.chk +++ b/checks/gnomeprint/quicken.chk @@ -25,3 +25,6 @@ Coords_4 = 500.0;185.0 Type_5 = NOTES Coords_5 = 50.0;40.0 + +Type_6 = ADDRESS +Coords_6 = 90.0;52.0 diff --git a/checks/gnomeprint/quicken_wallet.chk b/checks/gnomeprint/quicken_wallet.chk index b85035c606..92ac9dd510 100644 --- a/checks/gnomeprint/quicken_wallet.chk +++ b/checks/gnomeprint/quicken_wallet.chk @@ -18,6 +18,7 @@ Type_2 = AMOUNT_WORDS Coords_2 = 195.0;125.0 Type_3 = AMOUNT_NUMBER +Blocking_3 = true Coords_3 = 518.0;137.0 Type_4 = DATE @@ -26,14 +27,16 @@ Coords_4 = 504.0;151.0 Type_5 = NOTES Coords_5 = 216.0;37.0 +# stub + Type_6 = DATE Coords_6 = 36.0;151.0 Type_7 = PAYEE -Coords_7 = 26.0;126.0 +Coords_7 = 26.0;126.0;150.0;12.0 Type_8 = AMOUNT_NUMBER Coords_8 = 50.0;90.0 Type_9 = NOTES -Coords_9 = 28.0;65.0 +Coords_9 = 28.0;65.0;150.0;12.0 diff --git a/checks/quicken.chk b/checks/quicken.chk index 7aa8ff883b..126ec3674f 100644 --- a/checks/quicken.chk +++ b/checks/quicken.chk @@ -18,6 +18,7 @@ Type_2 = AMOUNT_WORDS Coords_2 = 90.0;132.0 Type_3 = AMOUNT_NUMBER +Blocking_3 = true Coords_3 = 500.0;102.0 Type_4 = DATE @@ -25,3 +26,6 @@ Coords_4 = 500.0;67.0 Type_5 = NOTES Coords_5 = 50.0;212.0 + +Type_6 = ADDRESS +Coords_6 = 90.0;192.0 diff --git a/checks/quicken_wallet.chk b/checks/quicken_wallet.chk index 4da3e536f2..f48a67354e 100644 --- a/checks/quicken_wallet.chk +++ b/checks/quicken_wallet.chk @@ -18,6 +18,7 @@ Type_2 = AMOUNT_WORDS Coords_2 = 195.0;79.0 Type_3 = AMOUNT_NUMBER +Blocking_3 = true Coords_3 = 518.0;67.0 Type_4 = DATE @@ -26,14 +27,16 @@ Coords_4 = 504.0;53.0 Type_5 = NOTES Coords_5 = 216.0;167.0 +# stub + Type_6 = DATE Coords_6 = 36.0;53.0 Type_7 = PAYEE -Coords_7 = 26.0;78.0 +Coords_7 = 26.0;78.0;150.0;12.0 Type_8 = AMOUNT_NUMBER Coords_8 = 50.0;114.0 Type_9 = NOTES -Coords_9 = 28.0;139.0 +Coords_9 = 28.0;139.0;150.0;12.0 diff --git a/checks/voucher.chk b/checks/voucher.chk new file mode 100644 index 0000000000..875ee251c2 --- /dev/null +++ b/checks/voucher.chk @@ -0,0 +1,74 @@ +[Top] +Guid = 0a0a1498-5f06-45ff-abc2-b2d32ad61bc9 +Title = Voucher Check 3-Part US-Letter +Font = sans 10 +Rotation = 0.0 +# override character blocking from global preferences +Blocking = false +Translation = 0.0;0.0 +Show_Grid = false +Show_Boxes = false + +[Check Items] +Type_1 = PAYEE +Coords_1 = 90.0;107.0;400.0;20.0 + +Type_2 = DATE +Coords_2 = 480.0;67.0 + +Type_3 = AMOUNT_WORDS +Blocking_3 = true +Coords_3 = 70.0;132.0;380.0;12.0 + +Type_4 = AMOUNT_NUMBER +Blocking_4 = true +Coords_4 = 510.0;107.0 + +Type_5 = ADDRESS +Font_5 = sans 9 +Coords_5 = 70.0;192.0 + +Type_6 = NOTES +Font_6 = sans 8 +Coords_6 = 60.0;220.0;250.0;10.0 + +# stub 1 + +Type_7 = PAYEE +Coords_7 = 50.0;300.0 + +Type_8 = DATE +Coords_8 = 480.0;300.0 + +Type_9 = NOTES +Coords_9 = 50.0;330.0 + +Type_10 = MEMO +Coords_10 = 50.0;342.0 + +Type_11 = ACTION +Coords_11 = 50.0;475.0 + +Type_12 = AMOUNT_NUMBER +Coords_12 = 500.0;475.0 + +# stub 2 + +Type_13 = PAYEE +Coords_13 = 50.0;550.0 + +Type_14 = DATE +Coords_14 = 480.0;550.0 + +Type_15 = NOTES +Coords_15 = 50.0;580.0 + +Type_16 = MEMO +Coords_16 = 50.0;592.0 + +Type_17 = ACTION +Coords_17 = 50.0;725.0 + +Type_18 = AMOUNT_NUMBER +Coords_18 = 500.0;725.0 + diff --git a/src/gnome/dialog-print-check.c b/src/gnome/dialog-print-check.c index 83ed0d7f9e..8616d0d45a 100644 --- a/src/gnome/dialog-print-check.c +++ b/src/gnome/dialog-print-check.c @@ -63,6 +63,7 @@ #define KEY_CUSTOM_DATE "custom_date" #define KEY_CUSTOM_WORDS "custom_amount_words" #define KEY_CUSTOM_NUMBER "custom_amount_number" +#define KEY_CUSTOM_ADDRESS "custom_address" #define KEY_CUSTOM_NOTES "custom_memo" /* historically misnamed */ #define KEY_CUSTOM_TRANSLATION "custom_translation" #define KEY_CUSTOM_ROTATION "custom_rotation" @@ -77,6 +78,9 @@ #define CHECK_NAME_EXTENSION ".chk" #define DEGREES_TO_RADIANS (G_PI / 180.0) +#define BLOCKING_CHAR_OFF 0 +#define BLOCKING_CHAR_ON 1 + #define KF_GROUP_TOP "Top" #define KF_GROUP_POS "Check Positions" #define KF_GROUP_ITEMS "Check Items" @@ -86,6 +90,7 @@ #define KF_KEY_TRANSLATION "Translation" #define KF_KEY_FONT "Font" #define KF_KEY_ALIGN "Align" +#define KF_KEY_BLOCKING "Blocking" #define KF_KEY_SHOW_GRID "Show_Grid" #define KF_KEY_SHOW_BOXES "Show_Boxes" #define KF_KEY_NAMES "Names" @@ -124,6 +129,8 @@ void gnc_print_check_save_button_clicked(GtkButton *button, PrintCheckDialog *pc void gnc_check_format_title_changed (GtkEditable *editable, GtkWidget *ok_button); static void initialize_format_combobox (PrintCheckDialog * pcd); +gchar* get_check_address(PrintCheckDialog *pcd); +gboolean check_format_has_address(PrintCheckDialog *pcd); /** This enum defines the types of items that gnucash knows how to * print on checks. Most refer to specific fields from a gnucash @@ -142,6 +149,7 @@ static void initialize_format_combobox (PrintCheckDialog * pcd); _(AMOUNT_WORDS,) \ \ _(TEXT,) \ + _(ADDRESS,) \ _(PICTURE,) DEFINE_ENUM(CheckItemType, ENUM_CHECK_ITEM_TYPE) @@ -176,6 +184,10 @@ typedef struct _check_item { * overrides any font in the check format. * Unused for non-text items. */ + gboolean blocking; /**< Optional. Override blocking in the check format. + * Default is no blocking characters are written. + * Unused for non-text items. */ + PangoAlignment align; /**< The alignment of a text based item. Only * used for text based items when a width is * specified. */ @@ -197,6 +209,9 @@ typedef struct _check_format { gchar *title; /**< Title of this check format. Displayed to * user in the dialog box. */ + gboolean blocking; /**< Default for printing blocking characters for + * this page of checks. */ + gboolean show_grid; /**< Print a grid pattern on the page */ gboolean show_boxes; /**< Print boxes when width and height are @@ -239,6 +254,7 @@ struct _print_check_dialog { GtkSpinButton * date_x, * date_y; GtkSpinButton * words_x, * words_y; GtkSpinButton * number_x, * number_y; + GtkSpinButton * address_x, * address_y; GtkSpinButton * notes_x, * notes_y; GtkSpinButton * translation_x, * translation_y; GtkSpinButton * check_rotation; @@ -248,6 +264,12 @@ struct _print_check_dialog { GtkWidget * date_format; + GtkWidget * check_address_name; + GtkWidget * check_address_1; + GtkWidget * check_address_2; + GtkWidget * check_address_3; + GtkWidget * check_address_4; + gchar *default_font; check_format_t *selected_format; @@ -316,6 +338,48 @@ get_float_pair (const char *section, const char *key, double *a, double *b) g_slist_free(coord_list); } +gchar * +get_check_address( PrintCheckDialog *pcd) +{ + /* return an address in five lines + * the string needs to be freed with g_free */ + gchar *address; + address = g_strconcat(gtk_entry_get_text(GTK_ENTRY(pcd->check_address_name)),"\n", \ + gtk_entry_get_text(GTK_ENTRY(pcd->check_address_1)),"\n", \ + gtk_entry_get_text(GTK_ENTRY(pcd->check_address_2)),"\n", \ + gtk_entry_get_text(GTK_ENTRY(pcd->check_address_3)),"\n", \ + gtk_entry_get_text(GTK_ENTRY(pcd->check_address_4)), \ + NULL); + return address; +} + +gboolean +check_format_has_address ( PrintCheckDialog *pcd ) +{ + /* check format for an ADDRESS item */ + check_item_t *item = NULL; + GSList *elem; + check_format_t *format = NULL; + + if ( !pcd ) return FALSE; + /* if format is NULL, then the custom format is being used + * which has an ADDRESS item by definition */ + format = pcd->selected_format; + if ( !format ) return TRUE; + + for (elem = pcd->selected_format->items; elem; elem = g_slist_next(elem)) { + item = elem->data; + switch (item->type) { + case ADDRESS: + return TRUE; + break; + default: + break; + } + } + return FALSE; +} + static void gnc_ui_print_save_dialog(PrintCheckDialog * pcd) { @@ -360,6 +424,9 @@ gnc_ui_print_save_dialog(PrintCheckDialog * pcd) save_float_pair(GCONF_SECTION, KEY_CUSTOM_NOTES, gtk_spin_button_get_value(pcd->notes_x), gtk_spin_button_get_value(pcd->notes_y)); + save_float_pair(GCONF_SECTION, KEY_CUSTOM_ADDRESS, + gtk_spin_button_get_value(pcd->address_x), + gtk_spin_button_get_value(pcd->address_y)); save_float_pair(GCONF_SECTION, KEY_CUSTOM_TRANSLATION, gtk_spin_button_get_value(pcd->translation_x), gtk_spin_button_get_value(pcd->translation_y)); @@ -421,6 +488,9 @@ gnc_ui_print_restore_dialog(PrintCheckDialog * pcd) get_float_pair(GCONF_SECTION, KEY_CUSTOM_NUMBER, &x, &y); gtk_spin_button_set_value(pcd->number_x, x); gtk_spin_button_set_value(pcd->number_y, y); + get_float_pair(GCONF_SECTION, KEY_CUSTOM_ADDRESS, &x, &y); + gtk_spin_button_set_value(pcd->address_x, x); + gtk_spin_button_set_value(pcd->address_y, y); get_float_pair(GCONF_SECTION, KEY_CUSTOM_NOTES, &x, &y); gtk_spin_button_set_value(pcd->notes_x, x); gtk_spin_button_set_value(pcd->notes_y, y); @@ -528,6 +598,8 @@ pcd_save_custom_data(PrintCheckDialog *pcd, const gchar *title) pcd->words_x, pcd->words_y); pcd_key_file_save_item_xy(key_file, i++, AMOUNT_NUMBER, multip, pcd->number_x, pcd->number_y); + pcd_key_file_save_item_xy(key_file, i++, ADDRESS, multip, + pcd->address_x, pcd->address_y); pcd_key_file_save_item_xy(key_file, i++, NOTES, multip, pcd->notes_x, pcd->notes_y); @@ -637,6 +709,7 @@ format_read_item_placement(const gchar * file, GSList *list = NULL; gchar *key, *value, *name; int item_num; + gboolean bval; gdouble *dd; gsize dd_len; @@ -700,9 +773,12 @@ format_read_item_placement(const gchar * file, g_free(dd); g_free(key); - /* Any text item can specify a font, and can also an alignment if a - * width was provided for the item. These values are optional and do - * not cause a failure if they are missing. */ + /* Any text item can specify: + * a font FONT_n + * an alignment if a width was provided for the item ALIGN_n + * blocking chars flag BLOCKING_n + * These values are optional and do not cause a failure if they are missing. */ + if (data->type != PICTURE) { key = g_strdup_printf("%s_%d", KF_KEY_FONT, item_num); data->font = @@ -743,6 +819,23 @@ format_read_item_placement(const gchar * file, g_clear_error(&error); } g_free(key); + + key = g_strdup_printf("%s_%d", KF_KEY_BLOCKING, item_num); + bval = + g_key_file_get_boolean(key_file, KF_GROUP_ITEMS, key, &error); + if (!error) { + g_debug("Check file %s, group %s, key %s, value: %d", + file, KF_GROUP_ITEMS, key, bval); + data->blocking = bval; + } else { + if (!((error->domain == G_KEY_FILE_ERROR) + && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND))) + g_warning("Check file %s, group %s, key %s, error: %s", + file, KF_GROUP_ITEMS, key, error->message); + data->blocking = format->blocking; + g_clear_error(&error); + } + g_free(key); } /* Get any extra data for specific items. */ switch (data->type) { @@ -906,6 +999,25 @@ format_read_general_info(const gchar * file, return FALSE; } + format->blocking = + g_key_file_get_boolean(key_file, KF_GROUP_TOP, KF_KEY_BLOCKING, + &error); + if (!error) { + g_debug("Check file %s, group %s, key %s, value: %d", + file, KF_GROUP_TOP, KF_KEY_BLOCKING, format->blocking); + } else { + if (!((error->domain == G_KEY_FILE_ERROR) + && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND))) + g_warning("Check file %s, group %s, key %s, error: %s", + file, KF_GROUP_TOP, KF_KEY_BLOCKING, error->message); + if( gnc_gconf_get_bool(GCONF_SECTION, KEY_BLOCKING_CHARS, NULL) ) { + format->blocking = TRUE; + } else { + format->blocking = FALSE; + } + g_clear_error(&error); + } + format->show_grid = g_key_file_get_boolean(key_file, KF_GROUP_TOP, KF_KEY_SHOW_GRID, &error); @@ -1178,6 +1290,7 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page, GtkWidget *table; GtkWindow *window; gchar *font; + Transaction *trans; pcd = g_new0(PrintCheckDialog, 1); pcd->plugin_page = plugin_page; @@ -1208,6 +1321,8 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page, GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "amount_numbers_y_entry")); pcd->notes_x = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "notes_x_entry")); pcd->notes_y = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "notes_y_entry")); + pcd->address_x = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "address_x_entry")); + pcd->address_y = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "address_y_entry")); pcd->translation_x = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "translation_x_entry")); pcd->translation_y = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "translation_y_entry")); pcd->translation_label = glade_xml_get_widget (xml, "translation_label"); @@ -1231,6 +1346,22 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page, /* Update the combo boxes bases on the available check formats */ initialize_format_combobox(pcd); + /* address */ + pcd->check_address_name = glade_xml_get_widget( xml, "check_address_name"); + pcd->check_address_1 = glade_xml_get_widget( xml, "check_address_1"); + pcd->check_address_2 = glade_xml_get_widget( xml, "check_address_2"); + pcd->check_address_3 = glade_xml_get_widget( xml, "check_address_3"); + pcd->check_address_4 = glade_xml_get_widget( xml, "check_address_4"); + /* fill in any available address data */ + /* Can't access business objects e.g. Customer,Vendor,Employee because + * it would create build problems */ + trans = xaccSplitGetParent(pcd->split); + if ( trans ) { + gtk_entry_set_text(GTK_ENTRY(pcd->check_address_name),xaccTransGetDescription(trans)); + } else { + /* nothing to do - defaults to blank */ + } + #if USE_GTKPRINT gtk_widget_destroy(glade_xml_get_widget (xml, "lower_left")); #else @@ -1346,6 +1477,7 @@ draw_text(GncPrintContext * context, const gchar * text, check_item_t * data, gint layout_height, layout_width; gdouble width, height; gchar *new_text; + CheckItemType ct; if ((NULL == text) || (strlen(text) == 0)) return 0.0; @@ -1363,7 +1495,7 @@ draw_text(GncPrintContext * context, const gchar * text, check_item_t * data, data->w ? data->align : PANGO_ALIGN_LEFT); pango_layout_set_width(layout, data->w ? data->w * PANGO_SCALE : -1); pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); - if (gnc_gconf_get_bool(GCONF_SECTION, KEY_BLOCKING_CHARS, NULL)) { + if ( data->blocking ) { new_text = g_strdup_printf("***%s***", text); pango_layout_set_text(layout, new_text, -1); g_free(new_text); @@ -1423,7 +1555,7 @@ draw_text(GncPrintContext * context, const gchar * text, check_item_t * data, g_debug("Text move to %f,%f, print '%s'", data->x, data->y, text ? text : "(null)"); gnome_print_moveto(context, data->x, data->y); - if (gnc_gconf_get_bool(GCONF_SECTION, KEY_BLOCKING_CHARS, NULL)) { + if ( data->blocking ) { new_text = g_strdup_printf("***%s***", text); gnome_print_show(context, new_text); g_free(new_text); @@ -1643,6 +1775,7 @@ draw_page_items(GncPrintContext * context, check_item_t *item; gdouble width; GDate *date; + gchar *address = NULL; trans = xaccSplitGetParent(pcd->split); /* This was valid when the check printing dialog was instantiated. */ @@ -1707,6 +1840,12 @@ draw_page_items(GncPrintContext * context, draw_text(context, item->text, item, default_desc); break; + case ADDRESS: + address = get_check_address(pcd); + draw_text(context, address, item, default_desc); + g_free(address); + break; + #if USE_GTKPRINT case PICTURE: draw_picture(context, item); @@ -1751,11 +1890,7 @@ draw_page_boxes(GncPrintContext * context, /** Print an entire page based upon the layout in a check description file. * This function takes care of translating/rotating the page, calling the function to print the grid - * pattern (if requested), an - -each of the items that in the description of a single check. This - * function uses helper functions to print text based and picture based - * items. */ + * pattern (if requested), and calls a helper function to print all check items */ static void draw_page_format(GncPrintContext * context, gint page_nr, check_format_t * format, gpointer user_data) @@ -1874,6 +2009,7 @@ draw_page_custom(GncPrintContext * context, gint page_nr, gpointer user_data) check_item_t item = { 0 }; gdouble x, y, multip, degrees; GDate *date; + gchar *address; trans = xaccSplitGetParent(pcd->split); /* This was valid when the check printing dialog was instantiated. */ @@ -1925,6 +2061,12 @@ draw_page_custom(GncPrintContext * context, gint page_nr, gpointer user_data) draw_text(context, text, &item, desc); g_free(text); + item.x = multip * gtk_spin_button_get_value(pcd->address_x); + item.y = multip * gtk_spin_button_get_value(pcd->address_y); + address = get_check_address(pcd); + draw_text(context, address, &item, desc); + g_free(address); + item.x = multip * gtk_spin_button_get_value(pcd->notes_x); item.y = multip * gtk_spin_button_get_value(pcd->notes_y); draw_text(context, xaccTransGetNotes(trans), &item, desc); @@ -2030,7 +2172,6 @@ gnc_print_check_set_sensitive (GtkWidget *widget, gpointer data) gtk_widget_set_sensitive(widget, sensitive); } - void gnc_print_check_format_changed (GtkComboBox *widget, PrintCheckDialog * pcd) @@ -2079,6 +2220,14 @@ gnc_print_check_format_changed (GtkComboBox *widget, gtk_container_foreach(GTK_CONTAINER(pcd->custom_table), gnc_print_check_set_sensitive, GINT_TO_POINTER(sensitive)); + + /* Update address fields */ + sensitive = check_format_has_address(pcd); + gtk_widget_set_sensitive(pcd->check_address_name,sensitive); + gtk_widget_set_sensitive(pcd->check_address_1,sensitive); + gtk_widget_set_sensitive(pcd->check_address_2,sensitive); + gtk_widget_set_sensitive(pcd->check_address_3,sensitive); + gtk_widget_set_sensitive(pcd->check_address_4,sensitive); } void diff --git a/src/gnome/glade/print.glade b/src/gnome/glade/print.glade index 9735efec49..c5294755f7 100644 --- a/src/gnome/glade/print.glade +++ b/src/gnome/glade/print.glade @@ -19,10 +19,10 @@ True 5 - 8 + 14 3 12 - 6 + 1 True @@ -65,7 +65,7 @@ 2 3 GTK_FILL - + GTK_FILL @@ -100,6 +100,125 @@ Custom GTK_FILL + + + True + True + + True + False + + + 1 + 3 + 9 + 10 + + + + + True + True + + True + False + + + 1 + 3 + 10 + 11 + + + + + True + True + + True + False + + + 1 + 3 + 11 + 12 + + + + + True + True + + True + False + + + 1 + 3 + 12 + 13 + + + + + True + True + + True + False + + + 1 + 3 + 13 + 14 + + + + + True + Check format must have an +ADDRESS item defined in order +to print an address on the check. + 0 + _Address + True + check_address_name + + + 9 + 10 + + + + + True + + + 1 + 3 + 8 + 9 + GTK_FILL + 5 + + + + + + + + + + + + + + + + + @@ -156,6 +275,7 @@ Custom True + 5 Options center @@ -167,7 +287,8 @@ Custom True - 13 + 5 + 14 3 @@ -269,8 +390,8 @@ Custom notes_x_entry - 5 - 6 + 6 + 7 GTK_FILL @@ -359,8 +480,8 @@ Custom 1 2 - 5 - 6 + 6 + 7 GTK_FILL @@ -449,8 +570,8 @@ Custom 2 3 - 5 - 6 + 6 + 7 GTK_FILL @@ -466,8 +587,8 @@ Points 1 2 - 8 - 9 + 9 + 10 GTK_FILL GTK_FILL @@ -482,8 +603,8 @@ Points units_combobox - 8 - 9 + 9 + 10 GTK_FILL @@ -500,8 +621,8 @@ Points 1 2 - 6 - 7 + 7 + 8 @@ -515,8 +636,8 @@ Points translation_x_entry - 6 - 7 + 7 + 8 GTK_FILL @@ -530,8 +651,8 @@ Points check_rotation_entry - 7 - 8 + 8 + 9 GTK_FILL @@ -549,8 +670,8 @@ Points 1 2 - 7 - 8 + 8 + 9 @@ -566,8 +687,8 @@ Points 2 3 - 6 - 7 + 7 + 8 @@ -579,10 +700,11 @@ Points 3 - 9 - 10 + 10 + 11 GTK_FILL + 5 @@ -593,10 +715,11 @@ Points 3 - 10 - 11 + 11 + 12 GTK_FILL + 5 @@ -608,8 +731,8 @@ Points 2 3 - 7 - 8 + 8 + 9 GTK_FILL 6 @@ -622,8 +745,8 @@ Points - 11 - 12 + 12 + 13 GTK_FILL @@ -674,8 +797,60 @@ Points 2 3 - 12 - 13 + 13 + 14 + GTK_FILL + + + + + + True + 0 + _Address: + True + + + 5 + 6 + GTK_FILL + + + + + + True + True + + 0 0 100000 0.10000000149 10 10 + 1 + 3 + True + + + 1 + 2 + 5 + 6 + GTK_FILL + + + + + + True + True + + 0 0 100000 0.10000000149 10 10 + 1 + 3 + True + + + 2 + 3 + 5 + 6 GTK_FILL @@ -706,6 +881,7 @@ Points True + 5 Custom format center