/* ======================================================================================= Name : DlgFile.cpp Author : vincent lhullier Date :24/07/97 Description : implementation file for file configuration dialog box ======================================================================================= Modification -> Author : Date : Description : ======================================================================================= */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #include "stdafx.h" #include "DlgFile.h" #include "DlgNwCfg.h" #include "HelpId.h" #include "Constant.h" /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* ======================================================================================= Constants And Globals ======================================================================================= */ /* * menu string */ char *g_a_szMenuItem[] = { "Get", "Get recursively", "Not gotten", "Recursive", "Not recursive" }; /* * static control */ #define C_cNbLegend 15 static UINT s_a_uiLegend[C_cNbLegend] = { IDC_TAB_LEGEND, IDC_BUTTON_LEGEND0, IDC_BUTTON_LEGEND4, IDC_STATIC_LEGENDTEXT0, IDC_BUTTON_LEGEND1, IDC_BUTTON_LEGEND5, IDC_STATIC_LEGENDTEXT1, IDC_BUTTON_LEGEND2, IDC_STATIC_LEGENDTEXT2, IDC_BUTTON_LEGEND3, IDC_BUTTON_LEGEND6, IDC_STATIC_LEGENDTEXT3, IDC_BUTTON_LEGEND7, IDC_STATIC_LEGENDTEXT4, IDC_STATIC_KEYS }; /* * button control */ #define C_cNbBottom 7 static UINT s_a_uiBottom[C_cNbBottom] = { IDC_CHECK_OBTAIN, IDC_CHECK_RECURSE, IDC_BUTTON_OBTAINALL, IDC_BUTTON_OBTAINNOTHING, IDC_STATIC_PICTURE, IDCANCEL, IDOK }; /* ======================================================================================= CDialogFileList dialog ======================================================================================= */ /* ---------------------------------------------------------------------------------------- Description : constructor ---------------------------------------------------------------------------------------- */ CDialogFileList::CDialogFileList(CWnd* pParent /*=NULL*/) : CDialog(CDialogFileList::IDD, pParent) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int iImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ //{{AFX_DATA_INIT(CDialogFileList) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT /* load icon */ m_a_hIcon[0] = AfxGetApp()->LoadIcon( IDI_ICON_NOTOBTAIN ); m_a_hIcon[1] = AfxGetApp()->LoadIcon( IDI_ICON_OBTAIN ); m_a_hIcon[2] = AfxGetApp()->LoadIcon( IDI_ICON_OBTAINRECURSE ); m_a_hIcon[3] = AfxGetApp()->LoadIcon( IDI_ICON_OBTAINCAUSERECURSE ); m_a_hIcon[4] = AfxGetApp()->LoadIcon( IDI_ICON_FILENOTOBTAIN ); m_a_hIcon[5] = AfxGetApp()->LoadIcon( IDI_ICON_FILEOBTAIN ); m_a_hIcon[6] = AfxGetApp()->LoadIcon( IDI_ICON_FILEOBTAINCAUSERECURSE ); m_a_hIcon[7] = AfxGetApp()->LoadIcon( IDI_ICON_FILEOBTAINCAUSEPROJOBTAINED ); /* initialize and fill image list */ m_oImageList.Create( 16, 16, TRUE, 8, 5 ); for (iImage = 0; iImage < 8; iImage ++) m_oImageList.Add( m_a_hIcon[ iImage ] ); m_hIconKey = AfxGetApp()->LoadIcon( IDI_ICON_KEY ); m_oLegendImageList.Create( 16, 16, TRUE, 2, 5 ); m_oLegendImageList.Add( m_a_hIcon[ 0 ] ); m_oLegendImageList.Add( m_hIconKey ); m_p_stProjectTree = NULL; m_p_stConfig = NULL; } /* ---------------------------------------------------------------------------------------- Description : destructor ---------------------------------------------------------------------------------------- */ CDialogFileList::~CDialogFileList() { m_oImageList.DeleteImageList(); m_oLegendImageList.DeleteImageList(); } /* ---------------------------------------------------------------------------------------- Description : set config type _cConfigType -> config type ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vSetConfigType( char _cConfigType ) { switch( m_cConfigType = _cConfigType ) { case C_ConfigType_cObtain: m_p_stProjectTree = g_p_stVssRootProject; m_p_stConfig = &g_stIniData.stObtainConfig; m_szRootProject = g_stIniData.szVssPath; break; case C_ConfigType_cUpdate: m_p_stProjectTree = g_p_stLocalRootProject; m_p_stConfig = &g_stIniData.stUpdateConfig; m_szRootProject = g_stIniData.szLocalPath; break; default: m_p_stProjectTree = NULL; m_p_stConfig = NULL; m_szRootProject = NULL; } } /* ---------------------------------------------------------------------------------------- Description : Message map ---------------------------------------------------------------------------------------- */ BEGIN_MESSAGE_MAP(CDialogFileList, CDialog) //{{AFX_MSG_MAP(CDialogFileList) ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_VSS, OnSelchangedTreeVss) ON_BN_CLICKED(IDC_CHECK_OBTAIN, OnCheckObtain) ON_BN_CLICKED(IDC_CHECK_RECURSE, OnCheckRecurse) ON_BN_CLICKED(IDC_BUTTON_OBTAINALL, OnButtonObtainall) ON_BN_CLICKED(IDC_BUTTON_OBTAINNOTHING, OnButtonObtainnothing) ON_BN_CLICKED(IDC_BUTTON_HELP, OnButtonHelp) ON_WM_SIZE() ON_WM_SIZING() ON_WM_DESTROY() ON_WM_MEASUREITEM() ON_WM_DRAWITEM() ON_BN_CLICKED(IDC_BUTTON_LEGEND0, OnButtonLegend0) ON_BN_CLICKED(IDC_BUTTON_LEGEND1, OnButtonLegend1) ON_BN_CLICKED(IDC_BUTTON_LEGEND2, OnButtonLegend2) ON_BN_CLICKED(IDC_BUTTON_LEGEND3, OnButtonLegend3) ON_BN_CLICKED(IDC_BUTTON_LEGEND4, OnButtonLegend4) ON_BN_CLICKED(IDC_BUTTON_LEGEND5, OnButtonLegend5) ON_BN_CLICKED(IDC_BUTTON_LEGEND6, OnButtonLegend6) ON_BN_CLICKED(IDC_BUTTON_LEGEND7, OnButtonLegend7) ON_WM_HELPINFO() ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_LEGEND, OnSelchangeTabLegend) ON_BN_CLICKED(IDC_CHECK_CONFIG, OnCheckConfig) //}}AFX_MSG_MAP END_MESSAGE_MAP() /* ======================================================================================= CDialogFileList specific functions ======================================================================================= */ /* ---------------------------------------------------------------------------------------- Description : Add Recursively sub project in tree ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vAddProjectContentInTree( tdstProject *_p_stProj, BOOL _bGetCauseRecurse ) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int iImage; long lSubProj = 0; tdstProject *p_stSubProj = _p_stProj->d_stSubProject; long lFile = 0; tdstFile *p_stFile = _p_stProj->d_stFile; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ for ( ; lSubProj < _p_stProj->lNumberOfSubProjects; lSubProj ++, p_stSubProj ++) { iImage = (_bGetCauseRecurse) ? 3 : m_fn_iGetProjectImage( p_stSubProj ); p_stSubProj->hTreeItem = m_p_oTree->InsertItem( p_stSubProj->szName, iImage, iImage, _p_stProj->hTreeItem ); m_p_oTree->SetItemData( p_stSubProj->hTreeItem,(DWORD) p_stSubProj ); m_fn_vAddProjectContentInTree ( p_stSubProj, (iImage == 2) || (iImage == 3)); } /* * Adding files */ for (; lFile < _p_stProj->lNumberOfFiles; lFile ++, p_stFile ++) { iImage = (_bGetCauseRecurse) ? 6 : (_p_stProj->bGet ? 7 : (p_stFile->bGet ? 5 : 4)); p_stFile->hTreeItem = m_p_oTree->InsertItem( p_stFile->szName, iImage, iImage, _p_stProj->hTreeItem ); m_p_oTree->SetItemData( p_stFile->hTreeItem,(DWORD) p_stFile ); } } /* ---------------------------------------------------------------------------------------- change recursively image of tree item ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vChangeProjectImage( tdstProject *_p_stProj, BOOL _bGetCauseRecurse ) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int iImage; long lSubProj = 0; tdstProject *p_stSubProj = _p_stProj->d_stSubProject; long lFile = 0; tdstFile *p_stFile = _p_stProj->d_stFile; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* * change recursively sub project image */ for ( ; lSubProj < _p_stProj->lNumberOfSubProjects; lSubProj ++, p_stSubProj ++) { iImage = (_bGetCauseRecurse) ? 3 : m_fn_iGetProjectImage( p_stSubProj ); m_p_oTree->SetItemImage( p_stSubProj->hTreeItem, iImage, iImage ); m_fn_vChangeProjectImage ( p_stSubProj, (iImage == 2) || (iImage == 3)); } /* * change files image */ for (; lFile < _p_stProj->lNumberOfFiles; lFile++, p_stFile ++) { iImage = (_bGetCauseRecurse) ? 6 : ((_p_stProj->bGet) ? 7 : (p_stFile->bGet ? 5 : 4)); m_p_oTree->SetItemImage( p_stFile->hTreeItem, iImage, iImage ); } } /* ---------------------------------------------------------------------------------------- change only image of file in a project ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vChangeProjectFilesImage( tdstProject *_p_stProj ) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int iImage; long lFile = 0; tdstFile *p_stFile = _p_stProj->d_stFile; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ for (; lFile < _p_stProj->lNumberOfFiles; lFile++, p_stFile ++) { if (_p_stProj->bGet && _p_stProj->bRecurse) iImage = 6; else iImage = (_p_stProj->bGet) ? 7 : (p_stFile->bGet ? 5 : 4); m_p_oTree->SetItemImage( p_stFile->hTreeItem, iImage, iImage ); } } /* ---------------------------------------------------------------------------------------- Get image index we must used for a project ---------------------------------------------------------------------------------------- */ int CDialogFileList::m_fn_iGetProjectImage( tdstProject *_p_stProj ) { if (!_p_stProj->bGet) return 0; else if (_p_stProj->bRecurse) return 2; else return 1; } /* ---------------------------------------------------------------------------------------- Set button for given project ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vSetButton( HTREEITEM hItem ) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int iImage, iSelectedImage; BOOL bShow; BOOL bSubProj; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); /* * show button only if state of item can be change * ie item is not obtain recursively */ bShow = ( (iImage != 3 ) && (iImage != 6) && (iImage != 7) ); bSubProj= ( iImage <= 3 ); GetDlgItem( IDC_CHECK_OBTAIN )->ShowWindow( bShow ); GetDlgItem( IDC_CHECK_RECURSE )->ShowWindow( bShow && bSubProj ); if ( bShow ) { ((CButton *) GetDlgItem( IDC_CHECK_OBTAIN ))->SetCheck( ( (iImage == 0) || (iImage == 4) ) ? 0 : 1 ); if ( bSubProj ) { ((CButton *) GetDlgItem( IDC_CHECK_RECURSE ))->SetCheck( (iImage == 2) ? 1 : 0 ); GetDlgItem( IDC_CHECK_RECURSE )->SetWindowText( (iImage == 0) ? "Get Recursively" : "Recurse" ); } } } /* ======================================================================================= CDialogFileList specific functions for file configuration ======================================================================================= */ static char BASED_CODE szFilter[] = "File configuration file(*.fcf)|*.fcf||"; /* ---------------------------------------------------------------------------------------- choose (or create) a configuration ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vChooseConfig( void ) { CNewConfigDialog oNewConfigDlg ( m_cConfigType ); char cConfig; BOOL bNewConfig = FALSE; if (oNewConfigDlg.DoModal() == IDOK) { cConfig = oNewConfigDlg.m_fn_cGetConfigIndex(); if (cConfig == -1) { bNewConfig = TRUE; cConfig = fn_IniD_cGetAvailableConfig(); if (cConfig == -1) MessageBox("Two many config (100)", "Error", MB_ICONSTOP); } if (cConfig != -1) { char szName[80]; strcpy( szName, oNewConfigDlg.m_fn_szGetConfigName() ); m_cConfig = cConfig; GetDlgItem(IDC_EDIT_CONFIGNAME)->SetWindowText( szName ); if (!bNewConfig) { int iImage; if ( !fn_IniD_bGetFileList( m_p_stConfig, cConfig, g_szIniFile ) ) { fn_IniD_vSetSingleFileList( m_p_stConfig, m_szRootProject); } fn_Tree_vRefreshWithFileList( m_p_stProjectTree, m_p_stConfig ); iImage = m_fn_iGetProjectImage( m_p_stProjectTree ); m_p_oTree->SetItemImage(m_p_stProjectTree->hTreeItem, iImage, iImage ); m_fn_vChangeProjectImage( m_p_stProjectTree, iImage == 2 ); } else { long lNbFiles = 0; fn_Tree_vGetNumberOfFilesOrProjectsToGet( m_p_stProjectTree, &lNbFiles ); if (lNbFiles != 0) if (AfxMessageBox( "New config : does I clear all vss tree\nto have an empty configuration ?", MB_ICONQUESTION | MB_YESNO) == IDYES) OnButtonObtainnothing(); } } } else { if ( (m_cConfig != -1) && (g_stIniData.a_cAvailableConfig[ m_cConfig ] == 0) ) { m_cConfig = -1; GetDlgItem(IDC_EDIT_CONFIGNAME)->SetWindowText( "" ); } } m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- Import a configuration ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vImportConfig( void ) { char szFileName[ MAX_PATH ]; char szText[ 512 ]; int iImage; DWORD dwFlags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR; CFileDialog oFD( TRUE, "fcf", "*.fcf", dwFlags, szFilter, this); char cConfig; if ( (cConfig = fn_IniD_cGetAvailableConfig()) == -1) { MessageBox("Can't import : Two many config (100)", "Error", MB_ICONSTOP); return; } if (oFD.DoModal() != IDOK) return; strcpy ( szFileName, (char *) (LPCTSTR) oFD.GetPathName() ); if (!fn_IniD_bGetFileList( m_p_stConfig, 0, szFileName ) ) { sprintf( szText, "Can't read file configuration from file\r\n%s", szFileName ); MessageBox( szText, "Error", MB_OK | MB_ICONERROR ); return; } m_cConfig = cConfig; GetDlgItem(IDC_EDIT_CONFIGNAME)->SetWindowText( m_p_stConfig->szName ); fn_Tree_vRefreshWithFileList( m_p_stProjectTree, m_p_stConfig ); iImage = m_fn_iGetProjectImage( m_p_stProjectTree ); m_p_oTree->SetItemImage(m_p_stProjectTree->hTreeItem, iImage, iImage ); m_fn_vChangeProjectImage( m_p_stProjectTree, iImage == 2 ); m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- Export a configuration ---------------------------------------------------------------------------------------- */ void CDialogFileList::m_fn_vExportConfig( void ) { char szFileName[ MAX_PATH ]; DWORD dwFlags = OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_NOREADONLYRETURN; tdstFileListConfig stFLC; char szConfigName[40]; GetDlgItem( IDC_EDIT_CONFIGNAME )->GetWindowText( szConfigName, 40 ); if ( *szConfigName == 0) { MessageBox("You must set a config name", "Error", MB_ICONSTOP ); return; } sprintf( szFileName, "%s.fcf", szConfigName ); CFileDialog oFD( FALSE, "fcf", szFileName, dwFlags, szFilter, this); if (oFD.DoModal() != IDOK) return; strcpy ( szFileName, (char *) (LPCTSTR) oFD.GetPathName() ); memset( &stFLC, 0, sizeof( tdstFileListConfig ) ); if ( !fn_TREE_bGetFileList( m_p_stProjectTree, &stFLC, 0, szConfigName )) { MessageBox("Can't export : No file to get", "Error", MB_ICONSTOP ); m_p_oTree->SetFocus(); return; } fn_IniD_vWriteFileList( &stFLC, szFileName ); fn_IniD_vFreeFileList( &stFLC ); m_p_oTree->SetFocus(); } /* ======================================================================================= CDialogFileList message handlers ======================================================================================= */ /* ---------------------------------------------------------------------------------------- WM_INITDIALOG ---------------------------------------------------------------------------------------- */ BOOL CDialogFileList::OnInitDialog() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int iImage; TC_ITEM stItem; CTabCtrl *p_oTab; CSize oSize( 32, 0 ); /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ ASSERT( m_p_stConfig != NULL ); ASSERT( m_p_stProjectTree != NULL ); CDialog::OnInitDialog(); /* init tab control */ p_oTab = (CTabCtrl *) GetDlgItem( IDC_TAB_LEGEND ); p_oTab->DeleteAllItems(); p_oTab->SetImageList( &m_oLegendImageList ); oSize = p_oTab->SetItemSize( oSize ); stItem.mask = TCIF_IMAGE; stItem.iImage = 0; p_oTab->InsertItem( 0 , &stItem ); stItem.iImage = 1; p_oTab->InsertItem( 1 , &stItem ); LRESULT lResult; p_oTab->SetCurSel( 0 ); OnSelchangeTabLegend( NULL, &lResult ); m_bExpand = FALSE; /* get Tree ctrl and empty it */ m_p_oTree = (CTreeCtrl *) GetDlgItem( IDC_TREE_VSS ); m_p_oTree->SetImageList( &m_oImageList, TVSIL_NORMAL ); m_p_oTree->DeleteAllItems(); /* fill tree control */ iImage = m_fn_iGetProjectImage( m_p_stProjectTree ); m_p_stProjectTree->hTreeItem = m_p_oTree->InsertItem( m_p_stProjectTree->szName, iImage, iImage ); m_p_oTree->SetItemData(m_p_stProjectTree->hTreeItem, (DWORD) m_p_stProjectTree ); m_fn_vAddProjectContentInTree( m_p_stProjectTree, iImage == 2 ); GetDlgItem( IDC_EDIT_CONFIGNAME )->SetWindowText( m_p_stConfig->szName ); if ( *m_p_stConfig->szName == 0) m_cConfig = -1; else m_cConfig = atoi( m_p_stConfig->szId + 15 ); MoveWindow( &g_stWinPref.stFilePos ); m_p_oTree->Select(m_p_stProjectTree->hTreeItem, TVGN_CARET); m_p_oTree->SetFocus(); return FALSE; } /* ---------------------------------------------------------------------------------------- TVN_SELCHANGED from IDC_TREE_VSS ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnSelchangedTreeVss(NMHDR* pNMHDR, LRESULT* pResult) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*) pNMHDR; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ m_fn_vSetButton( pNMTreeView->itemNew.hItem ); *pResult = 0; } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_CHECK_OBTAIN ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnCheckObtain() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ HTREEITEM hItem = m_p_oTree->GetSelectedItem(); tdstProject *p_stProj; tdstFile *p_stFile; int iImage, iSelectedImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if (hItem == NULL) return; m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); if ( iImage <= 3) { p_stProj = (tdstProject *) m_p_oTree->GetItemData( hItem ); p_stProj->bGet = !p_stProj->bGet; if ( !p_stProj->bGet && p_stProj->bRecurse ) { p_stProj->bRecurse = FALSE; m_fn_vChangeProjectImage( p_stProj, FALSE ); } else { m_fn_vChangeProjectFilesImage( p_stProj ); } iImage = m_fn_iGetProjectImage( p_stProj ); } else { p_stFile = (tdstFile *) m_p_oTree->GetItemData( hItem ); p_stFile->bGet = !p_stFile->bGet; iImage = p_stFile->bGet ? 5 : 4; } m_p_oTree->SetItemImage( hItem, iImage, iImage ); m_fn_vSetButton( hItem ); m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_CHECK_OBTAIN ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnCheckRecurse() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ HTREEITEM hItem = m_p_oTree->GetSelectedItem(); tdstProject *p_stProj; int iImage, iSelectedImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if (hItem == NULL) return; m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); p_stProj = (tdstProject *) m_p_oTree->GetItemData( hItem ); if (iImage == 0) { p_stProj->bGet = TRUE; p_stProj->bRecurse = TRUE; } else p_stProj->bRecurse = !p_stProj->bRecurse; m_fn_vChangeProjectImage( p_stProj, p_stProj->bRecurse ); iImage = m_fn_iGetProjectImage( p_stProj ); m_p_oTree->SetItemImage( hItem, iImage, iImage ); m_fn_vSetButton( hItem ); m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDOK ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnOK() { char szConfigName[40]; GetDlgItem( IDC_EDIT_CONFIGNAME )->GetWindowText( szConfigName, 40 ); if ( *szConfigName == 0) { MessageBox("You must set a config name", "Error", MB_ICONSTOP ); m_fn_vChooseConfig(); return; } if ( !fn_TREE_bGetFileList( m_p_stProjectTree, m_p_stConfig, m_cConfig, szConfigName )) { MessageBox("No folder to get", "Error", MB_ICONSTOP ); m_p_oTree->SetFocus(); return; } CDialog::OnOK(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_BUTTON_OBTAINALL ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonObtainall() { int iImage; fn_IniD_vSetSingleFileList( m_p_stConfig, m_szRootProject); fn_Tree_vRefreshWithFileList( m_p_stProjectTree, m_p_stConfig ); iImage = m_fn_iGetProjectImage( m_p_stProjectTree ); m_p_oTree->SetItemImage( m_p_stProjectTree->hTreeItem, iImage, iImage ); m_fn_vChangeProjectImage( m_p_stProjectTree, (iImage == 2) ); m_fn_vSetButton( m_p_oTree->GetSelectedItem() ); m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_BUTTON_OBTAINNOTHING ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonObtainnothing() { fn_Tree_vGetNothing( m_p_stProjectTree ); m_p_oTree->SetItemImage( m_p_stProjectTree->hTreeItem, 0, 0 ); m_fn_vChangeProjectImage( m_p_stProjectTree, FALSE ); m_fn_vSetButton( m_p_oTree->GetSelectedItem() ); m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_BUTTON_HELP ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonHelp() { ::WinHelp(this->GetSafeHwnd(), C_szHelpFile, HELP_CONTEXT, IDH_J_CONFIGFILELIST ); } /* ---------------------------------------------------------------------------------------- WM_SIZING ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnSizing( UINT nSide, LPRECT lpRect ) { long lWidth = lpRect->right - lpRect->left + 1; long lHeight= lpRect->bottom - lpRect->top + 1; if (lWidth < C_iFileMinWidth) { switch (nSide) { case WMSZ_BOTTOMLEFT: case WMSZ_LEFT: case WMSZ_TOPLEFT: lpRect->left = lpRect->right - C_iFileMinWidth; break; case WMSZ_BOTTOMRIGHT: case WMSZ_RIGHT: case WMSZ_TOPRIGHT: lpRect->right = lpRect->left + C_iFileMinWidth; break; } } if (lHeight < C_iFileMinHeight) { switch (nSide) { case WMSZ_BOTTOM: case WMSZ_BOTTOMLEFT: case WMSZ_BOTTOMRIGHT: lpRect->bottom = lpRect->top + C_iFileMinHeight; break; case WMSZ_TOP: case WMSZ_TOPLEFT: case WMSZ_TOPRIGHT: lpRect->top = lpRect->bottom - C_iFileMinHeight; } } CDialog::OnSizing( nSide, lpRect ); } /* ---------------------------------------------------------------------------------------- WM_SIZE ---------------------------------------------------------------------------------------- */ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* * macro to get a pointer on a CWnd and screen rectangle of a dialog item */ #define M_vGetWndAndRect( _uiItem, _p_oWnd, _p_stRect )\ {\ _p_oWnd = GetDlgItem( _uiItem );\ _p_oWnd->GetWindowRect( _p_stRect );\ ScreenToClient( _p_stRect );\ } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ void CDialogFileList::OnSize(UINT nType, int cx, int cy) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ RECT stRect; CWnd *p_oWnd; char cItem; int iDiffX = (cx - m_iOldCx); int iDiffY = (cy - m_iOldCy); TC_ITEM stItem; CTabCtrl *p_oTab; char szText[10]; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ CDialog::OnSize(nType, cx, cy); p_oWnd = GetDlgItem( IDC_EDIT_CONFIGNAME ); if ( (nType != SIZE_MINIMIZED) && (p_oWnd != NULL) ) { /* * resizing config name edit box */ M_vGetWndAndRect( IDC_EDIT_CONFIGNAME, p_oWnd, &stRect ); stRect.right += iDiffX; p_oWnd->MoveWindow( &stRect, FALSE ); /* * moving legend item */ for (cItem = 0; cItem < C_cNbLegend; cItem ++) { M_vGetWndAndRect( s_a_uiLegend[cItem], p_oWnd, &stRect ); stRect.left += iDiffX; stRect.right += iDiffX; p_oWnd->MoveWindow( &stRect, FALSE ); } /* * resizing tree view */ M_vGetWndAndRect( IDC_TREE_VSS, p_oWnd, &stRect ); stRect.right += iDiffX; stRect.bottom += iDiffY; p_oWnd->MoveWindow( &stRect, FALSE ); /* * resizing and moving help button */ M_vGetWndAndRect( IDC_BUTTON_HELP, p_oWnd, &stRect ); stRect.bottom += iDiffY; stRect.left += iDiffX; stRect.right += iDiffX; p_oWnd->MoveWindow( & stRect, FALSE ); /* * moving bottom item */ for (cItem = 0; cItem < C_cNbBottom; cItem ++) { M_vGetWndAndRect( s_a_uiBottom[cItem], p_oWnd, &stRect ); stRect.top += iDiffY; stRect.bottom += iDiffY; p_oWnd->MoveWindow( &stRect, FALSE ); } /* * special for legend */ if (m_bExpand && (cy < 500) ) { m_bExpand = FALSE; M_vGetWndAndRect( IDC_TAB_LEGEND, p_oWnd, &stRect ); stRect.bottom -= 200; p_oWnd->MoveWindow( &stRect, FALSE ); M_vGetWndAndRect( IDC_STATIC_KEYS, p_oWnd, &stRect ); stRect.bottom -= 240; stRect.top -= 240; p_oWnd->MoveWindow( &stRect, FALSE ); M_vGetWndAndRect( IDC_BUTTON_HELP, p_oWnd, &stRect ); stRect.top -= 200; stRect.bottom = cy - 5; p_oWnd->MoveWindow( &stRect, FALSE ); p_oTab = (CTabCtrl *) GetDlgItem( IDC_TAB_LEGEND ); stItem.mask = TCIF_IMAGE; p_oTab->SetItemSize( CSize(32,0) ); p_oTab->DeleteAllItems(); stItem.iImage = 0; p_oTab->InsertItem( 0 , &stItem ); stItem.iImage = 1; p_oTab->InsertItem( 1 , &stItem ); LRESULT lResult; p_oTab->SetCurSel( m_bLegend ? 0 : 1 ); OnSelchangeTabLegend( NULL, &lResult ); } else if (!m_bExpand && (cy >= 500) ) { M_vGetWndAndRect( IDC_TAB_LEGEND, p_oWnd, &stRect ); stRect.bottom += 200; p_oWnd->MoveWindow( &stRect, FALSE ); M_vGetWndAndRect( IDC_STATIC_KEYS, p_oWnd, &stRect ); stRect.bottom += 240; stRect.top += 240; p_oWnd->MoveWindow( &stRect, FALSE ); M_vGetWndAndRect( IDC_BUTTON_HELP, p_oWnd, &stRect ); stRect.top += 200; stRect.bottom = cy - 5; p_oWnd->MoveWindow( &stRect, FALSE ); p_oTab = (CTabCtrl *) GetDlgItem( IDC_TAB_LEGEND ); p_oTab->SetItemSize( CSize(64,0) ); stItem.mask = TCIF_TEXT; p_oTab->DeleteAllItems(); stItem.pszText = szText; strcpy( szText, "Legend" ); p_oTab->InsertItem( 0 , &stItem ); if ( !m_bLegend ) { LRESULT lResult; p_oTab->SetCurSel( 0 ); OnSelchangeTabLegend( NULL, &lResult ); m_bLegend = FALSE; } GetDlgItem( IDC_STATIC_KEYS )->ShowWindow( TRUE ); m_bExpand = TRUE; } Invalidate(); } m_iOldCx = cx; m_iOldCy = cy; } /* ---------------------------------------------------------------------------------------- WM_DESTROY ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnDestroy() { GetWindowRect( &g_stWinPref.stFilePos ); CDialog::OnDestroy(); } /* ---------------------------------------------------------------------------------------- Pre translate message ---------------------------------------------------------------------------------------- */ BOOL CDialogFileList::PreTranslateMessage(MSG* pMsg) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ CWnd *pWnd = GetDlgItem(IDC_TREE_VSS); /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if (pMsg->message == WM_RBUTTONDOWN) { if ( pMsg->hwnd == GetDlgItem(IDC_TREE_VSS)->GetSafeHwnd() ) { HTREEITEM hItem; UINT uiFlags; CPoint oPoint( LOWORD( pMsg->lParam), HIWORD( pMsg->lParam ) ); CMenu oMenu; int iImage, iSelectedImage; char szText[40]; DWORD dwItemData1, dwItemData2; if ( (hItem = m_p_oTree->HitTest( oPoint, &uiFlags )) != NULL) { m_p_oTree->SelectItem( hItem ); m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); oMenu.CreatePopupMenu(); if ( (iImage != 3) && (iImage != 6) && (iImage != 7)) { switch (iImage) { case 0: dwItemData1 = MAKELPARAM( 1, 0 ); dwItemData2 = MAKELPARAM( 2, 1 ); break; case 1: dwItemData1 = MAKELPARAM( 0, 2 ); dwItemData2 = MAKELPARAM( 2, 3 ); break; case 2: dwItemData1 = MAKELPARAM( 0, 2 ); dwItemData2 = MAKELPARAM( 1, 4 ); break; case 4: dwItemData1 = MAKELPARAM( 5, 0 ); break; case 5: dwItemData1 = MAKELPARAM( 4, 2 ); break; } oMenu.AppendMenu(MF_OWNERDRAW, 1, (LPCTSTR) dwItemData1); if (iImage < 3) oMenu.AppendMenu(MF_OWNERDRAW, 2, (LPCTSTR) dwItemData2); oMenu.AppendMenu( MF_SEPARATOR ); } GetDlgItem( IDC_BUTTON_OBTAINALL ) ->GetWindowText( szText, 40 ); oMenu.AppendMenu(MF_STRING, 3, szText ); GetDlgItem( IDC_BUTTON_OBTAINNOTHING ) ->GetWindowText( szText, 40 ); oMenu.AppendMenu(MF_STRING, 4, szText ); m_p_oTree->ClientToScreen( (POINT *) &oPoint ); oMenu.TrackPopupMenu( TPM_RIGHTBUTTON, oPoint.x, oPoint.y, this ); oMenu.DestroyMenu(); } } } else if (pMsg->message == WM_CHAR) { if (pMsg->hwnd == m_p_oTree->GetSafeHwnd() ) { HTREEITEM hItem = NULL; HTREEITEM hNextItem = NULL; POINT stPoint; char cChar = (char) pMsg->wParam; if ( (cChar == 7) || (cChar == 14) || (cChar == 18) ) { hItem = m_p_oTree->GetSelectedItem(); if (hItem) if (GetKeyState( VK_SHIFT ) & 0x8000 ) hNextItem = m_p_oTree->GetNextItem( hItem, TVGN_PREVIOUSVISIBLE ); else hNextItem = m_p_oTree->GetNextItem( hItem, TVGN_NEXTVISIBLE ); cChar = cChar - 7 + 'g'; } else if ( strchr("grn", cChar ) ) { hItem = m_p_oTree->GetSelectedItem(); } else if ( strchr("GRN", cChar ) ) { UINT uiFlags; GetCursorPos( &stPoint ); m_p_oTree->ScreenToClient( &stPoint ); hItem = m_p_oTree->HitTest( stPoint, &uiFlags ); if (hItem) { m_p_oTree->SelectItem( hItem ); cChar = tolower( cChar ); } } if (hItem) { int iImage, iSelectedImage; m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); switch( cChar ) { case 'g': if ( (iImage == 0) || (iImage == 4) ) OnCheckObtain(); else if (iImage == 2) OnCheckRecurse(); break; case 'n' : if ( (iImage == 1) || (iImage == 2) || (iImage == 5) ) OnCheckObtain(); break; case 'r' : if ((iImage == 0) || (iImage == 1)) OnCheckRecurse(); break; } if (hNextItem) m_p_oTree->SelectItem( hNextItem ); return 1; } } } return CDialog::PreTranslateMessage(pMsg); } /* ---------------------------------------------------------------------------------------- On command ---------------------------------------------------------------------------------------- */ BOOL CDialogFileList::OnCommand(WPARAM wParam, LPARAM lParam) { if ( (lParam == 0) && (HIWORD( wParam ) == 0) ) { switch (LOWORD( wParam ) ) { case 1: OnCheckObtain(); return TRUE; case 2: OnCheckRecurse(); return TRUE; case 3: OnButtonObtainall(); return TRUE; case 4: OnButtonObtainnothing(); return TRUE; case IDM_CONFIGCHOOSE: m_fn_vChooseConfig(); return TRUE; case IDM_CONFIGIMPORT: m_fn_vImportConfig(); return TRUE; case IDM_CONFIGEXPORT: m_fn_vExportConfig(); return TRUE; } } return CDialog::OnCommand(wParam, lParam); } /* ---------------------------------------------------------------------------------------- WM_MEASUREITEM ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMIS) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ char *p_szItem = g_a_szMenuItem[ HIWORD(lpMIS->itemData) ]; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ lpMIS->itemHeight = 16; lpMIS->itemWidth = 20 + GetDC()->GetOutputTextExtent( p_szItem, strlen( p_szItem ) ).cx; //CDialog::OnMeasureItem(nIDCtl, lpMIS); } /* ---------------------------------------------------------------------------------------- WM_DRAWITEM ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ CDC *p_oDC = CDC::FromHandle( lpDIS->hDC ); POINT stPoint; int iImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if (nIDCtl == 0) // menu item { char *p_szItem = g_a_szMenuItem[ HIWORD(lpDIS->itemData) ]; iImage = LOWORD( lpDIS->itemData ); stPoint.x = lpDIS->rcItem.left; stPoint.y = lpDIS->rcItem.top; m_oImageList.Draw( p_oDC, iImage, stPoint, ILD_NORMAL ); lpDIS->rcItem.left += 20; p_oDC->DrawText( p_szItem, strlen(p_szItem), &lpDIS->rcItem, DT_VCENTER | DT_SINGLELINE ); } else // legend button { stPoint.x = lpDIS->rcItem.left + 2; stPoint.y = lpDIS->rcItem.top + 2; switch( nIDCtl ) { case IDC_BUTTON_LEGEND0: iImage = 0; break; case IDC_BUTTON_LEGEND1: iImage = 1; break; case IDC_BUTTON_LEGEND2: iImage = 2; break; case IDC_BUTTON_LEGEND3: iImage = 3; break; case IDC_BUTTON_LEGEND4: iImage = 4; break; case IDC_BUTTON_LEGEND5: iImage = 5; break; case IDC_BUTTON_LEGEND6: iImage = 6; break; case IDC_BUTTON_LEGEND7: iImage = 7; break; } m_oImageList.Draw( p_oDC, iImage, stPoint, ILD_NORMAL ); p_oDC->Draw3dRect( &lpDIS->rcItem, GetSysColor( COLOR_3DHILIGHT ), GetSysColor( COLOR_3DDKSHADOW ) ); } //CDialog::OnDrawItem(nIDCtl, lpDIS); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_BUTTON_LEGEND0 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend0() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ HTREEITEM hItem; int iImage, iSelectedImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ hItem = m_p_oTree->GetSelectedItem(); if (hItem != NULL) { m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); if ( (iImage == 1) || (iImage == 2) ) OnCheckObtain(); } m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_BUTTON_LEGEND1 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend1() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ HTREEITEM hItem; int iImage, iSelectedImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ hItem = m_p_oTree->GetSelectedItem(); if (hItem != NULL) { m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); if (iImage == 0) OnCheckObtain(); else if (iImage == 2) OnCheckRecurse(); } m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_BUTTON_LEGEND2 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend2() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ HTREEITEM hItem; int iImage, iSelectedImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ hItem = m_p_oTree->GetSelectedItem(); if (hItem != NULL) { m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); if ((iImage == 0) || (iImage == 1)) OnCheckRecurse(); } m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- BN_CLICKED on IDC_BUTTON_LEGEND3 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend3() { m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- Description : BN_CLICKED on IDC_BUTTON_LEGEND4 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend4() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ HTREEITEM hItem; int iImage, iSelectedImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ hItem = m_p_oTree->GetSelectedItem(); if (hItem != NULL) { m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); if ( iImage == 5 ) OnCheckObtain(); } m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- Description : BN_CLICKED on IDC_BUTTON_LEGEND5 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend5() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ HTREEITEM hItem; int iImage, iSelectedImage; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ hItem = m_p_oTree->GetSelectedItem(); if (hItem != NULL) { m_p_oTree->GetItemImage( hItem, iImage, iSelectedImage ); if ( iImage == 4 ) OnCheckObtain(); } m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- Description : BN_CLICKED on IDC_BUTTON_LEGEND6 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend6() { m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- Description : BN_CLICKED on IDC_BUTTON_LEGEND6 ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnButtonLegend7() { m_p_oTree->SetFocus(); } /* ---------------------------------------------------------------------------------------- Description : WM_HELPINFO ---------------------------------------------------------------------------------------- */ BOOL CDialogFileList::OnHelpInfo(HELPINFO* pHelpInfo) { ::WinHelp(this->GetSafeHwnd(), C_szHelpFile, HELP_CONTEXT, IDH_J_CONFIGFILELIST ); return TRUE; } /* ---------------------------------------------------------------------------------------- Description : TCN_SELCHANGE on IDC_TAB_LEGEND tab control ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnSelchangeTabLegend(NMHDR* pNMHDR, LRESULT* pResult) { char cItem; int iTab = ((CTabCtrl *) GetDlgItem( IDC_TAB_LEGEND ))->GetCurSel(); if (!m_bExpand) { m_bLegend = (iTab == 0); /* * showing / hiding legend item */ for (cItem = 1; cItem < C_cNbLegend - 1; cItem ++) { GetDlgItem( s_a_uiLegend[cItem] )->ShowWindow( m_bLegend ); } /* * showing / hiding legend key item */ for ( ; cItem < C_cNbLegend; cItem ++) { GetDlgItem( s_a_uiLegend[cItem] )->ShowWindow( !m_bLegend ); } } *pResult = 0; } /* ---------------------------------------------------------------------------------------- Description : BN_CLICKED on IDC_CHECK_CONFIG ---------------------------------------------------------------------------------------- */ void CDialogFileList::OnCheckConfig() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ CButton *p_oCheck = ((CButton *) GetDlgItem (IDC_CHECK_CONFIG)); RECT stRect; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if ( p_oCheck->GetCheck() == 1 ) { CMenu oMenu; oMenu.CreatePopupMenu(); oMenu.AppendMenu( MF_STRING | MF_ENABLED, IDM_CONFIGCHOOSE, "Choose / create"); oMenu.AppendMenu( MF_STRING | MF_ENABLED, IDM_CONFIGIMPORT, "Import"); oMenu.AppendMenu( MF_STRING | MF_ENABLED, IDM_CONFIGEXPORT, "Export"); p_oCheck->GetWindowRect(&stRect); oMenu.TrackPopupMenu( TPM_LEFTBUTTON, stRect.left, stRect.bottom, this ); oMenu.DestroyMenu(); p_oCheck->SetCheck( 0 ); } }