调整界面流程

This commit is contained in:
yangjiaxuan 2022-12-26 18:38:34 +08:00
parent 9363327807
commit c447a13017
7 changed files with 102 additions and 32 deletions

View File

@ -55,12 +55,12 @@ static const RELA Rela[] = {
{HGPDTTOOLDB_TITLE_CLEAR_ROLLER_COUNT, HGPDTTOOLDB_ENTRYNAME_CLEAR_ROLLER_COUNT}
};
Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, ui_helper *uiHelper, SANE_Handle handle, HGPdtToolDbUserMgr pdtToolDbuserMgr, HGPdtToolDbDevice pdtToolDbDevice,
Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, SANE_Handle handle, HGPdtToolDbUserMgr pdtToolDbuserMgr, HGPdtToolDbDevice pdtToolDbDevice,
const QString &serialNum, const QString &devType, const QString &devName, const QString &devFwNum)
: QWidget(mainwnd)
, ui(new Ui::Form_mainInterface)
, m_mainwnd(mainwnd)
, m_uiHhelper(uiHelper)
, m_hg(nullptr)
, m_handle(handle)
, m_pdtToolDbuserMgr(pdtToolDbuserMgr)
, m_pdtToolDbDevice(pdtToolDbDevice)
@ -91,12 +91,19 @@ Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, ui_helper *uiH
HGPdtToolDb_SetDeviceType(m_pdtToolDbDevice, m_devType.toStdString().c_str());
HGPdtToolDb_SetDeviceVersion(m_pdtToolDbDevice, m_devFwNum.toStdString().c_str());
HGPdtToolDb_SetDeviceName(m_pdtToolDbDevice, m_devName.toStdString().c_str());
m_hg = new hgscanner(this, m_handle);
}
Form_mainInterface::~Form_mainInterface()
{
delete m_hg;
m_hg = nullptr;
sane_close(m_handle);
m_handle = nullptr;
HGPdtToolDb_CloseDevice(m_pdtToolDbDevice);
m_pdtToolDbDevice = nullptr;
delete ui;
}
@ -111,6 +118,16 @@ QString Form_mainInterface::getDevName()
return m_devName;
}
SANE_Handle Form_mainInterface::getDevHandle()
{
return m_handle;
}
hgscanner *Form_mainInterface::getScanner()
{
return m_hg;
}
void Form_mainInterface::paintEvent(QPaintEvent *event)
{
(void)event;
@ -359,5 +376,5 @@ void Form_mainInterface::on_pbtn_start_clicked()
int row = ui->tableWidget->currentRow();
QTableWidgetItem *item = ui->tableWidget->item(row, 1);
QString title = item->text();
func_test_go(title.toStdWString().c_str(), L"null", m_uiHhelper);
func_test_go(title.toStdWString().c_str(), L"null", m_hg);
}

View File

@ -9,7 +9,7 @@
#include "analysisjson.h"
#include "sane/sane_ex.h"
#include "HGPdtToolDb.h"
#include "ui_helper.h"
#include "hgscanner.h"
namespace Ui {
class Form_mainInterface;
@ -20,12 +20,14 @@ class Form_mainInterface : public QWidget
Q_OBJECT
public:
explicit Form_mainInterface(class MainWindow *mainwnd, ui_helper *uiHelper, SANE_Handle handle, HGPdtToolDbUserMgr pdtToolDbuserMgr, HGPdtToolDbDevice pdtToolDbDevice,
explicit Form_mainInterface(class MainWindow *mainwnd, SANE_Handle handle, HGPdtToolDbUserMgr pdtToolDbuserMgr, HGPdtToolDbDevice pdtToolDbDevice,
const QString &serialNum, const QString &devType, const QString &devName, const QString &devFwNum);
~Form_mainInterface();
QString getSn();
QString getDevName();
SANE_Handle getDevHandle();
hgscanner *getScanner();
protected:
void paintEvent(QPaintEvent *event) override;
@ -60,7 +62,7 @@ private:
HGImgView *m_view;
class MainWindow *m_mainwnd;
ui_helper *m_uiHhelper;
hgscanner *m_hg;
SANE_Handle m_handle;
HGPdtToolDbUserMgr m_pdtToolDbuserMgr;
HGPdtToolDbDevice m_pdtToolDbDevice;

View File

@ -1,7 +1,10 @@
#include "hgscanner.h"
#include <QMessageBox>
#include "form_maininterface.h"
hgscanner::hgscanner(SANE_Handle h):devHandle_(h)
hgscanner::hgscanner(Form_mainInterface *form, SANE_Handle h)
: m_interface(form)
, devHandle_(h)
{
}

View File

@ -3,10 +3,12 @@
#include "ui_helper.h"
#include "test_base.h"
class Form_mainInterface;
class hgscanner :public ui_helper
{
public:
hgscanner(SANE_Handle h);
hgscanner(Form_mainInterface *form, SANE_Handle h);
~hgscanner();
virtual parameter* get_user_input(data_from from, value_type type, const wchar_t* title, const wchar_t* desc = NULL);
virtual void test_callback(const wchar_t* name/*test name*/, test_event ev, void* data, size_t flag);
@ -15,7 +17,7 @@ public:
virtual int io_control(unsigned long code, void* data, unsigned* len);
sane_callback cb_;
private:
class Form_mainInterface *m_interface;
SANE_Handle devHandle_;
};

View File

@ -14,6 +14,7 @@ MainWindow::MainWindow(HGPdtToolDbUserMgr pdtToolDbuserMgr, QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, m_pdtToolDbuserMgr(pdtToolDbuserMgr)
, m_lock(nullptr)
, m_top_splitter(nullptr)
, m_bot_splitter(nullptr)
, m_isLogOut(false)
@ -21,6 +22,8 @@ MainWindow::MainWindow(HGPdtToolDbUserMgr pdtToolDbuserMgr, QWidget *parent)
ui->setupUi(this);
setWindowIcon(QIcon(":image/image_rsc/logo/logo.ico"));
HGBase_CreateLock(&m_lock);
connect(this, SIGNAL(sane_dev_arrive(QString)), this, SLOT(on_sane_dev_arrive(QString)), Qt::QueuedConnection);
connect(this, SIGNAL(sane_dev_remove(QString)), this, SLOT(on_sane_dev_remove(QString)), Qt::QueuedConnection);
@ -62,23 +65,26 @@ MainWindow::MainWindow(HGPdtToolDbUserMgr pdtToolDbuserMgr, QWidget *parent)
MainWindow::~MainWindow()
{
for (int i = 0; i < m_top_splitter->count(); ++i)
HGBase_EnterLock(m_lock);
while (0 != m_top_splitter->count())
{
Form_mainInterface *interface = (Form_mainInterface *)m_top_splitter->widget(i);
Form_mainInterface *interface = (Form_mainInterface *)m_top_splitter->widget(0);
delete interface;
}
for (int i = 0; i < m_bot_splitter->count(); ++i)
while (0 != m_bot_splitter->count())
{
Form_mainInterface *interface = (Form_mainInterface *)m_bot_splitter->widget(i);
Form_mainInterface *interface = (Form_mainInterface *)m_bot_splitter->widget(0);
delete interface;
}
HGBase_LeaveLock(m_lock);
sane_exit();
HGPdtToolDb_DestroyUserMgr(m_pdtToolDbuserMgr);
m_pdtToolDbuserMgr = NULL;
HGBase_DestroyLock(m_lock);
delete ui;
}
@ -157,10 +163,40 @@ Form_mainInterface *MainWindow::FindInterfaceByDevName(const QString &devName)
return nullptr;
}
Form_mainInterface* MainWindow::FindInterface(SANE_Handle handle)
{
Form_mainInterface *form = nullptr;
for (int i = 0; i < m_top_splitter->count(); ++i)
{
Form_mainInterface *interface = (Form_mainInterface *)m_top_splitter->widget(i);
if (handle == interface->getDevHandle())
{
form = interface;
break;
}
}
if (nullptr == form)
{
for (int i = 0; i < m_bot_splitter->count(); ++i)
{
Form_mainInterface *interface = (Form_mainInterface *)m_bot_splitter->widget(i);
if (handle == interface->getDevHandle())
{
form = interface;
break;
}
}
}
return form;
}
bool MainWindow::AddInterface(Form_mainInterface *interface)
{
assert(nullptr != interface);
HGBase_EnterLock(m_lock);
bool ret = false;
if (m_top_splitter->count() < 2)
{
@ -172,6 +208,7 @@ bool MainWindow::AddInterface(Form_mainInterface *interface)
m_bot_splitter->addWidget(interface);
ret = true;
}
HGBase_LeaveLock(m_lock);
updateSplitter();
return ret;
@ -180,7 +217,9 @@ bool MainWindow::AddInterface(Form_mainInterface *interface)
bool MainWindow::RemoveInterface(Form_mainInterface *interface)
{
assert(nullptr != interface);
HGBase_EnterLock(m_lock);
delete interface;
HGBase_LeaveLock(m_lock);
updateSplitter();
return true;
}
@ -188,20 +227,18 @@ bool MainWindow::RemoveInterface(Form_mainInterface *interface)
int MainWindow::sane_ex_callback(SANE_Handle hdev, int code, void *data, unsigned int *len, void *param)
{
MainWindow* p = (MainWindow*)param;
switch (code)
{
case SANE_EVENT_DEVICE_ARRIVED:
if (SANE_EVENT_DEVICE_ARRIVED == code)
{
SANE_Device_Ex* sane_dev = (SANE_Device_Ex*)data;
emit p->sane_dev_arrive(sane_dev->name);
return 0;
}
break;
case SANE_EVENT_DEVICE_LEFT:
else if (SANE_EVENT_DEVICE_LEFT == code)
{
SANE_Device* sane_dev = (SANE_Device*)data;
emit p->sane_dev_remove(sane_dev->name);
}
break;
return 0;
}
if (!hdev)
@ -209,7 +246,15 @@ int MainWindow::sane_ex_callback(SANE_Handle hdev, int code, void *data, unsigne
return -1;
}
p->m_hg->cb_(hdev, code, data, len, p->m_uiHelper);
HGBase_EnterLock(p->m_lock);
Form_mainInterface* interface = p->FindInterface(hdev);
if (nullptr != interface)
{
if (nullptr != interface->getScanner() && nullptr != interface->getScanner()->cb_)
interface->getScanner()->cb_(hdev, code, data, len, interface->getScanner());
}
HGBase_LeaveLock(p->m_lock);
return 0;
}
@ -290,10 +335,7 @@ void MainWindow::on_sane_dev_arrive(QString devName)
HGPdtToolDbDevice pdtToolDbDevice = nullptr;
HGPdtToolDb_OpenDevice(m_pdtToolDbuserMgr, dlg.GetSn().toStdString().c_str(), &pdtToolDbDevice);
m_hg = new hgscanner(devHandle);
m_uiHelper = dynamic_cast<ui_helper*>(m_hg);
Form_mainInterface *mainInterface = new Form_mainInterface(this, m_uiHelper, devHandle, m_pdtToolDbuserMgr, pdtToolDbDevice,
Form_mainInterface *mainInterface = new Form_mainInterface(this, devHandle, m_pdtToolDbuserMgr, pdtToolDbDevice,
dlg.GetSn(), dlg.GetDevType(), devName, getDevFwNum(devHandle));
if (!AddInterface(mainInterface))
{
@ -355,7 +397,7 @@ void MainWindow::on_act_newDevice_triggered()
HGPdtToolDbDevice pdtToolDbDevice = nullptr;
HGPdtToolDb_OpenDevice(m_pdtToolDbuserMgr, dlg.GetSn().toStdString().c_str(), &pdtToolDbDevice);
Form_mainInterface *mainInterface = new Form_mainInterface(this, nullptr, nullptr, m_pdtToolDbuserMgr, pdtToolDbDevice, dlg.GetSn(), dlg.GetDevType(), nullptr, nullptr);
Form_mainInterface *mainInterface = new Form_mainInterface(this, nullptr, m_pdtToolDbuserMgr, pdtToolDbDevice, dlg.GetSn(), dlg.GetDevType(), nullptr, nullptr);
if (!AddInterface(mainInterface))
{
QMessageBox::information(this, tr("tips"), tr("cannot create more table"));

View File

@ -7,6 +7,7 @@
#include <QSplitter>
#include "HGPdtToolDb.h"
#include "sane/sane_ex.h"
#include "base/HGLock.h"
#include "hgscanner.h"
QT_BEGIN_NAMESPACE
@ -26,6 +27,7 @@ public:
void updateSplitter();
Form_mainInterface* FindInterface(const QString &sn);
Form_mainInterface* FindInterfaceByDevName(const QString &devName);
Form_mainInterface* FindInterface(SANE_Handle handle);
bool AddInterface(Form_mainInterface *interface);
bool RemoveInterface(Form_mainInterface *interface);
@ -70,7 +72,6 @@ private:
private:
Ui::MainWindow *ui;
HGPdtToolDbUserMgr m_pdtToolDbuserMgr;
hgscanner *m_hg;
ui_helper *m_uiHelper;
HGLock m_lock;
};
#endif // MAINWINDOW_H

View File

@ -82,6 +82,9 @@ public:
{
TEST_EVENT_TIPS = 0, // messages in testing process, data is (wchar_t*), flag is unused
TEST_EVENT_xxx, // should be complemented ...
TEST_EVENT_NOT_FIND_TEST, // dll. not find test ,data is (wchar_t*)description, flag is (false)
TEST_EVENT_IO_FAIL, // IO. err flag is SCANNER_ERR_DEVICE_NOT_SUPPORT or io err,data is null
TEST_EVENT_MANUAL_CONFIRMATION, // After send cmd need manual confirmation.
TEST_EVENT_RESULT, // test result, data is (wchar_t*)description, flag is (bool)result, true - test pass
};
virtual void test_callback(const wchar_t* name/*test name*/, test_event ev, void* data, size_t flag)=0 ;