From: <sag...@us...> - 2013-12-06 22:46:46
|
Revision: 3395 http://sourceforge.net/p/modplug/code/3395 Author: saga-games Date: 2013-12-06 22:46:33 +0000 (Fri, 06 Dec 2013) Log Message: ----------- [Fix] libopenmpt: Pattern row formatting didn't work with special notes (cut etc.) [Ref] Unify ::GetNoteStr and CSoundFile::GetNoteName Modified Paths: -------------- trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Tables.cpp trunk/OpenMPT/soundlib/modcommand.h Modified: trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -882,8 +882,8 @@ const ModCommand cell = m_sndFile->Patterns[p][r*numchannels+c]; text.clear(); high.clear(); - text += cell.IsNote() ? m_sndFile->GetNoteName( cell.note, cell.instr ) : std::string("..."); - high += cell.IsNote() ? std::string("nnn") : std::string("..."); + text += ( cell.IsNote() || cell.IsSpecialNote() ) ? m_sndFile->GetNoteName( cell.note, cell.instr ) : std::string("..."); + high += ( cell.IsNote() || cell.IsSpecialNote() ) ? std::string("nnn") : std::string("..."); if ( width >= 6 ) { text += std::string(" "); high += std::string(" "); Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -194,7 +194,7 @@ // Note s[0] = 0; - std::string temp = sndFile.GetNoteName(nPos+1, m_nInstrument); + std::string temp = sndFile.GetNoteName(static_cast<ModCommand::NOTE>(nPos + 1), m_nInstrument); temp.resize(4); if ((nPos >= 0) && (nPos < NOTE_MAX)) wsprintf(s, "%s", temp.c_str()); rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont); @@ -206,7 +206,7 @@ strcpy(s, "..."); if ((pIns) && (nPos >= 0) && (nPos < NOTE_MAX) && (pIns->NoteMap[nPos] != NOTE_NONE)) { - UINT n = pIns->NoteMap[nPos]; + ModCommand::NOTE n = pIns->NoteMap[nPos]; if(ModCommand::IsNote(n)) { std::string temp = sndFile.GetNoteName(n, m_nInstrument); Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -305,7 +305,7 @@ CString sDisplayName; if (m_modDoc.GetSplitKeyboardSettings().IsSplitActive()) { - wsprintf(s, szSplitFormat, nSplitIns, GetNoteStr(noteSplit), i, + wsprintf(s, szSplitFormat, nSplitIns, m_sndFile.GetNoteName(noteSplit, nSplitIns).c_str(), i, (LPCTSTR)sSplitInsName, (LPCTSTR)m_modDoc.GetPatternViewInstrumentName(i, true, false)); sDisplayName = s; } @@ -323,7 +323,7 @@ for(SAMPLEINDEX i = 1; i <= nmax; i++) if (m_sndFile.GetSample(i).pSample) { if (m_modDoc.GetSplitKeyboardSettings().IsSplitActive()) - wsprintf(s, szSplitFormat, nSplitIns, GetNoteStr(noteSplit), i, m_sndFile.m_szNames[nSplitIns], m_sndFile.m_szNames[i]); + wsprintf(s, szSplitFormat, nSplitIns, m_sndFile.GetNoteName(noteSplit, nSplitIns).c_str(), i, m_sndFile.m_szNames[nSplitIns], m_sndFile.m_szNames[i]); else wsprintf(s, "%02u: %s", i, m_sndFile.m_szNames[i]); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -46,7 +46,15 @@ CTrackApp theApp; +const char *szSpecialNoteNamesMPT[] = {TEXT("PCs"), TEXT("PC"), TEXT("~~ (Note Fade)"), TEXT("^^ (Note Cut)"), TEXT("== (Note Off)")}; +const char *szSpecialNoteShortDesc[] = {TEXT("Param Control (Smooth)"), TEXT("Param Control"), TEXT("Note Fade"), TEXT("Note Cut"), TEXT("Note Off")}; +// Make sure that special note arrays include string for every note. +STATIC_ASSERT(NOTE_MAX_SPECIAL - NOTE_MIN_SPECIAL + 1 == CountOf(szSpecialNoteNamesMPT)); +STATIC_ASSERT(CountOf(szSpecialNoteShortDesc) == CountOf(szSpecialNoteNamesMPT)); + +const char *szHexChar = "0123456789ABCDEF"; + CDocument *CModDocTemplate::OpenDocumentFile(const mpt::PathString &filename, BOOL addToMru, BOOL makeVisible) //------------------------------------------------------------------------------------------------------------ { Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/mptrack/Mptrack.h 2013-12-06 22:46:33 UTC (rev 3395) @@ -398,22 +398,13 @@ // default note names. void AppendNotesToControlEx(CComboBox& combobox, const CSoundFile* const pSndFile = nullptr, const INSTRUMENTINDEX nInstr = MAX_INSTRUMENTS); -// Returns note name(such as "C-5") of given note. Regular notes are in range [1,MAX_NOTE]. -LPCTSTR GetNoteStr(const ModCommand::NOTE); - /////////////////////////////////////////////////// // Tables -//const LPCTSTR szSpecialNoteNames[] = {TEXT("PCs"), TEXT("PC"), TEXT("~~"), TEXT("^^"), TEXT("==")}; -const LPCTSTR szSpecialNoteNames[] = {TEXT("PCs"), TEXT("PC"), TEXT("~~ (Note Fade)"), TEXT("^^ (Note Cut)"), TEXT("== (Note Off)")}; -const LPCTSTR szSpecialNoteShortDesc[] = {TEXT("Param Control (Smooth)"), TEXT("Param Control"), TEXT("Note Fade"), TEXT("Note Cut"), TEXT("Note Off")}; +extern const char *szSpecialNoteNamesMPT[]; +extern const char *szSpecialNoteShortDesc[]; +extern const char *szHexChar; -// Make sure that special note arrays include string for every note. -STATIC_ASSERT(NOTE_MAX_SPECIAL - NOTE_MIN_SPECIAL + 1 == CountOf(szSpecialNoteNames)); -STATIC_ASSERT(CountOf(szSpecialNoteShortDesc) == CountOf(szSpecialNoteNames)); - -const LPCSTR szHexChar = "0123456789ABCDEF"; - // Defined in load_mid.cpp extern const char *szMidiProgramNames[128]; extern const char *szMidiPercussionNames[61]; // notes 25..85 Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -1956,7 +1956,7 @@ s[0] = 0; if ((note) && (note <= NOTE_MAX)) { - const std::string temp = pModDoc->GetrSoundFile().GetNoteName(static_cast<int16>(note), m_nInstrument); + const std::string temp = pModDoc->GetrSoundFile().GetNoteName(static_cast<ModCommand::NOTE>(note), m_nInstrument); if(temp.size() >= sizeofS) wsprintf(s, "%s", "..."); else Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -2355,7 +2355,7 @@ // Note if(m_findReplace.findFlags[FindReplace::Note]) { - result.Append(GetNoteStr(m_findReplace.cmdFind.note)); + result.Append(pSndFile->GetNoteName(m_findReplace.cmdFind.note).c_str()); } else { result.Append("???"); Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -960,7 +960,7 @@ SAMPLEINDEX nSample = m_CbnSample.GetItemData(m_CbnSample.GetCurSel()); UINT nBaseOctave = m_SbOctave.GetPos() & 7; - const std::string temp = sndFile.GetNoteName(lParam+1+12*nBaseOctave, m_nInstrument).c_str(); + const std::string temp = sndFile.GetNoteName(static_cast<ModCommand::NOTE>(lParam + 1 + 12 * nBaseOctave), m_nInstrument).c_str(); if(temp.size() >= CountOf(s)) wsprintf(s, "%s", "..."); else @@ -1285,29 +1285,7 @@ ///////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// -const LPCTSTR szNullNote = TEXT("..."); -const LPCTSTR szUnknownNote = TEXT("???"); - -LPCTSTR GetNoteStr(const ModCommand::NOTE nNote) -//---------------------------------------------- -{ - if(nNote == 0) - return szNullNote; - - if(nNote >= 1 && nNote <= NOTE_MAX) - { - return szDefaultNoteNames[nNote-1]; - } - else if(nNote >= NOTE_MIN_SPECIAL && nNote <= NOTE_MAX_SPECIAL) - { - return szSpecialNoteNames[nNote - NOTE_MIN_SPECIAL]; - } - else - return szUnknownNote; -} - - void AppendNotesToControl(CComboBox& combobox, const ModCommand::NOTE noteStart, const ModCommand::NOTE noteEnd) //------------------------------------------------------------------------------------------------------------------ { @@ -1332,6 +1310,6 @@ for(ModCommand::NOTE nNote = NOTE_MIN_SPECIAL - 1; nNote++ < NOTE_MAX_SPECIAL;) { if(pSndFile == nullptr || pSndFile->GetModSpecifications().HasNote(nNote) == true) - combobox.SetItemData(combobox.AddString(szSpecialNoteNames[nNote-NOTE_MIN_SPECIAL]), nNote); + combobox.SetItemData(combobox.AddString(szSpecialNoteNamesMPT[nNote-NOTE_MIN_SPECIAL]), nNote); } } Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -29,6 +29,7 @@ #endif // NO_ARCHIVE_SUPPORT extern BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength); +extern const char *szSpecialNoteNames[]; // -> CODE#0027 @@ -1752,13 +1753,22 @@ #endif -std::string CSoundFile::GetNoteName(const CTuning::NOTEINDEXTYPE& note, const INSTRUMENTINDEX inst) const -//------------------------------------------------------------------------------------------------------- +std::string CSoundFile::GetNoteName(const ModCommand::NOTE note, const INSTRUMENTINDEX inst) const +//------------------------------------------------------------------------------------------------ { - if((inst >= MAX_INSTRUMENTS && inst != INSTRUMENTINDEX_INVALID) || note < NOTE_MIN || note > NOTE_MAX) return "BUG"; + if(ModCommand::IsSpecialNote(note)) + { + return szSpecialNoteNames[note - NOTE_MIN_SPECIAL]; + } else if(note == NOTE_NONE) + { + return "..."; + } else if(!ModCommand::IsNote(note)) + { + return "???"; + } // For MPTM instruments with custom tuning, find the appropriate note name. Else, use default note names. - if(inst != INSTRUMENTINDEX_INVALID && GetType() == MOD_TYPE_MPT && Instruments[inst] && Instruments[inst]->pTuning) + if(GetType() == MOD_TYPE_MPT && inst >= 1 && inst <= GetNumInstruments() && Instruments[inst] && Instruments[inst]->pTuning) return Instruments[inst]->pTuning->GetNoteName(note - NOTE_MIDDLEC); else return szDefaultNoteNames[note - 1]; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/soundlib/Sndfile.h 2013-12-06 22:46:33 UTC (rev 3395) @@ -277,7 +277,7 @@ static CTuning *GetDefaultTuning() {return nullptr;} CTuningCollection& GetTuneSpecificTunings() {return *m_pTuningsTuneSpecific;} - std::string GetNoteName(const int16&, const INSTRUMENTINDEX inst = INSTRUMENTINDEX_INVALID) const; + std::string GetNoteName(const ModCommand::NOTE note, const INSTRUMENTINDEX inst = INSTRUMENTINDEX_INVALID) const; private: CTuningCollection* m_pTuningsTuneSpecific; #ifdef MODPLUG_TRACKER Modified: trunk/OpenMPT/soundlib/Tables.cpp =================================================================== --- trunk/OpenMPT/soundlib/Tables.cpp 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/soundlib/Tables.cpp 2013-12-06 22:46:33 UTC (rev 3395) @@ -43,7 +43,10 @@ "C-9", "C#9", "D-9", "D#9", "E-9", "F-9", "F#9", "G-9", "G#9", "A-9", "A#9", "B-9", }; +const char *szSpecialNoteNames[] = { "PCs", "PC", "~~~", "^^^", "===" }; +STATIC_ASSERT(CountOf(szSpecialNoteNames) == NOTE_MAX_SPECIAL - NOTE_MIN_SPECIAL + 1); + /////////////////////////////////////////////////////////// // File Formats Information (name, extension, etc) Modified: trunk/OpenMPT/soundlib/modcommand.h =================================================================== --- trunk/OpenMPT/soundlib/modcommand.h 2013-12-06 09:31:14 UTC (rev 3394) +++ trunk/OpenMPT/soundlib/modcommand.h 2013-12-06 22:46:33 UTC (rev 3395) @@ -153,6 +153,9 @@ // Returns true if and only if note is a valid musical note. bool IsNote() const { return note >= NOTE_MIN && note <= NOTE_MAX; } static bool IsNote(NOTE note) { return note >= NOTE_MIN && note <= NOTE_MAX; } + // Returns true if and only if note is a valid special note. + bool IsSpecialNote() const { return note >= NOTE_MIN_SPECIAL && note <= NOTE_MAX_SPECIAL; } + static bool IsSpecialNote(NOTE note) { return note >= NOTE_MIN_SPECIAL && note <= NOTE_MAX_SPECIAL; } // Returns true if and only if note is a valid musical note or the note entry is empty. bool IsNoteOrEmpty() const { return note == NOTE_NONE || IsNote(); } static bool IsNoteOrEmpty(NOTE note) { return note == NOTE_NONE || IsNote(note); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |