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

@ -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)
tabMain->removeTab(1);
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: