From: <sag...@us...> - 2009-11-27 18:52:27
|
Revision: 423 http://modplug.svn.sourceforge.net/modplug/?rev=423&view=rev Author: saga-games Date: 2009-11-27 18:52:15 +0000 (Fri, 27 Nov 2009) Log Message: ----------- [New] Treeview: Sequences can be inserted, duplicated and deleted by right-clicking the sequence items [Fix] Pattern editor: When recording live from the keyboard, SDx shouldn't exceed the song speed anymore. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 18:52:15 UTC (rev 423) @@ -608,11 +608,14 @@ // Order item ORDERINDEX nOrd = (ORDERINDEX)(lParam & 0x7FFF); SEQUENCEINDEX nSeq = (SEQUENCEINDEX)(lParam >> 16); - if((nSeq < m_pSndFile->Order.GetNumSequences()) && (nOrd < m_pSndFile->Order.GetSequence(nSeq).size())) + if(nSeq < m_pSndFile->Order.GetNumSequences()) { m_OrderList.SelectSequence(nSeq); - m_OrderList.SetCurSel(nOrd); - SetCurrentPattern(m_pSndFile->Order[nOrd]); + if((nOrd < m_pSndFile->Order.GetSequence(nSeq).size())) + { + m_OrderList.SetCurSel(nOrd); + SetCurrentPattern(m_pSndFile->Order[nOrd]); + } } } if (m_hWndView) Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-27 18:52:15 UTC (rev 423) @@ -4210,7 +4210,9 @@ if (usePlaybackPosition && nTick) { // avoid SD0 which will be mis-interpreted if (p->command == 0) { //make sure we don't overwrite any existing commands. p->command = (pSndFile->TypeIsS3M_IT_MPT()) ? CMD_S3MCMDEX : CMD_MODCMDEX; - p->param = 0xD0 + min(0xF, nTick); + UINT maxSpeed = 0x0F; + if(pSndFile->m_nMusicSpeed > 0) maxSpeed = min(0x0F, pSndFile->m_nMusicSpeed - 1); + p->param = 0xD0 + min(maxSpeed, nTick); } } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-27 18:52:15 UTC (rev 423) @@ -73,6 +73,8 @@ ON_COMMAND(ID_MODTREE_MUTE, OnMuteTreeItem) ON_COMMAND(ID_MODTREE_SOLO, OnSoloTreeItem) ON_COMMAND(ID_MODTREE_UNMUTEALL, OnUnmuteAllTreeItem) + ON_COMMAND(ID_MODTREE_DUPLICATE, OnDuplicateTreeItem) + ON_COMMAND(ID_MODTREE_INSERT, OnInsertTreeItem) // -> CODE#0023 // -> DESC="IT project files (.itp)" @@ -700,6 +702,7 @@ if ((pInfo->hOrders) && (hintFlagPart != HINT_INSNAMES) && (hintFlagPart != HINT_SMPNAMES)) { const DWORD nPat = (lHint >> HINT_SHIFT_PAT); + bool adjustParentNode = false; // adjust sequence name of "Sequence" node? // (only one seq remaining || previously only one sequence): update parent item if((pInfo->tiSequences.size() > 1 && pSndFile->Order.GetNumSequences() == 1) || (pInfo->tiSequences.size() == 1 && pSndFile->Order.GetNumSequences() > 1)) @@ -714,6 +717,7 @@ } pInfo->tiOrders.resize(pSndFile->Order.GetNumSequences()); pInfo->tiSequences.resize(pSndFile->Order.GetNumSequences(), NULL); + adjustParentNode = true; } // If there are too many sequences, delete them. @@ -736,6 +740,15 @@ SEQUENCEINDEX nSeqMin = 0, nSeqMax = pSndFile->Order.GetNumSequences() - 1; SEQUENCEINDEX nHintParam = lHint >> HINT_SHIFT_SEQUENCE; if ((hintFlagPart == HINT_SEQNAMES) && (nHintParam <= nSeqMax)) nSeqMin = nSeqMax = nHintParam; + + // Adjust caption of the "Sequence" node (if only one sequence exists, it should be labeled with the sequence name) + if(((hintFlagPart == HINT_SEQNAMES) && pSndFile->Order.GetNumSequences() == 1) || adjustParentNode) + { + CString sSeqName = pSndFile->Order.GetSequence(0).m_sName; + if(sSeqName.IsEmpty() || pSndFile->Order.GetNumSequences() > 1) sSeqName = "Sequence"; + SetItem(pInfo->hOrders, TVIF_TEXT, sSeqName, 0, 0, 0, 0, 0); + } + // go through all sequences for(SEQUENCEINDEX nSeq = nSeqMin; nSeq <= nSeqMax; nSeq++) { @@ -1151,6 +1164,10 @@ if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_COMMENTS, 0); return TRUE; + case MODITEM_SEQUENCE: + if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (dwItem << 16) | 0x8000); + return TRUE; + case MODITEM_ORDER: if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, dwItem | 0x8000); return TRUE; @@ -1370,9 +1387,18 @@ uint64 qwItemType = GetModItem(hItem); DWORD dwItem = (DWORD)(qwItemType >> 16); PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx]; - CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL; + CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : nullptr; + CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; switch(qwItemType & 0xFFFF) { + case MODITEM_SEQUENCE: + if (pModDoc && pSndFile) + { + pSndFile->Order.RemoveSequence((SEQUENCEINDEX)(dwItem & 0xFFFF)); + pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); + } + break; + case MODITEM_ORDER: if ((pModDoc) && (pModDoc->RemoveOrder((SEQUENCEINDEX)(dwItem >> 16), (ORDERINDEX)(dwItem & 0xFFFF)))) { @@ -2282,13 +2308,24 @@ break; case MODITEM_SEQUENCE: - // TODO: Right-click menu for sequences - //nDefault = ID_MODTREE_EXECUTE; + //nDefault = ID_MODTREE_EXECUTE; // don't do it, double-clicking sequences shouldn't switch to the automatically! //AppendMenu(hMenu, MF_STRING, nDefault, "&Switch to Seqeuence"); - //AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE, "&Delete Sequence"); - //AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE, "D&uplicate Sequence"); + AppendMenu(hMenu, MF_STRING, ID_MODTREE_INSERT, "&Insert Sequence"); + AppendMenu(hMenu, MF_STRING, ID_MODTREE_DUPLICATE, "D&uplicate Sequence"); + AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE, "&Delete Sequence"); break; + + case MODITEM_HDR_ORDERS: + { + CModDoc *pModDoc = GetDocumentFromItem(hItem); + if(pModDoc && (pModDoc->GetModType() == MOD_TYPE_MPT)) + { + AppendMenu(hMenu, MF_STRING, ID_MODTREE_INSERT, "&Insert Sequence"); + } + } + break; + case MODITEM_SAMPLE: { CModDoc *pModDoc = GetDocumentFromItem(hItem); @@ -2781,9 +2818,55 @@ } +void CModTree::OnDuplicateTreeItem() +//---------------------------------- +{ + HTREEITEM hItem = GetSelectedItem(); + uint64 qwItemType; + CModDoc *pModDoc; + + qwItemType = GetModItem(hItem); + const DWORD dwItemNo = (DWORD)(qwItemType >> 16); + qwItemType &= 0xFFFF; + + pModDoc = GetDocumentFromItem(hItem); + CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; + + if (pModDoc && pSndFile && (qwItemType == MODITEM_SEQUENCE)) + { + pSndFile->Order.SetSequence((SEQUENCEINDEX)dwItemNo); + pSndFile->Order.AddSequence(true); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE); + pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES|HINT_MODSEQUENCE); + } +} + + +void CModTree::OnInsertTreeItem() +//------------------------------- +{ + HTREEITEM hItem = GetSelectedItem(); + uint64 qwItemType; + CModDoc *pModDoc; + + qwItemType = GetModItem(hItem) & 0xFFFF; + + pModDoc = GetDocumentFromItem(hItem); + CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; + + if (pModDoc && pSndFile && ((qwItemType == MODITEM_SEQUENCE) || (qwItemType == MODITEM_HDR_ORDERS))) + { + pSndFile->Order.AddSequence(false); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE); + pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES|HINT_MODSEQUENCE); + } +} + + // -> CODE#0023 // -> DESC="IT project files (.itp)" void CModTree::OnSetItemPath() +//---------------------------- { HTREEITEM hItem = GetSelectedItem(); uint64 qwItemType = GetModItem(hItem); @@ -2816,6 +2899,7 @@ } void CModTree::OnSaveItem() +//------------------------- { HTREEITEM hItem = GetSelectedItem(); uint64 qwItemType = GetModItem(hItem); Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/View_tre.h 2009-11-27 18:52:15 UTC (rev 423) @@ -204,6 +204,8 @@ afx_msg void OnMuteTreeItem(); afx_msg void OnSoloTreeItem(); afx_msg void OnUnmuteAllTreeItem(); + afx_msg void OnDuplicateTreeItem(); + afx_msg void OnInsertTreeItem(); // -> CODE#0023 // -> DESC="IT project files (.itp)" Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/resource.h 2009-11-27 18:52:15 UTC (rev 423) @@ -1153,6 +1153,8 @@ #define ID_ORDERLIST_EDIT_PASTE 59233 #define ID_CHANNEL_RENAME 59234 #define ID_EDIT_PASTEFLOOD 59235 +#define ID_MODTREE_DUPLICATE 59236 +#define ID_MODTREE_INSERT 59237 // Next default values for new objects // @@ -1160,7 +1162,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 523 -#define _APS_NEXT_COMMAND_VALUE 59236 +#define _APS_NEXT_COMMAND_VALUE 59238 #define _APS_NEXT_CONTROL_VALUE 2412 #define _APS_NEXT_SYMED_VALUE 901 #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |