From: <sag...@us...> - 2009-09-15 22:10:56
|
Revision: 365 http://modplug.svn.sourceforge.net/modplug/?rev=365&view=rev Author: saga-games Date: 2009-09-15 22:10:35 +0000 (Tue, 15 Sep 2009) Log Message: ----------- [New] Shareable color schemes (via config dialog) [Fix] Instrument tab: Pitch/Pan input field allows negative values Modified Paths: -------------- trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Moptions.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-09-15 17:15:29 UTC (rev 364) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-09-15 22:10:35 UTC (rev 365) @@ -117,21 +117,23 @@ BEGIN_MESSAGE_MAP(COptionsColors, CPropertyPage) ON_WM_DRAWITEM() - ON_CBN_SELCHANGE(IDC_COMBO1, OnColorSelChanged) - ON_EN_CHANGE(IDC_PRIMARYHILITE,OnSettingsChanged) + ON_CBN_SELCHANGE(IDC_COMBO1, OnColorSelChanged) + ON_EN_CHANGE(IDC_PRIMARYHILITE, OnSettingsChanged) ON_EN_CHANGE(IDC_SECONDARYHILITE, OnSettingsChanged) - ON_COMMAND(IDC_BUTTON1, OnSelectColor1) - ON_COMMAND(IDC_BUTTON2, OnSelectColor2) - ON_COMMAND(IDC_BUTTON3, OnSelectColor3) - ON_COMMAND(IDC_BUTTON5, OnPresetMPT) - ON_COMMAND(IDC_BUTTON6, OnPresetFT2) - ON_COMMAND(IDC_BUTTON7, OnPresetIT) - ON_COMMAND(IDC_BUTTON8, OnPresetBuzz) - ON_COMMAND(IDC_CHECK1, OnSettingsChanged) - ON_COMMAND(IDC_CHECK2, OnPreviewChanged) - ON_COMMAND(IDC_CHECK3, OnSettingsChanged) - ON_COMMAND(IDC_CHECK4, OnPreviewChanged) - ON_COMMAND(IDC_CHECK5, OnHiliteTimeSigsChanged) + ON_COMMAND(IDC_BUTTON1, OnSelectColor1) + ON_COMMAND(IDC_BUTTON2, OnSelectColor2) + ON_COMMAND(IDC_BUTTON3, OnSelectColor3) + ON_COMMAND(IDC_BUTTON5, OnPresetMPT) + ON_COMMAND(IDC_BUTTON6, OnPresetFT2) + ON_COMMAND(IDC_BUTTON7, OnPresetIT) + ON_COMMAND(IDC_BUTTON8, OnPresetBuzz) + ON_COMMAND(IDC_LOAD_COLORSCHEME, OnLoadColorScheme) + ON_COMMAND(IDC_SAVE_COLORSCHEME, OnSaveColorScheme) + ON_COMMAND(IDC_CHECK1, OnSettingsChanged) + ON_COMMAND(IDC_CHECK2, OnPreviewChanged) + ON_COMMAND(IDC_CHECK3, OnSettingsChanged) + ON_COMMAND(IDC_CHECK4, OnPreviewChanged) + ON_COMMAND(IDC_CHECK5, OnHiliteTimeSigsChanged) END_MESSAGE_MAP() @@ -538,7 +540,7 @@ CustomColors[MODCOLOR_TEXTCURROW] = 0x00000000; CustomColors[MODCOLOR_BACKSELECTED] = 0x00000000; CustomColors[MODCOLOR_TEXTSELECTED] = 0x00ccd7dd; - //CustomColors[MODCOLOR_SAMPLE] = 0x0000ff00; + CustomColors[MODCOLOR_SAMPLE] = 0x0000ff00; CustomColors[MODCOLOR_BACKPLAYCURSOR] = 0x007a99a9; CustomColors[MODCOLOR_TEXTPLAYCURSOR] = 0x00000000; CustomColors[MODCOLOR_BACKHILIGHT] = 0x00b5c5ce; @@ -548,10 +550,54 @@ CustomColors[MODCOLOR_PANNING] = 0x00686800; CustomColors[MODCOLOR_PITCH] = 0x00006262; CustomColors[MODCOLOR_GLOBALS] = 0x00000066; - //CustomColors[MODCOLOR_ENVELOPES] = 0x000000ff; + CustomColors[MODCOLOR_ENVELOPES] = 0x000000ff; OnPreviewChanged(); } +void COptionsColors::OnLoadColorScheme() +//-------------------------------------- +{ + CFileDialog dlg(TRUE, NULL, NULL, + OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, + "OpenMPT Color Schemes|*.mptcolor|" + "All Files (*.*)|*.*||", + this); + if (dlg.DoModal() != IDOK) return; + + + TCHAR sFilename[MAX_PATH]; + strcpy(sFilename, dlg.GetPathName()); + + for(int i = 0; i < MAX_MODCOLORS; i++) + { + TCHAR sKeyName[16]; + wsprintf(sKeyName, "Color%02d", i); + CustomColors[i] = CMainFrame::GetPrivateProfileLong("Colors", sKeyName, CustomColors[i], sFilename); + } + OnPreviewChanged(); +} + +void COptionsColors::OnSaveColorScheme() +//-------------------------------------- +{ + CFileDialog dlg(FALSE, "mptcolor", NULL, + OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, + "OpenMPT Color Schemes|*.mptcolor|", + this); + if (dlg.DoModal() != IDOK) return; + + TCHAR sFilename[MAX_PATH]; + strcpy(sFilename, dlg.GetPathName()); + + for(int i = 0; i < MAX_MODCOLORS; i++) + { + TCHAR sKeyName[16]; + wsprintf(sKeyName, "Color%02d", i); + CMainFrame::WritePrivateProfileLong("Colors", sKeyName, CustomColors[i], sFilename); + } +} + + ///////////////////////////////////////////////////////////////////////////////// // COptionsGeneral Modified: trunk/OpenMPT/mptrack/Moptions.h =================================================================== --- trunk/OpenMPT/mptrack/Moptions.h 2009-09-15 17:15:29 UTC (rev 364) +++ trunk/OpenMPT/mptrack/Moptions.h 2009-09-15 22:10:35 UTC (rev 365) @@ -81,6 +81,8 @@ afx_msg void OnPresetFT2(); afx_msg void OnPresetIT(); afx_msg void OnPresetBuzz(); + afx_msg void OnLoadColorScheme(); + afx_msg void OnSaveColorScheme(); afx_msg void OnPreviewChanged(); DECLARE_MESSAGE_MAP(); }; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-09-15 17:15:29 UTC (rev 364) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-09-15 22:10:35 UTC (rev 365) @@ -210,7 +210,7 @@ PUSHBUTTON "Clear Log",IDC_CLEARLOG,227,85,37,9 END -IDD_OPTIONS_COLORS DIALOGEX 0, 0, 272, 231 +IDD_OPTIONS_COLORS DIALOGEX 0, 0, 272, 281 STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Colors" FONT 8, "MS Sans Serif", 0, 0, 0x0 @@ -222,24 +222,26 @@ EDITTEXT IDC_SECONDARYHILITE,114,108,21,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Enable effect highlighting",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,60,114,10 CONTROL "Use small font",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,45,102,10 - PUSHBUTTON "MPT",IDC_BUTTON5,159,26,22,12 - PUSHBUTTON "FT2",IDC_BUTTON6,185,26,22,12 - PUSHBUTTON "IT",IDC_BUTTON7,210,25,22,12 - PUSHBUTTON "Buzz",IDC_BUTTON8,235,25,22,12 + PUSHBUTTON "MPT",IDC_BUTTON5,144,246,24,15 + PUSHBUTTON "FT2",IDC_BUTTON6,204,246,24,15 + PUSHBUTTON "IT",IDC_BUTTON7,174,246,24,15 + PUSHBUTTON "Buzz",IDC_BUTTON8,234,246,24,15 CONTROL "Color",IDC_BUTTON1,"Button",BS_OWNERDRAW,25,194,51,15 CONTROL "Color",IDC_BUTTON2,"Button",BS_OWNERDRAW,98,194,51,15 CONTROL "Color",IDC_BUTTON3,"Button",BS_OWNERDRAW,168,194,51,15 LTEXT "Background:",IDC_TEXT1,25,183,60,8 LTEXT "Foreground:",IDC_TEXT2,98,183,62,8 LTEXT "Highlight:",IDC_TEXT3,169,185,61,8 - GROUPBOX "",IDC_STATIC,5,5,260,220 + GROUPBOX "",IDC_STATIC,5,5,260,211 LTEXT "Select color for:",IDC_STATIC,15,15,63,8 LTEXT "rows",IDC_STATIC,138,92,16,8 - LTEXT "Presets:",IDC_STATIC,159,15,28,8 LTEXT "rows",IDC_STATIC,138,110,16,8 CONTROL "",IDC_BUTTON4,"Button",BS_OWNERDRAW | BS_FLAT,65,130,114,43 CONTROL "Set highlights to songs' time signatures",IDC_CHECK5, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,75,136,10 + PUSHBUTTON "Load...",IDC_LOAD_COLORSCHEME,18,246,48,15 + PUSHBUTTON "Save...",IDC_SAVE_COLORSCHEME,72,246,48,15 + GROUPBOX "Color Presets",IDC_STATIC,6,228,264,42 END IDD_OPTIONS_MIDI DIALOGEX 0, 0, 272, 281 @@ -478,7 +480,7 @@ CONTROL "Pan",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,55,71,29,10 EDITTEXT IDC_EDIT9,87,70,34,12,ES_NUMBER CONTROL "Spin1",IDC_SPIN9,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,112,74,8,11 - EDITTEXT IDC_EDIT15,33,99,27,13,ES_NUMBER + EDITTEXT IDC_EDIT15,33,99,27,13 CONTROL "Spin1",IDC_SPIN12,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,61,103,7,11 COMBOBOX IDC_COMBO4,95,99,27,91,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "",IDC_SLIDER5,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS,47,135,36,10 @@ -1399,7 +1401,7 @@ IDD_OPTIONS_COLORS, DIALOG BEGIN RIGHTMARGIN, 247 - BOTTOMMARGIN, 151 + BOTTOMMARGIN, 201 END IDD_OPTIONS_MIDI, DIALOG Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-09-15 17:15:29 UTC (rev 364) +++ trunk/OpenMPT/mptrack/resource.h 2009-09-15 22:10:35 UTC (rev 365) @@ -883,6 +883,8 @@ #define IDC_RADIO_RESIZETO 2384 #define IDC_EDIT_MODLOADING_WARNINGS 2385 #define IDC_CHECK_PATRECORD 2386 +#define IDC_LOAD_COLORSCHEME 2387 +#define IDC_SAVE_COLORSCHEME 2388 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1116,7 +1118,7 @@ #define ID_OVERFLOWPASTE 59226 #define ID_NOTEMAP_COPY_NOTE 59227 #define ID_CLEANUP_REARRANGESAMPLES 59228 -#define ID_ORDERLIST_RENDER 59229 +#define ID_ORDERLIST_RENDER 59229 // Next default values for new objects // @@ -1125,7 +1127,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 521 #define _APS_NEXT_COMMAND_VALUE 59230 -#define _APS_NEXT_CONTROL_VALUE 2387 +#define _APS_NEXT_CONTROL_VALUE 2389 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-09-20 13:04:51
|
Revision: 370 http://modplug.svn.sourceforge.net/modplug/?rev=370&view=rev Author: relabsoluness Date: 2009-09-20 13:04:44 +0000 (Sun, 20 Sep 2009) Log Message: ----------- [Fix] Pattern tab: Sequence name control wasn't updated properly. [Mod] Version: Changed version number. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/version.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-09-18 18:48:59 UTC (rev 369) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-09-20 13:04:44 UTC (rev 370) @@ -190,6 +190,7 @@ SetDlgItemInt(IDC_EDIT_SPACING, CMainFrame::gnPatternSpacing); SetDlgItemInt(IDC_EDIT_ORDERLIST_MARGINS, m_OrderList.GetMargins()); CheckDlgButton(IDC_PATTERN_FOLLOWSONG, !(CMainFrame::m_dwPatternSetup & PATTERN_FOLLOWSONGOFF)); //rewbs.noFollow - set to unchecked + SetDlgItemText(IDC_EDIT_SEQUENCE_NAME, m_pSndFile->Order.m_sName); m_OrderList.SetFocus(); UpdateView(HINT_MODTYPE|HINT_PATNAMES, NULL); Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2009-09-18 18:48:59 UTC (rev 369) +++ trunk/OpenMPT/mptrack/version.h 2009-09-20 13:04:44 UTC (rev 370) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 17 #define VER_MINOR 03 -#define VER_MINORMINOR 01 +#define VER_MINORMINOR 02 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-21 20:03:56
|
Revision: 374 http://modplug.svn.sourceforge.net/modplug/?rev=374&view=rev Author: saga-games Date: 2009-09-21 20:03:46 +0000 (Mon, 21 Sep 2009) Log Message: ----------- [New] Color setup: Channel separators can now have custom colors. [Mod] Color setup: Changed FT2 and IT presets to resemble those two trackers as much as possible. Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mptrack.cpp Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2009-09-21 13:05:09 UTC (rev 373) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2009-09-21 20:03:46 UTC (rev 374) @@ -124,9 +124,6 @@ BYTE r,g,b; m_Dib.SetAllColors(0, MAX_MODCOLORS, CMainFrame::rgbCustomColors); - m_Dib.SetColor(MODSYSCOLOR_LO, GetSysColor(COLOR_BTNSHADOW)); - m_Dib.SetColor(MODSYSCOLOR_MED, GetSysColor(COLOR_BTNFACE)); - m_Dib.SetColor(MODSYSCOLOR_HI, GetSysColor(COLOR_BTNHIGHLIGHT)); r = hilightcolor(GetRValue(CMainFrame::rgbCustomColors[MODCOLOR_BACKHILIGHT]), GetRValue(CMainFrame::rgbCustomColors[MODCOLOR_BACKNORMAL])); g = hilightcolor(GetGValue(CMainFrame::rgbCustomColors[MODCOLOR_BACKHILIGHT]), Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-21 13:05:09 UTC (rev 373) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-21 20:03:46 UTC (rev 374) @@ -364,8 +364,14 @@ { CString iniFile = theApp.GetConfigFileName(); //CHAR collectedString[INIBUFFERSIZE]; + MptVersion::VersionNum vIniVersion; gcsPreviousVersion = GetPrivateProfileCString("Version", "Version", "", iniFile); + if(gcsPreviousVersion == "") + vIniVersion = MPT_VERSION_NUMERIC; + else + vIniVersion = MptVersion::ToNum(gcsPreviousVersion); + gcsInstallGUID = GetPrivateProfileCString("Version", "InstallGUID", "", iniFile); gnCheckForUpdates = GetPrivateProfileInt("Version", "CheckForUpdates", 1, iniFile); gbMdiMaximize = GetPrivateProfileLong("Display", "MDIMaximize", true, iniFile); @@ -385,10 +391,16 @@ gnMsgBoxVisiblityFlags = GetPrivateProfileDWord("Display", "MsgBoxVisibilityFlags", uint32_max, iniFile); CHAR s[16]; - for (int ncol=0; ncol<MAX_MODCOLORS; ncol++) { + for (int ncol = 0; ncol < MAX_MODCOLORS; ncol++) { wsprintf(s, "Color%02d", ncol); rgbCustomColors[ncol] = GetPrivateProfileDWord("Display", s, rgbCustomColors[ncol], iniFile); } + if(rgbCustomColors[MODCOLOR_SEPSHADOW] == rgbCustomColors[MODCOLOR_SEPFACE] == rgbCustomColors[MODCOLOR_SEPHILITE] == 0 && vIniVersion < MAKE_VERSION_NUMERIC(1,17,03,02)) + { + rgbCustomColors[MODCOLOR_SEPSHADOW] = GetSysColor(COLOR_BTNSHADOW); + rgbCustomColors[MODCOLOR_SEPFACE] = GetSysColor(COLOR_BTNFACE); + rgbCustomColors[MODCOLOR_SEPHILITE] = GetSysColor(COLOR_BTNHIGHLIGHT); + } m_nWaveDevice = GetPrivateProfileLong("Sound Settings", "WaveDevice", (SNDDEV_DSOUND<<8), iniFile); m_dwSoundSetup = GetPrivateProfileDWord("Sound Settings", "SoundSetup", SOUNDSETUP_SECONDARY, iniFile); @@ -414,9 +426,9 @@ gnMidiPatternLen = GetPrivateProfileLong("MIDI Settings", "MidiImportPatLen", gnMidiPatternLen, iniFile); m_dwPatternSetup = GetPrivateProfileDWord("Pattern Editor", "PatternSetup", m_dwPatternSetup, iniFile); - if(gcsPreviousVersion != "" && MptVersion::ToNum(gcsPreviousVersion) < MAKE_VERSION_NUMERIC(1,17,02,50)) + if(vIniVersion < MAKE_VERSION_NUMERIC(1,17,02,50)) m_dwPatternSetup |= PATTERN_NOTEFADE; - if(gcsPreviousVersion != "" && MptVersion::ToNum(gcsPreviousVersion) < MAKE_VERSION_NUMERIC(1,17,03,01)) + if(vIniVersion < MAKE_VERSION_NUMERIC(1,17,03,01)) m_dwPatternSetup |= PATTERN_RESETCHANNELS; m_nRowSpacing = GetPrivateProfileDWord("Pattern Editor", "RowSpacing", 16, iniFile); Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-09-21 13:05:09 UTC (rev 373) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-09-21 20:03:46 UTC (rev 374) @@ -157,11 +157,11 @@ MODCOLOR_VUMETER_LO, MODCOLOR_VUMETER_MED, MODCOLOR_VUMETER_HI, + MODCOLOR_SEPSHADOW, + MODCOLOR_SEPFACE, + MODCOLOR_SEPHILITE, MAX_MODCOLORS, // Internal color codes - MODSYSCOLOR_LO, - MODSYSCOLOR_MED, - MODSYSCOLOR_HI, MODCOLOR_2NDHIGHLIGHT, MAX_MODPALETTECOLORS }; Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-09-21 13:05:09 UTC (rev 373) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-09-21 20:03:46 UTC (rev 374) @@ -105,6 +105,7 @@ {"Play Cursor", 0, MODCOLOR_BACKPLAYCURSOR, MODCOLOR_TEXTPLAYCURSOR, 0, "Background:", "Foreground:", NULL}, {"Note Highlight", 0, MODCOLOR_NOTE, MODCOLOR_INSTRUMENT, MODCOLOR_VOLUME, "Note:", "Instrument:", "Volume:"}, {"Effect Highlight",0, MODCOLOR_PANNING, MODCOLOR_PITCH, MODCOLOR_GLOBALS, "Panning Effects:", "Pitch Effects:", "Global Effects:"}, + {"Channel Separator",0, MODCOLOR_SEPSHADOW, MODCOLOR_SEPFACE, MODCOLOR_SEPHILITE, "Shadow:", "Face:", "Highlight:"}, {"Sample Editor", 1, MODCOLOR_SAMPLE, 0, 0, "Sample Data:", NULL, NULL}, {"Instrument Editor",2, MODCOLOR_ENVELOPES, 0, 0, "Envelopes:", NULL, NULL}, {"VU-Meters", 0, MODCOLOR_VUMETER_HI, MODCOLOR_VUMETER_MED, MODCOLOR_VUMETER_LO, "Hi:", "Med:", "Lo:"} @@ -483,6 +484,9 @@ CustomColors[MODCOLOR_PANNING] = RGB(0x00, 0x80, 0x80); CustomColors[MODCOLOR_PITCH] = RGB(0x80, 0x80, 0x00); CustomColors[MODCOLOR_GLOBALS] = RGB(0x80, 0x00, 0x00); + CustomColors[MODCOLOR_SEPSHADOW] = GetSysColor(COLOR_BTNSHADOW); + CustomColors[MODCOLOR_SEPFACE] = GetSysColor(COLOR_BTNFACE); + CustomColors[MODCOLOR_SEPHILITE] = GetSysColor(COLOR_BTNHIGHLIGHT); OnPreviewChanged(); } @@ -491,20 +495,25 @@ //-------------------------------- { CustomColors[MODCOLOR_BACKNORMAL] = RGB(0x00, 0x00, 0x00); - CustomColors[MODCOLOR_TEXTNORMAL] = RGB(0xE0, 0xE0, 0x40); - CustomColors[MODCOLOR_BACKCURROW] = RGB(0x70, 0x70, 0x70); - CustomColors[MODCOLOR_TEXTCURROW] = RGB(0xF0, 0xF0, 0x50); - CustomColors[MODCOLOR_BACKSELECTED] = RGB(0x40, 0x40, 0xA0); + CustomColors[MODCOLOR_TEXTNORMAL] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_BACKCURROW] = RGB(0x49, 0x75, 0x82); + CustomColors[MODCOLOR_TEXTCURROW] = RGB(0xFF, 0xFF, 0x5F); + CustomColors[MODCOLOR_BACKSELECTED] = RGB(0x28, 0x28, 0x28); CustomColors[MODCOLOR_TEXTSELECTED] = RGB(0xFF, 0xFF, 0xFF); - CustomColors[MODCOLOR_BACKPLAYCURSOR] = RGB(0x50, 0x50, 0x70); - CustomColors[MODCOLOR_TEXTPLAYCURSOR] = RGB(0xE0, 0xE0, 0x40); - CustomColors[MODCOLOR_BACKHILIGHT] = RGB(0x40, 0x40, 0x80); - CustomColors[MODCOLOR_NOTE] = RGB(0xE0, 0xE0, 0x40); - CustomColors[MODCOLOR_INSTRUMENT] = RGB(0xFF, 0xFF, 0x00); - CustomColors[MODCOLOR_VOLUME] = RGB(0x00, 0xFF, 0x00); - CustomColors[MODCOLOR_PANNING] = RGB(0x00, 0xFF, 0xFF); - CustomColors[MODCOLOR_PITCH] = RGB(0xFF, 0xFF, 0x00); - CustomColors[MODCOLOR_GLOBALS] = RGB(0xFF, 0x40, 0x40); + CustomColors[MODCOLOR_BACKPLAYCURSOR] = RGB(0x49, 0x75, 0x82); + CustomColors[MODCOLOR_TEXTPLAYCURSOR] = RGB(0xFF, 0xFF, 0xFF); + CustomColors[MODCOLOR_BACKHILIGHT] = RGB(0x27, 0x41, 0x47); + CustomColors[MODCOLOR_NOTE] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_INSTRUMENT] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_VOLUME] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_PANNING] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_PITCH] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_GLOBALS] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_SAMPLE] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_ENVELOPES] = RGB(0xFF, 0xFF, 0x82); + CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x18, 0x28, 0x2C); + CustomColors[MODCOLOR_SEPFACE] = RGB(0x49, 0x75, 0x82); + CustomColors[MODCOLOR_SEPHILITE] = RGB(0x8A, 0xDB, 0xF3); OnPreviewChanged(); } @@ -513,20 +522,25 @@ //------------------------------- { CustomColors[MODCOLOR_BACKNORMAL] = RGB(0x00, 0x00, 0x00); - CustomColors[MODCOLOR_TEXTNORMAL] = RGB(0x00, 0xE0, 0x00); - CustomColors[MODCOLOR_BACKCURROW] = RGB(0x70, 0x70, 0x70); - CustomColors[MODCOLOR_TEXTCURROW] = RGB(0x00, 0xE0, 0x00); - CustomColors[MODCOLOR_BACKSELECTED] = RGB(0xE0, 0xE0, 0xE0); - CustomColors[MODCOLOR_TEXTSELECTED] = RGB(0x00, 0x00, 0x00); - CustomColors[MODCOLOR_BACKPLAYCURSOR] = RGB(0x80, 0x80, 0x00); - CustomColors[MODCOLOR_TEXTPLAYCURSOR] = RGB(0x00, 0xE0, 0x00); - CustomColors[MODCOLOR_BACKHILIGHT] = RGB(0x40, 0x68, 0x40); - CustomColors[MODCOLOR_NOTE] = RGB(0x00, 0xFF, 0x00); - CustomColors[MODCOLOR_INSTRUMENT] = RGB(0xFF, 0xFF, 0x00); - CustomColors[MODCOLOR_VOLUME] = RGB(0x00, 0xFF, 0x00); - CustomColors[MODCOLOR_PANNING] = RGB(0x00, 0xFF, 0xFF); - CustomColors[MODCOLOR_PITCH] = RGB(0xFF, 0xFF, 0x00); - CustomColors[MODCOLOR_GLOBALS] = RGB(0xFF, 0x40, 0x40); + CustomColors[MODCOLOR_TEXTNORMAL] = RGB(0x45, 0x9A, 0x49); + CustomColors[MODCOLOR_BACKCURROW] = RGB(0x10, 0x35, 0x00); + CustomColors[MODCOLOR_TEXTCURROW] = RGB(0xEB, 0xEB, 0xCB); + CustomColors[MODCOLOR_BACKSELECTED] = RGB(0x20, 0x55, 0x00); + CustomColors[MODCOLOR_TEXTSELECTED] = RGB(0xEB, 0xEB, 0xCB); + CustomColors[MODCOLOR_BACKPLAYCURSOR] = RGB(0x59, 0x41, 0x3C); + CustomColors[MODCOLOR_TEXTPLAYCURSOR] = RGB(0x45, 0x9A, 0x49); + CustomColors[MODCOLOR_BACKHILIGHT] = RGB(0x59, 0x41, 0x3C); + CustomColors[MODCOLOR_NOTE] = RGB(0x45, 0x9A, 0x49); + CustomColors[MODCOLOR_INSTRUMENT] = RGB(0x38, 0x9E, 0x75); + CustomColors[MODCOLOR_VOLUME] = RGB(0xA2, 0xA2, 0xA2); + CustomColors[MODCOLOR_PANNING] = RGB(0x18, 0x75, 0x2C); + CustomColors[MODCOLOR_PITCH] = RGB(0x45, 0x9A, 0x49); + CustomColors[MODCOLOR_GLOBALS] = RGB(0x45, 0x9A, 0x49); + CustomColors[MODCOLOR_SAMPLE] = RGB(0x8E, 0x14, 0x55); + CustomColors[MODCOLOR_ENVELOPES] = RGB(0xA2, 0xA2, 0xA2); + CustomColors[MODCOLOR_SEPSHADOW] = RGB(0xB6, 0x96, 0x79); + CustomColors[MODCOLOR_SEPFACE] = RGB(0xB6, 0x96, 0x79); + CustomColors[MODCOLOR_SEPHILITE] = RGB(0xB6, 0x96, 0x79); OnPreviewChanged(); } @@ -540,7 +554,6 @@ CustomColors[MODCOLOR_TEXTCURROW] = 0x00000000; CustomColors[MODCOLOR_BACKSELECTED] = 0x00000000; CustomColors[MODCOLOR_TEXTSELECTED] = 0x00ccd7dd; - CustomColors[MODCOLOR_SAMPLE] = 0x0000ff00; CustomColors[MODCOLOR_BACKPLAYCURSOR] = 0x007a99a9; CustomColors[MODCOLOR_TEXTPLAYCURSOR] = 0x00000000; CustomColors[MODCOLOR_BACKHILIGHT] = 0x00b5c5ce; @@ -550,7 +563,11 @@ CustomColors[MODCOLOR_PANNING] = 0x00686800; CustomColors[MODCOLOR_PITCH] = 0x00006262; CustomColors[MODCOLOR_GLOBALS] = 0x00000066; + CustomColors[MODCOLOR_SAMPLE] = 0x0000ff00; CustomColors[MODCOLOR_ENVELOPES] = 0x000000ff; + CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x80, 0x80, 0x80); + CustomColors[MODCOLOR_SEPFACE] = RGB(0xD4, 0xD0, 0xC8); + CustomColors[MODCOLOR_SEPHILITE] = RGB(0xFF, 0xFF, 0xFF); OnPreviewChanged(); } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-09-21 13:05:09 UTC (rev 373) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-09-21 20:03:46 UTC (rev 374) @@ -2255,9 +2255,9 @@ m_Dib.bmiHeader.biClrUsed = 0; m_Dib.bmiHeader.biClrImportant = 256; // MAX_MODPALETTECOLORS; m_n4BitPalette[0] = (BYTE)m_nTextColor; - m_n4BitPalette[4] = MODSYSCOLOR_LO; - m_n4BitPalette[12] = MODSYSCOLOR_MED; - m_n4BitPalette[14] = MODSYSCOLOR_HI; + m_n4BitPalette[4] = MODCOLOR_SEPSHADOW; + m_n4BitPalette[12] = MODCOLOR_SEPFACE; + m_n4BitPalette[14] = MODCOLOR_SEPHILITE; m_n4BitPalette[15] = (BYTE)m_nBkColor; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-23 15:04:17
|
Revision: 378 http://modplug.svn.sourceforge.net/modplug/?rev=378&view=rev Author: saga-games Date: 2009-09-23 15:04:06 +0000 (Wed, 23 Sep 2009) Log Message: ----------- [New] Colour setup: Can now specify the blend colour for prev/next patterns. Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2009-09-23 11:57:10 UTC (rev 377) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2009-09-23 15:04:06 UTC (rev 378) @@ -131,7 +131,7 @@ b = hilightcolor(GetBValue(CMainFrame::rgbCustomColors[MODCOLOR_BACKHILIGHT]), GetBValue(CMainFrame::rgbCustomColors[MODCOLOR_BACKNORMAL])); m_Dib.SetColor(MODCOLOR_2NDHIGHLIGHT, RGB(r,g,b)); - m_Dib.SetBlendColor(GetSysColor(COLOR_BTNFACE)); + m_Dib.SetBlendColor(CMainFrame::rgbCustomColors[MODCOLOR_BLENDCOLOR]); } Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-23 11:57:10 UTC (rev 377) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-23 15:04:06 UTC (rev 378) @@ -257,6 +257,8 @@ 0x00FF00, 0x00FFFF, 0x0000FF, // Channel separators GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNFACE), GetSysColor(COLOR_BTNHIGHLIGHT), + // Blend colour + GetSysColor(COLOR_BTNFACE), }; // Directory Arrays (Default + Last) Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-09-23 11:57:10 UTC (rev 377) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-09-23 15:04:06 UTC (rev 378) @@ -160,6 +160,7 @@ MODCOLOR_SEPSHADOW, MODCOLOR_SEPFACE, MODCOLOR_SEPHILITE, + MODCOLOR_BLENDCOLOR, MAX_MODCOLORS, // Internal color codes MODCOLOR_2NDHIGHLIGHT, Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-09-23 11:57:10 UTC (rev 377) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-09-23 15:04:06 UTC (rev 378) @@ -106,6 +106,7 @@ {"Note Highlight", 0, MODCOLOR_NOTE, MODCOLOR_INSTRUMENT, MODCOLOR_VOLUME, "Note:", "Instrument:", "Volume:"}, {"Effect Highlight",0, MODCOLOR_PANNING, MODCOLOR_PITCH, MODCOLOR_GLOBALS, "Panning Effects:", "Pitch Effects:", "Global Effects:"}, {"Channel Separator",0, MODCOLOR_SEPSHADOW, MODCOLOR_SEPFACE, MODCOLOR_SEPHILITE, "Shadow:", "Face:", "Highlight:"}, + {"Next/Prev Pattern",0, MODCOLOR_BLENDCOLOR, 0, 0, "Blend color:", NULL, NULL}, {"Sample Editor", 1, MODCOLOR_SAMPLE, 0, 0, "Sample Data:", NULL, NULL}, {"Instrument Editor",2, MODCOLOR_ENVELOPES, 0, 0, "Envelopes:", NULL, NULL}, {"VU-Meters", 0, MODCOLOR_VUMETER_HI, MODCOLOR_VUMETER_MED, MODCOLOR_VUMETER_LO, "Hi:", "Med:", "Lo:"} @@ -487,6 +488,7 @@ CustomColors[MODCOLOR_SEPSHADOW] = GetSysColor(COLOR_BTNSHADOW); CustomColors[MODCOLOR_SEPFACE] = GetSysColor(COLOR_BTNFACE); CustomColors[MODCOLOR_SEPHILITE] = GetSysColor(COLOR_BTNHIGHLIGHT); + CustomColors[MODCOLOR_BLENDCOLOR] = GetSysColor(COLOR_BTNFACE); OnPreviewChanged(); } @@ -514,6 +516,7 @@ CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x18, 0x28, 0x2C); CustomColors[MODCOLOR_SEPFACE] = RGB(0x49, 0x75, 0x82); CustomColors[MODCOLOR_SEPHILITE] = RGB(0x8A, 0xDB, 0xF3); + CustomColors[MODCOLOR_BLENDCOLOR] = RGB(0x27, 0x41, 0x47); OnPreviewChanged(); } @@ -541,6 +544,7 @@ CustomColors[MODCOLOR_SEPSHADOW] = RGB(0xB6, 0x96, 0x79); CustomColors[MODCOLOR_SEPFACE] = RGB(0xB6, 0x96, 0x79); CustomColors[MODCOLOR_SEPHILITE] = RGB(0xB6, 0x96, 0x79); + CustomColors[MODCOLOR_BLENDCOLOR] = RGB(0x35, 0x27, 0x24); OnPreviewChanged(); } @@ -568,6 +572,7 @@ CustomColors[MODCOLOR_SEPSHADOW] = RGB(0x80, 0x80, 0x80); CustomColors[MODCOLOR_SEPFACE] = RGB(0xD4, 0xD0, 0xC8); CustomColors[MODCOLOR_SEPHILITE] = RGB(0xFF, 0xFF, 0xFF); + CustomColors[MODCOLOR_BLENDCOLOR] = 0x00d0dbe1; OnPreviewChanged(); } Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-09-23 11:57:10 UTC (rev 377) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-09-23 15:04:06 UTC (rev 378) @@ -2193,7 +2193,7 @@ m_CbnMacroCC.ShowWindow(TRUE); m_CbnMacroPlug.ShowWindow(FALSE); m_CbnMacroPlug.ShowWindow(FALSE); - SetDlgItemText(IDC_GENMACROLABEL, "Midi CC"); + SetDlgItemText(IDC_GENMACROLABEL, "MIDI CC"); m_CbnMacroCC.SetCurSel(m_pModDoc->MacroToMidiCC(&(m_MidiCfg.szMidiSFXExt[sfx*32]))); } else { m_CbnMacroCC.EnableWindow(FALSE); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-09-27 19:56:10
|
Revision: 380 http://modplug.svn.sourceforge.net/modplug/?rev=380&view=rev Author: relabsoluness Date: 2009-09-27 19:55:54 +0000 (Sun, 27 Sep 2009) Log Message: ----------- [Fix] MIDI mapping: Pattern record checkbox wasn't updated properly. [Fix] Sample map: was broken when dealing with sample indexes greater than 255. [Mod] Version: Changed version number. [Ref] Minor code cleanup. Modified Paths: -------------- trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/version.h Modified: trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp 2009-09-24 15:24:32 UTC (rev 379) +++ trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp 2009-09-27 19:55:54 UTC (rev 380) @@ -134,8 +134,9 @@ if(i < 0 || (size_t)i >= m_rMIDIMapper.GetCount()) return; m_Setting = m_rMIDIMapper.GetDirective(i); CMIDIMappingDirective& activeSetting = m_Setting; - CheckDlgButton(IDC_CHECKACTIVE, activeSetting.IsActive() ? MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(IDC_CHECKCAPTURE, activeSetting.GetCaptureMIDI() ? MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(IDC_CHECKACTIVE, activeSetting.IsActive() ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(IDC_CHECKCAPTURE, activeSetting.GetCaptureMIDI() ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(IDC_CHECK_PATRECORD, activeSetting.GetAllowPatternEdit() ? BST_CHECKED : BST_UNCHECKED); m_ChannelCBox.SetCurSel(activeSetting.GetChannel()); Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-24 15:24:32 UTC (rev 379) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-27 19:55:54 UTC (rev 380) @@ -399,7 +399,7 @@ wsprintf(s, "Color%02d", ncol); rgbCustomColors[ncol] = GetPrivateProfileDWord("Display", s, rgbCustomColors[ncol], iniFile); } - if(rgbCustomColors[MODCOLOR_SEPSHADOW] == rgbCustomColors[MODCOLOR_SEPFACE] == rgbCustomColors[MODCOLOR_SEPHILITE] == 0 && vIniVersion < MAKE_VERSION_NUMERIC(1,17,03,02)) + if(rgbCustomColors[MODCOLOR_SEPSHADOW] == rgbCustomColors[MODCOLOR_SEPFACE] == rgbCustomColors[MODCOLOR_SEPHILITE] == 0 && vIniVersion < MAKE_VERSION_NUMERIC(1,17,03,03)) { rgbCustomColors[MODCOLOR_SEPSHADOW] = GetSysColor(COLOR_BTNSHADOW); rgbCustomColors[MODCOLOR_SEPFACE] = GetSysColor(COLOR_BTNFACE); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-09-24 15:24:32 UTC (rev 379) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-09-27 19:55:54 UTC (rev 380) @@ -3159,7 +3159,7 @@ END_CRITICAL(); // set playback timer in the status bar - SetElapsedTime(static_cast<ORDERINDEX>(nOrd), nRow, true); + SetElapsedTime(nOrd, nRow, true); if (pModPlaying != this) { @@ -3214,7 +3214,7 @@ END_CRITICAL(); // set playback timer in the status bar - SetElapsedTime(static_cast<ORDERINDEX>(nOrd), nRow, true); + SetElapsedTime(nOrd, nRow, true); if (pModPlaying != this) { pMainFrm->PlayMod(this, followSonghWnd, m_dwNotifyType|MPTNOTIFY_POSITION|MPTNOTIFY_VUMETERS); //rewbs.fix2977 @@ -3272,7 +3272,7 @@ END_CRITICAL(); // set playback timer in the status bar - SetElapsedTime(static_cast<ORDERINDEX>(nOrd), nRow, true); + SetElapsedTime(nOrd, nRow, true); if (pModPlaying != this) { pMainFrm->PlayMod(this, followSonghWnd, m_dwNotifyType|MPTNOTIFY_POSITION|MPTNOTIFY_VUMETERS); //rewbs.fix2977 Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-09-24 15:24:32 UTC (rev 379) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-09-27 19:55:54 UTC (rev 380) @@ -2080,10 +2080,10 @@ { UINT nDefault = 0; BOOL bSep = FALSE; - DWORD dwItemType, dwItemNo; + DWORD dwItemType; dwItemType = GetModItem(hItem); - dwItemNo = dwItemType >> 16; + const uint16 nItemNo = HIWORD(dwItemType); dwItemType &= 0xFFFF; SelectItem(hItem); switch(dwItemType) @@ -2111,7 +2111,7 @@ if ((pModDoc) && (!pModDoc->GetNumInstruments())) { AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); - AppendMenu(hMenu, (pModDoc->IsSampleMuted(dwItemNo) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Sample"); + AppendMenu(hMenu, (pModDoc->IsSampleMuted(nItemNo) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Sample"); AppendMenu(hMenu, MF_STRING, ID_MODTREE_SOLO, "&Solo Sample"); AppendMenu(hMenu, MF_STRING, ID_MODTREE_UNMUTEALL, "&Unmute all"); } @@ -2128,7 +2128,7 @@ if ((pModDoc) && (pModDoc->GetNumInstruments())) { AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); - AppendMenu(hMenu, (pModDoc->IsInstrumentMuted(dwItemNo) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Instrument"); + AppendMenu(hMenu, (pModDoc->IsInstrumentMuted(nItemNo) ? MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Mute Instrument"); AppendMenu(hMenu, MF_STRING, ID_MODTREE_SOLO, "&Solo Instrument"); AppendMenu(hMenu, MF_STRING, ID_MODTREE_UNMUTEALL, "&Unmute all"); // -> CODE#0023 @@ -2149,7 +2149,7 @@ CModDoc *pModDoc = GetDocumentFromItem(hItem); CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; if (pSndFile) { - PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[dwItemNo]; + PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[nItemNo]; if (pPlugin) { bool bypassed = ((pPlugin->Info.dwInputRouting&MIXPLUG_INPUTF_BYPASS) != 0); AppendMenu(hMenu, (bypassed?MF_CHECKED:0)|MF_STRING, ID_MODTREE_MUTE, "&Bypass"); @@ -2490,29 +2490,29 @@ //----------------------------- { HTREEITEM hItem = GetSelectedItem(); - DWORD dwItemType, dwItemNo; + DWORD dwItemType; CModDoc *pModDoc; dwItemType = GetModItem(hItem); - dwItemNo = dwItemType >> 16; + const uint16 nItemNo = HIWORD(dwItemType); dwItemType &= 0xFFFF; pModDoc = GetDocumentFromItem(hItem); if (pModDoc) { if ((dwItemType == MODITEM_SAMPLE) && (!pModDoc->GetNumInstruments())) { - pModDoc->MuteSample(dwItemNo, (pModDoc->IsSampleMuted(dwItemNo)) ? FALSE : TRUE); + pModDoc->MuteSample(nItemNo, (pModDoc->IsSampleMuted(nItemNo)) ? FALSE : TRUE); } else if ((dwItemType == MODITEM_INSTRUMENT) && (pModDoc->GetNumInstruments())) { - pModDoc->MuteInstrument(dwItemNo, (pModDoc->IsInstrumentMuted(dwItemNo)) ? FALSE : TRUE); + pModDoc->MuteInstrument(nItemNo, (pModDoc->IsInstrumentMuted(nItemNo)) ? FALSE : TRUE); } if ((dwItemType == MODITEM_EFFECT)) { CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; if (pSndFile) { - PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[dwItemNo]; + PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[nItemNo]; if (pPlugin) { CVstPlugin *pVstPlugin = (CVstPlugin *)pPlugin->pMixPlugin; if (pVstPlugin) pVstPlugin->Bypass(); @@ -2528,11 +2528,11 @@ //----------------------------- { HTREEITEM hItem = GetSelectedItem(); - DWORD dwItemType, dwItemNo; + DWORD dwItemType; CModDoc *pModDoc; dwItemType = GetModItem(hItem); - dwItemNo = dwItemType >> 16; + const uint16 nItemNo = HIWORD(dwItemType); dwItemType &= 0xFFFF; pModDoc = GetDocumentFromItem(hItem); if (pModDoc) @@ -2541,16 +2541,16 @@ INSTRUMENTINDEX nInstruments = pModDoc->GetNumInstruments(); if ((dwItemType == MODITEM_SAMPLE) && (!nInstruments)) { - for (UINT i=1; i<=nSamples; i++) + for (SAMPLEINDEX i=1; i<=nSamples; i++) { - pModDoc->MuteSample(i, (i == dwItemNo) ? FALSE : TRUE); + pModDoc->MuteSample(i, (i == nItemNo) ? FALSE : TRUE); } } else if ((dwItemType == MODITEM_INSTRUMENT) && (nInstruments)) { - for (UINT i=1; i<=nInstruments; i++) + for (INSTRUMENTINDEX i=1; i<=nInstruments; i++) { - pModDoc->MuteInstrument(i, (i == dwItemNo) ? FALSE : TRUE); + pModDoc->MuteInstrument(i, (i == nItemNo) ? FALSE : TRUE); } } } @@ -2572,11 +2572,11 @@ INSTRUMENTINDEX nInstruments = pModDoc->GetNumInstruments(); if ((dwItemType == MODITEM_SAMPLE) || (dwItemType == MODITEM_INSTRUMENT)) { - for (UINT i=1; i<=nSamples; i++) + for (SAMPLEINDEX i=1; i<=nSamples; i++) { pModDoc->MuteSample(i, FALSE); } - for (UINT j=1; j<=nInstruments; j++) + for (INSTRUMENTINDEX j=1; j<=nInstruments; j++) { pModDoc->MuteInstrument(j, FALSE); } @@ -2623,14 +2623,14 @@ { HTREEITEM hItem = GetSelectedItem(); DWORD dwItemType = GetModItem(hItem); - DWORD dwItem = dwItemType >> 16; + const uint16 nItem = HIWORD(dwItemType); dwItemType &= 0xFFFF; CModDoc *pModDoc = GetDocumentFromItem(hItem); CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(pSndFile && dwItem){ + if(pSndFile && nItem){ - if(pSndFile->m_szInstrumentPath[dwItem-1][0] == '\0'){ + if(pSndFile->m_szInstrumentPath[nItem-1][0] == '\0'){ CHAR pszFileNames[_MAX_PATH]; CFileDialog dlg(FALSE, (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) ? "iti" : "xi", NULL, @@ -2646,23 +2646,23 @@ dlg.m_ofn.lpstrFile = pszFileNames; dlg.m_ofn.nMaxFile = _MAX_PATH; - if(dlg.DoModal() == IDOK) strcpy(pSndFile->m_szInstrumentPath[dwItem-1], pszFileNames); + if(dlg.DoModal() == IDOK) strcpy(pSndFile->m_szInstrumentPath[nItem-1], pszFileNames); dlg.m_ofn.lpstrFile = NULL; dlg.m_ofn.nMaxFile = 0; } - if(pSndFile->m_szInstrumentPath[dwItem-1][0] != '\0'){ - int size = strlen(pSndFile->m_szInstrumentPath[dwItem-1]); - BOOL iti = _stricmp(&pSndFile->m_szInstrumentPath[dwItem-1][size-3],"iti") == 0; - BOOL xi = _stricmp(&pSndFile->m_szInstrumentPath[dwItem-1][size-2],"xi") == 0; + if(pSndFile->m_szInstrumentPath[nItem-1][0] != '\0'){ + int size = strlen(pSndFile->m_szInstrumentPath[nItem-1]); + BOOL iti = _stricmp(&pSndFile->m_szInstrumentPath[nItem-1][size-3],"iti") == 0; + BOOL xi = _stricmp(&pSndFile->m_szInstrumentPath[nItem-1][size-2],"xi") == 0; if(iti || (!iti && !xi && pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) - pSndFile->SaveITIInstrument(dwItem, pSndFile->m_szInstrumentPath[dwItem-1]); + pSndFile->SaveITIInstrument(nItem, pSndFile->m_szInstrumentPath[nItem-1]); if(xi || (!xi && !iti && pSndFile->m_nType == MOD_TYPE_XM)) - pSndFile->SaveXIInstrument(dwItem, pSndFile->m_szInstrumentPath[dwItem-1]); + pSndFile->SaveXIInstrument(nItem, pSndFile->m_szInstrumentPath[nItem-1]); - pSndFile->instrumentModified[dwItem-1] = FALSE; + pSndFile->instrumentModified[nItem-1] = FALSE; } if(pModDoc) pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-09-24 15:24:32 UTC (rev 379) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-09-27 19:55:54 UTC (rev 380) @@ -2787,7 +2787,7 @@ KeyboardMap[iNote] = pIns->Keyboard[iNote]; } else { - KeyboardMap[iNote] = (BYTE)nSample; + KeyboardMap[iNote] = (WORD)nSample; } /* rewbs.note: I don't think we need this with cust keys. // -> CODE#0009 Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2009-09-24 15:24:32 UTC (rev 379) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2009-09-27 19:55:54 UTC (rev 380) @@ -535,7 +535,7 @@ CSliderCtrl m_SbOctave; CSoundFile *m_pSndFile; UINT m_nInstrument; - BYTE KeyboardMap[NOTE_MAX]; + WORD KeyboardMap[NOTE_MAX]; public: CSampleMapDlg(CSoundFile *pSndFile, UINT nInstr, CWnd *parent=NULL):CDialog(IDD_EDITSAMPLEMAP, parent) Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2009-09-24 15:24:32 UTC (rev 379) +++ trunk/OpenMPT/mptrack/version.h 2009-09-27 19:55:54 UTC (rev 380) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 17 #define VER_MINOR 03 -#define VER_MINORMINOR 02 +#define VER_MINORMINOR 03 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-29 23:14:08
|
Revision: 383 http://modplug.svn.sourceforge.net/modplug/?rev=383&view=rev Author: saga-games Date: 2009-09-29 23:13:53 +0000 (Tue, 29 Sep 2009) Log Message: ----------- [Fix] Pattern Editor: Copying only the param column of PC notes overwrote the value column when pasting them [Mod] Pattern Editor: When interpolating PC notes, the plugin number and note type won't get overriden if the note type is already PC or PCs. I find this more logical. Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-29 22:30:10 UTC (rev 382) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-29 23:13:53 UTC (rev 383) @@ -2349,7 +2349,7 @@ if(m[col].note == NOTE_PCS || m[col].note == NOTE_PC) { - if(s[8] != '.') + if(s[8] != '.' && s[8] > ' ') { char val[4]; memcpy(val, s+8, 3); Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-29 22:30:10 UTC (rev 382) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-29 23:13:53 UTC (rev 383) @@ -2293,10 +2293,13 @@ case EFFECT_COLUMN: if(doPCinterpolation) { // With PC/PCs notes, copy PCs note and plug index to all rows where - // effect interpolation is done. + // effect interpolation is done, if no PC note is there. const uint16 val = static_cast<uint16>(vsrc + ((vdest - vsrc) * (int)i + verr) / distance); - pcmd->note = PCnote; - pcmd->instr = PCinst; + if(pcmd->note != NOTE_PC && pcmd->note != NOTE_PCS) + { + pcmd->note = PCnote; + pcmd->instr = PCinst; + } pcmd->SetValueVolCol(PCparam); pcmd->SetValueEffectCol(val); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-10-02 16:47:41
|
Revision: 384 http://modplug.svn.sourceforge.net/modplug/?rev=384&view=rev Author: saga-games Date: 2009-10-02 15:49:41 +0000 (Fri, 02 Oct 2009) Log Message: ----------- [Imp] Tree view: Show sequences in song treeview. Still slightly buggy, e.g. when removing everything but one sequence or when adding a sequence when there's only one sequence. [Mod] Pattern editor: Slight redesign of the pattern control area [Ref] Some minor internal changes Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-09-29 23:13:53 UTC (rev 383) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-10-02 15:49:41 UTC (rev 384) @@ -296,6 +296,7 @@ ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI2), false); // Show/hide multisequence controls according the current modtype. + GetDlgItem(IDC_STATIC_SEQUENCE_NAME_FRAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); GetDlgItem(IDC_STATIC_SEQUENCE_NAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); GetDlgItem(IDC_EDIT_SEQUENCE_NAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); } @@ -608,6 +609,7 @@ if (pSndFile) { lParam &= 0x7FFF; + m_OrderList.OnSelectSequence(pSndFile->Order.GetCurrentSequenceIndex()); // new sequence already set in view_tre.cpp, GetModItem() m_OrderList.SetCurSel((ORDERINDEX)lParam); SetCurrentPattern(pSndFile->Order[lParam]); } Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-09-29 23:13:53 UTC (rev 383) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-10-02 15:49:41 UTC (rev 384) @@ -326,7 +326,9 @@ { DWORD dwType; DWORD dwLatency; - UINT nOrder, nPattern, nRow; // Always valid + ORDERINDEX nOrder; // Always valid + PATTERNINDEX nPattern; // dito + ROWINDEX nRow; // dito DWORD dwPos[MAX_CHANNELS]; // sample/envelope pos for each channel if >= 0 } MPTNOTIFICATION, *PMPTNOTIFICATION; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-29 23:13:53 UTC (rev 383) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-10-02 15:49:41 UTC (rev 384) @@ -1736,9 +1736,9 @@ PATTERNINDEX CModDoc::InsertPattern(ORDERINDEX nOrd, ROWINDEX nRows) //------------------------------------------------------------------ { - const int i = m_SndFile.Patterns.Insert(nRows); - if(i < 0) - return PATTERNINDEX_INVALID; + const PATTERNINDEX i = m_SndFile.Patterns.Insert(nRows); + if(i == PATTERNINDEX_INVALID) + return i; //Increasing orderlist size if given order is beyond current limit, //or if the last order already has a pattern. Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-09-29 23:13:53 UTC (rev 383) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-02 15:49:41 UTC (rev 384) @@ -296,7 +296,8 @@ if (pInfo) { pInfo->pModDoc = pModDoc; - pInfo->nOrdSel = (UINT)-1; + pInfo->nSeqSel = SEQUENCEINDEX_INVALID; + pInfo->nOrdSel = ORDERINDEX_INVALID; DocInfo[nNewNdx] = pInfo; UpdateView(nNewNdx, HINT_MODTYPE); if (pInfo->hSong) @@ -688,62 +689,114 @@ if ((pInfo->hOrders) && (hintFlagPart != HINT_INSNAMES) && (hintFlagPart != HINT_SMPNAMES)) { const DWORD nPat = (lHint >> HINT_SHIFT_PAT); - // If there are items past the new sequence length, delete them. - for(size_t i = pSndFile->Order.GetLength(); i < pInfo->tiOrders.size(); i++) if (pInfo->tiOrders[i]) - {DeleteItem(pInfo->tiOrders[i]); pInfo->tiOrders[i] = NULL;} - if (pInfo->tiOrders.size() < pSndFile->Order.GetLength()) // Resize tiOrders if needed. - pInfo->tiOrders.resize(pSndFile->Order.GetLength(), NULL); - UINT imin=0, imax = pSndFile->Order.GetLastIndex(); - const bool patNamesOnly = (hintFlagPart == HINT_PATNAMES); - //if (hintFlagPart == HINT_PATNAMES) && (dwHintParam < pSndFile->Order.size())) imin = imax = dwHintParam; - BOOL bEnded = FALSE; - for (UINT iOrd=imin; iOrd<=imax; iOrd++) + // If there are too many sequences, delete them. + for(size_t nSeq = pSndFile->Order.GetNumSequences(); nSeq < pInfo->tiSequences.size(); nSeq++) if (pInfo->tiSequences[nSeq]) { - if (pSndFile->Order[iOrd] == pSndFile->Order.GetInvalidPatIndex()) bEnded = TRUE; - if (bEnded) + for(size_t nOrd = 0; nOrd < pInfo->tiOrders[nSeq].size(); nOrd++) if (pInfo->tiOrders[nSeq][nOrd]) { - if (pInfo->tiOrders[iOrd]) + DeleteItem(pInfo->tiOrders[nSeq][nOrd]); pInfo->tiOrders[nSeq][nOrd] = NULL; + } + DeleteItem(pInfo->tiSequences[nSeq]); pInfo->tiSequences[nSeq] = NULL; + } + if (pInfo->tiSequences.size() < pSndFile->Order.GetNumSequences()) // Resize tiSequences if needed. + { + pInfo->tiSequences.resize(pSndFile->Order.GetNumSequences(), NULL); + pInfo->tiOrders.resize(pSndFile->Order.GetNumSequences()); + } + + /* // number of sequences changed: wipe tree first (is this necessary?) + if(pInfo->tiOrders.size() != pSndFile->Order.GetNumSequences()) + { + for(size_t nSeq = 0; nSeq < pInfo->tiOrders.size(); nSeq++) + { + for(size_t nOrd = 0; nOrd < pInfo->tiOrders[nSeq].size(); nOrd++) if (pInfo->tiOrders[nSeq][nOrd]) { - DeleteItem(pInfo->tiOrders[iOrd]); - pInfo->tiOrders[iOrd] = NULL; + DeleteItem(pInfo->tiOrders[nSeq][nOrd]); pInfo->tiOrders[nSeq][nOrd] = NULL; } - } else + DeleteItem(pInfo->tiSequences[nSeq]); pInfo->tiSequences[nSeq] = NULL; + } + pInfo->tiOrders.resize(pSndFile->Order.GetNumSequences()); + pInfo->tiSequences.resize(pSndFile->Order.GetNumSequences(), NULL); + }*/ + + HTREEITEM hAncestorNode = pInfo->hOrders; + + // go through all sequences + for(SEQUENCEINDEX nSeq = 0; nSeq < pSndFile->Order.GetNumSequences(); nSeq++) + { + // TODO update sequence names + if(pSndFile->Order.GetNumSequences() > 1) { - if(patNamesOnly && pSndFile->Order[iOrd] != nPat) - continue; - UINT state = (iOrd == pInfo->nOrdSel) ? TVIS_BOLD : 0; - if (pSndFile->Order[iOrd] < pSndFile->Patterns.Size()) + // more than one sequence -> add folder + if(pInfo->tiSequences[nSeq] == NULL) { - stmp[0] = 0; - pSndFile->GetPatternName(pSndFile->Order[iOrd], stmp, sizeof(stmp)); - if (stmp[0]) + CString sSeqName = pSndFile->Order.GetSequence(nSeq).m_sName; + if(sSeqName.IsEmpty()) sSeqName.Format("Sequence %d", nSeq); + pInfo->tiSequences[nSeq] = InsertItem(sSeqName, IMAGE_FOLDER, IMAGE_FOLDER, pInfo->hOrders, TVI_LAST); + } + hAncestorNode = pInfo->tiSequences[nSeq]; + } + + // If there are items past the new sequence length, delete them. + for(size_t nOrd = pSndFile->Order.GetSequence(nSeq).GetLength(); nOrd < pInfo->tiOrders[nSeq].size(); nOrd++) if (pInfo->tiOrders[nSeq][nOrd]) + { + DeleteItem(pInfo->tiOrders[nSeq][nOrd]); pInfo->tiOrders[nSeq][nOrd] = NULL; + } + if (pInfo->tiOrders[nSeq].size() < pSndFile->Order.GetSequence(nSeq).GetLength()) // Resize tiOrders if needed. + pInfo->tiOrders[nSeq].resize(pSndFile->Order.GetSequence(nSeq).GetLength(), NULL); + UINT imin = 0, imax = pSndFile->Order.GetSequence(nSeq).GetLastIndex(); + const bool patNamesOnly = (hintFlagPart == HINT_PATNAMES); + + //if (hintFlagPart == HINT_PATNAMES) && (dwHintParam < pSndFile->Order.size())) imin = imax = dwHintParam; + bool bEnded = false; + for (UINT iOrd=imin; iOrd<=imax; iOrd++) + { + if (pSndFile->Order.GetSequence(nSeq)[iOrd] == pSndFile->Order.GetInvalidPatIndex()) bEnded = true; + if (bEnded) + { + if (pInfo->tiOrders[nSeq][iOrd]) { - wsprintf(s, (CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] %d: %s" : "[%02d] %d: %s", - iOrd, pSndFile->Order[iOrd], stmp); + DeleteItem(pInfo->tiOrders[nSeq][iOrd]); + pInfo->tiOrders[nSeq][iOrd] = NULL; + } + } else + { + if(patNamesOnly && pSndFile->Order.GetSequence(nSeq)[iOrd] != nPat) + continue; + UINT state = (iOrd == pInfo->nOrdSel && nSeq == pInfo->nSeqSel) ? TVIS_BOLD : 0; + if (pSndFile->Order.GetSequence(nSeq)[iOrd] < pSndFile->Patterns.Size()) + { + stmp[0] = 0; + pSndFile->GetPatternName(pSndFile->Order.GetSequence(nSeq)[iOrd], stmp, sizeof(stmp)); + if (stmp[0]) + { + wsprintf(s, (CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] %d: %s" : "[%02d] %d: %s", + iOrd, pSndFile->Order.GetSequence(nSeq)[iOrd], stmp); + } else + { + wsprintf(s, (CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] Pattern %d" : "[%02d] Pattern %d", + iOrd, pSndFile->Order.GetSequence(nSeq)[iOrd]); + } } else { - wsprintf(s, (CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] Pattern %d" : "[%02d] Pattern %d", - iOrd, pSndFile->Order[iOrd]); + wsprintf(s, "[%02d] Skip", iOrd); } - } else - { - wsprintf(s, "[%02d] Skip", iOrd); + if (pInfo->tiOrders[nSeq][iOrd]) + { + tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_STATE; + tvi.state = 0; + tvi.stateMask = TVIS_BOLD; + tvi.hItem = pInfo->tiOrders[nSeq][iOrd]; + tvi.pszText = stmp; + tvi.cchTextMax = sizeof(stmp); + GetItem(&tvi); + if ((strcmp(s, stmp)) || (tvi.state != state)) + SetItem(pInfo->tiOrders[nSeq][iOrd], TVIF_TEXT | TVIF_STATE, s, 0, 0, state, TVIS_BOLD, 0); + } else + { + pInfo->tiOrders[nSeq][iOrd] = InsertItem(s, IMAGE_PARTITION, IMAGE_PARTITION, hAncestorNode, TVI_LAST); + } } - if (pInfo->tiOrders[iOrd]) - { - tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_STATE; - tvi.state = 0; - tvi.stateMask = TVIS_BOLD; - tvi.hItem = pInfo->tiOrders[iOrd]; - tvi.pszText = stmp; - tvi.cchTextMax = sizeof(stmp); - GetItem(&tvi); - if ((strcmp(s, stmp)) || (tvi.state != state)) - SetItem(pInfo->tiOrders[iOrd], TVIF_TEXT | TVIF_STATE, s, 0, 0, state, TVIS_BOLD, 0); - } else - { - pInfo->tiOrders[iOrd] = InsertItem(s, IMAGE_PARTITION, IMAGE_PARTITION, pInfo->hOrders, TVI_LAST); - } } } } @@ -899,7 +952,7 @@ //----------------------------------------- { LPARAM lParam; - HTREEITEM hItemParent, hRootParent; + HTREEITEM hItemParent, hItemParentParent, hRootParent; if (!hItem) return 0; // First, test root items @@ -908,9 +961,10 @@ // Test DLS Banks lParam = GetItemData(hItem); hItemParent = GetParentItem(hItem); + hItemParentParent = GetParentItem(hItemParent); hRootParent = hItemParent; CModDoc *pModDoc = GetDocumentFromItem(hItem); - CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; + CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : nullptr; if ((hRootParent != NULL) && (m_pDataTree)) { HTREEITEM h; @@ -971,13 +1025,29 @@ if (hItem == pSong->hSamples) return MODITEM_HDR_SAMPLES; if (hItem == pSong->hInstruments) return MODITEM_HDR_INSTRUMENTS; if (hItem == pSong->hComments) return MODITEM_COMMENTS; - // Order List ? - if (hItemParent == pSong->hOrders) + // Order List? (either "order list" or "sequence x" item as parent) + if ((hItemParent == pSong->hOrders && pSong->tiSequences.size() == 1) || (hItemParentParent == pSong->hOrders)) { - ASSERT(pSong->tiOrders.size() == pSndFile->Order.size()); - for (UINT i=0; i<pSong->tiOrders.size(); i++) + // find sequence this item belongs to + for(SEQUENCEINDEX nSeq = 0; nSeq < pSong->tiOrders.size(); nSeq++) { - if (hItem == pSong->tiOrders[i]) return (MODITEM_ORDER | (i << 16)); + ASSERT(pSong->tiOrders[nSeq].size() == pSndFile->Order.size()); + for(ORDERINDEX nOrd = 0; nOrd < pSong->tiOrders[nSeq].size(); nOrd++) + { + if (hItem == pSong->tiOrders[nSeq][nOrd]) + { + if(pSong->pModDoc->GetSoundFile() != nullptr) + { + pSong->pModDoc->GetSoundFile()->Order.SetSequence(nSeq); + // TODO this is buggy + //OnSelectSequence must be called? Or send a message? + } + //if(nSeq != pSong->nSeqSel) // sequence change + // return (MODITEM_ORDER_SEQUENCE | (nOrd << 16)); + //else // same sequence + return (MODITEM_ORDER | (nOrd << 16)); + } + } } } // Pattern ? @@ -1568,7 +1638,13 @@ || (!lstrcmpi(s, ".dmf")) || (!lstrcmpi(s, ".mt2")) || (!lstrcmpi(s, ".med")) - || (!lstrcmpi(s, ".wow"))))) + || (!lstrcmpi(s, ".wow")) + || (!lstrcmpi(s, ".gdm")) + || (!lstrcmpi(s, ".imf")) +#ifndef NO_MO3_SUPPORT + || (!lstrcmpi(s, ".mo3")) +#endif + ))) { if (m_pDataTree) { @@ -1910,10 +1986,12 @@ { for (UINT i=0; i<MODTREE_MAX_DOCUMENTS; i++) if ((DocInfo[i]) && (DocInfo[i]->pModDoc == pModDoc)) { - UINT nNewOrd = (pNotify) ? pNotify->nOrder : (UINT)-1; - if (nNewOrd != DocInfo[i]->nOrdSel) + ORDERINDEX nNewOrd = (pNotify) ? pNotify->nOrder : ORDERINDEX_INVALID; + SEQUENCEINDEX nNewSeq = (pModDoc->GetSoundFile() != nullptr) ? pModDoc->GetSoundFile()->Order.GetCurrentSequenceIndex() : SEQUENCEINDEX_INVALID; + if (nNewOrd != DocInfo[i]->nOrdSel || nNewSeq != DocInfo[i]->nSeqSel) { DocInfo[i]->nOrdSel = nNewOrd; + DocInfo[i]->nSeqSel = nNewSeq; UpdateView(i, HINT_MODSEQUENCE); } break; Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2009-09-29 23:13:53 UTC (rev 383) +++ trunk/OpenMPT/mptrack/View_tre.h 2009-10-02 15:49:41 UTC (rev 384) @@ -44,24 +44,32 @@ struct MODTREEDOCINFO { CModDoc *pModDoc; - UINT nOrdSel; + SEQUENCEINDEX nSeqSel; + ORDERINDEX nOrdSel; HTREEITEM hSong, hPatterns, hSamples, hInstruments, hComments, hOrders, hEffects; vector<HTREEITEM> tiPatterns; HTREEITEM tiSamples[MAX_SAMPLES]; HTREEITEM tiInstruments[MAX_INSTRUMENTS]; - vector<HTREEITEM> tiOrders; + vector<vector<HTREEITEM>> tiOrders; + vector<HTREEITEM> tiSequences; HTREEITEM tiEffects[MAX_MIXPLUGINS]; MODTREEDOCINFO(const CSoundFile* const pSndFile) { pModDoc = NULL; - nOrdSel = 0; + nSeqSel = SEQUENCEINDEX_INVALID; + nOrdSel = ORDERINDEX_INVALID; hSong = hPatterns = hSamples = hInstruments = hComments = hOrders = hEffects = NULL; if(pSndFile != NULL) { tiPatterns.resize(pSndFile->Patterns.Size(), NULL); - tiOrders.resize(pSndFile->Order.GetLength(), NULL); + tiOrders.resize(pSndFile->Order.GetNumSequences()); + for(SEQUENCEINDEX i = 0; i < tiOrders.size(); i++) + { + //tiOrders[i].resize(pSndFile->Order.GetSequence(i)->GetLength(), NULL); + } + tiSequences.resize(pSndFile->Order.GetNumSequences(), NULL); } memset(tiSamples, 0, sizeof(tiSamples)); memset(tiInstruments, 0, sizeof(tiInstruments)); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-09-29 23:13:53 UTC (rev 383) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-10-02 15:49:41 UTC (rev 384) @@ -13,7 +13,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// German (Germany) resources +// Deutsch (Deutschland) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) #ifdef _WIN32 @@ -55,12 +55,12 @@ END #endif // APSTUDIO_INVOKED -#endif // German (Germany) resources +#endif // Deutsch (Deutschland) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// Englisch (USA) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 @@ -351,40 +351,41 @@ LTEXT "Song Message:",IDC_STATIC,4,2,76,8 END -IDD_CONTROL_PATTERNS DIALOGEX 0, 0, 585, 156 +IDD_CONTROL_PATTERNS DIALOGEX 0, 0, 585, 114 STYLE DS_SETFONT | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN - CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT,432,34,55,10 - COMBOBOX IDC_COMBO_INSTRUMENT,22,74,95,137,CBS_DROPDOWNLIST | WS_VSCROLL - CTEXT "Row spacing",IDC_STATIC,172,32,54,12,SS_CENTERIMAGE,WS_EX_STATICEDGE - EDITTEXT IDC_EDIT_SPACING,225,32,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP - CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,245,32,11,11 - PUSHBUTTON "<<",IDC_BUTTON2,2,99,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE - PUSHBUTTON ">>",IDC_BUTTON1,14,99,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE - CTEXT "Pattern name",IDC_STATIC,9,32,52,12,SS_CENTERIMAGE,WS_EX_STATICEDGE - EDITTEXT IDC_EDIT_PATTERNNAME,60,32,107,12,ES_AUTOHSCROLL + CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,321,31,55,10 + COMBOBOX IDC_COMBO_INSTRUMENT,19,61,96,137,CBS_DROPDOWNLIST | WS_VSCROLL + CTEXT "Row spacing",IDC_STATIC,171,32,42,8,SS_CENTERIMAGE + EDITTEXT IDC_EDIT_SPACING,219,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP + CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,239,30,11,11 + PUSHBUTTON "<<",IDC_BUTTON2,3,84,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE + PUSHBUTTON ">>",IDC_BUTTON1,15,84,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE + CTEXT "Pattern name",IDC_STATIC,9,32,43,8,SS_CENTERIMAGE + EDITTEXT IDC_EDIT_PATTERNNAME,57,30,107,12,ES_AUTOHSCROLL CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,372,18 - CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,9,74,9,12 - COMBOBOX IDC_COMBO_SPLITINSTRUMENT,209,74,95,125,CBS_DROPDOWNLIST | WS_VSCROLL - COMBOBOX IDC_COMBO_SPLITNOTE,173,74,32,137,CBS_DROPDOWNLIST | WS_VSCROLL - LTEXT "Note",IDC_STATIC,173,65,35,8 - LTEXT "Instrument",IDC_STATIC,209,65,58,8 - CONTROL "Transpose",IDC_PATTERN_OCTAVELINK,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT,438,76,49,10 - COMBOBOX IDC_COMBO_OCTAVEMODIFIER,382,74,52,137,CBS_DROPDOWNLIST | WS_VSCROLL - COMBOBOX IDC_COMBO_SPLITVOLUME,342,74,36,146,CBS_DROPDOWNLIST | WS_VSCROLL - LTEXT "Volume",IDC_STATIC,342,65,25,8 - PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,122,74,33,13,0,WS_EX_STATICEDGE - PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI2,308,74,30,13,0,WS_EX_STATICEDGE - GROUPBOX "Main instrument",IDC_STATIC,2,53,160,40 - GROUPBOX "Keyboard Split",IDC_STATIC,167,53,328,40 - LTEXT "Octave shift",IDC_STATIC,382,65,52,8 - GROUPBOX "",IDC_STATIC,2,22,493,27 - CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT | WS_TABSTOP,370,34,55,10 - EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,2,113,28,12,ES_AUTOHSCROLL | ES_READONLY - CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,15,118,11,11 - EDITTEXT IDC_EDIT_SEQUENCE_NAME,317,32,47,12,ES_AUTOHSCROLL - CTEXT "Sequence name",IDC_STATIC_SEQUENCE_NAME,261,32,55,12,SS_CENTERIMAGE,WS_EX_STATICEDGE + CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,7,61,11,12 + COMBOBOX IDC_COMBO_SPLITINSTRUMENT,243,60,96,125,CBS_DROPDOWNLIST | WS_VSCROLL + COMBOBOX IDC_COMBO_SPLITNOTE,189,60,32,137,CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Note",IDC_STATIC,171,62,16,8 + LTEXT "Instr.",IDC_STATIC,225,62,16,8 + CONTROL "Transpose",IDC_PATTERN_OCTAVELINK,"Button",BS_AUTOCHECKBOX | BS_FLAT,513,61,49,10 + COMBOBOX IDC_COMBO_OCTAVEMODIFIER,465,60,44,137,CBS_DROPDOWNLIST | WS_VSCROLL + COMBOBOX IDC_COMBO_SPLITVOLUME,399,60,30,146,CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Vol.",IDC_STATIC,381,62,13,8 + PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,121,61,33,13,0,WS_EX_STATICEDGE + PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI2,345,60,30,13,0,WS_EX_STATICEDGE + GROUPBOX "Main instrument",IDC_STATIC,3,48,154,30 + GROUPBOX "Keyboard Split",IDC_STATIC,165,48,402,30 + LTEXT "Oct. shift",IDC_STATIC,435,62,29,8 + GROUPBOX "",IDC_STATIC,3,22,376,24 + CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,261,31,57,10 + EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,3,98,28,12,ES_AUTOHSCROLL | ES_READONLY + CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,16,103,11,11 + EDITTEXT IDC_EDIT_SEQUENCE_NAME,453,30,108,12,ES_AUTOHSCROLL + CTEXT "Sequence name",IDC_STATIC_SEQUENCE_NAME,393,32,53,8,SS_CENTERIMAGE + GROUPBOX "",IDC_STATIC_SEQUENCE_NAME_FRAME,387,22,180,24 END IDD_CONTROL_SAMPLES DIALOGEX 0, 0, 544, 106 @@ -1428,7 +1429,7 @@ RIGHTMARGIN, 573 VERTGUIDE, 39 VERTGUIDE, 134 - BOTTOMMARGIN, 146 + BOTTOMMARGIN, 104 HORZGUIDE, 37 HORZGUIDE, 61 HORZGUIDE, 73 @@ -2218,12 +2219,12 @@ "Removing unused patterns is not available when using multiple sequences." END -#endif // English (U.S.) resources +#endif // Englisch (USA) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.K.) resources +// Englisch (GB) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) #ifdef _WIN32 @@ -2592,7 +2593,7 @@ // IDR_BUILTIN_TUNINGS TUNING "res\\built-inTunings.tc" -#endif // English (U.K.) resources +#endif // Englisch (GB) resources ///////////////////////////////////////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-09-29 23:13:53 UTC (rev 383) +++ trunk/OpenMPT/mptrack/resource.h 2009-10-02 15:49:41 UTC (rev 384) @@ -889,6 +889,7 @@ #define IDC_SAVE_COLORSCHEME 2388 #define IDC_EDIT_SEQUENCE_NAME 2389 #define IDC_STATIC_SEQUENCE_NAME 2390 +#define IDC_STATIC_SEQUENCE_NAME_FRAME 2391 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1132,7 +1133,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 521 #define _APS_NEXT_COMMAND_VALUE 59230 -#define _APS_NEXT_CONTROL_VALUE 2391 +#define _APS_NEXT_CONTROL_VALUE 2392 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-10-05 20:52:02
|
Revision: 388 http://modplug.svn.sourceforge.net/modplug/?rev=388&view=rev Author: saga-games Date: 2009-10-05 20:51:54 +0000 (Mon, 05 Oct 2009) Log Message: ----------- [Imp] Improved cleanup dialog, with new options (remove all *, optimize samples) Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/CleanupSong.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-10-05 17:02:19 UTC (rev 387) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-10-05 20:51:54 UTC (rev 388) @@ -18,19 +18,31 @@ // Default checkbox state bool CModCleanupDlg::m_bCheckBoxes[CU_MAX_CLEANUP_OPTIONS] = { - true, true, - true, true, - true, false, - true, false, + // remove unused + true, true, // pat/smp + true, true, // ins/plg + // remove all + false, false, // pat/ord + false, false, // smp/ins + false, // plg + // misc + true, true, // pat/smp + true, false, // opt/reset }; // Checkbox -> Control ID LUT WORD const CModCleanupDlg::m_nCleanupIDtoDlgID[CU_MAX_CLEANUP_OPTIONS] = { - IDC_CHK_CLEANUP_PATTERNS, IDC_CHK_REARRANGE_PATTERNS, - IDC_CHK_CLEANUP_SAMPLES, IDC_CHK_REARRANGE_SAMPLES, - IDC_CHK_CLEANUP_INSTRUMENTS, IDC_CHK_REMOVE_INSTRUMENTS, - IDC_CHK_CLEANUP_PLUGINS, IDC_CHK_SAMPLEPACK, + // remove unused + IDC_CHK_CLEANUP_PATTERNS, IDC_CHK_CLEANUP_SAMPLES, + IDC_CHK_CLEANUP_INSTRUMENTS, IDC_CHK_CLEANUP_PLUGINS, + // remove all + IDC_CHK_REMOVE_PATTERNS, IDC_CHK_REMOVE_ORDERS, + IDC_CHK_REMOVE_SAMPLES, IDC_CHK_REMOVE_INSTRUMENTS, + IDC_CHK_REMOVE_PLUGINS, + // misc + IDC_CHK_REARRANGE_PATTERNS, IDC_CHK_REARRANGE_SAMPLES, + IDC_CHK_OPTIMIZE_SAMPLES, IDC_CHK_RESET_VARIABLES, }; /////////////////////////////////////////////////////////////////////// @@ -38,18 +50,8 @@ BEGIN_MESSAGE_MAP(CModCleanupDlg, CDialog) //{{AFX_MSG_MAP(CModTypeDlg) - /*ON_COMMAND(IDC_CHK_CLEANUP_PATTERNS, OnCheckCleanupPatterns) - ON_COMMAND(IDC_CHK_REARRANGE_PATTERNS, OnCheckRearrangePatterns) - ON_COMMAND(IDC_CHK_CLEANUP_SAMPLES, OnCheckCleanupSamples) - ON_COMMAND(IDC_CHK_REARRANGE_SAMPLES, OnCheckRearrangeSamples) - ON_COMMAND(IDC_CHK_CLEANUP_INSTRUMENTS, OnCheckCleanupInstruments) - ON_COMMAND(IDC_CHK_REMOVE_INSTRUMENTS, OnCheckRemoveInstruments) - ON_COMMAND(IDC_CHK_CLEANUP_PLUGINS, OnCheckCleanupPlugins) - ON_COMMAND(IDC_CHK_SAMPLEPACK, OnCheckCreateSamplepack)*/ - ON_COMMAND(IDC_BTN_CLEANUP_SONG, OnPresetCleanupSong) ON_COMMAND(IDC_BTN_COMPO_CLEANUP, OnPresetCompoCleanup) - // -! NEW_FEATURE#0023 //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -66,7 +68,10 @@ if(pSndFile == nullptr) return FALSE; GetDlgItem(m_nCleanupIDtoDlgID[CU_CLEANUP_INSTRUMENTS])->EnableWindow((pSndFile->m_nInstruments > 0) ? TRUE :FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_REMOVE_INSTRUMENTS])->EnableWindow((pSndFile->m_nInstruments > 0) ? TRUE :FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_REMOVE_SAMPLES])->EnableWindow((pSndFile->m_nSamples > 0) ? TRUE :FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_REARRANGE_SAMPLES])->EnableWindow((pSndFile->m_nSamples > 1) ? TRUE :FALSE); return TRUE; } @@ -82,25 +87,36 @@ bool bModified = false; m_pModDoc->ClearLog(); + // Orders + if(m_bCheckBoxes[CU_REMOVE_ORDERS]) bModified |= RemoveAllOrders(); + // Patterns + if(m_bCheckBoxes[CU_REMOVE_PATTERNS]) bModified |= RemoveAllPatterns(); if(m_bCheckBoxes[CU_CLEANUP_PATTERNS]) bModified |= RemoveUnusedPatterns(); if(m_bCheckBoxes[CU_REARRANGE_PATTERNS]) bModified |= RemoveUnusedPatterns(false); + // Instruments if(m_pModDoc->GetSoundFile()->m_nInstruments > 0) { + if(m_bCheckBoxes[CU_REMOVE_INSTRUMENTS]) bModified |= RemoveAllInstruments(); if(m_bCheckBoxes[CU_CLEANUP_INSTRUMENTS]) bModified |= RemoveUnusedInstruments(); - if(m_bCheckBoxes[CU_REMOVE_INSTRUMENTS]) bModified |= RemoveAllInstruments(); } + // Samples + if(m_bCheckBoxes[CU_REMOVE_SAMPLES]) bModified |= RemoveAllSamples(); if(m_bCheckBoxes[CU_CLEANUP_SAMPLES]) bModified |= RemoveUnusedSamples(); + if(m_bCheckBoxes[CU_OPTIMIZE_SAMPLES]) bModified |= OptimizeSamples(); if(m_pModDoc->GetSoundFile()->m_nSamples > 1) { if(m_bCheckBoxes[CU_REARRANGE_SAMPLES]) bModified |= RearrangeSamples(); } + // Plugins + if(m_bCheckBoxes[CU_REMOVE_PLUGINS]) bModified |= RemoveAllPlugins(); if(m_bCheckBoxes[CU_CLEANUP_PLUGINS]) bModified |= RemoveUnusedPlugins(); + // Create samplepack - if(m_bCheckBoxes[CU_CREATE_SAMPLEPACK]) bModified |= CreateSamplepack(); + if(m_bCheckBoxes[CU_RESET_VARIABLES]) bModified |= ResetVariables(); if(bModified) m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODTYPE|HINT_MODSEQUENCE|HINT_MODGENERAL); @@ -120,26 +136,42 @@ void CModCleanupDlg::OnPresetCleanupSong() //---------------------------------------- { + // remove unused CheckDlgButton(IDC_CHK_CLEANUP_PATTERNS, MF_CHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_CHECKED); CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_CHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_CHECKED); + CheckDlgButton(IDC_CHK_CLEANUP_PLUGINS, MF_CHECKED); + // remove all + CheckDlgButton(IDC_CHK_REMOVE_PATTERNS, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REMOVE_ORDERS, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REMOVE_SAMPLES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_REMOVE_INSTRUMENTS, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_CLEANUP_PLUGINS, MF_CHECKED); + CheckDlgButton(IDC_CHK_REMOVE_PLUGINS, MF_UNCHECKED); + // misc + CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_CHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); + CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_CHECKED); CheckDlgButton(IDC_CHK_SAMPLEPACK, MF_UNCHECKED); } void CModCleanupDlg::OnPresetCompoCleanup() //---------------------------------------- { + // remove unused CheckDlgButton(IDC_CHK_CLEANUP_PATTERNS, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_UNCHECKED); CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_REMOVE_INSTRUMENTS, MF_UNCHECKED); CheckDlgButton(IDC_CHK_CLEANUP_PLUGINS, MF_UNCHECKED); + // remove all + CheckDlgButton(IDC_CHK_REMOVE_PATTERNS, MF_CHECKED); + CheckDlgButton(IDC_CHK_REMOVE_ORDERS, MF_CHECKED); + CheckDlgButton(IDC_CHK_REMOVE_SAMPLES, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REMOVE_INSTRUMENTS, MF_CHECKED); + CheckDlgButton(IDC_CHK_REMOVE_PLUGINS, MF_CHECKED); + // misc + CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); + CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_SAMPLEPACK, MF_CHECKED); } @@ -235,7 +267,7 @@ if ((bRemove) && (bWaste)) { EndWaitCursor(); - wsprintf(s, "%d pattern(s) present in file, but not used in the song\nDo you want to reorder the sequence list and remove these patterns?", bWaste); + wsprintf(s, "%d pattern%s present in file, but not used in the song\nDo you want to reorder the sequence list and remove these patterns?", bWaste, (bWaste == 1) ? "" : "s"); if (m_wParent->MessageBox(s, "Pattern Cleanup", MB_YESNO) != IDYES) return false; BeginWaitCursor(); } @@ -313,7 +345,7 @@ m_pModDoc->ClearUndo(); if (nPatRemoved) { - wsprintf(s, "%d pattern(s) removed.\n", nPatRemoved); + wsprintf(s, "%d pattern%s removed.\n", nPatRemoved, (nPatRemoved == 1) ? "" : "s"); m_pModDoc->AddToLog(s); } return true; @@ -331,7 +363,7 @@ CHAR s[512]; BOOL bIns[MAX_SAMPLES]; - UINT nExt = 0, nLoopOpt = 0; + UINT nExt = 0; UINT nRemoved = 0; BeginWaitCursor(); @@ -391,8 +423,8 @@ EndWaitCursor(); if (nExt && !((pSndFile->m_nType & MOD_TYPE_IT) && (pSndFile->m_dwSongFlags&SONG_ITPROJECT))) { //We don't remove an instrument's unused samples in an ITP. - wsprintf(s, "OpenMPT detected %d sample(s) referenced by an instrument,\n" - "but not used in the song. Do you want to remove them ?", nExt); + wsprintf(s, "OpenMPT detected %d sample%s referenced by an instrument,\n" + "but not used in the song. Do you want to remove them ?", nExt, (nExt == 1) ? "" : "s"); if (::MessageBox(NULL, s, "Sample Cleanup", MB_YESNO | MB_ICONQUESTION) == IDYES) { for (SAMPLEINDEX j = 1; j < MAX_SAMPLES; j++) @@ -406,48 +438,53 @@ nRemoved++; } } + wsprintf(s, "%d unused sample%s removed\n" ,nRemoved, (nRemoved == 1) ? "" : "s"); + m_pModDoc->AddToLog(s); + return true; } } - for (SAMPLEINDEX ilo=1; ilo<=pSndFile->m_nSamples; ilo++) if (pSndFile->Samples[ilo].pSample) + return false; +} + + +// Remove unused sample data +bool CModCleanupDlg::OptimizeSamples() +//------------------------------------ +{ + CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + if(pSndFile == nullptr) return false; + + UINT nLoopOpt = 0; + + for (SAMPLEINDEX nSmp=1; nSmp <= pSndFile->m_nSamples; nSmp++) { - if ((pSndFile->Samples[ilo].uFlags & CHN_LOOP) - && (pSndFile->Samples[ilo].nLength > pSndFile->Samples[ilo].nLoopEnd + 2)) nLoopOpt++; + if(pSndFile->Samples[nSmp].pSample && (pSndFile->Samples[nSmp].uFlags & CHN_LOOP) + && (pSndFile->Samples[nSmp].nLength > pSndFile->Samples[nSmp].nLoopEnd + 2)) nLoopOpt++; } - if (nLoopOpt) + if (nLoopOpt == 0) return false; + + CHAR s[512]; + wsprintf(s, "OpenMPT detected %d sample%s with unused data after the loop end point,\n" + "Do you want to optimize it, and remove this unused data?", nLoopOpt, (nLoopOpt == 1) ? "" : "s"); + if (::MessageBox(NULL, s, "Sample Optimization", MB_YESNO | MB_ICONQUESTION) == IDYES) { - wsprintf(s, "OpenMPT detected %d sample(s) with unused data after the loop end point,\n" - "Do you want to optimize it, and remove this unused data ?", nLoopOpt); - if (::MessageBox(NULL, s, "Sample Cleanup", MB_YESNO | MB_ICONQUESTION) == IDYES) + for (SAMPLEINDEX nSmp = 1; nSmp <= pSndFile->m_nSamples; nSmp++) { - for (UINT j=1; j<=pSndFile->m_nSamples; j++) + if ((pSndFile->Samples[nSmp].uFlags & CHN_LOOP) + && (pSndFile->Samples[nSmp].nLength > pSndFile->Samples[nSmp].nLoopEnd + 2)) { - if ((pSndFile->Samples[j].uFlags & CHN_LOOP) - && (pSndFile->Samples[j].nLength > pSndFile->Samples[j].nLoopEnd + 2)) - { - UINT lmax = pSndFile->Samples[j].nLoopEnd + 2; - if ((lmax < pSndFile->Samples[j].nLength) && (lmax >= 16)) pSndFile->Samples[j].nLength = lmax; - } + UINT lmax = pSndFile->Samples[nSmp].nLoopEnd + 2; + if ((lmax < pSndFile->Samples[nSmp].nLength) && (lmax >= 16)) pSndFile->Samples[nSmp].nLength = lmax; } - } else nLoopOpt = 0; - } - if ((nRemoved) || (nLoopOpt)) - { - if (nRemoved) - { - wsprintf(s, "%d unused sample(s) removed\n" ,nRemoved); - m_pModDoc->AddToLog(s); } - if (nLoopOpt) - { - wsprintf(s, "%d sample loop(s) optimized\n" ,nLoopOpt); - m_pModDoc->AddToLog(s); - } + wsprintf(s, "%d sample loop%s optimized\n" ,nLoopOpt, (nLoopOpt == 1) ? "" : "s"); + m_pModDoc->AddToLog(s); return true; } - return false; + + return false; } - // Rearrange sample list bool CModCleanupDlg::RearrangeSamples() //------------------------------------- @@ -478,16 +515,16 @@ if(!nRemap) return false; - BEGIN_CRITICAL(); - // Now, move everything around for(SAMPLEINDEX i = 1; i <= pSndFile->m_nSamples; i++) { if(nSampleMap[i] != i) { // This gotta be moved + BEGIN_CRITICAL(); pSndFile->MoveSample(i, nSampleMap[i]); pSndFile->Samples[i].pSample = nullptr; + END_CRITICAL(); if(nSampleMap[i] > 0) strcpy(pSndFile->m_szNames[nSampleMap[i]], pSndFile->m_szNames[i]); memset(pSndFile->m_szNames[i], 0, sizeof(pSndFile->m_szNames[i])); @@ -517,8 +554,6 @@ pSndFile->m_nSamples -= nRemap; - END_CRITICAL(); - return true; } @@ -626,7 +661,7 @@ } if (nRemoved) { - wsprintf(s, "%d unused instrument(s) removed\n", nRemoved); + wsprintf(s, "%d unused instrument%s removed\n", nRemoved, (nRemoved == 1) ? "" : "s"); m_pModDoc->AddToLog(s); return true; } @@ -634,42 +669,6 @@ } -// Remove all instruments -bool CModCleanupDlg::RemoveAllInstruments(bool bConfirm) -//----------------------------------------------- -{ - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - if(pSndFile == nullptr) return false; - - if (!pSndFile->m_nInstruments) - return false; - - char removeSamples = -1; - if(bConfirm) - { - if (CMainFrame::GetMainFrame()->MessageBox("This will remove all the instruments in the song,\n" - "Do you want to continue?", "Removing all instruments", MB_YESNO | MB_ICONQUESTION) != IDYES) return false; - if (CMainFrame::GetMainFrame()->MessageBox("Do you want to convert all instruments to samples ?\n", - "Removing all instruments", MB_YESNO | MB_ICONQUESTION) == IDYES) - { - m_pModDoc->ConvertInstrumentsToSamples(); - } - - if (::MessageBox(NULL, "Remove samples associated with an instrument if they are unused?", "Removing all instruments", MB_YESNO | MB_ICONQUESTION) == IDYES) { - removeSamples = 1; - } - } - - for (INSTRUMENTINDEX i = 1; i <= pSndFile->m_nInstruments; i++) - { - pSndFile->DestroyInstrument(i, removeSamples); - } - - pSndFile->m_nInstruments = 0; - return true; -} - - // Remove ununsed plugins bool CModCleanupDlg::RemoveUnusedPlugins() //-------------------------------------- @@ -719,15 +718,15 @@ } -// Turn module into samplepack (convert to IT, remove patterns, etc.) -bool CModCleanupDlg::CreateSamplepack() -//------------------------------------- +// Reset variables (convert to IT, reset global/smp/ins vars, etc.) +bool CModCleanupDlg::ResetVariables() +//----------------------------------- { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); if(pSndFile == nullptr) return false; //jojo.compocleanup - if(::MessageBox(NULL, TEXT("WARNING: Turning this module into as samplepack means that OpenMPT will convert the module to IT format, remove all patterns and reset song, sample and instrument attributes to default values. Continue?"), TEXT("Samplepack creation"), MB_YESNO | MB_ICONWARNING) == IDNO) + if(::MessageBox(NULL, TEXT("WARNING: OpenMPT will convert the module to IT format and reset all song, sample and instrument attributes to default values. Continue?"), TEXT("Resetting variables"), MB_YESNO | MB_ICONWARNING) == IDNO) return false; // Stop play. @@ -742,15 +741,6 @@ pSndFile->m_nTempoMode = tempo_mode_classic; pSndFile->m_dwSongFlags = SONG_LINEARSLIDES | SONG_EXFILTERRANGE; - // clear order list - pSndFile->Order.Init(); - pSndFile->Order[0] = 0; - - // remove all patterns - pSndFile->Patterns.Init(); - pSndFile->Patterns.Insert(0, 64); - pSndFile->SetCurrentOrder(0); - // Global vars pSndFile->m_nDefaultTempo = 125; pSndFile->m_nDefaultSpeed = 6; @@ -759,43 +749,27 @@ pSndFile->m_nVSTiVolume = 48; pSndFile->m_nRestartPos = 0; - // Set 4 default channels. - pSndFile->ReArrangeChannels(vector<CHANNELINDEX>(4, MAX_BASECHANNELS)); - - // remove plugs - bool keepMask[MAX_MIXPLUGINS]; memset(keepMask, 0, sizeof(keepMask)); - m_pModDoc->RemovePlugs(keepMask); - - // instruments - if(pSndFile->m_nInstruments && ::MessageBox(NULL, "Keep instruments?", TEXT("Samplepack creation"), MB_YESNO | MB_ICONQUESTION) == IDNO) + // reset instruments (if there are any) + for(INSTRUMENTINDEX i = 1; i <= pSndFile->m_nInstruments; i++) { - // remove instruments - RemoveAllInstruments(false); - } - else - { - // reset instruments (if there are any) - for(INSTRUMENTINDEX i = 1; i <= pSndFile->m_nInstruments; i++) - { - pSndFile->Instruments[i]->nFadeOut = 256; - pSndFile->Instruments[i]->nGlobalVol = 64; - pSndFile->Instruments[i]->nPan = 128; - pSndFile->Instruments[i]->dwFlags &= ~ENV_SETPANNING; - pSndFile->Instruments[i]->nMixPlug = 0; + pSndFile->Instruments[i]->nFadeOut = 256; + pSndFile->Instruments[i]->nGlobalVol = 64; + pSndFile->Instruments[i]->nPan = 128; + pSndFile->Instruments[i]->dwFlags &= ~ENV_SETPANNING; + pSndFile->Instruments[i]->nMixPlug = 0; - pSndFile->Instruments[i]->nVolSwing = 0; - pSndFile->Instruments[i]->nPanSwing = 0; - pSndFile->Instruments[i]->nCutSwing = 0; - pSndFile->Instruments[i]->nResSwing = 0; + pSndFile->Instruments[i]->nVolSwing = 0; + pSndFile->Instruments[i]->nPanSwing = 0; + pSndFile->Instruments[i]->nCutSwing = 0; + pSndFile->Instruments[i]->nResSwing = 0; - //might be a good idea to leave those enabled... - /* - pSndFile->Instruments[i]->dwFlags &= ~ENV_VOLUME; - pSndFile->Instruments[i]->dwFlags &= ~ENV_PANNING; - pSndFile->Instruments[i]->dwFlags &= ~ENV_PITCH; - pSndFile->Instruments[i]->dwFlags &= ~ENV_FILTER; - */ - } + //might be a good idea to leave those enabled... + /* + pSndFile->Instruments[i]->dwFlags &= ~ENV_VOLUME; + pSndFile->Instruments[i]->dwFlags &= ~ENV_PANNING; + pSndFile->Instruments[i]->dwFlags &= ~ENV_PITCH; + pSndFile->Instruments[i]->dwFlags &= ~ENV_FILTER; + */ } // reset samples @@ -811,3 +785,94 @@ return true; } + +// Remove all patterns +bool CModCleanupDlg::RemoveAllPatterns() +//-------------------------------------- +{ + CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + if(pSndFile == nullptr) return false; + + if (pSndFile->Patterns.Size() == 0) return false; + pSndFile->Patterns.Init(); + pSndFile->Patterns.Insert(0, 64); + pSndFile->SetCurrentOrder(0); + return true; +} + +// Remove all orders +bool CModCleanupDlg::RemoveAllOrders() +//------------------------------------ +{ + CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + if(pSndFile == nullptr) return false; + + pSndFile->Order.Init(); + pSndFile->Order.SetSequence(0); + pSndFile->Order[0] = 0; + pSndFile->SetCurrentOrder(0); + return true; +} + +// Remove all samples +bool CModCleanupDlg::RemoveAllSamples() +//------------------------------------ +{ + CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + if(pSndFile == nullptr) return false; + + if (pSndFile->m_nSamples == 0) return false; + for (SAMPLEINDEX nSmp = 1; nSmp <= pSndFile->m_nSamples; nSmp++) + { + if (pSndFile->Samples[nSmp].pSample) + { + BEGIN_CRITICAL(); + pSndFile->DestroySample(nSmp); + END_CRITICAL(); + } + } + ctrlSmp::ResetSamples(*pSndFile, ctrlSmp::SmpResetInit); + pSndFile->m_nSamples = 1; + return true; +} + +// Remove all instruments +bool CModCleanupDlg::RemoveAllInstruments(bool bConfirm) +//------------------------------------------------------ +{ + CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + if(pSndFile == nullptr) return false; + + if (pSndFile->m_nInstruments == 0) return false; + + char removeSamples = -1; + if(bConfirm) + { + if (CMainFrame::GetMainFrame()->MessageBox("Do you want to convert all instruments to samples ?\n", + "Removing all instruments", MB_YESNO | MB_ICONQUESTION) == IDYES) + { + m_pModDoc->ConvertInstrumentsToSamples(); + } + + if (::MessageBox(NULL, "Remove samples associated with an instrument if they are unused?", "Removing all instruments", MB_YESNO | MB_ICONQUESTION) == IDYES) { + removeSamples = 1; + } + } + + for (INSTRUMENTINDEX i = 1; i <= pSndFile->m_nInstruments; i++) + { + pSndFile->DestroyInstrument(i, removeSamples); + } + + pSndFile->m_nInstruments = 0; + return true; +} + +// Remove all plugins +bool CModCleanupDlg::RemoveAllPlugins() +//------------------------------------- +{ + bool keepMask[MAX_MIXPLUGINS]; memset(keepMask, false, sizeof(keepMask)); + m_pModDoc->RemovePlugs(keepMask); + return true; +} Modified: trunk/OpenMPT/mptrack/CleanupSong.h =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.h 2009-10-05 17:02:19 UTC (rev 387) +++ trunk/OpenMPT/mptrack/CleanupSong.h 2009-10-05 20:51:54 UTC (rev 388) @@ -10,14 +10,23 @@ enum ENUM_CLEANUP_OPTIONS { + // remove unused CU_CLEANUP_PATTERNS = 0, - CU_REARRANGE_PATTERNS, CU_CLEANUP_SAMPLES, - CU_REARRANGE_SAMPLES, CU_CLEANUP_INSTRUMENTS, + CU_CLEANUP_PLUGINS, + // remove all + CU_REMOVE_PATTERNS, + CU_REMOVE_ORDERS, + CU_REMOVE_SAMPLES, CU_REMOVE_INSTRUMENTS, - CU_CLEANUP_PLUGINS, - CU_CREATE_SAMPLEPACK, + CU_REMOVE_PLUGINS, + // misc + CU_REARRANGE_PATTERNS, + CU_REARRANGE_SAMPLES, + CU_OPTIMIZE_SAMPLES, + CU_RESET_VARIABLES, + CU_MAX_CLEANUP_OPTIONS }; @@ -34,11 +43,18 @@ // Actual cleanup implementations bool RemoveUnusedPatterns(bool bRemove = true); // Remove unused patterns / rearrange patterns bool RemoveUnusedSamples(); // Remove unused samples - bool RearrangeSamples(); // Rearrange sample list bool RemoveUnusedInstruments(); // Remove unused instruments - bool RemoveAllInstruments(bool bConfirm = true); // Remove all instruments bool RemoveUnusedPlugins(); // Remove ununsed plugins - bool CreateSamplepack(); // Turn module into samplepack (convert to IT, remove patterns, etc.) + // Zap + bool RemoveAllPatterns(); + bool RemoveAllOrders(); + bool RemoveAllSamples(); + bool RemoveAllInstruments(bool bConfirm = true); + bool RemoveAllPlugins(); + // Misc + bool RearrangeSamples(); // Rearrange sample list + bool OptimizeSamples(); // Remove unused sample data + bool ResetVariables(); // Turn module into samplepack (convert to IT, remove patterns, etc.) public: CModCleanupDlg(CModDoc *pModDoc, CWnd *parent):CDialog(IDD_CLEANUP_SONG, parent) { m_pModDoc = pModDoc; m_wParent = parent; } @@ -51,15 +67,6 @@ //}}AFX_VIRTUAL //{{AFX_MSG(CModCleanupDlg) - /*afx_msg void OnCheckCleanupPatterns(); - afx_msg void OnCheckRearrangePatterns(); - afx_msg void OnCheckCleanupSamples(); - afx_msg void OnCheckRearrangeSamples(); - afx_msg void OnCheckCleanupInstruments(); - afx_msg void OnCheckRemoveInstruments(); - afx_msg void OnCheckCleanupPlugins(); - afx_msg void OnCheckCreateSamplepack();*/ - afx_msg void OnPresetCleanupSong(); afx_msg void OnPresetCompoCleanup(); //}}AFX_MSG Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-10-05 17:02:19 UTC (rev 387) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-10-05 20:51:54 UTC (rev 388) @@ -93,8 +93,8 @@ "no more documents can be opened or if the file type was not " "recognised. If the former is true, it's " "recommended to close some documents as otherwise crash is likely" - "(currently there are %d document(s) open).")), - lpszPathName, nOdc); + "(currently there %s %d document%s open).")), + lpszPathName, (nOdc == 1) ? "is" : "are", nOdc, (nOdc == 1) ? "" : "s"); AfxMessageBox(str); } } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-10-05 17:02:19 UTC (rev 387) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-10-05 20:51:54 UTC (rev 388) @@ -5133,7 +5133,7 @@ { const uint32 minutes = static_cast<uint32>(t/60.0); const float seconds = t - minutes*60; - msg.Format("Estimate for playback time at order %d(pattern %d), row %d: %d minute(s) %.2f seconds", currentOrder, m_nPattern, m_nRow, minutes, seconds); + msg.Format("Estimate for playback time at order %d(pattern %d), row %d: %d minute%s %.2f seconds", currentOrder, m_nPattern, m_nRow, minutes, (minutes == 1) ? "" : "s", seconds); } } else Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-10-05 17:02:19 UTC (rev 387) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-10-05 20:51:54 UTC (rev 388) @@ -36,27 +36,32 @@ LTEXT "The following problems have been encountered when loading this module:",IDC_STATIC,6,6,237,8 END -IDD_CLEANUP_SONG DIALOGEX 0, 0, 298, 161 +IDD_CLEANUP_SONG DIALOGEX 0, 0, 262, 209 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Cleanup" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "OK",IDOK,240,6,50,14 - PUSHBUTTON "Cancel",IDCANCEL,240,24,50,14 - GROUPBOX "Items to be cleaned up",IDC_STATIC,6,6,228,90 - CONTROL "Remove unused patterns",IDC_CHK_CLEANUP_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,24,102,12 - CONTROL "Rearrange patterns",IDC_CHK_REARRANGE_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,126,24,102,12 - CONTROL "Remove unused samples",IDC_CHK_CLEANUP_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,42,102,12 - CONTROL "Rearrange samples",IDC_CHK_REARRANGE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,126,42,102,12 - CONTROL "Remove unused instruments",IDC_CHK_CLEANUP_INSTRUMENTS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,60,102,12 - CONTROL "Remove all instruments",IDC_CHK_REMOVE_INSTRUMENTS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,126,60,102,12 - CONTROL "Remove unused plugins",IDC_CHK_CLEANUP_PLUGINS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,78,102,12 - CONTROL "Turn into samplepack",IDC_CHK_SAMPLEPACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,126,78,102,12 - GROUPBOX "Presets",IDC_STATIC,6,102,228,48 - PUSHBUTTON "Remove all unused stuff",IDC_BTN_CLEANUP_SONG,18,120,96,18 - PUSHBUTTON "Compo cleanup",IDC_BTN_COMPO_CLEANUP,126,120,96,18 + DEFPUSHBUTTON "OK",IDOK,204,6,50,14 + PUSHBUTTON "Cancel",IDCANCEL,204,24,50,14 + GROUPBOX "Remove unused...",IDC_STATIC,6,6,192,42 + CONTROL "Patterns",IDC_CHK_CLEANUP_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,18,90,10 + CONTROL "Samples",IDC_CHK_CLEANUP_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,18,90,10 + CONTROL "Instruments",IDC_CHK_CLEANUP_INSTRUMENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,30,90,10 + CONTROL "Plugins",IDC_CHK_CLEANUP_PLUGINS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,30,90,10 + GROUPBOX "Remove all...",IDC_STATIC,6,54,192,54 + CONTROL "Patterns",IDC_CHK_REMOVE_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,66,90,10 + CONTROL "Orders",IDC_CHK_REMOVE_ORDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,66,90,10 + CONTROL "Samples",IDC_CHK_REMOVE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,78,90,10 + CONTROL "Instruments",IDC_CHK_REMOVE_INSTRUMENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,78,90,10 + CONTROL "Plugins",IDC_CHK_REMOVE_PLUGINS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,90,90,10 + GROUPBOX "Misc.",IDC_STATIC,6,114,192,42 + CONTROL "Rearrange patterns",IDC_CHK_REARRANGE_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,126,90,10 + CONTROL "Rearrange samples",IDC_CHK_REARRANGE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,126,90,10 + CONTROL "Optimize sample loops",IDC_CHK_OPTIMIZE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,138,90,10 + CONTROL "Reset all variables",IDC_CHK_RESET_VARIABLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,138,90,10 + GROUPBOX "Presets",IDC_STATIC,6,162,192,36 + PUSHBUTTON "Remove all unused stuff",IDC_BTN_CLEANUP_SONG,12,174,96,18 + PUSHBUTTON "Compo cleanup",IDC_BTN_COMPO_CLEANUP,114,174,78,18 END @@ -79,9 +84,9 @@ IDD_CLEANUP_SONG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 291 + RIGHTMARGIN, 255 TOPMARGIN, 7 - BOTTOMMARGIN, 154 + BOTTOMMARGIN, 202 END END #endif // APSTUDIO_INVOKED Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-10-05 17:02:19 UTC (rev 387) +++ trunk/OpenMPT/mptrack/resource.h 2009-10-05 20:51:54 UTC (rev 388) @@ -899,8 +899,14 @@ #define IDC_CHK_REARRANGE_SAMPLES 2397 #define IDC_CHK_REMOVE_INSTRUMENTS 2398 #define IDC_CHK_SAMPLEPACK 2399 +#define IDC_CHK_RESET_VARIABLES 2399 #define IDC_BTN_CLEANUP_SONG 2400 #define IDC_BTN_COMPO_CLEANUP 2401 +#define IDC_CHK_REMOVE_ORDERS 2402 +#define IDC_CHK_REMOVE_PATTERNS 2403 +#define IDC_CHK_REMOVE_SAMPLES 2404 +#define IDC_CHK_REMOVE_PLUGINS 2405 +#define IDC_CHK_OPTIMIZE_SAMPLES 2406 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1145,7 +1151,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 522 #define _APS_NEXT_COMMAND_VALUE 59231 -#define _APS_NEXT_CONTROL_VALUE 2402 +#define _APS_NEXT_CONTROL_VALUE 2407 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-10-06 12:44:39
|
Revision: 389 http://modplug.svn.sourceforge.net/modplug/?rev=389&view=rev Author: saga-games Date: 2009-10-06 12:44:31 +0000 (Tue, 06 Oct 2009) Log Message: ----------- [Fix] Pattern Editor: PC Notes are now deleted properly (last column) [Imp] Treeview: Can now dragondrop orders, even between sequences [Imp] Mod Conversion: Trim sequence if it's too long [New] New cleanup feature: Merge sequences [Mod] Redesigned cleanup dialog again... [Ref] Removed more compiler warnings Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/CleanupSong.h trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-10-06 12:44:31 UTC (rev 389) @@ -18,31 +18,30 @@ // Default checkbox state bool CModCleanupDlg::m_bCheckBoxes[CU_MAX_CLEANUP_OPTIONS] = { - // remove unused - true, true, // pat/smp - true, true, // ins/plg - // remove all - false, false, // pat/ord - false, false, // smp/ins - false, // plg - // misc - true, true, // pat/smp - true, false, // opt/reset + true, false, true, // patterns + false, false, // orders + true, false, false, true, // samples + true, false, // instruments + true, false, // plugins + false, // misc }; // Checkbox -> Control ID LUT WORD const CModCleanupDlg::m_nCleanupIDtoDlgID[CU_MAX_CLEANUP_OPTIONS] = { - // remove unused - IDC_CHK_CLEANUP_PATTERNS, IDC_CHK_CLEANUP_SAMPLES, - IDC_CHK_CLEANUP_INSTRUMENTS, IDC_CHK_CLEANUP_PLUGINS, - // remove all - IDC_CHK_REMOVE_PATTERNS, IDC_CHK_REMOVE_ORDERS, - IDC_CHK_REMOVE_SAMPLES, IDC_CHK_REMOVE_INSTRUMENTS, - IDC_CHK_REMOVE_PLUGINS, + // patterns + IDC_CHK_CLEANUP_PATTERNS, IDC_CHK_REMOVE_PATTERNS, IDC_CHK_REARRANGE_PATTERNS, + // orders + IDC_CHK_MERGE_SEQUENCES, IDC_CHK_REMOVE_ORDERS, + // samples + IDC_CHK_CLEANUP_SAMPLES, IDC_CHK_REMOVE_SAMPLES, IDC_CHK_REARRANGE_SAMPLES, + IDC_CHK_OPTIMIZE_SAMPLES, + // instruments + IDC_CHK_CLEANUP_INSTRUMENTS, IDC_CHK_REMOVE_INSTRUMENTS, + // plugins + IDC_CHK_CLEANUP_PLUGINS, IDC_CHK_REMOVE_PLUGINS, // misc - IDC_CHK_REARRANGE_PATTERNS, IDC_CHK_REARRANGE_SAMPLES, - IDC_CHK_OPTIMIZE_SAMPLES, IDC_CHK_RESET_VARIABLES, + IDC_CHK_RESET_VARIABLES, }; /////////////////////////////////////////////////////////////////////// @@ -52,6 +51,9 @@ //{{AFX_MSG_MAP(CModTypeDlg) ON_COMMAND(IDC_BTN_CLEANUP_SONG, OnPresetCleanupSong) ON_COMMAND(IDC_BTN_COMPO_CLEANUP, OnPresetCompoCleanup) + + ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, &CModCleanupDlg::OnToolTipNotify) + ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, &CModCleanupDlg::OnToolTipNotify) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -67,15 +69,19 @@ CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); if(pSndFile == nullptr) return FALSE; - GetDlgItem(m_nCleanupIDtoDlgID[CU_CLEANUP_INSTRUMENTS])->EnableWindow((pSndFile->m_nInstruments > 0) ? TRUE :FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_MERGE_SEQUENCES])->EnableWindow((pSndFile->m_nType & MOD_TYPE_MPT) ? TRUE : FALSE); - GetDlgItem(m_nCleanupIDtoDlgID[CU_REMOVE_INSTRUMENTS])->EnableWindow((pSndFile->m_nInstruments > 0) ? TRUE :FALSE); - GetDlgItem(m_nCleanupIDtoDlgID[CU_REMOVE_SAMPLES])->EnableWindow((pSndFile->m_nSamples > 0) ? TRUE :FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_REMOVE_SAMPLES])->EnableWindow((pSndFile->m_nSamples > 0) ? TRUE : FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_REARRANGE_SAMPLES])->EnableWindow((pSndFile->m_nSamples > 1) ? TRUE : FALSE); - GetDlgItem(m_nCleanupIDtoDlgID[CU_REARRANGE_SAMPLES])->EnableWindow((pSndFile->m_nSamples > 1) ? TRUE :FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_CLEANUP_INSTRUMENTS])->EnableWindow((pSndFile->m_nInstruments > 0) ? TRUE : FALSE); + GetDlgItem(m_nCleanupIDtoDlgID[CU_REMOVE_INSTRUMENTS])->EnableWindow((pSndFile->m_nInstruments > 0) ? TRUE : FALSE); + + EnableToolTips(TRUE); return TRUE; } + void CModCleanupDlg::OnOK() //------------------------- { @@ -88,6 +94,7 @@ m_pModDoc->ClearLog(); // Orders + if(m_bCheckBoxes[CU_MERGE_SEQUENCES]) bModified |= MergeSequences(); if(m_bCheckBoxes[CU_REMOVE_ORDERS]) bModified |= RemoveAllOrders(); // Patterns @@ -136,46 +143,137 @@ void CModCleanupDlg::OnPresetCleanupSong() //---------------------------------------- { - // remove unused + // patterns CheckDlgButton(IDC_CHK_CLEANUP_PATTERNS, MF_CHECKED); - CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_CHECKED); - CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_CHECKED); - CheckDlgButton(IDC_CHK_CLEANUP_PLUGINS, MF_CHECKED); - // remove all CheckDlgButton(IDC_CHK_REMOVE_PATTERNS, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_UNCHECKED); + // orders + CheckDlgButton(IDC_CHK_MERGE_SEQUENCES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_REMOVE_ORDERS, MF_UNCHECKED); + // samples + CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_CHECKED); CheckDlgButton(IDC_CHK_REMOVE_SAMPLES, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); + CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_CHECKED); + // instruments + CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_CHECKED); CheckDlgButton(IDC_CHK_REMOVE_INSTRUMENTS, MF_UNCHECKED); + // plugins + CheckDlgButton(IDC_CHK_CLEANUP_PLUGINS, MF_CHECKED); CheckDlgButton(IDC_CHK_REMOVE_PLUGINS, MF_UNCHECKED); // misc - CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_CHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); - CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_CHECKED); CheckDlgButton(IDC_CHK_SAMPLEPACK, MF_UNCHECKED); } void CModCleanupDlg::OnPresetCompoCleanup() //---------------------------------------- { - // remove unused + // patterns CheckDlgButton(IDC_CHK_CLEANUP_PATTERNS, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_CLEANUP_PLUGINS, MF_UNCHECKED); - // remove all CheckDlgButton(IDC_CHK_REMOVE_PATTERNS, MF_CHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_UNCHECKED); + // orders + CheckDlgButton(IDC_CHK_MERGE_SEQUENCES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_REMOVE_ORDERS, MF_CHECKED); + // samples + CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_REMOVE_SAMPLES, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); + CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_UNCHECKED); + // instruments + CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_UNCHECKED); CheckDlgButton(IDC_CHK_REMOVE_INSTRUMENTS, MF_CHECKED); + // plugins + CheckDlgButton(IDC_CHK_CLEANUP_PLUGINS, MF_UNCHECKED); CheckDlgButton(IDC_CHK_REMOVE_PLUGINS, MF_CHECKED); // misc - CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); - CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_SAMPLEPACK, MF_CHECKED); } +BOOL CModCleanupDlg::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult) +{ + UNREFERENCED_PARAMETER(id); + UNREFERENCED_PARAMETER(pResult); + // need to handle both ANSI and UNICODE versions of the message + TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; + TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; + CStringA strTipText = ""; + UINT_PTR nID = pNMHDR->idFrom; + if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || + pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) + { + // idFrom is actually the HWND of the tool + nID = ::GetDlgCtrlID((HWND)nID); + } + + switch(nID) + { + // patterns + case IDC_CHK_CLEANUP_PATTERNS: + strTipText = "Remove all unused patterns and rearrange them."; + break; + case IDC_CHK_REMOVE_PATTERNS: + strTipText = "Remove all patterns."; + break; + case IDC_CHK_REARRANGE_PATTERNS: + strTipText = "Number the patterns given by their order in the sequence."; + break; + // orders + case IDC_CHK_REMOVE_ORDERS: + strTipText = "Reset the order list."; + break; + case IDC_CHK_MERGE_SEQUENCES: + strTipText = "Merge multiple sequences into one."; + break; + // samples + case IDC_CHK_CLEANUP_SAMPLES: + strTipText = "Remove all unused samples."; + break; + case IDC_CHK_REMOVE_SAMPLES: + strTipText = "Remove all samples."; + break; + case IDC_CHK_REARRANGE_SAMPLES: + strTipText = "Reorder sample list by removing empty samples."; + break; + case IDC_CHK_OPTIMIZE_SAMPLES: + strTipText = "Remove unused data after the sample loop end."; + break; + // instruments + case IDC_CHK_CLEANUP_INSTRUMENTS: + strTipText = "Remove all unused instruments."; + break; + case IDC_CHK_REMOVE_INSTRUMENTS: + strTipText = "Remove all instruments and convert them to samples."; + break; + // plugins + case IDC_CHK_CLEANUP_PLUGINS: + strTipText = "Remove all unused plugins."; + break; + case IDC_CHK_REMOVE_PLUGINS: + strTipText = "Remove all plugins."; + break; + // misc + case IDC_CHK_SAMPLEPACK: + strTipText = "Convert the module to .IT and reset song, sample and instrument variables"; + break; + } + + if (pNMHDR->code == TTN_NEEDTEXTA) + { + strncpy_s(pTTTA->szText, sizeof(pTTTA->szText), strTipText, + strTipText.GetLength() + 1); + } + else + { + ::MultiByteToWideChar(CP_ACP , 0, strTipText, strTipText.GetLength() + 1, + pTTTW->szText, sizeof(pTTTW->szText)/(sizeof pTTTW->szText[0])); + } + + return TRUE; +} + + /////////////////////////////////////////////////////////////////////// // Actual cleanup implementations @@ -807,8 +905,12 @@ CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); if(pSndFile == nullptr) return false; + pSndFile->Order.SetSequence(0); + while(pSndFile->Order.GetNumSequences() > 1) + { + pSndFile->Order.RemoveSequence(1); + } pSndFile->Order.Init(); - pSndFile->Order.SetSequence(0); pSndFile->Order[0] = 0; pSndFile->SetCurrentOrder(0); return true; @@ -876,3 +978,10 @@ m_pModDoc->RemovePlugs(keepMask); return true; } + +// Remove all plugins +bool CModCleanupDlg::MergeSequences() +//------------------------------------- +{ + return m_pModDoc->MergeSequences(); +} Modified: trunk/OpenMPT/mptrack/CleanupSong.h =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.h 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/CleanupSong.h 2009-10-06 12:44:31 UTC (rev 389) @@ -10,21 +10,25 @@ enum ENUM_CLEANUP_OPTIONS { - // remove unused + // patterns CU_CLEANUP_PATTERNS = 0, - CU_CLEANUP_SAMPLES, - CU_CLEANUP_INSTRUMENTS, - CU_CLEANUP_PLUGINS, - // remove all CU_REMOVE_PATTERNS, + CU_REARRANGE_PATTERNS, + // orders + CU_MERGE_SEQUENCES, CU_REMOVE_ORDERS, + // samples + CU_CLEANUP_SAMPLES, CU_REMOVE_SAMPLES, + CU_REARRANGE_SAMPLES, + CU_OPTIMIZE_SAMPLES, + // instruments + CU_CLEANUP_INSTRUMENTS, CU_REMOVE_INSTRUMENTS, + // plugins + CU_CLEANUP_PLUGINS, CU_REMOVE_PLUGINS, // misc - CU_REARRANGE_PATTERNS, - CU_REARRANGE_SAMPLES, - CU_OPTIMIZE_SAMPLES, CU_RESET_VARIABLES, CU_MAX_CLEANUP_OPTIONS @@ -40,20 +44,25 @@ static bool m_bCheckBoxes[CU_MAX_CLEANUP_OPTIONS]; // Checkbox state static const WORD m_nCleanupIDtoDlgID[CU_MAX_CLEANUP_OPTIONS]; // Checkbox -> Control ID LUT - // Actual cleanup implementations + // Actual cleanup implementations: + // Patterns bool RemoveUnusedPatterns(bool bRemove = true); // Remove unused patterns / rearrange patterns - bool RemoveUnusedSamples(); // Remove unused samples - bool RemoveUnusedInstruments(); // Remove unused instruments - bool RemoveUnusedPlugins(); // Remove ununsed plugins - // Zap bool RemoveAllPatterns(); + // Orders + bool MergeSequences(); bool RemoveAllOrders(); + // Samples + bool RemoveUnusedSamples(); // Remove unused samples bool RemoveAllSamples(); + bool RearrangeSamples(); // Rearrange sample list + bool OptimizeSamples(); // Remove unused sample data + // Instruments + bool RemoveUnusedInstruments(); // Remove unused instruments bool RemoveAllInstruments(bool bConfirm = true); + // Plugins + bool RemoveUnusedPlugins(); // Remove ununsed plugins bool RemoveAllPlugins(); // Misc - bool RearrangeSamples(); // Rearrange sample list - bool OptimizeSamples(); // Remove unused sample data bool ResetVariables(); // Turn module into samplepack (convert to IT, remove patterns, etc.) public: @@ -66,6 +75,8 @@ virtual void OnCancel(); //}}AFX_VIRTUAL + BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult); + //{{AFX_MSG(CModCleanupDlg) afx_msg void OnPresetCleanupSong(); afx_msg void OnPresetCompoCleanup(); Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-10-06 12:44:31 UTC (rev 389) @@ -258,6 +258,8 @@ BOOL RemoveChannels(BOOL bChnMask[MAX_CHANNELS]); + bool MergeSequences(); + bool m_bHasValidPath; //becomes true if document is loaded or saved. // Fix: save pattern scrollbar position when switching to other tab CSize GetOldPatternScrollbarsPos() const { return m_szOldPatternScrollbarsPos; }; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-10-06 12:44:31 UTC (rev 389) @@ -100,75 +100,6 @@ -Alternative tempomodes -For more info, see e.g. SaveExtendedSongProperties(), SaveExtendedInstrumentProperties() */ - - // Merge multiple sequences - m_SndFile.Order.SetSequence(0); - m_SndFile.Order.resize(m_SndFile.Order.GetLengthTailTrimmed()); - SEQUENCEINDEX removedSequences = 0; // sequence count - vector <SEQUENCEINDEX> patternsFixed; // pattern fixed by other sequence already? - patternsFixed.resize(m_SndFile.Patterns.Size(), SEQUENCEINDEX_INVALID); - // Set up vector - for(ORDERINDEX nOrd = 0; nOrd < m_SndFile.Order.GetLengthTailTrimmed(); nOrd++) - { - PATTERNINDEX nPat = m_SndFile.Order[nOrd]; - if(!m_SndFile.Patterns.IsValidPat(nPat)) continue; - patternsFixed[nPat] = 0; - } - - while(m_SndFile.Order.GetNumSequences() > 1) - { - removedSequences++; - const ORDERINDEX nFirstOrder = m_SndFile.Order.GetLengthTailTrimmed() + 1; // +1 for separator item - if(nFirstOrder + m_SndFile.Order.GetSequence(1).GetLengthTailTrimmed() > m_SndFile.GetModSpecifications(nNewType).ordersMax) - { - wsprintf(s, "WARNING: Cannot merge Sequence %d (too long!)\n", removedSequences); - AddToLog(s); - m_SndFile.Order.RemoveSequence(1); - continue; - } - m_SndFile.Order.Append(m_SndFile.Order.GetInvalidPatIndex()); // Separator item - for(ORDERINDEX nOrd = 0; nOrd < m_SndFile.Order.GetSequence(1).GetLengthTailTrimmed(); nOrd++) - { - PATTERNINDEX nPat = m_SndFile.Order.GetSequence(1)[nOrd]; - m_SndFile.Order.Append(nPat); - - // Try to fix patterns (Bxx commands) - if(!m_SndFile.Patterns.IsValidPat(nPat)) continue; - - MODCOMMAND *m = m_SndFile.Patterns[nPat]; - for (UINT len = 0; len < m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; m++, len++) - { - if(m->command == CMD_POSITIONJUMP) - { - if(patternsFixed[nPat] != SEQUENCEINDEX_INVALID && patternsFixed[nPat] != removedSequences) - { - // Oops, some other sequence uses this pattern already. - const PATTERNINDEX nNewPat = m_SndFile.Patterns.Insert(m_SndFile.PatternSize[nPat]); - if(nNewPat != SEQUENCEINDEX_INVALID) - { - // could create new pattern - copy data over and continue from here. - m_SndFile.Order[nFirstOrder + nOrd] = nNewPat; - MODCOMMAND *pSrc = m_SndFile.Patterns[nPat]; - MODCOMMAND *pDest = m_SndFile.Patterns[nNewPat]; - memcpy(pDest, pSrc, m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels * sizeof(MODCOMMAND)); - m = pDest + len; - patternsFixed.resize(max(nNewPat + 1, (PATTERNINDEX)patternsFixed.size()), SEQUENCEINDEX_INVALID); - nPat = nNewPat; - } else - { - // cannot create new pattern: notify the user - wsprintf(s, "CONFLICT: Pattern break commands in Pattern %d might be broken since it has been used in several sequences!", nPat); - AddToLog(s); - } - } - m->param += nFirstOrder; - patternsFixed[nPat] = removedSequences; - } - } - - } - m_SndFile.Order.RemoveSequence(1); - } } // Check if conversion to 64 rows is necessary @@ -802,6 +733,9 @@ END_CRITICAL(); ChangeFileExtension(nNewType); + // Multisequences not suppported by other formats + if(!(m_SndFile.m_nType & MOD_TYPE_MPT)) MergeSequences(); + //rewbs.cutomKeys: update effect key commands CInputHandler *ih = CMainFrame::GetMainFrame()->GetInputHandler(); if (newTypeIsMOD_XM) { @@ -826,6 +760,22 @@ if(bTrimmedEnvelopes == true) AddToLog("WARNING: Instrument envelopes have been shortened.\n"); + // Order list too long -> remove unnecessary order items first. + if(m_SndFile.Order.GetLengthTailTrimmed() > specs.ordersMax) + { + for(ORDERINDEX nOrd = m_SndFile.Order.GetLengthTailTrimmed() - 1; nOrd >= 0; nOrd--) + { + if(m_SndFile.Patterns.IsValidPat(m_SndFile.Order[nOrd]) == false) + { + for(ORDERINDEX nMoveOrd = nOrd; nMoveOrd < m_SndFile.Order.GetLengthTailTrimmed(); nMoveOrd++) + { + m_SndFile.Order[nMoveOrd] = m_SndFile.Order[nMoveOrd + 1]; + } + } + } + m_SndFile.Order.resize(specs.ordersMax); + } + SetModified(); ClearUndo(); UpdateAllViews(NULL, HINT_MODTYPE | HINT_MODGENERAL); @@ -1371,22 +1321,34 @@ bool CModDoc::MoveOrder(ORDERINDEX nSourceNdx, ORDERINDEX nDestNdx, bool bUpdate, bool bCopy, SEQUENCEINDEX nSourceSeq, SEQUENCEINDEX nDestSeq) //--------------------------------------------------------------------------------------------------------------------------------------------- { - if ((nSourceNdx >= m_SndFile.Order.size()) || (nDestNdx >= m_SndFile.Order.size())) return false; + if (max(nSourceNdx, nDestNdx) >= m_SndFile.Order.size()) return false; if (nDestNdx >= m_SndFile.GetModSpecifications().ordersMax) return false; - ORDERINDEX n = m_SndFile.Order[nSourceNdx]; + + if(nSourceSeq == SEQUENCEINDEX_INVALID) nSourceSeq = m_SndFile.Order.GetCurrentSequenceIndex(); + if(nDestSeq == SEQUENCEINDEX_INVALID) nDestSeq = m_SndFile.Order.GetCurrentSequenceIndex(); + if (max(nSourceSeq, nDestSeq) >= m_SndFile.Order.GetNumSequences()) return false; + PATTERNINDEX nSourcePat = m_SndFile.Order.GetSequence(nSourceSeq)[nSourceNdx]; + + // save current working sequence + SEQUENCEINDEX nWorkingSeq = m_SndFile.Order.GetCurrentSequenceIndex(); + // Delete source if (!bCopy) { - for (ORDERINDEX i = nSourceNdx; i < m_SndFile.Order.size() - 1; i++) m_SndFile.Order[i] = m_SndFile.Order[i+1]; + m_SndFile.Order.SetSequence(nSourceSeq); + for (ORDERINDEX i = nSourceNdx; i < m_SndFile.Order.size() - 1; i++) m_SndFile.Order[i] = m_SndFile.Order[i + 1]; if (nSourceNdx < nDestNdx) nDestNdx--; } // Insert at dest - for (ORDERINDEX j = m_SndFile.Order.size() - 1; j > nDestNdx; j--) m_SndFile.Order[j] = m_SndFile.Order[j-1]; - m_SndFile.Order[nDestNdx] = n; + m_SndFile.Order.SetSequence(nDestSeq); + for (ORDERINDEX nOrd = m_SndFile.Order.size() - 1; nOrd > nDestNdx; nOrd--) m_SndFile.Order[nOrd] = m_SndFile.Order[nOrd - 1]; + m_SndFile.Order[nDestNdx] = nSourcePat; if (bUpdate) { UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); } + + m_SndFile.Order.SetSequence(nWorkingSeq); return true; } @@ -2147,4 +2109,80 @@ } } +// Merge multiple sequences +bool CModDoc::MergeSequences() +//---------------------------- +{ + if(m_SndFile.Order.GetNumSequences() <= 1) return false; + CHAR s[256]; + m_SndFile.Order.SetSequence(0); + m_SndFile.Order.resize(m_SndFile.Order.GetLengthTailTrimmed()); + SEQUENCEINDEX removedSequences = 0; // sequence count + vector <SEQUENCEINDEX> patternsFixed; // pattern fixed by other sequence already? + patternsFixed.resize(m_SndFile.Patterns.Size(), SEQUENCEINDEX_INVALID); + // Set up vector + for(ORDERINDEX nOrd = 0; nOrd < m_SndFile.Order.GetLengthTailTrimmed(); nOrd++) + { + PATTERNINDEX nPat = m_SndFile.Order[nOrd]; + if(!m_SndFile.Patterns.IsValidPat(nPat)) continue; + patternsFixed[nPat] = 0; + } + + while(m_SndFile.Order.GetNumSequences() > 1) + { + removedSequences++; + const ORDERINDEX nFirstOrder = m_SndFile.Order.GetLengthTailTrimmed() + 1; // +1 for separator item + if(nFirstOrder + m_SndFile.Order.GetSequence(1).GetLengthTailTrimmed() > m_SndFile.GetModSpecifications().ordersMax) + { + wsprintf(s, "WARNING: Cannot merge Sequence %d (too long!)\n", removedSequences); + AddToLog(s); + m_SndFile.Order.RemoveSequence(1); + continue; + } + m_SndFile.Order.Append(m_SndFile.Order.GetInvalidPatIndex()); // Separator item + for(ORDERINDEX nOrd = 0; nOrd < m_SndFile.Order.GetSequence(1).GetLengthTailTrimmed(); nOrd++) + { + PATTERNINDEX nPat = m_SndFile.Order.GetSequence(1)[nOrd]; + m_SndFile.Order.Append(nPat); + + // Try to fix patterns (Bxx commands) + if(!m_SndFile.Patterns.IsValidPat(nPat)) continue; + + MODCOMMAND *m = m_SndFile.Patterns[nPat]; + for (UINT len = 0; len < m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; m++, len++) + { + if(m->command == CMD_POSITIONJUMP) + { + if(patternsFixed[nPat] != SEQUENCEINDEX_INVALID && patternsFixed[nPat] != removedSequences) + { + // Oops, some other sequence uses this pattern already. + const PATTERNINDEX nNewPat = m_SndFile.Patterns.Insert(m_SndFile.PatternSize[nPat]); + if(nNewPat != SEQUENCEINDEX_INVALID) + { + // could create new pattern - copy data over and continue from here. + m_SndFile.Order[nFirstOrder + nOrd] = nNewPat; + MODCOMMAND *pSrc = m_SndFile.Patterns[nPat]; + MODCOMMAND *pDest = m_SndFile.Patterns[nNewPat]; + memcpy(pDest, pSrc, m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels * sizeof(MODCOMMAND)); + m = pDest + len; + patternsFixed.resize(max(nNewPat + 1, (PATTERNINDEX)patternsFixed.size()), SEQUENCEINDEX_INVALID); + nPat = nNewPat; + } else + { + // cannot create new pattern: notify the user + wsprintf(s, "CONFLICT: Pattern break commands in Pattern %d might be broken since it has been used in several sequences!", nPat); + AddToLog(s); + } + } + m->param += nFirstOrder; + patternsFixed[nPat] = removedSequences; + } + } + + } + m_SndFile.Order.RemoveSequence(1); + } + return true; +} + Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2009-10-06 12:44:31 UTC (rev 389) @@ -562,14 +562,14 @@ } void CViewGlobals::OnMute(const CHANNELINDEX chnMod4, const UINT itemID) -//--------------------------------------------------------- +//---------------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); if (pModDoc) { - const BOOL b = (IsDlgButtonChecked(itemID)) ? TRUE : FALSE; - const UINT nChn = m_nActiveTab * 4 + chnMod4; + const bool b = (IsDlgButtonChecked(itemID)) ? true : false; + const CHANNELINDEX nChn = (CHANNELINDEX)(m_nActiveTab * 4) + chnMod4; pModDoc->MuteChannel(nChn, b); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } @@ -582,14 +582,14 @@ void CViewGlobals::OnSurround(const CHANNELINDEX chnMod4, const UINT itemID) -//-------------------------------------------------------------- +//-------------------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); if (pModDoc) { - const BOOL b = (IsDlgButtonChecked(itemID)) ? TRUE : FALSE; - const UINT nChn = m_nActiveTab * 4 + chnMod4; + const bool b = (IsDlgButtonChecked(itemID)) ? true : false; + const CHANNELINDEX nChn = (CHANNELINDEX)(m_nActiveTab * 4) + chnMod4; pModDoc->SurroundChannel(nChn, b); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } @@ -601,10 +601,10 @@ void CViewGlobals::OnSurround4() {OnSurround(3, IDC_CHECK8);} void CViewGlobals::OnEditVol(const CHANNELINDEX chnMod4, const UINT itemID) -//------------------------------------------------------------ +//------------------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - const UINT nChn = m_nActiveTab * 4 + chnMod4; + const CHANNELINDEX nChn = (CHANNELINDEX)(m_nActiveTab * 4) + chnMod4; const int vol = GetDlgItemIntEx(itemID); if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) { @@ -623,10 +623,10 @@ void CViewGlobals::OnEditPan(const CHANNELINDEX chnMod4, const UINT itemID) -//-------------------------------------------------------- +//------------------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - const UINT nChn = m_nActiveTab * 4 + chnMod4; + const CHANNELINDEX nChn = (CHANNELINDEX)(m_nActiveTab * 4) + chnMod4; const int pan = GetDlgItemIntEx(itemID); if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) { @@ -650,26 +650,26 @@ { CHAR s[64]; CModDoc *pModDoc; - UINT nChn; + CHANNELINDEX nChn; CFormView::OnHScroll(nSBCode, nPos, pScrollBar); pModDoc = GetDocument(); - nChn = m_nActiveTab * 4; + nChn = (CHANNELINDEX)(m_nActiveTab * 4); if ((pModDoc) && (!IsLocked()) && (nChn < MAX_BASECHANNELS)) { BOOL bUpdate = FALSE; short int pos; LockControls(); - const UINT nLoopLimit = min(4, pModDoc->GetSoundFile()->GetNumChannels() - nChn); - for (UINT iCh=0; iCh<nLoopLimit; iCh++) + const CHANNELINDEX nLoopLimit = min(4, pModDoc->GetSoundFile()->GetNumChannels() - nChn); + for (CHANNELINDEX iCh = 0; iCh < nLoopLimit; iCh++) { // Volume sliders pos = (short int)m_sbVolume[iCh].GetPos(); if ((pos >= 0) && (pos <= 64)) { - if (pModDoc->SetChannelGlobalVolume(nChn+iCh, pos)) + if (pModDoc->SetChannelGlobalVolume(nChn + iCh, pos)) { SetDlgItemInt(IDC_EDIT1+iCh*2, pos); bUpdate = TRUE; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-10-06 12:44:31 UTC (rev 389) @@ -4486,6 +4486,8 @@ case 4: p->param = 0; break; //Param default: p->Clear(); //If not specified, delete them all! :) } + if((field == 3 || field == 4) && (p->note == NOTE_PC || p->note == NOTE_PCS)) + p->command = p->param = 0; if(IsEditingEnabled_bmsg()) { Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-06 12:44:31 UTC (rev 389) @@ -771,8 +771,17 @@ } } else { - wsprintf(s, "[%02d] Skip", iOrd); + if(pSndFile->Order.GetSequence(nSeq)[iOrd] == pSndFile->Order.GetIgnoreIndex()) + { + // +++ Item + wsprintf(s, "[%02d] Skip", iOrd); + } else + { + // --- Item + wsprintf(s, "[%02d] Stop", iOrd); + } } + if (pInfo->tiOrders[nSeq][iOrd]) { tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_STATE; @@ -1930,11 +1939,27 @@ switch(dwDropType) { case MODITEM_ORDER: + case MODITEM_SEQUENCE: if ((dwDragType == MODITEM_ORDER) && (pModDoc) && (m_nDocNdx == m_nDragDocNdx)) { if (bDoDrop) { - if (dwItemDrag != qwItemDrop) pModDoc->MoveOrder((ORDERINDEX)dwItemDrag, (ORDERINDEX)qwItemDrop, true); + SEQUENCEINDEX nSeqFrom = (SEQUENCEINDEX)(dwItemDrag >> 16), nSeqTo = (SEQUENCEINDEX)(qwItemDrop >> 16); + ORDERINDEX nOrdFrom = (ORDERINDEX)(dwItemDrag & 0xFFFF), nOrdTo = (ORDERINDEX)(qwItemDrop & 0xFFFF); + if(dwDropType == MODITEM_SEQUENCE) + { + // drop on sequence -> attach + nSeqTo = (SEQUENCEINDEX)(qwItemDrop & 0xFFFF); + nOrdTo = pModDoc->GetSoundFile()->Order.GetSequence(nSeqTo).GetLengthTailTrimmed(); + } + + if (nSeqFrom != nSeqTo || nOrdFrom != nOrdTo) + { + if(pModDoc->MoveOrder(nOrdFrom, nOrdTo, true, false, nSeqFrom, nSeqTo) == true) + { + pModDoc->SetModified(); + } + } } return TRUE; } @@ -2607,20 +2632,19 @@ pModDoc = GetDocumentFromItem(hItem); if (pModDoc) { - SAMPLEINDEX nSamples = pModDoc->GetNumSamples(); INSTRUMENTINDEX nInstruments = pModDoc->GetNumInstruments(); if ((qwItemType == MODITEM_SAMPLE) && (!nInstruments)) { - for (SAMPLEINDEX i=1; i<=nSamples; i++) + for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++) { - pModDoc->MuteSample(i, (i == dwItemNo) ? false : true); + pModDoc->MuteSample(nSmp, (nSmp == dwItemNo) ? false : true); } } else if ((qwItemType == MODITEM_INSTRUMENT) && (nInstruments)) { - for (INSTRUMENTINDEX i=1; i<=nInstruments; i++) + for (INSTRUMENTINDEX nIns = 1; nIns <= nInstruments; nIns++) { - pModDoc->MuteInstrument(i, (i == dwItemNo) ? false : true); + pModDoc->MuteInstrument(nIns, (nIns == dwItemNo) ? false : true); } } } @@ -2638,17 +2662,15 @@ pModDoc = GetDocumentFromItem(hItem); if (pModDoc) { - SAMPLEINDEX nSamples = pModDoc->GetNumSamples(); - INSTRUMENTINDEX nInstruments = pModDoc->GetNumInstruments(); if ((qwItemType == MODITEM_SAMPLE) || (qwItemType == MODITEM_INSTRUMENT)) { - for (SAMPLEINDEX i=1; i<=nSamples; i++) + for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++) { - pModDoc->MuteSample(i, FALSE); + pModDoc->MuteSample(nSmp, FALSE); } - for (INSTRUMENTINDEX j=1; j<=nInstruments; j++) + for (INSTRUMENTINDEX nIns = 1; nIns <= pModDoc->GetNumInstruments(); nIns++) { - pModDoc->MuteInstrument(j, FALSE); + pModDoc->MuteInstrument(nIns, FALSE); } } } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-10-06 12:44:31 UTC (rev 389) @@ -36,32 +36,38 @@ LTEXT "The following problems have been encountered when loading this module:",IDC_STATIC,6,6,237,8 END -IDD_CLEANUP_SONG DIALOGEX 0, 0, 262, 209 +IDD_CLEANUP_SONG DIALOGEX 0, 0, 370, 281 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Cleanup" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "OK",IDOK,204,6,50,14 - PUSHBUTTON "Cancel",IDCANCEL,204,24,50,14 - GROUPBOX "Remove unused...",IDC_STATIC,6,6,192,42 - CONTROL "Patterns",IDC_CHK_CLEANUP_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,18,90,10 - CONTROL "Samples",IDC_CHK_CLEANUP_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,18,90,10 - CONTROL "Instruments",IDC_CHK_CLEANUP_INSTRUMENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,30,90,10 - CONTROL "Plugins",IDC_CHK_CLEANUP_PLUGINS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,30,90,10 - GROUPBOX "Remove all...",IDC_STATIC,6,54,192,54 - CONTROL "Patterns",IDC_CHK_REMOVE_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,66,90,10 - CONTROL "Orders",IDC_CHK_REMOVE_ORDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,66,90,10 - CONTROL "Samples",IDC_CHK_REMOVE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,78,90,10 - CONTROL "Instruments",IDC_CHK_REMOVE_INSTRUMENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,78,90,10 - CONTROL "Plugins",IDC_CHK_REMOVE_PLUGINS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,90,90,10 - GROUPBOX "Misc.",IDC_STATIC,6,114,192,42 - CONTROL "Rearrange patterns",IDC_CHK_REARRANGE_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,126,90,10 - CONTROL "Rearrange samples",IDC_CHK_REARRANGE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,126,90,10 - CONTROL "Optimize sample loops",IDC_CHK_OPTIMIZE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,138,90,10 - CONTROL "Reset all variables",IDC_CHK_RESET_VARIABLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,138,90,10 - GROUPBOX "Presets",IDC_STATIC,6,162,192,36 - PUSHBUTTON "Remove all unused stuff",IDC_BTN_CLEANUP_SONG,12,174,96,18 - PUSHBUTTON "Compo cleanup",IDC_BTN_COMPO_CLEANUP,114,174,78,18 + DEFPUSHBUTTON "OK",IDOK,306,6,60,14 + PUSHBUTTON "Cancel",IDCANCEL,306,24,60,14 + CONTROL "Remove unused",IDC_CHK_CLEANUP_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,18,90,10 + CONTROL "Remove all",IDC_CHK_REMOVE_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,18,90,10 + CONTROL "Rearrange",IDC_CHK_REARRANGE_PATTERNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,18,90,10 + CONTROL "Merge sequences",IDC_CHK_MERGE_SEQUENCES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,54,90,10 + CONTROL "Remove all orders",IDC_CHK_REMOVE_ORDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,54,90,10 + CONTROL "Remove unused",IDC_CHK_CLEANUP_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,90,90,10 + CONTROL "Remove all",IDC_CHK_REMOVE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,90,90,10 + CONTROL "Rearrange",IDC_CHK_REARRANGE_SAMPLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,90,90,10 + CONTROL "Remove data after loop end",IDC_CHK_OPTIMIZE_SAMPLES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,102,108,10 + CONTROL "Remove unused",IDC_CHK_CLEANUP_INSTRUMENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,138,90,10 + CONTROL "Remove all (convert to samples)",IDC_CHK_REMOVE_INSTRUMENTS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,138,120,10 + CONTROL "Remove unused",IDC_CHK_CLEANUP_PLUGINS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,174,90,10 + CONTROL "Remove all",IDC_CHK_REMOVE_PLUGINS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,174,90,10 + CONTROL "Reset all variables",IDC_CHK_RESET_VARIABLES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,210,90,10 + PUSHBUTTON "Remove all unused stuff",IDC_BTN_CLEANUP_SONG,18,246,90,18 + PUSHBUTTON "Compo cleanup",IDC_BTN_COMPO_CLEANUP,120,246,90,18 + GROUPBOX "Patterns",IDC_STATIC,6,6,294,30 + GROUPBOX "Orders / Sequences",IDC_STATIC,6,42,294,30 + GROUPBOX "Samples",IDC_STATIC,6,78,294,42 + GROUPBOX "Instruments",IDC_STATIC,6,126,294,30 + GROUPBOX "Plugins",IDC_STATIC,6,162,294,30 + GROUPBOX "Miscellaneous",IDC_STATIC,6,198,294,30 + GROUPBOX "Presets",IDC_STATIC,6,234,294,36 END @@ -84,9 +90,9 @@ IDD_CLEANUP_SONG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 255 + RIGHTMARGIN, 363 TOPMARGIN, 7 - BOTTOMMARGIN, 202 + BOTTOMMARGIN, 274 END END #endif // APSTUDIO_INVOKED Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-10-05 20:51:54 UTC (rev 388) +++ trunk/OpenMPT/mptrack/resource.h 2009-10-06 12:44:31 UTC (rev 389) @@ -907,6 +907,7 @@ #define IDC_CHK_REMOVE_SAMPLES 2404 #define IDC_CHK_REMOVE_PLUGINS 2405 #define IDC_CHK_OPTIMIZE_SAMPLES 2406 +#define IDC_CHK_MERGE_SEQUENCES 2408 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1151,7 +1152,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 522 #define _APS_NEXT_COMMAND_VALUE 59231 -#define _APS_NEXT_CONTROL_VALUE 2407 +#define _APS_NEXT_CONTROL_VALUE 2409 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-10-11 17:35:14
|
Revision: 395 http://modplug.svn.sourceforge.net/modplug/?rev=395&view=rev Author: saga-games Date: 2009-10-11 17:35:03 +0000 (Sun, 11 Oct 2009) Log Message: ----------- [Ref] ChannelManagerDlg.cpp doesn't throw any warnings anymore. Modified Paths: -------------- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/ChannelManagerDlg.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2009-10-11 16:07:45 UTC (rev 394) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2009-10-11 17:35:03 UTC (rev 395) @@ -3,12 +3,6 @@ #include "moddoc.h" #include "view_gen.h" #include "ChannelManagerDlg.h" -//#include "mptrack.h" -//#include "childfrm.h" -//#include "globals.h" -//#include "dlg_misc.h" -//#include "ctrl_pat.h" -//#include "view_pat.h" /////////////////////////////////////////////////////////// @@ -77,7 +71,7 @@ void CChannelManagerDlg::Update(void) { - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; EnterCriticalSection(&applying); nChannelsOld = 0; @@ -88,9 +82,9 @@ BOOL CChannelManagerDlg::Show(void) { - if(this->m_hWnd != NULL && show == FALSE){ + if(this->m_hWnd != NULL && show == false){ ShowWindow(SW_SHOW); - show = TRUE; + show = true; } return show; @@ -98,10 +92,10 @@ BOOL CChannelManagerDlg::Hide(void) { - if(this->m_hWnd != NULL && show == TRUE){ - ResetState(TRUE,TRUE,TRUE,TRUE,TRUE); + if(this->m_hWnd != NULL && show == true){ + ResetState(true, true, true, true, true); ShowWindow(SW_HIDE); - show = FALSE; + show = false; } return show; @@ -110,14 +104,14 @@ CChannelManagerDlg::CChannelManagerDlg(void) { InitializeCriticalSection(&applying); - mouseTracking = FALSE; - rightButton = FALSE; - leftButton = FALSE; + mouseTracking = false; + rightButton = false; + leftButton = false; parentCtrl = NULL; - moveRect = FALSE; + moveRect = false; nChannelsOld = 0; bkgnd = NULL; - show = FALSE; + show = false; Create(IDD_CHANNELMANAGER, NULL); ShowWindow(SW_HIDE); @@ -149,15 +143,15 @@ TabCtrl_InsertItem(menu, 3, &tie); currentTab = 0; - for(int i = 0 ; i < MAX_BASECHANNELS ; i++){ - pattern[i] = i; - removed[i] = FALSE; - select[i] = FALSE; - state[i] = FALSE; - memory[0][i] = 0; - memory[1][i] = 0; - memory[2][i] = 0; - memory[3][i] = i; + for(CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++){ + pattern[nChn] = nChn; + removed[nChn] = false; + select[nChn] = false; + state[nChn] = false; + memory[0][nChn] = 0; + memory[1][nChn] = 0; + memory[2][nChn] = 0; + memory[3][nChn] = nChn; } ::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON1),SW_HIDE); @@ -184,16 +178,16 @@ EnterCriticalSection(&applying); - UINT i,nChannels,newpat[MAX_BASECHANNELS],newMemory[4][MAX_BASECHANNELS]; + CHANNELINDEX nChannels, newpat[MAX_BASECHANNELS], newMemory[4][MAX_BASECHANNELS]; // Count new number of channels , copy pattern pointers & manager internal store memory nChannels = 0; - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - if(!removed[pattern[i]]){ + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++){ + if(!removed[pattern[nChn]]){ newMemory[0][nChannels] = memory[0][nChannels]; newMemory[1][nChannels] = memory[1][nChannels]; newMemory[2][nChannels] = memory[2][nChannels]; - newpat[nChannels++] = pattern[i]; + newpat[nChannels++] = pattern[nChn]; } } @@ -202,9 +196,9 @@ //Creating new order-vector for ReArrangeChannels. vector<CHANNELINDEX> newChnOrder; newChnOrder.reserve(nChannels); - for(i = 0; i<nChannels; i++) + for(CHANNELINDEX nChn = 0; nChn < nChannels; nChn++) { - newChnOrder.push_back(newpat[i]); + newChnOrder.push_back(newpat[nChn]); } if(m_pSndFile->ReArrangeChannels(newChnOrder) != nChannels) { @@ -212,7 +206,7 @@ END_CRITICAL(); EndWaitCursor(); - ResetState(TRUE,TRUE,TRUE,TRUE,TRUE); + ResetState(true, true, true, true, true); LeaveCriticalSection(&applying); return; @@ -220,13 +214,13 @@ // Update manager internal store memory - for(i = 0 ; i < nChannels ; i++){ - if(i != newpat[i]){ - memory[0][i] = newMemory[0][newpat[i]]; - memory[1][i] = newMemory[1][newpat[i]]; - memory[2][i] = newMemory[2][newpat[i]]; + for(CHANNELINDEX nChn = 0; nChn < nChannels; nChn++){ + if(nChn != newpat[nChn]){ + memory[0][nChn] = newMemory[0][newpat[nChn]]; + memory[1][nChn] = newMemory[1][newpat[nChn]]; + memory[2][nChn] = newMemory[2][newpat[nChn]]; } - memory[3][i] = i; + memory[3][nChn] = nChn; } /* @@ -241,7 +235,7 @@ END_CRITICAL(); EndWaitCursor(); - ResetState(TRUE,TRUE,TRUE,TRUE,TRUE); + ResetState(true, true, true, true, true); LeaveCriticalSection(&applying); // Update document & player @@ -259,9 +253,9 @@ EnterCriticalSection(&applying); if(bkgnd) DeleteObject((HBITMAP)bkgnd); - ResetState(TRUE,TRUE,TRUE,TRUE,TRUE); + ResetState(true, true, true, true, true); bkgnd = NULL; - show = FALSE; + show = false; LeaveCriticalSection(&applying); @@ -276,7 +270,9 @@ CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(m_pSndFile) for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) select[i] = TRUE; + if(m_pSndFile) + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + select[nChn] = true; LeaveCriticalSection(&applying); InvalidateRect(NULL, FALSE); @@ -290,7 +286,9 @@ CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(m_pSndFile) for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) select[i] = !select[i]; + if(m_pSndFile) + for(CHANNELINDEX nChn = 0 ; nChn < m_pSndFile->m_nChannels ; nChn++) + select[nChn] = !select[nChn]; LeaveCriticalSection(&applying); InvalidateRect(NULL, FALSE); @@ -306,55 +304,60 @@ if(pModDoc && m_pSndFile){ - UINT ii,i,r; int nbOk = 0, nbSelect = 0; switch(currentTab){ case 0: - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(!removed[ii]){ - if(select[ii]) nbSelect++; - if(select[ii] && pModDoc->IsChannelSolo(ii)) nbOk++; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(!removed[nThisChn]){ + if(select[nThisChn]) nbSelect++; + if(select[nThisChn] && pModDoc->IsChannelSolo(nThisChn)) nbOk++; } } - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(select[ii] && !removed[ii]){ - if(pModDoc->IsChannelMuted(ii)) pModDoc->MuteChannel(ii,FALSE); - if(nbSelect == nbOk) pModDoc->SoloChannel(ii,!pModDoc->IsChannelSolo(ii)); - else pModDoc->SoloChannel(ii,TRUE); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(select[nThisChn] && !removed[nThisChn]){ + if(pModDoc->IsChannelMuted(nThisChn)) pModDoc->MuteChannel(nThisChn, false); + if(nbSelect == nbOk) pModDoc->SoloChannel(nThisChn, !pModDoc->IsChannelSolo(nThisChn)); + else pModDoc->SoloChannel(nThisChn, true); } - else if(!pModDoc->IsChannelSolo(ii)) pModDoc->MuteChannel(ii,TRUE); + else if(!pModDoc->IsChannelSolo(nThisChn)) pModDoc->MuteChannel(nThisChn, true); } break; case 1: - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(!removed[ii]){ - if(select[ii]) nbSelect++; - r = pModDoc->IsChannelRecord(ii); - if(select[ii] && r == 1) nbOk++; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(!removed[nThisChn]){ + if(select[nThisChn]) nbSelect++; + BYTE rec = pModDoc->IsChannelRecord(nThisChn); + if(select[nThisChn] && rec == 1) nbOk++; } } - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(!removed[ii] && select[ii]){ - if(select[ii] && nbSelect != nbOk && pModDoc->IsChannelRecord(ii) != 1) pModDoc->Record1Channel(ii); - else if(nbSelect == nbOk) pModDoc->Record1Channel(ii,FALSE); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(!removed[nThisChn] && select[nThisChn]){ + if(select[nThisChn] && nbSelect != nbOk && pModDoc->IsChannelRecord(nThisChn) != 1) pModDoc->Record1Channel(nThisChn); + else if(nbSelect == nbOk) pModDoc->Record1Channel(nThisChn, false); } } break; case 2: - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(select[ii] && !removed[ii]) pModDoc->NoFxChannel(ii,FALSE); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(select[nThisChn] && !removed[nThisChn]) pModDoc->NoFxChannel(nThisChn, false); } break; case 3: - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(select[ii]) removed[ii] = !removed[ii]; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(select[nThisChn]) removed[nThisChn] = !removed[nThisChn]; } break; default: @@ -381,58 +384,62 @@ if(pModDoc && m_pSndFile){ - UINT i,ii,r; int nbOk = 0, nbSelect = 0; switch(currentTab){ case 0: - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(!removed[ii]){ - if(select[ii]) nbSelect++; - if(select[ii] && pModDoc->IsChannelMuted(ii)) nbOk++; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(!removed[nThisChn]){ + if(select[nThisChn]) nbSelect++; + if(select[nThisChn] && pModDoc->IsChannelMuted(nThisChn)) nbOk++; } } - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(select[ii] && !removed[ii]){ - if(pModDoc->IsChannelSolo(ii)) pModDoc->SoloChannel(ii,FALSE); - if(nbSelect == nbOk) pModDoc->MuteChannel(ii,!pModDoc->IsChannelMuted(ii)); - else pModDoc->MuteChannel(ii,TRUE); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(select[nThisChn] && !removed[nThisChn]){ + if(pModDoc->IsChannelSolo(nThisChn)) pModDoc->SoloChannel(nThisChn, false); + if(nbSelect == nbOk) pModDoc->MuteChannel(nThisChn, !pModDoc->IsChannelMuted(nThisChn)); + else pModDoc->MuteChannel(nThisChn, true); } } break; case 1: - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(!removed[ii]){ - if(select[ii]) nbSelect++; - r = pModDoc->IsChannelRecord(ii); - if(select[ii] && r == 2) nbOk++; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(!removed[nThisChn]){ + if(select[nThisChn]) nbSelect++; + BYTE rec = pModDoc->IsChannelRecord(nThisChn); + if(select[nThisChn] && rec == 2) nbOk++; } } - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(!removed[ii] && select[ii]){ - if(select[ii] && nbSelect != nbOk && pModDoc->IsChannelRecord(ii) != 2) pModDoc->Record2Channel(ii); - else if(nbSelect == nbOk) pModDoc->Record2Channel(ii,FALSE); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(!removed[nThisChn] && select[nThisChn]){ + if(select[nThisChn] && nbSelect != nbOk && pModDoc->IsChannelRecord(nThisChn) != 2) pModDoc->Record2Channel(nThisChn); + else if(nbSelect == nbOk) pModDoc->Record2Channel(nThisChn, false); } } break; case 2: - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - ii = pattern[i]; - if(select[ii] && !removed[ii]) pModDoc->NoFxChannel(ii,TRUE); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(select[nThisChn] && !removed[nThisChn]) pModDoc->NoFxChannel(nThisChn, true); } break; case 3: - ResetState(FALSE,FALSE,FALSE,FALSE,TRUE); + ResetState(false, false, false, false, true); break; default: break; } - if(currentTab !=3) ResetState(); + if(currentTab != 3) ResetState(); LeaveCriticalSection(&applying); pModDoc->UpdateAllViews(NULL,0xff,NULL); @@ -451,21 +458,25 @@ switch(currentTab){ case 0: - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - UINT ii = pattern[i]; - memory[0][i] = 0; - if(pModDoc->IsChannelMuted(ii)) memory[0][i] |= 1; - if(pModDoc->IsChannelSolo(ii)) memory[0][i] |= 2; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + memory[0][nThisChn] = 0; + if(pModDoc->IsChannelMuted(nThisChn)) memory[0][nChn] |= 1; + if(pModDoc->IsChannelSolo(nThisChn)) memory[0][nChn] |= 2; } break; case 1: - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) memory[1][i] = pModDoc->IsChannelRecord(pattern[i]); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + memory[1][nChn] = pModDoc->IsChannelRecord(pattern[nChn]); break; case 2: - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) memory[2][i] = pModDoc->IsChannelNoFx(pattern[i]); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + memory[2][nChn] = pModDoc->IsChannelNoFx(pattern[nChn]); break; case 3: - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) memory[3][i] = pattern[i]; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + memory[3][nChn] = pattern[nChn]; break; default: break; @@ -484,31 +495,35 @@ switch(currentTab){ case 0: - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - UINT ii = pattern[i]; - pModDoc->MuteChannel(ii,memory[0][i] & 1); - pModDoc->SoloChannel(ii,memory[0][i] & 2); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + pModDoc->MuteChannel(nThisChn, (memory[0][nChn] & 1) != 0 ? true : false); + pModDoc->SoloChannel(nThisChn, (memory[0][nChn] & 2) != 0 ? true : false); } break; case 1: - pModDoc->ReinitRecordState(TRUE); - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - if(memory[1][i] != 2) pModDoc->Record1Channel(pattern[i],memory[1][i] == 1); - if(memory[1][i] != 1) pModDoc->Record2Channel(pattern[i],memory[1][i] == 2); + pModDoc->ReinitRecordState(true); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + if(memory[1][nChn] != 2) pModDoc->Record1Channel(pattern[nChn], memory[1][nChn] == 1); + if(memory[1][nChn] != 1) pModDoc->Record2Channel(pattern[nChn], memory[1][nChn] == 2); } break; case 2: - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) pModDoc->NoFxChannel(pattern[i],memory[2][i]); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + pModDoc->NoFxChannel(pattern[nChn], memory[2][nChn] != 0 ? true : false); break; case 3: - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) pattern[i] = memory[3][i]; - ResetState(FALSE,FALSE,FALSE,FALSE,TRUE); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + pattern[nChn] = memory[3][nChn]; + ResetState(false, false, false, false, true); break; default: break; } - if(currentTab !=3) ResetState(); + if(currentTab != 3) ResetState(); LeaveCriticalSection(&applying); pModDoc->UpdateAllViews(NULL,0xff,NULL); @@ -604,7 +619,7 @@ void CChannelManagerDlg::OnSize(UINT nType,int cx,int cy) { CWnd::OnSize(nType,cx,cy); - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; CWnd * button; CRect wnd,btn; @@ -612,31 +627,31 @@ if((button = GetDlgItem(IDC_BUTTON1)) != 0){ button->GetWindowRect(&btn); - button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-4,0,0,SWP_NOSIZE | SWP_NOZORDER); + button->SetWindowPos(NULL, btn.left - wnd.left - 3, wnd.Height() - btn.Height() * 2 - 8, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } if((button = GetDlgItem(IDC_BUTTON2)) != 0){ button->GetWindowRect(&btn); - button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-4,0,0,SWP_NOSIZE | SWP_NOZORDER); + button->SetWindowPos(NULL, btn.left - wnd.left - 3, wnd.Height() - btn.Height() * 2 - 8, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } if((button = GetDlgItem(IDC_BUTTON3)) != 0){ button->GetWindowRect(&btn); - button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-4,0,0,SWP_NOSIZE | SWP_NOZORDER); + button->SetWindowPos(NULL, btn.left - wnd.left - 3, wnd.Height() - btn.Height() * 2 - 8, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } if((button = GetDlgItem(IDC_BUTTON4)) != 0){ button->GetWindowRect(&btn); - button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-4,0,0,SWP_NOSIZE | SWP_NOZORDER); + button->SetWindowPos(NULL, btn.left - wnd.left - 3, wnd.Height() - btn.Height() * 2 - 8, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } if((button = GetDlgItem(IDC_BUTTON5)) != 0){ button->GetWindowRect(&btn); - button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-4,0,0,SWP_NOSIZE | SWP_NOZORDER); + button->SetWindowPos(NULL, btn.left - wnd.left - 3, wnd.Height() - btn.Height() * 2 - 8, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } if((button = GetDlgItem(IDC_BUTTON6)) != 0){ button->GetWindowRect(&btn); - button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-4,0,0,SWP_NOSIZE | SWP_NOZORDER); + button->SetWindowPos(NULL, btn.left - wnd.left - 3, wnd.Height() - btn.Height() * 2 - 8, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } GetClientRect(&wnd); - wnd.SetRect(wnd.left + 10,wnd.top + 38,wnd.right - 8,wnd.bottom - 30); + wnd.SetRect(wnd.left + 10, wnd.top + 38, wnd.right - 8, wnd.bottom - 30); if(bkgnd) DeleteObject(bkgnd); bkgnd = ::CreateCompatibleBitmap(::GetDC(m_hWnd),wnd.Width(),wnd.Height()); if(!moveRect && bkgnd){ @@ -656,7 +671,7 @@ CDialog::OnActivate(nState,pWndOther,bMinimized); if(show && !bMinimized){ - ResetState(TRUE,TRUE,TRUE,TRUE,FALSE); + ResetState(true, true, true, true, false); EnterCriticalSection(&applying); nChannelsOld = 0; LeaveCriticalSection(&applying); @@ -672,7 +687,7 @@ void CChannelManagerDlg::OnPaint() { - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; EnterCriticalSection(&applying); @@ -690,25 +705,27 @@ } CHAR s[256]; - UINT i,ii,c=0,l=0; - UINT nColns = CM_NB_COLS; - UINT nChannels = m_pSndFile->m_nChannels; - UINT nLines = nChannels / nColns + (nChannels % nColns ? 1 : 0); + UINT c=0,l=0; + CHANNELINDEX nChannels = m_pSndFile->m_nChannels; + UINT nLines = nChannels / CM_NB_COLS + (nChannels % CM_NB_COLS ? 1 : 0); CRect client,btn; GetWindowRect(&btn); GetClientRect(&client); client.SetRect(client.left + 10,client.top + 38,client.right - 8,client.bottom - 30); - UINT chnSizeX = (client.right - client.left) / (int)nColns; + UINT chnSizeX = (client.right - client.left) / CM_NB_COLS; UINT chnSizeY = (client.bottom - client.top) / (int)nLines; - if(chnSizeY != CM_BT_HEIGHT){ + if(chnSizeY != CM_BT_HEIGHT) + { + // resize window ::EndPaint(m_hWnd,&pDC); LeaveCriticalSection(&applying); - CWnd::SetWindowPos(NULL,0,0,btn.Width(),btn.Height()+(CM_BT_HEIGHT-chnSizeY)*nLines,SWP_NOMOVE | SWP_NOZORDER); + CWnd::SetWindowPos(NULL, 0, 0, btn.Width(), btn.Height() + (CM_BT_HEIGHT - chnSizeY) * nLines, SWP_NOMOVE | SWP_NOZORDER); return; } + chnSizeY = CM_BT_HEIGHT; if(currentTab == 3 && moveRect && bkgnd){ @@ -737,10 +754,11 @@ FrameRect(pDC.hdc,&r,CMainFrame::brushBlack); } */ - for(i = 0 ; i < nChannels ; i++){ - ii = pattern[i]; - if(select[ii]){ - btn = move[ii]; + for(CHANNELINDEX nChn = 0; nChn < nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; + if(select[nThisChn]){ + btn = move[nThisChn]; btn.left += mx - omx + 2; btn.right += mx - omx + 1; btn.top += my - omy + 2; @@ -760,7 +778,8 @@ CRect intersection; BOOL ok = intersection.IntersectRect(&pDC.rcPaint,&client); - if(pDC.fErase || (ok && nChannelsOld != nChannels)){ + if(pDC.fErase || (ok && nChannelsOld != nChannels)) + { FillRect(pDC.hdc,&intersection,CMainFrame::brushHighLight); FrameRect(pDC.hdc,&client,CMainFrame::brushBlack); nChannelsOld = nChannels; @@ -771,14 +790,14 @@ HBRUSH red = CreateSolidBrush(RGB(192,96,96)); HBRUSH green = CreateSolidBrush(RGB(96,192,96)); - for(i = 0 ; i < nChannels ; i++){ + for(CHANNELINDEX nChn = 0; nChn < nChannels; nChn++) + { + CHANNELINDEX nThisChn = pattern[nChn]; - ii = pattern[i]; - - if(m_pSndFile->ChnSettings[ii].szName[0] >= 0x20) - wsprintf(s, "%d: %s", (ii+1), m_pSndFile->ChnSettings[ii].szName); + if(m_pSndFile->ChnSettings[nThisChn].szName[0] >= 0x20) + wsprintf(s, "%d: %s", (nThisChn + 1), m_pSndFile->ChnSettings[nThisChn].szName); else - wsprintf(s, "Channel %d", ii+1); + wsprintf(s, "Channel %d", nThisChn + 1); btn.left = client.left + c * chnSizeX + 3; btn.right = btn.left + chnSizeX - 3; @@ -786,7 +805,7 @@ btn.bottom = btn.top + chnSizeY - 3; ok = intersection.IntersectRect(&pDC.rcPaint,&client); - if(ok) DrawChannelButton(pDC.hdc, &btn, s, select[ii], removed[ii] ? FALSE : TRUE, DT_RIGHT | DT_VCENTER, NULL); + if(ok) DrawChannelButton(pDC.hdc, &btn, s, select[nThisChn], removed[nThisChn] ? FALSE : TRUE, DT_RIGHT | DT_VCENTER, NULL); btn.right = btn.left + chnSizeX / 7; @@ -797,29 +816,29 @@ switch(currentTab){ case 0: - if(m_pSndFile->ChnSettings[ii].dwFlags & CHN_MUTE) FillRect(pDC.hdc,&btn,red); - else if(m_pSndFile->ChnSettings[ii].dwFlags & CHN_SOLO) FillRect(pDC.hdc,&btn,green); + if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_MUTE) FillRect(pDC.hdc,&btn,red); + else if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_SOLO) FillRect(pDC.hdc,&btn,green); else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 1: - UINT r; - if(pModDoc) r = pModDoc->IsChannelRecord(ii); + BYTE r; + if(pModDoc) r = pModDoc->IsChannelRecord(nThisChn); else r = 0; if(r == 1) FillRect(pDC.hdc,&btn,green); else if(r == 2) FillRect(pDC.hdc,&btn,red); else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 2: - if(m_pSndFile->ChnSettings[ii].dwFlags & CHN_NOFX) FillRect(pDC.hdc,&btn,red); + if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_NOFX) FillRect(pDC.hdc,&btn,red); else FillRect(pDC.hdc,&btn,green); break; case 3: - if(removed[ii]) FillRect(pDC.hdc,&btn,red); + if(removed[nThisChn]) FillRect(pDC.hdc,&btn,red); else FillRect(pDC.hdc,&btn,green); break; } - if(!removed[ii]){ + if(!removed[nThisChn]){ HGDIOBJ oldpen = ::SelectObject(pDC.hdc, CMainFrame::penLightGray); ::MoveToEx(pDC.hdc, btn.right, btn.top-2, NULL); ::LineTo(pDC.hdc, btn.right, btn.bottom+1); @@ -828,7 +847,7 @@ FrameRect(pDC.hdc,&btn,CMainFrame::brushBlack); c++; - if(c >= nColns) { c = 0; l++; } + if(c >= CM_NB_COLS) { c = 0; l++; } } DeleteObject((HBRUSH)green); @@ -844,13 +863,13 @@ nChannelsOld = 0; } -BOOL CChannelManagerDlg::ButtonHit(CPoint point, UINT * id, CRect * invalidate) +bool CChannelManagerDlg::ButtonHit( CPoint point, CHANNELINDEX * id, CRect * invalidate ) { CRect client; GetClientRect(&client); client.SetRect(client.left + 10,client.top + 38,client.right - 8,client.bottom - 30); - if(!PtInRect(client,point)) return FALSE; + if(!PtInRect(client,point)) return false; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; @@ -869,7 +888,7 @@ x = x / dx; y = y / dy; - int n = y * nColns + x; + CHANNELINDEX n = static_cast<CHANNELINDEX>(y * nColns + x); if(n >= 0 && n < (int)m_pSndFile->m_nChannels){ if(id) *id = n; if(invalidate){ @@ -878,41 +897,43 @@ invalidate->top = client.top + y * dy; invalidate->bottom = invalidate->top + dy; } - return TRUE; + return true; } } - return FALSE; + return false; } -void CChannelManagerDlg::ResetState(BOOL selection, BOOL move, BOOL button, BOOL internal, BOOL order) +void CChannelManagerDlg::ResetState(bool bSelection, bool bMove, bool bButton, bool bInternal, bool bOrder) { - for(int i = 0 ; i < MAX_BASECHANNELS ; i++){ - if(selection) - select[pattern[i]] = FALSE; - if(button) - state[pattern[i]] = FALSE; - if(order){ - pattern[i] = i; - removed[i] = FALSE; + for(CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++) + { + if(bSelection) + select[pattern[nChn]] = false; + if(bButton) + state[pattern[nChn]] = false; + if(bOrder){ + pattern[nChn] = nChn; + removed[nChn] = false; } } - if(move || internal){ - leftButton = FALSE; - rightButton = FALSE; + if(bMove || bInternal) + { + leftButton = false; + rightButton = false; } - if(move) moveRect = FALSE; - if(internal) mouseTracking = FALSE; + if(move) moveRect = false; + if(bInternal) mouseTracking = false; - if(order) nChannelsOld = 0; + if(bOrder) nChannelsOld = 0; } LRESULT CChannelManagerDlg::OnMouseLeave(WPARAM /*wparam*/, LPARAM /*lparam*/) { - if(!m_hWnd || show == FALSE) return 0; + if(!m_hWnd || show == false) return 0; EnterCriticalSection(&applying); - mouseTracking = FALSE; - ResetState(FALSE,TRUE,FALSE,TRUE); + mouseTracking = false; + ResetState(false, true, false, true); LeaveCriticalSection(&applying); return 0; @@ -920,10 +941,10 @@ LRESULT CChannelManagerDlg::OnMouseHover(WPARAM /*wparam*/, LPARAM /*lparam*/) { - if(!m_hWnd || show == FALSE) return 0; + if(!m_hWnd || show == false) return 0; EnterCriticalSection(&applying); - mouseTracking = FALSE; + mouseTracking = false; LeaveCriticalSection(&applying); return 0; @@ -931,17 +952,18 @@ void CChannelManagerDlg::OnMouseMove(UINT nFlags,CPoint point) { - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; EnterCriticalSection(&applying); - if(!mouseTracking){ + if(!mouseTracking) + { TRACKMOUSEEVENT tme; tme.cbSize = sizeof(tme); tme.hwndTrack = m_hWnd; tme.dwFlags = TME_LEAVE|TME_HOVER; tme.dwHoverTime = 1; - mouseTracking = _TrackMouseEvent(&tme); + mouseTracking = _TrackMouseEvent(&tme) ? true : false; } if(!leftButton && !rightButton){ @@ -957,7 +979,7 @@ void CChannelManagerDlg::OnLButtonUp(UINT /*nFlags*/,CPoint point) { - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; EnterCriticalSection(&applying); @@ -966,54 +988,60 @@ CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; if(moveRect && m_pSndFile){ - UINT n,i,k,newpat[MAX_BASECHANNELS]; + CHANNELINDEX n, i, k; + CHANNELINDEX newpat[MAX_BASECHANNELS]; - k = 0xffff; - BOOL hit = ButtonHit(point,&n,NULL); - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++) if(k == 0xffff && select[pattern[i]]) k = i; + k = CHANNELINDEX_INVALID; + bool hit = ButtonHit(point,&n,NULL); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + if(k == CHANNELINDEX_INVALID && select[pattern[nChn]]) k = nChn; - if(hit && m_pSndFile && k != 0xffff){ + if(hit && m_pSndFile && k != CHANNELINDEX_INVALID){ i = 0; k = 0; while(i < n){ while(i < n && select[pattern[i]]) i++; if(i < n && !select[pattern[i]]){ newpat[k] = pattern[i]; - pattern[i] = 0xffff; + pattern[i] = CHANNELINDEX_INVALID; k++; i++; } } - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - if(pattern[i] != 0xffff && select[pattern[i]]){ - newpat[k] = pattern[i]; - pattern[i] = 0xffff; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels ; nChn++) + { + if(pattern[nChn] != CHANNELINDEX_INVALID && select[pattern[nChn]]){ + newpat[k] = pattern[nChn]; + pattern[nChn] = CHANNELINDEX_INVALID; k++; } } i = 0; while(i < m_pSndFile->m_nChannels){ - while(i < m_pSndFile->m_nChannels && pattern[i] == 0xffff) i++; - if(i < m_pSndFile->m_nChannels && pattern[i] != 0xffff){ + while(i < m_pSndFile->m_nChannels && pattern[i] == CHANNELINDEX_INVALID) i++; + if(i < m_pSndFile->m_nChannels && pattern[i] != CHANNELINDEX_INVALID){ newpat[k] = pattern[i]; k++; i++; } } - for(i = 0 ; i < m_pSndFile->m_nChannels ; i++){ - pattern[i] = newpat[i]; - select[i] = FALSE; + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + { + pattern[nChn] = newpat[nChn]; + select[nChn] = false; } } - moveRect = FALSE; + moveRect = false; nChannelsOld = 0; InvalidateRect(NULL,FALSE); } - leftButton = FALSE; + leftButton = false; - for(int i = 0 ; i < MAX_BASECHANNELS ; i++) state[pattern[i]] = FALSE; + for(CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS ; nChn++) + state[pattern[nChn]] = false; + if(pModDoc) pModDoc->UpdateAllViews(NULL,0xff,NULL); LeaveCriticalSection(&applying); @@ -1021,13 +1049,13 @@ void CChannelManagerDlg::OnLButtonDown(UINT nFlags,CPoint point) { - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; EnterCriticalSection(&applying); - if(!ButtonHit(point,NULL,NULL)) ResetState(TRUE,FALSE,FALSE,FALSE); + if(!ButtonHit(point,NULL,NULL)) ResetState(true, false, false, false); - leftButton = TRUE; + leftButton = true; MouseEvent(nFlags,point,CM_BT_LEFT); omx = point.x; omy = point.y; @@ -1037,13 +1065,13 @@ void CChannelManagerDlg::OnRButtonUp(UINT /*nFlags*/,CPoint /*point*/) { - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; EnterCriticalSection(&applying); - ResetState(FALSE,FALSE,TRUE,FALSE); + ResetState(false, false, true, false); - rightButton = FALSE; + rightButton = false; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm->GetActiveDoc(); if(pModDoc) pModDoc->UpdateAllViews(NULL,0xff,NULL); @@ -1053,18 +1081,18 @@ void CChannelManagerDlg::OnRButtonDown(UINT nFlags,CPoint point) { - if(!m_hWnd || show == FALSE) return; + if(!m_hWnd || show == false) return; EnterCriticalSection(&applying); - if(moveRect){ - ResetState(TRUE,TRUE,FALSE,FALSE,FALSE); + rightButton = true; + if(moveRect) + { + ResetState(true, true, false, false, false); nChannelsOld = 0; InvalidateRect(NULL, FALSE); - rightButton = TRUE; - } - else{ - rightButton = TRUE; + } else + { MouseEvent(nFlags,point,CM_BT_RIGHT); omx = point.x; omy = point.y; @@ -1075,9 +1103,9 @@ void CChannelManagerDlg::MouseEvent(UINT nFlags,CPoint point,BYTE button) { - UINT n; + CHANNELINDEX n; CRect client,invalidate; - BOOL hit = ButtonHit(point,&n,&invalidate); + bool hit = ButtonHit(point, &n, &invalidate); if(hit) n = pattern[n]; mx = point.x; @@ -1093,60 +1121,64 @@ if(nFlags & MK_CONTROL){ if(button == CM_BT_LEFT){ if(!select[n] && !removed[n]) move[n] = invalidate; - select[n] = TRUE; + select[n] = true; } - else if(button == CM_BT_RIGHT) select[n] = FALSE; + else if(button == CM_BT_RIGHT) select[n] = false; } else if(!removed[n] || currentTab == 3){ switch(currentTab){ case 0: - if(button == CM_BT_LEFT){ + if(button == CM_BT_LEFT) + { if(!pModDoc->IsChannelSolo(n) || pModDoc->IsChannelMuted(n)){ GetClientRect(&client); - pModDoc->MuteChannel(n,FALSE); - pModDoc->SoloChannel(n,TRUE); - for(UINT i = 0 ; i < m_pSndFile->m_nChannels ; i++) if(i != n) pModDoc->MuteChannel(i,TRUE); + pModDoc->MuteChannel(n, false); + pModDoc->SoloChannel(n, true); + for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) if(nChn != n) pModDoc->MuteChannel(nChn, true); client.SetRect(client.left + 10,client.top + 38,client.right - 8,client.bottom - 30); invalidate = client; } - else pModDoc->SoloChannel(n,FALSE); - } - else{ - if(pModDoc->IsChannelSolo(n)) pModDoc->SoloChannel(n,FALSE); + else pModDoc->SoloChannel(n, false); + } else + { + if(pModDoc->IsChannelSolo(n)) pModDoc->SoloChannel(n, false); pModDoc->MuteChannel(n,!pModDoc->IsChannelMuted(n)); } pModDoc->SetModified(); pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | ((n/CHANNELS_IN_TAB) << HINT_SHIFT_CHNTAB)); break; case 1: - UINT r; - r = pModDoc->IsChannelRecord(n); - if(!r || r != (button == CM_BT_LEFT ? 1 : 2)){ + BYTE rec; + rec = pModDoc->IsChannelRecord(n); + if(!rec || rec != (button == CM_BT_LEFT ? 1 : 2)){ if(button == CM_BT_LEFT) pModDoc->Record1Channel(n); else pModDoc->Record2Channel(n); + } else + { + pModDoc->Record1Channel(n, false); + pModDoc->Record2Channel(n, false); } - else{ - pModDoc->Record1Channel(n,FALSE); - pModDoc->Record2Channel(n,FALSE); - } break; case 2: - if(button == CM_BT_LEFT) pModDoc->NoFxChannel(n,FALSE); - else pModDoc->NoFxChannel(n,TRUE); + if(button == CM_BT_LEFT) pModDoc->NoFxChannel(n, false); + else pModDoc->NoFxChannel(n, true); pModDoc->SetModified(); pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | ((n/CHANNELS_IN_TAB) << HINT_SHIFT_CHNTAB)); break; case 3: - if(button == CM_BT_LEFT){ + if(button == CM_BT_LEFT) + { move[n] = invalidate; - select[n] = TRUE; + select[n] = true; } - if(button == CM_BT_RIGHT){ - select[n] = FALSE; + if(button == CM_BT_RIGHT) + { + select[n] = false; removed[n] = !removed[n]; } - if(select[n] || button == 0){ + if(select[n] || button == 0) + { GetClientRect(&client); client.SetRect(client.left + 10,client.top + 38,client.right - 8,client.bottom - 30); if(!bkgnd) bkgnd = ::CreateCompatibleBitmap(::GetDC(m_hWnd),client.Width(),client.Height()); @@ -1158,13 +1190,13 @@ ::DeleteDC(bdc); } invalidate = client; - moveRect = TRUE; + moveRect = true; } break; } } - state[n] = TRUE; + state[n] = false; InvalidateRect(&invalidate, FALSE); } else{ Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.h =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.h 2009-10-11 16:07:45 UTC (rev 394) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.h 2009-10-11 17:35:03 UTC (rev 395) @@ -30,27 +30,27 @@ ~CChannelManagerDlg(void); CRITICAL_SECTION applying; - UINT memory[4][MAX_BASECHANNELS]; - UINT pattern[MAX_BASECHANNELS]; - BOOL removed[MAX_BASECHANNELS]; - BOOL select[MAX_BASECHANNELS]; - BOOL state[MAX_BASECHANNELS]; + CHANNELINDEX memory[4][MAX_BASECHANNELS]; + CHANNELINDEX pattern[MAX_BASECHANNELS]; + bool removed[MAX_BASECHANNELS]; + bool select[MAX_BASECHANNELS]; + bool state[MAX_BASECHANNELS]; CRect move[MAX_BASECHANNELS]; void * parentCtrl; - BOOL mouseTracking; - int nChannelsOld; - BOOL rightButton; - BOOL leftButton; + bool mouseTracking; + CHANNELINDEX nChannelsOld; + bool rightButton; + bool leftButton; int currentTab; - BOOL moveRect; + bool moveRect; HBITMAP bkgnd; int omx,omy; - BOOL show; + bool show; int mx,my; - BOOL ButtonHit(CPoint point, UINT * id, CRect * invalidate); + bool ButtonHit(CPoint point, CHANNELINDEX * id, CRect * invalidate); void MouseEvent(UINT nFlags,CPoint point, BYTE button); - void ResetState(BOOL selection = TRUE, BOOL move = TRUE, BOOL button = TRUE, BOOL internal = TRUE, BOOL order = FALSE); + void ResetState(bool bSelection = true, bool bMove = true, bool bButton = true, bool bInternal = true, bool bOrder = false); //{{AFX_VIRTUAL(CChannelManagerDlg) BOOL OnInitDialog(); Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-10-11 16:07:45 UTC (rev 394) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-10-11 17:35:03 UTC (rev 395) @@ -8,7 +8,6 @@ #include "ctrl_pat.h" #include "view_pat.h" #include "ChannelManagerDlg.h" -#include ".\ctrl_pat.h" ////////////////////////////////////////////////////////////// // CCtrlPatterns This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-10-16 19:53:35
|
Revision: 400 http://modplug.svn.sourceforge.net/modplug/?rev=400&view=rev Author: saga-games Date: 2009-10-16 19:53:27 +0000 (Fri, 16 Oct 2009) Log Message: ----------- [New] Treeview: Muted samples and instruments are shown with a different icon. [Mod] INI Loader: removed version check for missing colours as rgbCustomColors is initalized properly anyway. Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h trunk/OpenMPT/mptrack/res/img_list.bmp Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-10-15 20:21:28 UTC (rev 399) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-10-16 19:53:27 UTC (rev 400) @@ -399,12 +399,6 @@ wsprintf(s, "Color%02d", ncol); rgbCustomColors[ncol] = GetPrivateProfileDWord("Display", s, rgbCustomColors[ncol], iniFile); } - if(rgbCustomColors[MODCOLOR_SEPSHADOW] == rgbCustomColors[MODCOLOR_SEPFACE] == rgbCustomColors[MODCOLOR_SEPHILITE] == 0 && vIniVersion < MAKE_VERSION_NUMERIC(1,17,03,03)) - { - rgbCustomColors[MODCOLOR_SEPSHADOW] = GetSysColor(COLOR_BTNSHADOW); - rgbCustomColors[MODCOLOR_SEPFACE] = GetSysColor(COLOR_BTNFACE); - rgbCustomColors[MODCOLOR_SEPHILITE] = GetSysColor(COLOR_BTNHIGHLIGHT); - } m_nWaveDevice = GetPrivateProfileLong("Sound Settings", "WaveDevice", (SNDDEV_DSOUND<<8), iniFile); m_dwSoundSetup = GetPrivateProfileDWord("Sound Settings", "SoundSetup", SOUNDSETUP_SECONDARY, iniFile); Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-10-15 20:21:28 UTC (rev 399) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-10-16 19:53:27 UTC (rev 400) @@ -262,6 +262,8 @@ IMAGE_WAVEOUT, IMAGE_ASIO, IMAGE_GRAPH, + IMAGE_SAMPLEMUTE, + IMAGE_INSTRMUTE }; ////////////////////////////////////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-15 20:21:28 UTC (rev 399) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-16 19:53:27 UTC (rev 400) @@ -277,7 +277,7 @@ VOID CModTree::AddDocument(CModDoc *pModDoc) //------------------------------------------ { - UINT nNewNdx = 0xFFFF; + UINT nNewNdx = MODTREE_MAX_DOCUMENTS; // Check if document is already in the list for (UINT i=0; i<MODTREE_MAX_DOCUMENTS; i++) { @@ -313,18 +313,14 @@ VOID CModTree::RemoveDocument(CModDoc *pModDoc) //--------------------------------------------- { - for (UINT i=0; i<MODTREE_MAX_DOCUMENTS; i++) + UINT nDocNdx = GetDocumentIDFromModDoc(pModDoc); + if(nDocNdx >= MODTREE_MAX_DOCUMENTS) return; + if (DocInfo[nDocNdx]->hSong) { - if ((DocInfo[i]) && (DocInfo[i]->pModDoc == pModDoc)) - { - if (DocInfo[i]->hSong) - { - DeleteItem(DocInfo[i]->hSong); - } - delete DocInfo[i]; - DocInfo[i] = NULL; - } + DeleteItem(DocInfo[nDocNdx]->hSong); } + delete DocInfo[nDocNdx]; + DocInfo[nDocNdx] = NULL; } @@ -349,6 +345,20 @@ } +UINT CModTree::GetDocumentIDFromModDoc(CModDoc *pModDoc) +//------------------------------------------------------ +{ + // returns document ID (to access DocInfo[] info) + UINT nDocNdx = MODTREE_MAX_DOCUMENTS; + for (UINT i = 0; i < MODTREE_MAX_DOCUMENTS; i++) + { + if (DocInfo[i] && DocInfo[i]->pModDoc == pModDoc) + nDocNdx = i; + } + return nDocNdx; +} + + ///////////////////////////////////////////////////////////////////////////// // CViewModTree drawing @@ -866,38 +876,40 @@ // Add Samples if ((pInfo->hSamples) && (hintFlagPart != HINT_INSNAMES) && (hintFlagPart != HINT_PATNAMES)) { - const UINT nSmp = (lHint >> HINT_SHIFT_SMP); - UINT smin = 1, smax = MAX_SAMPLES-1; + const SAMPLEINDEX nSmp = (SAMPLEINDEX)(lHint >> HINT_SHIFT_SMP); + SAMPLEINDEX smin = 1, smax = MAX_SAMPLES - 1; if ((hintFlagPart == HINT_SMPNAMES) && (nSmp) && (nSmp < MAX_SAMPLES)) { smin = smax = nSmp; } - for (UINT iSmp=smin; iSmp<=smax; iSmp++) + for(SAMPLEINDEX nSmp = smin; nSmp <= smax; nSmp++) { - if (iSmp <= pSndFile->m_nSamples) + if (nSmp <= pSndFile->m_nSamples) { - bool bSamplePresent = (pSndFile->Samples[iSmp].pSample) ? true : false; - UINT nImage = (bSamplePresent) ? IMAGE_SAMPLES : IMAGE_NOSAMPLE; - wsprintf(s, "%3d: %s", iSmp, pSndFile->m_szNames[iSmp]); - if (!pInfo->tiSamples[iSmp]) + bool bSamplePresent = (pSndFile->Samples[nSmp].pSample) ? true : false; + int nImage = (bSamplePresent) ? IMAGE_SAMPLES : IMAGE_NOSAMPLE; + if(pInfo->pModDoc->IsSampleMuted(nSmp) && bSamplePresent) nImage = IMAGE_SAMPLEMUTE; + + wsprintf(s, "%3d: %s", nSmp, pSndFile->m_szNames[nSmp]); + if (!pInfo->tiSamples[nSmp]) { - pInfo->tiSamples[iSmp] = InsertItem(s, nImage, nImage, pInfo->hSamples, TVI_LAST); + pInfo->tiSamples[nSmp] = InsertItem(s, nImage, nImage, pInfo->hSamples, TVI_LAST); } else { tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; - tvi.hItem = pInfo->tiSamples[iSmp]; + tvi.hItem = pInfo->tiSamples[nSmp]; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); tvi.iImage = tvi.iSelectedImage = nImage; GetItem(&tvi); - if ((strcmp(s, stmp)) || (tvi.iImage != (int)nImage)) + if ((strcmp(s, stmp)) || (tvi.iImage != nImage)) { - SetItem(pInfo->tiSamples[iSmp], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); + SetItem(pInfo->tiSamples[nSmp], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } } } else { - if (pInfo->tiSamples[iSmp]) + if (pInfo->tiSamples[nSmp]) { - DeleteItem(pInfo->tiSamples[iSmp]); - pInfo->tiSamples[iSmp] = NULL; + DeleteItem(pInfo->tiSamples[nSmp]); + pInfo->tiSamples[nSmp] = NULL; } } } @@ -905,8 +917,8 @@ // Add Instruments if ((pInfo->hInstruments) && (hintFlagPart != HINT_SMPNAMES) && (hintFlagPart != HINT_PATNAMES)) { - UINT smin = 1, smax = MAX_INSTRUMENTS-1; - const UINT nIns = (lHint >> HINT_SHIFT_INS); + INSTRUMENTINDEX smin = 1, smax = MAX_INSTRUMENTS - 1; + const INSTRUMENTINDEX nIns = (INSTRUMENTINDEX)(lHint >> HINT_SHIFT_INS); if ((hintFlagPart == HINT_INSNAMES) && (nIns) && (nIns < MAX_INSTRUMENTS)) { smin = smax = nIns; @@ -924,35 +936,44 @@ } } } - for (UINT iSmp=smin; iSmp<=smax; iSmp++) + for (INSTRUMENTINDEX nIns = smin; nIns <= smax; nIns++) { - if ((iSmp <= pSndFile->m_nInstruments) && (pSndFile->Instruments[iSmp])) + if ((nIns <= pSndFile->m_nInstruments) && (pSndFile->Instruments[nIns])) { -// -> CODE#0023 -// -> DESC="IT project files (.itp)" -// wsprintf(s, "%3d: %s", iSmp, pSndFile->Instruments[iSmp]->name); - BOOL pathOk = pSndFile->m_szInstrumentPath[iSmp-1][0] != '\0'; - BOOL instOk = pSndFile->instrumentModified[iSmp-1] == FALSE; - wsprintf(s, pathOk ? (instOk ? "%3d: %s" : "%3d: * %s") : "%3d: ? %s", iSmp, pSndFile->Instruments[iSmp]->name); -// -! NEW_FEATURE#0023 - if (!pInfo->tiInstruments[iSmp]) + if((pSndFile->m_dwSongFlags & SONG_ITPROJECT) != 0) { - pInfo->tiInstruments[iSmp] = InsertItem(s, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, pInfo->hInstruments, TVI_LAST); + // path info for ITP instruments + BOOL pathOk = pSndFile->m_szInstrumentPath[nIns-1][0] != '\0'; + BOOL instOk = pSndFile->instrumentModified[nIns-1] == FALSE; + wsprintf(s, pathOk ? (instOk ? "%3d: %s" : "%3d: * %s") : "%3d: ? %s", nIns, pSndFile->Instruments[nIns]->name); } else { - tvi.mask = TVIF_TEXT | TVIF_HANDLE; - tvi.hItem = pInfo->tiInstruments[iSmp]; + wsprintf(s, "%3d: %s", nIns, pSndFile->Instruments[nIns]->name); + } + + int nImage = IMAGE_INSTRUMENTS; + if(pInfo->pModDoc->IsInstrumentMuted(nIns)) nImage = IMAGE_INSTRMUTE; + + if (!pInfo->tiInstruments[nIns]) + { + pInfo->tiInstruments[nIns] = InsertItem(s, nImage, nImage, pInfo->hInstruments, TVI_LAST); + } else + { + tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; + tvi.hItem = pInfo->tiInstruments[nIns]; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); + tvi.iImage = tvi.iSelectedImage = nImage; GetItem(&tvi); - if (strcmp(s, stmp)) SetItem(pInfo->tiInstruments[iSmp], TVIF_TEXT, s, 0, 0, 0, 0, 0); + if ((strcmp(s, stmp)) || (tvi.iImage != nImage)) + SetItem(pInfo->tiInstruments[nIns], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } } else { - if (pInfo->tiInstruments[iSmp]) + if (pInfo->tiInstruments[nIns]) { - DeleteItem(pInfo->tiInstruments[iSmp]); - pInfo->tiInstruments[iSmp] = NULL; + DeleteItem(pInfo->tiInstruments[nIns]); + pInfo->tiInstruments[nIns] = NULL; } } } @@ -2005,17 +2026,16 @@ VOID CModTree::UpdatePlayPos(CModDoc *pModDoc, PMPTNOTIFICATION pNotify) //---------------------------------------------------------------------- { - for (UINT i=0; i<MODTREE_MAX_DOCUMENTS; i++) if ((DocInfo[i]) && (DocInfo[i]->pModDoc == pModDoc)) + UINT nDocNdx = GetDocumentIDFromModDoc(pModDoc); + if(nDocNdx >= MODTREE_MAX_DOCUMENTS) return; + + ORDERINDEX nNewOrd = (pNotify) ? pNotify->nOrder : ORDERINDEX_INVALID; + SEQUENCEINDEX nNewSeq = (pModDoc->GetSoundFile() != nullptr) ? pModDoc->GetSoundFile()->Order.GetCurrentSequenceIndex() : SEQUENCEINDEX_INVALID; + if (nNewOrd != DocInfo[nDocNdx]->nOrdSel || nNewSeq != DocInfo[nDocNdx]->nSeqSel) { - ORDERINDEX nNewOrd = (pNotify) ? pNotify->nOrder : ORDERINDEX_INVALID; - SEQUENCEINDEX nNewSeq = (pModDoc->GetSoundFile() != nullptr) ? pModDoc->GetSoundFile()->Order.GetCurrentSequenceIndex() : SEQUENCEINDEX_INVALID; - if (nNewOrd != DocInfo[i]->nOrdSel || nNewSeq != DocInfo[i]->nSeqSel) - { - DocInfo[i]->nOrdSel = nNewOrd; - DocInfo[i]->nSeqSel = nNewSeq; - UpdateView(i, HINT_MODSEQUENCE); - } - break; + DocInfo[nDocNdx]->nOrdSel = nNewOrd; + DocInfo[nDocNdx]->nSeqSel = nNewSeq; + UpdateView(nDocNdx, HINT_MODSEQUENCE); } } @@ -2604,15 +2624,18 @@ const DWORD dwItemNo = (DWORD)(qwItemType >> 16); qwItemType &= 0xFFFF; pModDoc = GetDocumentFromItem(hItem); + if (pModDoc) { if ((qwItemType == MODITEM_SAMPLE) && (!pModDoc->GetNumInstruments())) { pModDoc->MuteSample((SAMPLEINDEX)dwItemNo, (pModDoc->IsSampleMuted((SAMPLEINDEX)dwItemNo)) ? false : true); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SMPNAMES | HINT_SAMPLEINFO); } else if ((qwItemType == MODITEM_INSTRUMENT) && (pModDoc->GetNumInstruments())) { pModDoc->MuteInstrument((INSTRUMENTINDEX)dwItemNo, (pModDoc->IsInstrumentMuted((INSTRUMENTINDEX)dwItemNo)) ? false : true); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_INSNAMES | HINT_INSTRUMENT); } if ((qwItemType == MODITEM_EFFECT)) @@ -2650,6 +2673,7 @@ for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++) { pModDoc->MuteSample(nSmp, (nSmp == dwItemNo) ? false : true); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SMPNAMES | HINT_SAMPLEINFO); } } else if ((qwItemType == MODITEM_INSTRUMENT) && (nInstruments)) @@ -2657,6 +2681,7 @@ for (INSTRUMENTINDEX nIns = 1; nIns <= nInstruments; nIns++) { pModDoc->MuteInstrument(nIns, (nIns == dwItemNo) ? false : true); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_INSNAMES | HINT_INSTRUMENT); } } } @@ -2678,11 +2703,13 @@ { for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++) { - pModDoc->MuteSample(nSmp, FALSE); + pModDoc->MuteSample(nSmp, false); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SMPNAMES | HINT_SAMPLEINFO); } for (INSTRUMENTINDEX nIns = 1; nIns <= pModDoc->GetNumInstruments(); nIns++) { - pModDoc->MuteInstrument(nIns, FALSE); + pModDoc->MuteInstrument(nIns, false); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_INSNAMES | HINT_INSTRUMENT); } } } Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2009-10-15 20:21:28 UTC (rev 399) +++ trunk/OpenMPT/mptrack/View_tre.h 2009-10-16 19:53:27 UTC (rev 400) @@ -174,6 +174,7 @@ static int CALLBACK ModTreeDrumCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); void ModTreeBuildTVIParam(TV_INSERTSTRUCT &tvis, LPCSTR lpszName, int iImage); CModDoc *GetDocumentFromItem(HTREEITEM hItem); + UINT GetDocumentIDFromModDoc(CModDoc *pModDoc); // Generated message map functions protected: Modified: trunk/OpenMPT/mptrack/res/img_list.bmp =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-10-20 18:24:38
|
Revision: 402 http://modplug.svn.sourceforge.net/modplug/?rev=402&view=rev Author: saga-games Date: 2009-10-20 18:24:29 +0000 (Tue, 20 Oct 2009) Log Message: ----------- [Imp] Treeview: Sample / instrument live playback status is now only updated when those nodes are actually expanded [Ref] Rewrote the "general options" code, it's much cleaner and easier to use now. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-10-18 16:54:18 UTC (rev 401) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-10-20 18:24:29 UTC (rev 402) @@ -642,6 +642,7 @@ typedef struct OPTGENDESC { + DWORD dwFlagID; LPCSTR pszListName, pszDescription; } OPTGENDESC; @@ -676,34 +677,33 @@ static OPTGENDESC gOptGenDesc[OPTGEN_MAXOPTIONS] = { - {"Play new notes while recording", "When this option is enabled, notes entered in the pattern editor will always be played (If not checked, notes won't be played in record mode)."}, - {"Always center active row", "Turn on this option to have the active row always centered in the pattern editor (requires \"Always center active row\")."}, - {"Use large font for comments", "With this option enabled, the song message editor will use a larger font."}, - {"Display rows in hex", "With this option enabled, row numbers and sequence numbers will be displayed in hexadecimal."}, - {"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."}, - {"Create backup files (*.bak)", "When this option is active, saving a file will create a backup copy of the original."}, - {"Drag and Drop Editing", "Enable moving a selection in the pattern editor (copying if pressing shift while dragging)\n"}, - {"Flat Buttons", "Use flat buttons in toolbars"}, - {"Single click to expand tree", "Single-clicking in the left tree view will expand a branch"}, - {"Ignored muted channels", "Notes will not be played on muted channels (unmuting will only start on a new note)."}, - {"Quick cursor paste Auto-Repeat", "Leaving the space bar pressed will auto-repeat the action"}, - {"No loud samples", "Disable loud playback of samples in the sample/instrument editor"}, - {"Show Prev/Next patterns", "Displays grayed-out version of the previous/next patterns in the pattern editor. Does not work if \"always center active row\" is disabled."}, - {"Continuous scroll", "Jumps to the next pattern when moving past the end of a pattern"}, - {"Record note off", "Record note off when a key is released on the PC keyboard (Only works in instrument mode)."}, - {"Follow song off by default", "Ensure follow song is off when opening or starting a new song."}, - {"Midi record", "Enable midi in record by default."}, - {"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."}, - {"Maintain sample sync on mute", "Samples continue to be processed when channels are muted (like in IT2 and FT2)"}, - {"Automatic delay commands", "Automatically insert appropriate note-delay commands when recording notes during live playback."}, - {"Note fade on key up", "Enable to fade/stop notes on key up in pattern tab." }, - {"Overflow paste mode", "Wrap pasted pattern data into next pattern. This is useful for creating echo channels."}, - {"Position aware timer", "If enabled, timer will show the playback position time if possible instead of running timer."}, - {"Reset channels on loop", "If enabled, channels will be reset to their initial state when song looping is enabled.\nNote: This does not affect manual song loops (i.e. triggered by pattern commands)"}, - {"Update sample status in tree", "If enabled, active samples and instruments will be indicated by a differnt icon in the treeview."} + {PATTERN_PLAYNEWNOTE, "Play new notes while recording", "When this option is enabled, notes entered in the pattern editor will always be played (If not checked, notes won't be played in record mode)."}, + {PATTERN_CENTERROW, "Always center active row", "Turn on this option to have the active row always centered in the pattern editor (requires \"Always center active row\")."}, + {PATTERN_LARGECOMMENTS, "Use large font for comments", "With this option enabled, the song message editor will use a larger font."}, + {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)\n"}, + {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 branch"}, + {PATTERN_MUTECHNMODE, "Ignored muted channels", "Notes will not be played on muted channels (unmuting will only start on a new note)."}, + {PATTERN_AUTOSPACEBAR, "Quick cursor paste Auto-Repeat", "Leaving the space bar pressed will auto-repeat the action"}, + {PATTERN_NOEXTRALOUD, "No loud samples", "Disable loud playback of samples in the sample/instrument editor"}, + {PATTERN_SHOWPREVIOUS, "Show Prev/Next patterns", "Displays grayed-out version of the previous/next patterns in the pattern editor. Does not work if \"always center active row\" is disabled."}, + {PATTERN_CONTSCROLL, "Continuous scroll", "Jumps to the next pattern when moving past the end of a pattern"}, + {PATTERN_KBDNOTEOFF, "Record note off", "Record note off when a key is released on the PC keyboard (Only works in instrument mode)."}, + {PATTERN_FOLLOWSONGOFF, "Follow song off by default", "Ensure follow song is off when opening or starting a new song."}, + {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_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."}, + {PATTERN_POSITIONAWARETIMER, "Position aware timer", "If enabled, timer will show the playback position time if possible instead of running timer."}, + {PATTERN_RESETCHANNELS, "Reset channels on loop", "If enabled, channels will be reset to their initial state when song looping is enabled.\nNote: This does not affect manual song loops (i.e. triggered by pattern commands)"}, + {PATTERN_LIVEUPDATETREE,"Update sample status in tree", "If enabled, active samples and instruments will be indicated by a differnt icon in the treeview."} }; - void COptionsGeneral::DoDataExchange(CDataExchange* pDX) //------------------------------------------------------ { @@ -720,43 +720,15 @@ CHAR sname[32], s[256]; CPropertyPage::OnInitDialog(); - for (UINT i=0; i<OPTGEN_MAXOPTIONS; i++) + for (UINT i = 0; i < OPTGEN_MAXOPTIONS; i++) { - BOOL bCheck; + bool bCheck; wsprintf(sname, "Setup.Gen.Opt%d.Name", i+1); if ((theApp.GetLocalizedString(sname, s, sizeof(s))) && (s[0])) m_CheckList.AddString(s); else m_CheckList.AddString(gOptGenDesc[i].pszListName); - bCheck = FALSE; - switch(i) - { - case OPTGEN_PLAYNEWNOTES: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_PLAYNEWNOTE); break; - case OPTGEN_CENTERROW: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_CENTERROW); break; - case OPTGEN_LARGECOMMENTSFONT: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_LARGECOMMENTS); break; - case OPTGEN_HEXROWDISP: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY); break; - case OPTGEN_CURSORWRAP: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_WRAP); break; - case OPTGEN_CREATEBACKUP: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_CREATEBACKUP); break; - case OPTGEN_DRAGNDROPEDIT: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_DRAGNDROPEDIT); break; - case OPTGEN_FLATBUTTONS: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_FLATBUTTONS); break; - case OPTGEN_SINGLEEXPAND: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_SINGLEEXPAND); break; - case OPTGEN_MUTECHNMODE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_MUTECHNMODE); break; - case OPTGEN_AUTOSPACEBAR: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_AUTOSPACEBAR); break; - case OPTGEN_NOEXTRALOUD: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_NOEXTRALOUD); break; - case OPTGEN_SHOWPREVIOUS: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_SHOWPREVIOUS); break; - case OPTGEN_CONTSCROLL: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_CONTSCROLL); break; - case OPTGEN_KBDNOTEOFF: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_KBDNOTEOFF); break; - case OPTGEN_FOLLOWSONGOFF: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_FOLLOWSONGOFF); break; - case OPTGEN_MIDIRECORD: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_MIDIRECORD); break; - case OPTGEN_PATTERNCTXMENUSTYLE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_OLDCTXMENUSTYLE); break; - case OPTGEN_SYNCMUTE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_SYNCMUTE); break; - case OPTGEN_AUTODELAY: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_AUTODELAY); break; - case OPTGEN_PATNOTEFADE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_NOTEFADE); break; - case OPTGEN_OVERFLOWPASTE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE); break; - case OPTGEN_POSITIONAWARETIMER: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_POSITIONAWARETIMER); break; - case OPTGEN_RESETCHANNELS: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_RESETCHANNELS); break; - case OPTGEN_LIVEUPDATETREE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_LIVEUPDATETREE); break; - } + bCheck = (CMainFrame::m_dwPatternSetup & gOptGenDesc[i].dwFlagID) != 0 ? true : false; m_CheckList.SetCheck(i, (bCheck) ? TRUE : FALSE); } m_CheckList.SetCurSel(0); @@ -784,40 +756,13 @@ GetDlgItemText(IDC_OPTIONS_DIR_VSTS, szVstDir, _MAX_PATH); GetDlgItemText(IDC_OPTIONS_DIR_VSTPRESETS, szPresetDir, _MAX_PATH); - for (UINT i=0; i < OPTGEN_MAXOPTIONS; i++) + for (UINT i = 0; i < OPTGEN_MAXOPTIONS; i++) { - DWORD mask = 0; BOOL bCheck = m_CheckList.GetCheck(i); - switch(i) - { - case OPTGEN_PLAYNEWNOTES: mask = PATTERN_PLAYNEWNOTE; break; - case OPTGEN_CENTERROW: mask = PATTERN_CENTERROW; break; - case OPTGEN_LARGECOMMENTSFONT: mask = PATTERN_LARGECOMMENTS; break; - case OPTGEN_HEXROWDISP: mask = PATTERN_HEXDISPLAY; break; - case OPTGEN_CURSORWRAP: mask = PATTERN_WRAP; break; - case OPTGEN_CREATEBACKUP: mask = PATTERN_CREATEBACKUP; break; - case OPTGEN_DRAGNDROPEDIT: mask = PATTERN_DRAGNDROPEDIT; break; - case OPTGEN_FLATBUTTONS: mask = PATTERN_FLATBUTTONS; break; - case OPTGEN_SINGLEEXPAND: mask = PATTERN_SINGLEEXPAND; break; - case OPTGEN_MUTECHNMODE: mask = PATTERN_MUTECHNMODE; break; - case OPTGEN_AUTOSPACEBAR: mask = PATTERN_AUTOSPACEBAR; break; - case OPTGEN_NOEXTRALOUD: mask = PATTERN_NOEXTRALOUD; break; - case OPTGEN_SHOWPREVIOUS: mask = PATTERN_SHOWPREVIOUS; break; - case OPTGEN_CONTSCROLL: mask = PATTERN_CONTSCROLL; break; - case OPTGEN_KBDNOTEOFF: mask = PATTERN_KBDNOTEOFF; break; - case OPTGEN_FOLLOWSONGOFF: mask = PATTERN_FOLLOWSONGOFF; break; - case OPTGEN_MIDIRECORD: mask = PATTERN_MIDIRECORD; break; - case OPTGEN_PATTERNCTXMENUSTYLE: mask = PATTERN_OLDCTXMENUSTYLE; break; - case OPTGEN_SYNCMUTE: mask = PATTERN_SYNCMUTE; break; - case OPTGEN_AUTODELAY: mask = PATTERN_AUTODELAY; break; - case OPTGEN_PATNOTEFADE: mask = PATTERN_NOTEFADE; break; - case OPTGEN_OVERFLOWPASTE: mask = PATTERN_OVERFLOWPASTE; break; - case OPTGEN_POSITIONAWARETIMER: mask = PATTERN_POSITIONAWARETIMER; break; - case OPTGEN_RESETCHANNELS: mask = PATTERN_RESETCHANNELS; break; - case OPTGEN_LIVEUPDATETREE: mask = PATTERN_LIVEUPDATETREE; break; - - } - if (bCheck) CMainFrame::m_dwPatternSetup |= mask; else CMainFrame::m_dwPatternSetup &= ~mask; + + if(bCheck) CMainFrame::m_dwPatternSetup |= gOptGenDesc[i].dwFlagID; + else CMainFrame::m_dwPatternSetup &= ~gOptGenDesc[i].dwFlagID; + m_CheckList.SetCheck(i, (bCheck) ? TRUE : FALSE); } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-18 16:54:18 UTC (rev 401) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-20 18:24:29 UTC (rev 402) @@ -2043,41 +2043,54 @@ // Update sample / instrument playing status icons (will only detect instruments with samples, though) if((CMainFrame::m_dwPatternSetup & PATTERN_LIVEUPDATETREE) == 0) return; - // TODO: Is there a way to find out if the treeview is actually visible? Or if the Sample and Instrument folders are collapsed? + // TODO: Is there a way to find out if the treeview is actually visible? /*static int nUpdateCount = 0; nUpdateCount++; if(nUpdateCount < 5) return; // don't update too often nUpdateCount = 0;*/ + // check whether the lists are actually visible (don't waste resources) + bool bUpdateSamples = IsItemExpanded(DocInfo[nDocNdx]->hSamples), bUpdateInstruments = IsItemExpanded(DocInfo[nDocNdx]->hInstruments); + memset(DocInfo[nDocNdx]->bIsSamplePlaying, false, MAX_SAMPLES * sizeof(bool)); memset(DocInfo[nDocNdx]->bIsInstrPlaying, false, MAX_INSTRUMENTS * sizeof(bool)); + if((bUpdateSamples == false) && (bUpdateInstruments == false)) return; + CSoundFile *pSndFile = pModDoc->GetSoundFile(); if(pSndFile == nullptr) return; for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++) { - if(pSndFile->Chn[nChn].nPos > 0) + if(pSndFile->Chn[nChn].pCurrentSample != nullptr) { - for(SAMPLEINDEX nSmp = 1; nSmp <= pSndFile->m_nSamples; nSmp++) + if(bUpdateSamples) { - if(pSndFile->Chn[nChn].pModSample == &pSndFile->Samples[nSmp]) + for(SAMPLEINDEX nSmp = 1; nSmp <= pSndFile->m_nSamples; nSmp++) { - DocInfo[nDocNdx]->bIsSamplePlaying[nSmp - 1] = true; - break; + if(pSndFile->Chn[nChn].pModSample == &pSndFile->Samples[nSmp]) + { + DocInfo[nDocNdx]->bIsSamplePlaying[nSmp - 1] = true; + break; + } } } - for(INSTRUMENTINDEX nIns = 1; nIns <= pSndFile->m_nInstruments; nIns++) + if(bUpdateInstruments) { - if(pSndFile->Chn[nChn].pModInstrument == pSndFile->Instruments[nIns]) + for(INSTRUMENTINDEX nIns = 1; nIns <= pSndFile->m_nInstruments; nIns++) { - DocInfo[nDocNdx]->bIsInstrPlaying[nIns - 1] = true; - break; + if(pSndFile->Chn[nChn].pModInstrument == pSndFile->Instruments[nIns]) + { + DocInfo[nDocNdx]->bIsInstrPlaying[nIns - 1] = true; + break; + } } } } } - UpdateView(nDocNdx, HINT_SAMPLEINFO | HINT_INSTRUMENT); + // what should be updated? + DWORD dwHintFlags = (bUpdateSamples ? HINT_SAMPLEINFO : 0) | (bUpdateInstruments ? HINT_INSTRUMENT : 0); + if(dwHintFlags != 0) UpdateView(nDocNdx, dwHintFlags); } @@ -3058,3 +3071,18 @@ CTreeCtrl::OnSetFocus(pOldWnd); CMainFrame::GetMainFrame()->m_bModTreeHasFocus=true; } + + +bool CModTree::IsItemExpanded(HTREEITEM hItem) +//-------------------------------------------- +{ + // checks if a treeview item is expanded. + if(hItem == NULL) return false; + TV_ITEM tvi; + tvi.mask = TVIF_HANDLE | TVIF_STATE; + tvi.state = 0; + tvi.stateMask = TVIS_EXPANDED; + tvi.hItem = hItem; + GetItem(&tvi); + return (tvi.state & TVIS_EXPANDED) != 0 ? true : false; +} Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2009-10-18 16:54:18 UTC (rev 401) +++ trunk/OpenMPT/mptrack/View_tre.h 2009-10-20 18:24:29 UTC (rev 402) @@ -158,6 +158,7 @@ VOID OnUpdate(CModDoc *pModDoc, DWORD dwHint, CObject *pHint); BOOL CanDrop(HTREEITEM hItem, BOOL bDoDrop); VOID UpdatePlayPos(CModDoc *pModDoc, PMPTNOTIFICATION pNotify); + bool IsItemExpanded(HTREEITEM hItem); // Overrides // ClassWizard generated virtual function overrides This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-10-24 14:50:44
|
Revision: 404 http://modplug.svn.sourceforge.net/modplug/?rev=404&view=rev Author: saga-games Date: 2009-10-24 14:50:32 +0000 (Sat, 24 Oct 2009) Log Message: ----------- [Imp] Treeview / VST Selector: Different icons for effects / instruments [Ref] Slightly rewrote alternative VST magic code [Ref] Slightly rewrote VST Selector dialog code Modified Paths: -------------- trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/res/img_list.bmp Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-10-23 23:12:00 UTC (rev 403) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-10-24 14:50:32 UTC (rev 404) @@ -256,6 +256,9 @@ IMAGE_INSTRMUTE, IMAGE_SAMPLEACTIVE, IMAGE_INSTRACTIVE, + IMAGE_NOPLUGIN, + IMAGE_EFFECTPLUGIN, + IMAGE_PLUGININSTRUMENT, }; ////////////////////////////////////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-23 23:12:00 UTC (rev 403) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-24 14:50:32 UTC (rev 404) @@ -681,7 +681,9 @@ pInfo->hEffects = InsertItem("Plugins", IMAGE_FOLDER, IMAGE_FOLDER, pInfo->hSong, TVI_LAST); } wsprintf(s, "FX%d: %s", iFx+1, pPlugin->Info.szName); - pInfo->tiEffects[iFx] = InsertItem(s, IMAGE_WAVEOUT, IMAGE_WAVEOUT, pInfo->hEffects, TVI_LAST); + int nImage = IMAGE_NOPLUGIN; + if(pPlugin->pMixPlugin != nullptr) nImage = (pPlugin->pMixPlugin->isInstrument()) ? IMAGE_PLUGININSTRUMENT : IMAGE_EFFECTPLUGIN; + pInfo->tiEffects[iFx] = InsertItem(s, nImage, nImage, pInfo->hEffects, TVI_LAST); nFx++; } } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2009-10-23 23:12:00 UTC (rev 403) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2009-10-24 14:50:32 UTC (rev 404) @@ -16,7 +16,8 @@ #include "version.h" #include "midimappingdialog.h" #ifdef VST_USE_ALTERNATIVE_MAGIC //Pelya's plugin ID fix. Breaks fx presets, so let's avoid it for now. -#include "Unzip32.h" //For CRC calculation (to detect plugins with same UID) +#define ZLIB_WINAPI +#include "../zlib/zlib.h" //For CRC32 calculation (to detect plugins with same UID) #endif #ifndef NO_VST @@ -38,27 +39,17 @@ AEffect *DmoToVst(PVSTPLUGINLIB pLib); #ifdef VST_USE_ALTERNATIVE_MAGIC -class CalculateCRC32: public CZipArchive // Make Plugin ID unique for sure +UINT32 CalculateCRC32fromFilename(const char * s) +//----------------------------------------------- { - public: - DWORD calculate( BYTE *s, int len ) - { - CZipArchive::crc32val = 0xFFFFFFFFL; - CZipArchive::UpdateCRC( s, len ); - return CZipArchive::crc32val; - }; - DWORD calculateFilename( const char * s ) - { - char fn[_MAX_PATH]; - strncpy( fn, s, sizeof(fn) ); - fn[sizeof(fn)-1] = 0; - int f; - for( f=0; fn[f] != 0; f++ ) fn[f] = toupper( fn[f] ); - return calculate( (BYTE *)fn, f ); - }; -}; + char fn[_MAX_PATH]; + strncpy(fn, s, sizeof(fn)); + fn[sizeof(fn)-1] = 0; + int f; + for(f = 0; fn[f] != 0; f++) fn[f] = toupper(fn[f]); + return crc32(0, (BYTE *)fn, f); -CalculateCRC32 CRC32; +} #endif long VSTCALLBACK CVstPluginManager::MasterCallBack(AEffect *effect, long opcode, long index, long value, void *ptr, float opt) @@ -260,7 +251,7 @@ #ifdef VST_USE_ALTERNATIVE_MAGIC if( p->dwPluginId1 == kEffectMagic ) { - p->dwPluginId1 = CRC32.calculateFilename( p->szLibraryName ); // Make Plugin ID unique for sure (for VSTs with same UID) + p->dwPluginId1 = CalculateCRC32fromFilename(p->szLibraryName); // Make Plugin ID unique for sure (for VSTs with same UID) }; #endif #ifdef VST_LOG @@ -329,7 +320,7 @@ { pEffect->dispatcher(pEffect, effOpen, 0,0,0,0); #ifdef VST_USE_ALTERNATIVE_MAGIC - p->dwPluginId1 = CRC32.calculateFilename( p->szLibraryName ); // Make Plugin ID unique for sure + p->dwPluginId1 = CalculateCRC32fromFilename(p->szLibraryName); // Make Plugin ID unique for sure #else p->dwPluginId1 = pEffect->magic; #endif @@ -1276,41 +1267,23 @@ VOID CSelectPluginDlg::UpdatePluginsList(DWORD forceSelect/*=0*/) //--------------------------------------------------------------- { - TVINSERTSTRUCT tvis; CVstPluginManager *pManager = theApp.GetPluginManager(); HTREEITEM cursel, hDmo, hVst, hSynth; m_treePlugins.SetRedraw(FALSE); m_treePlugins.DeleteAllItems(); - memset(&tvis, 0, sizeof(tvis)); - tvis.hParent = TVI_ROOT; - tvis.hInsertAfter = TVI_FIRST; - tvis.item.mask = TVIF_IMAGE | TVIF_PARAM | TVIF_TEXT | TVIF_SELECTEDIMAGE | TVIF_TEXT; - tvis.item.pszText = "VST Instruments"; - tvis.item.iImage = IMAGE_FOLDER; - tvis.item.iSelectedImage = IMAGE_FOLDER; - tvis.item.lParam = NULL; - hSynth = m_treePlugins.InsertItem(&tvis); - tvis.item.pszText = "DirectX Media Audio Effects"; - hDmo = m_treePlugins.InsertItem(&tvis); - tvis.item.pszText = "VST Audio Effects"; - hVst = m_treePlugins.InsertItem(&tvis); - tvis.item.pszText = " No plugin (empty slot)"; - tvis.item.iImage = IMAGE_WAVEOUT; - tvis.item.iSelectedImage = IMAGE_WAVEOUT; - cursel = m_treePlugins.InsertItem(&tvis); + + hSynth = AddTreeItem("VST Instruments", IMAGE_FOLDER, false); + hDmo = AddTreeItem("DirectX Media Audio Effects", IMAGE_FOLDER, false); + hVst = AddTreeItem("VST Audio Effects", IMAGE_FOLDER, false); + cursel = AddTreeItem("No plugin (empty slot)", IMAGE_NOPLUGIN, false); + if (pManager) { PVSTPLUGINLIB pCurrent = NULL; PVSTPLUGINLIB p = pManager->GetFirstPlugin(); while (p) { - if (p->dwPluginId1 == kDmoMagic) { - tvis.hParent = hDmo; - } else { - tvis.hParent = (p->bIsInstrument) ? hSynth : hVst; - } - // Apply name filter if (m_sNameFilter != "") { CString displayName = p->szLibraryName; @@ -1320,34 +1293,41 @@ } } - tvis.hInsertAfter = TVI_SORT; - tvis.item.pszText = p->szLibraryName; - tvis.item.lParam = (LPARAM)p; - HTREEITEM h = m_treePlugins.InsertItem(&tvis); + HTREEITEM hParent; + if (p->dwPluginId1 == kDmoMagic) { + hParent = hDmo; + } else { + hParent = (p->bIsInstrument) ? hSynth : hVst; + } + HTREEITEM h = AddTreeItem(p->szLibraryName, p->bIsInstrument ? IMAGE_PLUGININSTRUMENT : IMAGE_EFFECTPLUGIN, true, hParent, (LPARAM)p); + //If filter is active, expand nodes. - if (m_sNameFilter != "") { - m_treePlugins.EnsureVisible(h); - } + if (m_sNameFilter != "") m_treePlugins.EnsureVisible(h); //Which plugin should be selected? - if (m_pPlugin) { + if (m_pPlugin) + { //forced selection (e.g. just after add plugin) - if (forceSelect != 0) { - if (p->dwPluginId2 == forceSelect) { + if (forceSelect != 0) + { + if (p->dwPluginId2 == forceSelect) + { pCurrent = p; } } //Current slot's plugin - else if (m_pPlugin->pMixPlugin) { + else if (m_pPlugin->pMixPlugin) + { CVstPlugin *pVstPlug = (CVstPlugin *)m_pPlugin->pMixPlugin; if (pVstPlug->GetPluginFactory() == p) pCurrent = p; } //Plugin with matching ID to current slot's plug - else if (/* (!pCurrent) && */ m_pPlugin->Info.dwPluginId1 !=0 || m_pPlugin->Info.dwPluginId2 != 0 ) { + else if (/* (!pCurrent) && */ m_pPlugin->Info.dwPluginId1 !=0 || m_pPlugin->Info.dwPluginId2 != 0) + { if ((p->dwPluginId1 == m_pPlugin->Info.dwPluginId1) && (p->dwPluginId2 == m_pPlugin->Info.dwPluginId2)) { pCurrent = p; @@ -1355,7 +1335,8 @@ } //Last selected plugin - else { + else + { if (p->dwPluginId2 == CMainFrame::GetMainFrame()->gnPlugWindowLast) { pCurrent = p; } @@ -1373,7 +1354,22 @@ } } +HTREEITEM CSelectPluginDlg::AddTreeItem(LPSTR szTitle, int iImage, bool bSort, HTREEITEM hParent, LPARAM lParam) +//-------------------------------------------------------------------------------------------------------------- +{ + TVINSERTSTRUCT tvis; + memset(&tvis, 0, sizeof(tvis)); + tvis.hParent = hParent; + tvis.hInsertAfter = (bSort) ? TVI_SORT : TVI_FIRST; + tvis.item.mask = TVIF_IMAGE | TVIF_PARAM | TVIF_TEXT | TVIF_SELECTEDIMAGE | TVIF_TEXT; + tvis.item.pszText = szTitle; + tvis.item.iImage = tvis.item.iSelectedImage = iImage; + tvis.item.lParam = lParam; + return m_treePlugins.InsertItem(&tvis); +} + + VOID CSelectPluginDlg::OnSelDblClk(NMHDR *, LRESULT *result) //---------------------------------------------------------- { @@ -1385,7 +1381,8 @@ HTREEITEM hSel = m_treePlugins.GetSelectedItem(); int nImage, nSelectedImage; m_treePlugins.GetItemImage(hSel, nImage, nSelectedImage); - if ((hSel) && (nImage == IMAGE_WAVEOUT)) OnOK(); + + if ((hSel) && (nImage != IMAGE_FOLDER)) OnOK(); if (result) *result = 0; } Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2009-10-23 23:12:00 UTC (rev 403) +++ trunk/OpenMPT/mptrack/Vstplug.h 2009-10-24 14:50:32 UTC (rev 404) @@ -275,6 +275,8 @@ CTreeCtrl m_treePlugins; CString m_sNameFilter; + HTREEITEM AddTreeItem(LPSTR szTitle, int iImage, bool bSort, HTREEITEM hParent = TVI_ROOT, LPARAM lParam = NULL); + public: CSelectPluginDlg(CModDoc *pModDoc, int nPlugSlot, CWnd *parent); //rewbs.plugDocAware VOID DoClose(); Modified: trunk/OpenMPT/mptrack/res/img_list.bmp =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-11-01 16:27:20
|
Revision: 409 http://modplug.svn.sourceforge.net/modplug/?rev=409&view=rev Author: saga-games Date: 2009-11-01 16:27:14 +0000 (Sun, 01 Nov 2009) Log Message: ----------- [Fix] Pitch shift: Was slightly broken for 8-bit samples. [Fix] Sample editor: Time Stretch / Pitch Shift button's caption was not updated properly. [Imp] Sample undo limitation: Slightly improved handling of INI value Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mptrack.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-11-01 13:53:08 UTC (rev 408) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-11-01 16:27:14 UTC (rev 409) @@ -306,9 +306,6 @@ // Stretch ratio SetDlgItemInt(IDC_EDIT6,100,FALSE); - // Processing state text label - SetDlgItemText(IDC_STATIC1,""); - // Stretch to size check box OnEnableStretchToSize(); @@ -1686,7 +1683,7 @@ GetDlgItem(IDC_EDIT_STRETCHPARAMS)->ShowWindow(bTimeStretch ? SW_SHOW : SW_HIDE); GetDlgItem(IDC_TEXT_PITCH)->ShowWindow(bTimeStretch ? SW_HIDE : SW_SHOW); GetDlgItem(IDC_COMBO4)->ShowWindow(bTimeStretch ? SW_HIDE : SW_SHOW); - SetDlgItemText(IDC_BUTTON1, "Time Stretch"); + SetDlgItemText(IDC_BUTTON1, bTimeStretch ? "Time Stretch" : "Pitch Shift"); if(bTimeStretch) UpdateTimeStretchParameterString(); } @@ -1700,7 +1697,7 @@ //Ensure m_dTimeStretchRatio is up-to-date with textbox content UpdateData(TRUE); - //Calculate/verify samplerate at C4. + //Calculate/verify samplerate at C5. long lSampleRate = pSmp->nC5Speed; if(m_pSndFile->m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) lSampleRate = (double)CSoundFile::TransposeToFrequency(pSmp->RelativeTone, pSmp->nFineTune); @@ -1801,18 +1798,6 @@ const uint32 nSampleRate = pSmp->GetSampleRate(m_pSndFile->GetType()); - // SoundTouch(v1.4.0) documentation says that sample rates 8000-48000 are supported. - // Check whether sample rate is within that range, and if not, - // ask user whether to proceed. - if(nSampleRate < 8000 || nSampleRate > 48000) - { - CString str; - str.Format(TEXT(GetStrI18N("Current samplerate, %u Hz, is not in the supported samplerate range 8000 Hz - 48000 Hz. Continue?")), nSampleRate); - if(AfxMessageBox(str, MB_ICONQUESTION|MB_YESNO) != IDYES) - return -1; - - } - // SoundTouch(1.3.1) seems to crash with short samples. Don't know what // the actual limit or whether it depends on sample rate, // but simply set some semiarbitrary threshold here. @@ -1850,6 +1835,18 @@ smpsize = pSmp->GetElementarySampleSize(); } + // SoundTouch(v1.4.0) documentation says that sample rates 8000-48000 are supported. + // Check whether sample rate is within that range, and if not, + // ask user whether to proceed. + if(nSampleRate < 8000 || nSampleRate > 48000) + { + CString str; + str.Format(TEXT(GetStrI18N("Current samplerate, %u Hz, is not in the supported samplerate range 8000 Hz - 48000 Hz. Continue?")), nSampleRate); + if(AfxMessageBox(str, MB_ICONQUESTION|MB_YESNO) != IDYES) + return -1; + + } + // Allocate new sample. Returned sample may not be exactly the size what ratio would suggest // so allocate a bit more(1.03*). const DWORD nNewSampleLength = (DWORD)(1.03 * ratio * (double)pSmp->nLength); @@ -1881,7 +1878,6 @@ // Show wait mouse cursor BeginWaitCursor(); - SetDlgItemText(IDC_STATIC1, "Stretching..."); UINT pos = 0; UINT len = 0; //To contain length of processing step. @@ -1981,7 +1977,6 @@ SetDlgItemText(IDC_BUTTON1, oldText); // Restore mouse cursor - SetDlgItemText(IDC_STATIC1,""); EndWaitCursor(); return 0; @@ -2011,14 +2006,6 @@ UINT fft = 1 << (combo->GetCurSel() + 8); while(fft > MAX_BUFFER_LENGTH) fft >>= 1; - // Get original sample rate - long lSampleRate = pSmp->nC5Speed; - if(m_pSndFile->m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) lSampleRate = CSoundFile::TransposeToFrequency(pSmp->RelativeTone, pSmp->nFineTune); - if(lSampleRate <= 0) lSampleRate = 8363; - - // Deduce max sample value (float conversion step) - float maxSampleValue = ( 1 << (smpsize * 8 - 1) ) - 1; - // Save process button text (to be used as "progress bar" indicator while processing) CHAR oldText[255]; GetDlgItemText(IDC_BUTTON1, oldText, 255); @@ -2039,7 +2026,6 @@ // Show wait mouse cursor BeginWaitCursor(); - SetDlgItemText(IDC_STATIC1,"Pitch shifting..."); // PitchShift seems to work only with 16-bit samples. @@ -2050,6 +2036,12 @@ smpsize = pSmp->GetElementarySampleSize(); } + // Get original sample rate + long lSampleRate = pSmp->GetSampleRate(m_pSndFile->GetType()); + + // Deduce max sample value (float conversion step) + float maxSampleValue = ( 1 << (smpsize * 8 - 1) ) - 1; + // Allocate working buffers float * buffer = new float[MAX_BUFFER_LENGTH + fft]; float * outbuf = new float[MAX_BUFFER_LENGTH + fft]; @@ -2159,7 +2151,6 @@ SetDlgItemText(IDC_BUTTON1, oldText); // Restore mouse cursor - SetDlgItemText(IDC_STATIC1,""); EndWaitCursor(); return 0; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-11-01 13:53:08 UTC (rev 408) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-11-01 16:27:14 UTC (rev 409) @@ -204,7 +204,7 @@ | PATTERN_SHOWPREVIOUS | PATTERN_CONTSCROLL | PATTERN_SYNCMUTE | PATTERN_AUTODELAY | PATTERN_NOTEFADE; DWORD CMainFrame::m_nRowSpacing = 16; DWORD CMainFrame::m_nRowSpacing2 = 4; -UINT CMainFrame::m_nSampleUndoMaxBuffer = 100; +UINT CMainFrame::m_nSampleUndoMaxBuffer = 100 << 20; // GDI HICON CMainFrame::m_hIcon = NULL; @@ -444,7 +444,8 @@ CSoundFile::s_DefaultPlugVolumeHandling = static_cast<uint8>(GetPrivateProfileInt("Misc", "DefaultPlugVolumeHandling", PLUGIN_VOLUMEHANDLING_IGNORE, iniFile)); if(CSoundFile::s_DefaultPlugVolumeHandling > 2) CSoundFile::s_DefaultPlugVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; - m_nSampleUndoMaxBuffer = GetPrivateProfileLong("Sample Editor" , "UndoBufferSize", m_nSampleUndoMaxBuffer, iniFile) << 20; + m_nSampleUndoMaxBuffer = GetPrivateProfileLong("Sample Editor" , "UndoBufferSize", m_nSampleUndoMaxBuffer, iniFile); + m_nSampleUndoMaxBuffer = max(1, m_nSampleUndoMaxBuffer) << 20; TCHAR szPath[_MAX_PATH] = ""; GetPrivateProfileString("Paths", "Songs_Directory", GetDefaultDirectory(DIR_MODS), szPath, INIBUFFERSIZE, iniFile); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-11-01 13:53:08 UTC (rev 408) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-11-01 16:27:14 UTC (rev 409) @@ -829,7 +829,7 @@ if (gMemStatus.dwTotalPhys < 16*1024*1024) gMemStatus.dwTotalPhys = 16*1024*1024; CMainFrame::m_nSampleUndoMaxBuffer = gMemStatus.dwTotalPhys / 10; // set sample undo buffer size - if(CMainFrame::m_nSampleUndoMaxBuffer < 1) CMainFrame::m_nSampleUndoMaxBuffer = 1; + if(CMainFrame::m_nSampleUndoMaxBuffer < (1 << 20)) CMainFrame::m_nSampleUndoMaxBuffer = (1 << 20); ASSERT(NULL == m_pDocManager); m_pDocManager = new CModDocManager(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-11-07 15:47:47
|
Revision: 414 http://modplug.svn.sourceforge.net/modplug/?rev=414&view=rev Author: saga-games Date: 2009-11-07 15:47:35 +0000 (Sat, 07 Nov 2009) Log Message: ----------- [Fix] Orderlist: Pasting orders now removes "+++" items if they are not supported by the current format. [Fix] Pattern paste: Got rid of possible redundant undo points. [Imp] Pattern paste: Assume that the clipboard pattern format is IT (instead of MOD) if no information about the format is available. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Modedit.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-06 20:40:06 UTC (rev 413) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-07 15:47:35 UTC (rev 414) @@ -525,7 +525,10 @@ continue; PATTERNINDEX nPat = pSf->Order.GetInvalidPatIndex(); if (bufItem[0] == '+') + { nPat = pSf->Order.GetIgnoreIndex(); + if(!pSf->GetModSpecifications().hasIgnoreIndex) continue; + } else if (isdigit(bufItem[0])) { nPat = ConvertStrTo<PATTERNINDEX>(bufItem); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-06 20:40:06 UTC (rev 413) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-07 15:47:35 UTC (rev 414) @@ -1157,7 +1157,6 @@ if ((hCpy) && ((p = (LPSTR)GlobalLock(hCpy)) != NULL)) { - GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); TEMPO spdmax = m_SndFile.GetModSpecifications().speedMax; DWORD dwMemSize = GlobalSize(hCpy); MODCOMMAND *m = m_SndFile.Patterns[nPattern]; @@ -1165,7 +1164,7 @@ UINT ncol = (dwBeginSel & 0xFFFF) >> 3; UINT col; bool bS3MCommands = false, bOk = false; - MODTYPE origFormat = MOD_TYPE_MOD; + MODTYPE origFormat = MOD_TYPE_IT; UINT len = 0; MODCOMMAND origModCmd; @@ -1176,6 +1175,7 @@ if ((nrow >= m_SndFile.PatternSize[nPattern]) || (ncol >= m_SndFile.m_nChannels)) goto PasteDone; m += nrow * m_SndFile.m_nChannels; + // Search for signature for (;;) { @@ -1188,11 +1188,15 @@ if(p[len - 3] == 'P') origFormat = MOD_TYPE_MPT; if(p[len - 4] == 'S') origFormat = MOD_TYPE_S3M; if(p[len - 3] == 'X') origFormat = MOD_TYPE_XM; + if(p[len - 3] == 'O') origFormat = MOD_TYPE_MOD; break; } } bS3MCommands = (origFormat & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_S3M)) != 0 ? true : false; bOk = true; + + GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); + while ((nrow < m_SndFile.PatternSize[nPattern]) && (len + 11 < dwMemSize)) { // Search for column separator @@ -1359,11 +1363,11 @@ { nrow = 0; ORDERINDEX oNextOrder = m_SndFile.Order.GetNextOrderIgnoringSkips(oCurrentOrder); - if((oNextOrder <= 0) || (oNextOrder >= m_SndFile.Order.size())) goto PasteDone; + if((oNextOrder == 0) || (oNextOrder >= m_SndFile.Order.size())) goto PasteDone; nPattern = m_SndFile.Order[oNextOrder]; if(m_SndFile.Patterns.IsValidPat(nPattern) == false) goto PasteDone; m = m_SndFile.Patterns[nPattern]; - GetPatternUndo()->PrepareUndo(nPattern, 0,0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); + GetPatternUndo()->PrepareUndo(nPattern, 0, 0, m_SndFile.m_nChannels, m_SndFile.PatternSize[nPattern]); oCurrentOrder = oNextOrder; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-11-19 21:35:09
|
Revision: 418 http://modplug.svn.sourceforge.net/modplug/?rev=418&view=rev Author: saga-games Date: 2009-11-19 21:34:59 +0000 (Thu, 19 Nov 2009) Log Message: ----------- [Fix] When moving program files to %APPDATA%, take care of the keyboard settings path in the INI file. [Ref] Use enum for toolbar image list IDs Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/view_com.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-11-19 21:34:59 UTC (rev 418) @@ -777,10 +777,10 @@ if ((!m_pModDoc) || (!m_pSndFile)) return TRUE; m_NoteMap.Init(this); m_ToolBar.Init(); - m_ToolBar.AddButton(IDC_INSTRUMENT_NEW, 7); - m_ToolBar.AddButton(IDC_INSTRUMENT_OPEN, 12); - m_ToolBar.AddButton(IDC_INSTRUMENT_SAVEAS, 13); - m_ToolBar.AddButton(IDC_INSTRUMENT_PLAY, 14); + m_ToolBar.AddButton(IDC_INSTRUMENT_NEW, TIMAGE_INSTR_NEW); + m_ToolBar.AddButton(IDC_INSTRUMENT_OPEN, TIMAGE_OPEN); + m_ToolBar.AddButton(IDC_INSTRUMENT_SAVEAS, TIMAGE_SAVE); + m_ToolBar.AddButton(IDC_INSTRUMENT_PLAY, TIMAGE_PREVIEW); m_SpinInstrument.SetRange(0, 0); m_SpinInstrument.EnableWindow(FALSE); m_EditName.SetLimitText(32); Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-19 21:34:59 UTC (rev 418) @@ -131,34 +131,31 @@ m_OrderList.Init(rcOrderList, this, m_pModDoc, pMainFrm->GetGUIFont()); // Toolbar buttons m_ToolBar.Init(); - m_ToolBar.AddButton(IDC_PATTERN_NEW, 0); - m_ToolBar.AddButton(IDC_PATTERN_PLAY, 2); - m_ToolBar.AddButton(IDC_PATTERN_PLAYFROMSTART, 3); - m_ToolBar.AddButton(IDC_PATTERN_STOP, 1); - m_ToolBar.AddButton(ID_PATTERN_PLAYROW, 28); - m_ToolBar.AddButton(IDC_PATTERN_RECORD, 4, TBSTYLE_CHECK, ((m_bRecord) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); + m_ToolBar.AddButton(IDC_PATTERN_NEW, TIMAGE_PATTERN_NEW); + m_ToolBar.AddButton(IDC_PATTERN_PLAY, TIMAGE_PATTERN_PLAY); + m_ToolBar.AddButton(IDC_PATTERN_PLAYFROMSTART, TIMAGE_PATTERN_RESTART); + m_ToolBar.AddButton(IDC_PATTERN_STOP, TIMAGE_PATTERN_STOP); + m_ToolBar.AddButton(ID_PATTERN_PLAYROW, TIMAGE_PATTERN_PLAYROW); + m_ToolBar.AddButton(IDC_PATTERN_RECORD, TIMAGE_PATTERN_RECORD, TBSTYLE_CHECK, ((m_bRecord) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP); - m_ToolBar.AddButton(ID_PATTERN_VUMETERS, 16, TBSTYLE_CHECK, ((m_bVUMeters) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); - m_ToolBar.AddButton(ID_VIEWPLUGNAMES, 33, TBSTYLE_CHECK, ((m_bPluginNames) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); //rewbs.patPlugNames -// -> CODE#0015 -// -> DESC="channels management dlg" - m_ToolBar.AddButton(ID_PATTERN_CHANNELMANAGER, 34); -// -! NEW_FEATURE#0015 + m_ToolBar.AddButton(ID_PATTERN_VUMETERS, TIMAGE_PATTERN_VUMETERS, TBSTYLE_CHECK, ((m_bVUMeters) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); + m_ToolBar.AddButton(ID_VIEWPLUGNAMES, TIMAGE_PATTERN_PLUGINS, TBSTYLE_CHECK, ((m_bPluginNames) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); //rewbs.patPlugNames + m_ToolBar.AddButton(ID_PATTERN_CHANNELMANAGER, TIMAGE_CHANNELMANAGER); m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP); - m_ToolBar.AddButton(ID_PATTERN_MIDIMACRO, 17); - m_ToolBar.AddButton(ID_PATTERN_CHORDEDIT, 18); + m_ToolBar.AddButton(ID_PATTERN_MIDIMACRO, TIMAGE_MACROEDITOR); + m_ToolBar.AddButton(ID_PATTERN_CHORDEDIT, TIMAGE_CHORDEDITOR); m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP); - m_ToolBar.AddButton(ID_EDIT_UNDO, 26); - m_ToolBar.AddButton(ID_PATTERN_PROPERTIES, 19); - m_ToolBar.AddButton(ID_PATTERN_EXPAND, 20); - m_ToolBar.AddButton(ID_PATTERN_SHRINK, 21); -// m_ToolBar.AddButton(ID_PATTERN_AMPLIFY, 9); + m_ToolBar.AddButton(ID_EDIT_UNDO, TIMAGE_UNDO); + m_ToolBar.AddButton(ID_PATTERN_PROPERTIES, TIMAGE_PATTERN_PROPERTIES); + m_ToolBar.AddButton(ID_PATTERN_EXPAND, TIMAGE_PATTERN_EXPAND); + m_ToolBar.AddButton(ID_PATTERN_SHRINK, TIMAGE_PATTERN_SHRINK); + // m_ToolBar.AddButton(ID_PATTERN_AMPLIFY, TIMAGE_SAMPLE_AMPLIFY); m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP); - m_ToolBar.AddButton(ID_PATTERNDETAIL_LO, 30, TBSTYLE_CHECK, TBSTATE_ENABLED); - m_ToolBar.AddButton(ID_PATTERNDETAIL_MED, 31, TBSTYLE_CHECK, TBSTATE_ENABLED); - m_ToolBar.AddButton(ID_PATTERNDETAIL_HI, 32, TBSTYLE_CHECK, TBSTATE_ENABLED|TBSTATE_CHECKED); + m_ToolBar.AddButton(ID_PATTERNDETAIL_LO, TIMAGE_PATTERN_DETAIL_LO, TBSTYLE_CHECK, TBSTATE_ENABLED); + m_ToolBar.AddButton(ID_PATTERNDETAIL_MED, TIMAGE_PATTERN_DETAIL_MED, TBSTYLE_CHECK, TBSTATE_ENABLED); + m_ToolBar.AddButton(ID_PATTERNDETAIL_HI, TIMAGE_PATTERN_DETAIL_HI, TBSTYLE_CHECK, TBSTATE_ENABLED|TBSTATE_CHECKED); m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP); - m_ToolBar.AddButton(ID_OVERFLOWPASTE, 38, TBSTYLE_CHECK, ((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED); + m_ToolBar.AddButton(ID_OVERFLOWPASTE, TIMAGE_PATTERN_OVERFLOWPASTE, TBSTYLE_CHECK, ((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED); // Special edit controls -> tab switch to view m_EditSpacing.SetParent(this); Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-11-19 21:34:59 UTC (rev 418) @@ -194,21 +194,21 @@ m_ComboZoom.SetCurSel(0); // File ToolBar m_ToolBar1.Init(); - m_ToolBar1.AddButton(IDC_SAMPLE_NEW, 6); - m_ToolBar1.AddButton(IDC_SAMPLE_OPEN, 12); - m_ToolBar1.AddButton(IDC_SAMPLE_SAVEAS, 13); + m_ToolBar1.AddButton(IDC_SAMPLE_NEW, TIMAGE_SAMPLE_NEW); + m_ToolBar1.AddButton(IDC_SAMPLE_OPEN, TIMAGE_OPEN); + m_ToolBar1.AddButton(IDC_SAMPLE_SAVEAS, TIMAGE_SAVE); // Edit ToolBar m_ToolBar2.Init(); - m_ToolBar2.AddButton(IDC_SAMPLE_PLAY, 14); - m_ToolBar2.AddButton(IDC_SAMPLE_NORMALIZE, 8); - m_ToolBar2.AddButton(IDC_SAMPLE_AMPLIFY, 9); - m_ToolBar2.AddButton(IDC_SAMPLE_DCOFFSET, 37); - m_ToolBar2.AddButton(IDC_SAMPLE_UPSAMPLE, 10); - m_ToolBar2.AddButton(IDC_SAMPLE_DOWNSAMPLE, 29); - m_ToolBar2.AddButton(IDC_SAMPLE_REVERSE, 11); - m_ToolBar2.AddButton(IDC_SAMPLE_SILENCE, 22); - m_ToolBar2.AddButton(IDC_SAMPLE_INVERT, 35); - m_ToolBar2.AddButton(IDC_SAMPLE_SIGN_UNSIGN, 36); + m_ToolBar2.AddButton(IDC_SAMPLE_PLAY, TIMAGE_PREVIEW); + m_ToolBar2.AddButton(IDC_SAMPLE_NORMALIZE, TIMAGE_SAMPLE_NORMALIZE); + m_ToolBar2.AddButton(IDC_SAMPLE_AMPLIFY, TIMAGE_SAMPLE_AMPLIFY); + m_ToolBar2.AddButton(IDC_SAMPLE_DCOFFSET, TIMAGE_SAMPLE_DCOFFSET); + m_ToolBar2.AddButton(IDC_SAMPLE_UPSAMPLE, TIMAGE_SAMPLE_UPSAMPLE); + m_ToolBar2.AddButton(IDC_SAMPLE_DOWNSAMPLE, TIMAGE_SAMPLE_DOWNSAMPLE); + m_ToolBar2.AddButton(IDC_SAMPLE_REVERSE, TIMAGE_SAMPLE_REVERSE); + m_ToolBar2.AddButton(IDC_SAMPLE_SILENCE, TIMAGE_SAMPLE_SILENCE); + m_ToolBar2.AddButton(IDC_SAMPLE_INVERT, TIMAGE_SAMPLE_INVERT); + m_ToolBar2.AddButton(IDC_SAMPLE_SIGN_UNSIGN, TIMAGE_SAMPLE_UNSIGN); // Setup Controls m_EditName.SetLimitText(32); m_EditFileName.SetLimitText(22); Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-19 21:34:59 UTC (rev 418) @@ -261,6 +261,50 @@ IMAGE_PLUGININSTRUMENT, }; + +// Toolbar Image List index +enum { + TIMAGE_PATTERN_NEW=0, + TIMAGE_PATTERN_STOP, + TIMAGE_PATTERN_PLAY, + TIMAGE_PATTERN_RESTART, + TIMAGE_PATTERN_RECORD, + TIMAGE_MIDI_RECORD, // unused? + TIMAGE_SAMPLE_NEW, + TIMAGE_INSTR_NEW, + TIMAGE_SAMPLE_NORMALIZE, + TIMAGE_SAMPLE_AMPLIFY, + TIMAGE_SAMPLE_UPSAMPLE, + TIMAGE_SAMPLE_REVERSE, + TIMAGE_OPEN, + TIMAGE_SAVE, + TIMAGE_PREVIEW, + TIMAGE_PAUSE, // unused? + TIMAGE_PATTERN_VUMETERS, + TIMAGE_MACROEDITOR, + TIMAGE_CHORDEDITOR, + TIMAGE_PATTERN_PROPERTIES, + TIMAGE_PATTERN_EXPAND, + TIMAGE_PATTERN_SHRINK, + TIMAGE_SAMPLE_SILENCE, + TIMAGE_TAB_SAMPLES, + TIMAGE_TAB_INSTRUMENTS, + TIMAGE_TAB_PATTERNS, + TIMAGE_UNDO, + TIMAGE_REDO, + TIMAGE_PATTERN_PLAYROW, + TIMAGE_SAMPLE_DOWNSAMPLE, + TIMAGE_PATTERN_DETAIL_LO, + TIMAGE_PATTERN_DETAIL_MED, + TIMAGE_PATTERN_DETAIL_HI, + TIMAGE_PATTERN_PLUGINS, + TIMAGE_CHANNELMANAGER, + TIMAGE_SAMPLE_INVERT, + TIMAGE_SAMPLE_UNSIGN, + TIMAGE_SAMPLE_DCOFFSET, + TIMAGE_PATTERN_OVERFLOWPASTE, +}; + ////////////////////////////////////////////////////////////////////////// // MPT Hot Keys Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-11-19 21:34:59 UTC (rev 418) @@ -669,7 +669,8 @@ exit(-1); } -void CTrackApp::MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH], TCHAR sNewFileName[_MAX_PATH]) +#ifdef WIN32 // Legacy stuff +bool CTrackApp::MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH], TCHAR sNewFileName[_MAX_PATH]) //----------------------------------------------------------------------------------------------------------------- { // copy a config file from the exe directory to the new config dirs @@ -690,8 +691,11 @@ if(PathFileExists(sNewPath) == 0 && PathFileExists(sOldPath) != 0) { MoveFile(sOldPath, sNewPath); + return true; } + return false; } +#endif // WIN32 Legacy Stuff void CTrackApp::SetupPaths() @@ -732,18 +736,57 @@ strcat(m_szConfigDirectory, "\\OpenMPT\\"); // Path doesn't exist yet, so it has to be created + bool justCreated = false; if(PathIsDirectory(m_szConfigDirectory) == 0) { CreateDirectory(m_szConfigDirectory, 0); + justCreated = true; } + #ifdef WIN32 // Legacy stuff + + bool movedKeyboardFiles = false; // Move files if necessary. + movedKeyboardFiles = MoveConfigFile("default.mkb", "", "Keybindings.mkb"); + movedKeyboardFiles |= MoveConfigFile("Keybindings.mkb"); + + // Check the old ini settings + if(justCreated && movedKeyboardFiles) + { + TCHAR szOldPath[_MAX_PATH], szTestPath[_MAX_PATH]; + + GetPrivateProfileString("Paths", "Key_Config_File", szOldPath, szOldPath, INIBUFFERSIZE, m_szConfigFileName); + _strlwr(szOldPath); // compare all in lower case + + bool overwritePath = false; + strcpy(szTestPath, m_szExePath); + strcat(szTestPath, "default.mkb"); + _strlwr(szTestPath); + overwritePath = (strcmp(szTestPath, szOldPath) == 0); + + if(overwritePath == false) + { + strcpy(szTestPath, m_szExePath); + strcat(szTestPath, "Keybindings.mkb"); + _strlwr(szTestPath); + overwritePath = (strcmp(szTestPath, szOldPath) == 0); + } + + if(overwritePath) + { + // if old INI entry points to a file that's going to be moved, change it. + strcpy(szTestPath, m_szConfigDirectory); + strcat(szTestPath, "Keybindings.mkb"); + WritePrivateProfileString("Paths", "Key_Config_File", szTestPath, m_szConfigFileName); + } + + } + // Move some more files MoveConfigFile("mptrack.ini"); MoveConfigFile("plugin.cache"); MoveConfigFile("mpt_intl.ini"); - MoveConfigFile("default.mkb", "", "Keybindings.mkb"); - MoveConfigFile("Keybindings.mkb"); - // TODO - Check the old ini settings here + + #endif // WIN32 Legacy Stuff } // Create tunings dir Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/Mptrack.h 2009-11-19 21:34:59 UTC (rev 418) @@ -268,7 +268,9 @@ private: static void LoadRegistryDLS(); - void MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH] = "", TCHAR sNewFileName[_MAX_PATH] = ""); + #ifdef WIN32 // Legacy stuff + bool MoveConfigFile(TCHAR sFileName[_MAX_PATH], TCHAR sSubDir[_MAX_PATH] = "", TCHAR sNewFileName[_MAX_PATH] = ""); + #endif }; Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-11-19 21:34:59 UTC (rev 418) @@ -109,8 +109,8 @@ memset(m_dwNotifyPos, 0, sizeof(m_dwNotifyPos)); memset(m_NcButtonState, 0, sizeof(m_NcButtonState)); m_bmpEnvBar.Create(IDB_ENVTOOLBAR, 20, 0, RGB(192,192,192)); - memset(m_baPlayingNote, 0, sizeof(bool)*NOTE_MAX); //rewbs.customKeys - m_nPlayingChannel = UINT_MAX; //rewbs.customKeys + memset(m_baPlayingNote, 0, sizeof(bool)*NOTE_MAX); //rewbs.customKeys + m_nPlayingChannel = CHANNELINDEX_INVALID; //rewbs.customKeys //rewbs.envRowGrid m_bGrid=true; m_bGridForceRedraw=false; @@ -1105,7 +1105,7 @@ break; } memset(m_baPlayingNote, 0, sizeof(bool)*NOTE_MAX); //rewbs.instViewNNA - m_nPlayingChannel = UINT_MAX; //rewbs.instViewNNA + m_nPlayingChannel = CHANNELINDEX_INVALID; //rewbs.instViewNNA } } else if ((pnotify->dwType & dwType) && ((pnotify->dwType & 0xFFFF) == m_nInstrument)) Modified: trunk/OpenMPT/mptrack/view_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_com.cpp 2009-11-12 21:32:08 UTC (rev 417) +++ trunk/OpenMPT/mptrack/view_com.cpp 2009-11-19 21:34:59 UTC (rev 418) @@ -138,9 +138,9 @@ m_ItemList.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_SINGLESEL|LVS_EDITLABELS|LVS_NOSORTHEADER, rect, this, IDC_LIST_DETAILS); m_ItemList.ModifyStyleEx(0, WS_EX_STATICEDGE); // Add ToolBar Buttons - m_ToolBar.AddButton(IDC_LIST_SAMPLES, 23); - m_ToolBar.AddButton(IDC_LIST_INSTRUMENTS, 24); - //m_ToolBar.AddButton(IDC_LIST_PATTERNS, 25); + m_ToolBar.AddButton(IDC_LIST_SAMPLES, TIMAGE_TAB_SAMPLES); + m_ToolBar.AddButton(IDC_LIST_INSTRUMENTS, TIMAGE_TAB_INSTRUMENTS); + //m_ToolBar.AddButton(IDC_LIST_PATTERNS, TIMAGE_TAB_PATTERNS); m_ToolBar.SetIndent(4); UpdateButtonState(); OnUpdate(NULL, HINT_MODTYPE, NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-11-20 13:04:44
|
Revision: 419 http://modplug.svn.sourceforge.net/modplug/?rev=419&view=rev Author: saga-games Date: 2009-11-20 13:04:34 +0000 (Fri, 20 Nov 2009) Log Message: ----------- [Fix] Instrument Editor: When pasting envelopes, the enabled and filter flags were lost. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-11-19 21:34:59 UTC (rev 418) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-11-20 13:04:34 UTC (rev 419) @@ -243,8 +243,8 @@ bool CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel); bool PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix = false, bool PasteFlood = false); - BOOL CopyEnvelope(UINT nIns, UINT nEnv); - BOOL PasteEnvelope(UINT nIns, UINT nEnv); + bool CopyEnvelope(UINT nIns, enmEnvelopeTypes nEnv); + bool PasteEnvelope(UINT nIns, enmEnvelopeTypes nEnv); LRESULT ActivateView(UINT nIdView, DWORD dwParam); void UpdateAllViews(CView *pSender, LPARAM lHint=0L, CObject *pHint=NULL); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-19 21:34:59 UTC (rev 418) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-11-20 13:04:34 UTC (rev 419) @@ -1403,8 +1403,8 @@ static LPCSTR pszEnvHdr = "Modplug Tracker Envelope\x0D\x0A"; static LPCSTR pszEnvFmt = "%d,%d,%d,%d,%d,%d,%d,%d\x0D\x0A"; -BOOL CModDoc::CopyEnvelope(UINT nIns, UINT nEnv) -//---------------------------------------------- +bool CModDoc::CopyEnvelope(UINT nIns, enmEnvelopeTypes nEnv) +//---------------------------------------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); HANDLE hCpy; @@ -1412,7 +1412,7 @@ MODINSTRUMENT *pIns; DWORD dwMemSize; - if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return FALSE; + if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return false; BeginWaitCursor(); pIns = m_SndFile.Instruments[nIns]; @@ -1454,21 +1454,21 @@ CloseClipboard(); } EndWaitCursor(); - return TRUE; + return true; } -BOOL CModDoc::PasteEnvelope(UINT nIns, UINT nEnv) -//----------------------------------------------- +bool CModDoc::PasteEnvelope(UINT nIns, enmEnvelopeTypes nEnv) +//----------------------------------------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return FALSE; + if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return false; BeginWaitCursor(); if (!pMainFrm->OpenClipboard()) { EndWaitCursor(); - return FALSE; + return false; } HGLOBAL hCpy = ::GetClipboardData(CF_TEXT); LPCSTR p; @@ -1523,7 +1523,7 @@ pEnv->nLoopStart = loopBegin; pEnv->nLoopEnd = loopEnd; pEnv->nReleaseNode = releaseNode; - pEnv->dwFlags = (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0); + pEnv->dwFlags = (pEnv->dwFlags & ~(ENV_LOOP|ENV_SUSTAIN|ENV_CARRY)) | (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0); int oldn = 0; for (UINT i=0; i<nPoints; i++) @@ -1557,7 +1557,7 @@ UpdateAllViews(NULL, (nIns << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); } EndWaitCursor(); - return TRUE; + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-11-27 18:52:27
|
Revision: 423 http://modplug.svn.sourceforge.net/modplug/?rev=423&view=rev Author: saga-games Date: 2009-11-27 18:52:15 +0000 (Fri, 27 Nov 2009) Log Message: ----------- [New] Treeview: Sequences can be inserted, duplicated and deleted by right-clicking the sequence items [Fix] Pattern editor: When recording live from the keyboard, SDx shouldn't exceed the song speed anymore. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 18:52:15 UTC (rev 423) @@ -608,11 +608,14 @@ // Order item ORDERINDEX nOrd = (ORDERINDEX)(lParam & 0x7FFF); SEQUENCEINDEX nSeq = (SEQUENCEINDEX)(lParam >> 16); - if((nSeq < m_pSndFile->Order.GetNumSequences()) && (nOrd < m_pSndFile->Order.GetSequence(nSeq).size())) + if(nSeq < m_pSndFile->Order.GetNumSequences()) { m_OrderList.SelectSequence(nSeq); - m_OrderList.SetCurSel(nOrd); - SetCurrentPattern(m_pSndFile->Order[nOrd]); + if((nOrd < m_pSndFile->Order.GetSequence(nSeq).size())) + { + m_OrderList.SetCurSel(nOrd); + SetCurrentPattern(m_pSndFile->Order[nOrd]); + } } } if (m_hWndView) Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-27 18:52:15 UTC (rev 423) @@ -4210,7 +4210,9 @@ if (usePlaybackPosition && nTick) { // avoid SD0 which will be mis-interpreted if (p->command == 0) { //make sure we don't overwrite any existing commands. p->command = (pSndFile->TypeIsS3M_IT_MPT()) ? CMD_S3MCMDEX : CMD_MODCMDEX; - p->param = 0xD0 + min(0xF, nTick); + UINT maxSpeed = 0x0F; + if(pSndFile->m_nMusicSpeed > 0) maxSpeed = min(0x0F, pSndFile->m_nMusicSpeed - 1); + p->param = 0xD0 + min(maxSpeed, nTick); } } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-27 18:52:15 UTC (rev 423) @@ -73,6 +73,8 @@ ON_COMMAND(ID_MODTREE_MUTE, OnMuteTreeItem) ON_COMMAND(ID_MODTREE_SOLO, OnSoloTreeItem) ON_COMMAND(ID_MODTREE_UNMUTEALL, OnUnmuteAllTreeItem) + ON_COMMAND(ID_MODTREE_DUPLICATE, OnDuplicateTreeItem) + ON_COMMAND(ID_MODTREE_INSERT, OnInsertTreeItem) // -> CODE#0023 // -> DESC="IT project files (.itp)" @@ -700,6 +702,7 @@ if ((pInfo->hOrders) && (hintFlagPart != HINT_INSNAMES) && (hintFlagPart != HINT_SMPNAMES)) { const DWORD nPat = (lHint >> HINT_SHIFT_PAT); + bool adjustParentNode = false; // adjust sequence name of "Sequence" node? // (only one seq remaining || previously only one sequence): update parent item if((pInfo->tiSequences.size() > 1 && pSndFile->Order.GetNumSequences() == 1) || (pInfo->tiSequences.size() == 1 && pSndFile->Order.GetNumSequences() > 1)) @@ -714,6 +717,7 @@ } pInfo->tiOrders.resize(pSndFile->Order.GetNumSequences()); pInfo->tiSequences.resize(pSndFile->Order.GetNumSequences(), NULL); + adjustParentNode = true; } // If there are too many sequences, delete them. @@ -736,6 +740,15 @@ SEQUENCEINDEX nSeqMin = 0, nSeqMax = pSndFile->Order.GetNumSequences() - 1; SEQUENCEINDEX nHintParam = lHint >> HINT_SHIFT_SEQUENCE; if ((hintFlagPart == HINT_SEQNAMES) && (nHintParam <= nSeqMax)) nSeqMin = nSeqMax = nHintParam; + + // Adjust caption of the "Sequence" node (if only one sequence exists, it should be labeled with the sequence name) + if(((hintFlagPart == HINT_SEQNAMES) && pSndFile->Order.GetNumSequences() == 1) || adjustParentNode) + { + CString sSeqName = pSndFile->Order.GetSequence(0).m_sName; + if(sSeqName.IsEmpty() || pSndFile->Order.GetNumSequences() > 1) sSeqName = "Sequence"; + SetItem(pInfo->hOrders, TVIF_TEXT, sSeqName, 0, 0, 0, 0, 0); + } + // go through all sequences for(SEQUENCEINDEX nSeq = nSeqMin; nSeq <= nSeqMax; nSeq++) { @@ -1151,6 +1164,10 @@ if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_COMMENTS, 0); return TRUE; + case MODITEM_SEQUENCE: + if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (dwItem << 16) | 0x8000); + return TRUE; + case MODITEM_ORDER: if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, dwItem | 0x8000); return TRUE; @@ -1370,9 +1387,18 @@ uint64 qwItemType = GetModItem(hItem); DWORD dwItem = (DWORD)(qwItemType >> 16); PMODTREEDOCINFO pInfo = DocInfo[m_nDocNdx]; - CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL; + CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : nullptr; + CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; switch(qwItemType & 0xFFFF) { + case MODITEM_SEQUENCE: + if (pModDoc && pSndFile) + { + pSndFile->Order.RemoveSequence((SEQUENCEINDEX)(dwItem & 0xFFFF)); + pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); + } + break; + case MODITEM_ORDER: if ((pModDoc) && (pModDoc->RemoveOrder((SEQUENCEINDEX)(dwItem >> 16), (ORDERINDEX)(dwItem & 0xFFFF)))) { @@ -2282,13 +2308,24 @@ break; case MODITEM_SEQUENCE: - // TODO: Right-click menu for sequences - //nDefault = ID_MODTREE_EXECUTE; + //nDefault = ID_MODTREE_EXECUTE; // don't do it, double-clicking sequences shouldn't switch to the automatically! //AppendMenu(hMenu, MF_STRING, nDefault, "&Switch to Seqeuence"); - //AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE, "&Delete Sequence"); - //AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE, "D&uplicate Sequence"); + AppendMenu(hMenu, MF_STRING, ID_MODTREE_INSERT, "&Insert Sequence"); + AppendMenu(hMenu, MF_STRING, ID_MODTREE_DUPLICATE, "D&uplicate Sequence"); + AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE, "&Delete Sequence"); break; + + case MODITEM_HDR_ORDERS: + { + CModDoc *pModDoc = GetDocumentFromItem(hItem); + if(pModDoc && (pModDoc->GetModType() == MOD_TYPE_MPT)) + { + AppendMenu(hMenu, MF_STRING, ID_MODTREE_INSERT, "&Insert Sequence"); + } + } + break; + case MODITEM_SAMPLE: { CModDoc *pModDoc = GetDocumentFromItem(hItem); @@ -2781,9 +2818,55 @@ } +void CModTree::OnDuplicateTreeItem() +//---------------------------------- +{ + HTREEITEM hItem = GetSelectedItem(); + uint64 qwItemType; + CModDoc *pModDoc; + + qwItemType = GetModItem(hItem); + const DWORD dwItemNo = (DWORD)(qwItemType >> 16); + qwItemType &= 0xFFFF; + + pModDoc = GetDocumentFromItem(hItem); + CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; + + if (pModDoc && pSndFile && (qwItemType == MODITEM_SEQUENCE)) + { + pSndFile->Order.SetSequence((SEQUENCEINDEX)dwItemNo); + pSndFile->Order.AddSequence(true); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE); + pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES|HINT_MODSEQUENCE); + } +} + + +void CModTree::OnInsertTreeItem() +//------------------------------- +{ + HTREEITEM hItem = GetSelectedItem(); + uint64 qwItemType; + CModDoc *pModDoc; + + qwItemType = GetModItem(hItem) & 0xFFFF; + + pModDoc = GetDocumentFromItem(hItem); + CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; + + if (pModDoc && pSndFile && ((qwItemType == MODITEM_SEQUENCE) || (qwItemType == MODITEM_HDR_ORDERS))) + { + pSndFile->Order.AddSequence(false); + UpdateView(GetDocumentIDFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE); + pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES|HINT_MODSEQUENCE); + } +} + + // -> CODE#0023 // -> DESC="IT project files (.itp)" void CModTree::OnSetItemPath() +//---------------------------- { HTREEITEM hItem = GetSelectedItem(); uint64 qwItemType = GetModItem(hItem); @@ -2816,6 +2899,7 @@ } void CModTree::OnSaveItem() +//------------------------- { HTREEITEM hItem = GetSelectedItem(); uint64 qwItemType = GetModItem(hItem); Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/View_tre.h 2009-11-27 18:52:15 UTC (rev 423) @@ -204,6 +204,8 @@ afx_msg void OnMuteTreeItem(); afx_msg void OnSoloTreeItem(); afx_msg void OnUnmuteAllTreeItem(); + afx_msg void OnDuplicateTreeItem(); + afx_msg void OnInsertTreeItem(); // -> CODE#0023 // -> DESC="IT project files (.itp)" Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-11-23 22:00:32 UTC (rev 422) +++ trunk/OpenMPT/mptrack/resource.h 2009-11-27 18:52:15 UTC (rev 423) @@ -1153,6 +1153,8 @@ #define ID_ORDERLIST_EDIT_PASTE 59233 #define ID_CHANNEL_RENAME 59234 #define ID_EDIT_PASTEFLOOD 59235 +#define ID_MODTREE_DUPLICATE 59236 +#define ID_MODTREE_INSERT 59237 // Next default values for new objects // @@ -1160,7 +1162,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 523 -#define _APS_NEXT_COMMAND_VALUE 59236 +#define _APS_NEXT_COMMAND_VALUE 59238 #define _APS_NEXT_CONTROL_VALUE 2412 #define _APS_NEXT_SYMED_VALUE 901 #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-11-27 21:17:42
|
Revision: 425 http://modplug.svn.sourceforge.net/modplug/?rev=425&view=rev Author: saga-games Date: 2009-11-27 21:17:33 +0000 (Fri, 27 Nov 2009) Log Message: ----------- [New] New keyboard shortcut in pattern context: Duplicate pattern [Fix] Cleanup dialog: The preset checkboxes were slightly wrong. Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-11-27 19:17:19 UTC (rev 424) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2009-11-27 21:17:33 UTC (rev 425) @@ -146,14 +146,14 @@ // patterns CheckDlgButton(IDC_CHK_CLEANUP_PATTERNS, MF_CHECKED); CheckDlgButton(IDC_CHK_REMOVE_PATTERNS, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_UNCHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_PATTERNS, MF_CHECKED); // orders CheckDlgButton(IDC_CHK_MERGE_SEQUENCES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_REMOVE_ORDERS, MF_UNCHECKED); // samples CheckDlgButton(IDC_CHK_CLEANUP_SAMPLES, MF_CHECKED); CheckDlgButton(IDC_CHK_REMOVE_SAMPLES, MF_UNCHECKED); - CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_CHECKED); + CheckDlgButton(IDC_CHK_REARRANGE_SAMPLES, MF_UNCHECKED); CheckDlgButton(IDC_CHK_OPTIMIZE_SAMPLES, MF_CHECKED); // instruments CheckDlgButton(IDC_CHK_CLEANUP_INSTRUMENTS, MF_CHECKED); Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 19:17:19 UTC (rev 424) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 21:17:33 UTC (rev 425) @@ -2410,6 +2410,11 @@ commands[kcOrderlistSwitchToPatternView].isHidden = false; commands[kcOrderlistSwitchToPatternView].isDummy = false; + commands[kcDuplicatePattern].UID = 1806; + commands[kcDuplicatePattern].Message = "Duplicate pattern"; + commands[kcDuplicatePattern].isHidden = false; + commands[kcDuplicatePattern].isDummy = false; + #ifdef _DEBUG for (int i=0; i<kcNumCommands; i++) { if (commands[i].UID != 0) { // ignore unset UIDs Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 19:17:19 UTC (rev 424) +++ trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 21:17:33 UTC (rev 425) @@ -217,6 +217,7 @@ kcSetSpacing9, kcSwitchToOrderList, kcNewPattern, + kcDuplicatePattern, kcTogglePluginEditor, kcShowNoteProperties, kcShowPatternProperties, Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 19:17:19 UTC (rev 424) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 21:17:33 UTC (rev 425) @@ -520,6 +520,10 @@ OnPatternNew(); break; + case CTRLMSG_PAT_DUPPATTERN: + OnPatternDuplicate(); + break; + case CTRLMSG_SETUPMACROS: OnSetupZxxMacros(); break; @@ -1262,7 +1266,7 @@ void CCtrlPatterns::TogglePluginEditor(bool split) -//---------------------------------------- +//------------------------------------------------ { if ((m_nInstrument) && (m_pModDoc)) { @@ -1279,7 +1283,7 @@ } void CCtrlPatterns::ToggleSplitPluginEditor() -//---------------------------------------- +//------------------------------------------- { TogglePluginEditor(true); } Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-27 19:17:19 UTC (rev 424) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-11-27 21:17:33 UTC (rev 425) @@ -71,6 +71,7 @@ CTRLMSG_INS_NEWINSTRUMENT, CTRLMSG_INS_SONGDROP, CTRLMSG_INS_SAMPLEMAP, + CTRLMSG_PAT_DUPPATTERN, }; enum { Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-27 19:17:19 UTC (rev 424) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-11-27 21:17:33 UTC (rev 425) @@ -3634,6 +3634,7 @@ case kcToggleFollowSong: SendCtrlMessage(CTRLMSG_PAT_FOLLOWSONG); return wParam; case kcChangeLoopStatus: SendCtrlMessage(CTRLMSG_PAT_LOOP, -1); return wParam; case kcNewPattern: SendCtrlMessage(CTRLMSG_PAT_NEWPATTERN); return wParam; + case kcDuplicatePattern: SendCtrlMessage(CTRLMSG_PAT_DUPPATTERN); return wParam; case kcSwitchToOrderList: OnSwitchToOrderList(); case kcSwitchOverflowPaste: CMainFrame::m_dwPatternSetup ^= PATTERN_OVERFLOWPASTE; return wParam; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-12-05 13:20:04
|
Revision: 434 http://modplug.svn.sourceforge.net/modplug/?rev=434&view=rev Author: saga-games Date: 2009-12-05 13:19:54 +0000 (Sat, 05 Dec 2009) Log Message: ----------- [Fix] Pattern editor: Split Keyboard Settings were not remembered when switching to a different tab. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-05 00:31:41 UTC (rev 433) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-05 13:19:54 UTC (rev 434) @@ -341,18 +341,6 @@ ///////////////////////////////////////////////////////////////////////// -// Split Keyboard Settings (pattern editor) - -#define SPLIT_OCTAVE_RANGE 9 -struct SplitKeyboardSettings -{ - UINT splitInstrument, splitNote, splitVolume; - int octaveModifier; // determines by how many octaves the notes should be transposed up or down - bool octaveLink; // apply octaveModifier -}; - - -///////////////////////////////////////////////////////////////////////// // Misc. Macros Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-05 00:31:41 UTC (rev 433) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-05 13:19:54 UTC (rev 434) @@ -99,6 +99,12 @@ m_PatternUndo.SetParent(this); m_SampleUndo.SetParent(this); + m_SplitKeyboardSettings.splitInstrument = 0; + m_SplitKeyboardSettings.splitNote = NOTE_MIDDLEC - 1; + m_SplitKeyboardSettings.splitVolume = 0; + m_SplitKeyboardSettings.octaveModifier = 0; + m_SplitKeyboardSettings.octaveLink = false; + #ifdef _DEBUG MODCHANNEL *p = m_SndFile.Chn; if (((DWORD)p) & 7) Log("MODCHANNEL is not aligned (0x%08X)\n", p); Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 00:31:41 UTC (rev 433) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 13:19:54 UTC (rev 434) @@ -103,6 +103,18 @@ }; +///////////////////////////////////////////////////////////////////////// +// Split Keyboard Settings (pattern editor) + +#define SPLIT_OCTAVE_RANGE 9 +struct SplitKeyboardSettings +{ + UINT splitInstrument, splitNote, splitVolume; + int octaveModifier; // determines by how many octaves the notes should be transposed up or down + bool octaveLink; // apply octaveModifier +}; + + //============================= class CModDoc: public CDocument //============================= @@ -127,6 +139,7 @@ CPatternUndo m_PatternUndo; CSampleUndo m_SampleUndo; + SplitKeyboardSettings m_SplitKeyboardSettings; // this is maybe not the best place to keep them, but it should do the job protected: // create from serialization only CModDoc(); @@ -183,6 +196,7 @@ CPatternUndo *GetPatternUndo() { return &m_PatternUndo; } CSampleUndo *GetSampleUndo() { return &m_SampleUndo; } + SplitKeyboardSettings *GetSplitKeyboardSettings() { return &m_SplitKeyboardSettings; } // operations public: Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 00:31:41 UTC (rev 433) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 13:19:54 UTC (rev 434) @@ -31,6 +31,7 @@ UINT CViewPattern::m_nFindMaxChn = 0; signed char cInstrRelChange = 0; + IMPLEMENT_SERIAL(CViewPattern, CModScrollView, 0) BEGIN_MESSAGE_MAP(CViewPattern, CModScrollView) @@ -178,13 +179,6 @@ m_nFoundInstrument = 0; m_nLastPlayedRow = 0; m_nLastPlayedOrder = 0; - - // Set up keyboard split - m_SplitKeyboardSettings.splitInstrument = 0; - m_SplitKeyboardSettings.splitNote = NOTE_MIDDLEC - 1; - m_SplitKeyboardSettings.splitVolume = 0; - m_SplitKeyboardSettings.octaveModifier = 0; - m_SplitKeyboardSettings.octaveLink = false; } @@ -3921,16 +3915,16 @@ const UINT nTick = pSndFile->m_nTickCount; const PATTERNINDEX nPatPlayback = pSndFile->m_nPattern; - const bool isSplit = (note <= m_SplitKeyboardSettings.splitNote); + const bool isSplit = (note <= pModDoc->GetSplitKeyboardSettings()->splitNote); UINT ins = 0; if (pModDoc) { if (isSplit) { - ins = m_SplitKeyboardSettings.splitInstrument; - if (m_SplitKeyboardSettings.octaveLink) note += 12 * m_SplitKeyboardSettings.octaveModifier; - if (note > NOTE_MAX && note < NOTE_NOTECUT) note = NOTE_MAX; - if (note<0) note=1; + 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 = 1; } if (!ins) ins = GetCurrentInstrument(); if (!ins) ins = m_nFoundInstrument; @@ -4184,17 +4178,24 @@ // -- write note and instrument data. const bool isSplit = HandleSplit(p, note); + // Nice idea actually: Use lower section of the keyboard to play chords + /*if(isSplit) + { + TempEnterChord(note); + return; + }*/ + // -- write vol data - if (vol >= 0 && vol <= 64 && !(isSplit && m_SplitKeyboardSettings.splitVolume)) //write valid volume, as long as there's no split volume override. + if (vol >= 0 && vol <= 64 && !(isSplit && pModDoc->GetSplitKeyboardSettings()->splitVolume)) //write valid volume, as long as there's no split volume override. { p->volcmd=VOLCMD_VOLUME; p->vol = vol; - } else if (isSplit && m_SplitKeyboardSettings.splitVolume) //cater for split volume override. + } else if (isSplit && pModDoc->GetSplitKeyboardSettings()->splitVolume) //cater for split volume override. { - if (m_SplitKeyboardSettings.splitVolume > 0 && m_SplitKeyboardSettings.splitVolume <= 64) + if (pModDoc->GetSplitKeyboardSettings()->splitVolume > 0 && pModDoc->GetSplitKeyboardSettings()->splitVolume <= 64) { p->volcmd=VOLCMD_VOLUME; - p->vol = m_SplitKeyboardSettings.splitVolume; + p->vol = pModDoc->GetSplitKeyboardSettings()->splitVolume; } } @@ -4593,7 +4594,9 @@ bool CViewPattern::HandleSplit(MODCOMMAND* p, int note) //----------------------------------------------------- { - if (note > m_SplitKeyboardSettings.splitNote) + CModDoc *pModDoc = GetDocument(); if (!pModDoc) return false; + + if (note > pModDoc->GetSplitKeyboardSettings()->splitNote) { p->note = note; UINT nins = GetCurrentInstrument(); @@ -4603,14 +4606,14 @@ } else { - if (m_SplitKeyboardSettings.splitInstrument) - p->instr = m_SplitKeyboardSettings.splitInstrument; + if (pModDoc->GetSplitKeyboardSettings()->splitInstrument) + p->instr = pModDoc->GetSplitKeyboardSettings()->splitInstrument; else if(GetCurrentInstrument()) p->instr = GetCurrentInstrument(); - if (m_SplitKeyboardSettings.octaveLink) - note += 12 * m_SplitKeyboardSettings.octaveModifier; - if (note > NOTE_MAX && note < NOTE_NOTECUT) note = NOTE_MAX; - if (note<0) note=1; + if (pModDoc->GetSplitKeyboardSettings()->octaveLink) + note += 12 * pModDoc->GetSplitKeyboardSettings()->octaveModifier; + if (note > NOTE_MAX && note < NOTE_MIN_SPECIAL) note = NOTE_MAX; + if (note < 0) note = 1; p->note = note; return true; @@ -5210,6 +5213,6 @@ CSoundFile *pSndFile = pModDoc->GetSoundFile(); if(pSndFile == nullptr) return; - CSplitKeyboadSettings dlg(CMainFrame::GetMainFrame(), pSndFile, &m_SplitKeyboardSettings); + CSplitKeyboadSettings dlg(CMainFrame::GetMainFrame(), pSndFile, pModDoc->GetSplitKeyboardSettings()); dlg.DoModal(); } Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 00:31:41 UTC (rev 433) +++ trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 13:19:54 UTC (rev 434) @@ -85,8 +85,6 @@ SIZE m_szHeader, m_szCell; UINT m_nPattern, m_nRow, m_nMidRow, m_nPlayPat, m_nPlayRow, m_nSpacing, m_nAccelChar, m_nLastPlayedRow, m_nLastPlayedOrder; - SplitKeyboardSettings m_SplitKeyboardSettings; - int m_nXScroll, m_nYScroll; DWORD m_nDragItem, m_nMenuParam, m_nDetailLevel; BOOL m_bDragging, m_bInItemRect, m_bRecord, m_bContinueSearch, m_bWholePatternFitsOnScreen; Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-12-05 00:31:41 UTC (rev 433) +++ trunk/OpenMPT/mptrack/resource.h 2009-12-05 13:19:54 UTC (rev 434) @@ -708,7 +708,6 @@ #define IDC_COMMAND_LIST 2129 #define IDC_STATIC8 2200 #define IDC_PATINSTROPLUGGUI 2201 -#define IDC_PATINSTROPLUGGUI2 2202 #define IDC_WFIRCUTOFF 2202 #define IDC_WFIRTYPE 2203 #define IDC_RAMPING 2204 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-12-05 19:44:57
|
Revision: 435 http://modplug.svn.sourceforge.net/modplug/?rev=435&view=rev Author: saga-games Date: 2009-12-05 19:44:47 +0000 (Sat, 05 Dec 2009) Log Message: ----------- [New] Pattern editor: New paste mode "push forward paste", which resembles the default paste behaviour of Impulse Tracker. Includes new shortcut. [Fix] Changed default pattern control view height so it fits the new control [Mod] Pattern editor: Instead of hiding the sequence name control, just disable it (looks better) [Ref] Cleaned up paste code a bit. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Globals.h trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-12-05 19:44:47 UTC (rev 435) @@ -2480,6 +2480,11 @@ commands[kcShowSplitKeyboardSettings].isDummy = false; commands[kcShowSplitKeyboardSettings].Message = "Split Keyboard Settings dialog"; + commands[kcEditPushForwardPaste].UID = 1820; + commands[kcEditPushForwardPaste].isHidden = false; + commands[kcEditPushForwardPaste].isDummy = false; + commands[kcEditPushForwardPaste].Message = "Push Forward Paste"; + #ifdef _DEBUG for (int i=0; i<kcNumCommands; i++) { if (commands[i].UID != 0) { // ignore unset UIDs Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/CommandSet.h 2009-12-05 19:44:47 UTC (rev 435) @@ -87,6 +87,7 @@ kcEditMixPaste, kcEditMixPasteITStyle, kcEditPasteFlood, + kcEditPushForwardPaste, kcSwitchOverflowPaste, kcEditSelectAll, kcEditFind, Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-12-05 19:44:47 UTC (rev 435) @@ -231,10 +231,9 @@ else ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), false); - // Show/hide multisequence controls according the current modtype. - GetDlgItem(IDC_STATIC_SEQUENCE_NAME_FRAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); - GetDlgItem(IDC_STATIC_SEQUENCE_NAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); - GetDlgItem(IDC_EDIT_SEQUENCE_NAME)->ShowWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); + // Enable/disablemultisequence controls according the current modtype. + GetDlgItem(IDC_STATIC_SEQUENCE_NAME)->EnableWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); + GetDlgItem(IDC_EDIT_SEQUENCE_NAME)->EnableWindow( (m_pSndFile->GetType() == MOD_TYPE_MPT) ? SW_SHOW : SW_HIDE); } //end rewbs.instroVST if (dwHintMask & HINT_MPTOPTIONS) Modified: trunk/OpenMPT/mptrack/Globals.h =================================================================== --- trunk/OpenMPT/mptrack/Globals.h 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/Globals.h 2009-12-05 19:44:47 UTC (rev 435) @@ -81,6 +81,8 @@ afx_msg void OnEditCopy() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_COPY, 0); } //rewbs.customKeys afx_msg void OnEditPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTE, 0); } //rewbs.customKeys afx_msg void OnEditMixPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTE_SPECIAL, 0); } //rewbs.mixPaste + afx_msg void OnEditPasteFlood() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTEFLOOD, 0); } + afx_msg void OnEditPushForwardPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PUSHFORWARDPASTE, 0); } afx_msg void OnEditFind() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FIND, 0); } //rewbs.customKeys afx_msg void OnEditFindNext() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FINDNEXT, 0); } //rewbs.customKeys afx_msg void OnSwitchToView() { if (m_hWndView) ::PostMessage(m_hWndView, WM_MOD_VIEWMSG, VIEWMSG_SETFOCUS, 0); } //rewbs.customKeys Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2009-12-05 19:44:47 UTC (rev 435) @@ -440,6 +440,8 @@ case ID_EDIT_COPY: s="&Copy\t"; c=kcEditCopy; break; case ID_EDIT_PASTE: s="&Paste\t"; c=kcEditPaste; break; case ID_EDIT_PASTE_SPECIAL: s="&Mix Paste\t"; c=kcEditMixPaste; break; + case ID_EDIT_PASTEFLOOD: s="&Paste Flood\t"; c=kcEditPasteFlood; break; + case ID_EDIT_PUSHFORWARDPASTE: s="&Push Forward Paste\t"; c=kcEditPushForwardPaste; break; case ID_EDIT_SELECT_ALL: s="&Select All\t"; c=kcEditSelectAll; break; case ID_EDIT_FIND: s="&Find\t"; c=kcEditFind; break; case ID_EDIT_FINDNEXT: s="Find &Next\t"; c=kcEditFindNext; break; @@ -505,6 +507,8 @@ pMenu->ModifyMenu(ID_EDIT_COPY, MF_BYCOMMAND | MF_STRING, ID_EDIT_COPY, GetMenuText(ID_EDIT_COPY)); pMenu->ModifyMenu(ID_EDIT_PASTE, MF_BYCOMMAND | MF_STRING, ID_EDIT_PASTE, GetMenuText(ID_EDIT_PASTE)); pMenu->ModifyMenu(ID_EDIT_PASTE_SPECIAL, MF_BYCOMMAND | MF_STRING, ID_EDIT_PASTE_SPECIAL, GetMenuText(ID_EDIT_PASTE_SPECIAL)); + pMenu->ModifyMenu(ID_EDIT_PASTEFLOOD, MF_BYCOMMAND | MF_STRING, ID_EDIT_PASTEFLOOD, GetMenuText(ID_EDIT_PASTEFLOOD)); + pMenu->ModifyMenu(ID_EDIT_PUSHFORWARDPASTE, MF_BYCOMMAND | MF_STRING, ID_EDIT_PUSHFORWARDPASTE, GetMenuText(ID_EDIT_PUSHFORWARDPASTE)); pMenu->ModifyMenu(ID_EDIT_SELECT_ALL, MF_BYCOMMAND | MF_STRING, ID_EDIT_SELECT_ALL, GetMenuText(ID_EDIT_SELECT_ALL)); pMenu->ModifyMenu(ID_EDIT_FIND, MF_BYCOMMAND | MF_STRING, ID_EDIT_FIND, GetMenuText(ID_EDIT_FIND)); pMenu->ModifyMenu(ID_EDIT_FINDNEXT, MF_BYCOMMAND | MF_STRING, ID_EDIT_FINDNEXT, GetMenuText(ID_EDIT_FINDNEXT)); Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-12-05 19:44:47 UTC (rev 435) @@ -139,7 +139,7 @@ //rewbs.varWindowSize LONG CMainFrame::glCtrlWindowHeight = 188; //obsolete, for backwards compat only LONG CMainFrame::glGeneralWindowHeight = 178; -LONG CMainFrame::glPatternWindowHeight = 232; +LONG CMainFrame::glPatternWindowHeight = 152; LONG CMainFrame::glSampleWindowHeight = 188; LONG CMainFrame::glInstrumentWindowHeight = 300; LONG CMainFrame::glCommentsWindowHeight = 288; Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-12-05 19:44:47 UTC (rev 435) @@ -103,6 +103,17 @@ }; +// pattern paste modes +enum enmPatternPasteModes +{ + pm_overwrite = 0, + pm_mixpaste, + pm_mixpaste_it, + pm_pasteflood, + pm_pushforwardpaste, +}; + + ///////////////////////////////////////////////////////////////////////// // Split Keyboard Settings (pattern editor) @@ -255,7 +266,7 @@ // Copy&Paste bool CopyPattern(PATTERNINDEX nPattern, DWORD dwBeginSel, DWORD dwEndSel); - bool PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix = false, bool PasteFlood = false); + bool PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, enmPatternPasteModes pasteMode); bool CopyEnvelope(UINT nIns, enmEnvelopeTypes nEnv); bool PasteEnvelope(UINT nIns, enmEnvelopeTypes nEnv); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-12-05 19:44:47 UTC (rev 435) @@ -439,7 +439,7 @@ if (nNewChannels > maxChans) { CString error; - error.Format("Error: Max number of channels for this type is %d", maxChans); + error.Format("Error: Max number of channels for this file type is %d", maxChans); ::AfxMessageBox(error, MB_OK|MB_ICONEXCLAMATION); return FALSE; } @@ -1156,9 +1156,8 @@ } -//BOOL CModDoc::PastePattern(UINT nPattern, DWORD dwBeginSel) -bool CModDoc::PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, bool mix, bool ITStyleMix, bool PasteFlood) -//------------------------------------------------------------------------------------------------------------- +bool CModDoc::PastePattern(PATTERNINDEX nPattern, DWORD dwBeginSel, enmPatternPasteModes pasteMode) +//------------------------------------------------------------------------------------------------- { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if ((!pMainFrm) || (nPattern >= m_SndFile.Patterns.Size()) || (!m_SndFile.Patterns[nPattern])) return false; @@ -1181,6 +1180,10 @@ UINT len = 0, startLen; MODCOMMAND origModCmd; + bool doOverflowPaste = (CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) && (pasteMode != pm_pasteflood) && (pasteMode != pm_pushforwardpaste); + bool doITStyleMix = (pasteMode == pm_mixpaste_it); + bool doMixPaste = ((pasteMode == pm_mixpaste) || doITStyleMix); + ORDERINDEX oCurrentOrder; //jojo.echopaste ROWINDEX rTemp, startRow; PATTERNINDEX pTemp; @@ -1219,7 +1222,7 @@ { if (len + 11 >= dwMemSize || !p[len]) { - if((PasteFlood == true) && (nrow != startRow)) // prevent infinite loop with malformed clipboard data + if((pasteMode == pm_pasteflood) && (nrow != startRow)) // prevent infinite loop with malformed clipboard data len = startLen; // paste from beginning else goto PasteDone; @@ -1235,11 +1238,21 @@ origModCmd = m[col]; // ITSyle mixpaste requires that we keep a copy of the thing we are about to paste on // so that we can refer back to check if there was anything in e.g. the note column before we pasted. LPSTR s = p+len+1; + if (col < m_SndFile.m_nChannels) { + // push channel data below paste point first. + if(pasteMode == pm_pushforwardpaste) + { + for(ROWINDEX nPushRow = m_SndFile.PatternSize[nPattern] - 1 - nrow; nPushRow > 0; nPushRow--) + { + m[col + nPushRow * m_SndFile.m_nChannels] = m[col + (nPushRow - 1) * m_SndFile.m_nChannels]; + } + } + // Note - if (s[0] > ' ' && (!mix || ((!ITStyleMix && origModCmd.note==0) || - (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0)))) + if (s[0] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.note==0) || + (doITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0)))) { m[col].note = NOTE_NONE; if (s[0] == '=') m[col].note = NOTE_KEYOFF; else @@ -1263,8 +1276,8 @@ } } // Instrument - if (s[3] > ' ' && (!mix || ( (!ITStyleMix && origModCmd.instr==0) || - (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0) ) )) + if (s[3] > ' ' && (!doMixPaste || ( (!doITStyleMix && origModCmd.instr==0) || + (doITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0) ) )) { if ((s[3] >= '0') && (s[3] <= ('0'+(MAX_SAMPLES/10)))) @@ -1273,8 +1286,8 @@ } else m[col].instr = 0; } // Volume - if (s[5] > ' ' && (!mix || ((!ITStyleMix && origModCmd.volcmd==0) || - (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0)))) + if (s[5] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.volcmd==0) || + (doITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0)))) { if (s[5] != '.') @@ -1314,8 +1327,8 @@ } else { - if (s[8] > ' ' && (!mix || ((!ITStyleMix && origModCmd.command==0) || - (ITStyleMix && origModCmd.command==0 && origModCmd.param==0)))) + if (s[8] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.command==0) || + (doITStyleMix && origModCmd.command==0 && origModCmd.param==0)))) { m[col].command = 0; if (s[8] != '.') @@ -1328,8 +1341,8 @@ } } // Effect value - if (s[9] > ' ' && (!mix || ((!ITStyleMix && origModCmd.param==0) || - (ITStyleMix && origModCmd.command==0 && origModCmd.param==0)))) + if (s[9] > ' ' && (!doMixPaste || ((!doITStyleMix && origModCmd.param==0) || + (doITStyleMix && origModCmd.command==0 && origModCmd.param==0)))) { m[col].param = 0; if (s[9] != '.') @@ -1380,7 +1393,7 @@ // Overflow paste. Continue pasting in next pattern if enabled. // If Paste Flood is enabled, this won't be called due to obvious reasons. - if((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) && !PasteFlood) + if(doOverflowPaste) { while(nrow >= m_SndFile.PatternSize[nPattern]) { Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-05 19:44:47 UTC (rev 435) @@ -56,6 +56,7 @@ ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) ON_COMMAND(ID_EDIT_MIXPASTE, OnEditMixPaste) ON_COMMAND(ID_EDIT_PASTEFLOOD, OnEditPasteFlood) + ON_COMMAND(ID_EDIT_PUSHFORWARDPASTE,OnEditPushForwardPaste) ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll) ON_COMMAND(ID_EDIT_SELECTCOLUMN,OnEditSelectColumn) ON_COMMAND(ID_EDIT_SELECTCOLUMN2,OnSelectCurrentColumn) @@ -966,64 +967,6 @@ } -void CViewPattern::OnEditPaste() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - - if (pModDoc && IsEditingEnabled_bmsg()) - { - pModDoc->PastePattern(m_nPattern, m_dwBeginSel, false); - InvalidatePattern(FALSE); - SetFocus(); - } -} - -//rewbs.mixPaste -void CViewPattern::OnEditMixPaste() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - - if (pModDoc && IsEditingEnabled_bmsg()) - { - pModDoc->PastePattern(m_nPattern, m_dwBeginSel, true); - InvalidatePattern(FALSE); - SetFocus(); - } -} - -void CViewPattern::OnEditMixPasteITStyle() -//---------------------------------------- -{ - CModDoc *pModDoc = GetDocument(); - - if (pModDoc && IsEditingEnabled_bmsg() ) - { - pModDoc->PastePattern(m_nPattern, m_dwBeginSel, true, true); - InvalidatePattern(FALSE); - SetFocus(); - } -} - - -//end rewbs.mixPaste - - -void CViewPattern::OnEditPasteFlood() -//----------------------------------- -{ - CModDoc *pModDoc = GetDocument(); - - if (pModDoc && IsEditingEnabled_bmsg()) - { - pModDoc->PastePattern(m_nPattern, m_dwBeginSel, false, false, true); - InvalidatePattern(FALSE); - SetFocus(); - } -} - - void CViewPattern::OnLButtonDown(UINT nFlags, CPoint point) //-------------------------------------------------- { @@ -3370,7 +3313,7 @@ case VIEWMSG_PASTEPATTERN: { CModDoc *pModDoc = GetDocument(); - if (pModDoc) pModDoc->PastePattern(m_nPattern, 0, false); + if (pModDoc) pModDoc->PastePattern(m_nPattern, 0, pm_overwrite); } break; @@ -4838,6 +4781,7 @@ AppendMenu(hMenu, MF_STRING, ID_EDIT_PASTE, "Paste\t" + ih->GetKeyTextFromCommand(kcEditPaste)); AppendMenu(hMenu, MF_STRING, ID_EDIT_MIXPASTE, "Mix Paste\t" + ih->GetKeyTextFromCommand(kcEditMixPaste)); AppendMenu(hMenu, MF_STRING, ID_EDIT_PASTEFLOOD, "Paste Flood\t" + ih->GetKeyTextFromCommand(kcEditPasteFlood)); + AppendMenu(hMenu, MF_STRING, ID_EDIT_PUSHFORWARDPASTE, "Push Forward Paste\t" + ih->GetKeyTextFromCommand(kcEditPushForwardPaste)); DWORD greyed = pModDoc->GetPatternUndo()->CanUndo()?FALSE:MF_GRAYED; if (!greyed || !(CMainFrame::m_dwPatternSetup&PATTERN_OLDCTXMENUSTYLE)) { @@ -5216,3 +5160,17 @@ CSplitKeyboadSettings dlg(CMainFrame::GetMainFrame(), pSndFile, pModDoc->GetSplitKeyboardSettings()); dlg.DoModal(); } + + +void CViewPattern::ExecutePaste(enmPatternPasteModes pasteMode) +//------------------------------------------------------------- +{ + CModDoc *pModDoc = GetDocument(); + + if (pModDoc && IsEditingEnabled_bmsg()) + { + pModDoc->PastePattern(m_nPattern, m_dwBeginSel, pasteMode); + InvalidatePattern(FALSE); + SetFocus(); + } +} Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/View_pat.h 2009-12-05 19:44:47 UTC (rev 435) @@ -199,6 +199,8 @@ void TogglePluginEditor(int chan); //rewbs.patPlugName + void ExecutePaste(enmPatternPasteModes pasteMode); + public: //{{AFX_VIRTUAL(CViewPattern) virtual void OnDraw(CDC *); @@ -225,10 +227,13 @@ afx_msg void OnKillFocus(CWnd *pNewWnd); afx_msg void OnEditCut(); afx_msg void OnEditCopy(); - afx_msg void OnEditPaste(); - afx_msg void OnEditMixPaste(); //rewbs.mixPaste - afx_msg void OnEditMixPasteITStyle(); //rewbs.mixPaste - afx_msg void OnEditPasteFlood(); + + afx_msg void OnEditPaste() {ExecutePaste(pm_overwrite);}; + afx_msg void OnEditMixPaste() {ExecutePaste(pm_mixpaste);}; + afx_msg void OnEditMixPasteITStyle() {ExecutePaste(pm_mixpaste_it);}; + afx_msg void OnEditPasteFlood() {ExecutePaste(pm_pasteflood);}; + afx_msg void OnEditPushForwardPaste() {ExecutePaste(pm_pushforwardpaste);}; + afx_msg void OnClearSelection(bool ITStyle=false, RowMask sb = DefaultRowMask); //rewbs.customKeys afx_msg void OnGrowSelection(); //rewbs.customKeys afx_msg void OnShrinkSelection(); //rewbs.customKeys Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-12-05 19:44:47 UTC (rev 435) @@ -442,20 +442,20 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,31,55,10 - COMBOBOX IDC_COMBO_INSTRUMENT,18,30,96,137,CBS_DROPDOWNLIST | WS_VSCROLL - CTEXT "Row Spacing",IDC_STATIC,162,32,42,8,SS_CENTERIMAGE - EDITTEXT IDC_EDIT_SPACING,210,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP - CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,230,30,11,11 + CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,32,55,8 + COMBOBOX IDC_COMBO_INSTRUMENT,18,30,102,137,CBS_DROPDOWNLIST | WS_VSCROLL + CTEXT "Row Spacing",IDC_STATIC,168,32,42,8,SS_CENTERIMAGE + EDITTEXT IDC_EDIT_SPACING,216,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP + CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,236,30,11,11 PUSHBUTTON "<<",IDC_BUTTON2,3,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE PUSHBUTTON ">>",IDC_BUTTON1,15,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE LTEXT "Pattern Name",IDC_STATIC,384,32,48,8,SS_CENTERIMAGE - EDITTEXT IDC_EDIT_PATTERNNAME,439,29,108,12,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_PATTERNNAME,439,30,108,12,ES_AUTOHSCROLL CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,370,18 CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,6,30,11,12 - PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,120,30,33,13,0,WS_EX_STATICEDGE + PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,126,30,33,13,0,WS_EX_STATICEDGE GROUPBOX "",IDC_STATIC,3,22,369,24 - CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,31,57,10 + CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,32,57,8 EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,3,65,28,12,ES_AUTOHSCROLL | ES_READONLY CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,16,70,11,11 EDITTEXT IDC_EDIT_SEQUENCE_NAME,439,8,108,12,ES_AUTOHSCROLL @@ -1836,6 +1836,8 @@ MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE MENUITEM "&Mix Paste\tCtrl+M", ID_EDIT_PASTE_SPECIAL + MENUITEM "Paste Flood", ID_EDIT_PASTEFLOOD + MENUITEM "Push Forward Paste", ID_EDIT_PUSHFORWARDPASTE MENUITEM "Select &All\tCtrl+5", ID_EDIT_SELECT_ALL MENUITEM SEPARATOR MENUITEM "C&leanup...", ID_EDIT_CLEANUP Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-12-05 13:19:54 UTC (rev 434) +++ trunk/OpenMPT/mptrack/resource.h 2009-12-05 19:44:47 UTC (rev 435) @@ -1156,6 +1156,7 @@ #define ID_MODTREE_DUPLICATE 59236 #define ID_MODTREE_INSERT 59237 #define ID_MODTREE_SWITCHTO 59238 +#define ID_EDIT_PUSHFORWARDPASTE 59239 // Next default values for new objects // @@ -1163,7 +1164,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 524 -#define _APS_NEXT_COMMAND_VALUE 59239 +#define _APS_NEXT_COMMAND_VALUE 59240 #define _APS_NEXT_CONTROL_VALUE 2412 #define _APS_NEXT_SYMED_VALUE 901 #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-12-06 22:13:40
|
Revision: 438 http://modplug.svn.sourceforge.net/modplug/?rev=438&view=rev Author: saga-games Date: 2009-12-06 22:13:32 +0000 (Sun, 06 Dec 2009) Log Message: ----------- [Fix] Mod Creation: Filling the whole mod title field with null bytes on creation to avoid funky characters in other programs [Fix] Pattern editor: PCNote handling was missing in OnClearSelection, so it was possible to delete the effect column only partly [Imp] Pattern editor: When using the MPTM format, plugin param changes are written to the pattern as PC Notes Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-06 19:22:50 UTC (rev 437) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-06 22:13:32 UTC (rev 438) @@ -639,6 +639,7 @@ m_SndFile.Patterns.Insert(0, 64); } + memset(m_SndFile.m_szNames, 0, sizeof(m_SndFile.m_szNames)); strcpy(m_SndFile.m_szNames[0], "untitled"); m_SndFile.m_nMusicTempo = m_SndFile.m_nDefaultTempo = 125; @@ -3388,11 +3389,7 @@ void CModDoc::RecordParamChange(int plugSlot, long paramIndex) //------------------------------------------------------ { - CVstPlugin *pPlug = (CVstPlugin*)m_SndFile.m_MixPlugins[plugSlot].pMixPlugin; - if (pPlug) { - UINT value = pPlug->GetZxxParameter(paramIndex); - SendMessageToActiveViews(WM_MOD_RECORDPARAM, paramIndex, value); - } + SendMessageToActiveViews(WM_MOD_RECORDPARAM, plugSlot, paramIndex); } void CModDoc::LearnMacro(int macroToSet, long paramToUse) Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-06 19:22:50 UTC (rev 437) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-06 22:13:32 UTC (rev 438) @@ -7,6 +7,7 @@ #include "globals.h" #include "view_pat.h" #include "ctrl_pat.h" +#include "vstplug.h" // for writing plug params to pattern #include "EffectVis.h" //rewbs.fxvis #include "OpenGLEditor.h" //rewbs.fxvis @@ -915,6 +916,7 @@ case 3: // Clear Command if (rm.command) { m->command = 0; + if(m->note == NOTE_PC || m->note == NOTE_PCS) m->SetValueEffectCol(0); } break; case 4: // Clear Command Param @@ -2936,8 +2938,9 @@ } -LRESULT CViewPattern::OnRecordPlugParamChange(WPARAM paramIndex, LPARAM value) -//-------------------------------------------------------------------------- +// record plugin parameter changes into current pattern +LRESULT CViewPattern::OnRecordPlugParamChange(WPARAM plugSlot, LPARAM paramIndex) +//------------------------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); //if (!m_bRecord || !pModDoc) { @@ -2964,35 +2967,52 @@ // TODO: Is the right plugin active? Move to a chan with the right plug // Probably won't do this - finish fluctuator implementation instead. - //Figure out which plug param (if any) is controllable using the active macro on this channel. - long activePlugParam = -1; - BYTE activeMacro = pSndFile->Chn[nChn].nActiveMacro; - CString activeMacroString = &(pSndFile->m_MidiCfg.szMidiSFXExt[activeMacro*32]); - if (pModDoc->GetMacroType(activeMacroString) == sfx_plug) { - activePlugParam = pModDoc->MacroToPlugParam(activeMacroString); - } - //If the wrong macro is active, see if we can find the right one. - //If we can, activate it for this chan by writing appropriate SFx command it. - if (activePlugParam != paramIndex) { - int foundMacro = pModDoc->FindMacroForParam(paramIndex); - if (foundMacro >= 0) { - pSndFile->Chn[nChn].nActiveMacro = foundMacro; - if (pRow->command == 0 || pRow->command == CMD_SMOOTHMIDI || pRow->command == CMD_MIDI) { //we overwrite existing Zxx and \xx only. - pRow->command = (pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))?CMD_S3MCMDEX:CMD_MODCMDEX;; - pRow->param = 0xF0 + (foundMacro&0x0F); - InvalidateRow(); - } + CVstPlugin *pPlug = (CVstPlugin*)pSndFile->m_MixPlugins[plugSlot].pMixPlugin; + if (pPlug == nullptr) return 0; + if(pSndFile->GetType() == MOD_TYPE_MPT) + { + // MPTM: Use PC Notes + + // only overwrite existing PC Notes + if(pRow->IsEmpty() || pRow->note == NOTE_PC || pRow->note == NOTE_PCS) + { + pRow->Set(NOTE_PCS, plugSlot + 1, paramIndex, static_cast<uint16>(pPlug->GetParameter(paramIndex) * MODCOMMAND::maxColumnValue)); + InvalidateRow(); } - } + } else + { + // Other formats: Use MIDI macros + //Figure out which plug param (if any) is controllable using the active macro on this channel. + long activePlugParam = -1; + BYTE activeMacro = pSndFile->Chn[nChn].nActiveMacro; + CString activeMacroString = &(pSndFile->m_MidiCfg.szMidiSFXExt[activeMacro*32]); + if (pModDoc->GetMacroType(activeMacroString) == sfx_plug) { + activePlugParam = pModDoc->MacroToPlugParam(activeMacroString); + } + //If the wrong macro is active, see if we can find the right one. + //If we can, activate it for this chan by writing appropriate SFx command it. + if (activePlugParam != paramIndex) { + int foundMacro = pModDoc->FindMacroForParam(paramIndex); + if (foundMacro >= 0) { + pSndFile->Chn[nChn].nActiveMacro = foundMacro; + if (pRow->command == 0 || pRow->command == CMD_SMOOTHMIDI || pRow->command == CMD_MIDI) { //we overwrite existing Zxx and \xx only. + pRow->command = (pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))?CMD_S3MCMDEX:CMD_MODCMDEX;; + pRow->param = 0xF0 + (foundMacro&0x0F); + InvalidateRow(); + } + } + } - //Write the data, but we only overwrite if the command is a macro anyway. - if (pRow->command == 0 || pRow->command == CMD_SMOOTHMIDI || pRow->command == CMD_MIDI) { - pRow->command = CMD_SMOOTHMIDI; - pRow->param = value; - InvalidateRow(); + //Write the data, but we only overwrite if the command is a macro anyway. + if (pRow->command == CMD_NONE || pRow->command == CMD_SMOOTHMIDI || pRow->command == CMD_MIDI) { + pRow->command = CMD_SMOOTHMIDI; + pRow->param = pPlug->GetZxxParameter(paramIndex); + InvalidateRow(); + } + } return 0; @@ -4471,7 +4491,7 @@ default: p->Clear(); //If not specified, delete them all! :) } if((field == 3 || field == 4) && (p->note == NOTE_PC || p->note == NOTE_PCS)) - p->command = p->param = 0; + p->SetValueEffectCol(0); if(IsEditingEnabled_bmsg()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-12-08 20:28:25
|
Revision: 439 http://modplug.svn.sourceforge.net/modplug/?rev=439&view=rev Author: saga-games Date: 2009-12-08 19:42:46 +0000 (Tue, 08 Dec 2009) Log Message: ----------- [Fix] Mainframe: Split keyboard settings menu entry was always locked. [Imp] Mainframe: Extended paste mechanisms (mix, flood, push forward) have been moved into a sub menu [Imp] Mainframe: Improved accelerator keys in the edit menu [Imp] Treeview: If there's only one sequence, prepend "Sequence:" text if it has a custom name. Modified Paths: -------------- trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2009-12-06 22:13:32 UTC (rev 438) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2009-12-08 19:42:46 UTC (rev 439) @@ -411,7 +411,7 @@ CString CInputHandler::GetMenuText(UINT id) { CString s; - CommandID c; + CommandID c = kcNull; switch(id) { @@ -439,14 +439,16 @@ case ID_EDIT_CUT: s="Cu&t\t"; c=kcEditCut; break; case ID_EDIT_COPY: s="&Copy\t"; c=kcEditCopy; break; case ID_EDIT_PASTE: s="&Paste\t"; c=kcEditPaste; break; - case ID_EDIT_PASTE_SPECIAL: s="&Mix Paste\t"; c=kcEditMixPaste; break; - case ID_EDIT_PASTEFLOOD: s="Paste Fl&ood\t"; c=kcEditPasteFlood; break; - case ID_EDIT_PUSHFORWARDPASTE: s="Push For&ward Paste\t"; c=kcEditPushForwardPaste; break; - case ID_EDIT_SELECT_ALL: s="&Select All\t"; c=kcEditSelectAll; break; + case ID_EDIT_SELECT_ALL: s="Select &All\t"; c=kcEditSelectAll; break; + case ID_EDIT_CLEANUP: s="C&leanup"; break; case ID_EDIT_FIND: s="&Find\t"; c=kcEditFind; break; case ID_EDIT_FINDNEXT: s="Find &Next\t"; c=kcEditFindNext; break; case ID_EDIT_GOTO_MENU: s="&Goto\t"; c=kcPatternGoto; break; case ID_EDIT_SPLITKEYBOARDSETTINGS: s="Split &Keyboard Settings\t"; c=kcShowSplitKeyboardSettings; break; + // "Paste Special" sub menu + case ID_EDIT_PASTE_SPECIAL: s="&Mix Paste\t"; c=kcEditMixPaste; break; + case ID_EDIT_PASTEFLOOD: s="Paste Fl&ood\t"; c=kcEditPasteFlood; break; + case ID_EDIT_PUSHFORWARDPASTE: s="&Push Forward Paste\t"; c=kcEditPushForwardPaste; break; case ID_VIEW_GLOBALS: s="&General\t"; c=kcViewGeneral; break; case ID_VIEW_SAMPLES: s="&Samples\t"; c=kcViewSamples; break; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-06 22:13:32 UTC (rev 438) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-08 19:42:46 UTC (rev 439) @@ -68,6 +68,7 @@ // -> CODE#0012 // -> DESC="midi keyboard split" ON_COMMAND(ID_EDIT_SPLITRECSELECT, OnSplitRecordSelect) + ON_COMMAND(ID_EDIT_SPLITKEYBOARDSETTINGS, SetSplitKeyboardSettings) // -! NEW_FEATURE#0012 ON_COMMAND(ID_EDIT_UNDO, OnEditUndo) ON_COMMAND(ID_PATTERN_CHNRESET, OnChannelReset) Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-12-06 22:13:32 UTC (rev 438) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-12-08 19:42:46 UTC (rev 439) @@ -746,7 +746,10 @@ if(((hintFlagPart == HINT_SEQNAMES) && pSndFile->Order.GetNumSequences() == 1) || adjustParentNode) { CString sSeqName = pSndFile->Order.GetSequence(0).m_sName; - if(sSeqName.IsEmpty() || pSndFile->Order.GetNumSequences() > 1) sSeqName = "Sequence"; + if(sSeqName.IsEmpty() || pSndFile->Order.GetNumSequences() > 1) + sSeqName = "Sequence"; + else + sSeqName = "Sequence: " + sSeqName; SetItem(pInfo->hOrders, TVIF_TEXT, sSeqName, 0, 0, 0, 0, 0); } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-12-06 22:13:32 UTC (rev 438) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-12-08 19:42:46 UTC (rev 439) @@ -442,26 +442,26 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,32,55,8 - COMBOBOX IDC_COMBO_INSTRUMENT,18,30,102,137,CBS_DROPDOWNLIST | WS_VSCROLL - CTEXT "Row Spacing",IDC_STATIC,168,32,42,8,SS_CENTERIMAGE - EDITTEXT IDC_EDIT_SPACING,216,30,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP - CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,236,30,11,11 + CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,33,55,8 + COMBOBOX IDC_COMBO_INSTRUMENT,18,31,102,137,CBS_DROPDOWNLIST | WS_VSCROLL + CTEXT "Row Spacing",IDC_STATIC,168,33,42,8,SS_CENTERIMAGE + EDITTEXT IDC_EDIT_SPACING,216,31,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP + CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,236,31,11,11 PUSHBUTTON "<<",IDC_BUTTON2,3,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE PUSHBUTTON ">>",IDC_BUTTON1,15,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE - LTEXT "Pattern Name",IDC_STATIC_PATTERNNAME,384,32,48,8,SS_CENTERIMAGE - EDITTEXT IDC_EDIT_PATTERNNAME,439,30,108,12,ES_AUTOHSCROLL + LTEXT "Pattern Name",IDC_STATIC_PATTERNNAME,384,33,48,8,SS_CENTERIMAGE + EDITTEXT IDC_EDIT_PATTERNNAME,439,31,108,12,ES_AUTOHSCROLL CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,370,18 - CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,6,30,11,12 - PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,126,30,33,13,0,WS_EX_STATICEDGE - GROUPBOX "",IDC_STATIC,3,22,369,24 - CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,32,57,8 + CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,6,31,11,12 + PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,126,31,33,13,0,WS_EX_STATICEDGE + GROUPBOX "",IDC_STATIC,3,23,369,24 + CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,33,57,8 EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,3,65,28,12,ES_AUTOHSCROLL | ES_READONLY CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,16,70,11,11 EDITTEXT IDC_EDIT_SEQUENCE_NAME,439,8,108,12,ES_AUTOHSCROLL CTEXT "Sequence Name",IDC_STATIC_SEQUENCE_NAME,384,10,53,8,SS_CENTERIMAGE GROUPBOX "",IDC_STATIC_SEQUENCE_NAME_FRAME,378,0,174,24 - GROUPBOX "",IDC_STATIC,378,22,174,24 + GROUPBOX "",IDC_STATIC,378,23,174,24 END IDD_CONTROL_SAMPLES DIALOGEX 0, 0, 544, 106 @@ -1835,17 +1835,20 @@ MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE - MENUITEM "&Mix Paste\tCtrl+M", ID_EDIT_PASTE_SPECIAL - MENUITEM "Paste Flood", ID_EDIT_PASTEFLOOD - MENUITEM "Push Forward Paste", ID_EDIT_PUSHFORWARDPASTE + POPUP "Paste &Special" + BEGIN + MENUITEM "&Mix Paste\tCtrl+M", ID_EDIT_PASTE_SPECIAL + MENUITEM "Paste &Flood", ID_EDIT_PASTEFLOOD + MENUITEM "&Push Forward Paste", ID_EDIT_PUSHFORWARDPASTE + END MENUITEM "Select &All\tCtrl+5", ID_EDIT_SELECT_ALL MENUITEM SEPARATOR MENUITEM "C&leanup...", ID_EDIT_CLEANUP MENUITEM SEPARATOR MENUITEM "&Find\tCtrl+F", ID_EDIT_FIND - MENUITEM "Find Next\tF3", ID_EDIT_FINDNEXT - MENUITEM "Go to...", ID_EDIT_GOTO_MENU - MENUITEM "Split Keyboard Settings", ID_EDIT_SPLITKEYBOARDSETTINGS + MENUITEM "Find &Next\tF3", ID_EDIT_FINDNEXT + MENUITEM "&Goto", ID_EDIT_GOTO_MENU + MENUITEM "Split &Keyboard Settings", ID_EDIT_SPLITKEYBOARDSETTINGS END POPUP "&View" BEGIN Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-12-06 22:13:32 UTC (rev 438) +++ trunk/OpenMPT/mptrack/resource.h 2009-12-08 19:42:46 UTC (rev 439) @@ -1159,6 +1159,7 @@ #define ID_MODTREE_SWITCHTO 59238 #define ID_EDIT_PUSHFORWARDPASTE 59239 #define ID_EDIT_SPLITKEYBOARDSETTINGS 59240 +#define ID_EDIT_PASTESPECIAL 59241 // Next default values for new objects // @@ -1166,7 +1167,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 524 -#define _APS_NEXT_COMMAND_VALUE 59241 +#define _APS_NEXT_COMMAND_VALUE 59242 #define _APS_NEXT_CONTROL_VALUE 2413 #define _APS_NEXT_SYMED_VALUE 901 #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-12-18 21:51:51
|
Revision: 444 http://modplug.svn.sourceforge.net/modplug/?rev=444&view=rev Author: saga-games Date: 2009-12-18 21:51:37 +0000 (Fri, 18 Dec 2009) Log Message: ----------- [Fix] When using a Load/Save dialog, MPT's key handler will be disabled so that common shortcuts like F2, Ctrl+C, Ctrl+V, Esc. etc. can still be used. [Fix] General tab: VST Preset Load/save buttons didn't use default directories. [Ref] Built a nice abstraction of the CFileDialog to realize the first fix. Now CFileDialog is used in only on place, and using Load/Save dialogs should be a lot easier now - especially when dealing with multiple file selections. Modified Paths: -------------- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/KeyConfigDlg.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/TuningDialog.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -110,48 +110,35 @@ VOID CAbstractVstEditor::OnLoadPreset() //------------------------------------- { - if (m_pVstPlugin) - { - CFileDialog dlg(TRUE, "fxp", NULL, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_PLUGINPRESETS); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; + if(!m_pVstPlugin) return; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "fxp", "", + "VST Program (*.fxp)|*.fxp||", + CMainFrame::GetWorkingDirectory(DIR_PLUGINPRESETS)); + if(files.abort) return; - if (!(dlg.DoModal() == IDOK)) return; + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_PLUGINPRESETS, true); - CString sFile = dlg.GetPathName(); - CMainFrame::SetWorkingDirectory(sFile, DIR_PLUGINPRESETS, true); - - //TODO: exception handling to distinguish errors at this level. - if (!(m_pVstPlugin->LoadProgram(sFile))) - ::AfxMessageBox("Error loading preset. Are you sure it is for this plugin?"); - } + //TODO: exception handling to distinguish errors at this level. + if (!(m_pVstPlugin->LoadProgram(files.first_file.c_str()))) + ::AfxMessageBox("Error loading preset. Are you sure it is for this plugin?"); } VOID CAbstractVstEditor::OnSavePreset() //------------------------------------- { - if (m_pVstPlugin) - { - CFileDialog dlg(FALSE, "fxp", NULL, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_PLUGINPRESETS); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; - if (!(dlg.DoModal() == IDOK)) return; + if(!m_pVstPlugin) return; - CString sFile = dlg.GetPathName(); - CMainFrame::SetWorkingDirectory(sFile, DIR_PLUGINPRESETS, true); + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "fxp", "", + "VST Program (*.fxp)|*.fxp||", + CMainFrame::GetWorkingDirectory(DIR_PLUGINPRESETS)); + if(files.abort) return; - //TODO: exception handling - if (!(m_pVstPlugin->SaveProgram(sFile))) - ::AfxMessageBox("Error saving preset."); - } - return; + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_PLUGINPRESETS, true); + + //TODO: exception handling + if (!(m_pVstPlugin->SaveProgram(files.first_file.c_str()))) + ::AfxMessageBox("Error saving preset."); } VOID CAbstractVstEditor::OnRandomizePreset() Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -1529,31 +1529,22 @@ void CCtrlInstruments::OnInstrumentOpen() //--------------------------------------- { - CFileDialog dlg(TRUE, - NULL, - NULL, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT, - "All Instruments|*.xi;*.pat;*.iti;*.wav;*.aif;*.aiff|" - "FastTracker II Instruments (*.xi)|*.xi|" - "GF1 Patches (*.pat)|*.pat|" - "Impulse Tracker Instruments (*.iti)|*.iti|" - "All Files (*.*)|*.*||", - this); + static int nLastIndex = 0; - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_INSTRUMENTS); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "", "", + "All Instruments|*.xi;*.pat;*.iti;*.wav;*.aif;*.aiff|" + "FastTracker II Instruments (*.xi)|*.xi|" + "GF1 Patches (*.pat)|*.pat|" + "Impulse Tracker Instruments (*.iti)|*.iti|" + "All Files (*.*)|*.*||", + CMainFrame::GetWorkingDirectory(DIR_INSTRUMENTS), + true, + &nLastIndex); + if(files.abort) return; - const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size. - vector<char> filenameBuffer(bufferSize, 0); - dlg.GetOFN().lpstrFile = &filenameBuffer[0]; - dlg.GetOFN().nMaxFile = bufferSize; + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_INSTRUMENTS, true); - if (dlg.DoModal() != IDOK) return; - - POSITION pos = dlg.GetStartPosition(); - size_t counter = 0; - while(pos != NULL) + for(size_t counter = 0; counter < files.filenames.size(); counter++) { //If loading multiple instruments, advancing to next instrument and creating //new instrument if necessary. @@ -1568,12 +1559,10 @@ OnInstrumentNew(); } - if(!OpenInstrument(dlg.GetNextPathName(pos))) + if(!OpenInstrument(files.filenames[counter].c_str())) ErrorBox(IDS_ERR_FILEOPEN, this); - - counter++; } - filenameBuffer.clear(); + if (m_pParent) m_pParent->InstrumentChanged(m_nInstrument); SwitchToView(); } @@ -1597,43 +1586,29 @@ } SanitizeFilename(szFileName); -// -> CODE#0019 -// -> DESC="correctly load ITI & XI instruments sample note map" -// CFileDialog dlg(FALSE, (m_pSndFile->m_nType & MOD_TYPE_IT) ? "iti" : "xi", -// szFileName, -// OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, -// "FastTracker II Instruments (*.xi)|*.xi|" -// "Impulse Tracker Instruments (*.iti)|*.iti||", -// this); - CFileDialog dlg(FALSE, (m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) ? "iti" : "xi", - szFileName, - OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - ( m_pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT) ? "Impulse Tracker Instruments (*.iti)|*.iti|" - "FastTracker II Instruments (*.xi)|*.xi||" - : "FastTracker II Instruments (*.xi)|*.xi|" - "Impulse Tracker Instruments (*.iti)|*.iti||" ), - this); -// -! BUG_FIX#0019 - + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, (m_pSndFile->GetType() == MOD_TYPE_XM) ? "xi" : "iti", szFileName, + (m_pSndFile->GetType() == MOD_TYPE_XM) ? + "FastTracker II Instruments (*.xi)|*.xi|" + "Impulse Tracker Instruments (*.iti)|*.iti||" : + "Impulse Tracker Instruments (*.iti)|*.iti|" + "FastTracker II Instruments (*.xi)|*.xi||", + CMainFrame::GetWorkingDirectory(DIR_INSTRUMENTS)); + if(files.abort) return; - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_INSTRUMENTS); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; - - if (dlg.DoModal() != IDOK) return; BeginWaitCursor(); - _splitpath(dlg.GetPathName(), drive, path, NULL, ext); + + _splitpath(files.first_file.c_str(), drive, path, NULL, ext); BOOL bOk = FALSE; if (!lstrcmpi(ext, ".iti")) - bOk = m_pSndFile->SaveITIInstrument(m_nInstrument, dlg.GetPathName()); + bOk = m_pSndFile->SaveITIInstrument(m_nInstrument, files.first_file.c_str()); else - bOk = m_pSndFile->SaveXIInstrument(m_nInstrument, dlg.GetPathName()); + bOk = m_pSndFile->SaveXIInstrument(m_nInstrument, files.first_file.c_str()); // -> CODE#0023 // -> DESC="IT project files (.itp)" - int n = strlen(dlg.GetPathName()); + int n = strlen(files.first_file.c_str()); if(n > _MAX_PATH) n = _MAX_PATH; - strncpy(m_pSndFile->m_szInstrumentPath[m_nInstrument-1],dlg.GetPathName(),n); + strncpy(m_pSndFile->m_szInstrumentPath[m_nInstrument-1], files.first_file.c_str(),n); m_pSndFile->instrumentModified[m_nInstrument-1] = FALSE; // -! NEW_FEATURE#0023 @@ -1643,7 +1618,7 @@ strcpy(szFileName, drive); strcat(szFileName, path); - CMainFrame::SetWorkingDirectory(szFileName, DIR_INSTRUMENTS); + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_INSTRUMENTS); // -> CODE#0023 // -> DESC="IT project files (.itp)" Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -902,38 +902,25 @@ //------------------------------- { static int nLastIndex = 0; - CFileDialog dlg(TRUE, - NULL, - NULL, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT, - "All Samples|*.wav;*.pat;*.s3i;*.smp;*.snd;*.raw;*.xi;*.aif;*.aiff;*.its;*.8sv;*.8svx;*.svx;*.pcm|" - "Wave Files (*.wav)|*.wav|" - "XI Samples (*.xi)|*.xi|" - "Impulse Tracker Samples (*.its)|*.its|" - "ScreamTracker Samples (*.s3i,*.smp)|*.s3i;*.smp|" - "GF1 Patches (*.pat)|*.pat|" - "AIFF Files (*.aiff;*.8svx)|*.aif;*.aiff;*.8sv;*.8svx;*.svx|" - "Raw Samples (*.raw,*.snd,*.pcm)|*.raw;*.snd;*.pcm|" - "All Files (*.*)|*.*||", - this); + + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "", "", + "All Samples|*.wav;*.pat;*.s3i;*.smp;*.snd;*.raw;*.xi;*.aif;*.aiff;*.its;*.8sv;*.8svx;*.svx;*.pcm|" + "Wave Files (*.wav)|*.wav|" + "XI Samples (*.xi)|*.xi|" + "Impulse Tracker Samples (*.its)|*.its|" + "ScreamTracker Samples (*.s3i,*.smp)|*.s3i;*.smp|" + "GF1 Patches (*.pat)|*.pat|" + "AIFF Files (*.aiff;*.8svx)|*.aif;*.aiff;*.8sv;*.8svx;*.svx|" + "Raw Samples (*.raw,*.snd,*.pcm)|*.raw;*.snd;*.pcm|" + "All Files (*.*)|*.*||", + CMainFrame::GetWorkingDirectory(DIR_SAMPLES), + true, + &nLastIndex); + if(files.abort) return; - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_SAMPLES); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_SAMPLES, true); - dlg.m_ofn.nFilterIndex = nLastIndex; - const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size in MFC 7(this note was written November 2006). - vector<char> filenameBuffer(bufferSize, 0); - dlg.GetOFN().lpstrFile = &filenameBuffer[0]; - dlg.GetOFN().nMaxFile = bufferSize; - - if (dlg.DoModal() != IDOK) return; - - nLastIndex = dlg.m_ofn.nFilterIndex; - - POSITION pos = dlg.GetStartPosition(); - size_t counter = 0; - while(pos != NULL) + for(size_t counter = 0; counter < files.filenames.size(); counter++) { //If loading multiple samples, advancing to next sample and creating //new one if necessary. @@ -944,16 +931,13 @@ else m_nSample++; - if(m_nSample > m_pSndFile->GetNumSamples()) + if(m_nSample > m_pSndFile->GetNumSamples()) OnSampleNew(); } - if(!OpenSample(dlg.GetNextPathName(pos))) + if(!OpenSample(files.filenames[counter].c_str())) ErrorBox(IDS_ERR_FILEOPEN, this); - - counter++; } - filenameBuffer.clear(); SwitchToView(); } @@ -1000,24 +984,20 @@ } SanitizeFilename(szFileName); - CFileDialog dlg(FALSE, "wav", - szFileName, - OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - "Wave File (*.wav)|*.wav|" - "RAW Audio (*.raw)|*.raw||", - this); - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_SAMPLES); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; - if (dlg.DoModal() != IDOK) return; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "wav", szFileName, + "Wave File (*.wav)|*.wav|" + "RAW Audio (*.raw)|*.raw||", + CMainFrame::GetWorkingDirectory(DIR_SAMPLES)); + if(files.abort) return; + BeginWaitCursor(); TCHAR ext[_MAX_EXT]; - _splitpath(dlg.GetPathName(), NULL, NULL, NULL, ext); + _splitpath(files.first_file.c_str(), NULL, NULL, NULL, ext); bool bOk = false; UINT iMinSmp = m_nSample, iMaxSmp = m_nSample; - CString sFilename = dlg.GetPathName(), sNumberFormat; + CString sFilename = files.first_file.c_str(), sNumberFormat; if(bBatchSave) { iMinSmp = 1; @@ -1040,7 +1020,7 @@ SanitizeFilename(sSampleName); SanitizeFilename(sSampleFilename); - sFilename = dlg.GetPathName(); + sFilename = files.first_file.c_str(); sFilename.Replace("%sample_number%", sSampleNumber); sFilename.Replace("%sample_filename%", sSampleFilename); sFilename.Replace("%sample_name%", sSampleName); @@ -1058,7 +1038,7 @@ ErrorBox(IDS_ERR_SAVESMP, this); } else { - CMainFrame::SetWorkingDirectory(dlg.GetPathName(), DIR_SAMPLES, true); + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_SAMPLES, true); } SwitchToView(); } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -646,37 +646,29 @@ void COptionsKeyboard::OnLoad() { - CFileDialog dlg(TRUE, "mkb", m_sFullPathName, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "OpenMPT Key Bindings (*.mkb)|*.mkb||", theApp.m_pMainWnd); - if (CMainFrame::m_szKbdFile[0]) - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szKbdFile; + std::string filename = m_sFullPathName; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "mkb", filename, + "OpenMPT Key Bindings (*.mkb)|*.mkb||", + CMainFrame::m_szKbdFile); + if(files.abort) return; - if (dlg.DoModal() == IDOK) - { - m_sFullPathName=dlg.GetPathName(); - plocalCmdSet->LoadFile(m_sFullPathName); - ForceUpdateGUI(); - TentativeSetToDefaultFile(m_sFullPathName); - } - + m_sFullPathName = files.first_file.c_str(); + plocalCmdSet->LoadFile(m_sFullPathName); + ForceUpdateGUI(); + TentativeSetToDefaultFile(m_sFullPathName); } void COptionsKeyboard::OnSave() { - CFileDialog dlg(FALSE, "mkb", m_sFullPathName, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "OpenMPT Key Bindings (*.mkb)|*.mkb||", theApp.m_pMainWnd); - if (CMainFrame::m_szKbdFile[0]) - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szKbdFile; - - if (dlg.DoModal() == IDOK) - { - m_sFullPathName=dlg.GetPathName(); - plocalCmdSet->SaveFile(m_sFullPathName, m_bDebugSave.GetCheck()); - TentativeSetToDefaultFile(m_sFullPathName); - } - + std::string filename = m_sFullPathName; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "mkb", filename, + "OpenMPT Key Bindings (*.mkb)|*.mkb||", + CMainFrame::m_szKbdFile); + if(files.abort) return; + + m_sFullPathName = files.first_file.c_str(); + plocalCmdSet->SaveFile(m_sFullPathName, m_bDebugSave.GetCheck()); + TentativeSetToDefaultFile(m_sFullPathName); } bool COptionsKeyboard::TentativeSetToDefaultFile(CString m_sFullPathName) Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -132,7 +132,6 @@ BOOL CMainFrame::gbPatternVUMeters = FALSE; BOOL CMainFrame::gbPatternPluginNames = TRUE; DWORD CMainFrame::gdwNotificationType = MPTNOTIFY_DEFAULT; -UINT CMainFrame::m_nFilterIndex = 0; UINT CMainFrame::m_nLastOptionsPage = 0; BOOL CMainFrame::gbMdiMaximize = FALSE; bool CMainFrame::gbShowHackControls = false; @@ -2418,45 +2417,40 @@ void CMainFrame::OnAddDlsBank() //----------------------------- { - CFileDialog dlg(TRUE, - ".dls", - NULL, - OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, - "All Sound Banks|*.dls;*.sbk;*.sf2;*.mss|" - "Downloadable Sounds Banks (*.dls)|*.dls;*.mss|" - "SoundFont 2.0 Banks (*.sf2)|*.sbk;*.sf2|" - "All Files (*.*)|*.*||", - this); - if (dlg.DoModal() == IDOK) + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "dls", "", + "All Sound Banks|*.dls;*.sbk;*.sf2;*.mss|" + "Downloadable Sounds Banks (*.dls)|*.dls;*.mss|" + "SoundFont 2.0 Banks (*.sf2)|*.sbk;*.sf2|" + "All Files (*.*)|*.*||", + "", + true); + if(files.abort) return; + + BeginWaitCursor(); + for(size_t counter = 0; counter < files.filenames.size(); counter++) { - BeginWaitCursor(); - CTrackApp::AddDLSBank(dlg.GetPathName()); - m_wndTree.RefreshDlsBanks(); - EndWaitCursor(); + CTrackApp::AddDLSBank(files.filenames[counter].c_str()); } + m_wndTree.RefreshDlsBanks(); + EndWaitCursor(); } void CMainFrame::OnImportMidiLib() //-------------------------------- { - CFileDialog dlg(TRUE, - NULL, - NULL, - OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, - "Text and INI files (*.txt,*.ini)|*.txt;*.ini;*.dls;*.sf2;*.sbk|" - "Downloadable Sound Banks (*.dls)|*.dls;*.mss|" - "SoundFont 2.0 banks (*.sf2)|*.sbk;*.sf2|" - "Gravis UltraSound (ultrasnd.ini)|ultrasnd.ini|" - "All Files (*.*)|*.*||", - this); - if (dlg.DoModal() == IDOK) - { - BeginWaitCursor(); - CTrackApp::ImportMidiConfig(dlg.GetPathName()); - m_wndTree.RefreshMidiLibrary(); - EndWaitCursor(); - } + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "", "", + "Text and INI files (*.txt,*.ini)|*.txt;*.ini;*.dls;*.sf2;*.sbk|" + "Downloadable Sound Banks (*.dls)|*.dls;*.mss|" + "SoundFont 2.0 banks (*.sf2)|*.sbk;*.sf2|" + "Gravis UltraSound (ultrasnd.ini)|ultrasnd.ini|" + "All Files (*.*)|*.*||"); + if(files.abort) return; + + BeginWaitCursor(); + CTrackApp::ImportMidiConfig(files.first_file.c_str()); + m_wndTree.RefreshMidiLibrary(); + EndWaitCursor(); } Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-12-18 21:51:37 UTC (rev 444) @@ -368,7 +368,7 @@ CString m_csRegSettings; CString m_csRegWindow; // Globals - static UINT m_nLastOptionsPage, m_nFilterIndex; + static UINT m_nLastOptionsPage; static BOOL gbMdiMaximize; static bool gbShowHackControls; static LONG glCtrlWindowHeight, glTreeWindowWidth, glTreeSplitRatio; Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -22,12 +22,12 @@ static char THIS_FILE[] = __FILE__; #endif -const TCHAR* const FileFilterMOD = TEXT("ProTracker Modules (*.mod)|*.mod||"); -const TCHAR* const FileFilterXM = TEXT("FastTracker Modules (*.xm)|*.xm||"); -const TCHAR* const FileFilterS3M = TEXT("ScreamTracker Modules (*.s3m)|*.s3m||"); -const TCHAR* const FileFilterIT = TEXT("Impulse Tracker Modules (*.it)|*.it||"); -const TCHAR* const FileFilterITP = TEXT("Impulse Tracker Projects (*.itp)|*.itp||"); -const TCHAR* const FileFilterMPT = TEXT("OpenMPT Modules (*.mptm)|*.mptm||"); +const std::string FileFilterMOD = _T("ProTracker Modules (*.mod)|*.mod||"); +const std::string FileFilterXM = _T("FastTracker Modules (*.xm)|*.xm||"); +const std::string FileFilterS3M = _T("ScreamTracker Modules (*.s3m)|*.s3m||"); +const std::string FileFilterIT = _T("Impulse Tracker Modules (*.it)|*.it||"); +const std::string FileFilterITP = _T("Impulse Tracker Projects (*.itp)|*.itp||"); +const std::string FileFilterMPT = _T("OpenMPT Modules (*.mptm)|*.mptm||"); ///////////////////////////////////////////////////////////////////////////// // CModDoc @@ -489,25 +489,25 @@ CHAR s[_MAX_PATH] = ""; CHAR path[_MAX_PATH]="", drive[_MAX_DRIVE]=""; CHAR fname[_MAX_FNAME]="", fext[_MAX_EXT]=""; - LPCSTR lpszFilter = NULL, lpszDefExt = NULL; + std::string extFilter = "", defaultExtension = ""; switch(m_SndFile.GetType()) { case MOD_TYPE_MOD: MsgBoxHidable(ModCompatibilityExportTip); - lpszDefExt = "mod"; - lpszFilter = FileFilterMOD; + defaultExtension = "mod"; + extFilter = FileFilterMOD; strcpy(fext, ".mod"); break; case MOD_TYPE_S3M: - lpszDefExt = "s3m"; - lpszFilter = FileFilterS3M; + defaultExtension = "s3m"; + extFilter = FileFilterS3M; strcpy(fext, ".s3m"); break; case MOD_TYPE_XM: MsgBoxHidable(XMCompatibilityExportTip); - lpszDefExt = "xm"; - lpszFilter = FileFilterXM; + defaultExtension = "xm"; + extFilter = FileFilterXM; strcpy(fext, ".xm"); break; case MOD_TYPE_IT: @@ -517,22 +517,22 @@ // lpszFilter = "Impulse Tracker Modules (*.it)|*.it||"; // strcpy(fext, ".it"); if(m_SndFile.m_dwSongFlags & SONG_ITPROJECT){ - lpszDefExt = "itp"; - lpszFilter = FileFilterITP; + defaultExtension = "itp"; + extFilter = FileFilterITP; strcpy(fext, ".itp"); } else { MsgBoxHidable(ItCompatibilityExportTip); - lpszDefExt = "it"; - lpszFilter = FileFilterIT; + defaultExtension = "it"; + extFilter = FileFilterIT; strcpy(fext, ".it"); } // -! NEW_FEATURE#0023 break; case MOD_TYPE_MPT: - lpszDefExt = "mptm"; - lpszFilter = FileFilterMPT; + defaultExtension = "mptm"; + extFilter = FileFilterMPT; strcpy(fext, ".mptm"); break; default: @@ -547,18 +547,15 @@ strcat(s, path); strcat(s, fname); strcat(s, fext); - CFileDialog dlg(FALSE, lpszDefExt, s, - OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - lpszFilter, - theApp.m_pMainWnd); + + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, defaultExtension, s, + extFilter, + CMainFrame::GetWorkingDirectory(DIR_MODS)); + if(files.abort) return FALSE; - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_MODS); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_MODS, true); - if (dlg.DoModal() != IDOK) return FALSE; - strcpy(s, dlg.GetPathName()); - CMainFrame::SetWorkingDirectory(s, DIR_MODS, true); + strcpy(s, files.first_file.c_str()); _splitpath(s, drive, path, fname, fext); } else { @@ -1415,20 +1412,20 @@ if ((!pMainFrm) || (!m_SndFile.GetType())) return; _splitpath(GetPathName(), NULL, NULL, fname, NULL); - CFileDialog dlg(FALSE, "wav", fname, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - "Wave Files (*.wav)|*.wav||", pMainFrm); - dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_EXPORT); CWaveConvert wsdlg(pMainFrm, nMinOrder, nMaxOrder); if (wsdlg.DoModal() != IDOK) return; - if (dlg.DoModal() != IDOK) return; //rewbs: made filename dialog appear after wav settings dialog + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "wav", fname, + "Wave Files (*.wav)|*.wav||", + CMainFrame::GetWorkingDirectory(DIR_EXPORT)); + if(files.abort) return; + // will set default dir here because there's no setup option for export dir yet (feel free to add one...) - pMainFrm->SetDefaultDirectory(dlg.GetPathName(), DIR_EXPORT, true); + CMainFrame::SetDefaultDirectory(files.workingDirectory.c_str(), DIR_EXPORT, true); TCHAR s[_MAX_PATH]; - strcpy(s, dlg.GetPathName()); + strcpy(s, files.first_file.c_str()); // Saving as wave file UINT p = 0, n = 1; @@ -1508,59 +1505,58 @@ void CModDoc::OnFileMP3Convert() //------------------------------ { + int nFilterIndex = 0; TCHAR sFName[_MAX_FNAME] = ""; CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if ((!pMainFrm) || (!m_SndFile.GetType())) return; _splitpath(GetPathName(), NULL, NULL, sFName, NULL); - CFileDialog dlg(FALSE, "mp3", sFName, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - "MPEG Layer III Files (*.mp3)|*.mp3|Layer3 Wave Files (*.wav)|*.wav||", pMainFrm); - dlg.m_ofn.nFilterIndex = 0; - - dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_EXPORT); - if (dlg.DoModal() == IDOK) - { - MPEGLAYER3WAVEFORMAT wfx; - HACMDRIVERID hadid; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "mp3", sFName, + "MPEG Layer III Files (*.mp3)|*.mp3|Layer3 Wave Files (*.wav)|*.wav||", + CMainFrame::GetWorkingDirectory(DIR_EXPORT), + false, + &nFilterIndex); + if(files.abort) return; - // will set default dir here because there's no setup option for export dir yet (feel free to add one...) - pMainFrm->SetDefaultDirectory(dlg.GetPathName(), DIR_EXPORT, true); + MPEGLAYER3WAVEFORMAT wfx; + HACMDRIVERID hadid; - TCHAR s[_MAX_PATH], fext[_MAX_EXT]; - strcpy(s, dlg.GetPathName()); - _splitpath(s, NULL, NULL, NULL, fext); - if (strlen(fext) <= 1) - { - int l = strlen(s) - 1; - if ((l >= 0) && (s[l] == '.')) s[l] = 0; - strcpy(fext, (dlg.m_ofn.nFilterIndex == 2) ? ".wav" : ".mp3"); - strcat(s, fext); - } - CLayer3Convert wsdlg(&m_SndFile, pMainFrm); - if (m_SndFile.m_szNames[0][0]) wsdlg.m_bSaveInfoField = TRUE; - if (wsdlg.DoModal() != IDOK) return; - wsdlg.GetFormat(&wfx, &hadid); - // Saving as mpeg file - BOOL bplaying = FALSE; - UINT pos = m_SndFile.GetCurrentPos(); - bplaying = TRUE; - pMainFrm->PauseMod(); - m_SndFile.SetCurrentPos(0); + // will set default dir here because there's no setup option for export dir yet (feel free to add one...) + pMainFrm->SetDefaultDirectory(files.workingDirectory.c_str(), DIR_EXPORT, true); - m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; - - // Saving file - CFileTagging *pTag = (wsdlg.m_bSaveInfoField) ? &wsdlg.m_FileTags : NULL; - CDoAcmConvert dwcdlg(&m_SndFile, s, &wfx.wfx, hadid, pTag, pMainFrm); - dwcdlg.m_dwFileLimit = wsdlg.m_dwFileLimit; - dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; - dwcdlg.DoModal(); - m_SndFile.SetCurrentPos(pos); - m_SndFile.GetLength(TRUE); - CMainFrame::UpdateAudioParameters(TRUE); + TCHAR s[_MAX_PATH], fext[_MAX_EXT]; + strcpy(s, files.first_file.c_str()); + _splitpath(s, NULL, NULL, NULL, fext); + if (strlen(fext) <= 1) + { + int l = strlen(s) - 1; + if ((l >= 0) && (s[l] == '.')) s[l] = 0; + strcpy(fext, (nFilterIndex == 2) ? ".wav" : ".mp3"); + strcat(s, fext); } + CLayer3Convert wsdlg(&m_SndFile, pMainFrm); + if (m_SndFile.m_szNames[0][0]) wsdlg.m_bSaveInfoField = TRUE; + if (wsdlg.DoModal() != IDOK) return; + wsdlg.GetFormat(&wfx, &hadid); + // Saving as mpeg file + BOOL bplaying = FALSE; + UINT pos = m_SndFile.GetCurrentPos(); + bplaying = TRUE; + pMainFrm->PauseMod(); + m_SndFile.SetCurrentPos(0); + + m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; + + // Saving file + CFileTagging *pTag = (wsdlg.m_bSaveInfoField) ? &wsdlg.m_FileTags : NULL; + CDoAcmConvert dwcdlg(&m_SndFile, s, &wfx.wfx, hadid, pTag, pMainFrm); + dwcdlg.m_dwFileLimit = wsdlg.m_dwFileLimit; + dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; + dwcdlg.DoModal(); + m_SndFile.SetCurrentPos(pos); + m_SndFile.GetLength(TRUE); + CMainFrame::UpdateAudioParameters(TRUE); } @@ -1577,19 +1573,17 @@ strcat(s, path); strcat(s, fname); strcat(s, ".mid"); - CFileDialog dlg(FALSE, "mid", s, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - "Midi Files (*.mid,*.rmi)|*.mid;*.rmi||", pMainFrm); - dlg.m_ofn.nFilterIndex = 0; - if (dlg.DoModal() == IDOK) + + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "mid", s, + "Midi Files (*.mid,*.rmi)|*.mid;*.rmi||"); + if(files.abort) return; + + CModToMidi mididlg(files.first_file.c_str(), &m_SndFile, pMainFrm); + if (mididlg.DoModal() == IDOK) { - CModToMidi mididlg(dlg.GetPathName(), &m_SndFile, pMainFrm); - if (mididlg.DoModal() == IDOK) - { - BeginWaitCursor(); - mididlg.DoConvert(); - EndWaitCursor(); - } + BeginWaitCursor(); + mididlg.DoConvert(); + EndWaitCursor(); } } @@ -1598,9 +1592,9 @@ //------------------------------------- { CHAR path[_MAX_PATH]="", drive[_MAX_DRIVE]=""; - CHAR s[_MAX_PATH], fname[_MAX_FNAME]=""; + CHAR fname[_MAX_FNAME]=""; CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - CString ext, pattern; + std::string ext, pattern, filename; UINT type = m_SndFile.GetType(); @@ -1639,35 +1633,30 @@ } _splitpath(GetPathName(), drive, path, fname, NULL); - strcpy(s, drive); - strcat(s, path); - strcat(s, fname); - if (!strstr(fname, "compat")) { - strcat(s, ".compat."); - } else { - strcat(s, "."); - } - strcat(s, ext); - CFileDialog dlg(FALSE, ext, s, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - pattern, pMainFrm); - dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_MODS); + filename = drive; + filename += path; + filename += fname; + if (!strstr(fname, "compat")) + filename += ".compat."; + else + filename += "."; + filename += ext; - if (dlg.DoModal() != IDOK){ - return; - } + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, ext, filename, pattern, CMainFrame::GetWorkingDirectory(DIR_MODS)); + if(files.abort) return; + switch (type) { case MOD_TYPE_MOD: - m_SndFile.SaveMod(dlg.GetPathName(), 0, true); + m_SndFile.SaveMod(files.first_file.c_str(), 0, true); SetModified(); // Compatibility save may adjust samples so set modified... m_ShowSavedialog = true; // ...and force save dialog to appear when saving. break; case MOD_TYPE_XM: - m_SndFile.SaveXM(dlg.GetPathName(), 0, true); + m_SndFile.SaveXM(files.first_file.c_str(), 0, true); break; case MOD_TYPE_IT: - m_SndFile.SaveCompatIT(dlg.GetPathName()); + m_SndFile.SaveCompatIT(files.first_file.c_str()); break; } } Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -514,16 +514,10 @@ void COptionsColors::OnLoadColorScheme() //-------------------------------------- { - CFileDialog dlg(TRUE, NULL, NULL, - OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, - "OpenMPT Color Schemes|*.mptcolor|" - "All Files (*.*)|*.*||", - this); - dlg.m_ofn.lpstrInitialDir = theApp.GetConfigPath(); - if (dlg.DoModal() != IDOK) return; - - TCHAR sFilename[MAX_PATH]; - strcpy(sFilename, dlg.GetPathName()); + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "mptcolor", "", + "OpenMPT Color Schemes|*.mptcolor||", + theApp.GetConfigPath()); + if(files.abort) return; // Ensure that all colours are reset (for outdated colour schemes) OnPresetMPT(); @@ -531,7 +525,7 @@ { TCHAR sKeyName[16]; wsprintf(sKeyName, "Color%02d", i); - CustomColors[i] = CMainFrame::GetPrivateProfileLong("Colors", sKeyName, CustomColors[i], sFilename); + CustomColors[i] = CMainFrame::GetPrivateProfileLong("Colors", sKeyName, CustomColors[i], files.first_file.c_str()); } OnPreviewChanged(); } @@ -539,21 +533,16 @@ void COptionsColors::OnSaveColorScheme() //-------------------------------------- { - CFileDialog dlg(FALSE, "mptcolor", NULL, - OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - "OpenMPT Color Schemes|*.mptcolor|", - this); - dlg.m_ofn.lpstrInitialDir = theApp.GetConfigPath(); - if (dlg.DoModal() != IDOK) return; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "mptcolor", "", + "OpenMPT Color Schemes|*.mptcolor||", + theApp.GetConfigPath()); + if(files.abort) return; - TCHAR sFilename[MAX_PATH]; - strcpy(sFilename, dlg.GetPathName()); - for(int i = 0; i < MAX_MODCOLORS; i++) { TCHAR sKeyName[16]; wsprintf(sKeyName, "Color%02d", i); - CMainFrame::WritePrivateProfileLong("Colors", sKeyName, CustomColors[i], sFilename); + CMainFrame::WritePrivateProfileLong("Colors", sKeyName, CustomColors[i], files.first_file.c_str()); } } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -1430,63 +1430,47 @@ void CTrackApp::OnFileOpen() //-------------------------- { - CFileDialog dlg(TRUE, - NULL, - NULL, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_FORCESHOWHIDDEN | OFN_ALLOWMULTISELECT, -// -> CODE#0023 -// -> DESC="IT project files (.itp)" - "All Modules|*.mod;*.nst;*.wow;*.s3m;*.stm;*.669;*.mtm;*.xm;*.it;*.itp;*.mptm;*.ult;*.mdz;*.s3z;*.xmz;*.itz;mod.*;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.mdr;*.med;*.ams;*.dbm;*.dsm;*.mid;*.rmi;*.smf;*.umx;*.amf;*.psm;*.mt2;*.gdm;*.imf;*.j2b" - #ifndef NO_MO3_SUPPORT - ";*.mo3" - #endif - "|" - "Compressed Modules (*.mdz;*.s3z;*.xmz;*.itz" - #ifndef NO_MO3_SUPPORT - ";*.mo3" - #endif - ")|*.mdz;*.s3z;*.xmz;*.itz;*.mdr;*.zip;*.rar;*.lha" - #ifndef NO_MO3_SUPPORT - ";*.mo3" - #endif - "|" -// -! NEW_FEATURE#0023 - "ProTracker Modules (*.mod,*.nst)|*.mod;mod.*;*.mdz;*.nst;*.m15|" - "ScreamTracker Modules (*.s3m,*.stm)|*.s3m;*.stm;*.s3z|" - "FastTracker Modules (*.xm)|*.xm;*.xmz|" - "Impulse Tracker Modules (*.it)|*.it;*.itz|" -// -> CODE#0023 -// -> DESC="IT project files (.itp)" - "Impulse Tracker Projects (*.itp)|*.itp;*.itpz|" -// -! NEW_FEATURE#0023 - "OpenMPT Modules (*.mptm)|*.mptm;*.mptmz|" - "Other Modules (mtm,okt,mdl,669,far,...)|*.mtm;*.669;*.ult;*.wow;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.med;*.ams;*.dbm;*.dsm;*.umx;*.amf;*.psm;*.mt2;*.gdm;*.imf;*.j2b|" - "Wave Files (*.wav)|*.wav|" - "Midi Files (*.mid,*.rmi)|*.mid;*.rmi;*.smf|" - "All Files (*.*)|*.*||", - NULL); - dlg.m_ofn.nFilterIndex = CMainFrame::m_nFilterIndex; + static int nFilterIndex = 0; + FileDlgResult files = ShowOpenSaveFileDialog(true, "", "", + "All Modules|*.mod;*.nst;*.wow;*.s3m;*.stm;*.669;*.mtm;*.xm;*.it;*.itp;*.mptm;*.ult;*.mdz;*.s3z;*.xmz;*.itz;mod.*;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.mdr;*.med;*.ams;*.dbm;*.dsm;*.mid;*.rmi;*.smf;*.umx;*.amf;*.psm;*.mt2;*.gdm;*.imf;*.j2b" +#ifndef NO_MO3_SUPPORT + ";*.mo3" +#endif + "|" + "Compressed Modules (*.mdz;*.s3z;*.xmz;*.itz" +#ifndef NO_MO3_SUPPORT + ";*.mo3" +#endif + ")|*.mdz;*.s3z;*.xmz;*.itz;*.mdr;*.zip;*.rar;*.lha" +#ifndef NO_MO3_SUPPORT + ";*.mo3" +#endif + "|" + // -! NEW_FEATURE#0023 + "ProTracker Modules (*.mod,*.nst)|*.mod;mod.*;*.mdz;*.nst;*.m15|" + "ScreamTracker Modules (*.s3m,*.stm)|*.s3m;*.stm;*.s3z|" + "FastTracker Modules (*.xm)|*.xm;*.xmz|" + "Impulse Tracker Modules (*.it)|*.it;*.itz|" + // -> CODE#0023 + // -> DESC="IT project files (.itp)" + "Impulse Tracker Projects (*.itp)|*.itp;*.itpz|" + // -! NEW_FEATURE#0023 + "OpenMPT Modules (*.mptm)|*.mptm;*.mptmz|" + "Other Modules (mtm,okt,mdl,669,far,...)|*.mtm;*.669;*.ult;*.wow;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.med;*.ams;*.dbm;*.dsm;*.umx;*.amf;*.psm;*.mt2;*.gdm;*.imf;*.j2b|" + "Wave Files (*.wav)|*.wav|" + "Midi Files (*.mid,*.rmi)|*.mid;*.rmi;*.smf|" + "All Files (*.*)|*.*||", + CMainFrame::GetWorkingDirectory(DIR_MODS), + true, + &nFilterIndex); + if(files.abort) return; - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_MODS); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_MODS, true); - const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size in MFC 7(this note was written November 2006). - vector<char> filenameBuffer(bufferSize, 0); - dlg.GetOFN().lpstrFile = &filenameBuffer[0]; - dlg.GetOFN().nMaxFile = bufferSize; - if (dlg.DoModal() == IDOK) + for(size_t counter = 0; counter < files.filenames.size(); counter++) { - POSITION pos = dlg.GetStartPosition(); - while(pos != NULL) - { - CString pathName = dlg.GetNextPathName(pos); - CMainFrame::SetWorkingDirectory(pathName, DIR_MODS, true); - CMainFrame::m_nFilterIndex = dlg.m_ofn.nFilterIndex; - OpenDocumentFile(pathName); - } + OpenDocumentFile(files.filenames[counter].c_str()); } - filenameBuffer.clear(); } @@ -3282,3 +3266,92 @@ return CWinApp::ProcessWndProcException(e, pMsg); } //end rewbs.crashHandler + + +/* Open or save one or multiple files using the system's file dialog + * Parameter list: + * - load: true: load dialog. false: save dialog. + * - defaultExtension: dialog should use this as the default extension for the file(s) + * - defaultFilename: dialog should use this as the default filename + * - extFilter: list of possible extensions. format: "description|extensions|description|extensions|..." + * - workingDirectory: default directory of the dialog + * - allowMultiSelect: allow the user to select multiple files? (will be ignored if load == false) + * - filterIndex: pointer to a variable holding the index of the last extension filter used. + */ +FileDlgResult CTrackApp::ShowOpenSaveFileDialog(bool load, std::string defaultExtension, std::string defaultFilename, std::string extFilter, std::string workingDirectory, bool allowMultiSelect, int *filterIndex) +//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +{ + FileDlgResult result; + result.workingDirectory = workingDirectory; + result.first_file = ""; + result.filenames.clear(); + result.extension = defaultExtension; + result.abort = true; + + // we can't save multiple files. + if(!load) + { + allowMultiSelect = false; + } + + // First, set up the dialog... + CFileDialog dlg(load ? TRUE : FALSE, + defaultExtension.empty() ? NULL : defaultExtension.c_str(), + defaultFilename.empty() ? NULL : defaultFilename.c_str(), + load ? (OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | (allowMultiSelect ? OFN_ALLOWMULTISELECT : 0)) + : (OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN), + extFilter.empty() ? NULL : extFilter.c_str(), + theApp.m_pMainWnd); + if(!workingDirectory.empty()) + dlg.m_ofn.lpstrInitialDir = workingDirectory.c_str(); + if(filterIndex != nullptr) + dlg.m_ofn.nFilterIndex = (DWORD)(*filterIndex); + + // TODO is this necessary? Apparently not! + /*const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size in MFC 7(this note was written November 2006). + vector<char> filenameBuffer(bufferSize, 0); + dlg.GetOFN().lpstrFile = &filenameBuffer[0]; + dlg.GetOFN().nMaxFile = bufferSize;*/ + + // Do it! + CMainFrame::GetInputHandler()->Bypass(true); + if(dlg.DoModal() != IDOK) + { + CMainFrame::GetInputHandler()->Bypass(false); + return result; + } + CMainFrame::GetInputHandler()->Bypass(false); + + // Retrieve variables + if(filterIndex != nullptr) + *filterIndex = dlg.m_ofn.nFilterIndex; + + if(allowMultiSelect) + { + // multiple files might have been selected + POSITION pos = dlg.GetStartPosition(); + while(pos != NULL) + { + std::string filename = dlg.GetNextPathName(pos); + result.filenames.push_back(filename); + } + + } else + { + // only one file + std::string filename = dlg.GetPathName(); + result.filenames.push_back(filename); + } + + if(!result.filenames.empty()) + { + // some file has been selected. + result.workingDirectory = result.filenames.back(); + result.first_file = result.filenames.front(); + result.abort = false; + } + + result.extension = dlg.GetFileExt(); + + return result; +} Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Mptrack.h 2009-12-18 21:51:37 UTC (rev 444) @@ -112,7 +112,20 @@ } REQUEST_CONTEXT; #endif + ///////////////////////////////////////////////////////////////////////////// +// File dialog (open/save) results +struct FileDlgResult +{ + std::string workingDirectory; // working directory. will include filename, so beware. + std::string first_file; // for some convenience, this will keep the first filename of the filenames vector. + std::vector <std::string> filenames; // all selected filenames in one vector. + std::string extension; // extension used. beware of this when multiple files can be selected! + bool abort; // no selection has been made. +}; + + +///////////////////////////////////////////////////////////////////////////// // CTrackApp: // See mptrack.cpp for the implementation of this class // @@ -175,6 +188,8 @@ static BOOL AddDLSBank(LPCSTR); static BOOL OpenURL(LPCSTR lpszURL); + static FileDlgResult ShowOpenSaveFileDialog(bool load, std::string defaultExtension, std::string defaultFilename, std::string extFilter, std::string workingDirectory = "", bool allowMultiSelect = false, int *filterIndex = nullptr); + public: CDocTemplate *GetModDocTemplate() const { return m_pModTemplate; } CVstPluginManager *GetPluginManager() const { return m_pPluginManager; } Modified: trunk/OpenMPT/mptrack/TuningDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/TuningDialog.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/TuningDialog.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -619,24 +619,23 @@ return; } - string filter; + std::string filter; if(pT != NULL) filter = string("Tuning files (*") + CTuning::s_FileExtension + string(")|*") + CTuning::s_FileExtension + string("|"); if(pTC != NULL) filter += string("Tuning collection files (") + CTuningCollection::s_FileExtension + string(")|*") + CTuningCollection::s_FileExtension + string("|"); - CFileDialog dlg(FALSE, CTuning::s_FileExtension.c_str(), - NULL, - OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - filter.c_str(), this); - dlg.m_ofn.lpstrInitialDir = theApp.GetTuningsPath(); + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, CTuning::s_FileExtension, "", + filter, + theApp.GetTuningsPath()); + if(files.abort) return; + BeginWaitCursor(); + bool failure = true; - if (dlg.DoModal() != IDOK) return; - BeginWaitCursor(); - ofstream fout(dlg.GetPathName(), ios::binary); - const string ext = "." + dlg.GetFileExt(); + ofstream fout(files.first_file.c_str(), ios::binary); + const string ext = "." + files.extension; if(ext == CTuning::s_FileExtension) { @@ -663,23 +662,18 @@ string filter = string("Tuning files (*") + CTuning::s_FileExtension + string(", *") + CTuningCollection::s_FileExtension + string(")|*") + CTuning::s_FileExtension + string(";*") + CTuningCollection::s_FileExtension + string("|"); - CFileDialog dlg(TRUE, - NULL, - NULL, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, - filter.c_str(), - this); - dlg.m_ofn.lpstrInitialDir = theApp.GetTuningsPath(); + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "", "", + filter, + theApp.GetTuningsPath()); + if(files.abort) return; - if (dlg.DoModal() != IDOK) return; + const string ext = string(".") + files.extension; - const string ext = string(".") + string(dlg.GetFileExt()); - bool failure = true; if(ext == CTuning::s_FileExtension) { - ifstream fin(dlg.GetPathName(), ios::binary); + ifstream fin(files.first_file.c_str(), ios::binary); CTuning* pT = CTuningRTI::DeserializeOLD(fin); if(pT == 0) {fin.clear(); fin.seekg(0); pT = CTuningRTI::Deserialize(fin);} fin.close(); @@ -701,7 +695,7 @@ //a separate collection - no possibility to //directly replace some collection. CTuningCollection* pNewTCol = new CTuningCollection; - pNewTCol->SetSavefilePath(static_cast<LPCTSTR>(dlg.GetPathName())); + pNewTCol->SetSavefilePath(static_cast<LPCTSTR>(files.first_file.c_str())); failure = pNewTCol->Deserialize(); if(failure) { Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -1019,13 +1019,13 @@ //rewbs.fxpPresets: changed Eric's code to use fxp load/save if(pVstPlugin == NULL) return; - CFileDialog dlg(TRUE, "fxp", NULL, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "VST FX Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); - if (!(dlg.DoModal() == IDOK)) return; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "fxp", "", + "VST FX Program (*.fxp)|*.fxp||", + CMainFrame::GetDefaultDirectory(DIR_PLUGINPRESETS)); + if(files.abort) return; //TODO: exception handling - if (!(pVstPlugin->LoadProgram(dlg.GetFileName()))) { + if (!(pVstPlugin->LoadProgram(files.first_file.c_str()))) { ::AfxMessageBox("Error loading preset.Are you sure it is for this plugin?"); } else { if (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) pModDoc->SetModified(); @@ -1045,13 +1045,13 @@ if(pVstPlugin == NULL) return; //rewbs.fxpPresets: changed Eric's code to use fxp load/save - CFileDialog dlg(FALSE, "fxp", NULL, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); - if (!(dlg.DoModal() == IDOK)) return; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "fxp", "", + "VST Program (*.fxp)|*.fxp||", + CMainFrame::GetDefaultDirectory(DIR_PLUGINPRESETS)); + if(files.abort) return; //TODO: exception handling - if (!(pVstPlugin->SaveProgram(dlg.GetFileName()))) + if (!(pVstPlugin->SaveProgram(files.first_file.c_str()))) ::AfxMessageBox("Error saving preset."); //end rewbs.fxpPresets Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -1492,24 +1492,21 @@ BOOL CModTree::OpenMidiInstrument(DWORD dwItem) //--------------------------------------------- { - CFileDialog dlg(TRUE, - NULL, - NULL, - OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, - "All Instruments and Banks|*.xi;*.pat;*.iti;*.wav;*.aif;*.aiff;*.sf2;*.sbk;*.dls|" - "FastTracker II Instruments (*.xi)|*.xi|" - "GF1 Patches (*.pat)|*.pat|" - "Wave Files (*.wav)|*.wav|" - "Impulse Tracker Instruments (*.iti)|*.iti;*.its|" - "SoundFont 2.0 Banks (*.sf2)|*.sf2;*.sbk|" - "DLS Sound Banks (*.dls)|*.dls|" - "All Files (*.*)|*.*||", - this); - if (dlg.DoModal() != IDOK) return FALSE; + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "", "", + "All Instruments and Banks|*.xi;*.pat;*.iti;*.wav;*.aif;*.aiff;*.sf2;*.sbk;*.dls|" + "FastTracker II Instruments (*.xi)|*.xi|" + "GF1 Patches (*.pat)|*.pat|" + "Wave Files (*.wav)|*.wav|" + "Impulse Tracker Instruments (*.iti)|*.iti;*.its|" + "SoundFont 2.0 Banks (*.sf2)|*.sf2;*.sbk|" + "DLS Sound Banks (*.dls)|*.dls|" + "All Files (*.*)|*.*||"); + if(files.abort) return FALSE; + if (dwItem & 0x80) - return SetMidiPercussion(dwItem & 0x7F, dlg.GetPathName()); + return SetMidiPercussion(dwItem & 0x7F, files.first_file.c_str()); else - return SetMidiInstrument(dwItem, dlg.GetPathName()); + return SetMidiInstrument(dwItem, files.first_file.c_str()); } @@ -2914,24 +2911,12 @@ if(pSndFile && modItemID){ - CHAR pszFileNames[_MAX_PATH]; - CFileDialog dlg(TRUE, NULL, NULL, - OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_FORCESHOWHIDDEN, - "All files(*.*)|*.*||", - this); + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "", "", + "All files(*.*)|*.*||"); + if(files.abort) return; - pszFileNames[0] = 0; - pszFileNames[1] = 0; - dlg.m_ofn.lpstrFile = pszFileNames; - dlg.m_ofn.nMaxFile = _MAX_PATH; - - if(dlg.DoModal() == IDOK){ - strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], pszFileNames); - OnRefreshTree(); - } - - dlg.m_ofn.lpstrFile = NULL; - dlg.m_ofn.nMaxFile = 0; + strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], files.first_file.c_str()); + OnRefreshTree(); } } @@ -2948,26 +2933,17 @@ if(pSndFile && modItemID){ - if(pSndFile->m_szInstrumentPath[modItemID - 1][0] == '\0'){ - CHAR pszFileNames[_MAX_PATH]; + if(pSndFile->m_szInstrumentPath[modItemID - 1][0] == '\0') + { + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, (pSndFile->GetType() == MOD_TYPE_XM) ? "xi" : "iti", "", + (pSndFile->GetType() == MOD_TYPE_XM) ? + "FastTracker II Instruments (*.xi)|*.xi|" + "Impulse Tracker Instruments (*.iti)|*.iti||" : + "Impulse Tracker Instruments (*.iti)|*.iti|" + "FastTracker II Instruments (*.xi)|*.xi||"); + if(files.abort) return; - CFileDialog dlg(FALSE, (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) ? "iti" : "xi", NULL, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - ( pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT) ? "Impulse Tracker Instruments (*.iti)|*.iti|" - "FastTracker II Instruments (*.xi)|*.xi||" - : "FastTracker II Instruments (*.xi)|*.xi|" - "Impulse Tracker Instruments (*.iti)|*.iti||" ), - this); - - pszFileNames[0] = 0; - pszFileNames[1] = 0; - dlg.m_ofn.lpstrFile = pszFileNames; - dlg.m_ofn.nMaxFile = _MAX_PATH; - - if(dlg.DoModal() == IDOK) strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], pszFileNames); - - dlg.m_ofn.lpstrFile = NULL; - dlg.m_ofn.nMaxFile = 0; + strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], files.first_file.c_str()); } if(pSndFile->m_szInstrumentPath[modItemID - 1][0] != '\0'){ @@ -3009,18 +2985,12 @@ void CModTree::OnExportMidiLib() //------------------------------ { - CHAR szFileName[_MAX_PATH] = "mptrack.ini"; - CFileDialog dlg(FALSE, - "ini", - szFileName, - OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, - "Text and INI files (*.txt,*.ini)|*.txt;*.ini|" - "All Files (*.*)|*.*||", - this); - if (dlg.DoModal() == IDOK) - { - CTrackApp::ExportMidiConfig(dlg.GetPathName()); - } + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "ini", "mptrack.ini", + "Text and INI files (*.txt,*.ini)|*.txt;*.ini|" + "All Files (*.*)|*.*||"); + if(files.abort) return; + + CTrackApp::ExportMidiConfig(files.first_file.c_str()); } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2009-12-17 21:42:45 UTC (rev 443) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2009-12-18 21:51:37 UTC (rev 444) @@ -1411,54 +1411,34 @@ //---------------------------------- { CHAR *pszFileNames; - CFileDialog dlg(TRUE, ".dll", NULL, - OFN_FILEMUSTEXIST|OFN_ENABLESIZING |OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FORCESHOWHIDDEN|OFN_ALLOWMULTISELECT, - "VST Plugins (*.dll)|*.dll||", - this); - - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_PLUGINS); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; - pszFileNames = new CHAR[MAX_FILEOPEN_BUFSIZE]; - if (!pszFileNames) return; - pszFileNames[0] = 0; - pszFileNames[1] = 0; - dlg.m_ofn.lpstrFile = pszFileNames; - dlg.m_ofn.nMaxFile = MAX_FILEOPEN_BUFSIZE; - if (dlg.DoModal() == IDOK) + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "dll", "", + "VST Plugins (*.dll)|*.dll||", + CMainFrame::GetWorkingDirectory(DIR_PLUGINS), + true); + if(files.abort) return; + + CMainFrame::SetWorkingDirectory(files.workingDirectory.c_str(), DIR_PLUGINS, true); + + CVstPluginManager *pManager = theApp.GetPluginManager(); + bool bOk = false; + + PVSTPLUGINLIB plugLib = NULL; + for(size_t counter = 0; counter < files.filenames.size(); counter++) { - CVstPluginManager *pManager = theApp.GetPluginManager(); - pszFileNames[MAX_FILEOPEN_BUFSIZE-1] = 0; - POSITION pos = dlg.GetStartPosition(); - BOOL bOk = FALSE; - - int n = 0; - PVSTPLUGINLIB plugLib = NULL; - while (pos != NULL) { - CString sFilename = dlg.GetNextPathName(pos); - if (!n) { - CMainFrame::SetWorkingDirectory(sFilename, DIR_PLUGINS, true); - } - n++; + CString sFilename = files.filenames[counter].c_str(); - if (pManager) { - plugLib = pManager->AddPlugin(sFilename, FALSE); - if (plugLib) { - bOk = TRUE; - } - } + if (pManager) { + plugLib = pManager->AddPlugin(sFilename, FALSE); + if (plugLib) bOk = true; } - if (bOk) { - UpdatePluginsList(plugLib->dwPluginId2); //force selection to last added plug. - } else { - MessageBox("At least one selected file was not a valid VST-Plugin", NULL, MB_ICONERROR|MB_OK); - } } - dlg.m_ofn.lpstrFile = NULL; - dlg.m_ofn.nMaxFile = 0; - delete[] pszFileNames; + if (bOk) { + UpdatePluginsList(plugLib->dwPluginId2); //force selection to last added plug. + } else { + MessageBox("At least one selected file was not a valid VST-Plugin", NULL, MB_ICONERROR|MB_OK); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-12-20 01:10:59
|
Revision: 445 http://modplug.svn.sourceforge.net/modplug/?rev=445&view=rev Author: saga-games Date: 2009-12-20 01:10:47 +0000 (Sun, 20 Dec 2009) Log Message: ----------- [Fix] Pattern Editor: Search&Replace didn't create an undo point. [Fix] Orderlist: Sequence sub menu (in context menu) was not destroyed properly. [Imp] Instrument Editor: When creating a new envelope, automatically enable it as well. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Undo.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-12-18 21:51:37 UTC (rev 444) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-12-20 01:10:47 UTC (rev 445) @@ -1047,6 +1047,8 @@ AppendMenu(menuSequence, MF_STRING, ID_SEQUENCE_ITEM + MAX_SEQUENCES, TEXT("Create new sequence")); if (pSndFile->Order.GetNumSequences() > 1) AppendMenu(menuSequence, MF_STRING, ID_SEQUENCE_ITEM + MAX_SEQUENCES + 1, TEXT("Delete current sequence")); + + ::DestroyMenu(menuSequence); } } AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); Modified: trunk/OpenMPT/mptrack/Undo.cpp =================================================================== --- trunk/OpenMPT/mptrack/Undo.cpp 2009-12-18 21:51:37 UTC (rev 444) +++ trunk/OpenMPT/mptrack/Undo.cpp 2009-12-20 01:10:47 UTC (rev 445) @@ -35,8 +35,8 @@ // - pattern: Pattern of which an undo step should be created from. // - x: first channel // - y: first row -// - cx: last channel -// - cy: last row +// - cx: width +// - cy: height bool CPatternUndo::PrepareUndo(PATTERNINDEX pattern, UINT x, UINT y, UINT cx, UINT cy) //------------------------------------------------------------------------------------ { Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2009-12-18 21:51:37 UTC (rev 444) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-12-20 01:10:47 UTC (rev 445) @@ -1039,6 +1039,7 @@ envelope->Ticks[0] = 0; envelope->Values[0] = cDefaultValue; envelope->nNodes = 1; + envelope->dwFlags |= ENV_ENABLED; } UINT i = 0; for (i = 0; i < envelope->nNodes; i++) if (nTick <= envelope->Ticks[i]) break; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-18 21:51:37 UTC (rev 444) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-12-20 01:10:47 UTC (rev 445) @@ -1847,6 +1847,8 @@ } if (bReplace) { + pModDoc->GetPatternUndo()->PrepareUndo(nPat, n % pSndFile->m_nChannels, n / pSndFile->m_nChannels, 1, 1); + if ((m_dwReplaceFlags & PATSEARCH_NOTE)) { // -1 octave This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |