📄 executionpage.cpp
字号:
//####COPYRIGHTBEGIN####// // ----------------------------------------------------------------------------// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.//// This program is part of the eCos host tools.//// This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation; either version 2 of the License, or (at your option) // any later version.// // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details.// // You should have received a copy of the GNU General Public License along with// this program; if not, write to the Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.//// ----------------------------------------------------------------------------// //####COPYRIGHTEND#### // ExecutionPage.cpp : implementation file//#include "stdafx.h"#include "ExecutionPage.h"#include "shlobj.h"#include "RunTestsSheet.h"#include <afxpriv.h> // for WM_KICKIDLE#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CExecutionPage property pageconst UINT arIds []={IDC_TT_SELECT_ALL,IDC_TT_UNSELECT_ALL,IDC_TT_ADD, IDC_TT_FOLDER, IDC_TT_REMOVE};IMPLEMENT_DYNCREATE(CExecutionPage, CeCosPropertyPage)CExecutionPage::CExecutionPage() : CeCosPropertyPage(IDD_TT_EXECUTION_PAGE){ GetCurrentDirectory(MAX_PATH,m_strFolder.GetBuffer(MAX_PATH)); m_strFolder.ReleaseBuffer(); //{{AFX_DATA_INIT(CExecutionPage) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT}CExecutionPage::~CExecutionPage(){}void CExecutionPage::DoDataExchange(CDataExchange* pDX){ CeCosPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CExecutionPage) DDX_Control(pDX, IDC_TT_RUNTESTS_LIST, m_List); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CExecutionPage, CeCosPropertyPage) //{{AFX_MSG_MAP(CExecutionPage) ON_BN_CLICKED(IDC_TT_FOLDER, OnFolder) ON_BN_CLICKED(IDC_TT_SELECT_ALL, OnSelectAll) ON_BN_CLICKED(IDC_TT_UNSELECT_ALL, OnUnselectAll) ON_BN_CLICKED(IDC_TT_ADD, OnAdd) ON_BN_CLICKED(IDC_TT_REMOVE, OnRemove) ON_WM_SIZE() ON_MESSAGE(WM_KICKIDLE, OnKickIdle) ON_WM_CHAR() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CExecutionPage message handlersCExecutionPage *CExecutionPage::pDlg=NULL;LRESULT CALLBACK CExecutionPage::WindowProcNew(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam){ if (message == WM_COMMAND) { switch(wParam){ case MAKEWPARAM(IDC_TT_RECURSE,BN_CLICKED): pDlg->m_bRecurse ^= 1; pDlg->m_Button.SetCheck(pDlg->m_bRecurse); return 0; case MAKEWPARAM(IDC_TT_EXTENSION,EN_CHANGE): pDlg->m_Combo.GetWindowText(pDlg->m_strExtension); return 0; default: break; } } return CallWindowProc(pDlg->m_wndProc, hwnd, message, wParam, lParam);} int CALLBACK CExecutionPage::CBBrowseCallbackProc( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData ){ pDlg=(CExecutionPage *)lpData; switch(uMsg){ case BFFM_INITIALIZED: { ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)(LPCTSTR)pDlg->m_strFolder); CWnd *pWnd=CWnd::FromHandle(hwnd); pWnd->SetWindowText(_T("Add Files from Folder")); // Get rect of IDCANCEL button to the right CRect rect,rect1,rect2; pWnd->GetDlgItem(IDCANCEL)->GetWindowRect(&rect1); pWnd->GetWindowRect(&rect2); int nDlgMargin=rect2.right-rect1.right; int nButtonHeight=rect1.Height(); rect.left=rect.top=nDlgMargin; rect.right=rect.left+6*nButtonHeight; rect.bottom=rect.top+(10*nButtonHeight)/14; WPARAM wFont=(WPARAM)GetStockObject(DEFAULT_GUI_FONT); pDlg->m_Button.CreateEx(0,_T("BUTTON"),NULL, WS_VISIBLE|WS_CHILD|BS_CHECKBOX, rect, pWnd, IDC_TT_RECURSE); pDlg->m_Button.SetWindowText(_T("&Add from subfolders")); pDlg->m_Button.SendMessage(WM_SETFONT, wFont, 0); pDlg->m_Button.SetCheck(pDlg->m_bRecurse); rect.left=rect.right+(4*nButtonHeight)/14; rect.right=rect.left+3*nButtonHeight; rect.bottom+=2*GetSystemMetrics(SM_CYBORDER)+4; pDlg->m_Static.Create(_T("Files of type:"),WS_VISIBLE|WS_CHILD|SS_LEFT, rect, pWnd); pDlg->m_Static.SendMessage(WM_SETFONT, wFont, 0); rect.bottom-=2*GetSystemMetrics(SM_CYBORDER)+4; rect.left=rect.right+(4*nButtonHeight)/14; rect.right=rect.left+3*nButtonHeight; //rect.bottom=rect.top+2*nButtonHeight; rect.top=rect.bottom-(12*nButtonHeight)/14; pDlg->m_Combo.CreateEx(WS_EX_CLIENTEDGE,_T("Edit"),NULL,WS_VISIBLE|WS_CHILD|WS_BORDER|ES_LEFT/*|CBS_DROPDOWN*/, rect, pWnd, IDC_TT_EXTENSION); //pDlg->m_Combo.AddString(pDlg->m_strExtension); //pDlg->m_Combo.SetCurSel(0); pDlg->m_Combo.SetWindowText(pDlg->m_strExtension); pDlg->m_Combo.SendMessage(WM_SETFONT, wFont, 0); pDlg->m_wndProc = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (long)WindowProcNew); } case BFFM_SELCHANGED: { // Change the cwd such that if the New button is used, we know where we are to start from ITEMIDLIST *iil=(ITEMIDLIST *)lParam; CString strFolder; SHGetPathFromIDList(iil,strFolder.GetBuffer(MAX_PATH)); strFolder.ReleaseBuffer(); SetCurrentDirectory(strFolder); } break; default: ; } return 0;}void CExecutionPage::OnFolder() { BROWSEINFO bi; bi.hwndOwner = GetSafeHwnd(); bi.pidlRoot = NULL; bi.pszDisplayName = m_strFolder.GetBuffer(MAX_PATH); bi.lpszTitle = _T(""); bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT/*|0x0010 BIF_EDITBOX*/; bi.lpfn = (BFFCALLBACK)CBBrowseCallbackProc; bi.lParam = (LPARAM)this; bool bSaveRecurse=m_bRecurse; LPITEMIDLIST iil = SHBrowseForFolder(&bi); m_strFolder.ReleaseBuffer(); if(iil){ SHGetPathFromIDList(iil,m_strFolder.GetBuffer(MAX_PATH)); m_strFolder.ReleaseBuffer(); SetModified(); FillListBox(m_strFolder); } else { m_bRecurse=bSaveRecurse; }}/*void CExecutionPage::OnRefresh() { FillListBox(m_strFolder);}*/void CExecutionPage::FillListBox(LPCTSTR pszFolder){ CWaitCursor wait; CString strOldFolder; ::GetCurrentDirectory(MAX_PATH,strOldFolder.GetBuffer(MAX_PATH)); strOldFolder.ReleaseBuffer(); if(::SetCurrentDirectory(pszFolder)){ int nCount=m_List.GetCount(); m_List.Dir(DDL_READWRITE,m_strExtension); for(int i=nCount;i<m_List.GetCount();i++){ TCHAR strFull[1+MAX_PATH]; CString str; m_List.GetText(i,str); TCHAR *pFile; ::GetFullPathName(str,MAX_PATH,strFull,&pFile); m_List.DeleteString(i); if(LB_ERR==m_List.FindStringExact(-1,strFull)){ m_List.InsertString(i,strFull); m_List.SetCheck(i,TRUE); } else { --i; } } if(m_bRecurse){ CFileFind finder; BOOL bMore=finder.FindFile(); while (bMore) { bMore = finder.FindNextFile(); if(finder.IsDirectory() && !finder.IsDots()){ FillListBox(finder.GetFileName()); } } } ::SetCurrentDirectory(strOldFolder); } GetDlgItem(IDC_TT_SELECT_ALL)->EnableWindow(m_List.GetCount()>0); GetDlgItem(IDC_TT_UNSELECT_ALL)->EnableWindow(m_List.GetCount()>0);}void CExecutionPage::OnSelectAll() { for(int i=0;i<m_List.GetCount();i++){ m_List.SetCheck(i,TRUE); }}void CExecutionPage::OnUnselectAll() { for(int i=0;i<m_List.GetCount();i++){ m_List.SetCheck(i,FALSE); }}bool CExecutionPage::IsSelected(int i){ return TRUE==m_List.GetCheck(i);}void CExecutionPage::OnAdd() { CFileDialog dlg(TRUE, _T("exe"), _T("*.exe"), OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST, _T("Executables(*.exe)\0*.exe\0")); dlg.m_ofn.lpstrTitle=_T("Add"); if(IDOK==dlg.DoModal()){ LPCTSTR pszDir=dlg.m_ofn.lpstrFile; DWORD dwAttr=GetFileAttributes(pszDir); if(0xFFFFFFFF!=dwAttr){ bool bErr=false; if(dwAttr&FILE_ATTRIBUTE_DIRECTORY){ for(LPCTSTR c=pszDir+_tcslen(pszDir)+1;_TCHAR('\0')!=*c;c+=_tcslen(c)+1){ CString str(pszDir); str+=_TCHAR('\\'); str+=c; if(LB_ERR==m_List.FindStringExact(-1,str)){ m_List.SetCheck(m_List.AddString(str),TRUE); } else { bErr=true; } } } else { if(LB_ERR==m_List.FindStringExact(-1,pszDir)){ m_List.SetCheck(m_List.AddString(pszDir),TRUE); } else { bErr=true; } } if(bErr){ MessageBox(_T("One or more of the files was already present")); } } } GetDlgItem(IDC_TT_SELECT_ALL)->EnableWindow(m_List.GetCount()>0); GetDlgItem(IDC_TT_UNSELECT_ALL)->EnableWindow(m_List.GetCount()>0);}int CExecutionPage::SelectedTestCount(){ int n=0; if(IsWindow(m_List.m_hWnd)){ for(int i=0;i<m_List.GetCount();i++){ n+=m_List.GetCheck(i); } } return n;}CString CExecutionPage::SelectedTest(int nIndex){ CString str; for(int i=0;i<m_List.GetCount();i++){ if(m_List.GetCheck(i)){ if(0==nIndex--){ m_List.GetText(i,str); break; } } } return str;}BOOL CExecutionPage::OnInitDialog() { CeCosPropertyPage::OnInitDialog(); for(POSITION pos = m_arstrPreLoad.GetStartPosition(); pos != NULL; ){ CString strFile; void *p; m_arstrPreLoad.GetNextAssoc( pos, strFile,p); m_List.SetCheck(m_List.AddString(strFile),0!=p); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void CExecutionPage::OnSize(UINT nType, int cx, int cy) { CRect rect; GetClientRect(rect); CeCosPropertyPage::OnSize(nType, cx, cy); CWnd *pWnd=GetDlgItem(IDC_TT_RUNTESTS_LIST); if(pWnd){ ((CRunTestsSheet*)GetParent())->MoveWindow(pWnd,CRunTestsSheet::Stretch); const int nWnds=sizeof(arIds)/sizeof(arIds[0]); CRect rc[nWnds]; CWnd *pWnd0=GetDlgItem(arIds[0]); ((CRunTestsSheet*)GetParent())->MoveWindow(pWnd0,CRunTestsSheet::TopLeft); CWnd *pWndn=GetDlgItem(arIds[nWnds-1]); ((CRunTestsSheet*)GetParent())->MoveWindow(pWndn,CRunTestsSheet::TopRight); CRect rect0; pWnd0->GetWindowRect(rect0); ScreenToClient(rect0); CRect rectn; pWndn->GetWindowRect(rectn); ScreenToClient(rectn); int nSpacing=(rectn.left-rect0.left)/(nWnds-1); for(int i=1;i<nWnds-1;i++){ CRect rect; rect.left=rect0.left+i*nSpacing; rect.right=rect.left+rect0.Width(); rect.top=rect0.top; rect.bottom=rect0.bottom; pWnd=GetDlgItem(arIds[i]); pWnd->GetWindowRect(rc[i]); ScreenToClient(rc[i]); pWnd->MoveWindow(rect); } for(i=0;i<sizeof(arIds)/sizeof(arIds[0]);i++){ InvalidateRect(rc[i]); GetDlgItem(arIds[i])->Invalidate(); } } }LRESULT CExecutionPage::OnKickIdle(WPARAM, LPARAM){ if(IsWindow(m_List.m_hWnd)){ int n=m_List.GetCount(); bool bSelectAll=false; bool bUnSelectAll=false; if(n>0){ bool bPrev=false; for(int i=0;i<n;i++){ bool bCheck=(TRUE==m_List.GetCheck(i)); if(bCheck){ bUnSelectAll=true; } else { bSelectAll=true; } if(i>0 && bCheck!=bPrev){ break; } bPrev=bCheck; } } GetDlgItem(IDC_TT_SELECT_ALL)->EnableWindow(bSelectAll); GetDlgItem(IDC_TT_UNSELECT_ALL)->EnableWindow(bUnSelectAll); } return 0;}bool CExecutionPage::SomeTestsSelected(){ bool b=0; if(IsWindow(m_List.m_hWnd)){ for(int i=0;i<m_List.GetCount();i++){ if(m_List.GetCheck(i)){ b=true; break; } } } return b;}void CExecutionPage::OnRemove() { m_List.SendMessage(WM_COMMAND,IDC_TT_REMOVE,0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -