|
@@ -99,6 +99,9 @@ BEGIN_MESSAGE_MAP(CIRControlWnd, CDockablePane)
|
|
|
ON_WM_PAINT()
|
|
|
ON_MESSAGE(WM_IR_SHOT_IMG, OnIRShotImg)
|
|
|
ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE, &CIRControlWnd::OnCbnSelchangeSignal)
|
|
|
+ ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE + 1, &CIRControlWnd::OnCbnSelchangeTree1)
|
|
|
+ ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE + 2, &CIRControlWnd::OnCbnSelchangeTree2)
|
|
|
+ ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE + 3, &CIRControlWnd::OnCbnSelchangeTree3)
|
|
|
// 信号按钮;
|
|
|
ON_COMMAND_RANGE(BTNID, BTNID + 100, OnSignalBtnClick)
|
|
|
ON_UPDATE_COMMAND_UI_RANGE(BTNID, BTNID + 100, OnUpdateSignalBtn)
|
|
@@ -242,6 +245,9 @@ int CIRControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
|
|
|
|
LoadSignals();
|
|
|
SetPropListFont();
|
|
|
+ LoadMenuTreePath();
|
|
|
+ ReadResourceRunCfg();
|
|
|
+ InitMenuTreeCombobox();
|
|
|
|
|
|
CRect rectCombo;
|
|
|
m_wndSignalCombo.GetClientRect(&rectCombo);
|
|
@@ -387,6 +393,126 @@ void CIRControlWnd::OnCbnSelchangeSignal()
|
|
|
ReLoadSignalXml();
|
|
|
}
|
|
|
|
|
|
+void CIRControlWnd::OnCbnSelchangeTree1()
|
|
|
+{
|
|
|
+ // UI下拉框;
|
|
|
+ CString strTree1;
|
|
|
+ int nCurSel = m_cbTree1.GetCurSel();
|
|
|
+ if (nCurSel != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree1.GetLBText(nCurSel, strTree1);
|
|
|
+ }
|
|
|
+
|
|
|
+ m_cbTree2.ResetContent();
|
|
|
+ for (auto it : m_map_tree.find(strTree1.GetString())->second)
|
|
|
+ {
|
|
|
+ m_cbTree2.AddString(it.ui.c_str());
|
|
|
+ }
|
|
|
+ m_cbTree2.SetCurSel(0);
|
|
|
+
|
|
|
+ // SUBUI下拉框;
|
|
|
+ CString strTree2 = _T("");
|
|
|
+ nCurSel = m_cbTree2.GetCurSel();
|
|
|
+ if (nCurSel != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree2.GetLBText(nCurSel, strTree2);
|
|
|
+ }
|
|
|
+ m_cbTree3.ResetContent();
|
|
|
+
|
|
|
+ std::vector<UITree>& ui = m_map_tree.find(strTree1.GetString())->second;
|
|
|
+ for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++)
|
|
|
+ {
|
|
|
+ if (_tcsicmp(strTree2.GetString(), it->ui.c_str()) == 0)
|
|
|
+ {
|
|
|
+ if (it->vtSubUI.size() == 0)
|
|
|
+ break;
|
|
|
+
|
|
|
+ for (auto SubUI : it->vtSubUI)
|
|
|
+ {
|
|
|
+ m_cbTree3.AddString(SubUI.c_str());
|
|
|
+ }
|
|
|
+
|
|
|
+ m_cbTree3.SetCurSel(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存结果;
|
|
|
+ WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), strTree1, Global::g_szResuorceCfg);
|
|
|
+ WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strTree2, Global::g_szResuorceCfg);
|
|
|
+
|
|
|
+ CString strTree3 = _T("");
|
|
|
+ nCurSel = m_cbTree3.GetCurSel();
|
|
|
+ if (nCurSel != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree3.GetLBText(nCurSel, strTree3);
|
|
|
+ }
|
|
|
+ WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strTree3, Global::g_szResuorceCfg);
|
|
|
+
|
|
|
+ _stprintf_s(g_pMainFrame->m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strTree1.GetString(), strTree2.GetString());
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void CIRControlWnd::OnCbnSelchangeTree2()
|
|
|
+{
|
|
|
+ CString strTree1;
|
|
|
+ int nCurSel = m_cbTree1.GetCurSel();
|
|
|
+ if (nCurSel == CB_ERR)
|
|
|
+ return;
|
|
|
+
|
|
|
+ m_cbTree1.GetLBText(nCurSel, strTree1);
|
|
|
+ // SUBUI下拉框;
|
|
|
+ CString strTree2 = _T("");
|
|
|
+ nCurSel = m_cbTree2.GetCurSel();
|
|
|
+ if (nCurSel == CB_ERR)
|
|
|
+ return;
|
|
|
+
|
|
|
+ m_cbTree2.GetLBText(nCurSel, strTree2);
|
|
|
+ // 清空tree3;
|
|
|
+ m_cbTree3.ResetContent();
|
|
|
+ std::vector<UITree>& ui = m_map_tree.find(strTree1.GetString())->second;
|
|
|
+ for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++)
|
|
|
+ {
|
|
|
+ if (_tcsicmp(strTree2.GetString(), it->ui.c_str()) == 0)
|
|
|
+ {
|
|
|
+ if (it->vtSubUI.size() == 0)
|
|
|
+ break;
|
|
|
+
|
|
|
+ for (auto SubUI : it->vtSubUI)
|
|
|
+ {
|
|
|
+ m_cbTree3.AddString(SubUI.c_str());
|
|
|
+ }
|
|
|
+
|
|
|
+ m_cbTree3.SetCurSel(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存结果;
|
|
|
+ WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strTree2, Global::g_szResuorceCfg);
|
|
|
+
|
|
|
+ CString strTree3 = _T("");
|
|
|
+ nCurSel = m_cbTree3.GetCurSel();
|
|
|
+ if (nCurSel != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree3.GetLBText(nCurSel, strTree3);
|
|
|
+ }
|
|
|
+ WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strTree3, Global::g_szResuorceCfg);
|
|
|
+
|
|
|
+ _stprintf_s(g_pMainFrame->m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strTree1.GetString(), strTree2.GetString());
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void CIRControlWnd::OnCbnSelchangeTree3()
|
|
|
+{
|
|
|
+ // UI下拉框;
|
|
|
+ CString strTree3 = _T("");
|
|
|
+ int nCurSel = m_cbTree3.GetCurSel();
|
|
|
+ if (nCurSel != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree3.GetLBText(nCurSel, strTree3);
|
|
|
+ WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strTree3, Global::g_szResuorceCfg);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void CIRControlWnd::SetPropListFont()
|
|
|
{
|
|
|
::DeleteObject(m_fntPropList.Detach());
|
|
@@ -596,7 +722,7 @@ void CIRControlWnd::LoadSignals()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- AutoSetDroppedWidth();
|
|
|
+ AutoSetDroppedWidth(&m_wndSignalCombo);
|
|
|
}
|
|
|
|
|
|
void CIRControlWnd::Loadlayout(std::vector<BtnInfo>& vt)
|
|
@@ -773,7 +899,7 @@ void CIRControlWnd::OnCheckBoxClicked()
|
|
|
m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str());
|
|
|
}
|
|
|
}
|
|
|
- AutoSetDroppedWidth();
|
|
|
+ AutoSetDroppedWidth(&m_wndSignalCombo);
|
|
|
DisableSignalBtn();
|
|
|
ReLoadSignalXml();
|
|
|
}
|
|
@@ -821,9 +947,9 @@ void CIRControlWnd::UpdateSignalBtnStatus()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void CIRControlWnd::AutoSetDroppedWidth()
|
|
|
+void CIRControlWnd::AutoSetDroppedWidth(CComboBox *pCombobox)
|
|
|
{
|
|
|
- return AddHScroll();
|
|
|
+ return AddHScroll(pCombobox);
|
|
|
// Set the height of every item so the item
|
|
|
// is completely visible.
|
|
|
CString str;
|
|
@@ -850,16 +976,18 @@ void CIRControlWnd::AutoSetDroppedWidth()
|
|
|
m_wndSignalCombo.ReleaseDC(pDC);
|
|
|
}
|
|
|
|
|
|
-void CIRControlWnd::AddHScroll()
|
|
|
+void CIRControlWnd::AddHScroll(CComboBox* pCombobox)
|
|
|
{
|
|
|
+ if (!pCombobox)
|
|
|
+ return;
|
|
|
// Find the longest string in the combo box.
|
|
|
CString str;
|
|
|
CSize sz;
|
|
|
int dx = 0;
|
|
|
|
|
|
TEXTMETRIC tm = { 0 };
|
|
|
- CDC* pDC = m_wndSignalCombo.GetDC();
|
|
|
- CFont* pFont = m_wndSignalCombo.GetFont();
|
|
|
+ CDC* pDC = pCombobox->GetDC();
|
|
|
+ CFont* pFont = pCombobox->GetFont();
|
|
|
|
|
|
// Select the listbox font, save the old font
|
|
|
CFont* pOldFont = pDC->SelectObject(pFont);
|
|
@@ -867,9 +995,9 @@ void CIRControlWnd::AddHScroll()
|
|
|
// Get the text metrics for avg char width
|
|
|
pDC->GetTextMetrics(&tm);
|
|
|
|
|
|
- for (int i = 0; i < m_wndSignalCombo.GetCount(); i++)
|
|
|
+ for (int i = 0; i < pCombobox->GetCount(); i++)
|
|
|
{
|
|
|
- m_wndSignalCombo.GetLBText(i, str);
|
|
|
+ pCombobox->GetLBText(i, str);
|
|
|
sz = pDC->GetTextExtent(str);
|
|
|
|
|
|
// Add the avg width to prevent clipping
|
|
@@ -881,11 +1009,171 @@ void CIRControlWnd::AddHScroll()
|
|
|
|
|
|
// Select the old font back into the DC
|
|
|
pDC->SelectObject(pOldFont);
|
|
|
- m_wndSignalCombo.ReleaseDC(pDC);
|
|
|
+ pCombobox->ReleaseDC(pDC);
|
|
|
|
|
|
// Set the horizontal extent so every character of all strings can
|
|
|
// be scrolled to.
|
|
|
- m_wndSignalCombo.SetHorizontalExtent(dx);
|
|
|
+ pCombobox->SetHorizontalExtent(dx);
|
|
|
+}
|
|
|
+
|
|
|
+void CIRControlWnd::ReadResourceRunCfg()
|
|
|
+{
|
|
|
+ TCHAR szValue[MAX_PATH] = { 0 };
|
|
|
+ GetPrivateProfileString(_T("COMM"), _T("issendkeytakepicture_tester"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.full_cut = szValue;
|
|
|
+
|
|
|
+ GetPrivateProfileString(_T("COMM"), _T("tg39_port"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.tg39_port = szValue;
|
|
|
+
|
|
|
+ GetPrivateProfileString(_T("COMM"), _T("serial_communicator_port"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.tv_port = szValue;
|
|
|
+
|
|
|
+ GetPrivateProfileString(_T("COMM"), _T("sat_home"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.sat_home = szValue;
|
|
|
+
|
|
|
+ GetPrivateProfileString(_T("COMM"), _T("sat_result_dir"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.sat_result_dir = szValue;
|
|
|
+
|
|
|
+ GetPrivateProfileString(_T("COMM"), _T("chroma22293"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.chroma22293 = szValue;
|
|
|
+
|
|
|
+ //...
|
|
|
+ GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.menutree_chip = szValue;
|
|
|
+
|
|
|
+ GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.menutree_style = szValue;
|
|
|
+
|
|
|
+ GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ m_rscfg.menutree_channel = szValue;
|
|
|
+}
|
|
|
+
|
|
|
+void CIRControlWnd::LoadMenuTreePath()
|
|
|
+{
|
|
|
+ TCHAR szValue[MAX_PATH] = {0};
|
|
|
+ TCHAR szRootDir[MAX_PATH] = { 0 };
|
|
|
+ GetPrivateProfileString(_T("COMM"), _T("sat_home"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg);
|
|
|
+ _stprintf_s(szRootDir, _T("%s%s"), szValue, _T("resource\\MenuTree\\"));
|
|
|
+
|
|
|
+ auto _get_dir = [](std::string dir) {
|
|
|
+ int nIndex = dir.find_last_of('\\');
|
|
|
+ if (nIndex != std::string::npos)
|
|
|
+ {
|
|
|
+ return dir.substr(nIndex + 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ return dir;
|
|
|
+ };
|
|
|
+
|
|
|
+ auto _get_name = [](std::string dir) {
|
|
|
+ int pos1 = dir.find_last_of('\\');
|
|
|
+ if (pos1 != std::string::npos)
|
|
|
+ {
|
|
|
+ dir = dir.substr(pos1 + 1);
|
|
|
+ int pos2 = dir.find_last_of('.');
|
|
|
+ if (pos2 != std::string::npos)
|
|
|
+ {
|
|
|
+ dir = dir.substr(0, pos2);
|
|
|
+ int pos3 = dir.find("MenuTree_");
|
|
|
+ if (pos3 != std::string::npos)
|
|
|
+ {
|
|
|
+ return dir.substr(strlen("MenuTree_"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return std::string();
|
|
|
+ };
|
|
|
+
|
|
|
+ // 查找根目录下的目录;
|
|
|
+ filehelper fh;
|
|
|
+ STR_VEC vt_dir;
|
|
|
+ fh.getsubfolder(szRootDir, &vt_dir);
|
|
|
+ for (auto it : vt_dir)
|
|
|
+ {
|
|
|
+ STR_VEC vt_subdir;
|
|
|
+ std::vector<UITree> vtTree;
|
|
|
+ fh.getsubfolder(it.c_str(), &vt_subdir);
|
|
|
+ for (auto ui : vt_subdir)
|
|
|
+ {
|
|
|
+ // 查找xls文件;
|
|
|
+ UITree uitree;
|
|
|
+ uitree.ui = ui;
|
|
|
+ fh.getfiles_findout_subfolder(ui.c_str(), _T("*.xls"), &uitree.vtSubUI);
|
|
|
+ vtTree.push_back(uitree);
|
|
|
+ }
|
|
|
+
|
|
|
+ m_map_tree.insert(std::pair<std::string, std::vector<UITree>>(_get_dir(it), vtTree));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 去除目录级;
|
|
|
+ for (std::map<std::string, std::vector<UITree>>::iterator it = m_map_tree.begin(); it != m_map_tree.end(); it++)
|
|
|
+ {
|
|
|
+ for (std::vector<UITree>::iterator ui = it->second.begin(); ui != it->second.end(); ui++)
|
|
|
+ {
|
|
|
+ ui->ui = _get_dir(ui->ui);
|
|
|
+ for (std::vector<std::string>::iterator xls = ui->vtSubUI.begin(); xls != ui->vtSubUI.end();)
|
|
|
+ {
|
|
|
+ *xls = _get_name(xls->c_str());
|
|
|
+ if (xls->size() == 0)
|
|
|
+ {
|
|
|
+ xls = ui->vtSubUI.erase(xls);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ xls++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CIRControlWnd::InitMenuTreeCombobox()
|
|
|
+{
|
|
|
+ if ( m_map_tree.size())
|
|
|
+ {
|
|
|
+ for (auto it : m_map_tree)
|
|
|
+ {
|
|
|
+ m_cbTree1.AddString(it.first.c_str());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 选择默认项;
|
|
|
+ m_cbTree1.SelectString(0, m_rscfg.menutree_chip.c_str());
|
|
|
+
|
|
|
+ // UI下拉框;
|
|
|
+ int nIndex = 0;
|
|
|
+ CString curText;
|
|
|
+ if ((nIndex = m_cbTree1.GetCurSel()) != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree1.GetLBText(nIndex, curText);
|
|
|
+
|
|
|
+ std::map<std::string, std::vector<UITree>>::iterator itTree = m_map_tree.find(curText.GetString());
|
|
|
+ if (itTree != m_map_tree.end())
|
|
|
+ {
|
|
|
+ for (auto it : itTree->second)
|
|
|
+ {
|
|
|
+ m_cbTree2.AddString(it.ui.c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ CString strCurChip = _T("");
|
|
|
+ CString strCurStyle = _T("");
|
|
|
+ m_cbTree2.SelectString(0, m_rscfg.menutree_style.c_str());
|
|
|
+ if ((nIndex = m_cbTree2.GetCurSel() ) != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree2.GetLBText(nIndex, strCurChip);
|
|
|
+ }
|
|
|
+ if ((nIndex = m_cbTree3.GetCurSel()) != CB_ERR)
|
|
|
+ {
|
|
|
+ m_cbTree3.GetLBText(nIndex, strCurStyle);
|
|
|
+ }
|
|
|
+ _stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString());
|
|
|
+ }
|
|
|
+
|
|
|
+ AutoSetDroppedWidth(&m_cbTree1);
|
|
|
+ AutoSetDroppedWidth(&m_cbTree2);
|
|
|
+ AutoSetDroppedWidth(&m_cbTree3);
|
|
|
}
|
|
|
|
|
|
LRESULT CIRControlWnd::OnIRShotImg(WPARAM wparam, LPARAM lparam)
|