You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
(10) |
Sep
|
Oct
|
Nov
|
Dec
(3) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(1) |
Feb
(2) |
Mar
(3) |
Apr
(2) |
May
(10) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
| 2008 |
Jan
(6) |
Feb
(4) |
Mar
(5) |
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
(4) |
Aug
(6) |
Sep
(2) |
Oct
(9) |
Nov
(1) |
Dec
(4) |
| 2009 |
Jan
(9) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
(6) |
Jun
(18) |
Jul
(33) |
Aug
(39) |
Sep
(33) |
Oct
(24) |
Nov
(23) |
Dec
(22) |
| 2010 |
Jan
(29) |
Feb
(32) |
Mar
(51) |
Apr
(17) |
May
(31) |
Jun
(21) |
Jul
(32) |
Aug
(28) |
Sep
(35) |
Oct
(27) |
Nov
(11) |
Dec
(13) |
| 2011 |
Jan
(14) |
Feb
(13) |
Mar
(27) |
Apr
(27) |
May
(28) |
Jun
(20) |
Jul
(43) |
Aug
(52) |
Sep
(66) |
Oct
(61) |
Nov
(11) |
Dec
(8) |
| 2012 |
Jan
(20) |
Feb
(30) |
Mar
(38) |
Apr
(21) |
May
(33) |
Jun
(21) |
Jul
(25) |
Aug
(9) |
Sep
(24) |
Oct
(42) |
Nov
(27) |
Dec
(41) |
| 2013 |
Jan
(20) |
Feb
(35) |
Mar
(156) |
Apr
(298) |
May
(258) |
Jun
(201) |
Jul
(105) |
Aug
(60) |
Sep
(193) |
Oct
(245) |
Nov
(280) |
Dec
(194) |
| 2014 |
Jan
(63) |
Feb
(202) |
Mar
(200) |
Apr
(23) |
May
(53) |
Jun
(105) |
Jul
(18) |
Aug
(26) |
Sep
(110) |
Oct
(187) |
Nov
(97) |
Dec
(74) |
| 2015 |
Jan
(45) |
Feb
(55) |
Mar
(116) |
Apr
(116) |
May
(193) |
Jun
(164) |
Jul
(50) |
Aug
(111) |
Sep
(98) |
Oct
(71) |
Nov
(103) |
Dec
(63) |
| 2016 |
Jan
(33) |
Feb
(101) |
Mar
(182) |
Apr
(139) |
May
(140) |
Jun
(103) |
Jul
(165) |
Aug
(286) |
Sep
(208) |
Oct
(127) |
Nov
(97) |
Dec
(54) |
| 2017 |
Jan
(64) |
Feb
(335) |
Mar
(202) |
Apr
(212) |
May
(139) |
Jun
(127) |
Jul
(294) |
Aug
(154) |
Sep
(170) |
Oct
(152) |
Nov
(156) |
Dec
(62) |
| 2018 |
Jan
(168) |
Feb
(237) |
Mar
(196) |
Apr
(174) |
May
(174) |
Jun
(161) |
Jul
(127) |
Aug
(88) |
Sep
(149) |
Oct
(66) |
Nov
(52) |
Dec
(135) |
| 2019 |
Jan
(146) |
Feb
(126) |
Mar
(104) |
Apr
(58) |
May
(60) |
Jun
(28) |
Jul
(197) |
Aug
(129) |
Sep
(141) |
Oct
(148) |
Nov
(63) |
Dec
(100) |
| 2020 |
Jan
(74) |
Feb
(37) |
Mar
(59) |
Apr
(154) |
May
(194) |
Jun
(133) |
Jul
(313) |
Aug
(197) |
Sep
(49) |
Oct
(162) |
Nov
(143) |
Dec
(57) |
| 2021 |
Jan
(120) |
Feb
(107) |
Mar
(314) |
Apr
(157) |
May
(524) |
Jun
(169) |
Jul
(72) |
Aug
(133) |
Sep
(135) |
Oct
(146) |
Nov
(198) |
Dec
(325) |
| 2022 |
Jan
(409) |
Feb
(249) |
Mar
(138) |
Apr
(95) |
May
(102) |
Jun
(221) |
Jul
(66) |
Aug
(120) |
Sep
(192) |
Oct
(131) |
Nov
(53) |
Dec
(171) |
| 2023 |
Jan
(357) |
Feb
(82) |
Mar
(168) |
Apr
(218) |
May
(196) |
Jun
(86) |
Jul
(115) |
Aug
(49) |
Sep
(190) |
Oct
(102) |
Nov
(45) |
Dec
(76) |
| 2024 |
Jan
(86) |
Feb
(50) |
Mar
(324) |
Apr
(209) |
May
(197) |
Jun
(232) |
Jul
(194) |
Aug
(247) |
Sep
(219) |
Oct
(266) |
Nov
(328) |
Dec
(304) |
| 2025 |
Jan
(191) |
Feb
(115) |
Mar
(137) |
Apr
(32) |
May
(126) |
Jun
(403) |
Jul
(213) |
Aug
(203) |
Sep
(148) |
Oct
(109) |
Nov
(191) |
Dec
(209) |
| 2026 |
Jan
(127) |
Feb
(123) |
Mar
(160) |
Apr
(141) |
May
(49) |
Jun
(55) |
Jul
(91) |
Aug
(191) |
Sep
|
Oct
(68) |
Nov
|
Dec
|
|
From: <sag...@us...> - 2009-12-05 19:44:57
|
Revision: 435
http://modplug.svn.sourceforge.net/modplug/?rev=435&view=rev
Author: saga-games
Date: 2009-12-05 19:44:47 +0000 (Sat, 05 Dec 2009)
Log Message:
-----------
[New] Pattern editor: New paste mode "push forward paste", which resembles the default paste behaviour of Impulse Tracker. Includes new shortcut.
[Fix] Changed default pattern control view height so it fits the new control
[Mod] Pattern editor: Instead of hiding the sequence name control, just disable it (looks better)
[Ref] Cleaned up paste code a bit.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/CommandSet.cpp
trunk/OpenMPT/mptrack/CommandSet.h
trunk/OpenMPT/mptrack/Ctrl_pat.cpp
trunk/OpenMPT/mptrack/Globals.h
trunk/OpenMPT/mptrack/InputHandler.cpp
trunk/OpenMPT/mptrack/MainFrm.cpp
trunk/OpenMPT/mptrack/Moddoc.h
trunk/OpenMPT/mptrack/Modedit.cpp
trunk/OpenMPT/mptrack/View_pat.cpp
trunk/OpenMPT/mptrack/View_pat.h
trunk/OpenMPT/mptrack/mptrack.rc
trunk/OpenMPT/mptrack/resource.h
Modified: trunk/OpenMPT/mptrack/CommandSet.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-12-05 19:44:47 UTC (rev 435)
@@ -2480,6 +2480,11 @@
commands[kcShowSplitKeyboardSettings].isDummy = false;
commands[kcShowSplitKeyboardSettings].Message = "Split Keyboard Settings dialog";
+ commands[kcEditPushForwardPaste].UID = 1820;
+ commands[kcEditPushForwardPaste].isHidden = false;
+ commands[kcEditPushForwardPaste].isDummy = false;
+ commands[kcEditPushForwardPaste].Message = "Push Forward Paste";
+
#ifdef _DEBUG
for (int i=0; i<kcNumCommands; i++) {
if (commands[i].UID != 0) { // ignore unset UIDs
Modified: trunk/OpenMPT/mptrack/CommandSet.h
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.h 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/CommandSet.h 2009-12-05 19:44:47 UTC (rev 435)
@@ -87,6 +87,7 @@
kcEditMixPaste,
kcEditMixPasteITStyle,
kcEditPasteFlood,
+ kcEditPushForwardPaste,
kcSwitchOverflowPaste,
kcEditSelectAll,
kcEditFind,
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-12-05 19:44:47 UTC (rev 435)
@@ -231,10 +231,9 @@
else
::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), false);
- // Show/hide multisequence controls according the current modtype.
- GetDlgItem(IDC_STATIC_SEQUENCE_NAME_FRAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE);
- GetDlgItem(IDC_STATIC_SEQUENCE_NAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE);
- GetDlgItem(IDC_EDIT_SEQUENCE_NAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE);
+ // Enable/disablemultisequence controls according the current modtype.
+ GetDlgItem(IDC_STATIC_SEQUENCE_NAME)->EnableWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE);
+ GetDlgItem(IDC_EDIT_SEQUENCE_NAME)->EnableWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE);
}
//end rewbs.instroVST
if (dwHintMask & HINT_MPTOPTIONS)
Modified: trunk/OpenMPT/mptrack/Globals.h
===================================================================
--- trunk/OpenMPT/mptrack/Globals.h 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/Globals.h 2009-12-05 19:44:47 UTC (rev 435)
@@ -81,6 +81,8 @@
afx_msg void OnEditCopy() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_COPY, 0); } //rewbs.customKeys
afx_msg void OnEditPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTE, 0); } //rewbs.customKeys
afx_msg void OnEditMixPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTE_SPECIAL, 0); } //rewbs.mixPaste
+ afx_msg void OnEditPasteFlood() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTEFLOOD, 0); }
+ afx_msg void OnEditPushForwardPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PUSHFORWARDPASTE, 0); }
afx_msg void OnEditFind() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FIND, 0); } //rewbs.customKeys
afx_msg void OnEditFindNext() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FINDNEXT, 0); } //rewbs.customKeys
afx_msg void OnSwitchToView() { if (m_hWndView) ::PostMessage(m_hWndView, WM_MOD_VIEWMSG, VIEWMSG_SETFOCUS, 0); } //rewbs.customKeys
Modified: trunk/OpenMPT/mptrack/InputHandler.cpp
===================================================================
--- trunk/OpenMPT/mptrack/InputHandler.cpp 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/InputHandler.cpp 2009-12-05 19:44:47 UTC (rev 435)
@@ -440,6 +440,8 @@
case ID_EDIT_COPY: s="&Copy\t"; c=kcEditCopy; break;
case ID_EDIT_PASTE: s="&Paste\t"; c=kcEditPaste; break;
case ID_EDIT_PASTE_SPECIAL: s="&Mix Paste\t"; c=kcEditMixPaste; break;
+ case ID_EDIT_PASTEFLOOD: s="&Paste Flood\t"; c=kcEditPasteFlood; break;
+ case ID_EDIT_PUSHFORWARDPASTE: s="&Push Forward Paste\t"; c=kcEditPushForwardPaste; break;
case ID_EDIT_SELECT_ALL: s="&Select All\t"; c=kcEditSelectAll; break;
case ID_EDIT_FIND: s="&Find\t"; c=kcEditFind; break;
case ID_EDIT_FINDNEXT: s="Find &Next\t"; c=kcEditFindNext; break;
@@ -505,6 +507,8 @@
pMenu->ModifyMenu(ID_EDIT_COPY, MF_BYCOMMAND | MF_STRING, ID_EDIT_COPY, GetMenuText(ID_EDIT_COPY));
pMenu->ModifyMenu(ID_EDIT_PASTE, MF_BYCOMMAND | MF_STRING, ID_EDIT_PASTE, GetMenuText(ID_EDIT_PASTE));
pMenu->ModifyMenu(ID_EDIT_PASTE_SPECIAL, MF_BYCOMMAND | MF_STRING, ID_EDIT_PASTE_SPECIAL, GetMenuText(ID_EDIT_PASTE_SPECIAL));
+ pMenu->ModifyMenu(ID_EDIT_PASTEFLOOD, MF_BYCOMMAND | MF_STRING, ID_EDIT_PASTEFLOOD, GetMenuText(ID_EDIT_PASTEFLOOD));
+ pMenu->ModifyMenu(ID_EDIT_PUSHFORWARDPASTE, MF_BYCOMMAND | MF_STRING, ID_EDIT_PUSHFORWARDPASTE, GetMenuText(ID_EDIT_PUSHFORWARDPASTE));
pMenu->ModifyMenu(ID_EDIT_SELECT_ALL, MF_BYCOMMAND | MF_STRING, ID_EDIT_SELECT_ALL, GetMenuText(ID_EDIT_SELECT_ALL));
pMenu->ModifyMenu(ID_EDIT_FIND, MF_BYCOMMAND | MF_STRING, ID_EDIT_FIND, GetMenuText(ID_EDIT_FIND));
pMenu->ModifyMenu(ID_EDIT_FINDNEXT, MF_BYCOMMAND | MF_STRING, ID_EDIT_FINDNEXT, GetMenuText(ID_EDIT_FINDNEXT));
Modified: trunk/OpenMPT/mptrack/MainFrm.cpp
===================================================================
--- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-12-05 19:44:47 UTC (rev 435)
@@ -139,7 +139,7 @@
//rewbs.varWindowSize
LONG CMainFrame::glCtrlWindowHeight = 188; //obsolete, for backwards compat only
LONG CMainFrame::glGeneralWindowHeight = 178;
-LONG CMainFrame::glPatternWindowHeight = 232;
+LONG CMainFrame::glPatternWindowHeight = 152;
LONG CMainFrame::glSampleWindowHeight = 188;
LONG CMainFrame::glInstrumentWindowHeight = 300;
LONG CMainFrame::glCommentsWindowHeight = 288;
Modified: trunk/OpenMPT/mptrack/Moddoc.h
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 19:44:47 UTC (rev 435)
@@ -103,6 +103,17 @@
};
+// pattern paste modes
+enum enmPatternPasteModes
+{
+ pm_overwrite = 0,
+ pm_mixpaste,
+ pm_mixpaste_it,
+ pm_pasteflood,
+ pm_pushforwardpaste,
+};
+
+
/////////////////////////////////////////////////////////////////////////
// Split Keyboard Settings (pattern editor)
@@ -255,7 +266,7 @@
// Copy&Paste
bool CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel);
- bool PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix = false, bool PasteFlood = false);
+ bool PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, enmPatternPasteModes pasteMode);
bool CopyEnvelope(UINT nIns, enmEnvelopeTypes nEnv);
bool PasteEnvelope(UINT nIns, enmEnvelopeTypes nEnv);
Modified: trunk/OpenMPT/mptrack/Modedit.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Modedit.cpp 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-12-05 19:44:47 UTC (rev 435)
@@ -439,7 +439,7 @@
if (nNewChannels > maxChans) {
CString error;
- error.Format("Error: Max number of channels for this type is %d", maxChans);
+ error.Format("Error: Max number of channels for this file type is %d", maxChans);
::AfxMessageBox(error, MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
@@ -1156,9 +1156,8 @@
}
-//BOOL CModDoc::PastePattern(UINT nPattern, DWORD dwBeginSel)
-bool CModDoc::PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix, bool PasteFlood)
-//-------------------------------------------------------------------------------------------------------------
+bool CModDoc::PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, enmPatternPasteModes pasteMode)
+//-------------------------------------------------------------------------------------------------
{
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
if ((!pMainFrm) || (nPattern >= m_SndFile.Patterns.Size()) || (!m_SndFile.Patterns[nPattern])) return false;
@@ -1181,6 +1180,10 @@
UINT len = 0, startLen;
MODCOMMAND origModCmd;
+ bool doOverflowPaste = (CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) && (pasteMode != pm_pasteflood) && (pasteMode != pm_pushforwardpaste);
+ bool doITStyleMix = (pasteMode == pm_mixpaste_it);
+ bool doMixPaste = ((pasteMode == pm_mixpaste) || doITStyleMix);
+
ORDERINDEX oCurrentOrder; //jojo.echopaste
ROWINDEX rTemp, startRow;
PATTERNINDEX pTemp;
@@ -1219,7 +1222,7 @@
{
if (len + 11 >= dwMemSize || !p[len])
{
- if((PasteFlood == true) && (nrow != startRow)) // prevent infinite loop with malformed clipboard data
+ if((pasteMode == pm_pasteflood) && (nrow != startRow)) // prevent infinite loop with malformed clipboard data
len = startLen; // paste from beginning
else
goto PasteDone;
@@ -1235,11 +1238,21 @@
origModCmd = m[col]; // ITSyle mixpaste requires that we keep a copy of the thing we are about to paste on
// so that we can refer back to check if there was anything in e.g. the note column before we pasted.
LPSTR s = p+len+1;
+
if (col < m_SndFile.m_nChannels)
{
+ // push channel data below paste point first.
+ if(pasteMode == pm_pushforwardpaste)
+ {
+ for(ROWINDEX nPushRow = m_SndFile.PatternSize[nPattern] - 1 - nrow; nPushRow > 0; nPushRow--)
+ {
+ m[col + nPushRow * m_SndFile.m_nChannels] = m[col + (nPushRow - 1) * m_SndFile.m_nChannels];
+ }
+ }
+
// Note
- if (s[0] > ' ' && (!mix || ((!ITStyleMix && origModCmd.note==0) ||
- (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0))))
+ if (s[0] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.note==0) ||
+ (doITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0))))
{
m[col].note = NOTE_NONE;
if (s[0] == '=') m[col].note = NOTE_KEYOFF; else
@@ -1263,8 +1276,8 @@
}
}
// Instrument
- if (s[3] > ' ' && (!mix || ( (!ITStyleMix && origModCmd.instr==0) ||
- (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0) ) ))
+ if (s[3] > ' ' && (!doMixPaste || ( (!doITStyleMix && origModCmd.instr==0) ||
+ (doITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0) ) ))
{
if ((s[3] >= '0') && (s[3] <= ('0'+(MAX_SAMPLES/10))))
@@ -1273,8 +1286,8 @@
} else m[col].instr = 0;
}
// Volume
- if (s[5] > ' ' && (!mix || ((!ITStyleMix && origModCmd.volcmd==0) ||
- (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0))))
+ if (s[5] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.volcmd==0) ||
+ (doITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0))))
{
if (s[5] != '.')
@@ -1314,8 +1327,8 @@
}
else
{
- if (s[8] > ' ' && (!mix || ((!ITStyleMix && origModCmd.command==0) ||
- (ITStyleMix && origModCmd.command==0 && origModCmd.param==0))))
+ if (s[8] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.command==0) ||
+ (doITStyleMix && origModCmd.command==0 && origModCmd.param==0))))
{
m[col].command = 0;
if (s[8] != '.')
@@ -1328,8 +1341,8 @@
}
}
// Effect value
- if (s[9] > ' ' && (!mix || ((!ITStyleMix && origModCmd.param==0) ||
- (ITStyleMix && origModCmd.command==0 && origModCmd.param==0))))
+ if (s[9] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.param==0) ||
+ (doITStyleMix && origModCmd.command==0 && origModCmd.param==0))))
{
m[col].param = 0;
if (s[9] != '.')
@@ -1380,7 +1393,7 @@
// Overflow paste. Continue pasting in next pattern if enabled.
// If Paste Flood is enabled, this won't be called due to obvious reasons.
- if((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) && !PasteFlood)
+ if(doOverflowPaste)
{
while(nrow >= m_SndFile.PatternSize[nPattern])
{
Modified: trunk/OpenMPT/mptrack/View_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 19:44:47 UTC (rev 435)
@@ -56,6 +56,7 @@
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_COMMAND(ID_EDIT_MIXPASTE, OnEditMixPaste)
ON_COMMAND(ID_EDIT_PASTEFLOOD, OnEditPasteFlood)
+ ON_COMMAND(ID_EDIT_PUSHFORWARDPASTE,OnEditPushForwardPaste)
ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll)
ON_COMMAND(ID_EDIT_SELECTCOLUMN,OnEditSelectColumn)
ON_COMMAND(ID_EDIT_SELECTCOLUMN2,OnSelectCurrentColumn)
@@ -966,64 +967,6 @@
}
-void CViewPattern::OnEditPaste()
-//------------------------------
-{
- CModDoc *pModDoc = GetDocument();
-
- if (pModDoc && IsEditingEnabled_bmsg())
- {
- pModDoc->PastePattern(m_nPattern, m_dwBeginSel, false);
- InvalidatePattern(FALSE);
- SetFocus();
- }
-}
-
-//rewbs.mixPaste
-void CViewPattern::OnEditMixPaste()
-//------------------------------
-{
- CModDoc *pModDoc = GetDocument();
-
- if (pModDoc && IsEditingEnabled_bmsg())
- {
- pModDoc->PastePattern(m_nPattern, m_dwBeginSel, true);
- InvalidatePattern(FALSE);
- SetFocus();
- }
-}
-
-void CViewPattern::OnEditMixPasteITStyle()
-//----------------------------------------
-{
- CModDoc *pModDoc = GetDocument();
-
- if (pModDoc && IsEditingEnabled_bmsg() )
- {
- pModDoc->PastePattern(m_nPattern, m_dwBeginSel, true, true);
- InvalidatePattern(FALSE);
- SetFocus();
- }
-}
-
-
-//end rewbs.mixPaste
-
-
-void CViewPattern::OnEditPasteFlood()
-//-----------------------------------
-{
- CModDoc *pModDoc = GetDocument();
-
- if (pModDoc && IsEditingEnabled_bmsg())
- {
- pModDoc->PastePattern(m_nPattern, m_dwBeginSel, false, false, true);
- InvalidatePattern(FALSE);
- SetFocus();
- }
-}
-
-
void CViewPattern::OnLButtonDown(UINT nFlags, CPoint point)
//--------------------------------------------------
{
@@ -3370,7 +3313,7 @@
case VIEWMSG_PASTEPATTERN:
{
CModDoc *pModDoc = GetDocument();
- if (pModDoc) pModDoc->PastePattern(m_nPattern, 0, false);
+ if (pModDoc) pModDoc->PastePattern(m_nPattern, 0, pm_overwrite);
}
break;
@@ -4838,6 +4781,7 @@
AppendMenu(hMenu, MF_STRING, ID_EDIT_PASTE, "Paste\t" + ih->GetKeyTextFromCommand(kcEditPaste));
AppendMenu(hMenu, MF_STRING, ID_EDIT_MIXPASTE, "Mix Paste\t" + ih->GetKeyTextFromCommand(kcEditMixPaste));
AppendMenu(hMenu, MF_STRING, ID_EDIT_PASTEFLOOD, "Paste Flood\t" + ih->GetKeyTextFromCommand(kcEditPasteFlood));
+ AppendMenu(hMenu, MF_STRING, ID_EDIT_PUSHFORWARDPASTE, "Push Forward Paste\t" + ih->GetKeyTextFromCommand(kcEditPushForwardPaste));
DWORD greyed = pModDoc->GetPatternUndo()->CanUndo()?FALSE:MF_GRAYED;
if (!greyed || !(CMainFrame::m_dwPatternSetup&PATTERN_OLDCTXMENUSTYLE)) {
@@ -5216,3 +5160,17 @@
CSplitKeyboadSettings dlg(CMainFrame::GetMainFrame(), pSndFile, pModDoc->GetSplitKeyboardSettings());
dlg.DoModal();
}
+
+
+void CViewPattern::ExecutePaste(enmPatternPasteModes pasteMode)
+//-------------------------------------------------------------
+{
+ CModDoc *pModDoc = GetDocument();
+
+ if (pModDoc && IsEditingEnabled_bmsg())
+ {
+ pModDoc->PastePattern(m_nPattern, m_dwBeginSel, pasteMode);
+ InvalidatePattern(FALSE);
+ SetFocus();
+ }
+}
Modified: trunk/OpenMPT/mptrack/View_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 19:44:47 UTC (rev 435)
@@ -199,6 +199,8 @@
void TogglePluginEditor(int chan); //rewbs.patPlugName
+ void ExecutePaste(enmPatternPasteModes pasteMode);
+
public:
//{{AFX_VIRTUAL(CViewPattern)
virtual void OnDraw(CDC *);
@@ -225,10 +227,13 @@
afx_msg void OnKillFocus(CWnd *pNewWnd);
afx_msg void OnEditCut();
afx_msg void OnEditCopy();
- afx_msg void OnEditPaste();
- afx_msg void OnEditMixPaste(); //rewbs.mixPaste
- afx_msg void OnEditMixPasteITStyle(); //rewbs.mixPaste
- afx_msg void OnEditPasteFlood();
+
+ afx_msg void OnEditPaste() {ExecutePaste(pm_overwrite);};
+ afx_msg void OnEditMixPaste() {ExecutePaste(pm_mixpaste);};
+ afx_msg void OnEditMixPasteITStyle() {ExecutePaste(pm_mixpaste_it);};
+ afx_msg void OnEditPasteFlood() {ExecutePaste(pm_pasteflood);};
+ afx_msg void OnEditPushForwardPaste() {ExecutePaste(pm_pushforwardpaste);};
+
afx_msg void OnClearSelection(bool ITStyle=false, RowMask sb = DefaultRowMask); //rewbs.customKeys
afx_msg void OnGrowSelection(); //rewbs.customKeys
afx_msg void OnShrinkSelection(); //rewbs.customKeys
Modified: trunk/OpenMPT/mptrack/mptrack.rc
===================================================================
--- trunk/OpenMPT/mptrack/mptrack.rc 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/mptrack.rc 2009-12-05 19:44:47 UTC (rev 435)
@@ -442,20 +442,20 @@
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,31,55,10
- COMBOBOX IDC_COMBO_INSTRUMENT,18,30,96,137,CBS_DROPDOWNLIST | WS_VSCROLL
- CTEXT "Row Spacing",IDC_STATIC,162,32,42,8,SS_CENTERIMAGE
- EDITTEXT IDC_EDIT_SPACING,210,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP
- CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,230,30,11,11
+ CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,32,55,8
+ COMBOBOX IDC_COMBO_INSTRUMENT,18,30,102,137,CBS_DROPDOWNLIST | WS_VSCROLL
+ CTEXT "Row Spacing",IDC_STATIC,168,32,42,8,SS_CENTERIMAGE
+ EDITTEXT IDC_EDIT_SPACING,216,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP
+ CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,236,30,11,11
PUSHBUTTON "<<",IDC_BUTTON2,3,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE
PUSHBUTTON ">>",IDC_BUTTON1,15,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE
LTEXT "Pattern Name",IDC_STATIC,384,32,48,8,SS_CENTERIMAGE
- EDITTEXT IDC_EDIT_PATTERNNAME,439,29,108,12,ES_AUTOHSCROLL
+ EDITTEXT IDC_EDIT_PATTERNNAME,439,30,108,12,ES_AUTOHSCROLL
CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,370,18
CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,6,30,11,12
- PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,120,30,33,13,0,WS_EX_STATICEDGE
+ PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,126,30,33,13,0,WS_EX_STATICEDGE
GROUPBOX "",IDC_STATIC,3,22,369,24
- CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,31,57,10
+ CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,32,57,8
EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,3,65,28,12,ES_AUTOHSCROLL | ES_READONLY
CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,16,70,11,11
EDITTEXT IDC_EDIT_SEQUENCE_NAME,439,8,108,12,ES_AUTOHSCROLL
@@ -1836,6 +1836,8 @@
MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY
MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE
MENUITEM "&Mix Paste\tCtrl+M", ID_EDIT_PASTE_SPECIAL
+ MENUITEM "Paste Flood", ID_EDIT_PASTEFLOOD
+ MENUITEM "Push Forward Paste", ID_EDIT_PUSHFORWARDPASTE
MENUITEM "Select &All\tCtrl+5", ID_EDIT_SELECT_ALL
MENUITEM SEPARATOR
MENUITEM "C&leanup...", ID_EDIT_CLEANUP
Modified: trunk/OpenMPT/mptrack/resource.h
===================================================================
--- trunk/OpenMPT/mptrack/resource.h 2009-12-05 13:19:54 UTC (rev 434)
+++ trunk/OpenMPT/mptrack/resource.h 2009-12-05 19:44:47 UTC (rev 435)
@@ -1156,6 +1156,7 @@
#define ID_MODTREE_DUPLICATE 59236
#define ID_MODTREE_INSERT 59237
#define ID_MODTREE_SWITCHTO 59238
+#define ID_EDIT_PUSHFORWARDPASTE 59239
// Next default values for new objects
//
@@ -1163,7 +1164,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 524
-#define _APS_NEXT_COMMAND_VALUE 59239
+#define _APS_NEXT_COMMAND_VALUE 59240
#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.
|
|
From: <sag...@us...> - 2009-12-05 13:20:04
|
Revision: 434
http://modplug.svn.sourceforge.net/modplug/?rev=434&view=rev
Author: saga-games
Date: 2009-12-05 13:19:54 +0000 (Sat, 05 Dec 2009)
Log Message:
-----------
[Fix] Pattern editor: Split Keyboard Settings were not remembered when switching to a different tab.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Mainfrm.h
trunk/OpenMPT/mptrack/Moddoc.cpp
trunk/OpenMPT/mptrack/Moddoc.h
trunk/OpenMPT/mptrack/View_pat.cpp
trunk/OpenMPT/mptrack/View_pat.h
trunk/OpenMPT/mptrack/resource.h
Modified: trunk/OpenMPT/mptrack/Mainfrm.h
===================================================================
--- trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-05 00:31:41 UTC (rev 433)
+++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-05 13:19:54 UTC (rev 434)
@@ -341,18 +341,6 @@
/////////////////////////////////////////////////////////////////////////
-// Split Keyboard Settings (pattern editor)
-
-#define SPLIT_OCTAVE_RANGE 9
-struct SplitKeyboardSettings
-{
- UINT splitInstrument, splitNote, splitVolume;
- int octaveModifier; // determines by how many octaves the notes should be transposed up or down
- bool octaveLink; // apply octaveModifier
-};
-
-
-/////////////////////////////////////////////////////////////////////////
// Misc. Macros
Modified: trunk/OpenMPT/mptrack/Moddoc.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-05 00:31:41 UTC (rev 433)
+++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-05 13:19:54 UTC (rev 434)
@@ -99,6 +99,12 @@
m_PatternUndo.SetParent(this);
m_SampleUndo.SetParent(this);
+ m_SplitKeyboardSettings.splitInstrument = 0;
+ m_SplitKeyboardSettings.splitNote = NOTE_MIDDLEC - 1;
+ m_SplitKeyboardSettings.splitVolume = 0;
+ m_SplitKeyboardSettings.octaveModifier = 0;
+ m_SplitKeyboardSettings.octaveLink = false;
+
#ifdef _DEBUG
MODCHANNEL *p = m_SndFile.Chn;
if (((DWORD)p) & 7) Log("MODCHANNEL is not aligned (0x%08X)\n", p);
Modified: trunk/OpenMPT/mptrack/Moddoc.h
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 00:31:41 UTC (rev 433)
+++ trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 13:19:54 UTC (rev 434)
@@ -103,6 +103,18 @@
};
+/////////////////////////////////////////////////////////////////////////
+// Split Keyboard Settings (pattern editor)
+
+#define SPLIT_OCTAVE_RANGE 9
+struct SplitKeyboardSettings
+{
+ UINT splitInstrument, splitNote, splitVolume;
+ int octaveModifier; // determines by how many octaves the notes should be transposed up or down
+ bool octaveLink; // apply octaveModifier
+};
+
+
//=============================
class CModDoc: public CDocument
//=============================
@@ -127,6 +139,7 @@
CPatternUndo m_PatternUndo;
CSampleUndo m_SampleUndo;
+ SplitKeyboardSettings m_SplitKeyboardSettings; // this is maybe not the best place to keep them, but it should do the job
protected: // create from serialization only
CModDoc();
@@ -183,6 +196,7 @@
CPatternUndo *GetPatternUndo() { return &m_PatternUndo; }
CSampleUndo *GetSampleUndo() { return &m_SampleUndo; }
+ SplitKeyboardSettings *GetSplitKeyboardSettings() { return &m_SplitKeyboardSettings; }
// operations
public:
Modified: trunk/OpenMPT/mptrack/View_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 00:31:41 UTC (rev 433)
+++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 13:19:54 UTC (rev 434)
@@ -31,6 +31,7 @@
UINT CViewPattern::m_nFindMaxChn = 0;
signed char cInstrRelChange = 0;
+
IMPLEMENT_SERIAL(CViewPattern, CModScrollView, 0)
BEGIN_MESSAGE_MAP(CViewPattern, CModScrollView)
@@ -178,13 +179,6 @@
m_nFoundInstrument = 0;
m_nLastPlayedRow = 0;
m_nLastPlayedOrder = 0;
-
- // Set up keyboard split
- m_SplitKeyboardSettings.splitInstrument = 0;
- m_SplitKeyboardSettings.splitNote = NOTE_MIDDLEC - 1;
- m_SplitKeyboardSettings.splitVolume = 0;
- m_SplitKeyboardSettings.octaveModifier = 0;
- m_SplitKeyboardSettings.octaveLink = false;
}
@@ -3921,16 +3915,16 @@
const UINT nTick = pSndFile->m_nTickCount;
const PATTERNINDEX nPatPlayback = pSndFile->m_nPattern;
- const bool isSplit = (note <= m_SplitKeyboardSettings.splitNote);
+ const bool isSplit = (note <= pModDoc->GetSplitKeyboardSettings()->splitNote);
UINT ins = 0;
if (pModDoc)
{
if (isSplit)
{
- ins = m_SplitKeyboardSettings.splitInstrument;
- if (m_SplitKeyboardSettings.octaveLink) note += 12 * m_SplitKeyboardSettings.octaveModifier;
- if (note > NOTE_MAX && note < NOTE_NOTECUT) note = NOTE_MAX;
- if (note<0) note=1;
+ ins = pModDoc->GetSplitKeyboardSettings()->splitInstrument;
+ if (pModDoc->GetSplitKeyboardSettings()->octaveLink) note += 12 *pModDoc->GetSplitKeyboardSettings()->octaveModifier;
+ if (note > NOTE_MAX && note < NOTE_MIN_SPECIAL) note = NOTE_MAX;
+ if (note < 0) note = 1;
}
if (!ins) ins = GetCurrentInstrument();
if (!ins) ins = m_nFoundInstrument;
@@ -4184,17 +4178,24 @@
// -- write note and instrument data.
const bool isSplit = HandleSplit(p, note);
+ // Nice idea actually: Use lower section of the keyboard to play chords
+ /*if(isSplit)
+ {
+ TempEnterChord(note);
+ return;
+ }*/
+
// -- write vol data
- if (vol >= 0 && vol <= 64 && !(isSplit && m_SplitKeyboardSettings.splitVolume)) //write valid volume, as long as there's no split volume override.
+ if (vol >= 0 && vol <= 64 && !(isSplit && pModDoc->GetSplitKeyboardSettings()->splitVolume)) //write valid volume, as long as there's no split volume override.
{
p->volcmd=VOLCMD_VOLUME;
p->vol = vol;
- } else if (isSplit && m_SplitKeyboardSettings.splitVolume) //cater for split volume override.
+ } else if (isSplit && pModDoc->GetSplitKeyboardSettings()->splitVolume) //cater for split volume override.
{
- if (m_SplitKeyboardSettings.splitVolume > 0 && m_SplitKeyboardSettings.splitVolume <= 64)
+ if (pModDoc->GetSplitKeyboardSettings()->splitVolume > 0 && pModDoc->GetSplitKeyboardSettings()->splitVolume <= 64)
{
p->volcmd=VOLCMD_VOLUME;
- p->vol = m_SplitKeyboardSettings.splitVolume;
+ p->vol = pModDoc->GetSplitKeyboardSettings()->splitVolume;
}
}
@@ -4593,7 +4594,9 @@
bool CViewPattern::HandleSplit(MODCOMMAND* p, int note)
//-----------------------------------------------------
{
- if (note > m_SplitKeyboardSettings.splitNote)
+ CModDoc *pModDoc = GetDocument(); if (!pModDoc) return false;
+
+ if (note > pModDoc->GetSplitKeyboardSettings()->splitNote)
{
p->note = note;
UINT nins = GetCurrentInstrument();
@@ -4603,14 +4606,14 @@
}
else
{
- if (m_SplitKeyboardSettings.splitInstrument)
- p->instr = m_SplitKeyboardSettings.splitInstrument;
+ if (pModDoc->GetSplitKeyboardSettings()->splitInstrument)
+ p->instr = pModDoc->GetSplitKeyboardSettings()->splitInstrument;
else
if(GetCurrentInstrument()) p->instr = GetCurrentInstrument();
- if (m_SplitKeyboardSettings.octaveLink)
- note += 12 * m_SplitKeyboardSettings.octaveModifier;
- if (note > NOTE_MAX && note < NOTE_NOTECUT) note = NOTE_MAX;
- if (note<0) note=1;
+ if (pModDoc->GetSplitKeyboardSettings()->octaveLink)
+ note += 12 * pModDoc->GetSplitKeyboardSettings()->octaveModifier;
+ if (note > NOTE_MAX && note < NOTE_MIN_SPECIAL) note = NOTE_MAX;
+ if (note < 0) note = 1;
p->note = note;
return true;
@@ -5210,6 +5213,6 @@
CSoundFile *pSndFile = pModDoc->GetSoundFile();
if(pSndFile == nullptr) return;
- CSplitKeyboadSettings dlg(CMainFrame::GetMainFrame(), pSndFile, &m_SplitKeyboardSettings);
+ CSplitKeyboadSettings dlg(CMainFrame::GetMainFrame(), pSndFile, pModDoc->GetSplitKeyboardSettings());
dlg.DoModal();
}
Modified: trunk/OpenMPT/mptrack/View_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 00:31:41 UTC (rev 433)
+++ trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 13:19:54 UTC (rev 434)
@@ -85,8 +85,6 @@
SIZE m_szHeader, m_szCell;
UINT m_nPattern, m_nRow, m_nMidRow, m_nPlayPat, m_nPlayRow, m_nSpacing, m_nAccelChar, m_nLastPlayedRow, m_nLastPlayedOrder;
- SplitKeyboardSettings m_SplitKeyboardSettings;
-
int m_nXScroll, m_nYScroll;
DWORD m_nDragItem, m_nMenuParam, m_nDetailLevel;
BOOL m_bDragging, m_bInItemRect, m_bRecord, m_bContinueSearch, m_bWholePatternFitsOnScreen;
Modified: trunk/OpenMPT/mptrack/resource.h
===================================================================
--- trunk/OpenMPT/mptrack/resource.h 2009-12-05 00:31:41 UTC (rev 433)
+++ trunk/OpenMPT/mptrack/resource.h 2009-12-05 13:19:54 UTC (rev 434)
@@ -708,7 +708,6 @@
#define IDC_COMMAND_LIST 2129
#define IDC_STATIC8 2200
#define IDC_PATINSTROPLUGGUI 2201
-#define IDC_PATINSTROPLUGGUI2 2202
#define IDC_WFIRCUTOFF 2202
#define IDC_WFIRTYPE 2203
#define IDC_RAMPING 2204
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-12-05 00:31:53
|
Revision: 433
http://modplug.svn.sourceforge.net/modplug/?rev=433&view=rev
Author: saga-games
Date: 2009-12-05 00:31:41 +0000 (Sat, 05 Dec 2009)
Log Message:
-----------
[Imp] Pattern editor: Tidied up the upper panel. It fits perfectly on a 1024x768 screen with treeview enabled and also works on 800x600 with treeview disabled. With the new layout, about 8 more pattern rows can be seen.
[Mod] Pattern editor: Due to this cleanup, the "split keyboard" feature has been removed from the interface. The split keyboard settings dialog can now be accessed by using a shortcut, which should be even faster than the old method.
[Mod] Updated DE_jojo.mkb (Added shortcut for Split Keyboard Settings)
[Mod] Added VU Meter colours for the pattern colour presets
[Ref] Removed various constants, structs and stuff that was connected to the old keyboard "manager", as it has been obsolete for years.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/CommandSet.cpp
trunk/OpenMPT/mptrack/CommandSet.h
trunk/OpenMPT/mptrack/Ctrl_pat.cpp
trunk/OpenMPT/mptrack/Ctrl_pat.h
trunk/OpenMPT/mptrack/Mainfrm.h
trunk/OpenMPT/mptrack/Moptions.cpp
trunk/OpenMPT/mptrack/View_pat.cpp
trunk/OpenMPT/mptrack/View_pat.h
trunk/OpenMPT/mptrack/dlg_misc.cpp
trunk/OpenMPT/mptrack/dlg_misc.h
trunk/OpenMPT/mptrack/mptrack.rc
trunk/OpenMPT/mptrack/resource.h
trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
Modified: trunk/OpenMPT/mptrack/CommandSet.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-12-05 00:31:41 UTC (rev 433)
@@ -2475,6 +2475,11 @@
commands[kcOrderlistPatMinus].isDummy = false;
commands[kcOrderlistPatMinus].Message = "Decrease pattern index";
+ commands[kcShowSplitKeyboardSettings].UID = 1819;
+ commands[kcShowSplitKeyboardSettings].isHidden = false;
+ commands[kcShowSplitKeyboardSettings].isDummy = false;
+ commands[kcShowSplitKeyboardSettings].Message = "Split Keyboard Settings dialog";
+
#ifdef _DEBUG
for (int i=0; i<kcNumCommands; i++) {
if (commands[i].UID != 0) { // ignore unset UIDs
Modified: trunk/OpenMPT/mptrack/CommandSet.h
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.h 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/CommandSet.h 2009-12-05 00:31:41 UTC (rev 433)
@@ -224,6 +224,7 @@
kcShowNoteProperties,
kcShowPatternProperties,
kcShowMacroConfig,
+ kcShowSplitKeyboardSettings,
kcChangeLoopStatus,
kcShowEditMenu,
kcTimeAtRow,
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-12-05 00:31:41 UTC (rev 433)
@@ -53,16 +53,7 @@
ON_COMMAND(ID_PATTERNDETAIL_HI, OnDetailHi)
ON_COMMAND(ID_OVERFLOWPASTE, OnToggleOverflowPaste)
ON_CBN_SELCHANGE(IDC_COMBO_INSTRUMENT, OnInstrumentChanged)
-// -> CODE#0012
-// -> DESC="midi keyboard split"
- ON_CBN_SELCHANGE(IDC_COMBO_SPLITINSTRUMENT, OnSplitInstrumentChanged)
- ON_CBN_SELCHANGE(IDC_COMBO_SPLITNOTE, OnSplitNoteChanged)
- ON_CBN_SELCHANGE(IDC_COMBO_OCTAVEMODIFIER, OnOctaveModifierChanged)
- ON_COMMAND(IDC_PATTERN_OCTAVELINK, OnOctaveLink)
- ON_CBN_SELCHANGE(IDC_COMBO_SPLITVOLUME, OnSplitVolumeChanged)
-// -! NEW_FEATURE#0012
ON_COMMAND(IDC_PATINSTROPLUGGUI, TogglePluginEditor) //rewbs.instroVST
- ON_COMMAND(IDC_PATINSTROPLUGGUI2, ToggleSplitPluginEditor) //rewbs.instroVST
ON_EN_CHANGE(IDC_EDIT_SPACING, OnSpacingChanged)
ON_EN_CHANGE(IDC_EDIT_PATTERNNAME, OnPatternNameChanged)
ON_EN_CHANGE(IDC_EDIT_SEQUENCE_NAME, OnSequenceNameChanged)
@@ -81,12 +72,6 @@
DDX_Control(pDX, IDC_BUTTON1, m_BtnNext);
DDX_Control(pDX, IDC_BUTTON2, m_BtnPrev);
DDX_Control(pDX, IDC_COMBO_INSTRUMENT, m_CbnInstrument);
-// -> CODE#0012
-// -> DESC="midi keyboard split"
- DDX_Control(pDX, IDC_COMBO_SPLITINSTRUMENT, m_CbnSplitInstrument);
- DDX_Control(pDX, IDC_COMBO_SPLITNOTE, m_CbnSplitNote);
- DDX_Control(pDX, IDC_COMBO_OCTAVEMODIFIER, m_CbnOctaveModifier);
- DDX_Control(pDX, IDC_COMBO_SPLITVOLUME, m_CbnSplitVolume);
DDX_Control(pDX, IDC_EDIT_SPACING, m_EditSpacing);
DDX_Control(pDX, IDC_EDIT_ORDERLIST_MARGINS,m_EditOrderListMargins);
DDX_Control(pDX, IDC_EDIT_PATTERNNAME, m_EditPatName);
@@ -192,47 +177,6 @@
UpdateView(HINT_MODTYPE|HINT_PATNAMES, NULL);
RecalcLayout();
-
-
-// -> CODE#0012
-// -> DESC="midi keyboard split"
- //rewbs.merge: fix buffer overrun:
- //CHAR s[8];
- CHAR s[10];
-
- AppendNotesToControl(m_CbnSplitNote, 0, NOTE_MAX - 1);
-
- m_nSplitInstrument = 0;
- m_nSplitNote = 60;
- m_CbnSplitNote.SetCurSel(m_nSplitNote);
-
-
- for(int i = -9 ; i < 10 ; i++){
- wsprintf(s,i < 0 ? "Oct. - %d" : i > 0 ? "Oct. + %d" : "Oct. + 0", abs(i));
- int n = m_CbnOctaveModifier.AddString(s);
- m_CbnOctaveModifier.SetItemData(n, i);
- }
-
- m_nOctaveModifier = 9;
- m_CbnOctaveModifier.SetCurSel(m_nOctaveModifier);
- m_nOctaveLink = TRUE;
- CheckDlgButton(IDC_PATTERN_OCTAVELINK, m_nOctaveLink ? MF_CHECKED : MF_UNCHECKED);
-
- m_CbnSplitVolume.AddString("--");
- m_CbnSplitVolume.SetItemData(0, 0);
- for(int i = 1; i<65 ; i++){
- wsprintf(s,"%d",i);
- int n = m_CbnSplitVolume.AddString(s);
- m_CbnSplitVolume.SetItemData(n, i);
- }
-
- m_nSplitVolume = 0;
- m_CbnSplitVolume.SetCurSel(m_nSplitVolume);
-
-
-
-// -! NEW_FEATURE#0012
-
m_bInitialized = TRUE;
UnlockControls();
@@ -286,10 +230,6 @@
::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), true);
else
::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), false);
- if (HasValidPlug(m_nSplitInstrument))
- ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI2), true);
- else
- ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI2), false);
// Show/hide multisequence controls according the current modtype.
GetDlgItem(IDC_STATIC_SEQUENCE_NAME_FRAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE);
@@ -314,10 +254,7 @@
UINT nPos = 0;
m_CbnInstrument.SetRedraw(FALSE);
m_CbnInstrument.ResetContent();
- m_CbnInstrument.SetItemData(m_CbnInstrument.AddString(" None"), 0);
- m_CbnSplitInstrument.SetRedraw(FALSE);
- m_CbnSplitInstrument.ResetContent();
- m_CbnSplitInstrument.SetItemData(m_CbnSplitInstrument.AddString(" None"), 0);
+ m_CbnInstrument.SetItemData(m_CbnInstrument.AddString(" No Instrument"), 0);
if (m_pSndFile->m_nInstruments) {
for (UINT i=1; i<=m_pSndFile->m_nInstruments; i++) {
if (m_pSndFile->Instruments[i] == NULL) {
@@ -328,8 +265,6 @@
UINT n = m_CbnInstrument.AddString(displayName);
if (n == m_nInstrument) nPos = n;
m_CbnInstrument.SetItemData(n, i);
- m_CbnSplitInstrument.AddString(displayName);
- m_CbnSplitInstrument.SetItemData(n, i);
}
@@ -342,17 +277,10 @@
UINT n = m_CbnInstrument.AddString(s);
if (n == m_nInstrument) nPos = n;
m_CbnInstrument.SetItemData(n, i);
- m_CbnSplitInstrument.AddString(s);
- m_CbnSplitInstrument.SetItemData(n, i);
}
}
m_CbnInstrument.SetCurSel(nPos);
m_CbnInstrument.SetRedraw(TRUE);
-// -> CODE#0012
-// -> DESC="midi keyboard split"
- m_CbnSplitInstrument.SetCurSel(nPos);
- m_CbnSplitInstrument.SetRedraw(TRUE);
-// -! NEW_FEATURE#0012
}
if (dwHintMask & (HINT_MODTYPE|HINT_PATNAMES))
{
@@ -445,11 +373,6 @@
SendViewMessage(VIEWMSG_PATTERNLOOP, (SONG_PATTERNLOOP & m_pSndFile->m_dwSongFlags));
}
OnSpacingChanged();
- SendViewMessage(VIEWMSG_SETSPLITINSTRUMENT, m_nSplitInstrument);
- SendViewMessage(VIEWMSG_SETSPLITNOTE, m_nSplitNote);
- SendViewMessage(VIEWMSG_SETOCTAVEMODIFIER, m_nOctaveModifier);
- SendViewMessage(VIEWMSG_SETOCTAVELINK, m_nOctaveLink);
- SendViewMessage(VIEWMSG_SETSPLITVOLUME, m_nSplitVolume);
SendViewMessage(VIEWMSG_SETDETAIL, m_nDetailLevel);
SendViewMessage(VIEWMSG_SETRECORD, m_bRecord);
SendViewMessage(VIEWMSG_SETVUMETERS, m_bVUMeters);
@@ -765,59 +688,7 @@
}
}
-// -> CODE#0012
-// -> DESC="midi keyboard split"
-void CCtrlPatterns::OnSplitInstrumentChanged()
-//---------------------------------------
-{
- int n = m_CbnSplitInstrument.GetCurSel();
- if ((m_pSndFile) && (n >= 0))
- {
- n = m_CbnSplitInstrument.GetItemData(n);
- int nmax = (m_pSndFile->m_nInstruments) ? m_pSndFile->m_nInstruments : m_pSndFile->m_nSamples;
- if ((n >= 0) && (n <= nmax) && (n != (int)m_nSplitInstrument))
- {
- m_nSplitInstrument = n;
- }
- SendViewMessage(VIEWMSG_SETSPLITINSTRUMENT, m_nSplitInstrument);
- if (HasValidPlug(m_nSplitInstrument))
- ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI2), true);
- else
- ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI2), false);
- SwitchToView();
- }
-}
-void CCtrlPatterns::OnSplitNoteChanged()
-//--------------------------------------
-{
- m_nSplitNote = m_CbnSplitNote.GetCurSel();
- SendViewMessage(VIEWMSG_SETSPLITNOTE, m_nSplitNote);
- SwitchToView();
-}
-void CCtrlPatterns::OnOctaveModifierChanged()
-//-------------------------------------------
-{
- m_nOctaveModifier = m_CbnOctaveModifier.GetCurSel();
- SendViewMessage(VIEWMSG_SETOCTAVEMODIFIER, m_nOctaveModifier);
- SwitchToView();
-}
-void CCtrlPatterns::OnOctaveLink()
-//--------------------------------
-{
- m_nOctaveLink = IsDlgButtonChecked(IDC_PATTERN_OCTAVELINK);
- SendViewMessage(VIEWMSG_SETOCTAVELINK, m_nOctaveLink);
- SwitchToView();
-}
-void CCtrlPatterns::OnSplitVolumeChanged()
-//----------------------------------------
-{
- m_nSplitVolume = m_CbnSplitVolume.GetCurSel();
- SendViewMessage(VIEWMSG_SETSPLITVOLUME, m_nSplitVolume);
- SwitchToView();
-}
-// -! NEW_FEATURE#0012
-
void CCtrlPatterns::OnPrevInstrument()
//------------------------------------
{
@@ -1257,20 +1128,13 @@
SwitchToView();
}
-//rewbs.introVST
+
void CCtrlPatterns::TogglePluginEditor()
//--------------------------------------
{
- TogglePluginEditor(false);
-}
-
-
-void CCtrlPatterns::TogglePluginEditor(bool split)
-//------------------------------------------------
-{
if ((m_nInstrument) && (m_pModDoc))
{
- UINT nPlug = m_pSndFile->Instruments[(split?m_nSplitInstrument:m_nInstrument)]->nMixPlug;
+ UINT nPlug = m_pSndFile->Instruments[m_nInstrument]->nMixPlug;
if (nPlug) //if not no plugin
{
PSNDMIXPLUGIN pPlug = &(m_pSndFile->m_MixPlugins[nPlug-1]);
@@ -1282,11 +1146,6 @@
}
}
-void CCtrlPatterns::ToggleSplitPluginEditor()
-//-------------------------------------------
-{
- TogglePluginEditor(true);
-}
bool CCtrlPatterns::HasValidPlug(UINT instr)
//------------------------------------------
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-12-05 00:31:41 UTC (rev 433)
@@ -161,21 +161,12 @@
COrderList m_OrderList;
CButton m_BtnPrev, m_BtnNext;
CComboBox m_CbnInstrument;
-// -> CODE#0012
-// -> DESC="midi keyboard split"
- CComboBox m_CbnSplitInstrument,m_CbnSplitNote,m_CbnOctaveModifier,m_CbnSplitVolume;
-// -! NEW_FEATURE#0012
CPatEdit m_EditSpacing, m_EditPatName, m_EditOrderListMargins;
CSpinButtonCtrl m_SpinInstrument, m_SpinSpacing, m_SpinOrderListMargins;
CModControlBar m_ToolBar;
INSTRUMENTINDEX m_nInstrument;
UINT m_nDetailLevel;
BOOL m_bRecord, m_bVUMeters, m_bPluginNames;
-// -> CODE#0012
-// -> DESC="midi keyboard split"
- UINT m_nSplitInstrument,m_nSplitNote,m_nOctaveModifier,m_nSplitVolume;
- BOOL m_nOctaveLink;
-// -! NEW_FEATURE#0012
public:
CCtrlPatterns();
@@ -227,14 +218,6 @@
afx_msg void OnChangeLoopStatus();
afx_msg void OnSwitchToView();
afx_msg void OnInstrumentChanged();
-// -> CODE#0012
-// -> DESC="midi keyboard split"
- afx_msg void OnSplitInstrumentChanged();
- afx_msg void OnSplitNoteChanged();
- afx_msg void OnOctaveModifierChanged();
- afx_msg void OnOctaveLink();
- afx_msg void OnSplitVolumeChanged();
-// -! NEW_FEATURE#0012
afx_msg void OnPrevInstrument();
afx_msg void OnNextInstrument();
afx_msg void OnSpacingChanged();
@@ -249,14 +232,12 @@
afx_msg void OnEditUndo();
afx_msg void OnUpdateRecord(CCmdUI *pCmdUI);
afx_msg void TogglePluginEditor(); //rewbs.instroVST
- afx_msg void ToggleSplitPluginEditor(); //rewbs.instroVST
afx_msg void OnToggleOverflowPaste();
afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
- void TogglePluginEditor(bool); //rewbs.instroVST
bool HasValidPlug(UINT instr);
public:
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
Modified: trunk/OpenMPT/mptrack/Mainfrm.h
===================================================================
--- trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-05 00:31:41 UTC (rev 433)
@@ -103,15 +103,6 @@
VIEWMSG_SETCURRENTSAMPLE,
// Instrument-Specific
VIEWMSG_SETCURRENTINSTRUMENT,
-// -> CODE#0012
-// -> DESC="midi keyboard split"
-// rewbs.merge: swapped message direction
- VIEWMSG_SETSPLITINSTRUMENT,
- VIEWMSG_SETSPLITNOTE,
- VIEWMSG_SETOCTAVEMODIFIER,
- VIEWMSG_SETOCTAVELINK,
- VIEWMSG_SETSPLITVOLUME,
-// -! CODE#0012
VIEWMSG_DOSCROLL,
};
@@ -204,18 +195,6 @@
#define PATTERN_LIVEUPDATETREE 0x40000000 // update active sample / instr icons in treeview
-// Keyboard Setup
-enum {
- KEYBOARD_CUSTOM=0,
- KEYBOARD_FT2,
- KEYBOARD_IT,
- KEYBOARD_MPT,
- KEYBOARD_MED
-};
-
-#define KEYBOARD_MASK 0x0F
-#define KEYBOARD_FT2KEYS 0x10
-
// Midi Setup
#define MIDISETUP_RECORDVELOCITY 0x01
#define MIDISETUP_TRANSPOSEKEYBOARD 0x02
@@ -306,46 +285,7 @@
TIMAGE_PATTERN_OVERFLOWPASTE,
};
-//////////////////////////////////////////////////////////////////////////
-// MPT Hot Keys
-enum {
- MPTHOTKEY_TOGGLEEDIT=0,
- MPTHOTKEY_PLAYROW,
- MPTHOTKEY_CURSORCOPY,
- MPTHOTKEY_CURSORPASTE,
- MPTHOTKEY_MUTECHANNEL,
- MPTHOTKEY_SOLOCHANNEL,
- MPTHOTKEY_SELECTCOLUMN,
- MPTHOTKEY_TRANSPOSEUP,
- MPTHOTKEY_TRANSPOSEDOWN,
- MPTHOTKEY_TRANSPOSEOCTUP,
- MPTHOTKEY_TRANSPOSEOCTDOWN,
- MPTHOTKEY_PATTERNAMPLIFY,
- MPTHOTKEY_REPLACEINSTRUMENT,
- MPTHOTKEY_INTERPOLATEVOLUME,
- MPTHOTKEY_INTERPOLATEEFFECT,
- MPTHOTKEY_VISUALIZEEFFECT, //rewbs.fxvis
- MAX_MPTHOTKEYS
-};
-
-typedef struct MPTHOTKEY
-{
- UINT nID; // WM_COMMAND Id - description is also loaded from the string id
- DWORD nMPTHotKey; // Default hot key
- DWORD nFT2HotKey;
- DWORD nITHotKey;
- LPCSTR pszName;
-} MPTHOTKEY, *PMPTHOTKEY;
-
-#define MPTF_CTRL (HOTKEYF_CONTROL<<16)
-#define MPTF_ALT (HOTKEYF_ALT<<16)
-#define MPTF_SHIFT (HOTKEYF_SHIFT<<16)
-#define MPTF_EXT (HOTKEYF_EXT<<16)
-
-extern MPTHOTKEY gDefaultHotKeys[MAX_MPTHOTKEYS];
-
-
/////////////////////////////////////////////////////////////////////////
// Player position notification
@@ -400,7 +340,18 @@
};
+/////////////////////////////////////////////////////////////////////////
+// Split Keyboard Settings (pattern editor)
+#define SPLIT_OCTAVE_RANGE 9
+struct SplitKeyboardSettings
+{
+ UINT splitInstrument, splitNote, splitVolume;
+ int octaveModifier; // determines by how many octaves the notes should be transposed up or down
+ bool octaveLink; // apply octaveModifier
+};
+
+
/////////////////////////////////////////////////////////////////////////
// Misc. Macros
Modified: trunk/OpenMPT/mptrack/Moptions.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moptions.cpp 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-12-05 00:31:41 UTC (rev 433)
@@ -8,84 +8,7 @@
#pragma warning(disable:4244)
-/////////////////////////////////////////////////////////
-// CEditKey
-/*
-BEGIN_MESSAGE_MAP(CEditKey, CEdit)
- ON_WM_KEYDOWN()
-END_MESSAGE_MAP()
-
-void CEditKey::OnKeyDown(UINT nChar, UINT, UINT nFlags)
-//-----------------------------------------------------
-{
- CHAR s[16];
- if (!m_pParent) return;
- if (nChar == VK_TAB)
- {
- Default();
- } else
- if (nChar == VK_LEFT)
- {
- m_pParent->ActivateEdit((m_nId) ? m_nId-1 : 11);
- } else
- if (nChar == VK_RIGHT)
- {
- m_pParent->ActivateEdit((m_nId < 11) ? m_nId+1 : 0);
- } else
- {
- if (nFlags & 0x4000) return;
- if (m_pParent->SetKey(m_nId, nChar, nFlags))
- {
- s[0] = s[1] = 0;
- if (nChar != VK_SPACE) CMainFrame::GetKeyName(nFlags << 16, s, sizeof(s)-1);
- SetWindowText(s);
- m_pParent->ActivateEdit((m_nId+1)%12);
- }
- }
-}
-
-
-BOOL CEditKey::PreTranslateMessage(MSG *pMsg)
-//-------------------------------------------
-{
- if ((pMsg) && (pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN)) return TRUE;
- return CEdit::PreTranslateMessage(pMsg);
-}
-
-const UINT wEditId[12+2] =
-{
- IDC_EDIT1, IDC_EDIT2, IDC_EDIT3, IDC_EDIT4,
- IDC_EDIT5, IDC_EDIT6, IDC_EDIT7, IDC_EDIT8,
- IDC_EDIT9, IDC_EDIT10, IDC_EDIT12, IDC_EDIT13,
- IDC_EDIT14, IDC_EDIT15
-};
-
-
-*/
-// Id, MPT, FT2, IT
-MPTHOTKEY gDefaultHotKeys[MAX_MPTHOTKEYS] =
-{
- {IDC_PATTERN_RECORD, VK_SPACE|MPTF_CTRL, VK_SPACE, VK_SPACE|MPTF_CTRL, "Toggle record mode"},
- {ID_PATTERN_PLAYROW, VK_RETURN|MPTF_CTRL,VK_RETURN|MPTF_CTRL,'8', "Play current row"},
- {ID_CURSORCOPY, VK_RETURN, VK_RETURN, VK_RETURN, "Quick cursor copy"},
- {ID_CURSORPASTE, VK_SPACE, VK_RETURN|MPTF_SHIFT,VK_SPACE, "Quick cursor paste"},
- {ID_PATTERN_MUTE, 0xffff, 0xffff, VK_F9|MPTF_ALT, "Mute current channel"},
- {ID_PATTERN_SOLO, 0xffff, 0xffff, VK_F10|MPTF_ALT, "Solo current channel"},
- {ID_EDIT_SELECTCOLUMN2, 'L'|MPTF_CTRL, 'L'|MPTF_CTRL, 'L'|MPTF_ALT, "Select current column"},
- {ID_TRANSPOSE_UP, 'Q'|MPTF_CTRL, 'Q'|MPTF_CTRL, 'Q'|MPTF_ALT, "Transpose +1"},
- {ID_TRANSPOSE_DOWN, 'A'|MPTF_CTRL, 'A'|MPTF_CTRL, 'A'|MPTF_ALT, "Transpose -1"},
- {ID_TRANSPOSE_OCTUP, 'Q'|MPTF_CTRL|MPTF_SHIFT, 'Q'|MPTF_CTRL|MPTF_SHIFT, 'Q'|MPTF_CTRL|MPTF_ALT, "Transpose +12"},
- {ID_TRANSPOSE_OCTDOWN, 'A'|MPTF_CTRL|MPTF_SHIFT, 'A'|MPTF_CTRL|MPTF_SHIFT, 'A'|MPTF_CTRL|MPTF_ALT, "Transpose -12"},
- {ID_PATTERN_AMPLIFY, 'M'|MPTF_CTRL, 'M'|MPTF_CTRL, 'J'|MPTF_ALT, "Amplify selection"},
- {ID_PATTERN_SETINSTRUMENT, 'I'|MPTF_CTRL, 'I'|MPTF_CTRL, 'S'|MPTF_ALT, "Replace instrument"},
- {ID_PATTERN_INTERPOLATE_VOLUME,'J'|MPTF_CTRL, 'J'|MPTF_CTRL, 'K'|MPTF_ALT, "Interpolate volume"},
- {ID_PATTERN_INTERPOLATE_EFFECT,'K'|MPTF_CTRL, 'K'|MPTF_CTRL, 'X'|MPTF_ALT, "Interpolate effect"},
- {ID_PATTERN_VISUALIZE_EFFECT,'B'|MPTF_CTRL, 'B'|MPTF_CTRL, 'B'|MPTF_ALT, "Visualize effect"}, //rewbs.fxvis
-};
-
-//rewbs.customKeys: moved COptionsKeyboard to a separate file.
-// removed CNotifyHotKey
//////////////////////////////////////////////////////////////
// COptionsColors
@@ -485,6 +408,9 @@
CustomColors[MODCOLOR_PANNING] = RGB(0x00, 0x80, 0x80);
CustomColors[MODCOLOR_PITCH] = RGB(0x80, 0x80, 0x00);
CustomColors[MODCOLOR_GLOBALS] = RGB(0x80, 0x00, 0x00);
+ CustomColors[MODCOLOR_VUMETER_LO] = RGB(0x00, 0xFF, 0x00);
+ CustomColors[MODCOLOR_VUMETER_MED] = RGB(0xFF, 0xFF, 0x00);
+ CustomColors[MODCOLOR_VUMETER_HI] = RGB(0xFF, 0x00, 0x00);
CustomColors[MODCOLOR_SEPSHADOW] = GetSysColor(COLOR_BTNSHADOW);
CustomColors[MODCOLOR_SEPFACE] = GetSysColor(COLOR_BTNFACE);
CustomColors[MODCOLOR_SEPHILITE] = GetSysColor(COLOR_BTNHIGHLIGHT);
@@ -513,6 +439,9 @@
CustomColors[MODCOLOR_GLOBALS] = RGB(0xFF, 0xFF, 0x82);
CustomColors[MODCOLOR_SAMPLE] = RGB(0xFF, 0xFF, 0x82);
CustomColors[MODCOLOR_ENVELOPES] = RGB(0xFF, 0xFF, 0x82);
+ CustomColors[MODCOLOR_VUMETER_LO] = RGB(0x4B, 0x7C, 0x89);
+ CustomColors[MODCOLOR_VUMETER_MED] = RGB(0x5F, 0x98, 0xA7);
+ CustomColors[MODCOLOR_VUMETER_HI] = RGB(0xEA, 0x1C, 0x78);
CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x18, 0x28, 0x2C);
CustomColors[MODCOLOR_SEPFACE] = RGB(0x49, 0x75, 0x82);
CustomColors[MODCOLOR_SEPHILITE] = RGB(0x8A, 0xDB, 0xF3);
@@ -541,6 +470,9 @@
CustomColors[MODCOLOR_GLOBALS] = RGB(0x45, 0x9A, 0x49);
CustomColors[MODCOLOR_SAMPLE] = RGB(0x8E, 0x14, 0x55);
CustomColors[MODCOLOR_ENVELOPES] = RGB(0xA2, 0xA2, 0xA2);
+ CustomColors[MODCOLOR_VUMETER_LO] = RGB(0x25, 0x7D, 0x00);
+ CustomColors[MODCOLOR_VUMETER_MED] = RGB(0xEC, 0x99, 0x00);
+ CustomColors[MODCOLOR_VUMETER_HI] = RGB(0xE1, 0x00, 0x00);
CustomColors[MODCOLOR_SEPSHADOW] = RGB(0xB6, 0x96, 0x79);
CustomColors[MODCOLOR_SEPFACE] = RGB(0xB6, 0x96, 0x79);
CustomColors[MODCOLOR_SEPHILITE] = RGB(0xB6, 0x96, 0x79);
@@ -569,6 +501,9 @@
CustomColors[MODCOLOR_GLOBALS] = RGB(0x66, 0x00, 0x00);
CustomColors[MODCOLOR_SAMPLE] = RGB(0x00, 0xFF, 0x00);
CustomColors[MODCOLOR_ENVELOPES] = RGB(0xFF, 0x00, 0x00);
+ CustomColors[MODCOLOR_VUMETER_LO] = RGB(0x00, 0xC8, 0x00);
+ CustomColors[MODCOLOR_VUMETER_MED] = RGB(0xFF, 0xC8, 0x00);
+ CustomColors[MODCOLOR_VUMETER_HI] = RGB(0xE1, 0x00, 0x00);
CustomColors[MODCOLOR_SEPSHADOW] = RGB(0xAC, 0xA8, 0xA1);
CustomColors[MODCOLOR_SEPFACE] = RGB(0xD6, 0xD0, 0xC6);
CustomColors[MODCOLOR_SEPHILITE] = RGB(0xEC, 0xE8, 0xE1);
Modified: trunk/OpenMPT/mptrack/View_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 00:31:41 UTC (rev 433)
@@ -175,9 +175,16 @@
UpdateSizes();
UpdateScrollSize();
SetCurrentPattern(0);
- m_nFoundInstrument=0;
- m_nLastPlayedRow=0;
+ m_nFoundInstrument = 0;
+ m_nLastPlayedRow = 0;
m_nLastPlayedOrder = 0;
+
+ // Set up keyboard split
+ m_SplitKeyboardSettings.splitInstrument = 0;
+ m_SplitKeyboardSettings.splitNote = NOTE_MIDDLEC - 1;
+ m_SplitKeyboardSettings.splitVolume = 0;
+ m_SplitKeyboardSettings.octaveModifier = 0;
+ m_SplitKeyboardSettings.octaveLink = false;
}
@@ -3214,26 +3221,6 @@
switch(wParam)
{
-// -> CODE#0012
-// -> DESC="midi keyboard split"
-//rewbs.merge: inverted message direction.
- case VIEWMSG_SETSPLITINSTRUMENT:
- m_nSplitInstrument = lParam;
- break;
- case VIEWMSG_SETSPLITNOTE:
- m_nSplitNote = lParam;
- break;
- case VIEWMSG_SETOCTAVEMODIFIER:
- m_nOctaveModifier = lParam;
- break;
- case VIEWMSG_SETOCTAVELINK:
- m_bOctaveLink = lParam;
- break;
- case VIEWMSG_SETSPLITVOLUME:
- m_nSplitVolume = lParam;
- break;
-// -! NEW_FEATURE#0012
-
case VIEWMSG_SETCTRLWND:
m_hWndCtrl = (HWND)lParam;
SetCurrentPattern(SendCtrlMessage(CTRLMSG_GETCURRENTPATTERN));
@@ -3599,6 +3586,7 @@
case kcShowNoteProperties: ShowEditWindow(); return wParam;
case kcShowPatternProperties: OnPatternProperties(); return wParam;
case kcShowMacroConfig: SendCtrlMessage(CTRLMSG_SETUPMACROS); return wParam;
+ case kcShowSplitKeyboardSettings: SetSplitKeyboardSettings(); return wParam;
case kcShowEditMenu: {CPoint pt = GetPointFromPosition((m_nRow << 16) | m_dwCursor);
OnRButtonDown(0, pt); }
return wParam;
@@ -3933,14 +3921,14 @@
const UINT nTick = pSndFile->m_nTickCount;
const PATTERNINDEX nPatPlayback = pSndFile->m_nPattern;
- const bool isSplit = (note <= m_nSplitNote);
+ const bool isSplit = (note <= m_SplitKeyboardSettings.splitNote);
UINT ins = 0;
if (pModDoc)
{
if (isSplit)
{
- ins = m_nSplitInstrument;
- if (m_bOctaveLink) note += 12*(m_nOctaveModifier-9);
+ ins = m_SplitKeyboardSettings.splitInstrument;
+ if (m_SplitKeyboardSettings.octaveLink) note += 12 * m_SplitKeyboardSettings.octaveModifier;
if (note > NOTE_MAX && note < NOTE_NOTECUT) note = NOTE_MAX;
if (note<0) note=1;
}
@@ -4197,13 +4185,16 @@
const bool isSplit = HandleSplit(p, note);
// -- write vol data
- if (vol>=0 && vol<=64 && !(isSplit && m_nSplitVolume)) { //write valid volume, as long as there's no split volume override.
+ if (vol >= 0 && vol <= 64 && !(isSplit && m_SplitKeyboardSettings.splitVolume)) //write valid volume, as long as there's no split volume override.
+ {
p->volcmd=VOLCMD_VOLUME;
p->vol = vol;
- } else if (isSplit && m_nSplitVolume) { //cater for split volume override.
- if (m_nSplitVolume>0 && m_nSplitVolume<=64) {
+ } else if (isSplit && m_SplitKeyboardSettings.splitVolume) //cater for split volume override.
+ {
+ if (m_SplitKeyboardSettings.splitVolume > 0 && m_SplitKeyboardSettings.splitVolume <= 64)
+ {
p->volcmd=VOLCMD_VOLUME;
- p->vol = m_nSplitVolume;
+ p->vol = m_SplitKeyboardSettings.splitVolume;
}
}
@@ -4602,7 +4593,7 @@
bool CViewPattern::HandleSplit(MODCOMMAND* p, int note)
//-----------------------------------------------------
{
- if (note>m_nSplitNote)
+ if (note > m_SplitKeyboardSettings.splitNote)
{
p->note = note;
UINT nins = GetCurrentInstrument();
@@ -4612,12 +4603,12 @@
}
else
{
- if (m_nSplitInstrument)
- p->instr = m_nSplitInstrument;
+ if (m_SplitKeyboardSettings.splitInstrument)
+ p->instr = m_SplitKeyboardSettings.splitInstrument;
else
if(GetCurrentInstrument()) p->instr = GetCurrentInstrument();
- if (m_bOctaveLink)
- note += 12*(m_nOctaveModifier-9);
+ if (m_SplitKeyboardSettings.octaveLink)
+ note += 12 * m_SplitKeyboardSettings.octaveModifier;
if (note > NOTE_MAX && note < NOTE_NOTECUT) note = NOTE_MAX;
if (note<0) note=1;
@@ -5209,3 +5200,16 @@
strcpy(pSndFile->ChnSettings[nChn].szName, dlg.m_sName);
pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS);
}
+
+
+void CViewPattern::SetSplitKeyboardSettings()
+//-------------------------------------------
+{
+ CModDoc *pModDoc = GetDocument();
+ if(pModDoc == nullptr) return;
+ CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return;
+
+ CSplitKeyboadSettings dlg(CMainFrame::GetMainFrame(), pSndFile, &m_SplitKeyboardSettings);
+ dlg.DoModal();
+}
Modified: trunk/OpenMPT/mptrack/View_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.h 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 00:31:41 UTC (rev 433)
@@ -84,9 +84,9 @@
CPatternGotoDialog *m_pGotoWnd;
SIZE m_szHeader, m_szCell;
UINT m_nPattern, m_nRow, m_nMidRow, m_nPlayPat, m_nPlayRow, m_nSpacing, m_nAccelChar, m_nLastPlayedRow, m_nLastPlayedOrder;
- UINT m_nSplitInstrument, m_nSplitNote, m_nOctaveModifier, m_nSplitVolume;
- BOOL m_bOctaveLink;
+ SplitKeyboardSettings m_SplitKeyboardSettings;
+
int m_nXScroll, m_nYScroll;
DWORD m_nDragItem, m_nMenuParam, m_nDetailLevel;
BOOL m_bDragging, m_bInItemRect, m_bRecord, m_bContinueSearch, m_bWholePatternFitsOnScreen;
@@ -308,6 +308,7 @@
afx_msg void OnInitMenu(CMenu* pMenu);
private:
+ void SetSplitKeyboardSettings();
bool HandleSplit(MODCOMMAND* p, int note);
bool BuildChannelControlCtxMenu(HMENU hMenu);
bool BuildPluginCtxMenu(HMENU hMenu, UINT nChn, CSoundFile* pSndFile);
Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp
===================================================================
--- trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-12-05 00:31:41 UTC (rev 433)
@@ -2674,6 +2674,120 @@
}
+////////////////////////////////////////////////////////////////////////////////////////////
+// Keyboard Split Settings (pattern editor)
+
+BEGIN_MESSAGE_MAP(CSplitKeyboadSettings, CDialog)
+ ON_CBN_SELCHANGE(IDC_COMBO_OCTAVEMODIFIER, OnOctaveModifierChanged)
+END_MESSAGE_MAP()
+
+
+void CSplitKeyboadSettings::DoDataExchange(CDataExchange* pDX)
+//------------------------------------------------------------
+{
+ CDialog::DoDataExchange(pDX);
+ //{{AFX_DATA_MAP(CSplitKeyboadSettings)
+ DDX_Control(pDX, IDC_COMBO_SPLITINSTRUMENT, m_CbnSplitInstrument);
+ DDX_Control(pDX, IDC_COMBO_SPLITNOTE, m_CbnSplitNote);
+ DDX_Control(pDX, IDC_COMBO_OCTAVEMODIFIER, m_CbnOctaveModifier);
+ DDX_Control(pDX, IDC_COMBO_SPLITVOLUME, m_CbnSplitVolume);
+ //}}AFX_DATA_MAP
+}
+
+
+BOOL CSplitKeyboadSettings::OnInitDialog()
+//----------------------------------------
+{
+ if(!m_pSndFile) return FALSE;
+
+ CDialog::OnInitDialog();
+
+ CHAR s[64];
+
+ // Split Notes
+ AppendNotesToControl(m_CbnSplitNote, 0, NOTE_MAX - 1);
+ m_CbnSplitNote.SetCurSel(m_pOptions->splitNote);
+
+ // Octave modifier
+ for(int i = -SPLIT_OCTAVE_RANGE; i < SPLIT_OCTAVE_RANGE + 1; i++){
+ wsprintf(s,i < 0 ? "Octave -%d" : i > 0 ? "Octave +%d" : "No Change", abs(i));
+ int n = m_CbnOctaveModifier.AddString(s);
+ m_CbnOctaveModifier.SetItemData(n, i);
+ }
+
+ m_CbnOctaveModifier.SetCurSel(m_pOptions->octaveModifier + SPLIT_OCTAVE_RANGE);
+ CheckDlgButton(IDC_PATTERN_OCTAVELINK, (m_pOptions->octaveLink && m_pOptions->octaveModifier != 0) ? MF_CHECKED : MF_UNCHECKED);
+
+ // Volume
+ m_CbnSplitVolume.AddString("No Change");
+ m_CbnSplitVolume.SetItemData(0, 0);
+ for(int i = 1; i <= 64 ; i++){
+ wsprintf(s,"%d",i);
+ int n = m_CbnSplitVolume.AddString(s);
+ m_CbnSplitVolume.SetItemData(n, i);
+ }
+ m_CbnSplitVolume.SetCurSel(m_pOptions->splitVolume);
+
+ // Instruments
+ m_CbnSplitInstrument.ResetContent();
+ m_CbnSplitInstrument.SetItemData(m_CbnSplitInstrument.AddString("No Instrument"), 0);
+
+ if (m_pSndFile->m_nInstruments) {
+ for (INSTRUMENTINDEX nIns = 1; nIns <= m_pSndFile->m_nInstruments; nIns++)
+ {
+ if (m_pSndFile->Instruments[nIns] == nullptr) {
+ continue;
+ }
+
+ CString displayName = m_pSndFile->GetPatternViewInstrumentName(nIns);
+ int n = m_CbnSplitInstrument.AddString(displayName);
+ m_CbnSplitInstrument.SetItemData(n, nIns);
+ }
+ } else
+ {
+ for (SAMPLEINDEX nSmp = 1; nSmp <= m_pSndFile->m_nSamples; nSmp++)
+ {
+ if ((m_pSndFile->m_szNames[nSmp][0]) || (m_pSndFile->Samples[nSmp].pSample))
+ {
+ wsprintf(s, "%02d: %s", nSmp, m_pSndFile->m_szNames[nSmp]);
+ int n = m_CbnSplitInstrument.AddString(s);
+ m_CbnSplitInstrument.SetItemData(n, nSmp);
+ }
+ }
+ }
+ m_CbnSplitInstrument.SetCurSel(m_pOptions->splitInstrument);
+
+ return TRUE;
+}
+
+
+void CSplitKeyboadSettings::OnOK()
+//--------------------------------
+{
+ CDialog::OnOK();
+
+ m_pOptions->splitNote = m_CbnSplitNote.GetCurSel();
+ m_pOptions->octaveModifier = m_CbnOctaveModifier.GetCurSel() - SPLIT_OCTAVE_RANGE;
+ m_pOptions->octaveLink = (IsDlgButtonChecked(IDC_PATTERN_OCTAVELINK) == TRUE) ? true : false;
+ m_pOptions->splitVolume = m_CbnSplitVolume.GetCurSel();
+ m_pOptions->splitInstrument = m_CbnSplitInstrument.GetItemData(m_CbnSplitInstrument.GetCurSel());
+}
+
+
+void CSplitKeyboadSettings::OnCancel()
+//------------------------------------
+{
+ CDialog::OnCancel();
+}
+
+
+void CSplitKeyboadSettings::OnOctaveModifierChanged()
+//---------------------------------------------------
+{
+ CheckDlgButton(IDC_PATTERN_OCTAVELINK, (m_CbnOctaveModifier.GetCurSel() != 9) ? MF_CHECKED : MF_UNCHECKED);
+}
+
+
////////////////////////////////////////////////////////////////////////////////
//
// Sample Map
Modified: trunk/OpenMPT/mptrack/dlg_misc.h
===================================================================
--- trunk/OpenMPT/mptrack/dlg_misc.h 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/dlg_misc.h 2009-12-05 00:31:41 UTC (rev 433)
@@ -558,6 +558,38 @@
/////////////////////////////////////////////////////////////////////////
+// Keyboard Split Settings (pattern editor)
+
+//=========================================
+class CSplitKeyboadSettings: public CDialog
+//=========================================
+{
+protected:
+ CComboBox m_CbnSplitInstrument,m_CbnSplitNote,m_CbnOctaveModifier,m_CbnSplitVolume;
+ CSoundFile *m_pSndFile;
+
+public:
+ SplitKeyboardSettings *m_pOptions;
+
+ CSplitKeyboadSettings(CWnd *parent, CSoundFile *pSndFile, SplitKeyboardSettings *pOptions):CDialog(IDD_KEYBOARD_SPLIT, parent)
+ {
+ m_pSndFile = pSndFile;
+ m_pOptions = pOptions;
+ }
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX);
+ virtual BOOL OnInitDialog();
+ virtual void OnOK();
+ virtual void OnCancel();
+
+ afx_msg void OnOctaveModifierChanged();
+
+ DECLARE_MESSAGE_MAP()
+};
+
+
+/////////////////////////////////////////////////////////////////////////
// Sample Map
//=================================
Modified: trunk/OpenMPT/mptrack/mptrack.rc
===================================================================
--- trunk/OpenMPT/mptrack/mptrack.rc 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/mptrack.rc 2009-12-05 00:31:41 UTC (rev 433)
@@ -81,7 +81,25 @@
PUSHBUTTON "Cancel",IDCANCEL,96,36,50,14
END
+IDD_KEYBOARD_SPLIT DIALOGEX 0, 0, 184, 137
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Keyboard Split Settings"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,72,114,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,126,114,50,14
+ LTEXT "Split Note",IDC_STATIC,6,8,32,8
+ COMBOBOX IDC_COMBO_SPLITNOTE,60,6,54,137,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Instrument",IDC_STATIC,6,26,42,8
+ COMBOBOX IDC_COMBO_SPLITINSTRUMENT,60,24,114,125,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Volume",IDC_STATIC,6,44,24,8
+ COMBOBOX IDC_COMBO_SPLITVOLUME,60,42,54,146,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Transpose",IDC_PATTERN_OCTAVELINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,61,49,10
+ COMBOBOX IDC_COMBO_OCTAVEMODIFIER,60,60,54,137,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Enabling instrument, volume or octave change will enable the keyboard split feature. These options are applied to the lower section of the keyboard.",IDC_STATIC,6,78,174,24
+END
+
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
@@ -113,6 +131,14 @@
TOPMARGIN, 7
BOTTOMMARGIN, 51
END
+
+ IDD_KEYBOARD_SPLIT, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 177
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 130
+ END
END
#endif // APSTUDIO_INVOKED
@@ -412,41 +438,30 @@
LTEXT "Song Message:",IDC_STATIC,4,2,76,8
END
-IDD_CONTROL_PATTERNS DIALOGEX 0, 0, 585, 114
-STYLE DS_SETFONT | WS_CHILD
+IDD_CONTROL_PATTERNS DIALOGEX 0, 0, 560, 86
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,321,31,55,10
- COMBOBOX IDC_COMBO_INSTRUMENT,19,61,96,137,CBS_DROPDOWNLIST | WS_VSCROLL
- CTEXT "Row spacing",IDC_STATIC,171,32,42,8,SS_CENTERIMAGE
- EDITTEXT IDC_EDIT_SPACING,219,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP
- CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,239,30,11,11
- PUSHBUTTON "<<",IDC_BUTTON2,3,84,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE
- PUSHBUTTON ">>",IDC_BUTTON1,15,84,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE
- CTEXT "Pattern name",IDC_STATIC,9,32,43,8,SS_CENTERIMAGE
- EDITTEXT IDC_EDIT_PATTERNNAME,57,30,107,12,ES_AUTOHSCROLL
- CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,372,18
- CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,7,61,11,12
- COMBOBOX IDC_COMBO_SPLITINSTRUMENT,243,60,96,125,CBS_DROPDOWNLIST | WS_VSCROLL
- COMBOBOX IDC_COMBO_SPLITNOTE,189,60,32,137,CBS_DROPDOWNLIST | WS_VSCROLL
- LTEXT "Note",IDC_STATIC,171,62,16,8
- LTEXT "Instr.",IDC_STATIC,225,62,16,8
- CONTROL "Transpose",IDC_PATTERN_OCTAVELINK,"Button",BS_AUTOCHECKBOX | BS_FLAT,513,61,49,10
- COMBOBOX IDC_COMBO_OCTAVEMODIFIER,465,60,44,137,CBS_DROPDOWNLIST | WS_VSCROLL
- COMBOBOX IDC_COMBO_SPLITVOLUME,399,60,30,146,CBS_DROPDOWNLIST | WS_VSCROLL
- LTEXT "Vol.",IDC_STATIC,381,62,13,8
- PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,121,61,33,13,0,WS_EX_STATICEDGE
- PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI2,345,60,30,13,0,WS_EX_STATICEDGE
- GROUPBOX "Main instrument",IDC_STATIC,3,48,154,30
- GROUPBOX "Keyboard Split",IDC_STATIC,165,48,402,30
- LTEXT "Oct. shift",IDC_STATIC,435,62,29,8
- GROUPBOX "",IDC_STATIC,3,22,376,24
- CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,261,31,57,10
- EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,3,98,28,12,ES_AUTOHSCROLL | ES_READONLY
- CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,16,103,11,11
- EDITTEXT IDC_EDIT_SEQUENCE_NAME,453,30,108,12,ES_AUTOHSCROLL
- CTEXT "Sequence name",IDC_STATIC_SEQUENCE_NAME,393,32,53,8,SS_CENTERIMAGE
- GROUPBOX "",IDC_STATIC_SEQUENCE_NAME_FRAME,387,22,180,24
+ CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,31,55,10
+ COMBOBOX IDC_COMBO_INSTRUMENT,18,30,96,137,CBS_DROPDOWNLIST | WS_VSCROLL
+ CTEXT "Row Spacing",IDC_STATIC,162,32,42,8,SS_CENTERIMAGE
+ EDITTEXT IDC_EDIT_SPACING,210,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP
+ CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,230,30,11,11
+ PUSHBUTTON "<<",IDC_BUTTON2,3,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE
+ PUSHBUTTON ">>",IDC_BUTTON1,15,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE
+ LTEXT "Pattern Name",IDC_STATIC,384,32,48,8,SS_CENTERIMAGE
+ EDITTEXT IDC_EDIT_PATTERNNAME,439,29,108,12,ES_AUTOHSCROLL
+ CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,370,18
+ CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,6,30,11,12
+ PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,120,30,33,13,0,WS_EX_STATICEDGE
+ GROUPBOX "",IDC_STATIC,3,22,369,24
+ CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,31,57,10
+ EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,3,65,28,12,ES_AUTOHSCROLL | ES_READONLY
+ CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,16,70,11,11
+ EDITTEXT IDC_EDIT_SEQUENCE_NAME,439,8,108,12,ES_AUTOHSCROLL
+ CTEXT "Sequence Name",IDC_STATIC_SEQUENCE_NAME,384,10,53,8,SS_CENTERIMAGE
+ GROUPBOX "",IDC_STATIC_SEQUENCE_NAME_FRAME,378,0,174,24
+ GROUPBOX "",IDC_STATIC,378,22,174,24
END
IDD_CONTROL_SAMPLES DIALOGEX 0, 0, 544, 106
@@ -1484,14 +1499,13 @@
IDD_CONTROL_PATTERNS, DIALOG
BEGIN
- RIGHTMARGIN, 573
+ RIGHTMARGIN, 548
VERTGUIDE, 39
VERTGUIDE, 134
- BOTTOMMARGIN, 104
+ BOTTOMMARGIN, 76
HORZGUIDE, 37
HORZGUIDE, 61
HORZGUIDE, 73
- HORZGUIDE, 87
END
IDD_CONTROL_SAMPLES, DIALOG
Modified: trunk/OpenMPT/mptrack/resource.h
===================================================================
--- trunk/OpenMPT/mptrack/resource.h 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/mptrack/resource.h 2009-12-05 00:31:41 UTC (rev 433)
@@ -116,6 +116,7 @@
#define IDR_BUILTIN_TUNINGS 520
#define IDD_CLEANUP_SONG 521
#define IDD_CHANNEL_NAME 522
+#define IDD_KEYBOARD_SPLIT 523
#define IDC_BUTTON1 1001
#define IDC_BUTTON2 1002
#define IDC_BUTTON3 1003
@@ -1151,18 +1152,18 @@
#define ID_ORDERLIST_EDIT_COPY 59231
#define ID_ORDERLIST_EDIT_CUT 59232
#define ID_ORDERLIST_EDIT_PASTE 59233
-#define ID_CHANNEL_RENAME 59234
-#define ID_EDIT_PASTEFLOOD 59235
+#define ID_CHANNEL_RENAME 59234
+#define ID_EDIT_PASTEFLOOD 59235
#define ID_MODTREE_DUPLICATE 59236
-#define ID_MODTREE_INSERT 59237
-#define ID_MODTREE_SWITCHTO 59238
+#define ID_MODTREE_INSERT 59237
+#define ID_MODTREE_SWITCHTO 59238
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
-#define _APS_NEXT_RESOURCE_VALUE 523
+#define _APS_NEXT_RESOURCE_VALUE 524
#define _APS_NEXT_COMMAND_VALUE 59239
#define _APS_NEXT_CONTROL_VALUE 2412
#define _APS_NEXT_SYMED_VALUE 901
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-12-04 19:30:31 UTC (rev 432)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-12-05 00:31:41 UTC (rev 433)
@@ -78,6 +78,7 @@
2:1806:2:68:1 //Duplicate pattern: Ctrl+D (KeyDown)
2:1662:6:80:1 //Toggle channel's plugin editor: Ctrl+Alt+P (KeyDown)
2:1062:0:93:1 //Show note properties: ANWENDUNG (KeyDown)
+2:1819:2:69:1 //Split Keyboard Settings dialog: Ctrl+E (KeyDown)
2:1780:2:80:1 //Show playback time at current row: Ctrl+P (KeyDown)
2:1786:2:82:1 //Reset channel: Ctrl+R (KeyDown)
2:1007:2:81:5 //Transpose +1: Ctrl+Q (KeyDown|KeyHold)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-12-04 19:30:45
|
Revision: 432
http://modplug.svn.sourceforge.net/modplug/?rev=432&view=rev
Author: saga-games
Date: 2009-12-04 19:30:31 +0000 (Fri, 04 Dec 2009)
Log Message:
-----------
[New] Two new keymaps: French Laptop by Paul Legovitch, Norwegian MPT Classic by Rakib.
[Imp] Changed Buzz colour preset a bit more
[Imp] Treeview: Switching between sequences should be easier now. There's a context menu entry for it and double-clicking on an empty sequence will switch to it (as there are no orderlist item to click on).
[Ref] Rewrote the treeview GetModItem crap a bit, as it was a lot of redundant code which even differed from function to function (f.e. usage of HIWORD vs. >> 16 shift)
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Moptions.cpp
trunk/OpenMPT/mptrack/View_tre.cpp
trunk/OpenMPT/mptrack/View_tre.h
trunk/OpenMPT/mptrack/resource.h
Added Paths:
-----------
trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_laptop_(legovitch).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/NO_mpt_classic_(rakib).mkb
Modified: trunk/OpenMPT/mptrack/Moptions.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moptions.cpp 2009-12-01 18:43:53 UTC (rev 431)
+++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-12-04 19:30:31 UTC (rev 432)
@@ -569,9 +569,9 @@
CustomColors[MODCOLOR_GLOBALS] = RGB(0x66, 0x00, 0x00);
CustomColors[MODCOLOR_SAMPLE] = RGB(0x00, 0xFF, 0x00);
CustomColors[MODCOLOR_ENVELOPES] = RGB(0xFF, 0x00, 0x00);
- CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x9A, 0x87, 0x63);
- CustomColors[MODCOLOR_SEPFACE] = RGB(0xE1, 0xDB, 0xD0);
- CustomColors[MODCOLOR_SEPHILITE] = RGB(0xFF, 0xFF, 0xFF);
+ CustomColors[MODCOLOR_SEPSHADOW] = RGB(0xAC, 0xA8, 0xA1);
+ CustomColors[MODCOLOR_SEPFACE] = RGB(0xD6, 0xD0, 0xC6);
+ CustomColors[MODCOLOR_SEPHILITE] = RGB(0xEC, 0xE8, 0xE1);
CustomColors[MODCOLOR_BLENDCOLOR] = RGB(0xE1, 0xDB, 0xD0);
OnPreviewChanged();
}
Modified: trunk/OpenMPT/mptrack/View_tre.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_tre.cpp 2009-12-01 18:43:53 UTC (rev 431)
+++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-12-04 19:30:31 UTC (rev 432)
@@ -75,8 +75,9 @@
ON_COMMAND(ID_MODTREE_UNMUTEALL, OnUnmuteAllTreeItem)
ON_COMMAND(ID_MODTREE_DUPLICATE, OnDuplicateTreeItem)
ON_COMMAND(ID_MODTREE_INSERT, OnInsertTreeItem)
+ ON_COMMAND(ID_MODTREE_SWITCHTO, OnSwitchToTreeItem)
-// -> CODE#0023
+ // -> CODE#0023
// -> DESC="IT project files (.itp)"
ON_COMMAND(ID_MODTREE_SETPATH, OnSetItemPath)
ON_COMMAND(ID_MODTREE_SAVEITEM, OnSaveItem)
@@ -1149,11 +1150,12 @@
{
if (hItem)
{
- uint64 qwItemType = GetModItem(hItem);
- DWORD dwItem = (DWORD)(qwItemType >> 16);
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ uint32 modItemID = GetModItemID(modItem);
PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx];
CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL;
- switch(qwItemType & 0xFFFF)
+ switch(modItemType)
{
case MODITEM_COMMENTS:
if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_COMMENTS, 0);
@@ -1164,25 +1166,25 @@
return TRUE;*/
case MODITEM_ORDER:
- if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, dwItem | 0x8000);
+ if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, modItemID | 0x8000);
return TRUE;
case MODITEM_PATTERN:
- if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, dwItem);
+ if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, modItemID);
return TRUE;
case MODITEM_SAMPLE:
- if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_SAMPLES, dwItem);
+ if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_SAMPLES, modItemID);
return TRUE;
case MODITEM_INSTRUMENT:
- if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_INSTRUMENTS, dwItem);
+ if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_INSTRUMENTS, modItemID);
return TRUE;
case MODITEM_MIDIPERCUSSION:
- dwItem |= 0x80;
+ modItemID |= 0x80;
case MODITEM_MIDIINSTRUMENT:
- OpenMidiInstrument(dwItem);
+ OpenMidiInstrument(modItemID);
return TRUE;
case MODITEM_EFFECT:
@@ -1201,7 +1203,7 @@
return TRUE;
default:
- if (qwItemType & 0x8000)
+ if (modItemType & 0x8000)
{
PlayItem(hItem);
return TRUE;
@@ -1217,11 +1219,12 @@
{
if (hItem)
{
- uint64 qwItemType = GetModItem(hItem);
- DWORD dwItem = (DWORD)(qwItemType >> 16);
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ uint32 modItemID = GetModItemID(modItem);
PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx];
CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL;
- switch(qwItemType & 0xFFFF)
+ switch(modItemType)
{
case MODITEM_SAMPLE:
if (pModDoc)
@@ -1233,7 +1236,7 @@
} else
{
pModDoc->NoteOff(0, TRUE); // cut previous playing samples
- pModDoc->PlayNote(nParam & 0x7F, 0, dwItem, FALSE);
+ pModDoc->PlayNote(nParam & 0x7F, 0, modItemID, FALSE);
}
}
return TRUE;
@@ -1248,13 +1251,13 @@
} else
{
pModDoc->NoteOff(0, TRUE);
- pModDoc->PlayNote(nParam, dwItem, 0, FALSE);
+ pModDoc->PlayNote(nParam, modItemID, 0, FALSE);
}
}
return TRUE;
case MODITEM_EFFECT:
- if ((pModDoc) && (dwItem < MAX_MIXPLUGINS))
+ if ((pModDoc) && (modItemID < MAX_MIXPLUGINS))
{/*
CSoundFile *pSndFile = pModDoc->GetSoundFile();
PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[dwItem];
@@ -1263,7 +1266,7 @@
CVstPlugin *pVstPlugin = (CVstPlugin *)pPlugin->pMixPlugin;
pVstPlugin->ToggleEditor();
}*/
- pModDoc->TogglePluginEditor(dwItem);
+ pModDoc->TogglePluginEditor(modItemID);
}
return TRUE;
@@ -1280,7 +1283,7 @@
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
if (pMainFrm)
{
- if ((qwItemType & 0xFFFF) == MODITEM_INSLIB_INSTRUMENT)
+ if (modItemType == MODITEM_INSLIB_INSTRUMENT)
{
pMainFrm->PlaySoundFile(&m_SongFile, n, 0, nParam);
} else
@@ -1298,34 +1301,34 @@
break;
case MODITEM_MIDIPERCUSSION:
- dwItem |= 0x80;
+ modItemID |= 0x80;
case MODITEM_MIDIINSTRUMENT:
{
LPMIDILIBSTRUCT lpMidiLib = CTrackApp::GetMidiLibrary();
- if ((lpMidiLib) && (dwItem < 256) && (lpMidiLib->MidiMap[dwItem]))
+ if ((lpMidiLib) && (modItemID < 256) && (lpMidiLib->MidiMap[modItemID]))
{
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
- if (pMainFrm) pMainFrm->PlaySoundFile(lpMidiLib->MidiMap[dwItem], nParam);
+ if (pMainFrm) pMainFrm->PlaySoundFile(lpMidiLib->MidiMap[modItemID], nParam);
}
}
break;
default:
- if (qwItemType & 0x8000)
+ if (modItemType & 0x8000)
{
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
- UINT bank = (qwItemType & 0x3F000000) >> 24;
+ UINT bank = (modItem & 0x3F000000) >> 24;
if ((bank < MAX_DLS_BANKS) && (CTrackApp::gpDLSBanks[bank]) && (pMainFrm))
{
CDLSBank *pDLSBank = CTrackApp::gpDLSBanks[bank];
- UINT rgn = 0, instr = (qwItemType & 0x00007FFF);
+ UINT rgn = 0, instr = (modItem & 0x00007FFF);
// Drum
- if (qwItemType & 0x80000000)
+ if (modItem & 0x80000000)
{
- rgn = (qwItemType & 0x007F0000) >> 16;
+ rgn = (modItem & 0x007F0000) >> 16;
} else
// Melodic
- if (qwItemType & 0x40000000)
+ if (modItem & 0x40000000)
{
if ((!nParam) || (nParam > NOTE_MAX)) nParam = NOTE_MIDDLEC;
rgn = pDLSBank->GetRegionFromKey(instr, nParam-1);
@@ -1379,63 +1382,65 @@
BOOL CModTree::DeleteTreeItem(HTREEITEM hItem)
//--------------------------------------------
{
- uint64 qwItemType = GetModItem(hItem);
- DWORD dwItem = (DWORD)(qwItemType >> 16);
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+
PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx];
CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : nullptr;
CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr;
- switch(qwItemType & 0xFFFF)
+ switch(modItemType)
{
case MODITEM_SEQUENCE:
if (pModDoc && pSndFile)
{
- pSndFile->Order.RemoveSequence((SEQUENCEINDEX)(dwItem & 0xFFFF));
+ pSndFile->Order.RemoveSequence((SEQUENCEINDEX)(modItemID & 0xFFFF));
pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL);
}
break;
case MODITEM_ORDER:
- if ((pModDoc) && (pModDoc->RemoveOrder((SEQUENCEINDEX)(dwItem >> 16), (ORDERINDEX)(dwItem & 0xFFFF))))
+ if ((pModDoc) && (pModDoc->RemoveOrder((SEQUENCEINDEX)(modItemID >> 16), (ORDERINDEX)(modItemID & 0xFFFF))))
{
pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL);
}
break;
case MODITEM_PATTERN:
- if ((pModDoc) && (pModDoc->RemovePattern((PATTERNINDEX)dwItem)))
+ if ((pModDoc) && (pModDoc->RemovePattern((PATTERNINDEX)modItemID)))
{
//pModDoc->UpdateAllViews(NULL, (dwItem << 16)|HINT_PATTERNDATA|HINT_PATNAMES);
- pModDoc->UpdateAllViews(NULL, (UINT(dwItem) << HINT_SHIFT_PAT) | HINT_PATTERNDATA|HINT_PATNAMES);
+ pModDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_PAT) | HINT_PATTERNDATA|HINT_PATNAMES);
}
break;
case MODITEM_SAMPLE:
- if ((pModDoc) && (pModDoc->RemoveSample((SAMPLEINDEX)dwItem)))
+ if ((pModDoc) && (pModDoc->RemoveSample((SAMPLEINDEX)modItemID)))
{
//pModDoc->UpdateAllViews(NULL, (dwItem << 16) | HINT_SMPNAMES|HINT_SAMPLEDATA|HINT_SAMPLEINFO);
- pModDoc->UpdateAllViews(NULL, (UINT(dwItem) << HINT_SHIFT_SMP) | HINT_SMPNAMES|HINT_SAMPLEDATA|HINT_SAMPLEINFO);
+ pModDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_SMP) | HINT_SMPNAMES|HINT_SAMPLEDATA|HINT_SAMPLEINFO);
}
break;
case MODITEM_INSTRUMENT:
- if ((pModDoc) && (pModDoc->RemoveInstrument((INSTRUMENTINDEX)dwItem)))
+ if ((pModDoc) && (pModDoc->RemoveInstrument((INSTRUMENTINDEX)modItemID)))
{
//pModDoc->UpdateAllViews(NULL, (dwItem << 16)|HINT_MODTYPE|HINT_ENVELOPE|HINT_INSTRUMENT);
- pModDoc->UpdateAllViews(NULL, (UINT(dwItem) << HINT_SHIFT_INS) | HINT_MODTYPE|HINT_ENVELOPE|HINT_INSTRUMENT);
+ pModDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_INS) | HINT_MODTYPE|HINT_ENVELOPE|HINT_INSTRUMENT);
}
break;
case MODITEM_MIDIINSTRUMENT:
- SetMidiInstrument(dwItem, "");
+ SetMidiInstrument(modItemID, "");
RefreshMidiLibrary();
break;
case MODITEM_MIDIPERCUSSION:
- SetMidiPercussion(dwItem, "");
+ SetMidiPercussion(modItemID, "");
RefreshMidiLibrary();
break;
case MODITEM_DLSBANK_FOLDER:
- CTrackApp::RemoveDLSBank(dwItem);
+ CTrackApp::RemoveDLSBank(modItemID);
RefreshDlsBanks();
break;
@@ -1463,12 +1468,11 @@
BOOL CModTree::OpenTreeItem(HTREEITEM hItem)
//------------------------------------------
{
- uint64 qwItemType = GetModItem(hItem);
- //DWORD dwItem = dwItemType >> 16;
- //PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx];
- //CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ //const uint32 modItemID = GetModItemID(modItem);
- switch(qwItemType & 0xFFFF)
+ switch(modItemType)
{
case MODITEM_INSLIB_SONG:
{
@@ -1908,9 +1912,9 @@
PMODTREEDOCINFO pInfo = DocInfo[m_nDragDocNdx];
pdropinfo->pModDoc = (pInfo) ? pInfo->pModDoc : NULL;
pdropinfo->dwDropType = DRAGONDROP_NOTHING;
- pdropinfo->dwDropItem = (DWORD)(m_qwItemDrag >> 16);
+ pdropinfo->dwDropItem = GetModItemID(m_qwItemDrag);
pdropinfo->lDropParam = 0;
- switch(m_qwItemDrag & 0xFFFF)
+ switch(GetModItemType(m_qwItemDrag))
{
case MODITEM_ORDER:
pdropinfo->dwDropType = DRAGONDROP_ORDER;
@@ -1991,27 +1995,29 @@
BOOL CModTree::CanDrop(HTREEITEM hItem, BOOL bDoDrop)
//---------------------------------------------------
{
- uint64 qwItemDrop = GetModItem(hItem);
- DWORD dwItemDrag = (DWORD)(m_qwItemDrag >> 16);
- DWORD dwDragType = m_qwItemDrag & 0xFFFF;
- DWORD dwDropType = (DWORD)(qwItemDrop & 0xFFFF);
+ const uint64 modItemDrop = GetModItem(hItem);
+ const uint32 modItemDropType = GetModItemType(modItemDrop);
+ const uint32 modItemDropID = GetModItemID(modItemDrop);
+
+ const uint32 modItemDragType = GetModItemType(m_qwItemDrag);
+ const uint32 modItemDragID = GetModItemID(m_qwItemDrag);
+
PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx];
CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL;
- qwItemDrop >>= 16;
- switch(dwDropType)
+ switch(modItemDropType)
{
case MODITEM_ORDER:
case MODITEM_SEQUENCE:
- if ((dwDragType == MODITEM_ORDER) && (pModDoc) && (m_nDocNdx == m_nDragDocNdx))
+ if ((modItemDragType == MODITEM_ORDER) && (pModDoc) && (m_nDocNdx == m_nDragDocNdx))
{
if (bDoDrop)
{
- SEQUENCEINDEX nSeqFrom = (SEQUENCEINDEX)(dwItemDrag >> 16), nSeqTo = (SEQUENCEINDEX)(qwItemDrop >> 16);
- ORDERINDEX nOrdFrom = (ORDERINDEX)(dwItemDrag & 0xFFFF), nOrdTo = (ORDERINDEX)(qwItemDrop & 0xFFFF);
- if(dwDropType == MODITEM_SEQUENCE)
+ SEQUENCEINDEX nSeqFrom = (SEQUENCEINDEX)(modItemDragID >> 16), nSeqTo = (SEQUENCEINDEX)(modItemDropID >> 16);
+ ORDERINDEX nOrdFrom = (ORDERINDEX)(modItemDragID & 0xFFFF), nOrdTo = (ORDERINDEX)(modItemDropID & 0xFFFF);
+ if(modItemDropType == MODITEM_SEQUENCE)
{
// drop on sequence -> attach
- nSeqTo = (SEQUENCEINDEX)(qwItemDrop & 0xFFFF);
+ nSeqTo = (SEQUENCEINDEX)(modItemDropID & 0xFFFF);
nOrdTo = pModDoc->GetSoundFile()->Order.GetSequence(nSeqTo).GetLengthTailTrimmed();
}
@@ -2033,16 +2039,16 @@
case MODITEM_MIDIINSTRUMENT:
case MODITEM_MIDIPERCUSSION:
- if ((dwDragType == MODITEM_INSLIB_SAMPLE) || (dwDragType == MODITEM_INSLIB_INSTRUMENT))
+ if ((modItemDragType == MODITEM_INSLIB_SAMPLE) || (modItemDragType == MODITEM_INSLIB_INSTRUMENT))
{
if (bDoDrop)
{
CHAR szFullPath[_MAX_PATH] = "";
InsLibGetFullPath(m_hItemDrag, szFullPath);
- if (dwDropType == MODITEM_MIDIINSTRUMENT)
- SetMidiInstrument((DWORD)qwItemDrop, szFullPath);
+ if (modItemDropType == MODITEM_MIDIINSTRUMENT)
+ SetMidiInstrument((DWORD)modItemDropID, szFullPath);
else
- SetMidiPercussion((DWORD)qwItemDrop, szFullPath);
+ SetMidiPercussion((DWORD)modItemDropID, szFullPath);
}
return TRUE;
}
@@ -2171,7 +2177,7 @@
}
m_qwItemDrag = GetModItem(m_hItemDrag);
m_nDragDocNdx = m_nDocNdx;
- switch(m_qwItemDrag & 0xFFFF)
+ switch(GetModItemType(m_qwItemDrag))
{
case MODITEM_ORDER:
case MODITEM_PATTERN:
@@ -2281,13 +2287,13 @@
{
UINT nDefault = 0;
BOOL bSep = FALSE;
- uint64 qwItemType;
- qwItemType = GetModItem(hItem);
- const DWORD dwItemNo = (DWORD)(qwItemType >> 16);
- qwItemType &= 0xFFFF;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+
SelectItem(hItem);
- switch(qwItemType)
+ switch(modItemType)
{
case MODITEM_COMMENTS:
nDefault = ID_MODTREE_EXECUTE;
@@ -2299,12 +2305,19 @@
nDefault = ID_MODTREE_EXECUTE;
AppendMenu(hMenu, MF_STRING, nDefault, "&Edit Pattern");
AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE,
- (qwItemType == MODITEM_ORDER) ? "&Delete from list" : "&Delete Pattern");
+ (modItemType == MODITEM_ORDER) ? "&Delete from list" : "&Delete Pattern");
break;
case MODITEM_SEQUENCE:
- //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");
+ {
+ CModDoc *pModDoc = GetDocumentFromItem(hItem);
+ CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr;
+ if(pModDoc && pSndFile && (pModDoc->GetModType() == MOD_TYPE_MPT) && pSndFile->Order.GetSequence((SEQUENCEINDEX)modItemID).GetLength() == 0)
+ {
+ nDefault = ID_MODTREE_SWITCHTO;
+ }
+ }
+ AppendMenu(hMenu, MF_STRING, ID_MODTREE_SWITCHTO, "&Switch to Seqeuence");
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");
@@ -2334,7 +2347,7 @@
if ((pModDoc) && (!pModDoc->GetNumInstruments()))
{
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
- AppendMenu(hMenu, (pModDoc->IsSampleMuted((SAMPLEINDEX)dwItemNo) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Sample");
+ AppendMenu(hMenu, (pModDoc->IsSampleMuted((SAMPLEINDEX)modItemID) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Sample");
AppendMenu(hMenu, MF_STRING, ID_MODTREE_SOLO, "&Solo Sample");
AppendMenu(hMenu, MF_STRING, ID_MODTREE_UNMUTEALL, "&Unmute all");
}
@@ -2351,7 +2364,7 @@
if ((pModDoc) && (pModDoc->GetNumInstruments()))
{
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
- AppendMenu(hMenu, (pModDoc->IsInstrumentMuted((INSTRUMENTINDEX)dwItemNo) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Instrument");
+ AppendMenu(hMenu, (pModDoc->IsInstrumentMuted((INSTRUMENTINDEX)modItemID) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Instrument");
AppendMenu(hMenu, MF_STRING, ID_MODTREE_SOLO, "&Solo Instrument");
AppendMenu(hMenu, MF_STRING, ID_MODTREE_UNMUTEALL, "&Unmute all");
// -> CODE#0023
@@ -2372,7 +2385,7 @@
CModDoc *pModDoc = GetDocumentFromItem(hItem);
CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL;
if (pSndFile) {
- PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[dwItemNo];
+ PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[modItemID];
if (pPlugin) {
bool bypassed = ((pPlugin->Info.dwInputRouting&MIXPLUG_INPUTF_BYPASS) != 0);
AppendMenu(hMenu, (bypassed?MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Bypass");
@@ -2431,7 +2444,7 @@
break;
default:
- if (qwItemType & 0x8000)
+ if (modItemType & 0x8000)
{
nDefault = ID_MODTREE_PLAY;
AppendMenu(hMenu, MF_STRING, ID_MODTREE_PLAY, "&Play Instrument");
@@ -2439,9 +2452,9 @@
break;
}
if (nDefault) SetMenuDefaultItem(hMenu, nDefault, FALSE);
- if ((qwItemType == MODITEM_INSLIB_FOLDER)
- || (qwItemType == MODITEM_INSLIB_SONG)
- || (qwItemType == MODITEM_HDR_INSTRUMENTLIB))
+ if ((modItemType == MODITEM_INSLIB_FOLDER)
+ || (modItemType == MODITEM_INSLIB_SONG)
+ || (modItemType == MODITEM_HDR_INSTRUMENTLIB))
{
if ((bSep) || (nDefault)) AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
AppendMenu(hMenu, (m_bShowAllFiles) ? (MF_STRING|MF_CHECKED) : MF_STRING, ID_MODTREE_SHOWALLFILES, "Show All Files");
@@ -2470,8 +2483,11 @@
HTREEITEM hItem = HitTest(pt, &flags);
if (hItem != NULL)
{
- uint64 qwItem = GetModItem(hItem);
- switch(qwItem & 0xFFFF)
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+
+ switch(modItemType)
{
case MODITEM_INSLIB_FOLDER:
case MODITEM_INSLIB_SONG:
@@ -2486,8 +2502,8 @@
if (pFrame)
{
pFrame->SendMessage(WM_MOD_INSTRSELECTED,
- ((qwItem & 0xffff) == MODITEM_INSTRUMENT) ? TRUE : FALSE,
- (LPARAM)(qwItem >> 16));
+ (modItemType == MODITEM_INSTRUMENT) ? TRUE : FALSE,
+ (LPARAM)modItemID);
}
}
break;
@@ -2717,32 +2733,32 @@
//-----------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType;
CModDoc *pModDoc;
- qwItemType = GetModItem(hItem);
- const DWORD dwItemNo = (DWORD)(qwItemType >> 16);
- qwItemType &= 0xFFFF;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+
pModDoc = GetDocumentFromItem(hItem);
if (pModDoc)
{
- if ((qwItemType == MODITEM_SAMPLE) && (!pModDoc->GetNumInstruments()))
+ if ((modItemType == MODITEM_SAMPLE) && (!pModDoc->GetNumInstruments()))
{
- pModDoc->MuteSample((SAMPLEINDEX)dwItemNo, (pModDoc->IsSampleMuted((SAMPLEINDEX)dwItemNo)) ? false : true);
+ pModDoc->MuteSample((SAMPLEINDEX)modItemID, (pModDoc->IsSampleMuted((SAMPLEINDEX)modItemID)) ? false : true);
UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SMPNAMES | HINT_SAMPLEINFO);
} else
- if ((qwItemType == MODITEM_INSTRUMENT) && (pModDoc->GetNumInstruments()))
+ if ((modItemType == MODITEM_INSTRUMENT) && (pModDoc->GetNumInstruments()))
{
- pModDoc->MuteInstrument((INSTRUMENTINDEX)dwItemNo, (pModDoc->IsInstrumentMuted((INSTRUMENTINDEX)dwItemNo)) ? false : true);
+ pModDoc->MuteInstrument((INSTRUMENTINDEX)modItemID, (pModDoc->IsInstrumentMuted((INSTRUMENTINDEX)modItemID)) ? false : true);
UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_INSNAMES | HINT_INSTRUMENT);
}
- if ((qwItemType == MODITEM_EFFECT))
+ if ((modItemType == MODITEM_EFFECT))
{
CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL;
if (pSndFile) {
- PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[dwItemNo];
+ PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[modItemID];
if (pPlugin) {
CVstPlugin *pVstPlugin = (CVstPlugin *)pPlugin->pMixPlugin;
if (pVstPlugin) pVstPlugin->Bypass();
@@ -2758,29 +2774,29 @@
//-----------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType;
CModDoc *pModDoc;
- qwItemType = GetModItem(hItem);
- const DWORD dwItemNo = (DWORD)(qwItemType >> 16);
- qwItemType &= 0xFFFF;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+
pModDoc = GetDocumentFromItem(hItem);
if (pModDoc)
{
INSTRUMENTINDEX nInstruments = pModDoc->GetNumInstruments();
- if ((qwItemType == MODITEM_SAMPLE) && (!nInstruments))
+ if ((modItemType == MODITEM_SAMPLE) && (!nInstruments))
{
for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++)
{
- pModDoc->MuteSample(nSmp, (nSmp == dwItemNo) ? false : true);
+ pModDoc->MuteSample(nSmp, (nSmp == modItemID) ? false : true);
UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SMPNAMES | HINT_SAMPLEINFO);
}
} else
- if ((qwItemType == MODITEM_INSTRUMENT) && (nInstruments))
+ if ((modItemType == MODITEM_INSTRUMENT) && (nInstruments))
{
for (INSTRUMENTINDEX nIns = 1; nIns <= nInstruments; nIns++)
{
- pModDoc->MuteInstrument(nIns, (nIns == dwItemNo) ? false : true);
+ pModDoc->MuteInstrument(nIns, (nIns == modItemID) ? false : true);
UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_INSNAMES | HINT_INSTRUMENT);
}
}
@@ -2792,14 +2808,16 @@
//----------------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType;
CModDoc *pModDoc;
- qwItemType = GetModItem(hItem) & 0xFFFF;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ //const uint32 modItemID = GetModItemID(modItem);
+
pModDoc = GetDocumentFromItem(hItem);
if (pModDoc)
{
- if ((qwItemType == MODITEM_SAMPLE) || (qwItemType == MODITEM_INSTRUMENT))
+ if ((modItemType == MODITEM_SAMPLE) || (modItemType == MODITEM_INSTRUMENT))
{
for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++)
{
@@ -2820,19 +2838,18 @@
//----------------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType;
CModDoc *pModDoc;
- qwItemType = GetModItem(hItem);
- const DWORD dwItemNo = (DWORD)(qwItemType >> 16);
- qwItemType &= 0xFFFF;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
pModDoc = GetDocumentFromItem(hItem);
CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr;
- if (pModDoc && pSndFile && ((qwItemType == MODITEM_SEQUENCE) || (qwItemType == MODITEM_HDR_ORDERS)))
+ if (pModDoc && pSndFile && ((modItemType == MODITEM_SEQUENCE) || (modItemType == MODITEM_HDR_ORDERS)))
{
- pSndFile->Order.SetSequence((SEQUENCEINDEX)dwItemNo);
+ pSndFile->Order.SetSequence((SEQUENCEINDEX)modItemID);
pSndFile->Order.AddSequence(true);
UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE);
pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES|HINT_MODSEQUENCE);
@@ -2844,15 +2861,16 @@
//-------------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType;
CModDoc *pModDoc;
- qwItemType = GetModItem(hItem) & 0xFFFF;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ //const uint32 modItemID = GetModItemID(modItem);
pModDoc = GetDocumentFromItem(hItem);
CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr;
- if (pModDoc && pSndFile && ((qwItemType == MODITEM_SEQUENCE) || (qwItemType == MODITEM_HDR_ORDERS)))
+ if (pModDoc && pSndFile && ((modItemType == MODITEM_SEQUENCE) || (modItemType == MODITEM_HDR_ORDERS)))
{
pSndFile->Order.AddSequence(false);
UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE);
@@ -2860,21 +2878,39 @@
}
}
+void CModTree::OnSwitchToTreeItem()
+//---------------------------------
+{
+ HTREEITEM hItem = GetSelectedItem();
+ CModDoc *pModDoc;
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+
+ pModDoc = GetDocumentFromItem(hItem);
+
+ if (pModDoc && (modItemType == MODITEM_SEQUENCE))
+ {
+ pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (modItemID << 16) | 0x8000);
+ }
+}
+
// -> CODE#0023
// -> DESC="IT project files (.itp)"
void CModTree::OnSetItemPath()
//----------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType = GetModItem(hItem);
- DWORD dwItem = (DWORD)(qwItemType >> 16);
- qwItemType &= 0xFFFF;
CModDoc *pModDoc = GetDocumentFromItem(hItem);
CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL;
- if(pSndFile && dwItem){
+ const uint64 modItem = GetModItem(hItem);
+ //const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+ if(pSndFile && modItemID){
+
CHAR pszFileNames[_MAX_PATH];
CFileDialog dlg(TRUE, NULL, NULL,
OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_FORCESHOWHIDDEN,
@@ -2887,7 +2923,7 @@
dlg.m_ofn.nMaxFile = _MAX_PATH;
if(dlg.DoModal() == IDOK){
- strcpy(pSndFile->m_szInstrumentPath[dwItem-1], pszFileNames);
+ strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], pszFileNames);
OnRefreshTree();
}
@@ -2900,15 +2936,16 @@
//-------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType = GetModItem(hItem);
- const DWORD dwItem = HIWORD(qwItemType);
- qwItemType &= 0xFFFF;
CModDoc *pModDoc = GetDocumentFromItem(hItem);
CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL;
- if(pSndFile && dwItem){
+ const uint64 modItem = GetModItem(hItem);
+ //const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
- if(pSndFile->m_szInstrumentPath[dwItem-1][0] == '\0'){
+ if(pSndFile && modItemID){
+
+ if(pSndFile->m_szInstrumentPath[modItemID - 1][0] == '\0'){
CHAR pszFileNames[_MAX_PATH];
CFileDialog dlg(FALSE, (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) ? "iti" : "xi", NULL,
@@ -2924,23 +2961,23 @@
dlg.m_ofn.lpstrFile = pszFileNames;
dlg.m_ofn.nMaxFile = _MAX_PATH;
- if(dlg.DoModal() == IDOK) strcpy(pSndFile->m_szInstrumentPath[dwItem - 1], pszFileNames);
+ if(dlg.DoModal() == IDOK) strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], pszFileNames);
dlg.m_ofn.lpstrFile = NULL;
dlg.m_ofn.nMaxFile = 0;
}
- if(pSndFile->m_szInstrumentPath[dwItem - 1][0] != '\0'){
- int size = strlen(pSndFile->m_szInstrumentPath[dwItem - 1]);
- BOOL iti = _stricmp(&pSndFile->m_szInstrumentPath[dwItem - 1][size-3],"iti") == 0;
- BOOL xi = _stricmp(&pSndFile->m_szInstrumentPath[dwItem - 1][size-2],"xi") == 0;
+ if(pSndFile->m_szInstrumentPath[modItemID - 1][0] != '\0'){
+ int size = strlen(pSndFile->m_szInstrumentPath[modItemID - 1]);
+ BOOL iti = _stricmp(&pSndFile->m_szInstrumentPath[modItemID - 1][size-3],"iti") == 0;
+ BOOL xi = _stricmp(&pSndFile->m_szInstrumentPath[modItemID - 1][size-2],"xi") == 0;
if(iti || (!iti && !xi && pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)))
- pSndFile->SaveITIInstrument((INSTRUMENTINDEX)dwItem, pSndFile->m_szInstrumentPath[dwItem - 1]);
+ pSndFile->SaveITIInstrument((INSTRUMENTINDEX)modItemID, pSndFile->m_szInstrumentPath[modItemID - 1]);
if(xi || (!xi && !iti && pSndFile->m_nType == MOD_TYPE_XM))
- pSndFile->SaveXIInstrument((INSTRUMENTINDEX)dwItem, pSndFile->m_szInstrumentPath[dwItem - 1]);
+ pSndFile->SaveXIInstrument((INSTRUMENTINDEX)modItemID, pSndFile->m_szInstrumentPath[modItemID - 1]);
- pSndFile->instrumentModified[dwItem - 1] = FALSE;
+ pSndFile->instrumentModified[modItemID - 1] = FALSE;
}
if(pModDoc) pModDoc->UpdateAllViews(NULL, HINT_MODTYPE);
@@ -2999,8 +3036,12 @@
{
UINT flags;
HTREEITEM hItem = HitTest(point, &flags);
- uint64 qwItemType = GetModItem(hItem);
- switch(qwItemType & 0xFFFF)
+
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ //const uint32 modItemID = GetModItemID(modItem);
+
+ switch(modItemType)
{
case MODITEM_MIDIINSTRUMENT:
case MODITEM_MIDIPERCUSSION:
@@ -3010,7 +3051,7 @@
EnsureVisible(hItem);
}
m_hItemDrag = hItem;
- m_qwItemDrag = qwItemType;
+ m_qwItemDrag = modItem;
return DROPEFFECT_LINK;
// Folders:
case MODITEM_HDR_MIDILIB:
@@ -3118,10 +3159,14 @@
//------------------------------------
{
HTREEITEM hItem = GetSelectedItem();
- uint64 qwItemType = GetModItem(hItem);
- if ((qwItemType & 0xFFFF) == MODITEM_DLSBANK_FOLDER)
+
+ const uint64 modItem = GetModItem(hItem);
+ const uint32 modItemType = GetModItemType(modItem);
+ const uint32 modItemID = GetModItemID(modItem);
+
+ if ((modItemType & 0xFFFF) == MODITEM_DLSBANK_FOLDER)
{
- UINT nBank = (UINT)(qwItemType >> 16);
+ UINT nBank = modItemID;
if ((nBank < MAX_DLS_BANKS) && (CTrackApp::gpDLSBanks[nBank]))
{
CSoundBankProperties dlg(CTrackApp::gpDLSBanks[nBank], this);
Modified: trunk/OpenMPT/mptrack/View_tre.h
===================================================================
--- trunk/OpenMPT/mptrack/View_tre.h 2009-12-01 18:43:53 UTC (rev 431)
+++ trunk/OpenMPT/mptrack/View_tre.h 2009-12-04 19:30:31 UTC (rev 432)
@@ -142,6 +142,8 @@
VOID EmptyInstrumentLibrary();
VOID FillInstrumentLibrary();
uint64 GetModItem(HTREEITEM hItem);
+ inline uint32 GetModItemType(const uint64 modItem) {return static_cast<uint32>(modItem & 0xFFFF);}; // return "item type" part of mod item variable ( & 0xFFFF )
+ inline uint32 GetModItemID(const uint64 modItem) {return static_cast<uint32>(modItem >> 16);}; // return "item ID" part of mod item variable ( >> 16 )
BOOL SetMidiInstrument(UINT nIns, LPCSTR lpszFileName);
BOOL SetMidiPercussion(UINT nPerc, LPCSTR lpszFileName);
BOOL ExecuteItem(HTREEITEM hItem);
@@ -206,6 +208,7 @@
afx_msg void OnUnmuteAllTreeItem();
afx_msg void OnDuplicateTreeItem();
afx_msg void OnInsertTreeItem();
+ afx_msg void OnSwitchToTreeItem(); // hack for sequence items to avoid double-click action
// -> CODE#0023
// -> DESC="IT project files (.itp)"
Modified: trunk/OpenMPT/mptrack/resource.h
===================================================================
--- trunk/OpenMPT/mptrack/resource.h 2009-12-01 18:43:53 UTC (rev 431)
+++ trunk/OpenMPT/mptrack/resource.h 2009-12-04 19:30:31 UTC (rev 432)
@@ -1155,6 +1155,7 @@
#define ID_EDIT_PASTEFLOOD 59235
#define ID_MODTREE_DUPLICATE 59236
#define ID_MODTREE_INSERT 59237
+#define ID_MODTREE_SWITCHTO 59238
// Next default values for new objects
//
@@ -1162,7 +1163,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 523
-#define _APS_NEXT_COMMAND_VALUE 59238
+#define _APS_NEXT_COMMAND_VALUE 59239
#define _APS_NEXT_CONTROL_VALUE 2412
#define _APS_NEXT_SYMED_VALUE 901
#endif
Added: trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_laptop_(legovitch).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_laptop_(legovitch).mkb (rev 0)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_laptop_(legovitch).mkb 2009-12-04 19:30:31 UTC (rev 432)
@@ -0,0 +1,327 @@
+//-------- OpenMPT key binding definition file -------
+//-Format is: -
+//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
+//----------------------------------------------------------------------
+version:1
+
+//----( Global Context (0) )------------
+0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
+0:1346:2:79:1 //File/Open: Ctrl+O (KeyDown)
+0:1348:2:87:1 //File/Close: Ctrl+W (KeyDown)
+0:1349:2:83:1 //File/Save: Ctrl+S (KeyDown)
+0:1350:3:83:1 //File/Save As: Shift+Ctrl+S (KeyDown)
+0:1693:6:37:1 //Previous Document: Ctrl+Alt+GAUCHE (KeyDown)
+0:1694:6:39:1 //Next Document: Ctrl+Alt+DROITE (KeyDown)
+0:1030:0:114:1 //Play song/Pause song: F3 (KeyDown)
+0:1375:0:27:1 //Stop Song: ECHAP (KeyDown)
+0:1026:0:115:1 //Play pattern from cursor: F4 (KeyDown)
+0:1359:2:90:1 //Undo: Ctrl+Z (KeyDown)
+0:1360:2:88:1 //Cut: Ctrl+X (KeyDown)
+0:1361:2:67:1 //Copy: Ctrl+C (KeyDown)
+0:1361:2:45:1 //Copy: Ctrl+INS (KeyDown)
+0:1362:2:86:1 //Paste: Ctrl+V (KeyDown)
+0:1362:1:45:1 //Paste: Shift+INS (KeyDown)
+0:1363:6:86:1 //Mix Paste: Ctrl+Alt+V (KeyDown)
+0:1793:7:86:1 //Paste Flood: Shift+Ctrl+Alt+V (KeyDown)
+0:1364:2:53:1 //SelectAll: Ctrl+( (KeyDown)
+0:1365:2:70:1 //Find: Ctrl+F (KeyDown)
+0:1366:6:70:1 //Find Next: Ctrl+Alt+F (KeyDown)
+0:1021:0:116:1 //View General: F5 (KeyDown)
+0:1022:0:117:1 //View Pattern: F6 (KeyDown)
+0:1023:0:118:1 //View Samples: F7 (KeyDown)
+0:1024:0:119:1 //View Instruments: F8 (KeyDown)
+0:1025:0:120:1 //View Comments: F9 (KeyDown)
+0:1769:1:121:1 //View Graph: Shift+F10 (KeyDown)
+0:1367:6:87:1 //Toggle Main View: Ctrl+Alt+W (KeyDown)
+0:1368:0:112:1 //Toggle Tree View: F1 (KeyDown)
+0:1369:2:112:1 //View Options: Ctrl+F1 (KeyDown)
+0:1670:2:116:1 //View Channel Manager: Ctrl+F5 (KeyDown)
+0:1669:2:117:1 //View Plugin Manager: Ctrl+F6 (KeyDown)
+0:1775:6:112:1 //Show song properties window: Ctrl+Alt+F1 (KeyDown)
+0:1032:2:38:1 //Previous instrument: Ctrl+HAUT (KeyDown)
+0:1033:2:40:1 //Next instrument: Ctrl+BAS (KeyDown)
+0:1036:0:122:1 //Previous octave: F11 (KeyDown)
+0:1037:0:123:1 //Next octave: F12 (KeyDown)
+0:1034:2:37:5 //Previous order: Ctrl+GAUCHE (KeyDown|KeyHold)
+0:1035:2:39:5 //Next order: Ctrl+DROITE (KeyDown|KeyHold)
+
+//----( General Context [bottom] (1) )------------
+
+//----( Pattern Context [bottom] (2) )------------
+2:1017:0:34:1 //Jump down by measure: PG.SUIV (KeyDown)
+2:1018:0:33:1 //Jump up by measure: PG.PREC (KeyDown)
+2:1338:4:34:1 //Jump down by beat: Alt+PG.SUIV (KeyDown)
+2:1339:4:33:1 //Jump up by beat: Alt+PG.PREC (KeyDown)
+2:1340:6:34:5 //Snap down to beat: Ctrl+Alt+PG.SUIV (KeyDown|KeyHold)
+2:1341:6:33:5 //Snap up to beat: Ctrl+Alt+PG.PREC (KeyDown|KeyHold)
+2:1038:0:40:5 //Navigate down by 1 row: BAS (KeyDown|KeyHold)
+2:1039:0:38:5 //Navigate up by 1 row: HAUT (KeyDown|KeyHold)
+2:1691:4:167:5 //Navigate down by spacing: Alt+ (KeyDown|KeyHold)
+2:1692:4:166:5 //Navigate up by spacing: Alt+ (KeyDown|KeyHold)
+2:1040:0:37:5 //Navigate left: GAUCHE (KeyDown|KeyHold)
+2:1041:0:39:5 //Navigate right: DROITE (KeyDown|KeyHold)
+2:1042:0:9:1 //Navigate to next channel: TAB (KeyDown)
+2:1042:0:167:1 //Navigate to next channel: (KeyDown)
+2:1043:1:9:1 //Navigate to previous channel: Shift+TAB (KeyDown)
+2:1043:0:166:1 //Navigate to previous channel: (KeyDown)
+2:1044:2:36:1 //Go to first channel: Ctrl+ORIGINE (KeyDown)
+2:1045:0:36:1 //Go to first row: ORIGINE (KeyDown)
+2:1046:6:36:1 //Go to first row of first channel: Ctrl+Alt+ORIGINE (KeyDown)
+2:1047:2:35:1 //Go to last channel: Ctrl+FIN (KeyDown)
+2:1048:0:35:1 //Go to last row: FIN (KeyDown)
+2:1049:6:35:1 //Go to last row of last channel: Ctrl+Alt+FIN (KeyDown)
+2:1050:1:16:1 //Selection key: Shift+MAJ (KeyDown)
+2:1011:2:76:1 //Select channel / Select all: Ctrl+L (KeyDown)
+2:1663:0:32:1 //Toggle follow song: ESPACE (KeyDown)
+2:1003:0:13:1 //Quick copy: ENTREE (KeyDown)
+2:1004:1:13:1 //Quick paste: Shift+ENTREE (KeyDown)
+2:1001:2:32:1 //Enable recording: Ctrl+ESPACE (KeyDown)
+2:1002:2:13:5 //Play row: Ctrl+ENTREE (KeyDown|KeyHold)
+2:1317:4:18:1 //Set row jump on note entry: Alt (KeyDown)
+2:1685:2:9:1 //Switch to order list: Ctrl+TAB (KeyDown)
+2:1806:2:68:1 //Duplicate pattern: Ctrl+D (KeyDown)
+2:1662:6:80:1 //Toggle channel's plugin editor: Ctrl+Alt+P (KeyDown)
+2:1062:0:255:1 //Show note properties: (KeyDown)
+2:1776:4:32:1 //Toggle loop pattern: Alt+ESPACE (KeyDown)
+2:1006:0:113:1 //Solo current channel: F2 (KeyDown)
+2:1778:2:113:1 //Unmute all channels on pattern transition: Ctrl+F2 (KeyDown)
+2:1779:1:113:1 //Solo channel on pattern transition: Shift+F2 (KeyDown)
+2:1007:2:65:5 //Transpose +1: Ctrl+A (KeyDown|KeyHold)
+2:1008:2:81:1 //Transpose -1: Ctrl+Q (KeyDown)
+2:1009:6:65:5 //Transpose +12: Ctrl+Alt+A (KeyDown|KeyHold)
+2:1010:6:81:5 //Transpose -12: Ctrl+Alt+Q (KeyDown|KeyHold)
+2:1012:2:77:1 //Amplify selection: Ctrl+M (KeyDown)
+2:1014:2:74:1 //Interpolate volume: Ctrl+J (KeyDown)
+2:1015:2:75:1 //Interpolate effect: Ctrl+K (KeyDown)
+2:1016:4:66:1 //Open effect visualizer: Alt+B (KeyDown)
+2:1013:2:73:1 //Apply current instrument: Ctrl+I (KeyDown)
+2:1660:4:69:5 //Grow selection: Alt+E (KeyDown|KeyHold)
+2:1661:4:68:5 //Shrink selection: Alt+D (KeyDown|KeyHold)
+2:1057:2:46:1 //Clear row: Ctrl+SUPPR (KeyDown)
+2:1058:1:46:1 //Clear field: Shift+SUPPR (KeyDown)
+2:1664:0:46:1 //Clear field (IT Style): SUPPR (KeyDown)
+2:1059:3:46:1 //Clear row and step: Shift+Ctrl+SUPPR (KeyDown)
+2:1061:0:8:1 //Delete rows: RET.ARR (KeyDown)
+2:1377:4:8:5 //Delete all rows: Alt+RET.ARR (KeyDown|KeyHold)
+2:1378:0:45:1 //Insert Row: INS (KeyDown)
+2:1379:4:45:1 //Insert All Rows: Alt+INS (KeyDown)
+2:1055:2:166:5 //Previous pattern: Ctrl+ (KeyDown|KeyHold)
+2:1054:2:167:5 //Next pattern: Ctrl+ (KeyDown|KeyHold)
+
+//----( Pattern Context [bottom] - Note Col (3) )------------
+3:1064:0:65:1 //Base octave C: A (KeyDown)
+3:1065:0:90:1 //Base octave C#: Z (KeyDown)
+3:1066:0:69:1 //Base octave D: E (KeyDown)
+3:1067:0:82:1 //Base octave D#: R (KeyDown)
+3:1068:0:84:1 //Base octave E: T (KeyDown)
+3:1069:0:89:1 //Base octave F: Y (KeyDown)
+3:1070:0:85:1 //Base octave F#: U (KeyDown)
+3:1071:0:73:1 //Base octave G: I (KeyDown)
+3:1072:0:79:1 //Base octave G#: O (KeyDown)
+3:1073:0:80:1 //Base octave A: P (KeyDown)
+3:1074:0:221:1 //Base octave A#: ACCENT CIRCONFLEXE (KeyDown)
+3:1075:0:186:1 //Base octave B: $ (KeyDown)
+3:1076:0:81:1 //Base octave +1 C: Q (KeyDown)
+3:1077:0:83:1 //Base octave +1 C#: S (KeyDown)
+3:1078:0:68:1 //Base octave +1 D: D (KeyDown)
+3:1079:0:70:1 //Base octave +1 D#: F (KeyDown)
+3:1080:0:71:1 //Base octave +1 E: G (KeyDown)
+3:1081:0:72:1 //Base octave +1 F: H (KeyDown)
+3:1082:0:74:1 //Base octave +1 F#: J (KeyDown)
+3:1083:0:75:1 //Base octave +1 G: K (KeyDown)
+3:1084:0:76:1 //Base octave +1 G#: L (KeyDown)
+3:1085:0:77:1 //Base octave +1 A: M (KeyDown)
+3:1086:0:192:1 //Base octave +1 A#: \xF9 (KeyDown)
+3:1087:0:220:1 //Base octave +1 B: * (KeyDown)
+3:1088:0:87:1 //Base octave +2 C: W (KeyDown)
+3:1089:0:88:1 //Base octave +2 C#: X (KeyDown)
+3:1090:0:67:1 //Base octave +2 D: C (KeyDown)
+3:1091:0:86:1 //Base octave +2 D#: V (KeyDown)
+3:1092:0:66:1 //Base octave +2 E: B (KeyDown)
+3:1093:0:78:1 //Base octave +2 F: N (KeyDown)
+3:1094:0:188:1 //Base octave +2 F#: , (KeyDown)
+3:1095:0:190:1 //Base octave +2 G: ; (KeyDown)
+3:1096:0:191:1 //Base octave +2 G#: : (KeyDown)
+3:1097:0:223:1 //Base octave +2 A: ! (KeyDown)
+3:1212:0:48:1 //Set octave 0: \xE0 (KeyDown)
+3:1212:0:96:1 //Set octave 0: 0 (PAVE NUM.) (KeyDown)
+3:1213:0:49:1 //Set octave 1: & (KeyDown)
+3:1214:0:50:1 //Set octave 2: \xE9 (KeyDown)
+3:1215:0:51:1 //Set octave 3: " (KeyDown)
+3:1216:0:52:1 //Set octave 4: ' (KeyDown)
+3:1217:0:53:1 //Set octave 5: ( (KeyDown)
+3:1218:0:54:1 //Set octave 6: - (KeyDown)
+3:1219:0:55:1 //Set octave 7: \xE8 (KeyDown)
+3:1220:0:56:1 //Set octave 8: _ (KeyDown)
+3:1221:0:57:1 //Set octave 9: \xE7 (KeyDown)
+3:1316:1:16:1 //Chord Modifier: Shift+MAJ (KeyDown)
+3:1200:1:219:1 //Note Cut: Shift+) (KeyDown)
+3:1201:1:187:1 //Note Off: Shift+= (KeyDown)
+3:1791:3:219:1 //Note Fade: Shift+Ctrl+) (KeyDown)
+3:1667:0:219:1 //Note Cut (don't remember instrument): ) (KeyDown)
+3:1668:0:187:1 //Note Off (don't remember instrument): = (KeyDown)
+3:1792:2:219:1 //Note Fade (don't remember instrument): Ctrl+) (KeyDown)
+3:1788:0:222:1 //Parameter control(MPTm only): \xB2 (KeyDown)
+3:1789:1:222:1 //Parameter control(smooth)(MPTm only): Shift+\xB2 (KeyDown)
+
+//----( Pattern Context [bottom] - Ins Col (4) )------------
+4:1202:0:96:1 //Set instrument digit 0: 0 (PAVE NUM.) (KeyDown)
+4:1202:0:48:1 //Set instrument digit 0: \xE0 (KeyDown)
+4:1203:0:97:1 //Set instrument digit 1: 1 (PAVE NUM.) (KeyDown)
+4:1203:0:49:1 //Set instrument digit 1: & (KeyDown)
+4:1204:0:98:1 //Set instrument digit 2: 2 (PAVE NUM.) (KeyDown)
+4:1204:0:50:1 //Set instrument digit 2: \xE9 (KeyDown)
+4:1205:0:99:1 //Set instrument digit 3: 3 (PAVE NUM.) (KeyDown)
+4:1205:0:51:1 //Set instrument digit 3: " (KeyDown)
+4:1206:0:100:1 //Set instrument digit 4: 4 (PAVE NUM.) (KeyDown)
+4:1206:0:52:1 //Set instrument digit 4: ' (KeyDown)
+4:1207:0:101:1 //Set instrument digit 5: 5 (PAVE NUM.) (KeyDown)
+4:1207:0:53:1 //Set instrument digit 5: ( (KeyDown)
+4:1208:0:102:1 //Set instrument digit 6: 6 (PAVE NUM.) (KeyDown)
+4:1208:0:54:1 //Set instrument digit 6: - (KeyDown)
+4:1209:0:103:1 //Set instrument digit 7: 7 (PAVE NUM.) (KeyDown)
+4:1209:0:55:1 //Set instrument digit 7: \xE8 (KeyDown)
+4:1210:0:104:1 //Set instrument digit 8: 8 (PAVE NUM.) (KeyDown)
+4:1211:0:105:1 //Set instrument digit 9: 9 (PAVE NUM.) (KeyDown)
+4:1211:0:57:1 //Set instrument digit 9: \xE7 (KeyDown)
+
+//----( Pattern Context [bottom] - Vol Col (5) )------------
+5:1222:0:48:1 //Set volume digit 0: \xE0 (KeyDown)
+5:1222:0:96:1 //Set volume digit 0: 0 (PAVE NUM.) (KeyDown)
+5:1223:0:49:1 //Set volume digit 1: & (KeyDown)
+5:1223:0:97:1 //Set volume digit 1: 1 (PAVE NUM.) (KeyDown)
+5:1224:0:50:1 //Set volume digit 2: \xE9 (KeyDown)
+5:1224:0:98:1 //Set volume digit 2: 2 (PAVE NUM.) (KeyDown)
+5:1225:0:51:1 //Set volume digit 3: " (KeyDown)
+5:1225:0:99:1 //Set volume digit 3: 3 (PAVE NUM.) (KeyDown)
+5:1226:0:52:1 //Set volume digit 4: ' (KeyDown)
+5:1226:0:100:1 //Set volume digit 4: 4 (PAVE NUM.) (KeyDown)
+5:1227:0:53:1 //Set volume digit 5: ( (KeyDown)
+5:1227:0:101:1 //Set volume digit 5: 5 (PAVE NUM.) (KeyDown)
+5:1228:0:54:1 //Set volume digit 6: - (KeyDown)
+5:1228:0:102:1 //Set volume digit 6: 6 (PAVE NUM.) (KeyDown)
+5:1229:0:55:1 //Set volume digit 7: \xE8 (KeyDown)
+5:1229:0:103:1 //Set volume digit 7: 7 (PAVE NUM.) (KeyDown)
+5:1230:0:56:1 //Set volume digit 8: _ (KeyDown)
+5:1231:0:57:1 //Set volume digit 9: \xE7 (KeyDown)
+5:1231:0:105:1 //Set volume digit 9: 9 (PAVE NUM.) (KeyDown)
+5:1232:0:86:1 //Vol command - volume: V (KeyDown)
+5:1233:0:80:1 //Vol command - pan: P (KeyDown)
+5:1234:0:67:1 //Vol command - vol slide up: C (KeyDown)
+5:1235:0:68:1 //Vol command - vol slide down: D (KeyDown)
+5:1236:0:65:1 //Vol command - vol fine slide up: A (KeyDown)
+5:1237:0:66:1 //Vol command - vol fine slide down: B (KeyDown)
+5:1238:0:85:1 //Vol command - vibrato speed: U (KeyDown)
+5:1239:0:72:1 //Vol command - vibrato: H (KeyDown)
+5:1240:0:76:1 //Vol command - XM pan left: L (KeyDown)
+5:1241:0:82:1 //Vol command - XM pan right: R (KeyDown)
+5:1242:0:71:1 //Vol command - Portamento: G (KeyDown)
+5:1243:0:70:1 //Vol command - Portamento Up: F (KeyDown)
+5:1244:0:69:1 //Vol command - Portamento Down: E (KeyDown)
+5:1245:1:186:1 //Vol command - Velocity: Shift+$ (KeyDown)
+5:1246:0:79:1 //Vol command - Offset: O (KeyDown)
+
+//----( Pattern Context [bottom] - FX Col (6) )------------
+6:1294:0:220:1 //FX midi macro slide: * (KeyDown)
+6:1295:1:186:1 //FX pseudo-velocity (experimental): Shift+$ (KeyDown)
+6:1666:6:51:1 //FX parameter extension command: Ctrl+Alt+" (KeyDown)
+
+//----( Pattern Context [bottom] - Param Col (7) )------------
+7:1247:0:48:1 //FX Param digit 0: \xE0 (KeyDown)
+7:1247:0:96:1 //FX Param digit 0: 0 (PAVE NUM.) (KeyDown)
+7:1248:0:49:1 //FX Param digit 1: & (KeyDown)
+7:1248:0:97:1 //FX Param digit 1: 1 (PAVE NUM.) (KeyDown)
+7:1249:0:50:1 //FX Param digit 2: \xE9 (KeyDown)
+7:1249:0:98:1 //FX Param digit 2: 2 (PAVE NUM.) (KeyDown)
+7:1250:0:51:1 //FX Param digit 3: " (KeyDown)
+7:1250:0:99:1 //FX Param digit 3: 3 (PAVE NUM.) (KeyDown)
+7:1251:0:52:1 //FX Param digit 4: ' (KeyDown)
+7:1251:0:100:1 //FX Param digit 4: 4 (PAVE NUM.) (KeyDown)
+7:1252:0:53:1 //FX Param digit 5: ( (KeyDown)
+7:1252:0:101:1 //FX Param digit 5: 5 (PAVE NUM.) (KeyDown)
+7:1253:0:54:1 //FX Param digit 6: - (KeyDown)
+7:1253:0:102:1 //FX Param digit 6: 6 (PAVE NUM.) (KeyDown)
+7:1254:0:55:1 //FX Param digit 7: \xE8 (KeyDown)
+7:1254:0:103:1 //FX Param digit 7: 7 (PAVE NUM.) (KeyDown)
+7:1255:0:56:1 //FX Param digit 8: _ (KeyDown)
+7:1255:0:104:1 //FX Param digit 8: 8 (PAVE NUM.) (KeyDown)
+7:1256:0:57:1 //FX Param digit 9: \xE7 (KeyDown)
+7:1256:0:105:1 //FX Param digit 9: 9 (PAVE NUM.) (KeyDown)
+7:1257:0:65:1 //FX Param digit A: A (KeyDown)
+7:1258:0:66:1 //FX Param digit B: B (KeyDown)
+7:1259:0:67:1 //FX Param digit C: C (KeyDown)
+7:1260:0:68:1 //FX Param digit D: D (KeyDown)
+7:1261:0:69:1 //FX Param digit E: E (KeyDown)
+7:1262:0:70:1 //FX Param digit F: F (KeyDown)
+
+//----( Sample Context [bottom] (8) )------------
+8:1673:4:79:1 //Load a Sample: Alt+O (KeyDown)
+8:1674:4:83:1 //Save Sample: Alt+S (KeyDown)
+8:1675:4:78:1 //New Sample: Alt+N (KeyDown)
+8:1380:2:84:1 //Trim sample around loop points: Ctrl+T (KeyDown)
+8:1383:0:8:1 //Silence sample selection: RET.ARR (KeyDown)
+8:1385:3:65:1 //Amplify Sample: Shift+Ctrl+A (KeyDown)
+8:1381:3:82:1 //Reverse sample: Shift+Ctrl+R (KeyDown)
+8:1382:0:46:1 //Delete sample selection: SUPPR (KeyDown)
+8:1386:0:33:1 //Zoom Out: PG.PREC (KeyDown)
+8:1387:0:34:1 //Zoom In: PG.SUIV (KeyDown)
+8:1790:6:68:1 //Remove DC Offset: Ctrl+Alt+D (KeyDown)
+
+//----( Instrument Context [bottom] (9) )------------
+
+//----( Comments Context [bottom] (10) )------------
+
+//----( Unknown Context (11) )------------
+
+//----( Unknown Context (12) )------------
+
+//----( Plugin GUI Context (13) )------------
+13:1763:0:166:1 //Previous plugin preset: (KeyDown)
+13:1764:0:167:1 //Next plugin preset: (KeyDown)
+13:1782:2:166:1 //Plugin preset backward jump: Ctrl+ (KeyDown)
+13:1783:2:167:1 //Plugin preset forward jump: Ctrl+ (KeyDown)
+13:1765:6:82:1 //Randomize plugin parameters: Ctrl+Alt+R (KeyDown)
+
+//----( General Context [top] (14) )------------
+
+//----( Pattern Context [top] (15) )------------
+
+//----( Sample Context [top] (16) )------------
+
+//----( Instrument Context [top] (17) )------------
+
+//----( Comments Context [top] (18) )------------
+
+//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: SUPPR (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INS (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTREE (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1794:0:37:5 //Previous Order: GAUCHE (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: DROITE (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: ORIGINE (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: FIN (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: \xE0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: 0 (PAVE NUM.) (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: & (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: 1 (PAVE NUM.) (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: \xE9 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: 2 (PAVE NUM.) (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: " (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: 3 (PAVE NUM.) (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: ' (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: 4 (PAVE NUM.) (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: ( (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: 5 (PAVE NUM.) (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: - (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: 6 (PAVE NUM.) (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: \xE8 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: 7 (PAVE NUM.) (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: _ (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: 8 (PAVE NUM.) (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: \xE7 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: 9 (PAVE NUM.) (KeyDown|KeyHold)
+19:1817:0:38:5 //Increase pattern index : HAUT (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : = (KeyDown|KeyHold)
+19:1818:0:40:5 //Decrease pattern index: BAS (KeyDown|KeyHold)
+19:1818:0:189:5 //Decrease pattern index: (KeyDown|KeyHold)
Added: trunk/OpenMPT/packageTemplate/extraKeymaps/NO_mpt_classic_(rakib).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/NO_mpt_classic_(rakib).mkb (rev 0)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/NO_mpt_classic_(rakib).mkb 2009-12-04 19:30:31 UTC (rev 432)
@@ -0,0 +1,325 @@
+//-------- OpenMPT key binding definition file -------
+//-Format is: -
+//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
+//----------------------------------------------------------------------
+version:1
+
+//----( Global Context (0) )------------
+0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
+0:1346:2:79:1 //File/Open: Ctrl+O (KeyDown)
+0:1349:2:83:1 //File/Save: Ctrl+S (KeyDown)
+0:1350:3:83:1 //File/Save As: Shift+Ctrl+S (KeyDown)
+0:1351:3:87:1 //File/Save as Wave: Shift+Ctrl+W (KeyDown)
+0:1693:3:9:1 //Previous Document: Shift+Ctrl+TAB (KeyDown)
+0:1030:0:116:1 //Play song/Pause song: F5 (KeyDown)
+0:1031:0:119:1 //Pause song: F8 (KeyDown)
+0:1375:0:27:1 //Stop Song: ESC (KeyDown)
+0:1029:0:117:1 //Play song from start: F6 (KeyDown)
+0:1027:0:118:5 //Play pattern from start: F7 (KeyDown|KeyHold)
+0:1026:2:118:5 //Play pattern from cursor: Ctrl+F7 (KeyDown|KeyHold)
+0:1374:3:84:1 //Estimate Song Length: Shift+Ctrl+T (KeyDown)
+0:1376:0:120:1 //Toggle Midi Record: F9 (KeyDown)
+0:1359:2:90:1 //Undo: Ctrl+Z (KeyDown)
+0:1360:2:88:1 //Cut: Ctrl+X (KeyDown)
+0:1361:2:67:1 //Copy: Ctrl+C (KeyDown)
+0:1362:2:86:1 //Paste: Ctrl+V (KeyDown)
+0:1362:1:45:1 //Paste: Shift+INS (KeyDown)
+0:1364:2:53:1 //SelectAll: Ctrl+5 (KeyDown)
+0:1365:2:70:1 //Find: Ctrl+F (KeyDown)
+0:1366:0:114:1 //Find Next: F3 (KeyDown)
+0:1021:4:71:1 //View General: Alt+G (KeyDown)
+0:1022:4:80:1 //View Pattern: Alt+P (KeyDown)
+0:1023:4:83:1 //View Samples: Alt+S (KeyDown)
+0:1024:4:78:1 //View Instruments: Alt+N (KeyDown)
+0:1025:1:120:1 //View Comments: Shift+F9 (KeyDown)
+0:1368:2:113:1 //Toggle Tree View: Ctrl+F2 (KeyDown)
+0:1369:2:112:1 //View Options: Ctrl+F1 (KeyDown)
+0:1370:0:112:1 //Help (to do): F1 (KeyDown)
+0:1032:2:111:5 //Previous instrument: Ctrl+NUM/ (KeyDown|KeyHold)
+0:1032:2:38:5 //Previous instrument: Ctrl+PIL OPP (KeyDown|KeyHold)
+0:1033:2:106:5 //Next instrument: Ctrl+NUM* (KeyDown|KeyHold)
+0:1033:2:40:5 //Next instrument: Ctrl+PIL NED (KeyDown|KeyHold)
+0:1036:0:111:1 //Previous octave: NUM/ (KeyDown)
+0:1037:0:106:1 //Next octave: NUM* (KeyDown)
+0:1034:2:37:5 //Previous order: Ctrl+PIL VENSTRE (KeyDown|KeyHold)
+0:1035:2:39:5 //Next order: Ctrl+PIL H\xD8YRE (KeyDown|KeyHold)
+
+//----( General Context [bottom] (1) )------------
+
+//----( Pattern Context [bottom] (2) )------------
+2:1017:0:34:5 //Jump down by measure: PGDN (KeyDown|KeyHold)
+2:1018:0:33:5 //Jump up by measure: PGUP (KeyDown|KeyHold)
+2:1338:4:34:5 //Jump down by beat: Alt+PGDN (KeyDown|KeyHold)
+2:1339:4:33:5 //Jump up by beat: Alt+PGUP (KeyDown|KeyHold)
+2:1340:6:34:5 //Snap down to beat: Ctrl+Alt+PGDN (KeyDown|KeyHold)
+2:1341:6:33:5 //Snap up to beat: Ctrl+Alt+PGUP (KeyDown|KeyHold)
+2:1038:0:40:5 //Navigate down by 1 row: PIL NED (KeyDown|KeyHold)
+2:1039:0:38:5 //Navigate up by 1 row: PIL OPP (KeyDown|KeyHold)
+2:1691:4:40:5 //Navigate down by spacing: Alt+PIL NED (KeyDown|KeyHold)
+2:1692:4:38:5 //Navigate up by spacing: Alt+PIL OPP (KeyDown|KeyHold)
+2:1040:0:37:5 //Navigate left: PIL VENSTRE (KeyDown|KeyHold)
+2:1041:0:39:5 //Navigate right: PIL H\xD8YRE (KeyDown|KeyHold)
+2:1042:0:9:5 //Navigate to next channel: TAB (KeyDown|KeyHold)
+2:1043:1:9:5 //Navigate to previous channel: Shift+TAB (KeyDown|KeyHold)
+2:1044:0:36:1 //Go to first channel: HOME (KeyDown)
+2:1045:2:36:1 //Go to first row: Ctrl+HOME (KeyDown)
+2:1046:6:36:1 //Go to first row of first channel: Ctrl+Alt+HOME (KeyDown)
+2:1047:0:35:1 //Go to last channel: END (KeyDown)
+2:1048:2:35:1 //Go to last row: Ctrl+END (KeyDown)
+2:1049:6:35:1 //Go to last row of last channel: Ctrl+Alt+END (KeyDown)
+2:1050:1:16:1 //Selection key: Shift+SKIFT (KeyDown)
+2:1051:2:17:1 //Copy select key: Ctrl (KeyDown)
+2:1011:2:65:1 //Select channel / Select all: Ctrl+A (KeyDown)
+2:1663:0:122:1 //Toggle follow song: F11 (KeyDown)
+2:1003:0:13:5 //Quick copy: ENTER (KeyDown|KeyHold)
+2:1004:0:32:5 //Quick paste: MELLOMROM (KeyDown|KeyHold)
+2:1001:2:32:1 //Enable recording: Ctrl+MELLOMROM (KeyDown)
+2:1002:2:13:5 //Play row: Ctrl+ENTER (KeyDown|KeyHold)
+2:1317:4:18:1 //Set row jump on note entry: Alt (KeyDown)
+2:1685:2:9:1 //Switch to order list: Ctrl+TAB (KeyDown)
+2:1806:2:68:1 //Duplicate pattern: Ctrl+D (KeyDown)
+2:1662:6:80:1 //Toggle channel's plugin editor: Ctrl+Alt+P (KeyDown)
+2:1062:0:93:1 //Show note properties: Program (KeyDown)
+2:1005:0:121:5 //Mute current channel: F10 (KeyDown|KeyHold)
+2:1006:2:121:5 //Solo current channel: Ctrl+F10 (KeyDown|KeyHold)
+2:1007:2:81:5 //Transpose +1: Ctrl+Q (KeyDown|KeyHold)
+2:1009:3:81:5 //Transpose +12: Shift+Ctrl+Q (KeyDown|KeyHold)
+2:1010:3:65:5 //Transpose -12: Shift+Ctrl+A (KeyDown|KeyHold)
+2:1012:2:77:1 //Amplify selection: Ctrl+M (KeyDown)
+2:1014:2:74:1 //Interpolate volume: Ctrl+J (KeyDown)
+2:1015:2:75:1 //Interpolate effect: Ctrl+K (KeyDown)
+2:1016:4:66:1 //Open effect visualizer: Alt+B (KeyDown)
+2:1766:2:71:1 //Go to row/channel/...: Ctrl+G (KeyDown)
+2:1013:2:73:1 //Apply current instrument: Ctrl+I (KeyDown)
+2:1660:4:69:5 //Grow selection: Alt+E (KeyDown|KeyHold)
+2:1661:4:68:5 //Shrink selection: Alt+D (KeyDown|KeyHold)
+2:1058:0:46:1 //Clear field: DEL (KeyDown)
+2:1664:1:190:1 //Clear field (IT Style): Shift+. (KeyDown)
+2:1059:2:46:1 //Clear row and step: Ctrl+DEL (KeyDown)
+2:1665:1:46:5 //Clear field and step (IT Style): Shift+DEL (KeyDown|KeyHold)
+2:1061:0:8:5 //Delete rows: TILBAKE (KeyDown|KeyHold)
+2:1377:2:8:5 //Delete all rows: Ctrl+TILBAKE (KeyDown|KeyHold)
+2:1378:0:45:1 //Insert Row: INS (KeyDown)
+2:1379:2:45:1 //Insert All Rows: Ctrl+INS (KeyDown)
+2:1055:0:109:5 //Previous pattern: NUM MINUS (KeyDown|KeyHold)
+2:1054:0:107:5 //Next pattern: NUM PLUSS (KeyDown|KeyHold)
+
+//----( Pattern Context [bottom] - Note Col (3) )------------
+3:1064:0:81:1 //Base octave C: Q (KeyDown)
+3:1065:0:87:1 //Base octave C#: W (KeyDown)
+3:1066:0:69:1 //Base octave D: E (KeyDown)
+3:1067:0:82:1 //Base octave D#: R (KeyDown)
+3:1068:0:84:1 //Base octave E: T (KeyDown)
+3:1069:0:89:1 //Base octave F: Y (KeyDown)
+3:1070:0:85:1 //Base octave F#: U (KeyDown)
+3:1071:0:73:1 //Base octave G: I (KeyDown)
+3:1072:0:79:1 //Base octave G#: O (KeyDown)
+3:1074:0:221:1 //Base octave A#: \xE5 (KeyDown)
+3:1075:0:186:1 //Base octave B: T\xD8DLER (KeyDown)
+3:1076:0:65:1 //Base octave +1 C: A (KeyDown)
+3:1077:0:83:1 //Base octave +1 C#: S (KeyDown)
+3:1078:0:68:1 //Base octave +1 D: D (KeyDown)
+3:1079:0:70:1 //Base octave +1 D#: F (KeyDown)
+3:1080:0:71:1 //Base octave +1 E: G (KeyDown)
+3:1081:0:72:1 //Base octave +1 F: H (KeyDown)
+3:1082:0:74:1 //Base octave +1 F#: J (KeyDown)
+3:1083:0:75:1 //Base octave +1 G: K (KeyDown)
+3:1084:0:76:1 //Base octave +1 G#: L (KeyDown)
+3:1085:0:192:1 //Base octave +1 A: \xF8 (KeyDown)
+3:1086:0:222:1 //Base octave +1 A#: \xE6 (KeyDown)
+3:1087:0:191:1 //Base octave +1 B: ' (KeyDown)
+3:1088:0:90:1 //Base octave +2 C: Z (KeyDown)
+3:1089:0:88:1 //Base octave +2 C#: X (KeyDown)
+3:1090:0:67:1 //Base octave +2 D: C (KeyDown)
+3:1091:0:86:1 //Base octave +2 D#: V (KeyDown)
+3:1092:0:66:1 //Base octave +2 E: B (KeyDown)
+3:1093:0:78:1 //Base octave +2 F: N (KeyDown)
+3:1094:0:77:1 //Base octave +2 F#: M (KeyDown)
+3:1095:0:188:1 //Base octave +2 G: , (KeyDown)
+3:1096:0:190:1 //Base octave +2 G#: . (KeyDown)
+3:1212:0:48:1 //Set octave 0: 0 (KeyDown)
+3:1212:0:96:1 //Set octave 0: NUM 0 (KeyDown)
+3:1213:0:49:1 //Set octave 1: 1 (KeyDown)
+3:1213:0:97:1 //Set octave 1: NUM 1 (KeyDown)
+3:1214:0:50:1 //Set octave 2: 2 (KeyDown)
+3:1214:0:98:1 //Set octave 2: NUM 2 (KeyDown)
+3:1215:0:51:1 //Set octave 3: 3 (KeyDown)
+3:1215:0:99:1 //Set octave 3: NUM 3 (KeyDown)
+3:1216:0:52:1 //Set octave 4: 4 (KeyDown)
+3:1216:0:100:1 //Set octave 4: NUM 4 (KeyDown)
+3:1217:0:53:1 //Set octave 5: 5 (KeyDown)
+3:1217:0:101:1 //Set octave 5: NUM 5 (KeyDown)
+3:1218:0:54:1 //Set octave 6: 6 (KeyDown)
+3:1218:0:102:1 //Set octave 6: NUM 6 (KeyDown)
+3:1219:0:55:1 //Set octave 7: 7 (KeyDown)
+3:1219:0:103:1 //Set octave 7: NUM 7 (KeyDown)
+3:1220:0:56:1 //Set octave 8: 8 (KeyDown)
+3:1220:0:104:1 //Set octave 8: NUM 8 (KeyDown)
+3:1221:0:57:1 //Set octave 9: 9 (KeyDown)
+3:1221:0:105:1 //Set octave 9: NUM 9 (KeyDown)
+3:1316:1:16:1 //Chord Modifier: Shift+SKIFT (KeyDown)
+3:1667:0:219:1 //Note Cut (don't remember instrument): \ (KeyDown)
+3:1668:0:187:1 //Note Off (don't remember instrument): + (KeyDown)
+3:1792:0:226:1 //Note Fade (don't remember instrument): < (KeyDown)
+
+//----( Pattern Context [bottom] - Ins Col (4) )------------
+4:1202:0:96:1 //Set instrument digit 0: NUM 0 (KeyDown)
+4:1202:0:48:1 //Set instrument digit 0: 0 (KeyDown)
+4:1203:0:97:1 //Set instrument digit 1: NUM 1 (KeyDown)
+4:1203:0:49:1 //Set instrument digit 1: 1 (KeyDown)
+4:1204:0:98:1 //Set instrument digit 2: NUM 2 (KeyDown)
+4:1204:0:50:1 //Set instrument digit 2: 2 (KeyDown)
+4:1205:0:99:1 //Set instrument digit 3: NUM 3 (KeyDown)
+4:1205:0:51:1 //Set instrument digit 3: 3 (KeyDown)
+4:1206:0:100:1 //Set instrument digit 4: NUM 4 (KeyDown)
+4:1206:0:52:1 //Set instrument digit 4: 4 (KeyDown)
+4:1207:0:101:1 //Set instrument digit 5: NUM 5 (KeyDown)
+4:1207:0:53:1 //Set instrument digit 5: 5 (KeyDown)
+4:1208:0:102:1 //Set instrument digit 6: NUM 6 (KeyDown)
+4:1208:0:54:1 //Set instrument digit 6: 6 (KeyDown)
+4:1209:0:103:1 //Set instrument digit 7: NUM 7 (KeyDown)
+4:1209:0:55:1 //Set instrument digit 7: 7 (KeyDown)
+4:1210:0:56:1 //Set instrument digit 8: 8 (KeyDown)
+4:1211:0:105:1 //Set instrument digit 9: NUM 9 (KeyDown)
+4:1211:0:57:1 //Set instrument digit 9: 9 (KeyDown)
+
+//----( Pattern Context [bottom] - Vol Col (5) )------------
+5:1222:0:48:1 //Set volume digit 0: 0 (KeyDown)
+5:1222:0:96:1 //Set volume digit 0: NUM 0 (KeyDown)
+5:1223:0:49:1 //Set volume digit 1: 1 (KeyDown)
+5:1223:0:97:1 //Set volume digit 1: NUM 1 (KeyDown)
+5:1224:0:50:1 //Set volume digit 2: 2 (KeyDown)
+5:1224:0:98:1 //Set volume digit 2: NUM 2 (KeyDown)
+5:1225:0:51:1 //Set volume digit 3: 3 (KeyDown)
+5:1225:0:99:1 //Set volume digit 3: NUM 3 (KeyDown)
+5:1226:0:52:1 //Set volume digit 4: 4 (KeyDown)
+5:1226:0:100:1 //Set volume digit 4: NUM 4 (KeyDown)
+5:1227:0:53:1 //Set volume digit 5: 5 (KeyDown...
[truncated message content] |
|
From: <sag...@us...> - 2009-12-01 18:44:03
|
Revision: 431
http://modplug.svn.sourceforge.net/modplug/?rev=431&view=rev
Author: saga-games
Date: 2009-12-01 18:43:53 +0000 (Tue, 01 Dec 2009)
Log Message:
-----------
[Fix] IT/MPTM Loader: I'm stupid. Maybe it will work this time.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_it.cpp
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-30 22:11:46 UTC (rev 430)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-12-01 18:43:53 UTC (rev 431)
@@ -1209,7 +1209,7 @@
// In order to properly compute the position, in file, of eventual extended settings
// such as "attack" we need to keep the "real" size of the last sample as those extra
// setting will follow this sample in the file
- UINT lastSampleOffset = 0;
+ UINT lastSampleOffset = smppos[pifh->smpnum - 1] + sizeof(ITSAMPLESTRUCT);
// -! NEW_FEATURE#0027
// Reading Samples
@@ -1217,7 +1217,6 @@
for (UINT nsmp=0; nsmp<pifh->smpnum; nsmp++) if ((smppos[nsmp]) && (smppos[nsmp] <= dwMemLength - sizeof(ITSAMPLESTRUCT)))
{
ITSAMPLESTRUCT *pis = (ITSAMPLESTRUCT *)(lpStream+smppos[nsmp]);
- lastSampleOffset = smppos[nsmp] + sizeof(ITSAMPLESTRUCT);
if (pis->id == 0x53504D49)
{
MODSAMPLE *pSmp = &Samples[nsmp+1];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-30 22:12:04
|
Revision: 430
http://modplug.svn.sourceforge.net/modplug/?rev=430&view=rev
Author: saga-games
Date: 2009-11-30 22:11:46 +0000 (Mon, 30 Nov 2009)
Log Message:
-----------
[Fix] IT/MPTM Loader: The MPT extensions should now also be loaded again if a file only contains empty sample slots. It still does not work with no sample slots in theory, but modplug created at least one slot when saving so everything should be fine for now.
[Mod] Using MS Shell Dlg font instead of MS Sans Serif in resource file
Modified Paths:
--------------
trunk/OpenMPT/mptrack/mptrack.rc
trunk/OpenMPT/soundlib/Load_it.cpp
Modified: trunk/OpenMPT/mptrack/mptrack.rc
===================================================================
--- trunk/OpenMPT/mptrack/mptrack.rc 2009-11-28 20:25:33 UTC (rev 429)
+++ trunk/OpenMPT/mptrack/mptrack.rc 2009-11-30 22:11:46 UTC (rev 430)
@@ -137,7 +137,7 @@
IDD_ABOUTBOX DIALOGEX 0, 0, 267, 254
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "About ModPlug Tracker"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "",IDC_BITMAP1,"Static",SS_BLACKRECT | SS_NOTIFY | SS_CENTERIMAGE,5,3,256,81,WS_EX_CLIENTEDGE
CTEXT "",IDC_CREDITS,5,116,256,72,0,WS_EX_STATICEDGE
@@ -150,7 +150,7 @@
IDD_OPTIONS_PLAYER DIALOGEX 0, 0, 272, 279
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Player"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "Control",IDC_STATIC,6,6,257,150
CONTROL "Automatic Gain Control",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,20,97,10
@@ -196,7 +196,7 @@
IDD_WAVECONVERT DIALOGEX 0, 0, 262, 197
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Wave Convert"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,204,12,50,14
PUSHBUTTON "Cancel",IDCANCEL,204,30,50,14
@@ -225,7 +225,7 @@
IDD_PROGRESS DIALOG 0, 0, 186, 55
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Saving Wave File"
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Shell Dlg"
BEGIN
PUSHBUTTON "Stop",IDCANCEL,68,34,50,14
CONTROL "Progress1",IDC_PROGRESS1,"msctls_progress32",WS_BORDER,4,19,178,12
@@ -235,7 +235,7 @@
IDD_OPTIONS_KEYBOARD DIALOGEX 0, 0, 272, 279
STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Keyboard"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
COMBOBOX IDC_KEYCATEGORY,5,16,130,204,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LISTBOX IDC_COMMAND_LIST,5,32,130,242,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
@@ -274,7 +274,7 @@
IDD_OPTIONS_COLORS DIALOGEX 0, 0, 272, 281
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Colours"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
COMBOBOX IDC_COMBO1,15,25,134,109,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Primary highlight",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,30,91,74,10
@@ -308,7 +308,7 @@
IDD_OPTIONS_MIDI DIALOGEX 0, 0, 272, 281
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "MIDI"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "MIDI Recording",IDC_STATIC,5,5,260,200
LTEXT "MIDI Input Device:",IDC_STATIC,15,20,67,8
@@ -342,7 +342,7 @@
IDD_LOADRAWSAMPLE DIALOGEX 0, 0, 178, 89
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Unknown file type"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,66,66,50,14
PUSHBUTTON "Cancel",IDCANCEL,120,66,50,14
@@ -360,7 +360,7 @@
IDD_CONTROL_GLOBALS DIALOGEX 0, 0, 561, 94
STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
EDITTEXT IDC_EDIT_SONGTITLE,2,3,167,12,ES_AUTOHSCROLL
CTEXT "Type EXT, ## channels",IDC_EDIT_MODTYPE,173,3,149,12,SS_CENTERIMAGE,WS_EX_STATICEDGE
@@ -406,7 +406,7 @@
IDD_CONTROL_COMMENTS DIALOGEX 0, 0, 435, 119
STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
EDITTEXT IDC_EDIT_COMMENTS,4,11,426,104,ES_MULTILINE | ES_WANTRETURN | NOT WS_BORDER | WS_VSCROLL | NOT WS_TABSTOP,WS_EX_STATICEDGE
LTEXT "Song Message:",IDC_STATIC,4,2,76,8
@@ -414,7 +414,7 @@
IDD_CONTROL_PATTERNS DIALOGEX 0, 0, 585, 114
STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,321,31,55,10
COMBOBOX IDC_COMBO_INSTRUMENT,19,61,96,137,CBS_DROPDOWNLIST | WS_VSCROLL
@@ -451,7 +451,7 @@
IDD_CONTROL_SAMPLES DIALOGEX 0, 0, 544, 106
STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,4,4,55,17
EDITTEXT IDC_EDIT_SAMPLE,90,6,35,12,ES_AUTOHSCROLL | ES_NUMBER
@@ -527,7 +527,7 @@
IDD_CONTROL_INSTRUMENTS DIALOGEX 0, 0, 558, 173
STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
EDITTEXT IDC_EDIT_INSTRUMENT,87,7,29,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS | WS_TABSTOP,111,8,11,11
@@ -611,7 +611,7 @@
IDD_MODDOC_MODTYPE DIALOGEX 0, 0, 262, 317
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Song Properties"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,204,6,50,14
PUSHBUTTON "Cancel",IDCANCEL,204,24,50,14
@@ -649,7 +649,7 @@
IDD_SHOWLOG DIALOG 0, 0, 300, 106
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Information"
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK",IDOK,246,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,246,24,50,14
@@ -659,7 +659,7 @@
IDD_REMOVECHANNELS DIALOGEX 0, 0, 171, 220
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Remove Channels"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,54,198,50,14
PUSHBUTTON "Cancel",IDCANCEL,114,198,50,14
@@ -670,7 +670,7 @@
IDD_VIEW_GLOBALS DIALOGEX 0, 0, 471, 337
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Channel 1",IDC_TEXT1,5,18,99,157
EDITTEXT IDC_EDIT9,10,30,89,12,ES_AUTOHSCROLL
@@ -770,7 +770,7 @@
IDD_EDIT_FIND DIALOGEX 0, 0, 182, 145
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION
CAPTION "Find"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "Search for:",IDC_STATIC,4,4,174,107
CONTROL "Note",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,17,31,10
@@ -796,7 +796,7 @@
IDD_EDIT_REPLACE DIALOGEX 0, 0, 182, 145
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION
CAPTION "Replace"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "",IDC_STATIC,4,4,174,137
CONTROL "Replace By:",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,15,63,10
@@ -819,7 +819,7 @@
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "Pattern properties"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
LTEXT "Rows:",IDC_STATIC,10,10,21,8
COMBOBOX IDC_COMBO1,12,19,48,93,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
@@ -834,14 +834,14 @@
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "Note Properties"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
END
IDD_PAGEEDITNOTE DIALOG 0, 0, 220, 34
STYLE DS_SETFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION
CAPTION "Note"
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Note:",IDC_STATIC,4,4,18,8
LTEXT "Instrument:",IDC_STATIC,74,5,91,8
@@ -852,7 +852,7 @@
IDD_PAGEEDITVOLUME DIALOG 0, 0, 220, 34
STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CHILD | WS_VISIBLE | WS_CAPTION
CAPTION "Volume"
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Volume Command:",IDC_STATIC,4,4,71,8
LTEXT "Value:",IDC_STATIC,114,4,91,8
@@ -863,7 +863,7 @@
IDD_PAGEEDITEFFECT DIALOGEX 0, 0, 220, 35
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION
CAPTION "Effect"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
COMBOBOX IDC_COMBO1,0,15,102,83,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,104,15,114,12
@@ -878,7 +878,7 @@
IDD_SAMPLE_AMPLIFY DIALOGEX 0, 0, 175, 71
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Amplify"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "Amplify by",IDC_STATIC,13,19,37,8
EDITTEXT IDC_EDIT1,54,16,40,14,ES_AUTOHSCROLL
@@ -894,7 +894,7 @@
IDD_SETUP_EQ DIALOGEX 0, 0, 240, 202
STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Equalizer"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "",IDC_STATIC,4,3,232,150
LTEXT "+12dB",IDC_STATIC,9,28,22,8
@@ -931,7 +931,7 @@
IDD_OPTIONS_AUTHOR DIALOGEX 0, 0, 214, 151
STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Identification"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "Author Information",IDC_STATIC,6,6,202,66
LTEXT "Name:",IDC_STATIC,12,20,25,8
@@ -952,7 +952,7 @@
IDD_SOUNDBANK_INFO DIALOGEX 0, 0, 271, 167
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Sound Bank Information"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDOK,109,149,50,14
EDITTEXT IDC_EDIT1,7,7,257,138,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_STATICEDGE
@@ -961,7 +961,7 @@
IDD_OPTIONS_GENERAL DIALOGEX 0, 0, 272, 279
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "Default Directories",IDC_STATIC,6,6,261,102
RTEXT "Songs:",IDC_STATIC_MODDIR,12,18,48,12,SS_CENTERIMAGE
@@ -987,7 +987,7 @@
IDD_OPTIONS_SOUNDCARD DIALOGEX 0, 0, 272, 276
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Sound Card"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "Sound Device:",IDC_STATIC,11,14,79,8
CONTROL "",IDC_COMBO1,"ComboBoxEx32",CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP,11,25,219,96
@@ -1017,7 +1017,7 @@
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "Zxx Macros Configuration"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,300,6,50,14
PUSHBUTTON "Cancel",IDCANCEL,300,24,50,14
@@ -1050,7 +1050,7 @@
IDD_CHORDEDIT DIALOGEX 0, 0, 245, 148
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Chord Editor"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDOK,191,10,50,14
CONTROL "",IDC_KEYBOARD1,"Static",SS_WHITERECT | SS_NOTIFY,4,76,237,56,WS_EX_CLIENTEDGE
@@ -1071,7 +1071,7 @@
IDD_LAYER3CONVERT DIALOGEX 0, 0, 280, 202
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "MPEG Layer3 Convert"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "",IDC_STATIC,6,6,210,84
DEFPUSHBUTTON "OK",IDOK,222,12,50,14
@@ -1100,14 +1100,14 @@
IDD_SPLASHSCREEN DIALOG 0, 0, 188, 95
STYLE DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_POPUP
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "",IDC_SPLASH,"Static",SS_WHITERECT,0,0,187,94
END
IDD_TREEVIEW DIALOG 0, 0, 85, 266
STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tree1",IDC_TREEVIEW,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | WS_BORDER,0,0,85,131
CONTROL "Tree1",IDC_TREEDATA,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | WS_BORDER,0,135,85,131
@@ -1116,7 +1116,7 @@
IDD_MOD2MIDI DIALOGEX 0, 0, 256, 101
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "MIDI Conversion Setup"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,198,6,50,14
PUSHBUTTON "Cancel",IDCANCEL,198,24,50,14
@@ -1134,7 +1134,7 @@
IDD_SAVEPRESET DIALOGEX 0, 0, 154, 58
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Save EQ Preset"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "Save As:",IDC_STATIC,6,6,51,8
EDITTEXT IDC_EDIT1,6,18,69,12,ES_AUTOHSCROLL
@@ -1147,7 +1147,7 @@
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "Sample Map"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,232,4,50,14
PUSHBUTTON "Cancel",IDCANCEL,232,22,50,14
@@ -1163,7 +1163,7 @@
IDD_SELECTMIXPLUGIN DIALOGEX 0, 0, 243, 220
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Mix Plugins"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
LTEXT "Filter:",IDC_STATIC_VSTNAMEFILTER,8,9,18,8
EDITTEXT IDC_NAMEFILTER,28,7,152,14,ES_AUTOHSCROLL
@@ -1180,14 +1180,14 @@
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
CAPTION "Editor"
MENU IDR_PLUGINMENU
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
END
IDD_SETUP_REVERB DIALOG 0, 0, 240, 156
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION
CAPTION "Reverb"
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "",IDC_STATIC,4,3,232,59
GROUPBOX "Early reflections",IDC_STATIC,4,68,78,71
@@ -1222,7 +1222,7 @@
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
CAPTION "Param Editor"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
EDITTEXT IDC_VISSTATUS,4,91,162,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_STATICEDGE
CONTROL "Fill blanks with:",IDC_VISFILLBLANKS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,188,92,63,10
@@ -1234,7 +1234,7 @@
IDD_SOUNDBANK_INFO1 DIALOGEX 0, 0, 271, 167
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Sound Bank Information"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDOK,109,149,50,14
EDITTEXT IDC_EDIT1,7,7,257,138,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_STATICEDGE
@@ -1243,7 +1243,7 @@
IDD_PITCHSHIFT DIALOGEX 0, 0, 181, 124
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Time-Stretch Ratio Calculator"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,127,106,50,14
EDITTEXT IDC_SAMPLE_LENGTH_NEW,42,32,40,14,ES_AUTOHSCROLL | ES_NUMBER
@@ -1273,7 +1273,7 @@
IDD_OPTIONS_AUTOSAVE DIALOGEX 0, 0, 272, 279
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Auto Save"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
CONTROL "Enable Autosave",IDC_AUTOSAVE_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,15,70,10
EDITTEXT IDC_AUTOSAVE_INTERVAL,59,29,24,12,ES_AUTOHSCROLL | ES_NUMBER
@@ -1298,7 +1298,7 @@
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "Go to..."
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
RTEXT "Row:",IDC_STATIC,6,9,33,8
EDITTEXT IDC_GOTO_ROW,42,6,40,14,ES_AUTOHSCROLL | ES_NUMBER
@@ -1315,7 +1315,7 @@
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_APPWINDOW
CAPTION "Pattern Randomizer - NOT YET FUNCTIONAL"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
PUSHBUTTON "Load",IDC_BUTTON1,112,13,30,14
PUSHBUTTON "Save",IDC_BUTTON2,143,13,30,14
@@ -1329,7 +1329,7 @@
IDD_PATTERNRANDOMIZER_NOTE DIALOGEX 0, 0, 235, 172
STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "",IDC_STATIC,5,5,224,164
CONTROL "Randomize Notes",IDC_RANDOMIZE_NOTE_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,4,72,10
@@ -1352,7 +1352,7 @@
IDD_PATTERNRANDOMIZER_INSTRUMENT DIALOGEX 0, 0, 236, 172
STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "",-1,5,5,225,164
CONTROL "Randomize Instruments",IDC_RANDOMIZE_NOTE_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,4,89,10
@@ -1362,7 +1362,7 @@
IDD_PATTERNRANDOMIZER_VOLCMD DIALOGEX 0, 0, 235, 172
STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "",IDC_STATIC,5,5,224,164
CONTROL "Use existing commands.",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,14,27,92,10
@@ -1402,7 +1402,7 @@
IDD_PATTERNRANDOMIZER_EFFECT DIALOGEX 0, 0, 235, 172
STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
-FONT 8, "MS Sans Serif", 0, 0, 0x0
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "",IDC_STATIC,5,5,224,164
CONTROL "Use existing effects.",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,14,27,79,10
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-28 20:25:33 UTC (rev 429)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-30 22:11:46 UTC (rev 430)
@@ -1217,6 +1217,7 @@
for (UINT nsmp=0; nsmp<pifh->smpnum; nsmp++) if ((smppos[nsmp]) && (smppos[nsmp] <= dwMemLength - sizeof(ITSAMPLESTRUCT)))
{
ITSAMPLESTRUCT *pis = (ITSAMPLESTRUCT *)(lpStream+smppos[nsmp]);
+ lastSampleOffset = smppos[nsmp] + sizeof(ITSAMPLESTRUCT);
if (pis->id == 0x53504D49)
{
MODSAMPLE *pSmp = &Samples[nsmp+1];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-28 20:25:43
|
Revision: 429
http://modplug.svn.sourceforge.net/modplug/?rev=429&view=rev
Author: saga-games
Date: 2009-11-28 20:25:33 +0000 (Sat, 28 Nov 2009)
Log Message:
-----------
[Imp] Sample editor: When creating a new sample using "resize", sample loop is activated automatically
[Fix] ST3 compatibility: Only allow waveforms 0 to 3 for S3x / S4x / S5x.
[Imp] Pattern editor: Hopefully correct limitation and explanation of "Set * waveform" parameters...
[Imp] Mod Conversion: Better conversion of MOD/XM E4x / E7x command
[Imp] Mod Conversion: Better conversion of note off commands when converting to .mod
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Moddoc.cpp
trunk/OpenMPT/soundlib/Snd_fx.cpp
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/modsmp_ctrl.cpp
Modified: trunk/OpenMPT/mptrack/Moddoc.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-28 18:11:44 UTC (rev 428)
+++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-28 20:25:33 UTC (rev 429)
@@ -2304,6 +2304,15 @@
case CMD_GLOBALVOLUME:
nmax = (nType & MOD_TYPE_IT | MOD_TYPE_MPT) ? 128 : 64;
break;
+
+ case CMD_MODCMDEX:
+ // adjust waveform types for XM/MOD
+ if(gFXInfo[ndx].dwParamValue == 0x40 || gFXInfo[ndx].dwParamValue == 0x70) nmax = gFXInfo[ndx].dwParamValue | 0x07;
+ break;
+ case CMD_S3MCMDEX:
+ // adjust waveform types for IT/S3M
+ if(gFXInfo[ndx].dwParamValue >= 0x30 && gFXInfo[ndx].dwParamValue <= 0x50) nmax = gFXInfo[ndx].dwParamValue | (m_SndFile.IsCompatibleMode(TRK_IMPULSETRACKER | TRK_SCREAMTRACKER) ? 0x03 : 0x07);
+ break;
}
*prangeMin = nmin;
*prangeMax = nmax;
@@ -2659,17 +2668,22 @@
case 0x30: // vibrato waveform
case 0x40: // tremolo waveform
case 0x50: // panbrello waveform
- if(((param & 0x0F) > 0x03) && m_SndFile.IsCompatibleMode(TRK_IMPULSETRACKER))
+ if(((param & 0x0F) > 0x03) && m_SndFile.IsCompatibleMode(TRK_IMPULSETRACKER | TRK_SCREAMTRACKER))
{
strcpy(s, "ignore");
break;
}
switch(param & 0x0F)
{
- case 0x00: case 0x04: case 0x08: case 0x0C: strcpy(s, "sine wave"); break;
- case 0x01: case 0x05: case 0x09: case 0x0D: strcpy(s, "ramp down"); break;
- case 0x02: case 0x06: case 0x0A: case 0x0E: strcpy(s, "square wave"); break;
- case 0x03: case 0x07: case 0x0B: case 0x0F: strcpy(s, "random"); break;
+ case 0x00: strcpy(s, "sine wave"); break;
+ case 0x01: strcpy(s, "ramp down"); break;
+ case 0x02: strcpy(s, "square wave"); break;
+ case 0x03: strcpy(s, "random"); break;
+ case 0x04: strcpy(s, "sine wave (continue)"); break;
+ case 0x05: strcpy(s, "ramp down (continue)"); break;
+ case 0x06: strcpy(s, "square wave (continue)"); break;
+ case 0x07: strcpy(s, "random (continue)"); break;
+ default: strcpy(s, "ignore"); break;
}
break;
@@ -2717,12 +2731,17 @@
break;
case 0x40: // vibrato waveform
case 0x70: // tremolo waveform
- //todo: find proper values for XM/MOD (it's not as trivial as described here, i think)
switch(param & 0x0F)
{
- case 0x00: case 0x03: case 0x06: case 0x0A: case 0x0D: strcpy(s, "sine wave"); break;
- case 0x01: case 0x04: case 0x07: case 0x0B: case 0x0E: strcpy(s, "ramp down"); break;
- case 0x02: case 0x05: case 0x08: case 0x0C: case 0x0F: strcpy(s, "square wave"); break;
+ case 0x00: case 0x08: strcpy(s, "sine wave"); break;
+ case 0x01: case 0x09: strcpy(s, "ramp down"); break;
+ case 0x02: case 0x0A: strcpy(s, "square wave"); break;
+ case 0x03: case 0x0B: strcpy(s, "square wave"); break;
+
+ case 0x04: case 0x0C: strcpy(s, "sine wave (continue)"); break;
+ case 0x05: case 0x0D: strcpy(s, "ramp down (continue)"); break;
+ case 0x06: case 0x0E: strcpy(s, "square wave (continue)"); break;
+ case 0x07: case 0x0F: strcpy(s, "square wave (continue)"); break;
}
break;
case 0x60: // pattern loop
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-28 18:11:44 UTC (rev 428)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-28 20:25:33 UTC (rev 429)
@@ -727,8 +727,9 @@
}
pChn->nPos = 0;
pChn->nPosLo = 0;
- if (pChn->nVibratoType < 4) pChn->nVibratoPos = ((!IsCompatibleMode(TRK_IMPULSETRACKER)) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) && (!(m_dwSongFlags & SONG_ITOLDEFFECTS))) ? 0x10 : 0;
- if(!IsCompatibleMode(TRK_IMPULSETRACKER) && pChn->nTremoloType < 4) pChn->nTremoloPos = 0;
+ // Handle "retrigger" waveform type
+ if (pChn->nVibratoType < 4) pChn->nVibratoPos = ((!IsCompatibleMode(TRK_IMPULSETRACKER | TRK_SCREAMTRACKER)) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) && (!(m_dwSongFlags & SONG_ITOLDEFFECTS))) ? 0x10 : 0;
+ if(!IsCompatibleMode(TRK_IMPULSETRACKER | TRK_SCREAMTRACKER) && pChn->nTremoloType < 4) pChn->nTremoloPos = 0;
}
if (pChn->nPos >= pChn->nLength) pChn->nPos = pChn->nLoopStart;
}
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-11-28 18:11:44 UTC (rev 428)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-11-28 20:25:33 UTC (rev 429)
@@ -3236,10 +3236,10 @@
case 0x10: m->command = CMD_PORTAMENTOUP; m->param |= 0xF0; break;
case 0x20: m->command = CMD_PORTAMENTODOWN; m->param |= 0xF0; break;
case 0x30: m->param = (m->param & 0x0F) | 0x10; break;
- case 0x40: m->param = (m->param & 0x0F) | 0x30; break;
+ case 0x40: m->param = (m->param & 0x03) | 0x30; break;
case 0x50: m->param = (m->param & 0x0F) | 0x20; break;
case 0x60: m->param = (m->param & 0x0F) | 0xB0; break;
- case 0x70: m->param = (m->param & 0x0F) | 0x40; break;
+ case 0x70: m->param = (m->param & 0x03) | 0x40; break;
case 0x90: m->command = CMD_RETRIG; m->param = 0x80 | (m->param & 0x0F); break;
case 0xA0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param = (m->param << 4) | 0x0F; } else m->command = 0; break;
case 0xB0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param |= 0xF0; } else m->command = 0; break;
@@ -3389,6 +3389,7 @@
// Convert S3M / IT / MPTM to MOD / XM
else if(oldTypeIsS3M_IT_MPT && newTypeIsMOD_XM)
{
+ // convert note cut/off/fade
if(m->note == NOTE_NOTECUT || m->note == NOTE_FADE)
m->note = NOTE_KEYOFF;
@@ -3522,6 +3523,22 @@
// Convert anything to MOD - remove volume column, remove Set Macro
if (newTypeIsMOD)
{
+ // convert note off events
+ if(m->note >= NOTE_MIN_SPECIAL)
+ {
+ m->note = NOTE_NONE;
+ // no effect present, so just convert note off to volume 0
+ if(m->command == CMD_NONE)
+ {
+ m->command = CMD_VOLUME;
+ m->param = 0;
+ // EDx effect present, so convert it to ECx
+ } else if((m->command == CMD_MODCMDEX) && ((m->param & 0xF0) == 0xD0))
+ {
+ m->param = 0xC0 | (m->param & 0x0F);
+ }
+ }
+
if(m->command) switch(m->command)
{
case CMD_RETRIG: // MOD only has E9x
Modified: trunk/OpenMPT/soundlib/modsmp_ctrl.cpp
===================================================================
--- trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-11-28 18:11:44 UTC (rev 428)
+++ trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-11-28 20:25:33 UTC (rev 429)
@@ -73,8 +73,17 @@
AfxMessageBox(TEXT("Unsupported start position in InsertSilence."));
}
- if(smp.nLoopStart >= nStartFrom) smp.nLoopStart += nSilenceLength;
- if(smp.nLoopEnd >= nStartFrom) smp.nLoopEnd += nSilenceLength;
+ // Set loop points automatically
+ if(nOldBytes == 0)
+ {
+ smp.nLoopStart = 0;
+ smp.nLoopEnd = nNewLength;
+ smp.uFlags |= CHN_LOOP;
+ } else
+ {
+ if(smp.nLoopStart >= nStartFrom) smp.nLoopStart += nSilenceLength;
+ if(smp.nLoopEnd >= nStartFrom) smp.nLoopEnd += nSilenceLength;
+ }
ReplaceSample(smp, pNewSmp, nNewLength, pSndFile);
AdjustEndOfSample(smp, pSndFile);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-28 18:11:56
|
Revision: 428
http://modplug.svn.sourceforge.net/modplug/?rev=428&view=rev
Author: saga-games
Date: 2009-11-28 18:11:44 +0000 (Sat, 28 Nov 2009)
Log Message:
-----------
[Fix] Revision 421 broke reading MPT instrument / songs extension for IT / MPTM files which had an empty sample slot.
Revision Links:
--------------
http://modplug.svn.sourceforge.net/modplug/?rev=421&view=rev
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_it.cpp
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-28 16:12:21 UTC (rev 427)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-28 18:11:44 UTC (rev 428)
@@ -1209,14 +1209,13 @@
// In order to properly compute the position, in file, of eventual extended settings
// such as "attack" we need to keep the "real" size of the last sample as those extra
// setting will follow this sample in the file
- UINT lastSampleSize = 0;
+ UINT lastSampleOffset = 0;
// -! NEW_FEATURE#0027
// Reading Samples
m_nSamples = CLAMP(pifh->smpnum, 1, MAX_SAMPLES - 1);
for (UINT nsmp=0; nsmp<pifh->smpnum; nsmp++) if ((smppos[nsmp]) && (smppos[nsmp] <= dwMemLength - sizeof(ITSAMPLESTRUCT)))
{
- lastSampleSize = 0; //ensure lastsamplesize = 0 if last sample is empty, else we'll skip the MPTX stuff.
ITSAMPLESTRUCT *pis = (ITSAMPLESTRUCT *)(lpStream+smppos[nsmp]);
if (pis->id == 0x53504D49)
{
@@ -1269,7 +1268,8 @@
// -> CODE#0027
// -> DESC="per-instrument volume ramping setup (refered as attack)"
// ReadSample(&Ins[nsmp+1], flags, (LPSTR)(lpStream+pis->samplepointer), dwMemLength - pis->samplepointer);
- lastSampleSize = ReadSample(&Samples[nsmp+1], flags, (LPSTR)(lpStream+pis->samplepointer), dwMemLength - pis->samplepointer);
+ if(pis->samplepointer)
+ lastSampleOffset = pis->samplepointer + ReadSample(&Samples[nsmp+1], flags, (LPSTR)(lpStream+pis->samplepointer), dwMemLength - pis->samplepointer);
// -! NEW_FEATURE#0027
}
}
@@ -1284,11 +1284,7 @@
// -> DESC="per-instrument volume ramping setup (refered as attack)"
// Compute extra instruments settings position
- if(pifh->smpnum)
- {
- ITSAMPLESTRUCT *pis = (ITSAMPLESTRUCT *)(lpStream+smppos[pifh->smpnum-1]);
- dwMemPos = pis->samplepointer + lastSampleSize;
- }
+ if(lastSampleOffset > 0) dwMemPos = lastSampleOffset;
// Load instrument and song extensions.
if(mptStartPos >= dwMemPos)
@@ -2339,10 +2335,9 @@
flags = (psmp->uFlags & CHN_STEREO) ? RS_STPCM16S : RS_PCM16S;
}
}
- if ((psmp->pSample) && (psmp->nLength))
- itss.samplepointer = dwPos;
- else
- itss.samplepointer = itss.flags = 0;
+ itss.samplepointer = dwPos;
+ if (!(psmp->pSample) || !(psmp->nLength))
+ itss.flags = 0;
fseek(f, smppos[nsmp-1], SEEK_SET);
fwrite(&itss, 1, sizeof(ITSAMPLESTRUCT), f);
fseek(f, dwPos, SEEK_SET);
@@ -2918,10 +2913,9 @@
itss.flags |= 0x02;
flags = RS_PCM16S;
}
- if ((psmp->pSample) && (psmp->nLength))
- itss.samplepointer = dwPos;
- else
- itss.samplepointer = itss.flags = 0;
+ itss.samplepointer = dwPos;
+ if (!(psmp->pSample) || !(psmp->nLength))
+ itss.flags = 0;
fseek(f, smppos[nsmp-1], SEEK_SET);
fwrite(&itss, 1, sizeof(ITSAMPLESTRUCT), f);
fseek(f, dwPos, SEEK_SET);
@@ -3374,7 +3368,7 @@
void CSoundFile::SaveExtendedInstrumentProperties(MODINSTRUMENT *instruments[], UINT nInstruments, FILE* f)
//------------------------------------------------------------------------------------------------------------
-// Used only when saving IT and XM.
+// Used only when saving IT, XM and MPTM.
// ITI, ITP saves using Ericus' macros etc...
// The reason is that ITs and XMs save [code][size][ins1.Value][ins2.Value]...
// whereas ITP saves [code][size][ins1.Value][code][size][ins2.Value]...
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-28 16:12:31
|
Revision: 427
http://modplug.svn.sourceforge.net/modplug/?rev=427&view=rev
Author: saga-games
Date: 2009-11-28 16:12:21 +0000 (Sat, 28 Nov 2009)
Log Message:
-----------
[Fix] Treeview: Double-clicking a sequence to open the sequence's folder also set this sequence as the active sequence, which was not intended.
[Mod] Changed the "Buzz" colour scheme a bit (channel separator colours)
[Mod] Updated DE_jojo.mkb (Added Duplicate pattern shortcut)
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Moptions.cpp
trunk/OpenMPT/mptrack/View_tre.cpp
trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
Modified: trunk/OpenMPT/mptrack/Moptions.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moptions.cpp 2009-11-28 14:44:48 UTC (rev 426)
+++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-11-28 16:12:21 UTC (rev 427)
@@ -552,27 +552,27 @@
void COptionsColors::OnPresetBuzz()
//---------------------------------
{
- CustomColors[MODCOLOR_BACKNORMAL] = 0x00d0dbe1;
- CustomColors[MODCOLOR_TEXTNORMAL] = 0x0027343a;
- CustomColors[MODCOLOR_BACKCURROW] = 0x009eb4c0;
- CustomColors[MODCOLOR_TEXTCURROW] = 0x00000000;
- CustomColors[MODCOLOR_BACKSELECTED] = 0x00000000;
- CustomColors[MODCOLOR_TEXTSELECTED] = 0x00ccd7dd;
- CustomColors[MODCOLOR_BACKPLAYCURSOR] = 0x007a99a9;
- CustomColors[MODCOLOR_TEXTPLAYCURSOR] = 0x00000000;
- CustomColors[MODCOLOR_BACKHILIGHT] = 0x00b5c5ce;
- CustomColors[MODCOLOR_NOTE] = 0x005b0000;
- CustomColors[MODCOLOR_INSTRUMENT] = 0x00555500;
- CustomColors[MODCOLOR_VOLUME] = 0x00005e00;
- CustomColors[MODCOLOR_PANNING] = 0x00686800;
- CustomColors[MODCOLOR_PITCH] = 0x00006262;
- CustomColors[MODCOLOR_GLOBALS] = 0x00000066;
- CustomColors[MODCOLOR_SAMPLE] = 0x0000ff00;
- CustomColors[MODCOLOR_ENVELOPES] = 0x000000ff;
- CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x80, 0x80, 0x80);
- CustomColors[MODCOLOR_SEPFACE] = RGB(0xD4, 0xD0, 0xC8);
+ CustomColors[MODCOLOR_BACKNORMAL] = RGB(0xE1, 0xDB, 0xD0);
+ CustomColors[MODCOLOR_TEXTNORMAL] = RGB(0x3A, 0x34, 0x27);
+ CustomColors[MODCOLOR_BACKCURROW] = RGB(0xC0, 0xB4, 0x9E);
+ CustomColors[MODCOLOR_TEXTCURROW] = RGB(0x00, 0x00, 0x00);
+ CustomColors[MODCOLOR_BACKSELECTED] = RGB(0x00, 0x00, 0x00);
+ CustomColors[MODCOLOR_TEXTSELECTED] = RGB(0xDD, 0xD7, 0xCC);
+ CustomColors[MODCOLOR_BACKPLAYCURSOR] = RGB(0xA9, 0x99, 0x7A);
+ CustomColors[MODCOLOR_TEXTPLAYCURSOR] = RGB(0x00, 0x00, 0x00);
+ CustomColors[MODCOLOR_BACKHILIGHT] = RGB(0xCE, 0xC5, 0xB5);
+ CustomColors[MODCOLOR_NOTE] = RGB(0x00, 0x00, 0x5B);
+ CustomColors[MODCOLOR_INSTRUMENT] = RGB(0x00, 0x55, 0x55);
+ CustomColors[MODCOLOR_VOLUME] = RGB(0x00, 0x5E, 0x00);
+ CustomColors[MODCOLOR_PANNING] = RGB(0x00, 0x68, 0x68);
+ CustomColors[MODCOLOR_PITCH] = RGB(0x62, 0x62, 0x00);
+ CustomColors[MODCOLOR_GLOBALS] = RGB(0x66, 0x00, 0x00);
+ CustomColors[MODCOLOR_SAMPLE] = RGB(0x00, 0xFF, 0x00);
+ CustomColors[MODCOLOR_ENVELOPES] = RGB(0xFF, 0x00, 0x00);
+ CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x9A, 0x87, 0x63);
+ CustomColors[MODCOLOR_SEPFACE] = RGB(0xE1, 0xDB, 0xD0);
CustomColors[MODCOLOR_SEPHILITE] = RGB(0xFF, 0xFF, 0xFF);
- CustomColors[MODCOLOR_BLENDCOLOR] = 0x00d0dbe1;
+ CustomColors[MODCOLOR_BLENDCOLOR] = RGB(0xE1, 0xDB, 0xD0);
OnPreviewChanged();
}
Modified: trunk/OpenMPT/mptrack/View_tre.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-28 14:44:48 UTC (rev 426)
+++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-28 16:12:21 UTC (rev 427)
@@ -1159,9 +1159,9 @@
if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_COMMENTS, 0);
return TRUE;
- case MODITEM_SEQUENCE:
+ /*case MODITEM_SEQUENCE:
if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (dwItem << 16) | 0x8000);
- return TRUE;
+ return TRUE;*/
case MODITEM_ORDER:
if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, dwItem | 0x8000);
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-28 14:44:48 UTC (rev 426)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-28 16:12:21 UTC (rev 427)
@@ -75,6 +75,7 @@
2:1002:2:13:5 //Play row: Ctrl+EINGABE (KeyDown|KeyHold)
2:1317:4:18:1 //Set row jump on note entry: Alt (KeyDown)
2:1685:2:9:1 //Switch to order list: Ctrl+TABULATOR (KeyDown)
+2:1806:2:68:1 //Duplicate pattern: Ctrl+D (KeyDown)
2:1662:6:80:1 //Toggle channel's plugin editor: Ctrl+Alt+P (KeyDown)
2:1062:0:93:1 //Show note properties: ANWENDUNG (KeyDown)
2:1780:2:80:1 //Show playback time at current row: Ctrl+P (KeyDown)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-28 14:44:55
|
Revision: 426
http://modplug.svn.sourceforge.net/modplug/?rev=426&view=rev
Author: saga-games
Date: 2009-11-28 14:44:48 +0000 (Sat, 28 Nov 2009)
Log Message:
-----------
[Fix] Keymap files have a version number now (currently version 1). If keymap file doesn't have a version number (that's version 0), the orderlist keys will be added automatically so that orderlist remains usable in new builds.
[Fix] Orderlist: Show correct shortcuts in context menus
[Imp] Orderlist: 0...9, + and - keys are now also configurable.
[Imp] Orderlist: Duplicate / Create new pattern shortcuts do also work now here.
[Imp] When loading a keymap file and unrecognized lines are found, only one messagebox is shown.
[Mod] All keymaps have been updated to version 1.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/CommandSet.cpp
trunk/OpenMPT/mptrack/CommandSet.h
trunk/OpenMPT/mptrack/Ctrl_pat.h
trunk/OpenMPT/mptrack/Ctrl_seq.cpp
trunk/OpenMPT/mptrack/KeyConfigDlg.cpp
trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb
Modified: trunk/OpenMPT/mptrack/CommandSet.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-28 14:44:48 UTC (rev 426)
@@ -2415,6 +2415,66 @@
commands[kcDuplicatePattern].isHidden = false;
commands[kcDuplicatePattern].isDummy = false;
+ commands[kcOrderlistPat0].UID = 1807;
+ commands[kcOrderlistPat0].isHidden = false;
+ commands[kcOrderlistPat0].isDummy = false;
+ commands[kcOrderlistPat0].Message = "Pattern index digit 0";
+
+ commands[kcOrderlistPat1].UID = 1808;
+ commands[kcOrderlistPat1].isHidden = false;
+ commands[kcOrderlistPat1].isDummy = false;
+ commands[kcOrderlistPat1].Message = "Pattern index digit 1";
+
+ commands[kcOrderlistPat2].UID = 1809;
+ commands[kcOrderlistPat2].isHidden = false;
+ commands[kcOrderlistPat2].isDummy = false;
+ commands[kcOrderlistPat2].Message = "Pattern index digit 2";
+
+ commands[kcOrderlistPat3].UID = 1810;
+ commands[kcOrderlistPat3].isHidden = false;
+ commands[kcOrderlistPat3].isDummy = false;
+ commands[kcOrderlistPat3].Message = "Pattern index digit 3";
+
+ commands[kcOrderlistPat4].UID = 1811;
+ commands[kcOrderlistPat4].isHidden = false;
+ commands[kcOrderlistPat4].isDummy = false;
+ commands[kcOrderlistPat4].Message = "Pattern index digit 4";
+
+ commands[kcOrderlistPat5].UID = 1812;
+ commands[kcOrderlistPat5].isHidden = false;
+ commands[kcOrderlistPat5].isDummy = false;
+ commands[kcOrderlistPat5].Message = "Pattern index digit 5";
+
+ commands[kcOrderlistPat6].UID = 1813;
+ commands[kcOrderlistPat6].isHidden = false;
+ commands[kcOrderlistPat6].isDummy = false;
+ commands[kcOrderlistPat6].Message = "Pattern index digit 6";
+
+ commands[kcOrderlistPat7].UID = 1814;
+ commands[kcOrderlistPat7].isHidden = false;
+ commands[kcOrderlistPat7].isDummy = false;
+ commands[kcOrderlistPat7].Message = "Pattern index digit 7";
+
+ commands[kcOrderlistPat8].UID = 1815;
+ commands[kcOrderlistPat8].isHidden = false;
+ commands[kcOrderlistPat8].isDummy = false;
+ commands[kcOrderlistPat8].Message = "Pattern index digit 8";
+
+ commands[kcOrderlistPat9].UID = 1816;
+ commands[kcOrderlistPat9].isHidden = false;
+ commands[kcOrderlistPat9].isDummy = false;
+ commands[kcOrderlistPat9].Message = "Pattern index digit 9";
+
+ commands[kcOrderlistPatPlus].UID = 1817;
+ commands[kcOrderlistPatPlus].isHidden = false;
+ commands[kcOrderlistPatPlus].isDummy = false;
+ commands[kcOrderlistPatPlus].Message = "Increase pattern index ";
+
+ commands[kcOrderlistPatMinus].UID = 1818;
+ commands[kcOrderlistPatMinus].isHidden = false;
+ commands[kcOrderlistPatMinus].isDummy = false;
+ commands[kcOrderlistPatMinus].Message = "Decrease pattern index";
+
#ifdef _DEBUG
for (int i=0; i<kcNumCommands; i++) {
if (commands[i].UID != 0) { // ignore unset UIDs
@@ -2574,7 +2634,7 @@
}
}
// Same applies for orderlist navigation
- else if (inCmd>=kcStartOrderlistCommands&& inCmd<=kcEndOrderlistNavigationSelect)
+ else if (inCmd>=kcStartOrderlistNavigation && inCmd<=kcEndOrderlistNavigation)
{//Check that it is a nav cmd
CommandID cmdNavSelection = (CommandID)(kcStartOrderlistNavigationSelect+ (inCmd-kcStartOrderlistNavigation));
for (int kSel=0; kSel<commands[kcSelect].kcList.GetSize(); kSel++)
@@ -3232,6 +3292,7 @@
fprintf(outStream, "//-Format is: -\n");
fprintf(outStream, "//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -\n");
fprintf(outStream, "//----------------------------------------------------------------------\n");
+ fprintf(outStream, "version:%d\n", KEYMAP_VERSION);
for (int ctx=0; ctx<kCtxMaxInputContexts; ctx++)
{
@@ -3272,9 +3333,13 @@
int commentStart;
CCommandSet *pTempCS;
int l=0;
+ int fileVersion = 0;
pTempCS = new CCommandSet();
+
int errorCount=0;
+ CString errText = "";
+
while(iStrm.getline(s, sizeof(s)))
{
//::MessageBox(NULL, s, "", MB_ICONEXCLAMATION|MB_OK);
@@ -3289,6 +3354,8 @@
if (!curLine.IsEmpty() && curLine.Compare("\n") !=0)
{
+ bool ignoreLine = false;
+
//ctx:UID:Description:Modifier:Key:EventMask
int spos = 0;
@@ -3296,6 +3363,21 @@
token=curLine.Tokenize(":",spos);
kc.ctx = (InputTargetContext) atoi(token);
+ // this line indicates the version of this keymap file instead. (e.g. "version:1")
+ if((token.Trim().CompareNoCase("version") == 0) && (spos != -1))
+ {
+ fileVersion = atoi(curLine.Mid(spos));
+ if(fileVersion > KEYMAP_VERSION)
+ {
+ CString err;
+ err.Format("Key binding file %s has version %d. Your version of OpenMPT only supports loading files up to version %d.", szFilename, fileVersion, KEYMAP_VERSION);
+ errText += err + "\n";
+ Log(err);
+ }
+ spos = -1;
+ ignoreLine = true;
+ }
+
//UID
if (spos != -1)
{
@@ -3324,31 +3406,37 @@
kc.event = (KeyEventType) atoi(token);
}
- //Error checking (TODO):
- if (cmd<0 || cmd>=kcNumCommands || spos==-1)
+ if(!ignoreLine)
{
- errorCount++;
- CString err;
- if (errorCount<10) {
- err.Format("Line %d in key binding file %s was not understood.", l, szFilename);
- if(s_bShowErrorOnUnknownKeybinding) ::MessageBox(NULL, err, "", MB_ICONEXCLAMATION|MB_OK);
- Log(err);
- } else if (errorCount==10) {
- err.Format("Too many errors detected, not reporting any more.");
- if(s_bShowErrorOnUnknownKeybinding) ::MessageBox(NULL, err, "", MB_ICONEXCLAMATION|MB_OK);
- Log(err);
+ //Error checking (TODO):
+ if (cmd<0 || cmd>=kcNumCommands || spos==-1)
+ {
+ errorCount++;
+ CString err;
+ if (errorCount<10) {
+ err.Format("Line %d in key binding file %s was not understood.", l, szFilename);
+ errText += err + "\n";
+ Log(err);
+ } else if (errorCount==10) {
+ err = "Too many errors detected, not reporting any more.";
+ errText += err + "\n";
+ Log(err);
+ }
}
+ else
+ {
+ pTempCS->Add(kc, cmd, true);
+ }
}
- else
- {
- pTempCS->Add(kc, cmd, true);
- }
}
l++;
}
+ if(s_bShowErrorOnUnknownKeybinding && !errText.IsEmpty()) ::MessageBox(NULL, errText, "", MB_ICONEXCLAMATION|MB_OK);
+ if(fileVersion < KEYMAP_VERSION) UpgradeKeymap(pTempCS, fileVersion);
+
Copy(pTempCS);
delete pTempCS;
@@ -3370,6 +3458,111 @@
}
+// Fix outdated keymap files
+void CCommandSet::UpgradeKeymap(CCommandSet *pCommands, int oldVersion)
+//---------------------------------------------------------------------
+{
+ KeyCombination kc;
+
+ // no orderlist context
+ if(oldVersion == 0)
+ {
+ kc.ctx = kCtxCtrlOrderlist;
+ kc.event = (KeyEventType) (kKeyEventDown | kKeyEventRepeat);
+ kc.mod = 0;
+
+ kc.code = VK_DELETE;
+ pCommands->Add(kc, kcOrderlistEditDelete, false);
+
+ kc.code = VK_INSERT;
+ pCommands->Add(kc, kcOrderlistEditInsert, false);
+
+ kc.code = VK_RETURN;
+ pCommands->Add(kc, kcOrderlistEditPattern, false);
+
+ kc.code = VK_TAB;
+ pCommands->Add(kc, kcOrderlistSwitchToPatternView, false);
+
+ kc.code = VK_LEFT;
+ pCommands->Add(kc, kcOrderlistNavigateLeft, false);
+ kc.code = VK_UP;
+ pCommands->Add(kc, kcOrderlistNavigateLeft, false);
+
+ kc.code = VK_RIGHT;
+ pCommands->Add(kc, kcOrderlistNavigateRight, false);
+ kc.code = VK_DOWN;
+ pCommands->Add(kc, kcOrderlistNavigateRight, false);
+
+ kc.code = VK_HOME;
+ pCommands->Add(kc, kcOrderlistNavigateFirst, false);
+
+ kc.code = VK_END;
+ pCommands->Add(kc, kcOrderlistNavigateLast, false);
+
+ kc.code = VK_ADD;
+ pCommands->Add(kc, kcOrderlistPatPlus, false);
+ kc.code = VK_OEM_PLUS;
+ pCommands->Add(kc, kcOrderlistPatPlus, false);
+
+ kc.code = VK_SUBTRACT;
+ pCommands->Add(kc, kcOrderlistPatMinus, false);
+ kc.code = VK_OEM_MINUS;
+ pCommands->Add(kc, kcOrderlistPatMinus, false);
+
+ kc.code = '0';
+ pCommands->Add(kc, kcOrderlistPat0, false);
+ kc.code = VK_NUMPAD0;
+ pCommands->Add(kc, kcOrderlistPat0, false);
+
+ kc.code = '1';
+ pCommands->Add(kc, kcOrderlistPat1, false);
+ kc.code = VK_NUMPAD1;
+ pCommands->Add(kc, kcOrderlistPat1, false);
+
+ kc.code = '2';
+ pCommands->Add(kc, kcOrderlistPat2, false);
+ kc.code = VK_NUMPAD2;
+ pCommands->Add(kc, kcOrderlistPat2, false);
+
+ kc.code = '3';
+ pCommands->Add(kc, kcOrderlistPat3, false);
+ kc.code = VK_NUMPAD3;
+ pCommands->Add(kc, kcOrderlistPat3, false);
+
+ kc.code = '4';
+ pCommands->Add(kc, kcOrderlistPat4, false);
+ kc.code = VK_NUMPAD4;
+ pCommands->Add(kc, kcOrderlistPat4, false);
+
+ kc.code = '5';
+ pCommands->Add(kc, kcOrderlistPat5, false);
+ kc.code = VK_NUMPAD5;
+ pCommands->Add(kc, kcOrderlistPat5, false);
+
+ kc.code = '6';
+ pCommands->Add(kc, kcOrderlistPat6, false);
+ kc.code = VK_NUMPAD6;
+ pCommands->Add(kc, kcOrderlistPat6, false);
+
+ kc.code = '7';
+ pCommands->Add(kc, kcOrderlistPat7, false);
+ kc.code = VK_NUMPAD7;
+ pCommands->Add(kc, kcOrderlistPat7, false);
+
+ kc.code = '8';
+ pCommands->Add(kc, kcOrderlistPat8, false);
+ kc.code = VK_NUMPAD8;
+ pCommands->Add(kc, kcOrderlistPat8, false);
+
+ kc.code = '9';
+ pCommands->Add(kc, kcOrderlistPat9, false);
+ kc.code = VK_NUMPAD9;
+ pCommands->Add(kc, kcOrderlistPat9, false);
+
+ }
+}
+
+
//Could do better search algo but this is not perf critical.
int CCommandSet::FindCmd(int uid)
{
Modified: trunk/OpenMPT/mptrack/CommandSet.h
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/mptrack/CommandSet.h 2009-11-28 14:44:48 UTC (rev 426)
@@ -6,6 +6,8 @@
//#define VK_ALT 0x12
+#define KEYMAP_VERSION 1 // Version of the .mkb format
+
enum InputTargetContext
{
kCtxUnknownContext = -1,
@@ -964,7 +966,15 @@
kcEndVSTGUICommands=kcVSTGUIRandParams,
kcStartOrderlistCommands,
- kcStartOrderlistNavigation=kcStartOrderlistCommands,
+ // Orderlist edit
+ kcStartOrderlistEdit=kcStartOrderlistCommands,
+ kcOrderlistEditDelete=kcStartOrderlistEdit,
+ kcOrderlistEditInsert,
+ kcOrderlistEditPattern,
+ kcOrderlistSwitchToPatternView,
+ kcEndOrderlistEdit=kcOrderlistSwitchToPatternView,
+ // Orderlist navigation
+ kcStartOrderlistNavigation,
kcOrderlistNavigateLeft=kcStartOrderlistNavigation,
kcOrderlistNavigateRight,
kcOrderlistNavigateFirst,
@@ -977,13 +987,23 @@
kcOrderlistNavigateFirstSelect,
kcOrderlistNavigateLastSelect,
kcEndOrderlistNavigationSelect = kcOrderlistNavigateLastSelect,
+ // Orderlist pattern list edit
+ kcStartOrderlistNum,
+ kcOrderlistPat0=kcStartOrderlistNum,
+ kcOrderlistPat1,
+ kcOrderlistPat2,
+ kcOrderlistPat3,
+ kcOrderlistPat4,
+ kcOrderlistPat5,
+ kcOrderlistPat6,
+ kcOrderlistPat7,
+ kcOrderlistPat8,
+ kcOrderlistPat9,
+ kcOrderlistPatPlus,
+ kcOrderlistPatMinus,
+ kcEndOrderlistNum=kcOrderlistPatMinus,
+ kcEndOrderlistCommands=kcEndOrderlistNum,
- kcOrderlistEditDelete,
- kcOrderlistEditInsert,
- kcOrderlistEditPattern,
- kcOrderlistSwitchToPatternView,
- kcEndOrderlistCommands=kcOrderlistSwitchToPatternView,
-
kcNumCommands,
};
@@ -1125,6 +1145,7 @@
bool SaveFile(CString FileName, bool debug);
bool LoadFile(CString FileName);
bool LoadFile(std::istream& iStrm, LPCTSTR szFilename);
+ void UpgradeKeymap(CCommandSet *pCommands, int oldVersion);
static DWORD GetKeymapLabel(InputTargetContext ctx, UINT mod, UINT code, KeyEventType ke);
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-28 14:44:48 UTC (rev 426)
@@ -51,7 +51,6 @@
else if(!isSelectionKeyPressed && m_nScrollPos2nd != ORDERINDEX_INVALID) m_nScrollPos2nd = ORDERINDEX_INVALID;
};
bool SetCurSel(ORDERINDEX sel, bool bEdit = true, bool bShiftClick = false, bool bIgnoreCurSel = false);
- BOOL ProcessChar(UINT nChar);
BOOL UpdateScrollInfo();
void UpdateInfoText();
int GetFontWidth();
@@ -95,6 +94,9 @@
void OnEditCut();
void OnEditPaste();
+ // Helper function for entering pattern number
+ void EnterPatternNum(int enterNum);
+
//{{AFX_VIRTUAL(COrderList)
virtual BOOL PreTranslateMessage(MSG *pMsg);
virtual void UpdateView(DWORD dwHintMask=0, CObject *pObj=NULL);
Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-28 14:44:48 UTC (rev 426)
@@ -318,55 +318,6 @@
}
-BOOL COrderList::ProcessChar(UINT nChar)
-//--------------------------------------
-{
- if (m_pModDoc)
- {
- CSoundFile *pSndFile = m_pModDoc->GetSoundFile();
- int ord = pSndFile->Order[m_nScrollPos];
- int maxpat = 0;
- for (int i=0; i<pSndFile->Patterns.Size(); i++) if (pSndFile->Patterns[i]) maxpat = i;
- if ((nChar >= '0') && (nChar <= '9'))
- {
- if (ord >= pSndFile->Patterns.Size()) ord = 0;
-
- ord = ord * 10 + (nChar - '0');
- if ((ord >= 100) && (ord > maxpat)) ord %= 100;
- if ((ord >= 10) && (ord > maxpat)) ord %= 10;
- } else
- if (nChar == '+')
- {
- ord++;
- if(ord > pSndFile->Order.GetInvalidPatIndex())
- ord = 0;
- else
- {
- const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex();
- if(ord > maxpat && ord < nFirstInvalid)
- ord = nFirstInvalid;
- }
- } else
- if (nChar == '-')
- {
- const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex();
- ord--;
- if (ord < 0) ord = pSndFile->Order.GetInvalidPatIndex(); else
- if ((ord > maxpat) && (ord < nFirstInvalid)) ord = maxpat;
- }
- if (ord != pSndFile->Order[m_nScrollPos])
- {
- pSndFile->Order[m_nScrollPos] = static_cast<PATTERNINDEX>(ord);
- m_pModDoc->SetModified();
- m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this);
- InvalidateSelection();
- return TRUE;
- }
- }
- return FALSE;
-}
-
-
BOOL COrderList::PreTranslateMessage(MSG *pMsg)
//---------------------------------------------
{
@@ -397,13 +348,6 @@
}
//end rewbs.customKeys
-
- switch(pMsg->message)
- {
- case WM_CHAR:
- if (ProcessChar(pMsg->wParam)) return true;
- break;
- }
return CWnd::PreTranslateMessage(pMsg);
}
@@ -423,6 +367,7 @@
case kcEditPaste:
OnEditPaste(); return wParam;
+ // Orderlist navigation
case kcOrderlistNavigateLeftSelect:
case kcOrderlistNavigateLeft:
SetCurSelTo2ndSel(wParam == kcOrderlistNavigateLeftSelect); SetCurSel(m_nScrollPos - 1); return wParam;
@@ -442,6 +387,8 @@
SetCurSel(nLast);
}
return wParam;
+
+ // Orderlist edit
case kcOrderlistEditDelete:
OnDeleteOrder(); return wParam;
case kcOrderlistEditInsert:
@@ -451,6 +398,23 @@
case kcOrderlistEditPattern:
OnLButtonDblClk(0, CPoint(0,0)); OnSwitchToView(); return wParam;
+ // Enter pattern number
+ case kcOrderlistPat0:
+ case kcOrderlistPat1:
+ case kcOrderlistPat2:
+ case kcOrderlistPat3:
+ case kcOrderlistPat4:
+ case kcOrderlistPat5:
+ case kcOrderlistPat6:
+ case kcOrderlistPat7:
+ case kcOrderlistPat8:
+ case kcOrderlistPat9:
+ EnterPatternNum(wParam - kcOrderlistPat0); return wParam;
+ case kcOrderlistPatMinus:
+ EnterPatternNum(10); return wParam;
+ case kcOrderlistPatPlus:
+ EnterPatternNum(11); return wParam;
+
// kCtxViewPatternsNote messages
case kcSwitchToOrderList:
OnSwitchToView();
@@ -462,12 +426,74 @@
case kcChannelUnmuteAll:
case kcUnmuteAllChnOnPatTransition:
::PostMessage(m_pParent->GetViewWnd(), WM_MOD_KEYCOMMAND, wParam, 0); return wParam;
+
+ case kcDuplicatePattern:
+ OnDuplicatePattern(); return wParam;
+ case kcNewPattern:
+ OnCreateNewPattern(); return wParam;
}
return 0;
}
+// Helper function to enter pattern index into the orderlist.
+// Call with param 0...9 (enter digit), 10 (decrease) or 11 (increase).
+void COrderList::EnterPatternNum(int enterNum)
+//--------------------------------------------
+{
+ if (m_pModDoc == nullptr) return;
+ CSoundFile *pSndFile = m_pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return;
+
+ PATTERNINDEX nCurNdx = (m_nScrollPos < pSndFile->Order.GetLength()) ? pSndFile->Order[m_nScrollPos] : pSndFile->Order.GetInvalidPatIndex();
+ PATTERNINDEX nMaxNdx = 0;
+ for(PATTERNINDEX nPat = 0; nPat < pSndFile->Patterns.Size(); nPat++)
+ if (pSndFile->Patterns.IsValidPat(nPat)) nMaxNdx = nPat;
+
+ if (enterNum >= 0 && enterNum <= 9) // enter 0...9
+ {
+ if (nCurNdx >= pSndFile->Patterns.Size()) nCurNdx = 0;
+
+ nCurNdx = nCurNdx * 10 + static_cast<PATTERNINDEX>(enterNum);
+ if ((nCurNdx >= 1000) && (nCurNdx > nMaxNdx)) nCurNdx %= 1000;
+ if ((nCurNdx >= 100) && (nCurNdx > nMaxNdx)) nCurNdx %= 100;
+ if ((nCurNdx >= 10) && (nCurNdx > nMaxNdx)) nCurNdx %= 10;
+ } else if (enterNum == 11) // increase pattern index
+ {
+ if(nCurNdx >= pSndFile->Order.GetInvalidPatIndex())
+ {
+ nCurNdx = 0;
+ }
+ else
+ {
+ nCurNdx++;
+ const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex();
+ if(nCurNdx > nMaxNdx && nCurNdx < nFirstInvalid)
+ nCurNdx = nFirstInvalid;
+ }
+ } else if (enterNum == 10) // decrease pattern index
+ {
+ const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex();
+ if (nCurNdx == 0)
+ nCurNdx = pSndFile->Order.GetInvalidPatIndex();
+ else
+ {
+ nCurNdx--;
+ if ((nCurNdx > nMaxNdx) && (nCurNdx < nFirstInvalid)) nCurNdx = nMaxNdx;
+ }
+ }
+ // apply
+ if (nCurNdx != pSndFile->Order[m_nScrollPos])
+ {
+ pSndFile->Order[m_nScrollPos] = nCurNdx;
+ m_pModDoc->SetModified();
+ m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this);
+ InvalidateSelection();
+ }
+}
+
+
static const char szClipboardOrdersHdr[] = "OpenMPT %3s\x0D\x0A";
static const char szClipboardOrdCountFieldHdr[] = "OrdNum: %u\x0D\x0A";
static const char szClipboardOrdersFieldHdr[] = "OrdLst: ";
@@ -977,23 +1003,23 @@
if(bMultiSelection)
{
// several patterns are selected.
- AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Patterns\tIns");
- AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Patterns\tDel");
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Patterns\t" + ih->GetKeyTextFromCommand(kcOrderlistEditInsert));
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Patterns\t" + ih->GetKeyTextFromCommand(kcOrderlistEditDelete));
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_COPY, "&Copy Orders\t" + ih->GetKeyTextFromCommand(kcEditCopy));
AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_CUT, "&C&ut Orders\t" + ih->GetKeyTextFromCommand(kcEditCut));
AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_PASTE, "&Paste Orders\t" + ih->GetKeyTextFromCommand(kcEditPaste));
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
- AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_COPY, "&Duplicate Patterns");
+ AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_COPY, "&Duplicate Patterns\t" + ih->GetKeyTextFromCommand(kcDuplicatePattern));
}
else
{
// only one pattern is selected
- AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Pattern\tIns");
- AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Pattern\tDel");
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Pattern\t" + ih->GetKeyTextFromCommand(kcOrderlistEditInsert));
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Pattern\t" + ih->GetKeyTextFromCommand(kcOrderlistEditDelete));
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
- AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_NEW, "Create &New Pattern");
- AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_COPY, "&Duplicate Pattern");
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_NEW, "Create &New Pattern\t" + ih->GetKeyTextFromCommand(kcNewPattern));
+ AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_COPY, "&Duplicate Pattern\t" + ih->GetKeyTextFromCommand(kcDuplicatePattern));
AppendMenu(hMenu, MF_STRING | greyed, ID_PATTERNCOPY, "&Copy Pattern");
AppendMenu(hMenu, MF_STRING | greyed, ID_PATTERNPASTE, "P&aste Pattern");
AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_PASTE, "&Paste Orders\t" + ih->GetKeyTextFromCommand(kcEditPaste));
Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp
===================================================================
--- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-11-28 14:44:48 UTC (rev 426)
@@ -212,6 +212,8 @@
for (int c=kcStartOrderlistCommands; c<=kcEndOrderlistCommands; c++)
newCat->commands.Add(c);
+ newCat->separators.Add(kcEndOrderlistNavigation); //--------------------------------------
+ newCat->separators.Add(kcEndOrderlistEdit); //--------------------------------------
commandCategories.Add(*newCat);
delete newCat;
Modified: trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb
===================================================================
--- trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -278,13 +279,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -179,6 +180,7 @@
4:1208:0:54:1 //Set instrument digit 6: 6 (KeyDown)
4:1209:0:103:1 //Set instrument digit 7: 7 (ZEHNERTASTATUR) (KeyDown)
4:1209:0:55:1 //Set instrument digit 7: 7 (KeyDown)
+4:1210:0:104:1 //Set instrument digit 8: 8 (ZEHNERTASTATUR) (KeyDown)
4:1210:0:56:1 //Set instrument digit 8: 8 (KeyDown)
4:1211:0:105:1 //Set instrument digit 9: 9 (ZEHNERTASTATUR) (KeyDown)
4:1211:0:57:1 //Set instrument digit 9: 9 (KeyDown)
@@ -293,13 +295,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: ENTF (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: EINFG (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: EINGABE (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TABULATOR (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: NACH-LINKS (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: NACH-OBEN (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: NACH-RECHTS (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: NACH-UNTEN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: POS1 (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: ENDE (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: ENTF (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: EINFG (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: EINGABE (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TABULATOR (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: 0 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: 1 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: 2 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: 3 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: 4 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: 5 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: 6 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: 7 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: 8 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: 9 (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : + (ZEHNERTASTATUR) (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: - (ZEHNERTASTATUR) (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -277,13 +278,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -263,13 +264,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -187,13 +188,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -282,13 +283,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -255,13 +256,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -270,13 +271,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb 2009-11-27 21:17:33 UTC (rev 425)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb 2009-11-28 14:44:48 UTC (rev 426)
@@ -2,6 +2,7 @@
//-Format is: -
//- Context:Command ID:Modifiers:Key:KeypressEventType //Comments -
//----------------------------------------------------------------------
+version:1
//----( Global Context (0) )------------
0:1347:2:78:1 //File/New: Ctrl+N (KeyDown)
@@ -258,13 +259,37 @@
//----( Comments Context [top] (18) )------------
//----( Orderlist (19) )------------
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
-19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
-19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
-19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
-19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
+19:1807:0:48:5 //Pattern index digit 0: 0 (KeyDown|KeyHold)
+19:1807:0:96:5 //Pattern index digit 0: NUM 0 (KeyDown|KeyHold)
+19:1808:0:49:5 //Pattern index digit 1: 1 (KeyDown|KeyHold)
+19:1808:0:97:5 //Pattern index digit 1: NUM 1 (KeyDown|KeyHold)
+19:1809:0:50:5 //Pattern index digit 2: 2 (KeyDown|KeyHold)
+19:1809:0:98:5 //Pattern index digit 2: NUM 2 (KeyDown|KeyHold)
+19:1810:0:51:5 //Pattern index digit 3: 3 (KeyDown|KeyHold)
+19:1810:0:99:5 //Pattern index digit 3: NUM 3 (KeyDown|KeyHold)
+19:1811:0:52:5 //Pattern index digit 4: 4 (KeyDown|KeyHold)
+19:1811:0:100:5 //Pattern index digit 4: NUM 4 (KeyDown|KeyHold)
+19:1812:0:53:5 //Pattern index digit 5: 5 (KeyDown|KeyHold)
+19:1812:0:101:5 //Pattern index digit 5: NUM 5 (KeyDown|KeyHold)
+19:1813:0:54:5 //Pattern index digit 6: 6 (KeyDown|KeyHold)
+19:1813:0:102:5 //Pattern index digit 6: NUM 6 (KeyDown|KeyHold)
+19:1814:0:55:5 //Pattern index digit 7: 7 (KeyDown|KeyHold)
+19:1814:0:103:5 //Pattern index digit 7: NUM 7 (KeyDown|KeyHold)
+19:1815:0:56:5 //Pattern index digit 8: 8 (KeyDown|KeyHold)
+19:1815:0:104:5 //Pattern index digit 8: NUM 8 (KeyDown|KeyHold)
+19:1816:0:57:5 //Pattern index digit 9: 9 (KeyDown|KeyHold)
+19:1816:0:105:5 //Pattern index digit 9: NUM 9 (KeyDown|KeyHold)
+19:1817:0:107:5 //Increase pattern index : NUM PLUS (KeyDown|KeyHold)
+19:1817:0:187:5 //Increase pattern index : + (KeyDown|KeyHold)
+19:1818:0:109:1 //Decrease pattern index: NUM SUB (KeyDown)
+19:1818:0:189:1 //Decrease pattern index: - (KeyDown)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-27 21:17:42
|
Revision: 425
http://modplug.svn.sourceforge.net/modplug/?rev=425&view=rev
Author: saga-games
Date: 2009-11-27 21:17:33 +0000 (Fri, 27 Nov 2009)
Log Message:
-----------
[New] New keyboard shortcut in pattern context: Duplicate pattern
[Fix] Cleanup dialog: The preset checkboxes were slightly wrong.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/CleanupSong.cpp
trunk/OpenMPT/mptrack/CommandSet.cpp
trunk/OpenMPT/mptrack/CommandSet.h
trunk/OpenMPT/mptrack/Ctrl_pat.cpp
trunk/OpenMPT/mptrack/Mainfrm.h
trunk/OpenMPT/mptrack/View_pat.cpp
Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-11-27 19:17:19 UTC (rev 424)
+++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-11-27 21:17:33 UTC (rev 425)
@@ -146,14 +146,14 @@
// patterns
CheckDlgButton(IDC_CHK_CLEANUP_PATTERNS, MF_CHECKED);
CheckDlgButton(IDC_CHK_REMOVE_PATTERNS, MF_UNCHECKED);
- CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_UNCHECKED);
+ CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_CHECKED);
// orders
CheckDlgButton(IDC_CHK_MERGE_SEQUENCES, MF_UNCHECKED);
CheckDlgButton(IDC_CHK_REMOVE_ORDERS, MF_UNCHECKED);
// samples
CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_CHECKED);
CheckDlgButton(IDC_CHK_REMOVE_SAMPLES, MF_UNCHECKED);
- CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED);
+ CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_UNCHECKED);
CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_CHECKED);
// instruments
CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_CHECKED);
Modified: trunk/OpenMPT/mptrack/CommandSet.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 19:17:19 UTC (rev 424)
+++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 21:17:33 UTC (rev 425)
@@ -2410,6 +2410,11 @@
commands[kcOrderlistSwitchToPatternView].isHidden = false;
commands[kcOrderlistSwitchToPatternView].isDummy = false;
+ commands[kcDuplicatePattern].UID = 1806;
+ commands[kcDuplicatePattern].Message = "Duplicate pattern";
+ commands[kcDuplicatePattern].isHidden = false;
+ commands[kcDuplicatePattern].isDummy = false;
+
#ifdef _DEBUG
for (int i=0; i<kcNumCommands; i++) {
if (commands[i].UID != 0) { // ignore unset UIDs
Modified: trunk/OpenMPT/mptrack/CommandSet.h
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 19:17:19 UTC (rev 424)
+++ trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 21:17:33 UTC (rev 425)
@@ -217,6 +217,7 @@
kcSetSpacing9,
kcSwitchToOrderList,
kcNewPattern,
+ kcDuplicatePattern,
kcTogglePluginEditor,
kcShowNoteProperties,
kcShowPatternProperties,
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 19:17:19 UTC (rev 424)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 21:17:33 UTC (rev 425)
@@ -520,6 +520,10 @@
OnPatternNew();
break;
+ case CTRLMSG_PAT_DUPPATTERN:
+ OnPatternDuplicate();
+ break;
+
case CTRLMSG_SETUPMACROS:
OnSetupZxxMacros();
break;
@@ -1262,7 +1266,7 @@
void CCtrlPatterns::TogglePluginEditor(bool split)
-//----------------------------------------
+//------------------------------------------------
{
if ((m_nInstrument) && (m_pModDoc))
{
@@ -1279,7 +1283,7 @@
}
void CCtrlPatterns::ToggleSplitPluginEditor()
-//----------------------------------------
+//-------------------------------------------
{
TogglePluginEditor(true);
}
Modified: trunk/OpenMPT/mptrack/Mainfrm.h
===================================================================
--- trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-27 19:17:19 UTC (rev 424)
+++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-27 21:17:33 UTC (rev 425)
@@ -71,6 +71,7 @@
CTRLMSG_INS_NEWINSTRUMENT,
CTRLMSG_INS_SONGDROP,
CTRLMSG_INS_SAMPLEMAP,
+ CTRLMSG_PAT_DUPPATTERN,
};
enum {
Modified: trunk/OpenMPT/mptrack/View_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-27 19:17:19 UTC (rev 424)
+++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-27 21:17:33 UTC (rev 425)
@@ -3634,6 +3634,7 @@
case kcToggleFollowSong: SendCtrlMessage(CTRLMSG_PAT_FOLLOWSONG); return wParam;
case kcChangeLoopStatus: SendCtrlMessage(CTRLMSG_PAT_LOOP, -1); return wParam;
case kcNewPattern: SendCtrlMessage(CTRLMSG_PAT_NEWPATTERN); return wParam;
+ case kcDuplicatePattern: SendCtrlMessage(CTRLMSG_PAT_DUPPATTERN); return wParam;
case kcSwitchToOrderList: OnSwitchToOrderList();
case kcSwitchOverflowPaste: CMainFrame::m_dwPatternSetup ^= PATTERN_OVERFLOWPASTE; return wParam;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-27 19:18:03
|
Revision: 424
http://modplug.svn.sourceforge.net/modplug/?rev=424&view=rev
Author: saga-games
Date: 2009-11-27 19:17:19 +0000 (Fri, 27 Nov 2009)
Log Message:
-----------
[Imp] Orderlist: Using the keyboard manager for shortcuts. The selection code in the keyboard manager always was and still IS very dirty and all those hacks should be rewritten at some point.
[Fix] Treeview: Sequence context menu was slightly buggy.
[Mod] Default keymaps have been updated to contain the orderlist shortcuts.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/CommandSet.cpp
trunk/OpenMPT/mptrack/CommandSet.h
trunk/OpenMPT/mptrack/Ctrl_pat.cpp
trunk/OpenMPT/mptrack/Ctrl_pat.h
trunk/OpenMPT/mptrack/Ctrl_seq.cpp
trunk/OpenMPT/mptrack/KeyConfigDlg.cpp
trunk/OpenMPT/mptrack/View_tre.cpp
trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb
trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb
Modified: trunk/OpenMPT/mptrack/CommandSet.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 19:17:19 UTC (rev 424)
@@ -2350,6 +2350,66 @@
commands[kcEditPasteFlood].isHidden = false;
commands[kcEditPasteFlood].isDummy = false;
+ commands[kcOrderlistNavigateLeft].UID = 1794;
+ commands[kcOrderlistNavigateLeft].Message = "Previous Order";
+ commands[kcOrderlistNavigateLeft].isHidden = false;
+ commands[kcOrderlistNavigateLeft].isDummy = false;
+
+ commands[kcOrderlistNavigateRight].UID = 1795;
+ commands[kcOrderlistNavigateRight].Message = "Next Order";
+ commands[kcOrderlistNavigateRight].isHidden = false;
+ commands[kcOrderlistNavigateRight].isDummy = false;
+
+ commands[kcOrderlistNavigateFirst].UID = 1796;
+ commands[kcOrderlistNavigateFirst].Message = "First Order";
+ commands[kcOrderlistNavigateFirst].isHidden = false;
+ commands[kcOrderlistNavigateFirst].isDummy = false;
+
+ commands[kcOrderlistNavigateLast].UID = 1797;
+ commands[kcOrderlistNavigateLast].Message = "Last Order";
+ commands[kcOrderlistNavigateLast].isHidden = false;
+ commands[kcOrderlistNavigateLast].isDummy = false;
+
+ commands[kcOrderlistNavigateLeftSelect].UID = 1798;
+ commands[kcOrderlistNavigateLeftSelect].Message = "kcOrderlistNavigateLeftSelect";
+ commands[kcOrderlistNavigateLeftSelect].isHidden = true;
+ commands[kcOrderlistNavigateLeftSelect].isDummy = false;
+
+ commands[kcOrderlistNavigateRightSelect].UID = 1799;
+ commands[kcOrderlistNavigateRightSelect].Message = "kcOrderlistNavigateRightSelect";
+ commands[kcOrderlistNavigateRightSelect].isHidden = true;
+ commands[kcOrderlistNavigateRightSelect].isDummy = false;
+
+ commands[kcOrderlistNavigateFirstSelect].UID = 1800;
+ commands[kcOrderlistNavigateFirstSelect].Message = "kcOrderlistNavigateFirstSelect";
+ commands[kcOrderlistNavigateFirstSelect].isHidden = true;
+ commands[kcOrderlistNavigateFirstSelect].isDummy = false;
+
+ commands[kcOrderlistNavigateLastSelect].UID = 1801;
+ commands[kcOrderlistNavigateLastSelect].Message = "kcOrderlistNavigateLastSelect";
+ commands[kcOrderlistNavigateLastSelect].isHidden = true;
+ commands[kcOrderlistNavigateLastSelect].isDummy = false;
+
+ commands[kcOrderlistEditDelete].UID = 1802;
+ commands[kcOrderlistEditDelete].Message = "Delete Order";
+ commands[kcOrderlistEditDelete].isHidden = false;
+ commands[kcOrderlistEditDelete].isDummy = false;
+
+ commands[kcOrderlistEditInsert].UID = 1803;
+ commands[kcOrderlistEditInsert].Message = "Insert Order";
+ commands[kcOrderlistEditInsert].isHidden = false;
+ commands[kcOrderlistEditInsert].isDummy = false;
+
+ commands[kcOrderlistEditPattern].UID = 1804;
+ commands[kcOrderlistEditPattern].Message = "Edit Pattern";
+ commands[kcOrderlistEditPattern].isHidden = false;
+ commands[kcOrderlistEditPattern].isDummy = false;
+
+ commands[kcOrderlistSwitchToPatternView].UID = 1805;
+ commands[kcOrderlistSwitchToPatternView].Message = "Switch to pattern editor";
+ commands[kcOrderlistSwitchToPatternView].isHidden = false;
+ commands[kcOrderlistSwitchToPatternView].isDummy = false;
+
#ifdef _DEBUG
for (int i=0; i<kcNumCommands; i++) {
if (commands[i].UID != 0) { // ignore unset UIDs
@@ -2508,7 +2568,28 @@
}
}
}
- // When we get a new slection key, we need to make sure that
+ // Same applies for orderlist navigation
+ else if (inCmd>=kcStartOrderlistCommands&& inCmd<=kcEndOrderlistNavigationSelect)
+ {//Check that it is a nav cmd
+ CommandID cmdNavSelection = (CommandID)(kcStartOrderlistNavigationSelect+ (inCmd-kcStartOrderlistNavigation));
+ for (int kSel=0; kSel<commands[kcSelect].kcList.GetSize(); kSel++)
+ {//for all selection modifiers
+ curKc=commands[kcSelect].kcList[kSel];
+ newKc=inKc;
+ newKc.mod|=curKc.mod; //Add selection modifier's modifiers to this command
+ if (adding)
+ {
+ Log("Enforcing rule krAllowNavigationWithSelection - adding key:%d with modifier:%d to command: %d\n", kSel, newKc.mod, cmdNavSelection);
+ Add(newKc, cmdNavSelection, false);
+ }
+ else
+ {
+ Log("Enforcing rule krAllowNavigationWithSelection - removing key:%d with modifier:%d to command: %d\n", kSel, newKc.mod, cmdNavSelection);
+ Remove(newKc, cmdNavSelection);
+ }
+ }
+ }
+ // When we get a new selection key, we need to make sure that
// all navigation commands will work with this selection key pressed
else if (inCmd==kcSelect)
{// check that is is a selection
@@ -2531,6 +2612,25 @@
}
}
} // end all nav commands
+ for (int curCmd=kcStartOrderlistNavigation; curCmd<=kcEndOrderlistNavigation; curCmd++)
+ {// for all nav commands
+ for (int k=0; k<commands[curCmd].kcList.GetSize(); k++)
+ {// for all keys for this command
+ CommandID cmdNavSelection = (CommandID)(kcStartOrderlistNavigationSelect+ (curCmd-kcStartOrderlistNavigation));
+ newKc=commands[curCmd].kcList[k]; // get all properties from the current nav cmd key
+ newKc.mod|=inKc.mod; // and the new selection modifier
+ if (adding)
+ {
+ Log("Enforcing rule krAllowNavigationWithSelection - adding key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, cmdNavSelection);
+ Add(newKc, cmdNavSelection, false);
+ }
+ else
+ {
+ Log("Enforcing rule krAllowNavigationWithSelection - removing key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, cmdNavSelection);
+ Remove(newKc, cmdNavSelection);
+ }
+ }
+ } // end all nav commands
}
} // end krAllowNavigationWithSelection
@@ -2556,6 +2656,23 @@
}
}
}
+ // Same for orderlist navigation
+ if (inCmd>=kcStartOrderlistNavigation&& inCmd<=kcEndOrderlistNavigation)
+ {//if this is a navigation command
+ for (int kSel=0; kSel<commands[kcSelect].kcList.GetSize(); kSel++)
+ {//for all deselection modifiers
+ newKcSel=commands[kcSelect].kcList[kSel]; // get all properties from the selection key
+ newKcSel.mod|=inKc.mod; // add modifiers from the new nav command
+ if (adding) {
+ Log("Enforcing rule krAllowSelectionWithNavigation: adding removing kcSelectWithNav and kcSelectOffWithNav\n");
+ Add(newKcSel, kcSelectWithNav, false);
+ }
+ else {
+ Log("Enforcing rule krAllowSelectionWithNavigation: removing kcSelectWithNav and kcSelectOffWithNav\n");
+ Remove(newKcSel, kcSelectWithNav);
+ }
+ }
+ }
// When we get a new selection key, we need to ensure it will work even when
// any navigation key is pressed
else if (inCmd==kcSelect)
@@ -2576,6 +2693,22 @@
}
}
} // end all nav commands
+ for (int curCmd=kcStartOrderlistNavigation; curCmd<=kcEndOrderlistNavigation; curCmd++)
+ {//for all nav commands
+ for (int k=0; k<commands[curCmd].kcList.GetSize(); k++)
+ {// for all keys for this command
+ newKcSel=inKc; // get all properties from the selection key
+ newKcSel.mod|=commands[curCmd].kcList[k].mod; //add the nav keys' modifiers
+ if (adding) {
+ Log("Enforcing rule krAllowSelectionWithNavigation - adding key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, kcSelectWithNav);
+ Add(newKcSel, kcSelectWithNav, false);
+ }
+ else {
+ Log("Enforcing rule krAllowSelectionWithNavigation - removing key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, kcSelectWithNav);
+ Remove(newKcSel, kcSelectWithNav);
+ }
+ }
+ } // end all nav commands
}
}
@@ -2999,14 +3132,20 @@
//ASSERT(eventTypes.GetSize()>0);
//Handle super-contexts (contexts that represent a set of sub contexts)
- if (curKc.ctx == kCtxViewPatterns) {
+ if (curKc.ctx == kCtxViewPatterns)
+ {
contexts.Add(kCtxViewPatternsNote);
contexts.Add(kCtxViewPatternsIns);
contexts.Add(kCtxViewPatternsVol);
contexts.Add(kCtxViewPatternsFX);
contexts.Add(kCtxViewPatternsFXparam);
}
- else {
+ else if(curKc.ctx == kCtxCtrlPatterns)
+ {
+ contexts.Add(kCtxCtrlOrderlist);
+ }
+ else
+ {
contexts.Add(curKc.ctx);
}
@@ -3259,6 +3398,7 @@
case kCtxCtrlSamples: return "Sample Context [top]";
case kCtxCtrlInstruments: return "Instrument Context [top]";
case kCtxCtrlComments: return "Comments Context [top]";
+ case kCtxCtrlOrderlist: return "Orderlist";
case kCtxVSTGUI: return "Plugin GUI Context";
case kCtxUnknownContext:
default: return "Unknown Context";
@@ -3494,12 +3634,14 @@
m_isParentContext[kCtxCtrlInstruments][kCtxAllContexts] = true;
m_isParentContext[kCtxCtrlComments][kCtxAllContexts] = true;
m_isParentContext[kCtxCtrlSamples][kCtxAllContexts] = true;
+ m_isParentContext[kCtxCtrlOrderlist][kCtxAllContexts] = true;
m_isParentContext[kCtxViewPatternsNote][kCtxViewPatterns] = true;
m_isParentContext[kCtxViewPatternsIns][kCtxViewPatterns] = true;
m_isParentContext[kCtxViewPatternsVol][kCtxViewPatterns] = true;
m_isParentContext[kCtxViewPatternsFX][kCtxViewPatterns] = true;
m_isParentContext[kCtxViewPatternsFXparam][kCtxViewPatterns] = true;
+ m_isParentContext[kCtxCtrlOrderlist][kCtxCtrlPatterns] = true;
}
Modified: trunk/OpenMPT/mptrack/CommandSet.h
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 19:17:19 UTC (rev 424)
@@ -962,6 +962,27 @@
kcVSTGUIRandParams,
kcEndVSTGUICommands=kcVSTGUIRandParams,
+ kcStartOrderlistCommands,
+ kcStartOrderlistNavigation=kcStartOrderlistCommands,
+ kcOrderlistNavigateLeft=kcStartOrderlistNavigation,
+ kcOrderlistNavigateRight,
+ kcOrderlistNavigateFirst,
+ kcOrderlistNavigateLast,
+ kcEndOrderlistNavigation= kcOrderlistNavigateLast,
+ // with selection key(must match order above)
+ kcStartOrderlistNavigationSelect,
+ kcOrderlistNavigateLeftSelect=kcStartOrderlistNavigationSelect,
+ kcOrderlistNavigateRightSelect,
+ kcOrderlistNavigateFirstSelect,
+ kcOrderlistNavigateLastSelect,
+ kcEndOrderlistNavigationSelect = kcOrderlistNavigateLastSelect,
+
+ kcOrderlistEditDelete,
+ kcOrderlistEditInsert,
+ kcOrderlistEditPattern,
+ kcOrderlistSwitchToPatternView,
+ kcEndOrderlistCommands=kcOrderlistSwitchToPatternView,
+
kcNumCommands,
};
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 19:17:19 UTC (rev 424)
@@ -699,10 +699,7 @@
void CCtrlPatterns::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
//------------------------------------------------------------------
{
- if (!m_OrderList.ProcessKeyDown(nChar))
- {
- CModControlDlg::OnKeyDown(nChar, nRepCnt, nFlags);
- }
+ CModControlDlg::OnKeyDown(nChar, nRepCnt, nFlags);
}
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-27 19:17:19 UTC (rev 424)
@@ -26,7 +26,7 @@
//m_nScrollPos2nd: 2nd selection point if multiple orders are selected
// (not neccessarily the higher order - GetCurSel() is taking care of that.)
ORDERINDEX m_nXScroll, m_nScrollPos, m_nScrollPos2nd, m_nDropPos;
- bool m_bScrolling, m_bDragging, m_bShift;
+ bool m_bScrolling, m_bDragging;
ORDERINDEX m_nDragOrder;
//To tell how many orders('orderboxes') to show at least
//on both sides of current order(when updating orderslist position).
@@ -46,10 +46,11 @@
UINT GetCurrentPattern() const;
ORD_SELECTION GetCurSel(bool bIgnoreSelection) const;
// make the current selection the secondary selection (used for keyboard orderlist navigation)
- inline void SetCurSelTo2ndSel()
- {if(m_bShift && m_nScrollPos2nd == ORDERINDEX_INVALID) m_nScrollPos2nd = m_nScrollPos; else if(!m_bShift && m_nScrollPos2nd != ORDERINDEX_INVALID) m_nScrollPos2nd = ORDERINDEX_INVALID;};
+ inline void SetCurSelTo2ndSel(bool isSelectionKeyPressed)
+ { if(isSelectionKeyPressed && m_nScrollPos2nd == ORDERINDEX_INVALID) m_nScrollPos2nd = m_nScrollPos;
+ else if(!isSelectionKeyPressed && m_nScrollPos2nd != ORDERINDEX_INVALID) m_nScrollPos2nd = ORDERINDEX_INVALID;
+ };
bool SetCurSel(ORDERINDEX sel, bool bEdit = true, bool bShiftClick = false, bool bIgnoreCurSel = false);
- BOOL ProcessKeyDown(UINT nChar);
BOOL ProcessChar(UINT nChar);
BOOL UpdateScrollInfo();
void UpdateInfoText();
@@ -86,6 +87,9 @@
// Set given sqeuence and update orderlist display.
void SelectSequence(const SEQUENCEINDEX nSeq);
+ // Little helper function to avoid copypasta
+ bool IsSelectionKeyPressed() {return CMainFrame::GetInputHandler()->SelectionPressed();}
+
// Clipboard.
void OnEditCopy();
void OnEditCut();
@@ -245,6 +249,7 @@
afx_msg void TogglePluginEditor(); //rewbs.instroVST
afx_msg void ToggleSplitPluginEditor(); //rewbs.instroVST
afx_msg void OnToggleOverflowPaste();
+ afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-27 19:17:19 UTC (rev 424)
@@ -91,7 +91,6 @@
m_nOrderlistMargins = s_nDefaultMargins;
m_bScrolling = false;
m_bDragging = false;
- m_bShift = false;
}
@@ -319,48 +318,6 @@
}
-BOOL COrderList::ProcessKeyDown(UINT nChar)
-//-----------------------------------------
-{
- switch(nChar)
- {
- case VK_UP:
- case VK_LEFT: SetCurSelTo2ndSel(); SetCurSel(m_nScrollPos - 1); break;
- case VK_DOWN:
- case VK_RIGHT: SetCurSelTo2ndSel(); SetCurSel(m_nScrollPos + 1); break;
- case VK_HOME: SetCurSelTo2ndSel(); SetCurSel(0); break;
- case VK_END:
- if (m_pModDoc)
- {
- CSoundFile *pSndFile = m_pModDoc->GetSoundFile();
- ORDERINDEX nLast = pSndFile->Order.GetLengthFirstEmpty();
- if (nLast)
- nLast--;
- SetCurSelTo2ndSel();
- SetCurSel(nLast);
- }
- break;
- case VK_DELETE: OnDeleteOrder(); break;
- case VK_INSERT: OnInsertOrder(); break;
- case VK_TAB: OnSwitchToView(); break;
- case VK_RETURN: OnLButtonDblClk(0, CPoint(0,0)); OnSwitchToView(); break;
-
- //rewbs.customKeys: these are now global commands handled via the inputInhandler
-/* case VK_F5: OnPlayerPlay(); break;
- case VK_F6: OnPlayerPlayFromStart(); break;
- case VK_F7: OnPatternPlayFromStart(); break;
- case VK_ESCAPE:
- case VK_F8: OnPlayerPause(); break;
-*/
- default:
- return FALSE;
- }
-
- return TRUE;
-
-}
-
-
BOOL COrderList::ProcessChar(UINT nChar)
//--------------------------------------
{
@@ -425,45 +382,92 @@
UINT nRepCnt = LOWORD(pMsg->lParam);
UINT nFlags = HIWORD(pMsg->lParam);
KeyEventType kT = ih->GetKeyEventType(nFlags);
+
+ InputTargetContext ctx = (InputTargetContext)(kCtxCtrlOrderlist);
+ if (ih->KeyEvent(ctx, nChar, nRepCnt, nFlags, kT) != kcNull)
+ return true; // Mapped to a command, no need to pass message on.
+
//HACK: masquerade as kCtxViewPatternsNote context until we implement appropriate
// command propagation to kCtxCtrlOrderlist context.
- //InputTargetContext ctx = (InputTargetContext)(kCtxCtrlOrderlist);
- InputTargetContext ctx = (InputTargetContext)(kCtxViewPatternsNote);
-
- CommandID kc = ih->KeyEvent(ctx, nChar, nRepCnt, nFlags, kT);
- switch (kc)
- {
- case kcSwitchToOrderList: OnSwitchToView(); return true;
- case kcChangeLoopStatus: m_pParent->OnModCtrlMsg(CTRLMSG_PAT_LOOP, -1); return true;
- case kcToggleFollowSong: m_pParent->OnFollowSong(); return true;
+ ctx = (InputTargetContext)(kCtxViewPatternsNote);
+ if (ih->KeyEvent(ctx, nChar, nRepCnt, nFlags, kT) != kcNull)
+ return true; // Mapped to a command, no need to pass message on.
- case kcChannelUnmuteAll:
- case kcUnmuteAllChnOnPatTransition:
- ::PostMessage(m_pParent->GetViewWnd(), WM_MOD_KEYCOMMAND, kc, 0);
- return true;
- }
}
//end rewbs.customKeys
switch(pMsg->message)
{
- case WM_KEYUP:
- if ((pMsg->wParam == VK_SHIFT) || (pMsg->wParam == VK_LSHIFT) || (pMsg->wParam == VK_RSHIFT)) m_bShift = FALSE;
- break;
- case WM_KEYDOWN:
- if ((pMsg->wParam == VK_SHIFT) || (pMsg->wParam == VK_LSHIFT) || (pMsg->wParam == VK_RSHIFT)) m_bShift = TRUE;
- if (ProcessKeyDown(pMsg->wParam)) return TRUE;
- break;
case WM_CHAR:
- if (ProcessChar(pMsg->wParam)) return TRUE;
+ if (ProcessChar(pMsg->wParam)) return true;
break;
}
return CWnd::PreTranslateMessage(pMsg);
}
+LRESULT COrderList::OnCustomKeyMsg(WPARAM wParam, LPARAM)
+//-------------------------------------------------------
+{
+ if (wParam == kcNull)
+ return 0;
+
+ switch(wParam)
+ {
+ case kcEditCopy:
+ OnEditCopy(); return wParam;
+ case kcEditCut:
+ OnEditCut(); return wParam;
+ case kcEditPaste:
+ OnEditPaste(); return wParam;
+
+ case kcOrderlistNavigateLeftSelect:
+ case kcOrderlistNavigateLeft:
+ SetCurSelTo2ndSel(wParam == kcOrderlistNavigateLeftSelect); SetCurSel(m_nScrollPos - 1); return wParam;
+ case kcOrderlistNavigateRightSelect:
+ case kcOrderlistNavigateRight:
+ SetCurSelTo2ndSel(wParam == kcOrderlistNavigateRightSelect); SetCurSel(m_nScrollPos + 1); return wParam;
+ case kcOrderlistNavigateFirstSelect:
+ case kcOrderlistNavigateFirst:
+ SetCurSelTo2ndSel(wParam == kcOrderlistNavigateFirstSelect); SetCurSel(0); return wParam;
+ case kcOrderlistNavigateLastSelect:
+ case kcOrderlistNavigateLast:
+ if((m_pModDoc != nullptr) && (m_pModDoc->GetSoundFile() != nullptr))
+ {
+ SetCurSelTo2ndSel(wParam == kcOrderlistNavigateLast);
+ ORDERINDEX nLast = m_pModDoc->GetSoundFile()->Order.GetLengthTailTrimmed();
+ if(nLast > 0) nLast--;
+ SetCurSel(nLast);
+ }
+ return wParam;
+ case kcOrderlistEditDelete:
+ OnDeleteOrder(); return wParam;
+ case kcOrderlistEditInsert:
+ OnInsertOrder(); return wParam;
+ case kcOrderlistSwitchToPatternView:
+ OnSwitchToView(); return wParam;
+ case kcOrderlistEditPattern:
+ OnLButtonDblClk(0, CPoint(0,0)); OnSwitchToView(); return wParam;
+
+ // kCtxViewPatternsNote messages
+ case kcSwitchToOrderList:
+ OnSwitchToView();
+ return wParam;
+ case kcChangeLoopStatus:
+ m_pParent->OnModCtrlMsg(CTRLMSG_PAT_LOOP, -1); return wParam;
+ case kcToggleFollowSong: m_pParent->OnFollowSong(); return wParam;
+
+ case kcChannelUnmuteAll:
+ case kcUnmuteAllChnOnPatTransition:
+ ::PostMessage(m_pParent->GetViewWnd(), WM_MOD_KEYCOMMAND, wParam, 0); return wParam;
+ }
+
+ return 0;
+}
+
+
static const char szClipboardOrdersHdr[] = "OpenMPT %3s\x0D\x0A";
static const char szClipboardOrdCountFieldHdr[] = "OrdNum: %u\x0D\x0A";
static const char szClipboardOrdersFieldHdr[] = "OrdLst: ";
@@ -613,23 +617,6 @@
}
-LRESULT COrderList::OnCustomKeyMsg(WPARAM wParam, LPARAM)
-//-------------------------------------------------------
-{
- if (wParam == kcNull)
- return 0;
-
- switch(wParam)
- {
- case kcEditCopy: OnEditCopy(); return wParam;
- case kcEditCut: OnEditCut(); return wParam;
- case kcEditPaste: OnEditPaste(); return wParam;
- }
-
- return 0;
-}
-
-
void COrderList::UpdateView(DWORD dwHintMask, CObject *pObj)
//----------------------------------------------------------
{
@@ -645,7 +632,6 @@
//-------------------------------
{
if (m_pParent) m_pParent->PostViewMessage(VIEWMSG_SETFOCUS);
- m_bShift = FALSE;
}
@@ -788,7 +774,6 @@
{
CWnd::OnKillFocus(pWnd);
InvalidateSelection();
- m_bShift = FALSE;
CMainFrame::GetMainFrame()->m_pOrderlistHasFocus = nullptr;
}
@@ -842,6 +827,7 @@
{
CRect rect;
GetClientRect(&rect);
+ bool bSelection = IsSelectionKeyPressed();
if (m_bDragging)
{
@@ -865,13 +851,13 @@
for(int i = 0; i <= nMoveCount; i++)
{
- if(!m_pModDoc->MoveOrder(nMovePos, m_nDropPos, true, m_bShift)) return;
- if((bMoveBack ^ m_bShift) == true && bMultiSelection)
+ if(!m_pModDoc->MoveOrder(nMovePos, m_nDropPos, true, bSelection)) return;
+ if((bMoveBack ^ bSelection) == true && bMultiSelection)
{
nMovePos++;
m_nDropPos++;
}
- if(bMoveBack && m_bShift && bMultiSelection) {
+ if(bMoveBack && bSelection && bMultiSelection) {
nMovePos += 2;
m_nDropPos++;
}
@@ -881,10 +867,10 @@
// adjust selection
m_nScrollPos2nd = m_nDropPos - 1;
m_nDropPos -= nMoveCount + (bMoveBack ? 0 : 1);
- SetCurSel((bMoveBack && (!m_bShift)) ? m_nDropPos - 1 : m_nDropPos);
+ SetCurSel((bMoveBack && (!bSelection)) ? m_nDropPos - 1 : m_nDropPos);
} else
{
- SetCurSel(((m_nDragOrder < (UINT)m_nDropPos) && (!m_bShift)) ? m_nDropPos - 1 : m_nDropPos);
+ SetCurSel(((m_nDragOrder < (UINT)m_nDropPos) && (!bSelection)) ? m_nDropPos - 1 : m_nDropPos);
}
m_pModDoc->SetModified();
}
Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp
===================================================================
--- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-11-27 19:17:19 UTC (rev 424)
@@ -204,10 +204,18 @@
commandCategories.Add(*newCat);
delete newCat;
- newCat = new CommandCategory(" Pattern [Top]", kCtxCtrlPatterns);
+ newCat = new CommandCategory(" Pattern Editor [Top]", kCtxCtrlPatterns);
commandCategories.Add(*newCat);
delete newCat;
+ newCat = new CommandCategory(" Pattern Editor - Orderlist", kCtxCtrlOrderlist);
+
+ for (int c=kcStartOrderlistCommands; c<=kcEndOrderlistCommands; c++)
+ newCat->commands.Add(c);
+
+ commandCategories.Add(*newCat);
+ delete newCat;
+
newCat = new CommandCategory(" Pattern Editor - General", kCtxViewPatterns);
for (int c=kcStartPlainNavigate; c<=kcEndPlainNavigate; c++)
Modified: trunk/OpenMPT/mptrack/View_tre.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-27 19:17:19 UTC (rev 424)
@@ -1081,15 +1081,10 @@
// find sequence this item belongs to
for(SEQUENCEINDEX nSeq = 0; nSeq < pSong->tiOrders.size(); nSeq++)
{
+ if(hItem == pSong->tiSequences[nSeq]) return (MODITEM_SEQUENCE | (nSeq << 16));
for(ORDERINDEX nOrd = 0; nOrd < pSong->tiOrders[nSeq].size(); nOrd++)
{
- if (hItem == pSong->tiOrders[nSeq][nOrd])
- {
- return (MODITEM_ORDER | (nOrd << 16) | (((uint64)nSeq) << 32));
- } else if(hItem == pSong->tiSequences[nSeq])
- {
- return (MODITEM_SEQUENCE | (nSeq << 16));
- }
+ if (hItem == pSong->tiOrders[nSeq][nOrd]) return (MODITEM_ORDER | (nOrd << 16) | (((uint64)nSeq) << 32));
}
}
}
@@ -2319,9 +2314,12 @@
case MODITEM_HDR_ORDERS:
{
CModDoc *pModDoc = GetDocumentFromItem(hItem);
- if(pModDoc && (pModDoc->GetModType() == MOD_TYPE_MPT))
+ CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr;
+ if(pModDoc && pSndFile && (pModDoc->GetModType() == MOD_TYPE_MPT))
{
AppendMenu(hMenu, MF_STRING, ID_MODTREE_INSERT, "&Insert Sequence");
+ if(pSndFile->Order.GetNumSequences() == 1) // this is a sequence
+ AppendMenu(hMenu, MF_STRING, ID_MODTREE_DUPLICATE, "D&uplicate Sequence");
}
}
break;
@@ -2832,7 +2830,7 @@
pModDoc = GetDocumentFromItem(hItem);
CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr;
- if (pModDoc && pSndFile && (qwItemType == MODITEM_SEQUENCE))
+ if (pModDoc && pSndFile && ((qwItemType == MODITEM_SEQUENCE) || (qwItemType == MODITEM_HDR_ORDERS)))
{
pSndFile->Order.SetSequence((SEQUENCEINDEX)dwItemNo);
pSndFile->Order.AddSequence(true);
Modified: trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb
===================================================================
--- trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -277,4 +277,14 @@
//----( Comments Context [top] (18) )------------
-//----( Unknown Context (19) )------------
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -24,7 +24,7 @@
0:1361:2:45:1 //Copy: Ctrl+EINFG (KeyDown)
0:1362:2:86:1 //Paste: Ctrl+V (KeyDown)
0:1363:3:86:1 //Mix Paste: Shift+Ctrl+V (KeyDown)
-0:1686:1:86:1 //Mix Paste (old IT Style): Shift+V (KeyDown)
+0:1793:1:86:1 //Paste Flood: Shift+V (KeyDown)
0:1364:2:53:1 //SelectAll: Ctrl+5 (KeyDown)
0:1365:2:70:1 //Find: Ctrl+F (KeyDown)
0:1366:0:114:1 //Find Next: F3 (KeyDown)
@@ -292,4 +292,14 @@
//----( Comments Context [top] (18) )------------
-//----( Unknown Context (19) )------------
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: NACH-LINKS (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: NACH-OBEN (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: NACH-RECHTS (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: NACH-UNTEN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: POS1 (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: ENDE (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: ENTF (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: EINFG (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: EINGABE (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TABULATOR (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -264,12 +264,26 @@
//----( Unknown Context (12) )------------
-//----( General Context [top] (13) )------------
+//----( Plugin GUI Context (13) )------------
-//----( Pattern Context [top] (14) )------------
+//----( General Context [top] (14) )------------
-//----( Sample Context [top] (15) )------------
+//----( Pattern Context [top] (15) )------------
-//----( Instrument Context [top] (16) )------------
+//----( Sample Context [top] (16) )------------
-//----( Comments Context [top] (17) )------------
+//----( Instrument Context [top] (17) )------------
+
+//----( Comments Context [top] (18) )------------
+
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -250,12 +250,26 @@
//----( Unknown Context (12) )------------
-//----( General Context [top] (13) )------------
+//----( Plugin GUI Context (13) )------------
-//----( Pattern Context [top] (14) )------------
+//----( General Context [top] (14) )------------
-//----( Sample Context [top] (15) )------------
+//----( Pattern Context [top] (15) )------------
-//----( Instrument Context [top] (16) )------------
+//----( Sample Context [top] (16) )------------
-//----( Comments Context [top] (17) )------------
+//----( Instrument Context [top] (17) )------------
+
+//----( Comments Context [top] (18) )------------
+
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -174,12 +174,26 @@
//----( Unknown Context (12) )------------
-//----( General Context [top] (13) )------------
+//----( Plugin GUI Context (13) )------------
-//----( Pattern Context [top] (14) )------------
+//----( General Context [top] (14) )------------
-//----( Sample Context [top] (15) )------------
+//----( Pattern Context [top] (15) )------------
-//----( Instrument Context [top] (16) )------------
+//----( Sample Context [top] (16) )------------
-//----( Comments Context [top] (17) )------------
+//----( Instrument Context [top] (17) )------------
+
+//----( Comments Context [top] (18) )------------
+
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -281,4 +281,14 @@
//----( Comments Context [top] (18) )------------
-//----( Unknown Context (19) )------------
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -242,12 +242,26 @@
//----( Unknown Context (12) )------------
-//----( General Context [top] (13) )------------
+//----( Plugin GUI Context (13) )------------
-//----( Pattern Context [top] (14) )------------
+//----( General Context [top] (14) )------------
-//----( Sample Context [top] (15) )------------
+//----( Pattern Context [top] (15) )------------
-//----( Instrument Context [top] (16) )------------
+//----( Sample Context [top] (16) )------------
-//----( Comments Context [top] (17) )------------
+//----( Instrument Context [top] (17) )------------
+
+//----( Comments Context [top] (18) )------------
+
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -257,13 +257,26 @@
//----( Unknown Context (12) )------------
-//----( General Context [top] (13) )------------
+//----( Plugin GUI Context (13) )------------
-//----( Pattern Context [top] (14) )------------
+//----( General Context [top] (14) )------------
-//----( Sample Context [top] (15) )------------
+//----( Pattern Context [top] (15) )------------
-//----( Instrument Context [top] (16) )------------
+//----( Sample Context [top] (16) )------------
-//----( Comments Context [top] (17) )------------
+//----( Instrument Context [top] (17) )------------
+//----( Comments Context [top] (18) )------------
+
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb
===================================================================
--- trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb 2009-11-27 18:52:15 UTC (rev 423)
+++ trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb 2009-11-27 19:17:19 UTC (rev 424)
@@ -256,3 +256,15 @@
//----( Instrument Context [top] (17) )------------
//----( Comments Context [top] (18) )------------
+
+//----( Orderlist (19) )------------
+19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold)
+19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold)
+19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold)
+19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold)
+19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold)
+19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold)
+19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold)
+19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold)
+19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold)
+19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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.
|
|
From: <sag...@us...> - 2009-11-23 22:00:41
|
Revision: 422
http://modplug.svn.sourceforge.net/modplug/?rev=422&view=rev
Author: saga-games
Date: 2009-11-23 22:00:32 +0000 (Mon, 23 Nov 2009)
Log Message:
-----------
[Fix] FX Editing: Min value for XM arpeggio is now 001, max value for channel volume is M40
[Imp] Mod Conversion: Removing channel features (pan/vol) in formats where they're not supported
[Imp] MPTM: Only write full envelope info if at least one envelope has more than 25 envelope points.
[Ref] Switched to British English in setup dialog ("Colour" instead of "Color")
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Moddoc.cpp
trunk/OpenMPT/mptrack/Modedit.cpp
trunk/OpenMPT/mptrack/Moptions.cpp
trunk/OpenMPT/mptrack/mptrack.rc
trunk/OpenMPT/soundlib/Load_it.cpp
Modified: trunk/OpenMPT/mptrack/Moddoc.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-21 18:24:39 UTC (rev 421)
+++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-23 22:00:32 UTC (rev 422)
@@ -2268,9 +2268,10 @@
switch(gFXInfo[ndx].dwEffect)
{
case CMD_ARPEGGIO:
- if (nType & MOD_TYPE_MOD) nmin = 1;
+ if (nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) nmin = 1;
break;
case CMD_VOLUME:
+ case CMD_CHANNELVOLUME:
nmax = 0x40;
break;
case CMD_SPEED:
Modified: trunk/OpenMPT/mptrack/Modedit.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-21 18:24:39 UTC (rev 421)
+++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-23 22:00:32 UTC (rev 422)
@@ -344,6 +344,20 @@
}
}
+ // Fix channel settings (pan/vol)
+ for(CHANNELINDEX nChn = 0; nChn < m_SndFile.m_nChannels; nChn++)
+ {
+ if(newTypeIsMOD_XM || newTypeIsS3M)
+ {
+ m_SndFile.ChnSettings->nVolume = 64;
+ m_SndFile.ChnSettings->dwFlags &= ~CHN_SURROUND;
+ }
+ if(newTypeIsXM)
+ {
+ m_SndFile.ChnSettings->nPan = 128;
+ }
+ }
+
BEGIN_CRITICAL();
m_SndFile.ChangeModTypeTo(nNewType);
if (!newTypeIsXM_IT_MPT && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES))
Modified: trunk/OpenMPT/mptrack/Moptions.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moptions.cpp 2009-11-21 18:24:39 UTC (rev 421)
+++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-11-23 22:00:32 UTC (rev 422)
@@ -701,7 +701,7 @@
{PATTERN_OVERFLOWPASTE, "Overflow paste mode", "Wrap pasted pattern data into next pattern. This is useful for creating echo channels."},
{PATTERN_POSITIONAWARETIMER, "Position aware timer", "If enabled, timer will show the playback position time if possible instead of running timer."},
{PATTERN_RESETCHANNELS, "Reset channels on loop", "If enabled, channels will be reset to their initial state when song looping is enabled.\nNote: This does not affect manual song loops (i.e. triggered by pattern commands)"},
- {PATTERN_LIVEUPDATETREE,"Update sample status in tree", "If enabled, active samples and instruments will be indicated by a differnt icon in the treeview."}
+ {PATTERN_LIVEUPDATETREE,"Update sample status in tree", "If enabled, active samples and instruments will be indicated by a different icon in the treeview."}
};
void COptionsGeneral::DoDataExchange(CDataExchange* pDX)
Modified: trunk/OpenMPT/mptrack/mptrack.rc
===================================================================
--- trunk/OpenMPT/mptrack/mptrack.rc 2009-11-21 18:24:39 UTC (rev 421)
+++ trunk/OpenMPT/mptrack/mptrack.rc 2009-11-23 22:00:32 UTC (rev 422)
@@ -273,7 +273,7 @@
IDD_OPTIONS_COLORS DIALOGEX 0, 0, 272, 281
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Colors"
+CAPTION "Colours"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
COMBOBOX IDC_COMBO1,15,25,134,109,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
@@ -287,14 +287,14 @@
PUSHBUTTON "FT2",IDC_BUTTON6,204,246,24,15
PUSHBUTTON "IT",IDC_BUTTON7,174,246,24,15
PUSHBUTTON "Buzz",IDC_BUTTON8,234,246,24,15
- CONTROL "Color",IDC_BUTTON1,"Button",BS_OWNERDRAW,25,194,51,15
- CONTROL "Color",IDC_BUTTON2,"Button",BS_OWNERDRAW,98,194,51,15
- CONTROL "Color",IDC_BUTTON3,"Button",BS_OWNERDRAW,168,194,51,15
+ CONTROL "Colour",IDC_BUTTON1,"Button",BS_OWNERDRAW,25,194,51,15
+ CONTROL "Colour",IDC_BUTTON2,"Button",BS_OWNERDRAW,98,194,51,15
+ CONTROL "Colour",IDC_BUTTON3,"Button",BS_OWNERDRAW,168,194,51,15
LTEXT "Background:",IDC_TEXT1,25,183,60,8
LTEXT "Foreground:",IDC_TEXT2,98,183,62,8
LTEXT "Highlight:",IDC_TEXT3,169,185,61,8
GROUPBOX "",IDC_STATIC,5,5,260,211
- LTEXT "Select color for:",IDC_STATIC,15,15,63,8
+ LTEXT "Select colour for:",IDC_STATIC,15,15,63,8
LTEXT "rows",IDC_STATIC,138,92,16,8
LTEXT "rows",IDC_STATIC,138,110,16,8
CONTROL "",IDC_BUTTON4,"Button",BS_OWNERDRAW | BS_FLAT,65,130,114,43
@@ -302,7 +302,7 @@
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,75,136,10
PUSHBUTTON "Load...",IDC_LOAD_COLORSCHEME,18,246,48,15
PUSHBUTTON "Save...",IDC_SAVE_COLORSCHEME,72,246,48,15
- GROUPBOX "Color Presets",IDC_STATIC,6,228,264,42
+ GROUPBOX "Colour Presets",IDC_STATIC,6,228,264,42
END
IDD_OPTIONS_MIDI DIALOGEX 0, 0, 272, 281
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-21 18:24:39 UTC (rev 421)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-23 22:00:32 UTC (rev 422)
@@ -3413,15 +3413,25 @@
if(m_nType & MOD_TYPE_MPT)
{
+ UINT maxNodes = 0;
+ for(INSTRUMENTINDEX nIns = 1; nIns <= m_nInstruments; nIns++) if(Instruments[nIns] != nullptr)
+ {
+ maxNodes = max(maxNodes, Instruments[nIns]->VolEnv.nNodes);
+ maxNodes = max(maxNodes, Instruments[nIns]->PanEnv.nNodes);
+ maxNodes = max(maxNodes, Instruments[nIns]->PitchEnv.nNodes);
+ }
// write full envelope information for MPTM files (more env points)
- WriteInstrumentPropertyForAllInstruments('VP[.', sizeof(m_defaultInstrument.VolEnv.Ticks ), f, instruments, nInstruments);
- WriteInstrumentPropertyForAllInstruments('VE[.', sizeof(m_defaultInstrument.VolEnv.Values), f, instruments, nInstruments);
+ if(maxNodes > 25)
+ {
+ WriteInstrumentPropertyForAllInstruments('VP[.', sizeof(m_defaultInstrument.VolEnv.Ticks ), f, instruments, nInstruments);
+ WriteInstrumentPropertyForAllInstruments('VE[.', sizeof(m_defaultInstrument.VolEnv.Values), f, instruments, nInstruments);
- WriteInstrumentPropertyForAllInstruments('PP[.', sizeof(m_defaultInstrument.PanEnv.Ticks), f, instruments, nInstruments);
- WriteInstrumentPropertyForAllInstruments('PE[.', sizeof(m_defaultInstrument.PanEnv.Values), f, instruments, nInstruments);
+ WriteInstrumentPropertyForAllInstruments('PP[.', sizeof(m_defaultInstrument.PanEnv.Ticks), f, instruments, nInstruments);
+ WriteInstrumentPropertyForAllInstruments('PE[.', sizeof(m_defaultInstrument.PanEnv.Values), f, instruments, nInstruments);
- WriteInstrumentPropertyForAllInstruments('PiP[', sizeof(m_defaultInstrument.PitchEnv.Ticks), f, instruments, nInstruments);
- WriteInstrumentPropertyForAllInstruments('PiE[', sizeof(m_defaultInstrument.PitchEnv.Values), f, instruments, nInstruments);
+ WriteInstrumentPropertyForAllInstruments('PiP[', sizeof(m_defaultInstrument.PitchEnv.Ticks), f, instruments, nInstruments);
+ WriteInstrumentPropertyForAllInstruments('PiE[', sizeof(m_defaultInstrument.PitchEnv.Values), f, instruments, nInstruments);
+ }
}
return;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-21 18:25:18
|
Revision: 421
http://modplug.svn.sourceforge.net/modplug/?rev=421&view=rev
Author: saga-games
Date: 2009-11-21 18:24:39 +0000 (Sat, 21 Nov 2009)
Log Message:
-----------
[Fix] When jumping around in a module, high offest value is also memorized in XM files now.
[Fix] XM Compatibility: Command X modplug extensions are now ignored in FT2 compat mode.
[Fix] IT Compatibility: IT files with empty sample slots will now FINALLY save correctly in Impulse Tracker.
[Fix] IT Compatibility: IT files with global volume 0 are now loaded correctly
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Snd_fx.cpp
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-21 15:40:57 UTC (rev 420)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-21 18:24:39 UTC (rev 421)
@@ -965,18 +965,11 @@
SpaceToNullStringFixed(m_szNames[0], 26);
// Global Volume
- if (pifh->globalvol)
- {
- m_nDefaultGlobalVolume = pifh->globalvol << 1;
- if (!m_nDefaultGlobalVolume) m_nDefaultGlobalVolume = 256;
- if (m_nDefaultGlobalVolume > 256) m_nDefaultGlobalVolume = 256;
- }
+ m_nDefaultGlobalVolume = pifh->globalvol << 1;
+ if (m_nDefaultGlobalVolume > 256) m_nDefaultGlobalVolume = 256;
if (pifh->speed) m_nDefaultSpeed = pifh->speed;
m_nDefaultTempo = max(32, pifh->tempo); // tempo 31 is possible. due to conflicts with the rest of the engine, let's just clamp it to 32.
m_nSamplePreAmp = min(pifh->mv, 128);
- /*if (m_nSamplePreAmp<0x20) {
- m_nSamplePreAmp=100;
- }*/
// Reading Channels Pan Positions
for (int ipan=0; ipan</*MAX_BASECHANNELS*/64; ipan++) if (pifh->chnpan[ipan] != 0xFF) //Header only has room for settings for 64 chans...
@@ -1474,8 +1467,10 @@
static char autodetectITplaymode = -1;
if(GetType() == MOD_TYPE_IT)
{
+#ifdef MODPLUG_TRACKER
if(autodetectITplaymode == -1)
autodetectITplaymode = CMainFrame::GetPrivateProfileLong("Misc", "AutodetectITplaystyle", 1, theApp.GetConfigFileName());
+#endif
if(autodetectITplaymode)
{
@@ -2344,7 +2339,10 @@
flags = (psmp->uFlags & CHN_STEREO) ? RS_STPCM16S : RS_PCM16S;
}
}
- itss.samplepointer = dwPos;
+ if ((psmp->pSample) && (psmp->nLength))
+ itss.samplepointer = dwPos;
+ else
+ itss.samplepointer = itss.flags = 0;
fseek(f, smppos[nsmp-1], SEEK_SET);
fwrite(&itss, 1, sizeof(ITSAMPLESTRUCT), f);
fseek(f, dwPos, SEEK_SET);
@@ -2920,7 +2918,10 @@
itss.flags |= 0x02;
flags = RS_PCM16S;
}
- itss.samplepointer = dwPos;
+ if ((psmp->pSample) && (psmp->nLength))
+ itss.samplepointer = dwPos;
+ else
+ itss.samplepointer = itss.flags = 0;
fseek(f, smppos[nsmp-1], SEEK_SET);
fwrite(&itss, 1, sizeof(ITSAMPLESTRUCT), f);
fseek(f, dwPos, SEEK_SET);
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-21 15:40:57 UTC (rev 420)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-21 18:24:39 UTC (rev 421)
@@ -271,6 +271,9 @@
else patloop[nChn] = dwElapsedTime;
}
break;
+ case CMD_XFINEPORTAUPDOWN:
+ if (((param & 0xF0) == 0xA0) && !IsCompatibleMode(TRK_FASTTRACKER2)) pChn->nOldHiOffset = param & 0x0F;
+ break;
}
if (!bAdjust) continue;
switch(command)
@@ -1761,7 +1764,8 @@
case 0x60:
case 0x70:
case 0x90:
- case 0xA0: ExtendedS3MCommands(nChn, param); break;
+ case 0xA0: if(!IsCompatibleMode(TRK_FASTTRACKER2)) ExtendedS3MCommands(nChn, param);
+ break;
}
break;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-21 15:41:10
|
Revision: 420
http://modplug.svn.sourceforge.net/modplug/?rev=420&view=rev
Author: saga-games
Date: 2009-11-21 15:40:57 +0000 (Sat, 21 Nov 2009)
Log Message:
-----------
[Fix] When jumping around in a module, high offest value is also memorized
[Fix] XM Saver: +++ and --- orders are preserved when not using compatibility mode for now.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_xm.cpp
trunk/OpenMPT/soundlib/Snd_fx.cpp
Modified: trunk/OpenMPT/soundlib/Load_xm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_xm.cpp 2009-11-20 13:04:34 UTC (rev 419)
+++ trunk/OpenMPT/soundlib/Load_xm.cpp 2009-11-21 15:40:57 UTC (rev 420)
@@ -770,6 +770,8 @@
if(Order[nOrd] >= nPatterns) nPatterns = Order[nOrd] + 1;
}
}
+ if(!bCompatibilityExport) nMaxOrds = Order.GetLengthTailTrimmed(); // should really be removed at some point
+
xmheader.orders = LittleEndianW((WORD)nMaxOrds);
xmheader.patterns = LittleEndianW((WORD)nPatterns);
xmheader.size = LittleEndian((DWORD)(xmheader.size + nMaxOrds));
@@ -793,7 +795,7 @@
// write order list (wihout +++ and ---, explained above)
for(ORDERINDEX nOrd = 0; nOrd < Order.GetLengthTailTrimmed(); nOrd++)
{
- if(Patterns.IsValidIndex(Order[nOrd]))
+ if(Patterns.IsValidIndex(Order[nOrd]) || !bCompatibilityExport)
{
BYTE nOrdval = static_cast<BYTE>(Order[nOrd]);
fwrite(&nOrdval, 1, sizeof(BYTE), f);
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-20 13:04:34 UTC (rev 419)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-21 15:40:57 UTC (rev 420)
@@ -261,6 +261,7 @@
// Pattern Delay
case CMD_S3MCMDEX:
if ((param & 0xF0) == 0x60) { nSpeedCount = param & 0x0F; break; } else
+ if ((param & 0xF0) == 0xA0) { pChn->nOldHiOffset = param & 0x0F; break; } else
if ((param & 0xF0) == 0xB0) { param &= 0x0F; param |= 0x60; }
case CMD_MODCMDEX:
if ((param & 0xF0) == 0xE0) nSpeedCount = (param & 0x0F) * nMusicSpeed; else
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-20 13:04:44
|
Revision: 419
http://modplug.svn.sourceforge.net/modplug/?rev=419&view=rev
Author: saga-games
Date: 2009-11-20 13:04:34 +0000 (Fri, 20 Nov 2009)
Log Message:
-----------
[Fix] Instrument Editor: When pasting envelopes, the enabled and filter flags were lost.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Moddoc.h
trunk/OpenMPT/mptrack/Modedit.cpp
Modified: trunk/OpenMPT/mptrack/Moddoc.h
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.h 2009-11-19 21:34:59 UTC (rev 418)
+++ trunk/OpenMPT/mptrack/Moddoc.h 2009-11-20 13:04:34 UTC (rev 419)
@@ -243,8 +243,8 @@
bool CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel);
bool PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix = false, bool PasteFlood = false);
- BOOL CopyEnvelope(UINT nIns, UINT nEnv);
- BOOL PasteEnvelope(UINT nIns, UINT nEnv);
+ bool CopyEnvelope(UINT nIns, enmEnvelopeTypes nEnv);
+ bool PasteEnvelope(UINT nIns, enmEnvelopeTypes nEnv);
LRESULT ActivateView(UINT nIdView, DWORD dwParam);
void UpdateAllViews(CView *pSender, LPARAM lHint=0L, CObject *pHint=NULL);
Modified: trunk/OpenMPT/mptrack/Modedit.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-19 21:34:59 UTC (rev 418)
+++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-20 13:04:34 UTC (rev 419)
@@ -1403,8 +1403,8 @@
static LPCSTR pszEnvHdr = "Modplug Tracker Envelope\x0D\x0A";
static LPCSTR pszEnvFmt = "%d,%d,%d,%d,%d,%d,%d,%d\x0D\x0A";
-BOOL CModDoc::CopyEnvelope(UINT nIns, UINT nEnv)
-//----------------------------------------------
+bool CModDoc::CopyEnvelope(UINT nIns, enmEnvelopeTypes nEnv)
+//----------------------------------------------------------
{
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
HANDLE hCpy;
@@ -1412,7 +1412,7 @@
MODINSTRUMENT *pIns;
DWORD dwMemSize;
- if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return FALSE;
+ if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return false;
BeginWaitCursor();
pIns = m_SndFile.Instruments[nIns];
@@ -1454,21 +1454,21 @@
CloseClipboard();
}
EndWaitCursor();
- return TRUE;
+ return true;
}
-BOOL CModDoc::PasteEnvelope(UINT nIns, UINT nEnv)
-//-----------------------------------------------
+bool CModDoc::PasteEnvelope(UINT nIns, enmEnvelopeTypes nEnv)
+//-----------------------------------------------------------
{
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
- if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return FALSE;
+ if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return false;
BeginWaitCursor();
if (!pMainFrm->OpenClipboard())
{
EndWaitCursor();
- return FALSE;
+ return false;
}
HGLOBAL hCpy = ::GetClipboardData(CF_TEXT);
LPCSTR p;
@@ -1523,7 +1523,7 @@
pEnv->nLoopStart = loopBegin;
pEnv->nLoopEnd = loopEnd;
pEnv->nReleaseNode = releaseNode;
- pEnv->dwFlags = (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0);
+ pEnv->dwFlags = (pEnv->dwFlags & ~(ENV_LOOP|ENV_SUSTAIN|ENV_CARRY)) | (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0);
int oldn = 0;
for (UINT i=0; i<nPoints; i++)
@@ -1557,7 +1557,7 @@
UpdateAllViews(NULL, (nIns << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL);
}
EndWaitCursor();
- return TRUE;
+ return true;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-19 21:35:09
|
Revision: 418
http://modplug.svn.sourceforge.net/modplug/?rev=418&view=rev
Author: saga-games
Date: 2009-11-19 21:34:59 +0000 (Thu, 19 Nov 2009)
Log Message:
-----------
[Fix] When moving program files to %APPDATA%, take care of the keyboard settings path in the INI file.
[Ref] Use enum for toolbar image list IDs
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Ctrl_ins.cpp
trunk/OpenMPT/mptrack/Ctrl_pat.cpp
trunk/OpenMPT/mptrack/Ctrl_smp.cpp
trunk/OpenMPT/mptrack/Mainfrm.h
trunk/OpenMPT/mptrack/Mptrack.cpp
trunk/OpenMPT/mptrack/Mptrack.h
trunk/OpenMPT/mptrack/View_ins.cpp
trunk/OpenMPT/mptrack/view_com.cpp
Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-11-19 21:34:59 UTC (rev 418)
@@ -777,10 +777,10 @@
if ((!m_pModDoc) || (!m_pSndFile)) return TRUE;
m_NoteMap.Init(this);
m_ToolBar.Init();
- m_ToolBar.AddButton(IDC_INSTRUMENT_NEW, 7);
- m_ToolBar.AddButton(IDC_INSTRUMENT_OPEN, 12);
- m_ToolBar.AddButton(IDC_INSTRUMENT_SAVEAS, 13);
- m_ToolBar.AddButton(IDC_INSTRUMENT_PLAY, 14);
+ m_ToolBar.AddButton(IDC_INSTRUMENT_NEW, TIMAGE_INSTR_NEW);
+ m_ToolBar.AddButton(IDC_INSTRUMENT_OPEN, TIMAGE_OPEN);
+ m_ToolBar.AddButton(IDC_INSTRUMENT_SAVEAS, TIMAGE_SAVE);
+ m_ToolBar.AddButton(IDC_INSTRUMENT_PLAY, TIMAGE_PREVIEW);
m_SpinInstrument.SetRange(0, 0);
m_SpinInstrument.EnableWindow(FALSE);
m_EditName.SetLimitText(32);
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-19 21:34:59 UTC (rev 418)
@@ -131,34 +131,31 @@
m_OrderList.Init(rcOrderList, this, m_pModDoc, pMainFrm->GetGUIFont());
// Toolbar buttons
m_ToolBar.Init();
- m_ToolBar.AddButton(IDC_PATTERN_NEW, 0);
- m_ToolBar.AddButton(IDC_PATTERN_PLAY, 2);
- m_ToolBar.AddButton(IDC_PATTERN_PLAYFROMSTART, 3);
- m_ToolBar.AddButton(IDC_PATTERN_STOP, 1);
- m_ToolBar.AddButton(ID_PATTERN_PLAYROW, 28);
- m_ToolBar.AddButton(IDC_PATTERN_RECORD, 4, TBSTYLE_CHECK, ((m_bRecord) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED);
+ m_ToolBar.AddButton(IDC_PATTERN_NEW, TIMAGE_PATTERN_NEW);
+ m_ToolBar.AddButton(IDC_PATTERN_PLAY, TIMAGE_PATTERN_PLAY);
+ m_ToolBar.AddButton(IDC_PATTERN_PLAYFROMSTART, TIMAGE_PATTERN_RESTART);
+ m_ToolBar.AddButton(IDC_PATTERN_STOP, TIMAGE_PATTERN_STOP);
+ m_ToolBar.AddButton(ID_PATTERN_PLAYROW, TIMAGE_PATTERN_PLAYROW);
+ m_ToolBar.AddButton(IDC_PATTERN_RECORD, TIMAGE_PATTERN_RECORD, TBSTYLE_CHECK, ((m_bRecord) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED);
m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
- m_ToolBar.AddButton(ID_PATTERN_VUMETERS, 16, TBSTYLE_CHECK, ((m_bVUMeters) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED);
- m_ToolBar.AddButton(ID_VIEWPLUGNAMES, 33, TBSTYLE_CHECK, ((m_bPluginNames) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); //rewbs.patPlugNames
-// -> CODE#0015
-// -> DESC="channels management dlg"
- m_ToolBar.AddButton(ID_PATTERN_CHANNELMANAGER, 34);
-// -! NEW_FEATURE#0015
+ m_ToolBar.AddButton(ID_PATTERN_VUMETERS, TIMAGE_PATTERN_VUMETERS, TBSTYLE_CHECK, ((m_bVUMeters) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED);
+ m_ToolBar.AddButton(ID_VIEWPLUGNAMES, TIMAGE_PATTERN_PLUGINS, TBSTYLE_CHECK, ((m_bPluginNames) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); //rewbs.patPlugNames
+ m_ToolBar.AddButton(ID_PATTERN_CHANNELMANAGER, TIMAGE_CHANNELMANAGER);
m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
- m_ToolBar.AddButton(ID_PATTERN_MIDIMACRO, 17);
- m_ToolBar.AddButton(ID_PATTERN_CHORDEDIT, 18);
+ m_ToolBar.AddButton(ID_PATTERN_MIDIMACRO, TIMAGE_MACROEDITOR);
+ m_ToolBar.AddButton(ID_PATTERN_CHORDEDIT, TIMAGE_CHORDEDITOR);
m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
- m_ToolBar.AddButton(ID_EDIT_UNDO, 26);
- m_ToolBar.AddButton(ID_PATTERN_PROPERTIES, 19);
- m_ToolBar.AddButton(ID_PATTERN_EXPAND, 20);
- m_ToolBar.AddButton(ID_PATTERN_SHRINK, 21);
-// m_ToolBar.AddButton(ID_PATTERN_AMPLIFY, 9);
+ m_ToolBar.AddButton(ID_EDIT_UNDO, TIMAGE_UNDO);
+ m_ToolBar.AddButton(ID_PATTERN_PROPERTIES, TIMAGE_PATTERN_PROPERTIES);
+ m_ToolBar.AddButton(ID_PATTERN_EXPAND, TIMAGE_PATTERN_EXPAND);
+ m_ToolBar.AddButton(ID_PATTERN_SHRINK, TIMAGE_PATTERN_SHRINK);
+ // m_ToolBar.AddButton(ID_PATTERN_AMPLIFY, TIMAGE_SAMPLE_AMPLIFY);
m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
- m_ToolBar.AddButton(ID_PATTERNDETAIL_LO, 30, TBSTYLE_CHECK, TBSTATE_ENABLED);
- m_ToolBar.AddButton(ID_PATTERNDETAIL_MED, 31, TBSTYLE_CHECK, TBSTATE_ENABLED);
- m_ToolBar.AddButton(ID_PATTERNDETAIL_HI, 32, TBSTYLE_CHECK, TBSTATE_ENABLED|TBSTATE_CHECKED);
+ m_ToolBar.AddButton(ID_PATTERNDETAIL_LO, TIMAGE_PATTERN_DETAIL_LO, TBSTYLE_CHECK, TBSTATE_ENABLED);
+ m_ToolBar.AddButton(ID_PATTERNDETAIL_MED, TIMAGE_PATTERN_DETAIL_MED, TBSTYLE_CHECK, TBSTATE_ENABLED);
+ m_ToolBar.AddButton(ID_PATTERNDETAIL_HI, TIMAGE_PATTERN_DETAIL_HI, TBSTYLE_CHECK, TBSTATE_ENABLED|TBSTATE_CHECKED);
m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
- m_ToolBar.AddButton(ID_OVERFLOWPASTE, 38, TBSTYLE_CHECK, ((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED);
+ m_ToolBar.AddButton(ID_OVERFLOWPASTE, TIMAGE_PATTERN_OVERFLOWPASTE, TBSTYLE_CHECK, ((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED);
// Special edit controls -> tab switch to view
m_EditSpacing.SetParent(this);
Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-11-19 21:34:59 UTC (rev 418)
@@ -194,21 +194,21 @@
m_ComboZoom.SetCurSel(0);
// File ToolBar
m_ToolBar1.Init();
- m_ToolBar1.AddButton(IDC_SAMPLE_NEW, 6);
- m_ToolBar1.AddButton(IDC_SAMPLE_OPEN, 12);
- m_ToolBar1.AddButton(IDC_SAMPLE_SAVEAS, 13);
+ m_ToolBar1.AddButton(IDC_SAMPLE_NEW, TIMAGE_SAMPLE_NEW);
+ m_ToolBar1.AddButton(IDC_SAMPLE_OPEN, TIMAGE_OPEN);
+ m_ToolBar1.AddButton(IDC_SAMPLE_SAVEAS, TIMAGE_SAVE);
// Edit ToolBar
m_ToolBar2.Init();
- m_ToolBar2.AddButton(IDC_SAMPLE_PLAY, 14);
- m_ToolBar2.AddButton(IDC_SAMPLE_NORMALIZE, 8);
- m_ToolBar2.AddButton(IDC_SAMPLE_AMPLIFY, 9);
- m_ToolBar2.AddButton(IDC_SAMPLE_DCOFFSET, 37);
- m_ToolBar2.AddButton(IDC_SAMPLE_UPSAMPLE, 10);
- m_ToolBar2.AddButton(IDC_SAMPLE_DOWNSAMPLE, 29);
- m_ToolBar2.AddButton(IDC_SAMPLE_REVERSE, 11);
- m_ToolBar2.AddButton(IDC_SAMPLE_SILENCE, 22);
- m_ToolBar2.AddButton(IDC_SAMPLE_INVERT, 35);
- m_ToolBar2.AddButton(IDC_SAMPLE_SIGN_UNSIGN, 36);
+ m_ToolBar2.AddButton(IDC_SAMPLE_PLAY, TIMAGE_PREVIEW);
+ m_ToolBar2.AddButton(IDC_SAMPLE_NORMALIZE, TIMAGE_SAMPLE_NORMALIZE);
+ m_ToolBar2.AddButton(IDC_SAMPLE_AMPLIFY, TIMAGE_SAMPLE_AMPLIFY);
+ m_ToolBar2.AddButton(IDC_SAMPLE_DCOFFSET, TIMAGE_SAMPLE_DCOFFSET);
+ m_ToolBar2.AddButton(IDC_SAMPLE_UPSAMPLE, TIMAGE_SAMPLE_UPSAMPLE);
+ m_ToolBar2.AddButton(IDC_SAMPLE_DOWNSAMPLE, TIMAGE_SAMPLE_DOWNSAMPLE);
+ m_ToolBar2.AddButton(IDC_SAMPLE_REVERSE, TIMAGE_SAMPLE_REVERSE);
+ m_ToolBar2.AddButton(IDC_SAMPLE_SILENCE, TIMAGE_SAMPLE_SILENCE);
+ m_ToolBar2.AddButton(IDC_SAMPLE_INVERT, TIMAGE_SAMPLE_INVERT);
+ m_ToolBar2.AddButton(IDC_SAMPLE_SIGN_UNSIGN, TIMAGE_SAMPLE_UNSIGN);
// Setup Controls
m_EditName.SetLimitText(32);
m_EditFileName.SetLimitText(22);
Modified: trunk/OpenMPT/mptrack/Mainfrm.h
===================================================================
--- trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-19 21:34:59 UTC (rev 418)
@@ -261,6 +261,50 @@
IMAGE_PLUGININSTRUMENT,
};
+
+// Toolbar Image List index
+enum {
+ TIMAGE_PATTERN_NEW=0,
+ TIMAGE_PATTERN_STOP,
+ TIMAGE_PATTERN_PLAY,
+ TIMAGE_PATTERN_RESTART,
+ TIMAGE_PATTERN_RECORD,
+ TIMAGE_MIDI_RECORD, // unused?
+ TIMAGE_SAMPLE_NEW,
+ TIMAGE_INSTR_NEW,
+ TIMAGE_SAMPLE_NORMALIZE,
+ TIMAGE_SAMPLE_AMPLIFY,
+ TIMAGE_SAMPLE_UPSAMPLE,
+ TIMAGE_SAMPLE_REVERSE,
+ TIMAGE_OPEN,
+ TIMAGE_SAVE,
+ TIMAGE_PREVIEW,
+ TIMAGE_PAUSE, // unused?
+ TIMAGE_PATTERN_VUMETERS,
+ TIMAGE_MACROEDITOR,
+ TIMAGE_CHORDEDITOR,
+ TIMAGE_PATTERN_PROPERTIES,
+ TIMAGE_PATTERN_EXPAND,
+ TIMAGE_PATTERN_SHRINK,
+ TIMAGE_SAMPLE_SILENCE,
+ TIMAGE_TAB_SAMPLES,
+ TIMAGE_TAB_INSTRUMENTS,
+ TIMAGE_TAB_PATTERNS,
+ TIMAGE_UNDO,
+ TIMAGE_REDO,
+ TIMAGE_PATTERN_PLAYROW,
+ TIMAGE_SAMPLE_DOWNSAMPLE,
+ TIMAGE_PATTERN_DETAIL_LO,
+ TIMAGE_PATTERN_DETAIL_MED,
+ TIMAGE_PATTERN_DETAIL_HI,
+ TIMAGE_PATTERN_PLUGINS,
+ TIMAGE_CHANNELMANAGER,
+ TIMAGE_SAMPLE_INVERT,
+ TIMAGE_SAMPLE_UNSIGN,
+ TIMAGE_SAMPLE_DCOFFSET,
+ TIMAGE_PATTERN_OVERFLOWPASTE,
+};
+
//////////////////////////////////////////////////////////////////////////
// MPT Hot Keys
Modified: trunk/OpenMPT/mptrack/Mptrack.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-11-19 21:34:59 UTC (rev 418)
@@ -669,7 +669,8 @@
exit(-1);
}
-void CTrackApp::MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH], TCHAR sNewFileName[_MAX_PATH])
+#ifdef WIN32 // Legacy stuff
+bool CTrackApp::MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH], TCHAR sNewFileName[_MAX_PATH])
//-----------------------------------------------------------------------------------------------------------------
{
// copy a config file from the exe directory to the new config dirs
@@ -690,8 +691,11 @@
if(PathFileExists(sNewPath) == 0 && PathFileExists(sOldPath) != 0)
{
MoveFile(sOldPath, sNewPath);
+ return true;
}
+ return false;
}
+#endif // WIN32 Legacy Stuff
void CTrackApp::SetupPaths()
@@ -732,18 +736,57 @@
strcat(m_szConfigDirectory, "\\OpenMPT\\");
// Path doesn't exist yet, so it has to be created
+ bool justCreated = false;
if(PathIsDirectory(m_szConfigDirectory) == 0)
{
CreateDirectory(m_szConfigDirectory, 0);
+ justCreated = true;
}
+ #ifdef WIN32 // Legacy stuff
+
+ bool movedKeyboardFiles = false;
// Move files if necessary.
+ movedKeyboardFiles = MoveConfigFile("default.mkb", "", "Keybindings.mkb");
+ movedKeyboardFiles |= MoveConfigFile("Keybindings.mkb");
+
+ // Check the old ini settings
+ if(justCreated && movedKeyboardFiles)
+ {
+ TCHAR szOldPath[_MAX_PATH], szTestPath[_MAX_PATH];
+
+ GetPrivateProfileString("Paths", "Key_Config_File", szOldPath, szOldPath, INIBUFFERSIZE, m_szConfigFileName);
+ _strlwr(szOldPath); // compare all in lower case
+
+ bool overwritePath = false;
+ strcpy(szTestPath, m_szExePath);
+ strcat(szTestPath, "default.mkb");
+ _strlwr(szTestPath);
+ overwritePath = (strcmp(szTestPath, szOldPath) == 0);
+
+ if(overwritePath == false)
+ {
+ strcpy(szTestPath, m_szExePath);
+ strcat(szTestPath, "Keybindings.mkb");
+ _strlwr(szTestPath);
+ overwritePath = (strcmp(szTestPath, szOldPath) == 0);
+ }
+
+ if(overwritePath)
+ {
+ // if old INI entry points to a file that's going to be moved, change it.
+ strcpy(szTestPath, m_szConfigDirectory);
+ strcat(szTestPath, "Keybindings.mkb");
+ WritePrivateProfileString("Paths", "Key_Config_File", szTestPath, m_szConfigFileName);
+ }
+
+ }
+ // Move some more files
MoveConfigFile("mptrack.ini");
MoveConfigFile("plugin.cache");
MoveConfigFile("mpt_intl.ini");
- MoveConfigFile("default.mkb", "", "Keybindings.mkb");
- MoveConfigFile("Keybindings.mkb");
- // TODO - Check the old ini settings here
+
+ #endif // WIN32 Legacy Stuff
}
// Create tunings dir
Modified: trunk/OpenMPT/mptrack/Mptrack.h
===================================================================
--- trunk/OpenMPT/mptrack/Mptrack.h 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/Mptrack.h 2009-11-19 21:34:59 UTC (rev 418)
@@ -268,7 +268,9 @@
private:
static void LoadRegistryDLS();
- void MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH] = "", TCHAR sNewFileName[_MAX_PATH] = "");
+ #ifdef WIN32 // Legacy stuff
+ bool MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH] = "", TCHAR sNewFileName[_MAX_PATH] = "");
+ #endif
};
Modified: trunk/OpenMPT/mptrack/View_ins.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-19 21:34:59 UTC (rev 418)
@@ -109,8 +109,8 @@
memset(m_dwNotifyPos, 0, sizeof(m_dwNotifyPos));
memset(m_NcButtonState, 0, sizeof(m_NcButtonState));
m_bmpEnvBar.Create(IDB_ENVTOOLBAR, 20, 0, RGB(192,192,192));
- memset(m_baPlayingNote, 0, sizeof(bool)*NOTE_MAX); //rewbs.customKeys
- m_nPlayingChannel = UINT_MAX; //rewbs.customKeys
+ memset(m_baPlayingNote, 0, sizeof(bool)*NOTE_MAX); //rewbs.customKeys
+ m_nPlayingChannel = CHANNELINDEX_INVALID; //rewbs.customKeys
//rewbs.envRowGrid
m_bGrid=true;
m_bGridForceRedraw=false;
@@ -1105,7 +1105,7 @@
break;
}
memset(m_baPlayingNote, 0, sizeof(bool)*NOTE_MAX); //rewbs.instViewNNA
- m_nPlayingChannel = UINT_MAX; //rewbs.instViewNNA
+ m_nPlayingChannel = CHANNELINDEX_INVALID; //rewbs.instViewNNA
}
} else
if ((pnotify->dwType & dwType) && ((pnotify->dwType & 0xFFFF) == m_nInstrument))
Modified: trunk/OpenMPT/mptrack/view_com.cpp
===================================================================
--- trunk/OpenMPT/mptrack/view_com.cpp 2009-11-12 21:32:08 UTC (rev 417)
+++ trunk/OpenMPT/mptrack/view_com.cpp 2009-11-19 21:34:59 UTC (rev 418)
@@ -138,9 +138,9 @@
m_ItemList.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_SINGLESEL|LVS_EDITLABELS|LVS_NOSORTHEADER, rect, this, IDC_LIST_DETAILS);
m_ItemList.ModifyStyleEx(0, WS_EX_STATICEDGE);
// Add ToolBar Buttons
- m_ToolBar.AddButton(IDC_LIST_SAMPLES, 23);
- m_ToolBar.AddButton(IDC_LIST_INSTRUMENTS, 24);
- //m_ToolBar.AddButton(IDC_LIST_PATTERNS, 25);
+ m_ToolBar.AddButton(IDC_LIST_SAMPLES, TIMAGE_TAB_SAMPLES);
+ m_ToolBar.AddButton(IDC_LIST_INSTRUMENTS, TIMAGE_TAB_INSTRUMENTS);
+ //m_ToolBar.AddButton(IDC_LIST_PATTERNS, TIMAGE_TAB_PATTERNS);
m_ToolBar.SetIndent(4);
UpdateButtonState();
OnUpdate(NULL, HINT_MODTYPE, NULL);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-12 22:29:04
|
Revision: 417
http://modplug.svn.sourceforge.net/modplug/?rev=417&view=rev
Author: saga-games
Date: 2009-11-12 21:32:08 +0000 (Thu, 12 Nov 2009)
Log Message:
-----------
[New] Pattern Editor: The "paste flood" command pastes the clipboard content again and again until it hits the bottom of the pattern (overflow paste will be disabled autmatically if paste flood is used, for obvious reasons)
[Fix] Instrument Editor: Last patch changed semantic of CViewInstrument::EnvGetValue a bit.
[Fix] Further fixes to Invert Loop. Still not perfect.
[Ref] Updated modular code dictionary description.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/CommandSet.cpp
trunk/OpenMPT/mptrack/CommandSet.h
trunk/OpenMPT/mptrack/Moddoc.h
trunk/OpenMPT/mptrack/Modedit.cpp
trunk/OpenMPT/mptrack/Undo.cpp
trunk/OpenMPT/mptrack/View_ins.cpp
trunk/OpenMPT/mptrack/View_pat.cpp
trunk/OpenMPT/mptrack/View_pat.h
trunk/OpenMPT/mptrack/resource.h
trunk/OpenMPT/soundlib/Snd_fx.cpp
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/Sndfile.h
Modified: trunk/OpenMPT/mptrack/CommandSet.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-12 21:32:08 UTC (rev 417)
@@ -2345,6 +2345,11 @@
commands[kcNoteFadeOld].isHidden = false;
commands[kcNoteFadeOld].isDummy = false;
+ commands[kcEditPasteFlood].UID = 1793;
+ commands[kcEditPasteFlood].Message = "Paste Flood";
+ commands[kcEditPasteFlood].isHidden = false;
+ commands[kcEditPasteFlood].isDummy = false;
+
#ifdef _DEBUG
for (int i=0; i<kcNumCommands; i++) {
if (commands[i].UID != 0) { // ignore unset UIDs
Modified: trunk/OpenMPT/mptrack/CommandSet.h
===================================================================
--- trunk/OpenMPT/mptrack/CommandSet.h 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/CommandSet.h 2009-11-12 21:32:08 UTC (rev 417)
@@ -84,6 +84,7 @@
kcEditPaste,
kcEditMixPaste,
kcEditMixPasteITStyle,
+ kcEditPasteFlood,
kcSwitchOverflowPaste,
kcEditSelectAll,
kcEditFind,
Modified: trunk/OpenMPT/mptrack/Moddoc.h
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.h 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/Moddoc.h 2009-11-12 21:32:08 UTC (rev 417)
@@ -240,8 +240,8 @@
BOOL ShrinkPattern(PATTERNINDEX nPattern);
// Copy&Paste
- BOOL CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel);
- BOOL PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, BOOL mix, BOOL ITStyleMix=FALSE); //rewbs.mixpaste
+ bool CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel);
+ bool PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix = false, bool PasteFlood = false);
BOOL CopyEnvelope(UINT nIns, UINT nEnv);
BOOL PasteEnvelope(UINT nIns, UINT nEnv);
Modified: trunk/OpenMPT/mptrack/Modedit.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-12 21:32:08 UTC (rev 417)
@@ -995,8 +995,8 @@
static LPCSTR lpszClipboardPatternHdr = "ModPlug Tracker %3s\x0D\x0A";
-BOOL CModDoc::CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel)
-//------------------------------------------------------------------------
+bool CModDoc::CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel)
+//--------------------------------------------------------------------------------
{
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
DWORD dwMemSize;
@@ -1004,7 +1004,7 @@
UINT nrows = (dwEndSel >> 16) - (dwBeginSel >> 16) + 1;
UINT ncols = ((dwEndSel & 0xFFFF) >> 3) - ((dwBeginSel & 0xFFFF) >> 3) + 1;
- if ((!pMainFrm) || (nPattern >= m_SndFile.Patterns.Size()) || (!m_SndFile.Patterns[nPattern])) return FALSE;
+ if ((!pMainFrm) || (nPattern >= m_SndFile.Patterns.Size()) || (!m_SndFile.Patterns[nPattern])) return false;
BeginWaitCursor();
dwMemSize = strlen(lpszClipboardPatternHdr) + 1;
dwMemSize += nrows * (ncols * 12 + 2);
@@ -1138,20 +1138,16 @@
CloseClipboard();
}
EndWaitCursor();
- return TRUE;
+ return true;
}
-//rewbs.mixpaste: using eric's method, as it is fat more elegant.
-// -> CODE#0014
-// -> DESC="vst wet/dry slider"
//BOOL CModDoc::PastePattern(UINT nPattern, DWORD dwBeginSel)
-BOOL CModDoc::PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, BOOL mix, BOOL ITStyleMix)
-// -! NEW_FEATURE#0014
-//---------------------------------------------------------
+bool CModDoc::PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix, bool PasteFlood)
+//-------------------------------------------------------------------------------------------------------------
{
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
- if ((!pMainFrm) || (nPattern >= m_SndFile.Patterns.Size()) || (!m_SndFile.Patterns[nPattern])) return FALSE;
+ if ((!pMainFrm) || (nPattern >= m_SndFile.Patterns.Size()) || (!m_SndFile.Patterns[nPattern])) return false;
BeginWaitCursor();
if (pMainFrm->OpenClipboard())
{
@@ -1168,11 +1164,11 @@
UINT col;
bool bS3MCommands = false, bOk = false;
MODTYPE origFormat = MOD_TYPE_IT;
- UINT len = 0;
+ UINT len = 0, startLen;
MODCOMMAND origModCmd;
ORDERINDEX oCurrentOrder; //jojo.echopaste
- ROWINDEX rTemp;
+ ROWINDEX rTemp, startRow;
PATTERNINDEX pTemp;
GetEditPosition(rTemp, pTemp, oCurrentOrder);
@@ -1199,15 +1195,24 @@
bOk = true;
GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]);
+ startLen = len;
+ startRow = nrow;
- while ((nrow < m_SndFile.PatternSize[nPattern]) && (len + 11 < dwMemSize))
+ while ((nrow < m_SndFile.PatternSize[nPattern]))
{
- // Search for column separator
- while (p[len] != '|')
+ // Search for column separator or end of paste data
+ while ((len + 11 >= dwMemSize) || p[len] != '|')
{
- if (len + 11 >= dwMemSize) goto PasteDone;
- if (!p[len]) goto PasteDone;
- len++;
+ if (len + 11 >= dwMemSize || !p[len])
+ {
+ if((PasteFlood == true) && (nrow != startRow)) // prevent infinite loop with malformed clipboard data
+ len = startLen; // paste from beginning
+ else
+ goto PasteDone;
+ } else
+ {
+ len++;
+ }
}
col = ncol;
// Paste columns
@@ -1359,8 +1364,9 @@
m += m_SndFile.m_nChannels;
nrow++;
- //jojo.echopaste
- if(CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE)
+ // Overflow paste. Continue pasting in next pattern if enabled.
+ // If Paste Flood is enabled, this won't be called due to obvious reasons.
+ if((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) && !PasteFlood)
{
while(nrow >= m_SndFile.PatternSize[nPattern])
{
@@ -1387,7 +1393,7 @@
CloseClipboard();
}
EndWaitCursor();
- return TRUE;
+ return true;
}
Modified: trunk/OpenMPT/mptrack/Undo.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Undo.cpp 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/Undo.cpp 2009-11-12 21:32:08 UTC (rev 417)
@@ -31,6 +31,12 @@
// Create undo point.
+// Parameter list:
+// - pattern: Pattern of which an undo step should be created from.
+// - x: first channel
+// - y: first row
+// - cx: last channel
+// - cy: last row
bool CPatternUndo::PrepareUndo(PATTERNINDEX pattern, UINT x, UINT y, UINT cx, UINT cy)
//------------------------------------------------------------------------------------
{
Modified: trunk/OpenMPT/mptrack/View_ins.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-12 21:32:08 UTC (rev 417)
@@ -246,7 +246,7 @@
{
INSTRUMENTENVELOPE *envelope = GetEnvelopePtr();
if(envelope == nullptr) return 0;
- if(nPoint < (int)envelope->nNodes) return envelope->Values[nPoint];
+ if(nPoint >= 0 && nPoint < (int)envelope->nNodes) return envelope->Values[nPoint];
return 0;
}
Modified: trunk/OpenMPT/mptrack/View_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-12 21:32:08 UTC (rev 417)
@@ -53,7 +53,8 @@
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
- ON_COMMAND(ID_EDIT_MIXPASTE, OnEditMixPaste) //rewbs.mixPaste
+ ON_COMMAND(ID_EDIT_MIXPASTE, OnEditMixPaste)
+ ON_COMMAND(ID_EDIT_PASTEFLOOD, OnEditPasteFlood)
ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll)
ON_COMMAND(ID_EDIT_SELECTCOLUMN,OnEditSelectColumn)
ON_COMMAND(ID_EDIT_SELECTCOLUMN2,OnSelectCurrentColumn)
@@ -1004,10 +1005,24 @@
}
}
+
//end rewbs.mixPaste
+void CViewPattern::OnEditPasteFlood()
+//-----------------------------------
+{
+ CModDoc *pModDoc = GetDocument();
+ if (pModDoc && IsEditingEnabled_bmsg())
+ {
+ pModDoc->PastePattern(m_nPattern, m_dwBeginSel, false, false, true);
+ InvalidatePattern(FALSE);
+ SetFocus();
+ }
+}
+
+
void CViewPattern::OnLButtonDown(UINT nFlags, CPoint point)
//--------------------------------------------------
{
@@ -3613,6 +3628,7 @@
case kcEditPaste: OnEditPaste(); return wParam;
case kcEditMixPaste: OnEditMixPaste(); return wParam;
case kcEditMixPasteITStyle: OnEditMixPasteITStyle(); return wParam;
+ case kcEditPasteFlood: OnEditPasteFlood(); return wParam;
case kcEditSelectAll: OnEditSelectAll(); return wParam;
case kcTogglePluginEditor: TogglePluginEditor((m_dwCursor & 0xFFFF) >> 3); return wParam;
case kcToggleFollowSong: SendCtrlMessage(CTRLMSG_PAT_FOLLOWSONG); return wParam;
@@ -4824,6 +4840,7 @@
AppendMenu(hMenu, MF_STRING, ID_EDIT_COPY, "Copy\t" + ih->GetKeyTextFromCommand(kcEditCopy));
AppendMenu(hMenu, MF_STRING, ID_EDIT_PASTE, "Paste\t" + ih->GetKeyTextFromCommand(kcEditPaste));
AppendMenu(hMenu, MF_STRING, ID_EDIT_MIXPASTE, "Mix Paste\t" + ih->GetKeyTextFromCommand(kcEditMixPaste));
+ AppendMenu(hMenu, MF_STRING, ID_EDIT_PASTEFLOOD, "Paste Flood\t" + ih->GetKeyTextFromCommand(kcEditPasteFlood));
DWORD greyed = pModDoc->GetPatternUndo()->CanUndo()?FALSE:MF_GRAYED;
if (!greyed || !(CMainFrame::m_dwPatternSetup&PATTERN_OLDCTXMENUSTYLE)) {
Modified: trunk/OpenMPT/mptrack/View_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.h 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/View_pat.h 2009-11-12 21:32:08 UTC (rev 417)
@@ -230,6 +230,7 @@
afx_msg void OnEditPaste();
afx_msg void OnEditMixPaste(); //rewbs.mixPaste
afx_msg void OnEditMixPasteITStyle(); //rewbs.mixPaste
+ afx_msg void OnEditPasteFlood();
afx_msg void OnClearSelection(bool ITStyle=false, RowMask sb = DefaultRowMask); //rewbs.customKeys
afx_msg void OnGrowSelection(); //rewbs.customKeys
afx_msg void OnShrinkSelection(); //rewbs.customKeys
Modified: trunk/OpenMPT/mptrack/resource.h
===================================================================
--- trunk/OpenMPT/mptrack/resource.h 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/mptrack/resource.h 2009-11-12 21:32:08 UTC (rev 417)
@@ -1152,6 +1152,7 @@
#define ID_ORDERLIST_EDIT_CUT 59232
#define ID_ORDERLIST_EDIT_PASTE 59233
#define ID_CHANNEL_RENAME 59234
+#define ID_EDIT_PASTEFLOOD 59235
// Next default values for new objects
//
@@ -1159,7 +1160,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 523
-#define _APS_NEXT_COMMAND_VALUE 59235
+#define _APS_NEXT_COMMAND_VALUE 59236
#define _APS_NEXT_CONTROL_VALUE 2412
#define _APS_NEXT_SYMED_VALUE 901
#endif
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-12 21:32:08 UTC (rev 417)
@@ -2530,7 +2530,6 @@
if((m_nType & MOD_TYPE_MOD) != 0) // MOD: Invert Loop
{
pChn->nEFxSpeed = param;
- pChn->pEFxSample = pChn->pModSample;
if(m_dwSongFlags & SONG_FIRSTTICK) InvertLoop(pChn);
}
else // XM: Set Active Midi Macro
@@ -2701,7 +2700,7 @@
if((m_nType & MOD_TYPE_MOD) == 0 || pChn->nEFxSpeed == 0) return;
// we obviously also need a sample for this
- MODSAMPLE *pModSample = pChn->pEFxSample;
+ MODSAMPLE *pModSample = pChn->pModSample;
if(pModSample == nullptr || pModSample->pSample == nullptr || !(pModSample->uFlags & CHN_LOOP)) return;
pChn->nEFxDelay += ModEFxTable[pChn->nEFxSpeed & 0x0F];
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-11-12 21:32:08 UTC (rev 417)
@@ -127,8 +127,8 @@
- use 'VE[.' for VolEnv.Values[MAX_ENVPOINTS]
-* In use CODE tag dictionnary (alphabetical order): [ see in Sndfile.cpp ]
---------------------------------------------------------------------------
+* In use CODE tag dictionary (alphabetical order): [ see in Sndfile.cpp ]
+-------------------------------------------------------------------------
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! SECTION TO BE UPDATED !!!
@@ -209,6 +209,9 @@
PERN PitchEnv.nReleaseNode
AERN PanEnv.nReleaseNode
VERN VolEnv.nReleaseNode
+PFLG PitchEnv.dwFlag
+AFLG PanEnv.dwFlags
+VFLG VolEnv.dwFlags
-----------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------*/
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2009-11-07 23:38:07 UTC (rev 416)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2009-11-12 21:32:08 UTC (rev 417)
@@ -205,7 +205,6 @@
LONG nRestorePanOnNewNote; //If > 0, nPan should be set to nRestorePanOnNewNote - 1 on new note. Used to recover from panswing.
UINT nOldGlobalVolSlide;
DWORD nEFxOffset; // offset memory for Invert Loop (EFx, .MOD only)
- MODSAMPLE *pEFxSample; // sample memory for Invert Loop (EFx, .MOD only)
// 8-bit members
BYTE nRestoreResonanceOnNewNote; //Like above
BYTE nRestoreCutoffOnNewNote; //Like above
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-07 23:38:23
|
Revision: 416
http://modplug.svn.sourceforge.net/modplug/?rev=416&view=rev
Author: saga-games
Date: 2009-11-07 23:38:07 +0000 (Sat, 07 Nov 2009)
Log Message:
-----------
[Fix] A wrong #define was used in the plugin finding algorithm which broke plugin handling for instruments in some cases in the last revision.
[Fix] Various fixes to the MDL loader (taken from Schism Tracker)
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_mdl.cpp
trunk/OpenMPT/soundlib/Snd_defs.h
trunk/OpenMPT/soundlib/Snd_fx.cpp
Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-11-07 21:40:01 UTC (rev 415)
+++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-11-07 23:38:07 UTC (rev 416)
@@ -80,8 +80,30 @@
}
break;
case 0x0F: command = CMD_SPEED; break;
- case 0x10: if ((param & 0xF0) != 0xE0) { command = CMD_VOLUMESLIDE; if ((param & 0xF0) == 0xF0) param = ((param << 4) | 0x0F); else param >>= 2; } break;
- case 0x20: if ((param & 0xF0) != 0xE0) { command = CMD_VOLUMESLIDE; if ((param & 0xF0) != 0xF0) param >>= 2; } break;
+ case 0x10:
+ if ((param & 0xF0) != 0xE0) {
+ command = CMD_VOLUMESLIDE;
+ if ((param & 0xF0) == 0xF0) {
+ param = ((param << 4) | 0x0F);
+ } else {
+ param >>= 2;
+ if (param > 0xF)
+ param = 0xF;
+ param <<= 4;
+ }
+ }
+ break;
+ case 0x20:
+ if ((param & 0xF0) != 0xE0) {
+ command = CMD_VOLUMESLIDE;
+ if ((param & 0xF0) != 0xF0) {
+ param >>= 2;
+ if (param > 0xF)
+ param = 0xF;
+ }
+ }
+ break;
+
case 0x30: command = CMD_RETRIG; break;
case 0x40: command = CMD_TREMOLO; break;
case 0x50: command = CMD_TREMOR; break;
@@ -392,6 +414,10 @@
pIns->PanEnv.dwFlags |= ENV_ENABLED;
inspanenv[nins] = (ps[5] & 0x3F) + 1;
}
+
+ // taken from load_xm.cpp - seems to fix wakingup.mdl
+ if (!(pIns->VolEnv.dwFlags & ENV_ENABLED) && !pIns->nFadeOut)
+ pIns->nFadeOut = 8192;
}
}
dwPos += 34 + 14*lpStream[dwPos+1];
@@ -457,7 +483,6 @@
pSmp->nLoopStart = *((DWORD *)(p+4));
pSmp->nLoopEnd = pSmp->nLoopStart + *((DWORD *)(p+8));
if (pSmp->nLoopEnd > pSmp->nLoopStart) pSmp->uFlags |= CHN_LOOP;
- pSmp->nVolume = 256;
pSmp->nGlobalVol = 64;
if (p[13] & 0x01)
{
Modified: trunk/OpenMPT/soundlib/Snd_defs.h
===================================================================
--- trunk/OpenMPT/soundlib/Snd_defs.h 2009-11-07 21:40:01 UTC (rev 415)
+++ trunk/OpenMPT/soundlib/Snd_defs.h 2009-11-07 23:38:07 UTC (rev 416)
@@ -130,7 +130,7 @@
#define CHN_PINGPONGSUSTAIN 0x10
#define CHN_PANNING 0x20
#define CHN_STEREO 0x40
-#define CHN_PINGPONGFLAG 0x80 //When flag is on, bidiloop is processed backwards?
+#define CHN_PINGPONGFLAG 0x80 //When flag is on, sample is processed backwards
// Bits 8-31: Channel Flags
#define CHN_MUTE 0x100
#define CHN_KEYOFF 0x200
@@ -157,10 +157,10 @@
#define CHN_SYNCMUTE 0x40000000
// instrument envelope-specific flags
-#define ENV_LOOP 0x01 // env loop
-#define ENV_SUSTAIN 0x02 // env sustain
-#define ENV_CARRY 0x04 // env carry
-#define ENV_ENABLED 0x08 // env is enabled
+#define ENV_ENABLED 0x01 // env is enabled
+#define ENV_LOOP 0x02 // env loop
+#define ENV_SUSTAIN 0x04 // env sustain
+#define ENV_CARRY 0x08 // env carry
#define ENV_FILTER 0x10 // filter env enabled (this has to be combined with ENV_ENABLED in the pitch envelope's flags)
// instrument-specific flags
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-07 21:40:01 UTC (rev 415)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-07 23:38:07 UTC (rev 416)
@@ -3754,7 +3754,7 @@
UINT nPlugin=0;
if (pChn && pChn->pModInstrument) {
- if (respectMutes && pChn->pModSample && pChn->pModSample->uFlags&INS_MUTE) {
+ if (respectMutes && pChn->pModSample && (pChn->pModSample->uFlags & CHN_MUTE)) {
nPlugin = 0;
} else {
nPlugin = pChn->pModInstrument->nMixPlug;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-07 21:40:15
|
Revision: 415
http://modplug.svn.sourceforge.net/modplug/?rev=415&view=rev
Author: saga-games
Date: 2009-11-07 21:40:01 +0000 (Sat, 07 Nov 2009)
Log Message:
-----------
[Mod] Envelope editor: Middle line is also shown for volume envelope.
[Ref] Envelope flags (enabled/loop/sustain/carry/filter) are now stored in the INSTRUMENTENVELOPE struct for ease of use. I did some tests, but I still hope this didn't break anything...
[Ref] A lot of code cleanup and optimization due to the change above.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Childfrm.h
trunk/OpenMPT/mptrack/CleanupSong.cpp
trunk/OpenMPT/mptrack/Ctrl_ins.cpp
trunk/OpenMPT/mptrack/Moddoc.cpp
trunk/OpenMPT/mptrack/Modedit.cpp
trunk/OpenMPT/mptrack/View_ins.cpp
trunk/OpenMPT/mptrack/View_ins.h
trunk/OpenMPT/mptrack/view_com.cpp
trunk/OpenMPT/soundlib/Dlsbank.cpp
trunk/OpenMPT/soundlib/LOAD_DBM.CPP
trunk/OpenMPT/soundlib/Load_ams.cpp
trunk/OpenMPT/soundlib/Load_imf.cpp
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Load_mdl.cpp
trunk/OpenMPT/soundlib/Load_mid.cpp
trunk/OpenMPT/soundlib/Load_mt2.cpp
trunk/OpenMPT/soundlib/Load_xm.cpp
trunk/OpenMPT/soundlib/Sampleio.cpp
trunk/OpenMPT/soundlib/Snd_defs.h
trunk/OpenMPT/soundlib/Snd_fx.cpp
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/mptrack/Childfrm.h
===================================================================
--- trunk/OpenMPT/mptrack/Childfrm.h 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/Childfrm.h 2009-11-07 21:40:01 UTC (rev 415)
@@ -48,7 +48,7 @@
typedef struct INSTRUMENTVIEWSTATE
{
DWORD cbStruct;
- DWORD nEnv;
+ enmEnvelopeTypes nEnv;
bool bGrid;
} INSTRUMENTVIEWSTATE;
Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp
===================================================================
--- trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -862,21 +862,13 @@
pSndFile->Instruments[i]->nFadeOut = 256;
pSndFile->Instruments[i]->nGlobalVol = 64;
pSndFile->Instruments[i]->nPan = 128;
- pSndFile->Instruments[i]->dwFlags &= ~ENV_SETPANNING;
+ pSndFile->Instruments[i]->dwFlags &= ~INS_SETPANNING;
pSndFile->Instruments[i]->nMixPlug = 0;
pSndFile->Instruments[i]->nVolSwing = 0;
pSndFile->Instruments[i]->nPanSwing = 0;
pSndFile->Instruments[i]->nCutSwing = 0;
pSndFile->Instruments[i]->nResSwing = 0;
-
- //might be a good idea to leave those enabled...
- /*
- pSndFile->Instruments[i]->dwFlags &= ~ENV_VOLUME;
- pSndFile->Instruments[i]->dwFlags &= ~ENV_PANNING;
- pSndFile->Instruments[i]->dwFlags &= ~ENV_PITCH;
- pSndFile->Instruments[i]->dwFlags &= ~ENV_FILTER;
- */
}
// reset samples
Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -1101,7 +1101,7 @@
SetDlgItemInt(IDC_EDIT8, pIns->nGlobalVol);
// Panning
SetDlgItemInt(IDC_EDIT9, pIns->nPan);
- m_CheckPanning.SetCheck((pIns->dwFlags & ENV_SETPANNING) ? TRUE : FALSE);
+ m_CheckPanning.SetCheck((pIns->dwFlags & INS_SETPANNING) ? TRUE : FALSE);
// Midi
if (pIns->nMidiProgram>0 && pIns->nMidiProgram<=128)
SetDlgItemInt(IDC_EDIT10, pIns->nMidiProgram);
@@ -1774,8 +1774,8 @@
{
const BOOL b = m_CheckPanning.GetCheck();
- if (b) pIns->dwFlags |= ENV_SETPANNING;
- else pIns->dwFlags &= ~ENV_SETPANNING;
+ if (b) pIns->dwFlags |= INS_SETPANNING;
+ else pIns->dwFlags &= ~INS_SETPANNING;
if(b && m_pSndFile->GetType() & MOD_TYPE_IT|MOD_TYPE_MPT)
{
Modified: trunk/OpenMPT/mptrack/Moddoc.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -1189,8 +1189,8 @@
//--------------------------------------------------------------
{
if ((nInstr < 1) || (nInstr > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nInstr])) return false;
- if (bMute) m_SndFile.Instruments[nInstr]->dwFlags |= ENV_MUTE;
- else m_SndFile.Instruments[nInstr]->dwFlags &= ~ENV_MUTE;
+ if (bMute) m_SndFile.Instruments[nInstr]->dwFlags |= INS_MUTE;
+ else m_SndFile.Instruments[nInstr]->dwFlags &= ~INS_MUTE;
return true;
}
@@ -1267,7 +1267,7 @@
//-----------------------------------------------------------
{
if ((!nInstr) || (nInstr > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nInstr])) return false;
- return (m_SndFile.Instruments[nInstr]->dwFlags & ENV_MUTE) ? true : false;
+ return (m_SndFile.Instruments[nInstr]->dwFlags & INS_MUTE) ? true : false;
}
Modified: trunk/OpenMPT/mptrack/Modedit.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -283,7 +283,10 @@
pIns->PanEnv.nSustainEnd = pIns->PanEnv.nSustainStart;
bBrokenSustainLoop = true;
}
- pIns->dwFlags &= ~(ENV_SETPANNING|ENV_VOLCARRY|ENV_PANCARRY|ENV_PITCHCARRY|ENV_FILTER|ENV_PITCH);
+ pIns->VolEnv.dwFlags &= ~ENV_CARRY;
+ pIns->PanEnv.dwFlags &= ~ENV_CARRY;
+ pIns->PitchEnv.dwFlags &= ~(ENV_CARRY|ENV_ENABLED|ENV_FILTER);
+ pIns->dwFlags &= ~INS_SETPANNING;
pIns->nIFC &= 0x7F;
pIns->nIFR &= 0x7F;
}
@@ -1402,7 +1405,6 @@
CHAR s[4096];
MODINSTRUMENT *pIns;
DWORD dwMemSize;
- UINT bSus, bLoop, bCarry;
if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return FALSE;
BeginWaitCursor();
@@ -1414,27 +1416,17 @@
{
case ENV_PANNING:
pEnv = &pIns->PanEnv;
- bLoop = (pIns->dwFlags & ENV_PANLOOP) ? 1 : 0;
- bSus = (pIns->dwFlags & ENV_PANSUSTAIN) ? 1 : 0;
- bCarry = (pIns->dwFlags & ENV_PANCARRY) ? 1 : 0;
break;
-
case ENV_PITCH:
pEnv = &pIns->PitchEnv;
- bLoop = (pIns->dwFlags & ENV_PITCHLOOP) ? 1 : 0;
- bSus = (pIns->dwFlags & ENV_PITCHSUSTAIN) ? 1 : 0;
- bCarry = (pIns->dwFlags & ENV_PITCHCARRY) ? 1 : 0;
break;
-
default:
pEnv = &pIns->VolEnv;
- bLoop = (pIns->dwFlags & ENV_VOLLOOP) ? 1 : 0;
- bSus = (pIns->dwFlags & ENV_VOLSUSTAIN) ? 1 : 0;
- bCarry = (pIns->dwFlags & ENV_VOLCARRY) ? 1 : 0;
break;
}
+
strcpy(s, pszEnvHdr);
- wsprintf(s + strlen(s), pszEnvFmt, pEnv->nNodes, pEnv->nSustainStart, pEnv->nSustainEnd, pEnv->nLoopStart, pEnv->nLoopEnd, bSus, bLoop, bCarry);
+ wsprintf(s + strlen(s), pszEnvFmt, pEnv->nNodes, pEnv->nSustainStart, pEnv->nSustainEnd, pEnv->nLoopStart, pEnv->nLoopEnd, (pEnv->dwFlags & ENV_SUSTAIN) ? 1 : 0, (pEnv->dwFlags & ENV_LOOP) ? 1 : 0, (pEnv->dwFlags & ENV_CARRY) ? 1 : 0);
for (UINT i = 0; i < pEnv->nNodes; i++)
{
if (strlen(s) >= sizeof(s)-32) break;
@@ -1511,26 +1503,12 @@
{
case ENV_PANNING:
pEnv = &pIns->PanEnv;
- pIns->dwFlags &= ~(ENV_PANLOOP|ENV_PANSUSTAIN|ENV_PANCARRY);
- if (bLoop) pIns->dwFlags |= ENV_PANLOOP;
- if (bSus) pIns->dwFlags |= ENV_PANSUSTAIN;
- if (bCarry) pIns->dwFlags |= ENV_PANCARRY;
break;
-
case ENV_PITCH:
pEnv = &pIns->PitchEnv;
- pIns->dwFlags &= ~(ENV_PITCHLOOP|ENV_PITCHSUSTAIN|ENV_PITCHCARRY);
- if (bLoop) pIns->dwFlags |= ENV_PITCHLOOP;
- if (bSus) pIns->dwFlags |= ENV_PITCHSUSTAIN;
- if (bCarry) pIns->dwFlags |= ENV_PITCHCARRY;
break;
-
default:
pEnv = &pIns->VolEnv;
- pIns->dwFlags &= ~(ENV_VOLLOOP|ENV_VOLSUSTAIN|ENV_VOLCARRY);
- if (bLoop) pIns->dwFlags |= ENV_VOLLOOP;
- if (bSus) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (bCarry) pIns->dwFlags |= ENV_VOLCARRY;
break;
}
pEnv->nNodes = nPoints;
@@ -1539,6 +1517,7 @@
pEnv->nLoopStart = loopBegin;
pEnv->nLoopEnd = loopEnd;
pEnv->nReleaseNode = releaseNode;
+ pEnv->dwFlags = (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0);
int oldn = 0;
for (UINT i=0; i<nPoints; i++)
Modified: trunk/OpenMPT/mptrack/View_ins.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -152,8 +152,8 @@
}
-BOOL CViewInstrument::SetCurrentInstrument(INSTRUMENTINDEX nIns, UINT nEnv)
-//-------------------------------------------------------------------------
+BOOL CViewInstrument::SetCurrentInstrument(INSTRUMENTINDEX nIns, enmEnvelopeTypes nEnv)
+//-------------------------------------------------------------------------------------
{
CModDoc *pModDoc = GetDocument();
DWORD dwNotify;
@@ -244,27 +244,9 @@
UINT CViewInstrument::EnvGetValue(int nPoint) const
//-------------------------------------------------
{
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if ((pIns) && (nPoint >= 0))
- {
- switch(m_nEnv)
- {
- case ENV_VOLUME:
- if (nPoint < (int)pIns->VolEnv.nNodes) return pIns->VolEnv.Values[nPoint];
- break;
- case ENV_PANNING:
- if (nPoint < (int)pIns->PanEnv.nNodes) return pIns->PanEnv.Values[nPoint];
- break;
- case ENV_PITCH:
- if (nPoint < (int)pIns->PitchEnv.nNodes) return pIns->PitchEnv.Values[nPoint];
- break;
- }
- }
- }
+ INSTRUMENTENVELOPE *envelope = GetEnvelopePtr();
+ if(envelope == nullptr) return 0;
+ if(nPoint < (int)envelope->nNodes) return envelope->Values[nPoint];
return 0;
}
@@ -272,54 +254,39 @@
bool CViewInstrument::EnvSetValue(int nPoint, int nTick, int nValue)
//------------------------------------------------------------------
{
- bool bOk = false;
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if ((pIns) && (nPoint >= 0))
- {
- LPWORD pPoints = NULL;
- LPBYTE pData = NULL;
- UINT maxpoints = 0;
+ if(nPoint < 0) return false;
- INSTRUMENTENVELOPE *envelope = GetEnvelopePtr();
- if(envelope == nullptr) return false;
+ INSTRUMENTENVELOPE *envelope = GetEnvelopePtr();
+ if(envelope == nullptr) return false;
- maxpoints = envelope->nNodes;
- pPoints = envelope->Ticks;
- pData = envelope->Values;
-
- if (!nPoint) nTick = 0;
- if ((nPoint < (int)maxpoints) && (pPoints) && (pData))
+ bool bOK = false;
+ if (!nPoint) nTick = 0;
+ if (nPoint < (int)envelope->nNodes)
+ {
+ if (nTick >= 0)
+ {
+ int mintick = (nPoint) ? envelope->Ticks[nPoint-1] : 0;
+ int maxtick = envelope->Ticks[nPoint+1];
+ if (nPoint + 1 == (int)envelope->nNodes) maxtick = 16383;
+ if (nTick < mintick) nTick = mintick;
+ if (nTick > maxtick) nTick = maxtick;
+ if (nTick != envelope->Ticks[nPoint])
{
- if (nTick >= 0)
- {
- int mintick = (nPoint) ? pPoints[nPoint-1] : 0;
- int maxtick = pPoints[nPoint+1];
- if (nPoint+1 == (int)maxpoints) maxtick = 16383;
- if (nTick < mintick) nTick = mintick;
- if (nTick > maxtick) nTick = maxtick;
- if (nTick != pPoints[nPoint])
- {
- pPoints[nPoint] = (WORD)nTick;
- bOk = true;
- }
- }
- if (nValue >= 0)
- {
- if (nValue > 64) nValue = 64;
- if (nValue != pData[nPoint])
- {
- pData[nPoint] = (BYTE)nValue;
- bOk = true;
- }
- }
+ envelope->Ticks[nPoint] = (WORD)nTick;
+ bOK = true;
}
}
+ if (nValue >= 0)
+ {
+ if (nValue > 64) nValue = 64;
+ if (nValue != envelope->Values[nPoint])
+ {
+ envelope->Values[nPoint] = (BYTE)nValue;
+ bOK = true;
+ }
+ }
}
- return bOk;
+ return bOK;
}
@@ -341,90 +308,16 @@
}
-bool CViewInstrument::EnvGetLoop() const
-//--------------------------------------
+// Return if an envelope flag is set.
+bool CViewInstrument::EnvGetFlag(const DWORD dwFlag) const
+//--------------------------------------------------------
{
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
- {
- switch(m_nEnv)
- {
- case ENV_VOLUME:
- if (pIns->dwFlags & ENV_VOLLOOP) return true;
- break;
- case ENV_PANNING:
- if (pIns->dwFlags & ENV_PANLOOP) return true;
- break;
- case ENV_PITCH:
- if (pIns->dwFlags & ENV_PITCHLOOP) return true;
- break;
- }
- }
- }
+ INSTRUMENTENVELOPE *pEnv = GetEnvelopePtr();
+ if(pEnv != nullptr && pEnv->dwFlags & dwFlag) return true;
return false;
}
-bool CViewInstrument::EnvGetSustain() const
-//-----------------------------------------
-{
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
- {
- switch(m_nEnv)
- {
- case ENV_VOLUME:
- if (pIns->dwFlags & ENV_VOLSUSTAIN) return true;
- break;
- case ENV_PANNING:
- if (pIns->dwFlags & ENV_PANSUSTAIN) return true;
- break;
- case ENV_PITCH:
- if (pIns->dwFlags & ENV_PITCHSUSTAIN) return true;
- break;
- }
- }
- }
- return false;
-}
-
-
-bool CViewInstrument::EnvGetCarry() const
-//---------------------------------------
-{
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
- {
- switch(m_nEnv)
- {
- case ENV_VOLUME:
- if (pIns->dwFlags & ENV_VOLCARRY) return true;
- break;
- case ENV_PANNING:
- if (pIns->dwFlags & ENV_PANCARRY) return true;
- break;
- case ENV_PITCH:
- if (pIns->dwFlags & ENV_PITCHCARRY) return true;
- break;
- }
- }
- }
- return false;
-}
-
-
UINT CViewInstrument::EnvGetLoopStart() const
//-------------------------------------------
{
@@ -469,7 +362,7 @@
{
CSoundFile *pSndFile = pModDoc->GetSoundFile();
MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns) return (pIns->dwFlags & ENV_VOLUME) ? true : false;
+ if (pIns) return (pIns->VolEnv.dwFlags & ENV_ENABLED) ? true : false;
}
return false;
}
@@ -483,7 +376,7 @@
{
CSoundFile *pSndFile = pModDoc->GetSoundFile();
MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns) return (pIns->dwFlags & ENV_PANNING) ? true : false;
+ if (pIns) return (pIns->PanEnv.dwFlags & ENV_ENABLED) ? true : false;
}
return false;
}
@@ -497,7 +390,7 @@
{
CSoundFile *pSndFile = pModDoc->GetSoundFile();
MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns) return ((pIns->dwFlags & (ENV_PITCH|ENV_FILTER)) == ENV_PITCH) ? true : false;
+ if (pIns) return ((pIns->PitchEnv.dwFlags & (ENV_ENABLED|ENV_FILTER)) == ENV_ENABLED) ? true : false;
}
return false;
}
@@ -511,7 +404,7 @@
{
CSoundFile *pSndFile = pModDoc->GetSoundFile();
MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns) return ((pIns->dwFlags & (ENV_PITCH|ENV_FILTER)) == (ENV_PITCH|ENV_FILTER)) ? true : false;
+ if (pIns) return ((pIns->PitchEnv.dwFlags & (ENV_ENABLED|ENV_FILTER)) == (ENV_ENABLED|ENV_FILTER)) ? true : false;
}
return false;
}
@@ -599,120 +492,57 @@
}
-bool CViewInstrument::EnvSetLoop(bool bLoop)
-//------------------------------------------
+// Enable or disable a flag of the current envelope
+bool CViewInstrument::EnvSetFlag(const DWORD dwFlag, const bool bEnable) const
+//----------------------------------------------------------------------------
{
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
+ INSTRUMENTENVELOPE *envelope = GetEnvelopePtr();
+ if(envelope == nullptr) return false;
+ if(bEnable)
{
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
+ if(!(envelope->dwFlags & dwFlag))
{
- DWORD dwMask = 0;
- switch(m_nEnv)
- {
- case ENV_VOLUME: dwMask = ENV_VOLLOOP; break;
- case ENV_PANNING: dwMask = ENV_PANLOOP; break;
- case ENV_PITCH: dwMask = ENV_PITCHLOOP; break;
- }
- if (!dwMask) return false;
- if (bLoop)
- {
- if (!(pIns->dwFlags & dwMask))
- {
- pIns->dwFlags |= dwMask;
- return true;
- }
- } else
- {
- if (pIns->dwFlags & dwMask)
- {
- pIns->dwFlags &= ~dwMask;
- return true;
- }
- }
+ envelope->dwFlags |= dwFlag;
+ return true;
}
+ } else
+ {
+ if(envelope->dwFlags & dwFlag)
+ {
+ envelope->dwFlags &= ~dwFlag;
+ return true;
+ }
}
return false;
}
-bool CViewInstrument::EnvSetSustain(bool bSustain)
-//------------------------------------------------
+bool CViewInstrument::EnvToggleEnv(INSTRUMENTENVELOPE *pEnv, CSoundFile *pSndFile, MODINSTRUMENT *pIns, bool bEnable, BYTE cDefaultValue, DWORD dwChanFlag, DWORD dwExtraFlags)
+//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
+ if(pEnv == nullptr) return false;
+
+ if (bEnable)
{
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
+ pEnv->dwFlags |= (ENV_ENABLED|dwExtraFlags);
+ if (!pEnv->nNodes)
{
- DWORD dwMask = 0;
- switch(m_nEnv)
- {
- case ENV_VOLUME: dwMask = ENV_VOLSUSTAIN; break;
- case ENV_PANNING: dwMask = ENV_PANSUSTAIN; break;
- case ENV_PITCH: dwMask = ENV_PITCHSUSTAIN; break;
- }
- if (!dwMask) return false;
- if (bSustain)
- {
- if (!(pIns->dwFlags & dwMask))
- {
- pIns->dwFlags |= dwMask;
- return true;
- }
- } else
- {
- if (pIns->dwFlags & dwMask)
- {
- pIns->dwFlags &= ~dwMask;
- return true;
- }
- }
+ pEnv->Values[0] = pEnv->Values[1] = cDefaultValue;
+ pEnv->Ticks[0] = 0;
+ pEnv->Ticks[1] = 10;
+ pEnv->nNodes = 2;
+ InvalidateRect(NULL, FALSE);
}
- }
- return false;
-}
-
-
-bool CViewInstrument::EnvSetCarry(bool bCarry)
-//--------------------------------------------
-{
- CModDoc *pModDoc = GetDocument();
- if (pModDoc)
+ } else
{
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
+ pEnv->dwFlags &= ~(ENV_ENABLED|dwExtraFlags);
+ for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++)
{
- DWORD dwMask = 0;
- switch(m_nEnv)
- {
- case ENV_VOLUME: dwMask = ENV_VOLCARRY; break;
- case ENV_PANNING: dwMask = ENV_PANCARRY; break;
- case ENV_PITCH: dwMask = ENV_PITCHCARRY; break;
- }
- if (!dwMask) return false;
- if (bCarry)
- {
- if (!(pIns->dwFlags & dwMask))
- {
- pIns->dwFlags |= dwMask;
- return true;
- }
- } else
- {
- if (pIns->dwFlags & dwMask)
- {
- pIns->dwFlags &= ~dwMask;
- return true;
- }
- }
+ if(pSndFile->Chn[nChn].pModInstrument == pIns)
+ pSndFile->Chn[nChn].dwFlags &= ~dwChanFlag;
}
}
- return false;
+ return true;
}
@@ -720,37 +550,13 @@
//----------------------------------------------
{
CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
- {
- if (bEnable)
- {
- pIns->dwFlags |= ENV_VOLUME;
- if (!pIns->VolEnv.nNodes)
- {
- pIns->VolEnv.Values[0] = 64;
- pIns->VolEnv.Values[1] = 64;
- pIns->VolEnv.Ticks[0] = 0;
- pIns->VolEnv.Ticks[1] = 10;
- pIns->VolEnv.nNodes = 2;
- InvalidateRect(NULL, FALSE);
- }
- } else
- {
- pIns->dwFlags &= ~ENV_VOLUME;
- for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++)
- {
- if(pSndFile->Chn[nChn].pModInstrument == pIns)
- pSndFile->Chn[nChn].dwFlags &= ~CHN_VOLENV;
- }
- }
- return true;
- }
- }
- return false;
+ if(pModDoc == nullptr) return false;
+ CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return false;
+ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
+ if(pIns == nullptr) return false;
+
+ return EnvToggleEnv(&pIns->VolEnv, pSndFile, pIns, bEnable, 64, CHN_VOLENV);
}
@@ -758,37 +564,13 @@
//----------------------------------------------
{
CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
- {
- if (bEnable)
- {
- pIns->dwFlags |= ENV_PANNING;
- if (!pIns->PanEnv.nNodes)
- {
- pIns->PanEnv.Values[0] = 32;
- pIns->PanEnv.Values[1] = 32;
- pIns->PanEnv.Ticks[0] = 0;
- pIns->PanEnv.Ticks[1] = 10;
- pIns->PanEnv.nNodes = 2;
- InvalidateRect(NULL, FALSE);
- }
- } else
- {
- pIns->dwFlags &= ~ENV_PANNING;
- for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++)
- {
- if(pSndFile->Chn[nChn].pModInstrument == pIns)
- pSndFile->Chn[nChn].dwFlags &= ~CHN_PANENV;
- }
- }
- return true;
- }
- }
- return false;
+ if(pModDoc == nullptr) return false;
+ CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return false;
+ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
+ if(pIns == nullptr) return false;
+
+ return EnvToggleEnv(&pIns->PanEnv, pSndFile, pIns, bEnable, 32, CHN_PANENV);
}
@@ -796,38 +578,14 @@
//------------------------------------------------
{
CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
- {
- if ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)))
- {
- pIns->dwFlags |= ENV_PITCH;
- pIns->dwFlags &= ~ENV_FILTER;
- if (!pIns->PitchEnv.nNodes)
- {
- pIns->PitchEnv.Values[0] = 32;
- pIns->PitchEnv.Values[1] = 32;
- pIns->PitchEnv.Ticks[0] = 0;
- pIns->PitchEnv.Ticks[1] = 10;
- pIns->PitchEnv.nNodes = 2;
- InvalidateRect(NULL, FALSE);
- }
- } else
- {
- pIns->dwFlags &= ~(ENV_PITCH|ENV_FILTER);
- for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++)
- {
- if(pSndFile->Chn[nChn].pModInstrument == pIns)
- pSndFile->Chn[nChn].dwFlags &= ~CHN_PITCHENV;
- }
- }
- return true;
- }
- }
- return false;
+ if(pModDoc == nullptr) return false;
+ CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return false;
+ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
+ if(pIns == nullptr) return false;
+
+ pIns->PitchEnv.dwFlags &= ~ENV_FILTER;
+ return EnvToggleEnv(&pIns->PitchEnv, pSndFile, pIns, bEnable, 32, CHN_PITCHENV);
}
@@ -835,38 +593,14 @@
//-------------------------------------------------
{
CModDoc *pModDoc = GetDocument();
- if (pModDoc)
- {
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
- MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
- if (pIns)
- {
- if ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)))
- {
- pIns->dwFlags |= (ENV_PITCH|ENV_FILTER);
- if (!pIns->PitchEnv.nNodes)
- {
- pIns->PitchEnv.Values[0] = 64;
- pIns->PitchEnv.Values[1] = 64;
- pIns->PitchEnv.Ticks[0] = 0;
- pIns->PitchEnv.Ticks[1] = 10;
- pIns->PitchEnv.nNodes = 2;
- InvalidateRect(NULL, FALSE);
- }
- } else
- {
- pIns->dwFlags &= ~(ENV_PITCH|ENV_FILTER);
- // prevent filter envelop from turning into a pitch envelope :)
- for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++)
- {
- if(pSndFile->Chn[nChn].pModInstrument == pIns)
- pSndFile->Chn[nChn].dwFlags &= ~CHN_PITCHENV;
- }
- }
- return true;
- }
- }
- return false;
+ if(pModDoc == nullptr) return false;
+ CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return false;
+ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument];
+ if(pIns == nullptr) return false;
+
+ pIns->PitchEnv.dwFlags &= ~ENV_FILTER;
+ return EnvToggleEnv(&pIns->PitchEnv, pSndFile, pIns, bEnable, 64, CHN_PITCHENV, ENV_FILTER);
}
@@ -1123,11 +857,11 @@
{
DrawGrid(&m_dcMemMain, pSndFile->m_nMusicSpeed);
}
- if (m_nEnv != ENV_VOLUME)
- {
- m_dcMemMain.MoveTo(0, ymed);
- m_dcMemMain.LineTo(m_rcClient.right, ymed);
- }
+
+ // Middle line (half volume or pitch / panning center)
+ m_dcMemMain.MoveTo(0, ymed);
+ m_dcMemMain.LineTo(m_rcClient.right, ymed);
+
m_dcMemMain.SelectObject(CMainFrame::penDarkGray);
// Drawing Loop Start/End
if (EnvGetLoop())
@@ -1226,7 +960,7 @@
}
bool CViewInstrument::EnvRemovePoint()
-//--------------------------------------
+//------------------------------------
{
CModDoc *pModDoc = GetDocument();
if ((pModDoc) && (m_nDragItem) && (m_nDragItem-1 <= EnvGetLastPoint()))
@@ -1292,7 +1026,7 @@
cDefaultValue = 32;
break;
case ENV_PITCH:
- cDefaultValue = (pIns->dwFlags & ENV_FILTER) ? 64 : 32;
+ cDefaultValue = (pIns->PitchEnv.dwFlags & ENV_FILTER) ? 64 : 32;
break;
default:
return false;
@@ -1659,7 +1393,7 @@
if (nVal > 64) nVal = 64;
if (nTick < 0) nTick = 0;
if (nTick <= EnvGetReleaseNodeTick() + 1 || EnvGetReleaseNode() == ENV_RELEASE_NODE_UNSET) {
- int displayVal = (m_nEnv != ENV_VOLUME && !(m_nEnv == ENV_PITCH && (pIns->dwFlags & ENV_FILTER))) ? nVal - 32 : nVal;
+ int displayVal = (m_nEnv != ENV_VOLUME && !(m_nEnv == ENV_PITCH && (pIns->PitchEnv.dwFlags & ENV_FILTER))) ? nVal - 32 : nVal;
wsprintf(s, "Tick %d, [%d]", nTick, displayVal);
} else {
int displayVal = (nVal - EnvGetReleaseNodeValue()) * 2;
@@ -2468,10 +2202,11 @@
}
+
+// Get a pointer to the currently selected envelope.
INSTRUMENTENVELOPE *CViewInstrument::GetEnvelopePtr() const
//---------------------------------------------------------
{
- // Get a pointer to the currently selected envelope.
// First do some standard checks...
CModDoc *pModDoc = GetDocument();
if(pModDoc == nullptr) return nullptr;
Modified: trunk/OpenMPT/mptrack/View_ins.h
===================================================================
--- trunk/OpenMPT/mptrack/View_ins.h 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/View_ins.h 2009-11-07 21:40:01 UTC (rev 415)
@@ -18,7 +18,8 @@
RECT m_rcClient;
bool m_baPlayingNote[128]; //rewbs.instViewNNA
INSTRUMENTINDEX m_nInstrument;
- UINT m_nEnv, m_nDragItem, m_nBtnMouseOver, m_nPlayingChannel;
+ enmEnvelopeTypes m_nEnv;
+ UINT m_nDragItem, m_nBtnMouseOver, m_nPlayingChannel;
DWORD m_dwStatus;
DWORD m_NcButtonState[ENV_LEFTBAR_BUTTONS];
DWORD m_dwNotifyPos[MAX_CHANNELS];
@@ -39,37 +40,64 @@
CViewInstrument();
DECLARE_SERIAL(CViewInstrument)
-public:
- void UpdateScrollSize();
- BOOL SetCurrentInstrument(INSTRUMENTINDEX nIns, UINT m_nEnv=0);
- INSTRUMENTENVELOPE *GetEnvelopePtr() const;
+protected:
+ ////////////////////////
+ // Envelope get stuff
+
+ // Flags
+ bool EnvGetFlag(const DWORD dwFlag) const;
+ bool EnvGetLoop() const {return EnvGetFlag(ENV_LOOP);};
+ bool EnvGetSustain() const {return EnvGetFlag(ENV_SUSTAIN);};
+ bool EnvGetCarry() const {return EnvGetFlag(ENV_CARRY);};
+
+ // Misc.
UINT EnvGetTick(int nPoint) const;
UINT EnvGetValue(int nPoint) const;
UINT EnvGetLastPoint() const;
UINT EnvGetNumPoints() const;
+
+ // Get loop points
UINT EnvGetLoopStart() const;
UINT EnvGetLoopEnd() const;
UINT EnvGetSustainStart() const;
UINT EnvGetSustainEnd() const;
- bool EnvGetLoop() const;
- bool EnvGetSustain() const;
- bool EnvGetCarry() const;
+
+ // Get envelope status
bool EnvGetVolEnv() const;
bool EnvGetPanEnv() const;
bool EnvGetPitchEnv() const;
bool EnvGetFilterEnv() const;
+
+ ////////////////////////
+ // Envelope set stuff
+
+ // Flags
+ bool EnvSetFlag(const DWORD dwFlag, const bool bEnable) const;
+ bool EnvSetLoop(bool bEnable) const {return EnvSetFlag(ENV_LOOP, bEnable);};
+ bool EnvSetSustain(bool bEnable) const {return EnvSetFlag(ENV_SUSTAIN, bEnable);};
+ bool EnvSetCarry(bool bEnable) const {return EnvSetFlag(ENV_CARRY, bEnable);};
+
+ // Misc.
bool EnvSetValue(int nPoint, int nTick=-1, int nValue=-1);
+
+ // Set loop points
bool EnvSetLoopStart(int nPoint);
bool EnvSetLoopEnd(int nPoint);
bool EnvSetSustainStart(int nPoint);
bool EnvSetSustainEnd(int nPoint);
- bool EnvSetLoop(bool bLoop);
- bool EnvSetSustain(bool bSustain);
- bool EnvSetCarry(bool bCarry);
+
+ // Set envelope status
+ bool EnvToggleEnv(INSTRUMENTENVELOPE *pEnv, CSoundFile *pSndFile, MODINSTRUMENT *pIns, bool bEnable, BYTE cDefaultValue, DWORD dwChanFlag, DWORD dwExtraFlags = 0);
bool EnvSetVolEnv(bool bEnable);
bool EnvSetPanEnv(bool bEnable);
bool EnvSetPitchEnv(bool bEnable);
bool EnvSetFilterEnv(bool bEnable);
+
+ ////////////////////////
+ // Misc stuff
+ void UpdateScrollSize();
+ BOOL SetCurrentInstrument(INSTRUMENTINDEX nIns, enmEnvelopeTypes m_nEnv = ENV_VOLUME);
+ INSTRUMENTENVELOPE *GetEnvelopePtr() const;
UINT EnvInsertPoint();
bool EnvRemovePoint();
int TickToScreen(int nTick) const;
Modified: trunk/OpenMPT/mptrack/view_com.cpp
===================================================================
--- trunk/OpenMPT/mptrack/view_com.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/mptrack/view_com.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -383,9 +383,9 @@
case INSLIST_ENVELOPES:
if (pIns)
{
- if (pIns->dwFlags & ENV_VOLUME) strcat(s, "Vol");
- if (pIns->dwFlags & ENV_PANNING) { if (s[0]) strcat(s, ", "); strcat(s, "Pan"); }
- if (pIns->dwFlags & ENV_PITCH) { if (s[0]) strcat(s, ", "); strcat(s, (pIns->dwFlags & ENV_FILTER) ? "Filter" : "Pitch"); }
+ if (pIns->VolEnv.dwFlags & ENV_ENABLED) strcat(s, "Vol");
+ if (pIns->PanEnv.dwFlags & ENV_ENABLED) { if (s[0]) strcat(s, ", "); strcat(s, "Pan"); }
+ if (pIns->PitchEnv.dwFlags & ENV_ENABLED) { if (s[0]) strcat(s, ", "); strcat(s, (pIns->PitchEnv.dwFlags & ENV_FILTER) ? "Filter" : "Pitch"); }
}
break;
case INSLIST_FILENAME:
Modified: trunk/OpenMPT/soundlib/Dlsbank.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Dlsbank.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Dlsbank.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -1772,7 +1772,7 @@
// Volume Envelope
if ((part->wVolAttack) || (part->wVolDecay < 20*50) || (part->nVolSustainLevel) || (part->wVolRelease < 20*50))
{
- pIns->dwFlags |= ENV_VOLUME;
+ pIns->VolEnv.dwFlags |= ENV_ENABLED;
// Delay section
// -> DLS level 2
// Attack section
@@ -1830,10 +1830,10 @@
nPoint++;
}
}
- pIns->dwFlags |= ENV_VOLSUSTAIN;
+ pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
} else
{
- pIns->dwFlags |= ENV_VOLSUSTAIN;
+ pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
pIns->VolEnv.Ticks[nPoint] = (WORD)(pIns->VolEnv.Ticks[nPoint-1]+1);
pIns->VolEnv.Values[nPoint] = pIns->VolEnv.Values[nPoint-1];
nPoint++;
@@ -1884,10 +1884,10 @@
if (pDlsIns->ulBank & F_INSTRUMENT_DRUMS)
{
// Create a default envelope for drums
- pIns->dwFlags &= ~ENV_VOLSUSTAIN;
- if (!(pIns->dwFlags & ENV_VOLUME))
+ pIns->VolEnv.dwFlags &= ~ENV_SUSTAIN;
+ if (!(pIns->VolEnv.dwFlags & ENV_ENABLED))
{
- pIns->dwFlags |= ENV_VOLUME;
+ pIns->VolEnv.dwFlags |= ENV_ENABLED;
pIns->VolEnv.Ticks[0] = 0;
pIns->VolEnv.Values[0] = 64;
pIns->VolEnv.Ticks[1] = 5;
Modified: trunk/OpenMPT/soundlib/LOAD_DBM.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2009-11-07 21:40:01 UTC (rev 415)
@@ -166,7 +166,7 @@
pIns->nGlobalVol = 64;
pIns->nPan = BigEndianW(pih->panning);
if ((pIns->nPan) && (pIns->nPan < 256))
- pIns->dwFlags = ENV_SETPANNING;
+ pIns->dwFlags = INS_SETPANNING;
else
pIns->nPan = 128;
pIns->nPPC = 5*12;
@@ -218,9 +218,9 @@
{
MODINSTRUMENT *pIns = Instruments[nins];
- if (peh->flags & 1) pIns->dwFlags |= ENV_VOLUME;
- if (peh->flags & 2) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (peh->flags & 4) pIns->dwFlags |= ENV_VOLLOOP;
+ if (peh->flags & 1) pIns->VolEnv.dwFlags |= ENV_ENABLED;
+ if (peh->flags & 2) pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
+ if (peh->flags & 4) pIns->VolEnv.dwFlags |= ENV_LOOP;
pIns->VolEnv.nNodes = peh->numpoints + 1;
if (pIns->VolEnv.nNodes > MAX_ENVPOINTS) pIns->VolEnv.nNodes = MAX_ENVPOINTS;
pIns->VolEnv.nLoopStart = peh->loopbegin;
Modified: trunk/OpenMPT/soundlib/Load_ams.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_ams.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Load_ams.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -401,9 +401,9 @@
}
pIns->nFadeOut = (((lpStream[dwMemPos+2] & 0x0F) << 8) | (lpStream[dwMemPos+1])) << 3;
UINT envflags = lpStream[dwMemPos+3];
- if (envflags & 0x01) pIns->dwFlags |= ENV_VOLLOOP;
- if (envflags & 0x02) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (envflags & 0x04) pIns->dwFlags |= ENV_VOLUME;
+ if (envflags & 0x01) pIns->VolEnv.dwFlags |= ENV_LOOP;
+ if (envflags & 0x02) pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
+ if (envflags & 0x04) pIns->VolEnv.dwFlags |= ENV_ENABLED;
dwMemPos += 5;
// Read Samples
for (UINT ismp=0; ismp<pSmp->samples; ismp++)
Modified: trunk/OpenMPT/soundlib/Load_imf.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_imf.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Load_imf.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -135,6 +135,7 @@
};
static void import_imf_effect(MODCOMMAND *note)
+//---------------------------------------------
{
BYTE n;
// fix some of them
@@ -224,17 +225,13 @@
}
}
-static unsigned int envflags[3][3] = {
- {ENV_VOLUME, ENV_VOLSUSTAIN, ENV_VOLLOOP},
- {ENV_PANNING, ENV_PANSUSTAIN, ENV_PANLOOP},
- {ENV_PITCH | ENV_FILTER, ENV_PITCHSUSTAIN, ENV_PITCHLOOP},
-};
-
-static void load_imf_envelope(MODINSTRUMENT *ins, INSTRUMENTENVELOPE *env, IMFINSTRUMENT *imfins, int e)
+static void load_imf_envelope(INSTRUMENTENVELOPE *env, IMFINSTRUMENT *imfins, int e)
+//----------------------------------------------------------------------------------
{
UINT min = 0; // minimum tick value for next node
int shift = (e == IMF_ENV_VOL) ? 0 : 2;
+ env->dwFlags = ((imfins->env[e].flags & 1) ? ENV_ENABLED : 0) | ((imfins->env[e].flags & 2) ? ENV_SUSTAIN : 0) | ((imfins->env[e].flags & 4) ? ENV_LOOP : 0);
env->nNodes = CLAMP(imfins->env[e].points, 2, 25);
env->nLoopStart = imfins->env[e].loop_start;
env->nLoopEnd = imfins->env[e].loop_end;
@@ -249,16 +246,10 @@
env->Values[n] = (BYTE)min(nValue, 64);
min = nTick + 1;
}
- // this would be less retarded if the envelopes all had their own flags...
- if (imfins->env[e].flags & 1)
- ins->dwFlags |= envflags[e][0];
- if (imfins->env[e].flags & 2)
- ins->dwFlags |= envflags[e][1];
- if (imfins->env[e].flags & 4)
- ins->dwFlags |= envflags[e][2];
}
bool CSoundFile::ReadIMF(const LPCBYTE lpStream, const DWORD dwMemLength)
+//-----------------------------------------------------------------------
{
#define ASSERT_CAN_READ(x) \
if( dwMemPos > dwMemLength || x > dwMemLength - dwMemPos ) return false;
@@ -487,12 +478,13 @@
pIns->nFadeOut = imfins.fadeout;
pIns->nGlobalVol = 128;
- load_imf_envelope(pIns, &pIns->VolEnv, &imfins, IMF_ENV_VOL);
- load_imf_envelope(pIns, &pIns->PanEnv, &imfins, IMF_ENV_PAN);
- load_imf_envelope(pIns, &pIns->PitchEnv, &imfins, IMF_ENV_FILTER);
+ load_imf_envelope(&pIns->VolEnv, &imfins, IMF_ENV_VOL);
+ load_imf_envelope(&pIns->PanEnv, &imfins, IMF_ENV_PAN);
+ load_imf_envelope(&pIns->PitchEnv, &imfins, IMF_ENV_FILTER);
+ if((pIns->PitchEnv.dwFlags & ENV_ENABLED) != 0) pIns->PitchEnv.dwFlags |= ENV_FILTER;
// hack to get === to stop notes (from modplug's xm loader)
- if (!(pIns->dwFlags & ENV_VOLUME) && !pIns->nFadeOut)
+ if (!(pIns->VolEnv.dwFlags & ENV_ENABLED) && !pIns->nFadeOut)
pIns->nFadeOut = 8192;
// read this instrument's samples
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -216,10 +216,37 @@
return (value > 9) ? 9 : value;
}
+// Convert MPT's internal nvelope format into an IT/MPTM envelope.
+void MPTEnvToIT(const INSTRUMENTENVELOPE *mptEnv, ITENVELOPE *itEnv, const BYTE envOffset)
+//----------------------------------------------------------------------------------------
+{
+ if(mptEnv->dwFlags & ENV_ENABLED) itEnv->flags |= 1;
+ if(mptEnv->dwFlags & ENV_LOOP) itEnv->flags |= 2;
+ if(mptEnv->dwFlags & ENV_SUSTAIN) itEnv->flags |= 4;
+ if(mptEnv->dwFlags & ENV_CARRY) itEnv->flags |= 8;
+ itEnv->num = (BYTE)min(mptEnv->nNodes, 25);
+ itEnv->lpb = (BYTE)mptEnv->nLoopStart;
+ itEnv->lpe = (BYTE)mptEnv->nLoopEnd;
+ itEnv->slb = (BYTE)mptEnv->nSustainStart;
+ itEnv->sle = (BYTE)mptEnv->nSustainEnd;
+
+ // Attention: Full MPTM envelope is stored in extended instrument properties
+ for (UINT ev = 0; ev < 25; ev++)
+ {
+ itEnv->data[ev * 3] = mptEnv->Values[ev] - envOffset;
+ itEnv->data[ev * 3 + 1] = mptEnv->Ticks[ev] & 0xFF;
+ itEnv->data[ev * 3 + 2] = mptEnv->Ticks[ev] >> 8;
+ }
+}
+
// Convert IT/MPTM envelope data into MPT's internal envelope format - To be used by ITInstrToMPT()
void ITEnvToMPT(const ITENVELOPE *itEnv, INSTRUMENTENVELOPE *mptEnv, const BYTE envOffset, const int iEnvMax)
//-----------------------------------------------------------------------------------------------------------
{
+ if(itEnv->flags & 1) mptEnv->dwFlags |= ENV_ENABLED;
+ if(itEnv->flags & 2) mptEnv->dwFlags |= ENV_LOOP;
+ if(itEnv->flags & 4) mptEnv->dwFlags |= ENV_SUSTAIN;
+ if(itEnv->flags & 8) mptEnv->dwFlags |= ENV_CARRY;
mptEnv->nNodes = min(itEnv->num, iEnvMax);
mptEnv->nLoopStart = itEnv->lpb;
mptEnv->nLoopEnd = itEnv->lpe;
@@ -262,9 +289,9 @@
if (note < 128) pIns->NoteMap[j] = note+1;
else if (note >= 0xFE) pIns->NoteMap[j] = note;
}
- if (pis->flags & 0x01) pIns->dwFlags |= ENV_VOLUME;
- if (pis->flags & 0x02) pIns->dwFlags |= ENV_VOLLOOP;
- if (pis->flags & 0x04) pIns->dwFlags |= ENV_VOLSUSTAIN;
+ if (pis->flags & 0x01) pIns->VolEnv.dwFlags |= ENV_ENABLED;
+ if (pis->flags & 0x02) pIns->VolEnv.dwFlags |= ENV_LOOP;
+ if (pis->flags & 0x04) pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
pIns->VolEnv.nLoopStart = pis->vls;
pIns->VolEnv.nLoopEnd = pis->vle;
pIns->VolEnv.nSustainStart = pis->sls;
@@ -373,24 +400,12 @@
// Volume Envelope
- if (pis->volenv.flags & 1) pIns->dwFlags |= ENV_VOLUME;
- if (pis->volenv.flags & 2) pIns->dwFlags |= ENV_VOLLOOP;
- if (pis->volenv.flags & 4) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (pis->volenv.flags & 8) pIns->dwFlags |= ENV_VOLCARRY;
ITEnvToMPT(&pis->volenv, &pIns->VolEnv, 0, iEnvMax);
// Panning Envelope
- if (pis->panenv.flags & 1) pIns->dwFlags |= ENV_PANNING;
- if (pis->panenv.flags & 2) pIns->dwFlags |= ENV_PANLOOP;
- if (pis->panenv.flags & 4) pIns->dwFlags |= ENV_PANSUSTAIN;
- if (pis->panenv.flags & 8) pIns->dwFlags |= ENV_PANCARRY;
ITEnvToMPT(&pis->panenv, &pIns->PanEnv, 32, iEnvMax);
// Pitch Envelope
- if (pis->pitchenv.flags & 1) pIns->dwFlags |= ENV_PITCH;
- if (pis->pitchenv.flags & 2) pIns->dwFlags |= ENV_PITCHLOOP;
- if (pis->pitchenv.flags & 4) pIns->dwFlags |= ENV_PITCHSUSTAIN;
- if (pis->pitchenv.flags & 8) pIns->dwFlags |= ENV_PITCHCARRY;
- if (pis->pitchenv.flags & 0x80) pIns->dwFlags |= ENV_FILTER;
ITEnvToMPT(&pis->pitchenv, &pIns->PitchEnv, 32, iEnvMax);
+ if (pis->pitchenv.flags & 0x80) pIns->PitchEnv.dwFlags |= ENV_FILTER;
pIns->nNNA = pis->nna;
pIns->nDCT = pis->dct;
@@ -406,11 +421,11 @@
pIns->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL;
pIns->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE;
if (pIns->nPan > 256) pIns->nPan = 128;
- if (pis->dfp < 0x80) pIns->dwFlags |= ENV_SETPANNING;
+ if (pis->dfp < 0x80) pIns->dwFlags |= INS_SETPANNING;
}
- if ((pIns->VolEnv.nLoopStart >= iEnvMax) || (pIns->VolEnv.nLoopEnd >= iEnvMax)) pIns->dwFlags &= ~ENV_VOLLOOP;
- if ((pIns->VolEnv.nSustainStart >= iEnvMax) || (pIns->VolEnv.nSustainEnd >= iEnvMax)) pIns->dwFlags &= ~ENV_VOLSUSTAIN;
+ if ((pIns->VolEnv.nLoopStart >= iEnvMax) || (pIns->VolEnv.nLoopEnd >= iEnvMax)) pIns->VolEnv.dwFlags &= ~ENV_LOOP;
+ if ((pIns->VolEnv.nSustainStart >= iEnvMax) || (pIns->VolEnv.nSustainEnd >= iEnvMax)) pIns->VolEnv.dwFlags &= ~ENV_SUSTAIN;
return returnVal; //return offset
}
@@ -1995,7 +2010,7 @@
iti.ppc = pIns->nPPC;
iti.gbv = (BYTE)(pIns->nGlobalVol << 1);
iti.dfp = (BYTE)pIns->nPan >> 2;
- if (!(pIns->dwFlags & ENV_SETPANNING)) iti.dfp |= 0x80;
+ if (!(pIns->dwFlags & INS_SETPANNING)) iti.dfp |= 0x80;
iti.rv = pIns->nVolSwing;
iti.rp = pIns->nPanSwing;
iti.ifc = pIns->nIFC;
@@ -2015,49 +2030,12 @@
keyboardex[i] = (smp>>8);
} else keyboardex[i] = 0;
// Writing Volume envelope
- if (pIns->dwFlags & ENV_VOLUME) iti.volenv.flags |= 0x01;
- if (pIns->dwFlags & ENV_VOLLOOP) iti.volenv.flags |= 0x02;
- if (pIns->dwFlags & ENV_VOLSUSTAIN) iti.volenv.flags |= 0x04;
- if (pIns->dwFlags & ENV_VOLCARRY) iti.volenv.flags |= 0x08;
- iti.volenv.num = (BYTE)pIns->VolEnv.nNodes;
- iti.volenv.lpb = (BYTE)pIns->VolEnv.nLoopStart;
- iti.volenv.lpe = (BYTE)pIns->VolEnv.nLoopEnd;
- iti.volenv.slb = pIns->VolEnv.nSustainStart;
- iti.volenv.sle = pIns->VolEnv.nSustainEnd;
+ MPTEnvToIT(&pIns->VolEnv, &iti.volenv, 0);
// Writing Panning envelope
- if (pIns->dwFlags & ENV_PANNING) iti.panenv.flags |= 0x01;
- if (pIns->dwFlags & ENV_PANLOOP) iti.panenv.flags |= 0x02;
- if (pIns->dwFlags & ENV_PANSUSTAIN) iti.panenv.flags |= 0x04;
- if (pIns->dwFlags & ENV_PANCARRY) iti.panenv.flags |= 0x08;
- iti.panenv.num = (BYTE)pIns->PanEnv.nNodes;
- iti.panenv.lpb = (BYTE)pIns->PanEnv.nLoopStart;
- iti.panenv.lpe = (BYTE)pIns->PanEnv.nLoopEnd;
- iti.panenv.slb = pIns->PanEnv.nSustainStart;
- iti.panenv.sle = pIns->PanEnv.nSustainEnd;
+ MPTEnvToIT(&pIns->PanEnv, &iti.panenv, 32);
// Writing Pitch Envelope
- if (pIns->dwFlags & ENV_PITCH) iti.pitchenv.flags |= 0x01;
- if (pIns->dwFlags & ENV_PITCHLOOP) iti.pitchenv.flags |= 0x02;
- if (pIns->dwFlags & ENV_PITCHSUSTAIN) iti.pitchenv.flags |= 0x04;
- if (pIns->dwFlags & ENV_PITCHCARRY) iti.pitchenv.flags |= 0x08;
- if (pIns->dwFlags & ENV_FILTER) iti.pitchenv.flags |= 0x80;
- iti.pitchenv.num = (BYTE)pIns->PitchEnv.nNodes;
- iti.pitchenv.lpb = (BYTE)pIns->PitchEnv.nLoopStart;
- iti.pitchenv.lpe = (BYTE)pIns->PitchEnv.nLoopEnd;
- iti.pitchenv.slb = (BYTE)pIns->PitchEnv.nSustainStart;
- iti.pitchenv.sle = (BYTE)pIns->PitchEnv.nSustainEnd;
- // Writing Envelopes data
- for (UINT ev=0; ev<25; ev++)
- {
- iti.volenv.data[ev*3] = pIns->VolEnv.Values[ev];
- iti.volenv.data[ev*3+1] = pIns->VolEnv.Ticks[ev] & 0xFF;
- iti.volenv.data[ev*3+2] = pIns->VolEnv.Ticks[ev] >> 8;
- iti.panenv.data[ev*3] = pIns->PanEnv.Values[ev] - 32;
- iti.panenv.data[ev*3+1] = pIns->PanEnv.Ticks[ev] & 0xFF;
- iti.panenv.data[ev*3+2] = pIns->PanEnv.Ticks[ev] >> 8;
- iti.pitchenv.data[ev*3] = pIns->PitchEnv.Values[ev] - 32;
- iti.pitchenv.data[ev*3+1] = pIns->PitchEnv.Ticks[ev] & 0xFF;
- iti.pitchenv.data[ev*3+2] = pIns->PitchEnv.Ticks[ev] >> 8;
- }
+ MPTEnvToIT(&pIns->PitchEnv, &iti.pitchenv, 32);
+ if (pIns->PitchEnv.dwFlags & ENV_FILTER) iti.pitchenv.flags |= 0x80;
} else
// Save Empty Instrument
{
@@ -2636,7 +2614,7 @@
iti.ppc = pIns->nPPC;
iti.gbv = (BYTE)(pIns->nGlobalVol << 1);
iti.dfp = (BYTE)pIns->nPan >> 2;
- if (!(pIns->dwFlags & ENV_SETPANNING)) iti.dfp |= 0x80;
+ if (!(pIns->dwFlags & INS_SETPANNING)) iti.dfp |= 0x80;
iti.rv = pIns->nVolSwing;
iti.rp = pIns->nPanSwing;
iti.ifc = pIns->nIFC;
@@ -2656,49 +2634,12 @@
keyboardex[i] = (smp>>8);
} else keyboardex[i] = 0;
// Writing Volume envelope
- if (pIns->dwFlags & ENV_VOLUME) iti.volenv.flags |= 0x01;
- if (pIns->dwFlags & ENV_VOLLOOP) iti.volenv.flags |= 0x02;
- if (pIns->dwFlags & ENV_VOLSUSTAIN) iti.volenv.flags |= 0x04;
- if (pIns->dwFlags & ENV_VOLCARRY) iti.volenv.flags |= 0x08;
- iti.volenv.num = (BYTE)pIns->VolEnv.nNodes;
- iti.volenv.lpb = (BYTE)pIns->VolEnv.nLoopStart;
- iti.volenv.lpe = (BYTE)pIns->VolEnv.nLoopEnd;
- iti.volenv.slb = pIns->VolEnv.nSustainStart;
- iti.volenv.sle = pIns->VolEnv.nSustainEnd;
+ MPTEnvToIT(&pIns->VolEnv, &iti.volenv, 0);
// Writing Panning envelope
- if (pIns->dwFlags & ENV_PANNING) iti.panenv.flags |= 0x01;
- if (pIns->dwFlags & ENV_PANLOOP) iti.panenv.flags |= 0x02;
- if (pIns->dwFlags & ENV_PANSUSTAIN) iti.panenv.flags |= 0x04;
- if (pIns->dwFlags & ENV_PANCARRY) iti.panenv.flags |= 0x08;
- iti.panenv.num = (BYTE)pIns->PanEnv.nNodes;
- iti.panenv.lpb = (BYTE)pIns->PanEnv.nLoopStart;
- iti.panenv.lpe = (BYTE)pIns->PanEnv.nLoopEnd;
- iti.panenv.slb = pIns->PanEnv.nSustainStart;
- iti.panenv.sle = pIns->PanEnv.nSustainEnd;
+ MPTEnvToIT(&pIns->PanEnv, &iti.panenv, 32);
// Writing Pitch Envelope
- if (pIns->dwFlags & ENV_PITCH) iti.pitchenv.flags |= 0x01;
- if (pIns->dwFlags & ENV_PITCHLOOP) iti.pitchenv.flags |= 0x02;
- if (pIns->dwFlags & ENV_PITCHSUSTAIN) iti.pitchenv.flags |= 0x04;
- if (pIns->dwFlags & ENV_PITCHCARRY) iti.pitchenv.flags |= 0x08;
- if (pIns->dwFlags & ENV_FILTER) iti.pitchenv.flags |= 0x80;
- iti.pitchenv.num = (BYTE)pIns->PitchEnv.nNodes;
- iti.pitchenv.lpb = (BYTE)pIns->PitchEnv.nLoopStart;
- iti.pitchenv.lpe = (BYTE)pIns->PitchEnv.nLoopEnd;
- iti.pitchenv.slb = (BYTE)pIns->PitchEnv.nSustainStart;
- iti.pitchenv.sle = (BYTE)pIns->PitchEnv.nSustainEnd;
- // Writing Envelopes data
- for (UINT ev=0; ev<25; ev++)
- {
- iti.volenv.data[ev*3] = pIns->VolEnv.Values[ev];
- iti.volenv.data[ev*3+1] = pIns->VolEnv.Ticks[ev] & 0xFF;
- iti.volenv.data[ev*3+2] = pIns->VolEnv.Ticks[ev] >> 8;
- iti.panenv.data[ev*3] = pIns->PanEnv.Values[ev] - 32;
- iti.panenv.data[ev*3+1] = pIns->PanEnv.Ticks[ev] & 0xFF;
- iti.panenv.data[ev*3+2] = pIns->PanEnv.Ticks[ev] >> 8;
- iti.pitchenv.data[ev*3] = pIns->PitchEnv.Values[ev] - 32;
- iti.pitchenv.data[ev*3+1] = pIns->PitchEnv.Ticks[ev] & 0xFF;
- iti.pitchenv.data[ev*3+2] = pIns->PitchEnv.Ticks[ev] >> 8;
- }
+ MPTEnvToIT(&pIns->PitchEnv, &iti.pitchenv, 32);
+ if (pIns->PitchEnv.dwFlags & ENV_FILTER) iti.pitchenv.flags |= 0x80;
} else
// Save Empty Instrument
{
Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -95,6 +95,30 @@
}
+// Convert MDL envelope data (env points and flags)
+void ConvertMDLEnvelope(const unsigned char *pMDLEnv, INSTRUMENTENVELOPE *pMPTEnv)
+//--------------------------------------------------------------------------------
+{
+ WORD nCurTick = 1;
+ pMPTEnv->nNodes = 15;
+ for (UINT nTick = 0; nTick < 15; nTick++)
+ {
+ if (nTick) nCurTick += pMDLEnv[nTick * 2 + 1];
+ pMPTEnv->Ticks[nTick] = nCurTick;
+ pMPTEnv->Values[nTick] = pMDLEnv[nTick * 2 + 2];
+ if (!pMDLEnv[nTick * 2 + 1]) // last point reached
+ {
+ pMPTEnv->nNodes = nTick + 1;
+ break;
+ }
+ }
+ pMPTEnv->nSustainStart = pMPTEnv->nSustainEnd = pMDLEnv[31] & 0x0F;
+ pMPTEnv->dwFlags |= ((pMDLEnv[31] & 0x10) ? ENV_SUSTAIN : 0) | ((pMDLEnv[31] & 0x20) ? ENV_LOOP : 0);
+ pMPTEnv->nLoopStart = pMDLEnv[32] & 0x0F;
+ pMPTEnv->nLoopEnd = pMDLEnv[32] >> 4;
+}
+
+
void UnpackMDLTrack(MODCOMMAND *pat, UINT nChannels, UINT nRows, UINT nTrack, const BYTE *lpTracks)
//-------------------------------------------------------------------------------------------------
{
@@ -359,13 +383,13 @@
// Use volume envelope ?
if (ps[3] & 0x80)
{
- pIns->dwFlags |= ENV_VOLUME;
+ pIns->VolEnv.dwFlags |= ENV_ENABLED;
insvolenv[nins] = (ps[3] & 0x3F) + 1;
}
// Use panning envelope ?
if (ps[5] & 0x80)
{
- pIns->dwFlags |= ENV_PANNING;
+ pIns->PanEnv.dwFlags |= ENV_ENABLED;
inspanenv[nins] = (ps[5] & 0x3F) + 1;
}
}
@@ -495,56 +519,24 @@
// Set up envelopes
for (UINT iIns=1; iIns<=m_nInstruments; iIns++) if (Instruments[iIns])
{
- MODINSTRUMENT *pIns = Instruments[iIns];
// Setup volume envelope
if ((nvolenv) && (pvolenv) && (insvolenv[iIns]))
{
LPCBYTE pve = pvolenv;
- for (UINT nve=0; nve<nvolenv; nve++, pve+=33) if (pve[0]+1 == insvolenv[iIns])
+ for (UINT nve = 0; nve < nvolenv; nve++, pve += 33)
{
- WORD vtick = 1;
- pIns->VolEnv.nNodes = 15;
- for (UINT iv=0; iv<15; iv++)
- {
- if (iv) vtick += pve[iv*2+1];
- pIns->VolEnv.Ticks[iv] = vtick;
- pIns->VolEnv.Values[iv] = pve[iv*2+2];
- if (!pve[iv*2+1])
- {
- pIns->VolEnv.nNodes = iv+1;
- break;
- }
- }
- pIns->VolEnv.nSustainStart = pIns->VolEnv.nSustainEnd = pve[31] & 0x0F;
- if (pve[31] & 0x10) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (pve[31] & 0x20) pIns->dwFlags |= ENV_VOLLOOP;
- pIns->VolEnv.nLoopStart = pve[32] & 0x0F;
- pIns->VolEnv.nLoopEnd = pve[32] >> 4;
+ if (pve[0] + 1 == insvolenv[iIns])
+ ConvertMDLEnvelope(pve, &Instruments[iIns]->VolEnv);
}
}
// Setup panning envelope
if ((npanenv) && (ppanenv) && (inspanenv[iIns]))
{
LPCBYTE ppe = ppanenv;
- for (UINT npe=0; npe<npanenv; npe++, ppe+=33) if (ppe[0]+1 == inspanenv[iIns])
+ for (UINT npe = 0; npe < npanenv; npe++, ppe += 33)
{
- WORD vtick = 1;
- pIns->PanEnv.nNodes = 15;
- for (UINT iv=0; iv<15; iv++)
- {
- if (iv) vtick += ppe[iv*2+1];
- pIns->PanEnv.Ticks[iv] = vtick;
- pIns->PanEnv.Values[iv] = ppe[iv*2+2];
- if (!ppe[iv*2+1])
- {
- pIns->PanEnv.nNodes = iv+1;
- break;
- }
- }
- if (ppe[31] & 0x10) pIns->dwFlags |= ENV_PANSUSTAIN;
- if (ppe[31] & 0x20) pIns->dwFlags |= ENV_PANLOOP;
- pIns->PanEnv.nLoopStart = ppe[32] & 0x0F;
- pIns->PanEnv.nLoopEnd = ppe[32] >> 4;
+ if (ppe[0] + 1 == inspanenv[iIns])
+ ConvertMDLEnvelope(ppe, &Instruments[iIns]->PanEnv);
}
}
}
Modified: trunk/OpenMPT/soundlib/Load_mid.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mid.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Load_mid.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -439,8 +439,8 @@
pIns->Keyboard[j] = m_nSamples;
pIns->NoteMap[j] = (BYTE)mapnote;
}
- pIns->dwFlags |= ENV_VOLUME;
- if (nChannel != MIDI_DRUMCHANNEL) pIns->dwFlags |= ENV_VOLSUSTAIN;
+ pIns->VolEnv.dwFlags |= ENV_ENABLED;
+ if (nChannel != MIDI_DRUMCHANNEL) pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
pIns->VolEnv.nNodes = 4;
pIns->VolEnv.Ticks[0] = 0;
pIns->VolEnv.Values[0] = 64;
Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mt2.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -270,7 +270,7 @@
}
// Load Patterns
dwMemPos = dwExtraDataPos + nExtraDataLen;
- for (UINT iPat=0; iPat<pfh->wPatterns; iPat++) if (dwMemPos < dwMemLength-6)
+ for (PATTERNINDEX iPat=0; iPat < pfh->wPatterns; iPat++) if (dwMemPos < dwMemLength - 6)
{
MT2PATTERN *pmp = (MT2PATTERN *)(lpStream+dwMemPos);
UINT wDataLen = (pmp->wDataLen + 1) & ~1;
@@ -411,7 +411,7 @@
SpaceToNullStringFixed(pIns->name, 32);
pIns->nGlobalVol = 64;
pIns->nPan = 128;
- for (UINT i=0; i<NOTE_MAX; i++)
+ for (BYTE i = 0; i < NOTE_MAX; i++)
{
pIns->NoteMap[i] = i+1;
}
@@ -461,59 +461,40 @@
for (UINT iEnv=0; iEnv<4; iEnv++) if (pehdr[iEnv])
{
MT2ENVELOPE *pme = pehdr[iEnv];
- WORD *pEnvPoints = NULL;
- BYTE *pEnvData = NULL;
+ INSTRUMENTENVELOPE *pEnv;
#ifdef MT2DEBUG
Log(" Env %d.%d @%04X: %d points\n", iIns, iEnv, (UINT)(((BYTE *)pme)-lpStream), pme->nPoints);
#endif
+
switch(iEnv)
- {
- // Volume Envelope
- case 0:
- if (pme->nFlags & 1) pIns->dwFlags |= ENV_VOLUME;
- if (pme->nFlags & 2) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (pme->nFlags & 4) pIns->dwFlags |= ENV_VOLLOOP;
- pIns->VolEnv.nNodes = (pme->nPoints > 16) ? 16 : pme->nPoints;
- pIns->VolEnv.nSustainStart = pIns->VolEnv.nSustainEnd = pme->nSustainPos;
- pIns->VolEnv.nLoopStart = pme->nLoopStart;
- pIns->VolEnv.nLoopEnd = pme->nLoopEnd;
- pEnvPoints = pIns->VolEnv.Ticks;
- pEnvData = pIns->VolEnv.Values;
+ {
+ case 0: // Volume Envelope
+ pEnv = &pIns->VolEnv;
break;
-
- // Panning Envelope
- case 1:
- if (pme->nFlags & 1) pIns->dwFlags |= ENV_PANNING;
- if (pme->nFlags & 2) pIns->dwFlags |= ENV_PANSUSTAIN;
- if (pme->nFlags & 4) pIns->dwFlags |= ENV_PANLOOP;
- pIns->PanEnv.nNodes = (pme->nPoints > 16) ? 16 : pme->nPoints;
- pIns->PanEnv.nSustainStart = pIns->PanEnv.nSustainEnd = pme->nSustainPos;
- pIns->PanEnv.nLoopStart = pme->nLoopStart;
- pIns->PanEnv.nLoopEnd = pme->nLoopEnd;
- pEnvPoints = pIns->PanEnv.Ticks;
- pEnvData = pIns->PanEnv.Values;
+ case 1: // Panning Envelope
+ pEnv = &pIns->PanEnv;
break;
-
- // Pitch/Filter envelope
- default:
- if (pme->nFlags & 1) pIns->dwFlags |= (iEnv==3) ? (ENV_PITCH|ENV_FILTER) : ENV_PITCH;
- if (pme->nFlags & 2) pIns->dwFlags |= ENV_PITCHSUSTAIN;
- if (pme->nFlags & 4) pIns->dwFlags |= ENV_PITCHLOOP;
- pIns->PitchEnv.nNodes = (pme->nPoints > 16) ? 16 : pme->nPoints;
- pIns->PitchEnv.nSustainStart = pIns->PitchEnv.nSustainEnd = pme->nSustainPos;
- pIns->PitchEnv.nLoopStart = pme->nLoopStart;
- pIns->PitchEnv.nLoopEnd = pme->nLoopEnd;
- pEnvPoints = pIns->PitchEnv.Ticks;
- pEnvData = pIns->PitchEnv.Values;
+ default: // Pitch/Filter envelope
+ pEnv = &pIns->PitchEnv;
+ if ((pme->nFlags & 1) && (iEnv == 3)) pIns->PitchEnv.dwFlags |= ENV_FILTER;
}
+
+ if (pme->nFlags & 1) pEnv->dwFlags |= ENV_ENABLED;
+ if (pme->nFlags & 2) pEnv->dwFlags |= ENV_SUSTAIN;
+ if (pme->nFlags & 4) pEnv->dwFlags |= ENV_LOOP;
+ pEnv->nNodes = (pme->nPoints > 16) ? 16 : pme->nPoints;
+ pEnv->nSustainStart = pEnv->nSustainEnd = pme->nSustainPos;
+ pEnv->nLoopStart = pme->nLoopStart;
+ pEnv->nLoopEnd = pme->nLoopEnd;
+
// Envelope data
- if ((pEnvPoints) && (pEnvData) && (pedata[iEnv]))
+ if (pedata[iEnv])
{
WORD *psrc = pedata[iEnv];
for (UINT i=0; i<16; i++)
{
- pEnvPoints[i] = psrc[i*2];
- pEnvData[i] = (BYTE)psrc[i*2+1];
+ pEnv->Ticks[i] = psrc[i*2];
+ pEnv->Values[i] = (BYTE)psrc[i*2+1];
}
}
}
Modified: trunk/OpenMPT/soundlib/Load_xm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_xm.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Load_xm.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -440,30 +440,30 @@
SetDefaultInstrumentValues(pIns);
pIns->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL;
pIns->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE;
- if (xmsh.vtype & 1) pIns->dwFlags |= ENV_VOLUME;
- if (xmsh.vtype & 2) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (xmsh.vtype & 4) pIns->dwFlags |= ENV_VOLLOOP;
- if (xmsh.ptype & 1) pIns->dwFlags |= ENV_PANNING;
- if (xmsh.ptype & 2) pIns->dwFlags |= ENV_PANSUSTAIN;
- if (xmsh.ptype & 4) pIns->dwFlags |= ENV_PANLOOP;
+ if (xmsh.vtype & 1) pIns->VolEnv.dwFlags |= ENV_ENABLED;
+ if (xmsh.vtype & 2) pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
+ if (xmsh.vtype & 4) pIns->VolEnv.dwFlags |= ENV_LOOP;
+ if (xmsh.ptype & 1) pIns->PanEnv.dwFlags |= ENV_ENABLED;
+ if (xmsh.ptype & 2) pIns->PanEnv.dwFlags |= ENV_SUSTAIN;
+ if (xmsh.ptype & 4) pIns->PanEnv.dwFlags |= ENV_LOOP;
if (xmsh.vnum > 12) xmsh.vnum = 12;
if (xmsh.pnum > 12) xmsh.pnum = 12;
pIns->VolEnv.nNodes = xmsh.vnum;
- if (!xmsh.vnum) pIns->dwFlags &= ~ENV_VOLUME;
- if (!xmsh.pnum) pIns->dwFlags &= ~ENV_PANNING;
+ if (!xmsh.vnum) pIns->VolEnv.dwFlags &= ~ENV_ENABLED;
+ if (!xmsh.pnum) pIns->PanEnv.dwFlags &= ~ENV_ENABLED;
pIns->PanEnv.nNodes = xmsh.pnum;
pIns->VolEnv.nSustainStart = pIns->VolEnv.nSustainEnd = xmsh.vsustain;
- if (xmsh.vsustain >= 12) pIns->dwFlags &= ~ENV_VOLSUSTAIN;
+ if (xmsh.vsustain >= 12) pIns->VolEnv.dwFlags &= ~ENV_SUSTAIN;
pIns->VolEnv.nLoopStart = xmsh.vloops;
pIns->VolEnv.nLoopEnd = xmsh.vloope;
if (pIns->VolEnv.nLoopEnd >= 12) pIns->VolEnv.nLoopEnd = 0;
- if (pIns->VolEnv.nLoopStart >= pIns->VolEnv.nLoopEnd) pIns->dwFlags &= ~ENV_VOLLOOP;
+ if (pIns->VolEnv.nLoopStart >= pIns->VolEnv.nLoopEnd) pIns->VolEnv.dwFlags &= ~ENV_LOOP;
pIns->PanEnv.nSustainStart = pIns->PanEnv.nSustainEnd = xmsh.psustain;
- if (xmsh.psustain >= 12) pIns->dwFlags &= ~ENV_PANSUSTAIN;
+ if (xmsh.psustain >= 12) pIns->PanEnv.dwFlags &= ~ENV_SUSTAIN;
pIns->PanEnv.nLoopStart = xmsh.ploops;
pIns->PanEnv.nLoopEnd = xmsh.ploope;
if (pIns->PanEnv.nLoopEnd >= 12) pIns->PanEnv.nLoopEnd = 0;
- if (pIns->PanEnv.nLoopStart >= pIns->PanEnv.nLoopEnd) pIns->dwFlags &= ~ENV_PANLOOP;
+ if (pIns->PanEnv.nLoopStart >= pIns->PanEnv.nLoopEnd) pIns->PanEnv.dwFlags &= ~ENV_LOOP;
pIns->nGlobalVol = 64;
for (UINT ienv=0; ienv<12; ienv++)
{
@@ -918,12 +918,12 @@
xmsh.penv[ienv*2] = LittleEndianW(pIns->PanEnv.Ticks[ienv]);
xmsh.penv[ienv*2+1] = LittleEndianW(pIns->PanEnv.Values[ienv]);
}
- if (pIns->dwFlags & ENV_VOLUME) xmsh.vtype |= 1;
- if (pIns->dwFlags & ENV_VOLSUSTAIN) xmsh.vtype |= 2;
- if (pIns->dwFlags & ENV_VOLLOOP) xmsh.vtype |= 4;
- if (pIns->dwFlags & ENV_PANNING) xmsh.ptype |= 1;
- if (pIns->dwFlags & ENV_PANSUSTAIN) xmsh.ptype |= 2;
- if (pIns->dwFlags & ENV_PANLOOP) xmsh.ptype |= 4;
+ if (pIns->VolEnv.dwFlags & ENV_ENABLED) xmsh.vtype |= 1;
+ if (pIns->VolEnv.dwFlags & ENV_SUSTAIN) xmsh.vtype |= 2;
+ if (pIns->VolEnv.dwFlags & ENV_LOOP) xmsh.vtype |= 4;
+ if (pIns->PanEnv.dwFlags & ENV_ENABLED) xmsh.ptype |= 1;
+ if (pIns->PanEnv.dwFlags & ENV_SUSTAIN) xmsh.ptype |= 2;
+ if (pIns->PanEnv.dwFlags & ENV_LOOP) xmsh.ptype |= 4;
xmsh.vsustain = (BYTE)pIns->VolEnv.nSustainStart;
xmsh.vloops = (BYTE)pIns->VolEnv.nLoopStart;
xmsh.vloope = (BYTE)pIns->VolEnv.nLoopEnd;
Modified: trunk/OpenMPT/soundlib/Sampleio.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sampleio.cpp 2009-11-07 15:47:35 UTC (rev 414)
+++ trunk/OpenMPT/soundlib/Sampleio.cpp 2009-11-07 21:40:01 UTC (rev 415)
@@ -1165,32 +1165,32 @@
if (n < nsamples) pIns->Keyboard[k+12] = samplemap[n];
}
pIns->nFadeOut = pih->volfade;
- if (pih->vtype & 1) pIns->dwFlags |= ENV_VOLUME;
- if (pih->vtype & 2) pIns->dwFlags |= ENV_VOLSUSTAIN;
- if (pih->vtype & 4) pIns->dwFlags |= ENV_VOLLOOP;
- if (pih->ptype & 1) pIns->dwFlags |= ENV_PANNING;
- if (pih->ptype & 2) pIns->dwFlags |= ENV_PANSUSTAIN;
- if (pih->ptype & 4) pIns->dwFlags |= ENV_PANLOOP;
+ if (pih->vtype & 1) pIns->VolEnv.dwFlags |= ENV_ENABLED;
+ if (pih->vtype & 2) pIns->VolEnv.dwFlags |= ENV_SUSTAIN;
+ if (pih->vtype & 4) pIns->VolEnv.dwFlags |= ENV_LOOP;
+ if (pih->ptype & 1) pIns->PanEnv.dwFlags |= ENV_ENABLED;
+ if (pih->ptype & 2) pIns->PanEnv.dwFlags |= ENV_SUSTAIN;
+ if (pih->ptype & 4) pIns->PanEnv.dwFlags |= ENV_LOOP;
pIns->VolEnv.nNodes = pih->vnum;
pIns->PanEnv.nNodes = pih->pnum;
if (pIns->VolEnv.nNodes > 12) pIns->VolEnv.nNodes = 12;
if (pIns->PanEnv.nNodes > 12) pIns->PanEnv.nNodes = 12;
- if (!pIns->VolEnv.nNodes) pIns->dwFlags &= ~ENV_VOLUME;
- if (!pIns->PanEnv.nNodes) pIns->dwFlags &= ~ENV_PANNING;
+ if (!pIns->VolEnv.nNodes) pIns->VolEnv.dwFlags &= ~ENV_ENABLED;
+ if (!pIns->PanEnv.nNodes) pIns->PanEnv.dwFlags &= ~ENV_ENABLED;
pIns->VolEnv.nSustainStart = pih->vsustain;
pIns->VolEnv.nSustainEnd = pih->vsustain;
- if (pih->vsustain ...
[truncated message content] |
|
From: <sag...@us...> - 2009-11-07 15:47:47
|
Revision: 414
http://modplug.svn.sourceforge.net/modplug/?rev=414&view=rev
Author: saga-games
Date: 2009-11-07 15:47:35 +0000 (Sat, 07 Nov 2009)
Log Message:
-----------
[Fix] Orderlist: Pasting orders now removes "+++" items if they are not supported by the current format.
[Fix] Pattern paste: Got rid of possible redundant undo points.
[Imp] Pattern paste: Assume that the clipboard pattern format is IT (instead of MOD) if no information about the format is available.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Ctrl_seq.cpp
trunk/OpenMPT/mptrack/Modedit.cpp
Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-06 20:40:06 UTC (rev 413)
+++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-07 15:47:35 UTC (rev 414)
@@ -525,7 +525,10 @@
continue;
PATTERNINDEX nPat = pSf->Order.GetInvalidPatIndex();
if (bufItem[0] == '+')
+ {
nPat = pSf->Order.GetIgnoreIndex();
+ if(!pSf->GetModSpecifications().hasIgnoreIndex) continue;
+ }
else if (isdigit(bufItem[0]))
{
nPat = ConvertStrTo<PATTERNINDEX>(bufItem);
Modified: trunk/OpenMPT/mptrack/Modedit.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-06 20:40:06 UTC (rev 413)
+++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-07 15:47:35 UTC (rev 414)
@@ -1157,7 +1157,6 @@
if ((hCpy) && ((p = (LPSTR)GlobalLock(hCpy)) != NULL))
{
- GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]);
TEMPO spdmax = m_SndFile.GetModSpecifications().speedMax;
DWORD dwMemSize = GlobalSize(hCpy);
MODCOMMAND *m = m_SndFile.Patterns[nPattern];
@@ -1165,7 +1164,7 @@
UINT ncol = (dwBeginSel & 0xFFFF) >> 3;
UINT col;
bool bS3MCommands = false, bOk = false;
- MODTYPE origFormat = MOD_TYPE_MOD;
+ MODTYPE origFormat = MOD_TYPE_IT;
UINT len = 0;
MODCOMMAND origModCmd;
@@ -1176,6 +1175,7 @@
if ((nrow >= m_SndFile.PatternSize[nPattern]) || (ncol >= m_SndFile.m_nChannels)) goto PasteDone;
m += nrow * m_SndFile.m_nChannels;
+
// Search for signature
for (;;)
{
@@ -1188,11 +1188,15 @@
if(p[len - 3] == 'P') origFormat = MOD_TYPE_MPT;
if(p[len - 4] == 'S') origFormat = MOD_TYPE_S3M;
if(p[len - 3] == 'X') origFormat = MOD_TYPE_XM;
+ if(p[len - 3] == 'O') origFormat = MOD_TYPE_MOD;
break;
}
}
bS3MCommands = (origFormat & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_S3M)) != 0 ? true : false;
bOk = true;
+
+ GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]);
+
while ((nrow < m_SndFile.PatternSize[nPattern]) && (len + 11 < dwMemSize))
{
// Search for column separator
@@ -1359,11 +1363,11 @@
{
nrow = 0;
ORDERINDEX oNextOrder = m_SndFile.Order.GetNextOrderIgnoringSkips(oCurrentOrder);
- if((oNextOrder <= 0) || (oNextOrder >= m_SndFile.Order.size())) goto PasteDone;
+ if((oNextOrder == 0) || (oNextOrder >= m_SndFile.Order.size())) goto PasteDone;
nPattern = m_SndFile.Order[oNextOrder];
if(m_SndFile.Patterns.IsValidPat(nPattern) == false) goto PasteDone;
m = m_SndFile.Patterns[nPattern];
- GetPatternUndo()->PrepareUndo(nPattern, 0,0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]);
+ GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]);
oCurrentOrder = oNextOrder;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-06 20:40:35
|
Revision: 413
http://modplug.svn.sourceforge.net/modplug/?rev=413&view=rev
Author: saga-games
Date: 2009-11-06 20:40:06 +0000 (Fri, 06 Nov 2009)
Log Message:
-----------
[New] Pattern editor: Channel rename dialog in channel header context menu
[Fix] Mod Specs: The XM and MOD format does not support "---" or "+++" items in the order list. "+++" and "---" are left out when saving as XM. The XM format supports up to 255 patterns in theory, but pattern 254/255 are still loaded as "+++"/"---" for now.
[Fix] General tab: Channel name input field was not limited properly.
[Imp] Orderlist: Middle click can now also be used for queuing patterns.
[Imp] Orderlist: "+++" pattern item cannot be entered when writing an MOD / XM file.
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Ctrl_pat.h
trunk/OpenMPT/mptrack/Ctrl_seq.cpp
trunk/OpenMPT/mptrack/Modedit.cpp
trunk/OpenMPT/mptrack/View_gen.cpp
trunk/OpenMPT/mptrack/View_pat.cpp
trunk/OpenMPT/mptrack/View_pat.h
trunk/OpenMPT/mptrack/dlg_misc.cpp
trunk/OpenMPT/mptrack/dlg_misc.h
trunk/OpenMPT/mptrack/mptrack.rc
trunk/OpenMPT/mptrack/resource.h
trunk/OpenMPT/soundlib/Load_med.cpp
trunk/OpenMPT/soundlib/Load_mod.cpp
trunk/OpenMPT/soundlib/Load_xm.cpp
trunk/OpenMPT/soundlib/mod_specifications.h
Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-06 20:40:06 UTC (rev 413)
@@ -54,6 +54,7 @@
BOOL UpdateScrollInfo();
void UpdateInfoText();
int GetFontWidth();
+ void QueuePattern(CPoint pt);
ORDERINDEX GetOrderFromPoint(const CRect& rect, const CPoint& pt) const;
@@ -105,6 +106,7 @@
afx_msg void OnLButtonDblClk(UINT, CPoint);
afx_msg void OnRButtonDown(UINT, CPoint);
afx_msg void OnLButtonUp(UINT, CPoint);
+ afx_msg void OnMButtonDown(UINT, CPoint);
afx_msg void OnMouseMove(UINT, CPoint);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar*);
afx_msg void OnSize(UINT nType, int cx, int cy);
Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -36,6 +36,7 @@
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONUP()
ON_WM_RBUTTONDOWN()
+ ON_WM_MBUTTONDOWN()
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
ON_WM_HSCROLL()
@@ -384,15 +385,17 @@
ord = 0;
else
{
- if(ord > maxpat && ord < pSndFile->Order.GetIgnoreIndex())
- ord = pSndFile->Order.GetIgnoreIndex();
+ const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex();
+ if(ord > maxpat && ord < nFirstInvalid)
+ ord = nFirstInvalid;
}
} else
if (nChar == '-')
{
+ const PATTERNINDEX nFirstInvalid = pSndFile->GetModSpecifications().hasIgnoreIndex ? pSndFile->Order.GetIgnoreIndex() : pSndFile->Order.GetInvalidPatIndex();
ord--;
if (ord < 0) ord = pSndFile->Order.GetInvalidPatIndex(); else
- if ((ord > maxpat) && (ord < pSndFile->Order.GetIgnoreIndex())) ord = maxpat;
+ if ((ord > maxpat) && (ord < nFirstInvalid)) ord = maxpat;
}
if (ord != pSndFile->Order[m_nScrollPos])
{
@@ -714,7 +717,7 @@
while (rect.left < rcClient.right)
{
bool bHighLight = ((bFocus) && (nIndex >= selection.nOrdLo && nIndex <= selection.nOrdHi)) ? true : false;
- const PATTERNINDEX nPat = ((nIndex >= 0) && (nIndex < pSndFile->Order.GetLength())) ? pSndFile->Order[nIndex] : PATTERNINDEX_INVALID;
+ const PATTERNINDEX nPat = (nIndex < pSndFile->Order.GetLength()) ? pSndFile->Order[nIndex] : PATTERNINDEX_INVALID;
if ((rect.right = rect.left + m_cxFont) > rcClient.right) rect.right = rcClient.right;
rect.right--;
if (bHighLight) {
@@ -800,21 +803,7 @@
if (ih->CtrlPressed())
{
// queue pattern
- //m_nScrollPos2nd = ORDERINDEX_INVALID;
- if (m_pModDoc)
- {
- CSoundFile *pSndFile = m_pModDoc->GetSoundFile();
- ORDERINDEX nOrder = GetOrderFromPoint(rect, pt);
- if ((nOrder >= 0) && (nOrder < pSndFile->Order.GetLength()))
- {
- if (pSndFile->m_nSeqOverride == static_cast<UINT>(nOrder)+1) {
- pSndFile->m_nSeqOverride=0;
- } else {
- pSndFile->m_nSeqOverride = nOrder+1;
- }
- InvalidateRect(NULL, FALSE);
- }
- }
+ QueuePattern(pt);
} else
{
// mark pattern (+skip to)
@@ -858,7 +847,7 @@
if (rect.PtInRect(pt))
{
ORDERINDEX n = GetOrderFromPoint(rect, pt);
- if ((n >= 0) && (n == m_nDropPos) && (m_pModDoc))
+ if ((n != ORDERINDEX_INVALID) && (n == m_nDropPos) && (m_pModDoc))
{
// drag multiple orders (not quite as easy...)
ORD_SELECTION selection = GetCurSel(false);
@@ -934,9 +923,9 @@
n = GetOrderFromPoint(rect, pt);
if (n >= pSndFile->Order.GetLength() || n >= pSndFile->GetModSpecifications().ordersMax) n = ORDERINDEX_INVALID;
}
- if (n != (int)m_nDropPos)
+ if (n != m_nDropPos)
{
- if (n >= 0)
+ if (n != ORDERINDEX_INVALID)
{
m_nDropPos = n;
InvalidateRect(NULL, FALSE);
@@ -1067,6 +1056,14 @@
}
+void COrderList::OnMButtonDown(UINT nFlags, CPoint pt)
+//----------------------------------------------------
+{
+ UNREFERENCED_PARAMETER(nFlags);
+ QueuePattern(pt);
+}
+
+
void COrderList::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar*)
//--------------------------------------------------------------
{
@@ -1349,3 +1346,28 @@
m_pModDoc->SetModified();
m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this);
}
+
+
+void COrderList::QueuePattern(CPoint pt)
+//--------------------------------------
+{
+ CRect rect;
+ GetClientRect(&rect);
+
+ if(!rect.PtInRect(pt)) return;
+ if (m_pModDoc == nullptr) return;
+ CSoundFile *pSndFile = m_pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return;
+
+ ORDERINDEX nOrder = GetOrderFromPoint(rect, pt);
+
+ if (nOrder < pSndFile->Order.GetLength())
+ {
+ if (pSndFile->m_nSeqOverride == static_cast<UINT>(nOrder) + 1) {
+ pSndFile->m_nSeqOverride = 0;
+ } else {
+ pSndFile->m_nSeqOverride = nOrder + 1;
+ }
+ InvalidateRect(NULL, FALSE);
+ }
+}
Modified: trunk/OpenMPT/mptrack/Modedit.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -329,6 +329,18 @@
}
}
+ // If not supported, remove "+++" separator order items.
+ if(CSoundFile::GetModSpecifications(nNewType).hasIgnoreIndex == false)
+ {
+ for(ORDERINDEX nOrd = m_SndFile.Order.GetLengthTailTrimmed() - 1; nOrd > 0; nOrd--)
+ {
+ if(m_SndFile.Order[nOrd] == m_SndFile.Order.GetIgnoreIndex())
+ {
+ m_SndFile.Order.Remove(nOrd, nOrd);
+ }
+ }
+ }
+
BEGIN_CRITICAL();
m_SndFile.ChangeModTypeTo(nNewType);
if (!newTypeIsXM_IT_MPT && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES))
Modified: trunk/OpenMPT/mptrack/View_gen.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_gen.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/View_gen.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -362,9 +362,13 @@
int pan = pSndFile->ChnSettings[nChn].nPan;
m_sbPan[ichn].SetPos(pan/4);
SetDlgItemInt(IDC_EDIT2+ichn*2, pan);
+
+ // Channel name
memcpy(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME);
- s[MAX_CHANNELNAME-1] = 0;
- SetDlgItemText(IDC_EDIT9+ichn, s);
+ s[MAX_CHANNELNAME - 1] = 0;
+ SetDlgItemText(IDC_EDIT9 + ichn, s);
+ ((CEdit*)(GetDlgItem(IDC_EDIT9 + ichn)))->LimitText(MAX_CHANNELNAME - 1);
+
// Channel effect
m_CbnEffects[ichn].SetRedraw(FALSE);
m_CbnEffects[ichn].ResetContent();
Modified: trunk/OpenMPT/mptrack/View_pat.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -108,6 +108,7 @@
ON_COMMAND(ID_PATTERN_AMPLIFY, OnPatternAmplify)
ON_COMMAND(ID_CLEAR_SELECTION, OnClearSelectionFromMenu)
ON_COMMAND(ID_SHOWTIMEATROW, OnShowTimeAtRow)
+ ON_COMMAND(ID_CHANNEL_RENAME, OnRenameChannel)
ON_COMMAND_RANGE(ID_CHANGE_INSTRUMENT, ID_CHANGE_INSTRUMENT+MAX_INSTRUMENTS, OnSelectInstrument)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateUndo)
ON_COMMAND_RANGE(ID_PLUGSELECT, ID_PLUGSELECT+MAX_MIXPLUGINS, OnSelectPlugin) //rewbs.patPlugName
@@ -1242,6 +1243,7 @@
AppendMenu(hMenu, MF_SEPARATOR, 0, "");
BuildRecordCtxMenu(hMenu, nChn, pModDoc);
BuildChannelControlCtxMenu(hMenu);
+ BuildChannelMiscCtxMenu(hMenu, pSndFile);
}
}
@@ -2533,13 +2535,13 @@
return;
}
- UINT nChn = GetChanFromCursor(m_nMenuParam);
+ CHANNELINDEX nChn = GetChanFromCursor(m_nMenuParam);
CString str;
str.Format("Remove channel %d?\nNote: Affects all patterns and no undo", nChn+1);
if(CMainFrame::GetMainFrame()->MessageBox(str , "Remove channel", MB_YESNO | MB_ICONQUESTION) == IDYES)
{
BOOL chnMask[MAX_CHANNELS];
- for(UINT i = 0; i<MAX_CHANNELS; chnMask[i] = FALSE, i++) {}
+ for(CHANNELINDEX i = 0; i < MAX_CHANNELS; chnMask[i] = FALSE, i++) {}
chnMask[nChn] = TRUE;
pModDoc->RemoveChannels(chnMask);
SetCurrentPattern(m_nPattern); //Updating the screen.
@@ -4961,6 +4963,16 @@
}
+bool CViewPattern::BuildChannelMiscCtxMenu(HMENU hMenu, CSoundFile* pSndFile)
+//---------------------------------------------------------------------------
+{
+ if((pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) == 0) return false;
+ AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
+ AppendMenu(hMenu, MF_STRING, ID_CHANNEL_RENAME, "Rename channel");
+ return true;
+}
+
+
UINT CViewPattern::GetSelectionStartRow() {
//-----------------------------------------
return min(GetRowFromCursor(m_dwBeginSel), GetRowFromCursor(m_dwEndSel));
@@ -5160,3 +5172,20 @@
iRow = m_nRow;
}
}
+
+
+void CViewPattern::OnRenameChannel()
+//----------------------------------
+{
+ CModDoc *pModDoc = GetDocument();
+ if(pModDoc == nullptr) return;
+ CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ if(pSndFile == nullptr) return;
+
+ CHANNELINDEX nChn = GetChanFromCursor(m_nMenuParam);
+ CChannelRenameDlg dlg(this, pSndFile->ChnSettings[nChn].szName, nChn + 1);
+ if(dlg.DoModal() != IDOK || dlg.bChanged == false) return;
+
+ strcpy(pSndFile->ChnSettings[nChn].szName, dlg.m_sName);
+ pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS);
+}
Modified: trunk/OpenMPT/mptrack/View_pat.h
===================================================================
--- trunk/OpenMPT/mptrack/View_pat.h 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/View_pat.h 2009-11-06 20:40:06 UTC (rev 413)
@@ -298,6 +298,7 @@
afx_msg void OnSelectInstrument(UINT nid);
afx_msg void OnRunScript();
afx_msg void OnShowTimeAtRow();
+ afx_msg void OnRenameChannel();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
@@ -324,6 +325,7 @@
bool BuildTransposeCtxMenu(HMENU hMenu, CInputHandler* ih);
bool BuildSetInstCtxMenu(HMENU hMenu, CInputHandler* ih, CSoundFile* pSndFile);
bool BuildAmplifyCtxMenu(HMENU hMenu, CInputHandler* ih);
+ bool BuildChannelMiscCtxMenu(HMENU hMenu, CSoundFile* pSndFile);
UINT GetSelectionStartRow();
UINT GetSelectionEndRow();
Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp
===================================================================
--- trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -635,6 +635,43 @@
}
//end rewbs.removeChansDlgCleanup
+
+///////////////////////////////////////////////////////////
+// CChannelRenameDlg
+
+BOOL CChannelRenameDlg::OnInitDialog()
+//------------------------------------
+{
+ CDialog::OnInitDialog();
+
+ CHAR s[32];
+ wsprintf(s, "Set name for channel %d:", m_nChannel);
+ SetDlgItemText(IDC_STATIC_CHANNEL_NAME, s);
+ SetDlgItemText(IDC_EDIT_CHANNEL_NAME, m_sName);
+ ((CEdit*)(GetDlgItem(IDC_EDIT_CHANNEL_NAME)))->LimitText(MAX_CHANNELNAME - 1);
+
+ return TRUE;
+}
+
+
+void CChannelRenameDlg::OnOK()
+//----------------------------
+{
+ CHAR sNewName[MAX_CHANNELNAME];
+ GetDlgItemText(IDC_EDIT_CHANNEL_NAME, sNewName, MAX_CHANNELNAME);
+ if(!strcmp(sNewName, m_sName))
+ {
+ bChanged = false;
+ CDialog::OnCancel();
+ } else
+ {
+ strcpy(m_sName, sNewName);
+ bChanged = true;
+ CDialog::OnOK();
+ }
+}
+
+
//////////////////////////////////////////////////////////////////////////////////////////
// Find/Replace Dialog
Modified: trunk/OpenMPT/mptrack/dlg_misc.h
===================================================================
--- trunk/OpenMPT/mptrack/dlg_misc.h 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/dlg_misc.h 2009-11-06 20:40:06 UTC (rev 413)
@@ -111,6 +111,33 @@
/////////////////////////////////////////////////////////////////////////
+// Channel rename dialog
+
+//=====================================
+class CChannelRenameDlg: public CDialog
+//=====================================
+{
+protected:
+ CHANNELINDEX m_nChannel;
+
+public:
+ CHAR m_sName[MAX_CHANNELNAME];
+ bool bChanged;
+
+public:
+ CChannelRenameDlg(CWnd *parent, CHAR *sName, CHANNELINDEX nChannel) : CDialog(IDD_CHANNEL_NAME, parent)
+ {
+ strcpy(m_sName, sName);
+ m_nChannel = nChannel;
+ bChanged = false;
+ }
+
+ virtual BOOL OnInitDialog();
+ virtual void OnOK();
+};
+
+
+/////////////////////////////////////////////////////////////////////////
// Search/Replace
#define PATSEARCH_NOTE 0x01
Modified: trunk/OpenMPT/mptrack/mptrack.rc
===================================================================
--- trunk/OpenMPT/mptrack/mptrack.rc 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/mptrack.rc 2009-11-06 20:40:06 UTC (rev 413)
@@ -70,7 +70,18 @@
GROUPBOX "Presets",IDC_STATIC,6,234,294,36
END
+IDD_CHANNEL_NAME DIALOGEX 0, 0, 154, 58
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Channel name"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "IDC_STATIC_CHANNEL_NAME",IDC_STATIC_CHANNEL_NAME,6,6,138,8
+ EDITTEXT IDC_EDIT_CHANNEL_NAME,6,18,138,12,ES_AUTOHSCROLL
+ DEFPUSHBUTTON "OK",IDOK,42,36,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,96,36,50,14
+END
+
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
@@ -94,6 +105,14 @@
TOPMARGIN, 7
BOTTOMMARGIN, 274
END
+
+ IDD_CHANNEL_NAME, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 147
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 51
+ END
END
#endif // APSTUDIO_INVOKED
Modified: trunk/OpenMPT/mptrack/resource.h
===================================================================
--- trunk/OpenMPT/mptrack/resource.h 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/mptrack/resource.h 2009-11-06 20:40:06 UTC (rev 413)
@@ -115,6 +115,7 @@
#define IDR_DEFAULT_KEYBINDINGS 519
#define IDR_BUILTIN_TUNINGS 520
#define IDD_CLEANUP_SONG 521
+#define IDD_CHANNEL_NAME 522
#define IDC_BUTTON1 1001
#define IDC_BUTTON2 1002
#define IDC_BUTTON3 1003
@@ -909,6 +910,8 @@
#define IDC_CHK_OPTIMIZE_SAMPLES 2406
#define IDC_CHK_MERGE_SEQUENCES 2408
#define IDC_CHECK_PT1X 2409
+#define IDC_STATIC_CHANNEL_NAME 2410
+#define IDC_EDIT_CHANNEL_NAME 2411
#define ID_FILE_NEWMOD 32771
#define ID_FILE_NEWXM 32772
#define ID_FILE_NEWS3M 32773
@@ -1145,18 +1148,19 @@
#define ID_CLEANUP_REARRANGESAMPLES 59228
#define ID_ORDERLIST_RENDER 59229
#define ID_EDIT_CLEANUP 59230
-#define ID_ORDERLIST_EDIT_COPY 59231
-#define ID_ORDERLIST_EDIT_CUT 59232
-#define ID_ORDERLIST_EDIT_PASTE 59233
+#define ID_ORDERLIST_EDIT_COPY 59231
+#define ID_ORDERLIST_EDIT_CUT 59232
+#define ID_ORDERLIST_EDIT_PASTE 59233
+#define ID_CHANNEL_RENAME 59234
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
-#define _APS_NEXT_RESOURCE_VALUE 522
-#define _APS_NEXT_COMMAND_VALUE 59234
-#define _APS_NEXT_CONTROL_VALUE 2410
+#define _APS_NEXT_RESOURCE_VALUE 523
+#define _APS_NEXT_COMMAND_VALUE 59235
+#define _APS_NEXT_CONTROL_VALUE 2412
#define _APS_NEXT_SYMED_VALUE 901
#endif
#endif
Modified: trunk/OpenMPT/soundlib/Load_med.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_med.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/soundlib/Load_med.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -636,7 +636,7 @@
} else
{
UINT nOrders, nSections;
- UINT nTrks = BigEndianW(pmsh2->numtracks);
+ WORD nTrks = BigEndianW(pmsh2->numtracks);
if ((nTrks >= 4) && (nTrks <= 32)) m_nChannels = nTrks;
DWORD playseqtable = BigEndian(pmsh2->playseqtable);
UINT numplayseqs = BigEndianW(pmsh2->numpseqs);
Modified: trunk/OpenMPT/soundlib/Load_mod.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mod.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/soundlib/Load_mod.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -507,7 +507,7 @@
UINT nbp=0, norders=128;
for (UINT iord=0; iord<128; iord++)
{
- if (Order[iord] == 0xFF)
+ if (Order[iord] == Order.GetInvalidPatIndex())
{
norders = iord;
break;
Modified: trunk/OpenMPT/soundlib/Load_xm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_xm.cpp 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/soundlib/Load_xm.cpp 2009-11-06 20:40:06 UTC (rev 413)
@@ -758,17 +758,21 @@
if(xmheader.channels > MAX_BASECHANNELS) xmheader.channels = MAX_BASECHANNELS;
xmheader.channels = LittleEndianW(xmheader.channels);
- xmheader.patterns = 0;
- WORD nOrders = Order.GetLengthTailTrimmed(), nPatterns = 0;
- xmheader.orders = LittleEndianW(nOrders);
- xmheader.size = LittleEndian(xmheader.size + nOrders);
-
- for (i = 0; i < nOrders; i++) { // walk over orderlist and find last used pattern
- if((Order[i] >= nPatterns) && (Order[i] < MAX_PATTERNS)) {
- nPatterns = Order[i] + 1;
+ // Find out number of orders and patterns used.
+ // +++ and --- patterns are not taken into consideration as FastTracker does not support them.
+ ORDERINDEX nMaxOrds = 0;
+ PATTERNINDEX nPatterns = 0;
+ for(ORDERINDEX nOrd = 0; nOrd < Order.GetLengthTailTrimmed(); nOrd++)
+ {
+ if(Patterns.IsValidIndex(Order[nOrd]))
+ {
+ nMaxOrds++;
+ if(Order[nOrd] >= nPatterns) nPatterns = Order[nOrd] + 1;
}
}
- xmheader.patterns = LittleEndianW(nPatterns);
+ xmheader.orders = LittleEndianW((WORD)nMaxOrds);
+ xmheader.patterns = LittleEndianW((WORD)nPatterns);
+ xmheader.size = LittleEndian((DWORD)(xmheader.size + nMaxOrds));
if(m_nInstruments > 0)
xmheader.instruments = LittleEndianW(m_nInstruments);
@@ -786,7 +790,15 @@
xmheader.speed = LittleEndianW(CLAMP(m_nDefaultSpeed, 1, 31));
fwrite(&xmheader, 1, sizeof(xmheader), f);
- Order.WriteAsByte(f, nOrders);
+ // write order list (wihout +++ and ---, explained above)
+ for(ORDERINDEX nOrd = 0; nOrd < Order.GetLengthTailTrimmed(); nOrd++)
+ {
+ if(Patterns.IsValidIndex(Order[nOrd]))
+ {
+ BYTE nOrdval = static_cast<BYTE>(Order[nOrd]);
+ fwrite(&nOrdval, 1, sizeof(BYTE), f);
+ }
+ }
// Writing patterns
for (i = 0; i < nPatterns; i++) if (Patterns[i])
Modified: trunk/OpenMPT/soundlib/mod_specifications.h
===================================================================
--- trunk/OpenMPT/soundlib/mod_specifications.h 2009-11-06 17:48:42 UTC (rev 412)
+++ trunk/OpenMPT/soundlib/mod_specifications.h 2009-11-06 20:40:06 UTC (rev 413)
@@ -41,6 +41,7 @@
UINT envelopePointsMax; // Maximum number of points of each envelope
char commands[MAX_EFFECTS + 1]; // An array holding all commands this format supports; commands that are not supported are marked with "?"
char volcommands[MAX_VOLCMDS + 1]; // dito, but for volume column
+ bool hasIgnoreIndex; // Does "+++" pattern exist?
};
@@ -79,6 +80,7 @@
240, //Envelope point count
" JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z\\:#", // Supported Effects
" vpcdabuhlrgfe:o", // Supported Volume Column commands
+ true, // Has "+++" pattern
};
@@ -112,6 +114,7 @@
0, //No instrument envelopes
" 0123456789ABCD?FF?E???????????????", // Supported Effects
" ???????????????", // Supported Volume Column commands
+ false, // Doesn't have "+++" pattern
};
// MOD with MPT extensions.
@@ -143,6 +146,7 @@
0, //No instrument envelopes
" 0123456789ABCD?FF?E???????????????", // Supported Effects
" ???????????????", // Supported Volume Column commands
+ false, // Doesn't have "+++" pattern
};
const CModSpecifications xm =
@@ -154,8 +158,8 @@
false, //No notecut.
true, //Has noteoff.
false, //No notefade.
- 64, //Pattern max.
- 128, //Order max.
+ 255, //Pattern max.
+ 255, //Order max.
1, //Channel min
32, //Channel max
32, //Min tempo
@@ -173,6 +177,7 @@
12, //Envelope point count
" 0123456789ABCDRFFTE???GHK?YXPLZ\\:#", // Supported Effects
" vpcdabuhlrg????", // Supported Volume Column commands
+ false, // Doesn't have "+++" pattern
};
// XM with MPT extensions
@@ -185,7 +190,7 @@
false, //No notecut.
true, //Has noteoff.
false, //No notefade.
- 240, //Pattern max.
+ 255, //Pattern max.
256, //Order max.
1, //Channel min
127, //Channel max
@@ -204,18 +209,20 @@
12, //Envelope point count
" 0123456789ABCDRFFTE???GHK?YXPLZ\\:#", // Supported Effects
" vpcdabuhlrgfe:o", // Supported Volume Column commands
+ false, // Doesn't have "+++" pattern
};
const CModSpecifications s3m =
{
+ //TODO: Set correct values.
"s3m", //File extension
13, //Minimum note index
120, //Maximum note index
true, //Has notecut.
false, //No noteoff.
false, //No notefade.
- 240, //Pattern max.
- 256, //Order max.
+ 99, //Pattern max.
+ 255, //Order max.
1, //Channel min
32, //Channel max
32, //Min tempo
@@ -233,6 +240,7 @@
0, //No instrument envelopes
" JFEGHLKRXODB?CQATI?SMNVW?U????????", // Supported Effects
" vp?????????????", // Supported Volume Column commands
+ true, // Has "+++" pattern
};
// S3M with MPT extensions
@@ -246,7 +254,7 @@
false, //No noteoff.
false, //No notefade.
240, //Pattern max.
- 256, //Order max.
+ 255, //Order max.
1, //Channel min
32, //Channel max
32, //Min tempo
@@ -264,6 +272,7 @@
0, //No instrument envelopes
" JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z\\:#", // Supported Effects
" vp?????????????", // Supported Volume Column commands
+ true, // Has "+++" pattern
};
const CModSpecifications it =
@@ -294,6 +303,7 @@
25, //Envelope point count
" JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z???", // Supported Effects
" vpcdab?h??gfe??", // Supported Volume Column commands
+ true, // Has "+++" pattern
};
const CModSpecifications itEx =
@@ -324,6 +334,7 @@
25, //Envelope point count
" JFEGHLKRXODB?CQATI?SMNVW?UY?P?Z\\:#", // Supported Effects
" vpcdab?h??gfe:o", // Supported Volume Column commands
+ true, // Has "+++" pattern
};
} //namespace ModSpecs
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-06 17:48:58
|
Revision: 412
http://modplug.svn.sourceforge.net/modplug/?rev=412&view=rev
Author: saga-games
Date: 2009-11-06 17:48:42 +0000 (Fri, 06 Nov 2009)
Log Message:
-----------
[Fix] MOD Loader: 8Chn Startrekker modules ("FLT8") are loaded correctly now.
[Imp] MOD Playback: if PT1.x playback flag is set, 8xx and E8x panning commands are now ignored.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_mod.cpp
trunk/OpenMPT/soundlib/Snd_fx.cpp
Modified: trunk/OpenMPT/soundlib/Load_mod.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mod.cpp 2009-11-03 09:42:38 UTC (rev 411)
+++ trunk/OpenMPT/soundlib/Load_mod.cpp 2009-11-06 17:48:42 UTC (rev 412)
@@ -214,9 +214,9 @@
#pragma pack()
-BOOL IsMagic(LPCSTR s1, LPCSTR s2)
+bool IsMagic(LPCSTR s1, LPCSTR s2)
{
- return ((*(DWORD *)s1) == (*(DWORD *)s2)) ? TRUE : FALSE;
+ return ((*(DWORD *)s1) == (*(DWORD *)s2)) ? true : false;
}
@@ -246,6 +246,7 @@
if ((s[0]=='T') && (s[1]=='D') && (s[2]=='Z') && (s[3]>='4') && (s[3]<='9')) m_nChannels = s[3] - '0'; else
if (IsMagic(s,"16CN")) m_nChannels = 16; else
if (IsMagic(s,"32CN")) m_nChannels = 32; else m_nSamples = 15;
+ bool bFLT8 = IsMagic(s, "FLT8") ? true : false;
// Load Samples
nErr = 0;
dwTotalSampleLen = 0;
@@ -321,8 +322,24 @@
if (iord<norders) nbpbuggy = nbp;
}
if (i >= nbpbuggy2) nbpbuggy2 = i+1;
+
+ // from mikmod: if the file says FLT8, but the orderlist has odd numbers, it's probably really an FLT4
+ if(bFLT8 && (Order[iord] & 1))
+ {
+ m_nChannels = 4;
+ bFLT8 = false;
+ }
}
- for (UINT iend = norders; iend < 0x80; iend++) Order[iend] = Order.GetInvalidPatIndex();
+
+ if(bFLT8)
+ {
+ // FLT8 has only equal order items, so divide by two.
+ for(ORDERINDEX nOrd = 0; nOrd < Order.GetLength(); nOrd++)
+ Order[nOrd] >>= 1;
+ }
+
+ for(UINT iend = norders; iend < 0x80; iend++) Order[iend] = Order.GetInvalidPatIndex();
+
norders--;
m_nRestartPos = pMagic->nRestartPos;
if (m_nRestartPos >= 0x78) m_nRestartPos = 0;
@@ -352,27 +369,53 @@
// Setup channel pan positions and volume
SetupMODPanning();
- // Reading channels
- for (UINT ipat=0; ipat<nbp; ipat++)
+ const CHANNELINDEX nMaxChn = (bFLT8) ? 4 : m_nChannels; // 4 channels per pattern in FLT8 format.
+ if(bFLT8) nbp++; // as one logical pattern consists of two real patterns in FLT8 format, the highest pattern number has to be increased by one.
+
+ // Reading patterns
+ for (PATTERNINDEX ipat = 0; ipat < nbp; ipat++)
{
if (ipat < MAX_PATTERNS)
{
- if(Patterns.Insert(ipat, 64)) break;
- if (dwMemPos + m_nChannels * 256 > dwMemLength) break;
- MODCOMMAND *m = Patterns[ipat];
- LPCBYTE p = lpStream + dwMemPos;
- for (UINT j=m_nChannels*64; j; m++,p+=4,j--)
+ if (dwMemPos + nMaxChn * 256 > dwMemLength) break;
+
+ MODCOMMAND *m;
+ if(bFLT8)
{
- BYTE A0=p[0], A1=p[1], A2=p[2], A3=p[3];
- UINT n = ((((UINT)A0 & 0x0F) << 8) | (A1));
- if ((n) && (n != 0xFFF)) m->note = GetNoteFromPeriod(n << 2);
- m->instr = ((UINT)A2 >> 4) | (A0 & 0x10);
- m->command = A2 & 0x0F;
- m->param = A3;
- if ((m->command) || (m->param)) ConvertModCommand(m);
+ if((ipat & 1) == 0)
+ {
+ // only create "even" patterns
+ if(Patterns.Insert(ipat >> 1, 64)) break;
+ }
+ m = Patterns[ipat >> 1];
+ } else
+ {
+ if(Patterns.Insert(ipat, 64)) break;
+ m = Patterns[ipat];
}
+
+ const BYTE *p = lpStream + dwMemPos;
+ for(ROWINDEX nRow = 0; nRow < 64; nRow++)
+ {
+ if(bFLT8)
+ {
+ // FLT8: either write to channel 1 to 4 (even patterns) or 5 to 8 (odd patterns).
+ m = Patterns[ipat >> 1] + nRow * 8 + ((ipat & 1) ? 4 : 0);
+ }
+ for(CHANNELINDEX nChn = 0; nChn < nMaxChn; nChn++, m++, p += 4)
+ {
+ BYTE A0 = p[0], A1 = p[1], A2 = p[2], A3 = p[3];
+ UINT n = ((((UINT)A0 & 0x0F) << 8) | (A1));
+ if ((n) && (n != 0xFFF)) m->note = GetNoteFromPeriod(n << 2);
+ m->instr = ((UINT)A2 >> 4) | (A0 & 0x10);
+ m->command = A2 & 0x0F;
+ m->param = A3;
+ if ((m->command) || (m->param)) ConvertModCommand(m);
+
+ }
+ }
}
- dwMemPos += m_nChannels*256;
+ dwMemPos += nMaxChn * 256;
}
// Reading samples
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-03 09:42:38 UTC (rev 411)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-11-06 17:48:42 UTC (rev 412)
@@ -1670,6 +1670,7 @@
// Set 8-bit Panning
case CMD_PANNING8:
if (!(m_dwSongFlags & SONG_FIRSTTICK)) break;
+ if ((m_dwSongFlags & SONG_PT1XMODE)) break;
if (!(m_dwSongFlags & SONG_SURROUNDPAN)) pChn->dwFlags &= ~CHN_SURROUND;
if (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_XM|MOD_TYPE_MOD|MOD_TYPE_MT2))
{
@@ -2504,7 +2505,7 @@
// E7x: Set Tremolo WaveForm
case 0x70: pChn->nTremoloType = param & 0x07; break;
// E8x: Set 4-bit Panning
- case 0x80: if(m_dwSongFlags & SONG_FIRSTTICK)
+ case 0x80: if((m_dwSongFlags & SONG_FIRSTTICK) && !(m_dwSongFlags & SONG_PT1XMODE))
{
//IT compatibility 20. (Panning always resets surround state)
if(IsCompatibleMode(TRK_ALLTRACKERS))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2009-11-03 09:43:02
|
Revision: 411
http://modplug.svn.sourceforge.net/modplug/?rev=411&view=rev
Author: saga-games
Date: 2009-11-03 09:42:38 +0000 (Tue, 03 Nov 2009)
Log Message:
-----------
[New] Tree view: Clicking on a mod item (only filename node) switches to the corresponding window.
[Fix] Updating 16bit and stereo channel flags when replacing a sample, in order to avoid broken sound when using undo (f.e. when undoing a 16->8 Bit conversion).
[Fix] Mod Loading: Setting mod specs when loading MPTMs as well (mod specs pointer seems to be set somewhere else already, but the order list was not resized properly in all cases).
[Fix] IT Saver: Save at least 2 order items.
[Imp] Order list: Show cut/copy/paste orders in context menu
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Ctrl_seq.cpp
trunk/OpenMPT/mptrack/Moddoc.cpp
trunk/OpenMPT/mptrack/Moddoc.h
trunk/OpenMPT/mptrack/View_tre.cpp
trunk/OpenMPT/mptrack/resource.h
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/modsmp_ctrl.cpp
Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-03 09:42:38 UTC (rev 411)
@@ -41,9 +41,14 @@
ON_WM_HSCROLL()
ON_WM_SIZE()
ON_COMMAND(ID_CONTROLTAB, OnSwitchToView)
+
ON_COMMAND(ID_ORDERLIST_INSERT, OnInsertOrder)
ON_COMMAND(ID_ORDERLIST_DELETE, OnDeleteOrder)
ON_COMMAND(ID_ORDERLIST_RENDER, OnRenderOrder)
+ ON_COMMAND(ID_ORDERLIST_EDIT_COPY, OnEditCopy)
+ ON_COMMAND(ID_ORDERLIST_EDIT_CUT, OnEditCut)
+ ON_COMMAND(ID_ORDERLIST_EDIT_PASTE, OnEditPaste)
+
ON_COMMAND(ID_PATTERN_PROPERTIES, OnPatternProperties)
ON_COMMAND(ID_PLAYER_PLAY, OnPlayerPlay)
ON_COMMAND(ID_PLAYER_PAUSE, OnPlayerPause)
@@ -989,12 +994,18 @@
DWORD greyed = bPatternExists ? 0 : MF_GRAYED;
+ CInputHandler* ih = (CMainFrame::GetMainFrame())->GetInputHandler();
+
if(bMultiSelection)
{
// several patterns are selected.
AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Patterns\tIns");
AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Patterns\tDel");
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_COPY, "&Copy Orders\t" + ih->GetKeyTextFromCommand(kcEditCopy));
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_CUT, "&C&ut Orders\t" + ih->GetKeyTextFromCommand(kcEditCut));
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_PASTE, "&Paste Orders\t" + ih->GetKeyTextFromCommand(kcEditPaste));
+ AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_COPY, "&Duplicate Patterns");
}
else
@@ -1007,6 +1018,7 @@
AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_COPY, "&Duplicate Pattern");
AppendMenu(hMenu, MF_STRING | greyed, ID_PATTERNCOPY, "&Copy Pattern");
AppendMenu(hMenu, MF_STRING | greyed, ID_PATTERNPASTE, "P&aste Pattern");
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_EDIT_PASTE, "&Paste Orders\t" + ih->GetKeyTextFromCommand(kcEditPaste));
if (pSndFile->TypeIsIT_MPT_XM())
{
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
Modified: trunk/OpenMPT/mptrack/Moddoc.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-11-03 09:42:38 UTC (rev 411)
@@ -1372,6 +1372,16 @@
}
+// Activate document's window.
+void CModDoc::ActivateWindow()
+//----------------------------
+{
+
+ CChildFrame *pChildFrm = (CChildFrame *)GetChildFrame();
+ if(pChildFrm) pChildFrm->MDIActivate();
+}
+
+
void CModDoc::UpdateAllViews(CView *pSender, LPARAM lHint, CObject *pHint)
//------------------------------------------------------------------------
{
Modified: trunk/OpenMPT/mptrack/Moddoc.h
===================================================================
--- trunk/OpenMPT/mptrack/Moddoc.h 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/mptrack/Moddoc.h 2009-11-03 09:42:38 UTC (rev 411)
@@ -154,6 +154,9 @@
void ViewInstrument(UINT nIns);
HWND GetFollowWnd() const { return m_hWndFollow; }
void SetFollowWnd(HWND hwnd, DWORD dwType);
+
+ void ActivateWindow();
+
// Effects Description
bool GetEffectName(LPSTR pszDescription, UINT command, UINT param, bool bXX = false, CHANNELINDEX nChn = CHANNELINDEX_INVALID); // bXX: Nxx: ...
UINT GetNumEffects() const;
@@ -189,7 +192,7 @@
BOOL ConvertInstrumentsToSamples();
UINT RemovePlugs(const bool (&keepMask)[MAX_MIXPLUGINS]);
- PATTERNINDEX InsertPattern(ORDERINDEX nOrd = -1, ROWINDEX nRows = 64);
+ PATTERNINDEX InsertPattern(ORDERINDEX nOrd = ORDERINDEX_INVALID, ROWINDEX nRows = 64);
SAMPLEINDEX InsertSample(bool bLimit = false);
INSTRUMENTINDEX InsertInstrument(LONG lSample = 0, LONG lDuplicate = 0);
void InitializeInstrument(MODINSTRUMENT *pIns, UINT nsample=0);
Modified: trunk/OpenMPT/mptrack/View_tre.cpp
===================================================================
--- trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-03 09:42:38 UTC (rev 411)
@@ -1184,6 +1184,10 @@
InstrumentLibraryChDir(GetItemText(hItem));
return TRUE;
+ case MODITEM_HDR_SONG:
+ if (pModDoc) pModDoc->ActivateWindow();
+ return TRUE;
+
default:
if (qwItemType & 0x8000)
{
@@ -2452,6 +2456,10 @@
}
}
break;
+
+ case MODITEM_HDR_SONG:
+ ExecuteItem(hItem);
+ break;
}
}
}
Modified: trunk/OpenMPT/mptrack/resource.h
===================================================================
--- trunk/OpenMPT/mptrack/resource.h 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/mptrack/resource.h 2009-11-03 09:42:38 UTC (rev 411)
@@ -1145,6 +1145,9 @@
#define ID_CLEANUP_REARRANGESAMPLES 59228
#define ID_ORDERLIST_RENDER 59229
#define ID_EDIT_CLEANUP 59230
+#define ID_ORDERLIST_EDIT_COPY 59231
+#define ID_ORDERLIST_EDIT_CUT 59232
+#define ID_ORDERLIST_EDIT_PASTE 59233
// Next default values for new objects
//
@@ -1152,7 +1155,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 522
-#define _APS_NEXT_COMMAND_VALUE 59231
+#define _APS_NEXT_COMMAND_VALUE 59234
#define _APS_NEXT_CONTROL_VALUE 2410
#define _APS_NEXT_SYMED_VALUE 901
#endif
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-11-03 09:42:38 UTC (rev 411)
@@ -1816,8 +1816,9 @@
} else
{
// An additional "---" pattern is appended so Impulse Tracker won't ignore the last order item.
- // Interestingly, this can exceed IT's 256 order limit.
+ // Interestingly, this can exceed IT's 256 order limit. Also, IT will always save at least two orders.
header.ordnum = min(Order.GetLengthTailTrimmed(), ModSpecs::itEx.ordersMax) + 1;
+ if(header.ordnum < 2) header.ordnum = 2;
}
@@ -2479,8 +2480,9 @@
header.highlight_major = (BYTE)(m_nRowsPerMeasure & 0xFF);
// An additional "---" pattern is appended so Impulse Tracker won't ignore the last order item.
- // Interestingly, this can exceed IT's 256 order limit.
+ // Interestingly, this can exceed IT's 256 order limit. Also, IT will always save at least two orders.
header.ordnum = min(Order.GetLengthTailTrimmed(), ModSpecs::it.ordersMax) + 1;
+ if(header.ordnum < 2) header.ordnum = 2;
header.patnum = MAX_PATTERNS;
while ((header.patnum > 0) && (!Patterns[header.patnum-1])) {
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-11-03 09:42:38 UTC (rev 411)
@@ -774,7 +774,7 @@
m_pConfig->SetMixLevels(m_nMixLevels);
RecalculateGainForAllPlugs();
- if (m_nType && (m_nType != MOD_TYPE_MPT))
+ if (m_nType)
{
SetModSpecsPointer(m_pModSpecs, m_nType);
Order.resize(GetModSpecifications().ordersMax);
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2009-11-03 09:42:38 UTC (rev 411)
@@ -971,7 +971,7 @@
inline uint32 MODSAMPLE::GetSampleRate(const MODTYPE type) const
-//------------------------------------------------------------------
+//--------------------------------------------------------------
{
uint32 nRate;
if(type & (MOD_TYPE_MOD|MOD_TYPE_XM))
@@ -983,7 +983,7 @@
inline IMixPlugin* CSoundFile::GetInstrumentPlugin(INSTRUMENTINDEX instr)
-//----------------------------------------------------------------
+//-----------------------------------------------------------------------
{
if(instr > 0 && instr < MAX_INSTRUMENTS && Instruments[instr] && Instruments[instr]->nMixPlug && Instruments[instr]->nMixPlug <= MAX_MIXPLUGINS)
return m_MixPlugins[Instruments[instr]->nMixPlug-1].pMixPlugin;
Modified: trunk/OpenMPT/soundlib/modsmp_ctrl.cpp
===================================================================
--- trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-11-02 21:54:36 UTC (rev 410)
+++ trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-11-03 09:42:38 UTC (rev 411)
@@ -15,9 +15,20 @@
//----------------------------------------------------------------------------------------------------------
{
LPSTR const pOldSmp = smp.pSample;
+ DWORD dwOrFlags = 0;
+ DWORD dwAndFlags = MAXDWORD;
+ if(smp.uFlags & CHN_16BIT)
+ dwOrFlags |= CHN_16BIT;
+ else
+ dwAndFlags &= ~CHN_16BIT;
+ if(smp.uFlags & CHN_STEREO)
+ dwOrFlags |= CHN_STEREO;
+ else
+ dwAndFlags &= ~CHN_STEREO;
+
BEGIN_CRITICAL();
if (pSndFile != nullptr)
- ctrlChn::ReplaceSample(pSndFile->Chn, pOldSmp, pNewSample, nNewLength);
+ ctrlChn::ReplaceSample(pSndFile->Chn, pOldSmp, pNewSample, nNewLength, dwOrFlags, dwAndFlags);
smp.pSample = pNewSample;
smp.nLength = nNewLength;
CSoundFile::FreeSample(pOldSmp);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|