#ifndef HG_SETTING_DIALOG_H #define HG_SETTING_DIALOG_H #include #include #include #include "cfg/gb_json.h" #include "device_menu.h" #include "twainui.h" class hg_settingdialog : public QDialog { Q_OBJECT int changed_count_; bool save_; bool clicked_gamma_; bool quit_ = false; // dev_que dev_que_; gb::scanner_cfg *cur_cfg_; gb::sane_config_schm *cur_scheme_; gb::sane_config_schm *def_value_; void refresh_control_value(int op_id); void on_select_scheme(bool apply_to_dev = true); QString gen_gamma_file_path(void); QMenu *top_menu_; QLineEdit *edit_name_; QPushButton *m_pbtn_addNew; QPushButton* m_pbtn_Save; QPushButton *m_deleteCur; QPushButton *m_deleteAll; QLabel * m_label_restore; QPushButton* m_pbtn_restore; QLabel *custom_area_lable_; QPushButton *btn_cut_area_; QPushButton *btn_gamma_; QTextEdit *sketch_; QLineEdit *m_lineEdit_name; void create_scheme_management_ui(QVBoxLayout* layout); QString find_current_scheme_menu(int *scheme_id = nullptr); static std::string property_combox_data_type_; enum _cbox_type { COMBO_VAL_STRING = 0, COMBO_VAL_INT, COMBO_VAL_FLOAT, }; public: explicit hg_settingdialog(class Manager *mgr, SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName, gb::scanner_cfg* cfg, std::function callback, std::function* notify, QWidget *parent = nullptr); ~hg_settingdialog(); static void apply_scheme(SANE_Handle dev, LPSANEAPI api, gb::sane_config_schm* schm); static void FuncNotify(int event, void* msg, int flag); public: void initUi(); void update_opt_value_from_driver(); void createUI(); void updateUIStatus(); QVector find_control(int opt_num); int get_changed_items(void); int getCloseButtonCliked(); gb::sane_config_schm *getCurScheme(); void clear_callback(void) { quit_ = true; m_callback = std::function(); } public: enum closeButtonClicked { closeButtonOk = 0, closeButtonCancel, closeButtonNormal, closeButtonScan, }; int m_closeButton; private: gb::sane_config_schm* m_scheme; class Manager *m_mgr; SANEAPI m_saneAPI; SANE_Handle m_devHandle; bool m_showScan; std::string m_devName; private: QString m_qstrFileName; QSettings *m_configIniWrite; QSettings *m_configIniRead; protected: virtual void keyPressEvent(QKeyEvent* e) override; private: QString md5(QString key); const void* find_option_description(int id); // return const SANE_Option_Descriptor* pointer const void* find_option_description(const std::string& title, int* id); // return const SANE_Option_Descriptor* pointer virtual void closeEvent(QCloseEvent* e); virtual bool eventFilter(QObject *target, QEvent *event) override; void save_to_default_if_ui_not_equal_scheme(gb::sane_config_schm* cur, bool save); bool createMsgBoxUi(bool add, std::string &name); std::string getCurUiShemeName(std::string name); void save_scheme(void); void cancel_setting(void); std::string getAppVersion(); void apply_current_scheme(void); void setIcon(); void applyDeviceScheme(); void updateDefaultScheme(); void saveOriginDeviceScheme(); void cancelScheme(); void restoreDeviceScheme(); void processIniFile(); void initGammaData(); void updateSchemeFromUi(gb::sane_config_schm* schm = nullptr); void updateSchemeManagerUi(); void updateRestorePushButton(); private: QVector, QString>> m_list_IdValueTitle; QVector> m_list_defaultOptions; // default values of device QVector> m_list_originDeviceScheme; QVector> m_list_sliderSpinbox; QVector> m_list_getOpt; QVector m_list_deviceNames; QVector m_list_widgets; signals: void scan_status(QString info, bool isScanning); private slots: void on_scan_status(QString info, bool isScanning); private slots: void slot_checkedClicked(); void slot_sliderClicked(int value); void slot_spinBoxClicked(int value); void slot_doubleSpinboxClicked(double value); void slot_string_list_comboBoxClicked(); void slot_pushButtonClicked(); void slot_cutButtonClicked(); void slot_gammaButtonClicked(); void slot_word_list_comboBoxClicked(int value); void slot_lineEditInput(); void slot_buttonAboutClicked(); void slot_buttonScanClicked(); void slot_buttonOkClicked(); void slot_buttonCancelClicked(); void slot_pushButton_scheme_management(void); void on_current_scheme_changed(void); void restore_2_default_settings(void); private: int m_dpiId; int m_dpiValue; int m_paperSizeId; QString m_paperSizeValue; int m_cutLeftId; int m_cutTopId; int m_cutRightId; int m_cutBottomId; double m_cutWidth; // 单位是毫米 double m_cutHeight; // 单位是毫米 double m_cutLeftValue; // 单位是毫米 double m_cutTopValue; // 单位是毫米 double m_cutRightValue; // 单位是毫米 double m_cutBottomValue; // 单位是毫米 int m_colorModeId; QString m_colorModeValue; SANE_Gamma m_gammaData; SANE_Gamma m_originGammaData; QComboBox *comb_; std::function m_callback; bool m_isRefreshUi; bool m_isMultiOutMode; bool m_isScanning; bool m_isAutoFinish; }; #endif // HG_SETTING_DIALOG_H