// ModuleSVNManagerDlg.cpp : ʵ���ļ� // #include "stdafx.h" #include "ModuleSVNManager.h" #include "ModuleSVNManagerDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // ����Ӧ�ó����ڡ��˵���� CAboutDlg �Ի��� class CAboutDlg : public CDialog { public: CAboutDlg(); // �Ի������� enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧�� // ʵ�� protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CModuleSVNManagerDlg �Ի��� CModuleSVNManagerDlg::CModuleSVNManagerDlg(CWnd* pParent /*=NULL*/) : CDialog(CModuleSVNManagerDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CModuleSVNManagerDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, LIST_DB_MOD, m_list_modDB); } BEGIN_MESSAGE_MAP(CModuleSVNManagerDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(BTN_OPERATION, &CModuleSVNManagerDlg::OnBnClickedOperation) ON_NOTIFY(NM_CLICK, LIST_DB_MOD, &CModuleSVNManagerDlg::OnNMClickDbMod) ON_NOTIFY(NM_DBLCLK, LIST_DB_MOD, &CModuleSVNManagerDlg::OnNMDblclkDbMod) ON_NOTIFY(NM_RDBLCLK, LIST_DB_MOD, &CModuleSVNManagerDlg::OnNMRDblclkDbMod) ON_BN_CLICKED(IDOK, &CModuleSVNManagerDlg::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CModuleSVNManagerDlg::OnBnClickedCancel) ON_NOTIFY(LVN_ITEMCHANGED, LIST_DB_MOD, &CModuleSVNManagerDlg::OnLvnItemchangedDbMod) ON_BN_CLICKED(BTN_DELETE, &CModuleSVNManagerDlg::OnBnClickedDelete) END_MESSAGE_MAP() // CModuleSVNManagerDlg ��Ϣ�������� BOOL CModuleSVNManagerDlg::OnInitDialog() { CDialog::OnInitDialog(); // ��������...���˵������ӵ�ϵͳ�˵��С� // IDM_ABOUTBOX ������ϵͳ���Χ�ڡ� ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // ���ô˶Ի����ͼ�ꡣ��Ӧ�ó��������ڲ��ǶԻ���ʱ����ܽ��Զ� // ִ�д˲��� SetIcon(m_hIcon, TRUE); // ���ô�ͼ�� SetIcon(m_hIcon, FALSE); // ����Сͼ�� // TODO: �ڴ����Ӷ���ij�ʼ������ LoadData(); InitCtrl(); FillData2List(); return TRUE; // ���ǽ��������õ��ؼ������� TRUE } void CModuleSVNManagerDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // �����Ի���������С����ť������Ҫ����Ĵ��� // �����Ƹ�ͼ�ꡣ����ʹ���ĵ�/��ͼģ�͵� MFC Ӧ�ó��� // �⽫�ɿ���Զ���ɡ� void CModuleSVNManagerDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ���ڻ��Ƶ��豸������ SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // ʹͼ���ڹ����������о��� 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; // ����ͼ�� dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } //���û��϶���С������ʱϵͳ���ô˺���ȡ�ù�� //��ʾ�� HCURSOR CModuleSVNManagerDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CModuleSVNManagerDlg::LoadData() { // �������ݿ�; m_vtDbModInfo.clear(); CDataImpl::GetInstance()->QueryModInfo(m_vtDbModInfo); // ���ж�ȡ�ļ�����; CString strLine; CStdioFile sfile; CFileException exp; if ( sfile.Open(Global::g_ModConfig.szModSavePath, CFile::modeRead, &exp) ) { while (sfile.ReadString(strLine)) { // Format:[MODULE],Name,svn url,svn version; if ( !strLine.IsEmpty() ) { TCHAR szModule[MAX_PATH] = {0}; TCHAR szModName[MAX_PATH] = {0}; TCHAR szModAddress[MAX_PATH] = {0}; TCHAR szModVersion[MAX_PATH] = {0}; int nRet = _stscanf_s (strLine.GetString(), _T("%[^,],%[^,],%[^,],%[^,]"), szModule, MAX_PATH, szModName, MAX_PATH, szModAddress, MAX_PATH, szModVersion, MAX_PATH); //int nRet = sscanf(strLine.GetString(), _T("%[^,],%[^,],%[^,],%[^,]"), szModule, szModName, szModAddress, szModVersion); if ( nRet == 4 ) { SetCheck(szModName); } } } sfile.Close(); } } void CModuleSVNManagerDlg::InitCtrl() { int nIndex = 0; // ��ʼ���豸�б�; m_list_modDB.InsertColumn(nIndex, "ģ����"); m_list_modDB.SetColumnWidth(nIndex++, 100); m_list_modDB.InsertColumn(nIndex, "SVN�汾"); m_list_modDB.SetColumnWidth(nIndex++, 100); m_list_modDB.InsertColumn(nIndex, "SVN��ַ"); m_list_modDB.SetColumnWidth(nIndex++, 360); m_list_modDB.SetExtendedStyle(m_list_modDB.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); } void CModuleSVNManagerDlg::FillData2List() { int nIndex = 0; // ����db����; m_list_modDB.DeleteAllItems(); for (std::vector<STModInfo*>::iterator it = m_vtDbModInfo.begin(); it != m_vtDbModInfo.end(); it++ ) { nIndex = m_list_modDB.InsertItem(nIndex, (*it)->strName.c_str()); m_list_modDB.SetItemText(nIndex, 1, (*it)->strVersion.c_str()); m_list_modDB.SetItemText(nIndex, 2, (*it)->strAddress.c_str()); m_list_modDB.SetCheck(nIndex, (*it)->_check); m_list_modDB.SetItemData(nIndex, (DWORD_PTR)(*it)); // �ƶ�����λ��; nIndex++; } } void CModuleSVNManagerDlg::SetCheck(std::string strModName) { for (std::vector<STModInfo*>::iterator it = m_vtDbModInfo.begin(); it != m_vtDbModInfo.end(); it++ ) { if ( _tcsicmp((*it)->strName.c_str(), strModName.c_str()) == 0 ) { (*it)->_check = true; } } } void CModuleSVNManagerDlg::InsertList_modDB(STModInfo *pModInfo) { m_vtDbModInfo.push_back(pModInfo); int nCount = m_list_modDB.GetItemCount(); // ��������; m_list_modDB.InsertItem(nCount, pModInfo->strName.c_str()); m_list_modDB.SetItemText(nCount, 1, pModInfo->strVersion.c_str()); m_list_modDB.SetItemText(nCount, 2, pModInfo->strAddress.c_str()); m_list_modDB.SetItemData(nCount, (DWORD_PTR)pModInfo); } void CModuleSVNManagerDlg::SetEditLockStatus(BOOL bLock /* = TRUE */) { GetDlgItem(ET_MOD_NAME)->EnableWindow(!bLock); GetDlgItem(ET_MOD_VER)->EnableWindow(!bLock); GetDlgItem(ET_MOD_ADDR)->EnableWindow(!bLock); if ( bLock ) SetDlgItemText(BTN_OPERATION, _T("��")); else { CString strText; GetDlgItemText(BTN_OPERATION, strText); if ( strText == _T("��") ) SetDlgItemText(BTN_OPERATION, _T("����")); else SetDlgItemText(BTN_OPERATION, _T("����")); } } void CModuleSVNManagerDlg::OnBnClickedOperation() { // TODO: �ڴ����ӿؼ�֪ͨ����������� CString strOptName = _T(""); GetDlgItemText(BTN_OPERATION, strOptName); CString strModName, strModVer, strModAddr; GetDlgItemText(ET_MOD_NAME, strModName); GetDlgItemText(ET_MOD_VER, strModVer); GetDlgItemText(ET_MOD_ADDR, strModAddr); if ( strModName.IsEmpty() ) { MessageBox(_T("ģ�����գ�"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); return; } if ( strModVer.IsEmpty() ) { MessageBox(_T("�汾�ſգ�"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); return; } if ( strModAddr.IsEmpty() ) { MessageBox(_T("SVN��ַ�գ�"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); return; } if ( strOptName == _T("����") ) { // �������ݿ�; STModInfo* pModInfo = new STModInfo(); pModInfo->strName = strModName.GetString(); pModInfo->strVersion = strModVer.GetString(); pModInfo->strAddress = strModAddr.GetString(); pModInfo->_check = false; if ( CDataImpl::GetInstance()->InsertModInfo(*pModInfo) ) { MessageBox(_T("���ӳɹ���"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); // ��������; InsertList_modDB(pModInfo); } else { MessageBox(_T("����ʧ�ܣ�"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); } } else if ( strOptName == _T("��")) { // �����ؼ�; SetEditLockStatus(FALSE); } else if (strOptName == _T("����")) { // ��ȡѡ����; POSITION pos = m_list_modDB.GetFirstSelectedItemPosition(); if ( pos ) { int nSelIndex = m_list_modDB.GetNextSelectedItem(pos); if ( nSelIndex != -1) { STModInfo *pModInfo = (STModInfo*)m_list_modDB.GetItemData(nSelIndex); if ( pModInfo ) { // ��ֵ; pModInfo->strVersion = strModVer.GetString(); pModInfo->strAddress = strModAddr.GetString(); // �������ݿ�; if ( CDataImpl::GetInstance()->UpdateModInfo(*pModInfo) ) { MessageBox(_T("�ijɹ���"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); // ��������; m_list_modDB.SetItemText(nSelIndex, 1, pModInfo->strVersion.c_str()); m_list_modDB.SetItemText(nSelIndex, 2, pModInfo->strAddress.c_str()); m_list_modDB.SetItemData(nSelIndex, (DWORD_PTR)pModInfo); //UpdateData(FALSE); } else MessageBox(_T("��ʧ�ܣ�"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); } } } } } // �����ؼ�; void CModuleSVNManagerDlg::OnNMClickDbMod(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: �ڴ����ӿؼ�֪ͨ����������� *pResult = 0; if ( pNMItemActivate->iItem != -1) { STModInfo *pModInfo = (STModInfo *)m_list_modDB.GetItemData(pNMItemActivate->iItem); if ( pModInfo ) { // �����ؼ�; SetEditLockStatus(TRUE); // ��ʾ����; SetDlgItemText(ET_MOD_NAME, pModInfo->strName.c_str()); SetDlgItemText(ET_MOD_VER, pModInfo->strVersion.c_str()); SetDlgItemText(ET_MOD_ADDR, pModInfo->strAddress.c_str()); // ����ɾ����ť; GetDlgItem(BTN_DELETE)->EnableWindow(TRUE); } } else { // �����ؼ�; if ( m_list_modDB.GetSelectedCount() == 0 ) { SetEditLockStatus(FALSE); SetDlgItemText(BTN_OPERATION, _T("����")); // ��ձ༭������; SetDlgItemText(ET_MOD_NAME, _T("")); SetDlgItemText(ET_MOD_ADDR, _T("")); SetDlgItemText(ET_MOD_VER, _T("")); // ����ɾ����ť; GetDlgItem(BTN_DELETE)->EnableWindow(FALSE); } } } // ˫��ʵ�ִ�; void CModuleSVNManagerDlg::OnNMDblclkDbMod(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: �ڴ����ӿؼ�֪ͨ����������� *pResult = 0; if ( pNMItemActivate->iItem != -1) { STModInfo *pModInfo = (STModInfo *)m_list_modDB.GetItemData(pNMItemActivate->iItem); if ( pModInfo ) { pModInfo->_check = !pModInfo->_check; m_list_modDB.SetCheck(pNMItemActivate->iItem, pModInfo->_check); } } } // ˫���Ҽ�ɾ��; void CModuleSVNManagerDlg::OnNMRDblclkDbMod(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: �ڴ����ӿؼ�֪ͨ����������� *pResult = 0; #if 1 if ( pNMItemActivate->iItem != -1) { STModInfo *pModInfo = (STModInfo *)m_list_modDB.GetItemData(pNMItemActivate->iItem); if ( pModInfo ) { if ( MessageBox(_T("ȷ��ɾ�������ѡ���ǣ�"), _T("��ܰ��ʾ��"), MB_YESNO) == IDYES ) { if ( CDataImpl::GetInstance()->DeleteModInfo(*pModInfo) ) { // ���б����Ƴ�; m_list_modDB.SetItemData(pNMItemActivate->iItem, NULL); m_list_modDB.DeleteItem(pNMItemActivate->iItem); // ���������Ƴ�; for ( std::vector<STModInfo*>::iterator it = m_vtDbModInfo.begin(); it != m_vtDbModInfo.end(); it++ ) { if ( pModInfo == (*it) ) { m_vtDbModInfo.erase(it); break; } } MessageBox(_T("ɾ���ɹ���"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); } else { MessageBox(_T("ɾ��ʧ�ܣ�"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); } } } } #endif } void CModuleSVNManagerDlg::OnBnClickedOk() { // TODO: �ڴ����ӿؼ�֪ͨ����������� CString str; CStdioFile sfile; CFileException exp; // CFile::modeCreate��ʶ�����֮ǰ������; if ( sfile.Open(Global::g_ModConfig.szModSavePath, CFile::modeCreate|CFile::modeReadWrite) ) { for ( std::vector<STModInfo*>::iterator it = m_vtDbModInfo.begin(); it != m_vtDbModInfo.end(); it++ ) { STModInfo *p = *it; if ( p->_check ) { str.Format(_T("[MODULE],%s,%s,%s\n"), p->strName.c_str(), p->strAddress.c_str(), p->strVersion.c_str()); sfile.WriteString(str); } } sfile.Flush(); // ǿ�ƻ���д��; sfile.Close(); MessageBox(_T("����ɹ�"), _T("��ʾ"), MB_OK); } else { MessageBox(_T("����ʧ�ܣ������ļ�ʧ�ܣ�"), _T("��ʾ"), MB_OK); } } void CModuleSVNManagerDlg::OnBnClickedCancel() { // TODO: �ڴ����ӿؼ�֪ͨ����������� STModInfo *p = NULL; for (std::vector<STModInfo*>::iterator it = m_vtDbModInfo.begin(); it != m_vtDbModInfo.end(); ) { p = (*it); delete p; p = NULL; it = m_vtDbModInfo.erase(it); } OnCancel(); } void CModuleSVNManagerDlg::OnLvnItemchangedDbMod(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); // TODO: �ڴ����ӿؼ�֪ͨ����������� *pResult = 0; if ( pNMLV->iItem != -1) { STModInfo *pModInfo = (STModInfo *)m_list_modDB.GetItemData(pNMLV->iItem); if ( pModInfo ) { pModInfo->_check = m_list_modDB.GetCheck(pNMLV->iItem); } } } void CModuleSVNManagerDlg::OnBnClickedDelete() { // TODO: �ڴ����ӿؼ�֪ͨ����������� int nSelCurl = -1; POSITION pos = m_list_modDB.GetFirstSelectedItemPosition(); if ( pos ) { nSelCurl = m_list_modDB.GetNextSelectedItem(pos); if ( nSelCurl != -1 ) { STModInfo *pModInfo = (STModInfo *)m_list_modDB.GetItemData(nSelCurl); if ( pModInfo ) { if ( MessageBox(_T("ȷ��ɾ�������ѡ���ǣ�"), _T("��ܰ��ʾ��"), MB_YESNO) == IDYES ) { if ( CDataImpl::GetInstance()->DeleteModInfo(*pModInfo) ) { // ���б����Ƴ�; m_list_modDB.SetItemData(nSelCurl, NULL); m_list_modDB.DeleteItem(nSelCurl); // ���������Ƴ�; for ( std::vector<STModInfo*>::iterator it = m_vtDbModInfo.begin(); it != m_vtDbModInfo.end(); it++ ) { if ( pModInfo == (*it) ) { m_vtDbModInfo.erase(it); break; } } MessageBox(_T("ɾ���ɹ���"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); } else { MessageBox(_T("ɾ��ʧ�ܣ�"), _T("���ѣ�"), MB_OK|MB_ICONWARNING); } } } } } }