mirror of http://192.168.1.51:8099/lmh188/twain3.0
650 lines
21 KiB
C++
650 lines
21 KiB
C++
// CTwainUI.cpp: 实现文件
|
|
//
|
|
#include "stdafx.h"
|
|
#include "CTwainUI.h"
|
|
#include "afxdialogex.h"
|
|
#include "resource.h"
|
|
#include "TabCtrlSSL.h"
|
|
#include "CBasicPage.h"
|
|
#include "CBrightnessPage.h"
|
|
#include "CFeedPaperPage.h"
|
|
#include "CImageProcPage.h"
|
|
#include "Device/PaperSize.h"
|
|
#include <list>
|
|
#include "filetools.h"
|
|
#include "GscanJsonConfig.h"
|
|
// CTwainUI 对话框
|
|
|
|
IMPLEMENT_DYNAMIC(CTwainUI, CDialogEx)
|
|
|
|
CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::string hardwareversion, std::string serialnum, CWnd* pParent /*=nullptr*/)
|
|
: CDialogEx(IDD_TWAINUI, pParent)
|
|
, m_tabCtrl(new CTabCtrlSSL())
|
|
, m_pageBrightness(new CBrightnessPage)
|
|
, m_pageFeedPaper(new CFeedPaperPage)
|
|
, m_pageImageProc(new CImageProcPage)
|
|
, m_glue(glue)
|
|
, settings(new GScanCap(caps))
|
|
, m_confirmtitle(confirmtitle)
|
|
{
|
|
m_hardwareVersion = hardwareversion;
|
|
m_serialnum = serialnum;
|
|
//memset(settings.get(), 0, sizeof(GScanCap));
|
|
}
|
|
|
|
CTwainUI::~CTwainUI()
|
|
{
|
|
}
|
|
|
|
void CTwainUI::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialogEx::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_TAB, *m_tabCtrl);
|
|
}
|
|
|
|
BOOL CTwainUI::OnInitDialog()
|
|
{
|
|
CDialogEx::OnInitDialog();
|
|
// Setup the tab control
|
|
int nPageID = 0;
|
|
|
|
auto dataChangeFunction = [this]() {
|
|
m_pageImageProc->ImageProcPageUpdate(m_pageBasic->m_cmBoxColorMode->GetCurSel());
|
|
m_pageFeedPaper->FeedPaperPageUpdate(m_pageBasic->m_cmBoxDuplex->GetCurSel());
|
|
m_pageImageProc->ImageAutoDescrewUpdate(m_pageBasic->m_cmBoxSS->GetCurSel());
|
|
//m_pageFeedPaper->FeedAutoDescrewUpdate(m_pageBasic->m_cmBoxSS->GetCurSel());
|
|
UpdateUi();
|
|
};
|
|
|
|
m_pageBasic.reset(new CBasicPage(dataChangeFunction));
|
|
m_pageBasic->Create(IDD_PAGEBASIC, this);
|
|
m_pageBasic->SetScannerInfo(m_hardwareVersion, m_serialnum);
|
|
m_tabCtrl->AddSSLPage(_T("基本"), nPageID++, m_pageBasic.get());
|
|
m_pageBrightness->Create(IDD_PAGEBRIGHTNESS, this);
|
|
m_tabCtrl->AddSSLPage(_T("亮度"), nPageID++, m_pageBrightness.get());
|
|
m_pageImageProc->Create(IDD_PAGEIMGPROC, this);
|
|
m_tabCtrl->AddSSLPage(_T("图像处理"), nPageID++, m_pageImageProc.get());
|
|
m_pageFeedPaper->Create(IDD_PAGEFEEDPAPER, this);
|
|
m_tabCtrl->AddSSLPage(_T("送纸"), nPageID++, m_pageFeedPaper.get());
|
|
CString title(m_confirmtitle.c_str());
|
|
this->GetDlgItem(IDC_CONFIRM)->SetWindowText(title);
|
|
|
|
UpdateUI();
|
|
UpdateListConfig();
|
|
UpdateUi();
|
|
return true;
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CTwainUI, CDialogEx)
|
|
ON_BN_CLICKED(IDC_CONFIRM, &CTwainUI::OnBnClickedConfirm)
|
|
ON_BN_CLICKED(IDC_BTNDEFAULT, &CTwainUI::OnBnClickedBtndefault)
|
|
ON_BN_CLICKED(ID_CANCEL, &CTwainUI::OnBnClickedCancel)
|
|
ON_BN_CLICKED(IDC_BTNHELP, &CTwainUI::OnBnClickedBtnhelp)
|
|
ON_BN_CLICKED(IDC_BTNBACKUPCONFIG, &CTwainUI::OnBnClickedBtnbackupconfig)
|
|
ON_BN_CLICKED(IDC_BTNSAVECONFIG, &CTwainUI::OnBnClickedBtnsaveconfig)
|
|
ON_BN_CLICKED(IDC_BTNDELETCONFIG, &CTwainUI::OnBnClickedBtndeletconfig)
|
|
ON_BN_CLICKED(IDC_BTNRECOVERYCONFIG, &CTwainUI::OnBnClickedBtnrecoveryconfig)
|
|
ON_LBN_SELCHANGE(IDC_LSTCONFIG, &CTwainUI::OnLbnSelchangeLstconfig)
|
|
ON_WM_CLOSE()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
void CTwainUI::OnBnClickedConfirm()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
CONFIGPARAMS cfg = { 0 };
|
|
UpDateScanParam(&cfg);
|
|
m_glue.m_scan(*settings);
|
|
}
|
|
|
|
|
|
void CTwainUI::OnBnClickedBtndefault()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
GscanJsonConfig js;
|
|
GScanCap cf = js.GetDefaultGscancapValue();
|
|
settings.reset(new GScanCap(cf));
|
|
UpdateUI();
|
|
}
|
|
|
|
|
|
void CTwainUI::OnBnClickedCancel()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
m_glue.m_cancel();
|
|
}
|
|
|
|
|
|
void CTwainUI::OnBnClickedBtnhelp()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
TCHAR chmPath[MAX_PATH] = { 0 };
|
|
SHGetSpecialFolderPath(NULL, chmPath, CSIDL_WINDOWS, TRUE);
|
|
_tcscat(chmPath, CHM_DEFAULT_PATH);
|
|
int ret = (int)ShellExecute(NULL, _T("Open"), chmPath, NULL, NULL, SW_SHOWMAXIMIZED);
|
|
if (ret < 32)
|
|
MessageBox(ret == ERROR_FILE_NOT_FOUND ? _T("未找到帮助文档!") : _T("打开帮助文档异常!"),
|
|
_T("提示"), MB_OK | MB_ICONINFORMATION);
|
|
|
|
this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
}
|
|
|
|
void CTwainUI::UpdateUI()
|
|
{
|
|
//!< basic page
|
|
m_pageBasic->m_cmBoxColorMode->SetCurSel(get_map_key_by_value(colorModes, settings->pixtype));//!< 颜色模式
|
|
m_pageBasic->m_cmBoxResultion->SetCurSel(get_map_key_by_value(resolutions, settings->resolution_dst));//!< 分辨率
|
|
m_pageBasic->m_cmBoxDuplex->SetCurSel(getCmbDuplexIndex());//!< 单双面
|
|
m_pageBasic->m_cmBoxSS->SetCurSel(getPaparSizeIndex(settings->papertype, settings->paperAlign)); //!< 纸张类型
|
|
m_pageBasic->m_bswitchfrontback = settings->is_switchfrontback ? TRUE : FALSE; //!< 交换正反面
|
|
m_pageBasic->UpdateData(FALSE);
|
|
|
|
//!< Page Breghtness
|
|
m_pageBrightness->m_cbAutoContrast = settings->is_autocontrast==TRUE?TRUE:FALSE; //!< 自动亮度对比度
|
|
int brt = GetMappingBrightnessValue(settings->brightness);
|
|
m_pageBrightness->m_Edit_Brightness.SetValue(brt); //!< 亮度
|
|
int crt = GetContrastLevel(settings->contrast);
|
|
m_pageBrightness->m_Edit_Contrast.SetValue(crt);//!<对比度
|
|
m_pageBrightness->m_Edit_Gamma.SetValue(settings->gamma); //!< gamma
|
|
m_pageBrightness->UpdateData(FALSE);
|
|
|
|
//!< Page Proc
|
|
m_pageImageProc->m_ckbFillBlack = settings->fillbackground==TRUE ? TRUE : FALSE;//填充黑框
|
|
m_pageImageProc->m_ckbAutoDeskrew = settings->autodescrew ? TRUE : FALSE;//自动纠偏
|
|
UpdateFilterCmbx();
|
|
UpdateSharpenCmbx();
|
|
m_pageImageProc->m_ckbRemoveHole = settings->fillhole.is_fillhole==TRUE?TRUE:FALSE;//除穿孔可用性
|
|
m_pageImageProc->m_edit_hole.SetValue(settings->fillhole.fillholeratio/ 100.0);//穿孔搜索范围比例系数
|
|
m_pageImageProc->m_edit_hole.EnableWindow(settings->fillhole.is_fillhole == TRUE ? TRUE : FALSE);
|
|
if (settings->pixtype == 2)
|
|
m_pageImageProc->m_ckbMultioutput = settings->multi_output_red == TRUE ? TRUE : FALSE;//多流除红
|
|
else
|
|
m_pageImageProc->m_ckbMultioutput = FALSE;//多流除红
|
|
m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(settings->pixtype == 2);//彩色可用
|
|
m_pageImageProc->UpdateData(FALSE);
|
|
|
|
//!< Page feed paper
|
|
if(settings->is_duplex==TRUE)
|
|
m_pageFeedPaper->m_cbRotation = settings->is_backrotate180==TRUE ? TRUE : FALSE;//背面旋转180
|
|
else
|
|
{
|
|
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(FALSE);
|
|
m_pageFeedPaper->m_cbRotation = FALSE;
|
|
}
|
|
m_pageFeedPaper->m_cbStaple = settings->hardwarecaps.en_stapledetect==TRUE ? TRUE : FALSE;//装订检测
|
|
m_pageFeedPaper->m_cbDoublePaper = settings->hardwarecaps.en_doublefeed==TRUE ? TRUE : FALSE;//双张检测
|
|
m_pageFeedPaper->m_cbSkew = settings->hardwarecaps.en_skrewdetect==TRUE ? TRUE : FALSE;//歪斜检测
|
|
m_pageFeedPaper->m_cmBoxOrentation.SetCurSel(getRotateCmbIndex(settings->imageRotateDegree));//旋转方向;
|
|
m_pageFeedPaper->m_sldSkrewDetecttion.SetPos(settings->hardwarecaps.skrewdetectlevel);//歪斜检测等级
|
|
|
|
if (settings->scannum == 65535)//连续扫描
|
|
{
|
|
m_pageFeedPaper->m_radioGroupScanMode = 0;
|
|
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->SetWindowText(_T("1"));
|
|
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->EnableWindow(FALSE);
|
|
}
|
|
else//指定数目
|
|
{
|
|
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->EnableWindow(TRUE);
|
|
m_pageFeedPaper->m_radioGroupScanMode = 1;
|
|
int tempcount = settings->scannum;
|
|
CString csCount;
|
|
csCount.Format(_T("%d"), settings->is_duplex==TRUE?tempcount/2: tempcount);
|
|
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->SetWindowText(csCount);
|
|
}
|
|
|
|
m_pageFeedPaper->UpdateData(FALSE);
|
|
m_pageBasic->updateCmbDuplex(TRUE);
|
|
}
|
|
|
|
void CTwainUI::UpdateFilterCmbx()
|
|
{
|
|
if (settings->pixtype == TWPT_RGB)
|
|
{
|
|
m_pageImageProc->m_cmBoxFilter.SetCurSel(0);
|
|
m_pageImageProc->m_cmBoxFilter.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_pageImageProc->m_cmBoxFilter.EnableWindow(TRUE);
|
|
int selectindex = 0;
|
|
if (settings->filter != 3)
|
|
{
|
|
selectindex = settings->filter == 0 ? 1 : (settings->filter == 1 ? 2 : 3);
|
|
}
|
|
else if(settings->enhance_color != Enchace_Color::Enhance_None)
|
|
{
|
|
selectindex = settings->enhance_color == Enchace_Color::Enhance_Red ? 4:(settings->enhance_color == Enchace_Color::Enhance_Green?5:6);
|
|
}
|
|
m_pageImageProc->m_cmBoxFilter.SetCurSel(selectindex);
|
|
}
|
|
}
|
|
|
|
void CTwainUI::UpdateSharpenCmbx()
|
|
{
|
|
m_pageImageProc->m_cmBoxSharpen.EnableWindow(settings->pixtype != 0);
|
|
m_pageImageProc->m_cmBoxSharpen.SetCurSel(settings->pixtype == 0?0: settings->sharpen);
|
|
}
|
|
|
|
int CTwainUI::getCmbDuplexIndex()
|
|
{
|
|
int ret = 1;
|
|
if (settings->is_autodiscradblank_normal)
|
|
ret = 2;
|
|
else if (settings->is_autodiscradblank_vince)
|
|
ret = 3;
|
|
else if(settings->is_duplex==FALSE)
|
|
ret = 0;
|
|
return ret;
|
|
}
|
|
|
|
int CTwainUI::getResolutionIndex(int resolution)
|
|
{
|
|
int result = 0;
|
|
for (size_t i = 0; i < SUPPORTRESNUMS; i++)
|
|
{
|
|
if (Resolutions[i] == resolution)
|
|
{
|
|
result = i;
|
|
break;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
int CTwainUI::getPaparSizeIndex(int papersize, int orentation)
|
|
{
|
|
PaperStatus ps((unsigned int)papersize, (unsigned int)orentation);
|
|
int result = 0;
|
|
for (std::map<int, PaperStatus>::iterator it = paperStatusMap.begin(); it != paperStatusMap.end(); it++) {
|
|
if (it->second.Paper == ps.Paper && it->second.Orentate == ps.Orentate) {
|
|
return it->first;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int CTwainUI::getColorModelIndex(int pixtype)
|
|
{
|
|
return pixtype == 2 ? 0 : (pixtype == 1 ? 1 : 2);
|
|
}
|
|
|
|
int CTwainUI::getRotateCmbIndex(float res)
|
|
{
|
|
int ret = 0;
|
|
if (res == 90.0f)
|
|
ret = 1;
|
|
else if (res == 180.0f)
|
|
ret = 2;
|
|
else if (res == 270.0f)
|
|
ret = 3;
|
|
return ret;
|
|
}
|
|
|
|
vector<CONFIGINFO> CTwainUI::getConfigFiles()
|
|
{
|
|
vector<CONFIGINFO> vc_cfi;
|
|
CFileFind find;
|
|
TCHAR cfFilePath[MAX_PATH] = { 0 };
|
|
SHGetSpecialFolderPath(NULL, cfFilePath, CSIDL_LOCAL_APPDATA, TRUE);
|
|
_tcscat(cfFilePath, HUAGAO_SCAN);
|
|
_tcscat(cfFilePath, TWAIN_DATA_PATH);
|
|
CString filePath(cfFilePath);
|
|
BOOL isFind = find.FindFile(filePath + _TEXT("/*.json"));
|
|
while (isFind)
|
|
{
|
|
isFind = find.FindNextFile();
|
|
if (find.IsDots())
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
CONFIGINFO cfi;
|
|
cfi.Caption = CW2A(find.GetFileTitle());
|
|
cfi.SavePath = CW2A(find.GetFilePath());
|
|
vc_cfi.push_back(cfi);
|
|
}
|
|
}
|
|
return vc_cfi;
|
|
}
|
|
|
|
static int WndCtrl2i(const CWnd* wnd)
|
|
{
|
|
CString valText;
|
|
wnd->GetWindowText(valText);
|
|
return _ttoi(valText);
|
|
}
|
|
|
|
static float WndCtrl2f(const CWnd* wnd)
|
|
{
|
|
CString valText;
|
|
wnd->GetWindowText(valText);
|
|
return (float)_ttof(valText);
|
|
}
|
|
|
|
template<typename T>
|
|
static T* GetCtrl(const CWnd* wnd, int nID)
|
|
{
|
|
return wnd->GetDlgCtrlID(nID);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
/*从UI获取参数*/
|
|
void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
|
|
{
|
|
//!< Page Basic
|
|
m_pageBasic->UpdateData();
|
|
configItem->Pixtype = m_pageBasic->m_cmBoxColorMode->GetCurSel();//!< 颜色模式 index
|
|
configItem->Resolution = m_pageBasic->m_cmBoxResultion->GetCurSel();//!< 分辨率 index
|
|
configItem->Duplex = m_pageBasic->m_cmBoxDuplex->GetCurSel();//!< 单双面
|
|
configItem->PaperSize = m_pageBasic->m_cmBoxSS->GetCurSel();//!< 纸张类型 index
|
|
configItem->EnSwitchFrontBack = m_pageBasic->m_bswitchfrontback == TRUE ? true : false;
|
|
|
|
PaperStatus page = paperStatusMap[configItem->PaperSize];
|
|
configItem->EnAutoCrop = page.Paper == TwSS::None;
|
|
configItem->EnDiscardBlank = configItem->Duplex == 2;//自动跳骨空白页通用
|
|
configItem->EnDiscardBlankVince = configItem->Duplex == 3;//自动跳骨空白页发票
|
|
configItem->EnFlod = configItem->Duplex == 4;
|
|
//configItem->DBlank_AreaNum = m_pageBasic->AreaNum;//!< 分区数
|
|
//configItem->DBlank_DevnMax = m_pageBasic->DevnMax;//!< 跳过阈值
|
|
|
|
//!< Page Breghtness
|
|
m_pageBrightness->UpdateData();
|
|
configItem->EnAutoContrast = m_pageBrightness->m_cbAutoContrast; //!< 自动亮度对比度
|
|
configItem->Brightness = (WndCtrl2i(&(m_pageBrightness->m_Edit_Brightness)) - 128)*(2000.0 / 254.0); //!< 亮度
|
|
int crtvalue = WndCtrl2i(&(m_pageBrightness->m_Edit_Contrast)) - 4;
|
|
configItem->Contrast = GetContrast(crtvalue);//!<对比度
|
|
configItem->Gamma = WndCtrl2f(&(m_pageBrightness->m_Edit_Gamma)); //!< gamma
|
|
|
|
//!< Page Proc
|
|
m_pageImageProc->UpdateData();
|
|
configItem->EnFillBlack = m_pageImageProc->m_ckbFillBlack;//填充黑框
|
|
configItem->EnAutoDescrew = m_pageImageProc->m_ckbAutoDeskrew;//自动纠偏
|
|
configItem->Filter = m_pageImageProc->m_cmBoxFilter.GetCurSel();//除色
|
|
configItem->Sharpen = m_pageImageProc->m_cmBoxSharpen.GetCurSel();//锐化
|
|
configItem->EnOutHole = m_pageImageProc->m_ckbRemoveHole;//除穿孔可用性
|
|
configItem->OutHoleRatio = WndCtrl2f(&(m_pageImageProc->m_edit_hole)) * 100;//穿孔搜索范围比例系数
|
|
configItem->EnMultiOutPutR = m_pageImageProc->m_ckbMultioutput;//多流除红
|
|
|
|
//!< Page feed paper
|
|
m_pageFeedPaper->UpdateData();
|
|
configItem->EnBackRotate180 = m_pageFeedPaper->m_cbRotation;//背面旋转180
|
|
configItem->EnBindingDetect = m_pageFeedPaper->m_cbStaple;//装订检测
|
|
configItem->EnUltrasonicDetect = m_pageFeedPaper->m_cbDoublePaper;//双张检测
|
|
configItem->EnScrewDetect = m_pageFeedPaper->m_cbSkew;//歪斜检测
|
|
configItem->Orentation = m_pageFeedPaper->m_cmBoxOrentation.GetCurSel();//旋转方向
|
|
|
|
int count = WndCtrl2i(&(m_pageFeedPaper->m_editNum));
|
|
if (count == 0)
|
|
{
|
|
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->SetWindowText(_T("1"));
|
|
count = 1;
|
|
}
|
|
configItem->ScanCount = (m_pageFeedPaper->m_radioGroupScanMode == 0) ? -1 : count;
|
|
configItem->ScrewDetectLevel = m_pageFeedPaper->m_sldSkrewDetecttion.GetPos();//歪斜检测等级
|
|
|
|
if (!updateDs)
|
|
return;
|
|
|
|
settings->pixtype = colorModes[configItem->Pixtype];
|
|
settings->hardwarecaps.capturepixtype = settings->pixtype;
|
|
|
|
PaperStatus paper = paperStatusMap[configItem->PaperSize];
|
|
settings->papertype = paper.Paper;
|
|
settings->paperAlign = (PaperAlign)paper.Orentate;
|
|
|
|
settings->resolution_dst = Resolutions[configItem->Resolution];
|
|
settings->resolution_native = 200.0f;
|
|
settings->is_switchfrontback = configItem->EnSwitchFrontBack ? 1 : 0;
|
|
//float value_Contrast = GetContrast(configItem->Contrast);
|
|
settings->contrast = configItem->Contrast;
|
|
settings->brightness = (configItem->Brightness);
|
|
settings->gamma = (configItem->Gamma);
|
|
settings->is_autocrop = paper.Paper == TwSS::None;
|
|
settings->is_duplex = configItem->Duplex >= 1;
|
|
settings->is_autodiscradblank_normal = configItem->Duplex == 2;
|
|
settings->is_autodiscradblank_vince = configItem->Duplex == 3;
|
|
//settings->areanum = configItem->DBlank_AreaNum;
|
|
//settings->devnmax = configItem->DBlank_DevnMax;
|
|
|
|
//填充黑框
|
|
settings->fillbackground = configItem->EnFillBlack;
|
|
settings->autodescrew = configItem->EnAutoDescrew;
|
|
if (configItem->Orentation <= 3) {
|
|
settings->imageRotateDegree = rotateDegrees[configItem->Orentation];
|
|
}
|
|
else {
|
|
settings->imageRotateDegree = 0.0f;
|
|
}
|
|
|
|
settings->is_autotext = configItem->Orentation == 4;
|
|
settings->is_backrotate180 =configItem->EnBackRotate180;
|
|
settings->hardwarecaps.en_skrewdetect = configItem->EnScrewDetect;
|
|
settings->hardwarecaps.skrewdetectlevel = (float)configItem->ScrewDetectLevel;
|
|
settings->hardwarecaps.en_stapledetect = configItem->EnBindingDetect;
|
|
settings->hardwarecaps.en_doublefeed = configItem->EnUltrasonicDetect;
|
|
settings->en_fold = configItem->EnFlod ? 1 : 0;
|
|
if (configItem->ScanCount == -1)
|
|
settings->scannum = configItem->ScanCount;
|
|
else {
|
|
if (configItem->Duplex == 0)//单面
|
|
settings->scannum = configItem->ScanCount;
|
|
else {
|
|
settings->scannum = configItem->ScanCount * 2;
|
|
}
|
|
}
|
|
|
|
if (configItem->Filter) {
|
|
if (configItem->Filter <= 3) {
|
|
settings->filter = (byte)filterMaps[configItem->Filter];
|
|
settings->enhance_color = (byte)EnchaceColor::Enhance_None;
|
|
}
|
|
else {
|
|
settings->filter = 3;//不除色
|
|
settings->enhance_color = (byte)filterMaps[configItem->Filter];
|
|
}
|
|
}
|
|
else {
|
|
settings->filter = 3;
|
|
settings->enhance_color = (byte)EnchaceColor::Enhance_None;
|
|
}
|
|
|
|
settings->sharpen = configItem->Sharpen;
|
|
if (configItem->Filter != 0 || configItem->EnMultiOutPutR)
|
|
settings->hardwarecaps.capturepixtype = TWPT_RGB;
|
|
|
|
settings->fillhole.is_fillhole = configItem->EnOutHole;
|
|
settings->fillhole.fillholeratio = configItem->OutHoleRatio;
|
|
settings->multi_output_red = configItem->EnMultiOutPutR;
|
|
#ifdef REAL300DPI
|
|
settings->resolution_native = settings->resolution_dst > 240.0f ? 300.0f : 200.0f;
|
|
#else // REAL300DPI
|
|
settings->resolution_native = 200.0f;
|
|
#endif
|
|
|
|
UpdateUi();
|
|
}
|
|
|
|
void CTwainUI::UpdateListConfig()
|
|
{
|
|
((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->ResetContent();
|
|
if (cfi.size() > 0)
|
|
{
|
|
cfi.clear();
|
|
}
|
|
cfi = getConfigFiles();
|
|
for (int i = 0; i < cfi.size(); i++)
|
|
{
|
|
CString a;
|
|
a = cfi[i].Caption.c_str();
|
|
((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->AddString(a);
|
|
}
|
|
if (cfi.size() <= 0)
|
|
{
|
|
((CButton*)(GetDlgItem(IDC_BTNDELETCONFIG)))->EnableWindow(FALSE);
|
|
((CButton*)(GetDlgItem(IDC_BTNBACKUPCONFIG)))->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
((CButton*)(GetDlgItem(IDC_BTNDELETCONFIG)))->EnableWindow(TRUE);
|
|
((CButton*)(GetDlgItem(IDC_BTNBACKUPCONFIG)))->EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
void CTwainUI::GetGScanCap(GScanCap & cap)
|
|
{
|
|
cap = *settings;
|
|
}
|
|
|
|
void CTwainUI::UpdateUi()
|
|
{
|
|
m_pageImageProc->m_cmBoxFilter.EnableWindow(m_pageBasic->m_cmBoxColorMode->GetCurSel() != 0);
|
|
INT dupindex = m_pageBasic->m_cmBoxDuplex->GetCurSel();
|
|
BOOL enableback = dupindex == 0 || dupindex == 4;
|
|
if (enableback)
|
|
{
|
|
((CButton*)(m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)))->SetCheck(!enableback);
|
|
if (dupindex == 4) {
|
|
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->SetCheck(dupindex == 4 ? TRUE : FALSE);
|
|
}
|
|
}
|
|
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->EnableWindow(!(dupindex == 4));
|
|
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(!enableback);
|
|
m_pageImageProc->GetDlgItem(IDC_SLDOUTHOLE)->EnableWindow(((CButton*)m_pageImageProc->GetDlgItem(IDC_CKREMOVEHOLE))->GetCheck() == TRUE);
|
|
m_pageFeedPaper->GetDlgItem(IDC_SLDDETECTLEVEL)->EnableWindow(((CButton*)m_pageFeedPaper->GetDlgItem(IDC_CKSKEWDETECT))->GetCheck() == TRUE);
|
|
m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(m_pageBasic->m_cmBoxColorMode->GetCurSel() == 0);
|
|
}
|
|
|
|
void CTwainUI::EnableID_OKorID_Cancel(bool enable)
|
|
{
|
|
GetDlgItem(IDC_CONFIRM)->EnableWindow(enable);
|
|
GetDlgItem(ID_CANCEL)->EnableWindow(enable);
|
|
GetDlgItem(IDC_BTNHELP)->EnableWindow(enable);
|
|
GetDlgItem(IDC_BTNDEFAULT)->EnableWindow(enable);
|
|
GetDlgItem(IDC_TAB)->EnableWindow(enable);
|
|
GetDlgItem(IDC_GROUP)->EnableWindow(enable);
|
|
}
|
|
|
|
|
|
void CTwainUI::OnBnClickedBtnbackupconfig()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
CString csFilters = _T("Json file(*.json)\0");
|
|
CFileDialog cfd(FALSE, _T("json"), _T("另存为"));
|
|
cfd.m_ofn.lpstrTitle = _T("");
|
|
cfd.m_ofn.lpstrFilter = csFilters;
|
|
this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
GscanJsonConfig js;
|
|
if (IDOK == cfd.DoModal())
|
|
{
|
|
vector<GScanCap> vc_tempOut;
|
|
std::vector<CONFIGINFO> temp_cfi = getConfigFiles();
|
|
for (int i = 0; i < temp_cfi.size(); i++)
|
|
{
|
|
vector<GScanCap> vc_item = js.ReadGscanCapsVector(temp_cfi[i].SavePath.c_str());
|
|
if (vc_item.size() > 0)
|
|
{
|
|
vc_tempOut.push_back(vc_item[0]);
|
|
}
|
|
}
|
|
if (vc_tempOut.size() > 0)
|
|
{
|
|
std::string path = (CW2A)cfd.GetPathName();
|
|
js.WriteJsonArrayToFile(vc_tempOut, path);
|
|
}
|
|
}
|
|
this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
}
|
|
|
|
|
|
void CTwainUI::OnBnClickedBtnsaveconfig()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
CSaveConfigDlg sfd(this);
|
|
sfd.DoModal();
|
|
}
|
|
|
|
|
|
void CTwainUI::OnBnClickedBtndeletconfig()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
if (MessageBox(TEXT("确认要删除此用户首选项配置吗?"), TEXT("用户首选项"), MB_YESNO | MB_ICONQUESTION) == IDYES)
|
|
{
|
|
int cursel = -1;
|
|
cursel = ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->GetCurSel();
|
|
if (cursel != -1)
|
|
{
|
|
CFile file;
|
|
CString csFile;
|
|
csFile = cfi[cursel].SavePath.c_str();
|
|
file.Remove(csFile);
|
|
UpdateListConfig();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CTwainUI::OnBnClickedBtnrecoveryconfig()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
if (MessageBox(TEXT("如果恢复,当前所有已保存配置将丢失。是否继续?"), TEXT("恢复"), MB_YESNO | MB_ICONQUESTION) == IDYES)
|
|
{
|
|
GscanJsonConfig js;
|
|
CFileDialog ofd(TRUE,
|
|
_T(".json"),
|
|
NULL,
|
|
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
|
_TEXT("Json Files (*.json)|*.json||)"),
|
|
NULL);
|
|
for (int i = 0; i < cfi.size(); i++)
|
|
{
|
|
DeleteFile((LPCWSTR)cfi[i].SavePath.c_str());
|
|
}
|
|
cfi.clear();
|
|
if (IDOK == ofd.DoModal())
|
|
{
|
|
std::string path = (CW2A)ofd.GetPathName();
|
|
vector<GScanCap> vc = js.ReadGscanCapsVector(path);
|
|
for (int i = 0; i < vc.size(); i++)
|
|
{
|
|
// js.WriteJsonArrayToFile(vc[i],vc[i].SavePath);
|
|
vector<GScanCap> vc_item;
|
|
vc_item.push_back(vc[i]);
|
|
js.WriteJsonArrayToFile(vc_item, vc[i].SavePath);
|
|
}
|
|
UpdateListConfig();
|
|
}
|
|
}
|
|
this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
}
|
|
|
|
|
|
void CTwainUI::OnLbnSelchangeLstconfig()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
int index = -1;
|
|
index = ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->GetCurSel();
|
|
if (index != -1)
|
|
{
|
|
GscanJsonConfig js;
|
|
//std::string savepath= cfi[index].SavePath;
|
|
std::vector<GScanCap> vc_temp;
|
|
vc_temp = js.ReadGscanCapsVector(cfi[index].SavePath);
|
|
if (vc_temp.size() > 0)
|
|
{
|
|
settings.reset(new GScanCap(vc_temp[0]));
|
|
UpdateUI();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CTwainUI::OnClose()
|
|
{
|
|
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
m_glue.m_cancel();
|
|
}
|