#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "HGImgView.h" #include "HGImgThumb.h" #include "sane/sane_ex.h" #include "dialog_aquireinto.h" #include "imgfmt/HGImgFmt.h" #include "VersionDll.h" #include "device_menu.h" #include "sane_device.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class HGLineEdit : public QLineEdit { Q_OBJECT public: HGLineEdit(QWidget* parent) : QLineEdit(parent) { } protected: void focusInEvent(QFocusEvent* e) { (void)e; QString text = this->text(); QStringList list = text.split("/"); text = list.first(); this->setText(text); this->selectAll(); QLineEdit::focusInEvent(e); } }; enum askIfClear { cancelScan = 0, clearAndScan, notClearAndScan }; struct FwUpgradeAndDevLock { enum { FwUpgrade = 0x00000001, DevLock = 0x00000002, }; FwUpgradeAndDevLock(const std::string &devName) { m_devName = devName; m_checkFlag = 0; m_handleFlag = 0; } std::string m_devName; // 设备名 HGUInt m_checkFlag; // 检查标记 HGUInt m_handleFlag; // 执行标记 std::string m_upgradeFilePath; // 升级文件路径 HGBool m_lock; // 锁定/解锁 }; //class dialog_wrong_img; class MainWindow : public QMainWindow { Q_OBJECT std::vector wrong_imgs_; public: MainWindow(const QString& appLang, QWidget *parent = nullptr); virtual ~MainWindow() override; void exitFullScreen(); static HGResult saveImage(HGImage image, const HGImgFmtSaveInfo* info, bool ocr, int ocrLanguageType, const HGChar *fileName); static QString getLogInfo(HGResult ret); private slots: void on_act_90Left_triggered(); void on_act_90Right_triggered(); void on_act_180_triggered(); void on_act_fitWindowSize_triggered(); void on_act_fitWindowWidth_triggered(); void on_act_realSize_triggered(); void on_act_zoomIn_triggered(); void on_act_zoomOut_triggered(); void on_act_statusBar_triggered(bool checked); void on_act_toolBar_triggered(bool checked); void on_act_colorInfo_triggered(bool checked); void on_act_fullscreen_triggered(); void on_act_autoSave_triggered(); signals: void sane_dev_arrive(QString devName, bool opened); void sane_dev_remove(QString devName); void sane_dev_error(QString errorInfo); void new_image(void *img, int statu); void scan_working(QString workingInfo); void scan_finish(QString finishInfo, int err); void fwUpgradeAndDevLock_Finish(); private slots: void on_AcquireInto2(); void on_reloadAcquireIntoCfg(); void on_m_acquireIntoCfg_changed(QString schemeName); void on_itemCountChanged(int count); void on_itemSelectingChanged(); void on_currItemChanged(int index); void on_itemDoubleClicked(int index); void on_thumbContextMenu(int index); void on_viewerScale(double scale); void on_viewerMousePos(int x, int y); void on_thumbDrop(const QObject *source, const QStringList &fileNames, int pos); void on_viewerDrop(const QObject *source, const QStringList &fileNames); void on_viewerDblClick(); void on_act_moveTo_triggered(); void on_act_thumbGrid_triggered(bool checked); void on_dialog_adjust_applyToImage(HGImage img); void on_dialog_multirotate_refreshImgFile(const QString &fileName); void on_multiPageLineEditFinished(); void on_clearCache(); void on_sane_dev_arrive(QString devName, bool opened); void on_sane_dev_remove(QString devName); void on_sane_dev_error(QString errorInfo); void on_new_image(void *img, int statu); void on_scan_working(QString workingInfo); void on_scan_finish(QString finishInfo, int err); void on_fwUpgradeAndDevLock_Finish(); void on_export_scanned_image(void); void on_continueScan(); void on_stopScan(); void on_statusInfoDblClick(); void on_wrong_image_decide(dialog_wrong_img* dlg, bool save); void on_act_thumbnailBar_triggered(bool checked); void on_act_previous_triggered(); void on_act_next_triggered(); void on_act_first_triggered(); void on_act_last_triggered(); void on_act_openPageNum_triggered(); void on_act_previousPage_triggered(); void on_act_nextPage_triggered(); void on_act_firstPage_triggered(); void on_act_lastPage_triggered(); void on_act_adjust_triggered(); void on_act_open_triggered(); void on_act_insert_triggered(); void on_act_closeFile_triggered(); void on_act_closeAll_triggered(); void on_act_exit_triggered(); void on_act_save_triggered(); void on_act_saveAs_triggered(); void on_act_Export_triggered(); void on_act_imageInfo_triggered(); void on_act_multiRotate_triggered(); void on_act_autoCrop_triggered(); void on_act_signIn_triggered(); void on_act_passwordChange_triggered(); void on_act_signOut_triggered(); void on_act_log_triggered(); void on_act_clrCache_triggered(); void on_act_consume_triggered(); void on_act_clearRoller_triggered(); void on_act_help_triggered(); void on_act_about_triggered(); void on_act_scannerSettings_triggered(); void on_act_acquire_triggered(); void on_act_acquireSingle_triggered(); void on_act_acquireInto_triggered(); void on_act_insertFromScanner_triggered(); void on_act_imageEdit_triggered(); void on_scanOptions_changed(const QString &device, const QString &option, bool checked_now); void on_act_sortPages_triggered(); void on_actionact_update_triggered(); void on_act_feedback_triggered(); void on_act_driver_log_triggered(); void on_act_device_log_triggered(); void on_act_simpCN_triggered(); void on_act_English_triggered(); void on_act_deleteFile_triggered(); void on_act_enhanceText_triggered(); public slots: void my_url_handler(const QUrl& url); protected: virtual void closeEvent(QCloseEvent *e) override; private: static int sane_ex_callback(SANE_Handle hdev, int code, void *data, unsigned int* len, void *param); static void HGAPI CrashFunc(HGPointer crashAddr, HGPointer param); static void HGAPI FwUpgradeAndDevLockThread(HGThread thread, HGPointer param); HGUInt getDpi(); QString getCacheFileName(HGImage img); HGImage createImage(); int getMultiPageCount(); void updateStatusBarPixelInfo(); void updateActionStatus(); void startSaveMessageBox(QWidget* parent); askIfClear startScanMessageBox(QWidget* parent); QString passwordEncrypt(const QString& password); QString passwordDecrypt(const QString& transcode); bool open_scanner(const QString& name, const QString& scheme); bool judgeDiskSpace(QString currentPath, bool showDlg = true); void upgradeApp(QString pkgPath); bool isLimitAccessFolder(int type); //type:1-aquire,2-aquireInto static QString GetDevType(const QString& fwVersion, bool &canLock); void upgradeFwAndLockDevice(); void deleteOverdueLogFile(const QString& logFilePath); void deleteUpgradePkg(const QString& cfgFilePath); QString getDevPid(); void initAcquireIntoComboBox(); private: Ui::MainWindow *ui; QAction *m_act_acquireInto2; QComboBox *m_cbtn_acquireIntoCfg; QString m_currLang; VersionDll *m_versionDll; QString m_password; bool m_admin_loggedIn; HGImgView *m_view; HGImgThumb *m_thumb; QMenu *m_thumbMenu; QMenu* m_menu_imageInsert; QAction *m_moveToAction; QAction* m_act_thumbGrid; QListWidget* m_listwidget; QMenu *m_menu_language; QAction *m_act_simpCN; QAction *m_act_English; dev_que dev_que_; bool auto_save_changes_; bool save_from_changed_; typedef struct _save_opt { QString path; int index; int jpegQuality; int tiffCompressionBW; int tiffCompression; int tiffQuality; bool isOcr; }SAVEOPT; SAVEOPT auto_save_info_; union VIDPID { struct { unsigned short VID; unsigned short PID; }; unsigned int Value; }; HGUInt m_dpi; QString m_currFilePath; int m_currIndex; int m_multiPageCount; int m_multiIndex; bool m_modify; // m_view上面的图像是否改变 bool m_singleScan; // 是否单张扫描 int m_scanType; // 1-扫描到缓存目录,2-扫描到本地目录 int m_scanInsertPos; // 扫描插入位置,-1表示插入到最后 QString m_scanFileName; HGImgFmtWriter m_scanImgFmtWriter; AquireIntoSaveParam m_aquireIntoSaveParam; bool m_aquireIntoInBlank; int m_aquireIntoBatchStartIndex; int m_aquireIntoPageIndex; int m_aquireIntoMultiPageCount; bool m_isScanning; bool m_closeTip; int m_currScanCount; QString m_devSerialNum; QString m_devVersionNum; QString m_currDeviceName; const char* m_oemName; bool m_cacheDirNotify; bool m_AquirePathNotify; // 固件升级和设备锁定 std::vector m_vFwUpgradeAndDevLock; HGThread m_threadFwUpgradeAndDevLock; class HGLineEdit* m_multiPageLineEdit; class Widget_StatusBar *m_wndStatusBar; class dialog_log *m_dialogLog; class Dialog_AquireInto *m_dialogAcquireinto; class Dialog_FullScreen *m_dlgFullScreen; }; #endif // MAINWINDOW_H