/*************************************************************************** * Copyright (C) 2008 by BogDan Vatra * * Copyright (C) 2009-2021 by Robin Stuart * * * * 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 * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ /* vim: set ts=4 sw=4 et : */ //#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mainwindow.h" #include "datawindow.h" #include "sequencewindow.h" #include struct bstyle_item { const char *text; int symbology; }; static const struct bstyle_item bstyle_items[] = { { "Australia Post Redirect Code", BARCODE_AUSREDIRECT }, { "Australia Post Reply-Paid", BARCODE_AUSREPLY }, { "Australia Post Routing Code", BARCODE_AUSROUTE }, { "Australia Post Standard Customer", BARCODE_AUSPOST }, { "Aztec Code (ISO 24778) (and HIBC)", BARCODE_AZTEC }, { "Aztec Runes", BARCODE_AZRUNE }, { "Channel Code", BARCODE_CHANNEL }, { "Codabar", BARCODE_CODABAR }, { "Codablock-F (and HIBC)", BARCODE_CODABLOCKF }, { "Code 11", BARCODE_CODE11 }, { "Code 128 (ISO 15417) (and GS1-128 and HIBC)", BARCODE_CODE128 }, { "Code 16k (ISO 12323)", BARCODE_CODE16K }, { "Code 2 of 5 Data Logic", BARCODE_C25LOGIC }, { "Code 2 of 5 IATA", BARCODE_C25IATA }, { "Code 2 of 5 Industrial", BARCODE_C25IND }, { "Code 2 of 5 Interleaved (ISO 16390)", BARCODE_C25INTER }, { "Code 2 of 5 Standard (Matrix)", BARCODE_C25STANDARD }, { "Code 32 (Italian Pharmacode)", BARCODE_CODE32 }, { "Code 39 (ISO 16388) (and HIBC)", BARCODE_CODE39 }, { "Code 39 Extended", BARCODE_EXCODE39 }, { "Code 49", BARCODE_CODE49 }, { "Code 93", BARCODE_CODE93 }, { "Code One", BARCODE_CODEONE }, { "DAFT Code", BARCODE_DAFT }, { "Data Matrix (ISO 16022) (and HIBC)", BARCODE_DATAMATRIX }, { "Deutsche Post Identcode", BARCODE_DPIDENT }, { "Deutsche Post Leitcode", BARCODE_DPLEIT }, { "DotCode", BARCODE_DOTCODE }, { "DPD Code", BARCODE_DPD }, { "Dutch Post KIX", BARCODE_KIX }, { "EAN-14", BARCODE_EAN14 }, { "European Article Number (EAN)", BARCODE_EANX }, { "Facing Identification Mark (FIM)", BARCODE_FIM }, { "Flattermarken", BARCODE_FLAT }, { "Grid Matrix", BARCODE_GRIDMATRIX }, { "GS1 DataBar Expanded", BARCODE_DBAR_EXP }, { "GS1 DataBar Expanded Stacked", BARCODE_DBAR_EXPSTK }, { "GS1 DataBar Limited", BARCODE_DBAR_LTD }, { "GS1 DataBar Omnidirectional (and Truncated)", BARCODE_DBAR_OMN }, { "GS1 DataBar Stacked", BARCODE_DBAR_STK }, { "GS1 DataBar Stacked Omnidirectional", BARCODE_DBAR_OMNSTK }, { "Han Xin (Chinese Sensible) Code", BARCODE_HANXIN }, { "International Standard Book Number (ISBN)", BARCODE_ISBNX }, { "ITF-14", BARCODE_ITF14 }, { "Japanese Postal Barcode", BARCODE_JAPANPOST }, { "Korean Postal Barcode", BARCODE_KOREAPOST }, { "LOGMARS", BARCODE_LOGMARS }, { "MaxiCode (ISO 16023)", BARCODE_MAXICODE }, { "MicroPDF417 (ISO 24728) (and HIBC)", BARCODE_MICROPDF417 }, { "Micro QR Code", BARCODE_MICROQR }, { "MSI Plessey", BARCODE_MSI_PLESSEY }, { "NVE-18 (SSCC-18)", BARCODE_NVE18 }, { "PDF417 (ISO 15438) (and Compact and HIBC)", BARCODE_PDF417 }, { "Pharmacode", BARCODE_PHARMA }, { "Pharmacode 2-track", BARCODE_PHARMA_TWO }, { "Pharma Zentralnummer (PZN)", BARCODE_PZN }, { "PLANET", BARCODE_PLANET }, { "POSTNET", BARCODE_POSTNET }, { "QR Code (ISO 18004) (and HIBC)", BARCODE_QRCODE }, { "Rectangular Micro QR (rMQR)", BARCODE_RMQR }, { "Royal Mail 4-state Barcode", BARCODE_RM4SCC }, { "Royal Mail 4-state Mailmark", BARCODE_MAILMARK }, { "Telepen", BARCODE_TELEPEN }, { "Telepen Numeric", BARCODE_TELEPEN_NUM }, { "UK Plessey", BARCODE_PLESSEY }, { "Ultracode", BARCODE_ULTRA }, { "Universal Product Code (UPC-A)", BARCODE_UPCA }, { "Universal Product Code (UPC-E)", BARCODE_UPCE }, { "UPNQR", BARCODE_UPNQR }, { "USPS Intelligent Mail (OneCode)", BARCODE_USPS_IMAIL }, { "VIN (Vehicle Identification Number)", BARCODE_VIN }, }; MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl), m_optionWidget(nullptr), m_symbology(0) { m_bc.bc.setDebug(QCoreApplication::arguments().contains("--verbose")); // Undocumented command line debug flag QCoreApplication::setOrganizationName("zint"); QCoreApplication::setOrganizationDomain("zint.org.uk"); QCoreApplication::setApplicationName("Barcode Studio"); QSettings settings; #if QT_VERSION < 0x60000 settings.setIniCodec("UTF-8"); #endif scene = new QGraphicsScene(this); setupUi(this); view->setMinimumHeight(20); view->setScene(scene); restoreGeometry(settings.value("studio/window_geometry").toByteArray()); m_fgcolor.setRgb(settings.value("studio/ink/red", 0).toInt(), settings.value("studio/ink/green", 0).toInt(), settings.value("studio/ink/blue", 0).toInt(), settings.value("studio/ink/alpha", 0xff).toInt()); m_bgcolor.setRgb(settings.value("studio/paper/red", 0xff).toInt(), settings.value("studio/paper/green", 0xff).toInt(), settings.value("studio/paper/blue", 0xff).toInt(), settings.value("studio/paper/alpha", 0xff).toInt()); int cnt = (int) (sizeof(bstyle_items) / sizeof(bstyle_items[0])); for (int i = 0; i < cnt; i++) { bstyle->addItem(bstyle_items[i].text); } #ifdef _WIN32 bstyle->setMaxVisibleItems(cnt); /* Apart from increasing combo size, seems to be needed for filter to work */ #endif #if QT_VERSION < 0x50A00 /* Prior to Qt 5.10 comboboxes have display issues when filtered (scrollers not accounted for), so disable */ filter_bstyle->hide(); #endif bstyle->setCurrentIndex(settings.value("studio/symbology", 10).toInt()); txtData->setText(settings.value("studio/data", tr("Your Data Here!")).toString()); txtComposite->setText(settings.value("studio/composite_text", tr("Your Data Here!")).toString()); chkComposite->setChecked(settings.value("studio/chk_composite").toInt() ? true : false); cmbCompType->setCurrentIndex(settings.value("studio/comp_type", 0).toInt()); cmbECI->setCurrentIndex(settings.value("studio/appearance/eci", 0).toInt()); chkEscape->setChecked(settings.value("studio/chk_escape").toInt() ? true : false); chkData->setChecked(settings.value("studio/chk_data").toInt() ? true : false); chkRInit->setChecked(settings.value("studio/chk_rinit").toInt() ? true : false); chkGS1Parens->setChecked(settings.value("studio/chk_gs1parens").toInt() ? true : false); chkGS1NoCheck->setChecked(settings.value("studio/chk_gs1nocheck").toInt() ? true : false); chkAutoHeight->setChecked(settings.value("studio/appearance/autoheight", 1).toInt() ? true : false); heightb->setValue(settings.value("studio/appearance/height", 50.0f).toFloat()); bwidth->setValue(settings.value("studio/appearance/border", 0).toInt()); spnWhitespace->setValue(settings.value("studio/appearance/whitespace", 0).toInt()); spnVWhitespace->setValue(settings.value("studio/appearance/vwhitespace", 0).toInt()); spnScale->setValue(settings.value("studio/appearance/scale", 1.0).toFloat()); btype->setCurrentIndex(settings.value("studio/appearance/border_type", 0).toInt()); cmbFontSetting->setCurrentIndex(settings.value("studio/appearance/font_setting", 0).toInt()); chkHRTShow->setChecked(settings.value("studio/appearance/chk_hrt_show", 1).toInt() ? true : false); chkCMYK->setChecked(settings.value("studio/appearance/cmyk", 0).toInt() ? true : false); cmbRotate->setCurrentIndex(settings.value("studio/appearance/rotate", 0).toInt()); chkDotty->setChecked(settings.value("studio/appearance/dotty", 0).toInt() ? true : false); spnDotSize->setValue(settings.value("studio/appearance/dot_size", 4.0 / 5.0).toFloat()); change_options(); scene->addItem(&m_bc); update_preview(); connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(change_options())); connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(filter_bstyle, SIGNAL(textChanged( const QString& )), SLOT(filter_symbologies())); connect(heightb, SIGNAL(valueChanged( double )), SLOT(update_preview())); connect(bwidth, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(btype, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(cmbFontSetting, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(txtData, SIGNAL(textChanged( const QString& )), SLOT(update_preview())); connect(txtComposite, SIGNAL(textChanged()), SLOT(update_preview())); connect(chkComposite, SIGNAL(stateChanged( int )), SLOT(composite_ui_set())); connect(chkComposite, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(cmbCompType, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(cmbECI, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(chkEscape, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkData, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkRInit, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkGS1Parens, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkGS1NoCheck, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(spnWhitespace, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(spnVWhitespace, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(btnAbout, SIGNAL(clicked( bool )), SLOT(about())); connect(btnSave, SIGNAL(clicked( bool )), SLOT(save())); connect(spnScale, SIGNAL(valueChanged( double )), SLOT(change_print_scale())); connect(btnExit, SIGNAL(clicked( bool )), SLOT(quit_now())); connect(btnReset, SIGNAL(clicked( bool )), SLOT(reset_view())); connect(btnMoreData, SIGNAL(clicked( bool )), SLOT(open_data_dialog())); connect(btnSequence, SIGNAL(clicked( bool )), SLOT(open_sequence_dialog())); connect(chkAutoHeight, SIGNAL(stateChanged( int )), SLOT(autoheight_ui_set())); connect(chkAutoHeight, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkHRTShow, SIGNAL(stateChanged( int )), SLOT(HRTShow_ui_set())); connect(chkHRTShow, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkCMYK, SIGNAL(stateChanged( int )), SLOT(change_cmyk())); connect(cmbRotate, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(chkDotty, SIGNAL(stateChanged( int )), SLOT(dotty_ui_set())); connect(chkDotty, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(spnDotSize, SIGNAL(valueChanged( double )), SLOT(update_preview())); connect(btnCopySVG, SIGNAL(clicked( bool )), SLOT(copy_to_clipboard_svg())); connect(btnCopyBMP, SIGNAL(clicked( bool )), SLOT(copy_to_clipboard_bmp())); connect(&m_bc.bc, SIGNAL(encoded()), SLOT(on_encoded())); QShortcut *ctrl_q = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q), this); connect(ctrl_q, SIGNAL(activated()), SLOT(quit_now())); } MainWindow::~MainWindow() { QSettings settings; #if QT_VERSION < 0x60000 settings.setIniCodec("UTF-8"); #endif settings.setValue("studio/window_geometry", saveGeometry()); settings.setValue("studio/tab_index", tabMain->currentIndex()); settings.setValue("studio/symbology", bstyle->currentIndex()); settings.setValue("studio/ink/red", m_fgcolor.red()); settings.setValue("studio/ink/green", m_fgcolor.green()); settings.setValue("studio/ink/blue", m_fgcolor.blue()); settings.setValue("studio/ink/alpha", m_fgcolor.alpha()); settings.setValue("studio/paper/red", m_bgcolor.red()); settings.setValue("studio/paper/green", m_bgcolor.green()); settings.setValue("studio/paper/blue", m_bgcolor.blue()); settings.setValue("studio/paper/alpha", m_bgcolor.alpha()); settings.setValue("studio/data", txtData->text()); settings.setValue("studio/composite_text", txtComposite->toPlainText()); settings.setValue("studio/chk_composite", chkComposite->isChecked() ? 1 : 0); settings.setValue("studio/comp_type", cmbCompType->currentIndex()); settings.setValue("studio/eci", cmbECI->currentIndex()); settings.setValue("studio/chk_escape", chkEscape->isChecked() ? 1 : 0); settings.setValue("studio/chk_data", chkData->isChecked() ? 1 : 0); settings.setValue("studio/chk_rinit", chkRInit->isChecked() ? 1 : 0); settings.setValue("studio/chk_gs1parens", chkGS1Parens->isChecked() ? 1 : 0); settings.setValue("studio/chk_gs1nocheck", chkGS1NoCheck->isChecked() ? 1 : 0); settings.setValue("studio/appearance/autoheight", chkAutoHeight->isChecked() ? 1 : 0); settings.setValue("studio/appearance/height", heightb->value()); settings.setValue("studio/appearance/border", bwidth->value()); settings.setValue("studio/appearance/whitespace", spnWhitespace->value()); settings.setValue("studio/appearance/vwhitespace", spnVWhitespace->value()); settings.setValue("studio/appearance/scale", spnScale->value()); settings.setValue("studio/appearance/border_type", btype->currentIndex()); settings.setValue("studio/appearance/font_setting", cmbFontSetting->currentIndex()); settings.setValue("studio/appearance/chk_hrt_show", chkHRTShow->isChecked() ? 1 : 0); settings.setValue("studio/appearance/chk_cmyk", chkCMYK->isChecked() ? 1 : 0); settings.setValue("studio/appearance/rotate", cmbRotate->currentIndex()); settings.setValue("studio/appearance/chk_dotty", chkDotty->isChecked() ? 1 : 0); settings.setValue("studio/appearance/dot_size", spnDotSize->value()); save_sub_settings(settings, m_bc.bc.symbol()); } void MainWindow::resizeEvent(QResizeEvent* event) { QWidget::resizeEvent(event); update_preview(); } void MainWindow::reset_view() { m_fgcolor.setRgb(0, 0, 0, 0xff); m_bgcolor.setRgb(0xff, 0xff, 0xff, 0xff); update_preview(); } bool MainWindow::save() { QSettings settings; #if QT_VERSION < 0x60000 settings.setIniCodec("UTF-8"); #endif QFileDialog save_dialog; QString filename; QString suffix; save_dialog.setAcceptMode(QFileDialog::AcceptSave); save_dialog.setWindowTitle(tr("Save Barcode Image")); save_dialog.setDirectory(settings.value("studio/default_dir", QDir::toNativeSeparators(QDir::homePath())).toString()); #ifdef NO_PNG suffix = settings.value("studio/default_suffix", "gif").toString(); save_dialog.setNameFilter(tr("Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif);;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx);;Enhanced Metafile (*.emf);;Tagged Image File Format (*.tif)")); #else suffix = settings.value("studio/default_suffix", "png").toString(); save_dialog.setNameFilter(tr("Portable Network Graphic (*.png);;Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif);;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx);;Enhanced Metafile (*.emf);;Tagged Image File Format (*.tif)")); #endif if (QString::compare(suffix, "png", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("Portable Network Graphic (*.png)")); if (QString::compare(suffix, "eps", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("Encapsulated PostScript (*.eps)")); if (QString::compare(suffix, "gif", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("Graphics Interchange Format (*.gif)")); if (QString::compare(suffix, "svg", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("Scalable Vector Graphic (*.svg)")); if (QString::compare(suffix, "bmp", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("Windows Bitmap (*.bmp)")); if (QString::compare(suffix, "pcx", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("ZSoft PC Painter Image (*.pcx)")); if (QString::compare(suffix, "emf", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("Enhanced Metafile (*.emf)")); if (QString::compare(suffix, "tif", Qt::CaseInsensitive) == 0) save_dialog.selectNameFilter(tr("Tagged Image File Format (*.tif)")); if (save_dialog.exec()) { filename = save_dialog.selectedFiles().at(0); if ((filename.lastIndexOf(".") == -1) || (filename.lastIndexOf(".") < (filename.length() - 5))) { suffix = save_dialog.selectedNameFilter(); suffix = suffix.mid((suffix.lastIndexOf(".") + 1), 3); filename.append("."); filename.append(suffix); } else { suffix = filename.right(filename.length() - (filename.lastIndexOf('.') + 1)); } } else { return false; } if (m_bc.bc.save_to_file(filename) == false) { if (m_bc.bc.getError() >= ZINT_ERROR) { QMessageBox::critical(this, tr("Save Error"), m_bc.bc.error_message()); return false; } else { QMessageBox::warning(this, tr("Save Warning"), m_bc.bc.error_message()); return true; } } settings.setValue("studio/default_dir", filename.mid(0, filename.lastIndexOf(QDir::separator()))); settings.setValue("studio/default_suffix", suffix); return true; } void MainWindow::about() { QString zint_version; int lib_version = ZBarcode_Version(); int version_major = lib_version / 10000; int version_minor = (lib_version % 10000) / 100; int version_release = lib_version % 100; int version_build; if (version_release >= 9) { /* This is a test release */ version_release = version_release / 10; version_build = lib_version % 10; QTextStream(&zint_version) << version_major << "." << version_minor << "." << version_release << "." << version_build << " (dev)"; } else { /* This is a stable release */ QTextStream(&zint_version) << version_major << "." << version_minor << "." << version_release; } QMessageBox::about(this, tr("About Zint"), /*: %1 is Zint version, %2 is Qt version */ tr("

