Remove bitmap_byte_length member from zint_symbol

(was only set on BMP output to length of BMP pixel array)
EXCODE39: change to display check digit in HRT by default
CODE39/EXCODE39/LOGMARS: new hidden check digit option
  (`option_2 = 2`)
qr.c: suppress bogus gcc-13 warning (only appears on optimize)
GUI: move some symbology-specific options into Data Tab so
  separate tab unnecessary (those with few options and no
  Composite/ECI), namely: all C25XXX, CODE39/EXCODE39/LOGMARS,
  MSI_PLESSEY, CODABAR, DAFT, DPD, MAILMARK_2D, ITF-14, PZN,
  UPNQR, CHANNEL, CODE93 and VIN, adjusting grp uis.
  change Data dialog button (ellipsis) QToolButton -> QPushButton
  & vice versa zap/clear/eye/swap/scale buttons QPushButton ->
  QToolButton for better mac compat (also makes sense);
  remove some mac hacks that no longer seem necessary;
  use folder icon for Export dialog directory button
manual: document new Symbology-specific groupbox & CODE39/etc
  hidden check digit option; add annexes on Qt and Tcl backends;
  narrow some tables for better txt output;
  remove echoed image tags in txt (pandoc 3.1.5 regression?);
  add one-page HTML output to Makefile; also tex output (debug);
  add class attributes to images to aid HTML styling;
  various other fiddlings
This commit is contained in:
gitlost 2023-07-18 11:11:50 +01:00
parent d05373e7fc
commit 32c9e6a98e
56 changed files with 2419 additions and 1507 deletions

View File

@ -3,7 +3,7 @@ Version 2.12.0.9 (dev) not released yet
**Incompatible changes**
------------------------
- Buffer lengths of fields `fgcolour` and `bgcolour` in `zint_symbol` extended
- Buffer lengths of members `fgcolour` and `bgcolour` in `zint_symbol` extended
10 -> 16 to allow for "C,M,Y,K" comma-separated decimal percentage strings
- CMYK values for EPS (slightly) and TIF (significantly) have changed - now use
the same RGB -> CMYK formula
@ -15,8 +15,8 @@ Version 2.12.0.9 (dev) not released yet
- Text height (font size) for SMALL_TEXT vector output reduced
- For Windows, filenames are now assumed to be UTF-8 encoded. Affects `outfile`
in `zint_symbol` and all API filename arguments
- Never-used `fontsize` field removed from `zint_symbol`
- Buffer length of field `text` (HRT) in `zint_symbol` extended 128 -> 160
- Never-used `fontsize` member removed from `zint_symbol`
- Buffer length of member `text` (HRT) in `zint_symbol` extended 128 -> 160
(client buffers may need checking/extending)
- Font of text of SVG vector output now "OCRB, monospace" (EAN/UPC) or
"Arimo, Arial, sans-serif" (all others)
@ -24,6 +24,9 @@ Version 2.12.0.9 (dev) not released yet
- Unintended excess horizontal whitespace of Composite symbols removed, and
quiet zone settings respected exactly, and centring of HRT (if any) now
relative to linear part of symbol only rather than whole symbol
- Unlikely-to-be-used `bitmap_byte_length` member removed from `zint_symbol`
(was only set on BMP output to length of BMP pixel array)
- EXCODE39 now defaults to displaying check digit in Human Readable Text (HRT)
Changes
-------
@ -73,6 +76,11 @@ Changes
adjust text to baseline using values for Arimo rather than percentage
- manual: expand size/alpha details in Section "5.4 Buffering Symbols in Memory
(raster)" (cf ticket #291); add BSD info
- EXCODE39: change to display check digit in HRT by default
- CODE39/EXCODE39/LOGMARS: new hidden check digit option
- GUI: move some symbology-specific options into Data Tab so separate tab
unnecessary
- manual: add annexes on Qt and Tcl backends
Bugs
----

View File

@ -1,4 +1,4 @@
% Tested on Ubuntu 20.04.4 LTS, Ubuntu 22.04 LTS and Fedora Linux 36 (Workstation Edition)
% Tested on Ubuntu 20.04.4 LTS, Ubuntu 22.04 LTS and Fedora Linux 38 (Workstation Edition)
1. Prerequisites for building zint
==================================
@ -60,7 +60,7 @@ or Ubuntu 20.04
sudo apt install qt5-default qt5-uitools
or Fedora 36 (not recommended)
or Fedora 38 (not recommended)
sudo dnf install qt5-qtbase-devel qt5-qttools-devel qt5-qttools-static qt5-qtsvg-devel

View File

@ -122,8 +122,6 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, const unsigned char *pix
}
}
symbol->bitmap_byte_length = data_size;
file_header.header_field = 0x4d42; /* "BM" */
file_header.file_size = file_size;
file_header.reserved = 0;

View File

