From: <sag...@us...> - 2013-04-22 20:21:03
|
Revision: 1932 http://sourceforge.net/p/modplug/code/1932 Author: saga-games Date: 2013-04-22 20:20:55 +0000 (Mon, 22 Apr 2013) Log Message: ----------- [Mod] XM Loader: Don't trash --- patterns when importing old XMs to maintain playback compatibility (only show a warning on saving). [New] Pattern Clipboard Manager: Can now rename clipboard entries by double-clicking them. Modified Paths: -------------- trunk/OpenMPT/mptrack/PatternClipboard.cpp trunk/OpenMPT/mptrack/PatternClipboard.h trunk/OpenMPT/soundlib/Load_xm.cpp Modified: trunk/OpenMPT/mptrack/PatternClipboard.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternClipboard.cpp 2013-04-22 16:38:18 UTC (rev 1931) +++ trunk/OpenMPT/mptrack/PatternClipboard.cpp 2013-04-22 20:20:55 UTC (rev 1932) @@ -903,6 +903,7 @@ BEGIN_MESSAGE_MAP(PatternClipboardDialog, CDialog) ON_EN_UPDATE(IDC_EDIT1, OnNumClipboardsChanged) ON_LBN_SELCHANGE(IDC_LIST1, OnSelectClipboard) + ON_LBN_DBLCLK(IDC_LIST1, OnEditName) END_MESSAGE_MAP() PatternClipboardDialog PatternClipboardDialog::instance; @@ -946,6 +947,7 @@ { return; } + OnEndEdit(); PatternClipboard::SetClipboardSize(GetDlgItemInt(IDC_EDIT1, nullptr, FALSE)); UpdateList(); } @@ -981,12 +983,41 @@ } PatternClipboard::clipindex_t item = reinterpret_cast<PatternClipboard::clipindex_t>(clipList.GetItemDataPtr(clipList.GetCurSel())); PatternClipboard::SelectClipboard(item); + OnEndEdit(); } +void PatternClipboardDialog::OnOK() +//--------------------------------- +{ + const CWnd *focus = GetFocus(); + if(focus == &editNameBox) + { + // User pressed enter in clipboard name edit box => cancel editing + OnEndEdit(); + } else if(focus == &clipList) + { + // User pressed enter in the clipboard name list => start editing + OnEditName(); + } else + { + CDialog::OnOK(); + } +} + + void PatternClipboardDialog::OnCancel() //------------------------------------- { + if(GetFocus() == &editNameBox) + { + // User pressed enter in clipboard name edit box => just cancel editing + editNameBox.DestroyWindow(); + return; + } + + OnEndEdit(false); + isCreated = false; isLocked = true; @@ -997,3 +1028,58 @@ DestroyWindow(); } + + +void PatternClipboardDialog::OnEditName() +//--------------------------------------- +{ + OnEndEdit(); + + const int sel = clipList.GetCurSel(); + if(sel == LB_ERR) + { + return; + } + + CRect rect; + clipList.GetItemRect(sel, rect); + rect.InflateRect(0, 2, 0, 2); + + // Create the edit control + editNameBox.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL, rect, &clipList, 1); + editNameBox.SetFont(clipList.GetFont()); + editNameBox.SetWindowText(PatternClipboard::instance.clipboards[sel].description); + editNameBox.SetSel(0, -1, TRUE); + editNameBox.SetFocus(); + SetWindowLongPtr(editNameBox.m_hWnd, GWLP_USERDATA, (LONG_PTR)clipList.GetItemDataPtr(sel)); +} + + +void PatternClipboardDialog::OnEndEdit(bool apply) +//------------------------------------------------ +{ + if(editNameBox.GetSafeHwnd() == NULL) + { + return; + } + + if(apply) + { + size_t sel = GetWindowLongPtr(editNameBox.m_hWnd, GWLP_USERDATA); + if(sel >= PatternClipboard::instance.clipboards.size()) + { + // What happened? + return; + } + + CString newName; + editNameBox.GetWindowText(newName); + + PatternClipboard::instance.clipboards[sel].description = newName; + } + + SetWindowLongPtr(editNameBox.m_hWnd, GWLP_USERDATA, LONG_PTR(-1)); + editNameBox.DestroyWindow(); + + UpdateList(); +} Modified: trunk/OpenMPT/mptrack/PatternClipboard.h =================================================================== --- trunk/OpenMPT/mptrack/PatternClipboard.h 2013-04-22 16:38:18 UTC (rev 1931) +++ trunk/OpenMPT/mptrack/PatternClipboard.h 2013-04-22 20:20:55 UTC (rev 1932) @@ -116,6 +116,7 @@ CSpinButtonCtrl numClipboardsSpin; CListBox clipList; + CEdit editNameBox; int posX, posY; bool isLocked, isCreated; @@ -132,7 +133,13 @@ virtual void DoDataExchange(CDataExchange* pDX); DECLARE_MESSAGE_MAP(); - afx_msg void OnCancel(); + virtual void OnOK(); + virtual void OnCancel(); + afx_msg void OnNumClipboardsChanged(); afx_msg void OnSelectClipboard(); + + // Edit clipboard name + afx_msg void OnEditName(); + void OnEndEdit(bool apply = true); }; Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2013-04-22 16:38:18 UTC (rev 1931) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2013-04-22 20:20:55 UTC (rev 1932) @@ -544,7 +544,7 @@ if(!Patterns.IsValidPat(0xFE)) Order.RemovePattern(0xFE); if(!Patterns.IsValidPat(0xFF)) - Order.RemovePattern(0xFF); + Order.Replace(0xFF, Order.GetInvalidPatIndex()); } return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |