From: <sv...@op...> - 2024-11-20 21:04:47
|
Author: sagamusix Date: Wed Nov 20 22:04:32 2024 New Revision: 22252 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22252 Log: [Imp] Make tooltips on disabled controls work regardless of z-order of surrounding group boxes. They were no longer working in the general tab (lower half) and sample tab (upper half) due to some recent dialog restructuring. Now we can put them in the correct logical tab order, which should help with accessibility. [Ref] Tooltip retrieval code no longer needs to make assumptions about the size of the provided char array - we directly return CStrings now. Modified: trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/Childfrm.h trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_gen.h trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_ins.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Ctrl_smp.h trunk/OpenMPT/mptrack/DialogBase.cpp trunk/OpenMPT/mptrack/DialogBase.h trunk/OpenMPT/mptrack/Globals.cpp trunk/OpenMPT/mptrack/Globals.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_gen.h trunk/OpenMPT/mptrack/WindowMessages.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Childfrm.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Childfrm.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -49,8 +49,6 @@ ON_MESSAGE(WM_DPICHANGED_AFTERPARENT, &CChildFrame::OnDPIChangedAfterParent) ON_MESSAGE(WM_MOD_CHANGEVIEWCLASS, &CChildFrame::OnChangeViewClass) ON_MESSAGE(WM_MOD_INSTRSELECTED, &CChildFrame::OnInstrumentSelected) - // toolbar "tooltip" notification - ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xFFFF, &CChildFrame::OnToolTipText) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -375,44 +373,6 @@ } -BOOL CChildFrame::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) -{ - auto pTTT = reinterpret_cast<TOOLTIPTEXT *>(pNMHDR); - TCHAR szFullText[256] = _T(""); - CString strTipText; - - UINT_PTR nID = pNMHDR->idFrom; - if (pTTT->uFlags & TTF_IDISHWND) - { - // idFrom is actually the HWND of the tool - nID = static_cast<UINT_PTR>(::GetDlgCtrlID(reinterpret_cast<HWND>(nID))); - } - - if ((nID >= 1000) && (nID < 65536) && (m_hWndCtrl) && (::SendMessage(m_hWndCtrl, WM_MOD_GETTOOLTIPTEXT, nID, (LPARAM)szFullText))) - { - strTipText = szFullText; - } else - { - // allow top level routing frame to handle the message - if (GetRoutingFrame() != NULL) return FALSE; - if (nID != 0) // will be zero on a separator - { - AfxLoadString((UINT)nID, szFullText); - // this is the command id, not the button index - AfxExtractSubString(strTipText, szFullText, 1, _T('\n')); - } - } - mpt::String::WriteCStringBuf(pTTT->szText) = strTipText; - *pResult = 0; - - // bring the tooltip window above other popup windows - ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, - SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); - - return TRUE; // message was handled -} - - LRESULT CChildFrame::OnChangeViewClass(WPARAM wParam, LPARAM lParam) { CModControlDlg *pDlg = (CModControlDlg *)lParam; Modified: trunk/OpenMPT/mptrack/Childfrm.h ============================================================================== --- trunk/OpenMPT/mptrack/Childfrm.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Childfrm.h Wed Nov 20 22:04:32 2024 (r22252) @@ -159,7 +159,6 @@ afx_msg void OnMDIActivate(BOOL bActivate, CWnd *pActivateWnd, CWnd *pDeactivateWnd); afx_msg LRESULT OnChangeViewClass(WPARAM, LPARAM lParam); afx_msg LRESULT OnInstrumentSelected(WPARAM, LPARAM lParam); - afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -695,49 +695,50 @@ } -BOOL CCtrlGeneral::GetToolTipText(UINT uId, LPTSTR pszText) +CString CCtrlGeneral::GetToolTipText(UINT uId) { - const TCHAR moreRecentMixModeNote[] = _T("Use a more recent mixmode to see dB offsets."); - if ((pszText) && (uId)) + CString s; + if(uId) { + const TCHAR moreRecentMixModeNote[] = _T("Use a more recent mixmode to see dB offsets."); const bool displayDBValues = m_sndFile.GetPlayConfig().getDisplayDBValues(); const CWnd *wnd = GetDlgItem(uId); const bool isEnabled = wnd ? (wnd->IsWindowEnabled() != FALSE) : true; // nullptr check is for a Wine bug workaround (https://bugs.openmpt.org/view.php?id=1553) - mpt::tstring notAvailable; + CString notAvailable; if(!isEnabled) - notAvailable = MPT_TFORMAT("Feature is not available in the {} format.")(mpt::ToWin(m_sndFile.GetModSpecifications().GetFileExtensionUpper())); + notAvailable = MPT_CFORMAT("Feature is not available in the {} format.")(mpt::ToWin(m_sndFile.GetModSpecifications().GetFileExtensionUpper())); switch(uId) { case IDC_BUTTON_MODTYPE: - _tcscpy(pszText, _T("Song Properties")); + s = _T("Song Properties"); { const auto keyText = CMainFrame::GetInputHandler()->m_activeCommandSet->GetKeyTextFromCommand(kcViewSongProperties, 0); if (!keyText.IsEmpty()) - _tcscat(pszText, MPT_TFORMAT(" ({})")(keyText).c_str()); + s += MPT_CFORMAT(" ({})")(keyText); } - return TRUE; + break; case IDC_BUTTON1: if(isEnabled) - _tcscpy(pszText, _T("Click button multiple times to tap in the desired tempo.")); + s = _T("Click button multiple times to tap in the desired tempo."); else - _tcscpy(pszText, notAvailable.c_str()); - return TRUE; + s = notAvailable; + break; case IDC_SLIDER_SAMPLEPREAMP: - _tcscpy(pszText, displayDBValues ? CModDoc::LinearToDecibels(m_sndFile.m_nSamplePreAmp, m_sndFile.GetPlayConfig().getNormalSamplePreAmp()).GetString() : moreRecentMixModeNote); - return TRUE; + s = displayDBValues ? CModDoc::LinearToDecibels(m_sndFile.m_nSamplePreAmp, m_sndFile.GetPlayConfig().getNormalSamplePreAmp()).GetString() : moreRecentMixModeNote; + break; case IDC_SLIDER_VSTIVOL: if(isEnabled) - _tcscpy(pszText, displayDBValues ? CModDoc::LinearToDecibels(m_sndFile.m_nVSTiVolume, m_sndFile.GetPlayConfig().getNormalVSTiVol()).GetString() : moreRecentMixModeNote); + s = displayDBValues ? CModDoc::LinearToDecibels(m_sndFile.m_nVSTiVolume, m_sndFile.GetPlayConfig().getNormalVSTiVol()).GetString() : moreRecentMixModeNote; else - _tcscpy(pszText, notAvailable.c_str()); - return TRUE; + s = notAvailable; + break; case IDC_SLIDER_GLOBALVOL: if(isEnabled) - _tcscpy(pszText, displayDBValues ? CModDoc::LinearToDecibels(m_sndFile.m_PlayState.m_nGlobalVolume, m_sndFile.GetPlayConfig().getNormalGlobalVol()).GetString() : moreRecentMixModeNote); + s = displayDBValues ? CModDoc::LinearToDecibels(m_sndFile.m_PlayState.m_nGlobalVolume, m_sndFile.GetPlayConfig().getNormalGlobalVol()).GetString() : moreRecentMixModeNote; else - _tcscpy(pszText, notAvailable.c_str()); - return TRUE; + s = notAvailable; + break; case IDC_SLIDER_SONGTEMPO: case IDC_EDIT_ARTIST: case IDC_EDIT_TEMPO: @@ -747,11 +748,11 @@ case IDC_EDIT_VSTIVOL: if(isEnabled) break; - _tcscpy(pszText, notAvailable.c_str()); - return TRUE; + s = notAvailable; + break; } } - return FALSE; + return s; } Modified: trunk/OpenMPT/mptrack/Ctrl_gen.h ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_gen.h Wed Nov 20 22:04:32 2024 (r22252) @@ -75,7 +75,7 @@ CRuntimeClass *GetAssociatedViewClass() override; void OnActivatePage(LPARAM) override; void OnDeactivatePage() override; - BOOL GetToolTipText(UINT uId, LPTSTR pszText) override; + CString GetToolTipText(UINT uId) override; //}}AFX_VIRTUAL protected: Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -1757,27 +1757,24 @@ } -BOOL CCtrlInstruments::GetToolTipText(UINT uId, LPTSTR pszText) +CString CCtrlInstruments::GetToolTipText(UINT uId) { - //Note: pszText points to a TCHAR array of length 256 (see CChildFrame::OnToolTipText). - //Note2: If there's problems in getting tooltips showing for certain tools, - // setting the tab order may have effect. - if ((pszText) && (uId)) + CString s; + if(uId) { CWnd *wnd = GetDlgItem(uId); bool isEnabled = wnd != nullptr && wnd->IsWindowEnabled() != FALSE; if(!isEnabled && !m_sndFile.GetNumInstruments()) { - _tcscpy(pszText, _T("Create a new instrument to enable instrument mode.")); - return TRUE; + s = _T("Create a new instrument to enable instrument mode."); + return s; } ModInstrument *pIns = m_sndFile.Instruments[m_nInstrument]; if(pIns == nullptr) - return FALSE; + return s; const auto plusMinus = mpt::ToWin(mpt::Charset::UTF8, "\xC2\xB1"); - const TCHAR *s = nullptr; CommandID cmd = kcNull; switch(uId) { @@ -1792,36 +1789,33 @@ if(isEnabled) { const CModSpecifications& specs = m_sndFile.GetModSpecifications(); - wsprintf(pszText, _T("Tempo Range: %u - %u"), specs.GetTempoMin().GetInt(), specs.GetTempoMax().GetInt()); + s = MPT_CFORMAT("Tempo Range: {} - {}")(specs.GetTempoMin().GetInt(), specs.GetTempoMax().GetInt()); } else { - _tcscpy(pszText, _T("Only available in MPTM format")); + s = _T("Only available in MPTM format"); } - return TRUE; - + break; case IDC_EDIT7: // Fade Out if(!pIns->nFadeOut) - _tcscpy(pszText, _T("Fade disabled")); + s =_T("Fade disabled"); else - wsprintf(pszText, _T("%u ticks (Higher value <-> Faster fade out)"), 0x8000 / pIns->nFadeOut); - return TRUE; - + s = MPT_CFORMAT("{} ticks (Higher value <-> Faster fade out)")(0x8000 / pIns->nFadeOut); + break; case IDC_EDIT8: // Global volume if(isEnabled) - _tcscpy(pszText, CModDoc::LinearToDecibels(GetDlgItemInt(IDC_EDIT8), 64.0)); + s = CModDoc::LinearToDecibels(GetDlgItemInt(IDC_EDIT8), 64.0); else - _tcscpy(pszText, _T("Only available in IT / MPTM format")); - return TRUE; - + s = _T("Only available in IT / MPTM format"); + break; case IDC_EDIT9: // Panning if(isEnabled) - _tcscpy(pszText, CModDoc::PanningToString(pIns->nPan, 128)); + s = CModDoc::PanningToString(pIns->nPan, 128); else - _tcscpy(pszText, _T("Only available in IT / MPTM format")); - return TRUE; + s = _T("Only available in IT / MPTM format"); + break; #ifndef NO_PLUGINS case IDC_EDIT10: @@ -1834,79 +1828,68 @@ { int32 prog = pIns->nMidiProgram - 1; if(pIns->wMidiBank > 1) prog += 128 * (pIns->wMidiBank - 1); - _tcscpy(pszText, plugin.pMixPlugin->GetFormattedProgramName(prog)); + s = plugin.pMixPlugin->GetFormattedProgramName(prog); } } - return TRUE; + break; #endif // NO_PLUGINS case IDC_PLUGIN_VELOCITYSTYLE: case IDC_PLUGIN_VOLUMESTYLE: // Plugin volume handling - if(pIns->nMixPlug < 1) return FALSE; + if(pIns->nMixPlug < 1) + return s; if(m_sndFile.m_playBehaviour[kMIDICCBugEmulation]) { velocityStyle.EnableWindow(FALSE); m_CbnPluginVolumeHandling.EnableWindow(FALSE); - _tcscpy(pszText, _T("To enable, clear Plugin volume command bug emulation flag from Song Properties")); - return TRUE; + s = _T("To enable, clear Plugin volume command bug emulation flag from Song Properties"); } else { if(uId == IDC_PLUGIN_VELOCITYSTYLE) - { - _tcscpy(pszText, _T("Volume commands (vxx) next to a note are sent as note velocity instead.")); - return TRUE; - } - return FALSE; + s = _T("Volume commands (vxx) next to a note are sent as note velocity instead."); } - + break; case IDC_COMBO5: // MIDI Channel s = _T("Mapped: MIDI channel corresponds to pattern channel modulo 16"); break; - case IDC_SLIDER1: if(isEnabled) - wsprintf(pszText, _T("%s%d%% volume variation"), plusMinus.c_str(), pIns->nVolSwing); + s = MPT_CFORMAT("{}{}% volume variation")(plusMinus, pIns->nVolSwing); else - _tcscpy(pszText, _T("Only available in IT / MPTM format")); - return TRUE; - + s = _T("Only available in IT / MPTM format"); + break; case IDC_SLIDER2: if(isEnabled) - wsprintf(pszText, _T("%s%d panning variation"), plusMinus.c_str(), pIns->nPanSwing); + s = MPT_CFORMAT("{}{} panning variation")(plusMinus, pIns->nPanSwing); else - _tcscpy(pszText, _T("Only available in IT / MPTM format")); - return TRUE; - + s = _T("Only available in IT / MPTM format"); + break; case IDC_SLIDER3: if(isEnabled) - wsprintf(pszText, _T("%u"), pIns->GetCutoff()); + s = mpt::cfmt::val(pIns->GetCutoff()); else - _tcscpy(pszText, _T("Only available in IT / MPTM format")); - return TRUE; - + s = _T("Only available in IT / MPTM format"); + break; case IDC_SLIDER4: if(isEnabled) - wsprintf(pszText, _T("%u (%i dB)"), pIns->GetResonance(), Util::muldivr(pIns->GetResonance(), 24, 128)); + s = MPT_CFORMAT("{} ({} dB)")(pIns->GetResonance(), Util::muldivr(pIns->GetResonance(), 24, 128)); else - _tcscpy(pszText, _T("Only available in IT / MPTM format")); - return TRUE; - + s = _T("Only available in IT / MPTM format"); + break; case IDC_SLIDER6: if(isEnabled) - wsprintf(pszText, _T("%s%d cutoff variation"), plusMinus.c_str(), pIns->nCutSwing); + s = MPT_CFORMAT("{}{} cutoff variation")(plusMinus, pIns->nCutSwing); else - _tcscpy(pszText, _T("Only available in MPTM format")); - return TRUE; - + s = _T("Only available in MPTM format"); + break; case IDC_SLIDER7: if(isEnabled) - wsprintf(pszText, _T("%s%d resonance variation"), plusMinus.c_str(), pIns->nResSwing); + s = MPT_CFORMAT("{}{} resonance variation")(plusMinus, pIns->nResSwing); else - _tcscpy(pszText, _T("Only available in MPTM format")); - return TRUE; - + s = _T("Only available in MPTM format"); + break; case IDC_PITCHWHEELDEPTH: s = _T("Set this to the actual Pitch Wheel Depth used in your plugin on this channel."); break; @@ -1939,19 +1922,14 @@ } - if(s != nullptr) + if(cmd != kcNull) { - _tcscpy(pszText, s); - if(cmd != kcNull) - { - auto keyText = CMainFrame::GetInputHandler()->m_activeCommandSet->GetKeyTextFromCommand(cmd, 0); - if (!keyText.IsEmpty()) - _tcscat(pszText, MPT_TFORMAT(" ({})")(keyText).c_str()); - } - return TRUE; + auto keyText = CMainFrame::GetInputHandler()->m_activeCommandSet->GetKeyTextFromCommand(cmd, 0); + if (!keyText.IsEmpty()) + s += MPT_CFORMAT(" ({})")(keyText); } } - return FALSE; + return s; } Modified: trunk/OpenMPT/mptrack/Ctrl_ins.h ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_ins.h Wed Nov 20 22:04:32 2024 (r22252) @@ -147,7 +147,7 @@ void OnDeactivatePage() override; void UpdateView(UpdateHint hint, CObject *pObj = nullptr) override; LRESULT OnModCtrlMsg(WPARAM wParam, LPARAM lParam) override; - BOOL GetToolTipText(UINT uId, LPTSTR pszText) override; + CString GetToolTipText(UINT uId) override; BOOL PreTranslateMessage(MSG* pMsg) override; //}}AFX_VIRTUAL protected: Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -85,7 +85,6 @@ ON_EN_CHANGE(IDC_EDIT_SEQNUM, &CCtrlPatterns::OnSequenceNumChanged) ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CCtrlPatterns::OnTbnDropDownToolBar) ON_UPDATE_COMMAND_UI(IDC_PATTERN_RECORD, &CCtrlPatterns::OnUpdateRecord) - ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CCtrlPatterns::OnToolTipText) //}}AFX_MSG_MAP ON_WM_MOUSEWHEEL() END_MESSAGE_MAP() @@ -1331,30 +1330,9 @@ } -BOOL CCtrlPatterns::OnToolTip(UINT /*id*/, NMHDR *pNMHDR, LRESULT * /*pResult*/) +CString CCtrlPatterns::GetToolTipText(UINT id) { - TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; - UINT_PTR nID = pNMHDR->idFrom; - if(pTTT->uFlags & TTF_IDISHWND) - { - // idFrom is actually the HWND of the tool - nID = ::GetDlgCtrlID((HWND)nID); - if(nID) - { - pTTT->lpszText = MAKEINTRESOURCE(nID); - pTTT->hinst = AfxGetResourceHandle(); - return TRUE; - } - } - - return FALSE; -} - - -BOOL CCtrlPatterns::GetToolTipText(UINT id, LPTSTR str) -{ - CString fmt; - const TCHAR *s = nullptr; + CString s; CommandID cmd = kcNull; switch(id) { @@ -1370,9 +1348,9 @@ case ID_PATTERN_MIDIMACRO: s = _T("Zxx Macro Configuration"); cmd = kcShowMacroConfig; break; case ID_PATTERN_CHORDEDIT: s = _T("Chord Editor"); cmd = kcChordEditor; break; case ID_EDIT_UNDO: - fmt = _T("Undo"); + s = _T("Undo"); if(m_modDoc.GetPatternUndo().CanUndo()) - fmt += _T(" ") + m_modDoc.GetPatternUndo().GetUndoName(); + s += _T(" ") + m_modDoc.GetPatternUndo().GetUndoName(); cmd = kcEditUndo; break; case ID_PATTERN_PROPERTIES: s = _T("Pattern Properties"); cmd = kcShowPatternProperties; break; @@ -1381,20 +1359,15 @@ case ID_OVERFLOWPASTE: s = _T("Toggle Overflow Paste"); cmd = kcToggleOverflowPaste; break; case IDC_PATTERN_LOOP: s = _T("Toggle Loop Pattern"); cmd = kcChangeLoopStatus; break; case IDC_PATTERN_FOLLOWSONG: s = _T("Toggle Follow Song"); cmd = kcToggleFollowSong; break; - default: - return FALSE; } - if(s != nullptr) - fmt = s; if(cmd != kcNull) { auto keyText = CMainFrame::GetInputHandler()->m_activeCommandSet->GetKeyTextFromCommand(cmd, 0); if(!keyText.IsEmpty()) - fmt += MPT_CFORMAT(" ({})")(keyText); + s += MPT_CFORMAT(" ({})")(keyText); } - _tcscpy(str, fmt.GetString()); - return TRUE; + return s; } Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h Wed Nov 20 22:04:32 2024 (r22252) @@ -223,7 +223,7 @@ LRESULT OnModCtrlMsg(WPARAM wParam, LPARAM lParam) override; void OnActivatePage(LPARAM) override; void OnDeactivatePage() override; - BOOL GetToolTipText(UINT, LPTSTR) override; + CString GetToolTipText(UINT id) override; void OnDPIChanged() override; //}}AFX_VIRTUAL protected: @@ -281,7 +281,6 @@ public: afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); afx_msg void OnXButtonUp(UINT nFlags, UINT nButton, CPoint point); - afx_msg BOOL OnToolTip(UINT id, NMHDR *pTTTStruct, LRESULT *pResult); }; OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -530,12 +530,12 @@ } -BOOL CCtrlSamples::GetToolTipText(UINT uId, LPTSTR pszText) +CString CCtrlSamples::GetToolTipText(UINT uId) { - if ((pszText) && (uId)) + CString s; + if(uId) { UINT val = GetDlgItemInt(uId); - const TCHAR *s = nullptr; CommandID cmd = kcNull; switch(uId) { @@ -559,19 +559,19 @@ case IDC_EDIT8: // Volume to dB if(IsOPLInstrument()) - _tcscpy(pszText, (mpt::tfmt::fix((static_cast<int32>(val) - 64) * 0.75, 2) + _T(" dB")).c_str()); + s = mpt::cfmt::fix((static_cast<int32>(val) - 64) * 0.75, 2) + _T(" dB"); else - _tcscpy(pszText, CModDoc::LinearToDecibels(val, 64.0)); - return TRUE; + s = CModDoc::LinearToDecibels(val, 64.0); + break; case IDC_EDIT9: // Panning if(m_nSample) { const ModSample &sample = m_sndFile.GetSample(m_nSample); - _tcscpy(pszText, CModDoc::PanningToString(sample.nPan, 128)); + s = CModDoc::PanningToString(sample.nPan, 128); } - return TRUE; + break; case IDC_EDIT5: case IDC_SPIN5: @@ -583,14 +583,12 @@ if(sample.uFlags[CHN_ADLIB]) { // Translate to actual note frequency - _tcscpy(pszText, MPT_TFORMAT("{}Hz")(mpt::tfmt::flt(freqHz * (261.625 / 8363.0), 6)).c_str()); - return TRUE; + s = MPT_CFORMAT("{}Hz")(mpt::tfmt::flt(freqHz * (261.625 / 8363.0), 6)); } if(m_sndFile.UseFinetuneAndTranspose()) { // Transpose + Finetune to Frequency - _tcscpy(pszText, MPT_TFORMAT("{}Hz")(freqHz).c_str()); - return TRUE; + s = MPT_CFORMAT("{}Hz")(freqHz); } } break; @@ -618,35 +616,33 @@ ticks = val; } if(ticks >= 0) - _stprintf(pszText, _T("%d ticks"), ticks); + s = MPT_CFORMAT("{} ticks")(ticks); else - _tcscpy(pszText, _T("No Vibrato")); + s = _T("No Vibrato"); } - return TRUE; + break; case IDC_EDIT15: // Vibrato Depth if(!(m_sndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_XM))) - _tcscpy(pszText, _T("Only available in IT / MPTM / XM format")); + s = _T("Only available in IT / MPTM / XM format"); else - _stprintf(pszText, _T("%u cents"), Util::muldivr_unsigned(val, 100, 64)); - return TRUE; + s = MPT_CFORMAT("{} cents")(Util::muldivr_unsigned(val, 100, 64)); + break; case IDC_EDIT16: // Vibrato Rate if(!(m_sndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_XM))) { s = _T("Only available in IT / MPTM / XM format"); - break; } else if(val == 0) { s = _T("Stopped"); - break; } else { const double ticksPerCycle = 256.0 / val; const uint32 ticksPerBeat = std::max(1u, m_sndFile.m_PlayState.m_nCurrentRowsPerBeat * m_sndFile.m_PlayState.m_nMusicSpeed); - _stprintf(pszText, _T("%.2f beats per cycle (%.2f ticks)"), ticksPerCycle / ticksPerBeat, ticksPerCycle); + s = MPT_CFORMAT("{} beats per cycle ({} ticks)")(mpt::cfmt::flt(ticksPerCycle / ticksPerBeat, 3), mpt::cfmt::flt(ticksPerCycle, 3)); } - return TRUE; + break; case IDC_CHECK1: case IDC_EDIT3: @@ -665,19 +661,14 @@ s = _T("Keep a reference to the original waveform instead of saving it in the module."); break; } - if(s != nullptr) + if(cmd != kcNull) { - _tcscpy(pszText, s); - if(cmd != kcNull) - { - auto keyText = CMainFrame::GetInputHandler()->m_activeCommandSet->GetKeyTextFromCommand(cmd, 0); - if (!keyText.IsEmpty()) - _tcscat(pszText, MPT_TFORMAT(" ({})")(keyText).c_str()); - } - return TRUE; + auto keyText = CMainFrame::GetInputHandler()->m_activeCommandSet->GetKeyTextFromCommand(cmd, 0); + if (!keyText.IsEmpty()) + s += MPT_CFORMAT(" ({})")(keyText); } } - return FALSE; + return s; } Modified: trunk/OpenMPT/mptrack/Ctrl_smp.h ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Ctrl_smp.h Wed Nov 20 22:04:32 2024 (r22252) @@ -96,7 +96,7 @@ void OnDeactivatePage() override; void UpdateView(UpdateHint hint, CObject *pObj = nullptr) override; LRESULT OnModCtrlMsg(WPARAM wParam, LPARAM lParam) override; - BOOL GetToolTipText(UINT uId, LPTSTR pszText) override; + CString GetToolTipText(UINT uId) override; BOOL PreTranslateMessage(MSG* pMsg) override; void OnDPIChanged() override; //}}AFX_VIRTUAL Modified: trunk/OpenMPT/mptrack/DialogBase.cpp ============================================================================== --- trunk/OpenMPT/mptrack/DialogBase.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/DialogBase.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -79,4 +79,25 @@ } +INT_PTR DialogBase::OnToolHitTest(CPoint point, TOOLINFO *pTI) const +{ + INT_PTR nHit = CDialog::OnToolHitTest(point, pTI); + if(nHit >= 0 && pTI && (pTI->uFlags & TTF_IDISHWND)) + { + // Workaround to get tooltips even for disabled controls inside group boxes that are positioned in the "correct" tab order position. + // For some reason doesn't work for enabled controls (probably because pTI->hwnd then doesn't point at the active control under the cursor), + // so we use the default code path there, which works just fine. + HWND child = reinterpret_cast<HWND>(pTI->uId); + if(!::IsWindowEnabled(child)) + { + pTI->uId = nHit; + pTI->uFlags &= ~TTF_IDISHWND; + ::GetWindowRect(child, &pTI->rect); + ScreenToClient(&pTI->rect); + } + } + return nHit; +} + + OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/DialogBase.h ============================================================================== --- trunk/OpenMPT/mptrack/DialogBase.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/DialogBase.h Wed Nov 20 22:04:32 2024 (r22252) @@ -22,6 +22,7 @@ BOOL OnInitDialog() override; BOOL PreTranslateMessage(MSG *pMsg) override; + INT_PTR OnToolHitTest(CPoint point, TOOLINFO *pTI) const override; static bool HandleGlobalKeyMessage(const MSG &msg); Modified: trunk/OpenMPT/mptrack/Globals.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Globals.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Globals.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -27,6 +27,8 @@ #include "TrackerSettings.h" #include "../soundlib/mod_specifications.h" +#include <afxpriv.h> + OPENMPT_NAMESPACE_BEGIN @@ -151,29 +153,41 @@ } -INT_PTR CModControlDlg::OnToolHitTest(CPoint point, TOOLINFO *pTI) const +BOOL CModControlDlg::OnToolTipText(UINT /*nID*/, NMHDR *pNMHDR, LRESULT *pResult) { - INT_PTR nHit = DialogBase::OnToolHitTest(point, pTI); - if ((nHit >= 0) && (pTI)) + auto pTTT = reinterpret_cast<TOOLTIPTEXT *>(pNMHDR); + CString strTipText; + + UINT_PTR nID = pNMHDR->idFrom; + if(pTTT->uFlags & TTF_IDISHWND) + { + // idFrom is actually the HWND of the tool + nID = static_cast<UINT_PTR>(::GetDlgCtrlID(reinterpret_cast<HWND>(nID))); + } + + if(nID >= 1000 && nID < 65536) { - if ((pTI->lpszText == LPSTR_TEXTCALLBACK) && (pTI->hwnd == m_hWnd)) + strTipText = GetToolTipText(static_cast<UINT>(nID)); + } else + { + // allow top level routing frame to handle the message + if(GetRoutingFrame() != nullptr) + return FALSE; + if(nID != 0) // will be zero on a separator { - CFrameWnd *pMDIParent = GetParentFrame(); - if (pMDIParent) pTI->hwnd = pMDIParent->m_hWnd; + TCHAR szFullText[256] = _T(""); + AfxLoadString(static_cast<UINT>(nID), szFullText, static_cast<UINT>(std::size(szFullText))); + // this is the command id, not the button index + AfxExtractSubString(strTipText, szFullText, 1, _T('\n')); } } - return nHit; -} + mpt::String::WriteCStringBuf(pTTT->szText) = strTipText; + *pResult = 0; + // bring the tooltip window above other popup windows + ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); -BOOL CModControlDlg::OnToolTipText(UINT nID, NMHDR *pNMHDR, LRESULT *pResult) -{ - CChildFrame *pChildFrm = (CChildFrame *)GetParentFrame(); - if(pChildFrm) - return pChildFrm->OnToolTipText(nID, pNMHDR, pResult); - if(pResult) - *pResult = 0; - return FALSE; + return TRUE; // message was handled } @@ -233,7 +247,6 @@ ON_NOTIFY(TCN_SELCHANGE, IDC_TABCTRL1, &CModControlView::OnTabSelchange) ON_MESSAGE(WM_MOD_ACTIVATEVIEW, &CModControlView::OnActivateModView) ON_MESSAGE(WM_MOD_CTRLMSG, &CModControlView::OnModCtrlMsg) - ON_MESSAGE(WM_MOD_GETTOOLTIPTEXT, &CModControlView::OnGetToolTipText) ON_COMMAND(ID_EDIT_CUT, &CModControlView::OnEditCut) ON_COMMAND(ID_EDIT_COPY, &CModControlView::OnEditCopy) ON_COMMAND(ID_EDIT_PASTE, &CModControlView::OnEditPaste) @@ -561,15 +574,6 @@ } -LRESULT CModControlView::OnGetToolTipText(WPARAM uId, LPARAM pszText) -{ - CModControlDlg *pActiveDlg = GetCurrentControlDlg(); - if(!pActiveDlg) - return 0; - return static_cast<LRESULT>(pActiveDlg->GetToolTipText(static_cast<UINT>(uId), reinterpret_cast<LPTSTR>(pszText))); -} - - void CModControlView::SampleChanged(SAMPLEINDEX smp) { const CModDoc *modDoc = GetDocument(); Modified: trunk/OpenMPT/mptrack/Globals.h ============================================================================== --- trunk/OpenMPT/mptrack/Globals.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/Globals.h Wed Nov 20 22:04:32 2024 (r22252) @@ -88,8 +88,7 @@ virtual void OnActivatePage(LPARAM) {} virtual void OnDeactivatePage() {} BOOL OnInitDialog() override; - INT_PTR OnToolHitTest(CPoint point, TOOLINFO *pTI) const override; - virtual BOOL GetToolTipText(UINT, LPTSTR) { return FALSE; } + virtual CString GetToolTipText(UINT) { return {}; } //}}AFX_VIRTUAL //{{AFX_MSG(CModControlDlg) afx_msg void OnSize(UINT nType, int cx, int cy); @@ -179,7 +178,6 @@ afx_msg void OnSwitchToView(); afx_msg LRESULT OnActivateModView(WPARAM, LPARAM); afx_msg LRESULT OnModCtrlMsg(WPARAM wParam, LPARAM lParam); - afx_msg LRESULT OnGetToolTipText(WPARAM, LPARAM); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; @@ -215,6 +213,7 @@ public: //{{AFX_VIRTUAL(CModScrollView) void OnInitialUpdate() override; + BOOL PreTranslateMessage(MSG *pMsg) override; void OnDraw(CDC *) override {} void OnPrepareDC(CDC *, CPrintInfo *) override {} void OnUpdate(CView *pSender, LPARAM lHint, CObject *pHint) override; @@ -223,7 +222,6 @@ virtual LRESULT OnModViewMsg(WPARAM wParam, LPARAM lParam); virtual BOOL OnDragonDrop(BOOL, const DRAGONDROP *) { return FALSE; } virtual LRESULT OnPlayerNotify(Notification *) { return 0; } - BOOL PreTranslateMessage(MSG *pMsg) override; //}}AFX_VIRTUAL CModControlDlg *GetControlDlg() { return static_cast<CModControlView *>(CWnd::FromHandle(m_hWndCtrl))->GetCurrentControlDlg(); } Modified: trunk/OpenMPT/mptrack/View_gen.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/View_gen.cpp Wed Nov 20 22:04:32 2024 (r22252) @@ -1756,6 +1756,27 @@ } +INT_PTR CViewGlobals::OnToolHitTest(CPoint point, TOOLINFO *pTI) const +{ + INT_PTR nHit = CFormView::OnToolHitTest(point, pTI); + if(nHit >= 0 && pTI && (pTI->uFlags & TTF_IDISHWND)) + { + // Workaround to get tooltips even for disabled controls inside group boxes that are positioned in the "correct" tab order position. + // For some reason doesn't work for enabled controls (probably because pTI->hwnd then doesn't point at the active control under the cursor), + // so we use the default code path there, which works just fine. + HWND child = reinterpret_cast<HWND>(pTI->uId); + if(!::IsWindowEnabled(child)) + { + pTI->uId = nHit; + pTI->uFlags &= ~TTF_IDISHWND; + ::GetWindowRect(child, &pTI->rect); + ScreenToClient(&pTI->rect); + } + } + return nHit; +} + + BOOL CViewGlobals::OnToolTipText(UINT, NMHDR *pNMHDR, LRESULT *pResult) { auto pTTT = reinterpret_cast<TOOLTIPTEXT *>(pNMHDR); Modified: trunk/OpenMPT/mptrack/View_gen.h ============================================================================== --- trunk/OpenMPT/mptrack/View_gen.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/View_gen.h Wed Nov 20 22:04:32 2024 (r22252) @@ -74,6 +74,7 @@ void OnInitialUpdate() override; void DoDataExchange(CDataExchange *pDX) override; void OnUpdate(CView *pSender, LPARAM lHint, CObject *pHint) override; + INT_PTR OnToolHitTest(CPoint point, TOOLINFO *pTI) const override; void UpdateView(UpdateHint hint, CObject *pObj = nullptr); LRESULT OnModViewMsg(WPARAM, LPARAM); Modified: trunk/OpenMPT/mptrack/WindowMessages.h ============================================================================== --- trunk/OpenMPT/mptrack/WindowMessages.h Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/WindowMessages.h Wed Nov 20 22:04:32 2024 (r22252) @@ -25,7 +25,6 @@ WM_MOD_CTRLMSG, WM_MOD_VIEWMSG, WM_MOD_MIDIMSG, - WM_MOD_GETTOOLTIPTEXT, WM_MOD_DRAGONDROPPING, WM_MOD_KBDNOTIFY, WM_MOD_INSTRSELECTED, Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Wed Nov 20 21:46:40 2024 (r22251) +++ trunk/OpenMPT/mptrack/mptrack.rc Wed Nov 20 22:04:32 2024 (r22252) @@ -1411,6 +1411,7 @@ PUSHBUTTON "Type EXT, ## channels",IDC_BUTTON_MODTYPE,192,3,162,12 LTEXT "Resampling:",IDC_STATIC,192,20,54,8 COMBOBOX IDC_COMBO1,246,18,108,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "",IDC_STATIC,1,30,96,88,0,WS_EX_TRANSPARENT LTEXT "Initial Tempo",IDC_STATIC,5,42,49,12 CONTROL "",IDC_SLIDER_SONGTEMPO,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS,11,50,15,50 EDITTEXT IDC_EDIT_TEMPO,5,101,43,12,ES_AUTOHSCROLL | ES_NUMBER @@ -1419,11 +1420,13 @@ LTEXT "Ticks/Row:",IDC_STATIC,54,90,36,8 EDITTEXT IDC_EDIT_SPEED,54,101,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN_SPEED,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,82,82,11,14 + GROUPBOX "",IDC_STATIC,96,30,67,88,0,WS_EX_TRANSPARENT LTEXT "Restart Position",IDC_STATIC,102,42,60,8 EDITTEXT IDC_EDIT_RESTARTPOS,102,54,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN_RESTARTPOS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,132,54,11,14 CONTROL "Loop Song",IDC_CHECK_LOOPSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,102,90,54,10 CTEXT "Not saved in song!",IDC_STATIC,96,102,66,12 + GROUPBOX "",IDC_STATIC,162,30,192,88,0,WS_EX_TRANSPARENT CTEXT "Initial Global Volume",IDC_STATIC,165,42,69,8 CONTROL "",IDC_SLIDER_GLOBALVOL,"msctls_trackbar32",TBS_VERT | TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS,181,50,24,50 EDITTEXT IDC_EDIT_GLOBALVOL,174,100,36,12,ES_AUTOHSCROLL | ES_NUMBER @@ -1438,9 +1441,6 @@ CONTROL "",IDC_SPIN_SAMPLEPA,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,325,97,11,14 CONTROL "",IDC_VUMETER_LEFT,"Static",SS_BLACKRECT | SS_SUNKEN,360,3,15,115 CONTROL "",IDC_VUMETER_RIGHT,"Static",SS_BLACKRECT | SS_SUNKEN,378,3,15,115 - GROUPBOX "",IDC_STATIC,1,30,96,88 - GROUPBOX "",IDC_STATIC,96,30,67,88 - GROUPBOX "",IDC_STATIC,162,30,192,88 END IDD_CONTROL_COMMENTS DIALOGEX 0, 0, 435, 119 @@ -1493,7 +1493,7 @@ CTEXT "File",IDC_STATIC,276,26,23,13,SS_CENTERIMAGE | NOT WS_GROUP,WS_EX_STATICEDGE EDITTEXT IDC_SAMPLE_FILENAME,299,26,72,13,ES_AUTOHSCROLL CONTROL "&Keep Sample Data on Disk",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,379,27,150,10 - GROUPBOX "",IDC_STATIC,3,22,101,78 + GROUPBOX "",IDC_STATIC,3,22,101,78,0,WS_EX_TRANSPARENT LTEXT "Default &Volume",IDC_STATIC,8,32,56,8 EDITTEXT IDC_EDIT7,64,30,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN7,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,94,29,11,11 @@ -1508,7 +1508,7 @@ CONTROL "Spin1",IDC_SPIN5,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,94,69,11,11 LTEXT "Trans&pose",IDC_TEXT6,8,86,45,8 COMBOBOX IDC_COMBO_BASENOTE,55,83,45,89,CBS_DROPDOWNLIST | WS_VSCROLL - GROUPBOX "&Loop",IDC_STATIC,109,43,79,57 + GROUPBOX "&Loop",IDC_STATIC,109,43,79,57,0,WS_EX_TRANSPARENT LTEXT "Type",IDC_STATIC,114,57,17,8 COMBOBOX IDC_COMBO1,137,54,45,46,CBS_DROPDOWNLIST | WS_TABSTOP LTEXT "Start",IDC_STATIC,114,73,16,8 @@ -1517,7 +1517,7 @@ LTEXT "End",IDC_STATIC,114,86,14,8 EDITTEXT IDC_EDIT2,137,83,45,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN2,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,176,84,11,11 - GROUPBOX "&Sustain Loop",IDC_STATIC,192,43,79,57 + GROUPBOX "&Sustain Loop",IDC_STATIC,192,43,79,57,0,WS_EX_TRANSPARENT LTEXT "Type",IDC_STATIC,196,57,17,8 COMBOBOX IDC_COMBO2,219,54,45,46,CBS_DROPDOWNLIST | WS_TABSTOP LTEXT "Start",IDC_STATIC,196,73,16,8 @@ -1526,7 +1526,7 @@ LTEXT "End",IDC_STATIC,196,86,14,8 EDITTEXT IDC_EDIT4,219,83,45,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN4,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,260,83,11,11 - GROUPBOX "",IDC_STATIC,276,43,96,57 + GROUPBOX "",IDC_STATIC,276,43,96,57,0,WS_EX_TRANSPARENT LTEXT "&Auto-Vibrato",IDC_STATIC,282,50,41,8 COMBOBOX IDC_COMBO3,282,59,47,70,CBS_DROPDOWNLIST | WS_TABSTOP LTEXT "&Depth",IDC_STATIC,334,50,20,8 @@ -1538,7 +1538,7 @@ LTEXT "&Rate",IDC_STATIC,328,74,16,8 EDITTEXT IDC_EDIT16,328,83,38,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Rate",IDC_SPIN13,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,360,83,11,11 - GROUPBOX "Pitch Shifting / &Time Stretching",IDC_GROUPBOX_PITCH_TIME,379,41,180,59 + GROUPBOX "Pitch Shifting / &Time Stretching",IDC_GROUPBOX_PITCH_TIME,379,41,180,59,0,WS_EX_TRANSPARENT CONTROL "Lo-&Fi Mode",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,487,54,66,11 LTEXT "Pitch",IDC_TEXT_PITCH,385,56,42,8 COMBOBOX IDC_COMBO4,427,54,54,61,CBS_DROPDOWN | WS_VSCROLL | WS_GROUP | WS_TABSTOP @@ -1552,7 +1552,7 @@ PUSHBUTTON "Process",IDC_BUTTON1,487,82,66,14 END -IDD_CONTROL_INSTRUMENTS DIALOGEX 0, 0, 536, 170 +IDD_CONTROL_INSTRUMENTS DIALOGEX 0, 0, 542, 170 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -1562,6 +1562,7 @@ EDITTEXT IDC_SAMPLE_NAME,149,7,151,12,ES_AUTOHSCROLL CTEXT "File",IDC_STATIC,307,7,35,12,SS_CENTERIMAGE,WS_EX_STATICEDGE EDITTEXT IDC_SAMPLE_FILENAME,342,7,105,12,ES_AUTOHSCROLL + GROUPBOX "General",IDC_STATIC,3,27,123,141,0,WS_EX_TRANSPARENT CTEXT "Global &Volume",IDC_STATIC,8,36,72,12,SS_CENTERIMAGE,WS_EX_STATICEDGE EDITTEXT IDC_EDIT8,84,36,37,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN8,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,112,40,8,10 @@ -1571,17 +1572,20 @@ CONTROL "Set &Pan",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,12,72,66,10 EDITTEXT IDC_EDIT9,84,70,37,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN9,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,112,74,8,11 + GROUPBOX "Pitch/Pan Separation",IDC_STATIC,3,88,123,80,0,WS_EX_TRANSPARENT CTEXT "S&ep",IDC_STATIC,8,99,20,13,SS_CENTERIMAGE,WS_EX_STATICEDGE EDITTEXT IDC_EDIT15,30,99,30,13,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN12,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,54,102,11,11 CTEXT "Cen&tre",IDC_STATIC,62,99,26,13,SS_CENTERIMAGE,WS_EX_STATICEDGE COMBOBOX IDC_COMBO4,90,99,31,91,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Sample Quality",IDC_STATIC,3,118,123,50 CTEXT "Rampi&ng",IDC_STATIC,7,133,39,13,SS_CENTERIMAGE,WS_EX_STATICEDGE CONTROL "",IDC_SLIDER5,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS,47,135,36,10 EDITTEXT IDC_EDIT2,85,133,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,116,133,8,12 CTEXT "Resamplin&g",IDC_STATIC,7,151,39,13,SS_CENTERIMAGE,WS_EX_STATICEDGE COMBOBOX IDC_COMBO9,50,151,71,81,CBS_DROPDOWNLIST | WS_TABSTOP + GROUPBOX "Filter",IDC_STATIC,131,27,104,141,0,WS_EX_TRANSPARENT CONTROL "&Reso",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,136,37,33,10 CONTROL "Slider2",IDC_SLIDER4,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS | WS_DISABLED | WS_TABSTOP,168,37,64,10 CONTROL "&Cutoff",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,136,52,35,10 @@ -1589,6 +1593,7 @@ RTEXT "--",IDC_FILTERTEXT,166,62,65,8 CTEXT "&Mode",IDC_STATIC,135,70,23,13,SS_CENTERIMAGE,WS_EX_STATICEDGE COMBOBOX IDC_FILTERMODE,163,70,69,42,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Random Variation",IDC_STATIC,131,88,104,80,0,WS_EX_TRANSPARENT CTEXT "V&olume",IDC_STATIC,136,99,33,13,SS_CENTERIMAGE,WS_EX_STATICEDGE CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS | WS_TABSTOP,172,101,60,10 CTEXT "P&anning",IDC_STATIC,136,116,33,13,SS_CENTERIMAGE,WS_EX_STATICEDGE @@ -1597,12 +1602,14 @@ CONTROL "",IDC_SLIDER6,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS | WS_TABSTOP,172,135,60,10 CTEXT "R&eso",IDC_STATIC,136,151,33,13,SS_CENTERIMAGE,WS_EX_STATICEDGE CONTROL "",IDC_SLIDER7,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_TOOLTIPS | WS_TABSTOP,172,152,60,10 + GROUPBOX "New Note Action",IDC_STATIC,240,27,122,60,0,WS_EX_TRANSPARENT CTEXT "Acti&on",IDC_STATIC,246,36,59,13,SS_CENTERIMAGE,WS_EX_STATICEDGE COMBOBOX IDC_COMBO1,308,36,50,54,CBS_DROPDOWNLIST | WS_TABSTOP CTEXT "&Duplicate Check",IDC_STATIC,246,53,59,13,SS_CENTERIMAGE,WS_EX_STATICEDGE COMBOBOX IDC_COMBO2,308,53,50,69,CBS_DROPDOWNLIST | WS_TABSTOP CTEXT "Dupl&icate Action",IDC_STATIC,246,70,59,13,SS_CENTERIMAGE,WS_EX_STATICEDGE COMBOBOX IDC_COMBO3,308,70,50,54,CBS_DROPDOWNLIST | WS_TABSTOP + GROUPBOX "Plugin / MIDI",IDC_STATIC,240,88,228,80,0,WS_EX_TRANSPARENT COMBOBOX IDC_COMBO6,246,99,72,127,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&Editor",IDC_INSVIEWPLG,321,99,37,13,0,WS_EX_STATICEDGE CTEXT "MIDI &Channel",IDC_STATIC,246,116,72,12,SS_CENTERIMAGE,WS_EX_STATICEDGE @@ -1613,27 +1620,20 @@ CTEXT "MIDI &Bank",IDC_STATIC,245,152,72,12,SS_CENTERIMAGE,WS_EX_STATICEDGE EDITTEXT IDC_EDIT11,321,152,37,12,ES_AUTOHSCROLL CONTROL "",IDC_SPIN11,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,351,153,8,11 - CTEXT "P. &Bend Range",IDC_STATIC,366,99,52,12,SS_CENTERIMAGE,WS_EX_STATICEDGE - EDITTEXT IDC_PITCHWHEELDEPTH,420,99,36,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Pitch &Bend Range",IDC_STATIC,366,99,60,12,SS_CENTERIMAGE + EDITTEXT IDC_PITCHWHEELDEPTH,428,99,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_TABSTOP,444,102,11,11 - CTEXT "Volume Command &Handling",IDC_STATIC,366,116,90,10,SS_CENTERIMAGE,WS_EX_STATICEDGE - COMBOBOX IDC_PLUGIN_VOLUMESTYLE,366,128,90,53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Volume Command &Handling",IDC_STATIC,366,116,96,10,SS_CENTERIMAGE + COMBOBOX IDC_PLUGIN_VOLUMESTYLE,366,128,96,53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "&Volume commands with note are Velocities",IDC_PLUGIN_VELOCITYSTYLE, - "Button",BS_AUTOCHECKBOX | BS_VCENTER | BS_MULTILINE | BS_FLAT | WS_TABSTOP,366,141,90,24 - COMBOBOX IDC_COMBOTUNING,368,38,88,48,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&Loop Tempo:",IDC_CHECK_PITCHTEMPOLOCK,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,369,70,51,8 - EDITTEXT IDC_EDIT_PITCHTEMPOLOCK,426,68,30,12,ES_AUTOHSCROLL | ES_NUMBER - GROUPBOX "Sample &Map",IDC_STATIC,466,27,62,141 - CONTROL "",IDC_NOTEMAP,"Static",SS_GRAYRECT | SS_NOTIFY | WS_TABSTOP,466,37,62,131,WS_EX_CLIENTEDGE - GROUPBOX "General",IDC_STATIC,3,27,123,141 - GROUPBOX "Pitch/Pan Separation",IDC_STATIC,3,88,123,80 - GROUPBOX "Sample Quality",IDC_STATIC,3,118,123,50 - GROUPBOX "Filter",IDC_STATIC,131,27,104,141 - GROUPBOX "Random Variation",IDC_STATIC,131,88,104,80 - GROUPBOX "New Note Action",IDC_STATIC,240,27,122,60 - GROUPBOX "Plugin / MIDI",IDC_STATIC,240,88,222,80 - GROUPBOX "Alternative Tuning",IDC_STATIC,364,27,98,28 - GROUPBOX "Pitch/Tempo Lock",IDC_STATIC,364,57,98,30 + "Button",BS_AUTOCHECKBOX | BS_VCENTER | BS_MULTILINE | BS_FLAT | WS_TABSTOP,366,141,96,24 + GROUPBOX "Alternative Tuning",IDC_STATIC,364,27,104,28,0,WS_EX_TRANSPARENT + COMBOBOX IDC_COMBOTUNING,368,38,94,48,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Pitch/Tempo Lock",IDC_STATIC,364,57,104,30 + CONTROL "&Loop Tempo:",IDC_CHECK_PITCHTEMPOLOCK,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,369,70,57,8 + EDITTEXT IDC_EDIT_PITCHTEMPOLOCK,434,68,30,12,ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX "Sample &Map",IDC_STATIC,474,27,62,141 + CONTROL "",IDC_NOTEMAP,"Static",SS_GRAYRECT | SS_NOTIFY | WS_TABSTOP,474,37,62,131,WS_EX_CLIENTEDGE END IDD_MODDOC_MODTYPE DIALOGEX 0, 0, 262, 287 @@ -1643,8 +1643,10 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,204,6,50,14 PUSHBUTTON "Cancel",IDCANCEL,204,24,50,14 + GROUPBOX "Type",IDC_FRAME_MODTYPE,6,6,192,30,0,WS_EX_TRANSPARENT COMBOBOX IDC_COMBO1,12,18,108,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO2,126,18,66,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Playback",IDC_FRAME_MODFLAGS,6,42,246,54,0,WS_EX_TRANSPARENT CONTROL "&Linear Frequency Slides",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,54,108,10 CONTROL "&Old Effects (IT)",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,54,108,10 CONTROL "Fast &Volume Slides (S3M)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,66,108,10 @@ -1652,8 +1654,14 @@ CONTROL "&ProTracker 1/2 Mode (MOD)",IDC_CHECK_PT1X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,78,108,10 CONTROL "Extended &filter range",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,78,108,10 CONTROL "&Amiga Frequency Limits",IDC_CHECK_AMIGALIMITS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,78,108,10 + GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,102,246,72,0,WS_EX_TRANSPARENT LTEXT "&Mix Levels:",IDC_TEXT_MIXMODE,12,116,48,8 COMBOBOX IDC_COMBO_MIXLEVELS,60,114,108,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "",IDC_STATIC2,12,132,210,18 + ICON "",IDC_STATIC1,222,132,20,20,SS_CENTERIMAGE | SS_REALSIZEIMAGE + PUSHBUTTON "&Set Defaults",IDC_BUTTON3,12,156,72,12 + PUSHBUTTON "&Edit Compatibility Settings",IDC_BUTTON2,96,156,102,12 + GROUPBOX "Tempo",IDC_FRAME_TEMPOMODE,6,180,246,48,0,WS_EX_TRANSPARENT LTEXT "&Tempo Mode:",IDC_TEXT_TEMPOMODE,12,196,48,8 COMBOBOX IDC_COMBO_TEMPOMODE,62,194,82,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Configure S&wing",IDC_BUTTON1,62,212,82,12 @@ -1661,19 +1669,11 @@ EDITTEXT IDC_ROWSPERBEAT,150,194,24,12,ES_AUTOHSCROLL | ES_NUMBER LTEXT "Rows per measure",IDC_TEXT_ROWSPERMEASURE,180,212,66,8 EDITTEXT IDC_ROWSPERMEASURE,150,212,24,12,ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX "Version Info",IDC_FRAME_MPTVERSION,6,234,246,48,0,WS_EX_TRANSPARENT RTEXT "Created with:",IDC_TEXT_CREATEDWITH,12,250,60,8 EDITTEXT IDC_EDIT_CREATEDWITH,78,247,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE RTEXT "Last saved with:",IDC_TEXT_SAVEDWITH,12,266,60,8 EDITTEXT IDC_EDIT_SAVEDWITH,78,266,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE - GROUPBOX "Type",IDC_FRAME_MODTYPE,6,6,192,30 - GROUPBOX "Playback",IDC_FRAME_MODFLAGS,6,42,246,54 - GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,102,246,72 - GROUPBOX "Tempo",IDC_FRAME_TEMPOMODE,6,180,246,48 - GROUPBOX "Version Info",IDC_FRAME_MPTVERSION,6,234,246,48 - PUSHBUTTON "&Edit Compatibility Settings",IDC_BUTTON2,96,156,102,12 - LTEXT "",IDC_STATIC2,12,132,210,18 - ICON "",IDC_STATIC1,222,132,20,20,SS_CENTERIMAGE | SS_REALSIZEIMAGE - PUSHBUTTON "&Set Defaults",IDC_BUTTON3,12,156,72,12 END IDD_REMOVECHANNELS DIALOGEX 0, 0, 171, 221 @@ -2391,7 +2391,7 @@ IDD_CONTROL_INSTRUMENTS, DIALOG BEGIN - RIGHTMARGIN, 500 + RIGHTMARGIN, 506 BOTTOMMARGIN, 165 END @@ -3346,6 +3346,7 @@ CAPTION "MIDI Mapping" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN + GROUPBOX "Current Mapping",IDC_STATIC,5,5,391,91 CONTROL "&Active",IDC_CHECKACTIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,18,48,10 CONTROL "&Capture",IDC_CHECKCAPTURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,66,18,48,10 CONTROL "Pattern &Record",IDC_CHECK_PATRECORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,18,65,10 @@ -3366,7 +3367,6 @@ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,102,385,120 CONTROL "",IDC_SPINMOVEMAPPING,"msctls_updown32",0x0,390,102,11,120 DEFPUSHBUTTON "Close",IDOK,342,228,60,14 - GROUPBOX "Current Mapping",IDC_STATIC,5,5,391,91 END IDD_TUNING DIALOGEX 0, 0, 495, 231 @@ -3607,10 +3607,10 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 100, 100, 100, 0, 0, 100, - 100, 100, 0, 0, - 0, 0, 0, 0 + 100, 100, 0, 0 END |