#ifndef HG_SETTING_DIALOG_H #define HG_SETTING_DIALOG_H #include #include #include #include "sane/sane_ex.h" #include "config.h" class hg_settingdialog : public QDialog { Q_OBJECT DEVCFG* schemes_; int cur_ind_; // [0, scheme size - 2] will be replaced when click 'OK' button, if want to add new item, set it to -1; add ONE on it when accept source typedef struct _changed_opt { int opt; QVariant val; bool operator==(const int& ind) { return opt == ind; } }CHANGEDOPT; std::vector default_vals_; // values which changed std::vector init_vals_; // values when initialize controls std::vector changed_opts_; // values which changed int changed_count_; bool save_; bool clicked_gamma_; config* cfg_file_; void refresh_control_value(int op_id); bool is_covered(std::vector& org, std::vector& now); // if all options in org are inclued in now, then return true void on_select_scheme(int scheme_ind, bool apply_to_dev = true); QString gen_gamma_file_path(void); QMenu *top_menu_; QLineEdit *edit_name_; QPushButton *rename_; QPushButton *apply_; QPushButton *del_this_; QPushButton *del_all_; QLabel *custom_area_lable_; QPushButton *btn_cut_area_; QPushButton *btn_gamma_; QTextEdit *sketch_; void create_scheme_management_ui(QVBoxLayout* layout); QAction* find_current_scheme_menu(int *scheme_id = NULL); static std::string property_combox_data_type_; enum _cbox_type { COMBO_VAL_STRING = 0, COMBO_VAL_INT, COMBO_VAL_FLOAT, }; public: explicit hg_settingdialog(void *handle, QWidget *parent = nullptr, DEVCFG* cfg = nullptr); ~hg_settingdialog(); public: void initUi(); void updateOpt(); void createUI(); void updateUIStatus(); QVector find_control(int opt_num); void keyPressEvent(QKeyEvent *e); int get_changed_items(void); void set_config_file(config* cfg); private: void *m_handle; private: QString m_qstrFileName; QSettings *m_configIniWrite; QSettings *m_configIniRead; private: void iniWrite(QString title, int id, QVariant value); void iniRead(QString title, int id, QWidget *w); 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 QVariant find_default_value(int id); bool is_equal_default_value(const CHANGEDOPT& opt, int type); bool set_opt_value_for_OPTVAL(QVariant val, int type, OPTVAL* ov); virtual void closeEvent(QCloseEvent* e); int find_covered_scheme(OPTSCHEME& scheme); // return [1, schemes_.size()] void save_scheme(void); void cancel_setting(void); static int find_opt_setting(const char* name, const std::vector& opts); int apply_setting(const SANE_Option_Descriptor* desc, int opt_ind, OPTVAL* val); int apply_settings(OPTSCHEME* scheme); void record_changed_option(int opt, const QVariant& var); private: QVector, QString>> m_list_IdValueTitle; QVector> m_list_defaultOptions; // default values of device QVector> m_list_sliderSpinbox; QVector> m_list_getOpt; QVector m_list_deviceNames; QVector m_list_widgets; 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_buttonOkClicked(); void slot_buttonCancelClicked(); void on_scheme_triggered(QAction*); void slot_pushButton_scheme_management(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; }; #endif // HG_SETTING_DIALOG_H