1)缓存文件保存时,弹出另存问对话框

2)有文件未保存,关闭时进行提示
3)打开已经存在的文件时,提示是否移动
This commit is contained in:
luoliangyi 2022-05-13 15:40:05 +08:00
parent 82248faf20
commit 2d88fb76fe
6 changed files with 188 additions and 40 deletions

View File

@ -78,7 +78,7 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param)
HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (nullptr != img)
{
HGImgFmt_SaveImageToWriter(imgFmtWriter, img, nullptr, (HGUInt)p->m_saveQuality);
HGImgFmt_SaveImageToWriter(imgFmtWriter, img, nullptr);
HGBase_DestroyImage(img);
}
}
@ -126,7 +126,7 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param)
QString saveFileName = p->m_destPath + QString(StdStringToUtf8(fileName).c_str()) + p->m_destExt;
HGImgFmt_SaveImage(img, 0, nullptr, (HGUInt)p->m_saveQuality, getStdString(saveFileName).c_str());
HGImgFmt_SaveImage(img, 0, nullptr, getStdString(saveFileName).c_str());
HGBase_DestroyImage(img);
}
}

View File

@ -84,7 +84,7 @@ void Dialog_MultiRotateImageFile::ThreadFunc(HGThread thread, HGPointer param)
img = img2;
}
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(img, 0, nullptr, 0, getStdString(p->m_fileList[i]).c_str()))
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(img, 0, nullptr, getStdString(p->m_fileList[i]).c_str()))
{
emit p->updateImageFile(p->m_fileList[i]);
}

View File

@ -711,13 +711,13 @@ void MainWindow::on_new_image(void *img)
if (-1 == m_scanInsertPos)
{
QString fileName = getCacheFileName();
HGImgFmt_SaveImage(image, 0, nullptr, 0, getStdString(fileName).c_str());
HGImgFmt_SaveImage(image, 0, nullptr, getStdString(fileName).c_str());
m_thumb->addItem(fileName);
}
else
{
QString fileName = getCacheFileName();
HGImgFmt_SaveImage(image, 0, nullptr, 0, getStdString(fileName).c_str());
HGImgFmt_SaveImage(image, 0, nullptr, getStdString(fileName).c_str());
m_thumb->insertItem(fileName, m_scanInsertPos);
++m_scanInsertPos;
}
@ -755,7 +755,7 @@ void MainWindow::on_new_image(void *img)
}
if (nullptr != m_scanImgFmtWriter)
HGImgFmt_SaveImageToWriter(m_scanImgFmtWriter, image, nullptr, (HGUInt)m_aquireIntoSaveParam.m_saveQuality);
HGImgFmt_SaveImageToWriter(m_scanImgFmtWriter, image, nullptr);
}
else
{
@ -781,7 +781,7 @@ void MainWindow::on_new_image(void *img)
}
}
HGImgFmt_SaveImage(image, 0, nullptr, 0, getStdString(getStdFileName(scanFileName)).c_str());
HGImgFmt_SaveImage(image, 0, nullptr, getStdString(getStdFileName(scanFileName)).c_str());
m_thumb->addItem(scanFileName);
++m_aquireIntoSaveParam.m_fileNameStartIndex;
}
@ -1045,8 +1045,8 @@ void MainWindow::updateActionStatus()
}
ui->act_open->setEnabled(!cur_dev_.is_online() || !m_isScanning);
ui->act_insert->setEnabled(0 != count && (!cur_dev_.is_online() || !m_isScanning));
ui->act_save->setEnabled(nullptr != img && m_modify && -1 != m_currIndex && m_multiPageCount == 1
ui->act_insert->setEnabled(!cur_dev_.is_online() || !m_isScanning);
ui->act_save->setEnabled(nullptr != img && -1 != m_currIndex && m_multiPageCount == 1
&& (!cur_dev_.is_online() || !m_isScanning));
ui->act_saveAs->setEnabled(nullptr != img);
ui->act_Export->setEnabled(0 != count && (!cur_dev_.is_online() || !m_isScanning));
@ -1102,7 +1102,7 @@ void MainWindow::updateActionStatus()
ui->act_acquireSingle->setEnabled(cur_dev_.is_online() && !m_isScanning);
ui->act_acquire->setEnabled(cur_dev_.is_online() && !m_isScanning);
ui->act_scannerSettings->setEnabled(cur_dev_.is_online() && !m_isScanning);
ui->act_insertFromScanner->setEnabled(0 != count && cur_dev_.is_online() && !m_isScanning);
ui->act_insertFromScanner->setEnabled(cur_dev_.is_online() && !m_isScanning);
ui->menu_scan->setEnabled(cur_dev_.is_online() && !m_isScanning);
ui->menu_device->setEnabled(!cur_dev_.is_online() || !m_isScanning);
@ -1443,13 +1443,59 @@ void MainWindow::on_act_save_triggered()
{
HGImage img = nullptr;
m_view->getImage(&img);
if (nullptr == img || !m_modify || -1 == m_currIndex || 1 != m_multiPageCount)
if (nullptr == img || -1 == m_currIndex || 1 != m_multiPageCount)
{
return;
}
assert(!m_currFilePath.isEmpty());
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(img, 0, nullptr, 0, getStdString(m_currFilePath).c_str()))
if (0 == m_currFilePath.indexOf(Dialog_ClrCache::getCachePath()))
{
Dialog_SaveAs dlg(this);
if (dlg.exec())
{
QString savePath = dlg.getSavePath();
bool find = false;
int count = 0;
m_thumb->getItemCount(&count);
for (int i = 0; i < count; ++i)
{
QString fileName;
m_thumb->getItemFileName(i, fileName);
assert(!fileName.isEmpty());
if (fileName == savePath)
{
find = true;
break;
}
}
if (!find)
{
int saveQuality = dlg.getSaveQuality();
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(img, 0, nullptr, getStdString(savePath).c_str()))
{
m_thumb->updateItem(m_currIndex, savePath);
m_currFilePath = savePath;
m_modify = false;
}
else
{
QMessageBox::information(this, tr("info"), tr("save failed"));
}
}
else
{
QMessageBox::information(this, tr("info"), tr("find savePath in thumbnail"));
}
}
return;
}
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(img, 0, nullptr, getStdString(m_currFilePath).c_str()))
{
m_thumb->refreshItem(m_currFilePath);
m_modify = false;
@ -1494,7 +1540,7 @@ void MainWindow::on_act_saveAs_triggered()
if (!find)
{
int saveQuality = dlg.getSaveQuality();
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(img, 0, nullptr, (HGUInt)saveQuality, getStdString(savePath).c_str()))
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(img, 0, nullptr, getStdString(savePath).c_str()))
{
}
@ -1655,12 +1701,38 @@ void MainWindow::closeEvent(QCloseEvent *e)
return;
}
bool cache_saved = true;
int count = 0;
m_thumb->getItemCount(&count);
if(count != 0)
for (int i = 0; i < count; ++i)
{
QString fileName;
m_thumb->getItemFileName(i, fileName);
if (0 == fileName.indexOf(Dialog_ClrCache::getCachePath()))
{
cache_saved = false;
break;
}
}
if (!cache_saved || m_modify)
{
QMessageBox msg(QMessageBox::Question, tr("Question"),
tr("Application is about to close.Make sure all needed files are saved.\nContinue to close?"),
tr("There are pictures that have not been saved.\nAre you sure to close?"),
QMessageBox::Yes | QMessageBox::No, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.setButtonText(QMessageBox::No, tr("no"));
msg.exec();
if (msg.clickedButton() != msg.button(QMessageBox::Yes))
{
e->ignore();
return;
}
}
else
{
QMessageBox msg(QMessageBox::Question, tr("tips"),
tr("Are you sure to close?"),
QMessageBox::Yes | QMessageBox::No, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.setButtonText(QMessageBox::No, tr("no"));

View File

@ -533,6 +533,7 @@ HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtS
if (NULL != info)
{
jpegInfo.quality = 80;
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
jpegInfo.xDensity = info->xDpi;
jpegInfo.yDensity = info->yDpi;
@ -584,6 +585,7 @@ HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtS
if (NULL != info)
{
tiffInfo.compression = HGIMGFMT_TIFFCOMP_LZW;
tiffInfo.resolutionUnit = HGIMGFMT_TIFFRESUNIT_INCH;
tiffInfo.xResolution = (float)info->xDpi;
tiffInfo.yResolution = (float)info->yDpi;
@ -608,6 +610,7 @@ HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtS
if (NULL != info)
{
jpegInfo.quality = 80;
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
jpegInfo.xDensity = info->xDpi;
jpegInfo.yDensity = info->yDpi;
@ -633,6 +636,7 @@ HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtS
if (NULL != info)
{
jpegInfo.quality = 80;
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
jpegInfo.xDensity = info->xDpi;
jpegInfo.yDensity = info->yDpi;
@ -1113,6 +1117,7 @@ HGResult HGAPI HGImgFmt_SaveImageToWriter(HGImgFmtWriter writer, HGImage image,
if (NULL != info)
{
jpegInfo.quality = 80;
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
jpegInfo.xDensity = info->xDpi;
jpegInfo.yDensity = info->yDpi;
@ -1185,6 +1190,7 @@ HGResult HGAPI HGImgFmt_SaveImageToWriter(HGImgFmtWriter writer, HGImage image,
if (NULL != info)
{
tiffInfo.compression = HGIMGFMT_TIFFCOMP_LZW;
tiffInfo.resolutionUnit = HGIMGFMT_TIFFRESUNIT_INCH;
tiffInfo.xResolution = (float)info->xDpi;
tiffInfo.yResolution = (float)info->yDpi;
@ -1200,6 +1206,7 @@ HGResult HGAPI HGImgFmt_SaveImageToWriter(HGImgFmtWriter writer, HGImage image,
if (NULL != info)
{
jpegInfo.quality = 80;
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
jpegInfo.xDensity = info->xDpi;
jpegInfo.yDensity = info->yDpi;
@ -1216,6 +1223,7 @@ HGResult HGAPI HGImgFmt_SaveImageToWriter(HGImgFmtWriter writer, HGImage image,
if (NULL != info)
{
jpegInfo.quality = 80;
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
jpegInfo.xDensity = info->xDpi;
jpegInfo.yDensity = info->yDpi;

View File

@ -1163,6 +1163,7 @@ HGResult HGImgThumb::insertItems(const QStringList &fileNames, int pos)
return HGBASE_ERR_INVALIDARG;
}
bool findInThumb = false;
std::vector<QString> stdFileNames;
for (int i = 0; i < (int)fileNames.size(); ++i)
{
@ -1183,22 +1184,24 @@ HGResult HGImgThumb::insertItems(const QStringList &fileNames, int pos)
}
}
bool findInThumb = false;
for (int j = 0; j < (int)m_frontItems.size(); ++j)
{
if (m_frontItems[j]->fileName == stdFileName)
{
findInThumb = true;
break;
}
}
if (!find && !findInThumb)
if (!find)
{
HGUInt fmtType = 0;
HGImgFmt_GetImgFmtTypeFromFileName(getStdString(stdFileName).c_str(), &fmtType);
if (0 != fmtType)
{
if (!findInThumb)
{
for (int i = 0; i < (int)m_frontItems.size(); ++i)
{
if (m_frontItems[i]->fileName == stdFileName)
{
findInThumb = true;
break;
}
}
}
stdFileNames.push_back(stdFileName);
}
}
@ -1206,9 +1209,29 @@ HGResult HGImgThumb::insertItems(const QStringList &fileNames, int pos)
if (stdFileNames.empty())
{
if (!fileNames.empty())
{
QMessageBox::information(this, tr("tips"), tr("unsupported file format"));
}
return HGBASE_ERR_INVALIDARG;
}
bool isMove = false;
if (findInThumb)
{
QMessageBox msg(QMessageBox::Question, tr("Question"),
tr("some files have been loaded, do you want to move?"),
QMessageBox::Yes | QMessageBox::No, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.setButtonText(QMessageBox::No, tr("no"));
msg.exec();
if (msg.clickedButton() == msg.button(QMessageBox::Yes))
{
isMove = true;
}
}
reset();
int oldItemCount = (int)m_frontItems.size();
@ -1230,7 +1253,9 @@ HGResult HGImgThumb::insertItems(const QStringList &fileNames, int pos)
for (int i = 0; i < (int)stdFileNames.size(); ++i)
{
const QString &stdFileName = stdFileNames[i];
int oldIndex = findIndex(stdFileName);
if (-1 == oldIndex)
{
HGImgThumbItem *item = new HGImgThumbItem;
item->fileName = stdFileName;
item->selected = true;
@ -1250,6 +1275,43 @@ HGResult HGImgThumb::insertItems(const QStringList &fileNames, int pos)
++posEx;
}
else
{
if (isMove)
{
HGImgThumbItem *item = m_frontItems[oldIndex];
item->selected = true;
if (oldIndex < posEx)
{
if (pos == posEx)
{
--pos;
}
--posEx;
}
HGBase_EnterLock(m_lockFront);
m_frontItems.erase(m_frontItems.begin() + oldIndex);
if (posEx != (int)m_frontItems.size())
m_frontItems.insert(m_frontItems.begin() + posEx, item);
else
m_frontItems.push_back(item);
HGBase_LeaveLock(m_lockFront);
++posEx;
}
else
{
m_frontItems[oldIndex]->selected = true;
m_curItemIndex = oldIndex;
m_signItemIndex = oldIndex;
locateItem(oldIndex);
recalcShowRect(this->width(), this->height(), m_scrollSize, m_type, m_hScroll, m_vScroll, m_showThumb, m_thumbRect);
}
}
}
if (pos != posEx)
{

View File

@ -4,6 +4,7 @@
#include <QToolTip>
#include <QMimeData>
#include <QMessageBox>
#include <QFileInfo>
#include "base/HGInc.h"
#include "imgfmt/HGImgFmt.h"
#include "HGUIGlobal.h"
@ -1721,6 +1722,11 @@ void HGImgView::dropEvent(QDropEvent *e)
for (QUrl url : urls)
{
QString fileName = getStdFileName(url.toLocalFile());
QFileInfo fileInfo(fileName);
if (!fileInfo.isFile())
{
continue;
}
HGUInt fmtType = 0;
HGImgFmt_GetImgFmtTypeFromFileName(getStdString(fileName).c_str(), &fmtType);