瀏覽代碼

1、删除Ribbon中的MenuTree的下拉框;
2、遥控面板中添加MenuTree的下拉框;

scbc.sat2 5 年之前
父節點
當前提交
f4e6b6b01a

+ 2 - 0
SATHelper/SATHelper/Global.cpp

@@ -15,6 +15,7 @@ namespace Global
 	TCHAR g_szCurModulePath[MAX_PATH] = { 0 };
 	TCHAR g_szFna[MAX_PATH] = { 0 };
 	TCHAR g_szConfig[MAX_PATH] = { 0 };
+	TCHAR g_szResuorceCfg[MAX_PATH] = { 0 };
 	STConfig g_Config;
 	TCHAR g_szPython27Dir[MAX_PATH] = {0};
 	ULONGLONG g_ulWaitTime = 15000;
@@ -262,6 +263,7 @@ namespace Global
 		{
 			g_Config.redratpath = g_szPython27Dir;
 			g_Config.redratpath.append("Tools\\RedRatHub-V4.28\\RedRatHubCmd.exe");
+			_stprintf_s(g_szResuorceCfg, _T("%sLib\\site-packages\\ssat_sdk\\config\\resource_run.cfg"), g_szPython27Dir);
 		}
 		else
 		{

+ 1 - 0
SATHelper/SATHelper/Global.h

@@ -60,6 +60,7 @@ namespace Global
 	extern TCHAR g_szCurModulePath[MAX_PATH];
 	extern TCHAR g_szFna[MAX_PATH];
 	extern TCHAR g_szConfig[MAX_PATH];
+	extern TCHAR g_szResuorceCfg[MAX_PATH];
 	extern STConfig g_Config;
 	extern TCHAR g_szPython27Dir[MAX_PATH];
 	extern ULONGLONG g_ulWaitTime;

+ 299 - 11
SATHelper/SATHelper/IRControlWnd.cpp

@@ -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)

+ 46 - 2
SATHelper/SATHelper/IRControlWnd.h

@@ -95,6 +95,9 @@ protected:
 	afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
 	// 下拉框选项变化事件;
 	afx_msg void OnCbnSelchangeSignal();
+	afx_msg void OnCbnSelchangeTree1();
+	afx_msg void OnCbnSelchangeTree2();
+	afx_msg void OnCbnSelchangeTree3();
 
 	DECLARE_MESSAGE_MAP()
 
@@ -135,9 +138,50 @@ public:
 	// 更新按钮实际状态;
 	void UpdateSignalBtnStatus();
 	// 自动根据Combobox选项长度设置宽度;
-	void AutoSetDroppedWidth();
+	void AutoSetDroppedWidth(CComboBox* pCombobox);
 	// CCombobox添加水平滚动条;
-	void AddHScroll();
+	void AddHScroll(CComboBox* pCombobox);
+
+	//////////////////////////////////////////////////////////////////////////
+	// 读取resource_run.cfg配置文件内容;
+	typedef struct __RS_RUN_CFG__
+	{
+		std::string sound_list;	// 声音级别;
+		std::string sound1;
+		std::string sound2;
+		std::string full_cut;	// 是否全步骤截图;('True/False')
+		//....
+		std::string tg39_port;
+		std::string tv_port;
+		std::string sat_home;
+		std::string sat_result_dir;
+		std::string chroma22293;
+		//...
+		std::string menutree_chip;
+		std::string menutree_style;
+		std::string menutree_channel;
+		//...
+		std::string chroma1;
+		std::string chroma2;
+		// 是否监听电视;
+		bool bWatchTV;
+	}RsRunCfg, * pRsRunCfg;
+
+	RsRunCfg m_rscfg;
+	void ReadResourceRunCfg();
+
+	// 读取menutree目录;
+	typedef struct __UI_TREE__
+	{
+		std::string ui;
+		std::vector<std::string> vtSubUI;
+	}UITree, * pUITree;
+	std::map<std::string, std::vector<UITree>> m_map_tree;
+	// 当前选中的MenuTree路径;
+	TCHAR m_szCurMenuTreeDir[MAX_PATH];
+	// 初始化MenuTree下拉框;
+	void LoadMenuTreePath();
+	void InitMenuTreeCombobox();
 	// 遥控截图自定义消息;
 	BOOL m_bSendKey;
 	afx_msg LRESULT  OnIRShotImg(WPARAM wparam, LPARAM lparam);

+ 1 - 1
SATHelper/SATHelper/SATHelper.ini

@@ -22,7 +22,7 @@ generics=0
 ;信号集路径
 signal=D:\SAT\resource\RCU
 ;使用的信号集;
-use-signal=AP_0F_IR
+use-signal=G_NA_0707_IR_(Quasar)
 
 [SATService]
 ;用户名

文件差異過大導致無法顯示
+ 0 - 1138
SATHelper/SATHelper/res/ribbon.mfcribbon-ms


部分文件因文件數量過多而無法顯示