添加动态改变语言包支持
This commit is contained in:
parent
e005b9bc65
commit
55623ecdfc
|
@ -1,8 +1,11 @@
|
||||||
#include "common_setting.h"
|
#include "common_setting.h"
|
||||||
#include "sane/sane_option_definitions.h"
|
#include "sane/sane_option_definitions.h"
|
||||||
#include "hg_log.h"
|
#include "hg_log.h"
|
||||||
|
|
||||||
|
#define MAKE_ID_AND_STR(id) id, hg_log::lang_load(id)
|
||||||
static struct _fixed_option
|
static struct _fixed_option
|
||||||
{
|
{
|
||||||
|
int str_id;
|
||||||
std::string str;
|
std::string str;
|
||||||
int enum_val;
|
int enum_val;
|
||||||
}
|
}
|
||||||
|
@ -10,130 +13,130 @@ static struct _fixed_option
|
||||||
g_color_mode[] =
|
g_color_mode[] =
|
||||||
{
|
{
|
||||||
|
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_YSMS_HB), COLOR_MODE_BLACK_WHITE },
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_HB), COLOR_MODE_BLACK_WHITE },
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_YSMS_256JHD), COLOR_MODE_256_GRAY},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_256JHD), COLOR_MODE_256_GRAY},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_YSMS_24WCS), COLOR_MODE_24_BITS},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_24WCS), COLOR_MODE_24_BITS},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_YSMS_YSZDSB), COLOR_MODE_AUTO_MATCH}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_YSZDSB), COLOR_MODE_AUTO_MATCH}
|
||||||
},
|
},
|
||||||
g_multi_out[] =
|
g_multi_out[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_CS_HD_HB), MULTI_OUT_ALL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_CS_HD_HB), MULTI_OUT_ALL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_CS_HD), MULTI_COLOR_AND_GRAY},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_CS_HD), MULTI_COLOR_AND_GRAY},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_CS_HB), MULTI_COLOR_AND_BW},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_CS_HB), MULTI_COLOR_AND_BW},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_HD_HB), MULTI_GRAY_AND_BW}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_HD_HB), MULTI_GRAY_AND_BW}
|
||||||
},
|
},
|
||||||
g_rid_color[] =
|
g_rid_color[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_BCS), RID_COLOR_NONE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_BCS), RID_COLOR_NONE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHS), RID_COLOR_RID_RED},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHS), RID_COLOR_RID_RED},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CLS), RID_COLOR_RID_GREEN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CLS), RID_COLOR_RID_GREEN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHULANSE), RID_COLOR_RID_BLUE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHULANSE), RID_COLOR_RID_BLUE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_HSZQ), RID_COLOR_ENHANCE_RED},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_HSZQ), RID_COLOR_ENHANCE_RED},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LSZQ), RID_COLOR_ENHANCE_GREEN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LSZQ), RID_COLOR_ENHANCE_GREEN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LANSEZENGQIANG), RID_COLOR_ENHANCE_BLUE}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LANSEZENGQIANG), RID_COLOR_ENHANCE_BLUE}
|
||||||
},
|
},
|
||||||
|
|
||||||
g_paper[] =
|
g_paper[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A3), PAPER_A3},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A3), PAPER_A3},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A4), PAPER_A4},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A4), PAPER_A4},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A5), PAPER_A5},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A5), PAPER_A5},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A6), PAPER_A6},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A6), PAPER_A6},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B4), PAPER_B4},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B4), PAPER_B4},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B5), PAPER_B5},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B5), PAPER_B5},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B6), PAPER_B6},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B6), PAPER_B6},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_8K), PAPER_8K},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_8K), PAPER_8K},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_16K), PAPER_16K},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_16K), PAPER_16K},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_Letter), PAPER_LETTER},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_Letter), PAPER_LETTER},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A4HX), PAPER_A4_LATERAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A4HX), PAPER_A4_LATERAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A5HX), PAPER_A5_LATERAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A5HX), PAPER_A5_LATERAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A6HX), PAPER_A6_LATERAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A6HX), PAPER_A6_LATERAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B5HX), PAPER_B5_LATERAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B5HX), PAPER_B5_LATERAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B6HX), PAPER_B6_LATERAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B6HX), PAPER_B6_LATERAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_16KHX), PAPER_16K_LATERAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_16KHX), PAPER_16K_LATERAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_LetterHX), PAPER_LETTER_LATERAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_LetterHX), PAPER_LETTER_LATERAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_DoubleLetter), PAPER_DOUBLE_LETTER},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_DoubleLetter), PAPER_DOUBLE_LETTER},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_LEGAL), PAPER_LEGAL},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_LEGAL), PAPER_LEGAL},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_PPYSCC), PAPER_AUTO_MATCH},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_PPYSCC), PAPER_AUTO_MATCH},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_ZDSMCC), PAPER_MAX_SIZE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_ZDSMCC), PAPER_MAX_SIZE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_ZDSMCCZDCQ), PAPER_MAX_SIZE_CLIP},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_ZDSMCCZDCQ), PAPER_MAX_SIZE_CLIP},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZZCC_SLSJ), PAPER_TRIGEMINY}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_SLSJ), PAPER_TRIGEMINY}
|
||||||
},
|
},
|
||||||
|
|
||||||
g_page[] =
|
g_page[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SMYM_DM), PAGE_SINGLE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_DM), PAGE_SINGLE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SMYM_SM), PAGE_DOUBLE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_SM), PAGE_DOUBLE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SMYM_TGKBYTY), PAGE_OMIT_EMPTY},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_TGKBYTY), PAGE_OMIT_EMPTY},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SMYM_TGKBYFPZ), PAGE_OMIT_EMPTY_RECEIPT},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_TGKBYFPZ), PAGE_OMIT_EMPTY_RECEIPT},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SMYM_DZ), PAGE_FOLIO}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_DZ), PAGE_FOLIO}
|
||||||
},
|
},
|
||||||
|
|
||||||
g_sharpen[] =
|
g_sharpen[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_RHYMH_W), SHARPEN_NONE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_W), SHARPEN_NONE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_RHYMH_RH), SHARPEN_SHARPEN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_RH), SHARPEN_SHARPEN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_RHYMH_JYBRH), SHARPEN_SHARPEN_MORE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_JYBRH), SHARPEN_SHARPEN_MORE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_RHYMH_MH), SHARPEN_HAZY},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_MH), SHARPEN_HAZY},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_RHYMH_JYBMH), SHARPEN_HAZY_MORE}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_JYBMH), SHARPEN_HAZY_MORE}
|
||||||
},
|
},
|
||||||
|
|
||||||
g_fill_bkg[] =
|
g_fill_bkg[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_BJTCFS_TDBX), FILL_BKG_CONVEX_POLYGON},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_BJTCFS_TDBX), FILL_BKG_CONVEX_POLYGON},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_BJTCFS_ADBX), FILL_BKG_CONCAVE_POLYGON}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_BJTCFS_ADBX), FILL_BKG_CONCAVE_POLYGON}
|
||||||
},
|
},
|
||||||
|
|
||||||
g_scan_mode[] =
|
g_scan_mode[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SMZS_LXSM), SCAN_MODE_CONTINUOUS},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SMZS_LXSM), SCAN_MODE_CONTINUOUS},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SMZS_SMZDZS), SCAN_MODE_GIVEN_COUNT}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SMZS_SMZDZS), SCAN_MODE_GIVEN_COUNT}
|
||||||
},
|
},
|
||||||
|
|
||||||
g_text_direction[] =
|
g_text_direction[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_WGFX_0), TEXT_DIRECTION_0},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_0), TEXT_DIRECTION_0},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_WGFX_90), TEXT_DIRECTION_90},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_90), TEXT_DIRECTION_90},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_WGFX_180), TEXT_DIRECTION_180},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_180), TEXT_DIRECTION_180},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_WGFX__90), TEXT_DIRECTION_270},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX__90), TEXT_DIRECTION_270},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_WGFX_ZDWBFXSB), TEXT_DIRECTION_AUTO}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_ZDWBFXSB), TEXT_DIRECTION_AUTO}
|
||||||
},
|
},
|
||||||
|
|
||||||
g_permeate_lv[] =
|
g_permeate_lv[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_JR), PERMAEATE_WEAKER},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_JR), PERMAEATE_WEAKER},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_R), PERMAEATE_WEAK},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_R), PERMAEATE_WEAK},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_YB), PERMAEATE_ORDINARY},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_YB), PERMAEATE_ORDINARY},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_Q), PERMAEATE_STRONG},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_Q), PERMAEATE_STRONG},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_JQ), PERMAEATE_STRONGER}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_JQ), PERMAEATE_STRONGER}
|
||||||
},
|
},
|
||||||
g_img_quality[] =
|
g_img_quality[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HZ_W), IMG_NONE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HZ_W), IMG_NONE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HZ_SDYX), IMG_SPEED},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HZ_SDYX), IMG_SPEED},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_HZ_HZYX), IMG_QUALITY}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_HZ_HZYX), IMG_QUALITY}
|
||||||
},
|
},
|
||||||
g_paper_strenght[]=
|
g_paper_strenght[]=
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZQD_R),PAPER_WEAK},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZQD_R),PAPER_WEAK},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZQD_YB),PAPER_AVERAGE},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZQD_YB),PAPER_AVERAGE},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_FZQD_Q),PAPER_STRONG}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_FZQD_Q),PAPER_STRONG}
|
||||||
},
|
},
|
||||||
g_sleep_time[]=
|
g_sleep_time[]=
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_XMSJ_BXM),SLEEP_TIME_0MIN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_BXM),SLEEP_TIME_0MIN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_XMSJ_WFZ),SLEEP_TIME_5MIN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_WFZ),SLEEP_TIME_5MIN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_XMSJ_SFZ),SLEEP_TIME_10MIN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_SFZ),SLEEP_TIME_10MIN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_XMSJ_BXS),SLEEP_TIME_30MIN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_BXS),SLEEP_TIME_30MIN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_XMSJ_YXS),SLEEP_TIME_60MIN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_YXS),SLEEP_TIME_60MIN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_XMSJ_LXS),SLEEP_TIME_120MIN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_LXS),SLEEP_TIME_120MIN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_XMSJ_SXS),SLEEP_TIME_240MIN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_SXS),SLEEP_TIME_240MIN},
|
||||||
},
|
},
|
||||||
g_fold_type[] =
|
g_fold_type[] =
|
||||||
{
|
{
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZYDZ),FOLD_TYPE_LEFT_RIGHT},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZYDZ),FOLD_TYPE_LEFT_RIGHT},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_SXDZ),FOLD_TYPE_UP_DOWN},
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_SXDZ),FOLD_TYPE_UP_DOWN},
|
||||||
{hg_log::lang_load(ID_OPTION_VALUE_ZDDZ),FOLD_TYPE_AUTO}
|
{MAKE_ID_AND_STR(ID_OPTION_VALUE_ZDDZ),FOLD_TYPE_AUTO}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct paper_size
|
static struct paper_size
|
||||||
|
@ -245,7 +248,13 @@ static std::string get_str(struct _fixed_option* arr, int num, int enm, int defa
|
||||||
else
|
else
|
||||||
return arr[default_v].str;
|
return arr[default_v].str;
|
||||||
}
|
}
|
||||||
|
static void reload_string(struct _fixed_option* arr, int num)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < num; ++i)
|
||||||
|
arr[i].str = hg_log::lang_load(arr[i].str_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RELOAD_STRING(arr) reload_string(arr, ARRAY_SIZE(arr))
|
||||||
#define INVOKE_MATCH(arr, val, yes) match_best(arr, ARRAY_SIZE(arr), val, yes)
|
#define INVOKE_MATCH(arr, val, yes) match_best(arr, ARRAY_SIZE(arr), val, yes)
|
||||||
#define INVOKE_STR(arr, val, def) get_str(arr, ARRAY_SIZE(arr), val, def)
|
#define INVOKE_STR(arr, val, def) get_str(arr, ARRAY_SIZE(arr), val, def)
|
||||||
#define SET_DEFAULT_ON_FAIL(map_array, ind, val, def) \
|
#define SET_DEFAULT_ON_FAIL(map_array, ind, val, def) \
|
||||||
|
@ -530,3 +539,22 @@ bool is_save_img_when_double_paper(int flag)
|
||||||
{
|
{
|
||||||
return flag& DOUBLE_PAPER_SAVE_IMG;
|
return flag& DOUBLE_PAPER_SAVE_IMG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void reload_setting_string_from_pak(int cp, void* param)
|
||||||
|
{
|
||||||
|
RELOAD_STRING(g_color_mode);
|
||||||
|
RELOAD_STRING(g_multi_out);
|
||||||
|
RELOAD_STRING(g_rid_color);
|
||||||
|
RELOAD_STRING(g_paper);
|
||||||
|
RELOAD_STRING(g_page);
|
||||||
|
RELOAD_STRING(g_sharpen);
|
||||||
|
RELOAD_STRING(g_fill_bkg);
|
||||||
|
RELOAD_STRING(g_scan_mode);
|
||||||
|
RELOAD_STRING(g_text_direction);
|
||||||
|
RELOAD_STRING(g_permeate_lv);
|
||||||
|
RELOAD_STRING(g_img_quality);
|
||||||
|
RELOAD_STRING(g_paper_strenght);
|
||||||
|
RELOAD_STRING(g_sleep_time);
|
||||||
|
RELOAD_STRING(g_fold_type);
|
||||||
|
}
|
||||||
|
|
|
@ -311,6 +311,9 @@ enum
|
||||||
int match_best_fold_type(std::string& val, bool* exact);
|
int match_best_fold_type(std::string& val, bool* exact);
|
||||||
std::string is_fold_type(int fold_type);
|
std::string is_fold_type(int fold_type);
|
||||||
|
|
||||||
|
// call me when language changed in multi-language - added on 2023-01-19
|
||||||
|
void reload_setting_string_from_pak(int cp, void* param);
|
||||||
|
|
||||||
typedef union _img_proc_fixed_param
|
typedef union _img_proc_fixed_param
|
||||||
{
|
{
|
||||||
unsigned long long value;
|
unsigned long long value;
|
||||||
|
|
|
@ -161,7 +161,6 @@ hg_scanner::hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io,in
|
||||||
#if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64)
|
#if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64)
|
||||||
isx86_Advan_ = false;
|
isx86_Advan_ = false;
|
||||||
#endif
|
#endif
|
||||||
lang_initialize();
|
|
||||||
init_setting_func_map();
|
init_setting_func_map();
|
||||||
final_path_ = hg_log::ini_get("path", "final_img");
|
final_path_ = hg_log::ini_get("path", "final_img");
|
||||||
if(final_path_.empty())
|
if(final_path_.empty())
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
#include "../hgdev/scanner_manager.h"
|
#include "../hgdev/scanner_manager.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <lang/app_language.h>
|
||||||
|
#include "../hgdev/common_setting.h"
|
||||||
|
|
||||||
#if defined(WIN32) || defined(_WIN64)
|
#if defined(WIN32) || defined(_WIN64)
|
||||||
#include <fileapi.h>
|
#include <fileapi.h>
|
||||||
#else
|
#else
|
||||||
|
@ -90,6 +93,13 @@ extern "C"
|
||||||
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Module sane : [%s] - %s\n", g_sane_ver.c_str(), sane.c_str());
|
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Module sane : [%s] - %s\n", g_sane_ver.c_str(), sane.c_str());
|
||||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Module exe : %s\n", (pe + path + name).c_str());
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Module exe : %s\n", (pe + path + name).c_str());
|
||||||
|
|
||||||
|
if (lang_initialize() == -1)
|
||||||
|
{
|
||||||
|
VLOG_MINI_1(LOG_LEVEL_FATAL, "No language package found(%d)!\n", -1);
|
||||||
|
return SCANNER_ERR_LANG_PAK_LOST;
|
||||||
|
}
|
||||||
|
register_language_changed_notify(reload_setting_string_from_pak, true);
|
||||||
|
|
||||||
hg_scanner_mgr::set_version(VERSION_MAJOR, VERSION_MINOR, VERSION_YEAR, GET_BUILD_VER);
|
hg_scanner_mgr::set_version(VERSION_MAJOR, VERSION_MINOR, VERSION_YEAR, GET_BUILD_VER);
|
||||||
hg_scanner_mgr::set_exe_name(pe.c_str(), name.c_str());
|
hg_scanner_mgr::set_exe_name(pe.c_str(), name.c_str());
|
||||||
hg_scanner_mgr::instance(callback);
|
hg_scanner_mgr::instance(callback);
|
||||||
|
@ -98,6 +108,7 @@ extern "C"
|
||||||
}
|
}
|
||||||
void hg_scanner_uninitialize(void)
|
void hg_scanner_uninitialize(void)
|
||||||
{
|
{
|
||||||
|
register_language_changed_notify(reload_setting_string_from_pak, false);
|
||||||
hg_scanner_mgr::clear();
|
hg_scanner_mgr::clear();
|
||||||
hg_log::unint();
|
hg_log::unint();
|
||||||
}
|
}
|
||||||
|
@ -230,9 +241,12 @@ extern "C"
|
||||||
RETURN_IF(err, SCANNER_ERR_DEVICE_PC_BUSY);
|
RETURN_IF(err, SCANNER_ERR_DEVICE_PC_BUSY);
|
||||||
RETURN_IF(err, SCANNER_ERR_DEVICE_ISLOCK);
|
RETURN_IF(err, SCANNER_ERR_DEVICE_ISLOCK);
|
||||||
|
|
||||||
|
if (err == SCANNER_ERR_LANG_PAK_LOST)
|
||||||
|
return "SCANNER_ERR_LANG_PAK_LOST";
|
||||||
|
|
||||||
// NOTE: multi-thread unsafe here
|
// NOTE: multi-thread unsafe here
|
||||||
static char g_unk_err[80] = { 0 };
|
static char g_unk_err[80] = { 0 };
|
||||||
sprintf(g_unk_err, "\346\234\252\347\237\245\351\224\231\350\257\257\357\274\2320x%X", err);
|
sprintf(g_unk_err, "Unknown error: 0x%X", err);
|
||||||
|
|
||||||
return g_unk_err;
|
return g_unk_err;
|
||||||
}
|
}
|
||||||
|
@ -295,6 +309,9 @@ extern "C"
|
||||||
RETURN_DESC_IF(err, SCANNER_ERR_DEVICE_PC_BUSY);
|
RETURN_DESC_IF(err, SCANNER_ERR_DEVICE_PC_BUSY);
|
||||||
RETURN_DESC_IF(err, SCANNER_ERR_DEVICE_ISLOCK);
|
RETURN_DESC_IF(err, SCANNER_ERR_DEVICE_ISLOCK);
|
||||||
|
|
||||||
|
if (err == SCANNER_ERR_LANG_PAK_LOST)
|
||||||
|
return "SCANNER_ERR_LANG_PAK_LOST";
|
||||||
|
|
||||||
// NOTE: multi-thread unsafe here
|
// NOTE: multi-thread unsafe here
|
||||||
static char g_unk_err[80] = { 0 };
|
static char g_unk_err[80] = { 0 };
|
||||||
strcpy(g_unk_err, hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_UNKNOWN_ERROR));
|
strcpy(g_unk_err, hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_UNKNOWN_ERROR));
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "../../sdk/include/sane/sane_option_definitions.h"
|
#include "../../sdk/include/sane/sane_option_definitions.h"
|
||||||
#include "sane_option.h"
|
#include "sane_option.h"
|
||||||
|
#include <lang/app_language.h>
|
||||||
|
|
||||||
#ifndef SIGUSR1
|
#ifndef SIGUSR1
|
||||||
#define SIGUSR1 10
|
#define SIGUSR1 10
|
||||||
|
@ -338,10 +339,18 @@ namespace local_utility
|
||||||
hg_sane_middleware* hg_sane_middleware::inst_ = NULL;
|
hg_sane_middleware* hg_sane_middleware::inst_ = NULL;
|
||||||
const SANE_Device** hg_sane_middleware::dev_list_ = NULL;
|
const SANE_Device** hg_sane_middleware::dev_list_ = NULL;
|
||||||
|
|
||||||
hg_sane_middleware::hg_sane_middleware(void) : opt_0_(nullptr), std_opt_(nullptr)
|
hg_sane_middleware::hg_sane_middleware(void) : opt_0_(nullptr), std_opt_(nullptr), init_ok_(false)
|
||||||
{
|
{
|
||||||
|
if (lang_initialize() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char sane_ver[40] = { 0 };
|
char sane_ver[40] = { 0 };
|
||||||
|
|
||||||
|
init_ok_ = true;
|
||||||
|
register_language_changed_notify(&hg_sane_middleware::language_changed, true);
|
||||||
|
|
||||||
sprintf(sane_ver, "%u.%u.%u", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, VERSION_BUILD);
|
sprintf(sane_ver, "%u.%u.%u", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, VERSION_BUILD);
|
||||||
signal(SIGUSR1, &hg_sane_middleware::device_pnp);
|
signal(SIGUSR1, &hg_sane_middleware::device_pnp);
|
||||||
hg_scanner_set_sane_info(g_sane_name.c_str(), sane_ver);
|
hg_scanner_set_sane_info(g_sane_name.c_str(), sane_ver);
|
||||||
|
@ -359,6 +368,7 @@ hg_sane_middleware::hg_sane_middleware(void) : opt_0_(nullptr), std_opt_(nullptr
|
||||||
}
|
}
|
||||||
hg_sane_middleware::~hg_sane_middleware()
|
hg_sane_middleware::~hg_sane_middleware()
|
||||||
{
|
{
|
||||||
|
register_language_changed_notify(&hg_sane_middleware::language_changed, false);
|
||||||
for (size_t i = 0; i < opts_.size(); ++i)
|
for (size_t i = 0; i < opts_.size(); ++i)
|
||||||
{
|
{
|
||||||
local_utility::free_memory(opts_[i].desc);
|
local_utility::free_memory(opts_[i].desc);
|
||||||
|
@ -372,6 +382,10 @@ hg_sane_middleware::~hg_sane_middleware()
|
||||||
delete std_opt_;
|
delete std_opt_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hg_sane_middleware::language_changed(int cp, void* param)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
const SANE_Device** hg_sane_middleware::to_sane_device(ScannerInfo* hgscanner, int count)
|
const SANE_Device** hg_sane_middleware::to_sane_device(ScannerInfo* hgscanner, int count)
|
||||||
{
|
{
|
||||||
// 将多级指针安排在一个连ç»çš„内å˜ç©ºé—´å˜æ”¾
|
// 将多级指针安排在一个连ç»çš„内å˜ç©ºé—´å˜æ”¾
|
||||||
|
@ -1624,6 +1638,10 @@ SANE_Status hg_sane_middleware::io_control(SANE_Handle h, unsigned long code, vo
|
||||||
|
|
||||||
return local_utility::scanner_err_2_sane_statu(ret);
|
return local_utility::scanner_err_2_sane_statu(ret);
|
||||||
}
|
}
|
||||||
|
bool hg_sane_middleware::is_ready(void)
|
||||||
|
{
|
||||||
|
return init_ok_;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// å…³è<C2B3>”项处ç<E2809E>?
|
/// å…³è<C2B3>”项处ç<E2809E>?
|
||||||
|
@ -2025,7 +2043,9 @@ extern "C" { // avoid compiler exporting name in C++ style !!!
|
||||||
SANE_Status inner_sane_init(SANE_Int* version_code, SANE_Auth_Callback authorize)
|
SANE_Status inner_sane_init(SANE_Int* version_code, SANE_Auth_Callback authorize)
|
||||||
{
|
{
|
||||||
local_utility::cb_auth_ = authorize;
|
local_utility::cb_auth_ = authorize;
|
||||||
hg_sane_middleware::instance();
|
if (!hg_sane_middleware::instance()->is_ready())
|
||||||
|
return (SANE_Status)SCANNER_ERR_LANG_PAK_LOST;
|
||||||
|
|
||||||
local_utility::get_version(version_code);
|
local_utility::get_version(version_code);
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
@ -2100,7 +2120,9 @@ extern "C" { // avoid compiler exporting name in C++ style !!!
|
||||||
SANE_Status inner_sane_init_ex(SANE_Int* version_code, sane_callback cb, void* param)
|
SANE_Status inner_sane_init_ex(SANE_Int* version_code, sane_callback cb, void* param)
|
||||||
{
|
{
|
||||||
local_utility::set_callback(cb, param);
|
local_utility::set_callback(cb, param);
|
||||||
hg_sane_middleware::instance();
|
if (!hg_sane_middleware::instance()->is_ready())
|
||||||
|
return (SANE_Status)SCANNER_ERR_LANG_PAK_LOST;
|
||||||
|
|
||||||
local_utility::get_version(version_code);
|
local_utility::get_version(version_code);
|
||||||
|
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
|
|
@ -38,6 +38,7 @@ class hg_sane_middleware
|
||||||
std::vector<DEVOPT> opts_;
|
std::vector<DEVOPT> opts_;
|
||||||
SANE_Option_Descriptor* opt_0_;
|
SANE_Option_Descriptor* opt_0_;
|
||||||
sane_std_opts* std_opt_;
|
sane_std_opts* std_opt_;
|
||||||
|
bool init_ok_;
|
||||||
|
|
||||||
typedef struct _openning_scanner_option
|
typedef struct _openning_scanner_option
|
||||||
{
|
{
|
||||||
|
@ -66,6 +67,7 @@ class hg_sane_middleware
|
||||||
static hg_sane_middleware *inst_;
|
static hg_sane_middleware *inst_;
|
||||||
static const SANE_Device** dev_list_;
|
static const SANE_Device** dev_list_;
|
||||||
|
|
||||||
|
static void language_changed(int cp, void* param);
|
||||||
static const SANE_Device** to_sane_device(ScannerInfo* hgscanner, int count); // 将驱动层传回的设备列表数据,转换为标准SANE协议的设备列表
|
static const SANE_Device** to_sane_device(ScannerInfo* hgscanner, int count); // 将驱动层传回的设备列表数据,转换为标准SANE协议的设备列表
|
||||||
static void free_sane_device(SANE_Device** dev); // 释放由to_sane_device返回的指针
|
static void free_sane_device(SANE_Device** dev); // 释放由to_sane_device返回的指针
|
||||||
static void device_pnp(int sig); // 热插拔事件监控
|
static void device_pnp(int sig); // 热插拔事件监控
|
||||||
|
@ -195,6 +197,7 @@ public:
|
||||||
SANE_Status io_control(SANE_Handle h, unsigned long code, void* data, unsigned* len);
|
SANE_Status io_control(SANE_Handle h, unsigned long code, void* data, unsigned* len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
bool is_ready(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace local_utility
|
namespace local_utility
|
||||||
|
|
Loading…
Reference in New Issue