From: <sag...@us...> - 2014-02-20 17:32:33
|
Revision: 3739 http://sourceforge.net/p/modplug/code/3739 Author: saga-games Date: 2014-02-20 17:32:24 +0000 (Thu, 20 Feb 2014) Log Message: ----------- [New] Can now clone plugins to another slot. [Mod] OpenMPT: Version is now 1.22.07.23 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp trunk/OpenMPT/mptrack/MoveFXSlotDialog.h trunk/OpenMPT/mptrack/SelectPluginDialog.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2014-02-18 20:53:06 UTC (rev 3738) +++ trunk/OpenMPT/common/versionNumber.h 2014-02-20 17:32:24 UTC (rev 3739) @@ -17,7 +17,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 22 #define VER_MINOR 07 -#define VER_MINORMINOR 22 +#define VER_MINORMINOR 23 //Version string. For example "1.17.02.28" #define MPT_VERSION_STR VER_STRINGIZE(VER_MAJORMAJOR) "." VER_STRINGIZE(VER_MAJOR) "." VER_STRINGIZE(VER_MINOR) "." VER_STRINGIZE(VER_MINORMINOR) Modified: trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp 2014-02-18 20:53:06 UTC (rev 3738) +++ trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp 2014-02-20 17:32:24 UTC (rev 3739) @@ -9,22 +9,26 @@ #include "stdafx.h" -#include "mptrack.h" -#include "afxtempl.h" +#include "Mptrack.h" #include "MoveFXSlotDialog.h" -#include ".\movefxslotdialog.h" -IMPLEMENT_DYNAMIC(CMoveFXSlotDialog, CDialog) -CMoveFXSlotDialog::CMoveFXSlotDialog(CWnd* pParent /*=NULL*/) - : CDialog(CMoveFXSlotDialog::IDD, pParent) +CMoveFXSlotDialog::CMoveFXSlotDialog(CWnd *pParent, PLUGINDEX currentSlot, const std::vector<PLUGINDEX> &emptySlots, PLUGINDEX defaultIndex, bool clone) : + CDialog(CMoveFXSlotDialog::IDD, pParent), + m_nDefaultSlot(defaultIndex), + m_EmptySlots(emptySlots) { + if(clone) + { + m_csPrompt.Format(_T("Clone plugin in slot %d to the following empty slot:"), currentSlot + 1); + m_csTitle = _T("Clone To Slot..."); + } else + { + m_csPrompt.Format(_T("Move plugin in slot %d to the following empty slot:"), currentSlot + 1); + m_csTitle = _T("Move To Slot..."); + } } -CMoveFXSlotDialog::~CMoveFXSlotDialog() -//------------------------------------- -{ -} void CMoveFXSlotDialog::DoDataExchange(CDataExchange* pDX) //-------------------------------------------------------- @@ -35,12 +39,6 @@ } -BEGIN_MESSAGE_MAP(CMoveFXSlotDialog, CDialog) -END_MESSAGE_MAP() - - -// CMoveFXSlotDialog message handlers - void CMoveFXSlotDialog::OnOK() //---------------------------- { @@ -49,16 +47,6 @@ } -void CMoveFXSlotDialog::SetupMove(PLUGINDEX currentSlot, std::vector<PLUGINDEX> &emptySlots, PLUGINDEX defaultIndex) -//------------------------------------------------------------------------------------------------------------------ -{ - m_nDefaultSlot = defaultIndex; - m_csPrompt.Format("Move plugin in slot %d to the following empty slot:", currentSlot + 1); - m_csTitle.Format("Move To Slot.."); - m_EmptySlots = emptySlots; -} - - BOOL CMoveFXSlotDialog::OnInitDialog() //------------------------------------ { @@ -66,10 +54,17 @@ m_EditPrompt.SetWindowText(m_csPrompt); SetWindowText(m_csTitle); - CString slotText; + if(m_EmptySlots.empty()) + { + Reporting::Error("No empty plugin slots are availabe."); + OnCancel(); + return TRUE; + } + + CString slotText; int defaultSlot = 0; bool foundDefault = false; - for(size_t nSlot=0; nSlot < m_EmptySlots.size(); nSlot++) + for(size_t nSlot = 0; nSlot < m_EmptySlots.size(); nSlot++) { slotText.Format("FX%d", m_EmptySlots[nSlot] + 1); m_CbnEmptySlots.SetItemData(m_CbnEmptySlots.AddString(slotText), m_EmptySlots[nSlot]); Modified: trunk/OpenMPT/mptrack/MoveFXSlotDialog.h =================================================================== --- trunk/OpenMPT/mptrack/MoveFXSlotDialog.h 2014-02-18 20:53:06 UTC (rev 3738) +++ trunk/OpenMPT/mptrack/MoveFXSlotDialog.h 2014-02-20 17:32:24 UTC (rev 3739) @@ -9,36 +9,26 @@ #pragma once -#include "afxwin.h" -// CMoveFXSlotDialog dialog - class CMoveFXSlotDialog : public CDialog { - DECLARE_DYNAMIC(CMoveFXSlotDialog) +protected: + const std::vector<PLUGINDEX> &m_EmptySlots; + CString m_csPrompt, m_csTitle; + CEdit m_EditPrompt; + PLUGINDEX m_nDefaultSlot, m_nToSlot; -public: - CMoveFXSlotDialog(CWnd* pParent = NULL); // standard constructor - virtual ~CMoveFXSlotDialog(); - void SetupMove(PLUGINDEX currentSlot, std::vector<PLUGINDEX> &emptySlots, PLUGINDEX defaultIndex); - PLUGINDEX m_nToSlot; - + CComboBox m_CbnEmptySlots; - -// Dialog Data enum { IDD = IDD_MOVEFXSLOT }; +public: + CMoveFXSlotDialog(CWnd *pParent, PLUGINDEX currentSlot, const std::vector<PLUGINDEX> &emptySlots, PLUGINDEX defaultIndex, bool clone); + PLUGINDEX GetSlot() const { return m_nToSlot; } + protected: - CString m_csPrompt, m_csTitle; - CEdit m_EditPrompt; - std::vector<PLUGINDEX> m_EmptySlots; virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - CComboBox m_CbnEmptySlots; - PLUGINDEX m_nDefaultSlot; - DECLARE_MESSAGE_MAP() virtual void OnOK(); -public: - virtual BOOL OnInitDialog(); }; Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2014-02-18 20:53:06 UTC (rev 3738) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2014-02-20 17:32:24 UTC (rev 3739) @@ -165,21 +165,7 @@ { // No effect CriticalSection cs; - if (pCurrentPlugin) - { - pCurrentPlugin->Release(); - changed = true; - } - - // Just in case... - m_pPlugin->pMixPlugin = nullptr; - m_pPlugin->pMixState = nullptr; - - // Remove old state - m_pPlugin->nPluginDataSize = 0; - if (m_pPlugin->pPluginData) delete[] m_pPlugin->pPluginData; - m_pPlugin->pPluginData = nullptr; - + m_pPlugin->Destroy(); // Clear plugin info MemsetZero(m_pPlugin->Info); } Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2014-02-18 20:53:06 UTC (rev 3738) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2014-02-20 17:32:24 UTC (rev 3739) @@ -24,6 +24,9 @@ #include "ChannelManagerDlg.h" #include "SelectPluginDialog.h" #include "../common/StringFixer.h" +#include "VstPresets.h" +#include "../soundlib/FileReader.h" +#include <sstream> IMPLEMENT_SERIAL(CViewGlobals, CFormView, 0) @@ -53,9 +56,9 @@ ON_COMMAND(IDC_BUTTON3, OnSetParameter) ON_COMMAND(IDC_BUTTON4, OnNextPlugin) ON_COMMAND(IDC_BUTTON5, OnPrevPlugin) - ON_COMMAND(IDC_MOVEFXSLOT, OnMovePlugToSlot) + ON_COMMAND(IDC_MOVEFXSLOT, OnMovePlugToSlot) ON_COMMAND(IDC_INSERTFXSLOT,OnInsertSlot) - ON_COMMAND(IDC_CLONEPLUG, OnClonePlug) + ON_COMMAND(IDC_CLONEPLUG, OnClonePlug) ON_COMMAND(IDC_BUTTON6, OnLoadParam) @@ -414,7 +417,7 @@ CheckDlgButton(IDC_CHECK9, pPlugin->IsMasterEffect() ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(IDC_CHECK10, pPlugin->IsBypassed() ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(IDC_CHECK11, pPlugin->IsWetMix() ? BST_CHECKED : BST_UNCHECKED); - CVstPlugin *pVstPlugin = (pPlugin->pMixPlugin) ? (CVstPlugin *)pPlugin->pMixPlugin : NULL; + CVstPlugin *pVstPlugin = (pPlugin->pMixPlugin) ? (CVstPlugin *)pPlugin->pMixPlugin : nullptr; m_BtnEdit.EnableWindow((pVstPlugin != nullptr && (pVstPlugin->HasEditor() || pVstPlugin->GetNumParameters())) ? TRUE : FALSE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_MOVEFXSLOT), (pVstPlugin) ? TRUE : FALSE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_INSERTFXSLOT), (pVstPlugin) ? TRUE : FALSE); @@ -1166,8 +1169,6 @@ void CViewGlobals::OnMovePlugToSlot() //----------------------------------- { - CMoveFXSlotDialog dlg((CWnd*)this); - // If any plugin routes its output to the current plugin, we shouldn't try to move it before that plugin... PLUGINDEX defaultIndex = 0; const CSoundFile *pSndFile = GetDocument() ? (GetDocument()->GetSoundFile()) : nullptr; @@ -1184,12 +1185,13 @@ std::vector<PLUGINDEX> emptySlots; BuildEmptySlotList(emptySlots); - dlg.SetupMove(m_nCurrentPlugin, emptySlots, defaultIndex); - if (dlg.DoModal() == IDOK) - { - MovePlug(m_nCurrentPlugin, dlg.m_nToSlot); - m_CbnPlugin.SetCurSel(dlg.m_nToSlot); + CMoveFXSlotDialog dlg(this, m_nCurrentPlugin, emptySlots, defaultIndex, false); + + if(dlg.DoModal() == IDOK) + { + MovePlug(m_nCurrentPlugin, dlg.GetSlot()); + m_CbnPlugin.SetCurSel(dlg.GetSlot()); OnPluginChanged(); } @@ -1343,6 +1345,7 @@ } else { pSndFile->m_MixPlugins[MAX_MIXPLUGINS - 1].Destroy(); + MemsetZero(pSndFile->m_MixPlugins[MAX_MIXPLUGINS - 1].Info); } } @@ -1372,7 +1375,42 @@ void CViewGlobals::OnClonePlug() //------------------------------ { - //Reporting::Notification("Not yet implemented."); + if(GetCurrentPlugin() == nullptr || GetDocument() == nullptr) + { + MessageBeep(MB_ICONEXCLAMATION); + return; + } + + std::vector<PLUGINDEX> emptySlots; + BuildEmptySlotList(emptySlots); + + CMoveFXSlotDialog dlg(this, m_nCurrentPlugin, emptySlots, 0, true); + + if(dlg.DoModal() == IDOK) + { + CSoundFile &sndFile = GetDocument()->GetrSoundFile(); + const SNDMIXPLUGIN &curPlugin = sndFile.m_MixPlugins[m_nCurrentPlugin]; + SNDMIXPLUGIN &newPlugin = sndFile.m_MixPlugins[dlg.GetSlot()]; + + newPlugin.Destroy(); + MemCopy(newPlugin.Info, curPlugin.Info); + if(theApp.GetPluginManager()->CreateMixPlugin(newPlugin, sndFile)) + { + CVstPlugin *vstPlug = static_cast<CVstPlugin *>(newPlugin.pMixPlugin); + vstPlug->SetCurrentProgram(GetCurrentPlugin()->GetCurrentProgram()); + + std::ostringstream f(std::ios::out | std::ios::binary); + if(VSTPresets::SaveFile(f, *GetCurrentPlugin(), false)) + { + const std::string data = f.str(); + FileReader file(data.c_str(), data.length()); + VSTPresets::LoadFile(file, *vstPlug); + } + } + + m_CbnPlugin.SetCurSel(dlg.GetSlot()); + OnPluginChanged(); + } } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2014-02-18 20:53:06 UTC (rev 3738) +++ trunk/OpenMPT/mptrack/mptrack.rc 2014-02-20 17:32:24 UTC (rev 3739) @@ -1012,7 +1012,7 @@ PUSHBUTTON "Edit...",IDC_BUTTON2,231,191,27,13,0,WS_EX_STATICEDGE PUSHBUTTON "Insert...",IDC_INSERTFXSLOT,154,207,34,13,0,WS_EX_STATICEDGE PUSHBUTTON "Move...",IDC_MOVEFXSLOT,53,207,34,13,0,WS_EX_STATICEDGE - PUSHBUTTON "Clone...",IDC_CLONEPLUG,103,207,34,13,NOT WS_VISIBLE,WS_EX_STATICEDGE + PUSHBUTTON "Clone...",IDC_CLONEPLUG,103,207,34,13,0,WS_EX_STATICEDGE PUSHBUTTON "<<",IDC_BUTTON5,11,191,18,13,NOT WS_TABSTOP,WS_EX_STATICEDGE PUSHBUTTON ">>",IDC_BUTTON4,32,191,18,13,NOT WS_TABSTOP,WS_EX_STATICEDGE EDITTEXT IDC_EDIT13,312,191,94,13,ES_CENTER | ES_AUTOHSCROLL This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |