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. |