HGGitLab

Commit f5ade2a8 authored by luoliangyi's avatar luoliangyi

增加sane设置对话框

parent f9ae2e76
......@@ -75,7 +75,8 @@ SOURCES += \
../../../ui/HGImgView.cpp \
../../../ui/HGImgThumb.cpp \
widget_imgproc_base.cpp \
widget_statusbar.cpp
widget_statusbar.cpp \
hg_settingdialog.cpp
HEADERS += \
../../../ui/HGUIGlobal.h \
......@@ -98,7 +99,8 @@ HEADERS += \
../../../ui/HGImgView.h \
../../../ui/HGImgThumb.h \
widget_imgproc_base.h \
widget_statusbar.h
widget_statusbar.h \
hg_settingdialog.h
FORMS += \
dialog_admin.ui \
......
This diff is collapsed.
#ifndef DIALOG_H
#define DIALOG_H
#include <QtWidgets>
#include <QSettings>
#include <algorithm>
#include "sane_ex/sane_ex.h"
#define IS_DOUBLE_EQUAL(a, b) fabs((a) - (b)) < .00001
typedef struct _opt_val
{
std::string name;
std::string type;
std::string val;
bool operator==(const struct _opt_val& r)
{
if(name != r.name)
return false;
if(type == "float")
{
return IS_DOUBLE_EQUAL(atof(val.c_str()), atof(r.val.c_str()));
}
else {
return val == r.val;
}
}
bool operator==(const std::string& n)
{
return name == n;
}
}OPTVAL;
typedef struct _opt_scheme
{
std::string name; // scheme name
std::vector<OPTVAL> opts;
bool operator==(const std::string& n)
{
return name == n;
}
bool operator==(const struct _opt_scheme& r)
{
if(opts.size() != r.opts.size())
return false;
bool equal = true;
for(size_t i = 0; i < r.opts.size(); ++i)
{
std::vector<OPTVAL>::iterator it = std::find(opts.begin(), opts.end(), r.opts[i].name);
if(it == opts.end() ||
r.opts[i].val != it->val)
{
equal = false;
break;
}
}
return equal;
}
}OPTSCHEME;
typedef struct _dev_configs
{
std::string name; // device name
int cur_scheme; // -1 is none user scheme applied, and points to the default setting which at first in 'schemes'
std::vector<OPTSCHEME> schemes; // NOTE: the first is always the default setting, and (cur_scheme + 1) is the user customizing setting, -1 is the default setting
bool operator==(const std::string& n)
{
return name == n;
}
}DEVCFG;
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<CHANGEDOPT> default_vals_; // values which changed
std::vector<CHANGEDOPT> init_vals_; // values when initialize controls
std::vector<CHANGEDOPT> changed_opts_; // values which changed
int changed_count_;
bool save_;
void refresh_control_value(int op_id);
bool is_covered(std::vector<OPTVAL>& org, std::vector<OPTVAL>& 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);
QMenu *top_menu_;
QLineEdit *edit_name_;
QPushButton *rename_;
QPushButton *apply_;
QPushButton *del_this_;
QPushButton *del_all_;
QTextEdit *sketch_;
void create_scheme_management_ui(QVBoxLayout* layout);
QAction* find_current_scheme_menu(int *scheme_id = NULL);
public:
explicit hg_settingdialog(void *handle, QWidget *parent = nullptr,
DEVCFG* cfg = nullptr);
~hg_settingdialog();
public:
void initUi();
void updateOpt();
void createUI();
void updateUIStatus();
QVector<QWidget*> find_control(int opt_num);
void keyPressEvent(QKeyEvent *e);
int get_changed_items(void);
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<OPTVAL>& opts);
int apply_setting(const SANE_Option_Descriptor* desc, int opt_ind, OPTVAL* val);
int apply_settings(OPTSCHEME* scheme);
private:
QVector<QPair<QPair<int, QVariant>, QString>> m_list_IdValueTitle;
QVector<QPair<const void*, QVariant>> m_list_defaultOptions; // default values of device
QVector<QPair<QObject*, QObject*>> m_list_sliderSpinbox;
QVector<QPair<int, const void*>> m_list_getOpt;
QVector<std::string> m_list_deviceNames;
QVector<QWidget*> 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_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);
};
#endif // DIALOG_H
......@@ -23,6 +23,7 @@
#include "dialog_passwordchange.h"
#include "dialog_insertindex.h"
#include "dialog_aquireinto.h"
#include "hg_settingdialog.h"
#include "imgfmt/HGPdf.h"
#include "imgfmt/HGImgFmt.h"
#include "imgproc/HGImgProc.h"
......@@ -1777,7 +1778,17 @@ void MainWindow::on_act_scannerSettings_triggered()
}
}
#else
// TODO 打开sane设置对话框
if (nullptr != m_saneDeviceHandle)
{
DEVCFG cfg;
cfg.name = m_saneDeviceAction->text().toStdString();
cfg.cur_scheme = -1;
hg_settingdialog dlg(m_saneDeviceHandle, this, &cfg);
if (dlg.exec())
{
int changes = dlg.get_changed_items();
}
}
#endif
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment