#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "sane/sane_ex.h" #include "sane/sane_option_definitions.h" #include "base/HGImage.h" #include "base/HGThread.h" #include "base/HGMsgPump.h" #include "imgfmt/HGImgFmt.h" #include "dialog_add.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); bool FindScanParam(const std::string &deviceType, unsigned int buttonId, int ignoreIndex); void StopScan(); private: static std::vector MakeDeviceConfigs(const std::string &str); static std::string GetDeviceConfigsStr(const std::vector &deviceConfigs); static SaveParam MakeSaveParam(const std::string &str); static std::string GetSaveParamStr(const SaveParam &saveParam); void LoadCfg(); void SaveCfg(); QString GetDesc(const std::vector &deviceConfigs); QString GetDesc(const SaveParam &saveParam); void StartScan(unsigned int buttonId); void SaveImage(HGImage image); void Show(); void ShowAddDialog(unsigned int buttonId); static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param); static void HGAPI ocrThreadFunc(HGThread thread, HGPointer param); static void HGAPI ocrMsgPumpFunc(HGMsgPump msgPump, const HGMsg* msg, HGPointer param); static void HGAPI CrashFunc(HGPointer crashAddr, HGPointer param); protected: virtual void closeEvent(QCloseEvent *e) override; virtual void timerEvent(QTimerEvent* e) override; signals: void deviceArrive(QString devName); void deviceRemove(QString devName); void keyPress(unsigned int buttonId); void scanWorking(); void scanInfo(QString info, bool error); void scanImage(unsigned int count); void scanFinish(); void closeDevice(); void saneEventCloseDevice(void* devHandle, bool isOnline); private slots: void on_deviceArrive(QString devName); void on_deviceRemove(QString devName); void on_keyPress(unsigned int buttonId); void on_scanWorking(); void on_scanInfo(QString info, bool error); void on_scanImage(unsigned int count); void on_scanFinish(); void on_comboBox_currentIndexChanged(const QString &arg1); void on_pushButtonScan_clicked(); void on_trayActivated(QSystemTrayIcon::ActivationReason reason); void on_showMainWindowDlg(); void on_saneEventCloseDevice(void* devHandle, bool isOnline); void on_pushButtonAdd_clicked(); void on_pushButtonModify_clicked(); void on_pushButtonRemove_clicked(); private: Ui::MainWindow *ui; QSystemTrayIcon* m_trayIcon; QAction *m_showAction; QAction *m_quitAction; QMenu *m_trayIconMenu; std::vector m_vScanParams; class Dialog_Add *m_dlgAdd; class Dialog_ScanInfo *m_dlgScanInfo; QString m_devName; SANE_Handle m_devHandle; bool m_scanning; HGUInt m_dpi; QString m_scanFileName; HGImgFmtWriter m_scanImgFmtWriter; SaveParam m_aquireIntoSaveParam; bool m_aquireIntoInBlank; int m_aquireIntoBatchStartIndex; int m_aquireIntoPageIndex; int m_aquireIntoMultiPageCount; HGMsgPump m_ocrMsgPump; HGThread m_ocrThread; int m_timerId; }; #endif // MAINWINDOW_H