D:/Zythum/DinoKod/MapEditor/BrushTerrainDialog.cpp

00001 // BrushTerrainDialog.cpp : fichier d'implémentation
00002 //
00003 
00004 #include "stdafx.h"
00005 #include "MapEditor.h"
00006 #include "Common/Console.h"
00007 #include "Common/Directory.h"
00008 #include "BrushTerrainDialog.h"
00009 
00010 #include "Bitmap/Tga.h"
00011 // Boîte de dialogue CBrushTerrainDialog
00012 
00013 IMPLEMENT_DYNAMIC(CBrushTerrainDialog, CDialog)
00014 CBrushTerrainDialog::CBrushTerrainDialog(CWnd* pParent /*=NULL*/)
00015         : CDialog(CBrushTerrainDialog::IDD, pParent)
00016 {
00017         m_ImageSizeX            = 64;
00018         m_ImageSizeY            = 64;
00019         m_ImageSizeX2           = 16;
00020         m_ImageSizeY2           = 16;
00021 
00022 //      m_hMutex = CreateMutex( NULL, FALSE, NULL );
00023 }
00024 
00025 CBrushTerrainDialog::~CBrushTerrainDialog()
00026 {
00027 //      CloseHandle( m_hMutex );
00028 }
00029 
00030 void CBrushTerrainDialog::DoDataExchange(CDataExchange* pDX)
00031 {
00032         CDialog::DoDataExchange(pDX);
00033         DDX_Control(pDX, IDC_LIST_TERRAIN, m_ListTerrain);
00034         DDX_Control(pDX, IDC_TERRAIN_DIRECTORY, m_TerrainDirectory);
00035         DDX_Control(pDX, IDC_BUTTON_VIEWLIST, m_ButtonViewList);
00036         DDX_Control(pDX, IDC_BUTTON_VIEWLARGEICON, m_ButtonViewLargeIcon);
00037         DDX_Control(pDX, IDC_BUTTON_VIEWSMALLICON, m_ButtonViewSmallIcon);
00038         DDX_Control(pDX, IDC_BUTTON_VIEWREPORT, m_ButtonViewReport);
00039         DDX_Control(pDX, IDC_CHECK_TEXTURE, m_CheckTexture);
00040         DDX_Control(pDX, IDC_CHECK_COLOR, m_CheckColor);
00041         DDX_Control(pDX, IDC_BUTTON_COLOR1, m_ButtonColor1);
00042         DDX_Control(pDX, IDC_BUTTON_COLOR2, m_ButtonColor2);
00043 }
00044 
00045 
00046 BEGIN_MESSAGE_MAP(CBrushTerrainDialog, CDialog)
00047         ON_BN_CLICKED(IDC_BUTTON_RELOAD, OnBnClickedButtonReload)
00048         ON_BN_CLICKED(IDC_BUTTON_VIEWLIST, OnBnClickedButtonViewlist)
00049         ON_BN_CLICKED(IDC_BUTTON_VIEWLARGEICON, OnBnClickedButtonViewlargeicon)
00050         ON_BN_CLICKED(IDC_BUTTON_VIEWSMALLICON, OnBnClickedButtonViewsmallicon)
00051         ON_BN_CLICKED(IDC_BUTTON_VIEWREPORT, OnBnClickedButtonViewreport)
00052         ON_BN_CLICKED(IDC_CHECK_TEXTURE, OnBnClickedCheckTexture)
00053         ON_BN_CLICKED(IDC_CHECK_COLOR, OnBnClickedCheckColor)
00054         ON_BN_CLICKED(IDC_BUTTON_SWAPCOLOR, OnBnClickedButtonSwapcolor)
00055 END_MESSAGE_MAP()
00056 
00057 
00058 // Gestionnaires de messages CBrushTerrainDialog
00059 
00060 void CBrushTerrainDialog::OnOK()
00061 {
00062         // TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
00063 
00064         //CDialog::OnOK();
00065 }
00066 
00067 void CBrushTerrainDialog::OnCancel()
00068 {
00069         // TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
00070 
00071         //CDialog::OnCancel();
00072 }
00073 
00074 BOOL CBrushTerrainDialog::OnInitDialog()
00075 {
00076         CDialog::OnInitDialog();
00077 
00078         // TODO :  Ajoutez ici une initialisation supplémentaire
00079 /*      char    pDirectory[1024];
00080         
00081         strcpy( pDirectory, theApp.GetpCurrentDirectory() );
00082         strcat( pDirectory, "\\Maps\\SubTiles" );
00083 
00084         m_TerrainDirectory.SetWindowText( pDirectory );
00085 */
00086 /*      if( g_Directory.GetnPath() )
00087         {
00088                 KStr    sTexDir = g_Directory.GetPath( KStr( "Textures" ), g_Directory.GetnPath() - 1 );
00089                 sTexDir += "Maps/";
00090                 m_TerrainDirectory.SetWindowText( sTexDir );
00091         }*/
00092 
00093         m_ImageList.Create( m_ImageSizeX, m_ImageSizeY, ILC_COLOR32, 0, 1 );
00094         m_ImageList2.Create( m_ImageSizeX2, m_ImageSizeY2, ILC_COLOR32, 0, 1 );
00095         m_ListTerrain.SetImageList( &m_ImageList, LVSIL_NORMAL );
00096         m_ListTerrain.SetImageList( &m_ImageList2, LVSIL_SMALL );
00097 //      m_ListTerrain.SetImageList( &m_ImageList, LVSIL_STATE );
00098 
00099         m_ButtonViewList.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWLIST ) ) );
00100         m_ButtonViewSmallIcon.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWSMLIC ) ) );
00101         m_ButtonViewLargeIcon.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWLRGIC ) ) );
00102         m_ButtonViewReport.SetIcon( LoadIcon( theApp.m_hInstance, MAKEINTRESOURCE( IDI_VWDLTS ) ) );
00103         
00104         m_CheckTexture.SetCheck( BST_CHECKED );
00105         m_CheckColor.SetCheck( BST_UNCHECKED );
00106 
00107         m_ButtonColor1.SetColor( RGB( 255, 255, 255 ) );
00108         m_ButtonColor2.SetColor( RGB( 0, 0, 0 ) );      
00109 
00110         Reload();
00111 
00112         return TRUE;  // return TRUE unless you set the focus to a control
00113         // EXCEPTION : les pages de propriétés OCX devraient retourner FALSE
00114 }
00115 
00116 void CBrushTerrainDialog::Reload()
00117 {
00118         DWORD   ThreadId;
00119 
00120         CreateThread( NULL, 0, ThreadReloadProc, this, 0, &ThreadId );
00121 //      ThreadReloadProc( this );
00122 }
00123 
00124 void CBrushTerrainDialog::SearchTexture( KStr sDir, KStr sShaderName, CFileFind* pFileFind )
00125 {
00126         BOOL bFound = TRUE;
00127         while( bFound )
00128         {
00129                 bFound = pFileFind->FindNextFile();
00130 
00131                 if( pFileFind->IsDots() )
00132                         continue;
00133 
00134                 if( pFileFind->IsDirectory() )
00135                 {
00136                         CFileFind       NewFileFind;
00137 
00138                         KStr    sNewShaderName = sShaderName;
00139                         sNewShaderName += pFileFind->GetFileName();
00140                         sNewShaderName += "/";
00141 
00142                         KStr    sSearchDir = sDir;
00143                         sSearchDir += sNewShaderName;
00144                         sSearchDir += "*";
00145 
00146                         // Repertoire
00147                         if( NewFileFind.FindFile( sSearchDir, 0 ) )
00148                                 SearchTexture( sDir, sNewShaderName, &NewFileFind );
00149                 }
00150                 else
00151                 {
00152                         // Fichier
00153                         CString FileName = pFileFind->GetFileName();
00154                         CString Ext( ".tga" );
00155                         
00156                         FileName.MakeLower();
00157 
00158                         if( ( FileName.GetLength() > Ext.GetLength() ) && ( FileName.Right( Ext.GetLength() ) == Ext ) )
00159                         {
00160                                 // Ajoute le fichier .tga
00161                                 CString         ShaderFileName = sShaderName;
00162                                 ShaderFileName += FileName;
00163 
00164                                 m_ListTerrain.InsertItem( m_ListTerrain.GetItemCount(), ShaderFileName );
00165                         }
00166                 }
00167         }
00168 }
00169 
00170 DWORD WINAPI CBrushTerrainDialog::ThreadReloadProc( LPVOID lpParameter )
00171 {
00172         CBrushTerrainDialog*    pThis = (CBrushTerrainDialog*)lpParameter;
00173 
00174 //      WaitForSingleObject( pThis->m_hMutex, INFINITE );
00175         pThis->m_Mutex.Lock();
00176         
00177         pThis->m_ListTerrain.DeleteAllItems();
00178 
00179         for( s32 Path = 0; Path < g_Directory.GetnPath(); Path ++ )
00180         {
00181                 //
00182                 //      Recherche les images TGA
00183                 //
00184                 CFileFind       FileFind;
00185 
00186                 // Repertoire Textures
00187                 KStr    sDir = g_Directory.GetPath( KStr( "Textures" ), Path );
00188                 // Chemin relatif a Textures
00189                 KStr    sShaderName = "Maps/";
00190                 // Chemin complet de recherche
00191                 KStr    sSearchDir = sDir;
00192                 sSearchDir += sShaderName;
00193                 sSearchDir += "*";
00194 
00195                 if( FileFind.FindFile( sSearchDir, 0 ) )
00196                         pThis->SearchTexture( sDir, sShaderName, &FileFind );
00197         }
00198 
00199         //
00200         //      Charge les images TGA
00201         //
00202         int j;
00203         int     max;
00204 
00205         max = pThis->m_ImageList.GetImageCount();
00206         for( j = 0; j < max; j++ )
00207         {
00208                 pThis->m_ImageList.Remove( 0 );
00209         }
00210 
00211         max = pThis->m_ImageList2.GetImageCount();
00212         for( j = 0; j < max; j++ )
00213         {
00214                 pThis->m_ImageList2.Remove( 0 );
00215         }
00216 
00217         for( int i = 0; i < pThis->m_ListTerrain.GetItemCount(); i ++ )
00218         {
00219                 KTga            Tga;
00220                 char            pFileName[1024];
00221 //              char            pFullName[1024];
00222                 CBitmap         Bitmap;
00223                 CBitmap         MiniBitmap;
00224                 CBitmap         MiniBitmap2;
00225                 CDC                     BitmapDC;
00226                 CDC                     MiniBitmapDC;
00227                 
00228                 pThis->m_ListTerrain.GetItemText( i, 0, pFileName, sizeof( pFileName ) );
00229                 LVITEM  Item;
00230                 Item.iItem              = i;
00231                 Item.iSubItem   = 0;
00232                 Item.mask               = LVIF_IMAGE;
00233                 Item.iImage             = i;
00234                 pThis->m_ListTerrain.SetItem( &Item );
00235 
00236                 // Cherche le TGA
00237                 for( s32 Path = 0; Path < g_Directory.GetnPath(); Path ++ )
00238                 {
00239                         KStr    sDir = g_Directory.GetPath( KStr( "Textures" ), Path );
00240                         sDir += pFileName;
00241                         if( Tga.LoadTGA( sDir ) )
00242                                 break;
00243                 }
00244 
00245 //              CWnd*   pWin = GetDesktopWindow();
00246 //              CDC*    pDC = pWin->GetDC();
00247 //              CDC*    pDC = theApp.GetMainWnd()->GetDC();
00248                 CDC*    pDC = pThis->GetDC();
00249         
00250                 BitmapDC.CreateCompatibleDC( pDC );
00251                 Bitmap.CreateCompatibleBitmap( pDC, Tga.GetWidth(), Tga.GetHeight() );
00252                 BITMAPINFO      bi;
00253                 ZeroMemory( &bi.bmiHeader, sizeof( bi.bmiHeader ) );
00254                 bi.bmiHeader.biSize                     = sizeof( bi.bmiHeader );
00255                 bi.bmiHeader.biWidth            = Tga.GetWidth();
00256                 bi.bmiHeader.biHeight           = -((LONG)Tga.GetHeight());
00257                 bi.bmiHeader.biPlanes           = 1;
00258                 bi.bmiHeader.biCompression      = BI_RGB;
00259                 bi.bmiHeader.biBitCount         = 32;
00260                 ::SetDIBits( BitmapDC.m_hDC, (HBITMAP)Bitmap.m_hObject, 0, Tga.GetHeight(), Tga.GetBitmap(),&bi , DIB_RGB_COLORS );
00261 
00262                 BitmapDC.SelectObject( Bitmap );
00263 
00264         
00265                 // Mini Bitmap 1
00266                 MiniBitmapDC.CreateCompatibleDC( pDC );
00267                 MiniBitmap.CreateCompatibleBitmap( pDC, pThis->m_ImageSizeX, pThis->m_ImageSizeY );
00268                 MiniBitmapDC.SelectObject( &MiniBitmap );
00269                 MiniBitmapDC.SetStretchBltMode( HALFTONE );
00270                 MiniBitmapDC.StretchBlt( 0, 0, pThis->m_ImageSizeX, pThis->m_ImageSizeY, &BitmapDC, 0, 0, Tga.GetWidth(), Tga.GetHeight(), SRCCOPY );
00271                 MiniBitmapDC.DeleteDC();
00272                 pThis->m_ImageList.Add( &MiniBitmap, RGB( 0, 0, 0 ) );
00273 
00274                 // Mini Bitmap 2
00275                 MiniBitmapDC.CreateCompatibleDC( pDC );
00276                 MiniBitmap2.CreateCompatibleBitmap( pDC, pThis->m_ImageSizeX2, pThis->m_ImageSizeY2 );
00277                 MiniBitmapDC.SelectObject( &MiniBitmap2 );
00278                 MiniBitmapDC.SetStretchBltMode( HALFTONE );
00279                 MiniBitmapDC.StretchBlt( 0, 0, pThis->m_ImageSizeX2, pThis->m_ImageSizeY2, &BitmapDC, 0, 0, Tga.GetWidth(), Tga.GetHeight(), SRCCOPY );
00280                 MiniBitmapDC.DeleteDC();
00281                 pThis->m_ImageList2.Add( &MiniBitmap2, RGB( 0, 0, 0 ) );
00282 
00283                 pThis->ReleaseDC( pDC );
00284         }
00285 
00286         pThis->m_ListTerrain.RedrawItems( 0, pThis->m_ListTerrain.GetItemCount() - 1);
00287 
00288 //      ReleaseMutex( pThis->m_hMutex );
00289         pThis->m_Mutex.Unlock();
00290 
00291         return 0;
00292 }
00293 
00294 void CBrushTerrainDialog::OnBnClickedButtonReload()
00295 {
00296         Reload();
00297 }
00298 
00299 void CBrushTerrainDialog::OnBnClickedButtonViewlist()
00300 {
00301         m_ListTerrain.ModifyStyle( LVS_TYPEMASK, LVS_LIST );
00302 }
00303 
00304 void CBrushTerrainDialog::OnBnClickedButtonViewlargeicon()
00305 {
00306         m_ListTerrain.ModifyStyle( LVS_TYPEMASK, LVS_ICON );
00307 }
00308 
00309 void CBrushTerrainDialog::OnBnClickedButtonViewsmallicon()
00310 {
00311         m_ListTerrain.ModifyStyle( LVS_TYPEMASK, LVS_SMALLICON );
00312 }
00313 
00314 void CBrushTerrainDialog::OnBnClickedButtonViewreport()
00315 {
00316         m_ListTerrain.ModifyStyle( LVS_TYPEMASK, LVS_REPORT );
00317 }
00318 
00319 char* CBrushTerrainDialog::GetpTextureName()
00320 {
00321         int     nItem = m_ListTerrain.GetNextItem( -1, LVNI_SELECTED);
00322 
00323         if( nItem == -1 )
00324                 return NULL;
00325 
00326         m_ListTerrain.GetItemText( nItem, 0, m_pCurrentTextureName, sizeof( m_pCurrentTextureName ) );
00327 
00328         // Supprime l'extension
00329         for( int i = (int)strlen( m_pCurrentTextureName ) - 1; i > 0; i -- )
00330         {
00331                 if( m_pCurrentTextureName[i] == '.' )
00332                 {
00333                         m_pCurrentTextureName[i] = '\0';
00334                         break;
00335                 }
00336         }
00337 
00338         return m_pCurrentTextureName;
00339 }
00340 
00341 void CBrushTerrainDialog::OnBnClickedCheckTexture()
00342 {
00343         m_CheckTexture.SetCheck( BST_CHECKED );
00344         m_CheckColor.SetCheck( BST_UNCHECKED );
00345 }
00346 
00347 void CBrushTerrainDialog::OnBnClickedCheckColor()
00348 {
00349         m_CheckTexture.SetCheck( BST_UNCHECKED );
00350         m_CheckColor.SetCheck( BST_CHECKED );
00351 }
00352 
00353 void CBrushTerrainDialog::OnBnClickedButtonSwapcolor()
00354 {
00355         COLORREF        Color;
00356 
00357         Color = m_ButtonColor1.GetColor();
00358         m_ButtonColor1.SetColor( m_ButtonColor2.GetColor() );
00359         m_ButtonColor2.SetColor( Color );       
00360 }

Generated on Sun Mar 25 20:02:12 2007 for Zythum Project by  doxygen 1.5.1-p1