@ -248,7 +248,7 @@ INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int leng
counter = 0;
if ((symbol->option_2 < 0) || (symbol->option_2 > 1)) {
if ((symbol->option_2 < 0) || (symbol->option_2 > 2)) {
symbol->option_2 = 0;
}
@ -281,7 +281,7 @@ INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int leng
counter += posns[i];
}
if (symbol->option_2 == 1) {
if (symbol->option_2 == 1 || symbol->option_2 == 2) { /* Visible or hidden check digit */
char check_digit;
counter %= 43;
@ -294,8 +294,10 @@ INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int leng
check_digit = '_';
}
if (symbol->option_2 == 1) { /* Visible check digit */
localstr[0] = check_digit;
localstr[1] = '\0';
}
if (symbol->debug & ZINT_DEBUG_PRINT) printf("Check digit: %c\n", check_digit);
}
@ -442,6 +444,7 @@ INTERNAL int excode39(struct zint_symbol *symbol, unsigned char source[], int le
unsigned char buffer[85 * 2 + 1] = {0};
unsigned char *b = buffer;
unsigned char check_digit = '\0';
int i;
int error_number;
@ -469,9 +472,22 @@ INTERNAL int excode39(struct zint_symbol *symbol, unsigned char source[], int le
/* Then sends the buffer to the C39 function */
error_number = code39(symbol, buffer, b - buffer);
/* Save visible check digit */
if (symbol->option_2 == 1) {
const int len = (int) ustrlen(symbol->text);
if (len > 0) {
check_digit = symbol->text[len - 1];
}
}
/* Copy over source to HRT, subbing space for unprintables */
for (i = 0; i < length; i++)
symbol->text[i] = source[i] >= ' ' && source[i] != 0x7F ? source[i] : ' ';
symbol->text[length] = '\0'; /* Chops off check digit */
if (check_digit) {
symbol->text[i++] = check_digit;
}
symbol->text[i] = '\0';
return error_number;
}

View File

@ -108,7 +108,6 @@ void ZBarcode_Clear(struct zint_symbol *symbol) {
}
symbol->bitmap_width = 0;
symbol->bitmap_height = 0;
symbol->bitmap_byte_length = 0;
/* If there is a rendered version, ensure its memory is released */
vector_free(symbol);

View File

@ -871,6 +871,12 @@ static void qr_place_align(unsigned char grid[], const int size, int x, int y) {
static void qr_setup_grid(unsigned char *grid, const int size, const int version) {
int i, toggle = 1;
/* Suppress false positive gcc-13 warning (when optimizing only) "writing 1 byte into a region of size 0" */
#if defined(__GNUC__) && __GNUC__ == 13
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstringop-overflow"
#endif
/* Add timing patterns */
for (i = 0; i < size; i++) {
if (toggle == 1) {
@ -902,6 +908,10 @@ static void qr_setup_grid(unsigned char *grid, const int size, const int version
grid[(7 * size) + (size - 8)] = 0x10;
grid[((size - 8) * size) + 7] = 0x10;
#if defined(__GNUC__) && __GNUC__ == 13
#pragma GCC diagnostic pop
#endif
/* Add alignment patterns */
if (version != 1) {
/* Version 1 does not have alignment patterns */

View File

@ -1,6 +1,6 @@
/*
libzint - the open source barcode library
Copyright (C) 2020-2022 Robin Stuart <rstuart114@gmail.com>
Copyright (C) 2020-2023 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -124,35 +124,43 @@ static void test_hrt(const testCtx *const p_ctx) {
/* 2*/ { BARCODE_CODE11, 2, "123-45", -1, "123-45" }, /* No checksums */
/* 3*/ { BARCODE_CODE11, -1, "123456789012", -1, "123456789012-8" }, /* First check digit 10 (A) goes to hyphen */
/* 4*/ { BARCODE_CODE39, -1, "ABC1234", -1, "*ABC1234*" },
/* 5*/ { BARCODE_CODE39, -1, "abc1234", -1, "*ABC1234*" }, /* Converts to upper */
/* 6*/ { BARCODE_CODE39, -1, "123456789", -1, "*123456789*" },
/* 7*/ { BARCODE_CODE39, 1, "123456789", -1, "*1234567892*" }, /* With check digit */
/* 8*/ { BARCODE_EXCODE39, -1, "ABC1234", -1, "ABC1234" },
/* 9*/ { BARCODE_EXCODE39, -1, "abc1234", -1, "abc1234" },
/* 10*/ { BARCODE_EXCODE39, 1, "abc1234", -1, "abc1234" }, /* With check digit (not displayed) */
/* 11*/ { BARCODE_EXCODE39, -1, "a%\000\001$\177z\033\037!+/\\@A~", 16, "a% $ z !+/\\@A~" }, /* NUL, ctrls and DEL replaced with spaces */
/* 12*/ { BARCODE_LOGMARS, -1, "ABC1234", -1, "ABC1234" },
/* 13*/ { BARCODE_LOGMARS, -1, "abc1234", -1, "ABC1234" }, /* Converts to upper */
/* 14*/ { BARCODE_LOGMARS, 1, "abc1234", -1, "ABC12340" }, /* With check digit */
/* 15*/ { BARCODE_LOGMARS, 1, "12345/ABCDE", -1, "12345/ABCDET" }, /* With check digit */
/* 16*/ { BARCODE_CODE93, -1, "ABC1234", -1, "ABC1234" }, /* No longer shows 2 check chars added (same as BWIPP and TEC-IT) */
/* 17*/ { BARCODE_CODE93, 1, "ABC1234", -1, "ABC1234S5" }, /* Unless requested */
/* 18*/ { BARCODE_CODE93, -1, "abc1234", -1, "abc1234" },
/* 19*/ { BARCODE_CODE93, 1, "abc1234", -1, "abc1234ZG" },
/* 20*/ { BARCODE_CODE93, -1, "A\001a\000b\177d\037e", 9, "A a b d e" }, /* NUL, ctrls and DEL replaced with spaces */
/* 21*/ { BARCODE_PZN, -1, "12345", -1, "PZN - 00123458" }, /* Pads with zeroes if length < 7 */
/* 22*/ { BARCODE_PZN, -1, "123456", -1, "PZN - 01234562" },
/* 23*/ { BARCODE_PZN, -1, "1234567", -1, "PZN - 12345678" },
/* 24*/ { BARCODE_PZN, -1, "12345678", -1, "PZN - 12345678" },
/* 25*/ { BARCODE_PZN, 1, "1234", -1, "PZN - 0012345" }, /* PZN7, pads with zeroes if length < 6 */
/* 26*/ { BARCODE_PZN, 1, "12345", -1, "PZN - 0123458" },
/* 27*/ { BARCODE_PZN, 1, "123456", -1, "PZN - 1234562" },
/* 28*/ { BARCODE_PZN, 1, "1234562", -1, "PZN - 1234562" },
/* 29*/ { BARCODE_VIN, -1, "1FTCR10UXTPA78180", -1, "1FTCR10UXTPA78180" },
/* 30*/ { BARCODE_VIN, 1, "2FTPX28L0XCA15511", -1, "2FTPX28L0XCA15511" }, /* Include Import char - no change */
/* 31*/ { BARCODE_HIBC_39, -1, "ABC1234", -1, "*+ABC1234+*" },
/* 32*/ { BARCODE_HIBC_39, -1, "abc1234", -1, "*+ABC1234+*" }, /* Converts to upper */
/* 33*/ { BARCODE_HIBC_39, -1, "123456789", -1, "*+1234567890*" },
/* 5*/ { BARCODE_CODE39, 1, "ABC1234", -1, "*ABC12340*" }, /* With visible check digit */
/* 6*/ { BARCODE_CODE39, -1, "abc1234", -1, "*ABC1234*" }, /* Converts to upper */
/* 7*/ { BARCODE_CODE39, 1, "abc1234", -1, "*ABC12340*" }, /* Converts to upper */
/* 8*/ { BARCODE_CODE39, -1, "123456789", -1, "*123456789*" },
/* 9*/ { BARCODE_CODE39, 1, "123456789", -1, "*1234567892*" }, /* With visible check digit */
/* 10*/ { BARCODE_CODE39, 2, "123456789", -1, "*123456789*" }, /* With hidden check digit */
/* 11*/ { BARCODE_EXCODE39, -1, "ABC1234", -1, "ABC1234" },
/* 12*/ { BARCODE_EXCODE39, 1, "ABC1234", -1, "ABC12340" }, /* With visible check digit */
/* 13*/ { BARCODE_EXCODE39, -1, "abc1234", -1, "abc1234" },
/* 14*/ { BARCODE_EXCODE39, 1, "abc1234", -1, "abc1234." }, /* With visible check digit (previously was hidden) */
/* 15*/ { BARCODE_EXCODE39, 2, "abc1234", -1, "abc1234" }, /* With hidden check digit */
/* 16*/ { BARCODE_EXCODE39, -1, "a%\000\001$\177z\033\037!+/\\@A~", 16, "a% $ z !+/\\@A~" }, /* NUL, ctrls and DEL replaced with spaces */
/* 17*/ { BARCODE_EXCODE39, 1, "a%\000\001$\177z\033\037!+/\\@A~", 16, "a% $ z !+/\\@A~L" }, /* With visible check digit */
/* 18*/ { BARCODE_EXCODE39, 2, "a%\000\001$\177z\033\037!+/\\@A~", 16, "a% $ z !+/\\@A~" }, /* With hidden check digit */
/* 19*/ { BARCODE_LOGMARS, -1, "ABC1234", -1, "ABC1234" },
/* 20*/ { BARCODE_LOGMARS, -1, "abc1234", -1, "ABC1234" }, /* Converts to upper */
/* 21*/ { BARCODE_LOGMARS, 1, "abc1234", -1, "ABC12340" }, /* With check digit */
/* 22*/ { BARCODE_LOGMARS, 1, "12345/ABCDE", -1, "12345/ABCDET" }, /* With visible check digit */
/* 23*/ { BARCODE_LOGMARS, 2, "12345/ABCDE", -1, "12345/ABCDE" }, /* With hidden check digit */
/* 24*/ { BARCODE_CODE93, -1, "ABC1234", -1, "ABC1234" }, /* No longer shows 2 check chars added (same as BWIPP and TEC-IT) */
/* 25*/ { BARCODE_CODE93, 1, "ABC1234", -1, "ABC1234S5" }, /* Unless requested */
/* 26*/ { BARCODE_CODE93, -1, "abc1234", -1, "abc1234" },
/* 27*/ { BARCODE_CODE93, 1, "abc1234", -1, "abc1234ZG" },
/* 28*/ { BARCODE_CODE93, -1, "A\001a\000b\177d\037e", 9, "A a b d e" }, /* NUL, ctrls and DEL replaced with spaces */
/* 29*/ { BARCODE_PZN, -1, "12345", -1, "PZN - 00123458" }, /* Pads with zeroes if length < 7 */
/* 30*/ { BARCODE_PZN, -1, "123456", -1, "PZN - 01234562" },
/* 31*/ { BARCODE_PZN, -1, "1234567", -1, "PZN - 12345678" },
/* 32*/ { BARCODE_PZN, -1, "12345678", -1, "PZN - 12345678" },
/* 33*/ { BARCODE_PZN, 1, "1234", -1, "PZN - 0012345" }, /* PZN7, pads with zeroes if length < 6 */
/* 34*/ { BARCODE_PZN, 1, "12345", -1, "PZN - 0123458" },
/* 35*/ { BARCODE_PZN, 1, "123456", -1, "PZN - 1234562" },
/* 36*/ { BARCODE_PZN, 1, "1234562", -1, "PZN - 1234562" },
/* 37*/ { BARCODE_VIN, -1, "1FTCR10UXTPA78180", -1, "1FTCR10UXTPA78180" },
/* 38*/ { BARCODE_VIN, 1, "2FTPX28L0XCA15511", -1, "2FTPX28L0XCA15511" }, /* Include Import char - no change */
/* 39*/ { BARCODE_HIBC_39, -1, "ABC1234", -1, "*+ABC1234+*" },
/* 40*/ { BARCODE_HIBC_39, -1, "abc1234", -1, "*+ABC1234+*" }, /* Converts to upper */
/* 41*/ { BARCODE_HIBC_39, -1, "123456789", -1, "*+1234567890*" },
};
int data_size = ARRAY_SIZE(data);
int i, length, ret;
@ -222,40 +230,45 @@ static void test_input(const testCtx *const p_ctx) {
/* 25*/ { BARCODE_CODE39, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 26*/ { BARCODE_CODE39, 0, "1", -1, 0, 1, 38 },
/* 27*/ { BARCODE_CODE39, 1, "1", -1, 0, 1, 51 }, /* Check digit */
/* 28*/ { BARCODE_CODE39, 2, "1", -1, 0, 1, 38 }, /* option_2 > 1 gnored */
/* 29*/ { BARCODE_EXCODE39, -1, "A", -1, 0, 1, 38 },
/* 30*/ { BARCODE_EXCODE39, -1, "a", -1, 0, 1, 51 },
/* 31*/ { BARCODE_EXCODE39, -1, ",", -1, 0, 1, 51 },
/* 32*/ { BARCODE_EXCODE39, -1, "\000", 1, 0, 1, 51 },
/* 33*/ { BARCODE_EXCODE39, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 34*/ { BARCODE_EXCODE39, -1, "é", -1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 35*/ { BARCODE_LOGMARS, -1, "A", -1, 0, 1, 47 },
/* 36*/ { BARCODE_LOGMARS, -1, "a", -1, 0, 1, 47 },
/* 37*/ { BARCODE_LOGMARS, -1, ",", -1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 38*/ { BARCODE_LOGMARS, -1, "\000", 1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 39*/ { BARCODE_LOGMARS, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 40*/ { BARCODE_CODE93, -1, "A", -1, 0, 1, 46 },
/* 41*/ { BARCODE_CODE93, -1, "a", -1, 0, 1, 55 },
/* 42*/ { BARCODE_CODE93, -1, ",", -1, 0, 1, 55 },
/* 43*/ { BARCODE_CODE93, -1, "\000", 1, 0, 1, 55 },
/* 44*/ { BARCODE_CODE93, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 45*/ { BARCODE_CODE93, -1, "é", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 46*/ { BARCODE_PZN, -1, "1", -1, 0, 1, 142 },
/* 47*/ { BARCODE_PZN, -1, "A", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 48*/ { BARCODE_PZN, -1, "1000006", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Check digit == 10 so can't be used */
/* 49*/ { BARCODE_PZN, -1, "00000011", -1, ZINT_ERROR_INVALID_CHECK, -1, -1 },
/* 50*/ { BARCODE_PZN, 1, "100009", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Check digit == 10 so can't be used */
/* 51*/ { BARCODE_PZN, 1, "0000011", -1, ZINT_ERROR_INVALID_CHECK, -1, -1 },
/* 52*/ { BARCODE_VIN, -1, "5GZCZ43D13S812715", -1, 0, 1, 246 },
/* 53*/ { BARCODE_VIN, -1, "5GZCZ43D23S812715", -1, ZINT_ERROR_INVALID_CHECK, -1, -1 }, /* North American with invalid check character */
/* 54*/ { BARCODE_VIN, -1, "WP0ZZZ99ZTS392124", -1, 0, 1, 246 }, /* Not North American so no check */
/* 55*/ { BARCODE_VIN, -1, "WP0ZZZ99ZTS392I24", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* I not allowed */
/* 56*/ { BARCODE_VIN, -1, "WPOZZZ99ZTS392124", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* O not allowed */
/* 57*/ { BARCODE_VIN, -1, "WPQZZZ99ZTS392124", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Q not allowed */
/* 58*/ { BARCODE_HIBC_39, -1, "a", -1, 0, 1, 79 }, /* Converts to upper */
/* 59*/ { BARCODE_HIBC_39, -1, ",", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 60*/ { BARCODE_HIBC_39, -1, "\000", 1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 61*/ { BARCODE_HIBC_39, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 28*/ { BARCODE_CODE39, 2, "1", -1, 0, 1, 51 }, /* Hidden check digit */
/* 29*/ { BARCODE_CODE39, 3, "1", -1, 0, 1, 38 }, /* option_2 > 2 ignored */
/* 30*/ { BARCODE_EXCODE39, -1, "A", -1, 0, 1, 38 },
/* 31*/ { BARCODE_EXCODE39, 3, "A", -1, 0, 1, 38 }, /* option_2 > 2 ignored */
/* 32*/ { BARCODE_EXCODE39, -1, "a", -1, 0, 1, 51 },
/* 33*/ { BARCODE_EXCODE39, -1, ",", -1, 0, 1, 51 },
/* 34*/ { BARCODE_EXCODE39, -1, "\000", 1, 0, 1, 51 },
/* 35*/ { BARCODE_EXCODE39, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 36*/ { BARCODE_EXCODE39, -1, "é", -1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 37*/ { BARCODE_LOGMARS, -1, "A", -1, 0, 1, 47 },
/* 38*/ { BARCODE_LOGMARS, -1, "a", -1, 0, 1, 47 },
/* 39*/ { BARCODE_LOGMARS, -1, ",", -1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 40*/ { BARCODE_LOGMARS, -1, "\000", 1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 41*/ { BARCODE_LOGMARS, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1, },
/* 42*/ { BARCODE_LOGMARS, 3, "A", -1, 0, 1, 47 }, /* option_2 > 2 ignored */
/* 43*/ { BARCODE_CODE93, -1, "A", -1, 0, 1, 46 },
/* 44*/ { BARCODE_CODE93, -1, "a", -1, 0, 1, 55 },
/* 45*/ { BARCODE_CODE93, -1, ",", -1, 0, 1, 55 },
/* 46*/ { BARCODE_CODE93, -1, "\000", 1, 0, 1, 55 },
/* 47*/ { BARCODE_CODE93, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 48*/ { BARCODE_CODE93, -1, "é", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 49*/ { BARCODE_PZN, -1, "1", -1, 0, 1, 142 },
/* 50*/ { BARCODE_PZN, -1, "A", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 51*/ { BARCODE_PZN, -1, "1000006", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Check digit == 10 so can't be used */
/* 52*/ { BARCODE_PZN, -1, "00000011", -1, ZINT_ERROR_INVALID_CHECK, -1, -1 },
/* 53*/ { BARCODE_PZN, 1, "100009", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Check digit == 10 so can't be used */
/* 54*/ { BARCODE_PZN, 1, "0000011", -1, ZINT_ERROR_INVALID_CHECK, -1, -1 },
/* 55*/ { BARCODE_VIN, -1, "5GZCZ43D13S812715", -1, 0, 1, 246 },
/* 56*/ { BARCODE_VIN, -1, "5GZCZ43D23S812715", -1, ZINT_ERROR_INVALID_CHECK, -1, -1 }, /* North American with invalid check character */
/* 57*/ { BARCODE_VIN, -1, "WP0ZZZ99ZTS392124", -1, 0, 1, 246 }, /* Not North American so no check */
/* 58*/ { BARCODE_VIN, -1, "WP0ZZZ99ZTS392I24", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* I not allowed */
/* 59*/ { BARCODE_VIN, -1, "WPOZZZ99ZTS392124", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* O not allowed */
/* 60*/ { BARCODE_VIN, -1, "WPQZZZ99ZTS392124", -1, ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Q not allowed */
/* 61*/ { BARCODE_HIBC_39, -1, "a", -1, 0, 1, 79 }, /* Converts to upper */
/* 62*/ { BARCODE_HIBC_39, -1, ",", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 63*/ { BARCODE_HIBC_39, -1, "\000", 1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 64*/ { BARCODE_HIBC_39, -1, "\300", -1, ZINT_ERROR_INVALID_DATA, -1, -1 },
/* 65*/ { BARCODE_HIBC_39, 1, "a", -1, 0, 1, 79 }, /* option_2 ignored */
/* 66*/ { BARCODE_HIBC_39, 2, "a", -1, 0, 1, 79 }, /* option_2 ignored */
};
int data_size = ARRAY_SIZE(data);
int i, length, ret;

View File

@ -1335,7 +1335,6 @@ static void test_clear(const testCtx *const p_ctx) {
assert_nonzero(symbol->rows, "ZBarcode_Buffer() rows 0\n");
assert_nonzero(symbol->width, "ZBarcode_Buffer() width 0\n");
assert_zero(symbol->bitmap_byte_length, "ZBarcode_Buffer() bitmap_byte_length %d != 0\n", (int) symbol->bitmap_byte_length);
assert_null(symbol->vector, "ZBarcode_Buffer() vector != NULL\n");
ZBarcode_Clear(symbol);
@ -1347,7 +1346,6 @@ static void test_clear(const testCtx *const p_ctx) {
assert_zero(symbol->rows, "ZBarcode_Buffer() rows %d != 0\n", symbol->rows);
assert_zero(symbol->width, "ZBarcode_Buffer() width %d != 0\n", symbol->width);
assert_zero(symbol->bitmap_byte_length, "ZBarcode_Buffer() bitmap_byte_length %d != 0\n", (int) symbol->bitmap_byte_length);
assert_null(symbol->vector, "ZBarcode_Buffer() vector != NULL\n");
/* Vector */
@ -1371,7 +1369,6 @@ static void test_clear(const testCtx *const p_ctx) {
assert_nonzero(symbol->width, "ZBarcode_Buffer_Vector() width 0\n");
assert_null(symbol->bitmap, "ZBarcode_Buffer_Vector() bitmap != NULL\n");
assert_null(symbol->alphamap, "ZBarcode_Buffer_Vector() alphamap != NULL\n");
assert_zero(symbol->bitmap_byte_length, "ZBarcode_Buffer_Vector() bitmap_byte_length %d != 0\n", (int) symbol->bitmap_byte_length);
ZBarcode_Clear(symbol);
@ -1379,7 +1376,6 @@ static void test_clear(const testCtx *const p_ctx) {
assert_zero(symbol->rows, "ZBarcode_Buffer_Vector() rows %d != 0\n", symbol->rows);
assert_zero(symbol->width, "ZBarcode_Buffer_Vector() width %d != 0\n", symbol->width);
assert_zero(symbol->bitmap_byte_length, "ZBarcode_Buffer_Vector() bitmap_byte_length %d != 0\n", (int) symbol->bitmap_byte_length);
assert_null(symbol->bitmap, "ZBarcode_Buffer_Vector() bitmap != NULL\n");
assert_null(symbol->alphamap, "ZBarcode_Buffer_Vector() alphamap != NULL\n");
assert_zero(symbol->bitmap_width, "ZBarcode_Buffer_Vector() bitmap_width %d != 0\n", symbol->bitmap_width);

View File

@ -130,7 +130,6 @@ extern "C" {
int bitmap_width; /* Width of bitmap image (raster output only) */
int bitmap_height; /* Height of bitmap image (raster output only) */
unsigned char *alphamap; /* Array of alpha values used (raster output only) */
unsigned int bitmap_byte_length; /* Size of BMP bitmap data (raster output only) */
struct zint_vector *vector; /* Pointer to vector header (vector output only) */
};
@ -290,7 +289,7 @@ extern "C" {
/* Note: CODE16K, CODE49, CODABLOCKF, ITF14, EAN/UPC have default quiet zones
*/
#define BARCODE_NO_QUIET_ZONES 0x1000 /* Disable quiet zones, notably those with defaults as listed above */
#define COMPLIANT_HEIGHT 0x2000 /* Warn if height not compliant and use standard height (if any) as default */
#define COMPLIANT_HEIGHT 0x2000 /* Warn if height not compliant, or use standard height (if any) as default */
#define EANUPC_GUARD_WHITESPACE 0x4000 /* Add quiet zone indicators ("<"/">") to HRT whitespace (EAN/UPC) */
#define EMBED_VECTOR_FONT 0x8000 /* Embed font in vector output - currently only for SVG output */

View File

@ -1,5 +1,5 @@
# Makefile for generating "manual.txt" and "manual.pdf" from "manual.pmd" using pandoc
# Copyright (C) 2022 <rstuart114@gmail.com>
# Makefile for generating "manual.txt" and "manual.pdf" from "manual.pmd" and "zint.1" from "zint.1.pmd" using pandoc
# Copyright (C) 2022-2023 <rstuart114@gmail.com>
#
# Requires a recent version of pandoc, plus pandoc-tablenos, xelatex and various other packages - see "README"
# .svg images generated by "zint_images.sh"
@ -9,7 +9,6 @@ OUT_PDF = manual.pdf
OUT_TXT = manual.txt
INC_HEADER_PDF = inc_header_pdf.tex
INC_BEFORE_BODY_PDF = inc_before_body_pdf.tex
INCLUDES_PDF = $(INC_HEADER_PDF) $(INC_BEFORE_BODY_PDF)
INC_PDF = --include-in-header $(INC_HEADER_PDF) --include-before-body $(INC_BEFORE_BODY_PDF)
INCLUDES_TXT = inc_header_txt.tex
INC_TXT = --include-in-header $(INCLUDES_TXT)
@ -24,6 +23,7 @@ IMAGES = \
images/gui_menus.png \
images/gui_composite.png \
images/gui_segs.png \
images/gui_c25inter.png \
images/gui_aztec.png \
images/gui_appearance.png \
images/gui_scaling.png \
@ -36,6 +36,7 @@ IMAGES = \
images/gui_sequence.png \
images/gui_export.png \
images/gui_cli_equivalent.png \
images/tcl_demo.png \
images/pdf417_heightperrow.svg \
images/code128_box.svg \
images/qrcode_box.svg \
@ -149,7 +150,7 @@ MAN_PAGE_OPTS = -s -t man
all : $(OUT_PDF) $(OUT_TXT) $(OUT_MAN_PAGE)
$(OUT_PDF) : $(SOURCE) $(SOURCE_MAN_PAGE) $(HIGHLIGHT_THEME) $(INC_HEADER_PDF) $(INC_BEFORE_BODY_PDF) $(IMAGES) Makefile
$(OUT_PDF) : $(SOURCE) $(SOURCE_MAN_PAGE) $(INC_HEADER_PDF) $(INC_BEFORE_BODY_PDF) $(IMAGES) Makefile
pandoc $(SOURCE_MAN_PAGE) -f markdown \
$(PDF_OPTS) \
-o $(TEX_MAN_PAGE)
@ -165,13 +166,52 @@ $(OUT_TXT) : $(SOURCE) $(SOURCE_MAN_PAGE) $(INCLUDES_TXT) Makefile
-V $(MAIN_FONT) -V $(MONO_FONT) -V $(CJK_FONT) \
$(TXT_OPTS) \
-o $(OUT_TXT)
# Indent Man Page sections in TOC and remove trailing spaces
# Indent Man Page sections in TOC, remove trailing spaces and echoed image tags
sed -i \
-e 's/^\(- [A-Z][A-Z ]*\)$$/ \1/' \
-e 's/ *$$//' \
-e '/^\[.*\]$$/{N;N;s/\[\(.*\)\]\n\n\1/[\1]/;p;d}' \
$(OUT_TXT)
# Wrap
sed -i '/.\{81\}/{s/.\{80\}/&\n/}' $(OUT_TXT)
$(OUT_MAN_PAGE) : $(SOURCE_MAN_PAGE) Makefile
pandoc $(SOURCE_MAN_PAGE) -f markdown \
$(MAN_PAGE_OPTS) \
-o $(OUT_MAN_PAGE)
# For debugging
manual.tex : $(SOURCE) $(SOURCE_MAN_PAGE) $(INC_HEADER_PDF) $(INC_BEFORE_BODY_PDF) $(IMAGES) Makefile
pandoc $(SOURCE_MAN_PAGE) -f markdown \
$(PDF_OPTS) \
-o $(TEX_MAN_PAGE)
sed -i -e 's/section{/subsection{/' $(TEX_MAN_PAGE) # Convert man page sections to subsections
pandoc $(SOURCE) -f markdown $(INC_PDF) --toc --toc-depth=4 \
-V $(MAIN_FONT) -V $(MONO_FONT) -V $(CJK_FONT) -V block-headings \
$(PDF_OPTS) \
--include-after-body $(TEX_MAN_PAGE) \
-s -o manual.tex
# HTML one-page (uses modified "templates/styles.html", unchanged "templates/default.html")
OUT_HTML = manual.html
HTML_OPTS = --filter pandoc-tablenos -M tablenos-warning-level=0 --highlight-style=haddock \
--template=templates/default.html --eol=lf -s -t html
INC_BEFORE_BODY_HTML = inc_before_body_html.html
INC_HTML = --include-before-body $(INC_BEFORE_BODY_HTML)
TEMPLATES_HTML = templates/default.html templates/styles.html
$(OUT_HTML) : $(SOURCE) $(SOURCE_MAN_PAGE) $(INC_BEFORE_BODY_HTML) $(TEMPLATES_HTML) Makefile
pandoc $(SOURCE) $(SOURCE_MAN_PAGE) -f markdown+link_attributes $(INC_HTML) --toc --toc-depth=4 \
-V $(MAIN_FONT) -V $(MONO_FONT) -V $(CJK_FONT) \
$(HTML_OPTS) \
-o $(OUT_HTML)
# Indent Man Page sections in TOC, change Man Page sections h1 -> h2, remove Man Page meta, fix Table captions
sed -i \
-e 's/\(Man Page ZINT(1)<\/a>\)<\/li>/\1<ul>/' \
-e 's/\(AUTHORS<\/a><\/li>\)/\1<\/ul><\/li>/' \
-e 's/^<h1\([^>]*>[A-Z][A-Z ]*<\/\)h1>$$/<h2\1h2>/' \
-e 's/^<p>% ZINT(1)[^<]*<\/p>//' \
-e 's/<caption><span>Table\(.:[^:]*\):/<caption><span>Table\1/' \
$(OUT_HTML)

View File

@ -2,8 +2,8 @@ For generation of "docs/manual.pdf" and "docs/manual.txt" from "manual.pmd" usin
On Ubuntu/Debian (tested on Ubuntu 22.04)
wget https://github.com/jgm/pandoc/releases/download/3.1.4/pandoc-3.1.4-1-amd64.deb
sudo dpkg -i pandoc-3.1.4-1-amd64.deb
wget https://github.com/jgm/pandoc/releases/download/3.1.5/pandoc-3.1.5-1-amd64.deb
sudo dpkg -i pandoc-3.1.5-1-amd64.deb
sudo apt install python3-pip
pip install pandoc-tablenos --user
export PATH=~/.local/bin:"$PATH"
@ -18,9 +18,9 @@ On Ubuntu/Debian (tested on Ubuntu 22.04)
On Fedora (tested on Fedora Linux 38 (Workstation Edition))
wget https://github.com/jgm/pandoc/releases/download/3.1.4/pandoc-3.1.4-linux-amd64.tar.gz
tar xf pandoc-3.1.4-linux-amd64.tar.gz
sudo mv -i pandoc-3.1.4/bin/pandoc /usr/local/bin
wget https://github.com/jgm/pandoc/releases/download/3.1.5/pandoc-3.1.5-linux-amd64.tar.gz
tar xf pandoc-3.1.5-linux-amd64.tar.gz
sudo mv -i pandoc-3.1.5/bin/pandoc /usr/local/bin
sudo dnf install python3-pip
pip install pandoc-tablenos --user
export PATH=~/.local/bin:"$PATH"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 276 KiB

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

After

Width:  |  Height:  |  Size: 256 KiB

BIN
docs/images/tcl_demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -0,0 +1,4 @@
<div id="banner">
<img src="images/zint.png" class="img_hdr">
<img src="images/zint-qt.png" class="img_hdr">
</div>

View File

@ -20,7 +20,6 @@
%% Text and background color for inline code
\usepackage{xcolor}
\usepackage{fvextra}
\definecolor{icfg}{HTML}{331a33}
\let\oldtexttt\texttt
\renewcommand{\texttt}[1]{\textcolor{icfg}{\oldtexttt{#1}}}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

76
docs/templates/default.html vendored Normal file
View File

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
$for(author-meta)$
<meta name="author" content="$author-meta$" />
$endfor$
$if(date-meta)$
<meta name="dcterms.date" content="$date-meta$" />
$endif$
$if(keywords)$
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
$endif$
$if(description-meta)$
<meta name="description" content="$description-meta$" />
$endif$
<title>$if(title-prefix)$$title-prefix$ $endif$$pagetitle$</title>
<style>
$styles.html()$
</style>
$for(css)$
<link rel="stylesheet" href="$css$" />
$endfor$
$for(header-includes)$
$header-includes$
$endfor$
$if(math)$
$if(mathjax)$
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
$endif$
$math$
$endif$
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
$for(include-before)$
$include-before$
$endfor$
$if(title)$
<header id="title-block-header">
<h1 class="title">$title$</h1>
$if(subtitle)$
<p class="subtitle">$subtitle$</p>
$endif$
$for(author)$
<p class="author">$author$</p>
$endfor$
$if(date)$
<p class="date">$date$</p>
$endif$
$if(abstract)$
<div class="abstract">
<div class="abstract-title">$abstract-title$</div>
$abstract$
</div>
$endif$
</header>
$endif$
$if(toc)$
<nav id="$idprefix$TOC" role="doc-toc">
$if(toc-title)$
<h2 id="$idprefix$toc-title">$toc-title$</h2>
$endif$
$table-of-contents$
</nav>
$endif$
$body$
$for(include-after)$
$include-after$
$endfor$
</body>
</html>

291
docs/templates/styles.html vendored Normal file
View File

@ -0,0 +1,291 @@
$if(document-css)$
html {
$if(mainfont)$
font-family: $mainfont$;
$endif$
$if(fontsize)$
font-size: $fontsize$;
$endif$
$if(linestretch)$
line-height: $linestretch$;
$endif$
color: $if(fontcolor)$$fontcolor$$else$#1a1a1a$endif$;
background-color: $if(backgroundcolor)$$backgroundcolor$$else$#fdfdfd$endif$;
}
body {
margin: 0 auto;
max-width: $if(maxwidth)$$maxwidth$$else$50em$endif$;
padding-left: $if(margin-left)$$margin-left$$else$50px$endif$;
padding-right: $if(margin-right)$$margin-right$$else$50px$endif$;
padding-top: $if(margin-top)$$margin-top$$else$50px$endif$;
padding-bottom: $if(margin-bottom)$$margin-bottom$$else$50px$endif$;
hyphens: auto;
overflow-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 12px;
}
h1 {
font-size: 1.8em;
}
}
@media print {
html {
background-color: $if(backgroundcolor)$$backgroundcolor$$else$white$endif$;
}
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: $if(linkcolor)$$linkcolor$$else$#800000$endif$;
}
a:visited {
color: $if(linkcolor)$$linkcolor$$else$#800000$endif$;
}
a:not(:hover) {
text-decoration: none;
}
figure {
margin-left: 0;
margin-right: 0;
text-align: center;
}
img {
max-width: 100%;
}
img.btn {
height: 0.9em;
}
img.win {
max-width: 80%;
}
img.pop {
max-width: 60%;
}
img[src*="gui_set_printing_scale.png"] {
max-width: 50%;
}
img.lin {
max-height: 10em;
}
img[src*="code128_rotate90.svg"] {
max-height: 20em;
}
img.i2d {
max-height: 10em;
}
img[src*="upnqr.svg"] {
max-height: 20em;
}
img.i2dbig {
}
img.trk {
max-height: 3em;
}
img[src*="fim.svg"] {
max-height: 10em;
}
img.dotty {
max-height: 7em;
}
img.ultra {
max-height: 12em;
}
img.upcean {
max-height: 12em;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
dt {
font-weight:bold;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
$if(abstract)$
div.abstract {
margin: 2em 2em 2em 2em;
text-align: left;
font-size: 85%;
}
div.abstract-title {
font-weight: bold;
text-align: center;
padding: 0;
margin-bottom: 0.5em;
}
$endif$
code {
font-family: $if(monofont)$$monofont$$else$Menlo, Monaco, Consolas, 'Lucida Console', monospace$endif$;
$if(monobackgroundcolor)$
background-color: $monobackgroundcolor$;
padding: .2em .4em;
$endif$
font-size: 90%;
margin: 0;
hyphens: manual;
color: #000000;
}
pre {
margin: 1em 0;
$if(monobackgroundcolor)$
background-color: $monobackgroundcolor$;
padding: 1em;
$endif$
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
overflow-wrap: normal;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
div.sourceCode {
background-color: #f5f5f5;
padding: 0.3em 0;
}
aside.footnotes {
font-size:90%;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 0 auto 0.4em auto;
border-collapse: collapse;
overflow-x: auto;
font-variant-numeric: lining-nums tabular-nums;
}
#tbl\:gridmatrix_eccs {
margin-top: 1em;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid $if(fontcolor)$$fontcolor$$else$#1a1a1a$endif$;
border-bottom: 1px solid $if(fontcolor)$$fontcolor$$else$#1a1a1a$endif$;
}
th {
border-top: 1px solid $if(fontcolor)$$fontcolor$$else$#1a1a1a$endif$;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
vertical-align: top;
}
header {
margin-bottom: 4em;
text-align: center;
}
#banner {
text-align: center;
}
#banner img.img_hdr {
height: 7em;
}
#TOC {
font-size: 115%;
}
#TOC li {
list-style: none;
margin-bottom: 0.1em;
margin-top: 0.2em;
}
#TOC ul {
padding-left: 1.3em;
}
#TOC > ul {
padding-left: 0;
}
#TOC > ul > li {
margin-top: 0.5em;
}
#TOC > ul > li > a {
font-weight: bold;
}
#TOC a:not(:hover) {
color: #1a1a1a;
text-decoration: none;
}
dd > p {
margin-bottom:1.5em;
margin-top:0.5em;
}
#exit-status + dl > dt {
float: left;
}
#exit-status + dl > dd {
margin-bottom: 1em;
}
$endif$
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
$if(quotes)$
q { quotes: "“" "”" "" ""; }
$endif$
$if(displaymath-css)$
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
$endif$
$if(highlighting-css)$
/* CSS for syntax highlighting */
$highlighting-css$
$endif$
$if(csl-css)$
$styles.citations.html()$
$endif$

View File

@ -1,4 +1,4 @@
.\" Automatically generated by Pandoc 3.1.4
.\" Automatically generated by Pandoc 3.1.5
.\"
.\" Define V font for inline verbatim, using C font in formats
.\" that render this, and otherwise B font.
@ -497,10 +497,10 @@ Code 11 0 to 2 (2 visible check digits to none)
0 (default 2 visible check digits)
1 (1 visible check digit)
2 (no check digits)
Code 39 1 (add visible check digit)
Code 39 1 or 2 (add visible or hidden check digit)
Code 93 1 (hide the default check characters)
EXCODE39 1 (add visible check digit)
LOGMARS 1 (add visible check digit)
EXCODE39 1 or 2 (add visible or hidden check digit)
LOGMARS 1 or 2 (add visible or hidden check digit)
MSI Plessey 0 to 6 (none to various visible options)
1, 2 (mod-10, mod-10 + mod-10)
3, 4 (mod-11 IBM, mod-11 IBM + mod-10)

View File

@ -27,54 +27,67 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S
# OPTIONS
`-h`, `--help`
: Print usage information summarizing command line options.
`-b TYPE`, `--barcode=TYPE`
: Set the barcode symbology that will be used to encode the data. *TYPE* is the number or name of the barcode
symbology. If not given, the symbology defaults to 20 (Code 128). To see what types are available, use the `-t` |
`--types` option. Type names are case-insensitive, and non-alphanumerics are ignored.
`--addongap=INTEGER`
: For EAN/UPC symbologies, set the gap between the main data and the add-on. *INTEGER* is in integral multiples of
the X-dimension. The maximum gap that can be set is 12. The minimum is 7, except for UPC-A, when the minimum is 9.
`--batch`
: Treat each line of an input file specified with `-i` | `--input` as a separate data set and produce a barcode
image for each one. The barcode images are outputted by default to numbered filenames starting with "00001.png",
"00002.png" etc., which can be changed by using the `-o` | `--output` option.
`--bg=COLOUR`
: Specify a background (paper) colour where *COLOUR* is in hexadecimal `RRGGBB` or `RRGGBBAA` format or in decimal
`C,M,Y,K` percentages format.
`--binary`
: Treat input data as raw 8-bit binary data instead of the default UTF-8. Automatic code page translation to an ECI
page is disabled, and no validation of the data's character encoding takes place.
`--bind`
: Add horizontal boundary bars (also known as bearer bars) to the symbol. The width of the boundary bars is
specified by the `--border` option. `--bind` can also be used to add row separator bars to symbols stacked with
multiple `-d` | `--data` inputs, in which case the width of the separator bars is specified with the `--separator`
option.
`--bindtop`
: Add a horizontal boundary bar to the top of the symbol. The width of the boundary bar is specified by the
`--border` option.
`--bold`
: Use bold text for the Human Readable Text (HRT).
`--border=INTEGER`
: Set the width of boundary bars (`--bind` or `--bindtop`) or box borders (`--box`), where *INTEGER* is in integral
multiples of the X-dimension. The default is zero.
`--box`
: Add a box around the symbol. The width of the borders is specified by the `--border` option.
`--cmyk`
: Use the CMYK colour space when outputting to Encapsulated PostScript (EPS) or TIF files.
`--cols=INTEGER`
: Set the number of data columns in the symbol to *INTEGER*. Affects Codablock-F, DotCode, GS1 DataBar Expanded
Stacked (DBAR_EXPSTK), MicroPDF417 and PDF417 symbols.
@ -394,10 +407,10 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S
0 (default 2 visible check digits)
1 (1 visible check digit)
2 (no check digits)
Code 39 1 (add visible check digit)
Code 39 1 or 2 (add visible or hidden check digit)
Code 93 1 (hide the default check characters)
EXCODE39 1 (add visible check digit)
LOGMARS 1 (add visible check digit)
EXCODE39 1 or 2 (add visible or hidden check digit)
LOGMARS 1 or 2 (add visible or hidden check digit)
MSI Plessey 0 to 6 (none to various visible options)
1, 2 (mod-10, mod-10 + mod-10)
3, 4 (mod-11 IBM, mod-11 IBM + mod-10)

View File

@ -1,6 +1,6 @@
/*
Zint Barcode Generator - the open source barcode generator
Copyright (C) 2009-2022 Robin Stuart <rstuart114@gmail.com>
Copyright (C) 2009-2023 Robin Stuart <rstuart114@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -57,6 +57,8 @@ ExportWindow::ExportWindow(BarcodeItem *bc, const QString& output_data)
QIcon closeIcon(QIcon::fromTheme(QSL("window-close"), QIcon(QSL(":res/x.svg"))));
btnCancel->setIcon(closeIcon);
QIcon folderIcon(QIcon::fromTheme(QSL("folder"), QIcon(QSL(":res/folder.svg"))));
btnDestPath->setIcon(folderIcon);
connect(btnCancel, SIGNAL( clicked( bool )), SLOT(close()));
connect(btnOK, SIGNAL( clicked( bool )), SLOT(process()));

View File

@ -20,7 +20,7 @@
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutData">
<item>
<widget class="QLabel" name="label">
<property name="text">
@ -45,7 +45,7 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QHBoxLayout" name="hLayoutData">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>

View File

@ -19,7 +19,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutC11">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="grpC11CheckDigits">
<property name="title">
@ -65,22 +80,6 @@
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -19,7 +19,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutC25">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="grpC25Check">
<property name="title">
@ -66,19 +81,6 @@ do not display in Human Readable Text</string>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -19,7 +19,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayoutC39">
<layout class="QVBoxLayout" name="vLayoutC39">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="grpC39Check">
<property name="title">
@ -42,7 +57,28 @@
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<item row="0" column="1">
<widget class="QRadioButton" name="radC39Check">
<property name="text">
<string>&amp;Mod-43 Check Digit</string>
</property>
<property name="toolTip">
<string>Add mod-43 check character</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QRadioButton" name="radC39CheckHide">
<property name="text">
<string>&amp;Hidden Mod-43 Check Digit</string>
</property>
<property name="toolTip">
<string>Add mod-43 check character but
do not display in Human Readable Text</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QRadioButton" name="radC39HIBC">
<property name="text">
<string>H&amp;IBC (Mod-43 Check Digit added)</string>
@ -55,32 +91,9 @@ the data with a slash &quot;/&quot;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="radC39Check">
<property name="text">
<string>&amp;Mod-43 Check Digit</string>
</property>
<property name="toolTip">
<string>Add mod-43 check character</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacerC39">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -13,7 +13,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutC93">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="chkC93ShowChecks">
<property name="text">
@ -28,19 +43,6 @@ the Human Readable Text</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -1,7 +1,7 @@
<ui version="4.0" >
<ui version="4.0">
<class>grpChannel</class>
<widget class="QWidget" name="grpChannel" >
<property name="geometry" >
<widget class="QWidget" name="grpChannel">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@ -15,18 +15,33 @@
<height>16777215</height>
</size>
</property>
<property name="windowTitle" >
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
<layout class="QVBoxLayout" name="vLayoutChannel">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout" >
<layout class="QHBoxLayout" name="hLayoutChannel">
<item>
<widget class="QLabel" name="lblChannel" >
<property name="text" >
<widget class="QLabel" name="lblChannel">
<property name="text">
<string>&amp;Number of Channels:</string>
</property>
<property name="toolTip" >
<property name="toolTip">
<string>The number of channels determines the&lt;br /&gt;range of numbers that can be encoded&lt;table cellspacing=&quot;3&quot;&gt;
&gt;&lt;tr&gt;&lt;th align=left&gt;Channels&amp;nbsp;&lt;/th&gt;&lt;th align=left&gt;Range&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&amp;nbsp;&lt;/td&gt;&lt;td&gt;0 to 26&lt;/td&gt;&lt;/tr&gt;
@ -37,17 +52,17 @@
&lt;tr&gt;&lt;td&gt;8&amp;nbsp;&lt;/td&gt;&lt;td&gt;0 to 7742862&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</string>
</property>
<property name="alignment" >
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="buddy" >
<property name="buddy">
<cstring>cmbChannel</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cmbChannel" >
<property name="toolTip" >
<widget class="QComboBox" name="cmbChannel">
<property name="toolTip">
<string>The number of channels determines the&lt;br /&gt;range of numbers that can be encoded&lt;table cellspacing=&quot;3&quot;&gt;
&gt;&lt;tr&gt;&lt;th align=left&gt;Channels&amp;nbsp;&lt;/th&gt;&lt;th align=left&gt;Range&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&amp;nbsp;&lt;/td&gt;&lt;td&gt;0 to 26&lt;/td&gt;&lt;/tr&gt;
@ -59,37 +74,37 @@
&lt;/table&gt;</string>
</property>
<item>
<property name="text" >
<property name="text">
<string>Automatic</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>4</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>5</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>6</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>7</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>8</string>
</property>
</item>
@ -97,19 +112,6 @@
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>30</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -13,7 +13,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutCodabar">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="grpCodabarCheck">
<property name="title">
@ -60,19 +75,6 @@ not display in Human Readable Text</string>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -19,9 +19,9 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutC1">
<item>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gLayoutC1">
<item row="0" column="0">
<widget class="QLabel" name="lblC1Size">
<property name="text">
@ -121,7 +121,7 @@ variable widths</string>
<property name="toolTip">
<string>How to process data</string>
</property>
<layout class="QGridLayout" name="gridLayoutC1EncodingMode">
<layout class="QGridLayout" name="gLayoutC1EncodingMode">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
@ -163,7 +163,7 @@ formatted with Application Identifiers (AIs)
128 symbols (not available for Version S)
(ignored if disabled)</string>
</property>
<layout class="QGridLayout" name="gridLayoutC1StructApp">
<layout class="QGridLayout" name="gLayoutC1StructApp">
<item row="0" column="0">
<widget class="QLabel" name="lblC1StructAppCount">
<property name="text">
@ -313,7 +313,7 @@ Value ranges from 1 to count
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="vSpacerC1">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>

View File

@ -19,9 +19,24 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutDAFT">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QHBoxLayout" name="hLayoutDAFT">
<item>
<widget class="QLabel" name="lblDAFTTrackerRatio">
<property name="text">
@ -85,7 +100,7 @@
</layout>
</item>
<item>
<widget class="QLabel" name="noteTrackerRatios">
<widget class="QLabel" name="noteDAFTTrackerRatios">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -93,14 +108,13 @@
</sizepolicy>
</property>
<property name="text">
<string>Examples of tracker ratios:&lt;table cellspacing=&quot;3&quot;&gt;
&lt;tr&gt;&lt;td&gt;Australia Post&amp;nbsp;&lt;/td&gt;&lt;td&gt;26%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Japan Post&amp;nbsp;&lt;/td&gt;&lt;td&gt;33%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;PLANET, POSTNET&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;i&gt;25% (Tracker and Ascender only)&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Royal Mail, Dutch Post&amp;nbsp;&lt;/td&gt;&lt;td&gt;25.6%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;USPS Intelligent Mail&amp;nbsp;&lt;/td&gt;&lt;td&gt;33.1%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Default&amp;nbsp;&lt;/td&gt;&lt;td&gt;25%&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</string>
<string>Examples of tracker ratios:
Australia Post 26%,
Dutch Post &amp; Royal Mail 25.6%,
Japan Post 33%,
PLANET &amp; POSTNET &lt;i&gt;25% (Tracker and Ascender only)&lt;/i&gt;,
USPS Intelligent Mail 33.1%
</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
@ -113,19 +127,6 @@
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>30</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -13,7 +13,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutDPD">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="chkDPDRelabel">
<property name="text">
@ -29,19 +44,6 @@ Input is 27 characters</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -19,9 +19,9 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutDot">
<item>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gLayoutDot">
<item row="0" column="0">
<widget class="QLabel" name="lblDotCols">
<property name="text">
@ -1112,7 +1112,7 @@ as 0 to 3 with the corners lit</string>
<property name="toolTip">
<string>How to process data</string>
</property>
<layout class="QGridLayout" name="gridLayoutDotEncodingMode">
<layout class="QGridLayout" name="gLayoutDotEncodingMode">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
@ -1152,7 +1152,7 @@ formatted with Application Identifiers (AIs)</string>
<string>DotCode supports Structured Append of up to
35 symbols</string>
</property>
<layout class="QGridLayout" name="gridLayoutDotStructApp">
<layout class="QGridLayout" name="gLayoutDotStructApp">
<item row="0" column="0">
<widget class="QLabel" name="lblDotStructAppCount">
<property name="text">
@ -1643,7 +1643,7 @@ Value ranges from 1 to count
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="vSpacerDot">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>

View File

@ -19,9 +19,9 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutGrid">
<item>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gLayoutGrid">
<item row="0" column="0">
<widget class="QLabel" name="labelGridSize">
<property name="text">
@ -214,7 +214,7 @@ and Latin data</string>
<string>Grid Matrix supports Structured Append of up to
16 symbols</string>
</property>
<layout class="QGridLayout" name="gridLayoutGridStructApp">
<layout class="QGridLayout" name="gLayoutGridStructApp">
<item row="0" column="0">
<widget class="QLabel" name="lblGridStructAppCount">
<property name="text">
@ -521,7 +521,7 @@ Value ranges from 0 to 255
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="vSpacerGrid">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>

View File

@ -19,9 +19,9 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutHX">
<item>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gLayoutHX">
<item row="0" column="0">
<widget class="QLabel" name="labelHXSize">
<property name="text">
@ -579,7 +579,7 @@ and Latin data</string>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="vSpacerHX">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>

View File

@ -19,7 +19,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutITF14">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="chkITF14NoQuietZones">
<property name="text">
@ -33,19 +48,6 @@
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -1,7 +1,7 @@
<ui version="4.0" >
<ui version="4.0">
<class>grpMQR</class>
<widget class="QWidget" name="grpMQR" >
<property name="geometry" >
<widget class="QWidget" name="grpMQR">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@ -15,15 +15,15 @@
<height>16777215</height>
</size>
</property>
<property name="windowTitle" >
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
<layout class="QVBoxLayout" name="vLayoutMQR">
<item>
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="lavelMQRSize" >
<property name="text" >
<layout class="QGridLayout" name="gLayoutMQR">
<item row="0" column="0">
<widget class="QLabel" name="lblMQRSize">
<property name="text">
<string>Si&amp;ze:</string>
</property>
<property name="toolTip">
@ -34,8 +34,8 @@
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QComboBox" name="cmbMQRSize" >
<item row="0" column="1">
<widget class="QComboBox" name="cmbMQRSize">
<property name="toolTip">
<string>Set size (version) of symbol</string>
</property>
@ -45,30 +45,30 @@
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>11 x 11 (Version M1)</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>13 x 13 (Version M2)</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>15 x 15 (Version M3)</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>17 x 17 (Version M4)</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="labelMQRECC" >
<property name="text" >
<item row="1" column="0">
<widget class="QLabel" name="lblMQRECC">
<property name="text">
<string>E&amp;rror Correction:</string>
</property>
<property name="toolTip">
@ -80,8 +80,8 @@ error correction codewords</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QComboBox" name="cmbMQRECC" >
<item row="1" column="1">
<widget class="QComboBox" name="cmbMQRECC">
<property name="toolTip">
<string>Set percentage of capacity to use for
error correction codewords</string>
@ -92,24 +92,24 @@ error correction codewords</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>~20% (Level L)</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>~37% (Level M)</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>~55% (Level Q)</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="labelMQRMask">
<widget class="QLabel" name="lblMQRMask">
<property name="text">
<string>&amp;Mask:</string>
</property>
@ -170,14 +170,14 @@ and Latin data</string>
</widget>
</item>
<item>
<spacer name="verticalSpacer" >
<property name="orientation" >
<spacer name="vSpacerMQR">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0" >
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>50</height>

View File

@ -1,7 +1,7 @@
<ui version="4.0" >
<ui version="4.0">
<class>grpMSICheck</class>
<widget class="QWidget" name="grpMSICheck" >
<property name="geometry" >
<widget class="QWidget" name="grpMSICheck">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@ -15,21 +15,36 @@
<height>16777215</height>
</size>
</property>
<property name="windowTitle" >
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
<layout class="QVBoxLayout" name="vLayoutMSI">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout" >
<layout class="QHBoxLayout" name="hLayoutMSI">
<item>
<widget class="QLabel" name="lblMSICheck" >
<property name="text" >
<widget class="QLabel" name="lblMSICheck">
<property name="text">
<string>&amp;Check Digit:</string>
</property>
<property name="alignment" >
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="buddy" >
<property name="buddy">
<cstring>cmbMSICheck</cstring>
</property>
<property name="toolTip">
@ -40,44 +55,44 @@ Mod-11 (NCR) uses NCR weightings</string>
</widget>
</item>
<item>
<widget class="QComboBox" name="cmbMSICheck" >
<widget class="QComboBox" name="cmbMSICheck">
<property name="toolTip">
<string>Mod-10 uses Luhn algorithm
Mod-11 (IBM) uses IBM weightings
Mod-11 (NCR) uses NCR weightings</string>
</property>
<item>
<property name="text" >
<property name="text">
<string>None</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>Mod-10</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>Mod-10 &amp; Mod-10</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>Mod-11 (IBM)</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>Mod-11 (IBM) &amp; Mod-10</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>Mod-11 (NCR)</string>
</property>
</item>
<item>
<property name="text" >
<property name="text">
<string>Mod-11 (NCR) &amp; Mod-10</string>
</property>
</item>
@ -99,19 +114,6 @@ in Human Readable Text</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>31</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -19,7 +19,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayoutMailmark2D">
<layout class="QVBoxLayout" name="vLayoutMailmark2D">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QGridLayout" name="gridLayoutMailmark2D">
<item row="0" column="0">
@ -98,19 +113,6 @@ size selection, suppressing rectangular version 30
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacerMailmark2D">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>grpMicroPDF</class>
<widget class="QWidget" name="grpMicroPDF">
<class>grpMaxicode</class>
<widget class="QWidget" name="grpMaxicode">
<property name="geometry">
<rect>
<x>0</x>
@ -19,9 +19,9 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutMaxi">
<item>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gLayoutMaxi">
<item row="0" column="0">
<widget class="QLabel" name="lblMaxiMode">
<property name="text">
@ -94,7 +94,7 @@ Mode 6 sets the scanner (Reader Initialisation/Programming)</string>
<property name="toolTip">
<string>For Modes 2 and 3 only</string>
</property>
<layout class="QGridLayout" name="gridLayoutMaxiSCM">
<layout class="QGridLayout" name="gLayoutMaxiSCM">
<item row="0" column="0">
<widget class="QLabel" name="lblMaxiSCMPostcode">
<property name="enabled">
@ -337,7 +337,7 @@ specified as follows
<string>MaxiCode supports Structured Append of up to
8 symbols</string>
</property>
<layout class="QGridLayout" name="gridLayoutMaxiStructApp">
<layout class="QGridLayout" name="gLayoutMaxiStructApp">
<item row="0" column="0">
<widget class="QLabel" name="lblMaxiStructAppCount">
<property name="toolTip">
@ -558,7 +558,7 @@ Value ranges from 1 to count
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="vSpacerMaxi">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>

View File

@ -19,7 +19,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutPZN">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="chkPZN7">
<property name="text">
@ -33,19 +48,6 @@
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -19,7 +19,7 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutRMQR">
<item>
<layout class="QGridLayout" name="grpRMQROptions">
<item row="0" column="0">
@ -287,7 +287,7 @@ error correction codewords</string>
<property name="toolTip">
<string>How to process data</string>
</property>
<layout class="QGridLayout" name="gridLayoutRMQREncodingMode">
<layout class="QGridLayout" name="gLayoutRMQREncodingMode">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
@ -333,7 +333,7 @@ and Latin data</string>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="vSpacerRMQR">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>

View File

@ -19,7 +19,22 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayoutUPNQR">
<layout class="QVBoxLayout" name="vLayoutUPNQR">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QGridLayout" name="gridLayoutUPNQR">
<item row="0" column="0">
@ -103,22 +118,6 @@ when automatically selecting a mask</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacerQR">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -19,9 +19,9 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutUltra">
<item>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gLayoutUltra">
<item row="0" column="0">
<widget class="QRadioButton" name="radUltraAuto">
<property name="text">
@ -147,7 +147,7 @@ error correction codewords</string>
<property name="toolTip">
<string>How to process data</string>
</property>
<layout class="QGridLayout" name="gridLayoutUltraEncodingMode">
<layout class="QGridLayout" name="gLayoutUltraEncodingMode">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
@ -187,7 +187,7 @@ formatted with Application Identifiers (AIs)</string>
<string>Ultracode supports Structured Append of up to
8 symbols</string>
</property>
<layout class="QGridLayout" name="gridLayoutUltraStructApp">
<layout class="QGridLayout" name="gLayoutUltraStructApp">
<item row="0" column="0">
<widget class="QLabel" name="lblUltraStructAppCount">
<property name="text">
@ -417,7 +417,7 @@ Value ranges from 1 to 80088
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="vSpacerUltra">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>

View File

@ -19,9 +19,24 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="vLayoutVIN">
<property name="contentMargins">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gLayoutVIN">
<item row="0" column="0">
<widget class="QCheckBox" name="chkVINImportChar">
<property name="text">
@ -38,19 +53,6 @@
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View File

@ -174,11 +174,11 @@
</widget>
</item>
<item>
<widget class="QToolButton" name="btnMoreData">
<property name="minimumSize">
<widget class="QPushButton" name="btnMoreData">
<property name="maximumSize">
<size>
<width>0</width>
<height>26</height>
<width>34</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
@ -191,7 +191,7 @@ or import from file</string>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnClearData">
<widget class="QToolButton" name="btnClearData">
<property name="maximumSize">
<size>
<width>22</width>
@ -464,7 +464,7 @@ or import from file</string>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnZap">
<widget class="QToolButton" name="btnZap">
<property name="maximumSize">
<size>
<width>22</width>
@ -619,7 +619,7 @@ Remember to place [square brackets] around AI identifiers</string>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnClearComposite">
<widget class="QToolButton" name="btnClearComposite">
<property name="enabled">
<bool>false</bool>
</property>
@ -925,11 +925,11 @@ Extended Channel Interpretation (ECI)</string>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnMoreDataSeg1">
<property name="minimumSize">
<widget class="QPushButton" name="btnMoreDataSeg1">
<property name="maximumSize">
<size>
<width>0</width>
<height>26</height>
<width>34</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
@ -942,7 +942,7 @@ or import from file</string>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnClearDataSeg1">
<widget class="QToolButton" name="btnClearDataSeg1">
<property name="maximumSize">
<size>
<width>22</width>
@ -1186,11 +1186,11 @@ or import from file</string>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnMoreDataSeg2">
<property name="minimumSize">
<widget class="QPushButton" name="btnMoreDataSeg2">
<property name="maximumSize">
<size>
<width>0</width>
<height>26</height>
<width>34</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
@ -1203,7 +1203,7 @@ or import from file</string>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnClearDataSeg2">
<widget class="QToolButton" name="btnClearDataSeg2">
<property name="maximumSize">
<size>
<width>22</width>
@ -1447,11 +1447,11 @@ or import from file</string>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnMoreDataSeg3">
<property name="minimumSize">
<widget class="QPushButton" name="btnMoreDataSeg3">
<property name="maximumSize">
<size>
<width>0</width>
<height>26</height>
<width>34</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
@ -1464,7 +1464,7 @@ or import from file</string>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnClearDataSeg3">
<widget class="QToolButton" name="btnClearDataSeg3">
<property name="maximumSize">
<size>
<width>22</width>
@ -1484,6 +1484,39 @@ or import from file</string>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="grpSpecific">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>400</height>
</size>
</property>
<property name="toolTip">
<string>Additional Settings</string>
</property>
<property name="title">
<string>Options</string>
</property>
<layout class="QVBoxLayout" name="vLayoutSpecific">
</layout>
</widget>
</item>
<item>
<spacer name="vSpacerData">
<property name="orientation">
@ -1623,8 +1656,8 @@ as delimiters for GS1 Application Identifiers
<item>
<widget class="QCheckBox" name="chkCompliantHeight">
<property name="toolTip">
<string>Warn if height not compliant with specification
and use standard height (if any) for default
<string>Warn if height specified not compliant with specification,
or use standard height (if any) for default
(ignored if disabled)</string>
</property>
<property name="text">
@ -1903,6 +1936,9 @@ the barcode in X-dimensions</string>
<string>Gap between barcode and text in X-dimensions
(ignored if disabled)</string>
</property>
<property name="specialValueText">
<string>Default</string>
</property>
<property name="prefix">
<string/>
</property>
@ -1924,13 +1960,10 @@ the barcode in X-dimensions</string>
<property name="value">
<double>0.000000000000000</double>
</property>
<property name="specialValueText">
<string>Default</string>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QPushButton" name="btnClearTextGap">
<widget class="QToolButton" name="btnClearTextGap">
<property name="maximumSize">
<size>
<width>22</width>
@ -1989,7 +2022,7 @@ the barcode in X-dimensions</string>
</widget>
</item>
<item row="8" column="2">
<widget class="QPushButton" name="btnScale">
<widget class="QToolButton" name="btnScale">
<property name="maximumSize">
<size>
<width>22</width>
@ -2067,7 +2100,7 @@ or decimal &quot;C,M,Y,K&quot; percentages (0-100)</string>
</widget>
</item>
<item row="0" column="5">
<widget class="QPushButton" name="fgcolor">
<widget class="QToolButton" name="fgcolor">
<property name="maximumSize">
<size>
<width>22</width>
@ -2122,7 +2155,7 @@ e.g. &quot;FFFFFF00&quot;</string>
</widget>
</item>
<item row="1" column="5">
<widget class="QPushButton" name="bgcolor">
<widget class="QToolButton" name="bgcolor">
<property name="maximumSize">
<size>
<width>22</width>
@ -2173,7 +2206,7 @@ e.g. &quot;FFFFFF00&quot;</string>
</widget>
</item>
<item row="2" column="5">
<widget class="QPushButton" name="btnReverse">
<widget class="QToolButton" name="btnReverse">
<property name="maximumSize">
<size>
<width>22</width>

View File

@ -184,22 +184,6 @@ static const struct bstyle_item bstyle_items[] = {
};
#ifdef Q_OS_MACOS
/* Helper to make widgets look ok on macOS */
void MainWindow::mac_hack(QWidget *win)
{
if (!win) {
return;
}
QList<QWidget *> widgets = win->findChildren<QWidget *>();
for (int i = 0, cnt = widgets.size(); i < cnt; i++) {
widgets[i]->setAttribute(Qt::WA_MacNormalSize);
}
QList<QGroupBox *> grps = win->findChildren<QGroupBox *>();
for (int i = 0, cnt = grps.size(); i < cnt; i++) {
// TODO: top of groupbox too near to previous element - how to fix??
grps[i]->setAlignment(Qt::AlignHCenter); // Poor man's workaround for above
}
}
/* Helper to make data tab vertical layouts look ok on macOS */
void MainWindow::mac_hack_vLayouts(QWidget *win)
@ -208,7 +192,7 @@ void MainWindow::mac_hack_vLayouts(QWidget *win)
for (int i = 0, cnt = vlayouts.size(); i < cnt; i++) {
if (vlayouts[i]->objectName() == "vLayoutData" || vlayouts[i]->objectName() == "vLayoutComposite"
|| vlayouts[i]->objectName() == "vLayoutSegs") {
vlayouts[i]->setSpacing(0);
vlayouts[i]->setSpacing(2);
// If set spacing on QVBoxLayout then it seems its QHBoxLayout children inherit this so undo
QList<QHBoxLayout *> hlayouts = vlayouts[i]->findChildren<QHBoxLayout *>();
for (int j = 0, cnt = hlayouts.size(); j < cnt; j++) {
@ -257,7 +241,6 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl)
QVariant saved_geometry = settings.value(QSL("studio/window_geometry"));
#ifdef Q_OS_MACOS
QApplication::setDesktopSettingsAware(false); // Makes group boxes use standard font (may do other stuff)
// Standard width 360 too narrow
if (saved_geometry.isNull()) {
// Seems this is necessary on macOS to get a reasonable initial height
@ -265,7 +248,6 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl)
} else {
setMinimumSize(QSize(460, 0));
}
mac_hack(this);
mac_hack_vLayouts(this);
mac_hack_statusBars(this, "statusBar");
vLayoutTabData->setContentsMargins(QMargins(20, 0, 20, 0));
@ -654,13 +636,13 @@ void MainWindow::reverse_colours()
update_preview();
}
void MainWindow::setColorTxtBtn(const QString &colorStr, QLineEdit *txt, QPushButton* btn) {
void MainWindow::setColorTxtBtn(const QString &colorStr, QLineEdit *txt, QToolButton* btn) {
if (colorStr != txt->text()) {
int cursorPos = txt->cursorPosition();
txt->setText(colorStr);
txt->setCursorPosition(cursorPos);
}
btn->setStyleSheet(QSL("QPushButton {background-color:") + str_to_qcolor(colorStr).name() + QSL(";}"));
btn->setStyleSheet(QSL("QToolButton {background-color:") + str_to_qcolor(colorStr).name() + QSL(";}"));
}
bool MainWindow::save()
@ -1096,7 +1078,7 @@ void MainWindow::on_bgcolor_clicked()
SLOT(bgcolor_changed(const QColor&)));
}
void MainWindow::color_clicked(QString &colorStr, QLineEdit *txt, QPushButton *btn, const QString& title,
void MainWindow::color_clicked(QString &colorStr, QLineEdit *txt, QToolButton *btn, const QString& title,
QByteArray& geometry, const char *color_changed)
{
QString original = colorStr;
@ -1148,7 +1130,7 @@ void MainWindow::bgcolor_edited()
color_edited(m_bgstr, txt_bgcolor, bgcolor);
}
void MainWindow::color_edited(QString &colorStr, QLineEdit *txt, QPushButton *btn)
void MainWindow::color_edited(QString &colorStr, QLineEdit *txt, QToolButton *btn)
{
QString new_str = txt->text().trimmed();
if (new_str.indexOf(colorRE) != 0) {
@ -1694,9 +1676,16 @@ void MainWindow::change_options()
}
statusBar->clearMessage();
if (tabMain->count() == 3)
grpSpecific->hide();
if (m_optionWidget) {
if (tabMain->count() == 3) {
tabMain->removeTab(1);
} else {
vLayoutSpecific->removeWidget(m_optionWidget);
}
delete m_optionWidget;
m_optionWidget = nullptr;
}
chkComposite->setText(tr("Add &2D Component"));
combobox_item_enabled(cmbCompType, 3, false); // CC-C
btype->setItemText(0, tr("No border"));
@ -1837,7 +1826,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("MSI Pless&ey"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("cmbMSICheck")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview()));
connect(get_widget(QSL("cmbMSICheck")), SIGNAL(currentIndexChanged( int )), SLOT(msi_plessey_ui_set()));
connect(get_widget(QSL("chkMSICheckText")), SIGNAL(toggled( bool )), SLOT(update_preview()));
@ -1849,7 +1839,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("Cod&e 11"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("radC11TwoCheckDigits")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radC11OneCheckDigit")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radC11NoCheckDigits")), SIGNAL(toggled( bool )), SLOT(update_preview()));
@ -1861,11 +1852,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
static const QString names[] = {
QSL("Standard"), QSL("Interleaved"), QSL("IATA"), QSL(""), QSL("Data Logic"), QSL("Industrial")
};
/*: %1 is name of variant (Standard, Interleaved, IATA, Data Logic, Industrial) */
tabMain->insertTab(1, m_optionWidget, tr("Cod&e 2 of 5 %1").arg(names[symbology - BARCODE_C25STANDARD]));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("radC25Stand")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radC25Check")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radC25CheckHide")), SIGNAL(toggled( bool )), SLOT(update_preview()));
@ -1878,15 +1866,13 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("radC39Stand")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radC39Check")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radC39CheckHide")), SIGNAL(toggled( bool )), SLOT(update_preview()));
QRadioButton *radC39HIBC = m_optionWidget->findChild<QRadioButton*>(QSL("radC39HIBC"));
if (symbology == BARCODE_EXCODE39 || symbology == BARCODE_LOGMARS) {
if (symbology == BARCODE_EXCODE39) {
tabMain->insertTab(1, m_optionWidget, tr("Cod&e 39 Extended"));
} else {
tabMain->insertTab(1, m_optionWidget, tr("LOGM&ARS"));
}
if (radC39HIBC->isChecked()) {
radC39HIBC->setChecked(false);
m_optionWidget->findChild<QRadioButton*>(QSL("radC39Stand"))->setChecked(true);
@ -1895,7 +1881,6 @@ void MainWindow::change_options()
radC39HIBC->hide();
} else {
connect(get_widget(QSL("radC39HIBC")), SIGNAL(toggled( bool )), SLOT(update_preview()));
tabMain->insertTab(1, m_optionWidget, tr("Cod&e 39"));
radC39HIBC->setEnabled(true);
radC39HIBC->show();
}
@ -1929,7 +1914,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("Cod&abar"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("radCodabarStand")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radCodabarCheckHide")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radCodabarCheck")), SIGNAL(toggled( bool )), SLOT(update_preview()));
@ -1964,8 +1950,9 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("D&AFT"));
set_smaller_font(QSL("noteTrackerRatios"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
set_smaller_font(QSL("noteDAFTTrackerRatios"));
connect(get_widget(QSL("spnDAFTTrackerRatio")), SIGNAL(valueChanged( double )), SLOT(daft_ui_set()));
connect(get_widget(QSL("spnDAFTTrackerRatio")), SIGNAL(valueChanged( double )), SLOT(update_preview()));
connect(get_widget(QSL("btnDAFTTrackerDefault")), SIGNAL(clicked( bool )), SLOT(daft_tracker_default()));
@ -1979,7 +1966,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("DPD Cod&e"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("chkDPDRelabel")), SIGNAL(toggled( bool )), SLOT(update_preview()));
}
@ -2012,8 +2000,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
structapp_ui_set();
tabMain->insertTab(1, m_optionWidget, tr("2D M&ailmark"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("cmbMailmark2DSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview()));
connect(get_widget(QSL("chkMailmark2DRectangle")), SIGNAL(toggled( bool )), SLOT(update_preview()));
}
@ -2025,7 +2013,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("ITF-1&4"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("chkITF14NoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview()));
}
@ -2035,7 +2024,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("PZN"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("chkPZN7")), SIGNAL(toggled( bool )), SLOT(update_preview()));
}
@ -2067,7 +2057,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("UP&NQR"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("cmbUPNQRMask")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview()));
connect(get_widget(QSL("chkUPNQRFast")), SIGNAL(toggled( bool )), SLOT(update_preview()));
}
@ -2161,7 +2152,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("Channel Cod&e"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("cmbChannel")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview()));
} else if (symbology == BARCODE_CODEONE) {
@ -2209,7 +2201,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("Cod&e 93"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("chkC93ShowChecks")), SIGNAL(toggled( bool )), SLOT(update_preview()));
}
@ -2324,7 +2317,8 @@ void MainWindow::change_options()
m_optionWidget = uiload.load(&file);
file.close();
load_sub_settings(settings, symbology);
tabMain->insertTab(1, m_optionWidget, tr("&VIN"));
vLayoutSpecific->addWidget(m_optionWidget);
grpSpecific->show();
connect(get_widget(QSL("chkVINImportChar")), SIGNAL(toggled( bool )), SLOT(update_preview()));
} else {
@ -2332,10 +2326,6 @@ void MainWindow::change_options()
load_sub_settings(settings, symbology);
}
#ifdef Q_OS_MACOS
mac_hack(m_optionWidget);
#endif
switch (symbology) {
case BARCODE_CODE128:
case BARCODE_EANX:
@ -2916,24 +2906,31 @@ void MainWindow::update_preview()
break;
case BARCODE_CODE39:
if (get_rad_val(QSL("radC39HIBC")))
if (get_rad_val(QSL("radC39HIBC"))) {
m_bc.bc.setSymbol(BARCODE_HIBC_39);
else {
} else {
m_bc.bc.setSymbol(BARCODE_CODE39);
if (get_rad_val(QSL("radC39Check")))
if (get_rad_val(QSL("radC39Check"))) {
m_bc.bc.setOption2(1);
} else if (get_rad_val(QSL("radC39CheckHide"))) {
m_bc.bc.setOption2(2);
}
}
break;
case BARCODE_EXCODE39:
m_bc.bc.setSymbol(BARCODE_EXCODE39);
if (get_rad_val(QSL("radC39Check")))
if (get_rad_val(QSL("radC39Check"))) {
m_bc.bc.setOption2(1);
} else if (get_rad_val(QSL("radC39CheckHide"))) {
m_bc.bc.setOption2(2);
}
break;
case BARCODE_LOGMARS:
m_bc.bc.setSymbol(BARCODE_LOGMARS);
if (get_rad_val(QSL("radC39Check"))) {
m_bc.bc.setOption2(1);
} else if (get_rad_val(QSL("radC39CheckHide"))) {
m_bc.bc.setOption2(2);
}
break;
@ -4225,16 +4222,17 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology)
case BARCODE_CODE39:
case BARCODE_HIBC_39:
settings.setValue(QSL("studio/bc/code39/check_digit"), get_rad_grp_index(
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39HIBC")));
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39HIBC")
<< QSL("radC39CheckHide")));
break;
case BARCODE_EXCODE39:
settings.setValue(QSL("studio/bc/excode39/check_digit"), get_rad_grp_index(
QStringList() << QSL("radC39Stand") << QSL("radC39Check")));
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39CheckHide")));
break;
case BARCODE_LOGMARS:
settings.setValue(QSL("studio/bc/logmars/check_digit"), get_rad_grp_index(
QStringList() << QSL("radC39Stand") << QSL("radC39Check")));
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39CheckHide")));
break;
case BARCODE_CODE16K:
@ -4660,16 +4658,17 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology)
case BARCODE_CODE39:
case BARCODE_HIBC_39:
set_rad_from_setting(settings, QSL("studio/bc/code39/check_digit"),
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39HIBC"));
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39HIBC")
<< QSL("radC39CheckHide"));
break;
case BARCODE_EXCODE39:
set_rad_from_setting(settings, QSL("studio/bc/excode39/check_digit"),
QStringList() << QSL("radC39Stand") << QSL("radC39Check"));
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39CheckHide"));
break;
case BARCODE_LOGMARS:
set_rad_from_setting(settings, QSL("studio/bc/logmars/check_digit"),
QStringList() << QSL("radC39Stand") << QSL("radC39Check"));
QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39CheckHide"));
break;
case BARCODE_CODE16K:

View File

@ -28,6 +28,7 @@ class QLabel;
class QShortcut;
class QDoubleSpinBox;
class QPushButton;
class QToolButton;
#include "ui_mainWindow.h"
#include "barcodeitem.h"
@ -45,7 +46,6 @@ public:
static QString get_zint_version(void);
#ifdef Q_OS_MACOS
static void mac_hack(QWidget *win);
static void mac_hack_vLayouts(QWidget *win);
static void mac_hack_statusBars(QWidget *win, const char *name = nullptr);
#endif
@ -136,10 +136,10 @@ protected:
bool clear_data_eci_seg(int seg_no);
void color_clicked(QString &colorStr, QLineEdit *txt, QPushButton *btn, const QString& title,
void color_clicked(QString &colorStr, QLineEdit *txt, QToolButton *btn, const QString& title,
QByteArray& geometry, const char *color_changed);
void color_edited(QString &colorStr, QLineEdit *txt, QPushButton *btn);
void setColorTxtBtn(const QString &colorStr, QLineEdit *txt, QPushButton* btn);
void color_edited(QString &colorStr, QLineEdit *txt, QToolButton *btn);
void setColorTxtBtn(const QString &colorStr, QLineEdit *txt, QToolButton* btn);
virtual void resizeEvent(QResizeEvent *event) override;
virtual bool event(QEvent *event) override;

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder"><path d="M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"/></svg>

After

Width:  |  Height:  |  Size: 351 B

View File

@ -41,6 +41,7 @@
<file>res/copy.svg</file>
<file>res/delete.svg</file>
<file>res/download.svg</file>
<file>res/folder.svg</file>
<file>res/help-circle.svg</file>
<file>res/menu.svg</file>
<file>res/monitor-bg.svg</file>