From: <sv...@op...> - 2024-12-31 22:04:57
|
Author: sagamusix Date: Tue Dec 31 23:04:45 2024 New Revision: 22668 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22668 Log: [Fix] Pattern tab: Using the Toggle Overflow Paste shortcut didn't cause any visual updates at all. [Fix] Pattern tab: Checking or unchecking Overflow Paste in one pattern editor didn't update the display in other pattern editors. Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/WindowMessages.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp Tue Dec 31 22:14:16 2024 (r22667) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp Tue Dec 31 23:04:45 2024 (r22668) @@ -180,7 +180,7 @@ m_SpinInstrument.SetPos(0); SetDlgItemInt(IDC_EDIT_SPACING, TrackerSettings::Instance().gnPatternSpacing); - CheckDlgButton(IDC_PATTERN_FOLLOWSONG, !(TrackerSettings::Instance().m_dwPatternSetup & PATTERN_FOLLOWSONGOFF)); + CheckDlgButton(IDC_PATTERN_FOLLOWSONG, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_FOLLOWSONGOFF) ? BST_UNCHECKED : BST_CHECKED); m_SpinSequence.SetRange32(1, m_sndFile.Order.GetNumSequences()); m_SpinSequence.SetPos(m_sndFile.Order.GetCurrentSequenceIndex() + 1); @@ -188,7 +188,7 @@ m_OrderList.SetFocus(); - UpdateView(PatternHint().Names().ModType(), NULL); + UpdateView(PatternHint().Names().ModType(), nullptr); RecalcLayout(); m_initialized = true; @@ -229,7 +229,7 @@ cx += 2; if((cx > 0) && (cy > 0)) { - m_OrderList.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOZORDER | SWP_DRAWFRAME); + m_OrderList.SetWindowPos(nullptr, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOZORDER | SWP_DRAWFRAME); } } } @@ -279,7 +279,6 @@ if(hintType[HINT_MPTOPTIONS]) { m_ToolBar.UpdateStyle(); - m_ToolBar.SetState(ID_OVERFLOWPASTE, ((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED); } bool instrPluginsChanged = false; @@ -442,7 +441,7 @@ case CTRLMSG_FORCEREFRESH: //refresh GUI - m_OrderList.InvalidateRect(NULL, FALSE); + m_OrderList.InvalidateRect(nullptr, FALSE); break; case CTRLMSG_GETCURRENTORDER: @@ -473,12 +472,20 @@ break; case CTRLMSG_SETRECORD: - if (lParam >= 0) m_bRecord = (BOOL)(lParam); else m_bRecord = !m_bRecord; - m_ToolBar.SetState(IDC_PATTERN_RECORD, ((m_bRecord) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); - TrackerSettings::Instance().gbPatternRecord = (m_bRecord != 0); + if(lParam >= 0) + m_bRecord = lParam != 0; + else + m_bRecord = !m_bRecord; + m_ToolBar.CheckButton(IDC_PATTERN_RECORD, m_bRecord ? TRUE : FALSE); + TrackerSettings::Instance().gbPatternRecord = m_bRecord; SendViewMessage(VIEWMSG_SETRECORD, m_bRecord); break; + case CTRLMSG_TOGGLE_OVERFLOW_PASTE: + m_ToolBar.CheckButton(ID_OVERFLOWPASTE, m_ToolBar.IsButtonChecked(ID_OVERFLOWPASTE) ? FALSE : TRUE); + OnToggleOverflowPaste(); + break; + case CTRLMSG_PREVORDER: m_OrderList.SetCurSel(Order().GetPreviousOrderIgnoringSkips(m_OrderList.GetCurSel(true).firstOrd), true); break; @@ -487,14 +494,13 @@ m_OrderList.SetCurSel(Order().GetNextOrderIgnoringSkips(m_OrderList.GetCurSel(true).firstOrd), true); break; - //rewbs.customKeys case CTRLMSG_PAT_FOLLOWSONG: // parameters: 0 = turn off, 1 = toggle { UINT state = FALSE; if(lParam == 1) // toggle { - state = !IsDlgButtonChecked(IDC_PATTERN_FOLLOWSONG); + state = IsDlgButtonChecked(IDC_PATTERN_FOLLOWSONG) != BST_UNCHECKED; } CheckDlgButton(IDC_PATTERN_FOLLOWSONG, state); OnFollowSong(); @@ -530,6 +536,10 @@ UpdateView(SequenceHint(static_cast<SEQUENCEINDEX>(lParam)).Names(), nullptr); break; + case CTRLMSG_PAT_UPDATE_TOOLBAR: + m_ToolBar.CheckButton(ID_OVERFLOWPASTE, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TRUE : FALSE); + break; + default: return CModControlDlg::OnModCtrlMsg(wParam, lParam); } @@ -811,8 +821,8 @@ m_OrderList.Invalidate(FALSE); SetCurrentPattern(newPat); m_modDoc.SetModified(); - m_modDoc.UpdateAllViews(NULL, PatternHint(newPat).Names(), this); - m_modDoc.UpdateAllViews(NULL, SequenceHint().Data(), this); + m_modDoc.UpdateAllViews(nullptr, PatternHint(newPat).Names(), this); + m_modDoc.UpdateAllViews(nullptr, SequenceHint().Data(), this); SwitchToView(); } } @@ -1060,9 +1070,8 @@ void CCtrlPatterns::OnPatternRecord() { - UINT nState = m_ToolBar.GetState(IDC_PATTERN_RECORD); - m_bRecord = ((nState & TBSTATE_CHECKED) != 0); - TrackerSettings::Instance().gbPatternRecord = (m_bRecord != 0); + m_bRecord = m_ToolBar.IsButtonChecked(IDC_PATTERN_RECORD) != 0; + TrackerSettings::Instance().gbPatternRecord = m_bRecord; SendViewMessage(VIEWMSG_SETRECORD, m_bRecord); SwitchToView(); } @@ -1070,23 +1079,29 @@ void CCtrlPatterns::OnPatternVUMeters() { - UINT nState = m_ToolBar.GetState(ID_PATTERN_VUMETERS); - m_bVUMeters = ((nState & TBSTATE_CHECKED) != 0); + m_bVUMeters = m_ToolBar.IsButtonChecked(ID_PATTERN_VUMETERS) != 0; TrackerSettings::Instance().gbPatternVUMeters = (m_bVUMeters != 0); SendViewMessage(VIEWMSG_SETVUMETERS, m_bVUMeters); SwitchToView(); } -//rewbs.patPlugName + void CCtrlPatterns::OnPatternViewPlugNames() { - UINT nState = m_ToolBar.GetState(ID_VIEWPLUGNAMES); - m_bPluginNames = ((nState & TBSTATE_CHECKED) != 0); + m_bPluginNames = m_ToolBar.IsButtonChecked(ID_VIEWPLUGNAMES) != 0; TrackerSettings::Instance().gbPatternPluginNames = (m_bPluginNames != 0); SendViewMessage(VIEWMSG_SETPLUGINNAMES, m_bPluginNames); SwitchToView(); } -//end rewbs.patPlugName + + +void CCtrlPatterns::OnToggleOverflowPaste() +{ + TrackerSettings::Instance().m_dwPatternSetup ^= PATTERN_OVERFLOWPASTE; + theApp.PostMessageToAllViews(WM_MOD_CTRLMSG, CTRLMSG_PAT_UPDATE_TOOLBAR); + SwitchToView(); +} + void CCtrlPatterns::OnPatternProperties() { @@ -1189,7 +1204,7 @@ { if(m_sndFile.GetType() & (MOD_TYPE_XM | MOD_TYPE_IT | MOD_TYPE_MPT)) m_modDoc.SetModified(); - m_modDoc.UpdateAllViews(NULL, PatternHint(nPat).Names(), this); + m_modDoc.UpdateAllViews(nullptr, PatternHint(nPat).Names(), this); } } } @@ -1223,7 +1238,7 @@ { CInputHandler *ih = CMainFrame::GetInputHandler(); NMTOOLBAR *pToolBar = reinterpret_cast<NMTOOLBAR *>(pNMHDR); - ClientToScreen(&(pToolBar->rcButton)); // TrackPopupMenu uses screen coords + ClientToScreen(&(pToolBar->rcButton)); const int offset = HighDPISupport::ScalePixels(4, m_hWnd); // Compared to the main toolbar, the offset seems to be a bit wrong here...? int x = pToolBar->rcButton.left + offset, y = pToolBar->rcButton.bottom + offset; const auto visibleColumns = std::bitset<PatternCursor::numColumns>{static_cast<unsigned long>(SendViewMessage(VIEWMSG_GETDETAIL))}; @@ -1288,14 +1303,6 @@ SwitchToView(); } - -void CCtrlPatterns::OnToggleOverflowPaste() -{ - TrackerSettings::Instance().m_dwPatternSetup ^= PATTERN_OVERFLOWPASTE; - UpdateView(UpdateHint().MPTOptions()); - SwitchToView(); -} - void CCtrlPatterns::TogglePluginEditor() { Modified: trunk/OpenMPT/mptrack/Mptrack.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp Tue Dec 31 22:14:16 2024 (r22667) +++ trunk/OpenMPT/mptrack/Mptrack.cpp Tue Dec 31 23:04:45 2024 (r22668) @@ -302,6 +302,18 @@ } +void CTrackApp::PostMessageToAllViews(UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + if(auto *pDocTmpl = GetModDocTemplate()) + { + for(auto &doc : *pDocTmpl) + { + doc->PostMessageToAllViews(uMsg, wParam, lParam); + } + } +} + + ///////////////////////////////////////////////////////////////////////////// // Command Line options Modified: trunk/OpenMPT/mptrack/Mptrack.h ============================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h Tue Dec 31 22:14:16 2024 (r22667) +++ trunk/OpenMPT/mptrack/Mptrack.h Tue Dec 31 23:04:45 2024 (r22668) @@ -219,6 +219,7 @@ CString GetFriendlyMIDIPortName(const CString &deviceName, bool isInputPort, bool addDeviceName = true); void UpdateAllViews(UpdateHint hint, CObject *pHint = nullptr); + void PostMessageToAllViews(UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0); public: inline mpt::recursive_mutex_with_lock_count &GetGlobalMutexRef() { return m_GlobalMutex; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp Tue Dec 31 22:14:16 2024 (r22667) +++ trunk/OpenMPT/mptrack/View_pat.cpp Tue Dec 31 23:04:45 2024 (r22668) @@ -4413,6 +4413,7 @@ case kcNextOrderAtRowEnd: GotoNextOrder(OrderTransitionMode::AtRowEnd); return wParam; case kcPatternPlayRow: OnPatternStep(); return wParam; case kcPatternRecord: OnPatternRecord(); return wParam; + case kcToggleOverflowPaste: PostCtrlMessage(CTRLMSG_TOGGLE_OVERFLOW_PASTE); return wParam; case kcCursorCopy: OnCursorCopy(); return wParam; case kcCursorPaste: OnCursorPaste(); return wParam; case kcChannelMute: @@ -4755,7 +4756,6 @@ case kcDuplicatePattern: SendCtrlMessage(CTRLMSG_PAT_DUPPATTERN); return wParam; case kcSwitchToOrderList: OnSwitchToOrderList(); return wParam; - case kcToggleOverflowPaste: ToggleFlag(TrackerSettings::Instance().m_dwPatternSetup, PATTERN_OVERFLOWPASTE, _T("Overflow Paste")); return wParam; case kcToggleNoteOffRecordPC: ToggleFlag(TrackerSettings::Instance().m_dwPatternSetup, PATTERN_KBDNOTEOFF, _T("Record Note Off")); return wParam; case kcToggleNoteOffRecordMIDI: ToggleFlag(TrackerSettings::Instance().m_dwMidiSetup, MIDISETUP_RECORDNOTEOFF, _T("Record MIDI Note Off")); return wParam; case kcToggleOctaveTransposeMIDI: ToggleFlag(TrackerSettings::Instance().m_dwMidiSetup, MIDISETUP_TRANSPOSEKEYBOARD, _T("Apply Octave Transpose")); return wParam; Modified: trunk/OpenMPT/mptrack/WindowMessages.h ============================================================================== --- trunk/OpenMPT/mptrack/WindowMessages.h Tue Dec 31 22:14:16 2024 (r22667) +++ trunk/OpenMPT/mptrack/WindowMessages.h Tue Dec 31 23:04:45 2024 (r22668) @@ -77,7 +77,9 @@ CTRLMSG_PREVORDER, CTRLMSG_NEXTORDER, CTRLMSG_SETRECORD, + CTRLMSG_TOGGLE_OVERFLOW_PASTE, CTRLMSG_PAT_DUPPATTERN, + CTRLMSG_PAT_UPDATE_TOOLBAR, // Sample-Specific CTRLMSG_SMP_PREVINSTRUMENT, CTRLMSG_SMP_NEXTINSTRUMENT, |