Zint Barcode Studio %1

" "

A free barcode generator

" "

Instruction manual is available at the project homepage:
" "http://www.zint.org.uk" "

Copyright © 2006-2021 Robin Stuart and others.
" "Qt backend by BogDan Vatra

" "

Qt version %2

" "

With thanks to Harald Oehlmann, Norbert Szabó, Robert Elliott, Milton Neal, " "Git Lost, Alonso Schaich, Andre Maute and many others at Sourceforge.

" "

Released under the GNU General Public License ver. 3 or later.
" "\"QR Code\" is a Registered Trademark of Denso Corp.
" "\"Telepen\" is a Registered Trademark of SB Electronics.

" "

Currently supported standards include:
" "BS 797:1996, BS 798:1996, ISO/IEC 12323:2005, ISO/IEC 15417:2007,
" "ISO/IEC 15438:2015, ISO/IEC 16022:2006, ISO/IEC 16023:2000,
" "ISO/IEC 16388:2007, ISO/IEC 18004:2015, ISO/IEC 24723:2010,
" "ISO/IEC 24724:2011, ISO/IEC 24728:2006, ISO/IEC 24778:2008,
" "ISO/IEC 21471:2019, ANSI-HIBC 2.6-2016, ANSI/AIM BC6-2000,
" "ANSI/AIM BC12-1998, AIMD014 (v 1.63), USPS-B-3200" "

