00001
00002
00003
00004 #include "stdafx.h"
00005 #include "MapEditor.h"
00006 #include "BrushObjectsDialog.h"
00007
00008
00009
00010
00011 IMPLEMENT_DYNAMIC(CBrushObjectsDialog, CDialog)
00012 CBrushObjectsDialog::CBrushObjectsDialog(CWnd* pParent )
00013 : CDialog(CBrushObjectsDialog::IDD, pParent)
00014 {
00015 m_hMutex = CreateMutex( NULL, FALSE, NULL );
00016 }
00017
00018 CBrushObjectsDialog::~CBrushObjectsDialog()
00019 {
00020 CloseHandle( m_hMutex );
00021 }
00022
00023 void CBrushObjectsDialog::DoDataExchange(CDataExchange* pDX)
00024 {
00025 CDialog::DoDataExchange(pDX);
00026 DDX_Control(pDX, IDC_LIST_OBJECTS, m_ListObjects);
00027 DDX_Control(pDX, IDC_OBJECTS_DIRECTORY, m_ObjectsDirectory);
00028 DDX_Control(pDX, IDC_BUTTON_VIEWLIST, m_ButtonViewList);
00029 DDX_Control(pDX, IDC_BUTTON_VIEWLARGEICON, m_ButtonViewLargeIcon);
00030 DDX_Control(pDX, IDC_BUTTON_VIEWSMALLICON, m_ButtonViewSmallIcon);
00031 DDX_Control(pDX, IDC_BUTTON_VIEWREPORT, m_ButtonViewReport);
00032 DDX_Control(pDX, IDC_RADIO_CREATE, m_ButtonCreate);
00033 DDX_Control(pDX, IDC_RADIO_MOVE, m_ButtonMove);
00034 DDX_Control(pDX, IDC_RADIO_DELETE, m_ButtonDelete);
00035 }
00036
00037
00038 BEGIN_MESSAGE_MAP(CBrushObjectsDialog, CDialog)
00039 ON_BN_CLICKED(IDC_BUTTON_VIEWLIST, OnBnClickedButtonViewlist)
00040 ON_BN_CLICKED(IDC_BUTTON_VIEWLARGEICON, OnBnClickedButtonViewlargeicon)
00041 ON_BN_CLICKED(IDC_BUTTON_VIEWSMALLICON, OnBnClickedButtonViewsmallicon)
00042 ON_BN_CLICKED(IDC_BUTTON_VIEWREPORT, OnBnClickedButtonViewreport)
00043 ON_BN_CLICKED(IDC_BUTTON_RELOAD, OnBnClickedButtonReload)
00044 ON_BN_CLICKED(IDC_RADIO_CREATE, OnBnClickedRadioCreate)
00045 ON_BN_CLICKED(IDC_RADIO_DELETE, OnBnClickedRadioDelete)
00046 ON_BN_CLICKED(IDC_RADIO_MOVE, OnBnClickedRadioMove)
00047 END_MESSAGE_MAP()
00048
00049
00050
00051
00052 BOOL CBrushObjectsDialog::OnInitDialog()
00053 {
00054 CDialog::OnInitDialog();
00055
00056
00057 char pDirectory[1024];
00058
00059 strcpy( pDirectory, theApp.GetpCurrentDirectory() );
00060 strcat( pDirectory, "\\Models\\Objects" );
00061
00062 m_ObjectsDirectory.SetWindowText( pDirectory );
00063
00064 m_ButtonViewList.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWLIST ) ) );
00065 m_ButtonViewSmallIcon.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWSMLIC ) ) );
00066 m_ButtonViewLargeIcon.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWLRGIC ) ) );
00067 m_ButtonViewReport.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWDLTS ) ) );
00068
00069 m_ListObjects.ModifyStyle( LVS_TYPEMASK, LVS_LIST );
00070
00071 m_ButtonCreate.SetCheck( BST_CHECKED );
00072
00073 Reload();
00074
00075 return TRUE;
00076
00077 }
00078
00079 void CBrushObjectsDialog::OnOK()
00080 {
00081
00082
00083
00084 }
00085
00086 void CBrushObjectsDialog::OnCancel()
00087 {
00088
00089
00090
00091 }
00092
00093 void CBrushObjectsDialog::Reload()
00094 {
00095 DWORD ThreadId;
00096
00097 CreateThread( NULL, 0, ThreadReloadProc, this, 0, &ThreadId );
00098 }
00099
00100 DWORD WINAPI CBrushObjectsDialog::ThreadReloadProc( LPVOID lpParameter )
00101 {
00102 CFileFind FileFind;
00103
00104 CBrushObjectsDialog* pThis = (CBrushObjectsDialog*)lpParameter;
00105
00106 WaitForSingleObject( pThis->m_hMutex, INFINITE );
00107
00108 pThis->m_ListObjects.DeleteAllItems();
00109
00110
00111 CString sDir;
00112 pThis->m_ObjectsDirectory.GetWindowText( sDir );
00113 pThis->SearchModels( sDir, sDir );
00114
00115
00116 pThis->m_ListObjects.RedrawItems( 0, pThis->m_ListObjects.GetItemCount() - 1);
00117
00118 ReleaseMutex( pThis->m_hMutex );
00119
00120 return 0;
00121 }
00122
00123 void CBrushObjectsDialog::SearchModels( CString& sModelDir, CString& sDir )
00124 {
00125 CString sSearchDir;
00126 CFileFind FileFind;
00127
00128 sSearchDir = sDir + "\\*";
00129
00130 BOOL bWorking = FileFind.FindFile( sSearchDir, 0 );
00131 while( bWorking )
00132 {
00133 bWorking = FileFind.FindNextFile();
00134 if( FileFind.IsDirectory() )
00135 {
00136 if( FileFind.GetFilePath().Right( 1 ).CompareNoCase( "." ) == 0 )
00137 continue;
00138 if( FileFind.GetFilePath().Right( 2 ).CompareNoCase( ".." ) == 0 )
00139 continue;
00140 SearchModels( sModelDir, FileFind.GetFilePath() );
00141 }
00142
00143 if( FileFind.GetFilePath().Right( 3 ).CompareNoCase( "mdl" ) == 0 )
00144 {
00145 int i = sModelDir.GetLength();
00146 int j = FileFind.GetFilePath().GetLength();
00147 m_ListObjects.InsertItem( m_ListObjects.GetItemCount(), FileFind.GetFilePath().Right( j - i - 1 ) );
00148 }
00149
00150
00151
00152
00153
00154
00155
00156
00157 }
00158 }
00159
00160
00161 void CBrushObjectsDialog::OnBnClickedButtonViewlist()
00162 {
00163 m_ListObjects.ModifyStyle( LVS_TYPEMASK, LVS_LIST );
00164 }
00165
00166 void CBrushObjectsDialog::OnBnClickedButtonViewlargeicon()
00167 {
00168 m_ListObjects.ModifyStyle( LVS_TYPEMASK, LVS_ICON );
00169 }
00170
00171 void CBrushObjectsDialog::OnBnClickedButtonViewsmallicon()
00172 {
00173 m_ListObjects.ModifyStyle( LVS_TYPEMASK, LVS_SMALLICON );
00174 }
00175
00176 void CBrushObjectsDialog::OnBnClickedButtonViewreport()
00177 {
00178 m_ListObjects.ModifyStyle( LVS_TYPEMASK, LVS_REPORT );
00179 }
00180
00181 char* CBrushObjectsDialog::GetpObjectsName()
00182 {
00183 int nItem = m_ListObjects.GetNextItem( -1, LVNI_SELECTED);
00184
00185 if( nItem == -1 )
00186 return NULL;
00187
00188 m_ListObjects.GetItemText( nItem, 0, m_pCurrentObjectsName, sizeof( m_pCurrentObjectsName ) );
00189
00190
00191 for( int i = (int)strlen( m_pCurrentObjectsName ) - 1; i > 0; i -- )
00192 {
00193 if( m_pCurrentObjectsName[i] == '.' )
00194 {
00195 m_pCurrentObjectsName[i] = '\0';
00196 break;
00197 }
00198 }
00199
00200 return m_pCurrentObjectsName;
00201 }
00202
00203
00204 void CBrushObjectsDialog::OnBnClickedButtonReload()
00205 {
00206 Reload();
00207 }
00208
00209 void CBrushObjectsDialog::OnBnClickedRadioCreate()
00210 {
00211 m_ListObjects.EnableWindow( TRUE );
00212 }
00213
00214 void CBrushObjectsDialog::OnBnClickedRadioMove()
00215 {
00216 m_ListObjects.EnableWindow( FALSE );
00217 }
00218
00219 void CBrushObjectsDialog::OnBnClickedRadioDelete()
00220 {
00221 m_ListObjects.EnableWindow( FALSE );
00222 }
00223