From: <sag...@us...> - 2011-06-15 13:42:52
|
Revision: 902 http://modplug.svn.sourceforge.net/modplug/?rev=902&view=rev Author: saga-games Date: 2011-06-15 13:42:46 +0000 (Wed, 15 Jun 2011) Log Message: ----------- [Imp] When moving a plugin to another slot, plugins routing their output to the selected plugin are now taken into account when selecting a default slot to move the plugin to. Modified Paths: -------------- trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp trunk/OpenMPT/mptrack/MoveFXSlotDialog.h trunk/OpenMPT/mptrack/View_gen.cpp Modified: trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp 2011-06-14 20:23:49 UTC (rev 901) +++ trunk/OpenMPT/mptrack/MoveFXSlotDialog.cpp 2011-06-15 13:42:46 UTC (rev 902) @@ -43,10 +43,11 @@ CDialog::OnOK(); } -void CMoveFXSlotDialog::SetupMove(UINT currentSlot, CArray<UINT, UINT> &emptySlots) -//--------------------------------------------------------------------------------- +void CMoveFXSlotDialog::SetupMove(PLUGINDEX currentSlot, CArray<UINT, UINT> &emptySlots, PLUGINDEX defaultIndex) +//-------------------------------------------------------------------------------------------------------------- { - m_csPrompt.Format("Move plugin in slot %d to the following empty slot:", currentSlot+1); + 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.Copy(emptySlots); } @@ -59,11 +60,19 @@ SetWindowText(m_csTitle); CString slotText; - for (int nSlot=0; nSlot<m_EmptySlots.GetSize(); nSlot++) { - slotText.Format("FX%d", m_EmptySlots[nSlot]+1); + int defaultSlot = 0; + bool foundDefault = false; + for (int nSlot=0; nSlot<m_EmptySlots.GetSize(); nSlot++) + { + slotText.Format("FX%d", m_EmptySlots[nSlot] + 1); m_CbnEmptySlots.SetItemData(m_CbnEmptySlots.AddString(slotText), m_EmptySlots[nSlot]); + if(m_EmptySlots[nSlot] >= m_nDefaultSlot && !foundDefault) + { + defaultSlot = nSlot; + foundDefault = true; + } } - m_CbnEmptySlots.SetCurSel(0); + m_CbnEmptySlots.SetCurSel(defaultSlot); return TRUE; } Modified: trunk/OpenMPT/mptrack/MoveFXSlotDialog.h =================================================================== --- trunk/OpenMPT/mptrack/MoveFXSlotDialog.h 2011-06-14 20:23:49 UTC (rev 901) +++ trunk/OpenMPT/mptrack/MoveFXSlotDialog.h 2011-06-15 13:42:46 UTC (rev 902) @@ -10,7 +10,7 @@ public: CMoveFXSlotDialog(CWnd* pParent = NULL); // standard constructor virtual ~CMoveFXSlotDialog(); - void SetupMove(UINT currentSlot, CArray<UINT, UINT> &emptySlots); + void SetupMove(PLUGINDEX currentSlot, CArray<UINT, UINT> &emptySlots, PLUGINDEX defaultIndex); PLUGINDEX m_nToSlot; @@ -24,6 +24,7 @@ CArray<UINT, UINT> m_EmptySlots; virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support CComboBox m_CbnEmptySlots; + PLUGINDEX m_nDefaultSlot; DECLARE_MESSAGE_MAP() virtual void OnOK(); Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2011-06-14 20:23:49 UTC (rev 901) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2011-06-15 13:42:46 UTC (rev 902) @@ -1325,9 +1325,25 @@ CArray<UINT, UINT> emptySlots; BuildEmptySlotList(emptySlots); - dlg.SetupMove(m_nCurrentPlugin, emptySlots); + // 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; + if(pSndFile) + { + for(PLUGINDEX i = 0; i < m_nCurrentPlugin; i++) + { + const DWORD toPlug = pSndFile->m_MixPlugins[i].Info.dwOutputRouting; + if((toPlug & 0x80) && (toPlug & 0x7F) == m_nCurrentPlugin) + { + defaultIndex = i + 1; + } + } + } - if (dlg.DoModal() == IDOK) { + dlg.SetupMove(m_nCurrentPlugin, emptySlots, defaultIndex); + + if (dlg.DoModal() == IDOK) + { MovePlug(m_nCurrentPlugin, dlg.m_nToSlot); m_CbnPlugin.SetCurSel(dlg.m_nToSlot); OnPluginChanged(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |