From: <sag...@us...> - 2015-06-24 21:52:37
|
Revision: 5350 http://sourceforge.net/p/modplug/code/5350 Author: saga-games Date: 2015-06-24 21:52:32 +0000 (Wed, 24 Jun 2015) Log Message: ----------- [Mod] VST: Project path can now be customized further: %1 is the module path, %2 the module filename. Modified Paths: -------------- trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/Vstplug.cpp Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-24 19:55:47 UTC (rev 5349) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-24 21:52:32 UTC (rev 5350) @@ -306,7 +306,7 @@ // Plugins , bridgeAllPlugins(conf, "VST Plugins", "BridgeAllPlugins", false) , enableAutoSuspend(conf, "VST Plugins", "EnableAutoSuspend", false) - , pluginProjectPath(conf, "VST Plugins", "ProjectPath", mpt::PathString()) + , pluginProjectPath(conf, "VST Plugins", "ProjectPath", std::wstring()) // Update , UpdateLastUpdateCheck(conf, "Update", "LastUpdateCheck", mpt::Date::Unix(time_t())) , UpdateUpdateCheckPeriod(conf, "Update", "UpdateCheckPeriod", CUpdateCheck::GetUpdateCheckPeriod()) Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-24 19:55:47 UTC (rev 5349) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-24 21:52:32 UTC (rev 5350) @@ -677,7 +677,7 @@ Setting<bool> bridgeAllPlugins; Setting<bool> enableAutoSuspend; - Setting<mpt::PathString> pluginProjectPath; + Setting<std::wstring> pluginProjectPath; // Update Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2015-06-24 19:55:47 UTC (rev 5349) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2015-06-24 21:52:32 UTC (rev 5350) @@ -461,21 +461,18 @@ #ifdef MODPLUG_TRACKER if(pVstPlugin && pVstPlugin->GetModDoc()) { - mpt::PathString path = pVstPlugin->GetModDoc()->GetPathNameMpt(); + std::wstring formatStr = TrackerSettings::Instance().pluginProjectPath; + if(formatStr.empty()) formatStr = L"%1"; + const mpt::PathString projectPath = pVstPlugin->GetModDoc()->GetPathNameMpt(); + const mpt::PathString projectFile = projectPath.GetFullFileName(); + mpt::PathString path = mpt::PathString::FromWide(mpt::String::Print(formatStr, projectPath.GetPath().ToWide(), projectFile.ToWide())); if(path.empty()) { return 0; } - mpt::PathString projectPath = TrackerSettings::Instance().pluginProjectPath; - if(!projectPath.empty()) - { - // Project files should be stored in a sub directory. - // Sub directory name is original filename + custom addition. - path += projectPath; - path.EnsureTrailingSlash(); - ::CreateDirectoryW(path.AsNative().c_str(), nullptr); - path += pVstPlugin->GetModDoc()->GetPathNameMpt().GetFullFileName(); - } + path.EnsureTrailingSlash(); + ::SHCreateDirectoryExW(NULL, path.AsNative().c_str(), nullptr); + path += projectFile; strcpy(ptr, path.ToLocale().c_str()); return 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-24 23:26:37
|
Revision: 5351 http://sourceforge.net/p/modplug/code/5351 Author: saga-games Date: 2015-06-24 23:26:31 +0000 (Wed, 24 Jun 2015) Log Message: ----------- [Imp] Add edit groups for tempo swing editor. Modified Paths: -------------- trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-24 21:52:32 UTC (rev 5350) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-24 23:26:31 UTC (rev 5351) @@ -1200,6 +1200,8 @@ //{{AFX_MSG_MAP(CTempoSwingDlg) ON_WM_HSCROLL() ON_COMMAND(IDC_BUTTON1, OnReset) + ON_COMMAND(IDC_CHECK1, OnToggleGroup) + ON_EN_CHANGE(IDC_EDIT1, OnGroupChanged) ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -1207,6 +1209,7 @@ CTempoSwingDlg::CTempoSwingDlg(CWnd *parent, const TempoSwing ¤tTempoSwing, CSoundFile &sndFile, PATTERNINDEX pattern) : CDialog(IDD_TEMPO_SWING, parent) + , m_groupSize(1) , m_tempoSwing(currentTempoSwing) , m_origTempoSwing(pattern == PATTERNINDEX_INVALID ? sndFile.m_tempoSwing : sndFile.Patterns[pattern].GetTempoSwing()) , m_sndFile(sndFile) @@ -1226,7 +1229,7 @@ edValueLabelWidth = 64, // Label "100%" edPaddingX = 8, // Spacing between elements edPaddingY = 4, // Spacing between elements - edPaddingTop = 35, // Topping from top of dialog + edPaddingTop = 64, // Spacing from top of dialog edTotalHeight = edSliderHeight + edPaddingY, // Height of one set of controls edFooterHeight = 32, // Buttons }; @@ -1261,6 +1264,7 @@ GetClientRect(rect); windowRect.bottom = windowRect.top + windowRect.Height() - rect.Height(); rect.DeflateRect(m.paddingX, m.paddingTop, m.paddingX, 0); + m_controls.resize(m_tempoSwing.size()); for(size_t i = 0; i < m_controls.size(); i++) { @@ -1285,6 +1289,11 @@ r->valueSlider.SetPos(val); rect.MoveToY(rect.top + m.totalHeight); } + + ((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange32(1, static_cast<int>(m_tempoSwing.size())); + SetDlgItemInt(IDC_EDIT1, m_groupSize); + OnToggleGroup(); + OnHScroll(0, 0, nullptr); rect.MoveToY(rect.top + m.paddingY); { @@ -1353,9 +1362,49 @@ } -void CTempoSwingDlg::OnHScroll(UINT /*nSBCode*/, UINT /*nPos*/, CScrollBar* /*pScrollBar*/) -//----------------------------------------------------------------------------------------- +void CTempoSwingDlg::OnToggleGroup() +//---------------------------------- { + const BOOL checked = IsDlgButtonChecked(IDC_CHECK1); + GetDlgItem(IDC_EDIT1)->EnableWindow(checked); + GetDlgItem(IDC_SPIN1)->EnableWindow(checked); +} + + +void CTempoSwingDlg::OnGroupChanged() +//----------------------------------- +{ + m_groupSize = GetDlgItemInt(IDC_EDIT1); + Limit(m_groupSize, 1, static_cast<int>(m_tempoSwing.size())); +} + + +void CTempoSwingDlg::OnHScroll(UINT /*nSBCode*/, UINT /*nPos*/, CScrollBar* pScrollBar) +//------------------------------------------------------------------------------------- +{ + if(IsDlgButtonChecked(IDC_CHECK1)) + { + // Edit groups + size_t editedGroup = 0; + int editedValue = SliderUnity; + for(size_t i = 0; i < m_controls.size(); i++) + { + if(m_controls[i]->valueSlider.m_hWnd == pScrollBar->m_hWnd) + { + editedValue = m_controls[i]->valueSlider.GetPos(); + editedGroup = (i / m_groupSize) % 2; + break; + } + } + for(size_t i = 0; i < m_controls.size(); i++) + { + if((i / m_groupSize) % 2 == editedGroup) + { + m_controls[i]->valueSlider.SetPos(editedValue); + } + } + } + for(size_t i = 0; i < m_controls.size(); i++) { m_tempoSwing[i] = Util::muldivr(m_controls[i]->valueSlider.GetPos(), TempoSwing::Unity, SliderUnity) + TempoSwing::Unity; Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2015-06-24 21:52:32 UTC (rev 5350) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2015-06-24 23:26:31 UTC (rev 5351) @@ -278,6 +278,8 @@ CSliderCtrl valueSlider; }; std::vector<RowCtls *> m_controls; + int m_groupSize; + public: TempoSwing m_tempoSwing; const TempoSwing m_origTempoSwing; @@ -293,6 +295,8 @@ virtual void OnCancel(); void OnClose(); afx_msg void OnReset(); + afx_msg void OnToggleGroup(); + afx_msg void OnGroupChanged(); afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg BOOL OnToolTipNotify(UINT, NMHDR *pNMHDR, LRESULT *); DECLARE_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-24 21:52:32 UTC (rev 5350) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-24 23:26:31 UTC (rev 5351) @@ -365,10 +365,14 @@ CAPTION "Tempo Swing Settings" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "OK",IDOK,132,120,50,14 - PUSHBUTTON "Cancel",IDCANCEL,186,120,50,14 + DEFPUSHBUTTON "&OK",IDOK,132,120,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,186,120,50,14 LTEXT "Configure how much each row contributes to a beat:",IDC_STATIC,6,9,174,8 - PUSHBUTTON "Reset",IDC_BUTTON1,186,6,50,14 + PUSHBUTTON "&Reset",IDC_BUTTON1,186,6,50,14 + CONTROL "&Edit group:",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,24,54,12 + EDITTEXT IDC_EDIT1,60,24,30,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,78,30,11,12 + LTEXT "consecutive rows are grouped",IDC_STATIC,96,26,138,8 END This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-25 16:32:47
|
Revision: 5353 http://sourceforge.net/p/modplug/code/5353 Author: saga-games Date: 2015-06-25 16:32:36 +0000 (Thu, 25 Jun 2015) Log Message: ----------- [Mod] Move "create backups" option to Path / Auto Save tab. Modified Paths: -------------- trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp trunk/OpenMPT/mptrack/PathConfigDlg.cpp trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp 2015-06-25 13:47:00 UTC (rev 5352) +++ trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp 2015-06-25 16:32:36 UTC (rev 5353) @@ -44,7 +44,6 @@ {PATTERN_CENTERROW, "Always center active row", "Turn on this option to have the active row always centered in the pattern editor."}, {PATTERN_HEXDISPLAY, "Display rows in hex", "With this option enabled, row numbers and sequence numbers will be displayed in hexadecimal."}, {PATTERN_WRAP, "Cursor wrap in pattern editor", "When this option is active, going past the end of a pattern row or channel will move the cursor to the beginning. When \"Continuous scroll\"-option is enabled, row wrap is disabled."}, - {PATTERN_CREATEBACKUP, "Create backup files (*.bak)", "When this option is active, saving a file will create a backup copy of the original."}, {PATTERN_DRAGNDROPEDIT, "Drag and Drop Editing", "Enable moving a selection in the pattern editor (copying if pressing shift while dragging)"}, {PATTERN_FLATBUTTONS, "Flat Buttons", "Use flat buttons in toolbars"}, {PATTERN_SINGLEEXPAND, "Single click to expand tree", "Single-clicking in the left tree view will expand a node."}, @@ -57,7 +56,7 @@ {PATTERN_MIDIRECORD, "MIDI record", "Enable MIDI in record by default."}, {PATTERN_OLDCTXMENUSTYLE, "Old style pattern context menu", "Check this option to hide unavailable items in the pattern editor context menu. Uncheck to grey-out unavailable items instead."}, {PATTERN_SYNCMUTE, "Maintain sample sync on mute", "Samples continue to be processed when channels are muted (like in IT2 and FT2)"}, - {PATTERN_SYNCSAMPLEPOS, "Maintain sample sync on seek", "Sample that are still active from previous patterns are continued to be played after seeking.\nNote: Samples with portamento effects applied are not synced. This feature may slow down seeking."}, + {PATTERN_SYNCSAMPLEPOS, "Maintain sample sync on seek", "Sample that are still active from previous patterns are continued to be played after seeking.\nNote: Some pattern commands may prevent samples from being synced. This feature may slow down seeking."}, {PATTERN_AUTODELAY, "Automatic delay commands", "Automatically insert appropriate note-delay commands when recording notes during live playback."}, {PATTERN_NOTEFADE, "Note fade on key up", "Enable to fade / stop notes on key up in pattern tab."}, {PATTERN_OVERFLOWPASTE, "Overflow paste mode", "Wrap pasted pattern data into next pattern. This is useful for creating echo channels."}, Modified: trunk/OpenMPT/mptrack/PathConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-06-25 13:47:00 UTC (rev 5352) +++ trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-06-25 16:32:36 UTC (rev 5353) @@ -43,6 +43,7 @@ ON_COMMAND(IDC_BUTTON_CHANGE_VSTPRESETSDIR, OnBrowsePresets) // Autosave + ON_COMMAND(IDC_CHECK1, OnSettingsChanged) ON_BN_CLICKED(IDC_AUTOSAVE_BROWSE, OnBrowseAutosavePath) ON_BN_CLICKED(IDC_AUTOSAVE_ENABLE, OnAutosaveEnable) ON_BN_CLICKED(IDC_AUTOSAVE_USEORIGDIR, OnAutosaveUseOrigDir) @@ -66,6 +67,8 @@ ::SetDlgItemTextW(m_hWnd, IDC_OPTIONS_DIR_VSTPRESETS, TrackerSettings::Instance().PathPluginPresets.GetDefaultDir().AsNative().c_str()); // Autosave + CheckDlgButton(IDC_CHECK1, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_CREATEBACKUP) != 0); + CheckDlgButton(IDC_AUTOSAVE_ENABLE, TrackerSettings::Instance().AutosaveEnabled ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt(IDC_AUTOSAVE_HISTORY, TrackerSettings::Instance().AutosaveHistoryDepth); ::SetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, TrackerSettings::Instance().AutosavePath.GetDefaultDir().AsNative().c_str()); @@ -98,6 +101,10 @@ mpt::PathString::FromNative(szVstDir), mpt::PathString::FromNative(szPresetDir)); + // Autosave + if(IsDlgButtonChecked(IDC_CHECK1)) TrackerSettings::Instance().m_dwPatternSetup |= PATTERN_CREATEBACKUP; + else TrackerSettings::Instance().m_dwPatternSetup &= ~PATTERN_CREATEBACKUP; + WCHAR tempPath[MAX_PATH]; TrackerSettings::Instance().AutosaveEnabled = (IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE) != BST_UNCHECKED); TrackerSettings::Instance().AutosaveHistoryDepth = (GetDlgItemInt(IDC_AUTOSAVE_HISTORY)); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-25 13:47:00 UTC (rev 5352) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-25 16:32:36 UTC (rev 5353) @@ -1640,24 +1640,6 @@ CAPTION "Paths / Auto Save" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Auto Save",IDC_STATIC,6,120,278,157 - CONTROL "&Enable Auto Save",IDC_AUTOSAVE_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,132,237,10 - LTEXT "&Save every:",IDC_STATIC,17,146,40,12,SS_CENTERIMAGE - EDITTEXT IDC_AUTOSAVE_INTERVAL,61,146,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "minutes",IDC_STATIC,89,146,165,12,SS_CENTERIMAGE - LTEXT "&Keep up to:",IDC_STATIC,17,163,36,12,SS_CENTERIMAGE - EDITTEXT IDC_AUTOSAVE_HISTORY,61,163,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "backups of each file name",IDC_STATIC,89,163,165,12,SS_CENTERIMAGE - GROUPBOX "Location:",IDC_STATIC,17,187,255,80 - CONTROL "Use song's &original directory.",IDC_AUTOSAVE_USEORIGDIR, - "Button",BS_AUTORADIOBUTTON,30,200,218,10 - CONTROL "&Use:",IDC_AUTOSAVE_USECUSTOMDIR,"Button",BS_AUTORADIOBUTTON,30,214,31,10 - EDITTEXT IDC_AUTOSAVE_PATH,62,213,186,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_AUTOSAVE_BROWSE,254,213,12,11,NOT WS_TABSTOP - LTEXT "Filename:",IDC_STATIC,30,237,30,12,SS_CENTERIMAGE - LTEXT "[filename].AutoSave.[timestamp].[extension]",IDC_STATIC,62,237,186,12,SS_CENTERIMAGE,WS_EX_CLIENTEDGE - LTEXT "(example: mySong.AutoSave.20050327.2343.it)",IDC_STATIC,62,252,186,12,SS_CENTERIMAGE - GROUPBOX "Default Directories",IDC_STATIC,6,6,276,102 RTEXT "Songs:",IDC_STATIC_MODDIR,12,18,48,12,SS_CENTERIMAGE EDITTEXT IDC_OPTIONS_DIR_MODS,66,18,192,12,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BUTTON_CHANGE_MODDIR,264,18,12,11,NOT WS_TABSTOP @@ -1673,6 +1655,25 @@ RTEXT "VST Presets:",IDC_STATIC_VSTPRESETDIR,12,90,48,12,SS_CENTERIMAGE EDITTEXT IDC_OPTIONS_DIR_VSTPRESETS,66,90,192,12,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BUTTON_CHANGE_VSTPRESETSDIR,264,90,12,11,NOT WS_TABSTOP + CONTROL "Create &backup copy (*.bak) when saving a module files",IDC_CHECK1, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,135,258,12 + CONTROL "&Enable Auto Save",IDC_AUTOSAVE_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,154,237,10 + LTEXT "&Save every:",IDC_STATIC,18,168,40,12,SS_CENTERIMAGE + EDITTEXT IDC_AUTOSAVE_INTERVAL,62,168,24,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "minutes",IDC_STATIC,90,168,165,12,SS_CENTERIMAGE + LTEXT "&Keep up to:",IDC_STATIC,18,185,36,12,SS_CENTERIMAGE + EDITTEXT IDC_AUTOSAVE_HISTORY,62,185,24,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "backups of each file name",IDC_STATIC,90,185,165,12,SS_CENTERIMAGE + CONTROL "Store auto save files in song's &original directory.",IDC_AUTOSAVE_USEORIGDIR, + "Button",BS_AUTORADIOBUTTON,18,202,218,10 + CONTROL "S&tore in:",IDC_AUTOSAVE_USECUSTOMDIR,"Button",BS_AUTORADIOBUTTON,18,218,43,10 + EDITTEXT IDC_AUTOSAVE_PATH,72,216,186,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_AUTOSAVE_BROWSE,264,216,12,11,NOT WS_TABSTOP + LTEXT "Filename:",IDC_STATIC,30,240,36,12,SS_CENTERIMAGE + LTEXT "[filename].AutoSave.[timestamp].[extension]",IDC_STATIC,72,240,186,12,SS_CENTERIMAGE,WS_EX_CLIENTEDGE + LTEXT "(example: mySong.AutoSave.20050327.2343.it)",IDC_STATIC,72,258,186,12,SS_CENTERIMAGE + GROUPBOX "Backup and Auto Save",IDC_STATIC,6,120,278,157 + GROUPBOX "Default Directories",IDC_STATIC,6,6,276,102 END IDD_EDIT_GOTO DIALOGEX 0, 0, 130, 79 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-26 12:39:55
|
Revision: 5354 http://sourceforge.net/p/modplug/code/5354 Author: saga-games Date: 2015-06-26 12:39:49 +0000 (Fri, 26 Jun 2015) Log Message: ----------- [Fix] Typo in backup text [Imp] Add spin buttons to auto save dialog Modified Paths: -------------- trunk/OpenMPT/mptrack/PathConfigDlg.cpp trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/PathConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-06-25 16:32:36 UTC (rev 5353) +++ trunk/OpenMPT/mptrack/PathConfigDlg.cpp 2015-06-26 12:39:49 UTC (rev 5354) @@ -69,6 +69,8 @@ // Autosave CheckDlgButton(IDC_CHECK1, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_CREATEBACKUP) != 0); + static_cast<CSpinButtonCtrl *>(GetDlgItem(IDC_SPIN1))->SetRange32(1, int32_max); + static_cast<CSpinButtonCtrl *>(GetDlgItem(IDC_SPIN2))->SetRange32(1, int32_max); CheckDlgButton(IDC_AUTOSAVE_ENABLE, TrackerSettings::Instance().AutosaveEnabled ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt(IDC_AUTOSAVE_HISTORY, TrackerSettings::Instance().AutosaveHistoryDepth); ::SetDlgItemTextW(m_hWnd, IDC_AUTOSAVE_PATH, TrackerSettings::Instance().AutosavePath.GetDefaultDir().AsNative().c_str()); @@ -141,7 +143,9 @@ { BOOL enabled = IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE); GetDlgItem(IDC_AUTOSAVE_INTERVAL)->EnableWindow(enabled); + GetDlgItem(IDC_SPIN1)->EnableWindow(enabled); GetDlgItem(IDC_AUTOSAVE_HISTORY)->EnableWindow(enabled); + GetDlgItem(IDC_SPIN2)->EnableWindow(enabled); GetDlgItem(IDC_AUTOSAVE_USEORIGDIR)->EnableWindow(enabled); GetDlgItem(IDC_AUTOSAVE_USECUSTOMDIR)->EnableWindow(enabled); GetDlgItem(IDC_AUTOSAVE_PATH)->EnableWindow(enabled); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-25 16:32:36 UTC (rev 5353) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-26 12:39:49 UTC (rev 5354) @@ -1655,15 +1655,17 @@ RTEXT "VST Presets:",IDC_STATIC_VSTPRESETDIR,12,90,48,12,SS_CENTERIMAGE EDITTEXT IDC_OPTIONS_DIR_VSTPRESETS,66,90,192,12,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BUTTON_CHANGE_VSTPRESETSDIR,264,90,12,11,NOT WS_TABSTOP - CONTROL "Create &backup copy (*.bak) when saving a module files",IDC_CHECK1, + CONTROL "Create &backup copy (*.bak) when saving module files",IDC_CHECK1, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,135,258,12 CONTROL "&Enable Auto Save",IDC_AUTOSAVE_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,154,237,10 LTEXT "&Save every:",IDC_STATIC,18,168,40,12,SS_CENTERIMAGE - EDITTEXT IDC_AUTOSAVE_INTERVAL,62,168,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "minutes",IDC_STATIC,90,168,165,12,SS_CENTERIMAGE + EDITTEXT IDC_AUTOSAVE_INTERVAL,62,168,31,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,72,168,10,14 + LTEXT "minutes",IDC_STATIC,98,168,157,12,SS_CENTERIMAGE LTEXT "&Keep up to:",IDC_STATIC,18,185,36,12,SS_CENTERIMAGE - EDITTEXT IDC_AUTOSAVE_HISTORY,62,185,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "backups of each file name",IDC_STATIC,90,185,165,12,SS_CENTERIMAGE + EDITTEXT IDC_AUTOSAVE_HISTORY,62,185,31,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,72,186,10,14 + LTEXT "backups of each file name",IDC_STATIC,98,185,157,12,SS_CENTERIMAGE CONTROL "Store auto save files in song's &original directory.",IDC_AUTOSAVE_USEORIGDIR, "Button",BS_AUTORADIOBUTTON,18,202,218,10 CONTROL "S&tore in:",IDC_AUTOSAVE_USECUSTOMDIR,"Button",BS_AUTORADIOBUTTON,18,218,43,10 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-26 12:51:17
|
Revision: 5355 http://sourceforge.net/p/modplug/code/5355 Author: saga-games Date: 2015-06-26 12:51:11 +0000 (Fri, 26 Jun 2015) Log Message: ----------- [Mod] Remember group size between tempo swing dialog calls. Modified Paths: -------------- trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-26 12:39:49 UTC (rev 5354) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-26 12:51:11 UTC (rev 5355) @@ -1206,15 +1206,17 @@ //}}AFX_MSG_MAP END_MESSAGE_MAP() +int CTempoSwingDlg::m_groupSize = 1; CTempoSwingDlg::CTempoSwingDlg(CWnd *parent, const TempoSwing ¤tTempoSwing, CSoundFile &sndFile, PATTERNINDEX pattern) : CDialog(IDD_TEMPO_SWING, parent) - , m_groupSize(1) , m_tempoSwing(currentTempoSwing) , m_origTempoSwing(pattern == PATTERNINDEX_INVALID ? sndFile.m_tempoSwing : sndFile.Patterns[pattern].GetTempoSwing()) , m_sndFile(sndFile) , m_pattern(pattern) -{ } +{ + m_groupSize = std::min(m_groupSize, static_cast<int>(m_tempoSwing.size())); +} BOOL CTempoSwingDlg::OnInitDialog() //--------------------------------- @@ -1374,8 +1376,8 @@ void CTempoSwingDlg::OnGroupChanged() //----------------------------------- { - m_groupSize = GetDlgItemInt(IDC_EDIT1); - Limit(m_groupSize, 1, static_cast<int>(m_tempoSwing.size())); + int val = GetDlgItemInt(IDC_EDIT1); + if(val > 0) m_groupSize = std::min(val, static_cast<int>(m_tempoSwing.size())); } @@ -1386,12 +1388,11 @@ { // Edit groups size_t editedGroup = 0; - int editedValue = SliderUnity; + int editedValue = reinterpret_cast<CSliderCtrl *>(pScrollBar)->GetPos(); for(size_t i = 0; i < m_controls.size(); i++) { if(m_controls[i]->valueSlider.m_hWnd == pScrollBar->m_hWnd) { - editedValue = m_controls[i]->valueSlider.GetPos(); editedGroup = (i / m_groupSize) % 2; break; } Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2015-06-26 12:39:49 UTC (rev 5354) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2015-06-26 12:51:11 UTC (rev 5355) @@ -278,7 +278,7 @@ CSliderCtrl valueSlider; }; std::vector<RowCtls *> m_controls; - int m_groupSize; + static int m_groupSize; public: TempoSwing m_tempoSwing; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-26 18:36:46
|
Revision: 5358 http://sourceforge.net/p/modplug/code/5358 Author: saga-games Date: 2015-06-26 18:36:40 +0000 (Fri, 26 Jun 2015) Log Message: ----------- [Fix] Pattern tab: r5325 only partially solved the prev/next pattern problem (or rather introduced new cases where it would fail) Revision Links: -------------- http://sourceforge.net/p/modplug/code/5325 Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-26 18:36:40 UTC (rev 5358) @@ -578,12 +578,6 @@ } ypaint += m_szHeader.cy; - ORDERINDEX curOrder; - if(IsLiveRecord() && m_nPlayOrd < sndFile.Order.size()) - curOrder = m_nPlayOrd; - else - curOrder = static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); - if (m_nMidRow) { if (yofs >= m_nMidRow) @@ -597,12 +591,12 @@ // Display previous pattern if (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SHOWPREVIOUS) { - if(curOrder > 0) + if(m_nOrder > 0) { - ORDERINDEX prevOrder = sndFile.Order.GetPreviousOrderIgnoringSkips(curOrder); + ORDERINDEX prevOrder = sndFile.Order.GetPreviousOrderIgnoringSkips(m_nOrder); //Skip +++ items - if(curOrder < sndFile.Order.size() && sndFile.Order[curOrder] == m_nPattern) + if(m_nOrder < sndFile.Order.size() && sndFile.Order[m_nOrder] == m_nPattern) { nPrevPat = sndFile.Order[prevOrder]; } @@ -645,12 +639,12 @@ if ((nVisRows > 0) && (m_nMidRow)) { PATTERNINDEX nNextPat = PATTERNINDEX_INVALID; - ORDERINDEX nNextOrder = sndFile.Order.GetNextOrderIgnoringSkips(curOrder); - if(nNextOrder == curOrder) nNextOrder = ORDERINDEX_INVALID; + ORDERINDEX nNextOrder = sndFile.Order.GetNextOrderIgnoringSkips(m_nOrder); + if(nNextOrder == m_nOrder) nNextOrder = ORDERINDEX_INVALID; //Ignore skip items(+++) from sequence. const ORDERINDEX ordCount = sndFile.Order.GetLength(); - if(nNextOrder < ordCount && sndFile.Order[curOrder] == m_nPattern) + if(nNextOrder < ordCount && sndFile.Order[m_nOrder] == m_nPattern) { nNextPat = sndFile.Order[nNextOrder]; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 18:36:40 UTC (rev 5358) @@ -157,6 +157,7 @@ m_nTransposeAmount = 1; m_nPattern = 0; + m_nOrder = 0; m_nDetailLevel = PatternCursor::lastColumn; m_pEditWnd = NULL; m_pGotoWnd = NULL; @@ -177,13 +178,10 @@ CModScrollView::OnInitialUpdate(); MemsetZero(ChnVUMeters); MemsetZero(OldVUMeters); -// -> CODE#0012 -// -> DESC="midi keyboard split" memset(previousNote, NOTE_NONE, sizeof(previousNote)); memset(splitActiveNoteChannel, 0xFF, sizeof(splitActiveNoteChannel)); memset(activeNoteChannel, 0xFF, sizeof(activeNoteChannel)); m_nPlayPat = PATTERNINDEX_INVALID; - m_nPlayOrd = ORDERINDEX_INVALID; m_nPlayRow = 0; m_nPlayTick = 0; m_nMidRow = 0; @@ -288,13 +286,13 @@ if (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_CONTSCROLL) { ORDERINDEX curOrder = GetCurrentOrder(); - if ((curOrder > 0) && (curOrder < pSndFile->Order.size()) && (m_nPattern == pSndFile->Order[curOrder])) + const ORDERINDEX prevOrd = pSndFile->Order.GetPreviousOrderIgnoringSkips(curOrder); + if (prevOrd < curOrder && m_nPattern == pSndFile->Order[curOrder]) { - const ORDERINDEX prevOrd = pSndFile->Order.GetPreviousOrderIgnoringSkips(curOrder); const PATTERNINDEX nPrevPat = pSndFile->Order[prevOrd]; if ((nPrevPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nPrevPat].GetNumRows())) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, prevOrd); + SetCurrentOrder(prevOrd); if (SetCurrentPattern(nPrevPat)) return SetCurrentRow(pSndFile->Patterns[nPrevPat].GetNumRows() + (int)row); } @@ -315,14 +313,14 @@ } else if(TrackerSettings::Instance().m_dwPatternSetup & PATTERN_CONTSCROLL) { ORDERINDEX curOrder = GetCurrentOrder(); - if(curOrder + 1 < pSndFile->Order.size() && m_nPattern == pSndFile->Order[curOrder]) + ORDERINDEX nextOrder = pSndFile->Order.GetNextOrderIgnoringSkips(curOrder); + if(nextOrder > curOrder && m_nPattern == pSndFile->Order[curOrder]) { - const ORDERINDEX nextOrder = pSndFile->Order.GetNextOrderIgnoringSkips(curOrder); - const PATTERNINDEX nextPat = pSndFile->Order[nextOrder]; + PATTERNINDEX nextPat = pSndFile->Order[nextOrder]; if ((nextPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nextPat].GetNumRows())) { const ROWINDEX newRow = row - pSndFile->Patterns[m_nPattern].GetNumRows(); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nextOrder); + SetCurrentOrder(nextOrder); if (SetCurrentPattern(nextPat)) return SetCurrentRow(newRow); } @@ -614,30 +612,20 @@ } -bool CViewPattern::SetPlayCursor(ORDERINDEX ord, PATTERNINDEX pat, ROWINDEX row) -//------------------------------------------------------------------------------ +bool CViewPattern::SetPlayCursor(PATTERNINDEX pat, ROWINDEX row) +//-------------------------------------------------------------- { - ORDERINDEX oldOrd = m_nPlayOrd; PATTERNINDEX oldPat = m_nPlayPat; ROWINDEX oldRow = m_nPlayRow; - if (ord == m_nPlayOrd && pat == m_nPlayPat && row == m_nPlayRow) - return true; - - m_nPlayOrd = ord; m_nPlayPat = pat; m_nPlayRow = row; - if (oldOrd != m_nPlayOrd) - { - InvalidatePattern(true); - } else - { - if (oldPat == m_nPattern) - InvalidateRow(oldRow); - if (m_nPlayPat == m_nPattern) - InvalidateRow(m_nPlayRow); - } + if (oldPat == m_nPattern) + InvalidateRow(oldRow); + if (m_nPlayPat == m_nPattern) + InvalidateRow(m_nPlayRow); + return true; } @@ -2021,7 +2009,7 @@ SetCurrentPattern(m_pGotoWnd->m_nPattern); if (m_pGotoWnd->m_nOrder != curOrder) - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, m_pGotoWnd->m_nOrder); + SetCurrentOrder( m_pGotoWnd->m_nOrder); if (m_pGotoWnd->m_nChannel != curChannel) SetCurrentColumn(m_pGotoWnd->m_nChannel - 1); @@ -2211,7 +2199,7 @@ ORDERINDEX matchingOrder = pSndFile->Order.FindOrder(pat, GetCurrentOrder()); if(matchingOrder != ORDERINDEX_INVALID) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, matchingOrder); + SetCurrentOrder(matchingOrder); } // go to place of finding SetCurrentPattern(pat); @@ -3481,7 +3469,7 @@ ORDERINDEX matchingOrder = GetSoundFile()->Order.FindOrder(pat, GetCurrentOrder()); if(matchingOrder != ORDERINDEX_INVALID) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, matchingOrder); + SetCurrentOrder(matchingOrder); } SetCurrentPattern(pat); } else @@ -3768,7 +3756,7 @@ if (nPat != m_nPattern || updateOrderList) { if(nPat != m_nPattern) SetCurrentPattern(nPat, nRow); - if (nOrd < pSndFile->Order.size()) SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nOrd); + if (nOrd < pSndFile->Order.size()) SetCurrentOrder(nOrd); updateOrderList = false; } if (nRow != GetCurrentRow()) @@ -3784,7 +3772,7 @@ updateOrderList = false; } } - SetPlayCursor(nOrd, nPat, nRow); + SetPlayCursor(nPat, nRow); m_nPlayTick = pnotify->tick; } } @@ -3799,7 +3787,7 @@ MemsetZero(ChnVUMeters); // Also zero all non-visible VU meters if((m_Status & (psFollowSong | psDragActive)) == psFollowSong) { - SetPlayCursor(ORDERINDEX_INVALID, PATTERNINDEX_INVALID, ROWINDEX_INVALID); + SetPlayCursor(PATTERNINDEX_INVALID, ROWINDEX_INVALID); } } @@ -4136,7 +4124,7 @@ if(plug) { plug->MidiSend(dwMidiData); - // Sending midi may modify the plug. For now, if MIDI data + // Sending MIDI may modify the plugin. For now, if MIDI data // is not active sensing, set modified. if(dwMidiData != MIDIEvents::System(MIDIEvents::sysActiveSense)) pMainFrm->ThreadSafeSetModified(pModDoc); @@ -4165,6 +4153,7 @@ return m_nPattern; case VIEWMSG_SETCURRENTPATTERN: + m_nOrder = static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); SetCurrentPattern(lParam); break; @@ -4494,7 +4483,7 @@ SetCurrentPattern((n < pSndFile->Patterns.Size()) ? n : 0); ORDERINDEX currentOrder = GetCurrentOrder(); ORDERINDEX newOrder = pSndFile->Order.FindOrder(m_nPattern, currentOrder, true); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, newOrder); + SetCurrentOrder(newOrder); return wParam; } case kcPrevPattern: { PATTERNINDEX n = (m_nPattern) ? m_nPattern - 1 : pSndFile->Patterns.Size() - 1; @@ -4502,7 +4491,7 @@ SetCurrentPattern(n); ORDERINDEX currentOrder = GetCurrentOrder(); ORDERINDEX newOrder = pSndFile->Order.FindOrder(m_nPattern, currentOrder, false); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, newOrder); + SetCurrentOrder(newOrder); return wParam; } case kcSelectWithCopySelect: @@ -7100,7 +7089,7 @@ // Multipaste: Switch to pasted pattern. SetCurrentPattern(pos.pattern); curOrder = GetSoundFile()->Order.FindOrder(pos.pattern, curOrder); - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, curOrder); + SetCurrentOrder(curOrder); } if(result) Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-06-26 18:36:40 UTC (rev 5358) @@ -165,7 +165,7 @@ ROWINDEX m_nPlayRow; uint32 m_nPlayTick; PATTERNINDEX m_nPattern, m_nPlayPat; - ORDERINDEX m_nPlayOrd; + ORDERINDEX m_nOrder; int32 m_nTransposeAmount; int m_nXScroll, m_nYScroll; @@ -234,7 +234,8 @@ PATTERNINDEX GetCurrentPattern() const { return m_nPattern; } ROWINDEX GetCurrentRow() const { return m_Cursor.GetRow(); } CHANNELINDEX GetCurrentChannel() const { return m_Cursor.GetChannel(); } - ORDERINDEX GetCurrentOrder() const { return static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); } + ORDERINDEX GetCurrentOrder() const { return m_nOrder; } + void SetCurrentOrder(ORDERINDEX ord) { m_nOrder = ord; SendCtrlMessage(CTRLMSG_SETCURRENTORDER, ord); } // Get ModCommand at the pattern cursor position. ModCommand &GetCursorCommand() { return GetModCommand(m_Cursor); }; void SanitizeCursor(); @@ -270,7 +271,7 @@ // This should be used instead of consecutive calls to SetCurrentRow() then SetCurrentColumn() bool SetCursorPosition(const PatternCursor &cursor, bool wrap = false); bool DragToSel(const PatternCursor &cursor, bool scrollHorizontal, bool scrollVertical, bool noMove = false); - bool SetPlayCursor(ORDERINDEX ord, PATTERNINDEX pat, ROWINDEX row); + bool SetPlayCursor(PATTERNINDEX pat, ROWINDEX row); bool UpdateScrollbarPositions(bool updateHorizontalScrollbar = true); BYTE EnterNote(UINT nNote, UINT nIns=0, BOOL bCheck=FALSE, int vol=-1, BOOL bMultiCh=FALSE); bool ShowEditWindow(); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-26 16:14:13 UTC (rev 5357) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-26 18:36:40 UTC (rev 5358) @@ -826,7 +826,7 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,108,240,12 CONTROL "Record MIDI Note Velocity, amplify by",IDC_CHECK1, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,150,144,10 - EDITTEXT IDC_EDIT3,162,150,42,12,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT3,162,149,42,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,186,145,11,14 LTEXT "%",IDC_STATIC,207,151,48,8 CONTROL "Combine MIDI Volume (CC#07) to Note Velocity",IDC_MIDIVOL_TO_NOTEVOL, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-26 21:03:18
|
Revision: 5360 http://sourceforge.net/p/modplug/code/5360 Author: saga-games Date: 2015-06-26 21:03:11 +0000 (Fri, 26 Jun 2015) Log Message: ----------- [Fix] Pattern tab: Selecting invalid patterns (e.g. stop/ignore) from the tree view order list no longer confuses the pattern editor's prev/next pattern mechanism. [Fix] Pattern tab: Show correct note name in status bar for custom tuning notes. [Ref] Kill all type conversion warnings in View_pat.cpp and re-enable warning 4244 for it. Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/PatternGotoDialog.cpp trunk/OpenMPT/mptrack/PatternGotoDialog.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-26 18:46:00 UTC (rev 5359) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-26 21:03:11 UTC (rev 5360) @@ -1542,12 +1542,9 @@ case PatternCursor::noteColumn: // display note if(m->IsSpecialNote()) - { s = szSpecialNoteShortDesc[m->note - NOTE_MIN_SPECIAL]; - } else if(m->IsNote()) - { - s.Format(_T("%s%u"), szNoteNames[(m->note - NOTE_MIN) % 12], (m->note - NOTE_MIN) / 12); - } + else if(m->IsNote()) + s = pSndFile->GetNoteName(m->note, m->instr).c_str(); break; case PatternCursor::instrColumn: Modified: trunk/OpenMPT/mptrack/PatternGotoDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternGotoDialog.cpp 2015-06-26 18:46:00 UTC (rev 5359) +++ trunk/OpenMPT/mptrack/PatternGotoDialog.cpp 2015-06-26 21:03:11 UTC (rev 5360) @@ -39,10 +39,11 @@ void CPatternGotoDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); - DDX_Text(pDX, IDC_GOTO_ROW, m_nRow); - DDX_Text(pDX, IDC_GOTO_CHAN, m_nChannel); - DDX_Text(pDX, IDC_GOTO_PAT, m_nPattern); - DDX_Text(pDX, IDC_GOTO_ORD, m_nOrder); + UINT temp; + DDX_Text(pDX, IDC_GOTO_ROW, temp); m_nRow = static_cast<ROWINDEX>(temp); + DDX_Text(pDX, IDC_GOTO_CHAN, temp); m_nChannel = static_cast<CHANNELINDEX>(temp); + DDX_Text(pDX, IDC_GOTO_PAT, temp); m_nPattern = static_cast<PATTERNINDEX>(temp); + DDX_Text(pDX, IDC_GOTO_ORD, temp); m_nOrder = static_cast<ORDERINDEX>(temp); } Modified: trunk/OpenMPT/mptrack/PatternGotoDialog.h =================================================================== --- trunk/OpenMPT/mptrack/PatternGotoDialog.h 2015-06-26 18:46:00 UTC (rev 5359) +++ trunk/OpenMPT/mptrack/PatternGotoDialog.h 2015-06-26 21:03:11 UTC (rev 5360) @@ -28,7 +28,10 @@ DECLARE_MESSAGE_MAP() public: - UINT m_nRow, m_nChannel, m_nPattern, m_nOrder, m_nActiveOrder; + ROWINDEX m_nRow; + CHANNELINDEX m_nChannel; + PATTERNINDEX m_nPattern; + ORDERINDEX m_nOrder, m_nActiveOrder; void UpdatePos(ROWINDEX row, CHANNELINDEX chan, PATTERNINDEX pat, ORDERINDEX ord, CSoundFile &sndFile); protected: Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 18:46:00 UTC (rev 5359) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 21:03:11 UTC (rev 5360) @@ -21,7 +21,7 @@ #include "Ctrl_pat.h" #include "PatternFont.h" -#include "EffectVis.h" //rewbs.fxvis +#include "EffectVis.h" #include "PatternGotoDialog.h" #include "MIDIMacros.h" #include "../common/misc_util.h" @@ -33,8 +33,6 @@ OPENMPT_NAMESPACE_BEGIN -#pragma warning(disable:4244) //"conversion from 'type1' to 'type2', possible loss of data" - FindReplace CViewPattern::m_findReplace = { ModCommand::Empty(), ModCommand::Empty(), @@ -483,7 +481,7 @@ return true; } -DWORD CViewPattern::GetDragItem(CPoint point, LPRECT lpRect) +DWORD CViewPattern::GetDragItem(CPoint point, RECT &outRect) //---------------------------------------------------------- { const CSoundFile *pSndFile = GetSoundFile(); @@ -511,7 +509,7 @@ { if (plugRect.PtInRect(point)) { - if (lpRect) *lpRect = plugRect; + outRect = plugRect; return (DRAGITEM_PLUGNAME | n); } plugRect.OffsetRect(GetColumnWidth(), 0); @@ -522,7 +520,7 @@ { if (rect.PtInRect(point)) { - if (lpRect) *lpRect = rect; + outRect = rect; return (DRAGITEM_CHNHEADER | n); } rect.OffsetRect(GetColumnWidth(), 0); @@ -533,7 +531,7 @@ rect.SetRect(0, 0, m_szHeader.cx, m_szHeader.cy); if (rect.PtInRect(point)) { - if (lpRect) *lpRect = rect; + outRect = rect; return DRAGITEM_PATTERNHEADER; } } @@ -1131,7 +1129,7 @@ } SetFocus(); - m_nDropItem = m_nDragItem = GetDragItem(point, &m_rcDragItem); + m_nDropItem = m_nDragItem = GetDragItem(point, m_rcDragItem); m_Status.set(psDragging); m_bInItemRect = true; m_Status.reset(psShiftDragging); @@ -1273,8 +1271,8 @@ } if ((!bItemSelected) || (!m_nDragItem)) return; InvalidateRect(&m_rcDragItem, FALSE); - const CHANNELINDEX nItemNo = (m_nDragItem & DRAGITEM_VALUEMASK); - const CHANNELINDEX nTargetNo = (m_nDropItem != 0) ? (m_nDropItem & DRAGITEM_VALUEMASK) : CHANNELINDEX_INVALID; + const CHANNELINDEX nItemNo = static_cast<CHANNELINDEX>(m_nDragItem & DRAGITEM_VALUEMASK); + const CHANNELINDEX nTargetNo = (m_nDropItem != 0) ? static_cast<CHANNELINDEX>(m_nDropItem & DRAGITEM_VALUEMASK) : CHANNELINDEX_INVALID; switch(m_nDragItem & DRAGITEM_MASK) { @@ -1505,7 +1503,7 @@ CModDoc *pModDoc = GetDocument(); if (!pModDoc) return; - m_nDragItem = GetDragItem(point, &m_rcDragItem); + m_nDragItem = GetDragItem(point, m_rcDragItem); CHANNELINDEX nItemNo = static_cast<CHANNELINDEX>(m_nDragItem & DRAGITEM_VALUEMASK); switch(m_nDragItem & DRAGITEM_MASK) { @@ -1553,7 +1551,7 @@ const DWORD oldDropItem = m_nDropItem; m_Status.set(psShiftDragging, (nFlags & MK_SHIFT) != 0); - m_nDropItem = GetDragItem(point, &m_rcDropItem); + m_nDropItem = GetDragItem(point, m_rcDropItem); const bool b = (m_nDropItem == m_nDragItem); const bool dragChannel = (m_nDragItem & DRAGITEM_MASK) == DRAGITEM_CHNHEADER; @@ -2830,8 +2828,8 @@ if ((pcmd->note == NOTE_NONE) || (pcmd->instr == vcmd)) { int note = vsrc + ((vdest - vsrc) * i + verr) / distance; - pcmd->note = (ModCommand::NOTE)note; - pcmd->instr = vcmd; + pcmd->note = static_cast<ModCommand::NOTE>(note); + pcmd->instr = static_cast<ModCommand::VOLCMD>(vcmd); } break; @@ -2839,7 +2837,7 @@ if (pcmd->instr == 0) { int instr = vsrc + ((vdest - vsrc) * i + verr) / distance; - pcmd->instr = (ModCommand::INSTR)instr; + pcmd->instr = static_cast<ModCommand::INSTR>(instr); } break; @@ -2847,8 +2845,8 @@ if ((pcmd->volcmd == VOLCMD_NONE) || (pcmd->volcmd == vcmd)) { int vol = vsrc + ((vdest - vsrc) * i + verr) / distance; - pcmd->vol = (ModCommand::VOL)vol; - pcmd->volcmd = vcmd; + pcmd->vol = static_cast<ModCommand::VOL>(vol); + pcmd->volcmd = static_cast<ModCommand::VOLCMD>(vcmd); } break; @@ -2860,7 +2858,7 @@ if (pcmd->IsPcNote() == false || pcmd->instr == 0) { pcmd->note = PCnote; - pcmd->instr = PCinst; + pcmd->instr = static_cast<ModCommand::INSTR>(PCinst); } pcmd->SetValueVolCol(PCparam); pcmd->SetValueEffectCol(val); @@ -2870,8 +2868,8 @@ if ((pcmd->command == CMD_NONE) || (pcmd->command == vcmd)) { int val = vsrc + ((vdest - vsrc) * i + verr) / distance; - pcmd->param = (ModCommand::PARAM)val; - pcmd->command = vcmd; + pcmd->param = static_cast<ModCommand::PARAM>(val); + pcmd->command = static_cast<ModCommand::COMMAND>(vcmd); } } break; @@ -3054,18 +3052,18 @@ m[chn].note = (ModCommand::NOTE)note; } else if(m[chn].IsSpecialNote()) { - int note = m[chn].note; + ModCommand::NOTE note = m[chn].note; do { - note += offset; + note = static_cast<ModCommand::NOTE>(note + offset); if(!ModCommand::IsSpecialNote(note)) { break; } - } while(!pSndFile->GetModSpecifications().HasNote((ModCommand::NOTE)note)); + } while(!pSndFile->GetModSpecifications().HasNote(note)); if(ModCommand::IsSpecialNote(note)) { - if(m[chn].IsPcNote() != ModCommand::IsPcNote((ModCommand::NOTE)note)) + if(m[chn].IsPcNote() != ModCommand::IsPcNote(note)) { m[chn].Clear(); } @@ -3093,7 +3091,7 @@ { int val = m[chn].GetValueVolCol() + offset * (coarse ? 10 : 1); Limit(val, 0, int(ModCommand::maxColumnValue)); - m[chn].SetValueVolCol(val); + m[chn].SetValueVolCol(static_cast<uint16>(val)); } else { int vol = m[chn].vol + offset * (coarse ? 10 : 1); @@ -3115,7 +3113,7 @@ { int val = m[chn].GetValueEffectCol() + offset * (coarse ? 10 : 1); Limit(val, 0, int(ModCommand::maxColumnValue)); - m[chn].SetValueEffectCol(val); + m[chn].SetValueEffectCol(static_cast<uint16>(val)); } else { int param = m[chn].param + offset * (coarse ? 16 : 1); @@ -3238,7 +3236,7 @@ if(xsrc >= 0 && xsrc < (int)sndFile.GetNumChannels() && ysrc >= 0 && ysrc < (int)sndFile.Patterns[m_nPattern].GetNumRows()) { // Copy the data - const ModCommand &src = *sndFile.Patterns[m_nPattern].GetpModCommand(ysrc, xsrc); + const ModCommand &src = *sndFile.Patterns[m_nPattern].GetpModCommand(static_cast<ROWINDEX>(ysrc), static_cast<CHANNELINDEX>(xsrc)); switch(c) { case PatternCursor::noteColumn: @@ -3278,7 +3276,7 @@ void CViewPattern::OnSetSelInstrument() //------------------------------------- { - SetSelectionInstrument(GetCurrentInstrument()); + SetSelectionInstrument(static_cast<INSTRUMENTINDEX>(GetCurrentInstrument())); } @@ -3591,7 +3589,7 @@ } if(m->IsNote() && m->instr != 0) { - UINT nSmp = m->instr; + SAMPLEINDEX nSmp = m->instr; if(pSndFile->GetNumInstruments()) { if(nSmp <= pSndFile->GetNumInstruments() && pSndFile->Instruments[nSmp] != nullptr) @@ -3635,7 +3633,7 @@ if(m->volcmd == VOLCMD_NONE && m->command != CMD_VOLUME && m->IsNote() && m->instr) { - UINT nSmp = m->instr; + SAMPLEINDEX nSmp = m->instr; bool overrideSampleVol = false; if(pSndFile->GetNumInstruments()) { @@ -3658,11 +3656,11 @@ if(useVolCol) { m->volcmd = VOLCMD_VOLUME; - m->vol = (overrideSampleVol) ? 64 : pSndFile->GetSample(nSmp).nVolume / 4; + m->vol = static_cast<ModCommand::VOL>((overrideSampleVol) ? 64 : pSndFile->GetSample(nSmp).nVolume / 4u); } else { m->command = CMD_VOLUME; - m->param = (overrideSampleVol) ? 64 : pSndFile->GetSample(nSmp).nVolume / 4; + m->param = static_cast<ModCommand::PARAM>((overrideSampleVol) ? 64 : pSndFile->GetSample(nSmp).nVolume / 4u); } } } @@ -3837,7 +3835,7 @@ { pModDoc->GetPatternUndo().PrepareUndo(nPattern, nChn, nRow, 1, 1, "Automation Entry"); - pRow->Set(NOTE_PCS, plugSlot + 1, paramIndex, static_cast<uint16>(pPlug->GetParameter(paramIndex) * ModCommand::maxColumnValue)); + pRow->Set(NOTE_PCS, static_cast<ModCommand::INSTR>(plugSlot + 1), static_cast<uint16>(paramIndex), static_cast<uint16>(pPlug->GetParameter(paramIndex) * ModCommand::maxColumnValue)); InvalidateRow(nRow); } } else if(pSndFile->GetModSpecifications().HasCommand(CMD_SMOOTHMIDI)) @@ -3860,12 +3858,13 @@ int foundMacro = pSndFile->m_MidiCfg.FindMacroForParam(paramIndex); if (foundMacro >= 0) { - pSndFile->m_PlayState.Chn[nChn].nActiveMacro = foundMacro; + pSndFile->m_PlayState.Chn[nChn].nActiveMacro = static_cast<uint8>(foundMacro); if (pRow->command == CMD_NONE || pRow->command == CMD_SMOOTHMIDI || pRow->command == CMD_MIDI) //we overwrite existing Zxx and \xx only. { pModDoc->GetPatternUndo().PrepareUndo(nPattern, nChn, nRow, 1, 1, "Automation Entry"); - pRow->command = (pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) ? CMD_S3MCMDEX : CMD_MODCMDEX;; + pRow->command = CMD_S3MCMDEX; + if(!pSndFile->GetModSpecifications().HasCommand(CMD_S3MCMDEX)) pRow->command = CMD_MODCMDEX; pRow->param = 0xF0 + (foundMacro & 0x0F); InvalidateRow(nRow); } @@ -3879,7 +3878,7 @@ pModDoc->GetPatternUndo().PrepareUndo(nPattern, nChn, nRow, 1, 1, "Automation Entry"); pRow->command = CMD_SMOOTHMIDI; - pRow->param = pPlug->GetZxxParameter(paramIndex); + pRow->param = static_cast<ModCommand::PARAM>(pPlug->GetZxxParameter(paramIndex)); InvalidateRow(nRow); } @@ -4119,7 +4118,7 @@ if(TrackerSettings::Instance().m_dwMidiSetup & MIDISETUP_MIDITOPLUG && pMainFrm->GetModPlaying() == pModDoc) { - const UINT instr = GetCurrentInstrument(); + const INSTRUMENTINDEX instr = static_cast<INSTRUMENTINDEX>(GetCurrentInstrument()); IMixPlugin* plug = sndFile.GetInstrumentPlugin(instr); if(plug) { @@ -4146,15 +4145,18 @@ case VIEWMSG_SETCTRLWND: m_hWndCtrl = (HWND)lParam; - SetCurrentPattern(SendCtrlMessage(CTRLMSG_GETCURRENTPATTERN)); + SetCurrentPattern(static_cast<PATTERNINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTPATTERN))); break; case VIEWMSG_GETCURRENTPATTERN: return m_nPattern; case VIEWMSG_SETCURRENTPATTERN: - m_nOrder = static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); - SetCurrentPattern(lParam); + if(GetSoundFile()->Patterns.IsValidPat(static_cast<PATTERNINDEX>(lParam))) + { + m_nOrder = static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); + SetCurrentPattern(static_cast<PATTERNINDEX>(lParam)); + } break; case VIEWMSG_GETCURRENTPOS: @@ -4311,7 +4313,7 @@ } break; case VIEWMSG_DOSCROLL: - CModScrollView::OnMouseWheel(0, lParam, CPoint(0, 0)); + CModScrollView::OnMouseWheel(0, static_cast<short>(lParam), CPoint(0, 0)); break; @@ -4615,23 +4617,23 @@ //Ranges: if(wParam >= kcVPStartNotes && wParam <= kcVPEndNotes) { - TempEnterNote(wParam - kcVPStartNotes + 1 + pMainFrm->GetBaseOctave() * 12); + TempEnterNote(static_cast<ModCommand::NOTE>(wParam - kcVPStartNotes + 1 + pMainFrm->GetBaseOctave() * 12)); return wParam; } if(wParam >= kcVPStartChords && wParam <= kcVPEndChords) { - TempEnterChord(wParam - kcVPStartChords + 1 + pMainFrm->GetBaseOctave() * 12); + TempEnterChord(static_cast<ModCommand::NOTE>(wParam - kcVPStartChords + 1 + pMainFrm->GetBaseOctave() * 12)); return wParam; } if(wParam >= kcVPStartNoteStops && wParam <= kcVPEndNoteStops) { - TempStopNote(wParam - kcVPStartNoteStops + 1 + pMainFrm->GetBaseOctave() * 12); + TempStopNote(static_cast<ModCommand::NOTE>(wParam - kcVPStartNoteStops + 1 + pMainFrm->GetBaseOctave() * 12)); return wParam; } if(wParam >= kcVPStartChordStops && wParam <= kcVPEndChordStops) { - TempStopChord(wParam - kcVPStartChordStops + 1 + pMainFrm->GetBaseOctave() * 12); + TempStopChord(static_cast<ModCommand::NOTE>(wParam - kcVPStartChordStops + 1 + pMainFrm->GetBaseOctave() * 12)); return wParam; } @@ -4671,7 +4673,7 @@ if(wParam >= kcSetFXStart && wParam <= kcSetFXEnd) { if(IsEditingEnabled_bmsg()) - TempEnterFX(wParam - kcSetFXStart + 1); + TempEnterFX(static_cast<ModCommand::COMMAND>(wParam - kcSetFXStart + 1)); return wParam; } @@ -4760,7 +4762,7 @@ if(target.IsPcNote()) { - ENTER_PCNOTE_VALUE(v, ValueVolCol); + ENTER_PCNOTE_VALUE(static_cast<uint16>(v), ValueVolCol); } else { ModCommand::VOLCMD volcmd = target.volcmd; @@ -4798,7 +4800,7 @@ if(pSndFile->GetModSpecifications().HasVolCommand(volcmd)) { target.volcmd = volcmd; - target.vol = vol; + target.vol = static_cast<ModCommand::VOL>(vol); } } @@ -4825,8 +4827,8 @@ // Enter an effect letter in the pattenr -void CViewPattern::TempEnterFX(int c, int v) -//------------------------------------------ +void CViewPattern::TempEnterFX(ModCommand::COMMAND c, int v) +//---------------------------------------------------------- { CSoundFile *pSndFile = GetSoundFile(); @@ -4842,11 +4844,10 @@ if(target.IsPcNote()) { - ENTER_PCNOTE_VALUE(c, ValueEffectCol); + ENTER_PCNOTE_VALUE(static_cast<uint16>(c), ValueEffectCol); } else if(pSndFile->GetModSpecifications().HasCommand(c)) { - - if (c) + if (c != CMD_NONE) { if ((c == m_cmdOld.command) && (!target.param) && (target.command == CMD_NONE)) { @@ -4860,14 +4861,14 @@ target.command = c; if(v >= 0) { - target.param = v; + target.param = static_cast<ModCommand::PARAM>(v); } // Check for MOD/XM Speed/Tempo command if((pSndFile->GetType() & (MOD_TYPE_MOD | MOD_TYPE_XM)) && (target.command == CMD_SPEED || target.command == CMD_TEMPO)) { - target.command = (target.param <= pSndFile->GetModSpecifications().speedMax) ? CMD_SPEED : CMD_TEMPO; + target.command = static_cast<ModCommand::COMMAND>((target.param <= pSndFile->GetModSpecifications().speedMax) ? CMD_SPEED : CMD_TEMPO); } } @@ -4900,11 +4901,11 @@ if(target.IsPcNote()) { - ENTER_PCNOTE_VALUE(v, ValueEffectCol); + ENTER_PCNOTE_VALUE(static_cast<uint16>(v), ValueEffectCol); } else { - target.param = (target.param << 4) | v; + target.param = static_cast<ModCommand::PARAM>((target.param << 4) | v); if (target.command == m_cmdOld.command) { m_cmdOld.param = target.param; @@ -4914,7 +4915,7 @@ if((pSndFile->GetType() & (MOD_TYPE_MOD|MOD_TYPE_XM)) && (target.command == CMD_SPEED || target.command == CMD_TEMPO)) { - target.command = (target.param <= pSndFile->GetModSpecifications().speedMax) ? CMD_SPEED : CMD_TEMPO; + target.command = static_cast<ModCommand::COMMAND>((target.param <= pSndFile->GetModSpecifications().speedMax) ? CMD_SPEED : CMD_TEMPO); } } @@ -4930,8 +4931,8 @@ // Stop a note that has been entered -void CViewPattern::TempStopNote(int note, bool fromMidi, const bool bChordMode) -//----------------------------------------------------------------------------- +void CViewPattern::TempStopNote(ModCommand::NOTE note, bool fromMidi, const bool bChordMode) +//------------------------------------------------------------------------------------------ { CModDoc *pModDoc = GetDocument(); CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); @@ -4940,10 +4941,11 @@ return; } CSoundFile &sndFile = pModDoc->GetrSoundFile(); + const CModSpecifications &specs = sndFile.GetModSpecifications(); if(!ModCommand::IsSpecialNote(note)) { - Limit(note, sndFile.GetModSpecifications().noteMin, sndFile.GetModSpecifications().noteMax); + Limit(note, specs.noteMin, specs.noteMax); } const bool liveRecord = IsLiveRecord(); @@ -4963,9 +4965,12 @@ if(isSplit) { ins = pModDoc->GetSplitKeyboardSettings().splitInstrument; - if(pModDoc->GetSplitKeyboardSettings().octaveLink) note += 12 *pModDoc->GetSplitKeyboardSettings().octaveModifier; - if(note > NOTE_MAX && note < NOTE_MIN_SPECIAL) note = NOTE_MAX; - if(note < 0) note = NOTE_MIN; + if(pModDoc->GetSplitKeyboardSettings().octaveLink) + { + int trNote = note + 12 *pModDoc->GetSplitKeyboardSettings().octaveModifier; + Limit(trNote, specs.noteMin, specs.noteMax); + note = static_cast<ModCommand::NOTE>(trNote); + } } if(!ins) ins = GetCurrentInstrument(); @@ -4984,13 +4989,13 @@ } for(int i = 0; i < numNotes; i++) { - pModDoc->NoteOff(notes[i], true, ins, GetCurrentChannel(), playWholeRow ? chordPatternChannels[i] : CHANNELINDEX_INVALID); + pModDoc->NoteOff(notes[i], true, static_cast<INSTRUMENTINDEX>(ins), GetCurrentChannel(), playWholeRow ? chordPatternChannels[i] : CHANNELINDEX_INVALID); noteChannels[i] = chordPatternChannels[i]; } prevChordNote = NOTE_NONE; } else { - pModDoc->NoteOff(note, ((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_NOTEFADE) || sndFile.GetNumInstruments() == 0), ins, nChnCursor, playWholeRow ? nChn : CHANNELINDEX_INVALID); + pModDoc->NoteOff(note, ((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_NOTEFADE) || sndFile.GetNumInstruments() == 0), static_cast<INSTRUMENTINDEX>(ins), nChnCursor, playWholeRow ? nChn : CHANNELINDEX_INVALID); } } @@ -5055,8 +5060,9 @@ // -- write sdx if playing live if(usePlaybackPosition && m_nPlayTick && pTarget->command == CMD_NONE && !doQuantize) { - pTarget->command = (sndFile.TypeIsS3M_IT_MPT()) ? CMD_S3MCMDEX : CMD_MODCMDEX; - pTarget->param = 0xD0 | MIN(0xF, m_nPlayTick); + pTarget->command = CMD_S3MCMDEX; + if(!specs.HasCommand(CMD_S3MCMDEX)) pTarget->command = CMD_MODCMDEX; + pTarget->param = static_cast<ModCommand::PARAM>(0xD0 | MIN(0xF, m_nPlayTick)); } //Enter note off @@ -5074,8 +5080,9 @@ // we don't have anything to cut (MOD format) - use volume or ECx if(usePlaybackPosition && m_nPlayTick && !doQuantize) // ECx { - pTarget->command = (sndFile.TypeIsS3M_IT_MPT()) ? CMD_S3MCMDEX : CMD_MODCMDEX; - pTarget->param = 0xC0 | MIN(0xF, m_nPlayTick); + pTarget->command = CMD_S3MCMDEX; + if(!specs.HasCommand(CMD_S3MCMDEX)) pTarget->command = CMD_MODCMDEX; + pTarget->param = static_cast<ModCommand::PARAM>(0xC0 | MIN(0xF, m_nPlayTick)); } else // C00 { pTarget->note = NOTE_NONE; @@ -5135,7 +5142,9 @@ PrepareUndo(m_Cursor, m_Cursor, "Octave Entry"); // The following might look a bit convoluted... This is mostly because the "middle-C" in // custom tunings always has octave 5, no matter how many octaves the tuning actually has. - TempEnterNote(((target.note - NOTE_MIN) % groupSize) + (val - 5) * groupSize + NOTE_MIDDLEC); + int note = ((target.note - NOTE_MIN) % groupSize) + (val - 5) * groupSize + NOTE_MIDDLEC; + Limit(note, NOTE_MIN, NOTE_MAX); + TempEnterNote(static_cast<ModCommand::NOTE>(note)); // Memorize note for key-up ASSERT(size_t(val) < CountOf(octaveKeyMemory)); octaveKeyMemory[val] = target.note; @@ -5191,7 +5200,7 @@ if (nTempMax < 100) // if we're using samples & have less than 100 samples instr = instr % 100; // or if we're using instruments and have less than 100 instruments // --> ensure the entered instrument value is less than 100. - target.instr = instr; + target.instr = static_cast<ModCommand::INSTR>(instr); SetSelToCursor(); @@ -5210,8 +5219,8 @@ // Enter a note in the pattern -void CViewPattern::TempEnterNote(int note, int vol, bool fromMidi) -//---------------------------------------------------------------- +void CViewPattern::TempEnterNote(ModCommand::NOTE note, int vol, bool fromMidi) +//----------------------------------------------------------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); @@ -5359,10 +5368,11 @@ { if(newcmd.command == CMD_NONE) //make sure we don't overwrite any existing commands. { - newcmd.command = sndFile.GetModSpecifications().HasCommand(CMD_S3MCMDEX) ? CMD_S3MCMDEX : CMD_MODCMDEX; + newcmd.command = CMD_S3MCMDEX; + if(!sndFile.GetModSpecifications().HasCommand(CMD_S3MCMDEX)) newcmd.command = CMD_MODCMDEX; UINT maxSpeed = 0x0F; if(sndFile.m_PlayState.m_nMusicSpeed > 0) maxSpeed = MIN(0x0F, sndFile.m_PlayState.m_nMusicSpeed - 1); - newcmd.param = 0xD0 + MIN(maxSpeed, m_nPlayTick); + newcmd.param = static_cast<ModCommand::PARAM>(0xD0 | MIN(maxSpeed, m_nPlayTick)); } } @@ -5396,7 +5406,7 @@ // data to the pattern and then remove it again - but often, it is actually removed before the row is parsed by the soundlib. // just play the newly inserted note using the already specified instrument... - UINT nPlayIns = newcmd.instr; + ModCommand::INSTR nPlayIns = newcmd.instr; if(!nPlayIns && ModCommand::IsNoteOrEmpty(note)) { // ...or one that can be found on a previous row of this pattern. @@ -5476,7 +5486,7 @@ BYTE *activeNoteMap = isSplit ? splitActiveNoteChannel : activeNoteChannel; if (newcmd.note <= NOTE_MAX) - activeNoteMap[newcmd.note] = nChn; + activeNoteMap[newcmd.note] = static_cast<BYTE>(nChn); if (recordGroup) { @@ -5551,8 +5561,8 @@ // Enter a chord in the pattern -void CViewPattern::TempEnterChord(int note) -//----------------------------------------- +void CViewPattern::TempEnterChord(ModCommand::NOTE note) +//------------------------------------------------------ { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); @@ -5665,7 +5675,7 @@ // just play the newly inserted notes... ModCommand &firstNote = rowBase[chn]; - UINT nPlayIns = 0; + ModCommand::INSTR nPlayIns = 0; if(firstNote.instr) { // ...using the already specified instrument @@ -5712,8 +5722,8 @@ // Translate incoming MIDI aftertouch messages to pattern commands -void CViewPattern::EnterAftertouch(int note, int atValue) -//------------------------------------------------------- +void CViewPattern::EnterAftertouch(ModCommand::NOTE note, int atValue) +//-------------------------------------------------------------------- { if(TrackerSettings::Instance().aftertouchBehaviour == atDoNotRecord || !IsEditingEnabled()) { @@ -5743,7 +5753,7 @@ ModCommand &target = GetModCommand(cursor); ModCommand newCommand = target; - CSoundFile *pSndFile = GetSoundFile(); + const CModSpecifications &specs = GetSoundFile()->GetModSpecifications(); if(target.IsPcNote()) { @@ -5754,14 +5764,14 @@ { case atRecordAsVolume: // Record aftertouch messages as volume commands - if(pSndFile->GetModSpecifications().HasVolCommand(VOLCMD_VOLUME)) + if(specs.HasVolCommand(VOLCMD_VOLUME)) { if(newCommand.volcmd == VOLCMD_NONE || newCommand.volcmd == VOLCMD_VOLUME) { newCommand.volcmd = VOLCMD_VOLUME; newCommand.vol = static_cast<ModCommand::VOL>((atValue * 64 + 64) / 127); } - } else if(pSndFile->GetModSpecifications().HasCommand(CMD_VOLUME)) + } else if(specs.HasCommand(CMD_VOLUME)) { if(newCommand.command == CMD_NONE || newCommand.command == CMD_VOLUME) { @@ -5775,10 +5785,10 @@ // Record aftertouch messages as MIDI Macros if(newCommand.command == CMD_NONE || newCommand.command == CMD_SMOOTHMIDI || newCommand.command == CMD_MIDI) { - ModCommand::COMMAND cmd = - pSndFile->GetModSpecifications().HasCommand(CMD_SMOOTHMIDI) ? CMD_SMOOTHMIDI : - pSndFile->GetModSpecifications().HasCommand(CMD_MIDI) ? CMD_MIDI : - CMD_NONE; + ModCommand::COMMAND cmd = static_cast<ModCommand::COMMAND>( + specs.HasCommand(CMD_SMOOTHMIDI) ? CMD_SMOOTHMIDI : + specs.HasCommand(CMD_MIDI) ? CMD_MIDI : + CMD_NONE); if(cmd != CMD_NONE) { @@ -6065,7 +6075,7 @@ void CViewPattern::OnSelectInstrument(UINT nID) //--------------------------------------------- { - SetSelectionInstrument(nID - ID_CHANGE_INSTRUMENT); + SetSelectionInstrument(static_cast<INSTRUMENTINDEX>(nID - ID_CHANGE_INSTRUMENT)); } @@ -6129,7 +6139,7 @@ bool CViewPattern::HandleSplit(ModCommand &m, int note) //----------------------------------------------------- { - ModCommand::INSTR ins = GetCurrentInstrument(); + ModCommand::INSTR ins = static_cast<ModCommand::INSTR>(GetCurrentInstrument()); const bool isSplit = IsNoteSplit(note); if(isSplit) @@ -6670,7 +6680,7 @@ result = (startRowCmd == endRowCmd && startRowCmd != NOTE_NONE) // Interpolate between two identical notes or Cut / Fade / etc... || (startRowCmd != NOTE_NONE && endRowCmd == NOTE_NONE) // Fill in values from the first row || (startRowCmd == NOTE_NONE && endRowCmd != NOTE_NONE) // Fill in values from the last row - || (ModCommand::IsNoteOrEmpty(startRowCmd) && ModCommand::IsNoteOrEmpty(endRowCmd) && !(startRowCmd == NOTE_NONE && endRowCmd == NOTE_NONE)); // Interpolate between two notes of which one may be empty + || (ModCommand::IsNoteOrEmpty(startRowMC.note) && ModCommand::IsNoteOrEmpty(endRowMC.note) && !(startRowCmd == NOTE_NONE && endRowCmd == NOTE_NONE)); // Interpolate between two notes of which one may be empty break; case PatternCursor::instrColumn: Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-06-26 18:46:00 UTC (rev 5359) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-06-26 21:03:11 UTC (rev 5360) @@ -244,7 +244,7 @@ POINT GetPointFromPosition(PatternCursor cursor); PatternCursor GetPositionFromPoint(POINT pt); - DWORD GetDragItem(CPoint point, LPRECT lpRect); + DWORD GetDragItem(CPoint point, RECT &rect); ROWINDEX GetRowsPerBeat() const; ROWINDEX GetRowsPerMeasure() const; @@ -306,17 +306,17 @@ void CursorJump(DWORD distance, bool upwards, bool snap); - void TempEnterNote(int n, int vol = -1, bool fromMidi = false); - void TempStopNote(int note, bool fromMidi = false, const bool bChordMode = false); - void TempEnterChord(int n); - void TempStopChord(int note) {TempStopNote(note, false, true);} + void TempEnterNote(ModCommand::NOTE n, int vol = -1, bool fromMidi = false); + void TempStopNote(ModCommand::NOTE note, bool fromMidi = false, const bool bChordMode = false); + void TempEnterChord(ModCommand::NOTE n); + void TempStopChord(ModCommand::NOTE note) {TempStopNote(note, false, true);} void TempEnterIns(int val); void TempEnterOctave(int val); void TempStopOctave(int val); void TempEnterVol(int v); - void TempEnterFX(int c, int v = -1); + void TempEnterFX(ModCommand::COMMAND c, int v = -1); void TempEnterFXparam(int v); - void EnterAftertouch(int note, int atValue); + void EnterAftertouch(ModCommand::NOTE note, int atValue); int GetDefaultVolume(const ModCommand &m) const; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-26 22:37:13
|
Revision: 5362 http://sourceforge.net/p/modplug/code/5362 Author: saga-games Date: 2015-06-26 22:37:08 +0000 (Fri, 26 Jun 2015) Log Message: ----------- [New] Pattern tab: Added hidden setting Pattern Editor.NoEditPopup, which disables the "editing is disabled" popup and allows note previewing (keyjazz) in all pattern editor columns while editing is disabled. Modified Paths: -------------- trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-26 21:48:05 UTC (rev 5361) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-26 22:37:08 UTC (rev 5362) @@ -258,6 +258,7 @@ , gbPatternVUMeters(conf, "Pattern Editor", "VU-Meters", false) , gbPatternPluginNames(conf, "Pattern Editor", "Plugin-Names", true) , gbPatternRecord(conf, "Pattern Editor", "Record", true) + , patternNoEditPopup(conf, "Pattern Editor", "NoEditPopup", false) , m_dwPatternSetup(conf, "Pattern Editor", "PatternSetup", GetDefaultPatternSetup()) , m_nRowHighlightMeasures(conf, "Pattern Editor", "RowSpacing", 16) , m_nRowHighlightBeats(conf, "Pattern Editor", "RowSpacing2", 4) Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-26 21:48:05 UTC (rev 5361) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2015-06-26 22:37:08 UTC (rev 5362) @@ -592,6 +592,7 @@ CachedSetting<bool> gbPatternVUMeters; CachedSetting<bool> gbPatternPluginNames; CachedSetting<bool> gbPatternRecord; + CachedSetting<bool> patternNoEditPopup; CachedSetting<uint32> m_dwPatternSetup; CachedSetting<uint32> m_nRowHighlightMeasures; // primary (measures) and secondary (beats) highlight CachedSetting<uint32> m_nRowHighlightBeats; // primary (measures) and secondary (beats) highlight Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 21:48:05 UTC (rev 5361) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-26 22:37:08 UTC (rev 5362) @@ -693,6 +693,8 @@ UINT nFlags = HIWORD(pMsg->lParam); KeyEventType kT = ih->GetKeyEventType(nFlags); InputTargetContext ctx = (InputTargetContext)(kCtxViewPatterns + 1 + m_Cursor.GetColumnType()); + // If editing is disabled, preview notes no matter which column we are in + if(!IsEditingEnabled() && TrackerSettings::Instance().patternNoEditPopup) ctx = kCtxViewPatternsNote; if (ih->KeyEvent(ctx, nChar, nRepCnt, nFlags, kT) != kcNull) { @@ -6795,6 +6797,7 @@ //---------------------------------------- { if(IsEditingEnabled()) return true; + if(TrackerSettings::Instance().patternNoEditPopup) return false; HMENU hMenu; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-06-27 09:44:49
|
Revision: 5364 http://sourceforge.net/p/modplug/code/5364 Author: manxorist Date: 2015-06-27 09:44:43 +0000 (Sat, 27 Jun 2015) Log Message: ----------- [Imp] Advanced settings: Add a "Save now" button. Modified Paths: -------------- trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp trunk/OpenMPT/mptrack/AdvancedConfigDlg.h trunk/OpenMPT/mptrack/Settings.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp 2015-06-27 00:06:19 UTC (rev 5363) +++ trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp 2015-06-27 09:44:43 UTC (rev 5364) @@ -21,6 +21,7 @@ BEGIN_MESSAGE_MAP(COptionsAdvanced, CPropertyPage) ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnOptionDblClick) ON_EN_CHANGE(IDC_EDIT1, OnFindStringChanged) + ON_COMMAND(IDC_BUTTON1, OnSaveNow) END_MESSAGE_MAP() void COptionsAdvanced::DoDataExchange(CDataExchange* pDX) @@ -265,6 +266,16 @@ OnSettingsChanged(); } + +void COptionsAdvanced::OnSaveNow() +//-------------------------------- +{ + #if defined(MPT_SETTINGS_CACHE) + theApp.GetSettings().WriteSettings(); + #endif // MPT_SETTINGS_CACHE +} + + OPENMPT_NAMESPACE_END #endif // MPT_SETTINGS_CACHE Modified: trunk/OpenMPT/mptrack/AdvancedConfigDlg.h =================================================================== --- trunk/OpenMPT/mptrack/AdvancedConfigDlg.h 2015-06-27 00:06:19 UTC (rev 5363) +++ trunk/OpenMPT/mptrack/AdvancedConfigDlg.h 2015-06-27 09:44:43 UTC (rev 5364) @@ -44,6 +44,7 @@ afx_msg void OnOptionDblClick(NMHDR *, LRESULT *); afx_msg void OnSettingsChanged() { SetModified(TRUE); } afx_msg void OnFindStringChanged() { ReInit(); } + afx_msg void OnSaveNow(); void ReInit(); Modified: trunk/OpenMPT/mptrack/Settings.h =================================================================== --- trunk/OpenMPT/mptrack/Settings.h 2015-06-27 00:06:19 UTC (rev 5363) +++ trunk/OpenMPT/mptrack/Settings.h 2015-06-27 09:44:43 UTC (rev 5364) @@ -516,10 +516,10 @@ public: typedef std::map<SettingPath,SettingState> SettingsMap; typedef std::map<SettingPath,std::set<ISettingChanged*> > SettingsListenerMap; + void WriteSettings(); private: mutable SettingsMap map; mutable SettingsListenerMap mapListeners; - void WriteSettings(); #endif // MPT_SETTINGS_CACHE Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-27 00:06:19 UTC (rev 5363) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-27 09:44:43 UTC (rev 5364) @@ -311,10 +311,11 @@ CAPTION "Advanced" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - LTEXT "Warning:\nChanging advanced settings might cause stability problems.\nYou should only continue if you know what you are doing.",IDC_STATIC,6,6,258,24 + LTEXT "Warning:\nChanging advanced settings might cause stability problems.\nYou should only continue if you know what you are doing.",IDC_STATIC,6,6,204,24 LTEXT "&Find:",IDC_STATIC,6,38,17,8 EDITTEXT IDC_EDIT1,30,36,252,12,ES_AUTOHSCROLL CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SORTASCENDING | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,54,276,222 + PUSHBUTTON "&Save now",IDC_BUTTON1,228,12,50,14 END IDD_SCANPLUGINS DIALOGEX 0, 0, 316, 34 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-27 13:54:09
|
Revision: 5367 http://sourceforge.net/p/modplug/code/5367 Author: saga-games Date: 2015-06-27 13:54:03 +0000 (Sat, 27 Jun 2015) Log Message: ----------- [Fix] Fix some alignment issues occuring with smooth pattern scrolling (e.g. when using step feature) Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-27 11:40:04 UTC (rev 5366) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-27 13:54:03 UTC (rev 5367) @@ -160,7 +160,14 @@ int CViewPattern::GetSmoothScrollOffset() const //--------------------------------------------- { - return Util::muldivr_unsigned(m_szCell.cy, m_nPlayTick, std::max(1u, m_nTicksOnRow)); + if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SMOOTHSCROLL) != 0 // Actually using the smooth scroll feature + && (m_Status & (psFollowSong | psDragActive)) == psFollowSong // Not drawing a selection during playback + && (m_nMidRow != 0 || GetYScrollPos() > 0) // If active row is not centered, only scroll when display position is actually not at the top + && IsLiveRecord()) // Actually playing live (not paused or stepping) + { + return Util::muldivr_unsigned(m_szCell.cy, m_nPlayTick, std::max(1u, m_nTicksOnRow)); + } + return 0; } @@ -246,15 +253,10 @@ { const PATTERNFONT *pfnt = PatternFont::currentFont; int xofs = GetXScrollPos(); - int yofs = GetYScrollPos(); + int yofs = GetYScrollPos() + GetSmoothScrollOffset(); int x = xofs + (pt.x - m_szHeader.cx) / GetColumnWidth(); if (pt.x < m_szHeader.cx) x = (xofs) ? xofs - 1 : 0; - if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SMOOTHSCROLL) != 0 && (m_Status & (psFollowSong | psDragActive)) == psFollowSong && IsLiveRecord()) - { - pt.y += GetSmoothScrollOffset(); - } - int y = yofs - m_nMidRow + (pt.y - m_szHeader.cy) / m_szCell.cy; if (y < 0) y = 0; int xx = (pt.x - m_szHeader.cx) % GetColumnWidth(), dx = 0; @@ -513,13 +515,7 @@ UINT nColumnWidth = m_szCell.cx; UINT ncols = sndFile.GetNumChannels(); int xpaint = m_szHeader.cx; - int ypaint = rcClient.top + m_szHeader.cy; - - // Scroll tick by tick (always if active row is centered, otherwise only if the top row isn't the first one) - if(doSmoothScroll && liveRecord && (m_Status & (psFollowSong | psDragActive)) == psFollowSong && (m_nMidRow != 0 || yofs > 0)) - { - ypaint -= GetSmoothScrollOffset(); - } + int ypaint = rcClient.top + m_szHeader.cy - GetSmoothScrollOffset(); if (m_nMidRow) { @@ -1514,7 +1510,7 @@ CRect rect; GetClientRect(&rect); rect.left = m_szHeader.cx; - rect.top = m_szHeader.cy; + rect.top = m_szHeader.cy - GetSmoothScrollOffset(); rect.top += (n - yofs) * m_szCell.cy; rect.bottom = rect.top + m_szCell.cy; InvalidateRect(&rect, FALSE); Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-27 11:40:04 UTC (rev 5366) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-27 13:54:03 UTC (rev 5367) @@ -99,10 +99,6 @@ ON_COMMAND(ID_NEXTINSTRUMENT, OnNextInstrument) ON_COMMAND(ID_PREVINSTRUMENT, OnPrevInstrument) ON_COMMAND(ID_PATTERN_PLAYROW, OnPatternStep) - ON_COMMAND(ID_CONTROLENTER, OnPatternStep) - ON_COMMAND(ID_CONTROLTAB, OnSwitchToOrderList) - ON_COMMAND(ID_PREVORDER, OnPrevOrder) - ON_COMMAND(ID_NEXTORDER, OnNextOrder) ON_COMMAND(IDC_PATTERN_RECORD, OnPatternRecord) ON_COMMAND(ID_RUN_SCRIPT, OnRunScript) ON_COMMAND(ID_TRANSPOSE_UP, OnTransposeUp) @@ -2488,6 +2484,10 @@ CriticalSection cs; + // In case we were previously in smooth scrolling mode during live playback, the pattern might be misaligned. + if(GetSmoothScrollOffset() != 0) + InvalidatePattern(true); + // Cut instruments/samples in virtual channels for(CHANNELINDEX i = pSndFile->GetNumChannels(); i < MAX_CHANNELS; i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-27 14:14:17
|
Revision: 5368 http://sourceforge.net/p/modplug/code/5368 Author: saga-games Date: 2015-06-27 14:14:12 +0000 (Sat, 27 Jun 2015) Log Message: ----------- [Mod] Use custom window message to send automation messages from plugin to OpenMPT GUI (less unnecessary view updates, and in case of bridged plugins the GUI updates now happen in the correct thread) Modified Paths: -------------- trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_gen.h trunk/OpenMPT/mptrack/Vstplug.cpp Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2015-06-27 13:54:03 UTC (rev 5367) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2015-06-27 14:14:12 UTC (rev 5368) @@ -50,6 +50,7 @@ WM_MOD_INSTRSELECTED, WM_MOD_KEYCOMMAND, WM_MOD_RECORDPARAM, + WM_MOD_PLUGPARAMAUTOMATE, }; enum Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2015-06-27 13:54:03 UTC (rev 5367) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2015-06-27 14:14:12 UTC (rev 5368) @@ -109,6 +109,7 @@ ON_MESSAGE(WM_MOD_UNLOCKCONTROLS, OnUnlockControls) ON_MESSAGE(WM_MOD_VIEWMSG, OnModViewMsg) ON_MESSAGE(WM_MOD_MIDIMSG, OnMidiMsg) + ON_MESSAGE(WM_MOD_PLUGPARAMAUTOMATE, OnParamAutomated) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -769,12 +770,9 @@ const PlugParamIndex nParams = pVstPlugin->GetNumParameters(); if(m_nCurrentParam < nParams) { - float fValue = 0.01f * n; - wsprintf(s, "%d.%02d", n/100, n%100); - SetDlgItemText(IDC_EDIT14, s); if (nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK || nSBCode == SB_ENDSCROLL) { - pVstPlugin->SetParameter(m_nCurrentParam, fValue); + pVstPlugin->SetParameter(m_nCurrentParam, 0.01f * n); OnParamChanged(); SetPluginModified(); } @@ -962,6 +960,17 @@ } +LRESULT CViewGlobals::OnParamAutomated(WPARAM plugin, LPARAM param) +//----------------------------------------------------------------- +{ + if(plugin == m_nCurrentPlugin && param == m_nCurrentParam) + { + OnParamChanged(); + } + return 0; +} + + void CViewGlobals::OnParamChanged() //--------------------------------- { Modified: trunk/OpenMPT/mptrack/View_gen.h =================================================================== --- trunk/OpenMPT/mptrack/View_gen.h 2015-06-27 13:54:03 UTC (rev 5367) +++ trunk/OpenMPT/mptrack/View_gen.h 2015-06-27 14:14:12 UTC (rev 5368) @@ -135,6 +135,7 @@ afx_msg void OnMovePlugToSlot(); afx_msg void OnInsertSlot(); afx_msg void OnClonePlug(); + LRESULT OnParamAutomated(WPARAM plugin, LPARAM param); afx_msg void OnWetDryExpandChanged(); afx_msg void OnSpecialMixProcessingChanged(); Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2015-06-27 13:54:03 UTC (rev 5367) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2015-06-27 14:14:12 UTC (rev 5368) @@ -566,8 +566,9 @@ fileSel->returnMultiplePaths = new (std::nothrow) char *[fileSel->nbReturnPath]; for(size_t i = 0; i < files.size(); i++) { - char *fname = new (std::nothrow) char[files[i].ToLocale().length() + 1]; - strcpy(fname, files[i].ToLocale().c_str()); + const std::string fname_ = files[i].ToLocale(); + char *fname = new (std::nothrow) char[fname_.length() + 1]; + strcpy(fname, fname_.c_str()); fileSel->returnMultiplePaths[i] = fname; } return 1; @@ -2044,8 +2045,7 @@ CMainFrame::GetMainFrame()->ThreadSafeSetModified(pModDoc); } - // Better idea: add an update hint just for plugin params? - pModDoc->UpdateAllViews(nullptr, PluginHint(m_nSlot + 1).Parameter(), nullptr); + pModDoc->PostMessageToAllViews(WM_MOD_PLUGPARAMAUTOMATE, m_nSlot, param); if (CMainFrame::GetInputHandler()->ShiftPressed()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-27 16:14:32
|
Revision: 5370 http://sourceforge.net/p/modplug/code/5370 Author: saga-games Date: 2015-06-27 16:14:27 +0000 (Sat, 27 Jun 2015) Log Message: ----------- [Fix] Pattern tab: Fix for partially broken stuff in r5367 [Imp] Allow sending incoming MIDI notes to plugins even if no instrument is assigned to them (pass data as-is) Revision Links: -------------- http://sourceforge.net/p/modplug/code/5367 Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/Moddoc.cpp Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-27 14:41:53 UTC (rev 5369) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-27 16:14:27 UTC (rev 5370) @@ -253,11 +253,11 @@ { const PATTERNFONT *pfnt = PatternFont::currentFont; int xofs = GetXScrollPos(); - int yofs = GetYScrollPos() + GetSmoothScrollOffset(); + int yofs = GetYScrollPos(); int x = xofs + (pt.x - m_szHeader.cx) / GetColumnWidth(); if (pt.x < m_szHeader.cx) x = (xofs) ? xofs - 1 : 0; - int y = yofs - m_nMidRow + (pt.y - m_szHeader.cy) / m_szCell.cy; + int y = yofs - m_nMidRow + (pt.y - m_szHeader.cy + GetSmoothScrollOffset()) / m_szCell.cy; if (y < 0) y = 0; int xx = (pt.x - m_szHeader.cx) % GetColumnWidth(), dx = 0; int imax = 4; @@ -484,7 +484,6 @@ const int vuHeight = MulDiv(VUMETERS_HEIGHT, m_nDPIy, 96); const int colHeight = MulDiv(COLHDR_HEIGHT, m_nDPIy, 96); const int recordInsX = MulDiv(3, m_nDPIx, 96); - const bool liveRecord = IsLiveRecord(); const bool doSmoothScroll = (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SMOOTHSCROLL) != 0; GetClientRect(&rcClient); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-06-27 14:41:53 UTC (rev 5369) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-06-27 16:14:27 UTC (rev 5370) @@ -1018,6 +1018,9 @@ PlayNote(note, ins, 0, false, vol); } return; + } else + { + plugin->MidiSend(midiData); } break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-27 17:07:30
|
Revision: 5371 http://sourceforge.net/p/modplug/code/5371 Author: saga-games Date: 2015-06-27 17:07:24 +0000 (Sat, 27 Jun 2015) Log Message: ----------- [Imp] Directly assign instruments to newly added instrument plugins without asking. It's very unlikely that the user doesn't want the instrument to be created. Modified Paths: -------------- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/AbstractVstEditor.h trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/SelectPluginDialog.cpp Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2015-06-27 16:14:27 UTC (rev 5370) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2015-06-27 17:07:24 UTC (rev 5371) @@ -527,7 +527,7 @@ return false; } else { - CreateInstrument(); + OnCreateInstrument(); // Return true since we don't want to trigger the note for which the instrument has been validated yet. // Otherwise, the note might hang forever because the key-up event will go missing. return false; @@ -926,48 +926,11 @@ void CAbstractVstEditor::OnCreateInstrument() //------------------------------------------- { - CreateInstrument(); -} - - -// Try to set up a new instrument that is linked to the current plugin. -bool CAbstractVstEditor::CreateInstrument() -//----------------------------------------- -{ - CModDoc *pModDoc = m_VstPlugin.GetModDoc(); - CSoundFile &sndFile = m_VstPlugin.GetSoundFile(); - if(pModDoc == nullptr) + if(m_VstPlugin.GetModDoc() != nullptr) { - return false; + INSTRUMENTINDEX instr = m_VstPlugin.GetModDoc()->InsertInstrumentForPlugin(m_VstPlugin.GetSlot()); + if(instr != INSTRUMENTINDEX_INVALID) m_nInstrument = instr; } - - const bool first = (sndFile.GetNumInstruments() == 0); - INSTRUMENTINDEX nIns = pModDoc->InsertInstrument(0); - if(nIns == INSTRUMENTINDEX_INVALID) - { - return false; - } - - ModInstrument *pIns = sndFile.Instruments[nIns]; - m_nInstrument = nIns; - - _snprintf(pIns->name, CountOf(pIns->name) - 1, _T("%d: %s"), m_VstPlugin.GetSlot() + 1, sndFile.m_MixPlugins[m_VstPlugin.GetSlot()].GetName()); - mpt::String::Copy(pIns->filename, mpt::ToCharset(mpt::CharsetLocale, mpt::CharsetUTF8, sndFile.m_MixPlugins[m_VstPlugin.GetSlot()].GetLibraryName())); - pIns->nMixPlug = (PLUGINDEX)m_VstPlugin.GetSlot() + 1; - pIns->nMidiChannel = 1; - // People will forget to change this anyway, so the following lines can lead to some bad surprises after re-opening the module. - //pIns->wMidiBank = (WORD)((m_pVstPlugin->GetCurrentProgram() >> 7) + 1); - //pIns->nMidiProgram = (BYTE)((m_pVstPlugin->GetCurrentProgram() & 0x7F) + 1); - - InstrumentHint hint = InstrumentHint(nIns).Info().Envelope().Names(); - if(first) hint.ModType(); - pModDoc->UpdateAllViews(nullptr, hint); - if(sndFile.GetModSpecifications().supportsPlugins) - { - pModDoc->SetModified(); - } - - return true; } Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.h =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.h 2015-06-27 16:14:27 UTC (rev 5370) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.h 2015-06-27 17:07:24 UTC (rev 5371) @@ -47,7 +47,6 @@ void SetPreset(int32 preset); void UpdatePresetField(); - bool CreateInstrument(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnLoadPreset(); Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-06-27 16:14:27 UTC (rev 5370) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-06-27 17:07:24 UTC (rev 5371) @@ -1218,8 +1218,6 @@ m_CheckResonance.EnableWindow(bITandMPT); m_SliderCutOff.EnableWindow(bITandMPT); m_SliderResonance.EnableWindow(bITandMPT); - m_SpinInstrument.SetRange(1, m_sndFile.m_nInstruments); - m_SpinInstrument.EnableWindow((m_sndFile.m_nInstruments) ? TRUE : FALSE); m_ComboTuning.EnableWindow(bMPTOnly); m_EditPitchTempoLock.EnableWindow(bMPTOnly); m_CheckPitchTempoLock.EnableWindow(bMPTOnly); @@ -1239,8 +1237,11 @@ m_CbnMidiCh.SetItemData(m_CbnMidiCh.AddString(s), ich); } } - if (hintType[HINT_MODTYPE | HINT_INSTRUMENT | HINT_MODTYPE]) + if (hintType[HINT_MODTYPE | HINT_INSTRUMENT]) { + m_SpinInstrument.SetRange(1, m_sndFile.m_nInstruments); + m_SpinInstrument.EnableWindow((m_sndFile.m_nInstruments) ? TRUE : FALSE); + // Backwards compatibility with IT modules that use now deprecated hack features. m_SliderCutSwing.EnableWindow((pIns != nullptr && (m_sndFile.GetType() == MOD_TYPE_MPT || pIns->nCutSwing != 0)) ? TRUE : FALSE); m_SliderResSwing.EnableWindow((pIns != nullptr && (m_sndFile.GetType() == MOD_TYPE_MPT || pIns->nResSwing != 0)) ? TRUE : FALSE); Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2015-06-27 16:14:27 UTC (rev 5370) +++ trunk/OpenMPT/mptrack/Moddoc.h 2015-06-27 17:07:24 UTC (rev 5371) @@ -201,6 +201,7 @@ PATTERNINDEX InsertPattern(ORDERINDEX nOrd = ORDERINDEX_INVALID, ROWINDEX nRows = 64); SAMPLEINDEX InsertSample(bool bLimit = false); INSTRUMENTINDEX InsertInstrument(SAMPLEINDEX lSample = SAMPLEINDEX_INVALID, INSTRUMENTINDEX lDuplicate = INSTRUMENTINDEX_INVALID); + INSTRUMENTINDEX InsertInstrumentForPlugin(PLUGINDEX plug); void InitializeInstrument(ModInstrument *pIns); bool RemoveOrder(SEQUENCEINDEX nSeq, ORDERINDEX nOrd); bool RemovePattern(PATTERNINDEX nPat); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2015-06-27 16:14:27 UTC (rev 5370) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2015-06-27 17:07:24 UTC (rev 5371) @@ -249,7 +249,6 @@ for(CHANNELINDEX nChn = GetNumChannels(); nChn < MAX_BASECHANNELS; nChn++) { m_SndFile.InitChannel(nChn); - m_SndFile.m_PlayState.Chn[nChn].dwFlags.set(CHN_MUTE); } return GetNumChannels(); @@ -538,10 +537,7 @@ bool CModDoc::ConvertInstrumentsToSamples() //----------------------------------------- { - if (!m_SndFile.GetNumInstruments()) - { - return false; - } + if (!m_SndFile.GetNumInstruments()) return false; m_SndFile.Patterns.ForEachModCommand(ConvertInstrumentsToSamplesInPatterns(&m_SndFile)); return true; } @@ -550,15 +546,11 @@ bool CModDoc::ConvertSamplesToInstruments() //----------------------------------------- { - if(GetNumInstruments() > 0) - { - return false; - } + const INSTRUMENTINDEX instrumentMax = m_SndFile.GetModSpecifications().instrumentsMax; + if(GetNumInstruments() > 0 || instrumentMax == 0) return false; - const INSTRUMENTINDEX nInstrumentMax = m_SndFile.GetModSpecifications().instrumentsMax; - const SAMPLEINDEX nInstruments = MIN(m_SndFile.GetNumSamples(), nInstrumentMax); - - for(SAMPLEINDEX smp = 1; smp <= nInstruments; smp++) + m_SndFile.m_nInstruments = std::min(m_SndFile.GetNumSamples(), instrumentMax); + for(SAMPLEINDEX smp = 1; smp <= m_SndFile.m_nInstruments; smp++) { const bool muted = IsSampleMuted(smp); MuteSample(smp, false); @@ -575,8 +567,6 @@ MuteInstrument(smp, muted); } - m_SndFile.m_nInstruments = nInstruments; - return true; } @@ -809,6 +799,46 @@ } +// Try to set up a new instrument that is linked to a given plugin +INSTRUMENTINDEX CModDoc::InsertInstrumentForPlugin(PLUGINDEX plug) +//---------------------------------------------------------------- +{ +#ifndef NO_VST + const bool first = (GetNumInstruments() == 0); + if(first && !ConvertSamplesToInstruments()) return INSTRUMENTINDEX_INVALID; + + INSTRUMENTINDEX instr = m_SndFile.GetNextFreeInstrument(); + if(instr == INSTRUMENTINDEX_INVALID) return INSTRUMENTINDEX_INVALID; + + ModInstrument *ins = m_SndFile.AllocateInstrument(instr, 0); + if(ins == nullptr) return INSTRUMENTINDEX_INVALID; + InitializeInstrument(ins); + + _snprintf(ins->name, CountOf(ins->name) - 1, _T("%u: %s"), plug + 1, m_SndFile.m_MixPlugins[plug].GetName()); + mpt::String::Copy(ins->filename, mpt::ToCharset(mpt::CharsetLocale, mpt::CharsetUTF8, m_SndFile.m_MixPlugins[plug].GetLibraryName())); + ins->nMixPlug = plug + 1; + ins->nMidiChannel = 1; + // People will forget to change this anyway, so the following lines can lead to some bad surprises after re-opening the module. + //pIns->wMidiBank = (WORD)((m_pVstPlugin->GetCurrentProgram() >> 7) + 1); + //pIns->nMidiProgram = (BYTE)((m_pVstPlugin->GetCurrentProgram() & 0x7F) + 1); + + if(instr > m_SndFile.m_nInstruments) m_SndFile.m_nInstruments = instr; + + InstrumentHint hint = InstrumentHint(instr).Info().Envelope().Names(); + if(first) hint.ModType(); + UpdateAllViews(nullptr, hint); + if(m_SndFile.GetModSpecifications().supportsPlugins) + { + SetModified(); + } + + return instr; +#else + return INSTRUMENTINDEX_INVALID; +#endif +} + + bool CModDoc::RemoveOrder(SEQUENCEINDEX nSeq, ORDERINDEX nOrd) //------------------------------------------------------------ { Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-06-27 16:14:27 UTC (rev 5370) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-06-27 17:07:24 UTC (rev 5371) @@ -173,6 +173,21 @@ { mpt::String::Copy(m_pPlugin->Info.szName, s); } + // Check if plugin slot is already assigned to any instrument, and if not, create one. + if(p->isInstrument()) + { + const CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); + INSTRUMENTINDEX instr = 0; + for(INSTRUMENTINDEX i = 1; i < sndFile.GetNumInstruments(); i++) + { + if(sndFile.Instruments[i] != nullptr && sndFile.Instruments[i]->nMixPlug == m_nPlugSlot + 1) + { + instr = i; + break; + } + } + if(instr == 0) m_pModDoc->InsertInstrumentForPlugin(m_nPlugSlot); + } } else { MemsetZero(m_pPlugin->Info); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-27 21:42:04
|
Revision: 5373 http://sourceforge.net/p/modplug/code/5373 Author: saga-games Date: 2015-06-27 21:41:58 +0000 (Sat, 27 Jun 2015) Log Message: ----------- [Imp] Add very basic detection for backward-scrolling patterns to reduce motion sickness with smoothly scrolling patterns. Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-27 21:05:39 UTC (rev 5372) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-06-27 21:41:58 UTC (rev 5373) @@ -165,7 +165,10 @@ && (m_nMidRow != 0 || GetYScrollPos() > 0) // If active row is not centered, only scroll when display position is actually not at the top && IsLiveRecord()) // Actually playing live (not paused or stepping) { - return Util::muldivr_unsigned(m_szCell.cy, m_nPlayTick, std::max(1u, m_nTicksOnRow)); + uint32 tick = m_nPlayTick; + // Avoid jerky animation with backwards-going patterns + if(m_smoothScrollBackwards) tick = m_nTicksOnRow - m_nPlayTick - 1; + return Util::muldivr_unsigned(m_szCell.cy, tick, std::max(1u, m_nTicksOnRow)); } return 0; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-27 21:05:39 UTC (rev 5372) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-06-27 21:41:58 UTC (rev 5373) @@ -191,6 +191,7 @@ m_nDragItem = 0; m_bInItemRect = false; m_bContinueSearch = false; + m_smoothScrollBackwards = false; m_Status = psShowPluginNames; m_nXScroll = m_nYScroll = 0; m_nPattern = 0; @@ -3762,9 +3763,19 @@ m_pEffectVis->SetPlayCursor(nPat, nRow); } - // Don't follow song if user drags selections or scrollbars. + // Simple detection of backwards-going patterns to avoid jerky animation + m_smoothScrollBackwards = false; + if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SMOOTHSCROLL) && pSndFile->Patterns.IsValidPat(nPat)) + { + for(const ModCommand *m = pSndFile->Patterns[nPat].GetRow(nRow), *mEnd = m + pSndFile->GetNumChannels(); m != mEnd; m++) + { + if(m->command == CMD_PATTERNBREAK) m_smoothScrollBackwards = (m->param == nRow - 1); + } + } + m_nTicksOnRow = pnotify->ticksOnRow; SetPlayCursor(nPat, nRow, pnotify->tick); + // Don't follow song if user drags selections or scrollbars. if((m_Status & (psFollowSong | psDragActive)) == psFollowSong) { if (nPat < pSndFile->Patterns.Size()) Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-06-27 21:05:39 UTC (rev 5372) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-06-27 21:41:58 UTC (rev 5373) @@ -190,6 +190,7 @@ DWORD m_dwLastNoteEntryTime; //rewbs.customkeys bool m_bLastNoteEntryBlocked : 1; bool m_bContinueSearch : 1, m_bWholePatternFitsOnScreen : 1; + bool m_smoothScrollBackwards : 1; ModCommand m_PCNoteEditMemory; // PC Note edit memory static ModCommand m_cmdOld; // Quick cursor copy/paste data This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-27 22:45:34
|
Revision: 5374 http://sourceforge.net/p/modplug/code/5374 Author: saga-games Date: 2015-06-27 22:45:29 +0000 (Sat, 27 Jun 2015) Log Message: ----------- [Fix] Fix off-by-one error when creating instruments for plugins [Ref] Fix type conversion warning in plugin selection dialog. Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/SelectPluginDialog.cpp trunk/OpenMPT/mptrack/SelectPluginDialog.h Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-27 21:41:58 UTC (rev 5373) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-27 22:45:29 UTC (rev 5374) @@ -1922,7 +1922,7 @@ //-------------------------------- { #ifndef NO_VST - int nPlugslot=-1; + PLUGINDEX nPlugslot = PLUGINDEX_INVALID; CModDoc* pModDoc = GetActiveDoc(); if (pModDoc) Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-06-27 21:41:58 UTC (rev 5373) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.cpp 2015-06-27 22:45:29 UTC (rev 5374) @@ -55,12 +55,13 @@ } -CSelectPluginDlg::CSelectPluginDlg(CModDoc *pModDoc, int nPlugSlot, CWnd *parent) : CDialog(IDD_SELECTMIXPLUGIN, parent) -//---------------------------------------------------------------------------------------------------------------------- +CSelectPluginDlg::CSelectPluginDlg(CModDoc *pModDoc, PLUGINDEX nPlugSlot, CWnd *parent) + : CDialog(IDD_SELECTMIXPLUGIN, parent) + , m_pModDoc(pModDoc) + , m_nPlugSlot(nPlugSlot) +//------------------------------------------------------------------------------------- { m_pPlugin = NULL; - m_pModDoc = pModDoc; - m_nPlugSlot = nPlugSlot; if(m_pModDoc) { @@ -178,7 +179,7 @@ { const CSoundFile &sndFile = m_pModDoc->GetrSoundFile(); INSTRUMENTINDEX instr = 0; - for(INSTRUMENTINDEX i = 1; i < sndFile.GetNumInstruments(); i++) + for(INSTRUMENTINDEX i = 1; i <= sndFile.GetNumInstruments(); i++) { if(sndFile.Instruments[i] != nullptr && sndFile.Instruments[i]->nMixPlug == m_nPlugSlot + 1) { Modified: trunk/OpenMPT/mptrack/SelectPluginDialog.h =================================================================== --- trunk/OpenMPT/mptrack/SelectPluginDialog.h 2015-06-27 21:41:58 UTC (rev 5373) +++ trunk/OpenMPT/mptrack/SelectPluginDialog.h 2015-06-27 22:45:29 UTC (rev 5374) @@ -27,7 +27,7 @@ //==================================== { protected: - int m_nPlugSlot; + PLUGINDEX m_nPlugSlot; SNDMIXPLUGIN *m_pPlugin; CModDoc *m_pModDoc; CTreeCtrlW m_treePlugins; @@ -39,7 +39,7 @@ HTREEITEM AddTreeItem(const WCHAR *title, int image, bool sort, HTREEITEM hParent = TVI_ROOT, LPARAM lParam = NULL); public: - CSelectPluginDlg(CModDoc *pModDoc, int nPlugSlot, CWnd *parent); + CSelectPluginDlg(CModDoc *pModDoc, PLUGINDEX nPlugSlot, CWnd *parent); ~CSelectPluginDlg(); static VSTPluginLib *ScanPlugins(const mpt::PathString &path, CWnd *parent); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-06-28 23:45:39
|
Revision: 5379 http://sourceforge.net/p/modplug/code/5379 Author: saga-games Date: 2015-06-28 23:45:33 +0000 (Sun, 28 Jun 2015) Log Message: ----------- [Fix] Tempo swing: Crash when using the reset button in combination with enabled edit groups. [Mod] When converting sampels to instruments, don't bother doing any conversion if all sample slots are empty. Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2015-06-28 22:07:51 UTC (rev 5378) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2015-06-28 23:45:33 UTC (rev 5379) @@ -549,6 +549,18 @@ const INSTRUMENTINDEX instrumentMax = m_SndFile.GetModSpecifications().instrumentsMax; if(GetNumInstruments() > 0 || instrumentMax == 0) return false; + // If there is no actual sample data, don't bother creating any instruments + bool anySamples = false; + for(SAMPLEINDEX smp = 1; smp <= m_SndFile.m_nSamples; smp++) + { + if(m_SndFile.GetSample(smp).HasSampleData()) + { + anySamples = true; + break; + } + } + if(!anySamples) return true; + m_SndFile.m_nInstruments = std::min(m_SndFile.GetNumSamples(), instrumentMax); for(SAMPLEINDEX smp = 1; smp <= m_SndFile.m_nInstruments; smp++) { Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-28 22:07:51 UTC (rev 5378) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-06-28 23:45:33 UTC (rev 5379) @@ -447,6 +447,11 @@ case IDC_CHK_FT2VOLRAMP: text = _T("Use Fasttracker 2 style super soft volume ramping (recommended for true compatible playback)"); break; + case IDC_BUTTON1: + if(!GetDlgItem(IDC_BUTTON1)->IsWindowEnabled()) + { + text = _T("Tempo swing is only available in modern tempo mode."); + } } mpt::String::CopyN(pTTT->szText, text); @@ -1296,7 +1301,7 @@ SetDlgItemInt(IDC_EDIT1, m_groupSize); OnToggleGroup(); - OnHScroll(0, 0, nullptr); + OnHScroll(0, 0, reinterpret_cast<CScrollBar *>(&m_controls[0]->valueSlider)); rect.MoveToY(rect.top + m.paddingY); { CRect buttonRect; @@ -1360,7 +1365,7 @@ { m_controls[i]->valueSlider.SetPos(0); } - OnHScroll(0, 0, nullptr); + OnHScroll(0, 0, reinterpret_cast<CScrollBar *>(&m_controls[0]->valueSlider)); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-06-30 08:48:07
|
Revision: 5385 http://sourceforge.net/p/modplug/code/5385 Author: manxorist Date: 2015-06-30 08:47:59 +0000 (Tue, 30 Jun 2015) Log Message: ----------- [Ref] Update Check: Avoid duplicating the settings state. [Ref] Update Check: Convert error handling in update thread to exceptions. [Ref] Update Check: Move the UI handling of update check to the main thread. The async update worker thread now sends WM_APP messages to the main window upon completion or error. [Fix] Update Check: Having moved UI handling of the update check to the main thread, we can safely update the last check time setting on completion and hook into the setting change notification from the update settings page. This means, the displayed last check time in the settings window gets updated in real time now. [Ref] Update Check: Do not use explicit new and delete. [Ref] Update Check: Limit to one running update check thread at a single time. Thread safety does not require this, but we certainly do not want to eat up resources due to network problems when the user repeatedly checks for updates. Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Settings.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/UpdateCheck.cpp trunk/OpenMPT/mptrack/UpdateCheck.h trunk/OpenMPT/mptrack/WelcomeDialog.cpp Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2015-06-30 08:47:59 UTC (rev 5385) @@ -106,6 +106,9 @@ ON_MESSAGE(WM_MOD_KEYCOMMAND, OnCustomKeyMsg) ON_COMMAND(ID_INTERNETUPDATE, OnInternetUpdate) ON_COMMAND(ID_HELP_SHOWSETTINGSFOLDER, OnShowSettingsFolder) + ON_MESSAGE(MPT_WM_APP_UPDATECHECK_PROGRESS, OnUpdateCheckProgress) + ON_MESSAGE(MPT_WM_APP_UPDATECHECK_SUCCESS, OnUpdateCheckSuccess) + ON_MESSAGE(MPT_WM_APP_UPDATECHECK_FAILURE, OnUpdateCheckFailure) ON_COMMAND(ID_HELPSHOW, OnHelp) ON_COMMAND_RANGE(ID_MRU_LIST_FIRST, ID_MRU_LIST_LAST, OnOpenMRUItem) @@ -2610,7 +2613,7 @@ void CMainFrame::OnInternetUpdate() //--------------------------------- { - CUpdateCheck::DoUpdateCheck(false); + CUpdateCheck::DoManualUpdateCheck(); } @@ -2621,6 +2624,32 @@ } +LRESULT CMainFrame::OnUpdateCheckProgress(WPARAM wparam, LPARAM lparam) +//--------------------------------------------------------------------- +{ + MPT_UNREFERENCED_PARAMETER(wparam); + MPT_UNREFERENCED_PARAMETER(lparam); + return TRUE; +} + + +LRESULT CMainFrame::OnUpdateCheckSuccess(WPARAM wparam, LPARAM lparam) +//-------------------------------------------------------------------- +{ + TrackerSettings::Instance().UpdateLastUpdateCheck = mpt::Date::Unix(CUpdateCheck::ResultFromMessage(wparam, lparam).CheckTime); + CUpdateCheck::ShowSuccessGUI(wparam, lparam); + return TRUE; +} + + +LRESULT CMainFrame::OnUpdateCheckFailure(WPARAM wparam, LPARAM lparam) +//-------------------------------------------------------------------- +{ + CUpdateCheck::ShowFailureGUI(wparam, lparam); + return TRUE; +} + + void CMainFrame::OnHelp() //----------------------- { Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2015-06-30 08:47:59 UTC (rev 5385) @@ -55,6 +55,13 @@ enum { + MPT_WM_APP_UPDATECHECK_PROGRESS = WM_APP + 1, + MPT_WM_APP_UPDATECHECK_SUCCESS = WM_APP + 2, + MPT_WM_APP_UPDATECHECK_FAILURE = WM_APP + 3, +}; + +enum +{ CTRLMSG_BASE=0, CTRLMSG_SETVIEWWND, CTRLMSG_ACTIVATEPAGE, @@ -609,6 +616,9 @@ afx_msg void OnViewEditHistory(); afx_msg void OnInternetUpdate(); afx_msg void OnShowSettingsFolder(); + afx_msg LRESULT OnUpdateCheckProgress(WPARAM wparam, LPARAM lparam); + afx_msg LRESULT OnUpdateCheckSuccess(WPARAM wparam, LPARAM lparam); + afx_msg LRESULT OnUpdateCheckFailure(WPARAM wparam, LPARAM lparam); afx_msg void OnHelp(); afx_msg void OnDropFiles(HDROP hDropInfo); //}}AFX_MSG Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2015-06-30 08:47:59 UTC (rev 5385) @@ -1053,10 +1053,7 @@ { // Update check - if(CUpdateCheck::GetUpdateCheckPeriod() != 0) - { - CUpdateCheck::DoUpdateCheck(true); - } + CUpdateCheck::DoAutoUpdateCheck(); // Open settings if the previous execution was with an earlier version. if(TrackerSettings::Instance().ShowSettingsOnNewVersion && (TrackerSettings::Instance().PreviousSettingsVersion < MptVersion::num)) Modified: trunk/OpenMPT/mptrack/Settings.h =================================================================== --- trunk/OpenMPT/mptrack/Settings.h 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/Settings.h 2015-06-30 08:47:59 UTC (rev 5385) @@ -479,10 +479,12 @@ } }; -inline bool operator < (const SettingPath &left, const SettingPath &right) -{ - return left.compare(right) < 0; -} +inline bool operator < (const SettingPath &left, const SettingPath &right) { return left.compare(right) < 0; } +inline bool operator <= (const SettingPath &left, const SettingPath &right) { return left.compare(right) <= 0; } +inline bool operator > (const SettingPath &left, const SettingPath &right) { return left.compare(right) > 0; } +inline bool operator >= (const SettingPath &left, const SettingPath &right) { return left.compare(right) >= 0; } +inline bool operator == (const SettingPath &left, const SettingPath &right) { return left.compare(right) == 0; } +inline bool operator != (const SettingPath &left, const SettingPath &right) { return left.compare(right) != 0; } class ISettingsBackend @@ -850,4 +852,45 @@ }; +#if defined(MPT_SETTINGS_CACHE) + +class SettingChangedNotifyGuard +{ +private: + SettingsContainer &conf; + SettingPath m_Path; + bool m_Registered; + ISettingChanged *m_Handler; +public: + SettingChangedNotifyGuard(SettingsContainer &conf, const SettingPath &path) + : conf(conf) + , m_Path(path) + , m_Registered(false) + , m_Handler(nullptr) + { + return; + } + void Register(ISettingChanged *handler) + { + if(m_Registered) + { + return; + } + m_Handler = handler; + conf.Register(m_Handler, m_Path); + m_Registered = true; + } + ~SettingChangedNotifyGuard() + { + if(m_Registered) + { + conf.UnRegister(m_Handler, m_Path); + m_Registered = false; + } + } +}; + +#endif // MPT_SETTINGS_CACHE + + OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-06-30 08:47:59 UTC (rev 5385) @@ -310,10 +310,10 @@ , pluginProjectPath(conf, "VST Plugins", "ProjectPath", std::wstring()) // Update , UpdateLastUpdateCheck(conf, "Update", "LastUpdateCheck", mpt::Date::Unix(time_t())) - , UpdateUpdateCheckPeriod(conf, "Update", "UpdateCheckPeriod", CUpdateCheck::GetUpdateCheckPeriod()) - , UpdateUpdateURL(conf, "Update", "UpdateURL", CUpdateCheck::GetUpdateURL()) - , UpdateSendGUID(conf, "Update", "SendGUID", CUpdateCheck::GetSendGUID()) - , UpdateShowUpdateHint(conf, "Update", "ShowUpdateHint", CUpdateCheck::GetShowUpdateHint()) + , UpdateUpdateCheckPeriod(conf, "Update", "UpdateCheckPeriod", 7) + , UpdateUpdateURL(conf, "Update", "UpdateURL", CUpdateCheck::defaultUpdateURL) + , UpdateSendGUID(conf, "Update", "SendGUID", true) + , UpdateShowUpdateHint(conf, "Update", "ShowUpdateHint", true) { // Effects @@ -386,9 +386,6 @@ PatternClipboard::SetClipboardSize(conf.Read<int32>("Pattern Editor", "NumClipboards", mpt::saturate_cast<int32>(PatternClipboard::GetClipboardSize()))); - // Update - CUpdateCheck::SetUpdateSettings(UpdateLastUpdateCheck.Get(), UpdateUpdateCheckPeriod, UpdateUpdateURL, UpdateSendGUID, UpdateShowUpdateHint); - // Chords LoadChords(Chords); @@ -941,15 +938,6 @@ conf.Write<int32>("Pattern Editor", "NumClipboards", mpt::saturate_cast<int32>(PatternClipboard::GetClipboardSize())); - // Update - { - UpdateLastUpdateCheck = mpt::Date::Unix(CUpdateCheck::GetLastUpdateCheck()); - UpdateUpdateCheckPeriod = CUpdateCheck::GetUpdateCheckPeriod(); - UpdateUpdateURL = CUpdateCheck::GetUpdateURL(); - UpdateSendGUID = CUpdateCheck::GetSendGUID(); - UpdateShowUpdateHint = CUpdateCheck::GetShowUpdateHint(); - } - // Effects #ifndef NO_DSP conf.Write<int32>("Effects", "XBassDepth", m_DSPSettings.m_nXBassDepth); Modified: trunk/OpenMPT/mptrack/UpdateCheck.cpp =================================================================== --- trunk/OpenMPT/mptrack/UpdateCheck.cpp 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/UpdateCheck.cpp 2015-06-30 08:47:59 UTC (rev 5385) @@ -16,74 +16,108 @@ #include "TrackerSettings.h" // Setup dialog stuff #include "Mainfrm.h" +#include "../common/thread.h" OPENMPT_NAMESPACE_BEGIN -const CString CUpdateCheck::defaultUpdateURL = "http://update.openmpt.org/check/$VERSION/$GUID"; +const TCHAR *const CUpdateCheck::defaultUpdateURL = _T("http://update.openmpt.org/check/$VERSION/$GUID"); -// Static configuration variables -time_t CUpdateCheck::lastUpdateCheck = 0; -int CUpdateCheck::updateCheckPeriod = 7; -CString CUpdateCheck::updateBaseURL = CUpdateCheck::defaultUpdateURL; -bool CUpdateCheck::sendGUID = true; -bool CUpdateCheck::showUpdateHint = true; +mpt::atomic_int32_t CUpdateCheck::s_InstanceCount; -// Start update check -void CUpdateCheck::DoUpdateCheck(bool autoUpdate) -//----------------------------------------------- +int32 CUpdateCheck::GetNumCurrentRunningInstances() +//------------------------------------------------- { - CUpdateCheck *that = new (std::nothrow) CUpdateCheck(autoUpdate); - if(that != nullptr) - { - mpt::thread(MPT_DELEGATE(CUpdateCheck, UpdateThread, that)).detach(); - } + return s_InstanceCount.load(); } -// Run update check (independent thread) -void CUpdateCheck::UpdateThread() -//------------------------------- +// Start update check +void CUpdateCheck::StartUpdateCheckAsync(bool isAutoUpdate) +//--------------------------------------------------------- { - if(isAutoUpdate) { - mpt::SetCurrentThreadPriority(mpt::ThreadPriorityLower); - } - - const time_t now = time(nullptr); - - if(isAutoUpdate) - { + int updateCheckPeriod = TrackerSettings::Instance().UpdateUpdateCheckPeriod; + if(updateCheckPeriod == 0) + { + return; + } // Do we actually need to run the update check right now? - if(CUpdateCheck::updateCheckPeriod == 0 || difftime(now, CUpdateCheck::lastUpdateCheck) < (double)(CUpdateCheck::updateCheckPeriod * 86400)) + const time_t now = time(nullptr); + if(difftime(now, TrackerSettings::Instance().UpdateLastUpdateCheck.Get()) < (double)(updateCheckPeriod * 86400)) { - Terminate(); return; } // Never ran update checks before, so we notify the user of automatic update checks. - if(CUpdateCheck::showUpdateHint) + if(TrackerSettings::Instance().UpdateShowUpdateHint) { - CUpdateCheck::showUpdateHint = false; + TrackerSettings::Instance().UpdateShowUpdateHint = false; CString msg; - msg.Format(_T("OpenMPT would like to check for updates now, proceed?\n\nNote: In the future, OpenMPT will check for updates every %d days. If you do not want this, you can disable update checks in the setup."), CUpdateCheck::updateCheckPeriod); + msg.Format(_T("OpenMPT would like to check for updates now, proceed?\n\nNote: In the future, OpenMPT will check for updates every %d days. If you do not want this, you can disable update checks in the setup."), TrackerSettings::Instance().UpdateUpdateCheckPeriod.Get()); if(Reporting::Confirm(msg, "OpenMPT Internet Update") == cnfNo) { - CUpdateCheck::lastUpdateCheck = now; - Terminate(); + TrackerSettings::Instance().UpdateLastUpdateCheck = mpt::Date::Unix(now); return; } - } } - CUpdateCheck::showUpdateHint = false; + TrackerSettings::Instance().UpdateShowUpdateHint = false; + int32 expected = 0; + if(!s_InstanceCount.compare_exchange_strong(expected, 1)) + { + return; + } + + CUpdateCheck::Settings settings; + settings.window = CMainFrame::GetMainFrame(); + settings.msgProgress = MPT_WM_APP_UPDATECHECK_PROGRESS; + settings.msgSuccess = MPT_WM_APP_UPDATECHECK_SUCCESS; + settings.msgFailure = MPT_WM_APP_UPDATECHECK_FAILURE; + settings.autoUpdate = isAutoUpdate; + settings.updateBaseURL = TrackerSettings::Instance().UpdateUpdateURL; + settings.guidString = (TrackerSettings::Instance().UpdateSendGUID ? mpt::ToCString(TrackerSettings::Instance().gcsInstallGUID.Get()) : _T("anonymous")); + mpt::thread(CUpdateCheck::ThreadFunc(settings)).detach(); +} + + +CUpdateCheck::ThreadFunc::ThreadFunc(const CUpdateCheck::Settings &settings) +//-------------------------------------------------------------------------- + : settings(settings) +{ + return; +} + + +void CUpdateCheck::ThreadFunc::operator () () +//------------------------------------------- +{ + mpt::SetCurrentThreadPriority(settings.autoUpdate ? mpt::ThreadPriorityLower : mpt::ThreadPriorityNormal); + CUpdateCheck().CheckForUpdate(settings); +} + + +CUpdateCheck::CUpdateCheck() +//-------------------------- + : internetHandle(nullptr) + , connectionHandle(nullptr) +{ + return; +} + + +// Run update check (independent thread) +CUpdateCheck::Result CUpdateCheck::SearchUpdate(const CUpdateCheck::Settings &settings) +//------------------------------------------------------------------------------------- +{ + // Prepare UA / URL strings... const CString userAgent = CString(_T("OpenMPT ")) + MptVersion::str; - CString updateURL = CUpdateCheck::updateBaseURL; + CString updateURL = settings.updateBaseURL; CString versionStr = MptVersion::str; #ifdef _WIN64 versionStr.Append(_T("-win64")); @@ -100,20 +134,18 @@ #error "Platform-specific identifier missing" #endif updateURL.Replace(_T("$VERSION"), versionStr); - updateURL.Replace(_T("$GUID"), GetSendGUID() ? mpt::ToCString(TrackerSettings::Instance().gcsInstallGUID.Get()) : _T("anonymous")); + updateURL.Replace(_T("$GUID"), settings.guidString); // Establish a connection. internetHandle = InternetOpen(userAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(internetHandle == NULL) { - Die("Could not start update check:\n", GetLastError()); - return; + throw CUpdateCheck::Error("Could not start update check:\n", GetLastError()); } connectionHandle = InternetOpenUrl(internetHandle, updateURL, NULL, 0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_UI, 0); if(connectionHandle == NULL) { - Die("Could not establish connection:\n", GetLastError()); - return; + throw CUpdateCheck::Error("Could not establish connection:\n", GetLastError()); } // Retrieve HTTP status code. @@ -121,58 +153,47 @@ DWORD length = sizeof(statusCodeHTTP); if(HttpQueryInfo(connectionHandle, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&statusCodeHTTP, &length, NULL) == FALSE) { - Die("Could not retrieve HTTP header information:\n", GetLastError()); - return; + throw CUpdateCheck::Error("Could not retrieve HTTP header information:\n", GetLastError()); } if(statusCodeHTTP >= 400) { CString error; error.Format(_T("Version information could not be found on the server (HTTP status code %d). Maybe your version of OpenMPT is too old!"), statusCodeHTTP); - Die(error); - return; + throw CUpdateCheck::Error(error); } // Download data. std::string resultBuffer = ""; - char *downloadBuffer = new char[DOWNLOAD_BUFFER_SIZE]; - DWORD availableSize, bytesRead; + DWORD bytesRead = 0; do { // Query number of available bytes to download + DWORD availableSize = 0; if(InternetQueryDataAvailable(connectionHandle, &availableSize, 0, NULL) == FALSE) { - delete[] downloadBuffer; - Die("Error while downloading update information data:\n", GetLastError()); - return; + throw CUpdateCheck::Error("Error while downloading update information data:\n", GetLastError()); } LimitMax(availableSize, (DWORD)DOWNLOAD_BUFFER_SIZE); // Put downloaded bytes into our buffer + char downloadBuffer[DOWNLOAD_BUFFER_SIZE]; if(InternetReadFile(connectionHandle, downloadBuffer, availableSize, &bytesRead) == FALSE) { - delete[] downloadBuffer; - Die("Error while downloading update information data:\n", GetLastError()); - return; + throw CUpdateCheck::Error("Error while downloading update information data:\n", GetLastError()); } + resultBuffer.append(downloadBuffer, downloadBuffer + bytesRead); - resultBuffer.append(downloadBuffer, downloadBuffer + availableSize); Sleep(1); - } while(bytesRead != 0); - delete[] downloadBuffer; + // Now, evaluate the downloaded data. + CUpdateCheck::Result result; + result.UpdateAvailable = false; + result.CheckTime = time(nullptr); CString resultData = mpt::ToCString(mpt::CharsetUTF8, resultBuffer); - // Now, evaluate the downloaded data. - if(!resultData.CompareNoCase(_T("noupdate"))) + if(resultData.CompareNoCase(_T("noupdate")) != 0) { - if(!isAutoUpdate) - { - Reporting::Information("You already have the latest version of OpenMPT installed.", "OpenMPT Internet Update"); - } - } else - { - CString releaseVersion, releaseDate, releaseURL; CString token; int parseStep = 0, parsePos = 0; while((token = resultData.Tokenize(_T("\n"), parsePos)) != "") @@ -183,74 +204,133 @@ case 0: if(token.CompareNoCase(_T("update")) != 0) { - Die("Could not understand server response. Maybe your version of OpenMPT is too old!"); - return; + throw CUpdateCheck::Error("Could not understand server response. Maybe your version of OpenMPT is too old!"); } break; case 1: - releaseVersion = token; + result.Version = token; break; case 2: - releaseDate = token; + result.Date = token; break; case 3: - releaseURL = token; + result.URL = token; break; } } - if(parseStep >= 4) + if(parseStep < 4) { - resultData.Format(_T("A new version is available!\nOpenMPT %s has been released on %s. Would you like to visit %s for more information?"), releaseVersion, releaseDate, releaseURL); - if(Reporting::Confirm(resultData, "OpenMPT Internet Update") == cnfYes) - { - CTrackApp::OpenURL(releaseURL); - } - } else - { - Die("Could not understand server response. Maybe your version of OpenMPT is too old!"); - return; + throw CUpdateCheck::Error("Could not understand server response. Maybe your version of OpenMPT is too old!"); } + result.UpdateAvailable = true; } + return result; +} - CUpdateCheck::lastUpdateCheck = now; - Terminate(); +void CUpdateCheck::CheckForUpdate(const CUpdateCheck::Settings &settings) +//----------------------------------------------------------------------- +{ + // \xEDncremented before starting the thread + MPT_ASSERT(s_InstanceCount.load() >= 1); + CUpdateCheck::Result result; + settings.window->SendMessage(settings.msgProgress, settings.autoUpdate ? 1 : 0, s_InstanceCount.load()); + try + { + result = SearchUpdate(settings); + } catch(const CUpdateCheck::Error &e) + { + settings.window->SendMessage(settings.msgFailure, settings.autoUpdate ? 1 : 0, reinterpret_cast<LPARAM>(&e)); + s_InstanceCount.fetch_sub(1); + MPT_ASSERT(s_InstanceCount.load() >= 0); + return; + } + settings.window->SendMessage(settings.msgSuccess, settings.autoUpdate ? 1 : 0, reinterpret_cast<LPARAM>(&result)); + s_InstanceCount.fetch_sub(1); + MPT_ASSERT(s_InstanceCount.load() >= 0); } -// Die with error message -void CUpdateCheck::Die(CString errorMessage) -//------------------------------------------ +CUpdateCheck::Result CUpdateCheck::ResultFromMessage(WPARAM /*wparam*/ , LPARAM lparam) +//------------------------------------------------------------------------------------- { - if(!isAutoUpdate) + const CUpdateCheck::Result &result = *reinterpret_cast<CUpdateCheck::Result*>(lparam); + return result; +} + + +CUpdateCheck::Error CUpdateCheck::ErrorFromMessage(WPARAM /*wparam*/ , LPARAM lparam) +//----------------------------------------------------------------------------------- +{ + const CUpdateCheck::Error &error = *reinterpret_cast<CUpdateCheck::Error*>(lparam); + return error; +} + + +void CUpdateCheck::ShowSuccessGUI(WPARAM wparam, LPARAM lparam) +//------------------------------------------------------------- +{ + const CUpdateCheck::Result &result = *reinterpret_cast<CUpdateCheck::Result*>(lparam); + bool autoUpdate = (wparam ? true : false); + if(result.UpdateAvailable) { - Reporting::Error(errorMessage, "OpenMPT Internet Update Error"); + if(Reporting::Confirm( + MPT_UFORMAT("A new version is available!\nOpenMPT %1 has been released on %2. Would you like to visit %3 for more information?" + , result.Version, result.Date, result.URL + ), MPT_USTRING("OpenMPT Internet Update")) == cnfYes) + { + CTrackApp::OpenURL(result.URL); + } + } else if(!autoUpdate) + { + Reporting::Information(MPT_USTRING("You already have the latest version of OpenMPT installed."), MPT_USTRING("OpenMPT Internet Update")); } - Terminate(); } -// Die with WinINet error message -void CUpdateCheck::Die(CString errorMessage, DWORD errorCode) -//----------------------------------------------------------- +void CUpdateCheck::ShowFailureGUI(WPARAM wparam, LPARAM lparam) +//------------------------------------------------------------- { - if(!isAutoUpdate) + const CUpdateCheck::Error &error = *reinterpret_cast<CUpdateCheck::Error*>(lparam); + bool autoUpdate = (wparam ? true : false); + if(!autoUpdate) { - void *lpMsgBuf; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - GetModuleHandle(TEXT("wininet.dll")), errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); - - errorMessage.Append((LPTSTR)lpMsgBuf); - LocalFree(lpMsgBuf); + Reporting::Error(mpt::ToUnicode(mpt::CharsetUTF8, error.what() ? std::string(error.what()) : std::string()), MPT_USTRING("OpenMPT Internet Update Error")); } - Die(errorMessage); } -// Kill update object -void CUpdateCheck::Terminate() -//---------------------------- +CUpdateCheck::Error::Error(CString errorMessage) +//---------------------------------------------- + : std::runtime_error(mpt::ToCharset(mpt::CharsetUTF8, errorMessage)) { + return; +} + + +CUpdateCheck::Error::Error(CString errorMessage, DWORD errorCode) +//--------------------------------------------------------------- + : std::runtime_error(mpt::ToCharset(mpt::CharsetUTF8, FormatErrorCode(errorMessage, errorCode))) +{ + return; +} + + +CString CUpdateCheck::Error::FormatErrorCode(CString errorMessage, DWORD errorCode) +//--------------------------------------------------------------------------------- +{ + void *lpMsgBuf; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + GetModuleHandle(TEXT("wininet.dll")), errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); + errorMessage.Append((LPTSTR)lpMsgBuf); + LocalFree(lpMsgBuf); + return errorMessage; +} + + +CUpdateCheck::~CUpdateCheck() +//--------------------------- +{ if(connectionHandle != nullptr) { InternetCloseHandle(connectionHandle); @@ -261,7 +341,6 @@ InternetCloseHandle(internetHandle); internetHandle = nullptr; } - delete this; } @@ -280,43 +359,70 @@ END_MESSAGE_MAP() +CUpdateSetupDlg::CUpdateSetupDlg() +//-------------------------------- + : CPropertyPage(IDD_OPTIONS_UPDATE) + , m_SettingChangedNotifyGuard(theApp.GetSettings(), TrackerSettings::Instance().UpdateLastUpdateCheck.GetPath()) +{ + return; +} + + BOOL CUpdateSetupDlg::OnInitDialog() //---------------------------------- { CPropertyPage::OnInitDialog(); int radioID = 0; - switch(CUpdateCheck::GetUpdateCheckPeriod()) + int periodDays = TrackerSettings::Instance().UpdateUpdateCheckPeriod; + if(periodDays >= 30) { - case 0: radioID = IDC_RADIO1; break; - case 1: radioID = IDC_RADIO2; break; - case 7: radioID = IDC_RADIO3; break; - case 31: radioID = IDC_RADIO4; break; + radioID = IDC_RADIO4; + } else if(periodDays >= 7) + { + radioID = IDC_RADIO3; + } else if(periodDays >= 1) + { + radioID = IDC_RADIO2; + } else + { + radioID = IDC_RADIO1; } CheckRadioButton(IDC_RADIO1, IDC_RADIO4, radioID); - CheckDlgButton(IDC_CHECK1, CUpdateCheck::GetSendGUID() ? BST_CHECKED : BST_UNCHECKED); - SetDlgItemText(IDC_EDIT1, CUpdateCheck::GetUpdateURL()); + CheckDlgButton(IDC_CHECK1, TrackerSettings::Instance().UpdateSendGUID ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemText(IDC_EDIT1, TrackerSettings::Instance().UpdateUpdateURL.Get()); - const time_t t = CUpdateCheck::GetLastUpdateCheck(); - if(t > 0) + m_SettingChangedNotifyGuard.Register(this); + SettingChanged(TrackerSettings::Instance().UpdateLastUpdateCheck.GetPath()); + + return TRUE; +} + + +void CUpdateSetupDlg::SettingChanged(const SettingPath &changedPath) +//------------------------------------------------------------------ +{ + if(changedPath == TrackerSettings::Instance().UpdateLastUpdateCheck.GetPath()) { - CString updateText; - const tm* const lastUpdate = localtime(&t); - if(lastUpdate != nullptr) + const time_t t = TrackerSettings::Instance().UpdateLastUpdateCheck.Get(); + if(t > 0) { - updateText.Format(_T("The last successful update check was run on %04d-%02d-%02d, %02d:%02d."), lastUpdate->tm_year + 1900, lastUpdate->tm_mon + 1, lastUpdate->tm_mday, lastUpdate->tm_hour, lastUpdate->tm_min); - SetDlgItemText(IDC_LASTUPDATE, updateText); + CString updateText; + const tm* const lastUpdate = localtime(&t); + if(lastUpdate != nullptr) + { + updateText.Format(_T("The last successful update check was run on %04d-%02d-%02d, %02d:%02d."), lastUpdate->tm_year + 1900, lastUpdate->tm_mon + 1, lastUpdate->tm_mday, lastUpdate->tm_hour, lastUpdate->tm_min); + SetDlgItemText(IDC_LASTUPDATE, updateText); + } } } - - return TRUE; } void CUpdateSetupDlg::OnOK() //-------------------------- { - int updateCheckPeriod = CUpdateCheck::GetUpdateCheckPeriod(); + int updateCheckPeriod = TrackerSettings::Instance().UpdateUpdateCheckPeriod; if(IsDlgButtonChecked(IDC_RADIO1)) updateCheckPeriod = 0; if(IsDlgButtonChecked(IDC_RADIO2)) updateCheckPeriod = 1; if(IsDlgButtonChecked(IDC_RADIO3)) updateCheckPeriod = 7; @@ -324,7 +430,10 @@ CString updateURL; GetDlgItemText(IDC_EDIT1, updateURL); - CUpdateCheck::SetUpdateSettings(CUpdateCheck::GetLastUpdateCheck(), updateCheckPeriod, updateURL, IsDlgButtonChecked(IDC_CHECK1) != BST_UNCHECKED, CUpdateCheck::GetShowUpdateHint()); + + TrackerSettings::Instance().UpdateUpdateCheckPeriod = updateCheckPeriod; + TrackerSettings::Instance().UpdateUpdateURL = updateURL; + TrackerSettings::Instance().UpdateSendGUID = (IsDlgButtonChecked(IDC_CHECK1) != BST_UNCHECKED); CPropertyPage::OnOK(); } Modified: trunk/OpenMPT/mptrack/UpdateCheck.h =================================================================== --- trunk/OpenMPT/mptrack/UpdateCheck.h 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/UpdateCheck.h 2015-06-30 08:47:59 UTC (rev 5385) @@ -13,62 +13,109 @@ #include <WinInet.h> #include <time.h> +#include "../common/mptAtomic.h" #include "resource.h" -#include "../common/thread.h" +#include "Settings.h" OPENMPT_NAMESPACE_BEGIN -#define DOWNLOAD_BUFFER_SIZE 256 +#define DOWNLOAD_BUFFER_SIZE 4096 //================ class CUpdateCheck //================ { + +private: + + static mpt::atomic_int32_t s_InstanceCount; + public: - static const CString defaultUpdateURL; + static const TCHAR *const defaultUpdateURL; - static void DoUpdateCheck(bool autoUpdate); + int32 GetNumCurrentRunningInstances(); - static time_t GetLastUpdateCheck() { return lastUpdateCheck; }; - static int GetUpdateCheckPeriod() { return updateCheckPeriod; }; - static CString GetUpdateURL() { return updateBaseURL; }; - static bool GetSendGUID() { return sendGUID; } - static bool GetShowUpdateHint() { return showUpdateHint; }; - static void SetUpdateSettings(time_t last, int period, CString url, bool sendID, bool showHint) - { lastUpdateCheck = last; updateCheckPeriod = period; updateBaseURL = url; sendGUID = sendID; showUpdateHint = showHint; }; + static void DoAutoUpdateCheck() { StartUpdateCheckAsync(true); } + static void DoManualUpdateCheck() { StartUpdateCheckAsync(false); } +public: + + struct Settings + { + CWnd *window; + UINT msgProgress; + UINT msgSuccess; + UINT msgFailure; + bool autoUpdate; + CString updateBaseURL; // URL where the version check should be made. + CString guidString; // Send GUID to collect basic stats or "anonymous" + }; + + class Error + : public std::runtime_error + { + public: + Error(CString errorMessage); + Error(CString errorMessage, DWORD errorCode); + protected: + static CString FormatErrorCode(CString errorMessage, DWORD errorCode); + }; + + struct Result + { + time_t CheckTime; + bool UpdateAvailable; + CString Version; + CString Date; + CString URL; + Result() + : CheckTime(time_t()) + , UpdateAvailable(false) + { + return; + } + }; + + static CUpdateCheck::Result ResultFromMessage(WPARAM wparam, LPARAM lparam); + static CUpdateCheck::Error ErrorFromMessage(WPARAM wparam, LPARAM lparam); + + static void ShowSuccessGUI(WPARAM wparam, LPARAM lparam); + static void ShowFailureGUI(WPARAM wparam, LPARAM lparam); + protected: - // Static configuration variables - static time_t lastUpdateCheck; // Time of last successful update check - static int updateCheckPeriod; // Check for updates every x days - static CString updateBaseURL; // URL where the version check should be made. - static bool sendGUID; // Send GUID to collect basic stats - static bool showUpdateHint; // Show hint on first automatic update + static void StartUpdateCheckAsync(bool autoUpdate); - bool isAutoUpdate; // Are we running an automatic update check? + struct ThreadFunc + { + CUpdateCheck::Settings settings; + ThreadFunc(const CUpdateCheck::Settings &settings); + void operator () (); + }; // Runtime resource handles - HINTERNET internetHandle, connectionHandle; + HINTERNET internetHandle; + HINTERNET connectionHandle; - // Force creation via "new" as we're using "delete this". Use CUpdateCheck::DoUpdateCheck to create an object. - CUpdateCheck(bool autoUpdate) : internetHandle(nullptr), connectionHandle(nullptr), isAutoUpdate(autoUpdate) { } + CUpdateCheck(); + + void CheckForUpdate(const CUpdateCheck::Settings &settings); - void UpdateThread(); - void Die(CString errorMessage); - void Die(CString errorMessage, DWORD errorCode); - void Terminate(); + CUpdateCheck::Result SearchUpdate(const CUpdateCheck::Settings &settings); // may throw + + ~CUpdateCheck(); + }; //========================================= class CUpdateSetupDlg: public CPropertyPage //========================================= + , public ISettingChanged { public: - CUpdateSetupDlg():CPropertyPage(IDD_OPTIONS_UPDATE) - { }; + CUpdateSetupDlg(); protected: virtual BOOL OnInitDialog(); @@ -77,7 +124,11 @@ afx_msg void OnSettingsChanged() { SetModified(TRUE); } afx_msg void OnCheckNow(); afx_msg void OnResetURL(); + virtual void SettingChanged(const SettingPath &changedPath); DECLARE_MESSAGE_MAP() + +private: + SettingChangedNotifyGuard m_SettingChangedNotifyGuard; }; Modified: trunk/OpenMPT/mptrack/WelcomeDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/WelcomeDialog.cpp 2015-06-29 14:59:24 UTC (rev 5384) +++ trunk/OpenMPT/mptrack/WelcomeDialog.cpp 2015-06-30 08:47:59 UTC (rev 5385) @@ -149,7 +149,7 @@ CDialog::OnOK(); bool runUpdates = IsDlgButtonChecked(IDC_CHECK1) != BST_UNCHECKED; - CUpdateCheck::SetUpdateSettings(0, runUpdates ? 7 : 0, CUpdateCheck::GetUpdateURL(), CUpdateCheck::GetSendGUID(), CUpdateCheck::GetShowUpdateHint()); + TrackerSettings::Instance().UpdateUpdateCheckPeriod = (runUpdates ? 7 : 0); if(IsDlgButtonChecked(IDC_CHECK2) != BST_UNCHECKED) { FontSetting font = TrackerSettings::Instance().patternFont; @@ -167,7 +167,7 @@ } if(runUpdates) { - CUpdateCheck::DoUpdateCheck(true); + CUpdateCheck::DoAutoUpdateCheck(); } CMainFrame::GetMainFrame()->PostMessage(WM_MOD_INVALIDATEPATTERNS, HINT_MPTOPTIONS); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-07-01 19:41:09
|
Revision: 5387 http://sourceforge.net/p/modplug/code/5387 Author: saga-games Date: 2015-07-01 19:41:03 +0000 (Wed, 01 Jul 2015) Log Message: ----------- [Fix] Instrument tab: When creating the first instrument failed, revert adding the instrument slot. [Fix] General tab: Setting plugin gain didn't update the display (http://bugs.openmpt.org/view.php?id=688) Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/View_gen.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-06-30 23:21:54 UTC (rev 5386) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2015-07-01 19:41:03 UTC (rev 5387) @@ -1429,8 +1429,6 @@ BOOL CCtrlInstruments::OpenInstrument(const mpt::PathString &fileName) //-------------------------------------------------------------------- { - BOOL bFirst, bOk; - BeginWaitCursor(); InputFile f(fileName); if(!f.IsValid()) @@ -1438,29 +1436,37 @@ EndWaitCursor(); return FALSE; } - bFirst = FALSE; FileReader file = GetFileReader(f); - bOk = FALSE; + bool first = false, ok = false; if (file.IsValid()) { if (!m_sndFile.GetNumInstruments()) { - bFirst = TRUE; + first = true; m_sndFile.m_nInstruments = 1; - m_NoteMap.SetCurrentInstrument(1); m_modDoc.SetModified(); } if (!m_nInstrument) m_nInstrument = 1; if (m_sndFile.ReadInstrumentFromFile(m_nInstrument, file, TrackerSettings::Instance().m_MayNormalizeSamplesOnLoad)) { - bOk = TRUE; + ok = true; } } + if(!ok && first) + { + // Undo adding the instrument + delete m_sndFile.Instruments[1]; + m_sndFile.m_nInstruments = 0; + } else if(ok && first) + { + m_NoteMap.SetCurrentInstrument(1); + } + EndWaitCursor(); - if (bOk) + if (ok) { TrackerSettings::Instance().PathInstruments.SetWorkingDir(fileName, true); ModInstrument *pIns = m_sndFile.Instruments[m_nInstrument]; @@ -1481,15 +1487,15 @@ SetCurrentInstrument(m_nInstrument); InstrumentHint hint = InstrumentHint().Info().Envelope().Names(); - if(bFirst) hint.ModType(); + if(first) hint.ModType(); SetModified(hint, true); - } else bOk = FALSE; + } else ok = FALSE; } SampleHint hint = SampleHint().Info().Data().Names(); - if (bFirst) hint.ModType(); + if (first) hint.ModType(); m_modDoc.UpdateAllViews(nullptr, hint, this); - if (!bOk) ErrorBox(IDS_ERR_FILETYPE, this); - return bOk; + if (!ok) ErrorBox(IDS_ERR_FILETYPE, this); + return ok; } Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2015-06-30 23:21:54 UTC (rev 5386) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2015-07-01 19:41:03 UTC (rev 5387) @@ -807,7 +807,7 @@ float fValue = 0.1f * (float)gain; _stprintf(s, _T("Gain: x %1.1f"), fValue); - SetDlgItemText(IDC_EDIT16, s); + SetDlgItemText(IDC_STATIC2, s); SetPluginModified(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-07-07 15:06:33
|
Revision: 5391 http://sourceforge.net/p/modplug/code/5391 Author: saga-games Date: 2015-07-07 15:06:26 +0000 (Tue, 07 Jul 2015) Log Message: ----------- [Mod] Pattern tab: Reset beat highlight together with measure higlight (http://bugs.openmpt.org/view.php?id=662) [Imp] Pattern tab: Smooth scrolling also stops scrolling now when staying on the same row. Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-07-05 21:39:00 UTC (rev 5390) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2015-07-07 15:06:26 UTC (rev 5391) @@ -163,11 +163,12 @@ if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SMOOTHSCROLL) != 0 // Actually using the smooth scroll feature && (m_Status & (psFollowSong | psDragActive)) == psFollowSong // Not drawing a selection during playback && (m_nMidRow != 0 || GetYScrollPos() > 0) // If active row is not centered, only scroll when display position is actually not at the top - && IsLiveRecord()) // Actually playing live (not paused or stepping) + && IsLiveRecord() // Actually playing live (not paused or stepping) + && m_nNextPlayRow != m_nPlayRow) // Don't scroll if we stay on the same row { uint32 tick = m_nPlayTick; // Avoid jerky animation with backwards-going patterns - if(m_smoothScrollBackwards) tick = m_nTicksOnRow - m_nPlayTick - 1; + if(m_nNextPlayRow == m_nPlayRow - 1) tick = m_nTicksOnRow - m_nPlayTick - 1; return Util::muldivr_unsigned(m_szCell.cy, tick, std::max(1u, m_nTicksOnRow)); } return 0; @@ -822,19 +823,20 @@ nMeasure = sndFile.Patterns[nPattern].GetRowsPerMeasure(); } // secondary highlight (beats) + ROWINDEX highlightRow = compRow % nMeasure; if ((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_2NDHIGHLIGHT) - && (nBeat) && (nBeat < numRows)) + && nBeat > 0) { - if(!(compRow % nBeat)) + if((highlightRow % nBeat) == 0) { row_bkcol = MODCOLOR_2NDHIGHLIGHT; } } // primary highlight (measures) if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_STDHIGHLIGHT) - && (nMeasure) && (nMeasure < numRows)) + && nMeasure > 0) { - if(!(compRow % nMeasure)) + if(highlightRow == 0) { row_bkcol = MODCOLOR_BACKHILIGHT; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-07-05 21:39:00 UTC (rev 5390) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-07-07 15:06:26 UTC (rev 5391) @@ -184,14 +184,13 @@ memset(splitActiveNoteChannel, 0xFF, sizeof(splitActiveNoteChannel)); memset(activeNoteChannel, 0xFF, sizeof(activeNoteChannel)); m_nPlayPat = PATTERNINDEX_INVALID; - m_nPlayRow = 0; + m_nPlayRow = m_nNextPlayRow = 0; m_nPlayTick = 0; m_nTicksOnRow = 1; m_nMidRow = 0; m_nDragItem = 0; m_bInItemRect = false; m_bContinueSearch = false; - m_smoothScrollBackwards = false; m_Status = psShowPluginNames; m_nXScroll = m_nYScroll = 0; m_nPattern = 0; @@ -3764,12 +3763,13 @@ } // Simple detection of backwards-going patterns to avoid jerky animation - m_smoothScrollBackwards = false; + m_nNextPlayRow = nRow + 1; if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_SMOOTHSCROLL) && pSndFile->Patterns.IsValidPat(nPat)) { for(const ModCommand *m = pSndFile->Patterns[nPat].GetRow(nRow), *mEnd = m + pSndFile->GetNumChannels(); m != mEnd; m++) { - if(m->command == CMD_PATTERNBREAK) m_smoothScrollBackwards = (m->param == nRow - 1); + if(m->command == CMD_PATTERNBREAK) m_nNextPlayRow = m->param; + else if(m->command == CMD_POSITIONJUMP && pSndFile->GetType() == MOD_TYPE_XM) m_nNextPlayRow = 0; } } Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-07-05 21:39:00 UTC (rev 5390) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-07-07 15:06:26 UTC (rev 5391) @@ -165,7 +165,7 @@ CRect m_oldClient; UINT m_nMidRow, m_nSpacing, m_nAccelChar, m_nLastPlayedRow, m_nLastPlayedOrder; FlagSet<PatternStatus> m_Status; - ROWINDEX m_nPlayRow; + ROWINDEX m_nPlayRow, m_nNextPlayRow; uint32 m_nPlayTick, m_nTicksOnRow; PATTERNINDEX m_nPattern, m_nPlayPat; ORDERINDEX m_nOrder; @@ -190,7 +190,6 @@ DWORD m_dwLastNoteEntryTime; //rewbs.customkeys bool m_bLastNoteEntryBlocked : 1; bool m_bContinueSearch : 1, m_bWholePatternFitsOnScreen : 1; - bool m_smoothScrollBackwards : 1; ModCommand m_PCNoteEditMemory; // PC Note edit memory static ModCommand m_cmdOld; // Quick cursor copy/paste data This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-07-07 22:11:55
|
Revision: 5393 http://sourceforge.net/p/modplug/code/5393 Author: saga-games Date: 2015-07-07 22:11:49 +0000 (Tue, 07 Jul 2015) Log Message: ----------- [Fix] Apply current RPB setting when previewing tempo swing so that it actully plays at the right tempo. Modified Paths: -------------- trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp Modified: trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp 2015-07-07 15:27:03 UTC (rev 5392) +++ trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp 2015-07-07 22:11:49 UTC (rev 5393) @@ -570,12 +570,22 @@ void CPatternPropertiesDlg::OnTempoSwing() //---------------------------------------- { - m_tempoSwing.resize(GetDlgItemInt(IDC_ROWSPERBEAT), TempoSwing::Unity); + CPattern &pat = modDoc.GetrSoundFile().Patterns[m_nPattern]; + const ROWINDEX oldRPB = pat.GetRowsPerBeat(); + const ROWINDEX oldRPM = pat.GetRowsPerMeasure(); + + // Temporarily apply new tempo signature for preview + ROWINDEX newRPB = std::max(1u, GetDlgItemInt(IDC_ROWSPERBEAT)); + ROWINDEX newRPM = std::max(newRPB, GetDlgItemInt(IDC_ROWSPERMEASURE)); + pat.SetSignature(newRPB, newRPM); + + m_tempoSwing.resize(newRPB, TempoSwing::Unity); CTempoSwingDlg dlg(this, m_tempoSwing, modDoc.GetrSoundFile(), m_nPattern); if(dlg.DoModal() == IDOK) { m_tempoSwing = dlg.m_tempoSwing; } + pat.SetSignature(oldRPB, oldRPM); } Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-07-07 15:27:03 UTC (rev 5392) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-07-07 22:11:49 UTC (rev 5393) @@ -284,12 +284,26 @@ void CModTypeDlg::OnTempoSwing() //------------------------------ { + const ROWINDEX oldRPB = sndFile.m_nDefaultRowsPerBeat; + const ROWINDEX oldRPM = sndFile.m_nDefaultRowsPerMeasure; + const TempoMode oldMode = sndFile.m_nTempoMode; + + // Temporarily apply new tempo signature for preview + ROWINDEX newRPB = std::max(1u, GetDlgItemInt(IDC_ROWSPERBEAT)); + ROWINDEX newRPM = std::max(newRPB, GetDlgItemInt(IDC_ROWSPERMEASURE)); + sndFile.m_nDefaultRowsPerBeat = newRPM; + sndFile.m_nDefaultRowsPerMeasure = newRPM; + sndFile.m_nTempoMode = tempoModeModern; + m_tempoSwing.resize(GetDlgItemInt(IDC_ROWSPERBEAT), TempoSwing::Unity); CTempoSwingDlg dlg(this, m_tempoSwing, sndFile); if(dlg.DoModal() == IDOK) { m_tempoSwing = dlg.m_tempoSwing; } + sndFile.m_nDefaultRowsPerBeat = oldRPB; + sndFile.m_nDefaultRowsPerMeasure = oldRPM; + sndFile.m_nTempoMode = oldMode; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-07-07 23:42:08
|
Revision: 5394 http://sourceforge.net/p/modplug/code/5394 Author: saga-games Date: 2015-07-07 23:42:03 +0000 (Tue, 07 Jul 2015) Log Message: ----------- [Fix] Previous commit just made preview even worse. [Fix] Sample tab: Entering invalid loop point data went completely the opposite way as intended... Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-07-07 22:11:49 UTC (rev 5393) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-07-07 23:42:03 UTC (rev 5394) @@ -21,7 +21,7 @@ #include "View_smp.h" #include "SampleEditorDialogs.h" #include "dlg_misc.h" -#include "PSRatioCalc.h" //rewbs.timeStretchMods +#include "PSRatioCalc.h" #include "soundtouch/include/SoundTouch.h" #include "soundtouch/source/SoundTouchDLL/SoundTouchDLL.h" #include "smbPitchShift/smbPitchShift.h" @@ -2690,7 +2690,7 @@ if(IsLocked()) return; ModSample &sample = m_sndFile.GetSample(m_nSample); SmpLength start = GetDlgItemInt(IDC_EDIT1, NULL, FALSE), end = GetDlgItemInt(IDC_EDIT2, NULL, FALSE); - if(start < end || sample.uFlags[CHN_LOOP]) + if(start < end || !sample.uFlags[CHN_LOOP]) { const int n = m_ComboLoopType.GetCurSel(); sample.SetLoop(start, end, n > 0, n == 2, m_sndFile); Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-07-07 22:11:49 UTC (rev 5393) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2015-07-07 23:42:03 UTC (rev 5394) @@ -291,7 +291,7 @@ // Temporarily apply new tempo signature for preview ROWINDEX newRPB = std::max(1u, GetDlgItemInt(IDC_ROWSPERBEAT)); ROWINDEX newRPM = std::max(newRPB, GetDlgItemInt(IDC_ROWSPERMEASURE)); - sndFile.m_nDefaultRowsPerBeat = newRPM; + sndFile.m_nDefaultRowsPerBeat = newRPB; sndFile.m_nDefaultRowsPerMeasure = newRPM; sndFile.m_nTempoMode = tempoModeModern; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2015-07-10 18:22:55
|
Revision: 5397 http://sourceforge.net/p/modplug/code/5397 Author: manxorist Date: 2015-07-10 18:22:49 +0000 (Fri, 10 Jul 2015) Log Message: ----------- [Ref] Settings: Add Setting<T>::IsDefault() and related helpers. Modified Paths: -------------- trunk/OpenMPT/mptrack/Settings.cpp trunk/OpenMPT/mptrack/Settings.h Modified: trunk/OpenMPT/mptrack/Settings.cpp =================================================================== --- trunk/OpenMPT/mptrack/Settings.cpp 2015-07-10 11:10:11 UTC (rev 5396) +++ trunk/OpenMPT/mptrack/Settings.cpp 2015-07-10 18:22:49 UTC (rev 5397) @@ -146,6 +146,18 @@ return entry->second; } +bool SettingsContainer::IsDefaultSetting(const SettingPath &path) const +{ + ASSERT(theApp.InGuiThread()); + ASSERT(!CMainFrame::GetMainFrame() || (CMainFrame::GetMainFrame() && !CMainFrame::GetMainFrame()->InNotifyHandler())); // This is a slow path, use CachedSetting for stuff that is accessed in notify handler. + SettingsMap::iterator entry = map.find(path); + if(entry == map.end()) + { + return true; + } + return entry->second.IsDefault(); +} + void SettingsContainer::WriteSetting(const SettingPath &path, const SettingValue &val, SettingFlushMode flushMode) { ASSERT(theApp.InGuiThread()); Modified: trunk/OpenMPT/mptrack/Settings.h =================================================================== --- trunk/OpenMPT/mptrack/Settings.h 2015-07-10 11:10:11 UTC (rev 5396) +++ trunk/OpenMPT/mptrack/Settings.h 2015-07-10 18:22:49 UTC (rev 5397) @@ -403,6 +403,10 @@ { return defaultValue; } + bool IsDefault() const + { + return value == defaultValue; + } #endif // MPT_SETTINGS_CACHE_STORE_DEFAULTS bool IsDirty() const { @@ -534,6 +538,7 @@ void BackendsRemoveSetting(const SettingPath &path); void NotifyListeners(const SettingPath &path); SettingValue ReadSetting(const SettingPath &path, const SettingValue &def) const; + bool IsDefaultSetting(const SettingPath &path) const; void WriteSetting(const SettingPath &path, const SettingValue &val, SettingFlushMode flushMode); void ForgetSetting(const SettingPath &path); void RemoveSetting(const SettingPath &path); @@ -553,6 +558,14 @@ { return FromSettingValue<T>(ReadSetting(SettingPath(section, key), ToSettingValue<T>(def))); } + bool IsDefault(const SettingPath &path) const + { + return IsDefaultSetting(path); + } + bool IsDefault(const AnyStringLocale §ion, const AnyStringLocale &key) const + { + return IsDefaultSetting(SettingPath(section, key)); + } template <typename T> void Write(const SettingPath &path, const T &val, SettingFlushMode flushMode = SettingWriteBack) { @@ -657,6 +670,10 @@ { return conf.Read<T>(path); } + bool IsDefault() const + { + conf.IsDefault(path); + } template<typename Trhs> Setting & operator += (const Trhs &rhs) { T tmp = *this; tmp += rhs; *this = tmp; return *this; } template<typename Trhs> Setting & operator -= (const Trhs &rhs) { T tmp = *this; tmp -= rhs; *this = tmp; return *this; } template<typename Trhs> Setting & operator *= (const Trhs &rhs) { T tmp = *this; tmp *= rhs; *this = tmp; return *this; } @@ -722,6 +739,10 @@ { return value; } + bool IsDefault() const + { + conf.IsDefault(path); + } CachedSetting & Update() { value = conf.Read<T>(path); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-07-10 19:44:49
|
Revision: 5399 http://sourceforge.net/p/modplug/code/5399 Author: saga-games Date: 2015-07-10 19:44:42 +0000 (Fri, 10 Jul 2015) Log Message: ----------- [Ref] UNICODE fixes in key handling code [Fix] When upgrading from an older OpenMPT version with a default general tab height, the current default value was loaded and and the size difference from the old value was still added. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/KeyConfigDlg.cpp trunk/OpenMPT/mptrack/KeyConfigDlg.h trunk/OpenMPT/mptrack/TrackerSettings.cpp Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2015-07-10 18:48:59 UTC (rev 5398) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2015-07-10 19:44:42 UTC (rev 5399) @@ -1745,33 +1745,33 @@ } -CString KeyCombination::GetContextText(InputTargetContext ctx) -//------------------------------------------------------------ +const TCHAR *KeyCombination::GetContextText(InputTargetContext ctx) +//----------------------------------------------------------------- { switch(ctx) { - case kCtxAllContexts: return "Global Context"; - case kCtxViewGeneral: return "General Context [bottom]"; - case kCtxViewPatterns: return "Pattern Context [bottom]"; - case kCtxViewPatternsNote: return "Pattern Context [bottom] - Note Col"; - case kCtxViewPatternsIns: return "Pattern Context [bottom] - Ins Col"; - case kCtxViewPatternsVol: return "Pattern Context [bottom] - Vol Col"; - case kCtxViewPatternsFX: return "Pattern Context [bottom] - FX Col"; - case kCtxViewPatternsFXparam: return "Pattern Context [bottom] - Param Col"; - case kCtxViewSamples: return "Sample Context [bottom]"; - case kCtxViewInstruments: return "Instrument Context [bottom]"; - case kCtxViewComments: return "Comments Context [bottom]"; - case kCtxCtrlGeneral: return "General Context [top]"; - case kCtxCtrlPatterns: return "Pattern Context [top]"; - case kCtxCtrlSamples: return "Sample Context [top]"; - case kCtxCtrlInstruments: return "Instrument Context [top]"; - case kCtxCtrlComments: return "Comments Context [top]"; - case kCtxCtrlOrderlist: return "Orderlist"; - case kCtxVSTGUI: return "Plugin GUI Context"; - case kCtxChannelSettings: return "Quick Channel Settings Context"; + case kCtxAllContexts: return _T("Global Context"); + case kCtxViewGeneral: return _T("General Context [bottom]"); + case kCtxViewPatterns: return _T("Pattern Context [bottom]"); + case kCtxViewPatternsNote: return _T("Pattern Context [bottom] - Note Col"); + case kCtxViewPatternsIns: return _T("Pattern Context [bottom] - Ins Col"); + case kCtxViewPatternsVol: return _T("Pattern Context [bottom] - Vol Col"); + case kCtxViewPatternsFX: return _T("Pattern Context [bottom] - FX Col"); + case kCtxViewPatternsFXparam: return _T("Pattern Context [bottom] - Param Col"); + case kCtxViewSamples: return _T("Sample Context [bottom]"); + case kCtxViewInstruments: return _T("Instrument Context [bottom]"); + case kCtxViewComments: return _T("Comments Context [bottom]"); + case kCtxCtrlGeneral: return _T("General Context [top]"); + case kCtxCtrlPatterns: return _T("Pattern Context [top]"); + case kCtxCtrlSamples: return _T("Sample Context [top]"); + case kCtxCtrlInstruments: return _T("Instrument Context [top]"); + case kCtxCtrlComments: return _T("Comments Context [top]"); + case kCtxCtrlOrderlist: return _T("Orderlist"); + case kCtxVSTGUI: return _T("Plugin GUI Context"); + case kCtxChannelSettings: return _T("Quick Channel Settings Context"); case kCtxUnknownContext: - default: return "Unknown Context"; + default: return _T("Unknown Context"); } }; @@ -1779,24 +1779,24 @@ CString KeyCombination::GetKeyEventText(FlagSet<KeyEventType> event) //------------------------------------------------------------------ { - CString text=""; + CString text = _T(""); bool first = true; if (event & kKeyEventDown) { first=false; - text.Append("KeyDown"); + text.Append(_T("KeyDown")); } if (event & kKeyEventRepeat) { - if (!first) text.Append("|"); - text.Append("KeyHold"); + if (!first) text.Append(_T("|")); + text.Append(_T("KeyHold")); first=false; } if (event & kKeyEventUp) { - if (!first) text.Append("|"); - text.Append("KeyUp"); + if (!first) text.Append(_T("|")); + text.Append(_T("KeyUp")); } return text; @@ -1806,12 +1806,12 @@ CString KeyCombination::GetModifierText(UINT mod) //----------------------------------------------- { - CString text = ""; - if (mod & HOTKEYF_SHIFT) text.Append("Shift+"); - if (mod & HOTKEYF_CONTROL) text.Append("Ctrl+"); - if (mod & HOTKEYF_ALT) text.Append("Alt+"); - if (mod & HOTKEYF_EXT) text.Append("Win+"); // Feature: use Windows keys as modifier keys - if (mod & HOTKEYF_MIDI) text.Append("MidiCC:"); + CString text = _T(""); + if (mod & HOTKEYF_SHIFT) text.Append(_T("Shift+")); + if (mod & HOTKEYF_CONTROL) text.Append(_T("Ctrl+")); + if (mod & HOTKEYF_ALT) text.Append(_T("Alt+")); + if (mod & HOTKEYF_EXT) text.Append(_T("Win+")); // Feature: use Windows keys as modifier keys + if (mod & HOTKEYF_MIDI) text.Append(_T("MidiCC:")); return text; } @@ -1822,13 +1822,13 @@ CString keyText; keyText=GetModifierText(mod); if(mod & HOTKEYF_MIDI) - keyText.AppendFormat("%d",code); + keyText.AppendFormat(_T("%u"),code); else keyText.Append(CHotKeyCtrl::GetKeyName(code, IsExtended(code))); //HACK: - if (keyText == "Ctrl+CTRL") keyText="Ctrl"; - if (keyText == "Alt+ALT") keyText="Alt"; - if (keyText == "Shift+SHIFT") keyText="Shift"; + if (keyText == _T("Ctrl+CTRL")) keyText = _T("Ctrl"); + if (keyText == _T("Alt+ALT")) keyText = _T("Alt"); + if (keyText == _T("Shift+SHIFT")) keyText = _T("Shift"); return keyText; } @@ -1840,7 +1840,7 @@ if ( key < commands[c].kcList.size()) return commands[c].kcList[0].GetKeyText(); else - return ""; + return _T(""); } Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2015-07-10 18:48:59 UTC (rev 5398) +++ trunk/OpenMPT/mptrack/CommandSet.h 2015-07-10 19:44:42 UTC (rev 5399) @@ -1219,8 +1219,8 @@ FlagSet<KeyEventType> EventType() const { FlagSet<KeyEventType> result; result.SetRaw(event); return result; } // Key combination to string - static CString GetContextText(InputTargetContext ctx); - CString GetContextText() const { return GetContextText(Context()); } + static const TCHAR *GetContextText(InputTargetContext ctx); + const TCHAR *GetContextText() const { return GetContextText(Context()); } static CString GetModifierText(UINT mod); CString GetModifierText() const { return GetModifierText(Modifier()); } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2015-07-10 18:48:59 UTC (rev 5398) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2015-07-10 19:44:42 UTC (rev 5399) @@ -185,7 +185,7 @@ m_eCustHotKey.SetParent(m_hWnd, IDC_CUSTHOTKEY, this); m_eFindHotKey.SetParent(m_hWnd, IDC_FINDHOTKEY, this); m_eReport.FmtLines(TRUE); - m_eReport.SetWindowText(""); + m_eReport.SetWindowText(_T("")); m_eChordWaitTime.SetWindowText(mpt::ToString(TrackerSettings::Instance().gnAutoChordWaitTime).c_str()); return TRUE; @@ -198,7 +198,7 @@ //---------------------------------------------- { { - CommandCategory newCat("Global keys", kCtxAllContexts); + CommandCategory newCat(_T("Global keys"), kCtxAllContexts); for(int c = kcStartFile; c <= kcEndFile; c++) newCat.commands.push_back(c); @@ -221,22 +221,22 @@ } { - CommandCategory newCat(" General [Top]", kCtxCtrlGeneral); + CommandCategory newCat(_T(" General [Top]"), kCtxCtrlGeneral); commandCategories.push_back(newCat); } { - CommandCategory newCat(" General [Bottom]", kCtxViewGeneral); + CommandCategory newCat(_T(" General [Bottom]"), kCtxViewGeneral); commandCategories.push_back(newCat); } { - CommandCategory newCat(" Pattern Editor [Top]", kCtxCtrlPatterns); + CommandCategory newCat(_T(" Pattern Editor [Top]"), kCtxCtrlPatterns); commandCategories.push_back(newCat); } { - CommandCategory newCat(" Pattern Editor - Order List", kCtxCtrlOrderlist); + CommandCategory newCat(_T(" Pattern Editor - Order List"), kCtxCtrlOrderlist); for(int c = kcStartOrderlistCommands; c <= kcEndOrderlistCommands; c++) newCat.commands.push_back(c); @@ -248,7 +248,7 @@ } { - CommandCategory newCat(" Pattern Editor - Quick Channel Settings", kCtxChannelSettings); + CommandCategory newCat(_T(" Pattern Editor - Quick Channel Settings"), kCtxChannelSettings); for(int c = kcStartChnSettingsCommands; c <= kcEndChnSettingsCommands; c++) newCat.commands.push_back(c); @@ -257,7 +257,7 @@ } { - CommandCategory newCat(" Pattern Editor - General", kCtxViewPatterns); + CommandCategory newCat(_T(" Pattern Editor - General"), kCtxViewPatterns); for(int c = kcStartPlainNavigate; c <= kcEndPlainNavigate; c++) newCat.commands.push_back(c); @@ -298,7 +298,7 @@ } { - CommandCategory newCat(" Pattern Editor - Note Column", kCtxViewPatternsNote); + CommandCategory newCat(_T(" Pattern Editor - Note Column"), kCtxViewPatternsNote); for(int c = kcVPStartNotes; c <= kcVPEndNotes; c++) newCat.commands.push_back(c); @@ -313,7 +313,7 @@ } { - CommandCategory newCat(" Pattern Editor - Instrument Column", kCtxViewPatternsIns); + CommandCategory newCat(_T(" Pattern Editor - Instrument Column"), kCtxViewPatternsIns); for(int c = kcSetIns0; c <= kcSetIns9; c++) newCat.commands.push_back(c); @@ -322,7 +322,7 @@ } { - CommandCategory newCat(" Pattern Editor - Volume Column", kCtxViewPatternsVol); + CommandCategory newCat(_T(" Pattern Editor - Volume Column"), kCtxViewPatternsVol); for(int c = kcSetVolumeStart; c <= kcSetVolumeEnd; c++) newCat.commands.push_back(c); @@ -331,7 +331,7 @@ } { - CommandCategory newCat(" Pattern Editor - Effect Column", kCtxViewPatternsFX); + CommandCategory newCat(_T(" Pattern Editor - Effect Column"), kCtxViewPatternsFX); for(int c = kcSetFXStart; c <= kcSetFXEnd; c++) newCat.commands.push_back(c); @@ -340,23 +340,23 @@ } { - CommandCategory newCat(" Pattern Editor - Effect Parameter Column", kCtxViewPatternsFXparam); + CommandCategory newCat(_T(" Pattern Editor - Effect Parameter Column"), kCtxViewPatternsFXparam); for(int c = kcSetFXParam0; c <= kcSetFXParamF; c++) newCat.commands.push_back(c); commandCategories.push_back(newCat); } { - CommandCategory newCat(" Sample [Top]", kCtxCtrlSamples); + CommandCategory newCat(_T(" Sample [Top]"), kCtxCtrlSamples); commandCategories.push_back(newCat); } { - CommandCategory newCat(" Sample Editor", kCtxViewSamples); + CommandCategory newCat(_T(" Sample Editor"), kCtxViewSamples); for(int c = kcStartSampleEditing; c <= kcEndSampleEditing; c++) newCat.commands.push_back(c); - newCat.separators.push_back(kcEndSampleEditing); //-------------------------------------- + newCat.separators.push_back(kcEndSampleEditing); //-------------------------------------- for(int c = kcStartSampleMisc; c <= kcEndSampleMisc; c++) newCat.commands.push_back(c); newCat.separators.push_back(kcEndSampleMisc); //-------------------------------------- @@ -367,7 +367,7 @@ } { - CommandCategory newCat(" Instrument Editor", kCtxCtrlInstruments); + CommandCategory newCat(_T(" Instrument Editor"), kCtxCtrlInstruments); for(int c = kcStartInstrumentCtrlMisc; c <= kcEndInstrumentCtrlMisc; c++) newCat.commands.push_back(c); @@ -376,7 +376,7 @@ } { - CommandCategory newCat(" Envelope Editor", kCtxViewInstruments); + CommandCategory newCat(_T(" Envelope Editor"), kCtxViewInstruments); for(int c = kcStartInstrumentMisc; c <= kcEndInstrumentMisc; c++) newCat.commands.push_back(c); @@ -385,17 +385,17 @@ } { - CommandCategory newCat(" Comments [Top]", kCtxCtrlComments); + CommandCategory newCat(_T(" Comments [Top]"), kCtxCtrlComments); commandCategories.push_back(newCat); } { - CommandCategory newCat(" Comments [Bottom]", kCtxViewComments); + CommandCategory newCat(_T(" Comments [Bottom]"), kCtxViewComments); commandCategories.push_back(newCat); } { - CommandCategory newCat(" Plugin Editor", kCtxVSTGUI); + CommandCategory newCat(_T(" Plugin Editor"), kCtxVSTGUI); for(int c = kcStartVSTGUICommands; c <= kcEndVSTGUICommands; c++) newCat.commands.push_back(c); @@ -547,7 +547,7 @@ { if(doSearch && addCategoryName) { - const CString catName = "------ " + commandCategories[cat].name.Trim() + " ------"; + const CString catName = _T("------ ") + commandCategories[cat].name.Trim() + _T(" ------"); m_lbnCommandKeys.SetItemData(m_lbnCommandKeys.AddString(catName), DWORD_PTR(-1)); addCategoryName = false; } @@ -563,7 +563,7 @@ } if(commandCategories[cat].separatorAt(com)) - m_lbnCommandKeys.SetItemData(m_lbnCommandKeys.AddString("------------------------------------------------------"), DWORD_PTR(-1)); + m_lbnCommandKeys.SetItemData(m_lbnCommandKeys.AddString(_T("------------------------------------------------------")), DWORD_PTR(-1)); } } @@ -587,9 +587,9 @@ //Separator if (nCmd == kcNull) { - m_cmbKeyChoice.SetWindowText(""); + m_cmbKeyChoice.SetWindowText(_T("")); m_cmbKeyChoice.EnableWindow(FALSE); - m_eCustHotKey.SetWindowText(""); + m_eCustHotKey.SetWindowText(_T("")); m_eCustHotKey.EnableWindow(FALSE); m_bKeyDown.SetCheck(0); m_bKeyDown.EnableWindow(FALSE); @@ -621,11 +621,11 @@ { for (int i=0; i<numChoices; i++) { - wsprintf(s, "Choice %d (of %d)", i+1, numChoices); + wsprintf(s, _T("Choice %u (of %u)"), i+1, numChoices); m_cmbKeyChoice.SetItemData(m_cmbKeyChoice.AddString(s), i); } } - m_cmbKeyChoice.SetItemData(m_cmbKeyChoice.AddString("<new>"), numChoices); + m_cmbKeyChoice.SetItemData(m_cmbKeyChoice.AddString(_T("<new>")), numChoices); m_cmbKeyChoice.SetCurSel(0); m_nCurKeyChoice = -1; OnKeyChoiceSelect(); @@ -680,7 +680,7 @@ if (val>5000) { val = 5000; - m_eChordWaitTime.SetWindowText("5000"); + m_eChordWaitTime.SetWindowText(_T("5000")); } OnSettingsChanged(); } @@ -758,8 +758,7 @@ //detect invalid input if (!kc.KeyCode()) { - CString error = "You need to say to which key you'd like to map this command to."; - Reporting::Warning(error, "Invalid key data", this); + Reporting::Warning("You need to say to which key you'd like to map this command to.", "Invalid key data", this); return; } if (!kc.EventType()) @@ -778,7 +777,7 @@ && conflictCmd.first != cmd && !plocalCmdSet->IsCrossContextConflict(kc, conflictCmd.second)) { - ConfirmAnswer delOld = Reporting::Confirm("New shortcut (" + kc.GetKeyText() + ") has the same key combination as " + plocalCmdSet->GetCommandText(conflictCmd.first) + " in " + conflictCmd.second.GetContextText() + ".\nDo you want to delete the other shortcut, only keeping the new one?", "Shortcut Conflict", true, false, this); + ConfirmAnswer delOld = Reporting::Confirm(_T("New shortcut (") + kc.GetKeyText() + _T(") has the same key combination as ") + plocalCmdSet->GetCommandText(conflictCmd.first) + _T(" in ") + conflictCmd.second.GetContextText() + _T(".\nDo you want to delete the other shortcut, only keeping the new one?"), _T("Shortcut Conflict"), true, false, this); if(delOld == cnfYes) { plocalCmdSet->Remove(conflictCmd.second, conflictCmd.first); @@ -915,7 +914,7 @@ void COptionsKeyboard::OnClearLog() //--------------------------------- { - m_eReport.SetWindowText(""); + m_eReport.SetWindowText(_T("")); ForceUpdateGUI(); } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.h =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.h 2015-07-10 18:48:59 UTC (rev 5398) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.h 2015-07-10 19:44:42 UTC (rev 5399) @@ -22,7 +22,7 @@ class CommandCategory { public: - CommandCategory(CString n, InputTargetContext d) : name(n), id(d) { } + CommandCategory(const TCHAR *n, InputTargetContext d) : name(n), id(d) { } bool separatorAt(int c) const { Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-07-10 18:48:59 UTC (rev 5398) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2015-07-10 19:44:42 UTC (rev 5399) @@ -588,7 +588,7 @@ patternFont = FontSetting((m_dwPatternSetup & 0x08) ? PATTERNFONT_SMALL : PATTERNFONT_LARGE, 0); m_dwPatternSetup &= ~(0x08 | 0x02); } - if(storedVersion < MAKE_VERSION_NUMERIC(1,25,00,08)) + if(storedVersion < MAKE_VERSION_NUMERIC(1,25,00,08) && glGeneralWindowHeight < 222) { glGeneralWindowHeight += 44; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-07-10 20:21:31
|
Revision: 5400 http://sourceforge.net/p/modplug/code/5400 Author: saga-games Date: 2015-07-10 20:21:25 +0000 (Fri, 10 Jul 2015) Log Message: ----------- [Imp] Pattern tab: Apply NNA/DNA checks in note preview Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-07-10 19:44:42 UTC (rev 5399) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-07-10 20:21:25 UTC (rev 5400) @@ -152,10 +152,7 @@ #endif // Fix: save pattern scrollbar position when switching to other tab m_szOldPatternScrollbarsPos = CSize(-10,-10); -// -> CODE#0015 -// -> DESC="channels management dlg" ReinitRecordState(); -// -! NEW_FEATURE#0015 m_ShowSavedialog = false; CMainFrame::UpdateAudioParameters(m_SndFile, true); @@ -372,10 +369,7 @@ m_SndFile.ChangeModTypeTo(m_SndFile.GetBestSaveFormat()); } -// -> CODE#0015 -// -> DESC="channels management dlg" ReinitRecordState(); -// -! NEW_FEATURE#0015 if(TrackerSettings::Instance().rememberSongWindows) DeserializeViews(); @@ -544,10 +538,7 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if (pMainFrm) pMainFrm->StopMod(this); m_SndFile.Destroy(); -// -> CODE#0015 -// -> DESC="channels management dlg" ReinitRecordState(); -// -! NEW_FEATURE#0015 } @@ -1179,7 +1170,6 @@ { CriticalSection cs; - //rewbs.vstiLive if(ins != INSTRUMENTINDEX_INVALID && ins <= m_SndFile.GetNumInstruments() && ModCommand::IsNote(ModCommand::NOTE(note))) { @@ -1204,7 +1194,6 @@ } } } - //end rewbs.vstiLive const FlagSet<ChannelFlags> mask = (fade ? CHN_NOTEFADE : (CHN_NOTEFADE | CHN_KEYOFF)); ModChannel *pChn = &m_SndFile.m_PlayState.Chn[stopChn != CHANNELINDEX_INVALID ? stopChn : m_SndFile.m_nChannels]; @@ -1227,6 +1216,49 @@ } +// Apply DNA/NNA settings for note preview +void CModDoc::CheckNNA(ModCommand::NOTE note, INSTRUMENTINDEX ins, const std::bitset<128> &playingNotes) +//------------------------------------------------------------------------------------------------------ +{ + if(ins > GetNumInstruments() || m_SndFile.Instruments[ins] == nullptr) + { + return; + } + const ModInstrument *pIns = m_SndFile.Instruments[ins]; + for(CHANNELINDEX chn = GetNumChannels(); chn < MAX_CHANNELS; chn++) + { + const ModChannel &channel = m_SndFile.m_PlayState.Chn[chn]; + if(channel.pModInstrument == pIns && channel.nMasterChn == 0 && ModCommand::IsNote(channel.nNote) + && (channel.nLength || pIns->HasValidMIDIChannel()) && !playingNotes[channel.nNote]) + { + CHANNELINDEX nnaChn = m_SndFile.CheckNNA(chn, ins, note, false); + // We need to update this mix channel immediately since new notes may be triggered between ticks, in which case + // ChnMix may not contain the moved channel yet and the past note will stop playing for the rest of this tick! + if(nnaChn != CHANNELINDEX_INVALID) + { + CHANNELINDEX origChnPos = CHANNELINDEX_INVALID; + for(CHANNELINDEX i = 0; i < m_SndFile.m_nMixChannels; i++) + { + if(m_SndFile.m_PlayState.ChnMix[i] == nnaChn) + { + // Nothing to do + origChnPos = CHANNELINDEX_INVALID; + break; + } else if(m_SndFile.m_PlayState.ChnMix[i] == chn) + { + origChnPos = i; + } + } + if(origChnPos != CHANNELINDEX_INVALID) + { + m_SndFile.m_PlayState.ChnMix[origChnPos] = nnaChn; + } + } + } + } +} + + // Check if a given note of an instrument or sample is playing. // If note == 0, just check if an instrument or sample is playing. bool CModDoc::IsNotePlaying(UINT note, SAMPLEINDEX nsmp, INSTRUMENTINDEX nins) @@ -1321,8 +1353,7 @@ return true; } -// -> CODE#0012 -// -> DESC="midi keyboard split" + bool CModDoc::IsChannelSolo(CHANNELINDEX nChn) const //-------------------------------------------------- { @@ -1338,11 +1369,8 @@ m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_SOLO, bSolo); return true; } -// -! NEW_FEATURE#0012 -// -> CODE#0015 -// -> DESC="channels management dlg" bool CModDoc::IsChannelNoFx(CHANNELINDEX nChn) const //-------------------------------------------------- { @@ -1423,7 +1451,6 @@ m_bsMultiSplitRecordMask.set(); } } -// -! NEW_FEATURE#0015 bool CModDoc::MuteSample(SAMPLEINDEX nSample, bool bMute) Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2015-07-10 19:44:42 UTC (rev 5399) +++ trunk/OpenMPT/mptrack/Moddoc.h 2015-07-10 20:21:25 UTC (rev 5400) @@ -211,6 +211,7 @@ void ProcessMIDI(uint32 midiData, INSTRUMENTINDEX ins, IMixPlugin *plugin, InputTargetContext ctx); CHANNELINDEX PlayNote(UINT note, INSTRUMENTINDEX nins, SAMPLEINDEX nsmp, bool pause, LONG nVol=-1, SmpLength loopStart = 0, SmpLength loopEnd = 0, CHANNELINDEX nCurrentChn = CHANNELINDEX_INVALID, const SmpLength sampleOffset = 0); bool NoteOff(UINT note, bool fade = false, INSTRUMENTINDEX ins = INSTRUMENTINDEX_INVALID, CHANNELINDEX currentChn = CHANNELINDEX_INVALID, CHANNELINDEX stopChn = CHANNELINDEX_INVALID); //rewbs.vstiLive: add params + void CheckNNA(ModCommand::NOTE note, INSTRUMENTINDEX ins, const std::bitset<128> &playingNotes); bool IsNotePlaying(UINT note, SAMPLEINDEX nsmp = 0, INSTRUMENTINDEX nins = 0); bool MuteChannel(CHANNELINDEX nChn, bool bMute); Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2015-07-10 19:44:42 UTC (rev 5399) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2015-07-10 20:21:25 UTC (rev 5400) @@ -1955,38 +1955,7 @@ pMainFrm->PlayMod(pModDoc); } CriticalSection cs; - // Apply NNA/DNA - for(CHANNELINDEX chn = sndFile.GetNumChannels(); chn < MAX_CHANNELS; chn++) - { - const ModChannel &channel = sndFile.m_PlayState.Chn[chn]; - if(channel.pModInstrument == pIns && channel.nMasterChn == 0 && ModCommand::IsNote(channel.nNote) - && (channel.nLength || pIns->HasValidMIDIChannel()) && !m_baPlayingNote[channel.nNote]) - { - CHANNELINDEX nnaChn = sndFile.CheckNNA(chn, m_nInstrument, note, false); - // We need to update this mix channel immediately since new notes may be triggered between ticks, in which case - // ChnMix may not contain the moved channel yet and the past note will stop playing for the rest of this tick! - if(nnaChn != CHANNELINDEX_INVALID) - { - CHANNELINDEX origChnPos = CHANNELINDEX_INVALID; - for(CHANNELINDEX i = 0; i < sndFile.m_nMixChannels; i++) - { - if(sndFile.m_PlayState.ChnMix[i] == nnaChn) - { - // Nothing to do - origChnPos = CHANNELINDEX_INVALID; - break; - } else if(sndFile.m_PlayState.ChnMix[i] == chn) - { - origChnPos = i; - } - } - if(origChnPos != CHANNELINDEX_INVALID) - { - sndFile.m_PlayState.ChnMix[origChnPos] = nnaChn; - } - } - } - } + pModDoc->CheckNNA(note, m_nInstrument, m_baPlayingNote); m_baPlayingNote[note] = true; pModDoc->PlayNote(note, m_nInstrument, 0, false); } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-07-10 19:44:42 UTC (rev 5399) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-07-10 20:21:25 UTC (rev 5400) @@ -3809,6 +3809,7 @@ if(pnotify->type[Notification::Stop]) { + m_baPlayingNote.reset(); MemsetZero(ChnVUMeters); // Also zero all non-visible VU meters if((m_Status & (psFollowSong | psDragActive)) == psFollowSong) { @@ -5018,11 +5019,13 @@ for(int i = 0; i < numNotes; i++) { pModDoc->NoteOff(notes[i], true, static_cast<INSTRUMENTINDEX>(ins), GetCurrentChannel(), playWholeRow ? chordPatternChannels[i] : CHANNELINDEX_INVALID); + m_baPlayingNote.reset(notes[i]); noteChannels[i] = chordPatternChannels[i]; } prevChordNote = NOTE_NONE; } else { + m_baPlayingNote.reset(note); pModDoc->NoteOff(note, ((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_NOTEFADE) || sndFile.GetNumInstruments() == 0), static_cast<INSTRUMENTINDEX>(ins), nChnCursor, playWholeRow ? nChn : CHANNELINDEX_INVALID); } } @@ -5452,6 +5455,8 @@ } } bool isPlaying = ((pMainFrm->GetModPlaying() == pModDoc) && (pMainFrm->IsPlaying())); + pModDoc->CheckNNA(newcmd.note, nPlayIns, m_baPlayingNote); + m_baPlayingNote.set(newcmd.note); pModDoc->PlayNote(newcmd.note, nPlayIns, 0, !isPlaying, 4 * vol, 0, 0, nChn); } } @@ -5727,6 +5732,8 @@ const bool isPlaying = pMainFrm->GetModPlaying() == pModDoc && pMainFrm->IsPlaying(); for(int i = 0; i < numNotes; i++) { + pModDoc->CheckNNA(note, nPlayIns, m_baPlayingNote); + m_baPlayingNote.set(note); pModDoc->PlayNote(chordNotes[i], nPlayIns, 0, !isPlaying && i == 0, -1, 0, 0, chn); } } Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2015-07-10 19:44:42 UTC (rev 5399) +++ trunk/OpenMPT/mptrack/View_pat.h 2015-07-10 20:21:25 UTC (rev 5400) @@ -204,6 +204,7 @@ WORD ChnVUMeters[MAX_BASECHANNELS]; WORD OldVUMeters[MAX_BASECHANNELS]; + std::bitset<128> m_baPlayingNote; ModCommand::NOTE octaveKeyMemory[10]; ModCommand::NOTE previousNote[MAX_BASECHANNELS]; BYTE activeNoteChannel[NOTE_MAX + NOTE_MIN]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2015-07-11 16:49:34
|
Revision: 5403 http://sourceforge.net/p/modplug/code/5403 Author: saga-games Date: 2015-07-11 16:49:28 +0000 (Sat, 11 Jul 2015) Log Message: ----------- [Imp] Some more spin buttons in the settings dialog. Modified Paths: -------------- trunk/OpenMPT/mptrack/SampleConfigDlg.cpp trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/SampleConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/SampleConfigDlg.cpp 2015-07-11 16:48:13 UTC (rev 5402) +++ trunk/OpenMPT/mptrack/SampleConfigDlg.cpp 2015-07-11 16:49:28 UTC (rev 5403) @@ -47,8 +47,10 @@ //--------------------------------------- { CPropertyPage::OnInitDialog(); + SetDlgItemInt(IDC_EDIT_UNDOSIZE, TrackerSettings::Instance().m_SampleUndoBufferSize.Get().GetSizeInPercent()); SetDlgItemInt(IDC_EDIT_FINETUNE, TrackerSettings::Instance().m_nFinetuneStep); - SetDlgItemInt(IDC_EDIT_UNDOSIZE, TrackerSettings::Instance().m_SampleUndoBufferSize.Get().GetSizeInPercent()); + static_cast<CSpinButtonCtrl *>(GetDlgItem(IDC_SPIN1))->SetRange32(0, 100); + static_cast<CSpinButtonCtrl *>(GetDlgItem(IDC_SPIN2))->SetRange32(1, 200); RecalcUndoSize(); m_cbnDefaultSampleFormat.SetItemData(m_cbnDefaultSampleFormat.AddString("FLAC"), dfFLAC); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-07-11 16:48:13 UTC (rev 5402) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-07-11 16:49:28 UTC (rev 5403) @@ -141,12 +141,13 @@ CAPTION "Samples" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Sample Editor",IDC_STATIC,6,6,276,138 - LTEXT "Sample Undo Buffer:",IDC_STATIC,12,20,78,8 + LTEXT "Sample Undo Buffer:",IDC_STATIC,12,20,102,8 EDITTEXT IDC_EDIT_UNDOSIZE,114,18,42,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,144,24,12,12 LTEXT "%",IDC_UNDOSIZE,162,20,114,16 - LTEXT "Frequency Finetune Steps:",IDC_STATIC,12,38,114,8 + LTEXT "Frequency Finetune Steps:",IDC_STATIC,12,38,102,8 EDITTEXT IDC_EDIT_FINETUNE,114,36,42,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,144,41,11,12 LTEXT "Cents",IDC_STATIC,162,38,20,8 LTEXT "Default Sample Format:",IDC_STATIC,12,56,102,8 COMBOBOX IDC_DEFAULT_FORMAT,114,54,42,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -158,15 +159,16 @@ CONTROL "On New Note",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,18,102,258,12 CONTROL "On Key Release",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,18,114,258,12 CONTROL "Press Again",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,18,126,258,12 - GROUPBOX "Instrument Editor",IDC_STATIC,6,150,276,48 CONTROL "Compress ITI Files",IDC_COMPRESS_ITI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,162,264,12 LTEXT "Default Plugin Volume Command Handling:",IDC_STATIC,12,182,150,8 COMBOBOX IDC_VOLUME_HANDLING,162,180,78,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Common",IDC_STATIC,6,204,276,48 CONTROL "Preview Samples / Instruments in File Browser",IDC_PREVIEW_SAMPLES, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,217,264,12 CONTROL "Normalize 24-/32-bit Samples on Load",IDC_NORMALIZE, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,234,264,12 + GROUPBOX "Sample Editor",IDC_STATIC,6,6,276,138 + GROUPBOX "Instrument Editor",IDC_STATIC,6,150,276,48 + GROUPBOX "Common",IDC_STATIC,6,204,276,48 END IDD_EDITHISTORY DIALOGEX 0, 0, 316, 185 @@ -1720,7 +1722,6 @@ CAPTION "Mixer" FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN - GROUPBOX "Resampling",IDC_STATIC,6,6,276,48 LTEXT "Filter:",IDC_STATIC,12,18,24,12,SS_CENTERIMAGE COMBOBOX IDC_COMBO_FILTER,54,18,96,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Window:",IDC_STATIC,156,18,30,12,SS_CENTERIMAGE @@ -1728,25 +1729,27 @@ LTEXT "Bandwidth:",IDC_STATIC,12,36,42,12,SS_CENTERIMAGE EDITTEXT IDC_WFIRCUTOFF,54,36,24,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC,84,36,24,12,SS_CENTERIMAGE - GROUPBOX "Volume Ramping",IDC_STATIC,6,60,276,48 + EDITTEXT IDC_RAMPING_IN,12,72,36,12,ES_AUTOHSCROLL | ES_NUMBER LTEXT "\xB5s up",IDC_STATIC,42,72,22,12,SS_CENTERIMAGE EDITTEXT IDC_RAMPING_IN,12,72,24,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_UP,78,72,90,12,ES_AUTOHSCROLL | ES_READONLY LTEXT "\xB5s down",IDC_STATIC,42,92,28,11,SS_CENTERIMAGE EDITTEXT IDC_RAMPING_OUT,12,90,24,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_DOWN,78,90,90,12,ES_AUTOHSCROLL | ES_READONLY - GROUPBOX "Polyphony",IDC_STATIC,6,114,276,30 LTEXT "Maximum Mixed Channels:",IDC_STATIC,12,126,84,12,SS_CENTERIMAGE COMBOBOX IDC_COMBO_POLYPHONY,102,126,66,88,CBS_DROPDOWNLIST | WS_TABSTOP - GROUPBOX "Behaviour",IDC_STATIC,6,150,276,30 LTEXT "Stereo Separation:",IDC_STATIC,12,162,62,8 CONTROL "",IDC_SLIDER_STEREOSEP,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,78,162,54,12 LTEXT "100%",IDC_TEXT_STEREOSEP,132,162,36,8 - GROUPBOX "Pre-1.17RC3 mixing levels",IDC_STATIC,6,186,276,72 CONTROL "Soft Panning",IDC_CHECK_SOFTPAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,204,66,12 LTEXT "Sample Pre-Amp:",IDC_STATIC,102,204,60,12,SS_CENTERIMAGE CONTROL "",IDC_SLIDER_PREAMP,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_TOOLTIPS | WS_TABSTOP,168,198,96,24 LTEXT "Warning: Only samples are affected by these settings! Modifying them will change the balance between samples and plugins in songs with mix levels set to 1.17RC2 or earlier in the Song Properties! ",IDC_STATIC,12,222,252,30 + GROUPBOX "Resampling",IDC_STATIC,6,6,276,48 + GROUPBOX "Volume Ramping",IDC_STATIC,6,60,276,48 + GROUPBOX "Polyphony",IDC_STATIC,6,114,276,30 + GROUPBOX "Behaviour",IDC_STATIC,6,150,276,30 + GROUPBOX "Pre-1.17RC3 mixing levels",IDC_STATIC,6,186,276,72 END This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |