scantool:将配置保存到数据库

This commit is contained in:
luoliangyi 2024-04-30 17:16:13 +08:00
parent 36c29a56d5
commit dfd4e2e565
11 changed files with 565 additions and 282 deletions

View File

@ -1,20 +0,0 @@
#include "HGUIGlobal.h"
#include "base/HGDef.h"
#include "base/HGInc.h"
#include "base/HGUtility.h"
QString getStdFileName(const QString &fileName)
{
char result[512] = {0};
HGBase_StandardiseFileName(fileName.toStdString().c_str(), result, 512);
return result;
}
std::string getStdString(const QString &str)
{
#ifdef HG_CMP_MSC
return str.toLocal8Bit().data();
#else
return str.toStdString();
#endif
}

View File

@ -1,10 +0,0 @@
#ifndef __HGUIGLOBAL_H__
#define __HGUIGLOBAL_H__
#include <QString>
QString getStdFileName(const QString &fileName);
std::string getStdString(const QString &str);
#endif /* __HGUIGLOBAL_H__ */

View File

@ -1,70 +0,0 @@
#include "app_cfg.h"
#include "base/HGDef.h"
#include "base/HGInc.h"
#include "base/HGUtility.h"
#include "base/HGIni.h"
#include "HGUIGlobal.h"
#include "HGString.h"
QString getCfgValue(const char *appName, const char *key, const QString &def)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
strcat(cfgPath, "config.ini");
HGChar value[512] = {0};
HGBase_GetProfileString(cfgPath, appName, key, getStdString(def).c_str(), value, 512);
return StdStringToUtf8(value).c_str();
}
int getCfgValue(const char *appName, const char *key, int def)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
strcat(cfgPath, "config.ini");
HGInt value = 0;
HGBase_GetProfileInt(cfgPath, appName, key, def, &value);
return value;
}
bool getCfgValue(const char *appName, const char *key, bool def)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
strcat(cfgPath, "config.ini");
HGInt value = 0;
HGBase_GetProfileInt(cfgPath, appName, key, (HGInt)def, &value);
return (bool)value;
}
void saveCfgValue(const char *appName, const char *key, const QString &value)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
HGBase_CreateDir(cfgPath);
strcat(cfgPath, "config.ini");
HGBase_SetProfileString(cfgPath, appName, key, getStdString(value).c_str());
}
void saveCfgValue(const char *appName, const char *key, int value)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
HGBase_CreateDir(cfgPath);
strcat(cfgPath, "config.ini");
HGBase_SetProfileInt(cfgPath, appName, key, value);
}
void saveCfgValue(const char *appName, const char *key, bool value)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
HGBase_CreateDir(cfgPath);
strcat(cfgPath, "config.ini");
HGBase_SetProfileInt(cfgPath, appName, key, (HGInt)value);
}

View File

@ -1,14 +0,0 @@
#ifndef __APP_CFG_H__
#define __APP_CFG_H__
#include <QString>
QString getCfgValue(const char *appName, const char *key, const QString &def);
int getCfgValue(const char *appName, const char *key, int def);
bool getCfgValue(const char *appName, const char *key, bool def);
void saveCfgValue(const char *appName, const char *key, const QString &value);
void saveCfgValue(const char *appName, const char *key, int value);
void saveCfgValue(const char *appName, const char *key, bool value);
#endif /* __APP_CFG_H__ */

View File

@ -1,6 +1,5 @@
#include "dialog_writesettings.h"
#include "ui_dialog_writesettings.h"
#include "app_cfg.h"
Dialog_WriteSettings::Dialog_WriteSettings(int suffix_type, const WriteParam &writeParam, QWidget *parent)
: QDialog(parent)
@ -24,11 +23,11 @@ Dialog_WriteSettings::Dialog_WriteSettings(int suffix_type, const WriteParam &wr
ui->spin_jpg_quality->setVisible(jpg_enable);
//set value
ui->slider_jpg_quality->setValue(writeParam.m_jpegQuality);
ui->spin_jpg_quality->setValue(writeParam.m_jpegQuality);
ui->cbox_tif_bw->setCurrentIndex(writeParam.m_tiffCompressionBW);
ui->cbox_tif_color->setCurrentIndex(writeParam.m_tiffCompression);
ui->spin_tif_quality->setValue(writeParam.m_tiffQuality);
ui->slider_jpg_quality->setValue(writeParam.jpegQuality);
ui->spin_jpg_quality->setValue(writeParam.jpegQuality);
ui->cbox_tif_bw->setCurrentIndex(writeParam.tiffCompressionBW);
ui->cbox_tif_color->setCurrentIndex(writeParam.tiffCompression);
ui->spin_tif_quality->setValue(writeParam.tiffQuality);
//set enable
ui->spin_tif_quality->setEnabled(ui->cbox_tif_color->currentIndex() == 2);
@ -44,10 +43,10 @@ Dialog_WriteSettings::~Dialog_WriteSettings()
WriteParam Dialog_WriteSettings::GetWriteParam()
{
WriteParam writeParam;
writeParam.m_jpegQuality = ui->spin_jpg_quality->value();
writeParam.m_tiffCompressionBW = ui->cbox_tif_bw->currentIndex();
writeParam.m_tiffCompression = ui->cbox_tif_color->currentIndex();
writeParam.m_tiffQuality = ui->spin_tif_quality->value();
writeParam.jpegQuality = ui->spin_jpg_quality->value();
writeParam.tiffCompressionBW = ui->cbox_tif_bw->currentIndex();
writeParam.tiffCompression = ui->cbox_tif_color->currentIndex();
writeParam.tiffQuality = ui->spin_tif_quality->value();
return writeParam;
}

View File

@ -10,10 +10,10 @@ class Dialog_WriteSettings;
struct WriteParam
{
int m_jpegQuality;
int m_tiffCompressionBW;
int m_tiffCompression;
int m_tiffQuality;
int jpegQuality;
int tiffCompressionBW;
int tiffCompression;
int tiffQuality;
};
class Dialog_WriteSettings : public QDialog

View File

@ -5,9 +5,6 @@
#include "base/HGInc.h"
#include "base/HGUtility.h"
#include "base/HGIni.h"
#include "HGUIGlobal.h"
#include "HGString.h"
#include "app_cfg.h"
Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
: QWidget(parent)
@ -18,21 +15,21 @@ Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
QRegExp rx("[^\\\\/:*?\"<>|]+$");
ui->lineEdit_fileName->setValidator(new QRegExpValidator(rx, this));
ui->lineEdit_directory->setText(saveParam.m_savePath);
ui->cbtn_subFolder->setChecked(saveParam.m_isUseSubfolderByTime);
ui->cbtn_subFolderByBlank->setChecked(saveParam.m_isUseSubfolderByBlankPages);
ui->cbtn_subFolderByColor->setChecked(saveParam.m_isUseSubfolderByColor);
ui->lineEdit_fileName->setText(saveParam.m_fileNamePrefix);
ui->lineEdit_directory->setText(QString::fromLocal8Bit(saveParam.savePath.c_str()));
ui->cbtn_subFolder->setChecked(saveParam.isUseSubfolderByTime);
ui->cbtn_subFolderByBlank->setChecked(saveParam.isUseSubfolderByBlankPages);
ui->cbtn_subFolderByColor->setChecked(saveParam.isUseSubfolderByColor);
ui->lineEdit_fileName->setText(QString::fromLocal8Bit(saveParam.fileNamePrefix.c_str()));
ui->spin_index->setValue(saveParam.m_fileNameStartIndex);
ui->cbox_digit->setCurrentIndex(saveParam.m_fileNameDigits - 1);
ui->cbox_evenOdd->setCurrentIndex(saveParam.m_fileNameOddEventType);
int format = getFormatIndex(saveParam.m_fileNameExt, saveParam.m_isOcr);
ui->spin_index->setValue(saveParam.fileNameStartIndex);
ui->cbox_digit->setCurrentIndex(saveParam.fileNameDigits - 1);
ui->cbox_evenOdd->setCurrentIndex(saveParam.fileNameOddEvenType);
int format = getFormatIndex(saveParam.fileNameExt, saveParam.isOcr);
ui->cbox_format->setCurrentIndex(format);
ui->cbtn_multiFile->setChecked(saveParam.m_isSaveAsMultiPage);
ui->radio_multiAll->setChecked(0 == saveParam.m_multiPagesType);
ui->radio_multiCustom->setChecked(0 != saveParam.m_multiPagesType);
ui->spinBox_multiPages->setValue(saveParam.m_customMultiPages);
ui->cbtn_multiFile->setChecked(saveParam.isSaveAsMultiPage);
ui->radio_multiAll->setChecked(0 == saveParam.multiPagesType);
ui->radio_multiCustom->setChecked(0 != saveParam.multiPagesType);
ui->spinBox_multiPages->setValue(saveParam.customMultiPages);
ui->lab_digitExp->setText(QString(tr("e.g. '%1%2'")).arg(ui->lineEdit_fileName->text())
.arg(ui->spin_index->value(), ui->cbox_digit->currentIndex() + 1, 10, QLatin1Char('0')));
@ -51,10 +48,10 @@ Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
ui->cbox_format->removeItem(10);
#endif
m_writeParam.m_jpegQuality = saveParam.m_jpegQuality;
m_writeParam.m_tiffCompressionBW = saveParam.m_tiffCompressionBW;
m_writeParam.m_tiffCompression = saveParam.m_tiffCompression;
m_writeParam.m_tiffQuality = saveParam.m_tiffQuality;
m_writeParam.jpegQuality = saveParam.jpegQuality;
m_writeParam.tiffCompressionBW = saveParam.tiffCompressionBW;
m_writeParam.tiffCompression = saveParam.tiffCompression;
m_writeParam.tiffQuality = saveParam.tiffQuality;
}
Form_SaveParam::~Form_SaveParam()
@ -65,20 +62,20 @@ Form_SaveParam::~Form_SaveParam()
SaveParam Form_SaveParam::GetSaveParam()
{
SaveParam saveParam;
saveParam.m_savePath = ui->lineEdit_directory->text();
saveParam.m_isUseSubfolderByTime = ui->cbtn_subFolder->isChecked();
saveParam.m_isUseSubfolderByBlankPages = ui->cbtn_subFolderByBlank->isChecked();
saveParam.m_isUseSubfolderByColor = ui->cbtn_subFolderByColor->isChecked();
saveParam.m_jpegQuality = m_writeParam.m_jpegQuality;
saveParam.m_tiffCompressionBW = m_writeParam.m_tiffCompressionBW;
saveParam.m_tiffCompression = m_writeParam.m_tiffCompression;
saveParam.m_tiffQuality = m_writeParam.m_tiffQuality;
saveParam.m_fileNamePrefix = ui->lineEdit_fileName->text();
saveParam.m_fileNameStartIndex = ui->spin_index->value();
saveParam.m_fileNameDigits = ui->cbox_digit->currentIndex() + 1;
saveParam.m_fileNameOddEventType = ui->cbox_evenOdd->currentIndex();
saveParam.savePath = ui->lineEdit_directory->text().toLocal8Bit().toStdString();
saveParam.isUseSubfolderByTime = ui->cbtn_subFolder->isChecked();
saveParam.isUseSubfolderByBlankPages = ui->cbtn_subFolderByBlank->isChecked();
saveParam.isUseSubfolderByColor = ui->cbtn_subFolderByColor->isChecked();
saveParam.jpegQuality = m_writeParam.jpegQuality;
saveParam.tiffCompressionBW = m_writeParam.tiffCompressionBW;
saveParam.tiffCompression = m_writeParam.tiffCompression;
saveParam.tiffQuality = m_writeParam.tiffQuality;
saveParam.fileNamePrefix = ui->lineEdit_fileName->text().toLocal8Bit().toStdString();
saveParam.fileNameStartIndex = ui->spin_index->value();
saveParam.fileNameDigits = ui->cbox_digit->currentIndex() + 1;
saveParam.fileNameOddEvenType = ui->cbox_evenOdd->currentIndex();
QString format = "jpg";
std::string format = "jpg";
switch (ui->cbox_format->currentIndex())
{
case 1:
@ -117,12 +114,12 @@ SaveParam Form_SaveParam::GetSaveParam()
default:
break;
}
saveParam.m_fileNameExt = format;
saveParam.m_isOcr = (ui->cbox_format->currentIndex() >= 10);
saveParam.fileNameExt = format;
saveParam.isOcr = (ui->cbox_format->currentIndex() >= 10);
saveParam.m_isSaveAsMultiPage = ui->cbtn_multiFile->isChecked();
saveParam.m_multiPagesType = (ui->radio_multiAll->isChecked()) ? 0 : 1;
saveParam.m_customMultiPages = ui->spinBox_multiPages->value();
saveParam.isSaveAsMultiPage = ui->cbtn_multiFile->isChecked();
saveParam.multiPagesType = (ui->radio_multiAll->isChecked()) ? 0 : 1;
saveParam.customMultiPages = ui->spinBox_multiPages->value();
return saveParam;
}
@ -134,50 +131,53 @@ SaveParam Form_SaveParam::GetDefSaveParam()
HGChar procName[512];
HGBase_GetProcessName(procName, 512);
strcat(aquireIntoPath, procName);
strcat(aquireIntoPath, "/AquireInto/");
QString filePath = getStdFileName(StdStringToUtf8(aquireIntoPath).c_str());
SaveParam saveParam;
saveParam.m_savePath = filePath;
saveParam.m_isUseSubfolderByTime = false;
saveParam.m_isUseSubfolderByBlankPages = false;
saveParam.m_isUseSubfolderByColor = false;
saveParam.m_jpegQuality = 80;
saveParam.m_tiffCompressionBW = 1;
saveParam.m_tiffCompression = 1;
saveParam.m_tiffQuality = 80;
#if defined(OEM_HANWANG)
saveParam.m_fileNamePrefix = QString("HWScan");
#elif defined(OEM_LISICHENG)
saveParam.m_fileNamePrefix = QString("LXScan");
#elif defined(OEM_CANGTIAN)
saveParam.m_fileNamePrefix = QString("CTSScan");
#elif defined(OEM_ZHONGJING)
saveParam.m_fileNamePrefix = QString("ZJScan");
#elif defined(OEM_ZIGUANG)
saveParam.m_fileNamePrefix = QString("ZGScan");
#elif defined(OEM_NEUTRAL)
saveParam.m_fileNamePrefix = QString("Scan");
#elif defined(OEM_DELI)
saveParam.m_fileNamePrefix = QString("DLScan");
#if defined(HG_CMP_MSC)
strcat(aquireIntoPath, "\\AquireInto\\");
#else
saveParam.m_fileNamePrefix = QString("HGScan");
strcat(aquireIntoPath, "/AquireInto/");
#endif
saveParam.m_fileNameStartIndex = 1;
saveParam.m_fileNameDigits = 3;
saveParam.m_fileNameOddEventType = 0;
saveParam.m_fileNameExt = QString("jpg");
saveParam.m_isOcr = false;
saveParam.m_isSaveAsMultiPage = false;
saveParam.m_multiPagesType = 0;
saveParam.m_customMultiPages = 1;
SaveParam saveParam;
saveParam.savePath = aquireIntoPath;
saveParam.isUseSubfolderByTime = false;
saveParam.isUseSubfolderByBlankPages = false;
saveParam.isUseSubfolderByColor = false;
saveParam.jpegQuality = 80;
saveParam.tiffCompressionBW = 1;
saveParam.tiffCompression = 1;
saveParam.tiffQuality = 80;
#if defined(OEM_HANWANG)
saveParam.fileNamePrefix = "HWScan";
#elif defined(OEM_LISICHENG)
saveParam.fileNamePrefix = "LXScan";
#elif defined(OEM_CANGTIAN)
saveParam.fileNamePrefix = "CTSScan";
#elif defined(OEM_ZHONGJING)
saveParam.fileNamePrefix = "ZJScan";
#elif defined(OEM_ZIGUANG)
saveParam.fileNamePrefix = "ZGScan";
#elif defined(OEM_NEUTRAL)
saveParam.fileNamePrefix = "Scan";
#elif defined(OEM_DELI)
saveParam.fileNamePrefix = "DLScan";
#else
saveParam.fileNamePrefix = "HGScan";
#endif
saveParam.fileNameStartIndex = 1;
saveParam.fileNameDigits = 3;
saveParam.fileNameOddEvenType = 0;
saveParam.fileNameExt = "jpg";
saveParam.isOcr = false;
saveParam.isSaveAsMultiPage = false;
saveParam.multiPagesType = 0;
saveParam.customMultiPages = 1;
return saveParam;
}
int Form_SaveParam::getFormatIndex(const QString &ext, bool ocr)
int Form_SaveParam::getFormatIndex(const std::string &ext, bool ocr)
{
if (ext == "bmp")
return 1;
@ -207,7 +207,10 @@ void Form_SaveParam::on_btn_directory_clicked()
{
if (save_dir[save_dir.size() - 1] != '/')
save_dir += "/";
ui->lineEdit_directory->setText(getStdFileName(save_dir));
char result[512] = {0};
HGBase_StandardiseFileName(save_dir.toStdString().c_str(), result, 512);
ui->lineEdit_directory->setText(QString::fromStdString(result));
}
}

