home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2000 April / VPR0004A.BIN / OLS / SADKT100 / sadkt100.lzh / SrcFiles.lzh / UEEditPage.cpp < prev    next >
C/C++ Source or Header  |  1999-12-31  |  5KB  |  218 lines

  1. // UEEditPage.cpp : インプリメンテーション ファイル
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "AD_Files.h"
  6. #include "resource.h"
  7. #include "CommandSink.h"
  8. #include "UEEditPage.h"
  9.  
  10.  
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16.  
  17. /////////////////////////////////////////////////////////////////////////////
  18. // CUEEditPage プロパティ ページ
  19.  
  20. IMPLEMENT_DYNCREATE(CUEEditPage, CPropertyPage)
  21.  
  22. CUEEditPage::CUEEditPage() : CPropertyPage(CUEEditPage::IDD)
  23. {
  24.     //{{AFX_DATA_INIT(CUEEditPage)
  25.     m_csUEExt = _T("");
  26.     //}}AFX_DATA_INIT
  27.     m_pSink=NULL;
  28.  
  29. }
  30.  
  31. CUEEditPage::~CUEEditPage()
  32. {
  33. }
  34.  
  35. void CUEEditPage::DoDataExchange(CDataExchange* pDX)
  36. {
  37.     CPropertyPage::DoDataExchange(pDX);
  38.     //{{AFX_DATA_MAP(CUEEditPage)
  39.     DDX_Text(pDX, IDC_EDT_UEEXT, m_csUEExt);
  40.     //}}AFX_DATA_MAP
  41. }
  42.  
  43.  
  44. BEGIN_MESSAGE_MAP(CUEEditPage, CPropertyPage)
  45.     //{{AFX_MSG_MAP(CUEEditPage)
  46.     ON_BN_CLICKED(IDC_B_ADDDIR, OnBAdddir)
  47.     ON_BN_CLICKED(IDC_B_RMVDIR, OnBRmvdir)
  48.     ON_BN_CLICKED(IDC_B_ADDEXT, OnBAddext)
  49.     ON_BN_CLICKED(IDC_B_RMVEXT, OnBRmvext)
  50.     //}}AFX_MSG_MAP
  51. END_MESSAGE_MAP()
  52.  
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CUEEditPage メッセージ ハンドラ
  55.  
  56. void CUEEditPage::SetSinkPointer(CCommandSink *pSink)
  57. {
  58.     m_pSink=pSink;
  59.  
  60.     copy(m_pSink->m_sltUEDir.begin(), m_pSink->m_sltUEDir.end(),
  61.             inserter(m_sltDir, m_sltDir.begin()));
  62.  
  63.     copy(m_pSink->m_sltUEExt.begin(), m_pSink->m_sltUEExt.end(),
  64.             inserter(m_sltExt, m_sltExt.begin()));
  65.  
  66. }
  67.  
  68.  
  69. BOOL CUEEditPage::OnInitDialog() 
  70. {
  71.     CPropertyPage::OnInitDialog();
  72.     
  73.     // TODO: この位置に初期化の補足処理を追加してください
  74.     
  75.     if(m_pSink==NULL) return TRUE;
  76.  
  77.     CListBox *pLT=(CListBox*)GetDlgItem(IDC_LT_UEDIR);
  78.     list<CString>::iterator p=m_sltDir.begin();
  79.     for( ; p!=m_sltDir.end(); p++)
  80.         pLT->AddString(*p);
  81.  
  82.     pLT=(CListBox*)GetDlgItem(IDC_LT_UEEXT);
  83.     p=m_sltExt.begin();
  84.     for( ; p!=m_sltExt.end(); p++)
  85.         pLT->AddString(*p);
  86.  
  87.  
  88.     return TRUE;  // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
  89.                   // 例外: OCX プロパティ ページの戻り値は FALSE となります
  90. }
  91.  
  92. void CUEEditPage::OnBAdddir() 
  93. {
  94.     // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
  95.  
  96.  
  97.     char    szFilter[]=_T("ALL Files(*.*)|*.*||");
  98.     DWORD    dwFlags=(OFN_HIDEREADONLY | OFN_NOCHANGEDIR);
  99.     CFileDialog    FileDlg(TRUE,
  100.                         NULL,
  101.                         NULL,
  102.                         dwFlags,
  103.                         szFilter,
  104.                         NULL);
  105.  
  106.     FileDlg.m_ofn.lpstrTitle=_T("編集禁止にするディレクトリのファイルをどれでもひとつ");
  107.     if(IDOK!=FileDlg.DoModal())
  108.         return;
  109.  
  110.     CString csFile=FileDlg.GetPathName();
  111.     int nPos=csFile.ReverseFind(_T('\\'));
  112.     if(nPos==-1) return;
  113.     csFile=csFile.Left(nPos+1);
  114.  
  115.     list<CString>::iterator p=m_sltDir.begin();
  116.     for(; p!=m_sltDir.end(); p++){
  117.         if(!csFile.CompareNoCase(*p)){
  118.             break;
  119.         }
  120.     }
  121.     if(p!=m_sltDir.end()){
  122.         csFile +=_T("\nこのディレクトリはすでに登録されています。");
  123.         MessageBox(csFile, _T("ディレクトリの追加"), MB_OK);    
  124.         return;
  125.  
  126.     }
  127.     
  128.     m_sltDir.push_back(csFile);
  129.  
  130.     CListBox *pLT=(CListBox*)GetDlgItem(IDC_LT_UEDIR);
  131.     pLT->AddString(csFile);
  132.  
  133. }
  134.  
  135. void CUEEditPage::OnBRmvdir() 
  136. {
  137.     // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
  138.  
  139.     CListBox *pLT=(CListBox*)GetDlgItem(IDC_LT_UEDIR);
  140.     int nIndex=pLT->GetCurSel();
  141.     if(nIndex==LB_ERR){
  142.         MessageBox(_T("解除するディレクトリリストで選択して実行してください。"), _T("編集禁止の解除"), MB_OK);
  143.         return;
  144.     }
  145.     CString csItem;
  146.     pLT->GetText(nIndex, csItem);
  147.     pLT->DeleteString(nIndex);
  148.     m_sltDir.remove(csItem);
  149.  
  150. }
  151.  
  152. void CUEEditPage::OnBAddext() 
  153. {
  154.     // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
  155.  
  156.     UpdateData(FALSE);
  157.     if(m_csUEExt.IsEmpty()){
  158.         MessageBox(_T("追加する拡張子を入力して実行してください。"), _T("拡張子の追加"), MB_OK);
  159.         return;
  160.     }
  161.  
  162.     m_csUEExt.TrimLeft();
  163.     m_csUEExt.TrimRight();
  164.  
  165.     list<CString>::iterator p=m_sltExt.begin();
  166.     for(; p!=m_sltExt.end(); p++){
  167.         if(!m_csUEExt.CompareNoCase(*p)){
  168.             break;
  169.         }
  170.     }
  171.     if(p!=m_sltExt.end()){
  172.         CString csMsg=m_csUEExt;
  173.         csMsg +=_T("\nこの拡張子はすでに登録されています。");
  174.         MessageBox(csMsg, _T("拡張子の追加"), MB_OK);    
  175.         return;
  176.     }
  177.  
  178.     m_sltExt.push_back(m_csUEExt);
  179.  
  180.     CListBox *pLT=(CListBox*)GetDlgItem(IDC_LT_UEEXT);
  181.     pLT->AddString(m_csUEExt);
  182.  
  183. }
  184.  
  185. void CUEEditPage::OnBRmvext() 
  186. {
  187.     // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
  188.  
  189.     CListBox *pLT=(CListBox*)GetDlgItem(IDC_LT_UEEXT);
  190.     int nIndex=pLT->GetCurSel();
  191.     if(nIndex==LB_ERR){
  192.         MessageBox(_T("解除する拡張子を選択して実行してください。"), _T("編集禁止の解除"), MB_OK);
  193.         return;
  194.     }
  195.     CString csItem;
  196.     pLT->GetText(nIndex, csItem);
  197.     pLT->DeleteString(nIndex);
  198.     m_sltExt.remove(csItem);
  199.  
  200. }
  201.  
  202.  
  203.  
  204. BOOL IsSameStringList(list<CString> *psltA, list<CString> *psltB)
  205. {
  206.     list<CString>::iterator p=psltA->begin();
  207.     list<CString>::iterator q=psltB->begin();
  208.     for(; p!=psltA->end() && q!=psltB->end(); p++, q++){
  209.         if(p->CompareNoCase(*q))
  210.             return FALSE;
  211.     }
  212.  
  213.     if(p==psltA->end() && q==psltB->end())
  214.         return TRUE;
  215.     else
  216.         return FALSE;
  217. }
  218.