2023-12-05 09:50:02 +00:00
|
|
|
#include "dialog_export.h"
|
2022-05-03 10:25:52 +00:00
|
|
|
#include "ui_dialog_export.h"
|
|
|
|
#include <QButtonGroup>
|
|
|
|
#include <QMessageBox>
|
2023-02-15 12:17:07 +00:00
|
|
|
#include <QDialogButtonBox>
|
2022-05-03 10:25:52 +00:00
|
|
|
#include <algorithm>
|
|
|
|
#include <QRegExpValidator>
|
2022-05-13 12:38:58 +00:00
|
|
|
#include "dialog_writesettings.h"
|
2023-02-17 01:20:12 +00:00
|
|
|
#include "base/HGBase.h"
|
2022-05-03 10:25:52 +00:00
|
|
|
#include "HGUIGlobal.h"
|
|
|
|
#include "app_cfg.h"
|
2024-05-21 09:14:21 +00:00
|
|
|
#include "lang/app_language.h"
|
2022-05-24 05:45:07 +00:00
|
|
|
#include <assert.h>
|
2022-05-03 10:25:52 +00:00
|
|
|
|
2022-05-26 08:25:55 +00:00
|
|
|
#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0])
|
|
|
|
|
|
|
|
enum file_type_attr
|
|
|
|
{
|
|
|
|
FILE_TYPE_ATTR_NO_MORE_OPTION = 0x0,
|
|
|
|
FILE_TYPE_ATTR_MORE_OPTIONS = 0x01 << 0, // this type supports more-parameters
|
|
|
|
FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES = 0x01 << 1, // this type supports multi-images to be saved into one file
|
|
|
|
FILE_TYPE_ATTR_THIRD_HANDLER = 0x01 << 2, // this type supports third-handling methods
|
|
|
|
};
|
2023-04-13 07:12:17 +00:00
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
Dialog_Export::Dialog_Export(int total, const std::vector<int> &selectedIndexs, QWidget *parent) :
|
|
|
|
QDialog(parent)
|
|
|
|
, ui(new Ui::Dialog_Export)
|
|
|
|
, m_total(total)
|
|
|
|
, m_selectedIndexs(selectedIndexs)
|
|
|
|
{
|
|
|
|
ui->setupUi(this);
|
2023-03-08 06:32:31 +00:00
|
|
|
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
2024-05-21 09:14:21 +00:00
|
|
|
bool Microteck_Vietnam = false;
|
|
|
|
#if defined (OEM_ZHONGJING) && defined (HG_CMP_MSC)
|
|
|
|
if (1258 == lang_get_cur_code_page())
|
|
|
|
{
|
|
|
|
Microteck_Vietnam = true;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2023-02-17 01:20:12 +00:00
|
|
|
m_supportType.push_back(SupportType(".jpg", "JPG - JPEG / JFIF", FILE_TYPE_ATTR_MORE_OPTIONS));
|
|
|
|
m_supportType.push_back(SupportType(".bmp", "BMP - Windows Bitmap", FILE_TYPE_ATTR_NO_MORE_OPTION));
|
|
|
|
m_supportType.push_back(SupportType(".png", "PNG - Portable Network Graphics", FILE_TYPE_ATTR_NO_MORE_OPTION));
|
|
|
|
m_supportType.push_back(SupportType(".ppm", "PPM - Portable PixMap", FILE_TYPE_ATTR_NO_MORE_OPTION));
|
|
|
|
m_supportType.push_back(SupportType(".pgm", "PGM - Portable GreyMap", FILE_TYPE_ATTR_NO_MORE_OPTION));
|
|
|
|
m_supportType.push_back(SupportType(".pbm", "PBM - Portable BitMap", FILE_TYPE_ATTR_NO_MORE_OPTION));
|
|
|
|
m_supportType.push_back(SupportType(".tif", "TIF - TIFF Revision 6", FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES | FILE_TYPE_ATTR_MORE_OPTIONS));
|
2023-03-03 06:22:56 +00:00
|
|
|
m_supportType.push_back(SupportType(".pdf", "PDF - Portable Document Format", FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES | FILE_TYPE_ATTR_MORE_OPTIONS));
|
2023-03-03 09:57:31 +00:00
|
|
|
m_supportType.push_back(SupportType(".ofd", "OFD - Open Fixed-layout Document", FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES | FILE_TYPE_ATTR_MORE_OPTIONS));
|
2023-02-17 01:20:12 +00:00
|
|
|
m_supportType.push_back(SupportType(".gif", "GIF - Graphics Interchange Format", FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES));
|
2023-12-11 03:38:34 +00:00
|
|
|
|
|
|
|
#if !defined (x86_64) && !defined (loongarch64)
|
2023-02-17 01:20:12 +00:00
|
|
|
m_supportType.push_back(SupportType(".pdf", "OCR->PDF - Portable Document Format", FILE_TYPE_ATTR_THIRD_HANDLER | FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES));
|
2024-05-21 09:14:21 +00:00
|
|
|
if (!Microteck_Vietnam)
|
|
|
|
{
|
|
|
|
m_supportType.push_back(SupportType(".ofd", "OCR->OFD - Open Fixed-layout Document", FILE_TYPE_ATTR_THIRD_HANDLER | FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES));
|
|
|
|
m_supportType.push_back(SupportType(".rtf", "OCR->RTF - Rich Text Format", FILE_TYPE_ATTR_THIRD_HANDLER | FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES));
|
|
|
|
}
|
2023-02-17 01:20:12 +00:00
|
|
|
#endif
|
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
ui->fileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
|
|
|
ui->fileDialog->setWindowFlags(ui->fileDialog->windowFlags() & ~Qt::Dialog);
|
|
|
|
ui->fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
|
2024-04-10 02:32:24 +00:00
|
|
|
ui->fileDialog->setOption(QFileDialog::ReadOnly, false); // disable 'Delete' menu item
|
2022-05-03 10:25:52 +00:00
|
|
|
ui->fileDialog->setSizeGripEnabled(false);
|
|
|
|
|
2022-05-26 08:25:55 +00:00
|
|
|
QStringList filters;
|
2023-02-17 01:20:12 +00:00
|
|
|
for(int i = 0; i < m_supportType.size(); ++i)
|
|
|
|
filters.push_back(m_supportType[i].title + "(*" + m_supportType[i].ext + ")");
|
2022-05-26 08:25:55 +00:00
|
|
|
ui->fileDialog->setNameFilters(filters);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
|
|
|
connect(ui->fileDialog, SIGNAL(accepted()), this, SLOT(on_dialog_accepted()));
|
|
|
|
connect(ui->fileDialog, SIGNAL(rejected()), this, SLOT(close()));
|
|
|
|
connect(ui->fileDialog, SIGNAL(filterSelected(const QString&)), this, SLOT(on_filterSelected(const QString&)));
|
2024-01-09 03:08:52 +00:00
|
|
|
connect(ui->fileDialog, SIGNAL(currentChanged(const QString&)), this, SLOT(on_currentChanged(const QString&)));
|
2022-05-03 10:25:52 +00:00
|
|
|
|
2022-05-25 08:52:55 +00:00
|
|
|
#ifdef USE_FILE_DLG_WITHOUT_PROMPT
|
|
|
|
init_custom_file_dlg(ui->fileDialog);
|
|
|
|
#endif
|
|
|
|
|
2023-07-01 08:07:15 +00:00
|
|
|
QObjectList objs(ui->fileDialog->children());
|
|
|
|
for(auto& o : objs)
|
|
|
|
{
|
|
|
|
if ("fileNameEdit" == o->objectName())
|
|
|
|
{
|
|
|
|
QLineEdit *edit = (QLineEdit *)o;
|
|
|
|
|
|
|
|
QRegExp rx("[^\\\\/:*?\"<>|]+$");
|
|
|
|
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
|
|
|
|
edit->setValidator(pReg);
|
2023-12-05 09:50:02 +00:00
|
|
|
|
|
|
|
connect(edit, SIGNAL(editingFinished()), this, SLOT(on_editingFinished()));
|
2023-07-01 08:07:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
QButtonGroup* btn_group = new QButtonGroup(this);
|
|
|
|
btn_group->addButton(ui->radio_chosenPages, 0);
|
|
|
|
btn_group->addButton(ui->radio_allPages, 1);
|
|
|
|
btn_group->addButton(ui->radio_nominatedPages, 2);
|
|
|
|
|
|
|
|
QRegExp rx("[0-9,-]+$");
|
|
|
|
ui->lineEdit_nominatePages->setValidator(new QRegExpValidator(rx, this));
|
|
|
|
|
|
|
|
m_suffix = getCfgValue("export", "suffix", 0);
|
2023-02-17 01:20:12 +00:00
|
|
|
if(m_suffix < 0 || m_suffix >= m_supportType.size())
|
2022-05-26 08:25:55 +00:00
|
|
|
m_suffix = 0;
|
2022-05-03 10:25:52 +00:00
|
|
|
ui->fileDialog->selectNameFilter(ui->fileDialog->nameFilters().at(m_suffix));
|
2023-02-17 01:20:12 +00:00
|
|
|
m_saveExt = m_supportType[m_suffix].ext;
|
2022-05-26 08:25:55 +00:00
|
|
|
// ui->check_saveAsMulti->setEnabled(m_suffix > 2 && m_suffix < 6);
|
2023-02-17 01:20:12 +00:00
|
|
|
ui->check_saveAsMulti->setEnabled((m_supportType[m_suffix].attr & FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES) == FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES);
|
2022-05-03 10:25:52 +00:00
|
|
|
ui->check_saveAsMulti->setChecked(getCfgValue("export", "saveAsMulti", false));
|
2022-05-26 08:25:55 +00:00
|
|
|
// ui->btn_option->setEnabled(m_suffix == 0 || m_suffix == 3);
|
2023-02-17 01:20:12 +00:00
|
|
|
ui->btn_option->setEnabled((m_supportType[m_suffix].attr & FILE_TYPE_ATTR_MORE_OPTIONS) == FILE_TYPE_ATTR_MORE_OPTIONS);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
|
|
|
int exportType = getCfgValue("export", "exportType", 0);
|
|
|
|
if (0 == exportType)
|
|
|
|
{
|
|
|
|
ui->radio_chosenPages->setChecked(true);
|
|
|
|
ui->lab_nominatePages->setEnabled(false);
|
|
|
|
ui->lineEdit_nominatePages->setEnabled(false);
|
|
|
|
ui->lab_warning->setVisible(false);
|
|
|
|
}
|
|
|
|
else if (1 == exportType)
|
|
|
|
{
|
|
|
|
ui->radio_allPages->setChecked(true);
|
|
|
|
ui->lab_nominatePages->setEnabled(false);
|
|
|
|
ui->lineEdit_nominatePages->setEnabled(false);
|
|
|
|
ui->lab_warning->setVisible(false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ui->radio_nominatedPages->setChecked(true);
|
|
|
|
ui->lab_nominatePages->setEnabled(true);
|
|
|
|
ui->lineEdit_nominatePages->setEnabled(true);
|
|
|
|
ui->lab_warning->setVisible(true);
|
|
|
|
ui->lab_warning->setText(tr("Input is not valid.\nPage range will be 'Chosen Pages'."));
|
|
|
|
}
|
2023-03-02 03:21:09 +00:00
|
|
|
|
|
|
|
ui->label_ocrType->setVisible(false);
|
|
|
|
ui->comboBox_ocrType->setVisible(false);
|
2022-05-03 10:25:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Dialog_Export::~Dialog_Export()
|
|
|
|
{
|
|
|
|
delete ui;
|
|
|
|
}
|
|
|
|
|
|
|
|
QString Dialog_Export::getSavePath()
|
|
|
|
{
|
|
|
|
return m_savePath;
|
|
|
|
}
|
|
|
|
|
|
|
|
QString Dialog_Export::getSaveName()
|
|
|
|
{
|
|
|
|
return m_saveName;
|
|
|
|
}
|
|
|
|
|
|
|
|
QString Dialog_Export::getSaveExt()
|
|
|
|
{
|
|
|
|
return m_saveExt;
|
|
|
|
}
|
|
|
|
|
2022-05-13 12:38:58 +00:00
|
|
|
int Dialog_Export::getJpegQuality()
|
2022-05-03 10:25:52 +00:00
|
|
|
{
|
2022-05-13 12:38:58 +00:00
|
|
|
return getCfgValue("saveParam", "jpegQuality", 80);
|
|
|
|
}
|
|
|
|
|
|
|
|
int Dialog_Export::getTiffCompressionBW()
|
|
|
|
{
|
2022-05-13 12:53:53 +00:00
|
|
|
return getCfgValue("saveParam", "tiffCompBW", 1);
|
2022-05-13 12:38:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int Dialog_Export::getTiffCompression()
|
|
|
|
{
|
2022-05-13 12:53:53 +00:00
|
|
|
return getCfgValue("saveParam", "tiffCompClr", 1);
|
2022-05-13 12:38:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int Dialog_Export::getTiffQuality()
|
|
|
|
{
|
|
|
|
return getCfgValue("saveParam", "tiffQuality", 80);
|
2022-05-03 10:25:52 +00:00
|
|
|
}
|
|
|
|
|
2022-05-16 09:00:08 +00:00
|
|
|
bool Dialog_Export::isOcr()
|
|
|
|
{
|
2022-05-26 08:25:55 +00:00
|
|
|
// return (m_suffix >= 6);
|
2023-02-17 01:20:12 +00:00
|
|
|
return (m_supportType[m_suffix].attr & FILE_TYPE_ATTR_THIRD_HANDLER) == FILE_TYPE_ATTR_THIRD_HANDLER;
|
2022-05-16 09:00:08 +00:00
|
|
|
}
|
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
bool Dialog_Export::isSaveAsMultiPage()
|
|
|
|
{
|
|
|
|
return ui->check_saveAsMulti->isChecked();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Dialog_Export::getSaveIndexs(std::vector<int> &indexs)
|
|
|
|
{
|
|
|
|
indexs = m_saveIndexs;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Dialog_Export::on_dialog_accepted()
|
|
|
|
{
|
2023-02-17 01:20:12 +00:00
|
|
|
QString extName(m_supportType[m_suffix].ext);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
|
|
|
assert(!extName.isEmpty());
|
|
|
|
|
|
|
|
QString selectedFile = ui->fileDialog->selectedFiles()[0];
|
2024-01-09 03:08:52 +00:00
|
|
|
|
|
|
|
QFileInfo selectFile(selectedFile);
|
|
|
|
if (selectFile.isDir())
|
|
|
|
{
|
|
|
|
ui->fileDialog->setDirectory(selectedFile);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
int pos = selectedFile.lastIndexOf('/');
|
|
|
|
if (-1 != pos)
|
|
|
|
{
|
|
|
|
QString path = selectedFile.left(pos + 1);
|
|
|
|
QString name = selectedFile.right(selectedFile.count() - pos - 1);
|
2023-12-11 04:46:59 +00:00
|
|
|
|
|
|
|
#if defined (HG_CMP_MSC)
|
|
|
|
if (name.endsWith(extName, Qt::CaseInsensitive))
|
|
|
|
#else
|
|
|
|
if (name.endsWith(extName, Qt::CaseSensitive))
|
|
|
|
#endif
|
2022-05-26 08:25:55 +00:00
|
|
|
{
|
2023-12-11 04:46:59 +00:00
|
|
|
pos = name.lastIndexOf('.');
|
2022-05-03 10:25:52 +00:00
|
|
|
name = name.left(pos);
|
2022-05-26 08:25:55 +00:00
|
|
|
}
|
2022-05-03 10:25:52 +00:00
|
|
|
|
|
|
|
m_savePath = getStdFileName(path);
|
|
|
|
m_saveName = name;
|
|
|
|
m_saveExt = extName;
|
|
|
|
}
|
|
|
|
|
|
|
|
makeSaveIndexs();
|
|
|
|
|
2023-12-11 03:38:34 +00:00
|
|
|
QFile file(m_savePath + m_saveName + m_saveExt);
|
|
|
|
if (file.exists())
|
|
|
|
{
|
2023-12-11 04:46:59 +00:00
|
|
|
QMessageBox msg(QMessageBox::Question, tr("Question"),
|
|
|
|
tr("The file already exists. Do you want to overwrite it?"),
|
|
|
|
QMessageBox::Yes | QMessageBox::No, this);
|
|
|
|
msg.exec();
|
|
|
|
if (msg.clickedButton() != msg.button(QMessageBox::Yes))
|
2023-12-11 03:38:34 +00:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2022-05-26 08:25:55 +00:00
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
saveCfgValue("export", "suffix", m_suffix);
|
|
|
|
|
|
|
|
int exportType = 0;
|
|
|
|
if (ui->radio_chosenPages->isChecked())
|
|
|
|
exportType = 0;
|
|
|
|
else if (ui->radio_allPages->isChecked())
|
|
|
|
exportType = 1;
|
|
|
|
else if (ui->radio_nominatedPages->isChecked())
|
|
|
|
exportType = 2;
|
|
|
|
saveCfgValue("export", "exportType", exportType);
|
|
|
|
saveCfgValue("export", "saveAsMulti", ui->check_saveAsMulti->isChecked());
|
|
|
|
|
|
|
|
accept();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Dialog_Export::on_filterSelected(const QString& filterName)
|
|
|
|
{
|
2022-05-26 08:25:55 +00:00
|
|
|
bool enabled = false;
|
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
m_suffix = ui->fileDialog->nameFilters().indexOf(filterName);
|
2023-03-02 03:21:09 +00:00
|
|
|
|
2023-02-17 01:20:12 +00:00
|
|
|
enabled = (m_supportType[m_suffix].attr & FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES) == FILE_TYPE_ATTR_CONTAIN_MULTI_PAGES;
|
2022-05-26 08:25:55 +00:00
|
|
|
ui->check_saveAsMulti->setEnabled(enabled);
|
|
|
|
// ui->check_saveAsMulti->setEnabled(m_suffix > 2 && m_suffix < 6);
|
|
|
|
// if (m_suffix <= 2 || m_suffix >= 6)
|
|
|
|
if(!enabled)
|
2022-05-03 10:25:52 +00:00
|
|
|
ui->check_saveAsMulti->setChecked(false);
|
2022-05-13 12:38:58 +00:00
|
|
|
|
2023-02-17 01:20:12 +00:00
|
|
|
enabled = (m_supportType[m_suffix].attr & FILE_TYPE_ATTR_MORE_OPTIONS) == FILE_TYPE_ATTR_MORE_OPTIONS;
|
2022-05-26 08:25:55 +00:00
|
|
|
// ui->btn_option->setEnabled(0 == m_suffix || 3 == m_suffix);
|
|
|
|
ui->btn_option->setEnabled(enabled);
|
2023-02-17 01:20:12 +00:00
|
|
|
m_saveExt = m_supportType[m_suffix].ext;
|
2022-05-03 10:25:52 +00:00
|
|
|
}
|
|
|
|
|
2024-01-09 03:08:52 +00:00
|
|
|
void Dialog_Export::on_currentChanged(const QString& filePath)
|
|
|
|
{
|
|
|
|
QFileInfo file(filePath);
|
|
|
|
if (file.isDir())
|
|
|
|
{
|
|
|
|
ui->fileDialog->setAcceptMode(QFileDialog::AcceptOpen);
|
|
|
|
ui->fileDialog->setLabelText(QFileDialog::Accept, QFileDialog::tr("&Open"));
|
|
|
|
QObjectList objs(ui->fileDialog->children());
|
|
|
|
for (auto& o : objs)
|
|
|
|
{
|
|
|
|
if ("fileNameEdit" == o->objectName())
|
|
|
|
{
|
|
|
|
QLineEdit* edit = (QLineEdit*)o;
|
|
|
|
QString hhhh = edit->text();
|
|
|
|
edit->setText("");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ui->fileDialog->setAcceptMode(QFileDialog::AcceptSave);
|
|
|
|
ui->fileDialog->setLabelText(QFileDialog::Accept, QFileDialog::tr("&Save"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
void Dialog_Export::on_btn_option_clicked()
|
|
|
|
{
|
2022-05-13 12:38:58 +00:00
|
|
|
Dialog_WriteSettings dlg(m_suffix, this);
|
|
|
|
dlg.exec();
|
2022-05-03 10:25:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Dialog_Export::on_radio_nominatedPages_toggled(bool checked)
|
|
|
|
{
|
|
|
|
ui->lab_nominatePages->setEnabled(checked);
|
|
|
|
ui->lineEdit_nominatePages->setEnabled(checked);
|
|
|
|
if (!checked)
|
|
|
|
{
|
|
|
|
ui->lab_warning->setVisible(false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
bool isVaild = isNominatedPagesLegal(ui->lineEdit_nominatePages->text());
|
|
|
|
ui->lab_warning->setVisible(!isVaild);
|
|
|
|
if (!isVaild)
|
|
|
|
ui->lab_warning->setText(tr("Input is not valid.\nPage range will be 'Chosen Pages'."));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Dialog_Export::on_lineEdit_nominatePages_textChanged(const QString& arg1)
|
|
|
|
{
|
|
|
|
(void)arg1;
|
|
|
|
|
|
|
|
bool isVaild = isNominatedPagesLegal(ui->lineEdit_nominatePages->text());
|
|
|
|
ui->lab_warning->setVisible(!isVaild);
|
|
|
|
if (!isVaild)
|
|
|
|
ui->lab_warning->setText(tr("Input is not valid.\nPage range will be 'Chosen Pages'."));
|
|
|
|
}
|
|
|
|
|
2023-12-05 09:50:02 +00:00
|
|
|
void Dialog_Export::on_editingFinished()
|
|
|
|
{
|
|
|
|
QString extName;
|
|
|
|
switch (m_suffix)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
extName = ".jpg";
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
extName = ".bmp";
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
extName = ".png";
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
extName = ".ppm";
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
extName = ".pgm";
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
extName = ".pbm";
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
extName = ".tif";
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
extName = ".pdf";
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
extName = ".ofd";
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
extName = ".gif";
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
extName = ".pdf";
|
|
|
|
break;
|
|
|
|
case 11:
|
|
|
|
extName = ".ofd";
|
|
|
|
break;
|
|
|
|
case 12:
|
|
|
|
extName = ".rtf";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
QLineEdit* lineEdit = qobject_cast<QLineEdit*>(sender());
|
|
|
|
QString fileName = lineEdit->text();
|
|
|
|
|
|
|
|
if (!fileName.endsWith(extName))
|
|
|
|
{
|
|
|
|
lineEdit->setText(fileName + extName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-05-25 08:52:55 +00:00
|
|
|
#ifdef USE_FILE_DLG_WITHOUT_PROMPT
|
|
|
|
void Dialog_Export::on_file_dialog_textChanged(const QString &path)
|
|
|
|
{
|
|
|
|
QLineEdit* edit = dynamic_cast<QLineEdit*>(sender());
|
|
|
|
|
|
|
|
on_file_name_changed(edit, path);
|
|
|
|
}
|
|
|
|
void Dialog_Export::on_file_dialog_returnPressed()
|
|
|
|
{
|
|
|
|
on_file_name_press_return();
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2022-05-03 10:25:52 +00:00
|
|
|
bool Dialog_Export::isNominatedPagesLegal(const QString& page)
|
|
|
|
{
|
|
|
|
if (page.isEmpty())
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
QStringList commalist = page.split(',');
|
|
|
|
for (int i = 0; i < commalist.size(); ++i)
|
|
|
|
{
|
|
|
|
QString number1, number2;
|
|
|
|
bool setNumber2 = false;
|
|
|
|
for (int j = 0; j < commalist[i].size(); j++)
|
|
|
|
{
|
|
|
|
if (number1.isEmpty() && number2.isEmpty())
|
|
|
|
{
|
|
|
|
if (commalist[i][j] == '-')
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
number1.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!number1.isEmpty() && number2.isEmpty())
|
|
|
|
{
|
|
|
|
if (commalist[i][j] == '-')
|
|
|
|
{
|
|
|
|
if (setNumber2)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
setNumber2 = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!setNumber2)
|
|
|
|
{
|
|
|
|
number1.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
number2.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
assert(!number1.isEmpty() && !number2.isEmpty());
|
|
|
|
|
|
|
|
assert(setNumber2);
|
|
|
|
if (commalist[i][j] == '-')
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
number2.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (number1.isEmpty())
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (setNumber2 && number2.isEmpty())
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!number1.isEmpty() && number2.isEmpty())
|
|
|
|
{
|
|
|
|
int num1 = number1.toInt();
|
|
|
|
if (num1 < 1 || num1 > m_total)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
assert(!number1.isEmpty() && !number2.isEmpty());
|
|
|
|
|
|
|
|
int num1 = number1.toInt();
|
|
|
|
int num2 = number2.toInt();
|
|
|
|
if (num1 < 1 || num1 > m_total || num2 < 1 || num2 > m_total || num1 > num2)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool indexSortCompare(int iter1, int iter2)
|
|
|
|
{
|
|
|
|
return iter1 < iter2;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool indexUniqueCompare(int iter1, int iter2)
|
|
|
|
{
|
|
|
|
return iter1 == iter2;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Dialog_Export::makeSaveIndexs()
|
|
|
|
{
|
|
|
|
if (ui->radio_chosenPages->isChecked())
|
|
|
|
{
|
|
|
|
m_saveIndexs = m_selectedIndexs;
|
|
|
|
}
|
|
|
|
else if (ui->radio_allPages->isChecked())
|
|
|
|
{
|
|
|
|
for (int i = 0; i < m_total; ++i)
|
|
|
|
{
|
|
|
|
m_saveIndexs.push_back(i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
assert(ui->radio_nominatedPages->isChecked());
|
|
|
|
|
|
|
|
QString page = ui->lineEdit_nominatePages->text();
|
|
|
|
if (!page.isEmpty())
|
|
|
|
{
|
|
|
|
bool success = true;
|
|
|
|
QStringList commalist = page.split(',');
|
|
|
|
for (int i = 0; i < commalist.size(); ++i)
|
|
|
|
{
|
|
|
|
bool ret = true;
|
|
|
|
|
|
|
|
QString number1, number2;
|
|
|
|
bool setNumber2 = false;
|
|
|
|
for (int j = 0; j < commalist[i].size(); j++)
|
|
|
|
{
|
|
|
|
if (number1.isEmpty() && number2.isEmpty())
|
|
|
|
{
|
|
|
|
if (commalist[i][j] == '-')
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
number1.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!number1.isEmpty() && number2.isEmpty())
|
|
|
|
{
|
|
|
|
if (commalist[i][j] == '-')
|
|
|
|
{
|
|
|
|
if (setNumber2)
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
setNumber2 = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!setNumber2)
|
|
|
|
{
|
|
|
|
number1.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
number2.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
assert(!number1.isEmpty() && !number2.isEmpty());
|
|
|
|
|
|
|
|
assert(setNumber2);
|
|
|
|
if (commalist[i][j] == '-')
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
number2.append(commalist[i][j]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!ret)
|
|
|
|
{
|
|
|
|
success = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (number1.isEmpty())
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (setNumber2 && number2.isEmpty())
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!number1.isEmpty() && number2.isEmpty())
|
|
|
|
{
|
|
|
|
int num1 = number1.toInt();
|
|
|
|
if (num1 < 1 || num1 > m_total)
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2022-10-22 01:32:42 +00:00
|
|
|
m_saveIndexs.push_back(num1 - 1);
|
2022-05-03 10:25:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
assert(!number1.isEmpty() && !number2.isEmpty());
|
|
|
|
|
|
|
|
int num1 = number1.toInt();
|
|
|
|
int num2 = number2.toInt();
|
|
|
|
if (num1 < 1 || num1 > m_total || num2 < 1 || num2 > m_total || num1 > num2)
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (int k = num1; k <= num2; ++k)
|
|
|
|
{
|
2022-10-22 01:32:42 +00:00
|
|
|
m_saveIndexs.push_back(k - 1);
|
2022-05-03 10:25:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!ret)
|
|
|
|
{
|
|
|
|
success = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!success)
|
|
|
|
{
|
|
|
|
m_saveIndexs = m_selectedIndexs;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_saveIndexs = m_selectedIndexs;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 排序和去重
|
|
|
|
std::sort(m_saveIndexs.begin(), m_saveIndexs.end(), indexSortCompare);
|
|
|
|
std::vector<int>::iterator iter = std::unique(m_saveIndexs.begin(), m_saveIndexs.end(), indexUniqueCompare);
|
|
|
|
m_saveIndexs.erase(iter, m_saveIndexs.end());
|
|
|
|
}
|
2022-05-26 08:25:55 +00:00
|
|
|
|
|
|
|
bool Dialog_Export::is_support_file_type(const QString& ext)
|
|
|
|
{
|
2023-02-17 01:20:12 +00:00
|
|
|
return ext.compare(m_supportType[m_suffix].ext, Qt::CaseInsensitive) == 0;
|
2022-05-26 08:25:55 +00:00
|
|
|
|
2023-02-17 01:20:12 +00:00
|
|
|
for(int i = 0; i < m_supportType.size(); ++i)
|
2022-05-26 08:25:55 +00:00
|
|
|
{
|
2023-02-17 01:20:12 +00:00
|
|
|
if(ext.compare(m_supportType[i].ext, Qt::CaseInsensitive) == 0)
|
2022-05-26 08:25:55 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
bool Dialog_Export::avoid_overwriting(const QString& path_file)
|
|
|
|
{
|
|
|
|
return false; // 不能阻止文件对话框关闭,暂时不做处理
|
|
|
|
|
|
|
|
bool ret = false;
|
|
|
|
QFileInfo fi(path_file);
|
|
|
|
|
|
|
|
if(fi.exists())
|
|
|
|
{
|
|
|
|
// 单个文件才判断
|
|
|
|
if((ui->radio_allPages->isChecked() && m_total == 1) ||
|
|
|
|
(ui->radio_chosenPages->isChecked() && m_saveIndexs.size() == 1) ||
|
|
|
|
(ui->radio_nominatedPages->isChecked() && m_saveIndexs.size() == 1))
|
|
|
|
{
|
|
|
|
QString title(QString::fromStdString("\345\257\274\345\207\272\344\270\272")), info("");
|
|
|
|
int pos = path_file.lastIndexOf('/');
|
|
|
|
|
|
|
|
if(pos++ == -1)
|
|
|
|
info = path_file;
|
|
|
|
else
|
|
|
|
info = path_file.right(path_file.length() - pos);
|
|
|
|
info += QString::fromStdString("\345\267\262\347\273\217\345\255\230\345\234\250\357\274\214\n\346\202\250\346\203\263\350\246\201\346\233\277\346\215\242\345\256\203\345\220\227\357\274\237");
|
|
|
|
ret = QMessageBox::question(this, title, info) == QMessageBox::No;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|