// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 
// (“Fluent UI”)。该示例仅供参考，
// 用以补充《Microsoft 基础类参考》和 
// MFC C++ 库软件随附的相关电子文档。  
// 复制、使用或分发 Fluent UI 的许可条款是单独提供的。  
// 若要了解有关 Fluent UI 许可计划的详细信息，请访问 
// https://go.microsoft.com/fwlink/?LinkId=238214.
//
// 版权所有(C) Microsoft Corporation
// 保留所有权利。

// MainFrm.h: CMainFrame 类的接口
//

#pragma once
#include "FileView.h"
#include "ClassView.h"
#include "OutputWnd.h"
#include "IRControlWnd.h"
#include "CalendarBar.h"
#include "Resource.h"
#include "SATHelperDoc.h"
#include "SATHelperView.h"
#include "ChildFrm.h"
#include "DeviceView.h"
#include "UB530View.h"
#include "filehelper.h"
#include "DevicesWnd.h"
//////////////////////////////////////////////////////////////////////////
#include "TrayIcon.h"
#define USE_TRAYICON 1
// 状态栏消息;
#define MSG_STATUS_BAR (WM_USER + 101)

class COutlookBar : public CMFCOutlookBar
{
	virtual BOOL AllowShowOnPaneMenu() const { return TRUE; }
	virtual void GetPaneName(CString& strName) const { BOOL bNameValid = strName.LoadString(IDS_OUTLOOKBAR); ASSERT(bNameValid); if (!bNameValid) strName.Empty(); }
};

class CMainFrame : public CMDIFrameWndEx
{
	DECLARE_DYNAMIC(CMainFrame)
public:
	CMainFrame() noexcept;

	// 特性
public:
	CSATHelperDoc* m_pDoc;
	CFormView* m_pActiveView;
	CChildFrame* m_pViewIDE[10];
	CChildFrame* m_pUB530View;
	CChildFrame* m_pDeviceView;

	// 操作
public:

	// 重写
public:
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

	// 实现
public:
	virtual ~CMainFrame();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:  // 控件条嵌入成员
	CMFCRibbonBar     m_wndRibbonBar;
	CMFCRibbonApplicationButton m_MainButton;
	CMFCToolBarImages m_PanelImages;
	CMFCRibbonStatusBar  m_wndStatusBar;
#if __DOCKINGBAR__
#if __FC_WIN__
	CFileView         m_wndFileView;
	CClassView        m_wndClassView;
#endif
#if __OUT_PUT_WIN__
	COutputWnd        m_wndOutput;
#endif
	CIRControlWnd     m_wndIRControl;
	CDevicesWnd		  m_wndDevices;
#endif

#if __OUTLOOKBAR__
	COutlookBar       m_wndNavigationBar;
	CMFCShellTreeCtrl m_wndTree;
	CCalendarBar      m_wndCalendar;
#endif

#if __CAPTIONBAR__
	CMFCCaptionBar    m_wndCaptionBar;
#endif

	// 生成的消息映射函数
protected:
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnWindowManager();
	afx_msg void OnApplicationLook(UINT id);
	afx_msg void OnUpdateApplicationLook(CCmdUI* pCmdUI);
	afx_msg void OnViewCaptionBar();
	afx_msg void OnUpdateViewCaptionBar(CCmdUI* pCmdUI);
	afx_msg void OnOptions();
	afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
	afx_msg LRESULT OnMsgStatusBar(WPARAM wParam, LPARAM lParam);
	afx_msg void OnClose();
	void OnTraymenuExit();
	DECLARE_MESSAGE_MAP()

#if __DOCKINGBAR__
	BOOL CreateDockingWindows();
	void SetDockingWindowIcons(BOOL bHiColorIcons);
#endif

#if __OUTLOOKBAR__
	BOOL CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth);
#endif

#if __CAPTIONBAR__
	BOOL CreateCaptionBar();
#endif

	int FindFocusedOutlookWnd(CMFCOutlookBarTabCtrl** ppOutlookWnd);

	CMFCOutlookBarTabCtrl* FindOutlookParent(CWnd* pWnd);
	CMFCOutlookBarTabCtrl* m_pCurrOutlookWnd;
	CMFCOutlookBarPane* m_pCurrOutlookPage;

public:
#if USE_TRAYICON
	void InitTrayIcon();

	// 托盘是否显示;
	BOOL			m_isNotify;

	// 启动程序时,隐藏或显示对话框,在消息处理程序OnNcPaint()中使用;
	BOOL            m_bShowNc;

	// 是否响应托盘消息;
	BOOL            m_bNoticeTray;

	// 托盘工作类;
	ITrayIcon		m_trayIcon;
	BOOL			m_bAutoRuning;

	afx_msg LRESULT OnTrayNotification(WPARAM wp, LPARAM lp);
	afx_msg LRESULT OnTaskBarCreated(WPARAM   wp, LPARAM   lp);
	void TaskNotifyIcon();	// 托盘的工作内容;
	void TrayRight();
