From b9fe8abfeab3b994a82072e237289f1fb5fe0f3d Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 27 Sep 2005 09:57:13 +0000 Subject: [PATCH] add "Create Song from music file" function --- stepmania/src/smpackage/MainMenuDlg.cpp | 97 +++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/stepmania/src/smpackage/MainMenuDlg.cpp b/stepmania/src/smpackage/MainMenuDlg.cpp index 42689e23e5..28486f5b66 100644 --- a/stepmania/src/smpackage/MainMenuDlg.cpp +++ b/stepmania/src/smpackage/MainMenuDlg.cpp @@ -8,6 +8,7 @@ #include "SmpackageExportDlg.h" #include "onvertThemeDlg.h" #include "ChangeGameSettings.h" +#include "RageUtil.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -43,6 +44,7 @@ BEGIN_MESSAGE_MAP(MainMenuDlg, CDialog) ON_BN_CLICKED(IDC_EDIT_INSTALLATIONS, OnEditInstallations) ON_BN_CLICKED(IDC_ANALYZE_ELEMENTS, OnAnalyzeElements) ON_BN_CLICKED(IDC_CHANGE_API, OnChangeApi) + ON_BN_CLICKED(IDC_CREATE_SONG, OnCreateSong) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -77,3 +79,98 @@ void MainMenuDlg::OnChangeApi() ChangeGameSettings dlg; int nResponse = dlg.DoModal(); } + +CString GetLastErrorString() +{ + LPVOID lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + // Process any inserts in lpMsgBuf. + // ... + // Display the string. + CString s = (LPCTSTR)lpMsgBuf; + // Free the buffer. + LocalFree( lpMsgBuf ); + + return s; +} + +void MainMenuDlg::OnCreateSong() +{ + // TODO: Add your control notification handler code here + CFileDialog dialog ( + TRUE, // file open? + NULL, // default file extension + NULL, // default file name + OFN_HIDEREADONLY | OFN_NOCHANGEDIR, // flags + "Music file (*.mp3;*.ogg)|*.mp3;*.ogg|||" + ); + int iRet = dialog.DoModal(); + CString sMusicFile = dialog.GetPathName(); + if( iRet != IDOK ) + return; + + CString sFileNameNoExt, sExt, sThrowAway; + splitrelpath( + sMusicFile, + sThrowAway, + sFileNameNoExt, + sExt + ); + + BOOL bSuccess; + + CString sSongDirectory = "Songs\\MyCreations\\"; + CreateDirectory( sSongDirectory, NULL ); // ok if this fails. It will already exist if we've created another song. + DWORD dwError = ::GetLastError(); + sSongDirectory += sFileNameNoExt; + bSuccess = CreateDirectory( sSongDirectory, NULL ); // CreateDirectory doesn't like a trailing slash + if( !bSuccess ) + { + MessageBox( "Failed to song directory '" + sSongDirectory + "': " + GetLastErrorString() ); + return; + } + sSongDirectory += "\\"; + + CString sNewMusicFile = sSongDirectory + sFileNameNoExt + "." + sExt; + bSuccess = CopyFile( sMusicFile, sNewMusicFile, TRUE ); + if( !bSuccess ) + { + MessageBox( "Failed to copy music file to '" + sNewMusicFile + "': " + GetLastErrorString() ); + return; + } + + // create a blank .sm file + CString sNewSongFile = sSongDirectory + sFileNameNoExt + ".sm"; + FILE *fp = fopen( sNewSongFile, "w" ); + if( fp == NULL ) + { + MessageBox( "Failed to create the song file '" + sNewSongFile + "'" ); + return; + } + fclose( fp ); + + MessageBox( "Success. Created the song '" + sSongDirectory + "'" ); +} + +BOOL MainMenuDlg::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // TODO: Add extra initialization here + TCHAR szCurDir[MAX_PATH]; + GetCurrentDirectory( ARRAYSIZE(szCurDir), szCurDir ); + GetDlgItem( IDC_EDIT_INSTALLATION )->SetWindowText( szCurDir ); + + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +}