doc_and_tools/tools/apps/hgjson/hgjsonDlg.cpp

8422 lines
157 KiB
C++
Raw Normal View History

2022-05-04 03:09:23 +00:00
// hgjsonDlg.cpp : implementation file
//
#include "stdafx.h"
#include "hgjson.h"
#include "hgjsonDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma warning(disable: 4996)
#include "DlgInput.h"
#include <utility/known_file.h>
#include <coding/coding.h>
#include <file/file_util.h>
2022-05-06 05:36:37 +00:00
#include <sane/sane_ex.h>
2022-08-16 02:45:16 +00:00
#include <sane/sane_option_definitions.h>
#include "../../../../code_device/hgdriver/hgdev/scanner_setting.h"
2022-05-04 03:09:23 +00:00
#define TREE_ITEM_PRODUCT MAKELONG(MAKEWORD('P', 'R'), MAKEWORD('D', 'T'))
#define TREE_ITEM_GROUP MAKELONG(MAKEWORD('G', 'R'), MAKEWORD('U', 'P'))
#define TREE_ITEM_CONFIG MAKELONG(MAKEWORD('I', 'T'), MAKEWORD('E', 'M'))
#define OPT_TITLE_PREFIX L"OPTION_TITLE_" // + py
#define OPT_VALUE_PREFIX L"OPTION_VALUE_" // + title_py + py
2022-05-04 03:09:23 +00:00
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// sane data types:
const wchar_t* g_opt_unit_name[] = { // according to SANE_Unit
L"None",
L"Pixel",
L"Bit",
L"Millimeters",
L"DPI",
L"Percent",
L"Microsecond"
};
const wchar_t* g_opt_field[] = {
L"Common",
L"ImageProc",
L"Hardware"
};
static const wchar_t* unit_name(int ind)
{
if (ind < 0 || ind >= _countof(g_opt_unit_name))
ind = 0;
return g_opt_unit_name[ind];
}
static int unit_index(const wchar_t* name)
{
for (int i = 0; i < _countof(g_opt_unit_name); ++i)
{
if (wcsicmp(name, g_opt_unit_name[i]) == 0)
return i;
}
return 0;
}
static const wchar_t* field_name(int ind)
{
if (ind < 0 || ind >= _countof(g_opt_field))
ind = 0;
return g_opt_field[ind];
}
static int field_index(const wchar_t* name)
{
for (int i = 0; i < _countof(g_opt_field); ++i)
{
if (wcsicmp(name, g_opt_field[i]) == 0)
return i;
}
return 0;
}
2022-05-04 03:09:23 +00:00
namespace coding
{
INTER_MODULE_CALLBACK(get_string)
{
*((std::string*)param) += std::string(data, len);
return inter_module_data::SET_RESULT_CONTINUE;
}
INTER_MODULE_CALLBACK(get_wstring)
{
*((std::wstring*)param) += std::wstring((const wchar_t*)data, len / 2);
return inter_module_data::SET_RESULT_CONTINUE;
}
2022-10-07 02:59:55 +00:00
typedef struct _clp_d
{
bool file;
std::wstring cont;
}CLPD, *LPCLPD;
INTER_MODULE_CALLBACK(get_clipboard_content)
{
LPCLPD pclpd = (LPCLPD)param;
if (total == CF_TEXT)
{
coding_util::ansi_2_unicode(data, get_wstring, &pclpd->cont);
pclpd->file = false;
}
else if (total == CF_UNICODETEXT)
{
pclpd->cont = std::wstring((const wchar_t*)data, len / 2);
pclpd->file = false;
}
else if (total == CF_HDROP)
{
pclpd->cont = std::wstring((const wchar_t*)data, len / 2);
pclpd->file = true;
}
return inter_module_data::SET_RESULT_STOP;
}
std::wstring name_from_depend_exp(const std::wstring& depend_exp)
{
std::wstring name(L"");
size_t pos = depend_exp.find(L"!");
if (pos == std::wstring::npos)
{
pos = depend_exp.find(L"<");
if (pos == std::wstring::npos)
{
pos = depend_exp.find(L">");
if (pos == std::wstring::npos)
{
pos = depend_exp.find(L"=");
}
}
}
if (pos != std::wstring::npos)
{
name = depend_exp.substr(0, pos);
}
return std::move(name);
}
2022-05-04 03:09:23 +00:00
int string_need_bytes(const wchar_t* str)
{
int len = lstrlenW(str) * 3;
len += 15;
len /= 8;
len *= 8;
2022-05-04 03:09:23 +00:00
return len;
}
std::string u2a(const wchar_t* u)
{
std::string a("");
coding_util::unicode_2_ansi(u, get_string, &a);
return a;
}
std::string u2utf8(const wchar_t* u)
{
std::string a("");
coding_util::unicode_2_utf8(u, get_string, &a);
return a;
}
std::wstring a2u(const char* a)
{
std::wstring u(L"");
coding_util::ansi_2_unicode(a, get_wstring, &u);
return u;
}
std::wstring utf82u(const char* utf8)
{
std::wstring u(L"");
coding_util::utf8_2_unicode(utf8, get_wstring, &u);
return u;
}
// Base;Light;ImageProcess;Feeder;
static const wchar_t* group_name_[] = {L"none", L"base", L"light", L"imgproc", L"feeder"};
const wchar_t* group_name(int ind)
{
if (ind >= 0 && ind < _countof(group_name_))
return group_name_[ind];
else
return group_name_[0];
}
int group_index(const wchar_t* name)
{
for (int i = 0; i < _countof(group_name_); ++i)
{
if (wcsicmp(name, group_name_[i]) == 0)
return i;
}
const wchar_t* hz_grp[] = { L"\u57FA\u672C\u8BBE\u7F6E", L"\u4EAE\u5EA6", L"\u56FE\u50CF\u5904\u7406", L"\u9001\u7EB8\u65B9\u5F0F\u8BBE\u7F6E" };
for (int i = 0; i < _countof(hz_grp); ++i)
{
if (wcsicmp(name, hz_grp[i]) == 0)
return i + 1;
}
return 0;
}
}
namespace hz_2_py
{
std::string findLetter(int nCode)
{
std::string strValue;
switch (nCode)
{
case 6325:
case 6436:
case 7571:
case 7925:
strValue = "A";
break;
case 6263:
case 6440:
case 7040:
case 7208:
case 7451:
case 7733:
case 7945:
case 8616:
strValue = "AI";
break;
case 5847:
case 5991:
case 6278:
case 6577:
case 6654:
case 7281:
case 7907:
case 8038:
case 8786:
strValue = "AN";
break;
strValue = "ANG";
break;
case 5974:
case 6254:
case 6427:
case 6514:
case 6658:
case 6959:
case 7033:
case 7081:
case 7365:
case 8190:
case 8292:
case 8643:
case 8701:
case 8773:
strValue = "AO";
break;
case 6056:
case 6135:
case 6517:
case 7857:
case 8446:
case 8649:
case 8741:
strValue = "BA";
break;
case 6267:
case 6334:
case 7494:
strValue = "BAI";
break;
case 5870:
case 5964:
case 7851:
case 8103:
case 8113:
case 8418:
strValue = "BAN";
break;
case 6182:
case 6826:
strValue = "BANG";
break;
case 6165:
case 7063:
case 7650:
case 8017:
case 8157:
case 8532:
case 8621:
strValue = "BAO";
break;
case 5635:
case 5873:
case 5893:
case 5993:
case 6141:
case 6703:
case 7753:
case 8039:
case 8156:
case 8645:
case 8725:
strValue = "BEI";
break;
case 5946:
case 5948:
case 7458:
case 7928:
strValue = "BEN";
break;
case 6452:
case 7420:
strValue = "BENG";
break;
case 5616:
case 5734:
case 6074:
case 6109:
case 6221:
case 6333:
case 6357:
case 6589:
case 6656:
case 6725:
case 6868:
case 6908:
case 6986:
case 6994:
case 7030:
case 7052:
case 7221:
case 7815:
case 7873:
case 7985:
case 8152:
case 8357:
case 8375:
case 8387:
case 8416:
case 8437:
case 8547:
case 8734:
strValue = "BI";
break;
case 5650:
case 5945:
case 6048:
case 6677:
case 6774:
case 7134:
case 7614:
case 7652:
case 7730:
case 7760:
case 8125:
case 8159:
case 8289:
case 8354:
case 8693:
strValue = "BIAN";
break;
case 7027:
case 7084:
case 7609:
case 7613:
case 7958:
case 7980:
case 8106:
case 8149:
case 8707:
case 8752:
strValue = "BIAO";
break;
case 8531:
strValue = "BIE";
break;
case 5747:
case 6557:
case 7145:
case 7167:
case 7336:
case 7375:
case 7587:
case 7957:
case 8738:
case 8762:
strValue = "BIN";
break;
case 5787:
case 5891:
case 6280:
strValue = "BING";
break;
case 5781:
case 6403:
case 6636:
case 7362:
case 7502:
case 7771:
case 7864:
case 8030:
case 8404:
case 8543:
case 8559:
strValue = "BO";
break;
case 6318:
case 6945:
case 7419:
case 7446:
case 7848:
case 7863:
case 8519:
strValue = "BU";
break;
case 6474:
case 7769:
strValue = "CA";
break;
strValue = "CAI";
break;
case 6978:
case 7078:
case 7218:
case 8451:
case 8785:
strValue = "CAN";
break;
case 5687:
strValue = "CANG";
break;
case 6448:
case 6878:
case 8309:
case 8429:
strValue = "CAO";
break;
case 6692:
strValue = "CE";
break;
case 6515:
case 6825:
strValue = "CEN";
break;
case 6465:
strValue = "CENG";
break;
case 6639:
case 6766:
case 7017:
case 7230:
case 7311:
case 7322:
case 7363:
case 7942:
case 7979:
case 8135:
strValue = "CHA";
break;
case 5713:
case 7846:
case 8091:
case 8218:
strValue = "CHAI";
break;
case 5770:
case 5838:
case 6159:
case 6667:
case 6893:
case 6904:
case 6981:
case 7031:
case 7086:
case 7472:
case 7688:
case 7966:
case 8324:
case 8580:
strValue = "CHAN";
break;
case 5686:
case 5943:
case 6041:
case 6137:
case 6660:
case 6568:
case 6749:
case 7029:
case 7047:
case 7438:
case 7509:
case 8680:
strValue = "CHANG";
break;
case 6687:
case 7443:
case 8173:
strValue = "CHAO";
break;
case 5969:
case 7726:
strValue = "CHE";
break;
case 5840:
case 5863:
case 6251:
case 6433:
case 6923:
case 7201:
case 7320:
case 7755:
case 8619:
strValue = "CHEN";
break;
case 5609:
case 5984:
case 7239:
case 7263:
case 7583:
case 7810:
case 7881:
case 7905:
case 8146:
case 8241:
case 8508:
strValue = "CHENG";
break;
case 5749:
case 6015:
case 6061:
case 6319:
case 6374:
case 6420:
case 6445:
case 6633:
case 7042:
case 7523:
case 7787:
case 8023:
case 8101:
case 8161:
case 8231:
case 8304:
case 8355:
case 8388:
case 8489:
case 8556:
case 8746:
strValue = "CHI";
break;
case 6091:
case 6671:
case 6731:
case 8409:
case 8430:
strValue = "CHONG";
break;
case 5717:
case 6492:
case 6716:
case 8112:
case 8637:
strValue = "CHOU";
break;
case 5601:
case 5927:
case 6680:
case 6732:
case 7109:
case 7238:
case 7290:
case 7343:
case 8150:
case 8260:
case 8573:
case 8777:
strValue = "CHU";
break;
case 6285:
case 6408:
case 7590:
case 8563:
strValue = "CHUAI";
break;
case 6622:
case 6955:
case 7516:
case 7843:
case 8413:
strValue = "CHUAN";
break;
case 6675:
strValue = "CHUANG";
break;
case 5879:
case 7302:
case 7319:
strValue = "CHUI";
break;
case 6127:
case 8040:
case 8277:
strValue = "CHUN";
break;
case 7401:
case 8554:
case 8626:
strValue = "CHUO";
break;
strValue = "CI";
break;
case 6075:
case 6358:
case 7684:
case 8043:
case 8457:
strValue = "4337 <20><>";
break;
case 6042:
case 6840:
case 7085:
case 7193:
case 7214:
case 7240:
strValue = "CONG";
break;
case 7308:
case 7403:
case 7577:
strValue = "COU";
break;
case 6180:
case 6562:
case 6607:
case 7367:
case 8501:
case 8530:
case 8577:
strValue = "CU";
break;
case 5764:
case 6305:
case 7664:
case 7973:
strValue = "CUAN";
break;
case 6718:
case 6145:
case 6393:
case 7213:
case 7333:
case 7505:
case 8631:
strValue = "CUI";
break;
case 6666:
case 8169:
strValue = "CUN";
break;
case 5640:
case 6547:
case 7566:
case 7917:
case 7983:
case 8078:
case 8526:
case 8567:
strValue = "CUO";
break;
case 6239:
case 6353:
case 6410:
case 6682:
case 7007:
case 8155:
case 8346:
case 8716:
case 8718:
strValue = "DA";
break;
case 6004:
case 6316:
case 6523:
case 6942:
case 7110:
case 7173:
case 8776:
strValue = "DAI";
break;
case 5757:
case 6144:
case 6402:
case 7373:
case 7470:
case 7781:
case 8067:
case 8087:
case 8185:
case 8376:
strValue = "DAN";
break;
case 5852:
case 5942:
case 6148:
case 6920:
case 7724:
case 7885:
case 8141:
strValue = "DANG";
break;
case 6322:
case 6665:
case 7514:
case 8478:
strValue = "DAO";
break;
case 7929:
strValue = "DE";
break;
case 6466:
case 6556:
case 7413:
case 7767:
case 7975:
case 8403:
strValue = "DENG";
break;
case 5621:
case 5765:
case 5814:
case 5848:
case 5901:
case 5970:
case 6122:
case 6454:
case 7023:
case 7116:
case 7260:
case 7306:
case 7475:
case 7738:
case 7758:
case 7791:
case 7965:
case 8438:
case 8730:
strValue = "DI";
break;
case 6439:
strValue = "DIA";
break;
case 5871:
case 5967:
case 6559:
case 7172:
case 7868:
case 8116:
case 8118:
case 8401:
case 8558:
strValue = "DIAN";
break;
case 7886:
case 8585:
case 8684:
strValue = "DIAO";
break;
case 5976:
case 6006:
case 6273:
case 6409:
case 7526:
case 8012:
case 8183:
case 8562:
case 8688:
strValue = "DIE";
break;
case 5674:
case 6404:
case 7164:
case 7575:
case 7754:
case 7814:
case 8059:
case 8184:
case 8490:
strValue = "DING";
break;
case 7891:
strValue = "DIU";
break;
case 5977:
case 6343:
case 6520:
case 6528:
case 7517:
case 7543:
case 7556:
case 7747:
case 8020:
strValue = "DONG";
break;
case 6190:
case 8128:
case 8229:
case 8391:
strValue = "DOU";
break;
case 6022:
case 6429:
case 6834:
case 7292:
case 7525:
case 8328:
case 8338:
case 8739:
case 8782:
strValue = "DU";
break;
case 7318:
case 7649:
case 8393:
strValue = "DUAN";
break;
case 7701:
case 7713:
case 7752:
strValue = "DUI";
break;
case 6771:
case 7632:
case 7727:
case 7766:
case 7779:
case 7970:
case 8527:
strValue = "DUN";
break;
case 6345:
case 6365:
case 6785:
case 7122:
case 7876:
case 8154:
case 8566:
strValue = "DUO";
break;
case 5612:
case 5832:
case 5844:
case 5949:
case 6035:
case 6113:
case 6164:
case 6332:
case 6721:
case 6977:
case 7025:
case 7378:
case 7581:
case 7916:
case 7941:
case 8042:
case 8206:
case 8689:
strValue = "E";
break;
case 6176:
case 6284:
strValue = "EN";
break;
case 5706:
case 6939:
case 7177:
case 7879:
case 8025:
case 8660:
strValue = "ER";
break;
case 5950:
case 7732:
strValue = "FA";
break;
case 6212:
case 6232:
case 6506:
case 7283:
case 7660:
case 7818:
case 8576:
strValue = "FAN";
break;
case 5890:
case 7242:
case 7853:
case 8419:
case 8648:
strValue = "FANG";
break;
case 6032:
case 6584:
case 6713:
case 6839:
case 6990:
case 7119:
case 7328:
case 7572:
case 7619:
case 7673:
case 7948:
case 8082:
case 8267:
case 8385:
case 8468:
case 8613:
case 8678:
strValue = "FEI";
break;
case 5739:
case 6915:
case 7291:
case 8687:
case 8787:
strValue = "FEN";
break;
case 5726:
case 5926:
case 6155:
case 6384:
case 6767:
case 7731:
strValue = "FENG";
break;
strValue = "FO";
break;
case 8330:
strValue = "FOU";
break;
case 5775:
case 5776:
case 5914:
case 6029:
case 6062:
case 6119:
case 6142:
case 6252:
case 6327:
case 6505:
case 6686:
case 6870:
case 6985:
case 7058:
case 7066:
case 7106:
case 7108:
case 7285:
case 7471:
case 7680:
case 7741:
case 7774:
case 7775:
case 7823:
case 7991:
case 8005:
case 8222:
case 8261:
case 8280:
case 8283:
case 8479:
case 8535:
case 8538:
case 8654:
case 8691:
strValue = "FU";
break;
case 6246:
case 7056:
case 7057:
case 7424:
case 7837:
strValue = " GA";
break;
case 5604:
case 5875:
case 5982:
case 7414:
case 7464:
strValue = "GAI";
break;
case 5965:
case 6053:
case 6247:
case 6306:
case 6779:
case 6838:
case 6887:
case 7104:
case 7347:
case 7426:
case 7723:
case 8065:
case 8491:
strValue = "GAN";
break;
case 7716:
case 7824:
case 8364:
strValue = "GANG";
break;
case 5626:
case 5830:
case 5912:
case 6227:
case 7141:
case 7332:
case 7334:
case 7429:
case 7915:
strValue = "GAO";
break;
case 5610:
case 5678:
case 5933:
case 5957:
case 6010:
case 6435:
case 7092:
case 7501:
case 7585:
case 7749:
case 7951:
case 8143:
case 8220:
case 8420:
case 8732:
strValue = "GE";
break;
strValue = "GEI";
break;
case 5608:
case 6102:
case 6371:
case 8462:
strValue = "GEN";
break;
case 6376:
case 6657:
case 7114:
case 8665:
strValue = "GENG";
break;
case 7178:
case 7537:
case 8228:
case 8601:
strValue = "GONG";
break;
case 5694:
case 5824:
case 6524:
case 6960:
case 7037:
case 7135:
case 7259:
case 7477:
case 7616:
case 8349:
case 8384:
case 8724:
strValue = "GOU";
break;
case 5637:
case 5812:
case 6152:
case 6536:
case 6773:
case 7284:
case 7379:
case 7484:
case 7486:
case 7591:
case 7617:
case 7813:
case 7825:
case 7860:
case 7932:
case 8019:
case 8083:
case 8233:
case 8494:
case 8593:
case 8681:
case 8729:
strValue = "GU";
break;
case 5652:
case 5820:
case 6341:
case 7273:
case 7550:
case 8027:
strValue = "GUA";
break;
strValue = "GUAI";
break;
case 5736:
case 6124:
case 6272:
case 6842:
case 7834:
case 8057:
case 8170:
case 8704:
strValue = "GUAN";
break;
case 6359:
case 6578:
case 7270:
case 7555:
strValue = "GUANG";
break;
case 5648:
case 5659:
case 6649:
case 7003:
case 7277:
case 7433:
case 7448:
case 8007:
case 8394:
case 8657:
case 8712:
strValue = "GUI";
break;
case 5782:
case 7121:
case 7762:
case 8671:
strValue = "GUN";
break;
case 5769:
case 6266:
case 6335:
case 6494:
case 6538:
case 6603:
case 7304:
case 7529:
case 8188:
case 8268:
case 8269:
strValue = "GUO";
break;
case 7894:
strValue = "HA";
break;
case 6443:
case 7560:
case 8516:
strValue = "HAI";
break;
case 5885:
case 6153:
case 6294:
case 6759:
case 6911:
case 7447:
case 7642:
case 8192:
case 8205:
case 8232:
case 8793:
strValue = "HAN";
break;
case 6776:
case 7112:
case 8194:
strValue = "HANG";
break;
case 6179:
case 6222:
case 6438:
case 6467:
case 6909:
case 6916:
case 7427:
case 8009:
case 8211:
case 8226:
strValue = "HAO";
break;
case 5813:
case 5932:
case 5954:
case 6432:
case 6756:
case 7434:
case 7833:
case 8202:
case 8234:
case 8471:
strValue = "HE";
break;
strValue = "HEI";
break;
strValue = "HEN";
break;
case 6231:
case 7181:
case 7276:
strValue = "HENG";
break;
case 5768:
case 5774:
case 5807:
case 6106:
case 6214:
case 6216:
case 6740:
case 6792:
strValue = "HONG";
break;
case 6009:
case 6565:
case 6943:
case 8090:
case 8383:
case 8455:
case 8655:
case 8731:
strValue = "HOU";
break;
case 5792:
case 6392:
case 6481:
case 6518:
case 6609:
case 6679:
case 6717:
case 6816:
case 6879:
case 7190:
case 7346:
case 7385:
case 7618:
case 7635:
case 7646:
case 7670:
case 7672:
case 7679:
case 8013:
case 8032:
case 8041:
case 8055:
case 8343:
case 8513:
case 8590:
strValue = "HU";
break;
case 7072:
case 7275:
case 7725:
case 7892:
strValue = "HUA";
break;
case 8555:
strValue = "HUAI";
break;
case 5928:
case 6140:
case 6307:
case 6487:
case 6621:
case 6801:
case 6829:
case 6881:
case 6930:
case 6953:
case 7157:
case 7944:
case 8673:
case 8763:
strValue = "HUAN";
break;
case 5882:
case 6569:
case 6850:
case 6874:
case 6956:
case 7211:
case 7533:
case 8105:
case 8308:
case 8382:
case 8692:
strValue = "HUANG";
break;
case 5822:
case 6078:
case 6086:
case 6205:
case 6352:
case 6360:
case 6425:
case 6736:
case 6807:
case 6811:
case 6971:
case 7132:
case 7185:
case 7445:
case 7703:
case 8219:
case 8319:
case 8766:
strValue = "HUI";
break;
case 5827:
case 6638:
case 6752:
case 6867:
strValue = "HUN";
break;
case 5669:
case 6229:
case 6311:
case 6475:
case 6623:
case 7856:
case 7933:
case 7976:
case 8175:
case 8322:
strValue = "HUO";
break;
case 5629:
case 5632:
case 5662:
case 5705:
case 5742:
case 5952:
case 6024:
case 6033:
case 6193:
case 6210:
case 6265:
case 6320:
case 6350:
case 6383:
case 6507:
case 6553:
case 6809:
case 6976:
case 7087:
case 7160:
case 7165:
case 7314:
case 7374:
case 7410:
case 7411:
case 7469:
case 7473:
case 7487:
case 7620:
case 7722:
case 7831:
case 7990:
case 8002:
case 8104:
case 8217:
case 8337:
case 8339:
case 8463:
case 8550:
case 8611:
case 8661:
case 8674:
case 8757:
case 8768:
strValue = "JI";
break;
case 5704:
case 5903:
case 6171:
case 6521:
case 6804:
case 6940:
case 7176:
case 7409:
case 7546:
case 7702:
case 7882:
case 7956:
case 8072:
case 8142:
case 8244:
case 8353:
case 8434:
case 8542:
strValue = "JIA";
break;
case 5752:
case 5841:
case 5857:
case 6149:
case 6183:
case 6286:
case 6853:
case 6931:
case 6932:
case 7144:
case 7237:
case 7305:
case 7407:
case 7415:
case 7480:
case 7489:
case 7506:
case 7576:
case 7790:
case 7921:
case 8047:
case 8148:
case 8340:
case 8469:
case 8534:
case 8561:
case 8668:
case 8721:
strValue = "JIAN";
break;
case 6092:
case 6814:
case 7113:
case 7154:
case 7481:
case 7768:
case 8180:
case 8461:
case 8488:
strValue = "JIANG";
break;
case 5714:
case 5753:
case 6020:
case 6090:
case 6256:
case 6461:
case 6572:
case 7015:
case 7524:
case 8008:
case 8052:
case 8252:
case 8520:
case 8551:
case 8662:
strValue = "JIAO";
break;
case 5806:
case 5821:
case 6255:
case 6414:
case 7028:
case 7061:
case 7278:
case 7757:
case 8060:
case 8201:
case 8227:
case 8441:
case 8658:
case 8726:
strValue = "JIE";
break;
case 5865:
case 6103:
case 6132:
case 6468:
case 6643:
case 6659:
case 7138:
case 7210:
case 7340:
case 7465:
case 7478:
case 8138:
strValue = "JIN";
break;
case 5751:
case 5869:
case 6128:
case 6616:
case 6729:
case 6794:
case 6941:
case 6982:
case 7026:
case 7534:
case 7554:
case 7570:
case 7626:
strValue = "JIANG";
break;
case 6936:
case 7671:
strValue = "JIONG";
break;
case 5754:
case 6417:
case 6746:
case 7249:
case 7274:
case 8015:
case 8053:
case 8481:
case 8761:
strValue = "JIU";
break;
case 5738:
case 5810:
case 6036:
case 6058:
case 6076:
case 6268:
case 6965:
case 6980:
case 7202:
case 7307:
case 7316:
case 7323:
case 7357:
case 7381:
case 7488:
case 7611:
case 7850:
case 7924:
case 8022:
case 8132:
case 8153:
case 8482:
case 8522:
case 8565:
case 8620:
case 8634:
case 8722:
strValue = "JU";
break;
case 5918:
case 6590:
case 6824:
case 7280:
case 7835:
case 7935:
case 7952:
case 8633:
strValue = "JUAN";
break;
case 5642:
case 5667:
case 5860:
case 5939:
case 6207:
case 6421:
case 6457:
case 6469:
case 6540:
case 6617:
case 7062:
case 7169:
case 7286:
case 7351:
case 7663:
case 7967:
case 8574:
case 8591:
strValue = "JUE";
break;
case 6260:
case 8168:
case 8362:
case 8769:
strValue = "JUN";
break;
case 5671:
case 6339:
case 7544:
strValue = "KA";
break;
case 5660:
case 5978:
case 6160:
case 6673:
case 6693:
case 7888:
case 7920:
case 7939:
strValue = "KAI";
break;
case 5709:
case 6108:
case 7412:
case 7772:
case 7811:
strValue = "KAN";
break;
case 5688:
case 6742:
case 7854:
strValue = "KANG";
break;
case 6974:
case 7264:
case 7491:
case 7877:
strValue = "KAO";
break;
case 6430:
case 6519:
case 6701:
case 6859:
case 7076:
case 7128:
case 7170:
case 7380:
case 7520:
case 7807:
case 7861:
case 7930:
case 7993:
case 8066:
case 8129:
case 8204:
case 8282:
case 8733:
strValue = "KE";
break;
case 8144:
strValue = "KEN";
break;
case 7912:
strValue = "KENG";
break;
case 5737:
case 6539:
case 8377:
strValue = "KONG";
break;
case 6050:
case 6202:
case 6321:
case 7778:
case 8356:
strValue = "KOU";
break;
case 5658:
case 6005:
case 6423:
case 7111:
case 8728:
strValue = "KU";
break;
case 5708:
strValue = "KUA";
break;
case 5665:
case 5906:
case 6364:
case 6586:
case 7558:
strValue = "KUAI";
break;
case 8737:
strValue = "KUAN";
break;
case 5818:
case 5831:
case 5887:
case 5959:
case 6237:
case 6349:
case 7094:
case 7460:
strValue = "KUANG";
break;
case 5624:
case 5649:
case 5771:
case 6162:
case 6281:
case 6413:
case 6416:
case 6720:
case 6951:
case 7450:
case 7805:
case 8606:
case 8743:
strValue = "KUI";
break;
case 6204:
case 6245:
case 6458:
case 6618:
case 6928:
case 7152:
case 7841:
case 8051:
strValue = "LIAO";
break;
case 5793:
case 5988:
case 6270:
case 6354:
case 6803:
case 8483:
case 8581:
case 8764:
strValue = "LIE";
break;
case 6194:
case 6388:
case 6555:
case 6662:
case 6733:
case 6964:
case 7361:
case 7405:
case 7602:
case 7812:
case 8452:
case 8579:
case 8775:
strValue = "LIN";
break;
case 5925:
case 6063:
case 6342:
case 6482:
case 6786:
case 7117:
case 7258:
case 7289:
case 7418:
case 8186:
case 8240:
case 8465:
case 8676:
strValue = "LING";
break;
case 6815:
case 6962:
case 7082:
case 7124:
case 7628:
case 7654:
case 7919:
case 7954:
case 8050:
case 8644:
strValue = "LIU";
break;
case 5966:
case 6055:
case 6781:
case 7171:
case 7248:
case 7542:
case 7735:
case 8110:
strValue = "LONG";
break;
case 5745:
case 6168:
case 6422:
case 6548:
case 7946:
case 8092:
case 8179:
case 8287:
case 8735:
strValue = "LOU";
break;
case 6744:
case 7321:
case 7586:
case 7918:
case 7989:
case 8158:
strValue = "L<EFBFBD><EFBFBD>";
break;
case 5968:
case 6303:
case 6464:
case 6782:
case 6843:
case 6885:
case 6954:
case 7220:
case 7251:
case 7354:
case 7391:
case 7404:
case 7510:
case 7545:
case 7969:
case 8021:
case 8056:
case 8392:
case 8421:
case 8652:
strValue = "LU";
break;
case 5785:
case 7014:
case 7279:
case 8029:
case 8639:
strValue = "LUAN";
break;
strValue = "L<EFBFBD><EFBFBD>E";
break;
strValue = "LUN";
break;
case 5732:
case 5789:
case 6093:
case 6259:
case 6291:
case 6604:
case 6788:
case 6880:
case 7183:
case 7301:
case 7565:
case 7961:
case 8107:
case 8635:
strValue = "LUO";
break;
case 6328:
strValue = "M";
break;
case 6373:
case 6579:
case 7054:
case 7231:
case 8301:
strValue = "MA";
break;
case 5929:
case 6104:
case 8618:
strValue = "MAI";
break;
case 6012:
case 6503:
case 7147:
case 7655:
case 7960:
case 8209:
case 8293:
case 8709:
case 8720:
strValue = "MAN";
break;
case 5888:
case 6861:
case 7743:
case 8294:
strValue = "MANG";
break;
case 5783:
case 6066:
case 6525:
case 6787:
case 7203:
case 7436:
case 7483:
case 7503:
case 7624:
case 7714:
case 7806:
case 8317:
case 8754:
strValue = "MAO";
break;
case 6114:
case 6550:
case 6613:
case 6828:
case 6856:
case 7325:
case 7949:
case 8044:
case 8139:
case 8740:
strValue = "MEI";
break;
case 6249:
case 7643:
case 7715:
case 7845:
strValue = "MEN";
break;
case 5934:
case 6189:
case 6211:
case 6734:
case 7592:
case 7770:
case 8221:
case 8276:
case 8323:
case 8427:
case 8431:
strValue = "MENG";
break;
case 5634:
case 5855:
case 6234:
case 6368:
case 6455:
case 6608:
case 6772:
case 6921:
case 6984:
case 7563:
case 7682:
case 8445:
case 8767:
case 8771:
strValue = "MI";
break;
case 6770:
case 6837:
case 6847:
case 7579:
case 7777:
strValue = "MIAN";
break;
case 6387:
case 6967:
case 7131:
case 7149:
case 7234:
case 7721:
case 7780:
case 8037:
strValue = "MIAO";
break;
case 5631:
case 6367:
case 8326:
case 8390:
strValue = "MIE";
break;
case 6069:
case 6526:
case 6741:
case 6793:
case 7137:
case 7168:
case 7175:
case 7710:
case 8710:
case 8628:
strValue = "MIN";
break;
case 5804:
case 6088:
case 6873:
case 7452:
case 7808:
case 8504:
strValue = "MING";
break;
strValue = "MIU";
break;
case 5851:
case 6052:
case 6175:
case 6641:
case 7038:
case 7366:
case 7950:
case 7987:
case 8102:
case 8182:
case 8586:
case 8588:
case 8765:
strValue = "MO";
break;
case 5716:
case 6372:
case 7788:
case 8254:
case 8290:
case 8642:
strValue = "MOU";
break;
case 5679:
case 5973:
case 6057:
case 6769:
case 7504:
case 7866:
strValue = "MU";
break;
case 6437:
strValue = "N";
break;
case 6264:
case 7539:
case 7953:
case 8136:
strValue = "NA";
break;
case 5630:
case 6021:
case 6133:
case 7245:
strValue = "NAI";
break;
case 6411:
case 6478:
case 6479:
case 7310:
case 7578:
case 8279:
case 8486:
strValue = "NAN";
break;
case 6313:
case 6476:
case 6646:
case 7457:
strValue = "NANG";
break;
case 5611:
case 5981:
case 6346:
case 6614:
case 7207:
case 7748:
case 7883:
case 8245:
strValue = "NAO";
break;
case 5811:
strValue = "NE";
break;
strValue = "NEI";
break;
case 7705:
strValue = "NEN";
break;
strValue = "NENG";
break;
case 5703:
case 5972:
case 6605:
case 6685:
case 7439:
case 7627:
case 7711:
case 7794:
case 7874:
case 8682:
strValue = "NI";
break;
case 5605:
case 5994:
case 7393:
case 8004:
case 8651:
case 8683:
strValue = "NIAN";
break;
strValue = "NIANG";
break;
case 6064:
case 7053:
case 7569:
case 8433:
strValue = "NIAO";
break;
case 5877:
case 6233:
case 6431:
case 8208:
case 8411:
case 8570:
strValue = "NIE";
break;
strValue = "NIN";
break;
case 5690:
case 6344:
case 6924:
case 8187:
strValue = "NING";
break;
case 6580:
case 6678:
case 7004:
strValue = "NIU";
break;
case 5715:
case 6370:
strValue = "NONG";
break;
case 8181:
strValue = "NOU";
break;
case 6983:
case 7032:
case 7059:
case 7069:
strValue = "NU";
break;
case 7704:
case 7847:
case 8412:
strValue = "N<EFBFBD><EFBFBD>";
break;
strValue = "NUAN";
break;
strValue = "NUE";
break;
case 5748:
case 6289:
case 6386:
case 7927:
strValue = "NUO";
break;
case 6424:
case 6462:
strValue = "O";
break;
case 5809:
case 6670:
case 7417:
case 8178:
strValue = "OU";
break;
case 6166:
case 7243:
case 8365:
strValue = "PA";
break;
case 5729:
case 6169:
case 6363:
strValue = "PAI";
break;
case 6761:
case 6790:
case 8140:
case 8165:
case 8320:
case 8571:
strValue = "PAN";
break;
case 6561:
case 6872:
case 6944:
case 8306:
strValue = "PANG";
break;
case 6243:
case 6583:
case 6650:
case 7567:
case 8069:
strValue = "PAO";
break;
case 6446:
case 6490:
case 7623:
case 7934:
case 8512:
case 8612:
strValue = "PEI";
break;
case 6852:
strValue = "PEN";
break;
case 6001:
case 6456:
case 6681:
case 8318:
strValue = "PENG";
break;
case 5607:
case 5682:
case 5880:
case 5892:
case 5915:
case 5960:
case 6017:
case 6037:
case 6308:
case 6472:
case 6647:
case 6836:
case 7039:
case 7102:
case 7233:
case 7422:
case 7802:
case 7828:
case 7875:
case 8117:
case 8166:
case 8223:
case 8271:
case 8589:
strValue = "PI";
break;
case 5850:
case 7073:
case 7490:
case 7561:
case 8470:
case 8568:
strValue = "PIAN";
break;
case 5666:
case 6449:
case 7046:
case 7146:
case 7372:
case 7809:
case 8310:
strValue = "PIAO";
break;
case 6054:
case 7513:
strValue = "PIE";
break;
case 7041:
case 6253:
case 7016:
case 7315:
case 7482:
case 8213:
strValue = "PIN";
break;
case 5723:
case 7019:
case 7250:
case 8650:
strValue = "PING";
break;
case 5647:
case 5922:
case 7174:
case 7839:
case 7862:
case 8011:
case 8345:
strValue = "PO";
break;
case 5786:
case 6269:
strValue = "POU";
break;
case 5773:
case 6459:
case 6863:
case 6907:
case 7217:
case 7511:
case 7968:
case 7972:
case 8575:
strValue = "PU";
break;
case 5633:
case 5725:
case 5963:
case 6027:
case 6046:
case 6089:
case 6129:
case 6134:
case 6161:
case 6213:
case 6366:
case 6450:
case 6508:
case 6510:
case 6764:
case 6831:
case 7075:
case 7118:
case 7187:
case 7189:
case 7229:
case 7271:
case 7342:
case 7440:
case 7605:
case 7687:
case 7712:
case 7751:
case 8193:
case 8251:
case 8264:
case 8475:
case 8476:
case 8572:
case 8702:
case 8772:
strValue = "QI";
break;
case 6154:
case 8736:
strValue = "QIA";
break;
case 5727:
case 5761:
case 5868:
case 6023:
case 6045:
case 6071:
case 6271:
case 6509:
case 6705:
case 6727:
case 6925:
case 6926:
case 6929:
case 7155:
case 7293:
case 7541:
case 7709:
case 7852:
case 8215:
case 8373:
strValue = "QIAN";
break;
case 6762:
case 7045:
case 7341:
case 7408:
case 7633:
case 7926:
case 7947:
case 7974:
case 8163:
case 8262:
case 8439:
case 8536:
strValue = "QIANG";
break;
case 5668:
case 5829:
case 5859:
case 6081:
case 6529:
case 6724:
case 6730:
case 7352:
case 7745:
case 8546:
case 8719:
strValue = "QIAO";
break;
case 5907:
case 6711:
case 7010:
case 7492:
case 7938:
case 8370:
strValue = "QIE";
break;
case 6043:
case 6276:
case 6336:
case 6426:
case 6463:
case 6858:
case 7353:
case 7923:
case 8291:
case 8432:
strValue = "QIN";
break;
case 6060:
case 6485:
case 7349:
case 7764:
case 8263:
case 8332:
case 8368:
case 8605:
case 8675:
case 8784:
strValue = "QING";
break;
case 5886:
case 6068:
case 8123:
case 8243:
case 8344:
case 8528:
case 8638:
strValue = "QIONG";
break;
case 5720:
case 5947:
case 6576:
case 6848:
case 6947:
case 6957:
case 7317:
case 7468:
case 8216:
case 8239:
case 8288:
case 8435:
case 8460:
case 8690:
case 8792:
strValue = "QIU";
break;
case 5816:
case 5930:
case 6201:
case 6230:
case 6511:
case 6573:
case 6754:
case 7219:
case 7479:
case 7512:
case 7552:
case 7678:
case 7765:
case 8119:
case 8248:
case 8329:
case 8480:
case 8636:
case 8781:
strValue = "QU";
break;
case 5825:
case 6085:
case 6710:
case 7125:
case 7390:
case 7816:
case 7893:
case 8273:
case 8360:
case 8760:
strValue = "QUAN";
break;
case 6755:
case 6758:
case 7708:
strValue = "QUE";
break;
case 6950:
strValue = "QUN";
break;
case 6059:
case 8237:
case 8755:
strValue = "RAN";
break;
case 7692:
case 8006:
strValue = "RANG";
break;
case 6073:
case 7012:
case 7267:
strValue = "RAO";
break;
strValue = "RE";
break;
case 5680:
case 6083:
case 6156:
case 6631:
case 7377:
case 7994:
case 8137:
strValue = "REN";
break;
strValue = "RENG";
break;
strValue = "RI";
break;
case 6541:
case 6585:
case 7337:
case 7532:
case 8278:
strValue = "RONG";
break;
case 8459:
case 8569:
case 8723:
strValue = "ROU";
break;
case 6174:
case 6224:
case 6473:
case 6818:
case 6865:
case 6906:
case 7140:
case 7908:
case 8164:
case 8212:
strValue = "RU";
break;
case 7535:
strValue = "RUAN";
break;
case 6039:
case 6208:
case 7236:
case 7803:
case 8224:
strValue = "RUI";
break;
strValue = "RUN";
break;
case 5728:
case 8372:
strValue = "RUO";
break;
case 5606:
case 5677:
case 7493:
case 7559:
case 7610:
strValue = "SA";
break;
case 6471:
strValue = "SAI";
break;
case 6644:
case 7507:
case 8454:
strValue = "SAN";
break;
case 6290:
case 7763:
case 8210:
strValue = "SANG";
break;
case 6003:
case 7150:
case 7156:
case 7593:
case 8094:
case 8694:
strValue = "SAO";
break;
strValue = "SE";
break;
strValue = "SEN";
break;
strValue = "SENG";
break;
case 6394:
case 7606:
case 7901:
case 8080:
case 8436:
case 8614:
case 8672:
strValue = "SHA";
break;
case 8507:
strValue = "SHAI";
break;
case 5663:
case 5808:
case 5923:
case 5979:
case 6047:
case 6890:
case 7009:
case 7051:
case 7083:
case 7594:
case 7844:
case 8062:
case 8321:
case 8414:
case 8539:
case 8713:
strValue = "SHAN";
break;
case 5980:
case 7120:
case 7368:
case 7656:
case 8592:
strValue = "SHANG";
break;
case 5931:
case 6070:
case 6891:
case 7228:
case 8366:
case 8425:
strValue = "SHAO";
break;
case 5639:
case 5760:
case 6606:
case 6860:
case 7608:
case 7820:
case 8774:
strValue = "SHE";
break;
case 5837:
case 6123:
case 6351:
case 6841:
case 7309:
case 7547:
case 7982:
case 8255:
strValue = "SHEN";
break;
case 6551:
case 7441:
case 7782:
case 8347:
strValue = "SHENG";
break;
case 5854:
case 5985:
case 6110:
case 6173:
case 6317:
case 7388:
case 7459:
case 7634:
case 7870:
case 8307:
case 8334:
case 8363:
case 8525:
case 8669:
case 8685:
strValue = "SHI";
break;
case 6587:
case 7123:
case 8428:
strValue = "SHOU";
break;
case 5731:
case 5951:
case 6136:
case 6283:
case 6780:
case 6888:
case 7013:
case 7508:
case 7582:
case 7988:
strValue = "SHU";
break;
case 6407:
strValue = "SHUA";
break;
case 8316:
strValue = "SHUAI";
break;
case 6737:
case 6844:
strValue = "SHUAN";
break;
case 7055:
strValue = "SHUANG";
break;
strValue = "SHUI";
break;
strValue = "SHUN";
break;
case 6184:
case 6287:
case 6989:
case 7335:
case 7869:
strValue = "SHUO";
break;
case 5643:
case 5778:
case 5944:
case 6348:
case 6765:
case 6784:
case 6889:
case 7006:
case 7065:
case 7133:
case 7675:
case 7940:
case 8024:
case 8174:
case 8247:
case 8351:
strValue = "SI";
break;
case 5801:
case 6131:
case 6534:
case 6552:
case 6676:
case 6704:
case 6833:
case 8121:
strValue = "SONG";
break;
case 5937:
case 6220:
case 6418:
case 6453:
case 6640:
case 6849:
case 7612:
case 7804:
case 7943:
case 8284:
strValue = "SOU";
break;
case 5777:
case 5853:
case 6188:
case 6428:
case 6726:
case 6819:
case 8389:
case 8602:
case 8653:
strValue = "SU";
break;
case 6601:
strValue = "SUAN";
break;
case 5839:
case 6120:
case 6901:
case 6968:
case 7661:
case 7785:
case 7801:
strValue = "SUI";
break;
case 6105:
case 6588:
case 6624:
case 7330:
case 8632:
strValue = "SUN";
break;
case 6379:
case 6434:
case 6442:
case 7022:
case 7288:
case 7792:
case 8440:
strValue = "SUO";
break;
case 6743:
case 6866:
case 6961:
case 7329:
case 7719:
case 7872:
case 8533:
case 8703:
strValue = "TA";
break;
case 5902:
case 6223:
case 6330:
case 7070:
case 7536:
case 7638:
case 7849:
case 8544:
case 8656:
strValue = "TAI";
break;
case 5916:
case 6903:
case 7428:
case 7694:
case 7867:
case 7936:
case 8191:
strValue = "TAN";
break;
case 5746:
case 6491:
case 6871:
case 7209:
case 7344:
case 7906:
case 7959:
case 8177:
case 8305:
case 8311:
case 8442:
case 8517:
strValue = "TANG";
break;
case 5627:
case 6391:
case 6812:
case 7226:
case 7666:
strValue = "TAO";
break;
strValue = "1845 <20><>";
break;
case 6315:
case 7693:
case 7911:
strValue = "TE";
break;
case 7588:
strValue = "TENG";
break;
case 5735:
case 6709:
case 6949:
case 7130:
case 8035:
case 8151:
case 8514:
strValue = "TI";
break;
case 6261:
case 6735:
case 6757:
case 7369:
case 7817:
strValue = "TIAN";
break;
case 5712:
case 7686:
case 8127:
case 8272:
case 8352:
case 8448:
case 8622:
case 8670:
case 8756:
strValue = "TIAO";
break;
case 6138:
case 8749:
strValue = "TIE";
break;
case 6080:
case 6167:
case 7035:
case 7272:
case 7890:
case 8249:
case 8610:
strValue = "TING";
break;
case 5701:
case 5758:
case 6077:
case 6444:
case 6690:
case 6892:
case 7737:
strValue = "TONG";
break;
case 7855:
case 7822:
case 8727:
strValue = "TOU";
break;
case 6002:
case 6117:
case 6143:
case 7842:
case 8509:
strValue = "TU";
break;
case 6250:
case 6972:
strValue = "TUAN";
break;
case 7653:
strValue = "TUI";
break;
case 5759:
case 6629:
case 7453:
case 7564:
strValue = "TUN";
break;
case 5617:
case 5702:
case 5971:
case 6653:
case 6791:
case 7256:
case 7262:
case 7350:
case 7740:
case 8374:
case 8502:
case 8541:
case 8630:
strValue = "TUO";
break;
case 5684:
case 7020:
case 7580:
strValue = "WA";
break;
strValue = "WAI";
break;
case 5664:
case 6025:
case 6150:
case 7093:
case 7126:
case 7194:
case 7568:
case 7821:
case 8274:
strValue = "WAN";
break;
case 5672:
case 6244:
case 6715:
case 7394:
case 8745:
strValue = "WANG";
break;
case 5743:
case 5835:
case 5881:
case 5883:
case 6158:
case 6217:
case 6488:
case 6501:
case 6543:
case 6545:
case 6611:
case 6612:
case 6739:
case 6777:
case 6802:
case 6822:
case 6952:
case 7024:
case 7166:
case 7224:
case 7406:
case 7631:
case 7648:
case 8084:
case 8426:
case 8659:
strValue = "WEI";
break;
case 5656:
case 6751:
case 6775:
case 7223:
case 8609:
strValue = "WEN";
break;
case 6178:
case 6219:
strValue = "WENG";
break;
case 5733:
case 6111:
case 6502:
case 6855:
case 7531:
case 7750:
case 8627:
strValue = "WO";
break;
case 5603:
case 5685:
case 5867:
case 5889:
case 5956:
case 6044:
case 6377:
case 6648:
case 6668:
case 6672:
case 6820:
case 6927:
case 6935:
case 6992:
case 7036:
case 7080:
case 7227:
case 7485:
case 7641:
case 8036:
case 8045:
case 8077:
case 8258:
case 8640:
case 8789:
strValue = "WU";
break;
case 5750:
case 5766:
case 5884:
case 5913:
case 6130:
case 6163:
case 6191:
case 6241:
case 6381:
case 6567:
case 6630:
case 6750:
case 6827:
case 6832:
case 6979:
case 7050:
case 7184:
case 7356:
case 7456:
case 7474:
case 7604:
case 7668:
case 7689:
case 7691:
case 8010:
case 8122:
case 8265:
case 8303:
case 8312:
case 8410:
case 8424:
case 8443:
case 8449:
case 8466:
case 8521:
case 8791:
strValue = "XI";
break;
case 6340:
case 6582:
case 6958:
case 7206:
case 7252:
case 7744:
case 8093:
case 8333:
case 8779:
strValue = "XIA";
break;
case 5794:
case 5823:
case 6040:
case 6118:
case 6226:
case 6513:
case 6593:
case 6963:
case 7021:
case 7515:
case 7662:
case 7676:
case 8034:
case 8079:
case 8225:
case 8358:
case 8444:
case 8503:
case 8548:
case 8549:
case 8617:
strValue = "XIAN";
break;
case 6028:
case 6157:
case 6635:
case 6652:
case 7088:
case 7129:
case 8313:
case 8663:
case 8747:
strValue = "XIANG";
break;
case 6356:
case 6537:
case 6876:
case 6948:
case 7071:
case 7115:
case 7241:
case 7253:
case 8257:
case 8367:
case 8379:
case 8744:
strValue = "XIAO";
break;
case 5741:
case 5784:
case 5936:
case 5938:
case 6215:
case 6302:
case 6619:
case 6661:
case 6845:
case 6912:
case 6966:
case 7105:
case 7151:
case 7331:
case 7339:
case 8583:
strValue = "XIE";
break;
case 5622:
case 6016:
case 7431:
case 7607:
case 8646:
strValue = "XIN";
break;
case 5874:
case 6084:
case 6309:
case 6712:
case 7742:
strValue = "XING";
break;
case 6026:
strValue = "XIONG";
break;
case 6361:
case 6522:
case 6642:
case 6651:
case 6869:
case 8028:
case 8587:
case 8759:
strValue = "XIU";
break;
case 5828:
case 5935:
case 5955:
case 6203:
case 6810:
case 6851:
case 7179:
case 7282:
case 7667:
case 7776:
case 8167:
case 8458:
case 8515:
strValue = "XU";
break;
case 5756:
case 5846:
case 6170:
case 6279:
case 6789:
case 6854:
case 6886:
case 7215:
case 7324:
case 7449:
case 7637:
case 7651:
case 7759:
case 7871:
case 7964:
case 8071:
strValue = "XUAN";
break;
case 5842:
case 7720:
case 8529:
case 8708:
strValue = "XUE";
break;
case 5767:
case 5908:
case 5987:
case 6087:
case 6101:
case 6206:
case 6225:
case 6530:
case 6563:
case 6620:
case 6694:
case 6813:
case 6817:
case 7454:
case 8131:
case 8524:
case 8664:
strValue = "XUN";
break;
case 5683:
case 5975:
case 6275:
case 6512:
case 6934:
case 7011:
case 7180:
case 7266:
case 7518:
case 7728:
case 7793:
case 8073:
strValue = "YA";
break;
case 5641:
case 5645:
case 5718:
case 5740:
case 5780:
case 5861:
case 5917:
case 5919:
case 6030:
case 6146:
case 6535:
case 6691:
case 6738:
case 6753:
case 6846:
case 6857:
case 6991:
case 7044:
case 7192:
case 7360:
case 7444:
case 7557:
case 7645:
case 7827:
case 8359:
case 8506:
case 8742:
case 8748:
case 8790:
strValue = "YAN";
break;
case 6564:
case 6683:
case 7630:
case 7640:
case 7706:
case 8253:
case 8717:
strValue = "YANG";
break;
case 5618:
case 5619:
case 6326:
case 6542:
case 6570:
case 7159:
case 7182:
case 7235:
case 7387:
case 7455:
case 7540:
case 7902:
case 8046:
case 8126:
case 8477:
case 8705:
strValue = "YAO";
break;
case 5644:
case 5843:
case 5894:
case 6262:
case 7442:
case 7639:
case 7884:
strValue = "YE";
break;
case 5655:
case 5657:
case 5670:
case 5693:
case 5711:
case 5817:
case 5961:
case 5992:
case 6018:
case 6051:
case 6072:
case 6218:
case 6236:
case 6240:
case 6258:
case 6314:
case 6329:
case 6355:
case 6362:
case 6441:
case 6470:
case 6527:
case 6558:
case 6602:
case 6634:
case 6688:
case 6689:
case 6708:
case 6884:
case 6938:
case 7068:
case 7143:
case 7376:
case 7383:
case 7461:
case 7629:
case 7658:
case 7784:
case 7838:
case 7955:
case 7978:
case 8074:
case 8089:
case 8115:
case 8120:
case 8270:
case 8415:
case 8464:
case 8472:
case 8493:
case 8780:
strValue = "YI";
break;
case 5623:
case 5920:
case 5983:
case 6007:
case 6065:
case 6337:
case 6419:
case 6594:
case 6625:
case 6806:
case 7519:
case 7887:
case 8111:
case 8230:
case 8615:
case 8624:
strValue = "YIN";
break;
case 5788:
case 5911:
case 6067:
case 6094:
case 6126:
case 6151:
case 6186:
case 6292:
case 6451:
case 6663:
case 6862:
case 6875:
case 6913:
case 7188:
case 7212:
case 7326:
case 7584:
case 8048:
case 8108:
case 8203:
case 8331:
strValue = "YING";
break;
case 6401:
strValue = "YO";
break;
case 5724:
case 5953:
case 6013:
case 6415:
case 6728:
case 7163:
case 7962:
case 8014:
case 8711:
case 8751:
strValue = "YONG";
break;
case 5653:
case 5692:
case 5707:
case 6112:
case 6115:
case 6121:
case 6347:
case 6483:
case 6922:
case 7254:
case 7364:
case 7527:
case 7880:
case 8064:
case 8236:
case 8242:
case 8286:
case 8647:
case 8778:
case 8788:
strValue = "YOU";
break;
case 5614:
case 5625:
case 5681:
case 5722:
case 5836:
case 5845:
case 6139:
case 6187:
case 6277:
case 6484:
case 6486:
case 6546:
case 6592:
case 6632:
case 6637:
case 6655:
case 6748:
case 6987:
case 6993:
case 7005:
case 7090:
case 7204:
case 7437:
case 7476:
case 7573:
case 7603:
case 7622:
case 7647:
case 7659:
case 7718:
case 7858:
case 8033:
case 8054:
case 8085:
case 8086:
case 8130:
case 8133:
case 8266:
case 8285:
case 8336:
case 8407:
case 8408:
case 8607:
case 8625:
strValue = "YU";
break;
case 5989:
case 6011:
case 6282:
case 6768:
case 7034:
case 7205:
case 7358:
case 7528:
case 7783:
case 8016:
case 8302:
case 8378:
case 8629:
strValue = "YUAN";
break;
case 5763:
case 6914:
case 7348:
case 7530:
case 7865:
strValue = "YUE";
break;
case 5909:
case 6031:
case 6581:
case 6702:
case 6719:
case 7101:
case 7225:
case 7370:
case 7432:
case 7521:
case 7657:
strValue = "YUN";
break;
case 6257:
case 6338:
strValue = "ZA";
break;
case 6544:
case 7162:
strValue = "ZAI";
break;
case 7222:
case 7435:
case 8402:
case 8456:
case 8485:
case 8641:
strValue = "ZAN";
break;
case 6242:
case 7064:
case 7416:
strValue = "ZANG";
break;
case 6380:
strValue = "ZAO";
break;
case 5638:
case 8369:
case 5651:
case 6385:
case 6493:
case 6937:
case 7430:
case 8348:
case 8423:
strValue = "ZE";
break;
strValue = "ZEI";
break;
case 5858:
strValue = "ZEN";
break;
case 7153:
case 7421:
case 7832:
case 7913:
strValue = "ZENG";
break;
case 6610:
case 6274:
case 6324:
case 6369:
case 6378:
case 7736:
case 8068:
case 8238:
case 8794:
strValue = "ZHA";
break;
case 7746:
case 8109:
strValue = "ZHAI";
break;
case 5862:
case 6288:
case 7625:
strValue = "ZHAN";
break;
case 5675:
case 5921:
case 6504:
case 6554:
case 6615:
case 7049:
case 7216:
case 8315:
strValue = "ZHANG";
break;
case 5815:
case 7294:
case 7840:
case 8341:
strValue = "ZHAO";
break;
case 5856:
case 6301:
case 7247:
case 7392:
case 7761:
case 8049:
case 8162:
case 8256:
case 8487:
strValue = "ZHE";
break;
case 5958:
case 6172:
case 6805:
case 7139:
case 7269:
case 7327:
case 7384:
case 7466:
case 7551:
case 7562:
case 7685:
case 7819:
case 8001:
case 8018:
case 8380:
strValue = "ZHEN";
break;
case 5826:
case 6531:
case 6571:
case 7859:
case 7903:
case 8361:
strValue = "ZHENG";
break;
case 5620:
case 5876:
case 5904:
case 5990:
case 6038:
case 6293:
case 6489:
case 6669:
case 6973:
case 6975:
case 7079:
case 7246:
case 7255:
case 7257:
case 7268:
case 7382:
case 7389:
case 7462:
case 7553:
case 7589:
case 7677:
case 7683:
case 7773:
case 7984:
case 8026:
case 8075:
case 8246:
case 8474:
case 8505:
case 8537:
case 8557:
case 8560:
case 8584:
case 8603:
strValue = "ZHI";
break;
case 5803:
case 7981:
case 8314:
case 8417:
case 8564:
strValue = "ZHONG";
break;
case 6107:
case 6390:
case 7008:
case 7091:
case 7107:
case 7548:
case 7756:
case 8406:
case 8492:
strValue = "ZHOU";
break;
case 5689:
case 5710:
case 5905:
case 6049:
case 6079:
case 6808:
case 6830:
case 6883:
case 7244:
case 7338:
case 7345:
case 7636:
case 7889:
case 8070:
case 8081:
case 8335:
case 8371:
case 8422:
case 8467:
case 8578:
case 8770:
strValue = "ZHU";
break;
strValue = "ZHUA";
break;
strValue = "ZHUAI";
break;
case 6389:
case 6645:
case 8207:
strValue = "ZHUAN";
break;
case 5755:
strValue = "ZHUANG";
break;
case 6723:
case 7077:
case 7136:
strValue = "ZHUI";
break;
case 7538:
case 8124:
strValue = "ZHUN";
break;
case 5730:
case 5834:
case 6310:
case 6823:
case 6835:
case 6910:
case 7644:
case 7690:
case 7729:
case 7977:
strValue = "ZHUO";
break;
case 5849:
case 6549:
case 7002:
case 7060:
case 7127:
case 7287:
case 7402:
case 7463:
case 7707:
case 7786:
case 7937:
case 7986:
case 8172:
case 8342:
case 8450:
case 8484:
case 8594:
case 8604:
case 8623:
case 8686:
case 8758:
strValue = "ZI";
break;
case 5744:
case 7574:
case 8453:
strValue = "ZONG";
break;
case 5833:
case 5878:
case 5924:
case 7067:
case 8677:
strValue = "ZOU";
break;
case 5762:
case 6147:
case 7963:
strValue = "ZU";
break;
case 6312:
case 7158:
case 8582:
strValue = "ZUAN";
break;
case 6209:
strValue = "ZUI";
break;
case 6304:
case 7355:
case 8714:
strValue = "ZUN";
break;
case 5872:
case 6382:
case 6460:
case 6684:
case 7549:
case 7681:
strValue = "ZUO";
break;
default:
if (nCode >= 1601 && nCode <= 1602)
{
strValue = "A";
break;
}
if (nCode >= 1603 && nCode <= 1615)
{
strValue = "AI";
break;
}
if (nCode >= 1616 && nCode <= 1624)
{
strValue = "AN";
break;
}
if (nCode >= 1625 && nCode <= 1627)
{
strValue = "ANG";
break;
}
if (nCode >= 1628 && nCode <= 1636)
{
strValue = "AO";
break;
}
if (nCode >= 1637 && nCode <= 1654)
{
strValue = "BA";
break;
}
if (nCode >= 1655 && nCode <= 1662)
{
strValue = "BAI";
break;
}
if (nCode >= 1663 && nCode <= 1677)
{
strValue = "BAN";
break;
}
if (nCode >= 1678 && nCode <= 1689)
{
strValue = "BANG";
break;
}
if (nCode >= 1690 && nCode <= 1712)
{
strValue = "BAO";
break;
}
if (nCode >= 1713 && nCode <= 1727)
{
strValue = "BEI";
break;
}
if (nCode >= 1728 && nCode <= 1731)
{
strValue = "BEN";
break;
}
if (nCode >= 1732 && nCode <= 1737)
{
strValue = "BENG";
break;
}
if (nCode > 1738 && nCode <= 1761)
{
strValue = "BI";
break;
}
if (nCode >= 1762 && nCode <= 1773)
{
strValue = "BIAN";
break;
}
if (nCode >= 1774 && nCode <= 1777)
{
strValue = "BIAO";
break;
}
if (nCode >= 1778 && nCode <= 1781)
{
strValue = "BIE";
break;
}
if (nCode >= 1782 && nCode <= 1787)
{
strValue = "BIN";
break;
}
if (nCode >= 1788 && nCode <= 1794)
{
strValue = "BING";
break;
}
if (nCode >= 1801 && nCode <= 1802)
{
strValue = "BING";
break;
}
if (nCode >= 1803 && nCode <= 1821)
{
strValue = "BO";
break;
}
if (nCode >= 1822 && nCode <= 1832)
{
strValue = "BU";
break;
}
if (nCode == 1833)
{
strValue = "CA";
break;
}
if (nCode >= 1834 && nCode <= 1844)
{
strValue = "CAI";
break;
}
if (nCode >= 1845 && nCode <= 1851)
{
strValue = "CAN";
break;
}
if (nCode >= 1852 && nCode <= 1856)
{
strValue = "CANG";
break;
}
if (nCode >= 1857 && nCode <= 1861)
{
strValue = "CAO";
break;
}
if (nCode >= 1862 && nCode <= 1866)
{
strValue = "CE";
break;
}
if (nCode >= 1867 && nCode <= 1868)
{
strValue = "CENG";
break;
}
if (nCode >= 1869 && nCode <= 1879)
{
strValue = "CHA";
break;
}
if (nCode >= 1880 && nCode <= 1882)
{
strValue = "CHAI";
break;
}
if (nCode >= 1883 && nCode <= 1892)
{
strValue = "CHAN";
break;
}
if (nCode >= 1893 && nCode <= 1911)
{
strValue = "CHANG";
break;
}
if (nCode >= 1912 && nCode <= 1920)
{
strValue = "CHAO";
break;
}
if (nCode >= 1921 && nCode <= 1926)
{
strValue = "CHE";
break;
}
if (nCode >= 1927 && nCode <= 1936)
{
strValue = "CHEN";
break;
}
if (nCode >= 1937 && nCode <= 1951)
{
strValue = "CHENG";
break;
}
if (nCode >= 1952 && nCode <= 1967)
{
strValue = "CHI";
break;
}
if (nCode >= 1968 && nCode <= 1972)
{
strValue = "CHONG";
break;
}
if (nCode >= 1973 && nCode <= 1984)
{
strValue = "CHOU";
break;
}
if (nCode >= 1985 && nCode <= 2006)
{
strValue = "CHU";
break;
}
if (nCode == 2007)
{
strValue = "CHUAI";
break;
}
if (nCode >= 2008 && nCode <= 2014)
{
strValue = "CHUAN";
break;
}
if (nCode >= 2015 && nCode <= 2020)
{
strValue = "CHUANG";
break;
}
if (nCode >= 2021 && nCode <= 2025)
{
strValue = "CHUI";
break;
}
if (nCode >= 2026 && nCode <= 2032)
{
strValue = "CHUN";
break;
}
if (nCode >= 2033 && nCode <= 2034)
{
strValue = "CHUO";
break;
}
if (nCode >= 2035 && nCode <= 2046)
{
strValue = "CI";
break;
}
if (nCode >= 2047 && nCode <= 2052)
{
strValue = "CONG";
break;
}
if (nCode >= 2054 && nCode <= 2057)
{
strValue = "CU";
break;
}
if (nCode >= 2058 && nCode <= 2060)
{
strValue = "CUAN";
break;
}
if (nCode >= 2061 && nCode <= 2068)
{
strValue = "CUI";
break;
}
if (nCode >= 2069 && nCode <= 2071)
{
strValue = "CUN";
break;
}
if (nCode >= 2072 && nCode <= 2077)
{
strValue = "CUO";
break;
}
if (nCode >= 2078 && nCode <= 2083)
{
strValue = "DA";
break;
}
if (nCode >= 2084 && nCode <= 2094)
{
strValue = "DAI";
break;
}
if (nCode >= 2102 && nCode <= 2116)
{
strValue = "DAN";
break;
}
if (nCode >= 2117 && nCode <= 2121)
{
strValue = "DANG";
break;
}
if (nCode >= 2122 && nCode <= 2133)
{
strValue = "DAO";
break;
}
if (nCode >= 2134 && nCode <= 2136)
{
strValue = "DE";
break;
}
if (nCode >= 2137 && nCode <= 2143)
{
strValue = "DENG";
break;
}
if (nCode >= 2144 && nCode <= 2162)
{
strValue = "DI";
break;
}
if (nCode >= 2163 && nCode <= 2178)
{
strValue = "DIAN";
break;
}
if (nCode >= 2179 && nCode <= 2187)
{
strValue = "DIAO";
break;
}
if (nCode >= 2188 && nCode <= 2194)
{
strValue = "DIE";
break;
}
if (nCode >= 2201 && nCode <= 2209)
{
strValue = "DING";
break;
}
if (nCode == 2210)
{
strValue = "DIU";
break;
}
if (nCode >= 2211 && nCode <= 2220)
{
strValue = "DONG";
break;
}
if (nCode >= 2221 && nCode <= 2227)
{
strValue = "DOU";
break;
}
if (nCode >= 2228 && nCode <= 2242)
{
strValue = "DU";
break;
}
if (nCode >= 2243 && nCode <= 2248)
{
strValue = "DUAN";
break;
}
if (nCode >= 2249 && nCode <= 2252)
{
strValue = "DUI";
break;
}
if (nCode >= 2253 && nCode <= 2261)
{
strValue = "DUN";
break;
}
if (nCode >= 2262 && nCode <= 2273)
{
strValue = "DUO";
break;
}
if (nCode >= 2274 && nCode <= 2286)
{
strValue = "E";
break;
}
if (nCode == 2287)
{
strValue = "EN";
break;
}
if (nCode >= 2288 && nCode <= 2231)
{
strValue = "ER";
break;
}
if (nCode >= 2302 && nCode <= 2309)
{
strValue = "FA";
break;
}
if (nCode >= 2310 && nCode <= 2326)
{
strValue = "FAN";
break;
}
if (nCode >= 2327 && nCode <= 2337)
{
strValue = "FANG";
break;
}
if (nCode >= 2338 && nCode <= 2349)
{
strValue = "FEI";
break;
}
if (nCode >= 2350 && nCode <= 2364)
{
strValue = "FEN";
break;
}
if (nCode >= 2365 && nCode <= 2379)
{
strValue = "FENG";
break;
}
if (nCode == 2380)
{
strValue = "FO";
break;
}
if (nCode == 2381)
{
strValue = "FOU";
break;
}
if (nCode >= 2382 && nCode <= 2432)
{
strValue = "FU";
break;
}
if (nCode >= 2435 && nCode <= 2440)
{
strValue = "GAI";
break;
}
if (nCode >= 2441 && nCode <= 2451)
{
strValue = "GAN";
break;
}
if (nCode >= 2452 && nCode <= 2460)
{
strValue = "GANG";
break;
}
if (nCode >= 2461 && nCode <= 2470)
{
strValue = "GAO";
break;
}
if (nCode >= 2471 && nCode <= 2487)
{
strValue = "GE";
break;
}
if (nCode == 2488)
{
strValue = "GEI";
break;
}
if (nCode >= 2489 && nCode <= 2490)
{
strValue = "GEN";
break;
}
if (nCode >= 2491 && nCode <= 2503)
{
strValue = "GENG";
break;
}
if (nCode >= 2504 && nCode <= 2518)
{
strValue = "GONG";
break;
}
if (nCode >= 2519 && nCode <= 2527)
{
strValue = "GOU";
break;
}
if (nCode >= 2528 && nCode <= 2545)
{
strValue = "GU";
break;
}
if (nCode >= 2546 && nCode <= 2551)
{
strValue = "GUA";
break;
}
if (nCode >= 2552 && nCode <= 2554)
{
strValue = "GUAI";
break;
}
if (nCode >= 2555 && nCode <= 2565)
{
strValue = "GUAN";
break;
}
if (nCode >= 2566 && nCode <= 2568)
{
strValue = "GUANG";
break;
}
if (nCode >= 2569 && nCode <= 2584)
{
strValue = "GUI";
break;
}
if (nCode >= 2585 && nCode <= 2587)
{
strValue = "GUN";
break;
}
if (nCode >= 2588 && nCode <= 2593)
{
strValue = "GUO";
break;
}
if (nCode == 2594)
{
strValue = "HA";
break;
}
if (nCode >= 2601 && nCode <= 2607)
{
strValue = "HAI";
break;
}
if (nCode >= 2608 && nCode <= 2626)
{
strValue = "HAN";
break;
}
if (nCode >= 2627 && nCode <= 2629)
{
strValue = "HANG";
break;
}
if (nCode >= 2630 && nCode <= 2638)
{
strValue = "HAO";
break;
}
if (nCode >= 2639 && nCode <= 2656)
{
strValue = "HE";
break;
}
if (nCode >= 2657 && nCode <= 2658)
{
strValue = "HEI";
break;
}
if (nCode >= 2659 && nCode <= 2662)
{
strValue = "HEN";
break;
}
if (nCode >= 2663 && nCode <= 2667)
{
strValue = "HENG";
break;
}
if (nCode >= 2668 && nCode <= 2676)
{
strValue = "HONG";
break;
}
if (nCode >= 2677 && nCode <= 2683)
{
strValue = "HOU";
break;
}
if (nCode >= 2684 && nCode <= 2707)
{
strValue = "HU";
break;
}
if (nCode >= 2708 && nCode <= 2716)
{
strValue = "HUA";
break;
}
if (nCode >= 2717 && nCode <= 2721)
{
strValue = "HUAI";
break;
}
if (nCode >= 2722 && nCode <= 2735)
{
strValue = "HUAN";
break;
}
if (nCode >= 2736 && nCode <= 2749)
{
strValue = "HUANG";
break;
}
if (nCode >= 2750 && nCode <= 2770)
{
strValue = "HUI";
break;
}
if (nCode >= 2771 && nCode <= 2776)
{
strValue = "HUN";
break;
}
if (nCode >= 2777 && nCode <= 2786)
{
strValue = "HUO";
break;
}
if (nCode >= 2787 && nCode <= 2845)
{
strValue = "JI";
break;
}
if (nCode >= 2846 && nCode <= 2862)
{
strValue = "JIA";
break;
}
if (nCode >= 2863 && nCode <= 2908)
{
strValue = "JIAN";
break;
}
if (nCode >= 2909 && nCode <= 2921)
{
strValue = "JIANG";
break;
}
if (nCode >= 2922 && nCode <= 2949)
{
strValue = "JIAO";
break;
}
if (nCode >= 2950 && nCode <= 2976)
{
strValue = "JIE";
break;
}
if (nCode >= 2977 && nCode <= 3002)
{
strValue = "JIN";
break;
}
if (nCode >= 3003 && nCode <= 3027)
{
strValue = "JING";
break;
}
if (nCode >= 3028 && nCode <= 3029)
{
strValue = "JIONG";
break;
}
if (nCode >= 3030 && nCode <= 3046)
{
strValue = "JIU";
break;
}
if (nCode >= 3047 && nCode <= 3071)
{
strValue = "JU";
break;
}
if (nCode >= 3072 && nCode <= 3078)
{
strValue = "JUAN";
break;
}
if (nCode >= 3079 && nCode <= 3088)
{
strValue = "JUE";
break;
}
if (nCode >= 3089 && nCode <= 3105)
{
strValue = "JUN";
break;
}
if (nCode >= 3106 && nCode <= 3109)
{
strValue = "KA";
break;
}
if (nCode >= 3110 && nCode <= 3114)
{
strValue = "KAI";
break;
}
if (nCode >= 3115 && nCode <= 3120)
{
strValue = "KAN";
break;
}
if (nCode >= 3121 && nCode <= 3127)
{
strValue = "KANG";
break;
}
if (nCode >= 3128 && nCode <= 3131)
{
strValue = "KAO";
break;
}
if (nCode >= 3132 && nCode <= 3146)
{
strValue = "KE";
break;
}
if (nCode >= 3147 && nCode <= 3150)
{
strValue = "KEN";
break;
}
if (nCode >= 3151 && nCode <= 3152)
{
strValue = "KENG";
break;
}
if (nCode >= 3153 && nCode <= 3156)
{
strValue = "KONG";
break;
}
if (nCode >= 3157 && nCode <= 3160)
{
strValue = "KOU";
break;
}
if (nCode >= 3161 && nCode <= 3167)
{
strValue = "KU";
break;
}
if (nCode >= 3168 && nCode <= 3172)
{
strValue = "KUA";
break;
}
if (nCode >= 3173 && nCode <= 3176)
{
strValue = "KUAI";
break;
}
if (nCode >= 3177 && nCode <= 3178)
{
strValue = "KUAN";
break;
}
if (nCode >= 3179 && nCode <= 3186)
{
strValue = "KUANG";
break;
}
if (nCode >= 3187 && nCode <= 3203)
{
strValue = "KUI";
break;
}
if (nCode >= 3204 && nCode <= 3207)
{
strValue = "KUN";
break;
}
if (nCode >= 3208 && nCode <= 3211)
{
strValue = "KUO";
break;
}
if (nCode >= 3212 && nCode <= 3218)
{
strValue = "LA";
break;
}
if (nCode >= 3219 && nCode <= 3221)
{
strValue = "LAI";
break;
}
if (nCode >= 3222 && nCode <= 3236)
{
strValue = "LAN";
break;
}
if (nCode >= 3237 && nCode <= 3243)
{
strValue = "LANG";
break;
}
if (nCode >= 3244 && nCode <= 3252)
{
strValue = "LAO";
break;
}
if (nCode >= 3253 && nCode <= 3254)
{
strValue = "LE";
break;
}
if (nCode >= 3255 && nCode <= 3265)
{
strValue = "LEI";
break;
}
if (nCode >= 3266 && nCode <= 3268)
{
strValue = "LENG";
break;
}
if (nCode >= 3269 && nCode <= 3308)
{
strValue = "LI";
}
if (nCode == 3309)
{
strValue = "LIA";
break;
}
if (nCode >= 3310 && nCode <= 3323)
{
strValue = "LIAN";
break;
}
if (nCode >= 3324 && nCode <= 3334)
{
strValue = "LIANG";
break;
}
if (nCode >= 3335 && nCode <= 3347)
{
strValue = "LIAO";
break;
}
if (nCode >= 3348 && nCode <= 3352)
{
strValue = "LIE";
break;
}
if (nCode >= 3353 && nCode <= 3363)
{
strValue = "LIN";
break;
}
if (nCode >= 3364 && nCode <= 3378)
{
strValue = "LING";
break;
}
if (nCode >= 3379 && nCode <= 3389)
{
strValue = "LIU";
break;
}
if (nCode >= 3390 && nCode <= 3404)
{
strValue = "LONG";
break;
}
if (nCode >= 3405 && nCode <= 3410)
{
strValue = "LOU";
break;
}
if (nCode >= 3411 && nCode <= 3444)
{
strValue = "LU";
break;
}
if (nCode >= 3445 && nCode <= 3450)
{
strValue = "LUAN";
break;
}
if (nCode >= 3451 && nCode <= 3452)
{
strValue = "LUE";
break;
}
if (nCode >= 3453 && nCode <= 3459)
{
strValue = "LUN";
break;
}
if (nCode >= 3460 && nCode <= 3471)
{
strValue = "LUO";
break;
}
if (nCode >= 3472 && nCode <= 3480)
{
strValue = "MA";
break;
}
if (nCode >= 3481 && nCode <= 3486)
{
strValue = "MAI";
break;
}
if (nCode >= 3487 && nCode <= 3501)
{
strValue = "MAN";
break;
}
if (nCode >= 3502 && nCode <= 3507)
{
strValue = "MANG";
break;
}
if (nCode >= 3508 && nCode <= 3519)
{
strValue = "MAO";
break;
}
if (nCode == 3520)
{
strValue = "ME";
break;
}
if (nCode >= 3521 && nCode <= 3536)
{
strValue = "MEI";
break;
}
if (nCode >= 3537 && nCode <= 3539)
{
strValue = "MEN";
break;
}
if (nCode >= 3540 && nCode <= 3547)
{
strValue = "MENG";
break;
}
if (nCode >= 3548 && nCode <= 3561)
{
strValue = "MI";
}
if (nCode >= 3562 && nCode <= 3570)
{
strValue = "MIAN";
break;
}
if (nCode >= 3571 && nCode <= 3578)
{
strValue = "MIAO";
break;
}
if (nCode >= 3579 && nCode <= 3580)
{
strValue = "MIE";
break;
}
if (nCode >= 3581 && nCode <= 3586)
{
strValue = "MIN";
break;
}
if (nCode >= 3587 && nCode <= 3592)
{
strValue = "MING";
break;
}
if (nCode == 3593)
{
strValue == "MIU";
break;
}
if (nCode >= 3594 && nCode <= 3616)
{
strValue = "MO";
break;
}
if (nCode >= 3617 && nCode <= 3619)
{
strValue = "MOU";
break;
}
if (nCode >= 3620 && nCode <= 3634)
{
strValue = "MU";
break;
}
if (nCode >= 3635 && nCode <= 3641)
{
strValue = "NA";
break;
}
if (nCode >= 3642 && nCode <= 3646)
{
strValue = "NAI";
break;
}
if (nCode >= 3647 && nCode <= 3649)
{
strValue = "NAN";
break;
}
if (nCode == 3650)
{
strValue = "NANG";
break;
}
if (nCode >= 3651 && nCode <= 3655)
{
strValue = "NAO";
break;
}
if (nCode == 3656)
{
strValue = "NE";
break;
}
if (nCode >= 3657 && nCode <= 3658)
{
strValue = "NEI";
break;
}
if (nCode == 3659)
{
strValue = "NEN";
break;
}
if (nCode == 3660)
{
strValue = "NENG";
break;
}
if (nCode >= 3661 && nCode <= 3671)
{
strValue = "NI";
break;
}
if (nCode >= 3672 && nCode <= 3678)
{
strValue = "NIAN";
break;
}
if (nCode >= 3679 && nCode <= 3680)
{
strValue = "NIANG";
break;
}
if (nCode >= 3681 && nCode <= 3682)
{
strValue = "NIAO";
break;
}
if (nCode >= 3683 && nCode <= 3689)
{
strValue = "NIE";
break;
}
if (nCode == 3690)
{
strValue = "NIN";
break;
}
if (nCode >= 3691 && nCode <= 3702)
{
strValue = "NING";
break;
}
if (nCode >= 3703 && nCode <= 3706)
{
strValue = "NIU";
break;
}
if (nCode >= 3707 && nCode <= 3710)
{
strValue = "NONG";
break;
}
if (nCode >= 3711 && nCode <= 3714)
{
strValue = "NU";
break;
}
if (nCode == 3715)
{
strValue = "NUAN";
break;
}
if (nCode >= 3716 && nCode <= 3717)
{
strValue = "NUE";
break;
}
if (nCode >= 3718 && nCode <= 3721)
{
strValue = "NUO";
break;
}
if (nCode == 3722)
{
strValue = "O";
break;
}
if (nCode >= 3723 && nCode <= 3729)
{
strValue = "OU";
break;
}
if (nCode >= 3730 && nCode <= 3735)
{
strValue = "PA";
break;
}
if (nCode >= 3736 && nCode <= 3741)
{
strValue = "PAI";
break;
}
if (nCode >= 3742 && nCode <= 3749)
{
strValue = "PAN";
break;
}
if (nCode >= 3750 && nCode <= 3754)
{
strValue = "PANG";
break;
}
if (nCode >= 3755 && nCode <= 3761)
{
strValue = "PAO";
break;
}
if (nCode >= 3762 && nCode <= 3770)
{
strValue = "PEI";
break;
}
if (nCode >= 3771 && nCode <= 3772)
{
strValue = "PEN";
break;
}
if (nCode >= 3773 && nCode <= 3786)
{
strValue = "PENG";
break;
}
if (nCode >= 3787 && nCode <= 3809)
{
strValue = "PI";
break;
}
if (nCode >= 3810 && nCode <= 3813)
{
strValue = "PIAN";
break;
}
if (nCode >= 3814 && nCode <= 3817)
{
strValue = "PIAO";
break;
}
if (nCode >= 3818 && nCode <= 3819)
{
strValue = "PIE";
break;
}
if (nCode >= 3820 && nCode <= 3824)
{
strValue = "PIN";
break;
}
if (nCode >= 3825 && nCode <= 3833)
{
strValue = "PING";
break;
}
if (nCode >= 3834 && nCode <= 3841)
{
strValue = "PO";
break;
}
if (nCode == 3842)
{
strValue = "POU";
break;
}
if (nCode >= 3843 && nCode <= 3857)
{
strValue = "PU";
break;
}
if (nCode >= 3858 && nCode <= 3893)
{
strValue = "QI";
break;
}
if (nCode == 3894 || nCode >= 3901 && nCode <= 3902)
{
strValue = "QIA";
break;
}
if (nCode >= 3903 && nCode <= 3924)
{
strValue = "QIAN";
break;
}
if (nCode >= 3925 && nCode <= 3932)
{
strValue = "QIANG";
break;
}
if (nCode >= 3933 && nCode <= 3947)
{
strValue = "QIAO";
break;
}
if (nCode >= 3948 && nCode <= 3952)
{
strValue = "QIE";
break;
}
if (nCode >= 3953 && nCode <= 3963)
{
strValue = "QIN";
break;
}
if (nCode >= 3964 && nCode <= 3976)
{
strValue = "QING";
break;
}
if (nCode >= 3977 && nCode <= 3978)
{
strValue = "QIONG";
break;
}
if (nCode >= 3979 && nCode <= 3986)
{
strValue = "QIU";
break;
}
if (nCode >= 3987 && nCode <= 4005)
{
strValue = "QU";
break;
}
if (nCode >= 4006 && nCode <= 4016)
{
strValue = "QUAN";
break;
}
if (nCode >= 4017 && nCode <= 4024)
{
strValue = "QUE";
break;
}
if (nCode >= 4025 && nCode <= 4026)
{
strValue = "QUN";
break;
}
if (nCode >= 4027 && nCode <= 4030)
{
strValue = "RAN";
break;
}
if (nCode >= 4031 && nCode <= 4035)
{
strValue = "RANG";
}
if (nCode >= 4036 && nCode <= 4038)
{
strValue = "RAO";
break;
}
if (nCode >= 4039 && nCode <= 4040)
{
strValue = "RE";
break;
}
if (nCode >= 4041 && nCode <= 4050)
{
strValue = "REN";
break;
}
if (nCode >= 4051 && nCode <= 4052)
{
strValue = "RENG";
break;
}
if (nCode == 4053)
{
strValue = "RI";
break;
}
if (nCode >= 4054 && nCode <= 4063)
{
strValue = "RONG";
break;
}
if (nCode >= 4064 && nCode <= 4066)
{
strValue = "ROU";
break;
}
if (nCode >= 4067 && nCode <= 4076)
{
strValue = "RU";
break;
}
if (nCode >= 4077 && nCode <= 4078)
{
strValue = "RUAN";
break;
}
if (nCode >= 4079 && nCode <= 4081)
{
strValue = "RUI";
break;
}
if (nCode >= 4082 && nCode <= 4083)
{
strValue = "RUN";
break;
}
if (nCode >= 4084 && nCode <= 4085)
{
strValue = "RUO";
break;
}
if (nCode >= 4086 && nCode <= 4088)
{
strValue = "SA";
break;
}
if (nCode >= 4089 && nCode <= 4092)
{
strValue = "SAI";
break;
}
if (nCode >= 4093 && nCode <= 4094)
{
strValue = "SAN";
break;
}
if (nCode >= 4101 && nCode <= 4102)
{
strValue = "SAN";
break;
}
if (nCode >= 4103 && nCode <= 4105)
{
strValue = "SANG";
break;
}
if (nCode >= 4106 && nCode <= 4109)
{
strValue = "SAO";
break;
}
if (nCode >= 4110 && nCode <= 4112)
{
strValue = "SE";
break;
}
if (nCode == 4113)
{
strValue = "SEN";
}
if (nCode == 4114)
{
strValue = "SENG";
break;
}
if (nCode >= 4115 && nCode <= 4123)
{
strValue = "SHA";
break;
}
if (nCode >= 4124 && nCode <= 4125)
{
strValue = "SHAI";
break;
}
if (nCode >= 4126 && nCode <= 4141)
{
strValue = "SHAN";
break;
}
if (nCode >= 4142 && nCode <= 4149)
{
strValue = "SHANG";
break;
}
if (nCode >= 4150 && nCode <= 4160)
{
strValue = "SHAO";
break;
}
if (nCode >= 4161 && nCode <= 4172)
{
strValue = "SHE";
break;
}
if (nCode >= 4173 && nCode <= 4188)
{
strValue = "SHEN";
break;
}
if (nCode >= 4189 && nCode <= 4205)
{
strValue = "SHENG";
break;
}
if (nCode >= 4206 && nCode <= 4252)
{
strValue = "SHI";
break;
}
if (nCode >= 4253 && nCode <= 4262)
{
strValue = "SHOU";
break;
}
if (nCode >= 4263 && nCode <= 4301)
{
strValue = "SHU";
break;
}
if (nCode >= 4302 && nCode <= 4303)
{
strValue = "SHUA";
break;
}
if (nCode >= 4304 && nCode <= 4307)
{
strValue = "SHUAI";
break;
}
if (nCode >= 4308 && nCode <= 4309)
{
strValue = "SHUAN";
break;
}
if (nCode >= 4310 && nCode <= 4312)
{
strValue = "SHUANG";
break;
}
if (nCode >= 4313 && nCode <= 4316)
{
strValue = "SHUI";
break;
}
if (nCode >= 4317 && nCode <= 4320)
{
strValue = "SHUN";
break;
}
if (nCode >= 4321 && nCode <= 4324)
{
strValue = "SHUO";
break;
}
if (nCode >= 4325 && nCode <= 4340)
{
strValue = "SI";
break;
}
if (nCode >= 4341 && nCode <= 4348)
{
strValue = "SONG";
break;
}
if (nCode >= 4349 && nCode <= 4352)
{
strValue = "SOU";
break;
}
if (nCode >= 4353 && nCode <= 4364)
{
strValue = "SU";
break;
}
if (nCode >= 4365 && nCode <= 4367)
{
strValue = "SUAN";
break;
}
if (nCode >= 4368 && nCode <= 4378)
{
strValue = "SUI";
break;
}
if (nCode >= 4379 && nCode <= 4381)
{
strValue = "SUN";
break;
}
if (nCode >= 4382 && nCode <= 4389)
{
strValue = "SUO";
break;
}
if (nCode >= 4390 && nCode <= 4404)
{
strValue = "TA";
break;
}
if (nCode >= 4405 && nCode <= 4413)
{
strValue = "TAI";
break;
}
if (nCode >= 4414 && nCode <= 4431)
{
strValue = "TAN";
break;
}
if (nCode >= 4432 && nCode <= 4444)
{
strValue = "TANG";
break;
}
if (nCode >= 4445 && nCode <= 4455)
{
strValue = "TAO";
break;
}
if (nCode == 4456)
{
strValue = "TE";
break;
}
if (nCode >= 4457 && nCode <= 4460)
{
strValue = "TENG";
break;
}
if (nCode >= 4461 && nCode <= 4475)
{
strValue = "TI";
break;
}
if (nCode >= 4476 && nCode <= 4483)
{
strValue = "TIAN";
break;
}
if (nCode >= 4484 && nCode <= 4488)
{
strValue = "TIAO";
break;
}
if (nCode >= 4489 && nCode <= 4491)
{
strValue = "TIE";
break;
}
if (nCode >= 4492 && nCode <= 4507)
{
strValue = "TING";
break;
}
if (nCode >= 4508 && nCode <= 4520)
{
strValue = "TONG";
break;
}
if (nCode >= 4521 && nCode <= 4524)
{
strValue = "TOU";
break;
}
if (nCode >= 4525 && nCode <= 4535)
{
strValue = "TU";
break;
}
if (nCode >= 4536 && nCode <= 4537)
{
strValue = "TUAN";
break;
}
if (nCode >= 4538 && nCode <= 4543)
{
strValue = "TUI";
break;
}
if (nCode >= 4544 && nCode <= 4546)
{
strValue = "TUN";
break;
}
if (nCode >= 4547 && nCode <= 4557)
{
strValue = "TUO";
break;
}
if (nCode >= 4558 && nCode <= 4564)
{
strValue = "WA";
break;
}
if (nCode >= 4565 && nCode <= 4566)
{
strValue = "WAI";
break;
}
if (nCode >= 4567 && nCode <= 4583)
{
strValue = "WAN";
break;
}
if (nCode >= 4584 && nCode <= 4593)
{
strValue = "WANG";
break;
}
if (nCode >= 4594 && nCode <= 4632)
{
strValue = "WEI";
break;
}
if (nCode >= 4633 && nCode <= 4642)
{
strValue = "WEN";
break;
}
if (nCode >= 4643 && nCode <= 4645)
{
strValue = "WENG";
break;
}
if (nCode >= 4646 && nCode <= 4654)
{
strValue = "WO";
break;
}
if (nCode >= 4655 && nCode <= 4683)
{
strValue = "WU";
break;
}
if (nCode >= 4684 && nCode <= 4724)
{
strValue = "XI";
break;
}
if (nCode >= 4725 && nCode <= 4737)
{
strValue = "XIA";
break;
}
if (nCode >= 4738 && nCode <= 4763)
{
strValue = "XIAN";
break;
}
if (nCode >= 4764 && nCode <= 4783)
{
strValue = "XIANG";
break;
}
if (nCode >= 4784 && nCode <= 4807)
{
strValue = "XIAO";
break;
}
if (nCode >= 4809 && nCode <= 4828)
{
strValue = "XIE";
break;
}
if (nCode >= 4829 && nCode <= 4838)
{
strValue = "XIN";
break;
}
if (nCode >= 4839 && nCode <= 4853)
{
strValue = "XING";
break;
}
if (nCode >= 4854 && nCode <= 4860)
{
strValue = "XIONG";
break;
}
if (nCode >= 4861 && nCode <= 4869)
{
strValue = "XIU";
break;
}
if (nCode >= 4870 && nCode <= 4888)
{
strValue = "XU";
break;
}
if (nCode >= 4889 && nCode <= 4904)
{
strValue = "XUAN";
break;
}
if (nCode >= 4905 && nCode <= 4910)
{
strValue = "XUE";
break;
}
if (nCode >= 4911 && nCode <= 4924)
{
strValue = "XUN";
break;
}
if (nCode >= 4925 && nCode <= 4940)
{
strValue = "YA";
break;
}
if (nCode >= 4941 && nCode <= 4973)
{
strValue = "YAN";
break;
}
if (nCode >= 4974 && nCode <= 4990)
{
strValue = "YANG";
break;
}
if (nCode >= 4991 && nCode <= 5011)
{
strValue = "YAO";
break;
}
if (nCode >= 5012 && nCode <= 5026)
{
strValue = "YE";
break;
}
if (nCode >= 5027 && nCode <= 5079)
{
strValue = "YI";
break;
}
if (nCode >= 5080 && nCode <= 5101)
{
strValue = "YIN";
break;
}
if (nCode >= 5102 && nCode <= 5119)
{
strValue = "YING";
break;
}
if (nCode == 5120)
{
strValue = "YO";
break;
}
if (nCode >= 5121 && nCode <= 5135)
{
strValue = "YONG";
break;
}
if (nCode >= 5136 && nCode <= 5155)
{
strValue = "YOU";
break;
}
if (nCode >= 5156 && nCode <= 5206)
{
strValue = "YU";
break;
}
if (nCode >= 5207 && nCode <= 5226)
{
strValue = "YUAN";
break;
}
if (nCode >= 5227 && nCode <= 5236)
{
strValue = "YUE";
break;
}
if (nCode >= 5237 && nCode <= 5248)
{
strValue = "YUN";
break;
}
if (nCode >= 5249 && nCode <= 5251)
{
strValue = "ZA";
break;
}
if (nCode >= 5252 && nCode <= 5258)
{
strValue = "ZAI";
break;
}
if (nCode >= 5259 && nCode <= 5262)
{
strValue = "ZAN";
break;
}
if (nCode >= 5263 && nCode <= 5265)
{
strValue = "ZANG";
break;
}
if (nCode >= 5266 && nCode <= 5279)
{
strValue = "ZAO";
break;
}
if (nCode >= 5280 && nCode <= 5283)
{
strValue = "ZE";
break;
}
if (nCode == 5284)
{
strValue = "ZEI";
break;
}
if (nCode == 5285)
{
strValue = "ZEN";
break;
}
if (nCode >= 5286 && nCode <= 5289)
{
strValue = "ZENG";
break;
}
if (nCode >= 5290 && nCode <= 5309)
{
strValue = "ZHA";
break;
}
if (nCode >= 5310 && nCode <= 5315)
{
strValue = "ZHAI";
break;
}
if (nCode >= 5316 && nCode <= 5332)
{
strValue = "ZHAN";
break;
}
if (nCode >= 5333 && nCode <= 5347)
{
strValue = "ZHANG";
break;
}
if (nCode >= 5348 && nCode <= 5357)
{
strValue = "ZHAO";
break;
}
if (nCode >= 5358 && nCode <= 5367)
{
strValue = "ZHE";
break;
}
if (nCode >= 5368 && nCode <= 5383)
{
strValue = "ZHEN";
break;
}
if (nCode >= 5384 && nCode <= 5404)
{
strValue = "ZHENG";
break;
}
if (nCode >= 5405 && nCode <= 5447)
{
strValue = "ZHI";
break;
}
if (nCode >= 5448 && nCode <= 5458)
{
strValue = "ZHONG";
break;
}
if (nCode >= 5459 && nCode <= 5472)
{
strValue = "ZHOU";
break;
}
if (nCode >= 5473 && nCode <= 5504)
{
strValue = "ZHU";
break;
}
if (nCode >= 5505 && nCode <= 5506)
{
strValue = "ZHUA";
break;
}
if (nCode == 5507)
{
strValue = "ZHUAI";
break;
}
if (nCode >= 5508 && nCode <= 5513)
{
strValue = "ZHUAN";
break;
}
if (nCode >= 5514 && nCode <= 5520)
{
strValue = "ZHUANG";
break;
}
if (nCode >= 5521 && nCode <= 5526)
{
strValue = "ZHUI";
break;
}
if (nCode >= 5527 && nCode <= 5528)
{
strValue = "ZHUN";
break;
}
if (nCode >= 5529 && nCode <= 5539)
{
strValue = "ZHUO";
break;
}
if (nCode >= 5540 && nCode <= 5554)
{
strValue = "ZI";
break;
}
if (nCode >= 5555 && nCode <= 5561)
{
strValue = "ZONG";
break;
}
if (nCode >= 5562 && nCode <= 5565)
{
strValue = "ZOU";
break;
}
if (nCode >= 5566 && nCode <= 5573)
{
strValue = "ZU";
break;
}
if (nCode >= 5574 && nCode <= 5575)
{
strValue = "ZUAN";
break;
}
if (nCode >= 5576 && nCode <= 5579)
{
strValue = "ZUI";
break;
}
if (nCode >= 5580 && nCode <= 5581)
{
strValue = "ZUN";
break;
}
if (nCode >= 5582 && nCode <= 5589)
{
strValue = "ZUO";
break;
}
}
if (strValue == "") strValue = "?";
return strValue;
}
std::string getLetter(std::string strText, bool head_only = false)
{
bool m_blnSimaple = head_only;
bool m_blnFirstBig = true;
bool m_blnAllBiG = true;
bool m_LetterEnd = false;
unsigned char ucHigh, ucLow;
int nCode, j;
std::string strValue = "";
for (int i = 0; i < strText.length(); i++)
{
if ((unsigned char)strText[i] < 0x80)
{
strValue = strValue + strText[i];
if (m_LetterEnd) strValue = strValue + '/';
continue;
}
ucHigh = (unsigned char)strText[i];
ucLow = (unsigned char)strText[i + 1];
if (ucHigh < 0xa1 || ucLow < 0xa1)
continue;
else
nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
std::string strRes = findLetter(nCode);
if (m_blnSimaple && strRes.length() > 0)
{
strRes = strRes.substr(0, 1);
}
if (!m_blnFirstBig)
{
//strRes.SetAt(0,strRes.GetAt(0)+32);
strRes[0] = strRes[0] + 32;
}
if (!m_blnAllBiG)
{
for (j = 1; j < strRes.length(); j++)
{
//strRes.SetAt(j,(strRes.GetAt(j)+32));
strRes[j] = strRes[j] + 32;
}
}
strValue = strValue + strRes;
i++;
if (m_LetterEnd) strValue = strValue + '/';
}
return strValue;
}
void erase_ill_def(std::wstring& str)
{
for (int i = 0; i < str.length(); ++i)
{
if (str[i] == L' ' || str[i] == L'?')
{
str.erase(i, 1);
i--;
}
2022-07-23 11:10:59 +00:00
else if (str[i] == L'-' || str[i] == L'+')
{
str.replace(i, 1, L"_");
}
}
}
2022-05-04 03:09:23 +00:00
}
2022-05-04 03:09:23 +00:00
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
2022-08-16 02:45:16 +00:00
// name & title map ...
struct
{
const char* name;
const char* title;
}g_opts[] = { {SANE_STD_OPT_NAME_RESTORE , OPTION_TITLE_HFMRSZ}
, {SANE_STD_OPT_NAME_HELP , OPTION_TITLE_BZ}
, {SANE_STD_OPT_NAME_IS_MULTI_OUT , OPTION_TITLE_DLSC}
, {SANE_STD_OPT_NAME_MULTI_OUT_TYPE , OPTION_TITLE_DLSCLX}
, {SANE_STD_OPT_NAME_COLOR_MODE , OPTION_TITLE_YSMS}
, {SANE_STD_OPT_NAME_BINARY_THRESHOLD , OPTION_TITLE_HBTXYZ}
2022-09-07 07:49:19 +00:00
, {SANE_STD_OPT_NAME_REVERSE_01 , OPTION_TITLE_HBTXFSSC}
2022-10-07 02:59:55 +00:00
, {SANE_STD_OPT_NAME_FILTER , OPTION_TITLE_HDHHBTX_CSYZQ}
2022-08-16 02:45:16 +00:00
, {SANE_STD_OPT_NAME_RID_MULTIOUT_RED , OPTION_TITLE_24WCSTX_DLSCCH}
, {SANE_STD_OPT_NAME_RID_ANSWER_SHEET_RED , OPTION_TITLE_24WCSTX_DTKCH}
, {SANE_STD_OPT_NAME_ERASE_BACKGROUND , OPTION_TITLE_BJYC}
, {SANE_STD_OPT_NAME_BKG_COLOR_RANGE , OPTION_TITLE_BJSCFDFW}
, {SANE_STD_OPT_NAME_SHARPEN , OPTION_TITLE_RHYMH}
, {SANE_STD_OPT_NAME_RID_MORR , OPTION_TITLE_QCMW}
, {SANE_STD_OPT_NAME_RID_GRID , OPTION_TITLE_CWW}
, {SANE_STD_OPT_NAME_ERROR_EXTENSION , OPTION_TITLE_CWKS}
, {SANE_STD_OPT_NAME_NOISE_OPTIMIZE , OPTION_TITLE_HBTXZDYH}
, {SANE_STD_OPT_NAME_NOISE_SIZE , OPTION_TITLE_ZDYHCC}
, {SANE_STD_OPT_NAME_PAPER , OPTION_TITLE_ZZCC}
, {SANE_STD_OPT_NAME_CUSTOM_AREA , OPTION_TITLE_ZDYSMQY}
, {SANE_STD_OPT_NAME_CUSTOM_AREA_LEFT , OPTION_TITLE_SMQYZCmm}
, {SANE_STD_OPT_NAME_CUSTOM_AREA_RIGHT , OPTION_TITLE_SMQYYCmm}
, {SANE_STD_OPT_NAME_CUSTOM_AREA_TOP , OPTION_TITLE_SMQYSCmm}
, {SANE_STD_OPT_NAME_CUSTOM_AREA_BOTTOM , OPTION_TITLE_SMQYXCmm}
, {SANE_STD_OPT_NAME_SIZE_CHECK , OPTION_TITLE_CCJC}
, {SANE_STD_OPT_NAME_PAGE , OPTION_TITLE_SMYM}
, {SANE_STD_OPT_NAME_DISCARD_BLANK_SENS , OPTION_TITLE_TGKBYLMD}
, {SANE_STD_OPT_NAME_RESOLUTION , OPTION_TITLE_FBL}
, {SANE_STD_OPT_NAME_TIME_TO_SLEEP , OPTION_TITLE_XMSJ}
, {SANE_STD_OPT_NAME_IMAGE_QUALITY , OPTION_TITLE_HZ}
, {SANE_STD_OPT_NAME_EXCHANGE ,OPTION_TITLE_JHZFM}
, {SANE_STD_OPT_NAME_SPLIT ,OPTION_TITLE_TXCF }
, {SANE_STD_OPT_NAME_ANTI_SKEW , OPTION_TITLE_ZDJP}
, {SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA , OPTION_TITLE_QYSDQX}
, {SANE_STD_OPT_NAME_GAMMA , OPTION_TITLE_JMZ}
, {SANE_STD_OPT_NAME_BRIGHTNESS , OPTION_TITLE_LDZ}
, {SANE_STD_OPT_NAME_CONTRAST , OPTION_TITLE_DBD}
, {SANE_STD_OPT_NAME_IS_PHOTO_MODE , OPTION_TITLE_ZPMS}
, {SANE_STD_OPT_NAME_ERASE_BLACK_FRAME , OPTION_TITLE_XCHK}
, {SANE_STD_OPT_NAME_DARK_SAMPLE , OPTION_TITLE_SSYZ}
, {SANE_STD_OPT_NAME_THRESHOLD , OPTION_TITLE_YZ}
, {SANE_STD_OPT_NAME_ANTI_NOISE_LEVEL , OPTION_TITLE_BJKZDJ}
, {SANE_STD_OPT_NAME_MARGIN , OPTION_TITLE_BYSJ}
, {SANE_STD_OPT_NAME_FILL_BKG_MODE , OPTION_TITLE_BJTCFS}
, {SANE_STD_OPT_NAME_IS_ANTI_PERMEATE , OPTION_TITLE_FZST}
, {SANE_STD_OPT_NAME_ANTI_PERMEATE_LEVEL , OPTION_TITLE_FZSTDJ}
2022-09-07 07:49:19 +00:00
, {SANE_STD_OPT_NAME_RID_HOLE_L , OPTION_TITLE_CKYCZC}
, {SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_L , OPTION_TITLE_ZCCKSSFWZFMBL}
, {SANE_STD_OPT_NAME_RID_HOLE_R , OPTION_TITLE_CKYCYC}
, {SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_R , OPTION_TITLE_YCCKSSFWZFMBL}
, {SANE_STD_OPT_NAME_RID_HOLE_T , OPTION_TITLE_CKYCSC}
, {SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_T , OPTION_TITLE_SCCKSSFWZFMBL}
, {SANE_STD_OPT_NAME_RID_HOLE_B , OPTION_TITLE_CKYCXC}
, {SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_B , OPTION_TITLE_XCCKSSFWZFMBL}
2022-08-16 02:45:16 +00:00
, {SANE_STD_OPT_NAME_IS_FILL_COLOR , OPTION_TITLE_SCTC}
, {SANE_STD_OPT_NAME_IS_ULTROSONIC_CHECK , OPTION_TITLE_CSBJC}
, {SANE_STD_OPT_NAME_DOUBLE_FEED_HANDLE , OPTION_TITLE_SZTPCL}
, {SANE_STD_OPT_NAME_IS_CHECK_STAPLE , OPTION_TITLE_ZDJC}
, {SANE_STD_OPT_NAME_SCAN_MODE , OPTION_TITLE_SMZS}
, {SANE_STD_OPT_NAME_SCAN_COUNT , OPTION_TITLE_SMSL}
, {SANE_STD_OPT_NAME_TEXT_DIRECTION , OPTION_TITLE_WGFX}
, {SANE_STD_OPT_NAME_IS_ROTATE_BKG_180 , OPTION_TITLE_BMXZ180}
, {SANE_STD_OPT_NAME_IS_CHECK_DOG_EAR , OPTION_TITLE_ZJJC}
, {SANE_STD_OPT_NAME_DOG_EAR_SIZE , OPTION_TITLE_ZJDX}
, {SANE_STD_OPT_NAME_IS_CHECK_ASKEW , OPTION_TITLE_WXJC}
, {SANE_STD_OPT_NAME_ASKEW_RANGE , OPTION_TITLE_WXRRD}
, {SANE_STD_OPT_NAME_FEED_STRENGTH , OPTION_TITLE_FZQD}
2022-10-07 02:59:55 +00:00
, {SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH , OPTION_TITLE_ZDFZQD}
, {SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE , OPTION_TITLE_JZSBL}
2022-08-16 02:45:16 +00:00
, {SANE_STD_OPT_NAME_WAIT_TO_SCAN , OPTION_TITLE_DZSM}
2022-10-22 09:59:01 +00:00
, {SANE_STD_OPT_NAME_FOLD_TYPE , OPTION_TITLE_DZMS}
2023-03-15 10:36:54 +00:00
, {SANE_STD_OPT_NAME_COLOR_CORRECTION , OPTION_TITLE_SPJZ}
, {SANE_STD_OPT_NAME_WAIT_SCAN_EXIT , OPTION_TITLE_DZSMTCSJ}
2023-08-16 07:32:58 +00:00
, {SANE_STD_OPT_NAME_DISCARDBLANK , OPTION_TITLE_TGKBY}
, {SANE_STD_OPT_NAME_LENS_DIRTY , OPTION_TITLE_JTZWJC}
2023-10-27 03:12:15 +00:00
, {SANE_STD_OPT_NAME_PERIOD , OPTION_TITLE_PWMZKB}
2022-10-07 02:59:55 +00:00
},
g_discard[] = { {SANE_STD_OPT_NAME_REVERSE_01 , "\351\273\221\347\231\275\345\233\276\345\203\217\345\217\215\350\211\262\350\276\223\345\207\272\357\274\210\346\255\243\345\270\270\351\242\234\350\211\262\344\270\272\357\274\2320-\351\273\221\350\211\262\357\274\2331-\347\231\275\350\211\262\357\274\211"} // <20>ڰ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫΪ<C9AB><CEAA>0-<2D><>ɫ<EFBFBD><C9AB>1-<2D><>ɫ<EFBFBD><C9AB>
, {SANE_STD_OPT_NAME_FILTER , "\347\201\260\345\272\246\346\210\226\351\273\221\347\231\275\345\233\276\345\203\217 - \351\231\244\350\211\262"} // <20>ҶȻ<D2B6><C8BB>ڰ<EFBFBD>ͼ<EFBFBD><CDBC> - <20><>ɫ
, {SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH , "\350\207\252\345\212\250\346\220\223\347\272\270\345\274\272\345\272\246"} // <20>Զ<EFBFBD><D4B6><EFBFBD>ֽǿ<D6BD><C7BF>
2022-10-07 02:59:55 +00:00
, {SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE , "\346\220\223\347\272\270\351\230\210\345\200\274"} // " <20><>ֽ<EFBFBD><D6BD>ֵ"
2022-08-16 02:45:16 +00:00
};
static IMPLEMENT_OPTION_STRING_COMPARE(compare_title);
2022-10-07 02:59:55 +00:00
static const char* title_to_name(std::wstring& title)
2022-08-16 02:45:16 +00:00
{
2022-10-07 02:59:55 +00:00
std::string utf8(coding::u2utf8(title.c_str()));
for (size_t i = 0; i < _countof(g_discard); ++i)
{
if (compare_title(g_discard[i].title, utf8.c_str()))
{
for (size_t j = 0; j < _countof(g_opts); ++j)
{
if (strcmp(g_opts[j].name, g_discard[i].name) == 0)
{
title = coding::utf82u(g_opts[j].title);
break;
}
}
return g_discard[i].name;
}
}
2022-08-16 02:45:16 +00:00
for (size_t i = 0; i < _countof(g_opts); ++i)
{
2022-10-07 02:59:55 +00:00
if (compare_title(g_opts[i].title, utf8.c_str()))
2022-08-16 02:45:16 +00:00
return g_opts[i].name;
}
return NULL;
}
2022-05-04 03:09:23 +00:00
2022-08-16 02:45:16 +00:00
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ChgjsonDlg dialog
static bool is_match(const char* str, const char* pattern)
{
std::vector<std::string> parts;
std::string all(pattern);
size_t pos = all.find("*");
while (pos != std::string::npos)
{
if (pos++)
parts.push_back(all.substr(0, pos));
all.erase(0, pos);
pos = all.find("*");
}
if (!all.empty())
parts.push_back(all);
for (pos = 0; pos < parts.size(); ++pos)
{
str = strstr(str, parts[pos].c_str());
if (!str)
break;
str += parts[pos].length();
}
return pos == parts.size();
}
2022-08-16 02:45:16 +00:00
2022-05-04 03:09:23 +00:00
ChgjsonDlg::ChgjsonDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(ChgjsonDlg::IDD, pParent)
, show_tree_tooltips_(true)
, show_list_tooltips_(true)
{
std::string py(hz_2_py::getLetter("<EFBFBD><EFBFBD>ɫģʽ", true));
is_match("/usr/bin/python3.9", "bin*.9");
2022-05-04 03:09:23 +00:00
}
void ChgjsonDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE1, tree_);
DDX_Control(pDX, IDC_LIST3, depends_);
DDX_Control(pDX, IDC_LIST_VALUES, constraint_list_);
DDX_Control(pDX, IDC_COMBO3, type_);
DDX_Control(pDX, IDC_COMBO4, constraint_);
DDX_Control(pDX, IDC_COMBO2, logic_);
DDX_Control(pDX, IDC_COMBO1, depend_item_);
DDX_Control(pDX, IDC_COMBO_DEFAULT, combo_default_);
DDX_Control(pDX, IDC_COMBO5, field_);
DDX_Control(pDX, IDC_COMBO6, unit_);
DDX_Control(pDX, IDC_COMBO7, group_);
DDX_Control(pDX, IDC_COMBO8, affect_);
2022-05-04 03:09:23 +00:00
}
BEGIN_MESSAGE_MAP(ChgjsonDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
2022-10-07 02:59:55 +00:00
// ON_WM_PASTE()
2022-05-04 03:09:23 +00:00
ON_COMMAND(ID_TREE_ADDGROUP, &ChgjsonDlg::OnTreeAddGroup)
ON_COMMAND(ID_TREE_ADDITEM, &ChgjsonDlg::OnTreeAddItem)
ON_COMMAND(ID_TREE_DELITEM, &ChgjsonDlg::OnTreeDelItem)
ON_COMMAND(ID_TREE_ADDPRODUCT, &ChgjsonDlg::OnTreeAddProduct)
ON_BN_CLICKED(IDC_BUTTON3, &ChgjsonDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON1, &ChgjsonDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &ChgjsonDlg::OnBnClickedButton2)
ON_CBN_SELCHANGE(IDC_COMBO3, &ChgjsonDlg::OnCbnSelchangeDataType)
ON_CBN_SELCHANGE(IDC_COMBO4, &ChgjsonDlg::OnCbnSelchangeConstraintType)
ON_CBN_SELCHANGE(IDC_COMBO1, &ChgjsonDlg::OnCbnSelchangeDependItem)
ON_CBN_SELCHANGE(IDC_COMBO2, &ChgjsonDlg::OnCbnSelchangeLogic)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_VALUES, &ChgjsonDlg::OnLvnEndlabeleditListValues)
ON_BN_CLICKED(IDC_CHECK1, &ChgjsonDlg::OnBnClickedDepend)
ON_BN_CLICKED(IDC_BUTTON4, &ChgjsonDlg::OnBnClickedButton4)
ON_NOTIFY(NM_RCLICK, IDC_TREE1, &ChgjsonDlg::OnNMRClickMfcshelltree1)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &ChgjsonDlg::OnTvnSelchangedTree1)
ON_COMMAND(ID_LISTMENU_SETDEFAULT, &ChgjsonDlg::OnListmenuSetdefault)
ON_COMMAND(ID_LISTMENU_DELETE, &ChgjsonDlg::OnListmenuDelete)
ON_NOTIFY(NM_RCLICK, IDC_LIST_VALUES, &ChgjsonDlg::OnNMRClickListValues)
ON_LBN_DBLCLK(IDC_LIST3, &ChgjsonDlg::OnLbnDblclkList3)
ON_WM_DROPFILES()
ON_COMMAND(ID_TREE_RENAME, &ChgjsonDlg::OnTreeRename)
ON_COMMAND(ID_TREE_LOADFILE, &ChgjsonDlg::OnTreeLoadfile)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST_VALUES, &ChgjsonDlg::OnLvnKeydownListValues)
ON_NOTIFY(TVN_KEYDOWN, IDC_TREE1, &ChgjsonDlg::OnTvnKeydownTree1)
ON_NOTIFY(TVN_GETINFOTIP, IDC_TREE1, &ChgjsonDlg::OnTvnGetInfoTipTree1)
ON_NOTIFY(LVN_GETINFOTIP, IDC_LIST_VALUES, &ChgjsonDlg::OnLvnGetInfoTipListValues)
ON_COMMAND(ID_TREE_TOOLTIPS, &ChgjsonDlg::OnTreeTooltips)
ON_COMMAND(ID_LISTMENU_TOOLTIPS, &ChgjsonDlg::OnListmenuTooltips)
ON_COMMAND(ID_TREE_EXPORTCHAR, &ChgjsonDlg::OnTreeExportCharConstants)
2022-08-16 02:45:16 +00:00
ON_BN_CLICKED(IDC_TO_FILE, &ChgjsonDlg::OnBnClickedToFile)
2022-10-07 02:59:55 +00:00
ON_COMMAND(ID_TREE_LOADCLIPBOARD, &ChgjsonDlg::OnTreeLoadClipboard)
2022-10-07 09:52:08 +00:00
ON_COMMAND(ID_TREE_UNIFYSEQUENCE, &ChgjsonDlg::OnTreeUnifySequence)
2022-05-04 03:09:23 +00:00
END_MESSAGE_MAP()
// ChgjsonDlg message handlers
int get_cur_sel(CListCtrl* lc)
{
POSITION pos = lc->GetFirstSelectedItemPosition();
int sel = lc->GetNextSelectedItem(pos);
return sel;
}
2022-10-07 09:52:08 +00:00
std::wstring get_tree_item_text(CTreeCtrl* tree, HTREEITEM root, DWORD_PTR* data = NULL)
2022-05-04 03:09:23 +00:00
{
CString t(tree->GetItemText(root));
std::wstring ret(t.GetBuffer());
t.ReleaseBuffer();
2022-10-07 09:52:08 +00:00
if (data)
*data = tree->GetItemData(root);
2022-05-04 03:09:23 +00:00
return ret;
}
std::wstring get_tree_selected_item_text(CTreeCtrl* tree, DWORD_PTR* data)
{
HTREEITEM sel = tree->GetSelectedItem();
if (data)
*data = 0;
if (sel)
2022-10-07 09:52:08 +00:00
return get_tree_item_text(tree, sel, data);
2022-05-04 03:09:23 +00:00
else
return L"";
}
bool split(std::wstring str, ChgjsonDlg::DEPENDITEM* di)
{
size_t pos = str.find(L"!");
if (pos == std::wstring::npos)
{
pos = str.find(L">");
if (pos == std::wstring::npos)
{
pos = str.find(L"<");
if (pos == std::wstring::npos)
{
pos = str.find(L"=");
}
}
}
if (pos == std::wstring::npos)
return false;
di->parent = str.substr(0, pos);
di->logic_values = str.substr(pos);
return true;
}
BOOL ChgjsonDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
// TODO: Add extra initialization here
ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
constraint_list_.InsertColumn(0, TEXT("Value lists"), 0, 177);
constraint_list_.InsertColumn(1, TEXT("Default"), 0, 48);
type_.SetCurSel(0);
unit_.SetCurSel(0);
field_.SetCurSel(0);
2022-05-04 03:09:23 +00:00
constraint_.SetCurSel(0);
2022-06-28 09:28:51 +00:00
// constraint_list_.ModifyStyleEx(0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP);
2022-05-04 03:09:23 +00:00
constraint_list_.SetExtendedStyle(constraint_list_.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP);
constraint_list_.SetItemData(constraint_list_.InsertItem(constraint_list_.GetItemCount(), TEXT("click me to add value ...")), 1);
tree_menu_.LoadMenu(IDR_MENU1);
func_menu_.LoadMenu(IDR_MENU2);
BITMAP bmi = { 0 };
GetObject(LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)), sizeof(bmi), &bmi);
tree_img_.Create(IDB_BITMAP1, bmi.bmWidth / 2, bmi.bmWidth / 2, RGB(255, 255, 255));
tree_.SetImageList(&tree_img_, TVSIL_NORMAL);
((CButton*)GetDlgItem(IDC_CHECK_VISIBLE))->SetCheck(BST_CHECKED);
2022-05-04 03:09:23 +00:00
init_control_statu();
return TRUE; // return TRUE unless you set the focus to a control
}
void ChgjsonDlg::to_define_header(std::vector<DEFH>& defs, const wchar_t* str, const wchar_t* parent)
{
while (*str == L' ')
str++;
ChgjsonDlg::DEFH h;
std::string ansi(coding::u2a(str));
std::wstring py(coding::a2u(hz_2_py::getLetter(ansi, true).c_str()));
if (parent)
{
ansi = coding::u2a(parent);
h.name = OPT_VALUE_PREFIX;
h.name += coding::a2u(hz_2_py::getLetter(ansi, true).c_str()) + L"_";
}
else
h.name = OPT_TITLE_PREFIX;
h.name += py;
hz_2_py::erase_ill_def(h.name);
if (std::find(defs.begin(), defs.end(), h.name) != defs.end())
{
ansi = coding::u2a(str);
py = coding::a2u(hz_2_py::getLetter(ansi, false).c_str());
if (parent)
{
ansi = coding::u2a(parent);
h.name = OPT_VALUE_PREFIX;
h.name += coding::a2u(hz_2_py::getLetter(ansi, true).c_str()) + L"_";
}
else
h.name = OPT_TITLE_PREFIX;
h.name += py;
hz_2_py::erase_ill_def(h.name);
}
h.value = str;
ansi = coding::u2utf8(str);
for (size_t i = 0; i < ansi.length(); ++i)
{
wchar_t buf[8] = { 0 };
if ((unsigned char)ansi[i] <= 0x7f)
buf[0] = ansi[i];
else
swprintf_s(buf, _countof(buf) - 1, L"\\%03o", (unsigned char)ansi[i]);
h.utf8_in_oct += buf;
}
defs.push_back(h);
}
std::string ChgjsonDlg::save_define_header_2_file(std::vector<DEFH>& defs, const wchar_t* file)
{
int max_l = 0;
2022-06-28 09:28:51 +00:00
std::wstring space(L""),
cont(L"//\r\n// definitions for option titles and values\r\n//\r\n// all multi-bytes letter are in UTF-8 format\r\n//\r\n"),
prev(L"none");
wchar_t buf[128] = { 0 };
time_t t = time(NULL);
2022-06-28 09:28:51 +00:00
struct tm* now = localtime(&t);
swprintf(buf, L"// Date: %04d-%02d-%02d %02d:%02d:%02d\r\n//\r\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday
2022-06-28 09:28:51 +00:00
, now->tm_hour, now->tm_min, now->tm_sec);
cont += buf;
cont += L"\r\n#pragma once\r\n\r\n\r\n";
for (size_t i = 0; i < defs.size(); ++i)
{
if (max_l < defs[i].name.length())
max_l = defs[i].name.length();
}
max_l += 15;
max_l /= 8;
max_l *= 8;
space.resize(max_l, L' ');
for (size_t i = 0; i < defs.size(); ++i)
{
if (defs[i].name.find(prev) == std::wstring::npos)
{
cont += L"\r\n";
prev = defs[i].name;
size_t pos = prev.rfind(L'_');
if (pos != std::wstring::npos)
prev = prev.substr(pos);
}
cont += L"// #define " + defs[i].name;
cont += space.substr(0, max_l - defs[i].name.length() - 3);
cont += L"\"" + defs[i].value + L"\"\r\n";
cont += L"#define " + defs[i].name;
cont += space.substr(0, max_l - defs[i].name.length());
cont += L"\"" + defs[i].utf8_in_oct + L"\"\r\n";
}
// reserve ...
std::wstring reserve(L"#define OPTION_TITLE_GMZ");
max_l += 8;
reserve += space.substr(0, max_l - reserve.length());
reserve += L"OPTION_TITLE_JMZ\r\n";
space.clear();
space.resize(max_l, L'/');
cont += L"\r\n\r\n" + space + L"\r\n// reserved ...\r\n" + space + L"\r\n" + reserve;
// compare ...
cont += L"\r\n\r\n" + space + L"\r\n// string compare ...\r\n" + space + L"\r\n";
cont += L"#define IMPLEMENT_OPTION_STRING_COMPARE(func_name) \\\r\n";
cont += L" bool func_name(const char* opt_define, const char* value) \\\r\n";
cont += L" { \\\r\n";
cont += L" while(*value++ == L' '); \\\r\n";
cont += L" value--; \\\r\n";
cont += L" return strcmp(opt_define, value) == 0; \\\r\n";
cont += L" }\r\n\r\n\r\n";
std::string bom(""), utf8(coding::u2utf8(cont.c_str()));
coding_util::bom::from_utf8(utf8.c_str(), utf8.length(), coding::get_string, &bom);
if (file)
file_util::save_2_file(bom.c_str(), bom.length(), file);
else
{
file_util::set_clipboard(cont.c_str(), cont.length() * 2, CF_UNICODETEXT);
}
return bom;
}
2022-05-04 03:09:23 +00:00
void ChgjsonDlg::init_control_statu(void)
{
HTREEITEM root = tree_.GetSelectedItem();
BOOL valid = FALSE;
int type_ind = 0, constraint_ind = 0, default_ind = 1;
GetDlgItem(IDC_STATIC_DEFAULT2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_DEFAULT)->ShowWindow(SW_HIDE);
if (root)
{
DWORD_PTR ptr = NULL;
std::wstring t(get_tree_selected_item_text(&tree_, &ptr));
DWORD data = (DWORD)ptr;
if (data == TREE_ITEM_CONFIG)
{
std::vector<HGITEM>::iterator it = std::find(hg_items_.begin(), hg_items_.end(), t.c_str());
if (it != hg_items_.end())
{
valid = TRUE;
set_control_status(*it);
}
}
}
2022-06-28 09:28:51 +00:00
2022-05-04 03:09:23 +00:00
GetDlgItem(IDC_EDIT_DESC)->EnableWindow(valid);
GetDlgItem(IDC_CHECK_ADVANCED)->EnableWindow(valid);
GetDlgItem(IDC_CHECK_READONLY)->EnableWindow(valid);
GetDlgItem(IDC_CHECK_DEVICEONLY)->EnableWindow(valid);
2022-05-04 03:09:23 +00:00
constraint_.EnableWindow(valid);
depends_.EnableWindow(valid);
type_.EnableWindow(valid);
GetDlgItem(IDC_RADIO_ALL)->EnableWindow(valid);
GetDlgItem(IDC_RADIO_ANY)->EnableWindow(valid);
depend_item_.EnableWindow(valid);
logic_.EnableWindow(valid);
GetDlgItem(IDC_EDIT_LOWER)->EnableWindow(valid);
GetDlgItem(IDC_BUTTON1)->EnableWindow(valid);
GetDlgItem(IDC_BUTTON2)->EnableWindow(valid);
GetDlgItem(IDC_BUTTON3)->EnableWindow(valid);
GetDlgItem(IDC_BUTTON4)->EnableWindow(valid);
}
void ChgjsonDlg::delete_tree_item(HTREEITEM root)
{
HTREEITEM child = tree_.GetChildItem(root);
while (child)
{
delete_tree_item(child);
child = tree_.GetChildItem(root);
}
2022-10-07 09:52:08 +00:00
std::wstring name(get_tree_item_text(&tree_, root));
2022-05-04 03:09:23 +00:00
std::vector<HGITEM>::iterator it = std::find(hg_items_.begin(), hg_items_.end(), name.c_str());
tree_.DeleteItem(root);
if (it != hg_items_.end())
{
// delete depending items ...
for (size_t i = 0; i < hg_items_.size(); ++i)
{
if (i == it - hg_items_.begin())
continue;
std::vector<DEPENDITEM>::iterator d = std::find(hg_items_[i].depend.begin(), hg_items_[i].depend.end(), name.c_str());
while (d != hg_items_[i].depend.end())
{
hg_items_[i].depend.erase(d);
d = std::find(hg_items_[i].depend.begin(), hg_items_[i].depend.end(), name.c_str());
}
}
hg_items_.erase(it);
}
}
int ChgjsonDlg::find_config_item(const wchar_t* item_name)
{
std::vector<HGITEM>::iterator it = std::find(hg_items_.begin(), hg_items_.end(), item_name);
if (it == hg_items_.end())
return -1;
else
return it - hg_items_.begin();
}
2022-06-28 09:28:51 +00:00
int ChgjsonDlg::check_depend(const wchar_t* l, const wchar_t* r)
2022-05-04 03:09:23 +00:00
{
// -1: l depends on r; 0: no depend; 1: r depends on l
int depend = 0;
std::vector<HGITEM>::iterator il = std::find(hg_items_.begin(), hg_items_.end(), l),
ir = std::find(hg_items_.begin(), hg_items_.end(), r);
if (il != hg_items_.end() && ir != hg_items_.end())
{
std::vector<DEPENDITEM>::iterator it = std::find(il->depend.begin(), il->depend.end(), r);
if (it != il->depend.end())
depend = -1;
else
{
it = std::find(ir->depend.begin(), ir->depend.end(), l);
if (it != ir->depend.end())
depend = 1;
}
}
return depend;
}
void ChgjsonDlg::set_control_status(const HGITEM& item)
{
::SetDlgItemTextW(m_hWnd, IDC_EDIT_DESC, item.desc.c_str());
2022-06-28 09:28:51 +00:00
2022-05-04 03:09:23 +00:00
if (item.type == L"bool")
type_.SetCurSel(0);
else if (item.type == L"int")
type_.SetCurSel(1);
else if (item.type == L"float")
type_.SetCurSel(2);
else if (item.type == L"string")
type_.SetCurSel(3);
else // if (item.type == L"button")
type_.SetCurSel(4);
((CButton*)GetDlgItem(IDC_CHECK_ADVANCED))->SetCheck(item.advanced ? BST_CHECKED : BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK_READONLY))->SetCheck(item.readonly ? BST_CHECKED : BST_UNCHECKED);
//((CButton*)GetDlgItem(IDC_CHECK_DEVICEONLY))->SetCheck(item.deviceonly ? BST_CHECKED : BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK_VISIBLE))->SetCheck(item.visible ? BST_CHECKED : BST_UNCHECKED);
SetDlgItemInt(IDC_EDIT_POS, item.position);
field_.SetCurSel(item.field);
unit_.SetCurSel(item.unit);
group_.SetCurSel(coding::group_index(item.group.c_str()));
affect_.SetCurSel(item.affect >> 1);
2022-05-04 03:09:23 +00:00
// value ...
GetDlgItem(IDC_STATIC_FROM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_TO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_FROM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_TO)->ShowWindow(SW_HIDE);
constraint_list_.ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_DEFAULT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_DEFAULT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_DEFAULT)->ShowWindow(SW_HIDE);
2022-12-31 07:45:49 +00:00
GetDlgItem(IDC_EDIT_STEP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_STEP)->ShowWindow(SW_HIDE);
2022-05-04 03:09:23 +00:00
constraint_.SetCurSel(item.range.type);
if (item.range.type == RANGE_TYPE_NONE)
{
GetDlgItem(IDC_STATIC_DEFAULT)->ShowWindow(SW_SHOW);
if (item.type == L"bool")
{
GetDlgItem(IDC_COMBO_DEFAULT)->ShowWindow(SW_SHOW);
((CComboBox*)GetDlgItem(IDC_COMBO_DEFAULT))->SetCurSel(item.init_val == L"true");
}
else
{
GetDlgItem(IDC_EDIT_DEFAULT)->ShowWindow(SW_SHOW);
::SetDlgItemTextW(m_hWnd, IDC_EDIT_DEFAULT, item.init_val.c_str());
}
}
else if (item.range.type == RANGE_TYPE_RANGE)
{
GetDlgItem(IDC_STATIC_DEFAULT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_DEFAULT)->ShowWindow(SW_SHOW);
::SetDlgItemTextW(m_hWnd, IDC_EDIT_DEFAULT, item.init_val.c_str());
GetDlgItem(IDC_STATIC_FROM)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_TO)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_FROM)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_TO)->ShowWindow(SW_SHOW);
2022-12-31 07:45:49 +00:00
GetDlgItem(IDC_EDIT_STEP)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_STEP)->ShowWindow(SW_SHOW);
2022-06-28 09:28:51 +00:00
2022-05-04 03:09:23 +00:00
if (item.type == L"int")
{
SetDlgItemInt(IDC_EDIT_FROM, item.range.lower);
SetDlgItemInt(IDC_EDIT_TO, item.range.upper);
2022-12-31 07:45:49 +00:00
SetDlgItemInt(IDC_EDIT_STEP, item.range.step);
2022-05-04 03:09:23 +00:00
}
else
{
wchar_t buf[80] = { 0 };
swprintf_s(buf, _countof(buf) - 1, L"%f", item.range.lower);
::SetDlgItemTextW(m_hWnd, IDC_EDIT_FROM, buf);
swprintf_s(buf, _countof(buf) - 1, L"%f", item.range.upper);
::SetDlgItemTextW(m_hWnd, IDC_EDIT_TO, buf);
2022-12-31 07:45:49 +00:00
swprintf_s(buf, _countof(buf) - 1, L"%f", item.range.step);
::SetDlgItemTextW(m_hWnd, IDC_EDIT_STEP, buf);
2022-05-04 03:09:23 +00:00
}
}
else // list
{
constraint_list_.ShowWindow(SW_SHOW);
constraint_list_.DeleteAllItems();
for (size_t i = 0; i < item.range.queue.size(); ++i)
{
int ind = constraint_list_.InsertItem(constraint_list_.GetItemCount(), item.range.queue[i].c_str());
if (item.range.queue[i] == item.init_val)
constraint_list_.SetItemText(ind, 1, TEXT("yes"));
}
int ind = constraint_list_.InsertItem(constraint_list_.GetItemCount(), TEXT("click me to add new item ..."));
constraint_list_.SetItemData(ind, 1);
}
// depend
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_RADIO_ANY))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_RADIO_ALL))->SetCheck(BST_UNCHECKED);
GetDlgItem(IDC_RADIO_ALL)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_ANY)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_LOWER)->EnableWindow(FALSE);
GetDlgItem(IDC_COMBO_BOOL)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_AND)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_UPPER)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_LIST3)->EnableWindow(FALSE);
depends_.ResetContent();
if (item.depend.size())
{
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(BST_CHECKED);
OnBnClickedDepend();
if (item.depend_or)
{
((CButton*)GetDlgItem(IDC_RADIO_ANY))->SetCheck(BST_CHECKED);
((CButton*)GetDlgItem(IDC_RADIO_ALL))->SetCheck(BST_UNCHECKED);
}
else
{
((CButton*)GetDlgItem(IDC_RADIO_ANY))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_RADIO_ALL))->SetCheck(BST_CHECKED);
}
for (size_t i = 0; i < item.depend.size(); ++i)
{
depends_.AddString((item.depend[i].parent + item.depend[i].logic_values).c_str());
}
}
}
void* ChgjsonDlg::create_json(int item, std::vector<DEFH>* def_h, std::wstring* name)
2022-05-04 03:09:23 +00:00
{
known_file_util::IJsonW* jsn = known_file_util::create_jsonW();
2022-05-06 05:36:37 +00:00
wchar_t buf[128] = { 0 };
int prefer_size = 0;
2022-10-07 02:59:55 +00:00
const char* opt_name = title_to_name(hg_items_[item].title);
2022-05-04 03:09:23 +00:00
jsn->set_value(L"cat", hg_items_[item].advanced ? L"advanced" : L"base");
jsn->set_value(L"readonly", hg_items_[item].readonly);
jsn->set_value(L"affect", hg_items_[item].affect);
//jsn->set_value(L"hwonly", hg_items_[item].deviceonly);
jsn->set_value(L"group", hg_items_[item].group.c_str());
jsn->set_value(L"visible", hg_items_[item].visible);
jsn->set_value(L"field", field_name(hg_items_[item].field));
jsn->set_value(L"pos", hg_items_[item].position);
jsn->set_value(L"unit", unit_name(hg_items_[item].unit));
if (name)
{
if (opt_name)
{
// jsn->set_value(L"name", coding::utf82u(opt_name).c_str());
*name = coding::utf82u(opt_name);
}
else
{
swprintf_s(buf, _countof(buf) - 1, L"cfg-%d", hg_items_[item].index);
// jsn->set_value(L"name", buf);
*name = buf;
}
}
2022-06-28 09:28:51 +00:00
2022-05-04 03:09:23 +00:00
jsn->set_value(L"title", hg_items_[item].title.c_str());
if (def_h)
ChgjsonDlg::to_define_header(*def_h, hg_items_[item].title.c_str());
2022-05-04 03:09:23 +00:00
jsn->set_value(L"desc", hg_items_[item].desc.c_str());
jsn->set_value(L"type", hg_items_[item].type.c_str());
if (hg_items_[item].type == L"bool")
{
jsn->set_value(L"cur", hg_items_[item].init_val == L"true");
jsn->set_value(L"default", hg_items_[item].init_val == L"true");
}
else if (hg_items_[item].type == L"int")
{
jsn->set_value(L"cur", _wtoi(hg_items_[item].init_val.c_str()));
jsn->set_value(L"default", _wtoi(hg_items_[item].init_val.c_str()));
}
else if (hg_items_[item].type == L"float")
{
jsn->set_value(L"cur", _wtof(hg_items_[item].init_val.c_str()));
jsn->set_value(L"default", _wtof(hg_items_[item].init_val.c_str()));
}
else
{
jsn->set_value(L"cur", hg_items_[item].init_val.c_str());
jsn->set_value(L"default", hg_items_[item].init_val.c_str());
}
jsn->set_value(L"size", hg_items_[item].bytes);
if (hg_items_[item].range.type == RANGE_TYPE_RANGE)
{
2022-06-28 09:28:51 +00:00
known_file_util::IJsonW* r = known_file_util::create_jsonW();
2022-05-04 03:09:23 +00:00
if (hg_items_[item].type == L"int")
{
r->set_value(L"min", (int)hg_items_[item].range.lower);
r->set_value(L"max", (int)hg_items_[item].range.upper);
2022-12-31 07:45:49 +00:00
r->set_value(L"step", (int)hg_items_[item].range.step);
2022-05-04 03:09:23 +00:00
}
else
{
r->set_value(L"min", hg_items_[item].range.lower);
r->set_value(L"max", hg_items_[item].range.upper);
2022-12-31 07:45:49 +00:00
r->set_value(L"step", hg_items_[item].range.step);
2022-05-04 03:09:23 +00:00
}
jsn->set_value(L"range", r);
r->release();
}
else if (hg_items_[item].range.type == RANGE_TYPE_LIST)
{
2022-06-28 09:28:51 +00:00
known_file_util::IJsonW* r = known_file_util::create_jsonW();
2022-05-04 03:09:23 +00:00
r->set_as_array(true);
if (hg_items_[item].type == L"int")
{
for (size_t i = 0; i < hg_items_[item].range.queue.size(); ++i)
{
*r += _wtoi(hg_items_[item].range.queue[i].c_str());
}
}
else if (hg_items_[item].type == L"float")
{
for (size_t i = 0; i < hg_items_[item].range.queue.size(); ++i)
{
*r += _wtof(hg_items_[item].range.queue[i].c_str());
}
}
else if (hg_items_[item].type == L"string")
{
int size = 0;
for (size_t i = 0; i < hg_items_[item].range.queue.size(); ++i)
{
*r += hg_items_[item].range.queue[i].c_str();
if (def_h)
ChgjsonDlg::to_define_header(*def_h, hg_items_[item].range.queue[i].c_str(), hg_items_[item].title.c_str());
2022-05-04 03:09:23 +00:00
if (size < coding::string_need_bytes(hg_items_[item].range.queue[i].c_str()))
size = coding::string_need_bytes(hg_items_[item].range.queue[i].c_str());
}
if (hg_items_[item].bytes < size)
jsn->set_value(L"size", size);
}
jsn->set_value(L"range", r);
r->release();
}
if (hg_items_[item].depend.size())
{
std::wstring prev(L"");
std::sort(hg_items_[item].depend.begin(), hg_items_[item].depend.end());
2022-06-28 09:28:51 +00:00
known_file_util::IJsonW* d = known_file_util::create_jsonW();
2022-05-04 03:09:23 +00:00
d->set_as_array(true);
for (int i = 0; i < hg_items_[item].depend.size(); ++i)
{
int ind = find_config_item(hg_items_[item].depend[i].parent.c_str());
if (ind != -1)
{
std::wstring n(coding::utf82u(title_to_name(hg_items_[ind].title)));
if (prev != n)
{
*d += (n + hg_items_[item].depend[i].logic_values).c_str();
prev = n;
}
else
*d += hg_items_[item].depend[i].logic_values.c_str();
2022-05-04 03:09:23 +00:00
}
}
if (hg_items_[item].depend_or)
jsn->set_value(L"depend_or", d);
else
jsn->set_value(L"depend_and", d);
d->release();
}
2022-06-28 09:28:51 +00:00
if (prefer_size)
2022-05-06 05:36:37 +00:00
jsn->set_value(L"size", prefer_size);
2022-05-04 03:09:23 +00:00
return jsn;
}
2022-08-16 02:45:16 +00:00
std::string ChgjsonDlg::to_json_text(bool for_const, std::wstring* dev)
2022-05-04 03:09:23 +00:00
{
known_file_util::IJsonW* jsn = known_file_util::create_jsonW(), * item = NULL, *glb = known_file_util::create_jsonW();
2022-05-04 03:09:23 +00:00
HTREEITEM root = tree_.GetRootItem(), child = NULL;
std::wstring val(get_tree_item_text(&tree_, root)), grpname(L"");
2022-05-04 03:09:23 +00:00
int count = 1, group = 1, ind = 0;
wchar_t buf[128] = { 0 };
std::vector<DEFH> header;
std::wstring file(L"");
{
wchar_t path[MAX_PATH] = { 0 }, * name = NULL;
GetModuleFileNameW(NULL, path, _countof(path) - 1);
name = wcsrchr(path, L'\\');
if (name++ == NULL)
name = path;
swprintf(name, L"%s_option_definitions.h", val.c_str());
file = path;
}
2022-08-16 02:45:16 +00:00
if (dev)
*dev = val;
glb->set_value(L"device_type", val.c_str());
jsn->set_value(L"global", glb);
2022-05-04 03:09:23 +00:00
root = tree_.GetChildItem(root);
while (root)
{
if ((DWORD)tree_.GetItemData(root) == TREE_ITEM_CONFIG)
{
2022-10-07 09:52:08 +00:00
val = get_tree_item_text(&tree_, root);
2022-05-04 03:09:23 +00:00
ind = find_config_item(val.c_str());
if (ind != -1)
{
std::wstring key(L"");
2022-05-04 03:09:23 +00:00
hg_items_[ind].index = count++;
item = (known_file_util::IJsonW*)create_json(ind, &header, &key);
//item->set_value(L"group", grpname.c_str());
// swprintf_s(buf, _countof(buf) - 1, L"%d", hg_items_[ind].index);
jsn->set_value(key.c_str(), item);
2022-05-04 03:09:23 +00:00
item->release();
item = NULL;
}
}
else
{
2022-10-07 09:52:08 +00:00
val = get_tree_item_text(&tree_, root);
2022-05-04 03:09:23 +00:00
item = known_file_util::create_jsonW();
item->set_value(L"cat", L"base");
2022-05-04 03:09:23 +00:00
swprintf_s(buf, _countof(buf) - 1, L"grp-%d", group++);
grpname = buf;
// item->set_value(L"name", buf);
2022-05-04 03:09:23 +00:00
item->set_value(L"title", val.c_str());
item->set_value(L"type", L"group");
// swprintf_s(buf, _countof(buf) - 1, L"%d", count++);
count++;
2022-05-04 03:09:23 +00:00
jsn->set_value(buf, item);
child = tree_.GetChildItem(root);
while (child)
{
2022-10-07 09:52:08 +00:00
val = get_tree_item_text(&tree_, child);
2022-05-04 03:09:23 +00:00
ind = find_config_item(val.c_str());
if (ind != -1)
{
hg_items_[ind].index = count++;
if (item)
{
item->set_value(L"cat", hg_items_[ind].advanced ? L"advanced" : L"base");
item->set_value(L"readonly", hg_items_[ind].readonly);
item->set_value(L"affect", hg_items_[ind].affect);
//item->set_value(L"hwonly", hg_items_[ind].deviceonly);
item->set_value(L"group", hg_items_[ind].group.c_str());
item->set_value(L"field", field_name(hg_items_[ind].field));
item->set_value(L"pos", hg_items_[ind].position);
item->set_value(L"visible", hg_items_[ind].visible);
item->set_value(L"unit", unit_name(hg_items_[ind].unit));
2022-05-04 03:09:23 +00:00
item->release();
}
std::wstring key(L"");
item = (known_file_util::IJsonW*)create_json(ind, &header, &key);
//item->set_value(L"group", grpname.c_str());
2022-05-04 03:09:23 +00:00
// swprintf_s(buf, _countof(buf) - 1, L"%d", hg_items_[ind].index);
jsn->set_value(key.c_str(), item);
2022-05-04 03:09:23 +00:00
item->release();
item = NULL;
}
child = tree_.GetNextSiblingItem(child);
}
if (item)
item->release();
}
root = tree_.GetNextSiblingItem(root);
}
val = L"";
glb->set_value(L"option_count", count);
glb->release();
2022-05-04 03:09:23 +00:00
jsn->to_string(coding::get_wstring, &val);
jsn->release();
std::string utf8("");
coding_util::unicode_2_utf8(val.c_str(), coding::get_string, &utf8);
if (header.size())
{
if (for_const)
{
utf8 = ChgjsonDlg::save_define_header_2_file(header, NULL);
}
//else
//{
// ChgjsonDlg::save_define_header_2_file(header, file.c_str());
// file_util::display_file_in_explorer(file.c_str());
//}
}
2022-06-28 09:28:51 +00:00
2022-05-04 03:09:23 +00:00
return utf8;
}
void ChgjsonDlg::add_item(void* jsn_root, void* jsn_obj, HTREEITEM parent, bool old_ver)
2022-05-04 03:09:23 +00:00
{
2022-06-28 09:28:51 +00:00
known_file_util::IJsonW* jsn = (known_file_util::IJsonW*)jsn_obj, * child = NULL,
* root = (known_file_util::IJsonW*)jsn_root;
std::wstring grp(get_tree_item_text(&tree_, parent));
2022-06-28 09:28:51 +00:00
const wchar_t* val = NULL;
2022-05-04 03:09:23 +00:00
HGITEM item;
wchar_t buf[128] = { 0 };
jsn->get_value(L"title", &val);
if (!val)
return;
item.title = val;
parent = add_tree_item(val, TREE_ITEM_CONFIG, parent);
jsn->get_value(L"desc", &val);
if (val)
item.desc = val;
jsn->get_value(L"type", &val);
if (val)
item.type = val;
if (item.type == L"bool")
{
bool v = false;
jsn->get_value(L"default", v);
item.init_val = v ? L"true" : L"false";
}
else if (item.type == L"int")
{
int v = 0;
jsn->get_value(L"default", v);
swprintf_s(buf, _countof(buf) - 1, L"%d", v);
item.init_val = buf;
}
else if (item.type == L"float")
{
double v = 0;
jsn->get_value(L"default", v);
swprintf_s(buf, _countof(buf) - 1, L"%f", v);
item.init_val = buf;
}
else
{
jsn->get_value(L"default", &val);
if (val)
item.init_val = val;
else
item.init_val = L"";
}
jsn->get_value(L"size", item.bytes);
jsn->get_value(L"cat", &val);
2022-05-04 03:09:23 +00:00
if (val && wcscmp(val, L"advanced") == 0)
item.advanced = true;
if (!jsn->get_value(L"readonly", item.readonly))
item.readonly = false;
if (!jsn->get_value(L"affect", item.affect))
item.affect = 0;
//if (!jsn->get_value(L"hwonly", item.deviceonly))
// item.deviceonly = false;
if (jsn->get_value(L"group", &val) && val)
{
item.group = coding::group_name(coding::group_index(val));
}
else
item.group = coding::group_name(coding::group_index(grp.c_str()));;
if (!jsn->get_value(L"visible", item.visible))
item.visible = true;
item.field = 0;
jsn->get_value(L"field", &val);
if (val)
item.field = field_index(val);
item.unit = 0;
jsn->get_value(L"unit", &val);
if(val)
item.unit = unit_index(val);
if (!jsn->get_value(L"pos", item.position))
item.position = 0;
2022-05-04 03:09:23 +00:00
jsn->get_value(L"depend_and", &child);
if (child)
{
item.depend_or = false;
}
else
{
jsn->get_value(L"depend_or", &child);
if (child)
item.depend_or = true;
}
if (child)
{
if (child->members())
{
known_file_util::JSONMEMW m = child->first_member(known_file_util::JV_STRING);
DEPENDITEM di;
std::wstring parent_item(L"");
int num = 1;
2022-05-04 03:09:23 +00:00
do
2022-05-04 03:09:23 +00:00
{
if (split(m.str_val, &di))
{
2022-06-28 09:28:51 +00:00
known_file_util::IJsonW* d = NULL;
if (di.parent.empty())
di.parent = parent_item;
else
parent_item = di.parent;
2022-05-04 03:09:23 +00:00
root->get_value(di.parent.c_str(), &d);
if (d)
{
d->get_value(L"title", &val);
if (val)
{
di.parent = val;
item.depend.push_back(di);
}
d->release();
}
}
m = child->next_member();
} while (num++ < child->members());
2022-05-04 03:09:23 +00:00
}
child->release();
}
jsn->get_value(L"range", &child);
if (child)
{
if (item.type == L"int")
{
2022-12-31 07:45:49 +00:00
int l = 0, u = 0, s = 0;
2022-05-04 03:09:23 +00:00
if (child->get_value(L"min", l))
{
child->get_value(L"max", u);
item.range.lower = l;
item.range.upper = u;
2022-12-31 07:45:49 +00:00
if (child->get_value(L"step", s))
item.range.step = s;
else
item.range.step = 1;
2022-05-04 03:09:23 +00:00
item.range.type = RANGE_TYPE_RANGE;
}
else
{
item.range.type = RANGE_TYPE_LIST;
if (child->members())
{
known_file_util::JSONMEMW m = child->first_member(known_file_util::JV_INT);
swprintf_s(buf, _countof(buf) - 1, L"%d", m.double_val);
item.range.queue.push_back(buf);
for (int i = 1; i < child->members(); ++i)
{
m = child->next_member();
swprintf_s(buf, _countof(buf) - 1, L"%d", m.double_val);
item.range.queue.push_back(buf);
}
}
}
}
else if (item.type == L"float")
{
if (child->get_value(L"min", item.range.lower))
{
child->get_value(L"max", item.range.upper);
2022-12-31 07:45:49 +00:00
if (!child->get_value(L"step", item.range.step))
item.range.step = (item.range.upper - item.range.lower) / 10.0f;
2022-05-04 03:09:23 +00:00
item.range.type = RANGE_TYPE_RANGE;
}
else
{
item.range.type = RANGE_TYPE_LIST;
if (child->members())
{
known_file_util::JSONMEMW m = child->first_member(known_file_util::JV_FLOAT);
swprintf_s(buf, _countof(buf) - 1, L"%f", m.double_val);
item.range.queue.push_back(buf);
for (int i = 1; i < child->members(); ++i)
{
m = child->next_member();
swprintf_s(buf, _countof(buf) - 1, L"%f", m.double_val);
item.range.queue.push_back(buf);
}
}
}
}
else if (item.type == L"string")
{
item.range.type = RANGE_TYPE_LIST;
if (child->members())
{
known_file_util::JSONMEMW m = child->first_member(known_file_util::JV_STRING);
item.range.queue.push_back(m.str_val);
for (int i = 1; i < child->members(); ++i)
{
m = child->next_member();
item.range.queue.push_back(m.str_val);
}
}
}
child->release();
}
else
item.range.type = RANGE_TYPE_NONE;
hg_items_.push_back(item);
}
2022-10-07 02:59:55 +00:00
bool ChgjsonDlg::load_from_json_text(const wchar_t* txt, std::wstring* err_msg)
2022-05-04 03:09:23 +00:00
{
int pos = 0;
2022-06-28 09:28:51 +00:00
known_file_util::IJsonW* jsn = known_file_util::create_jsonW(txt, &pos), * child = NULL;
2022-05-04 03:09:23 +00:00
if (!jsn)
2022-10-07 02:59:55 +00:00
{
int ep = 10, len = 10;
if (lstrlenW(txt + pos) < 10)
len = lstrlenW(txt + pos);
if (pos < 10)
{
ep = pos;
pos = 10;
}
pos -= 10;
std::wstring info(txt + pos, len + ep + 1);
wchar_t msg[80] = { 0 };
swprintf_s(msg, L"Error at position %d of char '%c'!\r\n\r\n", ep, info[ep]);
if (err_msg)
*err_msg = msg + info;
else
::MessageBoxW(m_hWnd, (msg + info).c_str(), L"Load Error", MB_OK);
2022-05-04 03:09:23 +00:00
return false;
2022-10-07 02:59:55 +00:00
}
2022-05-04 03:09:23 +00:00
hg_items_.clear();
tree_.DeleteAllItems();
const wchar_t* val = NULL;
HTREEITEM root = NULL, son = NULL;
int count = 0;
bool old_ver = false;
2022-05-04 03:09:23 +00:00
jsn->get_value(L"device_type", &val);
if (val)
{
2022-05-04 03:09:23 +00:00
root = add_tree_item(val, TREE_ITEM_PRODUCT);
jsn->get_value(L"option_count", count);
old_ver = true;
}
2022-05-04 03:09:23 +00:00
else
{
known_file_util::IJsonW* all = nullptr;
jsn->get_value(L"global", &all);
if (all)
{
all->get_value(L"device_type", &val);
if(val)
root = add_tree_item(val, TREE_ITEM_PRODUCT);
all->release();
}
if (!root)
{
jsn->release();
return false;
}
}
2022-05-04 03:09:23 +00:00
son = root;
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
if (old_ver)
2022-05-04 03:09:23 +00:00
{
for (int i = 1; i < count; ++i)
{
wchar_t key[20] = { 0 };
2022-06-28 09:28:51 +00:00
swprintf_s(key, _countof(key) - 1, L"%d", i);
jsn->get_value(key, &child);
if (child)
{
child->get_value(L"type", &val);
if (val)
{
if (wcscmp(val, L"group") == 0)
{
child->get_value(L"title", &val);
if (!val)
{
swprintf_s(key, _countof(key) - 1, L"group-%d", i);
val = key;
}
son = add_tree_item(val, TREE_ITEM_GROUP, root);
}
else
{
add_item(jsn, child, son, old_ver);
}
}
child->release();
}
}
}
else if (child = jsn->first_child())
{
int sn = 0;
wchar_t key[20] = { 0 };
child->release();
while ((child = jsn->next_child()))
2022-05-04 03:09:23 +00:00
{
child->get_value(L"type", &val);
if (val)
{
if (wcscmp(val, L"group") == 0)
{
child->get_value(L"title", &val);
if (!val)
{
swprintf_s(key, _countof(key) - 1, L"group-%d", ++sn);
2022-10-07 09:52:08 +00:00
val = key;
2022-05-04 03:09:23 +00:00
}
son = add_tree_item(val, TREE_ITEM_GROUP, root);
}
else
{
add_item(jsn, child, son, old_ver);
2022-05-04 03:09:23 +00:00
}
}
child->release();
}
}
jsn->release();
tree_.Expand(root, TVE_EXPAND);
return true;
}
bool ChgjsonDlg::load_from_file(const wchar_t* path_file)
{
std::string cont("");
std::wstring unic(L"");
bool ret = false;
file_util::load_file(path_file, coding::get_string, &cont);
coding_util::bom::to_unicode(cont.c_str(), cont.length(), coding::get_wstring, &unic);
if (unic.length())
{
if (!load_from_json_text(unic.c_str()))
{
unic = path_file;
unic.insert(0, L"Parse json file '");
unic += L"' failed";
::MessageBoxW(m_hWnd, unic.c_str(), L"Error", MB_OK);
}
else
ret = true;
}
return ret;
}
void ChgjsonDlg::get_all_names(HTREEITEM root, std::vector<std::wstring>& names, DWORD mask)
{
if (((DWORD)tree_.GetItemData(root) & mask) == mask)
2022-10-07 09:52:08 +00:00
names.push_back(get_tree_item_text(&tree_, root));
2022-05-04 03:09:23 +00:00
HTREEITEM child = tree_.GetChildItem(root);
while (child)
{
get_all_names(child, names, mask);
child = tree_.GetNextSiblingItem(child);
}
}
void ChgjsonDlg::on_config_name_changed(const wchar_t* prev, const wchar_t* now)
{
for (size_t i = 0; i < hg_items_.size(); ++i)
{
if (hg_items_[i].title == prev)
{
hg_items_[i].title = now;
}
else
{
std::vector<DEPENDITEM>::iterator it = std::find(hg_items_[i].depend.begin(), hg_items_[i].depend.end(), prev);
while (it != hg_items_[i].depend.end())
{
it->parent = now;
it = std::find(hg_items_[i].depend.begin(), hg_items_[i].depend.end(), prev);
}
}
}
}
HTREEITEM ChgjsonDlg::add_tree_item(const wchar_t* title, DWORD data, HTREEITEM parent, HTREEITEM after)
{
HTREEITEM i = tree_.InsertItem(title, parent, after);
TVITEM item;
item.mask = TVIF_SELECTEDIMAGE;
item.iSelectedImage = 1;
item.hItem = i;
tree_.SetItem(&item);
tree_.SetItemData(i, (DWORD_PTR)data);
return i;
}
2022-10-07 09:52:08 +00:00
void ChgjsonDlg::filter_tree_item(HTREEITEM item, const std::vector<HGITEM>& filter)
{
DWORD_PTR data = NULL;
std::wstring title(get_tree_item_text(&tree_, item, &data));
if (data == (DWORD_PTR)TREE_ITEM_GROUP)
{
HTREEITEM child = tree_.GetChildItem(item),
next = NULL;
while (child)
{
next = tree_.GetNextSiblingItem(child);
filter_tree_item(child, filter);
child = next;
}
}
else if (data == (DWORD_PTR)TREE_ITEM_CONFIG)
{
const char* name = title_to_name(title), * filter_name = NULL;
int ind = find_config_item(title.c_str()), fi = -1;
for (size_t i = 0; i < filter.size(); ++i)
{
std::wstring t(filter[i].title);
filter_name = title_to_name(t);
if (filter_name == name)
{
fi = i;
break;
}
}
if (filter_name != name)
{
if (strstr(name, "is-rid-hole-") != name &&
strstr(name, "search-hole-range-") != name)
delete_tree_item(item);
}
else
{
HGITEM hgi(hg_items_[ind]);
hg_items_[ind] = filter[fi];
hg_items_[ind].title = hgi.title;
hg_items_[ind].desc = hgi.desc;
for (size_t i = 0; i < hg_items_[ind].depend.size(); ++i)
title_to_name(hg_items_[ind].depend[i].parent);
}
}
}
2023-06-21 09:59:11 +00:00
bool ChgjsonDlg::is_depend(const wchar_t* me, const wchar_t* parent, std::vector<std::wstring>* que)
{
std::vector<HGITEM>::iterator it = std::find(hg_items_.begin(), hg_items_.end(), me);
bool depend = false;
if (it != hg_items_.end())
{
for (auto& v : it->depend)
{
if (v.parent == parent)
{
depend = true;
if (que)
que->push_back(parent);
break;
}
depend = is_depend(v.parent.c_str(), parent, que);
if (depend)
{
if (que)
que->push_back(v.parent);
break;
}
}
}
return depend;
}
2022-10-07 09:52:08 +00:00
2022-05-04 03:09:23 +00:00
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void ChgjsonDlg::OnPaint()
{
2023-01-19 07:47:12 +00:00
//if (IsIconic())
//{
// CPaintDC dc(this); // device context for painting
// SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// // Center icon in client rectangle
// int cxIcon = GetSystemMetrics(SM_CXICON);
// int cyIcon = GetSystemMetrics(SM_CYICON);
// CRect rect;
// GetClientRect(&rect);
// int x = (rect.Width() - cxIcon + 1) / 2;
// int y = (rect.Height() - cyIcon + 1) / 2;
// // Draw the icon
// dc.DrawIcon(x, y, m_hIcon);
//}
//else
2022-05-04 03:09:23 +00:00
{
CDialogEx::OnPaint();
}
}
// The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR ChgjsonDlg::OnQueryDragIcon()
{
2023-01-19 07:47:12 +00:00
return NULL;// static_cast<HCURSOR>(m_hIcon);
2022-05-04 03:09:23 +00:00
}
2022-10-07 02:59:55 +00:00
void ChgjsonDlg::OnPaste()
{
coding::CLPD clpb;
file_util::get_clipboard(coding::get_clipboard_content, &clpb);
if (clpb.cont.empty())
{
MessageBox(TEXT("clipboard is empty."));
return;
}
if (clpb.file)
{
size_t pos = clpb.cont.find(L"\r\n");
bool loaded = false;
while (!loaded && pos != std::wstring::npos)
{
loaded = load_from_file(clpb.cont.substr(0, pos).c_str());
clpb.cont.erase(0, pos + 2);
pos = clpb.cont.find(L"\r\n");
}
if (!loaded && file_util::is_file_existing(clpb.cont.c_str()))
load_from_file(clpb.cont.c_str());
}
else
{
std::wstring err(L"");
if (load_from_json_text(clpb.cont.c_str(), &err))
return;
// we assum the content from codes ...
std::wstring jsn(L"");
size_t pos = clpb.cont.find(L" std::string");
while (pos != std::wstring::npos)
{
clpb.cont.erase(0, pos);
pos = clpb.cont.find(L"\"");
if (pos == std::wstring::npos)
break;
clpb.cont.erase(0, pos + 1);
pos = clpb.cont.find(L"\");");
if (pos == std::wstring::npos)
{
jsn += clpb.cont;
break;
}
else
jsn += clpb.cont.substr(0, pos);
clpb.cont.erase(0, pos);
pos = clpb.cont.find(L" std::string");
}
if (jsn.length())
{
pos = jsn.find(L"\\\\");
while (pos != std::wstring::npos)
{
jsn.erase(pos++, 1);
pos = jsn.find(L"\\\\", pos);
}
pos = jsn.find(L"\\\"");
while (pos != std::wstring::npos)
{
jsn.erase(pos++, 1);
pos = jsn.find(L"\\\"", pos);
}
load_from_json_text(jsn.c_str());
}
else
::MessageBoxW(m_hWnd, err.c_str(), L"Load Error", MB_OK);
}
}
2022-05-04 03:09:23 +00:00
void ChgjsonDlg::OnTreeAddProduct()
{
// TODO: Add your command handler code here
CDlgInput input;
get_all_names(tree_.GetRootItem(), input.used_names_);
if (input.DoModal() == IDOK)
{
add_tree_item(input.value_.GetBuffer(), TREE_ITEM_PRODUCT);
input.value_.ReleaseBuffer();
}
}
void ChgjsonDlg::OnTreeAddGroup()
{
// TODO: Add your command handler code here
HTREEITEM parent = tree_.GetSelectedItem();
if (parent)
{
CDlgInput input;
get_all_names(tree_.GetRootItem(), input.used_names_);
if (input.DoModal() == IDOK)
{
HTREEITEM h = add_tree_item(input.value_.GetBuffer(), TREE_ITEM_GROUP, parent);
tree_.SelectItem(h);
tree_.EnsureVisible(h);
input.value_.ReleaseBuffer();
OnTvnSelchangedTree1(NULL, NULL);
}
}
}
void ChgjsonDlg::OnTreeAddItem()
{
// TODO: Add your command handler code here
HTREEITEM parent = tree_.GetSelectedItem();
if (parent)
{
CDlgInput input;
get_all_names(tree_.GetRootItem(), input.used_names_);
if (input.DoModal() == IDOK)
{
HTREEITEM h = add_tree_item(input.value_.GetBuffer(), TREE_ITEM_CONFIG, parent);
input.value_.ReleaseBuffer();
if (h)
{
HGITEM i(input.value_.GetBuffer());
input.value_.ReleaseBuffer();
tree_.SelectItem(h);
tree_.EnsureVisible(h);
hg_items_.push_back(i);
OnTvnSelchangedTree1(NULL, NULL);
}
}
}
}
void ChgjsonDlg::OnTreeDelItem()
{
// TODO: Add your command handler code here
HTREEITEM parent = tree_.GetSelectedItem();
if (parent)
{
delete_tree_item(parent);
OnTvnSelchangedTree1(NULL, NULL);
}
}
void ChgjsonDlg::OnTreeRename()
{
// TODO: Add your command handler code here
DWORD_PTR ptr = NULL;
std::wstring t(get_tree_selected_item_text(&tree_, &ptr));
CDlgInput input;
get_all_names(tree_.GetRootItem(), input.used_names_);
std::vector<std::wstring>::iterator it = std::find(input.used_names_.begin(), input.used_names_.end(), t);
if (it != input.used_names_.end())
input.used_names_.erase(it);
input.value_ = t.c_str();
if (input.DoModal() == IDOK && input.value_.GetLength())
{
std::wstring now(input.value_);
TVITEM item;
item.mask = TVIF_TEXT;
item.pszText = &now[0];
item.hItem = tree_.GetSelectedItem();
tree_.SetItem(&item);
if ((DWORD)ptr == TREE_ITEM_CONFIG)
{
on_config_name_changed(t.c_str(), now.c_str());
}
}
}
void ChgjsonDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
// export to file
std::string txt(to_json_text());
file_util::set_clipboard(txt.c_str(), txt.length());
MessageBox(TEXT("JSON text has set to clipboard already"));
}
void ChgjsonDlg::OnBnClickedButton2()
{
// TODO: Add your control notification handler code here
// export to code-text, replace '"' with '\"', '\' with '\\'
std::string txt(to_json_text());
size_t pos = txt.find("\"");
while (pos != std::string::npos)
{
txt.insert(pos, "\\");
pos = txt.find("\"", pos + 2);
}
pos = txt.find("\\u");
while (pos != std::string::npos)
{
txt.insert(pos, "\\");
pos = txt.find("\\u", pos + 3);
}
// divide into multi-lines with 16KB per line ...
2022-10-07 02:59:55 +00:00
int lines = 1;
char var[80] = { 0 };
//pos = txt.length();
//while (pos > 16 * 1024)
//{
// pos -= 12 * 1024;
// while (txt[pos - 1] == '\\')
// pos++;
// lines++;
// sprintf_s(var, _countof(var) - 1, "\");\r\nstatic std::string jsontext%d(\"", lines);
// txt.insert(pos, var);
//}
//txt.insert(0, "static std::string jsontext1(\"");
//txt += "\");\r\n";
int varl = 30, segl = 12 * 1024;
txt.insert(0, "static std::string jsontext1(\"");
pos = varl;
while (txt.length() - pos > segl)
{
pos += segl;
lines++;
if (txt[pos - 1] == '\\')
pos++;
2022-10-07 02:59:55 +00:00
sprintf_s(var, _countof(var) - 1, "\");\r\nstatic std::string jsontext%d(\"", lines);
txt.insert(pos, var);
pos += 5 + varl;
}
2022-10-07 02:59:55 +00:00
txt += "\");\r\n";
2022-05-04 03:09:23 +00:00
file_util::set_clipboard(txt.c_str(), txt.length());
TCHAR msg[128] = { 0 };
_stprintf(msg, TEXT("%d lines"), lines);
MessageBox(TEXT("JSON text has set to clipboard already"), msg);
2022-05-04 03:09:23 +00:00
}
void ChgjsonDlg::OnCbnSelchangeDataType()
{
// TODO: Add your control notification handler code here
// bool;int;float;string;
wchar_t type[40] = { 0 };
::GetWindowTextW(type_.m_hWnd, type, _countof(type) - 1);
constraint_.ResetContent();
constraint_.AddString(TEXT("none"));
if (wcscmp(type, L"bool") == 0)
{
constraint_.SetCurSel(0);
combo_default_.SetCurSel(1);
}
else
{
constraint_.AddString(TEXT("range"));
constraint_.AddString(TEXT("list"));
constraint_.SetCurSel(0);
combo_default_.ShowWindow(SW_HIDE);
}
OnCbnSelchangeConstraintType();
}
void ChgjsonDlg::OnCbnSelchangeConstraintType()
{
// TODO: Add your control notification handler code here
// none;range;list;
int sel = constraint_.GetCurSel();
wchar_t type[40] = { 0 };
::GetWindowTextW(type_.m_hWnd, type, _countof(type) - 1);
if (wcscmp(type, L"string") == 0 && sel == 1)
{
MessageBox(TEXT("'string' type cannot be in RANGE constraint."));
constraint_.SetCurSel(0);
sel = 0;
}
combo_default_.ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_DEFAULT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_DEFAULT2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_DEFAULT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_FROM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_TO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_FROM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_TO)->ShowWindow(SW_HIDE);
2022-12-31 07:45:49 +00:00
GetDlgItem(IDC_EDIT_STEP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_STEP)->ShowWindow(SW_HIDE);
2022-05-04 03:09:23 +00:00
constraint_list_.ShowWindow(SW_HIDE);
if (sel == 0)
{
if (wcscmp(type, L"string") == 0)
GetDlgItem(IDC_STATIC_DEFAULT2)->ShowWindow(SW_SHOW);
else
GetDlgItem(IDC_STATIC_DEFAULT)->ShowWindow(SW_SHOW);
if (wcscmp(type, L"bool") == 0)
combo_default_.ShowWindow(SW_SHOW);
else
GetDlgItem(IDC_EDIT_DEFAULT)->ShowWindow(SW_SHOW);
}
else if (sel == 1)
{
GetDlgItem(IDC_STATIC_FROM)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_TO)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_FROM)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_TO)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_DEFAULT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_DEFAULT)->ShowWindow(SW_SHOW);
2022-12-31 07:45:49 +00:00
GetDlgItem(IDC_EDIT_STEP)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_STEP)->ShowWindow(SW_SHOW);
2022-05-04 03:09:23 +00:00
}
else // if( sel == 2)
{
constraint_list_.ShowWindow(SW_SHOW);
}
}
void ChgjsonDlg::OnCbnSelchangeDependItem()
{
// TODO: Add your control notification handler code here
int sel = depend_item_.GetCurSel(), d_ind = -1;
wchar_t name[128] = { 0 }, type[128] = { 0 };
2022-06-28 09:28:51 +00:00
2022-05-04 03:09:23 +00:00
::GetWindowTextW(depend_item_.m_hWnd, name, _countof(name) - 1);
::GetWindowTextW(type_.m_hWnd, type, _countof(type) - 1);
d_ind = find_config_item(name);
if (d_ind < 0)
{
std::wstring info(L"Depend item '");
info += name;
info += L"' is not found!";
::MessageBoxW(m_hWnd, info.c_str(), L"Err", MB_OK);
return;
}
// ==;!=;>;>=;<;<=;between;out of;
GetDlgItem(IDC_STATIC_AND)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_UPPER)->ShowWindow(SW_HIDE);
logic_.ResetContent();
logic_.AddString(L"==");
logic_.AddString(L"!=");
2022-11-10 06:17:17 +00:00
GetDlgItem(IDC_COMBO_BOOL)->ShowWindow(SW_SHOW);
2022-05-04 03:09:23 +00:00
if (hg_items_[d_ind].type == L"bool")
{
GetDlgItem(IDC_COMBO_BOOL)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_LOWER)->ShowWindow(SW_HIDE);
CComboBox* val = (CComboBox*)GetDlgItem(IDC_COMBO_BOOL);
val->ResetContent();
val->AddString(L"false");
val->AddString(L"true");
val->SetCurSel(1);
}
else if (hg_items_[d_ind].range.queue.size())
{
GetDlgItem(IDC_COMBO_BOOL)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_LOWER)->ShowWindow(SW_HIDE);
CComboBox* val = (CComboBox*)GetDlgItem(IDC_COMBO_BOOL);
val->ResetContent();
for (int i = 0; i < hg_items_[d_ind].range.queue.size(); ++i)
{
val->AddString(hg_items_[d_ind].range.queue[i].c_str());
}
val->SetCurSel(0);
}
else
{
if (hg_items_[d_ind].type == L"int" || hg_items_[d_ind].type == L"float")
{
logic_.AddString(L">");
logic_.AddString(L">=");
logic_.AddString(L"<=");
logic_.AddString(L"<");
logic_.AddString(L"between");
logic_.AddString(L"out of");
}
GetDlgItem(IDC_EDIT_LOWER)->ShowWindow(SW_SHOW);
2022-11-10 06:17:17 +00:00
GetDlgItem(IDC_COMBO_BOOL)->ShowWindow(SW_HIDE);
2022-05-04 03:09:23 +00:00
}
logic_.SetCurSel(0);
OnCbnSelchangeLogic();
}
void ChgjsonDlg::OnCbnSelchangeLogic()
{
// TODO: Add your control notification handler code here
int count = logic_.GetCount(),
sel = logic_.GetCurSel();
wchar_t text[128] = { 0 };
GetDlgItem(IDC_STATIC_AND)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_UPPER)->ShowWindow(SW_HIDE);
2022-11-10 06:17:17 +00:00
GetDlgItem(IDC_EDIT_UPPER)->EnableWindow(FALSE);
2022-05-04 03:09:23 +00:00
::GetWindowTextW(logic_.m_hWnd, text, _countof(text) - 1);
if (wcscmp(text, L"between") == 0 || wcscmp(text, L"out of") == 0)
{
GetDlgItem(IDC_STATIC_AND)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_UPPER)->ShowWindow(SW_SHOW);
2022-11-10 06:17:17 +00:00
GetDlgItem(IDC_EDIT_UPPER)->EnableWindow();
GetDlgItem(IDC_STATIC_AND)->EnableWindow();
2022-05-04 03:09:23 +00:00
}
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnLvnEndlabeleditListValues(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
2022-06-28 09:28:51 +00:00
NMLVDISPINFO* pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
2022-05-04 03:09:23 +00:00
// TODO: Add your control notification handler code here
*pResult = 0;
DWORD_PTR data = constraint_list_.GetItemData(pDispInfo->item.iItem);
if (!pDispInfo->item.pszText || *pDispInfo->item.pszText == 0)
return;
constraint_list_.SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText);
constraint_list_.SetItemData(pDispInfo->item.iItem, 0);
if (constraint_list_.GetItemCount() == 1)
constraint_list_.SetItemText(pDispInfo->item.iItem, 1, TEXT("yes"));
if (data)
{
int count = constraint_list_.GetItemCount();
count = constraint_list_.InsertItem(count, TEXT("click me to add value ..."));
constraint_list_.SetItemData(count, 1);
}
}
void ChgjsonDlg::OnBnClickedDepend()
{
// TODO: Add your control notification handler code here
// ---G100
// |
// ---base
// |
// ---color-mode
// |
// ---scan-count
//
// ---advance
// |
// ---
HTREEITEM root = tree_.GetSelectedItem();
BOOL enable = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck() == BST_CHECKED;
if (root)
{
if (enable)
{
if ((DWORD)tree_.GetItemData(root) != TREE_ITEM_CONFIG)
{
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(BST_UNCHECKED);
MessageBox(TEXT("You must select a configuration item in the left tree first!"), NULL, MB_OK);
return;
}
2022-10-07 09:52:08 +00:00
std::wstring name(get_tree_item_text(&tree_, root));
2022-05-04 03:09:23 +00:00
std::vector<std::wstring> confs;
get_all_names(tree_.GetRootItem(), confs, TREE_ITEM_CONFIG);
depends_.ResetContent();
depend_item_.ResetContent();
for (size_t i = 0; i < confs.size(); ++i)
{
if (confs[i] == name)
continue;
2022-05-04 03:09:23 +00:00
depend_item_.AddString(confs[i].c_str());
}
}
GetDlgItem(IDC_RADIO_ANY)->EnableWindow(enable);
GetDlgItem(IDC_RADIO_ALL)->EnableWindow(enable);
((CButton*)GetDlgItem(IDC_RADIO_ANY))->SetCheck(BST_CHECKED);
depend_item_.EnableWindow(enable);
logic_.EnableWindow(enable);
GetDlgItem(IDC_EDIT_LOWER)->EnableWindow(enable);
GetDlgItem(IDC_BUTTON3)->EnableWindow(enable);
GetDlgItem(IDC_LIST3)->EnableWindow(enable);
}
else if (enable)
{
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(BST_UNCHECKED);
MessageBox(TEXT("You must select a configuration item in the left tree!"), NULL, MB_OK);
}
}
void ChgjsonDlg::OnBnClickedButton3()
{
// TODO: Add your control notification handler code here
// add depend items
DEPENDITEM di;
wchar_t oper[128] = { 0 };
2022-06-28 09:28:51 +00:00
bool or = ((CButton*)GetDlgItem(IDC_RADIO_ANY))->GetCheck() == BST_CHECKED;
2022-05-04 03:09:23 +00:00
DWORD_PTR data = NULL;
std::wstring name(get_tree_selected_item_text(&tree_, &data));
std::vector<HGITEM>::iterator it = std::find(hg_items_.begin(), hg_items_.end(), name.c_str());
if (it == hg_items_.end())
{
name.insert(0, L"Not found the configuration named: ");
::MessageBoxW(m_hWnd, name.c_str(), L"Error", MB_OK);
return;
}
::GetWindowTextW(depend_item_.m_hWnd, oper, _countof(oper) - 1);
di.parent = oper;
// check recycle depend ...
2023-06-21 09:59:11 +00:00
std::vector<std::wstring> depend_stck;
if(is_depend(oper, name.c_str(), &depend_stck))
//std::vector<HGITEM>::iterator dpn = std::find(hg_items_.begin(), hg_items_.end(), oper);
//if (dpn != hg_items_.end())
//{
// std::vector<DEPENDITEM>::iterator dpnd = std::find(dpn->depend.begin(), dpn->depend.end(), name.c_str());
// if (dpnd != dpn->depend.end())
2022-05-04 03:09:23 +00:00
{
2023-06-21 09:59:11 +00:00
for (int i = 1; i < depend_stck.size(); ++i)
name.insert(0, depend_stck[i] + L"--->");
2022-05-04 03:09:23 +00:00
name.insert(0, L" is already DEPEND on me(");
name.insert(0, oper);
name += L")! Delete me from it's depend queue first.";
::MessageBoxW(m_hWnd, name.c_str(), L"Recycle Depending", MB_ICONSTOP | MB_OK);
return;
}
2023-06-21 09:59:11 +00:00
//}
2022-05-04 03:09:23 +00:00
::GetWindowTextW(logic_.m_hWnd, oper, _countof(oper) - 1);
if (wcscmp(oper, L"between") == 0)
{
di.logic_values = L"==[";
::GetWindowTextW(GetDlgItem(IDC_EDIT_LOWER)->m_hWnd, oper, _countof(oper) - 1);
di.logic_values += oper;
di.logic_values += L", ";
::GetWindowTextW(GetDlgItem(IDC_EDIT_UPPER)->m_hWnd, oper, _countof(oper) - 1);
di.logic_values += oper;
di.logic_values += L"]";
}
else if (wcscmp(oper, L"out of") == 0)
{
di.logic_values = L"!=[";
::GetWindowTextW(GetDlgItem(IDC_EDIT_LOWER)->m_hWnd, oper, _countof(oper) - 1);
di.logic_values += oper;
di.logic_values += L", ";
::GetWindowTextW(GetDlgItem(IDC_EDIT_UPPER)->m_hWnd, oper, _countof(oper) - 1);
di.logic_values += oper;
di.logic_values += L"]";
}
else
{
di.logic_values = oper;
if (::IsWindowVisible(GetDlgItem(IDC_EDIT_LOWER)->m_hWnd))
::GetWindowTextW(GetDlgItem(IDC_EDIT_LOWER)->m_hWnd, oper, _countof(oper) - 1);
else
::GetWindowTextW(GetDlgItem(IDC_COMBO_BOOL)->m_hWnd, oper, _countof(oper) - 1);
di.logic_values += oper;
}
it->depend.push_back(di);
2022-06-28 09:28:51 +00:00
it->depend_or = or ;
// if (depends_.FindString(-1, (di.parent + di.logic_values).c_str()) == -1)
depends_.AddString((di.parent + di.logic_values).c_str());
2022-05-04 03:09:23 +00:00
}
void ChgjsonDlg::OnBnClickedButton4()
{
// TODO: Add your control notification handler code here
// modify item attributes
DWORD_PTR data = NULL;
std::wstring name(get_tree_selected_item_text(&tree_, &data));
if ((DWORD)data != TREE_ITEM_CONFIG)
{
name += L" is not a configuration item.";
::MessageBoxW(m_hWnd, name.c_str(), L"Err", MB_OK);
return;
}
std::vector<HGITEM>::iterator it = std::find(hg_items_.begin(), hg_items_.end(), name.c_str());
if (it == hg_items_.end())
{
name += L" is not found.";
::MessageBoxW(m_hWnd, name.c_str(), L"Err", MB_OK);
return;
}
wchar_t str[128] = { 0 };
bool is_str = false;
::GetDlgItemTextW(m_hWnd, IDC_EDIT_DESC, str, _countof(str) - 1);
it->desc = str;
it->title = name;
::GetWindowTextW(type_.m_hWnd, str, _countof(str) - 1);
it->type = str;
it->advanced = ((CButton*)GetDlgItem(IDC_CHECK_ADVANCED))->GetCheck() == BST_CHECKED;
it->readonly = ((CButton*)GetDlgItem(IDC_CHECK_READONLY))->GetCheck() == BST_CHECKED;
//it->deviceonly = ((CButton*)GetDlgItem(IDC_CHECK_DEVICEONLY))->GetCheck() == BST_CHECKED;
//::GetDlgItemTextW(m_hWnd, IDC_COMBO7, str, _countof(str) - 1);
it->group = coding::group_name(group_.GetCurSel());
it->affect = affect_.GetCurSel() << 1;
it->visible = ((CButton*)GetDlgItem(IDC_CHECK_VISIBLE))->GetCheck() == BST_CHECKED;
2022-05-04 03:09:23 +00:00
it->range.type = constraint_.GetCurSel();
it->field = field_.GetCurSel();
it->unit = unit_.GetCurSel();
it->position = GetDlgItemInt(IDC_EDIT_POS);
if (it->type == L"bool")
2022-05-04 03:09:23 +00:00
it->bytes = sizeof(SANE_Bool);
else if (it->type == L"int")
2022-05-04 03:09:23 +00:00
it->bytes = sizeof(SANE_Int);
else if (it->type == L"float")
2022-05-04 03:09:23 +00:00
it->bytes = sizeof(SANE_Fixed);
else // if (wcscmp(str, L"string") == 0)
{
it->bytes = GetDlgItemInt(IDC_EDIT_DEFAULT);
if (it->bytes <= 1 && it->range.type != RANGE_TYPE_LIST)
{
MessageBox(TEXT("Input max length in bytes of 'string' type"));
GotoDlgCtrl(GetDlgItem(IDC_EDIT_DEFAULT));
return;
}
is_str = true;
}
// constraints ...
it->range.queue.clear();
if (it->range.type == RANGE_TYPE_LIST)
{
for (int i = 0; i < constraint_list_.GetItemCount(); ++i)
{
if (constraint_list_.GetItemData(i))
continue;
constraint_list_.GetItemText(i, 0, str, _countof(str) - 1);
it->range.queue.push_back(str);
if (is_str && it->bytes < coding::string_need_bytes(str)) // utf-8 need 3 bytes to present one char
it->bytes = coding::string_need_bytes(str);
constraint_list_.GetItemText(i, 1, str, _countof(str) - 1);
if (wcscmp(str, L"yes") == 0)
it->init_val = it->range.queue[it->range.queue.size() - 1];
}
}
else
{
::GetDlgItemTextW(m_hWnd, it->type == L"bool" ? IDC_COMBO_DEFAULT : IDC_EDIT_DEFAULT, str, _countof(str) - 1);
it->init_val = str;
if (it->range.type == RANGE_TYPE_RANGE)
{
::GetDlgItemTextW(m_hWnd, IDC_EDIT_FROM, str, _countof(str) - 1);
it->range.lower = _wtof(str);
::GetDlgItemTextW(m_hWnd, IDC_EDIT_TO, str, _countof(str) - 1);
it->range.upper = _wtof(str);
2022-12-31 07:45:49 +00:00
::GetDlgItemTextW(m_hWnd, IDC_EDIT_STEP, str, _countof(str) - 1);
it->range.step = _wtof(str);
if (fabs(it->range.step) < .000001f)
it->range.step = (it->range.upper - it->range.lower) / 10.0f;
2022-05-04 03:09:23 +00:00
}
}
// depend ...
it->depend.clear();
if (((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck() == BST_CHECKED)
{
it->depend_or = ((CButton*)GetDlgItem(IDC_RADIO_ANY))->GetCheck() == BST_CHECKED;
for (int i = 0; i < depends_.GetCount(); ++i)
{
DEPENDITEM di;
depends_.GetText(i, str);
split(str, &di);
it->depend.push_back(di);
}
}
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnNMRClickMfcshelltree1(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
// TODO: Add your control notification handler code here
*pResult = 0;
POINT pt = { 0 };
HTREEITEM hsel = tree_.GetSelectedItem();
tree_menu_.EnableMenuItem(ID_TREE_ADDGROUP, MF_DISABLED);
tree_menu_.EnableMenuItem(ID_TREE_ADDITEM, MF_DISABLED);
tree_menu_.EnableMenuItem(ID_TREE_ADDPRODUCT, MF_DISABLED);
tree_menu_.EnableMenuItem(ID_TREE_DELITEM, MF_DISABLED);
tree_menu_.EnableMenuItem(ID_TREE_RENAME, MF_DISABLED);
tree_menu_.CheckMenuItem(ID_TREE_TOOLTIPS, show_tree_tooltips_ ? MF_CHECKED : MF_UNCHECKED);
if (hsel)
{
DWORD data = (DWORD)tree_.GetItemData(hsel);
if (data == TREE_ITEM_PRODUCT)
{
tree_menu_.EnableMenuItem(ID_TREE_ADDGROUP, MF_ENABLED);
}
else if (data == TREE_ITEM_GROUP)
{
tree_menu_.EnableMenuItem(ID_TREE_ADDITEM, MF_ENABLED);
}
tree_menu_.EnableMenuItem(ID_TREE_DELITEM, MF_ENABLED);
tree_menu_.EnableMenuItem(ID_TREE_RENAME, MF_ENABLED);
}
else
tree_menu_.EnableMenuItem(ID_TREE_ADDPRODUCT, MF_ENABLED);
GetCursorPos(&pt);
tree_menu_.GetSubMenu(0)->TrackPopupMenu(0, pt.x, pt.y, this);
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnTvnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
if (pResult)
*pResult = 0;
init_control_statu();
}
void ChgjsonDlg::OnListmenuSetdefault()
{
// TODO: Add your command handler code here
int sel = get_cur_sel(&constraint_list_);
2022-10-07 09:52:08 +00:00
std::wstring text(get_tree_item_text(&tree_, tree_.GetSelectedItem()));
2022-09-16 01:01:38 +00:00
int item = find_config_item(text.c_str());
2022-05-04 03:09:23 +00:00
2022-09-16 01:01:38 +00:00
if (item == -1)
return;
2022-05-04 03:09:23 +00:00
if (sel >= 0 && sel < constraint_list_.GetItemCount())
{
2022-09-16 01:01:38 +00:00
wchar_t cur[128] = { 0 };
constraint_list_.GetItemText(sel, 0, cur, _countof(cur) - 1);
hg_items_[item].init_val = cur;
2022-05-04 03:09:23 +00:00
for (int i = 0; i < constraint_list_.GetItemCount(); ++i)
{
if (constraint_list_.GetItemData(i))
continue;
constraint_list_.SetItemText(i, 1, i == sel ? TEXT("yes") : TEXT(""));
}
}
}
void ChgjsonDlg::OnListmenuDelete()
{
// TODO: Add your command handler code here
int sel = get_cur_sel(&constraint_list_);
if (sel >= 0 && sel < constraint_list_.GetItemCount())
{
TCHAR buf[20] = { 0 };
constraint_list_.GetItemText(sel, 1, buf, _countof(buf) - 1);
constraint_list_.DeleteItem(sel);
if (_tcscmp(buf, TEXT("yes")) == 0)
{
if (constraint_list_.GetItemCount() > 1)
constraint_list_.SetItemText(0, 1, TEXT("yes"));
}
}
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnNMRClickListValues(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
POINT pt = { 0 };
int sel = get_cur_sel(&constraint_list_);
func_menu_.CheckMenuItem(ID_LISTMENU_TOOLTIPS, show_list_tooltips_ ? MF_CHECKED : MF_UNCHECKED);
if (sel >= 0 && sel < constraint_list_.GetItemCount())
{
if (constraint_list_.GetItemData(sel) == 0)
{
GetCursorPos(&pt);
func_menu_.GetSubMenu(0)->TrackPopupMenu(0, pt.x, pt.y, this);
}
}
}
void ChgjsonDlg::OnLbnDblclkList3()
{
// TODO: Add your control notification handler code here
int sel = depends_.GetCurSel();
if (sel >= 0 && sel < depends_.GetCount())
{
TCHAR text[128] = { 0 };
depends_.GetText(sel, text);
if (MessageBox(text, TEXT("Delete ?"), MB_YESNO) == IDYES)
depends_.DeleteString(sel);
}
}
void ChgjsonDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO: Add your message handler code here and/or call default
wchar_t path[MAX_PATH] = { 0 };
DragQueryFileW(hDropInfo, 0, path, _countof(path) - 1);
load_from_file(path);
CDialogEx::OnDropFiles(hDropInfo);
}
void ChgjsonDlg::OnTreeLoadfile()
{
// TODO: Add your command handler code here
file_util::PATHFILE path = { 0 };
if (file_util::browser_file(m_hWnd, &path))
{
load_from_file(path.path);
}
}
2022-10-07 02:59:55 +00:00
void ChgjsonDlg::OnTreeLoadClipboard()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
OnPaste();
}
2022-05-04 03:09:23 +00:00
2022-10-07 09:52:08 +00:00
void ChgjsonDlg::OnTreeUnifySequence()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
file_util::PATHFILE path = { 0 };
if (!file_util::browser_file(m_hWnd, &path))
return;
std::vector<HGITEM> me(hg_items_);
HTREEITEM root = tree_.GetRootItem(),
child = NULL,
next = NULL;
std::wstring model(get_tree_item_text(&tree_, root));
if (!load_from_file(path.path))
return;
root = tree_.GetRootItem();
child = tree_.GetChildItem(root);
while (child)
{
DWORD_PTR data = NULL;
std::wstring title(get_tree_item_text(&tree_, child, &data));
next = tree_.GetNextSiblingItem(child);
filter_tree_item(child, me);
child = next;
}
tree_.SetItemText(root, model.c_str());
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnLvnKeydownListValues(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
if (GetKeyState(VK_CONTROL) < 0)
{
int sel = get_cur_sel(&constraint_list_), dir = 0;
TCHAR t0[200] = { 0 }, t1[20] = { 0 };
if (constraint_list_.GetItemData(sel) == 0)
{
if (pLVKeyDow->wVKey == VK_UP)
{
if (sel > 0)
dir = -1;
}
else if (pLVKeyDow->wVKey == VK_DOWN)
{
if (sel < constraint_list_.GetItemCount() - 1)
dir = 1;
}
}
if (dir)
{
constraint_list_.GetItemText(sel, 0, t0, _countof(t0) - 1);
constraint_list_.GetItemText(sel, 1, t1, _countof(t1) - 1);
constraint_list_.DeleteItem(sel);
sel += dir;
sel = constraint_list_.InsertItem(sel, t0);
constraint_list_.SetItemText(sel, 1, t1);
constraint_list_.SetItemState(sel - dir, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
constraint_list_.SetSelectionMark(sel - dir);
}
}
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnTvnKeydownTree1(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
LPNMTVKEYDOWN pTVKeyDown = reinterpret_cast<LPNMTVKEYDOWN>(pNMHDR);
// TODO: Add your control notification handler code here
if (pResult)
*pResult = 0;
if (pTVKeyDown->wVKey != VK_UP && pTVKeyDown->wVKey != VK_DOWN)
return;
if (GetKeyState(VK_CONTROL) >= 0)
return;
HTREEITEM sel = tree_.GetSelectedItem(), next = NULL, parent = tree_.GetParentItem(sel);
DWORD_PTR data = NULL;
std::wstring name(get_tree_selected_item_text(&tree_, &data));
if ((DWORD)data != TREE_ITEM_CONFIG)
return;
if (pTVKeyDown->wVKey == VK_DOWN)
{
next = tree_.GetNextSiblingItem(sel);
if (!next)
{
parent = tree_.GetNextSiblingItem(parent);
if (parent)
{
next = TVI_FIRST;
tree_.Expand(parent, TVIS_EXPANDED);
}
}
else
{
if ((DWORD)tree_.GetItemData(next) == TREE_ITEM_GROUP)
{
parent = next;
next = TVI_FIRST;
}
2022-10-07 09:52:08 +00:00
else if (check_depend(name.c_str(), get_tree_item_text(&tree_, next).c_str()) == 1)
2022-05-04 03:09:23 +00:00
next = NULL;
}
}
else if (pTVKeyDown->wVKey == VK_UP)
{
next = tree_.GetPrevSiblingItem(sel);
if (!next)
{
if (parent != tree_.GetRootItem())
{
parent = tree_.GetPrevSiblingItem(parent);
if (parent)
{
if ((DWORD)tree_.GetItemData(parent) == TREE_ITEM_CONFIG)
{
next = parent;
parent = tree_.GetParentItem(parent);
}
else
{
next = TVI_LAST;
tree_.Expand(parent, TVIS_EXPANDED);
}
}
else
{
parent = tree_.GetParentItem(tree_.GetParentItem(sel));
next = TVI_FIRST;
}
}
}
else
{
2022-10-07 09:52:08 +00:00
if (check_depend(name.c_str(), get_tree_item_text(&tree_, next).c_str()) == -1)
2022-05-04 03:09:23 +00:00
next = NULL;
else
{
next = tree_.GetPrevSiblingItem(next);
if (!next)
next = TVI_FIRST;
}
}
}
if (next)
{
tree_.DeleteItem(sel);
sel = add_tree_item(name.c_str(), data, parent, next);
tree_.SelectItem(sel);
}
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnTvnGetInfoTipTree1(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
LPNMTVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMTVGETINFOTIP>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
if (show_tree_tooltips_)
_tcscpy(pGetInfoTip->pszText, TEXT("Ctrl + <20><> or <20><> can change the configuration item position."));
}
2022-06-28 09:28:51 +00:00
void ChgjsonDlg::OnLvnGetInfoTipListValues(NMHDR* pNMHDR, LRESULT* pResult)
2022-05-04 03:09:23 +00:00
{
LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
if (show_list_tooltips_)
_tcscpy(pGetInfoTip->pszText, TEXT("Ctrl + <20><> or <20><> can change the option position."));
}
void ChgjsonDlg::OnTreeTooltips()
{
// TODO: Add your command handler code here
show_tree_tooltips_ ^= true;
}
void ChgjsonDlg::OnListmenuTooltips()
{
// TODO: Add your command handler code here
show_list_tooltips_ ^= true;
}
void ChgjsonDlg::OnTreeExportCharConstants()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string bom(to_json_text(true));
2022-06-28 09:28:51 +00:00
if (bom.empty())
MessageBox(TEXT("No char constant"));
else
MessageBox(TEXT("const string has set to clipboard already"));
}
2022-08-16 02:45:16 +00:00
void ChgjsonDlg::OnBnClickedToFile()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::wstring name(L"");
std::string txt(to_json_text(false, &name)), ansi("");
wchar_t path[MAX_PATH] = { 0 };
GetModuleFileNameW(NULL, path, _countof(path) - 1);
wcsrchr(path, L'\\')[1] = 0;
name.insert(0, path);
name += L".hsc";
ansi = coding::u2a(name.c_str());
if (save_scanner_setting(ansi.c_str(), txt) == 0)
file_util::display_file_in_explorer(name.c_str());
}
2022-10-07 02:59:55 +00:00
2022-10-07 09:52:08 +00:00