View File

@ -2,6 +2,7 @@
#define FORM_SAVEPARAM_H
#include <QWidget>
#include <string>
#include "dialog_writesettings.h"
namespace Ui {
@ -10,23 +11,23 @@ class Form_SaveParam;
struct SaveParam
{
QString m_savePath;
bool m_isUseSubfolderByTime;
bool m_isUseSubfolderByBlankPages;
bool m_isUseSubfolderByColor;
int m_jpegQuality;
int m_tiffCompressionBW;
int m_tiffCompression;
int m_tiffQuality;
QString m_fileNamePrefix;
int m_fileNameStartIndex;
int m_fileNameDigits;
int m_fileNameOddEventType;
QString m_fileNameExt;
bool m_isOcr;
bool m_isSaveAsMultiPage;
int m_multiPagesType;
int m_customMultiPages;
std::string savePath;
bool isUseSubfolderByTime;
bool isUseSubfolderByBlankPages;
bool isUseSubfolderByColor;
int jpegQuality;
int tiffCompressionBW;
int tiffCompression;
int tiffQuality;
std::string fileNamePrefix;
int fileNameStartIndex;
int fileNameDigits;
int fileNameOddEvenType;
std::string fileNameExt;
bool isOcr;
bool isSaveAsMultiPage;
int multiPagesType;
int customMultiPages;
};
class Form_SaveParam : public QWidget
@ -41,7 +42,7 @@ public:
static SaveParam GetDefSaveParam();
private:
int getFormatIndex(const QString &ext, bool ocr);
int getFormatIndex(const std::string &ext, bool ocr);
private slots:
void on_btn_directory_clicked();

View File

@ -8,9 +8,11 @@
#include "base/HGUtility.h"
#include "imgproc/HGImgProc.h"
#include "imgproc/HGOCR.h"
#include "HGUIGlobal.h"
#include "dialog_scaninfo.h"
#include "form_saveparam.h"
#include "sqlite3.h"
#include "cJSON.h"
#include "HGString.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
@ -55,7 +57,7 @@ MainWindow::MainWindow(QWidget *parent)
ui->tableWidget->horizontalHeader()->setFixedHeight(40);
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Device Type"));
ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Button Type"));
ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Button Id"));
ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Device Config"));
ui->tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Save Param"));
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
@ -158,36 +160,416 @@ void MainWindow::StopScan()
}
}
std::vector<DeviceConfig> MainWindow::MakeDeviceConfigs(const std::string &str)
{
std::vector<DeviceConfig> deviceConfigs;
cJSON* json = cJSON_Parse(str.c_str());
if (NULL != json)
{
cJSON* p = json->child;
while (NULL != p)
{
if (0 != strcmp(p->string, "device_configs"))
{
p = p->next;
continue;
}
if (p->type != cJSON_Array)
{
break;
}
cJSON* pEx = p->child;
while (NULL != pEx)
{
if (pEx->type != cJSON_Object)
{
pEx = pEx->next;
continue;
}
std::string name;
int valueType = 0;
std::string stringValue;
int intValue = 0;
double doubleValue = 0;
bool boolValue = false;
cJSON* pEx2 = pEx->child;
while (NULL != pEx2)
{
if (0 == strcmp(pEx2->string, "name") && pEx2->type == cJSON_String)
{
name = pEx2->valuestring;
}
else if (0 == strcmp(pEx2->string, "value"))
{
if (pEx2->type == cJSON_String)
{
stringValue = pEx2->valuestring;
}
else if (pEx2->type == cJSON_Number)
{
intValue = pEx2->valueint;
doubleValue = pEx2->valuedouble;
}
else if (pEx2->type == cJSON_True)
{
boolValue = true;
}
else if (pEx2->type == cJSON_False)
{
boolValue = false;
}
}
else if (0 == strcmp(pEx2->string, "value_type") && pEx2->type == cJSON_Number)
{
valueType = pEx2->valueint;
}
pEx2 = pEx2->next;
}
DeviceConfig deviceConfig;
deviceConfig.name = name;
deviceConfig.valueType = valueType;
if (1 == deviceConfig.valueType)
deviceConfig.stringValue = stringValue;
else if (2 == deviceConfig.valueType)
deviceConfig.intValue = intValue;
else if (3 == deviceConfig.valueType)
deviceConfig.doubleValue = doubleValue;
else if (4 == deviceConfig.valueType)
deviceConfig.boolValue = boolValue;
deviceConfigs.push_back(deviceConfig);
pEx = pEx->next;
}
break;
}
cJSON_Delete(json);
}
return deviceConfigs;
}
std::string MainWindow::GetDeviceConfigsStr(const std::vector<DeviceConfig> &deviceConfigs)
{
std::string str;
cJSON* json = cJSON_CreateObject();
if (NULL != json)
{
cJSON* array = cJSON_CreateArray();
for (int i = 0; i < deviceConfigs.size(); ++i)
{
cJSON* obj = cJSON_CreateObject();
cJSON_AddItemToObject(obj, "name", cJSON_CreateString(deviceConfigs[i].name.c_str()));
cJSON_AddItemToObject(obj, "value_type", cJSON_CreateNumber(deviceConfigs[i].valueType));
if (1 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", cJSON_CreateString(deviceConfigs[i].stringValue.c_str()));
}
else if (2 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", cJSON_CreateNumber(deviceConfigs[i].intValue));
}
else if (3 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", cJSON_CreateNumber(deviceConfigs[i].doubleValue));
}
else if (4 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", deviceConfigs[i].boolValue ? cJSON_CreateTrue() : cJSON_CreateFalse());
}
cJSON_AddItemToArray(array, obj);
}
cJSON_AddItemToObject(json, "device_configs", array);
char* resp = cJSON_Print(json);
if (NULL != resp)
{
str = resp;
free(resp);
}
cJSON_Delete(json);
}
return str;
}
SaveParam MainWindow::MakeSaveParam(const std::string &str)
{
SaveParam saveParam = Form_SaveParam::GetDefSaveParam();
cJSON* json = cJSON_Parse(str.c_str());
if (NULL != json)
{
cJSON* p = json->child;
while (NULL != p)
{
if (0 != strcmp(p->string, "save_param"))
{
p = p->next;
continue;
}
if (p->type != cJSON_Object)
{
break;
}
cJSON* pEx = p->child;
while (NULL != pEx)
{
if (0 == strcmp(pEx->string, "save_path") && pEx->type == cJSON_String)
{
saveParam.savePath = Utf8ToStdString(pEx->valuestring);
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_time") && pEx->type == cJSON_True)
{
saveParam.isUseSubfolderByTime = true;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_time") && pEx->type == cJSON_False)
{
saveParam.isUseSubfolderByTime = false;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_blank_pages") && pEx->type == cJSON_True)
{
saveParam.isUseSubfolderByBlankPages = true;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_blank_pages") && pEx->type == cJSON_False)
{
saveParam.isUseSubfolderByBlankPages = false;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_color") && pEx->type == cJSON_True)
{
saveParam.isUseSubfolderByColor = true;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_color") && pEx->type == cJSON_False)
{
saveParam.isUseSubfolderByColor = false;
}
else if (0 == strcmp(pEx->string, "jpeg_quality") && pEx->type == cJSON_Number)
{
saveParam.jpegQuality = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "tiff_compression_bw") && pEx->type == cJSON_Number)
{
saveParam.tiffCompressionBW = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "tiff_compression") && pEx->type == cJSON_Number)
{
saveParam.tiffCompression = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "tiff_quality") && pEx->type == cJSON_Number)
{
saveParam.tiffQuality = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_prefix") && pEx->type == cJSON_String)
{
saveParam.fileNamePrefix = Utf8ToStdString(pEx->valuestring);
}
else if (0 == strcmp(pEx->string, "filename_start_index") && pEx->type == cJSON_Number)
{
saveParam.fileNameStartIndex = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_digits") && pEx->type == cJSON_Number)
{
saveParam.fileNameDigits = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_odd_even_type") && pEx->type == cJSON_Number)
{
saveParam.fileNameOddEvenType = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_ext") && pEx->type == cJSON_String)
{
saveParam.fileNameExt = Utf8ToStdString(pEx->valuestring);
}
else if (0 == strcmp(pEx->string, "ocr") && pEx->type == cJSON_True)
{
saveParam.isOcr = true;
}
else if (0 == strcmp(pEx->string, "ocr") && pEx->type == cJSON_False)
{
saveParam.isOcr = false;
}
else if (0 == strcmp(pEx->string, "save_as_multi_page") && pEx->type == cJSON_True)
{
saveParam.isSaveAsMultiPage = true;
}
else if (0 == strcmp(pEx->string, "save_as_multi_page") && pEx->type == cJSON_False)
{
saveParam.isSaveAsMultiPage = false;
}
else if (0 == strcmp(pEx->string, "multi_pages_type") && pEx->type == cJSON_Number)
{
saveParam.multiPagesType = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "custom_multi_pages") && pEx->type == cJSON_Number)
{
saveParam.customMultiPages = pEx->valueint;
}
pEx = pEx->next;
}
break;
}
cJSON_Delete(json);
}
return saveParam;
}
std::string MainWindow::GetSaveParamStr(const SaveParam &saveParam)
{
std::string str;
cJSON* json = cJSON_CreateObject();
if (NULL != json)
{
cJSON* obj = cJSON_CreateObject();
cJSON_AddItemToObject(obj, "save_path", cJSON_CreateString(StdStringToUtf8(saveParam.savePath).c_str()));
cJSON_AddItemToObject(obj, "use_subfolder_by_time", saveParam.isUseSubfolderByTime ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "use_subfolder_by_blank_pages", saveParam.isUseSubfolderByBlankPages ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "use_subfolder_by_color", saveParam.isUseSubfolderByColor ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "jpeg_quality", cJSON_CreateNumber(saveParam.jpegQuality));
cJSON_AddItemToObject(obj, "tiff_compression_bw", cJSON_CreateNumber(saveParam.tiffCompressionBW));
cJSON_AddItemToObject(obj, "tiff_compression", cJSON_CreateNumber(saveParam.tiffCompression));
cJSON_AddItemToObject(obj, "tiff_quality", cJSON_CreateNumber(saveParam.tiffQuality));
cJSON_AddItemToObject(obj, "filename_prefix", cJSON_CreateString(StdStringToUtf8(saveParam.fileNamePrefix).c_str()));
cJSON_AddItemToObject(obj, "filename_start_index", cJSON_CreateNumber(saveParam.fileNameStartIndex));
cJSON_AddItemToObject(obj, "filename_digits", cJSON_CreateNumber(saveParam.fileNameDigits));
cJSON_AddItemToObject(obj, "filename_odd_even_type", cJSON_CreateNumber(saveParam.fileNameOddEvenType));
cJSON_AddItemToObject(obj, "filename_ext", cJSON_CreateString(StdStringToUtf8(saveParam.fileNameExt).c_str()));
cJSON_AddItemToObject(obj, "ocr", saveParam.isOcr ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "save_as_multi_page", saveParam.isSaveAsMultiPage ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "multi_pages_type", cJSON_CreateNumber(saveParam.multiPagesType));
cJSON_AddItemToObject(obj, "custom_multi_pages", cJSON_CreateNumber(saveParam.customMultiPages));
cJSON_AddItemToObject(json, "save_param", obj);
char* resp = cJSON_Print(json);
if (NULL != resp)
{
str = resp;
free(resp);
}
cJSON_Delete(json);
}
return str;
}
void MainWindow::LoadCfg()
{
// TODO 加载配置文件到m_vScanParams
m_vScanParams.clear();
HGChar cfgPath[256];
HGBase_GetConfigPath(cfgPath, 256);
char dbPath[256];
sprintf(dbPath, "%s%s", cfgPath, "config.db");
sqlite3 *sqlite = nullptr;
sqlite3_open_v2(dbPath, &sqlite, SQLITE_OPEN_READONLY | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);
if (NULL == sqlite)
{
return;
}
sqlite3_stmt* stmt = NULL;
char sql[256];
sprintf(sql, "select * from scan_params");
int ret = sqlite3_prepare(sqlite, sql, -1, &stmt, NULL);
if (0 != ret)
{
sqlite3_close(sqlite);
return;
}
ret = sqlite3_step(stmt);
while (SQLITE_ROW == ret)
{
int id = sqlite3_column_int(stmt, 0);
const char* deviceType = (const char*)sqlite3_column_text(stmt, 1);
int buttonId = sqlite3_column_int(stmt, 2);
const char* deviceConfigs = (const char*)sqlite3_column_text(stmt, 3);
const char* saveParam = (const char*)sqlite3_column_text(stmt, 4);
ScanParam scanParam;
scanParam.deviceType = deviceType;
scanParam.buttonId = buttonId;
scanParam.deviceConfigs = MakeDeviceConfigs(deviceConfigs);
scanParam.saveParam = MakeSaveParam(saveParam);
m_vScanParams.push_back(scanParam);
ret = sqlite3_step(stmt);
}
ret = sqlite3_finalize(stmt);
assert(0 == ret);
sqlite3_close(sqlite);
}
void MainWindow::SaveCfg()
{
// TODO 保存m_vScanParams到配置文件
HGChar cfgPath[256];
HGBase_GetConfigPath(cfgPath, 256);
HGBase_CreateDir(cfgPath);
char dbPath[256];
sprintf(dbPath, "%s%s", cfgPath, "config.db");
HGBase_DeleteFile(dbPath);
sqlite3 *sqlite = nullptr;
sqlite3_open_v2(dbPath, &sqlite, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);
if (NULL == sqlite)
{
return;
}
int ret = sqlite3_exec(sqlite, "create table scan_params (id integer primary key autoincrement, device_type text, "
"button_id integer, device_configs text, save_param text)", NULL, NULL, NULL);
if (0 != ret)
{
sqlite3_close(sqlite);
return;
}
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
{
std::string deviceConfigsStr = GetDeviceConfigsStr(m_vScanParams[i].deviceConfigs);
std::string saveParamStr = GetSaveParamStr(m_vScanParams[i].saveParam);
char *sql = new char [1024 + deviceConfigsStr.size() + saveParamStr.size()];
sprintf(sql, "insert into scan_params (device_type, button_id, device_configs, save_param) values ('%s', '%d', '%s', '%s')",
m_vScanParams[i].deviceType.c_str(), m_vScanParams[i].buttonId, deviceConfigsStr.c_str(), saveParamStr.c_str());
sqlite3_exec(sqlite, sql, NULL, NULL, NULL);
}
sqlite3_close(sqlite);
}
QString MainWindow::GetDesc(const std::vector<DeviceConfig> &deviceConfigs)
{
QString desc;
QString desc = "-";
return desc;
}
QString MainWindow::GetDesc(const SaveParam &saveParam)
{
QString desc;
desc += "[";
desc += tr("Save path:");
desc += saveParam.m_savePath;
desc += "]";
desc += " ";
desc += "[";
desc += tr("Image format:");
desc += saveParam.m_fileNameExt;
desc += "]";
QString desc = "-";
return desc;
}
@ -318,12 +700,17 @@ void MainWindow::StartScan(unsigned int buttonId)
m_aquireIntoMultiPageCount = 0;
QDateTime dateTime = QDateTime::currentDateTime();
if (m_aquireIntoSaveParam.m_isUseSubfolderByTime)
if (m_aquireIntoSaveParam.isUseSubfolderByTime)
{
m_aquireIntoSaveParam.m_savePath = getStdFileName(m_aquireIntoSaveParam.m_savePath + dateTime.toString("yyyy-MM-dd") + "/");
#ifdef HG_CMP_MSC
std::string newPath = m_aquireIntoSaveParam.savePath + dateTime.toString("yyyy-MM-dd").toStdString() + "\\";
#else
std::string newPath = m_aquireIntoSaveParam.savePath + dateTime.toString("yyyy-MM-dd").toStdString() + "/";
#endif
m_aquireIntoSaveParam.savePath = newPath;
}
if (m_aquireIntoSaveParam.m_isOcr)
if (m_aquireIntoSaveParam.isOcr)
{
HGBase_CreateMsgPump(&m_ocrMsgPump);
HGBase_OpenThread(ocrThreadFunc, this, &m_ocrThread);
@ -416,23 +803,23 @@ void MainWindow::AddManualScanParam()
void MainWindow::SaveImage(HGImage image)
{
if (m_aquireIntoSaveParam.m_isSaveAsMultiPage)
if (m_aquireIntoSaveParam.isSaveAsMultiPage)
{
if (nullptr == m_scanImgFmtWriter)
{
assert(m_scanFileName.isEmpty());
HGBase_CreateDir(getStdString(m_aquireIntoSaveParam.m_savePath).c_str());
HGBase_CreateDir(m_aquireIntoSaveParam.savePath.c_str());
QString scanFileName;
while (1)
{
scanFileName = m_aquireIntoSaveParam.m_savePath + m_aquireIntoSaveParam.m_fileNamePrefix + QString("%1.%2")
.arg(m_aquireIntoSaveParam.m_fileNameStartIndex, m_aquireIntoSaveParam.m_fileNameDigits, 10, QLatin1Char('0'))
.arg(m_aquireIntoSaveParam.m_fileNameExt);
scanFileName = QString::fromLocal8Bit(m_aquireIntoSaveParam.savePath.c_str()) + QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNamePrefix.c_str())
+ QString("%1.%2").arg(m_aquireIntoSaveParam.fileNameStartIndex, m_aquireIntoSaveParam.fileNameDigits, 10, QLatin1Char('0'))
.arg(QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNameExt.c_str()));
QFileInfo fileInfo(scanFileName);
if (fileInfo.isFile())
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
++m_aquireIntoSaveParam.fileNameStartIndex;
}
else
{
@ -446,7 +833,7 @@ void MainWindow::SaveImage(HGImage image)
fmtType = HGIMGFMT_TYPE_TIFF;
}
HGImgFmt_OpenImageWriter(getStdString(getStdFileName(scanFileName)).c_str(), fmtType, &m_scanImgFmtWriter);
HGImgFmt_OpenImageWriter(scanFileName.toLocal8Bit().toStdString().c_str(), fmtType, &m_scanImgFmtWriter);
if (nullptr != m_scanImgFmtWriter)
{
m_scanFileName = scanFileName;
@ -456,24 +843,24 @@ void MainWindow::SaveImage(HGImage image)
if (nullptr != m_scanImgFmtWriter)
{
HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.m_jpegQuality;
saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.m_tiffQuality;
saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.tiffQuality;
HGImageInfo imgInfo;
HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{
if (1 == m_aquireIntoSaveParam.m_tiffCompressionBW)
if (1 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompressionBW)
else if (2 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
}
else
{
if (1 == m_aquireIntoSaveParam.m_tiffCompression)
if (1 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompression)
else if (2 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
}
@ -487,7 +874,7 @@ void MainWindow::SaveImage(HGImage image)
if (HGBASE_ERR_OK == HGImgFmt_SaveImageToWriter(m_scanImgFmtWriter, image, &saveInfo))
{
++m_aquireIntoMultiPageCount;
if (1 == m_aquireIntoSaveParam.m_multiPagesType && m_aquireIntoMultiPageCount == m_aquireIntoSaveParam.m_customMultiPages)
if (1 == m_aquireIntoSaveParam.multiPagesType && m_aquireIntoMultiPageCount == m_aquireIntoSaveParam.customMultiPages)
{
HGImgFmt_CloseImageWriter(m_scanImgFmtWriter);
m_scanImgFmtWriter = nullptr;
@ -505,7 +892,7 @@ void MainWindow::SaveImage(HGImage image)
}
m_scanFileName.clear();
++m_aquireIntoSaveParam.m_fileNameStartIndex;
++m_aquireIntoSaveParam.fileNameStartIndex;
m_aquireIntoMultiPageCount = 0;
}
}
@ -515,8 +902,8 @@ void MainWindow::SaveImage(HGImage image)
{
assert(nullptr == m_scanImgFmtWriter);
QString savePath = m_aquireIntoSaveParam.m_savePath;
if (m_aquireIntoSaveParam.m_isUseSubfolderByBlankPages)
QString savePath = QString::fromLocal8Bit(m_aquireIntoSaveParam.savePath.c_str());
if (m_aquireIntoSaveParam.isUseSubfolderByBlankPages)
{
HGBool isBlank = HGFALSE;
HGImgProc_ImageBlankCheck(image, nullptr, &isBlank);
@ -536,10 +923,14 @@ void MainWindow::SaveImage(HGImage image)
char batchDir[20];
sprintf(batchDir, "batch%d", m_aquireIntoBatchStartIndex);
savePath = getStdFileName(savePath + batchDir + "/");
#ifdef HG_CMP_MSC
savePath = savePath + batchDir + "\\";
#else
savePath = savePath + batchDir + "/";
#endif
}
if (m_aquireIntoSaveParam.m_isUseSubfolderByColor)
if (m_aquireIntoSaveParam.isUseSubfolderByColor)
{
QString colorModeName;
HGImageInfo imgInfo;
@ -550,21 +941,24 @@ void MainWindow::SaveImage(HGImage image)
colorModeName = tr("gray");
else
colorModeName = tr("rgb");
savePath = getStdFileName(savePath + colorModeName + "/");
#ifdef HG_CMP_MSC
savePath = savePath + colorModeName + "\\";
#else
savePath = savePath + colorModeName + "/";
#endif
}
HGBase_CreateDir(getStdString(savePath).c_str());
HGBase_CreateDir(savePath.toLocal8Bit().toStdString().c_str());
while (1)
{
m_scanFileName = savePath + m_aquireIntoSaveParam.m_fileNamePrefix + QString("%1.%2")
.arg(m_aquireIntoSaveParam.m_fileNameStartIndex, m_aquireIntoSaveParam.m_fileNameDigits, 10, QLatin1Char('0'))
.arg(m_aquireIntoSaveParam.m_fileNameExt);
m_scanFileName = savePath + QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNamePrefix.c_str()) + QString("%1.%2")
.arg(m_aquireIntoSaveParam.fileNameStartIndex, m_aquireIntoSaveParam.fileNameDigits, 10, QLatin1Char('0'))
.arg(QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNameExt.c_str()));
QFileInfo fileInfo(m_scanFileName);
if (fileInfo.isFile())
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
++m_aquireIntoSaveParam.fileNameStartIndex;
}
else
{
@ -573,24 +967,24 @@ void MainWindow::SaveImage(HGImage image)
}
HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.m_jpegQuality;
saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.m_tiffQuality;
saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.tiffQuality;
HGImageInfo imgInfo;
HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{
if (1 == m_aquireIntoSaveParam.m_tiffCompressionBW)
if (1 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompressionBW)
else if (2 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
}
else
{
if (1 == m_aquireIntoSaveParam.m_tiffCompression)
if (1 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompression)
else if (2 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
}
@ -603,7 +997,7 @@ void MainWindow::SaveImage(HGImage image)
saveInfo.tiffJpegQuality = 100;
}
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(image, fmtType, &saveInfo, getStdString(m_scanFileName).c_str()))
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(image, fmtType, &saveInfo, m_scanFileName.toLocal8Bit().toStdString().c_str()))
{
if (nullptr != m_ocrMsgPump)
{
@ -617,7 +1011,7 @@ void MainWindow::SaveImage(HGImage image)
}
}
++m_aquireIntoSaveParam.m_fileNameStartIndex;
++m_aquireIntoSaveParam.fileNameStartIndex;
}
m_scanFileName.clear();
@ -676,8 +1070,8 @@ int MainWindow::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigne
++p->m_aquireIntoPageIndex;
emit p->scanImage(p->m_aquireIntoPageIndex);
if ((1 == p->m_aquireIntoSaveParam.m_fileNameOddEventType && 1 != p->m_aquireIntoPageIndex % 2)
|| (2 == p->m_aquireIntoSaveParam.m_fileNameOddEventType && 0 != p->m_aquireIntoPageIndex % 2))
if ((1 == p->m_aquireIntoSaveParam.fileNameOddEvenType && 1 != p->m_aquireIntoPageIndex % 2)
|| (2 == p->m_aquireIntoSaveParam.fileNameOddEvenType && 0 != p->m_aquireIntoPageIndex % 2))
{
// 跳过
}
@ -841,7 +1235,7 @@ void MainWindow::on_scanFinish()
}
m_scanFileName.clear();
++m_aquireIntoSaveParam.m_fileNameStartIndex;
++m_aquireIntoSaveParam.fileNameStartIndex;
m_aquireIntoMultiPageCount = 0;
}

View File

@ -30,6 +30,10 @@ public:
void StopScan();
private:
static std::vector<DeviceConfig> MakeDeviceConfigs(const std::string &str);
static std::string GetDeviceConfigsStr(const std::vector<DeviceConfig> &deviceConfigs);
static SaveParam MakeSaveParam(const std::string &str);
static std::string GetSaveParamStr(const SaveParam &saveParam);
void LoadCfg();
void SaveCfg();
QString GetDesc(const std::vector<DeviceConfig> &deviceConfigs);

View File

@ -98,8 +98,6 @@ win32 {
}
SOURCES += \
../../../app/scantool/HGUIGlobal.cpp \
../../../app/scantool/app_cfg.cpp \
../../../app/scantool/dialog_add.cpp \
../../../app/scantool/dialog_scaninfo.cpp \
../../../app/scantool/dialog_writesettings.cpp \
@ -113,8 +111,6 @@ SOURCES += \
HEADERS += \
../../../app/scantool/HGUIGlobal.h \
../../../app/scantool/app_cfg.h \
../../../app/scantool/dialog_add.h \
../../../app/scantool/dialog_scaninfo.h \
../../../app/scantool/dialog_writesettings.h \