From: <sag...@us...> - 2010-05-07 21:36:30
|
Revision: 587 http://modplug.svn.sourceforge.net/modplug/?rev=587&view=rev Author: saga-games Date: 2010-05-07 21:36:23 +0000 (Fri, 07 May 2010) Log Message: ----------- [Imp] Song Properties: Tooltips are shown for various controls. [Ref] Added some security checks to tooltip code in the song cleanup dialog, to prevent too long tooltips. Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-05-07 18:23:18 UTC (rev 586) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2010-05-07 21:36:23 UTC (rev 587) @@ -325,7 +325,7 @@ { //strncpy_s(pTTTA->szText, sizeof(pTTTA->szText), strTipText, // strTipText.GetLength() + 1); - strncpy(pTTTA->szText, strTipText, strTipText.GetLength() + 1); + strncpy(pTTTA->szText, strTipText, min(strTipText.GetLength() + 1, ARRAYELEMCOUNT(pTTTA->szText) - 1)); } else { Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-05-07 18:23:18 UTC (rev 586) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2010-05-07 21:36:23 UTC (rev 587) @@ -105,7 +105,12 @@ ON_COMMAND(IDC_CHECK_PT1X, OnCheckPT1x) ON_CBN_SELCHANGE(IDC_COMBO1,UpdateDialog) // -! NEW_FEATURE#0023 + + ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, &CModTypeDlg::OnToolTipNotify) + ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, &CModTypeDlg::OnToolTipNotify) + //}}AFX_MSG_MAP + END_MESSAGE_MAP() @@ -116,8 +121,8 @@ //{{AFX_DATA_MAP(CModTypeDlg) DDX_Control(pDX, IDC_COMBO1, m_TypeBox); DDX_Control(pDX, IDC_COMBO2, m_ChannelsBox); - DDX_Control(pDX, IDC_COMBO_TEMPOMODE, m_TempoModeBox); - DDX_Control(pDX, IDC_COMBO_MIXLEVELS, m_PlugMixBox); + DDX_Control(pDX, IDC_COMBO_TEMPOMODE, m_TempoModeBox); + DDX_Control(pDX, IDC_COMBO_MIXLEVELS, m_PlugMixBox); DDX_Control(pDX, IDC_CHECK1, m_CheckBox1); DDX_Control(pDX, IDC_CHECK2, m_CheckBox2); DDX_Control(pDX, IDC_CHECK3, m_CheckBox3); @@ -158,18 +163,12 @@ case MOD_TYPE_XM: m_TypeBox.SetCurSel(2); break; // -> CODE#0023 // -> DESC="IT project files (.itp)" -// case MOD_TYPE_IT: m_TypeBox.SetCurSel(3); break; case MOD_TYPE_IT: m_TypeBox.SetCurSel(m_pSndFile->m_dwSongFlags & SONG_ITPROJECT ? 4 : 3); break; +// -! NEW_FEATURE#0023 case MOD_TYPE_MPT: m_TypeBox.SetCurSel(5); break; -// -! NEW_FEATURE#0023 default: m_TypeBox.SetCurSel(0); break; } -// -> CODE#0006 -// -> DESC="misc quantity changes" -// for (int i=4; i<=64; i++) -// for (int i=4; i<=MAX_BASECHANNELS; i++) -// -! BEHAVIOUR_CHANGE#0006 UpdateChannelCBox(); m_TempoModeBox.SetItemData(m_TempoModeBox.AddString("Classic"), tempo_mode_classic); @@ -192,8 +191,8 @@ { //case mixLevels_Test: m_PlugMixBox.SetCurSel(4); break; case mixLevels_original: m_PlugMixBox.SetCurSel(3); break; - case mixLevels_117RC1: m_PlugMixBox.SetCurSel(2); break; - case mixLevels_117RC2: m_PlugMixBox.SetCurSel(1); break; + case mixLevels_117RC1: m_PlugMixBox.SetCurSel(2); break; + case mixLevels_117RC2: m_PlugMixBox.SetCurSel(1); break; case mixLevels_117RC3: default: m_PlugMixBox.SetCurSel(0); break; } @@ -207,6 +206,8 @@ m_EditFlag.SetLimitText(16); UpdateDialog(); + + EnableToolTips(TRUE); return TRUE; } @@ -216,8 +217,8 @@ { const MODTYPE type = m_TypeBox.GetItemData(m_TypeBox.GetCurSel()); CHANNELINDEX currChanSel = m_ChannelsBox.GetItemData(m_ChannelsBox.GetCurSel()); - const CHANNELINDEX minChans = m_pSndFile->GetModSpecifications(type).channelsMin; - const CHANNELINDEX maxChans = m_pSndFile->GetModSpecifications(type).channelsMax; + const CHANNELINDEX minChans = CSoundFile::GetModSpecifications(type).channelsMin; + const CHANNELINDEX maxChans = CSoundFile::GetModSpecifications(type).channelsMax; if(m_ChannelsBox.GetCount() < 1 || m_ChannelsBox.GetItemData(0) != minChans @@ -408,7 +409,7 @@ } -BOOL CModTypeDlg::VerifyData() +bool CModTypeDlg::VerifyData() //---------------------------- { @@ -418,7 +419,7 @@ { ::AfxMessageBox("Error: Rows per measure must be greater than rows per beat.", MB_OK|MB_ICONEXCLAMATION); GetDlgItem(IDC_ROWSPERMEASURE)->SetFocus(); - return FALSE; + return false; } int sel = m_ChannelsBox.GetItemData(m_ChannelsBox.GetCurSel()); @@ -426,7 +427,8 @@ CHANNELINDEX maxChans = CSoundFile::GetModSpecifications(type).channelsMax; - if (sel > maxChans) { + if (sel > maxChans) + { CString error; error.Format("Error: Max number of channels for this type is %d", maxChans); ::AfxMessageBox(error, MB_OK|MB_ICONEXCLAMATION); @@ -436,18 +438,17 @@ if(maxChans < m_pSndFile->GetNumChannels()) { if(MessageBox("New modtype supports less channels than currently used, and reducing channel number is required. Continue?", "", MB_OKCANCEL) != IDOK) - return FALSE; + return false; } - return TRUE; + return true; } void CModTypeDlg::OnOK() //---------------------- { - if (!VerifyData()) { + if (!VerifyData()) return; - } int sel = m_TypeBox.GetCurSel(); if (sel >= 0) @@ -455,7 +456,8 @@ m_nType = m_TypeBox.GetItemData(sel); // -> CODE#0023 // -> DESC="IT project files (.itp)" - if(m_pSndFile->m_dwSongFlags & SONG_ITPROJECT && sel != 4){ + if(m_pSndFile->m_dwSongFlags & SONG_ITPROJECT && sel != 4) + { m_pSndFile->m_dwSongFlags &= ~SONG_ITPROJECT; m_pSndFile->m_dwSongFlags &= ~SONG_ITPEMBEDIH; } @@ -511,6 +513,69 @@ } +BOOL CModTypeDlg::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult) +//------------------------------------------------------------------------- +{ + UNREFERENCED_PARAMETER(id); + UNREFERENCED_PARAMETER(pResult); + + // need to handle both ANSI and UNICODE versions of the message + TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; + TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; + CStringA strTipText = ""; + UINT_PTR nID = pNMHDR->idFrom; + if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || + pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) + { + // idFrom is actually the HWND of the tool + nID = ::GetDlgCtrlID((HWND)nID); + } + + switch(nID) + { + case IDC_CHECK1: + strTipText = "Note slides always slide the same amount, not depending on the sample frequency."; + break; + case IDC_CHECK2: + strTipText = "Old ScreamTracker 3 volume slide behaviour (not recommended)."; + break; + case IDC_CHECK3: + strTipText = "Play some effects like in early versions of Impulse Tracker (not recommended)."; + break; + case IDC_CHECK4: + strTipText = "Gxx and Exx/Fxx won't share effect memory. Gxx resets instrument envelopes."; + break; + case IDC_CHECK5: + strTipText = "The resonant filter's frequency range is incresed from about 4KHz to 10KHz"; + break; + case IDC_CHECK6: + strTipText = "The instrument settings of the external ITI files will be ignored."; + break; + case IDC_CHECK_PT1X: + strTipText = "Ignore pan fx, use on-the-fly sample swapping, enforce Amiga frequency limits."; + break; + case IDC_COMBO_MIXLEVELS: + strTipText = "Mixing method of sample and VST levels."; + break; + } + + if (pNMHDR->code == TTN_NEEDTEXTA) + { + //strncpy_s(pTTTA->szText, sizeof(pTTTA->szText), strTipText, + // strTipText.GetLength() + 1); + // 80 chars max?! + strncpy(pTTTA->szText, strTipText, min(strTipText.GetLength() + 1, ARRAYELEMCOUNT(pTTTA->szText) - 1)); + } + else + { + ::MultiByteToWideChar(CP_ACP , 0, strTipText, strTipText.GetLength() + 1, + pTTTW->szText, sizeof(pTTTW->szText)/(sizeof pTTTW->szText[0])); + } + + return TRUE; +} + + ////////////////////////////////////////////////////////////////////////////// // CShowLogDlg Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2010-05-07 18:23:18 UTC (rev 586) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2010-05-07 21:36:23 UTC (rev 587) @@ -14,7 +14,8 @@ CButton m_CheckBox1, m_CheckBox2, m_CheckBox3, m_CheckBox4, m_CheckBox5, m_CheckBoxPT1x; CEdit m_EditFlag; CSoundFile *m_pSndFile; - UINT m_nChannels, m_nType; + UINT m_nChannels; + MODTYPE m_nType; DWORD m_dwSongFlags; // -> CODE#0023 @@ -25,8 +26,8 @@ CButton m_CheckBoxITCompatiblePlay; public: - CModTypeDlg(CSoundFile *pSndFile, CWnd *parent):CDialog(IDD_MODDOC_MODTYPE, parent) { m_pSndFile = pSndFile; m_nType = m_nChannels = 0; } - BOOL VerifyData(); + CModTypeDlg(CSoundFile *pSndFile, CWnd *parent):CDialog(IDD_MODDOC_MODTYPE, parent) { m_pSndFile = pSndFile; m_nType = MOD_TYPE_NONE; m_nChannels = 0; } + bool VerifyData(); void UpdateDialog(); private: @@ -40,6 +41,9 @@ virtual void OnCancel(); //}}AFX_VIRTUAL + + BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult); + //{{AFX_MSG(CModTypeDlg) afx_msg void OnCheck1(); afx_msg void OnCheck2(); @@ -565,7 +569,7 @@ //========================================= { protected: - CComboBox m_CbnSplitInstrument,m_CbnSplitNote,m_CbnOctaveModifier,m_CbnSplitVolume; + CComboBox m_CbnSplitInstrument, m_CbnSplitNote, m_CbnOctaveModifier, m_CbnSplitVolume; CSoundFile *m_pSndFile; public: Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2010-05-07 18:23:18 UTC (rev 586) +++ trunk/OpenMPT/mptrack/mptrack.rc 2010-05-07 21:36:23 UTC (rev 587) @@ -13,7 +13,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// German (Germany) resources +// Deutsch (Deutschland) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) #ifdef _WIN32 @@ -207,12 +207,12 @@ END #endif // APSTUDIO_INVOKED -#endif // German (Germany) resources +#endif // Deutsch (Deutschland) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// Englisch (USA) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 @@ -239,7 +239,7 @@ END IDD_OPTIONS_PLAYER DIALOGEX 0, 0, 272, 279 -STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Player" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -278,7 +278,7 @@ EDITTEXT IDC_WFIRCUTOFF,156,216,24,14,ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC,186,219,8,8 LTEXT "Sample ramping (click avoidance):",IDC_STATIC,18,238,109,8 - LTEXT "(can be overridden by instrument setting)",IDC_STATIC,18,248,128,8 + LTEXT "(can be overridden by instrument setting)",IDC_STATIC,18,248,138,8 EDITTEXT IDC_RAMPING,156,235,24,14,ES_AUTOHSCROLL | ES_NUMBER LTEXT "Samples",IDC_STATIC,182,238,29,8 PUSHBUTTON "Default Settings",IDC_BUTTON_DEFAULT_RESAMPLING,186,180,66,12 @@ -579,7 +579,7 @@ PUSHBUTTON "...",IDC_BUTTON2,502,51,13,13,NOT WS_VISIBLE,WS_EX_CLIENTEDGE RTEXT "Sample",IDC_STATIC,62,8,24,8 CTEXT "Length: 000000 (16-bit)",IDC_TEXT5,175,6,90,13,SS_CENTERIMAGE,WS_EX_STATICEDGE - CONTROL "Toolbar2",IDC_TOOLBAR2,"ToolbarWindow32",WS_GROUP | 0x4d,268,4,186,17 + CONTROL "Toolbar2",IDC_TOOLBAR2,"ToolbarWindow32",WS_GROUP | 0x4d,268,4,252,17 GROUPBOX "",IDC_STATIC,3,22,94,78 LTEXT "Default Volume",IDC_STATIC,8,32,49,8 LTEXT "Global Volume",IDC_STATIC,8,45,46,8 @@ -693,41 +693,41 @@ END IDD_MODDOC_MODTYPE DIALOGEX 0, 0, 262, 317 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Song Properties" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "OK",IDOK,204,6,50,14 PUSHBUTTON "Cancel",IDCANCEL,204,24,50,14 - GROUPBOX "Type",IDC_FRAME_MODTYPE,6,6,192,48 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 - CONTROL "Embed instrument parameters in ITP",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,36,126,8 - GROUPBOX "Playback",IDC_FRAME_MODFLAGS,6,60,246,54 + CONTROL "Embed instrument parameters in ITP",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,36,174,8 CONTROL "Linear Frequency Slides",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,72,91,10 + CONTROL "Old Effects (IT)",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,72,66,10 CONTROL "Fast Volume Slides (S3M)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,84,96,10 + CONTROL "Compatible Gxx (IT)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,84,84,10 CONTROL "Extended filter range",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,96,81,10 - CONTROL "Old Effects (IT)",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,72,66,10 - CONTROL "Compatible Gxx (IT)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,84,84,10 - GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,120,246,84 + CONTROL "ProTracker 1.x Mode (MOD)",IDC_CHECK_PT1X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,96,108,10 RTEXT "Mix Levels:",IDC_TEXT_MIXMODE,18,134,81,8 COMBOBOX IDC_COMBO_MIXLEVELS,108,132,84,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP RTEXT "Miscellaneous flags(0/1):",IDC_FLAGEDITTITLE,18,150,81,12,SS_CENTERIMAGE EDITTEXT IDC_EDIT_FLAGS,108,150,84,12,ES_AUTOHSCROLL - LTEXT "",IDC_FLAG_EXPLANATIONS,18,168,222,26 - GROUPBOX "OpenMPT Version Info",IDC_FRAME_MPTVERSION,6,263,246,48 + COMBOBOX IDC_COMBO_TEMPOMODE,36,222,108,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_ROWSPERBEAT,156,222,24,12,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_ROWSPERMEASURE,156,240,24,12,ES_AUTOHSCROLL | ES_NUMBER EDITTEXT IDC_EDIT_CREATEDWITH,78,276,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE EDITTEXT IDC_EDIT_SAVEDWITH,78,294,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE - RTEXT "IDC_TEXT_CREATEDWITH",IDC_TEXT_CREATEDWITH,18,278,54,8 - RTEXT "IDC_TEXT_SAVEDWITH",IDC_TEXT_SAVEDWITH,18,295,54,8 + GROUPBOX "Type",IDC_FRAME_MODTYPE,6,6,192,48 + GROUPBOX "Playback",IDC_FRAME_MODFLAGS,6,60,246,54 + GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,120,246,84 + LTEXT "",IDC_FLAG_EXPLANATIONS,18,168,222,26 GROUPBOX "Tempo",IDC_FRAME_TEMPOMODE,6,210,246,48 LTEXT "Mode:",IDC_TEXT_TEMPOMODE,12,224,21,8 - COMBOBOX IDC_COMBO_TEMPOMODE,36,222,108,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_ROWSPERBEAT,156,222,24,12,ES_AUTOHSCROLL | ES_NUMBER LTEXT "Rows/beat",IDC_TEXT_ROWSPERBEAT,186,224,36,8 - EDITTEXT IDC_ROWSPERMEASURE,156,240,24,12,ES_AUTOHSCROLL | ES_NUMBER LTEXT "Rows/measure",IDC_TEXT_ROWSPERMEASURE,186,242,49,8 - CONTROL "ProTracker 1.x Mode (MOD)",IDC_CHECK_PT1X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,96,108,10 + GROUPBOX "OpenMPT Version Info",IDC_FRAME_MPTVERSION,6,263,246,48 + RTEXT "IDC_TEXT_CREATEDWITH",IDC_TEXT_CREATEDWITH,18,278,54,8 + RTEXT "IDC_TEXT_SAVEDWITH",IDC_TEXT_SAVEDWITH,18,295,54,8 END IDD_SHOWLOG DIALOG 0, 0, 300, 106 @@ -2378,12 +2378,12 @@ IDS_SOUNDTOUCH_LOADFAILURE "Unable to load OpenMPT_soundtouch_i16.dll." END -#endif // English (U.S.) resources +#endif // Englisch (USA) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.K.) resources +// Englisch (GB) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) #ifdef _WIN32 @@ -2752,7 +2752,7 @@ // IDR_BUILTIN_TUNINGS TUNING "res\\built-inTunings.tc" -#endif // English (U.K.) resources +#endif // Englisch (GB) resources ///////////////////////////////////////////////////////////////////////////// This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |