From: <sag...@us...> - 2013-01-20 18:40:51
|
Revision: 1504 http://sourceforge.net/p/modplug/code/1504 Author: saga-games Date: 2013-01-20 18:40:43 +0000 (Sun, 20 Jan 2013) Log Message: ----------- [New] Treeview: Most labels can now be edited. Known issue: Typing non-capital letters doesn't seem to work properly, even though the keyboard manager is disabled while editing. [Mod] OpenMPT: Version is now 1.21.01.07 Modified Paths: -------------- trunk/OpenMPT/common/version.h trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h trunk/OpenMPT/soundlib/mod_specifications.h Modified: trunk/OpenMPT/common/version.h =================================================================== --- trunk/OpenMPT/common/version.h 2013-01-19 16:50:01 UTC (rev 1503) +++ trunk/OpenMPT/common/version.h 2013-01-20 18:40:43 UTC (rev 1504) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 21 #define VER_MINOR 01 -#define VER_MINORMINOR 06 +#define VER_MINORMINOR 07 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-01-19 16:50:01 UTC (rev 1503) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-01-20 18:40:43 UTC (rev 1504) @@ -1707,7 +1707,7 @@ return; } bool bFirst = (pSndFile->GetNumInstruments() == 0); - LONG ins = m_pModDoc->InsertInstrument(); + INSTRUMENTINDEX ins = m_pModDoc->InsertInstrument(); if (ins != INSTRUMENTINDEX_INVALID) { SetCurrentInstrument(ins); Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2013-01-19 16:50:01 UTC (rev 1503) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2013-01-20 18:40:43 UTC (rev 1504) @@ -268,7 +268,7 @@ GetDlgItem(IDC_SPIN_SEQNUM)->EnableWindow(isMultiSeqAvail); // Enable/disable pattern names - BOOL isPatNameAvail = (m_pSndFile->GetType() & (MOD_TYPE_MPT|MOD_TYPE_IT|MOD_TYPE_XM)) ? TRUE : FALSE; + BOOL isPatNameAvail = m_pSndFile->GetModSpecifications().hasPatternNames ? TRUE : FALSE; GetDlgItem(IDC_STATIC_PATTERNNAME)->EnableWindow(isPatNameAvail); GetDlgItem(IDC_EDIT_PATTERNNAME)->EnableWindow(isPatNameAvail); } @@ -842,7 +842,7 @@ ORDERINDEX nInsertWhere = selection.firstOrd + nInsertCount + 1; if (nInsertWhere >= pSndFile->GetModSpecifications().ordersMax) return; - bool bSuccess = false; + bool success = false; // Has this pattern been duplicated already? (for multiselect) vector<PATTERNINDEX> patReplaceIndex(pSndFile->Patterns.Size(), PATTERNINDEX_INVALID); @@ -872,7 +872,7 @@ { memcpy(pSndFile->Patterns[nNewPat], pSndFile->Patterns[nCurPat], n * sizeof(ModCommand)); } - bSuccess = true; + success = true; // Mark as duplicated, so if this pattern is to be duplicated again, the same new pattern number is inserted into the order list. patReplaceIndex[nCurPat] = nNewPat; } else @@ -899,11 +899,11 @@ pSndFile->Order[selection.firstOrd + i + nInsertCount + 1] = nNewPat; } - bSuccess = true; + success = true; } } - if(bSuccess) + if(success) { m_OrderList.InvalidateRect(NULL, FALSE); m_OrderList.SetCurSel(nInsertWhere); Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2013-01-19 16:50:01 UTC (rev 1503) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2013-01-20 18:40:43 UTC (rev 1504) @@ -86,7 +86,7 @@ //------------------------------------------------------------------- { bool found = false; - for(UINT i = 1; i < env.nNodes; i++) + for(uint32 i = 1; i < env.nNodes; i++) { if(env.Ticks[i] <= env.Ticks[i - 1]) // "<=" so we can fix envelopes "on the fly" { @@ -287,7 +287,7 @@ } // Check for pattern names - if(m_SndFile.Patterns.GetNumNamedPatterns() > 0) + if(m_SndFile.Patterns.GetNumNamedPatterns() > 0 && !originalSpecs->hasPatternNames) { AddToLog("Found pattern names\n"); foundHacks = true; Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-01-19 16:50:01 UTC (rev 1503) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-01-20 18:40:43 UTC (rev 1504) @@ -18,11 +18,7 @@ #include "dlg_misc.h" #include "vstplug.h" -#ifndef TVS_SINGLEEXPAND -#define TVS_SINGLEEXPAND 0x400 -#endif - ///////////////////////////////////////////////////////////////////////////// // CModTreeDropTarget @@ -75,6 +71,8 @@ ON_NOTIFY_REFLECT(TVN_ITEMEXPANDED, OnItemExpanded) ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnBeginLDrag) ON_NOTIFY_REFLECT(TVN_BEGINRDRAG, OnBeginRDrag) + ON_NOTIFY_REFLECT(TVN_BEGINLABELEDIT,OnBeginLabelEdit) + ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndLabelEdit) ON_COMMAND(ID_MODTREE_REFRESH, OnRefreshTree) ON_COMMAND(ID_MODTREE_EXECUTE, OnExecuteItem) ON_COMMAND(ID_MODTREE_REMOVE, OnDeleteTreeItem) @@ -88,7 +86,6 @@ ON_COMMAND(ID_MODTREE_INSERT, OnInsertTreeItem) ON_COMMAND(ID_MODTREE_SWITCHTO, OnSwitchToTreeItem) ON_COMMAND(ID_MODTREE_CLOSE, OnCloseItem) - // -> CODE#0023 // -> DESC="IT project files (.itp)" ON_COMMAND(ID_MODTREE_SETPATH, OnSetItemPath) @@ -146,8 +143,8 @@ void CModTree::Init() //------------------- { - DWORD dwRemove = TVS_EDITLABELS|TVS_SINGLEEXPAND; - DWORD dwAdd = TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS; + DWORD dwRemove = TVS_SINGLEEXPAND; + DWORD dwAdd = TVS_EDITLABELS | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS; if (!m_pDataTree) { @@ -480,7 +477,7 @@ // Add DLS file folder _splitpath(pDlsBank->GetFileName(), NULL, NULL, szName, szExt); strcat(szName, szExt); - m_tiDLS[iDls] = InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, + m_tiDLS[iDls] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, szName, IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, 0, TVI_ROOT, hDlsRoot); // Memorize Banks WORD wBanks[16]; @@ -1180,7 +1177,7 @@ if (hItem) { const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); uint32 modItemID = GetModItemID(modItem); ModTreeDocInfo *pInfo = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL; @@ -1249,7 +1246,7 @@ if (hItem) { const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); uint32 modItemID = GetModItemID(modItem); ModTreeDocInfo *pInfo = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL; @@ -1414,7 +1411,7 @@ //-------------------------------------------- { const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); TCHAR s[64]; @@ -1508,7 +1505,7 @@ //------------------------------------------ { const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); //const uint32 modItemID = GetModItemID(modItem); switch(modItemType) @@ -2044,10 +2041,10 @@ //--------------------------------------------------- { const uint64 modItemDrop = GetModItem(hItem); - const uint32 modItemDropType = GetModItemType(modItemDrop); + const ModItemType modItemDropType = GetModItemType(modItemDrop); const uint32 modItemDropID = GetModItemID(modItemDrop); - const uint32 modItemDragType = GetModItemType(m_qwItemDrag); + const ModItemType modItemDragType = GetModItemType(m_qwItemDrag); const uint32 modItemDragID = GetModItemID(m_qwItemDrag); const ModTreeDocInfo *pInfoDrag = (m_nDragDocNdx < DocInfo.size() ? DocInfo[m_nDragDocNdx] : nullptr); @@ -2196,9 +2193,9 @@ CHAR szFullPath[_MAX_PATH] = ""; InsLibGetFullPath(m_hItemDrag, szFullPath); if (modItemDropType == MODITEM_MIDIINSTRUMENT) - SetMidiInstrument((DWORD)modItemDropID, szFullPath); + SetMidiInstrument(modItemDropID, szFullPath); else - SetMidiPercussion((DWORD)modItemDropID, szFullPath); + SetMidiPercussion(modItemDropID, szFullPath); } return true; } @@ -2450,7 +2447,7 @@ BOOL bSep = FALSE; const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); SelectItem(hItem); @@ -2664,7 +2661,7 @@ if (hItem != NULL) { const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); switch(modItemType) @@ -2914,7 +2911,7 @@ CModDoc *pModDoc; const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); pModDoc = GetDocumentFromItem(hItem); @@ -2954,7 +2951,7 @@ CModDoc *pModDoc; const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); pModDoc = GetDocumentFromItem(hItem); @@ -2988,7 +2985,7 @@ CModDoc *pModDoc; const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); //const uint32 modItemID = GetModItemID(modItem); pModDoc = GetDocumentFromItem(hItem); @@ -3032,7 +3029,7 @@ HTREEITEM hItem = GetSelectedItem(); const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); CModDoc *pModDoc = GetDocumentFromItem(hItem); @@ -3051,7 +3048,7 @@ } else if(modItemType == MODITEM_SAMPLE) { // Duplicate sample - vector<SAMPLEINDEX> newOrder = GenerateInsertVector<SAMPLEINDEX>(pSndFile->GetNumSamples(), modItemID, modItemID); + vector<SAMPLEINDEX> newOrder = GenerateInsertVector<SAMPLEINDEX>(pSndFile->GetNumSamples(), modItemID, static_cast<SAMPLEINDEX>(modItemID)); if(pModDoc->ReArrangeSamples(newOrder) != SAMPLEINDEX_INVALID) { pModDoc->SetModified(); @@ -3063,7 +3060,7 @@ } else if(modItemType == MODITEM_INSTRUMENT) { // Duplicate instrument - vector<INSTRUMENTINDEX> newOrder = GenerateInsertVector<INSTRUMENTINDEX>(pSndFile->GetNumInstruments(), modItemID, modItemID); + vector<INSTRUMENTINDEX> newOrder = GenerateInsertVector<INSTRUMENTINDEX>(pSndFile->GetNumInstruments(), modItemID, static_cast<INSTRUMENTINDEX>(modItemID)); if(pModDoc->ReArrangeInstruments(newOrder) != INSTRUMENTINDEX_INVALID) { pModDoc->UpdateAllViews(NULL, HINT_INSNAMES | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_PATTERNDATA); @@ -3083,7 +3080,7 @@ HTREEITEM hItem = GetSelectedItem(); const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); CModDoc *pModDoc = GetDocumentFromItem(hItem); @@ -3133,7 +3130,7 @@ CModDoc *pModDoc; const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); pModDoc = GetDocumentFromItem(hItem); @@ -3260,7 +3257,7 @@ HTREEITEM hItem = HitTest(point, &flags); const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); //const uint32 modItemID = GetModItemID(modItem); switch(modItemType) @@ -3383,7 +3380,7 @@ HTREEITEM hItem = GetSelectedItem(); const uint64 modItem = GetModItem(hItem); - const uint32 modItemType = GetModItemType(modItem); + const ModItemType modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); if ((modItemType & 0xFFFF) == MODITEM_DLSBANK_FOLDER) @@ -3464,3 +3461,145 @@ CView* pView = pModDoc->GetNextView(pos); if (pView) pView->PostMessage(WM_COMMAND, ID_FILE_CLOSE); } + + +// Editing sample, instrument, order, pattern, etc. labels +void CModTree::OnBeginLabelEdit(NMHDR *nmhdr, LRESULT *result) +//------------------------------------------------------------ +{ + NMTVDISPINFO *info = reinterpret_cast<NMTVDISPINFO *>(nmhdr); + CEdit *editCtrl = GetEditControl(); + const uint64 modItem = GetModItem(info->item.hItem); + const ModItemType modItemType = GetModItemType(modItem); + const uint32 modItemID = GetModItemID(modItem); + const CModDoc *modDoc = GetDocumentFromItem(info->item.hItem); + + if(editCtrl != nullptr && modDoc != nullptr) + { + const CSoundFile *sndFile = modDoc->GetSoundFile(); + const CModSpecifications &modSpecs = sndFile->GetModSpecifications(); + char const *text = nullptr; + CString tempText; + + switch(modItemType) + { + case MODITEM_ORDER: + tempText.Format("%u", sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItemID >> 16)).At(static_cast<ORDERINDEX>(modItemID & 0xFFFF))); + text = tempText; + break; + + case MODITEM_SEQUENCE: + if(modItemID < sndFile->Order.GetNumSequences()) + { + text = sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItemID)).m_sName; + } + break; + + case MODITEM_PATTERN: + if(modItemID < sndFile->Patterns.GetNumPatterns() && modSpecs.hasPatternNames) + { + text = sndFile->Patterns[modItemID].GetName(); + editCtrl->SetLimitText(MAX_PATTERNNAME - 1); + } + break; + + case MODITEM_SAMPLE: + if(modItemID <= sndFile->GetNumSamples()) + { + text = sndFile->m_szNames[modItemID]; + editCtrl->SetLimitText(modSpecs.sampleNameLengthMax); + } + break; + + case MODITEM_INSTRUMENT: + if(modItemID <= sndFile->GetNumInstruments() && sndFile->Instruments[modItemID] != nullptr) + { + text = sndFile->Instruments[modItemID]->name; + editCtrl->SetLimitText(modSpecs.instrNameLengthMax); + } + break; + } + + if(text) + { + CMainFrame::GetMainFrame()->GetInputHandler()->Bypass(true); + editCtrl->SetWindowText(text); + *result = FALSE; + return; + } + } + *result = TRUE; +} + + +// End editing sample, instrument, order, pattern, etc. labels +void CModTree::OnEndLabelEdit(NMHDR *nmhdr, LRESULT *result) +//---------------------------------------------------------- +{ + CMainFrame::GetMainFrame()->GetInputHandler()->Bypass(false); + + NMTVDISPINFO *info = reinterpret_cast<NMTVDISPINFO *>(nmhdr); + const uint64 modItem = GetModItem(info->item.hItem); + const ModItemType modItemType = GetModItemType(modItem); + const uint32 modItemID = GetModItemID(modItem); + CModDoc *modDoc = GetDocumentFromItem(info->item.hItem); + + if(info->item.pszText != nullptr && modDoc != nullptr) + { + CSoundFile *sndFile = modDoc->GetSoundFile(); + const CModSpecifications &modSpecs = sndFile->GetModSpecifications(); + + switch(modItemType) + { + case MODITEM_ORDER: + { + PATTERNINDEX pat = ConvertStrTo<PATTERNINDEX>(info->item.pszText); + PATTERNINDEX &target = sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItemID >> 16)).At(static_cast<ORDERINDEX>(modItemID & 0xFFFF)); + if(pat < sndFile->Patterns.GetNumPatterns() && pat != target) + { + target = pat; + modDoc->SetModified(); + modDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); + } + } + break; + + case MODITEM_SEQUENCE: + if(modItemID < sndFile->Order.GetNumSequences() && sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItemID)).m_sName != info->item.pszText) + { + sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItemID)).m_sName = info->item.pszText; + modDoc->SetModified(); + modDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); + } + break; + + case MODITEM_PATTERN: + if(modItemID < sndFile->Patterns.GetNumPatterns() && modSpecs.hasPatternNames && sndFile->Patterns[modItemID].GetName() != info->item.pszText) + { + sndFile->Patterns[modItemID].SetName(info->item.pszText); + modDoc->SetModified(); + modDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_PAT) | HINT_PATTERNDATA | HINT_PATNAMES); + } + break; + + case MODITEM_SAMPLE: + if(modItemID <= sndFile->GetNumSamples() && strcmp(sndFile->m_szNames[modItemID], info->item.pszText)) + { + strncpy(sndFile->m_szNames[modItemID], info->item.pszText, modSpecs.sampleNameLengthMax); + modDoc->SetModified(); + modDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_SMP) | HINT_SMPNAMES | HINT_SAMPLEDATA | HINT_SAMPLEINFO); + } + break; + + case MODITEM_INSTRUMENT: + if(modItemID <= sndFile->GetNumInstruments() && sndFile->Instruments[modItemID] != nullptr && strcmp(sndFile->Instruments[modItemID]->name, info->item.pszText)) + { + strncpy(sndFile->Instruments[modItemID]->name, info->item.pszText, modSpecs.instrNameLengthMax); + modDoc->SetModified(); + modDoc->UpdateAllViews(NULL, (UINT(modItemID) << HINT_SHIFT_INS) | HINT_ENVELOPE | HINT_INSTRUMENT); + } + break; + } + } + *result = FALSE; +} Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-01-19 16:50:01 UTC (rev 1503) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-01-20 18:40:43 UTC (rev 1504) @@ -20,34 +20,6 @@ using std::vector; using std::bitset; -enum -{ - MODITEM_NULL = 0, - MODITEM_ORDER, - MODITEM_PATTERN, - MODITEM_SAMPLE, - MODITEM_INSTRUMENT, - MODITEM_COMMENTS, - MODITEM_EFFECT, - MODITEM_HDR_SONG, - MODITEM_HDR_ORDERS, - MODITEM_HDR_PATTERNS, - MODITEM_HDR_SAMPLES, - MODITEM_HDR_INSTRUMENTS, - MODITEM_HDR_INSTRUMENTLIB, - MODITEM_HDR_MIDILIB, - MODITEM_HDR_MIDIGROUP, - MODITEM_MIDIINSTRUMENT, - MODITEM_MIDIPERCUSSION, - MODITEM_INSLIB_FOLDER, - MODITEM_INSLIB_SAMPLE, - MODITEM_INSLIB_INSTRUMENT, - MODITEM_INSLIB_SONG, - MODITEM_DLSBANK_FOLDER, - MODITEM_DLSBANK_INSTRUMENT, - MODITEM_SEQUENCE, -}; - #define TREESTATUS_RDRAG 0x01 #define TREESTATUS_LDRAG 0x02 #define TREESTATUS_SINGLEEXPAND 0x04 @@ -116,6 +88,35 @@ //============================== { protected: + + enum ModItemType + { + MODITEM_NULL = 0, + MODITEM_ORDER, + MODITEM_PATTERN, + MODITEM_SAMPLE, + MODITEM_INSTRUMENT, + MODITEM_COMMENTS, + MODITEM_EFFECT, + MODITEM_HDR_SONG, + MODITEM_HDR_ORDERS, + MODITEM_HDR_PATTERNS, + MODITEM_HDR_SAMPLES, + MODITEM_HDR_INSTRUMENTS, + MODITEM_HDR_INSTRUMENTLIB, + MODITEM_HDR_MIDILIB, + MODITEM_HDR_MIDIGROUP, + MODITEM_MIDIINSTRUMENT, + MODITEM_MIDIPERCUSSION, + MODITEM_INSLIB_FOLDER, + MODITEM_INSLIB_SAMPLE, + MODITEM_INSLIB_INSTRUMENT, + MODITEM_INSLIB_SONG, + MODITEM_DLSBANK_FOLDER, + MODITEM_DLSBANK_INSTRUMENT, + MODITEM_SEQUENCE, + }; + CSoundFile m_SongFile; CModTreeDropTarget m_DropTarget; CModTree *m_pDataTree; @@ -148,7 +149,7 @@ void EmptyInstrumentLibrary(); void FillInstrumentLibrary(); uint64 GetModItem(HTREEITEM hItem); - uint32 GetModItemType(const uint64 modItem) {return static_cast<uint32>(modItem & 0xFFFF);}; // return "item type" part of mod item variable ( & 0xFFFF ) + ModItemType GetModItemType(const uint64 modItem) {return static_cast<ModItemType>(modItem & 0xFFFF);}; // return "item type" part of mod item variable ( & 0xFFFF ) uint32 GetModItemID(const uint64 modItem) {return static_cast<uint32>(modItem >> 16);}; // return "item ID" part of mod item variable ( >> 16 ) BOOL SetMidiInstrument(UINT nIns, LPCTSTR lpszFileName); BOOL SetMidiPercussion(UINT nPerc, LPCTSTR lpszFileName); @@ -216,6 +217,8 @@ afx_msg void OnInsertTreeItem(); afx_msg void OnSwitchToTreeItem(); // hack for sequence items to avoid double-click action afx_msg void OnCloseItem(); + afx_msg void OnBeginLabelEdit(NMHDR *nmhdr, LRESULT *result); + afx_msg void OnEndLabelEdit(NMHDR *nmhdr, LRESULT *result); // -> CODE#0023 // -> DESC="IT project files (.itp)" Modified: trunk/OpenMPT/soundlib/mod_specifications.h =================================================================== --- trunk/OpenMPT/soundlib/mod_specifications.h 2013-01-19 16:50:01 UTC (rev 1503) +++ trunk/OpenMPT/soundlib/mod_specifications.h 2013-01-20 18:40:43 UTC (rev 1504) @@ -67,6 +67,7 @@ bool hasRestartPos; bool supportsPlugins; bool hasPatternSignatures; // Can patterns have a custom time signature? + bool hasPatternNames; // Cat patterns have a name? SongFlags songFlags; // Supported song flags }; @@ -116,6 +117,7 @@ true, // Has restart position (order) true, // Supports plugins true, // Custom pattern time signatures + true, // Pattern names SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX | SONG_EMBEDMIDICFG, // Supported song flags }; @@ -160,6 +162,7 @@ true, // Has restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures + false, // No pattern names SONG_PT1XMODE, // Supported song flags }; @@ -179,7 +182,7 @@ 1, // Channel min 32, // Channel max 32, // Min tempo - 255, // Max tempo + 10000, // Max tempo 1, // Min pattern rows 256, // Max pattern rows 20, // Max mod name length @@ -202,6 +205,7 @@ true, // Has restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures + false, // No pattern names SONG_LINEARSLIDES, // Supported song flags }; @@ -221,7 +225,7 @@ 1, // Channel min 127, // Channel max 32, // Min tempo - 512, // Max tempo + 10000, // Max tempo 1, // Min pattern rows 1024, // Max pattern rows 20, // Max mod name length @@ -244,6 +248,7 @@ true, // Has restart position (order) true, // Supports plugins false, // No custom pattern time signatures + true, // Pattern names SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_EMBEDMIDICFG, // Supported song flags }; @@ -285,6 +290,7 @@ false, // Doesn't have restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures + false, // No pattern names SONG_FASTVOLSLIDES | SONG_AMIGALIMITS, // Supported song flags }; @@ -327,6 +333,7 @@ false, // Doesn't have restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures + false, // No pattern names SONG_FASTVOLSLIDES | SONG_AMIGALIMITS, // Supported song flags }; @@ -368,6 +375,7 @@ false, // Doesn't have restart position (order) false, // Doesn't support plugins false, // No custom pattern time signatures + false, // No pattern names SONG_LINEARSLIDES | SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX | SONG_EMBEDMIDICFG, // Supported song flags }; @@ -409,6 +417,7 @@ false, // Doesn't have restart position (order) true, // Supports plugins false, // No custom pattern time signatures + true, // Pattern names SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX | SONG_EMBEDMIDICFG | SONG_ITPROJECT | SONG_ITPEMBEDIH, // Supported song flags }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |