优化界面显示;优化固定ID匹配

This commit is contained in:
gb 2023-09-18 09:51:42 +08:00
parent f756a7b180
commit d5a3f5c553
5 changed files with 173 additions and 117 deletions

View File

@ -73,129 +73,145 @@ namespace known_name
return cat_name;
}
#define NAME_WITH_FIX_ID(id) { SANE_STD_OPT_NAME_##id, SANE_OPT_ID_##id }
struct
{
std::string name;
int fix_id;
}g_fix_ids[] = {
NAME_WITH_FIX_ID(IS_MULTI_OUT),
NAME_WITH_FIX_ID(MULTI_OUT_TYPE),
NAME_WITH_FIX_ID(COLOR_MODE),
NAME_WITH_FIX_ID(FILTER),
NAME_WITH_FIX_ID(RID_MULTIOUT_RED),
NAME_WITH_FIX_ID(RID_ANSWER_SHEET_RED),
NAME_WITH_FIX_ID(ERASE_BACKGROUND),
NAME_WITH_FIX_ID(BKG_COLOR_RANGE),
NAME_WITH_FIX_ID(SHARPEN),
NAME_WITH_FIX_ID(RID_MORR),
NAME_WITH_FIX_ID(RID_GRID),
NAME_WITH_FIX_ID(ERROR_EXTENSION),
NAME_WITH_FIX_ID(NOISE_OPTIMIZE),
NAME_WITH_FIX_ID(NOISE_SIZE),
NAME_WITH_FIX_ID(PAPER),
NAME_WITH_FIX_ID(CUSTOM_AREA),
NAME_WITH_FIX_ID(CUSTOM_AREA_LEFT),
NAME_WITH_FIX_ID(CUSTOM_AREA_RIGHT),
NAME_WITH_FIX_ID(CUSTOM_AREA_TOP),
NAME_WITH_FIX_ID(CUSTOM_AREA_BOTTOM),
NAME_WITH_FIX_ID(SIZE_CHECK),
NAME_WITH_FIX_ID(PAGE),
NAME_WITH_FIX_ID(DISCARD_BLANK_SENS),
NAME_WITH_FIX_ID(RESOLUTION),
NAME_WITH_FIX_ID(IMAGE_QUALITY),
NAME_WITH_FIX_ID(EXCHANGE),
NAME_WITH_FIX_ID(SPLIT),
NAME_WITH_FIX_ID(ANTI_SKEW),
NAME_WITH_FIX_ID(IS_CUSTOM_GAMMA),
NAME_WITH_FIX_ID(BRIGHTNESS),
NAME_WITH_FIX_ID(CONTRAST),
NAME_WITH_FIX_ID(GAMMA),
NAME_WITH_FIX_ID(ERASE_BLACK_FRAME),
NAME_WITH_FIX_ID(DARK_SAMPLE),
NAME_WITH_FIX_ID(THRESHOLD),
NAME_WITH_FIX_ID(ANTI_NOISE_LEVEL),
NAME_WITH_FIX_ID(MARGIN),
NAME_WITH_FIX_ID(FILL_BKG_MODE),
NAME_WITH_FIX_ID(IS_ANTI_PERMEATE),
NAME_WITH_FIX_ID(ANTI_PERMEATE_LEVEL),
NAME_WITH_FIX_ID(RID_HOLE),
NAME_WITH_FIX_ID(SEARCH_HOLE_RANGE),
NAME_WITH_FIX_ID(IS_FILL_COLOR),
NAME_WITH_FIX_ID(IS_ULTROSONIC_CHECK),
NAME_WITH_FIX_ID(IS_CHECK_STAPLE),
NAME_WITH_FIX_ID(SCAN_MODE),
NAME_WITH_FIX_ID(SCAN_COUNT),
NAME_WITH_FIX_ID(TEXT_DIRECTION),
NAME_WITH_FIX_ID(IS_ROTATE_BKG_180),
NAME_WITH_FIX_ID(IS_CHECK_DOG_EAR),
NAME_WITH_FIX_ID(DOG_EAR_SIZE),
NAME_WITH_FIX_ID(IS_CHECK_ASKEW),
NAME_WITH_FIX_ID(ASKEW_RANGE),
NAME_WITH_FIX_ID(BINARY_THRESHOLD),
NAME_WITH_FIX_ID(IS_PHOTO_MODE),
NAME_WITH_FIX_ID(DOUBLE_FEED_HANDLE),
NAME_WITH_FIX_ID(WAIT_TO_SCAN),
NAME_WITH_FIX_ID(FEED_STRENGTH),
NAME_WITH_FIX_ID(TIME_TO_SLEEP),
NAME_WITH_FIX_ID(IS_AUTO_FEED_STRENGTH),
NAME_WITH_FIX_ID(FEED_STRENGTH_VALUE),
NAME_WITH_FIX_ID(REVERSE_01),
NAME_WITH_FIX_ID(RID_HOLE_L),
NAME_WITH_FIX_ID(SEARCH_HOLE_RANGE_L),
NAME_WITH_FIX_ID(RID_HOLE_R),
NAME_WITH_FIX_ID(SEARCH_HOLE_RANGE_R),
NAME_WITH_FIX_ID(RID_HOLE_T),
NAME_WITH_FIX_ID(SEARCH_HOLE_RANGE_T),
NAME_WITH_FIX_ID(RID_HOLE_B),
NAME_WITH_FIX_ID(SEARCH_HOLE_RANGE_B),
NAME_WITH_FIX_ID(FOLD_TYPE),
NAME_WITH_FIX_ID(COLOR_CORRECTION),
NAME_WITH_FIX_ID(HISTORY_COUNT),
NAME_WITH_FIX_ID(DRIVER_VERSION),
NAME_WITH_FIX_ID(MANUFACTURER),
NAME_WITH_FIX_ID(COPYRIGHT),
NAME_WITH_FIX_ID(CO_URL),
NAME_WITH_FIX_ID(CO_TEL),
NAME_WITH_FIX_ID(CO_ADDR),
NAME_WITH_FIX_ID(CO_GPS),
NAME_WITH_FIX_ID(HELP),
NAME_WITH_FIX_ID(VID),
NAME_WITH_FIX_ID(PID),
NAME_WITH_FIX_ID(DEV_NAME),
NAME_WITH_FIX_ID(DEV_FAMILY),
NAME_WITH_FIX_ID(DEVICE_SERIAL_NO),
NAME_WITH_FIX_ID(FIRMWARE_VERSION),
NAME_WITH_FIX_ID(DEVICE_IP_ADDR),
NAME_WITH_FIX_ID(DEVICE_MAC_ADDR),
NAME_WITH_FIX_ID(CUSTOM_GAMMA),
NAME_WITH_FIX_ID(ROLLER_LIFE),
NAME_WITH_FIX_ID(LANGUAGE),
NAME_WITH_FIX_ID(MOTOR_VER),
NAME_WITH_FIX_ID(TRANSFORM_IMAGE_FORMAT),
NAME_WITH_FIX_ID(FREE_BUFFER),
NAME_WITH_FIX_ID(PAPER_ON),
NAME_WITH_FIX_ID(GRAY_GAMMA),
NAME_WITH_FIX_ID(COLOR_GAMMA),
NAME_WITH_FIX_ID(RED_GAMMA),
NAME_WITH_FIX_ID(GREEN_GAMMA),
NAME_WITH_FIX_ID(BLUE_GAMMA),
NAME_WITH_FIX_ID(INITIAL_BOOT_TIME),
NAME_WITH_FIX_ID(DISCARDBLANK),
NAME_WITH_FIX_ID(LOGIN),
NAME_WITH_FIX_ID(LOGOUT),
NAME_WITH_FIX_ID(ROLLER_COUNT),
NAME_WITH_FIX_ID(DRIVER_LOG),
NAME_WITH_FIX_ID(DEVICE_LOG)
};
static int name_to_fix_id(const wchar_t* name)
{
std::string asc("");
coding_util::unicode_2_ansi(name, coding::get_string, &asc);
#define RET_ID_IF_MATCH_NAME(n, id) \
if(n == SANE_STD_OPT_NAME_##id) \
return SANE_OPT_ID_##id;
RET_ID_IF_MATCH_NAME(asc, IS_MULTI_OUT);
RET_ID_IF_MATCH_NAME(asc, MULTI_OUT_TYPE);
RET_ID_IF_MATCH_NAME(asc, COLOR_MODE);
RET_ID_IF_MATCH_NAME(asc, FILTER);
RET_ID_IF_MATCH_NAME(asc, RID_MULTIOUT_RED);
RET_ID_IF_MATCH_NAME(asc, RID_ANSWER_SHEET_RED);
RET_ID_IF_MATCH_NAME(asc, ERASE_BACKGROUND);
RET_ID_IF_MATCH_NAME(asc, BKG_COLOR_RANGE);
RET_ID_IF_MATCH_NAME(asc, SHARPEN);
RET_ID_IF_MATCH_NAME(asc, RID_MORR);
RET_ID_IF_MATCH_NAME(asc, RID_GRID);
RET_ID_IF_MATCH_NAME(asc, ERROR_EXTENSION);
RET_ID_IF_MATCH_NAME(asc, NOISE_OPTIMIZE);
RET_ID_IF_MATCH_NAME(asc, NOISE_SIZE);
RET_ID_IF_MATCH_NAME(asc, PAPER);
RET_ID_IF_MATCH_NAME(asc, CUSTOM_AREA);
RET_ID_IF_MATCH_NAME(asc, CUSTOM_AREA_LEFT);
RET_ID_IF_MATCH_NAME(asc, CUSTOM_AREA_RIGHT);
RET_ID_IF_MATCH_NAME(asc, CUSTOM_AREA_TOP);
RET_ID_IF_MATCH_NAME(asc, CUSTOM_AREA_BOTTOM);
RET_ID_IF_MATCH_NAME(asc, SIZE_CHECK);
RET_ID_IF_MATCH_NAME(asc, PAGE);
RET_ID_IF_MATCH_NAME(asc, DISCARD_BLANK_SENS);
RET_ID_IF_MATCH_NAME(asc, RESOLUTION);
RET_ID_IF_MATCH_NAME(asc, IMAGE_QUALITY);
RET_ID_IF_MATCH_NAME(asc, EXCHANGE);
RET_ID_IF_MATCH_NAME(asc, SPLIT);
RET_ID_IF_MATCH_NAME(asc, ANTI_SKEW);
RET_ID_IF_MATCH_NAME(asc, IS_CUSTOM_GAMMA);
RET_ID_IF_MATCH_NAME(asc, BRIGHTNESS);
RET_ID_IF_MATCH_NAME(asc, CONTRAST);
RET_ID_IF_MATCH_NAME(asc, GAMMA);
RET_ID_IF_MATCH_NAME(asc, ERASE_BLACK_FRAME);
RET_ID_IF_MATCH_NAME(asc, DARK_SAMPLE);
RET_ID_IF_MATCH_NAME(asc, THRESHOLD);
RET_ID_IF_MATCH_NAME(asc, ANTI_NOISE_LEVEL);
RET_ID_IF_MATCH_NAME(asc, MARGIN);
RET_ID_IF_MATCH_NAME(asc, FILL_BKG_MODE);
RET_ID_IF_MATCH_NAME(asc, IS_ANTI_PERMEATE);
RET_ID_IF_MATCH_NAME(asc, ANTI_PERMEATE_LEVEL);
RET_ID_IF_MATCH_NAME(asc, RID_HOLE);
RET_ID_IF_MATCH_NAME(asc, SEARCH_HOLE_RANGE);
RET_ID_IF_MATCH_NAME(asc, IS_FILL_COLOR);
RET_ID_IF_MATCH_NAME(asc, IS_ULTROSONIC_CHECK);
RET_ID_IF_MATCH_NAME(asc, IS_CHECK_STAPLE);
RET_ID_IF_MATCH_NAME(asc, SCAN_MODE);
RET_ID_IF_MATCH_NAME(asc, SCAN_COUNT);
RET_ID_IF_MATCH_NAME(asc, TEXT_DIRECTION);
RET_ID_IF_MATCH_NAME(asc, IS_ROTATE_BKG_180);
RET_ID_IF_MATCH_NAME(asc, IS_CHECK_DOG_EAR);
RET_ID_IF_MATCH_NAME(asc, DOG_EAR_SIZE);
RET_ID_IF_MATCH_NAME(asc, IS_CHECK_ASKEW);
RET_ID_IF_MATCH_NAME(asc, ASKEW_RANGE);
RET_ID_IF_MATCH_NAME(asc, BINARY_THRESHOLD);
RET_ID_IF_MATCH_NAME(asc, IS_PHOTO_MODE);
RET_ID_IF_MATCH_NAME(asc, DOUBLE_FEED_HANDLE);
RET_ID_IF_MATCH_NAME(asc, WAIT_TO_SCAN);
RET_ID_IF_MATCH_NAME(asc, FEED_STRENGTH);
RET_ID_IF_MATCH_NAME(asc, TIME_TO_SLEEP);
RET_ID_IF_MATCH_NAME(asc, IS_AUTO_FEED_STRENGTH);
RET_ID_IF_MATCH_NAME(asc, FEED_STRENGTH_VALUE);
RET_ID_IF_MATCH_NAME(asc, REVERSE_01);
RET_ID_IF_MATCH_NAME(asc, RID_HOLE_L);
RET_ID_IF_MATCH_NAME(asc, SEARCH_HOLE_RANGE_L);
RET_ID_IF_MATCH_NAME(asc, RID_HOLE_R);
RET_ID_IF_MATCH_NAME(asc, SEARCH_HOLE_RANGE_R);
RET_ID_IF_MATCH_NAME(asc, RID_HOLE_T);
RET_ID_IF_MATCH_NAME(asc, SEARCH_HOLE_RANGE_T);
RET_ID_IF_MATCH_NAME(asc, RID_HOLE_B);
RET_ID_IF_MATCH_NAME(asc, SEARCH_HOLE_RANGE_B);
RET_ID_IF_MATCH_NAME(asc, FOLD_TYPE);
RET_ID_IF_MATCH_NAME(asc, COLOR_CORRECTION);
RET_ID_IF_MATCH_NAME(asc, HISTORY_COUNT);
RET_ID_IF_MATCH_NAME(asc, DRIVER_VERSION);
RET_ID_IF_MATCH_NAME(asc, MANUFACTURER);
RET_ID_IF_MATCH_NAME(asc, COPYRIGHT);
RET_ID_IF_MATCH_NAME(asc, CO_URL);
RET_ID_IF_MATCH_NAME(asc, CO_TEL);
RET_ID_IF_MATCH_NAME(asc, CO_ADDR);
RET_ID_IF_MATCH_NAME(asc, CO_GPS);
RET_ID_IF_MATCH_NAME(asc, HELP);
RET_ID_IF_MATCH_NAME(asc, VID);
RET_ID_IF_MATCH_NAME(asc, PID);
RET_ID_IF_MATCH_NAME(asc, DEV_NAME);
RET_ID_IF_MATCH_NAME(asc, DEV_FAMILY);
RET_ID_IF_MATCH_NAME(asc, DEVICE_SERIAL_NO);
RET_ID_IF_MATCH_NAME(asc, FIRMWARE_VERSION);
RET_ID_IF_MATCH_NAME(asc, DEVICE_IP_ADDR);
RET_ID_IF_MATCH_NAME(asc, DEVICE_MAC_ADDR);
RET_ID_IF_MATCH_NAME(asc, CUSTOM_GAMMA);
RET_ID_IF_MATCH_NAME(asc, ROLLER_LIFE);
RET_ID_IF_MATCH_NAME(asc, LANGUAGE);
RET_ID_IF_MATCH_NAME(asc, MOTOR_VER);
RET_ID_IF_MATCH_NAME(asc, TRANSFORM_IMAGE_FORMAT);
RET_ID_IF_MATCH_NAME(asc, FREE_BUFFER);
RET_ID_IF_MATCH_NAME(asc, PAPER_ON);
RET_ID_IF_MATCH_NAME(asc, GRAY_GAMMA);
RET_ID_IF_MATCH_NAME(asc, COLOR_GAMMA);
RET_ID_IF_MATCH_NAME(asc, RED_GAMMA);
RET_ID_IF_MATCH_NAME(asc, GREEN_GAMMA);
RET_ID_IF_MATCH_NAME(asc, BLUE_GAMMA);
RET_ID_IF_MATCH_NAME(asc, INITIAL_BOOT_TIME);
RET_ID_IF_MATCH_NAME(asc, DISCARDBLANK);
RET_ID_IF_MATCH_NAME(asc, LOGIN);
RET_ID_IF_MATCH_NAME(asc, LOGOUT);
RET_ID_IF_MATCH_NAME(asc, ROLLER_COUNT);
RET_ID_IF_MATCH_NAME(asc, DRIVER_LOG);
RET_ID_IF_MATCH_NAME(asc, DEVICE_LOG);
for (auto& v : g_fix_ids)
if (v.name == asc)
return v.fix_id;
return 0;
}
static std::string name_from_fix_id(int id)
{
for (auto& v : g_fix_ids)
{
if (v.fix_id == id)
return v.name;
}
return "";
}
static void erase_trans_letter(std::wstring& str)
{
@ -1348,6 +1364,15 @@ HTREEITEM CDlgOptJson::insert_new_item(const SANEOPT& opt, bool sel)
if (opt.fix_id)
{
std::string n(known_name::name_from_fix_id(opt.fix_id));
if (!n.empty() && n != local_trans::u2a(opt.name.c_str(), CP_UTF8))
{
wchar_t info[128] = { 0 };
swprintf_s(info, _countof(info) - 1, L"Fix-ID 与现有属性“%s”冲突", local_trans::a2u(n.c_str(), CP_UTF8).c_str());
::MessageBoxW(m_hWnd, info, NULL, MB_OK);
GotoDlgCtrl(GetDlgItem(IDC_EDIT_FIXED_ID));
return NULL;
}
for (auto& v : opts_)
{
if (v.fix_id == opt.fix_id)
@ -2002,6 +2027,16 @@ void CDlgOptJson::OnBnClickedButtonModify()
if (sop.fix_id)
{
std::string n(known_name::name_from_fix_id(sop.fix_id));
if (!n.empty() && n != local_trans::u2a(sop.name.c_str(), CP_UTF8))
{
wchar_t info[128] = { 0 };
swprintf_s(info, _countof(info) - 1, L"Fix-ID 与现有属性“%s”冲突", local_trans::a2u(n.c_str(), CP_UTF8).c_str());
::MessageBoxW(m_hWnd, info, NULL, MB_OK);
GotoDlgCtrl(GetDlgItem(IDC_EDIT_FIXED_ID));
return ;
}
for (auto& v : opts_)
{
if (v.fix_id == sop.fix_id)

View File

@ -217,7 +217,7 @@ std::wstring dlg_base::get_menu_text(HMENU menu, int ind)
return text;
}
void dlg_base::center_window(HWND wnd, HWND parent)
void dlg_base::center_window(HWND wnd, HWND parent, int ensure)
{
RECT rme = { 0 }, rp = { 0 };
int x = 0, y = 0;
@ -229,6 +229,15 @@ void dlg_base::center_window(HWND wnd, HWND parent)
x = rp.left + (RECT_W(rp) - RECT_W(rme)) / 2;
y = rp.top + (RECT_H(rp) - RECT_H(rme)) / 2;
OffsetRect(&rme, x - rme.left, y - rme.top);
if (ensure == ENSURE_VISIBLE_TOP && rme.top < 0)
OffsetRect(&rme, 0, -rme.top);
else if (ensure == ENSURE_VISIBLE_LEFT && rme.left < 0)
OffsetRect(&rme, -rme.left, 0);
else if (ensure == ENSURE_VISIBLE_BOTTOM && rme.bottom > rp.bottom)
OffsetRect(&rme, 0, rp.bottom - rme.bottom);
else if (ensure == ENSURE_VISIBLE_RIGHT && rme.right > rp.right)
OffsetRect(&rme, rp.right - rme.right, 0);
MoveWindow(wnd, rme.left, rme.top, RECT_W(rme), RECT_H(rme), FALSE);
}
int dlg_base::list_insert_column(HWND list_wnd, const wchar_t* text, int cx, int ind)
@ -410,7 +419,7 @@ int dlg_base::do_modal(HWND parent)
enable_parent = TRUE;
}
dlg_base::center_window(hwnd(), parent);
dlg_base::center_window(hwnd(), parent, ENSURE_VISIBLE_TOP);
ShowWindow(hwnd(), SW_SHOW);
while ((got = GetMessage(&msg, NULL, 0, 0)))
{

View File

@ -68,7 +68,15 @@ public:
static std::wstring get_wnd_text(HWND h);
static bool is_language_pack_default_code_page(void);
static std::wstring get_menu_text(HMENU menu, int ind);
static void center_window(HWND wnd, HWND parent);
enum
{
ENSURE_VISIBLE_NONE = 0,
ENSURE_VISIBLE_LEFT,
ENSURE_VISIBLE_TOP,
ENSURE_VISIBLE_RIGHT,
ENSURE_VISIBLE_BOTTOM
};
static void center_window(HWND wnd, HWND parent, int ensure = ENSURE_VISIBLE_NONE);
static int list_insert_column(HWND list_wnd, const wchar_t* text, int cx = 20, int ind = -1);
static int list_insert_item(HWND list_wnd, const wchar_t* text, int ind = -1);

View File

@ -76,6 +76,10 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl)
if (ctrl == NULL)
{
// menu command ...
if (id == IDCANCEL)
{
notify_over();
}
}
else if (id == IDOK)
{

Binary file not shown.