#endif

	CMFCRibbonButton* GetRibbonButton(int uId) {
		return DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(uId));
	}

	// 设置状态栏文本;
	void SetRibbonStatusBarText(CString strText, int uId) {
		if (IsWindow(m_wndStatusBar))
		{
			CMFCRibbonBaseElement* pElement = m_wndStatusBar.FindByID(uId);
			if (pElement)
			{
				pElement->SetText(strText);
				pElement->Redraw();
			}
		}
	}

public:
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	//afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
	afx_msg LRESULT OnRibbonChanged(WPARAM wParam, LPARAM lParam);


	// 是否遥控截图;
	BOOL m_bShotIR;
public:
	//////////////////////////////////////////////////////////////////////////
	// 读取baidu.cfg配置文件内容;
	typedef struct __COUNT_INFO__
	{
		std::string app_id;
		std::string api_key;
		std::string secret_key;
		std::string ret_count;
	}CountInfo, * pCountInfo;

	typedef struct __BAIDU_CFG__
	{
		std::string cur_count;
		std::string reset_time;
		std::map<std::string, __COUNT_INFO__> list_count;
	}BaiduCfg, * pBaiduCfg;

	BaiduCfg m_bdcfg;
	TCHAR m_szBaiduCfgPath[MAX_PATH];
	void ReadBaiduCfg(BaiduCfg& bdcfg);

	//////////////////////////////////////////////////////////////////////////
	// 读取resource_run.cfg配置文件内容;
	typedef struct __RS_RUN_CFG__
	{
		std::string sound_list;	// 声音级别;
		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;
	TCHAR m_szRsCfgPath[MAX_PATH];
	void ReadRsRunCfg(RsRunCfg& rscfg);

	//////////////////////////////////////////////////////////////////////////
	// 读取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];
	void ReadTreePath();

	// 解析json;
	void ParseJson();

	// 运行设备;
	void RunDevice();

	std::vector<std::string> m_vtCOM;
	void InitCombobox_port();
	BOOL IsPortInserted(CMFCRibbonComboBox* pCommbox, LPCTSTR lpPort);
	afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD_PTR dwData);

public:
	void InitDevicePanel();
	// 全步骤截图;
	afx_msg void OnCheckFullCut();
	afx_msg void OnUpdateCheckFullCut(CCmdUI* pCmdUI);
	// 有声按钮;
	afx_msg void OnHadSound();
	afx_msg void OnUpdateHadSound(CCmdUI* pCmdUI);
	// 声音默认按钮;
	afx_msg void OnDefSound();
	afx_msg void OnUpdateDefSound(CCmdUI* pCmdUI);
	// 声音等级编辑框;

	// OCR账号下拉框;
	afx_msg void OnComboxOcr();
	afx_msg void OnUpdateComboxOcr(CCmdUI* pCmdUI);
	// MenuTree项目下拉框;
	afx_msg void OnComboProduct();
	afx_msg void OnUpdateComboProduct(CCmdUI* pCmdUI);
	// MenuTree UI下拉框;
	afx_msg void OnComboUi();
	afx_msg void OnUpdateComboUi(CCmdUI* pCmdUI);
	// MenuTree 子UI下拉框;
	afx_msg void OnComboSubUi();
	afx_msg void OnUpdateComboSubUi(CCmdUI* pCmdUI);

	// 信号仪1下拉框;
	afx_msg void OnCombo1_22293();
	afx_msg void OnUpdateCombo1_22293(CCmdUI* pCmdUI);
	// 信号仪2下拉框;
	afx_msg void OnCombo2_22293();
	afx_msg void OnUpdateCombo2_22293(CCmdUI* pCmdUI);
	// 信号仪1CheckBox;
	afx_msg void OnCheck1_22293();
	afx_msg void OnUpdateCheck1_22293(CCmdUI* pCmdUI);
	// 信号仪2CheckBox;
	afx_msg void OnCheck2_22293();
	afx_msg void OnUpdateCheck2_22293(CCmdUI* pCmdUI);
	afx_msg void OnCombo2Tv();
	afx_msg void OnUpdateCombo2Tv(CCmdUI* pCmdUI);
	afx_msg void OnCheckWatchtv();
	afx_msg void OnUpdateCheckWatchtv(CCmdUI* pCmdUI);
	afx_msg void OnTraymenuLogin();
};