").arg(zint_version).arg(QT_VERSION_STR)); } int MainWindow::open_data_dialog() { int retval; DataWindow dlg(txtData->text()); retval = dlg.exec(); if (dlg.Valid == 1) txtData->setText(dlg.DataOutput); return retval; } int MainWindow::open_sequence_dialog() { SequenceWindow dlg; dlg.barcode = &m_bc; return dlg.exec(); } void MainWindow::on_fgcolor_clicked() { QColor temp = m_fgcolor; m_fgcolor = QColorDialog::getColor(m_fgcolor, this, tr("Set foreground colour"), QColorDialog::ShowAlphaChannel); if (m_fgcolor.isValid()) { update_preview(); } else { m_fgcolor = temp; } } void MainWindow::on_bgcolor_clicked() { QColor temp = m_bgcolor; m_bgcolor = QColorDialog::getColor(m_bgcolor, this, tr("Set background colour"), QColorDialog::ShowAlphaChannel); if (m_bgcolor.isValid()) { update_preview(); } else { m_bgcolor = temp; } } void MainWindow::autoheight_ui_set() { if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { lblHeight->setEnabled(false); heightb->setEnabled(false); } else { lblHeight->setEnabled(true); heightb->setEnabled(true); } } void MainWindow::HRTShow_ui_set() { if (chkHRTShow->isEnabled() && chkHRTShow->isChecked()) { lblFontSetting->setEnabled(true); cmbFontSetting->setEnabled(true); } else { lblFontSetting->setEnabled(false); cmbFontSetting->setEnabled(false); } } void MainWindow::dotty_ui_set() { int symbology = bstyle_items[bstyle->currentIndex()].symbology; if (symbology == BARCODE_DOTCODE) { chkDotty->setEnabled(false); lblDotSize->setEnabled(true); spnDotSize->setEnabled(true); } else { if (chkDotty->isEnabled() && chkDotty->isChecked()) { lblDotSize->setEnabled(true); spnDotSize->setEnabled(true); } else { lblDotSize->setEnabled(false); spnDotSize->setEnabled(false); } } } void MainWindow::on_encoded() { if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { /* setValue() rounds up/down to precision (decimals 3), we want round up only */ float height = (float) (ceil(m_bc.bc.height() * 1000.0f) / 1000.0f); heightb->setValue(height); } } void MainWindow::filter_symbologies() { QString filter = filter_bstyle->text().simplified(); /* `simplified()` trims and reduces inner whitespace to a single space - nice! */ QListView *lview = qobject_cast(bstyle->view()); QStandardItemModel *model = qobject_cast(bstyle->model()); QStandardItem *item; if (!lview || !model) { return; } /* QString::split() only introduced Qt 5.14, so too new for us to use */ QStringList filter_list; if (!filter.isEmpty()) { int i, j; for (i = 0; (j = filter.indexOf(" ", i)) != -1; i = j + 1) { filter_list << filter.mid(i, j - i); } filter_list << filter.mid(i); } int filter_cnt = filter_list.size(); int cnt = (int) (sizeof(bstyle_items) / sizeof(bstyle_items[0])); if (filter_cnt) { for (int i = 0; i < cnt; i++) { bool hidden = lview->isRowHidden(i); bool hide = true; for (int j = 0; j < filter_cnt; j++) { if (bstyle->itemText(i).contains(filter_list[j], Qt::CaseInsensitive)) { hide = false; break; } } if ((hide && !hidden) || (!hide && hidden)) { // https://stackoverflow.com/questions/25172220/how-to-hide-qcombobox-items-instead-of-clearing-them-out item = model->item(i); item->setFlags(hide ? item->flags() & ~Qt::ItemIsEnabled : item->flags() | Qt::ItemIsEnabled); lview->setRowHidden(i, hide); } } } else { for (int i = 0; i < cnt; i++) { if (lview->isRowHidden(i)) { item = model->item(i); item->setFlags(item->flags() | Qt::ItemIsEnabled); lview->setRowHidden(i, false); } } } } void MainWindow::change_print_scale() { /* This value is only used when printing (saving) to file */ m_bc.bc.setScale((float)spnScale->value()); } void MainWindow::change_cmyk() { /* This value is only used when printing (saving) to file */ m_bc.bc.setCMYK(chkCMYK->isChecked()); } void MainWindow::quit_now() { close(); } void MainWindow::copy_to_clipboard_svg() { QClipboard *clipboard = QGuiApplication::clipboard(); QString filename = ".zint.svg"; double scale = spnScale->value(); spnScale->setValue(5); if (!m_bc.bc.save_to_file(filename)) { spnScale->setValue(scale); return; } QMimeData *mdata = new QMimeData; mdata->setImageData(QImage(filename)); clipboard->setMimeData(mdata, QClipboard::Clipboard); QFile::remove(filename); spnScale->setValue(scale); } void MainWindow::copy_to_clipboard_bmp() { QClipboard *clipboard = QGuiApplication::clipboard(); QString filename = ".zint.bmp"; if (!m_bc.bc.save_to_file(filename)) { return; } QMimeData *mdata = new QMimeData; mdata->setImageData(QImage(filename)); clipboard->setMimeData(mdata, QClipboard::Clipboard); QFile::remove(filename); } void MainWindow::change_options() { QUiLoader uiload; QSettings settings; #if QT_VERSION < 0x60000 settings.setIniCodec("UTF-8"); #endif bool initial_load = m_symbology == 0; int original_tab_count = tabMain->count(); int original_tab_index = tabMain->currentIndex(); int symbology = bstyle_items[bstyle->currentIndex()].symbology; if (m_symbology) { save_sub_settings(settings, m_symbology); } if (tabMain->count() == 3) tabMain->removeTab(1); chkComposite->setText(tr("Add &2D Component")); combobox_item_enabled(cmbCompType, 3, false); // CC-C cmbECI->setItemText(25, tr("29: GB 2312 (PRC)")); btype->setItemText(0, tr("No border")); combobox_item_enabled(cmbFontSetting, 1, true); if (symbology == BARCODE_CODE128) { QFile file(":/grpC128.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 128")); chkComposite->setText(tr("Add &2D Component (GS1-128 only)")); combobox_item_enabled(cmbCompType, 3, true); // CC-C set_smaller_font(m_optionWidget->findChild("noteC128CompositeEAN")); connect(m_optionWidget->findChild("radC128EAN"), SIGNAL(toggled( bool )), SLOT(composite_ean_check())); connect(m_optionWidget->findChild("radC128Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC128CSup"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC128EAN"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC128HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_PDF417) { QFile file(":/grpPDF417.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("PDF41&7")); connect(m_optionWidget->findChild("cmbPDFECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbPDFCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radPDFTruncated"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radPDFStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radPDFHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_MICROPDF417) { QFile file(":/grpMicroPDF.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Micro PDF41&7")); connect(m_optionWidget->findChild("cmbMPDFCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radMPDFStand"), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_DOTCODE) { QFile file(":/grpDotCode.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("DotCod&e")); connect(m_optionWidget->findChild("cmbDotCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbDotMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDotStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDotGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_AZTEC) { QFile file(":/grpAztec.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Aztec Cod&e")); connect(m_optionWidget->findChild("radAztecAuto"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radAztecSize"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radAztecECC"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbAztecSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbAztecECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radAztecStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radAztecGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radAztecHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_MSI_PLESSEY) { QFile file(":/grpMSICheck.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("MSI Pless&ey")); connect(m_optionWidget->findChild("cmbMSICheck"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbMSICheck"), SIGNAL(currentIndexChanged( int )), SLOT(msi_plessey_ui_set())); connect(m_optionWidget->findChild("chkMSICheckText"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE11) { QFile file(":/grpC11.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 11")); connect(m_optionWidget->findChild("radC11TwoCheckDigits"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC11OneCheckDigit"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC11NoCheckDigits"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_C25STANDARD || symbology == BARCODE_C25INTER || symbology == BARCODE_C25IATA || symbology == BARCODE_C25LOGIC || symbology == BARCODE_C25IND) { QFile file(":/grpC25.ui"); if (file.open(QIODevice::ReadOnly)) { m_optionWidget = uiload.load(&file); file.close(); static const char *names[] = { "Standard (Matrix)", "Interleaved", "IATA", "", "Data Logic", "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])); connect(m_optionWidget->findChild("radC25Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC25Check"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC25CheckHide"), SIGNAL(clicked( bool )), SLOT(update_preview())); } } else if (symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39) { QFile file(":/grpC39.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); connect(m_optionWidget->findChild("radC39Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC39Check"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC39HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); if (symbology == BARCODE_EXCODE39) { tabMain->insertTab(1, m_optionWidget, tr("Cod&e 39 Extended")); if (m_optionWidget->findChild("radC39HIBC")->isChecked()) { m_optionWidget->findChild("radC39HIBC")->setChecked(false); m_optionWidget->findChild("radC39Stand")->setChecked(true); } m_optionWidget->findChild("radC39HIBC")->setEnabled(false); } else { tabMain->insertTab(1, m_optionWidget, tr("Cod&e 39")); m_optionWidget->findChild("radC39HIBC")->setEnabled(true); } } else if (symbology == BARCODE_LOGMARS) { QFile file(":/grpLOGMARS.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("LOGM&ARS")); connect(m_optionWidget->findChild("radLOGMARSStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radLOGMARSCheck"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE16K) { QFile file(":/grpC16k.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 16K")); btype->setItemText(0, tr("Default (bind)")); connect(m_optionWidget->findChild("cmbC16kRowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC16kStand"), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODABAR) { QFile file(":/grpCodabar.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Cod&abar")); connect(m_optionWidget->findChild("chkCodabarCheck"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODABLOCKF) { QFile file (":/grpCodablockF.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Codablock&-F")); btype->setItemText(0, tr("Default (bind)")); connect(m_optionWidget->findChild("cmbCbfWidth"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbCbfHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbCbfRowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radCbfStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radCbfHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_DAFT) { QFile file(":/grpDAFT.ui"); if (file.open(QIODevice::ReadOnly)) { m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("DAFT")); set_smaller_font(m_optionWidget->findChild("noteTrackerRatios")); connect(m_optionWidget->findChild("spnDAFTTrackerRatio"), SIGNAL(valueChanged( double )), SLOT(update_preview())); } } else if (symbology == BARCODE_DATAMATRIX) { QFile file(":/grpDM.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("D&ata Matrix")); connect(m_optionWidget->findChild("radDM200Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDM200GS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radDM200HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbDM200Size"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkDMRectangle"), SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkDMRE"), SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkDMGSSep"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_ITF14) { btype->setItemText(0, tr("Default (box, non-zero width)")); } else if (symbology == BARCODE_QRCODE) { QFile file(":/grpQR.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("QR Cod&e")); connect(m_optionWidget->findChild("cmbQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbQRMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radQRGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radQRHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_RMQR) { QFile file(":/grpRMQR.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("rMQR Cod&e")); connect(m_optionWidget->findChild("cmbRMQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbRMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radRMQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radRMQRGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkRMQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_HANXIN) { QFile file(":/grpHX.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Han Xin Cod&e")); cmbECI->setItemText(25, tr("29: GB 18030 (PRC)")); connect(m_optionWidget->findChild("cmbHXSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbHXECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbHXMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkHXFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_MICROQR) { QFile file(":/grpMQR.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Micro QR Cod&e")); connect(m_optionWidget->findChild("cmbMQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbMQRMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkMQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_GRIDMATRIX) { QFile file(":/grpGrid.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Grid M&atrix")); set_smaller_font(m_optionWidget->findChild("noteGridECC")); connect(m_optionWidget->findChild("cmbGridSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbGridECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkGridFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_MAXICODE) { QFile file(":/grpMaxicode.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("MaxiCod&e")); connect(m_optionWidget->findChild("cmbMaxiMode"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbMaxiMode"), SIGNAL(currentIndexChanged( int )), SLOT(maxi_scm())); connect(m_optionWidget->findChild("txtMaxiSCMPostcode"), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); connect(m_optionWidget->findChild("spnMaxiSCMCountry"), SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("spnMaxiSCMService"), SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkMaxiSCMVV"), SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("chkMaxiSCMVV"), SIGNAL(stateChanged( int )), SLOT(maxi_scm())); connect(m_optionWidget->findChild("spnMaxiSCMVV"), SIGNAL(valueChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_CHANNEL) { QFile file(":/grpChannel.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Channel Cod&e")); connect(m_optionWidget->findChild("cmbChannel"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_CODEONE) { QFile file(":/grpCodeOne.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Code On&e")); connect(m_optionWidget->findChild("cmbC1Size"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC1GS1"), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE49) { QFile file(":/grpC49.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 49")); btype->setItemText(0, tr("Default (bind)")); connect(m_optionWidget->findChild("cmbC49RowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC49GS1"), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE93) { QFile file(":/grpC93.ui"); if (file.open(QIODevice::ReadOnly)) { m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 93")); connect(m_optionWidget->findChild("chkC93ShowChecks"), SIGNAL(clicked( bool )), SLOT(update_preview())); } } else if (symbology == BARCODE_DBAR_EXPSTK) { QFile file(":/grpDBExtend.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("GS1 DataBar Stack&ed")); connect(m_optionWidget->findChild("cmbCols"), SIGNAL(currentIndexChanged ( int )), SLOT(update_preview())); } else if (symbology == BARCODE_ULTRA) { QFile file(":/grpUltra.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("Ultracod&e")); connect(m_optionWidget->findChild("radUltraAuto"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radUltraEcc"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("cmbUltraEcc"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radUltraStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radUltraGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_UPCA || symbology == BARCODE_UPCA_CHK || symbology == BARCODE_UPCA_CC) { QFile file(":/grpUPCA.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("UPC-&A")); combobox_item_enabled(cmbFontSetting, 1, false); if (cmbFontSetting->currentIndex() == 1) { cmbFontSetting->setCurrentIndex(0); } connect(m_optionWidget->findChild("cmbUPCAAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_EANX || symbology == BARCODE_EANX_CHK || symbology == BARCODE_EANX_CC || symbology == BARCODE_UPCE || symbology == BARCODE_UPCE_CHK || symbology == BARCODE_UPCE_CC || symbology == BARCODE_ISBNX) { QFile file(":/grpUPCEAN.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); if (symbology == BARCODE_UPCE || symbology == BARCODE_UPCE_CHK || symbology == BARCODE_UPCE_CC) { tabMain->insertTab(1, m_optionWidget, tr("UPC-&E")); } else if (symbology == BARCODE_ISBNX) { tabMain->insertTab(1, m_optionWidget, tr("ISBN")); } else { tabMain->insertTab(1, m_optionWidget, tr("&EAN")); } combobox_item_enabled(cmbFontSetting, 1, false); if (cmbFontSetting->currentIndex() == 1) { cmbFontSetting->setCurrentIndex(0); } connect(m_optionWidget->findChild("cmbUPCEANAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_VIN) { QFile file(":/grpVIN.ui"); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); tabMain->insertTab(1, m_optionWidget, tr("&VIN")); connect(m_optionWidget->findChild("chkVINImportChar"), SIGNAL(clicked( bool )), SLOT(update_preview())); } switch (symbology) { case BARCODE_CODE128: case BARCODE_EANX: case BARCODE_UPCA: case BARCODE_UPCE: case BARCODE_DBAR_OMN: case BARCODE_DBAR_LTD: case BARCODE_DBAR_EXP: case BARCODE_DBAR_STK: case BARCODE_DBAR_OMNSTK: case BARCODE_DBAR_EXPSTK: grpComposite->show(); break; default: grpComposite->hide(); break; } cmbECI->setEnabled(m_bc.bc.supportsECI(symbology)); /* Will need checking again in update_preview() as encoding mode dependent (HIBC) */ chkGS1Parens->setEnabled(m_bc.bc.supportsGS1(symbology)); /* Ditto (GS1) */ chkGS1NoCheck->setEnabled(m_bc.bc.supportsGS1(symbology)); /* Ditto (GS1) */ chkRInit->setEnabled(m_bc.bc.supportsReaderInit(symbology)); /* Ditto (HIBC and GS1) */ chkAutoHeight->setEnabled(!m_bc.bc.isFixedRatio(symbology)); chkHRTShow->setEnabled(m_bc.bc.hasHRT(symbology)); chkDotty->setEnabled(m_bc.bc.isDotty(symbology)); load_sub_settings(settings, symbology); composite_ui_set(); autoheight_ui_set(); HRTShow_ui_set(); dotty_ui_set(); if (initial_load) { tabMain->setCurrentIndex(settings.value("studio/tab_index", 0).toInt()); } else if (original_tab_count == tabMain->count()) { tabMain->setCurrentIndex(original_tab_index); } else if (original_tab_count > tabMain->count()) { tabMain->setCurrentIndex(original_tab_index == 2 ? 1 : 0); } else { tabMain->setCurrentIndex(original_tab_index == 1 ? 2 : 0); } } void MainWindow::composite_ui_set() { if (!grpComposite->isHidden() && chkComposite->isChecked()) { lblCompType->setEnabled(true); cmbCompType->setEnabled(true); lblComposite->setEnabled(true); txtComposite->setEnabled(true); if (bstyle_items[bstyle->currentIndex()].symbology == BARCODE_CODE128) { QRadioButton *radioButton = m_optionWidget->findChild("radC128EAN"); if (radioButton) { radioButton->setChecked(true); } } } else { lblCompType->setEnabled(false); cmbCompType->setEnabled(false); lblComposite->setEnabled(false); txtComposite->setEnabled(false); } } void MainWindow::composite_ean_check() { if (bstyle_items[bstyle->currentIndex()].symbology != BARCODE_CODE128) return; QRadioButton *radioButton = m_optionWidget->findChild("radC128EAN"); if (radioButton && !radioButton->isChecked()) chkComposite->setChecked(false); } void MainWindow::maxi_scm() { if (bstyle_items[bstyle->currentIndex()].symbology != BARCODE_MAXICODE) return; QCheckBox *chkMaxiSCMVV = m_optionWidget->findChild("chkMaxiSCMVV"); bool isMode2or3 = m_optionWidget->findChild("cmbMaxiMode")->currentIndex() == 0; m_optionWidget->findChild("lblMaxiSCMPostcode")->setEnabled(isMode2or3); m_optionWidget->findChild("txtMaxiSCMPostcode")->setEnabled(isMode2or3); m_optionWidget->findChild("lblMaxiSCMCountry")->setEnabled(isMode2or3); m_optionWidget->findChild("spnMaxiSCMCountry")->setEnabled(isMode2or3); m_optionWidget->findChild("lblMaxiSCMService")->setEnabled(isMode2or3); m_optionWidget->findChild("spnMaxiSCMService")->setEnabled(isMode2or3); chkMaxiSCMVV->setEnabled(isMode2or3); m_optionWidget->findChild("lblMaxiSCMVV")->setEnabled(isMode2or3 && chkMaxiSCMVV->isChecked()); m_optionWidget->findChild("spnMaxiSCMVV")->setEnabled(isMode2or3 && chkMaxiSCMVV->isChecked()); } void MainWindow::msi_plessey_ui_set() { if (bstyle_items[bstyle->currentIndex()].symbology != BARCODE_MSI_PLESSEY) return; QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild("chkMSICheckText") : nullptr; if (checkBox) { checkBox->setEnabled(get_combobox_index("cmbMSICheck") > 0); } } // Taken from https://stackoverflow.com/questions/38915001/disable-specific-items-in-qcombobox void MainWindow::combobox_item_enabled(QComboBox *comboBox, int index, bool enabled) { QStandardItemModel *model = qobject_cast(comboBox->model()); if (model) { QStandardItem *item = model->item(index); if (item) { item->setEnabled(enabled); } } } void MainWindow::upcean_addon_gap(QComboBox *comboBox, QLabel *label, int base) { const QRegularExpression addonRE("^[0-9X]+[+][0-9]+$"); int item_val; if (txtData->text().contains(addonRE)) { comboBox->setEnabled(true); label->setEnabled(true); item_val = comboBox->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val + base); } } else { comboBox->setEnabled(false); label->setEnabled(false); } } void MainWindow::set_gs1_mode(bool gs1_mode) { if (gs1_mode) { m_bc.bc.setInputMode(GS1_MODE | (m_bc.bc.inputMode() & ~0x07)); // Keep upper bits chkData->setEnabled(false); } else { chkData->setEnabled(true); } } void MainWindow::set_smaller_font(QLabel *label) { if (label) { const QFont &appFont = QApplication::font(); qreal pointSize = appFont.pointSizeF(); if (pointSize != -1.0) { QFont font = label->font(); pointSize *= 0.9; font.setPointSizeF(pointSize); label->setFont(font); } else { int pixelSize = appFont.pixelSize(); if (pixelSize > 1) { QFont font = label->font(); font.setPixelSize(pixelSize - 1); label->setFont(font); } } } } void MainWindow::update_preview() { int symbology = bstyle_items[bstyle->currentIndex()].symbology; int recheck_eci = true; int width = view->geometry().width(); int height = view->geometry().height(); int item_val; QCheckBox *checkBox; if (!grpComposite->isHidden() && chkComposite->isChecked()) { m_bc.bc.setPrimaryMessage(txtData->text()); m_bc.bc.setText(txtComposite->toPlainText()); } else { m_bc.bc.setText(txtData->text()); } m_bc.bc.setOption1(-1); m_bc.bc.setOption2(0); m_bc.bc.setOption3(0); chkData->setEnabled(true); if (chkData->isChecked()) { m_bc.bc.setInputMode(DATA_MODE); } else { m_bc.bc.setInputMode(UNICODE_MODE); } if (chkEscape->isChecked()) { m_bc.bc.setInputMode(m_bc.bc.inputMode() | ESCAPE_MODE); } m_bc.bc.setGSSep(false); m_bc.bc.setDotSize(0.4f / 0.5f); switch (symbology) { case BARCODE_CODE128: if(m_optionWidget->findChild("radC128Stand")->isChecked()) m_bc.bc.setSymbol(BARCODE_CODE128); if(m_optionWidget->findChild("radC128CSup")->isChecked()) m_bc.bc.setSymbol(BARCODE_CODE128B); if(m_optionWidget->findChild("radC128EAN")->isChecked()) { if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_GS1_128_CC); else m_bc.bc.setSymbol(BARCODE_GS1_128); } if(m_optionWidget->findChild("radC128HIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_128); break; case BARCODE_EANX: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_EANX_CC); else m_bc.bc.setSymbol(BARCODE_EANX); upcean_addon_gap(m_optionWidget->findChild("cmbUPCEANAddonGap"), m_optionWidget->findChild("lblUPCEANAddonGap"), 7 /*base*/); break; case BARCODE_ISBNX: m_bc.bc.setSymbol(symbology); upcean_addon_gap(m_optionWidget->findChild("cmbUPCEANAddonGap"), m_optionWidget->findChild("lblUPCEANAddonGap"), 7 /*base*/); break; case BARCODE_UPCA: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_UPCA_CC); else m_bc.bc.setSymbol(BARCODE_UPCA); upcean_addon_gap(m_optionWidget->findChild("cmbUPCAAddonGap"), m_optionWidget->findChild("lblUPCAAddonGap"), 9 /*base*/); break; case BARCODE_UPCE: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_UPCE_CC); else m_bc.bc.setSymbol(BARCODE_UPCE); upcean_addon_gap(m_optionWidget->findChild("cmbUPCEANAddonGap"), m_optionWidget->findChild("lblUPCEANAddonGap"), 7 /*base*/); break; case BARCODE_DBAR_OMN: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_DBAR_OMN_CC); else m_bc.bc.setSymbol(BARCODE_DBAR_OMN); break; case BARCODE_DBAR_LTD: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_DBAR_LTD_CC); else m_bc.bc.setSymbol(BARCODE_DBAR_LTD); break; case BARCODE_DBAR_EXP: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_DBAR_EXP_CC); else m_bc.bc.setSymbol(BARCODE_DBAR_EXP); break; case BARCODE_DBAR_STK: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_DBAR_STK_CC); else m_bc.bc.setSymbol(BARCODE_DBAR_STK); break; case BARCODE_DBAR_OMNSTK: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_DBAR_OMNSTK_CC); else m_bc.bc.setSymbol(BARCODE_DBAR_OMNSTK); break; case BARCODE_DBAR_EXPSTK: if(chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_DBAR_EXPSTK_CC); else m_bc.bc.setSymbol(BARCODE_DBAR_EXPSTK); if(m_optionWidget->findChild("cmbCols")->currentIndex() != 0) m_bc.bc.setOption2(m_optionWidget->findChild("cmbCols")->currentIndex()); break; case BARCODE_PDF417: m_bc.bc.setOption2(m_optionWidget->findChild("cmbPDFCols")->currentIndex()); m_bc.bc.setOption1(m_optionWidget->findChild("cmbPDFECC")->currentIndex() - 1); if (m_optionWidget->findChild("radPDFTruncated")->isChecked()) m_bc.bc.setSymbol(BARCODE_PDF417COMP); else if (m_optionWidget->findChild("radPDFHIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_PDF); else m_bc.bc.setSymbol(BARCODE_PDF417); break; case BARCODE_MICROPDF417: m_bc.bc.setOption2(m_optionWidget->findChild("cmbMPDFCols")->currentIndex()); if (m_optionWidget->findChild("radMPDFHIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_MICPDF); else m_bc.bc.setSymbol(BARCODE_MICROPDF417); break; case BARCODE_DOTCODE: m_bc.bc.setSymbol(BARCODE_DOTCODE); item_val = m_optionWidget->findChild("cmbDotCols")->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val + 4); // Cols 1-4 not listed } item_val = m_optionWidget->findChild("cmbDotMask")->currentIndex(); if (item_val) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } set_gs1_mode(m_optionWidget->findChild("radDotGS1")->isChecked()); break; case BARCODE_AZTEC: m_bc.bc.setSymbol(BARCODE_AZTEC); if(m_optionWidget->findChild("radAztecSize")->isChecked()) m_bc.bc.setOption2(m_optionWidget->findChild("cmbAztecSize")->currentIndex() + 1); if(m_optionWidget->findChild("radAztecECC")->isChecked()) m_bc.bc.setOption1(m_optionWidget->findChild("cmbAztecECC")->currentIndex() + 1); set_gs1_mode(m_optionWidget->findChild("radAztecGS1")->isChecked()); if(m_optionWidget->findChild("radAztecHIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_AZTEC); break; case BARCODE_MSI_PLESSEY: m_bc.bc.setSymbol(BARCODE_MSI_PLESSEY); item_val = get_combobox_index("cmbMSICheck"); if (item_val && m_optionWidget->findChild("chkMSICheckText")->isChecked()) { item_val += 10; } m_bc.bc.setOption2(item_val); break; case BARCODE_CODE11: m_bc.bc.setSymbol(BARCODE_CODE11); if (m_optionWidget->findChild("radC11OneCheckDigit")->isChecked()) { m_bc.bc.setOption2(1); } else if (m_optionWidget->findChild("radC11NoCheckDigits")->isChecked()) { m_bc.bc.setOption2(2); } break; case BARCODE_C25STANDARD: case BARCODE_C25INTER: case BARCODE_C25IATA: case BARCODE_C25LOGIC: case BARCODE_C25IND: m_bc.bc.setSymbol(symbology); m_bc.bc.setOption2(get_button_group_index(QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); break; case BARCODE_CODE39: if(m_optionWidget->findChild("radC39HIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_39); else { m_bc.bc.setSymbol(BARCODE_CODE39); if(m_optionWidget->findChild("radC39Check")->isChecked()) m_bc.bc.setOption2(1); } break; case BARCODE_EXCODE39: m_bc.bc.setSymbol(BARCODE_EXCODE39); if(m_optionWidget->findChild("radC39Check")->isChecked()) m_bc.bc.setOption2(1); break; case BARCODE_LOGMARS: m_bc.bc.setSymbol(BARCODE_LOGMARS); if (m_optionWidget->findChild("radLOGMARSCheck")->isChecked()) { m_bc.bc.setOption2(1); } break; case BARCODE_CODE16K: m_bc.bc.setSymbol(BARCODE_CODE16K); set_gs1_mode(m_optionWidget->findChild("radC16kGS1")->isChecked()); // Row separator height selection uses option 3 in zint_symbol item_val = m_optionWidget->findChild("cmbC16kRowSepHeight")->currentIndex(); if (item_val) { m_bc.bc.setOption3(item_val + 1); // Zero-based } break; case BARCODE_CODABAR: m_bc.bc.setSymbol(BARCODE_CODABAR); if (m_optionWidget->findChild("chkCodabarCheck")->isChecked()) { m_bc.bc.setOption2(1); } break; case BARCODE_CODABLOCKF: if (m_optionWidget->findChild("radCbfHIBC")->isChecked()) { m_bc.bc.setSymbol(BARCODE_HIBC_BLOCKF); } else { m_bc.bc.setSymbol(BARCODE_CODABLOCKF); } item_val = m_optionWidget->findChild("cmbCbfWidth")->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val - 1 + 9); } // Height selection uses option 1 in zint_symbol item_val = m_optionWidget->findChild("cmbCbfHeight")->currentIndex(); if (item_val) { m_bc.bc.setOption1(item_val); } // Row separator height selection uses option 3 in zint_symbol item_val = m_optionWidget->findChild("cmbCbfRowSepHeight")->currentIndex(); if (item_val) { m_bc.bc.setOption3(item_val + 1); // Zero-based } break; case BARCODE_DAFT: m_bc.bc.setSymbol(BARCODE_DAFT); m_bc.bc.setOption2((int) (get_doublespinbox_val("spnDAFTTrackerRatio") * 10)); // Kept as percentage, convert to thousandths break; case BARCODE_DATAMATRIX: if(m_optionWidget->findChild("radDM200HIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_DM); else m_bc.bc.setSymbol(BARCODE_DATAMATRIX); if (m_optionWidget->findChild("radDM200GS1")->isChecked()) { set_gs1_mode(true); checkBox = m_optionWidget->findChild("chkDMGSSep"); checkBox->setEnabled(true); if (checkBox->isChecked()) { m_bc.bc.setGSSep(true); } } else { set_gs1_mode(false); m_optionWidget->findChild("chkDMGSSep")->setEnabled(false); } m_bc.bc.setOption2(m_optionWidget->findChild("cmbDM200Size")->currentIndex()); if (m_optionWidget->findChild("cmbDM200Size")->currentIndex() == 0) { // Supressing rectangles or allowing DMRE only makes sense if in automatic size mode findChild("chkDMRectangle")->setEnabled(true); findChild("chkDMRE")->setEnabled(true); if(m_optionWidget->findChild("chkDMRectangle")->isChecked()) m_bc.bc.setOption3(DM_SQUARE); else { if(m_optionWidget->findChild("chkDMRE")->isChecked()) m_bc.bc.setOption3(DM_DMRE); else m_bc.bc.setOption3(0); } } else { findChild("chkDMRectangle")->setEnabled(false); findChild("chkDMRE")->setEnabled(false); m_bc.bc.setOption3(0); } break; case BARCODE_QRCODE: if(m_optionWidget->findChild("radQRHIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_QR); else m_bc.bc.setSymbol(BARCODE_QRCODE); set_gs1_mode(m_optionWidget->findChild("radQRGS1")->isChecked()); item_val = m_optionWidget->findChild("cmbQRSize")->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val); } item_val = m_optionWidget->findChild("cmbQRECC")->currentIndex(); if (item_val) { m_bc.bc.setOption1(item_val); } item_val = m_optionWidget->findChild("cmbQRMask")->currentIndex(); if (item_val) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } if (m_optionWidget->findChild("chkQRFullMultibyte")->isChecked()) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE | m_bc.bc.option3()); } break; case BARCODE_MICROQR: m_bc.bc.setSymbol(BARCODE_MICROQR); item_val = m_optionWidget->findChild("cmbMQRSize")->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val); } item_val = m_optionWidget->findChild("cmbMQRECC")->currentIndex(); if (item_val) { m_bc.bc.setOption1(item_val); } item_val = m_optionWidget->findChild("cmbMQRMask")->currentIndex(); if (item_val) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } if (m_optionWidget->findChild("chkMQRFullMultibyte")->isChecked()) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE | m_bc.bc.option3()); } break; case BARCODE_RMQR: m_bc.bc.setSymbol(BARCODE_RMQR); set_gs1_mode(m_optionWidget->findChild("radRMQRGS1")->isChecked()); item_val = m_optionWidget->findChild("cmbRMQRSize")->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val); } item_val = m_optionWidget->findChild("cmbRMQRECC")->currentIndex(); if (item_val) { m_bc.bc.setOption1(item_val * 2); // Levels 2 (M) and 4 (H) only } if (m_optionWidget->findChild("chkRMQRFullMultibyte")->isChecked()) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); } break; case BARCODE_GRIDMATRIX: m_bc.bc.setSymbol(BARCODE_GRIDMATRIX); item_val = m_optionWidget->findChild("cmbGridSize")->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val); } item_val = m_optionWidget->findChild("cmbGridECC")->currentIndex(); if (item_val) { m_bc.bc.setOption1(item_val); } if (m_optionWidget->findChild("chkGridFullMultibyte")->isChecked()) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); } break; case BARCODE_MAXICODE: m_bc.bc.setSymbol(BARCODE_MAXICODE); if (m_optionWidget->findChild("cmbMaxiMode")->currentIndex() == 0) { m_bc.bc.setOption1(0); /* Auto-determine mode 2 or 3 from primary message (checks that it isn't empty) */ m_bc.bc.setPrimaryMessage(QString::asprintf("%s%03d%03d", get_lineedit_val("txtMaxiSCMPostcode").toUtf8().constData(), get_spinbox_val("spnMaxiSCMCountry"), get_spinbox_val("spnMaxiSCMService"))); QCheckBox *chkMaxiSCMVV = m_optionWidget->findChild("chkMaxiSCMVV"); if (chkMaxiSCMVV->isEnabled() && chkMaxiSCMVV->isChecked()) { m_bc.bc.setOption2(m_optionWidget->findChild("spnMaxiSCMVV")->value() + 1); } } else { m_bc.bc.setOption1(m_optionWidget->findChild("cmbMaxiMode")->currentIndex() + 3); } break; case BARCODE_CHANNEL: m_bc.bc.setSymbol(BARCODE_CHANNEL); if(m_optionWidget->findChild("cmbChannel")->currentIndex() == 0) m_bc.bc.setOption2(0); else m_bc.bc.setOption2(m_optionWidget->findChild("cmbChannel")->currentIndex() + 2); break; case BARCODE_CODEONE: m_bc.bc.setSymbol(BARCODE_CODEONE); m_bc.bc.setOption2(m_optionWidget->findChild("cmbC1Size")->currentIndex()); if (m_bc.bc.option2() == 9) { // Version S recheck_eci = false; cmbECI->setEnabled(false); lblECI->setEnabled(false); m_optionWidget->findChild("radC1GS1")->setEnabled(false); } else { m_optionWidget->findChild("radC1GS1")->setEnabled(true); set_gs1_mode(m_optionWidget->findChild("radC1GS1")->isChecked()); } break; case BARCODE_CODE49: m_bc.bc.setSymbol(BARCODE_CODE49); set_gs1_mode(m_optionWidget->findChild("radC49GS1")->isChecked()); // Row separator height selection uses option 3 in zint_symbol item_val = m_optionWidget->findChild("cmbC49RowSepHeight")->currentIndex(); if (item_val) { m_bc.bc.setOption3(item_val + 1); // Zero-based } break; case BARCODE_CODE93: m_bc.bc.setSymbol(BARCODE_CODE93); if (get_checkbox_val("chkC93ShowChecks")) { m_bc.bc.setOption2(1); } break; case BARCODE_HANXIN: m_bc.bc.setSymbol(BARCODE_HANXIN); item_val = m_optionWidget->findChild("cmbHXSize")->currentIndex(); if (item_val) { m_bc.bc.setOption2(item_val); } item_val = m_optionWidget->findChild("cmbHXECC")->currentIndex(); if (item_val) { m_bc.bc.setOption1(item_val); } item_val = m_optionWidget->findChild("cmbHXMask")->currentIndex(); if (item_val) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } if (m_optionWidget->findChild("chkHXFullMultibyte")->isChecked()) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE | m_bc.bc.option3()); } break; case BARCODE_ULTRA: m_bc.bc.setSymbol(BARCODE_ULTRA); if(m_optionWidget->findChild("radUltraEcc")->isChecked()) m_bc.bc.setOption1(m_optionWidget->findChild("cmbUltraEcc")->currentIndex() + 1); set_gs1_mode(m_optionWidget->findChild("radUltraGS1")->isChecked()); break; case BARCODE_VIN: m_bc.bc.setSymbol(BARCODE_VIN); if (m_optionWidget->findChild("chkVINImportChar")->isChecked()) { m_bc.bc.setOption2(m_bc.bc.option2() | 1); // Import character 'I' prefix } break; default: m_bc.bc.setSymbol(symbology); break; } m_symbology = m_bc.bc.symbol(); /* Recheck ECI and Reader Init */ if (recheck_eci) { cmbECI->setEnabled(m_bc.bc.supportsECI()); lblECI->setEnabled(cmbECI->isEnabled()); } chkGS1Parens->setEnabled(m_bc.bc.supportsGS1()); chkGS1NoCheck->setEnabled(m_bc.bc.supportsGS1()); chkRInit->setEnabled(m_bc.bc.supportsReaderInit() && (m_bc.bc.inputMode() & 0x07) != GS1_MODE); if (!grpComposite->isHidden() && chkComposite->isChecked()) m_bc.bc.setOption1(cmbCompType->currentIndex()); if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { m_bc.bc.setHeight(0); } else { m_bc.bc.setHeight(heightb->value()); } m_bc.bc.setECI(cmbECI->isEnabled() ? cmbECI->currentIndex() : 0); m_bc.bc.setGS1Parens(chkGS1Parens->isEnabled() && chkGS1Parens->isChecked()); m_bc.bc.setGS1NoCheck(chkGS1NoCheck->isEnabled() && chkGS1NoCheck->isChecked()); m_bc.bc.setReaderInit(chkRInit->isEnabled() && chkRInit->isChecked()); m_bc.bc.setShowText(chkHRTShow->isEnabled() && chkHRTShow->isChecked()); m_bc.bc.setBorderType(btype->currentIndex()); m_bc.bc.setBorderWidth(bwidth->value()); m_bc.bc.setWhitespace(spnWhitespace->value()); m_bc.bc.setVWhitespace(spnVWhitespace->value()); m_bc.bc.setFontSetting(cmbFontSetting->currentIndex()); m_bc.bc.setRotateAngle(cmbRotate->currentIndex()); m_bc.bc.setDotty(chkDotty->isEnabled() && chkDotty->isChecked()); if (m_symbology == BARCODE_DOTCODE || (chkDotty->isEnabled() && chkDotty->isChecked())) { m_bc.bc.setDotSize(spnDotSize->value()); } m_bc.bc.setFgColor(m_fgcolor); m_bc.bc.setBgColor(m_bgcolor); change_print_scale(); change_cmyk(); m_bc.setSize(width - 10, height - 10); m_bc.update(); scene->setSceneRect(m_bc.boundingRect()); scene->update(); } /* Return settings subsection name for a symbol */ const char *MainWindow::get_setting_name(int symbology) { struct item { const char *name; int define; int val; }; static const struct item ndata[] = { { "", -1, 0 }, { "code11", BARCODE_CODE11, 1 }, { "c25standard", BARCODE_C25STANDARD, 2 }, { "c25inter", BARCODE_C25INTER, 3 }, { "c25iata", BARCODE_C25IATA, 4 }, { "", -1, 5 }, { "c25logic", BARCODE_C25LOGIC, 6 }, { "c25ind", BARCODE_C25IND, 7 }, { "code39", BARCODE_CODE39, 8 }, { "excode39", BARCODE_EXCODE39, 9 }, { "", -1, 10 }, { "", -1, 11 }, { "", -1, 12 }, { "eanx", BARCODE_EANX, 13 }, { "eanx", BARCODE_EANX_CHK, 14 }, { "", -1, 15 }, { "code128", BARCODE_GS1_128, 16 }, { "", -1, 17 }, { "codabar", BARCODE_CODABAR, 18 }, { "", -1, 19 }, { "code128", BARCODE_CODE128, 20 }, { "dpleit", BARCODE_DPLEIT, 21 }, { "dpident", BARCODE_DPIDENT, 22 }, { "code16k", BARCODE_CODE16K, 23 }, { "code49", BARCODE_CODE49, 24 }, { "code93", BARCODE_CODE93, 25 }, { "", -1, 26 }, { "", -1, 27 }, { "flat", BARCODE_FLAT, 28 }, { "dbar_omn", BARCODE_DBAR_OMN, 29 }, { "dbar_ltd", BARCODE_DBAR_LTD, 30 }, { "dbar_exp", BARCODE_DBAR_EXP, 31 }, { "telepen", BARCODE_TELEPEN, 32 }, { "", -1, 33 }, { "upca", BARCODE_UPCA, 34 }, { "upca", BARCODE_UPCA_CHK, 35 }, { "", -1, 36 }, { "upce", BARCODE_UPCE, 37 }, { "upce", BARCODE_UPCE_CHK, 38 }, { "", -1, 39 }, { "postnet", BARCODE_POSTNET, 40 }, { "", -1, 41 }, { "", -1, 42 }, { "", -1, 43 }, { "", -1, 44 }, { "", -1, 45 }, { "", -1, 46 }, { "msi_plessey", BARCODE_MSI_PLESSEY, 47 }, { "", -1, 48 }, { "fim", BARCODE_FIM, 49 }, { "logmars", BARCODE_LOGMARS, 50 }, { "pharma", BARCODE_PHARMA, 51 }, { "pzn", BARCODE_PZN, 52 }, { "pharma_two", BARCODE_PHARMA_TWO, 53 }, { "", -1, 54 }, { "pdf417", BARCODE_PDF417, 55 }, { "pdf417", BARCODE_PDF417COMP, 56 }, { "maxicode", BARCODE_MAXICODE, 57 }, { "qrcode", BARCODE_QRCODE, 58 }, { "", -1, 59 }, { "code128", BARCODE_CODE128B, 60 }, { "", -1, 61 }, { "", -1, 62 }, { "auspost", BARCODE_AUSPOST, 63 }, { "", -1, 64 }, { "", -1, 65 }, { "ausreply", BARCODE_AUSREPLY, 66 }, { "ausroute", BARCODE_AUSROUTE, 67 }, { "ausredirect", BARCODE_AUSREDIRECT, 68 }, { "isbnx", BARCODE_ISBNX, 69 }, { "rm4scc", BARCODE_RM4SCC, 70 }, { "datamatrix", BARCODE_DATAMATRIX, 71 }, { "ean14", BARCODE_EAN14, 72 }, { "vin", BARCODE_VIN, 73 }, { "codablockf", BARCODE_CODABLOCKF, 74 }, { "nve18", BARCODE_NVE18, 75 }, { "japanpost", BARCODE_JAPANPOST, 76 }, { "koreapost", BARCODE_KOREAPOST, 77 }, { "", -1, 78 }, { "dbar_stk", BARCODE_DBAR_STK, 79 }, { "dbar_omnstk", BARCODE_DBAR_OMNSTK, 80 }, { "dbar_expstk", BARCODE_DBAR_EXPSTK, 81 }, { "planet", BARCODE_PLANET, 82 }, { "", -1, 83 }, { "micropdf417", BARCODE_MICROPDF417, 84 }, { "usps_imail", BARCODE_USPS_IMAIL, 85 }, { "plessey", BARCODE_PLESSEY, 86 }, { "telepen_num", BARCODE_TELEPEN_NUM, 87 }, { "", -1, 88 }, { "itf14", BARCODE_ITF14, 89 }, { "kix", BARCODE_KIX, 90 }, { "", -1, 91 }, { "aztec", BARCODE_AZTEC, 92 }, { "daft", BARCODE_DAFT, 93 }, { "", -1, 94 }, { "", -1, 95 }, { "dpd", BARCODE_DPD, 96 }, { "microqr", BARCODE_MICROQR, 97 }, { "code128", BARCODE_HIBC_128, 98 }, { "code39", BARCODE_HIBC_39, 99 }, { "", -1, 100 }, { "", -1, 101 }, { "datamatrix", BARCODE_HIBC_DM, 102 }, { "", -1, 103 }, { "qrcode", BARCODE_HIBC_QR, 104 }, { "", -1, 105 }, { "pdf417", BARCODE_HIBC_PDF, 106 }, { "", -1, 107 }, { "micropdf417", BARCODE_HIBC_MICPDF, 108 }, { "", -1, 109 }, { "codablockf", BARCODE_HIBC_BLOCKF, 110 }, { "", -1, 111 }, { "aztec", BARCODE_HIBC_AZTEC, 112 }, { "", -1, 113 }, { "", -1, 114 }, { "dotcode", BARCODE_DOTCODE, 115 }, { "hanxin", BARCODE_HANXIN, 116 }, { "", -1, 117 }, { "", -1, 118 }, { "", -1, 119 }, { "", -1, 120 }, { "mailmark", BARCODE_MAILMARK, 121 }, { "", -1, 122 }, { "", -1, 123 }, { "", -1, 124 }, { "", -1, 125 }, { "", -1, 126 }, { "", -1, 127 }, { "azrune", BARCODE_AZRUNE, 128 }, { "code32", BARCODE_CODE32, 129 }, { "eanx", BARCODE_EANX_CC, 130 }, { "code128", BARCODE_GS1_128_CC, 131 }, { "dbar_omn", BARCODE_DBAR_OMN_CC, 132 }, { "dbar_ltd", BARCODE_DBAR_LTD_CC, 133 }, { "dbar_exp", BARCODE_DBAR_EXP_CC, 134 }, { "upca", BARCODE_UPCA_CC, 135 }, { "upce", BARCODE_UPCE_CC, 136 }, { "dbar_stk", BARCODE_DBAR_STK_CC, 137 }, { "dbar_omnstk", BARCODE_DBAR_OMNSTK_CC, 138 }, { "dbar_expstk", BARCODE_DBAR_EXPSTK_CC, 139 }, { "channel", BARCODE_CHANNEL, 140 }, { "codeone", BARCODE_CODEONE, 141 }, { "gridmatrix", BARCODE_GRIDMATRIX, 142 }, { "upnqr", BARCODE_UPNQR, 143 }, { "ultra", BARCODE_ULTRA, 144 }, { "rmqr", BARCODE_RMQR, 145 }, }; static const int data_size = sizeof(ndata) / sizeof(struct item); if (symbology < 0 || symbology >= data_size) { return ""; } if (ndata[symbology].val != symbology || (ndata[symbology].define != -1 && ndata[symbology].define != symbology)) { // Self-check fprintf(stderr, "MainWindow::get_setting_name: ndata table out of sync (%d)\n", symbology); return ""; } return ndata[symbology].name; } /* Helper to return index of selected radio button in group, checking for NULL */ int MainWindow::get_button_group_index(const QStringList &children) { if (m_optionWidget) { QRadioButton *radioButton; for (int index = 0; index < children.size(); index++) { radioButton = m_optionWidget->findChild(children[index]); if (radioButton && radioButton->isChecked()) { return index; } } } return 0; } /* Helper to set radio button in group from index in settings, checking for NULL */ void MainWindow::set_radiobutton_from_setting(QSettings &settings, const QString &setting, const QStringList &children, int default_val) { if (m_optionWidget) { int index = settings.value(setting, default_val).toInt(); QRadioButton *radioButton; if (index >= 0 && index < children.size()) { radioButton = m_optionWidget->findChild(children[index]); } else { radioButton = m_optionWidget->findChild(children[0]); } if (radioButton) { radioButton->setChecked(true); } } } /* Helper to return index of selected item in combobox, checking for NULL */ int MainWindow::get_combobox_index(const QString &child) { QComboBox *comboBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; return comboBox ? comboBox->currentIndex() : 0; } /* Helper to set item in combobox from index in settings, checking for NULL */ void MainWindow::set_combobox_from_setting(QSettings &settings, const QString &setting, const QString &child, int default_val) { QComboBox *comboBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; if (comboBox) { comboBox->setCurrentIndex(settings.value(setting, default_val).toInt()); } } /* Helper to return if checkbox checked, checking for NULL */ int MainWindow::get_checkbox_val(const QString &child) { QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; return checkBox && checkBox->isChecked() ? 1 : 0; } /* Helper to set checkbox from settings, checking for NULL */ void MainWindow::set_checkbox_from_setting(QSettings &settings, const QString &setting, const QString &child, int default_val) { QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; if (checkBox) { checkBox->setChecked(settings.value(setting, default_val).toInt() ? true : false); } } /* Helper to return value of double spinner, checking for NULL */ double MainWindow::get_doublespinbox_val(const QString &child) { QDoubleSpinBox *spinBox = m_optionWidget->findChild(child); return spinBox ? spinBox->value() : 0.0; } /* Helper to set double spinner from settings, checking for NULL */ void MainWindow::set_doublespinbox_from_setting(QSettings &settings, const QString &setting, const QString &child, float default_val) { QDoubleSpinBox *spinBox = m_optionWidget->findChild(child); if (spinBox) { spinBox->setValue(settings.value(setting, default_val).toFloat()); } } /* Helper to return text of line edit, checking for NULL */ QString MainWindow::get_lineedit_val(const QString &child) { QLineEdit *lineEdit = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; return lineEdit ? lineEdit->text() : ""; } /* Helper to set line edit from settings, checking for NULL */ void MainWindow::set_lineedit_from_setting(QSettings &settings, const QString &setting, const QString &child, const char *default_val) { QLineEdit *lineEdit = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; if (lineEdit) { lineEdit->setText(settings.value(setting, default_val).toString()); } } /* Helper to return value of spin box, checking for NULL */ int MainWindow::get_spinbox_val(const QString &child) { QSpinBox *spinBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; return spinBox ? spinBox->value() : 0; } /* Helper to set spin box from settings, checking for NULL */ void MainWindow::set_spinbox_from_setting(QSettings &settings, const QString &setting, const QString &child, int default_val) { QSpinBox *spinBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; if (spinBox) { spinBox->setValue(settings.value(setting, default_val).toInt()); } } /* Save settings for an individual symbol */ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { const char *name = get_setting_name(symbology); if (*name) { settings.setValue(QString("studio/bc/%1/data").arg(name), txtData->text()); if (!grpComposite->isHidden()) { settings.setValue(QString("studio/bc/%1/composite_text").arg(name), txtComposite->toPlainText()); settings.setValue(QString("studio/bc/%1/chk_composite").arg(name), chkComposite->isChecked() ? 1 : 0); settings.setValue(QString("studio/bc/%1/comp_type").arg(name), cmbCompType->currentIndex()); } if (cmbECI->isEnabled()) { settings.setValue(QString("studio/bc/%1/eci").arg(name), cmbECI->currentIndex()); } settings.setValue(QString("studio/bc/%1/chk_escape").arg(name), chkEscape->isChecked() ? 1 : 0); settings.setValue(QString("studio/bc/%1/chk_data").arg(name), chkData->isChecked() ? 1 : 0); if (chkRInit->isEnabled()) { settings.setValue(QString("studio/bc/%1/chk_rinit").arg(name), chkRInit->isChecked() ? 1 : 0); } settings.setValue(QString("studio/bc/%1/chk_gs1parens").arg(name), chkGS1Parens->isChecked() ? 1 : 0); settings.setValue(QString("studio/bc/%1/chk_gs1nocheck").arg(name), chkGS1NoCheck->isChecked() ? 1 : 0); if (chkAutoHeight->isEnabled()) { settings.setValue(QString("studio/bc/%1/appearance/autoheight").arg(name), chkAutoHeight->isChecked() ? 1 : 0); settings.setValue(QString("studio/bc/%1/appearance/height").arg(name), heightb->value()); } settings.setValue(QString("studio/bc/%1/appearance/border").arg(name), bwidth->value()); settings.setValue(QString("studio/bc/%1/appearance/whitespace").arg(name), spnWhitespace->value()); settings.setValue(QString("studio/bc/%1/appearance/vwhitespace").arg(name), spnVWhitespace->value()); settings.setValue(QString("studio/bc/%1/appearance/scale").arg(name), spnScale->value()); settings.setValue(QString("studio/bc/%1/appearance/border_type").arg(name), btype->currentIndex()); if (chkHRTShow->isEnabled()) { settings.setValue(QString("studio/bc/%1/appearance/font_setting").arg(name), cmbFontSetting->currentIndex()); settings.setValue(QString("studio/bc/%1/appearance/chk_hrt_show").arg(name), chkHRTShow->isChecked() ? 1 : 0); } settings.setValue(QString("studio/bc/%1/appearance/cmyk").arg(name), chkCMYK->isChecked() ? 1 : 0); settings.setValue(QString("studio/bc/%1/appearance/rotate").arg(name), cmbRotate->currentIndex()); if (symbology == BARCODE_DOTCODE || chkDotty->isEnabled()) { settings.setValue(QString("studio/bc/%1/appearance/chk_dotty").arg(name), chkDotty->isChecked() ? 1 : 0); settings.setValue(QString("studio/bc/%1/appearance/dot_size").arg(name), spnDotSize->value()); } settings.setValue(QString("studio/bc/%1/ink/red").arg(name), m_fgcolor.red()); settings.setValue(QString("studio/bc/%1/ink/green").arg(name), m_fgcolor.green()); settings.setValue(QString("studio/bc/%1/ink/blue").arg(name), m_fgcolor.blue()); settings.setValue(QString("studio/bc/%1/ink/alpha").arg(name), m_fgcolor.alpha()); settings.setValue(QString("studio/bc/%1/paper/red").arg(name), m_bgcolor.red()); settings.setValue(QString("studio/bc/%1/paper/green").arg(name), m_bgcolor.green()); settings.setValue(QString("studio/bc/%1/paper/blue").arg(name), m_bgcolor.blue()); settings.setValue(QString("studio/bc/%1/paper/alpha").arg(name), m_bgcolor.alpha()); } switch (symbology) { case BARCODE_CODE128: case BARCODE_CODE128B: case BARCODE_GS1_128: case BARCODE_GS1_128_CC: case BARCODE_HIBC_128: settings.setValue("studio/bc/code128/encoding_mode", get_button_group_index(QStringList() << "radC128Stand" << "radC128EAN" << "radC128CSup" << "radC128HIBC")); break; case BARCODE_PDF417: case BARCODE_PDF417COMP: case BARCODE_HIBC_PDF: settings.setValue("studio/bc/pdf417/cols", get_combobox_index("cmbPDFCols")); settings.setValue("studio/bc/pdf417/ecc", get_combobox_index("cmbPDFECC")); settings.setValue("studio/bc/pdf417/encoding_mode", get_button_group_index(QStringList() << "radPDFStand" << "radPDFTruncated" << "radPDFHIBC")); break; case BARCODE_MICROPDF417: case BARCODE_HIBC_MICPDF: settings.setValue("studio/bc/micropdf417/cols", get_combobox_index("cmbMPDFCols")); settings.setValue("studio/bc/micropdf417/encoding_mode", get_button_group_index(QStringList() << "radMPDFStand" << "radMPDFHIBC")); break; case BARCODE_DOTCODE: settings.setValue("studio/bc/dotcode/cols", get_combobox_index("cmbDotCols")); settings.setValue("studio/bc/dotcode/mask", get_combobox_index("cmbDotMask")); settings.setValue("studio/bc/dotcode/encoding_mode", get_button_group_index(QStringList() << "radDotStand" << "radDotGS1")); break; case BARCODE_AZTEC: case BARCODE_HIBC_AZTEC: settings.setValue("studio/bc/aztec/autoresizing", get_button_group_index(QStringList() << "radAztecAuto" << "radAztecSize" << "radAztecECC")); settings.setValue("studio/bc/aztec/size", get_combobox_index("cmbAztecSize")); settings.setValue("studio/bc/aztec/ecc", get_combobox_index("cmbAztecECC")); settings.setValue("studio/bc/aztec/encoding_mode", get_button_group_index(QStringList() << "radAztecStand" << "radAztecGS1" << "radAztecHIBC")); break; case BARCODE_MSI_PLESSEY: settings.setValue("studio/bc/msi_plessey/check_digit", get_combobox_index("cmbMSICheck")); settings.setValue("studio/bc/msi_plessey/check_text", get_checkbox_val("chkMSICheckText")); break; case BARCODE_CODE11: settings.setValue("studio/bc/code11/check_digit", get_button_group_index(QStringList() << "radC11TwoCheckDigits" << "radC11OneCheckDigit" << "radC11NoCheckDigits")); break; case BARCODE_C25STANDARD: settings.setValue("studio/bc/c25standard/check_digit", get_button_group_index(QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); break; case BARCODE_C25INTER: settings.setValue("studio/bc/c25inter/check_digit", get_button_group_index(QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); break; case BARCODE_C25IATA: settings.setValue("studio/bc/c25iata/check_digit", get_button_group_index(QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); break; case BARCODE_C25LOGIC: settings.setValue("studio/bc/c25logic/check_digit", get_button_group_index(QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); break; case BARCODE_C25IND: settings.setValue("studio/bc/c25ind/check_digit", get_button_group_index(QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); break; case BARCODE_CODE39: case BARCODE_HIBC_39: settings.setValue("studio/bc/code39/check_digit", get_button_group_index(QStringList() << "radC39Stand" << "radC39Check" << "radC39HIBC")); break; case BARCODE_EXCODE39: settings.setValue("studio/bc/excode39/check_digit", get_button_group_index(QStringList() << "radC39Stand" << "radC39Check")); break; case BARCODE_LOGMARS: settings.setValue("studio/bc/logmars/check_digit", get_button_group_index(QStringList() << "radLOGMARSStand" << "radLOGMARSCheck")); break; case BARCODE_CODE16K: settings.setValue("studio/bc/code16k/row_sep_height", get_combobox_index("cmbC16kRowSepHeight")); settings.setValue("studio/bc/code16k/encoding_mode", get_button_group_index(QStringList() << "radC16kStand" << "radC16kGS1")); break; case BARCODE_CODABAR: settings.setValue("studio/bc/codabar/chk_check_char", get_checkbox_val("chkCodabarCheck")); break; case BARCODE_CODABLOCKF: case BARCODE_HIBC_BLOCKF: settings.setValue("studio/bc/codablockf/width", get_combobox_index("cmbCbfWidth")); settings.setValue("studio/bc/codablockf/height", get_combobox_index("cmbCbfHeight")); settings.setValue("studio/bc/codablockf/row_sep_height", get_combobox_index("cmbCbfRowSepHeight")); settings.setValue("studio/bc/codablockf/encoding_mode", get_button_group_index(QStringList() << "radCbfStand" << "radCbfHIBC")); break; case BARCODE_DAFT: settings.setValue("studio/bc/daft/tracker_ratio", QString::number(get_doublespinbox_val("spnDAFTTrackerRatio"), 'f', 1 /*precision*/)); break; case BARCODE_DATAMATRIX: case BARCODE_HIBC_DM: settings.setValue("studio/bc/datamatrix/size", get_combobox_index("cmbDM200Size")); settings.setValue("studio/bc/datamatrix/encoding_mode", get_button_group_index(QStringList() << "radDM200Stand" << "radDM200GS1" << "radDM200HIBC")); settings.setValue("studio/bc/datamatrix/chk_suppress_rect", get_checkbox_val("chkDMRectangle")); settings.setValue("studio/bc/datamatrix/chk_allow_dmre", get_checkbox_val("chkDMRE")); settings.setValue("studio/bc/datamatrix/chk_gs_sep", get_checkbox_val("chkDMGSSep")); break; case BARCODE_QRCODE: case BARCODE_HIBC_QR: settings.setValue("studio/bc/qrcode/size", get_combobox_index("cmbQRSize")); settings.setValue("studio/bc/qrcode/ecc", get_combobox_index("cmbQRECC")); settings.setValue("studio/bc/qrcode/mask", get_combobox_index("cmbQRMask")); settings.setValue("studio/bc/qrcode/encoding_mode", get_button_group_index(QStringList() << "radDM200Stand" << "radQRGS1" << "radQRHIBC")); settings.setValue("studio/bc/qrcode/chk_full_multibyte", get_checkbox_val("chkQRFullMultibyte")); break; case BARCODE_RMQR: settings.setValue("studio/bc/rmqr/size", get_combobox_index("cmbRMQRSize")); settings.setValue("studio/bc/rmqr/ecc", get_combobox_index("cmbRMQRECC")); settings.setValue("studio/bc/rmqr/encoding_mode", get_button_group_index(QStringList() << "radQRStand" << "radRMQRGS1")); settings.setValue("studio/bc/rmqr/chk_full_multibyte", get_checkbox_val("chkRMQRFullMultibyte")); break; case BARCODE_HANXIN: settings.setValue("studio/bc/hanxin/size", get_combobox_index("cmbHXSize")); settings.setValue("studio/bc/hanxin/ecc", get_combobox_index("cmbHXECC")); settings.setValue("studio/bc/hanxin/mask", get_combobox_index("cmbHXMask")); settings.setValue("studio/bc/hanxin/chk_full_multibyte", get_checkbox_val("chkHXFullMultibyte")); break; case BARCODE_MICROQR: settings.setValue("studio/bc/microqr/size", get_combobox_index("cmbMQRSize")); settings.setValue("studio/bc/microqr/ecc", get_combobox_index("cmbMQRECC")); settings.setValue("studio/bc/microqr/mask", get_combobox_index("cmbMQRMask")); settings.setValue("studio/bc/microqr/chk_full_multibyte", get_checkbox_val("chkMQRFullMultibyte")); break; case BARCODE_GRIDMATRIX: settings.setValue("studio/bc/gridmatrix/size", get_combobox_index("cmbGridSize")); settings.setValue("studio/bc/gridmatrix/ecc", get_combobox_index("cmbGridECC")); settings.setValue("studio/bc/gridmatrix/chk_full_multibyte", get_checkbox_val("chkGridFullMultibyte")); break; case BARCODE_MAXICODE: settings.setValue("studio/bc/maxicode/mode", get_combobox_index("cmbMaxiMode")); settings.setValue("studio/bc/maxicode/scm_postcode", get_lineedit_val("txtMaxiSCMPostcode")); settings.setValue("studio/bc/maxicode/scm_country", get_spinbox_val("spnMaxiSCMCountry")); settings.setValue("studio/bc/maxicode/scm_service", get_spinbox_val("spnMaxiSCMService")); settings.setValue("studio/bc/maxicode/chk_scm_vv", get_checkbox_val("chkMaxiSCMVV")); settings.setValue("studio/bc/maxicode/spn_scm_vv", get_spinbox_val("spnMaxiSCMVV")); break; case BARCODE_CODEONE: settings.setValue("studio/bc/codeone/size", get_combobox_index("cmbC1Size")); settings.setValue("studio/bc/codeone/encoding_mode", get_button_group_index(QStringList() << "radC1Stand" << "radC1GS1")); break; case BARCODE_CODE49: settings.setValue("studio/bc/code49/row_sep_height", get_combobox_index("cmbC49RowSepHeight")); settings.setValue("studio/bc/code49/encoding_mode", get_button_group_index(QStringList() << "radC49Stand" << "radC49GS1")); break; case BARCODE_CODE93: settings.setValue("studio/bc/code93/chk_show_checks", get_checkbox_val("chkC93ShowChecks")); break; case BARCODE_DBAR_EXPSTK: case BARCODE_DBAR_EXPSTK_CC: settings.setValue("studio/bc/dbar_expstk/cols", get_combobox_index("cmbCols")); break; case BARCODE_ULTRA: settings.setValue("studio/bc/ultra/autoresizing", get_button_group_index(QStringList() << "radUltraAuto" << "radUltraEcc")); settings.setValue("studio/bc/ultra/ecc", get_combobox_index("cmbUltraEcc")); settings.setValue("studio/bc/ultra/encoding_mode", get_button_group_index(QStringList() << "radUltraStand" << "radUltraGS1")); break; case BARCODE_UPCA: case BARCODE_UPCA_CHK: case BARCODE_UPCA_CC: settings.setValue("studio/bc/upca/addongap", get_combobox_index("cmbUPCAAddonGap")); break; case BARCODE_EANX: case BARCODE_EANX_CHK: case BARCODE_EANX_CC: settings.setValue("studio/bc/eanx/addongap", get_combobox_index("cmbUPCEANAddonGap")); break; case BARCODE_UPCE: case BARCODE_UPCE_CHK: case BARCODE_UPCE_CC: settings.setValue("studio/bc/upce/addongap", get_combobox_index("cmbUPCEANAddonGap")); break; case BARCODE_ISBNX: settings.setValue("studio/bc/isnbx/addongap", get_combobox_index("cmbUPCEANAddonGap")); break; case BARCODE_VIN: settings.setValue("studio/bc/vin/chk_import_char_prefix", get_checkbox_val("chkVINImportChar")); break; } } /* Load settings for an individual symbol */ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { const char *name = get_setting_name(symbology); if (*name) { const QString &tdata = settings.value(QString("studio/bc/%1/data").arg(name), "").toString(); if (!tdata.isEmpty()) { txtData->setText(tdata); } if (!grpComposite->isHidden()) { const QString &composite_text = settings.value(QString("studio/bc/%1/composite_text").arg(name), "").toString(); if (!composite_text.isEmpty()) { txtComposite->setText(composite_text); } chkComposite->setChecked(settings.value(QString("studio/bc/%1/chk_composite").arg(name), 0).toInt() ? true : false); cmbCompType->setCurrentIndex(settings.value(QString("studio/bc/%1/comp_type").arg(name), 0).toInt()); } if (cmbECI->isEnabled()) { cmbECI->setCurrentIndex(settings.value(QString("studio/bc/%1/eci").arg(name), 0).toInt()); } chkEscape->setChecked(settings.value(QString("studio/bc/%1/chk_escape").arg(name)).toInt() ? true : false); chkData->setChecked(settings.value(QString("studio/bc/%1/chk_data").arg(name)).toInt() ? true : false); if (chkRInit->isEnabled()) { chkRInit->setChecked(settings.value(QString("studio/bc/%1/chk_rinit").arg(name)).toInt() ? true : false); } chkGS1Parens->setChecked(settings.value(QString("studio/bc/%1/chk_gs1parens").arg(name)).toInt() ? true : false); chkGS1NoCheck->setChecked(settings.value(QString("studio/bc/%1/chk_gs1nocheck").arg(name)).toInt() ? true : false); if (chkAutoHeight->isEnabled()) { chkAutoHeight->setChecked(settings.value(QString("studio/bc/%1/appearance/autoheight").arg(name), 1).toInt() ? true : false); heightb->setValue(settings.value(QString("studio/bc/%1/appearance/height").arg(name), 50.0f).toFloat()); } bwidth->setValue(settings.value(QString("studio/bc/%1/appearance/border").arg(name), 0).toInt()); spnWhitespace->setValue(settings.value(QString("studio/bc/%1/appearance/whitespace").arg(name), 0).toInt()); spnVWhitespace->setValue(settings.value(QString("studio/bc/%1/appearance/vwhitespace").arg(name), 0).toInt()); spnScale->setValue(settings.value(QString("studio/bc/%1/appearance/scale").arg(name), 1.0).toFloat()); btype->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/border_type").arg(name), 0).toInt()); if (chkHRTShow->isEnabled()) { cmbFontSetting->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/font_setting").arg(name), 0).toInt()); chkHRTShow->setChecked(settings.value(QString("studio/bc/%1/appearance/chk_hrt_show").arg(name), 1).toInt() ? true : false); } chkCMYK->setChecked(settings.value(QString("studio/bc/%1/appearance/cmyk").arg(name), 0).toInt() ? true : false); cmbRotate->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/rotate").arg(name), 0).toInt()); if (symbology == BARCODE_DOTCODE || chkDotty->isEnabled()) { chkDotty->setChecked(settings.value(QString("studio/bc/%1/appearance/chk_dotty").arg(name), 0).toInt() ? true : false); spnDotSize->setValue(settings.value(QString("studio/bc/%1/appearance/dot_size").arg(name), 0.4f / 0.5f).toFloat()); } m_fgcolor.setRgb(settings.value(QString("studio/bc/%1/ink/red").arg(name), 0).toInt(), settings.value(QString("studio/bc/%1/ink/green").arg(name), 0).toInt(), settings.value(QString("studio/bc/%1/ink/blue").arg(name), 0).toInt(), settings.value(QString("studio/bc/%1/ink/alpha").arg(name), 0xff).toInt()); m_bgcolor.setRgb(settings.value(QString("studio/bc/%1/paper/red").arg(name), 0xff).toInt(), settings.value(QString("studio/bc/%1/paper/green").arg(name), 0xff).toInt(), settings.value(QString("studio/bc/%1/paper/blue").arg(name), 0xff).toInt(), settings.value(QString("studio/bc/%1/paper/alpha").arg(name), 0xff).toInt()); } switch (symbology) { case BARCODE_CODE128: case BARCODE_CODE128B: case BARCODE_GS1_128: case BARCODE_GS1_128_CC: case BARCODE_HIBC_128: set_radiobutton_from_setting(settings, "studio/bc/code128/encoding_mode", QStringList() << "radC128Stand" << "radC128EAN" << "radC128CSup" << "radC128HIBC"); break; case BARCODE_PDF417: case BARCODE_PDF417COMP: case BARCODE_HIBC_PDF: set_combobox_from_setting(settings, "studio/bc/pdf417/cols", "cmbPDFCols"); set_combobox_from_setting(settings, "studio/bc/pdf417/ecc", "cmbPDFECC"); set_radiobutton_from_setting(settings, "studio/bc/pdf417/encoding_mode", QStringList() << "radPDFStand" << "radPDFTruncated" << "radPDFHIBC"); break; case BARCODE_MICROPDF417: case BARCODE_HIBC_MICPDF: set_combobox_from_setting(settings, "studio/bc/micropdf417/cols", "cmbMPDFCols"); set_radiobutton_from_setting(settings, "studio/bc/micropdf417/encoding_mode", QStringList() << "radMPDFStand" << "radMPDFHIBC"); break; case BARCODE_DOTCODE: set_combobox_from_setting(settings, "studio/bc/dotcode/cols", "cmbDotCols"); set_combobox_from_setting(settings, "studio/bc/dotcode/mask", "cmbDotMask"); set_radiobutton_from_setting(settings, "studio/bc/dotcode/encoding_mode", QStringList() << "radDotStand" << "radDotGS1"); break; case BARCODE_AZTEC: case BARCODE_HIBC_AZTEC: set_radiobutton_from_setting(settings, "studio/bc/aztec/autoresizing", QStringList() << "radAztecAuto" << "radAztecSize" << "radAztecECC"); set_combobox_from_setting(settings, "studio/bc/aztec/size", "cmbAztecSize"); set_combobox_from_setting(settings, "studio/bc/aztec/ecc", "cmbAztecECC"); set_radiobutton_from_setting(settings, "studio/bc/aztec/encoding_mode", QStringList() << "radAztecStand" << "radAztecGS1" << "radAztecHIBC"); break; case BARCODE_MSI_PLESSEY: set_combobox_from_setting(settings, "studio/bc/msi_plessey/check_digit", "cmbMSICheck"); set_checkbox_from_setting(settings, "studio/bc/msi_plessey/check_text", "chkMSICheckText"); msi_plessey_ui_set(); break; case BARCODE_CODE11: set_radiobutton_from_setting(settings, "studio/bc/code11/check_digit", QStringList() << "radC11TwoCheckDigits" << "radC11OneCheckDigit" << "radC11NoCheckDigits"); break; case BARCODE_C25STANDARD: set_radiobutton_from_setting(settings, "studio/bc/c25standard/check_digit", QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); break; case BARCODE_C25INTER: set_radiobutton_from_setting(settings, "studio/bc/c25inter/check_digit", QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); break; case BARCODE_C25IATA: set_radiobutton_from_setting(settings, "studio/bc/c25iata/check_digit", QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); break; case BARCODE_C25LOGIC: set_radiobutton_from_setting(settings, "studio/bc/c25logic/check_digit", QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); break; case BARCODE_C25IND: set_radiobutton_from_setting(settings, "studio/bc/c25ind/check_digit", QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); break; case BARCODE_CODE39: case BARCODE_HIBC_39: set_radiobutton_from_setting(settings, "studio/bc/code39/check_digit", QStringList() << "radC39Stand" << "radC39Check" << "radC39HIBC"); break; case BARCODE_EXCODE39: set_radiobutton_from_setting(settings, "studio/bc/excode39/check_digit", QStringList() << "radC39Stand" << "radC39Check"); break; case BARCODE_LOGMARS: set_radiobutton_from_setting(settings, "studio/bc/logmars/check_digit", QStringList() << "radLOGMARSStand" << "radLOGMARSCheck"); break; case BARCODE_CODE16K: set_combobox_from_setting(settings, "studio/bc/code16k/row_sep_height", "cmbC16kRowSepHeight"); set_radiobutton_from_setting(settings, "studio/bc/code16k/encoding_mode", QStringList() << "radC16kStand" << "radC16kGS1"); break; case BARCODE_CODABAR: set_checkbox_from_setting(settings, "studio/bc/codabar/chk_check_char", "chkCodabarCheck"); break; case BARCODE_CODABLOCKF: case BARCODE_HIBC_BLOCKF: set_combobox_from_setting(settings, "studio/bc/codablockf/width", "cmbCbfWidth"); set_combobox_from_setting(settings, "studio/bc/codablockf/height", "cmbCbfHeight"); set_combobox_from_setting(settings, "studio/bc/codablockf/row_sep_height", "cmbCbfRowSepHeight"); set_radiobutton_from_setting(settings, "studio/bc/codablockf/encoding_mode", QStringList() << "radCbfStand" << "radCbfHIBC"); break; case BARCODE_DAFT: set_doublespinbox_from_setting(settings, "studio/bc/daft/tracker_ratio", "spnDAFTTrackerRatio", 25.0f); break; case BARCODE_DATAMATRIX: case BARCODE_HIBC_DM: set_combobox_from_setting(settings, "studio/bc/datamatrix/size", "cmbDM200Size"); set_radiobutton_from_setting(settings, "studio/bc/datamatrix/encoding_mode", QStringList() << "radDM200Stand" << "radDM200GS1" << "radDM200HIBC"); set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_suppress_rect", "chkDMRectangle"); set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_allow_dmre", "chkDMRE"); set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_gs_sep", "chkDMGSSep"); break; case BARCODE_QRCODE: case BARCODE_HIBC_QR: set_combobox_from_setting(settings, "studio/bc/qrcode/size", "cmbQRSize"); set_combobox_from_setting(settings, "studio/bc/qrcode/ecc", "cmbQRECC"); set_combobox_from_setting(settings, "studio/bc/qrcode/mask", "cmbQRMask"); set_radiobutton_from_setting(settings, "studio/bc/qrcode/encoding_mode", QStringList() << "radDM200Stand" << "radQRGS1" << "radQRHIBC"); set_checkbox_from_setting(settings, "studio/bc/qrcode/chk_full_multibyte", "chkQRFullMultibyte"); break; case BARCODE_RMQR: set_combobox_from_setting(settings, "studio/bc/rmqr/size", "cmbRMQRSize"); set_combobox_from_setting(settings, "studio/bc/rmqr/ecc", "cmbRMQRECC"); set_radiobutton_from_setting(settings, "studio/bc/rmqr/encoding_mode", QStringList() << "radQRStand" << "radRMQRGS1"); set_checkbox_from_setting(settings, "studio/bc/rmqr/chk_full_multibyte", "chkRMQRFullMultibyte"); break; case BARCODE_HANXIN: set_combobox_from_setting(settings, "studio/bc/hanxin/size", "cmbHXSize"); set_combobox_from_setting(settings, "studio/bc/hanxin/ecc", "cmbHXECC"); set_combobox_from_setting(settings, "studio/bc/hanxin/mask", "cmbHXMask"); set_checkbox_from_setting(settings, "studio/bc/hanxin/chk_full_multibyte", "chkHXFullMultibyte"); break; case BARCODE_MICROQR: set_combobox_from_setting(settings, "studio/bc/microqr/size", "cmbMQRSize"); set_combobox_from_setting(settings, "studio/bc/microqr/ecc", "cmbMQRECC"); set_combobox_from_setting(settings, "studio/bc/microqr/mask", "cmbMQRMask"); set_checkbox_from_setting(settings, "studio/bc/microqr/chk_full_multibyte", "chkMQRFullMultibyte"); break; case BARCODE_GRIDMATRIX: set_combobox_from_setting(settings, "studio/bc/gridmatrix/size", "cmbGridSize"); set_combobox_from_setting(settings, "studio/bc/gridmatrix/ecc", "cmbGridECC"); set_checkbox_from_setting(settings, "studio/bc/gridmatrix/chk_full_multibyte", "chkGridFullMultibyte"); break; case BARCODE_MAXICODE: set_combobox_from_setting(settings, "studio/bc/maxicode/mode", "cmbMaxiMode", 1); set_lineedit_from_setting(settings, "studio/bc/maxicode/scm_postcode", "txtMaxiSCMPostcode", ""); set_spinbox_from_setting(settings, "studio/bc/maxicode/scm_country", "spnMaxiSCMCountry", 0); set_spinbox_from_setting(settings, "studio/bc/maxicode/scm_service", "spnMaxiSCMService", 0); set_checkbox_from_setting(settings, "studio/bc/maxicode/chk_scm_vv", "chkMaxiSCMVV"); set_spinbox_from_setting(settings, "studio/bc/maxicode/spn_scm_vv", "spnMaxiSCMVV", 96); /* 96 is ASC MH10/SC 8 */ break; case BARCODE_CODEONE: set_combobox_from_setting(settings, "studio/bc/codeone/size", "cmbC1Size"); set_radiobutton_from_setting(settings, "studio/bc/codeone/encoding_mode", QStringList() << "radC1Stand" << "radC1GS1"); break; case BARCODE_CODE49: set_combobox_from_setting(settings, "studio/bc/code49/row_sep_height", "cmbC49RowSepHeight"); set_radiobutton_from_setting(settings, "studio/bc/code49/encoding_mode", QStringList() << "radC49Stand" << "radC49GS1"); break; case BARCODE_CODE93: set_checkbox_from_setting(settings, "studio/bc/code93/chk_show_checks", "chkC93ShowChecks"); break; case BARCODE_DBAR_EXPSTK: set_combobox_from_setting(settings, "studio/bc/dbar_expstk/cols", "cmbCols"); break; case BARCODE_ULTRA: set_radiobutton_from_setting(settings, "studio/bc/ultra/autoresizing", QStringList() << "radUltraAuto" << "radUltraEcc"); set_combobox_from_setting(settings, "studio/bc/ultra/ecc", "cmbUltraEcc"); set_radiobutton_from_setting(settings, "studio/bc/ultra/encoding_mode", QStringList() << "radUltraStand" << "radUltraGS1"); break; case BARCODE_UPCA: case BARCODE_UPCA_CHK: case BARCODE_UPCA_CC: set_combobox_from_setting(settings, "studio/bc/upca/addongap", "cmbUPCAAddonGap"); break; case BARCODE_EANX: case BARCODE_EANX_CHK: case BARCODE_EANX_CC: set_combobox_from_setting(settings, "studio/bc/eanx/addongap", "cmbUPCEANAddonGap"); break; case BARCODE_UPCE: case BARCODE_UPCE_CHK: case BARCODE_UPCE_CC: set_combobox_from_setting(settings, "studio/bc/upce/addongap", "cmbUPCEANAddonGap"); break; case BARCODE_ISBNX: set_combobox_from_setting(settings, "studio/bc/isbnx/addongap", "cmbUPCEANAddonGap"); break; case BARCODE_VIN: set_checkbox_from_setting(settings, "studio/bc/vin/chk_import_char_prefix", "chkVINImportChar"); break; } }