解决扫描至时,缩略图切换图片时,本地文件排序异常的问题

This commit is contained in:
yangjiaxuan 2023-12-20 14:32:16 +08:00
parent bfa51e385c
commit 03651a6e7a
2 changed files with 158 additions and 159 deletions

View File

@ -881,145 +881,6 @@ void MainWindow::on_currItemChanged(int index)
m_wndStatusBar->setPageInfo(count, m_currIndex);
updateStatusBarPixelInfo();
updateActionStatus();
if (!m_isScanning && !m_curBatchFileList.empty())
{
std::vector<QString> fileNames;
int count = 0;
m_thumb->getItemCount(&count);
for (int i = 0; i < count; ++i)
{
QString fileName;
m_thumb->getItemFileName(i, fileName);
std::list<QString>::iterator iter;
for (iter = m_curBatchFileList.begin(); iter != m_curBatchFileList.end(); ++iter)
{
if (*iter == fileName)
{
HGChar name[256];
HGBase_GetFileName(fileName.toLocal8Bit().toStdString().c_str(), name, 256);
HGChar filePrefix[256];
HGBase_GetFilePrefix(name, filePrefix, 256);
fileNames.push_back(filePrefix);
break;
}
}
}
std::vector<QString> backupFileNames = fileNames;
std::sort(fileNames.begin(), fileNames.end(), Greater);
if (backupFileNames != fileNames)
{
std::list<QString> batchTmpFileList;
for (int i = 0; i < count; ++i)
{
QString fileName;
m_thumb->getItemFileName(i, fileName);
std::list<QString>::iterator iter;
for (iter = m_curBatchFileList.begin(); iter != m_curBatchFileList.end(); ++iter)
{
if (*iter == fileName)
{
HGChar filePath[256];
HGBase_GetFilePath(fileName.toLocal8Bit().toStdString().c_str(), filePath, 256);
HGChar name[256];
HGBase_GetFileName(fileName.toLocal8Bit().toStdString().c_str(), name, 256);
HGChar filePrefix[256];
HGBase_GetFilePrefix(name, filePrefix, 256);
HGChar fileSuffix[256];
HGBase_GetFileSuffix(name, fileSuffix, 256);
HGChar uuid[256];
HGBase_GetUuid(uuid, 256);
QString strFilePath = QString::fromLocal8Bit(filePath);
QString strFileSuffix = QString::fromLocal8Bit(fileSuffix);
QString strUuid = QString::fromLocal8Bit(uuid);
QString newFileName = strFilePath + strUuid + "." + strFileSuffix;
QFile file(fileName);
file.rename(newFileName);
m_thumb->updateItem(fileName, newFileName, false);
m_curBatchFileList.erase(iter);
batchTmpFileList.push_back(newFileName);
break;
}
}
}
std::list<QString>::iterator iter;
for (iter = batchTmpFileList.begin(); iter != batchTmpFileList.end(); ++iter)
{
HGChar filePath[256];
HGBase_GetFilePath((*iter).toLocal8Bit().toStdString().c_str(), filePath, 256);
HGChar fileSuffix[256];
HGBase_GetFileSuffix((*iter).toLocal8Bit().toStdString().c_str(), fileSuffix, 256);
QString strFilePath = QString::fromLocal8Bit(filePath);
QString strFileSuffix = QString::fromLocal8Bit(fileSuffix);
QString newFileName;
while (!fileNames.empty())
{
QString fileName = strFilePath + fileNames.front() + "." + strFileSuffix;
QFileInfo fileInfo(fileName);
if (fileInfo.isFile())
{
fileNames.erase(fileNames.begin());
}
else
{
newFileName = fileName;
break;
}
}
if (!newFileName.isEmpty())
{
QFile file(*iter);
file.rename(newFileName);
m_thumb->updateItem(*iter, newFileName, false);
m_curBatchFileList.push_back(newFileName);
fileNames.erase(fileNames.begin());
}
else
{
while (1)
{
QString fileName = strFilePath + m_aquireIntoSaveParam.m_fileNamePrefix + QString("%1.%2")
.arg(m_aquireIntoSaveParam.m_fileNameStartIndex, m_aquireIntoSaveParam.m_fileNameDigits, 10, QLatin1Char('0'))
.arg(strFileSuffix);
QFileInfo fileInfo(fileName);
if (fileInfo.isFile())
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
else
{
newFileName = fileName;
break;
}
}
if (!newFileName.isEmpty())
{
QFile file(*iter);
file.rename(newFileName);
m_thumb->updateItem(*iter, newFileName, false);
m_curBatchFileList.push_back(newFileName);
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
}
}
batchTmpFileList.clear();
}
}
}
void MainWindow::on_itemDoubleClicked(int index)
@ -1053,6 +914,8 @@ void MainWindow::on_thumbDrop(const QObject *source, const QStringList &fileName
m_thumb->insertItems(fileNames, pos);
else
m_thumb->moveItems(fileNames, pos);
updateLocalFileName();
}
void MainWindow::on_viewerDrop(const QObject *source, const QStringList &fileNames)
@ -1089,6 +952,8 @@ void MainWindow::on_act_moveTo_triggered()
int index = dlg.getMoveToIndex();
m_thumb->moveItemsTo(fileNames, index);
updateLocalFileName();
}
}
@ -1295,7 +1160,6 @@ void MainWindow::on_newImage(void *image)
if (fileInfo.isFile())
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
else
{
@ -1361,10 +1225,7 @@ void MainWindow::on_newImage(void *image)
emit post_new_image(m_scanFileName);
m_scanFileName.clear();
if (-1 == m_scanInsertPos)
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
m_aquireIntoMultiPageCount = 0;
}
else
@ -1430,7 +1291,6 @@ void MainWindow::on_newImage(void *image)
if (fileInfo.isFile())
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
else
{
@ -1480,10 +1340,7 @@ void MainWindow::on_newImage(void *image)
{
emit post_new_image(m_scanFileName);
if (-1 == m_scanInsertPos)
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
}
m_scanFileName.clear();
@ -1530,8 +1387,6 @@ void MainWindow::on_scanFinishEvent()
m_previewImage = nullptr;
HGBase_LeaveLock(m_lockPreviewImage);
m_view->enableHighQuality(true);
m_isScanning = false;
updateActionStatus();
if (nullptr != m_scanImgFmtWriter)
{
@ -1540,10 +1395,7 @@ void MainWindow::on_scanFinishEvent()
emit post_new_image(m_scanFileName);
m_scanFileName.clear();
if (-1 == m_scanInsertPos)
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
m_aquireIntoMultiPageCount = 0;
}
@ -1559,6 +1411,16 @@ void MainWindow::on_scanFinishEvent()
m_ocrMsgPump = NULL;
}
if (-1 != m_scanCurIndex)
{
m_thumb->setCurrItem(m_scanCurIndex);
}
m_isScanning = false;
updateActionStatus();
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
QMessageBox msg(QMessageBox::Information, tr("Prompt"), tr("This scan is complete. Do you want to continue scanning?"),
QMessageBox::Yes | QMessageBox::No, this);
msg.exec();
@ -1604,11 +1466,6 @@ void MainWindow::on_scanFinishEvent()
}
else
{
if (-1 != m_scanCurIndex)
{
m_thumb->setCurrItem(m_scanCurIndex);
}
if (!m_curBatchTmpFileList.empty())
{
assert(ScanType_InsertScanInto == m_scanType);
@ -1702,7 +1559,6 @@ void MainWindow::on_scanFinishEvent()
if (fileInfo.isFile())
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
else
{
@ -1718,12 +1574,12 @@ void MainWindow::on_scanFinishEvent()
m_thumb->updateItem(*iter, newFileName, false);
m_curBatchFileList.push_back(newFileName);
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
}
}
m_curBatchTmpFileList.clear();
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
}
}
@ -4606,6 +4462,148 @@ void MainWindow::deleteDevUser()
}
}
void MainWindow::updateLocalFileName()
{
if (!m_isScanning && !m_curBatchFileList.empty())
{
std::vector<QString> fileNames;
int count = 0;
m_thumb->getItemCount(&count);
for (int i = 0; i < count; ++i)
{
QString fileName;
m_thumb->getItemFileName(i, fileName);
std::list<QString>::iterator iter;
for (iter = m_curBatchFileList.begin(); iter != m_curBatchFileList.end(); ++iter)
{
if (*iter == fileName)
{
HGChar name[256];
HGBase_GetFileName(fileName.toLocal8Bit().toStdString().c_str(), name, 256);
HGChar filePrefix[256];
HGBase_GetFilePrefix(name, filePrefix, 256);
fileNames.push_back(filePrefix);
break;
}
}
}
std::vector<QString> backupFileNames = fileNames;
std::sort(fileNames.begin(), fileNames.end(), Greater);
if (backupFileNames != fileNames)
{
std::list<QString> batchTmpFileList;
for (int i = 0; i < count; ++i)
{
QString fileName;
m_thumb->getItemFileName(i, fileName);
std::list<QString>::iterator iter;
for (iter = m_curBatchFileList.begin(); iter != m_curBatchFileList.end(); ++iter)
{
if (*iter == fileName)
{
HGChar filePath[256];
HGBase_GetFilePath(fileName.toLocal8Bit().toStdString().c_str(), filePath, 256);
HGChar name[256];
HGBase_GetFileName(fileName.toLocal8Bit().toStdString().c_str(), name, 256);
HGChar filePrefix[256];
HGBase_GetFilePrefix(name, filePrefix, 256);
HGChar fileSuffix[256];
HGBase_GetFileSuffix(name, fileSuffix, 256);
HGChar uuid[256];
HGBase_GetUuid(uuid, 256);
QString strFilePath = QString::fromLocal8Bit(filePath);
QString strFileSuffix = QString::fromLocal8Bit(fileSuffix);
QString strUuid = QString::fromLocal8Bit(uuid);
QString newFileName = strFilePath + strUuid + "." + strFileSuffix;
QFile file(fileName);
file.rename(newFileName);
m_thumb->updateItem(fileName, newFileName, false);
m_curBatchFileList.erase(iter);
batchTmpFileList.push_back(newFileName);
break;
}
}
}
std::list<QString>::iterator iter;
for (iter = batchTmpFileList.begin(); iter != batchTmpFileList.end(); ++iter)
{
HGChar filePath[256];
HGBase_GetFilePath((*iter).toLocal8Bit().toStdString().c_str(), filePath, 256);
HGChar fileSuffix[256];
HGBase_GetFileSuffix((*iter).toLocal8Bit().toStdString().c_str(), fileSuffix, 256);
QString strFilePath = QString::fromLocal8Bit(filePath);
QString strFileSuffix = QString::fromLocal8Bit(fileSuffix);
QString newFileName;
while (!fileNames.empty())
{
QString fileName = strFilePath + fileNames.front() + "." + strFileSuffix;
QFileInfo fileInfo(fileName);
if (fileInfo.isFile())
{
fileNames.erase(fileNames.begin());
}
else
{
newFileName = fileName;
break;
}
}
if (!newFileName.isEmpty())
{
QFile file(*iter);
file.rename(newFileName);
m_thumb->updateItem(*iter, newFileName, false);
m_curBatchFileList.push_back(newFileName);
fileNames.erase(fileNames.begin());
}
else
{
while (1)
{
QString fileName = strFilePath + m_aquireIntoSaveParam.m_fileNamePrefix + QString("%1.%2")
.arg(m_aquireIntoSaveParam.m_fileNameStartIndex, m_aquireIntoSaveParam.m_fileNameDigits, 10, QLatin1Char('0'))
.arg(strFileSuffix);
QFileInfo fileInfo(fileName);
if (fileInfo.isFile())
{
++m_aquireIntoSaveParam.m_fileNameStartIndex;
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
else
{
newFileName = fileName;
break;
}
}
if (!newFileName.isEmpty())
{
QFile file(*iter);
file.rename(newFileName);
m_thumb->updateItem(*iter, newFileName, false);
m_curBatchFileList.push_back(newFileName);
++m_aquireIntoSaveParam.m_fileNameStartIndex;
}
}
}
batchTmpFileList.clear();
saveCfgValue(m_cbtn_acquireIntoCfg->currentText().toLocal8Bit().toStdString().c_str(), "startIndex", m_aquireIntoSaveParam.m_fileNameStartIndex);
}
}
}
#if !defined(HG_CMP_MSC)
void MainWindow::checkRollerLife()
{

View File

@ -268,6 +268,7 @@ private:
void initAcquireIntoComboBox();
void updateSideBar();
void deleteDevUser();
void updateLocalFileName();
#if !defined(HG_CMP_MSC)
void checkRollerLife();