From: <man...@us...> - 2013-06-03 22:03:07
|
Revision: 2303 http://sourceforge.net/p/modplug/code/2303 Author: manxorist Date: 2013-06-03 22:02:59 +0000 (Mon, 03 Jun 2013) Log Message: ----------- [Ref] Fix some more warnings. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/PatternGotoDialog.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2013-06-03 21:32:46 UTC (rev 2302) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2013-06-03 22:02:59 UTC (rev 2303) @@ -2803,7 +2803,7 @@ } -CString CModDoc::GetPatternViewInstrumentName(UINT nInstr, +CString CModDoc::GetPatternViewInstrumentName(INSTRUMENTINDEX nInstr, bool bEmptyInsteadOfNoName /* = false*/, bool bIncludeIndex /* = true*/) const //----------------------------------------------------------------------------------- Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2013-06-03 21:32:46 UTC (rev 2302) +++ trunk/OpenMPT/mptrack/Moddoc.h 2013-06-03 22:02:59 UTC (rev 2303) @@ -361,7 +361,7 @@ // [in] bEmptyInsteadOfNoName: In case of unnamed instrument string, "(no name)" is returned unless this // parameter is true is case which an empty name is returned. // [in] bIncludeIndex: True to include instrument index in front of the instrument name, false otherwise. - CString GetPatternViewInstrumentName(UINT nInstr, bool bEmptyInsteadOfNoName = false, bool bIncludeIndex = true) const; + CString GetPatternViewInstrumentName(INSTRUMENTINDEX nInstr, bool bEmptyInsteadOfNoName = false, bool bIncludeIndex = true) const; // Check if a given channel contains data. bool IsChannelUnused(CHANNELINDEX nChn) const; Modified: trunk/OpenMPT/mptrack/PatternGotoDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternGotoDialog.cpp 2013-06-03 21:32:46 UTC (rev 2302) +++ trunk/OpenMPT/mptrack/PatternGotoDialog.cpp 2013-06-03 22:02:59 UTC (rev 2303) @@ -68,7 +68,7 @@ bool validated = true; // Does pattern exist? - if(validated && !m_pSndFile->Patterns.IsValidPat(m_nPattern)) + if(validated && !m_pSndFile->Patterns.IsValidPat(static_cast<PATTERNINDEX>(m_nPattern))) { validated = false; } @@ -112,7 +112,7 @@ } UpdateData(); - m_nOrder = m_pSndFile->Order.FindOrder(static_cast<PATTERNINDEX>(m_nPattern), m_nActiveOrder); + m_nOrder = m_pSndFile->Order.FindOrder(static_cast<PATTERNINDEX>(m_nPattern), static_cast<ORDERINDEX>(m_nActiveOrder)); if(m_nOrder == ORDERINDEX_INVALID) { Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2013-06-03 21:32:46 UTC (rev 2302) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2013-06-03 22:02:59 UTC (rev 2303) @@ -6174,7 +6174,7 @@ bool addSeparator = false; if (sndFile->GetNumInstruments()) { - for (UINT i = 1; i <= sndFile->GetNumInstruments() ; i++) + for(INSTRUMENTINDEX i = 1; i <= sndFile->GetNumInstruments() ; i++) { if (sndFile->Instruments[i] == NULL) continue; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-06-27 17:16:31
|
Revision: 2418 http://sourceforge.net/p/modplug/code/2418 Author: manxorist Date: 2013-06-27 17:16:21 +0000 (Thu, 27 Jun 2013) Log Message: ----------- [Ref] CHyperEdit is only used to add clickable links to the forum and download websites in the About dialog. This functionality is also available via the Help menu. Remove CHyperEdit completely. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters Removed Paths: ------------- trunk/OpenMPT/mptrack/HyperEdit.cpp trunk/OpenMPT/mptrack/HyperEdit.h trunk/OpenMPT/mptrack/HyperEdit2.cpp trunk/OpenMPT/mptrack/HyperEdit3.cpp Deleted: trunk/OpenMPT/mptrack/HyperEdit.cpp =================================================================== --- trunk/OpenMPT/mptrack/HyperEdit.cpp 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/HyperEdit.cpp 2013-06-27 17:16:21 UTC (rev 2418) @@ -1,221 +0,0 @@ -//******************************************************************************************** -//* HYPEREDIT.CPP - Custom window message handler(s) implementation * -//* * -//* This module contains implementation code for object initialization and default windows * -//* messages. * -//* * -//* Aug.31.04 * -//* * -//* Copyright PCSpectra 2004 (Free for any purpose, except to sell indivually) * -//* Website: www.pcspectra.com * -//* * -//* Notes: * -//* ====== * -//* Search module for 'PROGRAMMERS NOTE' * -//* * -//* History: * -//* ======== * -//* Mon.dd.yy - None so far * -//******************************************************************************************** - -#include "stdafx.h" -#include "HyperEdit.h" - -#pragma warning(disable:4018) // "'<' : signed/unsigned mismatch" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -// Object construction - -CHyperEdit::CHyperEdit() -{ - m_nTimer = 0; - - m_nLineHeight = 0; - - m_hHandCursor = NULL; // No hand cursor - - // Set default hyperlink colors - m_clrNormal = RGB(92, 92, 154); - m_clrHover = RGB(168, 168, 230); - - m_csLocation.Empty(); -} - -// Object destruction - -CHyperEdit::~CHyperEdit() -{ - m_oFont.DeleteObject(); // Delete hyperlink font object -} - -BEGIN_MESSAGE_MAP(CHyperEdit, CEdit) - //{{AFX_MSG_MAP(CHyperEdit) - ON_CONTROL_REFLECT(EN_CHANGE, OnChange) - ON_WM_MOUSEMOVE() - ON_WM_HSCROLL() - ON_WM_VSCROLL() - ON_WM_TIMER() - ON_WM_DESTROY() - ON_WM_LBUTTONUP() - ON_WM_LBUTTONDOWN() - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -// Control initialization - -void CHyperEdit::PreSubclassWindow() -{ - CEdit::PreSubclassWindow(); - - ASSERT(GetStyle() & ES_MULTILINE); // MUST be in multiline state - //ASSERT(GetStyle() & WS_VSCROLL); // We need vertical scrollbar - ASSERT(GetStyle() & ES_AUTOVSCROLL); - - // Initialize font object(s) - CDC* pDC = GetDC(); - ASSERT(pDC); - - CFont* pTemp = GetFont(); // Get the font dialog controls will be using - ASSERT(pTemp); - - LOGFONT lf; - pTemp->GetLogFont(&lf); - - // TODO: - // Check if there is a system setting that we can check to see if hyperlinks should be - // underlined by default or not. - lf.lfUnderline = TRUE; // Our font needs to be undelrined to distinguish itself as hyper - - // Create our hyperlink font :) - m_oFont.CreateFontIndirect(&lf); - - SetDefaultCursor(); // Try and initialize our hand cursor - - // Calculate single line height - m_nLineHeight = pDC->DrawText("Test Line", CRect(0,0,0,0), DT_SINGLELINE|DT_CALCRECT); - - // PROGRAMMERS NOTE: - // ================= - // If the hyperlinks flicker when changing the selection state - // of the edit control change the timer value to a lower count - // 10 is the default and appears to have an almost flicker free - // transition from selection to hyperlinked colors. - m_nTimer = SetTimer(IDT_SELCHANGE, 10, NULL); -} - -// Override mouse movements - -void CHyperEdit::OnMouseMove(UINT nFlags, CPoint point) -{ - CEdit::OnMouseMove(nFlags, point); - CString csURL = IsHyperlink(point); - - // If not empty, then display hand cursor - if(!csURL.IsEmpty()){ // We are hovering hypertext - - // Get the coordinates of last character in entire buffer - CPoint pt_lastchar = PosFromChar(GetWindowTextLength()-1); - - // Don't bother changing mouse cursor if it's below last visible character - if(point.y<=(pt_lastchar.y+m_nLineHeight)) - ::SetCursor(m_hHandCursor); - - - if (!m_bHoveringHyperText) { //only redraw if state has changed - DrawHyperlinks(); - m_bHoveringHyperText = true; //store new state - } - - } else { // We are not hovering hypertext - if (m_bHoveringHyperText) { //only redraw if state has changed - DrawHyperlinks(); - m_bHoveringHyperText = false; //store new state - } - } -} - -// Override left mouse button down (Clicking) - -void CHyperEdit::OnLButtonDown(UINT nFlags, CPoint point) -{ - m_csLocation = IsHyperlink(point); - - CEdit::OnLButtonDown(nFlags, point); -} - -// Override left mouse button up (Clicking) - -void CHyperEdit::OnLButtonUp(UINT nFlags, CPoint point) -{ - CEdit::OnLButtonUp(nFlags, point); - - int iSelStart=0, iSelFinish=0; - GetSel(iSelStart, iSelFinish); - - // If there is a selection, just exit now, we don't open URL's - if(IsSelection(iSelStart, iSelFinish)) return; - - // If were below the last visible character exit again, cuz we don't want - // to open any URL's that aren't directly clicked on - // Get the coordinates of last character in entire buffer - CPoint pt = PosFromChar(GetWindowTextLength()-1); - - // Exit if mouse is below last visible character - if(point.y>(pt.y+m_nLineHeight)) return; - - CString csURL = IsHyperlink(point); - - // If not empty, then open browser and show web site - // only if the URL is the same as one clicked on in OnLButtonDown() - if(!csURL.IsEmpty() && (m_csLocation==csURL)) - GotoURL(csURL, SW_SHOW); -} - -// Override low level message handling - -LRESULT CHyperEdit::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) -{ - // handling OnPaint() didn't work - if(message==WM_PAINT){ - CEdit::WindowProc(message, wParam, lParam); - - DrawHyperlinks(); - - return TRUE; - } - - return CEdit::WindowProc(message, wParam, lParam); -} - -// Emulate an OnSelChange() event using a low interval timer (initialized in PreSubclassWindow) - -void CHyperEdit::OnTimer(UINT nIDEvent) -{ - // - // Emulate a OnSelChange() event - // - - static int iPrevStart=0, iPrevFinish=0; - - DWORD dwSel = GetSel(); - - // Check the previous start/finish of selection range - // and compare them against the current selection range - // if there is any difference between them fire off an OnSelChange event - if(LOWORD(dwSel) != iPrevStart || HIWORD(dwSel) != iPrevFinish) - OnSelChange(); - - // Save current selection state for next call (as previous state) - iPrevStart = LOWORD(dwSel); - iPrevFinish = HIWORD(dwSel); - - CEdit::OnTimer(nIDEvent); -} - -#pragma warning(default:4018) - Deleted: trunk/OpenMPT/mptrack/HyperEdit.h =================================================================== --- trunk/OpenMPT/mptrack/HyperEdit.h 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/HyperEdit.h 2013-06-27 17:16:21 UTC (rev 2418) @@ -1,115 +0,0 @@ -//******************************************************************************************** -//* HYPEREDIT.H - Control interface and trivial implementation * -//* * -//* This module contains interface code and some typedefs and application defines * -//* * -//* Aug.31.04 * -//* * -//* Copyright PCSpectra 2004 (Free for any purpose, except to sell indivually) * -//* Website: www.pcspectra.com * -//* * -//* Notes: * -//* ====== * -//* Search module for 'PROGRAMMERS NOTE' * -//* * -//* History: * -//* ======== * -//* Mon.dd.yy - None so far * -//******************************************************************************************** - -#ifndef AFX_HYPEREDIT_H__28F52ED8_8811_436F_821B_EB02D02A1F88__INCLUDED_ -#define AFX_HYPEREDIT_H__28F52ED8_8811_436F_821B_EB02D02A1F88__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#define WHITE_SPACE1 _T(' ') // Single space -#define WHITE_SPACE2 _T('\r') // Carriage return -#define WHITE_SPACE3 _T('\n') // Linefeed/newline -#define WHITE_SPACE4 _T('\t') // Tab - -#define IDT_SELCHANGE 0x6969 - -#define IsSelection(p1, p2)( p1 != p2 ) - -#include <vector> - -// -// This structure holds the starting offset and length for each token -// located inside the buffer for the control. We use this data inside -// OnPaint and OnMouseMove and OnChange to quickly get the URL or token string -// - -struct _TOKEN_OFFSET{ - WORD iStart; // - WORD iLength; -}; typedef std::vector<_TOKEN_OFFSET> OFFSETS; - -// CHyperEdit control interface - -class CHyperEdit : public CEdit -{ -public: - CHyperEdit(); - virtual ~CHyperEdit(); - - COLORREF GetNormalColor() const { return m_clrNormal; } - COLORREF GetHoverColor() const { return m_clrHover; } - - void SetLinkColors(COLORREF clrNormal, COLORREF clrHover){ m_clrNormal=clrNormal; m_clrHover=clrHover; } - - // Used with a TIMER to display tooltips (Maybe the webpage TITLE???) - CString IsHyperlink(CPoint& pt) const; -protected: - virtual BOOL IsWordHyper(const CString& csToken) const; - - inline BOOL IsWhiteSpace(const CString& csBuff, int iIndex) const; - - //{{AFX_VIRTUAL(CHyperEdit) - virtual void PreSubclassWindow(); - virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); - //}}AFX_VIRTUAL - - afx_msg void OnSelChange(){ DrawHyperlinks(); } - - //{{AFX_MSG(CHyperEdit) - afx_msg void OnChange(){ DrawHyperlinks(); } - afx_msg void OnMouseMove(UINT nFlags, CPoint point); - afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ CEdit::OnHScroll(nSBCode, nPos, pScrollBar); DrawHyperlinks(); } - afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ CEdit::OnVScroll(nSBCode, nPos, pScrollBar); DrawHyperlinks(); } - afx_msg void OnTimer(UINT nIDEvent); - afx_msg void OnDestroy(){ CEdit::OnDestroy(); KillTimer(m_nTimer); } - afx_msg void OnLButtonUp(UINT nFlags, CPoint point); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - //}}AFX_MSG -private: - // Located in HyperEdit2.cpp - void DrawHyperlinks(); - void BuildOffsetList(int iCharStart, int iCharFinish); - - // Functions borrowed from Chris Maunder's article - void SetDefaultCursor(); - HINSTANCE GotoURL(LPCTSTR url, int showcmd); - void ReportError(int nError); - LONG GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata); - -private: - UINT m_nTimer; - UINT m_nLineHeight; - bool m_bHoveringHyperText; - - CFont m_oFont; - - CString m_csLocation; // URL or file to be opened when mouse is released - - HCURSOR m_hHandCursor; - - OFFSETS m_linkOffsets; // Character offsets for each hyperlink located - - COLORREF m_clrNormal, m_clrHover; - - DECLARE_MESSAGE_MAP() -}; -//{{AFX_INSERT_LOCATION}} -#endif // !defined(AFX_HYPEREDIT_H__28F52ED8_8811_436F_821B_EB02D02A1F88__INCLUDED_) Deleted: trunk/OpenMPT/mptrack/HyperEdit2.cpp =================================================================== --- trunk/OpenMPT/mptrack/HyperEdit2.cpp 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/HyperEdit2.cpp 2013-06-27 17:16:21 UTC (rev 2418) @@ -1,242 +0,0 @@ -//******************************************************************************************** -//* HYPEREDIT2.CPP - Custom CHyperEdit implementation * -//* * -//* This module contains implementation code specific to this control * -//* * -//* Aug.31.04 * -//* * -//* Copyright PCSpectra 2004 (Free for any purpose, except to sell indivually) * -//* Website: www.pcspectra.com * -//* * -//* Notes: * -//* ====== * -//* Search module for 'PROGRAMMERS NOTE' * -//* * -//* History: * -//* ======== * -//* Mon.dd.yy - None so far * -//******************************************************************************************** - -#include "stdafx.h" -#include "HyperEdit.h" - -#pragma warning(disable:4244) // "conversion from 'type1' to 'type2', possible loss of data" -#pragma warning(disable:4018) // "'<' : signed/unsigned mismatch" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -// -// DrawHyperlinks() draws a hyperlink colored character(individually) over existing -// CEdit text entered by user. It does this by first building a internal offset list of all -// valid hyperlinks and then iterating over each of them and their individual characters -// painting them the color specified by the client programmer or using default colors. -// - -void CHyperEdit::DrawHyperlinks() -{ - CRect rcRect; - GetRect(rcRect); // Get the formatting rectangle for the edit control - - CDC* pDC = GetDC(); - ASSERT(pDC); - - // Select our hyperlink font into the DC - CFont* pTemp = pDC->SelectObject(&m_oFont); - - // Prepare the DC for for our output on top of existing content - pDC->SetBkMode(TRANSPARENT); - pDC->IntersectClipRect(rcRect); // Prevent drawing outside the format rectangle - - // Get the character index of the first and last visible characters - int iChar1 = LOWORD(CharFromPos(CPoint(rcRect.left, rcRect.top))); // LineIndex(GetFirstVisibleLine()); // Old method!!! - int iChar2 = LOWORD(CharFromPos(CPoint(rcRect.right, rcRect.bottom))); - - CString csBuff; // Holds the text for the entire control - - GetWindowText(csBuff); - int bufflength = csBuff.GetLength(); - - if (iChar2>bufflength) { - iChar2=bufflength; - } - - // Build a list of hyperlink character offsets - BuildOffsetList(iChar1, iChar2); - - CPoint pt; // Coordinates for a single tokens character which is painted blue - - // Used to determine if user is hovering over a hyperlink or not - CPoint pt_mouse(GetMessagePos()); // Current mouse location - ScreenToClient(&pt_mouse); - - CString csTemp; // - - // Draw our hyperlink(s) - for(int i=0; i<m_linkOffsets.size(); i++){ - - // Determine if mouse pointer is over a hyperlink - csTemp = IsHyperlink(pt_mouse); - - // If return URL is empty then were not over a hyperlink - if(csTemp.IsEmpty()) - pDC->SetTextColor(m_clrNormal); - else{ - // Make sure we only hilite the URL were over. This technique will - // cause duplicate URl's to hilite in hover color. - if(csTemp==csBuff.Mid(m_linkOffsets[i].iStart, m_linkOffsets[i].iLength)){ - - // Get the coordinates of last character in entire buffer - CPoint pt_lastchar = PosFromChar(GetWindowTextLength()-1); - - // Paint normally if mouse is below last visible character - if(pt_mouse.y>(pt_lastchar.y+m_nLineHeight)) - pDC->SetTextColor(m_clrNormal); - else - pDC->SetTextColor(m_clrHover); - } - else - pDC->SetTextColor(m_clrNormal); - } - - // Paint each URL, email, etc character individually so we can have URL's that wrap - // onto different lines - for(int j=m_linkOffsets[i].iStart; j<(m_linkOffsets[i].iStart+m_linkOffsets[i].iLength); j++){ - - TCHAR chToken = csBuff.GetAt(j); // Get a single token from URL, Email, etc - pt = PosFromChar(j); // Get the coordinates for a single token - - // Holds the start and finish offset of current selection (if any) - int iSelStart=0, iSelFinish=0; - - GetSel(iSelStart, iSelFinish); - - // Determine if there is a selection - if(IsSelection(iSelStart, iSelFinish)){ - // Does our current token fall within a selection range - if(j>=iSelStart && j<iSelFinish) - continue; // Don't paint token blue, it's selected!!! - else - pDC->TextOut(pt.x, pt.y, chToken); // Draw overtop of existing character - } - else // No selection, just draw normally - pDC->TextOut(pt.x, pt.y, chToken); // Draw overtop of existing character - } - } - - pDC->SelectObject(pTemp); // Restore original font (Free hyperlink font) -} - -// -// Builds an offset list of all valid hyperlinks. This function is optimized by only -// searching through characters which are visible, ignoring those that would require -// scrolling to view. When this function encounters an token and it determines it's -// hyperlink-able (Using virtual IsWordHyper) the starting offset and length of where -// the hyperlink exists within the actual CEdit buffer is recorded and pushed onto a vector -// - -void CHyperEdit::BuildOffsetList(int iCharStart, int iCharFinish) -{ - // Entire control buffer and individual token buffer - CString csBuff, csToken; - GetWindowText(csBuff); - - // Clear previous hyperlink offsets from vector and rebuild list - m_linkOffsets.clear(); - - // Rebuild list of hyperlink character offsets starting at iChar1 and ending at iChar2 - for(int i=iCharStart, iCurr=iCharStart; i<=iCharFinish; i++){ - - if(IsWhiteSpace(csBuff, i)){ // Also checks for EOB (End of buffer) - - _TOKEN_OFFSET off = { iCurr /* Start offset */, i-iCurr /* Length */ }; - - // Let client programmer define what tokens can be hyperlinked or not - // if one desires he/she could easily implement an easy check using a - // regex library on email addresses without using the mailto: suffix - if(IsWordHyper(csToken)) - m_linkOffsets.push_back(off); // Save the starting offset for current token - - csToken.Empty(); // Flush previous token - iCurr = i+1; // Initialize the start offset for next token - } - else - csToken += csBuff.GetAt(i); // Concatenate another char onto token - } -} - -// -// Returns a hyperlinks URL if mouse cursor is actually over a URL -// and if mouse isn't over any hyperlink it returns a empty CString -// - -CString CHyperEdit::IsHyperlink(CPoint& pt) const -{ - CString csBuff, csTemp; - GetWindowText(csBuff); - - // Get the index of the character caret is currently over or closest too - int iChar = LOWORD(CharFromPos(pt)); - - // Check 'iChar' against vector offsets and determine if current character - // user is hovering over is inside any hyperlink range - for(int i=0; i<m_linkOffsets.size(); i++){ - - // If character user is over is within range of this token URL, let's exit and send the URL - if(iChar>=m_linkOffsets[i].iStart && iChar<(m_linkOffsets[i].iStart+m_linkOffsets[i].iLength)){ - csTemp = csBuff.Mid(m_linkOffsets[i].iStart, m_linkOffsets[i].iLength); - return csTemp; - } - } - - csTemp.Empty(); // NULL string on error - return csTemp; -} - -// -// Returns TRUE if indexed character within buffer is whitespace -// - -BOOL CHyperEdit::IsWhiteSpace(const CString& csBuff, int iIndex) const -{ - // Check for End of buffer - if(iIndex > csBuff.GetLength()) return FALSE; - if(csBuff.GetLength() == iIndex) return TRUE; - - // Check for whitespace - if(csBuff.GetAt(iIndex) == WHITE_SPACE1) return TRUE; - if(csBuff.GetAt(iIndex) == WHITE_SPACE2) return TRUE; - if(csBuff.GetAt(iIndex) == WHITE_SPACE3) return TRUE; - if(csBuff.GetAt(iIndex) == WHITE_SPACE4) return TRUE; - - return FALSE; -} - -// -// Virtual function which can be overridden by client programmer to allow advanced -// hyperlinking. For example in a derived class we could use regex to validate -// email addresses without using the 'mailto:' suffix. -// - -BOOL CHyperEdit::IsWordHyper(const CString& csToken) const -{ - if(IsWhiteSpace(csToken, 0)) return FALSE; // Whitespace YUCK!!! - - CString csTemp(csToken); // Make a temp copy so we can convert it's case - csTemp.MakeLower(); - - // A trivial approach to hyperlinking web sites or email addresses - // In a derived class we can use regex if we like to only hyperlink - // fully qualified URL's etc... - if(csTemp.Left(7) == "http://") return TRUE; - if(csTemp.Left(7) == "mailto:") return TRUE; - //if(csTemp.Left(5) == "file:") return TRUE; - - return FALSE; // Not a valid token by default -} - -#pragma warning(default:4244) -#pragma warning(default:4018) Deleted: trunk/OpenMPT/mptrack/HyperEdit3.cpp =================================================================== --- trunk/OpenMPT/mptrack/HyperEdit3.cpp 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/HyperEdit3.cpp 2013-06-27 17:16:21 UTC (rev 2418) @@ -1,132 +0,0 @@ -// HyperLink.cpp : implementation file -// -// HyperLink static control. Will open the default browser with the given URL -// when the user clicks on the link. -// -// Copyright (C) 1997 - 1999 Chris Maunder -// All rights reserved. May not be sold for profit. -// -// Thanks to P\xE5l K. T\xF8nder for auto-size and window caption changes. -// -// "GotoURL" function by Stuart Patterson -// As seen in the August, 1997 Windows Developer's Journal. -// Copyright 1997 by Miller Freeman, Inc. All rights reserved. -// Modified by Chris Maunder to use TCHARs instead of chars. -// -// "Default hand cursor" from Paul DiLascia's Jan 1998 MSJ article. - -// These function have been borrowed from the article: -// http://www.codeproject.com/miscctrl/hyperlink.asp - -#include "stdafx.h" -//#include "timeline.h" -#include "HyperEdit.h" - -#include "atlconv.h" // for Unicode conversion - requires #include <afxdisp.h> // MFC OLE automation classes - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -void CHyperEdit::SetDefaultCursor() -{ - if(m_hHandCursor == NULL){ // No cursor handle - load our own - // Get the windows directory - CString strWndDir; - GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH); - strWndDir.ReleaseBuffer(); - - strWndDir += _T("\\winhlp32.exe"); - - // This retrieves cursor #106 from winhlp32.exe, which is a hand pointer - HMODULE hModule = LoadLibrary(strWndDir); - - if(hModule){ - HCURSOR hHandCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106)); - - if(hHandCursor) - m_hHandCursor = CopyCursor(hHandCursor); - } - - FreeLibrary(hModule); - } -} - -LONG CHyperEdit::GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata) -{ - HKEY hkey; - LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey); - - if (retval == ERROR_SUCCESS) { - long datasize = MAX_PATH; - TCHAR data[MAX_PATH]; - RegQueryValue(hkey, NULL, data, &datasize); - lstrcpy(retdata,data); - RegCloseKey(hkey); - } - - return retval; -} - -void CHyperEdit::ReportError(int nError) -{ - CString str; - switch (nError) { - case 0: str = "The operating system is out\nof memory or resources."; break; - case SE_ERR_PNF: str = "The specified path was not found."; break; - case SE_ERR_FNF: str = "The specified file was not found."; break; - case ERROR_BAD_FORMAT: str = "The .EXE file is invalid\n(non-Win32 .EXE or error in .EXE image)."; break; - case SE_ERR_ACCESSDENIED: str = "The operating system denied\naccess to the specified file."; break; - case SE_ERR_ASSOCINCOMPLETE: str = "The filename association is\nincomplete or invalid."; break; - case SE_ERR_DDEBUSY: str = "The DDE transaction could not\nbe completed because other DDE transactions\nwere being processed."; break; - case SE_ERR_DDEFAIL: str = "The DDE transaction failed."; break; - case SE_ERR_DDETIMEOUT: str = "The DDE transaction could not\nbe completed because the request timed out."; break; - case SE_ERR_DLLNOTFOUND: str = "The specified dynamic-link library was not found."; break; - case SE_ERR_NOASSOC: str = "There is no application associated\nwith the given filename extension."; break; - case SE_ERR_OOM: str = "There was not enough memory to complete the operation."; break; - case SE_ERR_SHARE: str = "A sharing violation occurred. "; - default: str.Format(_T("Unknown Error (%d) occurred."), nError); break; - } - str = "Unable to open hyperlink:\n\n" + str; - AfxMessageBox(str, MB_ICONEXCLAMATION | MB_OK); -} - -HINSTANCE CHyperEdit::GotoURL(LPCTSTR url, int showcmd) -{ - TCHAR key[MAX_PATH + MAX_PATH]; - - // First try ShellExecute() - HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd); - - // If it failed, get the .htm regkey and lookup the program - if ((UINT)result <= HINSTANCE_ERROR) { - - if (GetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) { - lstrcat(key, _T("\\shell\\open\\command")); - - if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) { - TCHAR *pos; - pos = _tcsstr(key, _T("\"%1\"")); - if (pos == NULL) { // No quotes found - pos = _tcsstr(key, _T("%1")); // Check for %1, without quotes - if (pos == NULL) // No parameter at all... - pos = key+lstrlen(key)-1; - else - *pos = '\0'; // Remove the parameter - } - else - *pos = '\0'; // Remove the parameter - - lstrcat(pos, _T(" ")); - lstrcat(pos, url); - - USES_CONVERSION; - result = (HINSTANCE) WinExec(T2A(key),showcmd); - } - } - } - - return result; -} \ No newline at end of file Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-06-27 17:16:21 UTC (rev 2418) @@ -18,7 +18,6 @@ #include "../sounddev/SoundDevice.h" #include "vstplug.h" #include "CreditStatic.h" -#include "hyperEdit.h" #include "commctrl.h" #include "../common/version.h" #include "../test/test.h" @@ -1468,7 +1467,6 @@ protected: CPaletteBitmap m_bmp; CCreditStatic m_static; - CHyperEdit m_heContact; public: CAboutDlg() {} @@ -1496,7 +1494,6 @@ { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CModTypeDlg) - DDX_Control(pDX, IDC_EDIT1, m_heContact); //}}AFX_DATA_MAP } @@ -1525,9 +1522,8 @@ m_bmp.LoadBitmap(MAKEINTRESOURCE(IDB_MPTRACK)); SetDlgItemText(IDC_EDIT2, CString("Build Date: ") + MptVersion::GetBuildDateString().c_str()); SetDlgItemText(IDC_EDIT3, CString("OpenMPT ") + MptVersion::GetVersionStringExtended().c_str()); - m_heContact.SetWindowText(mpt::String::Replace(MptVersion::GetContactString(), "\n", "\r\n" ).c_str()); m_static.SubclassDlgItem(IDC_CREDITS,this); - m_static.SetCredits((mpt::String::Replace(MptVersion::GetFullCreditsString(), "\n", "|") + "||||||").c_str()); + m_static.SetCredits((mpt::String::Replace(MptVersion::GetFullCreditsString(), "\n", "|") + "|" + mpt::String::Replace(MptVersion::GetContactString(), "\n", "|" ) + "||||||").c_str()); m_static.SetSpeed(DISPLAY_SLOW); m_static.SetColor(BACKGROUND_COLOR, RGB(138, 165, 219)); // Background Colour m_static.SetTransparent(); // Set parts of bitmaps with RGB(192,192,192) transparent Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-06-27 17:16:21 UTC (rev 2418) @@ -389,15 +389,14 @@ // Dialog // -IDD_ABOUTBOX DIALOGEX 0, 0, 267, 254 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +IDD_ABOUTBOX DIALOGEX 0, 0, 267, 210 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "About OpenMPT" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN CONTROL "",IDC_BITMAP1,"Static",SS_BLACKRECT | SS_NOTIFY | SS_CENTERIMAGE,5,3,256,81,WS_EX_CLIENTEDGE CTEXT "",IDC_CREDITS,5,116,256,72,0,WS_EX_STATICEDGE - DEFPUSHBUTTON "OK",IDOK,229,235,32,14,WS_GROUP - EDITTEXT IDC_EDIT1,5,194,221,55,ES_CENTER | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK,5,192,256,14,WS_GROUP EDITTEXT IDC_EDIT2,15,100,233,12,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER EDITTEXT IDC_EDIT3,26,87,212,12,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER END @@ -1599,7 +1598,7 @@ IDD_ABOUTBOX, DIALOG BEGIN RIGHTMARGIN, 261 - BOTTOMMARGIN, 249 + BOTTOMMARGIN, 205 END IDD_OPTIONS_PLAYER, DIALOG Modified: trunk/OpenMPT/mptrack/mptrack_08.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_08.vcproj 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/mptrack_08.vcproj 2013-06-27 17:16:21 UTC (rev 2418) @@ -343,18 +343,6 @@ > </File> <File - RelativePath=".\HyperEdit.cpp" - > - </File> - <File - RelativePath=".\HyperEdit2.cpp" - > - </File> - <File - RelativePath=".\HyperEdit3.cpp" - > - </File> - <File RelativePath="InputHandler.cpp" > </File> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2013-06-27 17:16:21 UTC (rev 2418) @@ -374,9 +374,6 @@ <ClCompile Include="EffectVis.cpp" /> <ClCompile Include="ExceptionHandler.cpp" /> <ClCompile Include="Globals.cpp" /> - <ClCompile Include="HyperEdit.cpp" /> - <ClCompile Include="HyperEdit2.cpp" /> - <ClCompile Include="HyperEdit3.cpp" /> <ClCompile Include="InputHandler.cpp" /> <ClCompile Include="KeyConfigDlg.cpp" /> <ClCompile Include="Mainbar.cpp" /> @@ -548,7 +545,6 @@ <ClInclude Include="EffectInfo.h" /> <ClInclude Include="ExceptionHandler.h" /> <ClInclude Include="Globals.h" /> - <ClInclude Include="HyperEdit.h" /> <ClInclude Include="InputHandler.h" /> <ClInclude Include="Mainbar.h" /> <ClInclude Include="Mainfrm.h" /> @@ -602,6 +598,7 @@ <ClInclude Include="VstPresets.h" /> </ItemGroup> <ItemGroup> + <None Include="..\soundlib\Tunings\built-inTunings.tc" /> <None Include="res\bitmap1.bmp" /> <None Include="res\colors.bmp" /> <None Include="res\dragging.cur" /> @@ -622,7 +619,6 @@ <None Include="res\visnode1.bmp" /> <None Include="res\vispcnode.bmp" /> <None Include="res\vumeters.bmp" /> - <None Include="res\built-inTunings.tc" /> <None Include="res\defaultKeybindings.mkb" /> <None Include="mptrack.reg" /> <None Include="VTune\mptrack.vpj" /> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2013-06-27 16:17:29 UTC (rev 2417) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2013-06-27 17:16:21 UTC (rev 2418) @@ -337,15 +337,6 @@ <ClCompile Include="Globals.cpp"> <Filter>Source Files\mptrack</Filter> </ClCompile> - <ClCompile Include="HyperEdit.cpp"> - <Filter>Source Files\mptrack</Filter> - </ClCompile> - <ClCompile Include="HyperEdit2.cpp"> - <Filter>Source Files\mptrack</Filter> - </ClCompile> - <ClCompile Include="HyperEdit3.cpp"> - <Filter>Source Files\mptrack</Filter> - </ClCompile> <ClCompile Include="InputHandler.cpp"> <Filter>Source Files\mptrack</Filter> </ClCompile> @@ -768,9 +759,6 @@ <ClInclude Include="Globals.h"> <Filter>Header Files\mptrack</Filter> </ClInclude> - <ClInclude Include="HyperEdit.h"> - <Filter>Header Files\mptrack</Filter> - </ClInclude> <ClInclude Include="InputHandler.h"> <Filter>Header Files\mptrack</Filter> </ClInclude> @@ -899,9 +887,6 @@ <None Include="res\vumeters.bmp"> <Filter>Resource Files</Filter> </None> - <None Include="res\built-inTunings.tc"> - <Filter>Resource Files</Filter> - </None> <None Include="res\colors.bmp"> <Filter>Resource Files</Filter> </None> @@ -965,6 +950,7 @@ <None Include="res\vispcnode.bmp"> <Filter>Resource Files</Filter> </None> + <None Include="..\soundlib\Tunings\built-inTunings.tc" /> </ItemGroup> <ItemGroup> <Filter Include="Header Files"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-06-27 17:54:50
|
Revision: 2420 http://sourceforge.net/p/modplug/code/2420 Author: manxorist Date: 2013-06-27 17:54:39 +0000 (Thu, 27 Jun 2013) Log Message: ----------- [Reg] Remove possibility to export mp3 encapsulated in .wav files. It's not 1999 anymore. [Fix] CSoundFile::Read can render 32bit floating point samples since a while now, there is no need for rendering to integer and then converting to floating point with M2W_32ToFloat in the wave exporter. Remove M2W_32ToFloat. This also allows floating point output samples > 1.0 because the mixer headroom does not get clamped away when converting to integer output samples. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/mod2wave.h Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-06-27 17:34:05 UTC (rev 2419) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-06-27 17:54:39 UTC (rev 2420) @@ -65,41 +65,6 @@ "Thrash Metal", "Anime", "JPop", "Synthpop" }; -// this converts a buffer of 32-bit integer sample data to 32 bit floating point -static void M2W_32ToFloat(void *pBuffer, long nCount) -{ -// const float _ki2f = 1.0f / (float)(ULONG)(0x80000000); //olivier - const float _ki2f = 1.0f / (float)(ULONG)(0x7fffffff); //ericus' 32bit fix -// const float _ki2f = 1.0f / (float)(ULONG)(0x7ffffff); //robin - _asm { - mov esi, pBuffer - mov ecx, nCount - fld _ki2f - test ecx, 1 - jz evencount - fild dword ptr [esi] - fmul st(0), st(1) - fstp dword ptr [esi] - add esi, 4 -evencount: - shr ecx, 1 - or ecx, ecx - jz loopdone -cvtloop: - fild dword ptr [esi] - fild dword ptr [esi+4] - fmul st(0), st(2) - fstp dword ptr [esi+4] - fmul st(0), st(1) - fstp dword ptr [esi] - add esi, 8 - dec ecx - jnz cvtloop -loopdone: - fstp st(0) - } -} - /////////////////////////////////////////////////// // CWaveConvert - setup for converting a wave file @@ -170,11 +135,8 @@ CheckDlgButton(IDC_CHECK3, MF_CHECKED); // HQ resampling CheckDlgButton(IDC_CHECK5, MF_UNCHECKED); // rewbs.NoNormalize -// -> CODE#0024 -// -> DESC="wav export update" CheckDlgButton(IDC_CHECK4, MF_UNCHECKED); CheckDlgButton(IDC_CHECK6, MF_UNCHECKED); -// -! NEW_FEATURE#0024 SetDlgItemInt(IDC_EDIT3, m_nMinOrder); m_SpinMinOrder.SetRange(0, m_nNumOrders); @@ -192,28 +154,14 @@ m_CbnSampleRate.SetItemData(m_CbnSampleRate.AddString(s), n); if (n == WaveFormat.Format.nSamplesPerSec) m_CbnSampleRate.SetCurSel(i); } -// -> CODE#0024 -// -> DESC="wav export update" -// for (UINT j=0; j<3*3; j++) for (UINT j=0; j<3*4; j++) -// -! NEW_FEATURE#0024 { -// -> CODE#0024 -// -> DESC="wav export update" -// UINT n = 3*3-1-j; -// UINT nBits = 8 << (n % 3); -// UINT nChannels = 1 << (n/3); UINT n = 3*4-1-j; UINT nBits = 8 * (1 + n % 4); UINT nChannels = 1 << (n/4); -// -! NEW_FEATURE#0024 if ((nBits >= 16) || (nChannels <= 2)) { -// -> CODE#0024 -// -> DESC="wav export update" -// wsprintf(s, "%s, %d Bit", gszChnCfgNames[j/3], nBits); wsprintf(s, "%s, %d-Bit", gszChnCfgNames[n/4], nBits); -// -! NEW_FEATURE#0024 UINT ndx = m_CbnSampleFormat.AddString(s); m_CbnSampleFormat.SetItemData(ndx, (nChannels<<8)|nBits); if ((nBits == WaveFormat.Format.wBitsPerSample) && (nChannels == WaveFormat.Format.nChannels)) @@ -233,11 +181,7 @@ { DWORD dwFormat = m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel()); UINT nBits = dwFormat & 0xFF; -// -> CODE#0024 -// -> DESC="wav export update" -// ::EnableWindow( ::GetDlgItem(m_hWnd, IDC_CHECK5), (nBits <= 16) ? TRUE : FALSE ); ::EnableWindow( ::GetDlgItem(m_hWnd, IDC_CHECK5), (nBits <= 24) ? TRUE : FALSE ); -// -! NEW_FEATURE#0024 } @@ -271,15 +215,15 @@ UpdateDialog(); } -//rewbs.resamplerConf + void CWaveConvert::OnPlayerOptions() //---------------------------------- { CMainFrame::m_nLastOptionsPage = 2; CMainFrame::GetMainFrame()->OnViewOptions(); } -//end rewbs.resamplerConf + void CWaveConvert::OnCheck2() //--------------------------- { @@ -335,10 +279,7 @@ } } -// -> CODE#0024 -// -> DESC="wav export update" m_bChannelMode = IsDlgButtonChecked(IDC_CHECK4) != BST_UNCHECKED; -// -! NEW_FEATURE#0024 m_bInstrumentMode= IsDlgButtonChecked(IDC_CHECK6) != BST_UNCHECKED; // WaveFormatEx @@ -351,11 +292,7 @@ if ((WaveFormat.Format.nChannels != 1) && (WaveFormat.Format.nChannels != 4)) WaveFormat.Format.nChannels = 2; WaveFormat.Format.wBitsPerSample = (WORD)(dwFormat & 0xFF); -// -> CODE#0024 -// -> DESC="wav export update" -// if ((WaveFormat.Format.wBitsPerSample != 8) && (WaveFormat.Format.wBitsPerSample != 32)) WaveFormat.Format.wBitsPerSample = 16; if ((WaveFormat.Format.wBitsPerSample != 8) && (WaveFormat.Format.wBitsPerSample != 24) && (WaveFormat.Format.wBitsPerSample != 32)) WaveFormat.Format.wBitsPerSample = 16; -// -! NEW_FEATURE#0024 WaveFormat.Format.nBlockAlign = (WaveFormat.Format.wBitsPerSample * WaveFormat.Format.nChannels) / 8; WaveFormat.Format.nAvgBytesPerSec = WaveFormat.Format.nSamplesPerSec * WaveFormat.Format.nBlockAlign; @@ -542,10 +479,6 @@ && (pafd->pwfx->wFormatTag == WAVE_FORMAT_MPEGLAYER3) && (pafd->pwfx->cbSize == sizeof(MPEGLAYER3WAVEFORMAT)-sizeof(WAVEFORMATEX)) && (pafd->pwfx->nSamplesPerSec >= 11025) -// -> CODE#0024 -// -> DESC="wav export update" -// && (pafd->pwfx->nSamplesPerSec <= 48000) -// -! NEW_FEATURE#0024 && (pafd->pwfx->nChannels >= 1) && (pafd->pwfx->nChannels <= 2) && (m_nNumFormats < MAX_FORMATS)) @@ -655,11 +588,8 @@ return TRUE; } -// -> CODE#0024 -// -> DESC="wav export update" -//#define WAVECONVERTBUFSIZE 2048 + #define WAVECONVERTBUFSIZE MIXBUFFERSIZE //Going over MIXBUFFERSIZE can kill VSTPlugs -// -! NEW_FEATURE#0024 void CDoWaveConvert::OnButton1() @@ -695,14 +625,10 @@ MixerSettings oldmixersettings = m_pSndFile->m_MixerSettings; MixerSettings mixersettings = TrackerSettings::Instance().m_MixerSettings; mixersettings.gdwMixingFreq = m_pWaveFormat->nSamplesPerSec; - mixersettings.m_SampleFormat = (SampleFormat)m_pWaveFormat->wBitsPerSample; + mixersettings.m_SampleFormat = (m_pWaveFormat->wFormatTag == WAVE_FORMAT_IEEE_FLOAT) ? SampleFormatFloat32 : (SampleFormat)m_pWaveFormat->wBitsPerSample; mixersettings.gnChannels = m_pWaveFormat->nChannels; m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); -// -> CODE#0024 -// -> DESC="wav export update" -// if ((m_bNormalize) && (m_pWaveFormat->wBitsPerSample <= 16)) if ((m_bNormalize) && (m_pWaveFormat->wBitsPerSample <= 24)) -// -! NEW_FEATURE#0024 { mixersettings.m_SampleFormat = SampleFormatInt24; #ifndef NO_AGC @@ -810,10 +736,6 @@ if (l > lMax) lMax = l; if (-l > lMax) lMax = -l; } - } else - if (m_pWaveFormat->wFormatTag == WAVE_FORMAT_IEEE_FLOAT) - { - M2W_32ToFloat(buffer, lRead*(nBytesPerSample>>2)); } UINT lWrite = fwrite(buffer, 1, lRead*nBytesPerSample, f); @@ -1001,10 +923,9 @@ void CDoAcmConvert::OnButton1() //----------------------------- { - bool bSaveWave = false; CHAR s[80], fext[_MAX_EXT]; WAVEFILEHEADER wfh; - WAVEDATAHEADER wdh, chunk; + WAVEDATAHEADER wdh; ACMSTREAMHEADER ash; WAVEFORMATEX wfxSrc; HACMDRIVER hADriver = nullptr; @@ -1024,8 +945,6 @@ progress = ::GetDlgItem(m_hWnd, IDC_PROGRESS1); if ((!m_pSndFile) || (!m_lpszFileName) || (!m_pwfx) || (!m_hadid)) goto OnError; _splitpath(m_lpszFileName, NULL, NULL, NULL, fext); - if (((m_bSaveInfoField) && (m_pwfx->wFormatTag != WAVE_FORMAT_MPEGLAYER3)) - || (!lstrcmpi(fext, ".wav"))) bSaveWave = true; MemsetZero(wfxSrc); wfxSrc.wFormatTag = WAVE_FORMAT_PCM; wfxSrc.nSamplesPerSec = m_pwfx->nSamplesPerSec; @@ -1071,23 +990,10 @@ wdh.id_data = IFFID_data; wdh.length = 0; data_ofs = 0; - if(bSaveWave) + if(m_bSaveInfoField) { - fwrite(&wfh, 1, sizeof(wfh), f); - chunk.id_data = IFFID_fmt; - chunk.length = sizeof(WAVEFORMATEX) + m_pwfx->cbSize; - fwrite(&chunk, 1, sizeof(chunk), f); - fwrite(m_pwfx, 1, chunk.length, f); - wfh.filesize += sizeof(chunk) + chunk.length + 4; - data_ofs = ftell(f); - fwrite(&wdh, 1, sizeof(wdh), f); - wfh.filesize += sizeof(wdh); - } else - if(!bSaveWave && m_bSaveInfoField) - { // Write ID3v2.4 Tags m_FileTags.WriteID3v2Tags(f); - } DWORD oldsndcfg = m_pSndFile->m_MixerSettings.MixerFlags; oldrepeat = m_pSndFile->GetRepeatCount(); @@ -1206,21 +1112,6 @@ wfh.filesize++; } - if (bSaveWave) - { - if (m_bSaveInfoField) - { - m_FileTags.WriteWaveTags(&wdh, &wfh, f); - } - wfh.filesize += wdh.length; - fseek(f, 0, SEEK_SET); - fwrite(&wfh, 1, sizeof(wfh), f); - if (data_ofs > 0) - { - fseek(f, data_ofs, SEEK_SET); - fwrite(&wdh, 1, sizeof(wdh), f); - } - } fclose(f); if (!m_bAbort) retval = IDOK; OnError: Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2013-06-27 17:34:05 UTC (rev 2419) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2013-06-27 17:54:39 UTC (rev 2420) @@ -1871,7 +1871,7 @@ strcat_s(sFName, CountOf(sFName), ".mp3"); FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, "mp3", sFName, - "MPEG Layer III Files (*.mp3)|*.mp3|Layer3 Wave Files (*.wav)|*.wav||", + "MPEG Layer III Files (*.mp3)|*.mp3||", TrackerSettings::Instance().GetWorkingDirectory(DIR_EXPORT), false, &nFilterIndex); Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2013-06-27 17:34:05 UTC (rev 2419) +++ trunk/OpenMPT/mptrack/mod2wave.h 2013-06-27 17:54:39 UTC (rev 2420) @@ -30,11 +30,8 @@ CComboBox m_CbnSampleRate, m_CbnSampleFormat; CSpinButtonCtrl m_SpinLoopCount, m_SpinMinOrder, m_SpinMaxOrder; -// -> CODE#0024 -// -> DESC="wav export update" bool m_bChannelMode; // Render by channel -// -! NEW_FEATURE#0024 - bool m_bInstrumentMode; // Render by instrument + bool m_bInstrumentMode; // Render by instrument public: CWaveConvert(CWnd *parent, ORDERINDEX minOrder, ORDERINDEX maxOrder, ORDERINDEX numOrders); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-06-27 21:46:46
|
Revision: 2424 http://sourceforge.net/p/modplug/code/2424 Author: saga-games Date: 2013-06-27 21:46:35 +0000 (Thu, 27 Jun 2013) Log Message: ----------- [Ref] Remove now unused CFileTagging::WriteWaveTags Modified Paths: -------------- trunk/OpenMPT/mptrack/tagging.cpp trunk/OpenMPT/mptrack/tagging.h Modified: trunk/OpenMPT/mptrack/tagging.cpp =================================================================== --- trunk/OpenMPT/mptrack/tagging.cpp 2013-06-27 21:39:22 UTC (rev 2423) +++ trunk/OpenMPT/mptrack/tagging.cpp 2013-06-27 21:46:35 UTC (rev 2424) @@ -9,10 +9,9 @@ #include "stdafx.h" -#include "mptrack.h" #include "tagging.h" +#include "../soundlib/Endianness.h" #include "../common/version.h" -#include "Sndfile.h" /////////////////////////////////////////////////// // CFileTagging - helper class for writing tags @@ -120,81 +119,3 @@ totalID3v2Size += (sizeof(tFrame) + sFramecontent.size()); } - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// RIFF (WAVE) Tags - -// Write RIFF tags -void CFileTagging::WriteWaveTags(WAVEDATAHEADER *wdh, WAVEFILEHEADER *wfh, FILE *f) -//--------------------------------------------------------------------------------- -{ - if(!f || !wdh || !wfh) return; - - WAVEFILEHEADER list; - WAVEDATAHEADER chunk; - off_t info_ofs, end_ofs; - const uint8 zero = 0; - - struct - { - uint32 id; - std::string *data; - } chunks[] = - { - { IFFID_ICMT, &comments }, - { IFFID_INAM, &title }, - { IFFID_IART, &artist }, - { IFFID_IPRD, &album }, - { IFFID_ICOP, &url }, - { IFFID_IGNR, &genre }, - { IFFID_ISFT, &encoder }, - { IFFID_ICRD, &year }, - }; - - info_ofs = ftell(f); - if (info_ofs & 1) - { - wdh->length++; - fwrite(&zero, 1, 1, f); - info_ofs++; - } - list.id_RIFF = IFFID_LIST; - list.id_WAVE = IFFID_INFO; - list.filesize = 4; - fwrite(&list, 1, sizeof(list), f); - - for(size_t iCmt = 0; iCmt < CountOf(chunks); iCmt++) - { - if(chunks[iCmt].data->empty()) - { - continue; - } - - std::string data = *chunks[iCmt].data; - // Special case: Expand year to full date - if(chunks[iCmt].id == IFFID_ICRD) - { - data += "-01-01"; - } - - chunk.id_data = chunks[iCmt].id; - chunk.length = data.length() + 1; - - fwrite(&chunk, 1, sizeof(chunk), f); - fwrite(data.c_str(), 1, chunk.length, f); - list.filesize += chunk.length + sizeof(chunk); - - // Chunks must be even-sized - if(chunk.length & 1) - { - fwrite(&zero, 1, 1, f); - list.filesize++; - } - } - // Update INFO size - end_ofs = ftell(f); - fseek(f, info_ofs, SEEK_SET); - fwrite(&list, 1, sizeof(list), f); - fseek(f, end_ofs, SEEK_SET); - wfh->filesize += list.filesize + 8; -} Modified: trunk/OpenMPT/mptrack/tagging.h =================================================================== --- trunk/OpenMPT/mptrack/tagging.h 2013-06-27 21:39:22 UTC (rev 2423) +++ trunk/OpenMPT/mptrack/tagging.h 2013-06-27 21:46:35 UTC (rev 2424) @@ -11,7 +11,6 @@ #pragma once #include <string> -#include "Wav.h" /////////////////////////////////////////////////////////////////////////////////////////////////// // ID3v2.4 Tags @@ -68,7 +67,6 @@ public: // Write Tags void WriteID3v2Tags(FILE *f); - void WriteWaveTags(WAVEDATAHEADER *wdh, WAVEFILEHEADER *wfh, FILE *f); // Tag data std::string title, artist, album, year, comments, genre, url, encoder, bpm; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-07-03 18:41:09
|
Revision: 2482 http://sourceforge.net/p/modplug/code/2482 Author: manxorist Date: 2013-07-03 18:40:57 +0000 (Wed, 03 Jul 2013) Log Message: ----------- [Imp] Always enable "Export as MP3" menu entry and display a useful message box when no MP3 codec is found. [Imp] Tiny improvement to program startup time by loading ACM mp3 converters only when needed (when the user clicks "Export as MP3"). [Mod] Remove /nomp3 command line switch. MP3 support is now initialized on demand, so this provides no gain anymore. [Fix] Fix crash when ACM initialization fails. Modified Paths: -------------- trunk/OpenMPT/mptrack/ACMConvert.cpp trunk/OpenMPT/mptrack/ACMConvert.h trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/mod2wave.h Modified: trunk/OpenMPT/mptrack/ACMConvert.cpp =================================================================== --- trunk/OpenMPT/mptrack/ACMConvert.cpp 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/ACMConvert.cpp 2013-07-03 18:40:57 UTC (rev 2482) @@ -31,17 +31,6 @@ BOOL ACMConvert::layer3Present = FALSE; -#define TRAP_ACM_FAULTS - -#ifdef TRAP_ACM_FAULTS -void ACMConvert::AcmExceptionHandler() -//------------------------------------ -{ - theApp.GetACMConvert().m_hACMInst = NULL; - theApp.WriteProfileInt("Settings", "DisableACM", 1); -} -#endif - BOOL ACMConvert::InitializeACM(BOOL bNoAcm) //----------------------------------------- { @@ -57,13 +46,12 @@ } catch(...) {} if (!bNoAcm) { -#ifdef TRAP_ACM_FAULTS try { -#endif m_hACMInst = LoadLibrary(TEXT("MSACM32.DLL")); -#ifdef TRAP_ACM_FAULTS - } catch(...) {} -#endif + } catch(...) + { + m_hACMInst = NULL; + } } SetErrorMode(fuErrorMode); if (m_hBladeEnc != NULL) @@ -97,9 +85,7 @@ m_hACMInst = NULL; return bOk; } -#ifdef TRAP_ACM_FAULTS try { -#endif *(FARPROC *)&pfnAcmGetVersion = GetProcAddress(m_hACMInst, "acmGetVersion"); dwVersion = 0; if (pfnAcmGetVersion) dwVersion = pfnAcmGetVersion(); @@ -131,11 +117,13 @@ pwfx->nBlockAlign = (WORD)((pwfx->nChannels * pwfx->wBitsPerSample) / 8); pwfx->nAvgBytesPerSec = pwfx->nSamplesPerSec * pwfx->nBlockAlign; m_pfnAcmFormatEnum(NULL, &afd, AcmFormatEnumCB, NULL, ACM_FORMATENUMF_CONVERT); + bOk = TRUE; } -#ifdef TRAP_ACM_FAULTS - } catch(...){} -#endif - return TRUE; + } catch(...) + { + // nothing + } + return bOk; } @@ -157,6 +145,7 @@ FreeLibrary(m_hBladeEnc); m_hBladeEnc = NULL; } + layer3Present = FALSE; return TRUE; } Modified: trunk/OpenMPT/mptrack/ACMConvert.h =================================================================== --- trunk/OpenMPT/mptrack/ACMConvert.h 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/ACMConvert.h 2013-07-03 18:40:57 UTC (rev 2482) @@ -35,10 +35,10 @@ PFNACMFORMATENUM m_pfnAcmFormatEnum; static BOOL layer3Present; -public: +private: BOOL InitializeACM(BOOL bNoAcm = FALSE); BOOL UninitializeACM(); - static void AcmExceptionHandler(); +public: MMRESULT AcmFormatEnum(HACMDRIVER had, LPACMFORMATDETAILSA pafd, ACMFORMATENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum); MMRESULT AcmDriverOpen(LPHACMDRIVER, HACMDRIVERID, DWORD); MMRESULT AcmDriverDetails(HACMDRIVERID hadid, LPACMDRIVERDETAILS padd, DWORD fdwDetails); @@ -51,12 +51,19 @@ MMRESULT AcmStreamConvert(HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwConvert); BOOL IsLayer3Present() const { return layer3Present; }; - ACMConvert() + ACMConvert(bool noACM) { + layer3Present = FALSE; m_hBladeEnc = NULL; m_hLameEnc = NULL; m_hACMInst = NULL; + m_pfnAcmFormatEnum = NULL; + InitializeACM(noACM); } + ~ACMConvert() + { + UninitializeACM(); + } protected: static BOOL CALLBACK AcmFormatEnumCB(HACMDRIVERID, LPACMFORMATDETAILS, DWORD, DWORD); Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-07-03 18:40:57 UTC (rev 2482) @@ -17,6 +17,7 @@ #include "vstplug.h" #include "mod2wave.h" #include "Wav.h" +#include "ACMConvert.h" extern UINT nMixingRates[NUMMIXRATE]; extern LPCSTR gszChnCfgNames[3]; @@ -374,7 +375,7 @@ pwfx->wBitsPerSample = 16; pwfx->nBlockAlign = (pwfx->nChannels * pwfx->wBitsPerSample) / 8; pwfx->nAvgBytesPerSec = pwfx->nSamplesPerSec * pwfx->nBlockAlign; - theApp.GetACMConvert().AcmFormatEnum(NULL, &afd, AcmFormatEnumCB, (DWORD)this, ACM_FORMATENUMF_CONVERT); + acmConvert.AcmFormatEnum(NULL, &afd, AcmFormatEnumCB, (DWORD)this, ACM_FORMATENUMF_CONVERT); m_bDriversEnumerated = TRUE; m_CbnDriver.SetCurSel(m_nDriverIndex); if (m_bSaveInfoField) CheckDlgButton(IDC_CHECK3, MF_CHECKED); @@ -416,7 +417,7 @@ pwfx->wBitsPerSample = 16; pwfx->nBlockAlign = pwfx->nChannels * pwfx->wBitsPerSample / 8; pwfx->nAvgBytesPerSec = pwfx->nSamplesPerSec * pwfx->nBlockAlign; - theApp.GetACMConvert().AcmFormatEnum(NULL, &afd, AcmFormatEnumCB, (DWORD)this, ACM_FORMATENUMF_CONVERT); + acmConvert.AcmFormatEnum(NULL, &afd, AcmFormatEnumCB, (DWORD)this, ACM_FORMATENUMF_CONVERT); m_CbnFormat.SetCurSel(m_nFormatIndex); } @@ -457,7 +458,7 @@ } MemsetZero(add); add.cbStruct = sizeof(add); - if (theApp.GetACMConvert().AcmDriverDetails(hdid, &add, 0L) == MMSYSERR_NOERROR) + if (acmConvert.AcmDriverDetails(hdid, &add, 0L) == MMSYSERR_NOERROR) { Drivers[m_nNumDrivers] = hdid; CHAR *pszName = ((add.szLongName[0]) && (strlen(add.szLongName) < 40)) ? add.szLongName : add.szShortName; @@ -891,9 +892,10 @@ END_MESSAGE_MAP() -CDoAcmConvert::CDoAcmConvert(CSoundFile *sndfile, LPCSTR fname, PWAVEFORMATEX pwfx, HACMDRIVERID hadid, CFileTagging *pTag, CWnd *parent): - CDialog(IDD_PROGRESS, parent) -//-------------------------------------------------------------------------------------------------------------------------------------- +CDoAcmConvert::CDoAcmConvert(CSoundFile *sndfile, LPCSTR fname, PWAVEFORMATEX pwfx, HACMDRIVERID hadid, CFileTagging *pTag, ACMConvert &acmConvert_, CWnd *parent): + CDialog(IDD_PROGRESS, parent), + acmConvert(acmConvert_) +//----------------------------------------------------------------------------------------------------------------------------------------------------------------- { m_pSndFile = sndfile; m_lpszFileName = fname; @@ -956,12 +958,12 @@ wfxSrc.cbSize = 0; dwDstBufSize = WAVECONVERTBUFSIZE; // Open the ACM Driver - if (theApp.GetACMConvert().AcmDriverOpen(&hADriver, m_hadid, 0L) != MMSYSERR_NOERROR) goto OnError; - if (theApp.GetACMConvert().AcmStreamOpen(&hAStream, hADriver, &wfxSrc, m_pwfx, NULL, 0L, 0L, ACM_STREAMOPENF_NONREALTIME) != MMSYSERR_NOERROR) goto OnError; + if (acmConvert.AcmDriverOpen(&hADriver, m_hadid, 0L) != MMSYSERR_NOERROR) goto OnError; + if (acmConvert.AcmStreamOpen(&hAStream, hADriver, &wfxSrc, m_pwfx, NULL, 0L, 0L, ACM_STREAMOPENF_NONREALTIME) != MMSYSERR_NOERROR) goto OnError; // This call is useless for BLADEenc/LAMEenc, but required for ACM codecs! - if (theApp.GetACMConvert().AcmStreamSize(hAStream, WAVECONVERTBUFSIZE, &dwDstBufSize, ACM_STREAMSIZEF_SOURCE) != MMSYSERR_NOERROR) goto OnError; + if (acmConvert.AcmStreamSize(hAStream, WAVECONVERTBUFSIZE, &dwDstBufSize, ACM_STREAMSIZEF_SOURCE) != MMSYSERR_NOERROR) goto OnError; // This call is useless for ACM, but required for BLADEenc/LAMEenc codecs! - if (theApp.GetACMConvert().AcmStreamSize(hAStream, WAVECONVERTBUFSIZE, &dwDstBufSize, ACM_STREAMSIZEF_DESTINATION) != MMSYSERR_NOERROR) goto OnError; + if (acmConvert.AcmStreamSize(hAStream, WAVECONVERTBUFSIZE, &dwDstBufSize, ACM_STREAMSIZEF_DESTINATION) != MMSYSERR_NOERROR) goto OnError; //if (dwDstBufSize > 0x10000) dwDstBufSize = 0x10000; pcmBuffer = new BYTE[WAVECONVERTBUFSIZE]; dstBuffer = new BYTE[dwDstBufSize]; @@ -974,7 +976,7 @@ ash.cbSrcLength = WAVECONVERTBUFSIZE; ash.pbDst = dstBuffer; ash.cbDstLength = dwDstBufSize; - if (theApp.GetACMConvert().AcmStreamPrepareHeader(hAStream, &ash, 0L) != MMSYSERR_NOERROR) goto OnError; + if (acmConvert.AcmStreamPrepareHeader(hAStream, &ash, 0L) != MMSYSERR_NOERROR) goto OnError; bPrepared = true; // Creating the output file while ((f = fopen(m_lpszFileName, "wb")) == NULL) @@ -1049,7 +1051,7 @@ ullSamples += lRead; ash.cbSrcLength = lRead * wfxSrc.nBlockAlign + WAVECONVERTBUFSIZE - pcmBufSize; ash.cbDstLengthUsed = 0; - if (theApp.GetACMConvert().AcmStreamConvert(hAStream, &ash, (lRead) ? ACM_STREAMCONVERTF_BLOCKALIGN : ACM_STREAMCONVERTF_END) != MMSYSERR_NOERROR) break; + if (acmConvert.AcmStreamConvert(hAStream, &ash, (lRead) ? ACM_STREAMCONVERTF_BLOCKALIGN : ACM_STREAMCONVERTF_END) != MMSYSERR_NOERROR) break; do { if (::PeekMessage(&msg, m_hWnd, 0, 0, PM_REMOVE)) @@ -1107,9 +1109,9 @@ fclose(f); if (!m_bAbort) retval = IDOK; OnError: - if (bPrepared) theApp.GetACMConvert().AcmStreamUnprepareHeader(hAStream, &ash, 0L); - if (hAStream != NULL) theApp.GetACMConvert().AcmStreamClose(hAStream, 0L); - if (hADriver != NULL) theApp.GetACMConvert().AcmDriverClose(hADriver, 0L); + if (bPrepared) acmConvert.AcmStreamUnprepareHeader(hAStream, &ash, 0L); + if (hAStream != NULL) acmConvert.AcmStreamClose(hAStream, 0L); + if (hADriver != NULL) acmConvert.AcmDriverClose(hADriver, 0L); if (pcmBuffer) delete[] pcmBuffer; if (dstBuffer) delete[] dstBuffer; EndDialog(retval); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2013-07-03 18:40:57 UTC (rev 2482) @@ -16,6 +16,7 @@ #include "mpdlgs.h" #include "dlg_misc.h" #include "Dlsbank.h" +#include "ACMConvert.h" #include "mod2wave.h" #include "mod2midi.h" #include "vstplug.h" @@ -94,7 +95,6 @@ ON_UPDATE_COMMAND_UI(ID_VIEW_INSTRUMENTS, OnUpdateXMITMPTOnly) //ON_UPDATE_COMMAND_UI(ID_VIEW_COMMENTS, OnUpdateXMITMPTOnly) ON_UPDATE_COMMAND_UI(ID_VIEW_MIDIMAPPING, OnUpdateHasMIDIMappings) - ON_UPDATE_COMMAND_UI(ID_FILE_SAVEASMP3, OnUpdateMP3Encode) ON_UPDATE_COMMAND_UI(ID_VIEW_EDITHISTORY, OnUpdateITMPTOnly) ON_UPDATE_COMMAND_UI(ID_FILE_SAVECOMPAT, OnUpdateCompatExportableOnly) //}}AFX_MSG_MAP @@ -1861,6 +1861,15 @@ void CModDoc::OnFileMP3Convert() //------------------------------ { + + // Initialize ACM Support + ACMConvert acmConvert(TrackerSettings::Instance().noACM); + if(!acmConvert.IsLayer3Present()) + { + Reporting::Error("No MP3 codec found. Please install an MP3 ACM codec or put lame_enc.dll in OpenMPT's root directory.", "OpenMPT - MP3 Export"); + return; + } + int nFilterIndex = 0; TCHAR sFName[_MAX_FNAME] = ""; CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); @@ -1892,7 +1901,7 @@ strcpy(fext, (nFilterIndex == 2) ? ".wav" : ".mp3"); strcat(s, fext); } - CLayer3Convert wsdlg(&m_SndFile, pMainFrm); + CLayer3Convert wsdlg(&m_SndFile, pMainFrm, acmConvert); if (m_SndFile.m_szNames[0][0]) wsdlg.m_bSaveInfoField = TRUE; if (wsdlg.DoModal() != IDOK) return; wsdlg.GetFormat(&wfx, &hadid); @@ -1907,7 +1916,7 @@ // Saving file CFileTagging *pTag = (wsdlg.m_bSaveInfoField) ? &wsdlg.m_FileTags : NULL; - CDoAcmConvert dwcdlg(&m_SndFile, s, &wfx.wfx, hadid, pTag, pMainFrm); + CDoAcmConvert dwcdlg(&m_SndFile, s, &wfx.wfx, hadid, pTag, acmConvert, pMainFrm); dwcdlg.m_dwFileLimit = wsdlg.m_dwFileLimit; dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; dwcdlg.DoModal(); @@ -2208,14 +2217,6 @@ } -// Enable menu item if MP3 encoder is present -void CModDoc::OnUpdateMP3Encode(CCmdUI *p) -//---------------------------------------- -{ - if (p) p->Enable(theApp.CanEncodeLayer3()); -} - - // Enable menu item if current module type supports compatibility export void CModDoc::OnUpdateCompatExportableOnly(CCmdUI *p) //--------------------------------------------------- Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/Moddoc.h 2013-07-03 18:40:57 UTC (rev 2482) @@ -432,7 +432,6 @@ afx_msg void OnUpdateXMITMPTOnly(CCmdUI *p); afx_msg void OnUpdateITMPTOnly(CCmdUI *p); afx_msg void OnUpdateHasMIDIMappings(CCmdUI *p); - afx_msg void OnUpdateMP3Encode(CCmdUI *pCmdUI); afx_msg void OnUpdateCompatExportableOnly(CCmdUI *p); afx_msg void OnPatternRestart() { OnPatternRestart(true); } //rewbs.customKeys afx_msg void OnPatternRestart(bool loop); //rewbs.customKeys Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-07-03 18:40:57 UTC (rev 2482) @@ -269,13 +269,13 @@ //================================================ { public: - bool m_bNoAcm, m_bNoDls, m_bNoMp3, m_bSafeMode, m_bWavEx, m_bNoPlugins, m_bDebug, + bool m_bNoAcm, m_bNoDls, m_bSafeMode, m_bWavEx, m_bNoPlugins, m_bDebug, m_bPortable, m_bNoSettingsOnNewVersion; public: CMPTCommandLineInfo() { - m_bNoAcm = m_bNoDls = m_bNoMp3 = m_bSafeMode = m_bWavEx = + m_bNoAcm = m_bNoDls = m_bSafeMode = m_bWavEx = m_bNoPlugins = m_bDebug = m_bNoSettingsOnNewVersion = m_bPortable = false; } virtual void ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast); @@ -290,7 +290,6 @@ if (!lstrcmpi(lpszParam, "nologo")) { m_bShowSplash = FALSE; return; } else if (!lstrcmpi(lpszParam, "nodls")) { m_bNoDls = true; return; } else if (!lstrcmpi(lpszParam, "noacm")) { m_bNoAcm = true; return; } else - if (!lstrcmpi(lpszParam, "nomp3")) { m_bNoMp3 = true; return; } else if (!lstrcmpi(lpszParam, "wavex")) { m_bWavEx = true; return; } else if (!lstrcmpi(lpszParam, "noplugs")) { m_bNoPlugins = true; return; } else if (!lstrcmpi(lpszParam, "debug")) { m_bDebug = true; return; } else @@ -841,8 +840,8 @@ CMPTCommandLineInfo cmdInfo; if (GetDSoundVersion() >= 0x0700) cmdInfo.m_bWavEx = true; ParseCommandLine(cmdInfo); + TrackerSettings::Instance().noACM = cmdInfo.m_bNoAcm; - // Set up paths to store configuration in SetupPaths(cmdInfo.m_bPortable); @@ -911,10 +910,6 @@ // Load DLS Banks if (!cmdInfo.m_bNoDls) LoadDefaultDLSBanks(); - // Initialize ACM Support - if (GetProfileInt("Settings", "DisableACM", 0)) cmdInfo.m_bNoAcm = true; - if (!cmdInfo.m_bNoMp3) GetACMConvert().InitializeACM(cmdInfo.m_bNoAcm); - // Initialize Plugins if (!cmdInfo.m_bNoPlugins) InitializeDXPlugins(); @@ -991,9 +986,6 @@ // Uninitialize Plugins UninitializeDXPlugins(); - // Uninitialize ACM - GetACMConvert().UninitializeACM(); - return CWinApp::ExitInstance(); } Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/Mptrack.h 2013-07-03 18:40:57 UTC (rev 2482) @@ -11,7 +11,6 @@ #pragma once #include "resource.h" // main symbols -#include "ACMConvert.h" #include <windows.h> #include "../mptrack/MpTrackUtil.h" #include "../mptrack/Reporting.h" @@ -124,7 +123,6 @@ TCHAR m_szPluginCacheFileName[_MAX_PATH]; TCHAR m_szStringsFileName[_MAX_PATH]; bool m_bPortableMode; - ACMConvert acmConvert; public: CTrackApp(); @@ -162,7 +160,6 @@ CVstPluginManager *GetPluginManager() const { return m_pPluginManager; } void GetDefaultMidiMacro(MIDIMacroConfig &cfg) const { cfg = m_MidiCfg; } void SetDefaultMidiMacro(const MIDIMacroConfig &cfg) { m_MidiCfg = cfg; } - BOOL CanEncodeLayer3() const { return acmConvert.IsLayer3Present(); } BOOL IsWaveExEnabled() const { return m_bExWaveSupport; } BOOL IsDebug() const { return m_bDebugMode; } LPCTSTR GetConfigFileName() const { return m_szConfigFileName; } @@ -181,8 +178,6 @@ /// Removes item from MRU-list; most recent item has index zero. void RemoveMruItem(const int nItem); - ACMConvert &GetACMConvert() { return acmConvert; }; - // Splash Screen protected: void StartSplashScreen(); Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-07-03 18:40:57 UTC (rev 2482) @@ -41,6 +41,8 @@ TrackerSettings::TrackerSettings() //-------------------------------- { + noACM = false; + m_ShowSplashScreen = true; gnPatternSpacing = 0; gbPatternRecord = TRUE; @@ -277,6 +279,9 @@ RpcStringFree(&Str); } + // also via command line switch + noACM = noACM || CMainFrame::GetPrivateProfileLong("Settings", "DisableACM", 0, iniFile); + // GUI Stuff m_ShowSplashScreen = CMainFrame::GetPrivateProfileBool("Display", "ShowSplashScreen", m_ShowSplashScreen, iniFile); gbMdiMaximize = CMainFrame::GetPrivateProfileLong("Display", "MDIMaximize", gbMdiMaximize, iniFile); Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2013-07-03 18:40:57 UTC (rev 2482) @@ -156,6 +156,9 @@ public: + // CommandLine switches + bool noACM; + // MIDI recording enum RecordAftertouchOptions { Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2013-07-03 00:32:07 UTC (rev 2481) +++ trunk/OpenMPT/mptrack/mod2wave.h 2013-07-03 18:40:57 UTC (rev 2482) @@ -12,6 +12,8 @@ #include "tagging.h" +class ACMConvert; + /////////////////////////////////////////////////////////////////////////////////////////////////// // Direct To Disk Recording @@ -98,9 +100,10 @@ MPEGLAYER3WAVEFORMAT Formats[MAX_FORMATS]; HACMDRIVERID Drivers[MAX_DRIVERS]; BOOL m_bInitialFound, m_bDriversEnumerated; + ACMConvert &acmConvert; public: - CLayer3Convert(CSoundFile *pSndFile, CWnd *parent):CDialog(IDD_LAYER3CONVERT, parent) + CLayer3Convert(CSoundFile *pSndFile, CWnd *parent, ACMConvert &acmConvert_):CDialog(IDD_LAYER3CONVERT, parent), acmConvert(acmConvert_) { m_dwFileLimit = m_dwSongLimit = m_nFormatIndex = m_nDriverIndex = 0; m_bSaveInfoField = FALSE; m_pSndFile = pSndFile; } void GetFormat(PMPEGLAYER3WAVEFORMAT pwfx, HACMDRIVERID *phadid); @@ -134,9 +137,10 @@ PWAVEFORMATEX m_pwfx; HACMDRIVERID m_hadid; CFileTagging m_FileTags; + ACMConvert &acmConvert; public: - CDoAcmConvert(CSoundFile *sndfile, LPCSTR fname, PWAVEFORMATEX pwfx, HACMDRIVERID hadid, CFileTagging *pInfo, CWnd *parent=NULL); + CDoAcmConvert(CSoundFile *sndfile, LPCSTR fname, PWAVEFORMATEX pwfx, HACMDRIVERID hadid, CFileTagging *pInfo, ACMConvert &acmConvert_, CWnd *parent=NULL); BOOL OnInitDialog(); void OnCancel() { m_bAbort = TRUE; } afx_msg void OnButton1(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-07-03 21:59:00
|
Revision: 2485 http://sourceforge.net/p/modplug/code/2485 Author: saga-games Date: 2013-07-03 21:58:52 +0000 (Wed, 03 Jul 2013) Log Message: ----------- [Ref] Clean up channel manager a bit (e.g. remove unnecessary critical sections, GUI is not multithreaded anyway) Modified Paths: -------------- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/ChannelManagerDlg.h Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2013-07-03 21:45:54 UTC (rev 2484) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2013-07-03 21:58:52 UTC (rev 2485) @@ -57,14 +57,10 @@ void CChannelManagerDlg::SetDocument(void * parent) { - if(parent && parentCtrl != parent){ - - EnterCriticalSection(&applying); - + if(parent && parentCtrl != parent) + { parentCtrl = parent; nChannelsOld = 0; - - LeaveCriticalSection(&applying); InvalidateRect(NULL, FALSE); } } @@ -83,16 +79,15 @@ { if(!m_hWnd || show == false) return; - EnterCriticalSection(&applying); nChannelsOld = 0; - LeaveCriticalSection(&applying); InvalidateRect(NULL, FALSE); } BOOL CChannelManagerDlg::Show(void) { - if(this->m_hWnd != NULL && show == false){ + if(this->m_hWnd != NULL && show == false) + { ShowWindow(SW_SHOW); show = true; } @@ -102,7 +97,8 @@ BOOL CChannelManagerDlg::Hide(void) { - if(this->m_hWnd != NULL && show == true){ + if(this->m_hWnd != NULL && show == true) + { ResetState(true, true, true, true, true); ShowWindow(SW_HIDE); show = false; @@ -113,7 +109,6 @@ CChannelManagerDlg::CChannelManagerDlg(void) { - InitializeCriticalSection(&applying); mouseTracking = false; rightButton = false; leftButton = false; @@ -130,7 +125,6 @@ CChannelManagerDlg::~CChannelManagerDlg(void) { if(this == CChannelManagerDlg::sharedInstance_) CChannelManagerDlg::sharedInstance_ = NULL; - DeleteCriticalSection(&applying); if(bkgnd) DeleteObject(bkgnd); } @@ -140,20 +134,21 @@ HWND menu = ::GetDlgItem(m_hWnd,IDC_TAB1); - TCITEM tie; - tie.mask = TCIF_TEXT | TCIF_IMAGE; - tie.iImage = -1; - tie.pszText = "Solo/Mute"; - TabCtrl_InsertItem(menu, 0, &tie); - tie.pszText = "Record select"; - TabCtrl_InsertItem(menu, 1, &tie); - tie.pszText = "Fx plugins"; - TabCtrl_InsertItem(menu, 2, &tie); - tie.pszText = "Reorder/Remove"; - TabCtrl_InsertItem(menu, 3, &tie); + TCITEM tie; + tie.mask = TCIF_TEXT | TCIF_IMAGE; + tie.iImage = -1; + tie.pszText = "Solo/Mute"; + TabCtrl_InsertItem(menu, 0, &tie); + tie.pszText = "Record select"; + TabCtrl_InsertItem(menu, 1, &tie); + tie.pszText = "Fx plugins"; + TabCtrl_InsertItem(menu, 2, &tie); + tie.pszText = "Reorder/Remove"; + TabCtrl_InsertItem(menu, 3, &tie); currentTab = 0; - for(CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++){ + for(CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++) + { pattern[nChn] = nChn; removed[nChn] = false; select[nChn] = false; @@ -173,17 +168,16 @@ { CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(!m_pSndFile || !pModDoc) return; + if(!pModDoc) return; - EnterCriticalSection(&applying); + CriticalSection cs; CHANNELINDEX nChannels, newpat[MAX_BASECHANNELS], newMemory[4][MAX_BASECHANNELS]; // Count new number of channels , copy pattern pointers & manager internal store memory nChannels = 0; - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { if(!removed[pattern[nChn]]) { @@ -195,14 +189,9 @@ } BeginWaitCursor(); - CriticalSection cs; //Creating new order-vector for ReArrangeChannels. - std::vector<CHANNELINDEX> newChnOrder; - for(CHANNELINDEX nChn = 0; nChn < nChannels; nChn++) - { - newChnOrder.push_back(newpat[nChn]); - } + std::vector<CHANNELINDEX> newChnOrder(newpat, newpat + nChannels); if(pModDoc->ReArrangeChannels(newChnOrder) != nChannels) { cs.Leave(); @@ -210,7 +199,6 @@ Reporting::Error("Rearranging channels failed"); ResetState(true, true, true, true, true); - LeaveCriticalSection(&applying); return; } @@ -233,7 +221,6 @@ EndWaitCursor(); ResetState(true, true, true, true, true); - LeaveCriticalSection(&applying); // Update document & player pModDoc->SetModified(); @@ -245,67 +232,52 @@ void CChannelManagerDlg::OnClose() { - EnterCriticalSection(&applying); - if(bkgnd) DeleteObject((HBITMAP)bkgnd); ResetState(true, true, true, true, true); bkgnd = NULL; show = false; - LeaveCriticalSection(&applying); - CDialog::OnCancel(); } void CChannelManagerDlg::OnSelectAll() { - EnterCriticalSection(&applying); - CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(m_pSndFile) - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + if(pModDoc) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) select[nChn] = true; - LeaveCriticalSection(&applying); InvalidateRect(NULL, FALSE); } void CChannelManagerDlg::OnInvert() { - EnterCriticalSection(&applying); - CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(m_pSndFile) - for(CHANNELINDEX nChn = 0 ; nChn < m_pSndFile->m_nChannels ; nChn++) + if(pModDoc) + for(CHANNELINDEX nChn = 0 ; nChn < pModDoc->GetNumChannels() ; nChn++) select[nChn] = !select[nChn]; - - LeaveCriticalSection(&applying); InvalidateRect(NULL, FALSE); } void CChannelManagerDlg::OnAction1() { - EnterCriticalSection(&applying); + CriticalSection cs; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); - CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; + CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : nullptr; - if(pModDoc && m_pSndFile) + if(pModDoc) { - int nbOk = 0, nbSelect = 0; switch(currentTab) { case 0: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(!removed[nThisChn]) @@ -314,7 +286,7 @@ if(select[nThisChn] && pModDoc->IsChannelSolo(nThisChn)) nbOk++; } } - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(select[nThisChn] && !removed[nThisChn]){ @@ -326,7 +298,7 @@ } break; case 1: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(!removed[nThisChn]) @@ -336,7 +308,7 @@ if(select[nThisChn] && rec == 1) nbOk++; } } - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(!removed[nThisChn] && select[nThisChn]) @@ -347,14 +319,14 @@ } break; case 2: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(select[nThisChn] && !removed[nThisChn]) pModDoc->NoFxChannel(nThisChn, false); } break; case 3: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(select[nThisChn]) removed[nThisChn] = !removed[nThisChn]; @@ -366,30 +338,27 @@ ResetState(); - LeaveCriticalSection(&applying); pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS, NULL); InvalidateRect(NULL,FALSE); } - else LeaveCriticalSection(&applying); } void CChannelManagerDlg::OnAction2() { - EnterCriticalSection(&applying); + CriticalSection cs; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); - CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; + CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : nullptr; - if(pModDoc && m_pSndFile) + if(pModDoc) { int nbOk = 0, nbSelect = 0; switch(currentTab){ case 0: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(!removed[nThisChn]) @@ -398,7 +367,7 @@ if(select[nThisChn] && pModDoc->IsChannelMuted(nThisChn)) nbOk++; } } - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(select[nThisChn] && !removed[nThisChn]) @@ -410,7 +379,7 @@ } break; case 1: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(!removed[nThisChn]) @@ -420,7 +389,7 @@ if(select[nThisChn] && rec == 2) nbOk++; } } - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(!removed[nThisChn] && select[nThisChn]) @@ -431,7 +400,7 @@ } break; case 2: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; if(select[nThisChn] && !removed[nThisChn]) pModDoc->NoFxChannel(nThisChn, true); @@ -445,12 +414,10 @@ } if(currentTab != 3) ResetState(); - LeaveCriticalSection(&applying); pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS, NULL); InvalidateRect(NULL,FALSE); } - else LeaveCriticalSection(&applying); } void CChannelManagerDlg::OnStore(void) @@ -458,13 +425,16 @@ if(!show) return; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); - CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; + CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : nullptr; + if(pModDoc == nullptr) + { + return; + } switch(currentTab) { case 0: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; memory[0][nThisChn] = 0; @@ -473,15 +443,15 @@ } break; case 1: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) memory[1][nChn] = pModDoc->IsChannelRecord(pattern[nChn]); break; case 2: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) memory[2][nChn] = pModDoc->IsChannelNoFx(pattern[nChn]); break; case 3: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) memory[3][nChn] = pattern[nChn]; break; default: @@ -494,15 +464,18 @@ if(!show) return; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); - CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; + CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : nullptr; + if(pModDoc == nullptr) + { + return; + } - EnterCriticalSection(&applying); + CriticalSection cs; switch(currentTab) { case 0: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; pModDoc->MuteChannel(nThisChn, (memory[0][nChn] & 1) != 0); @@ -511,18 +484,18 @@ break; case 1: pModDoc->ReinitRecordState(true); - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); 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(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) pModDoc->NoFxChannel(pattern[nChn], memory[2][nChn] != 0); break; case 3: - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) pattern[nChn] = memory[3][nChn]; ResetState(false, false, false, false, true); break; @@ -531,7 +504,6 @@ } if(currentTab != 3) ResetState(); - LeaveCriticalSection(&applying); pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS, NULL); InvalidateRect(NULL,FALSE); @@ -686,11 +658,10 @@ { CDialog::OnActivate(nState,pWndOther,bMinimized); - if(show && !bMinimized){ + if(show && !bMinimized) + { ResetState(true, true, true, true, false); - EnterCriticalSection(&applying); nChannelsOld = 0; - LeaveCriticalSection(&applying); InvalidateRect(NULL,TRUE); } } @@ -705,25 +676,22 @@ { if(!m_hWnd || show == false) return; - EnterCriticalSection(&applying); + CriticalSection cs; - PAINTSTRUCT pDC; - ::BeginPaint(m_hWnd,&pDC); - CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : nullptr; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : nullptr; - if(!pModDoc || !m_pSndFile) + if(pModDoc == nullptr) { - ::EndPaint(m_hWnd,&pDC); - LeaveCriticalSection(&applying); return; } + PAINTSTRUCT pDC; + ::BeginPaint(m_hWnd,&pDC); + CHAR s[256]; UINT c=0,l=0; - CHANNELINDEX nChannels = m_pSndFile->m_nChannels; + CHANNELINDEX nChannels = pModDoc->GetNumChannels(); UINT nLines = nChannels / CM_NB_COLS + (nChannels % CM_NB_COLS ? 1 : 0); CRect client,btn; @@ -738,14 +706,15 @@ { // Window height is not sufficient => resize window ::EndPaint(m_hWnd,&pDC); - LeaveCriticalSection(&applying); + cs.Leave(); 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){ + if(currentTab == 3 && moveRect && bkgnd) + { HDC bdc = ::CreateCompatibleDC(pDC.hdc); ::SelectObject(bdc,bkgnd); @@ -785,7 +754,6 @@ } ::EndPaint(m_hWnd,&pDC); - LeaveCriticalSection(&applying); return; } @@ -807,12 +775,13 @@ HBRUSH red = CreateSolidBrush(RGB(192,96,96)); HBRUSH green = CreateSolidBrush(RGB(96,192,96)); + CSoundFile &sndFile = pModDoc->GetrSoundFile(); for(CHANNELINDEX nChn = 0; nChn < nChannels; nChn++) { CHANNELINDEX nThisChn = pattern[nChn]; - if(m_pSndFile->ChnSettings[nThisChn].szName[0] != '\0') - wsprintf(s, "%d: %s", (nThisChn + 1), m_pSndFile->ChnSettings[nThisChn].szName); + if(sndFile.ChnSettings[nThisChn].szName[0] != '\0') + wsprintf(s, "%d: %s", (nThisChn + 1), sndFile.ChnSettings[nThisChn].szName); else wsprintf(s, "Channel %d", nThisChn + 1); @@ -831,8 +800,8 @@ switch(currentTab) { case 0: - 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); + if(sndFile.ChnSettings[nThisChn].dwFlags[CHN_MUTE]) FillRect(pDC.hdc,&btn,red); + else if(sndFile.ChnSettings[nThisChn].dwFlags[CHN_SOLO]) FillRect(pDC.hdc,&btn,green); else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 1: @@ -844,7 +813,7 @@ else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 2: - if(m_pSndFile->ChnSettings[nThisChn].dwFlags[CHN_NOFX]) FillRect(pDC.hdc,&btn,red); + if(sndFile.ChnSettings[nThisChn].dwFlags[CHN_NOFX]) FillRect(pDC.hdc,&btn,red); else FillRect(pDC.hdc,&btn,green); break; case 3: @@ -870,7 +839,6 @@ DeleteObject((HBRUSH)red); ::EndPaint(m_hWnd,&pDC); - LeaveCriticalSection(&applying); } void CChannelManagerDlg::OnMove(int x, int y) @@ -888,12 +856,11 @@ if(!PtInRect(client,point)) return false; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); - CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; + CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : nullptr; - if(pModDoc && m_pSndFile) + if(pModDoc) { - //UINT nChannels = m_pSndFile->m_nChannels; + //UINT nChannels = pModDoc->GetNumChannels(); UINT nColns = CM_NB_COLS; //UINT nLines = nChannels / nColns + (nChannels % nColns ? 1 : 0); @@ -906,7 +873,7 @@ x = x / dx; y = y / dy; CHANNELINDEX n = static_cast<CHANNELINDEX>(y * nColns + x); - if(n >= 0 && n < (int)m_pSndFile->m_nChannels) + if(n >= 0 && n < (int)pModDoc->GetNumChannels()) { if(id) *id = n; if(invalidate) @@ -922,6 +889,7 @@ return false; } + void CChannelManagerDlg::ResetState(bool bSelection, bool bMove, bool bButton, bool bInternal, bool bOrder) { for(CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++) @@ -950,10 +918,8 @@ { if(!m_hWnd || show == false) return 0; - EnterCriticalSection(&applying); mouseTracking = false; ResetState(false, true, false, true); - LeaveCriticalSection(&applying); return 0; } @@ -962,9 +928,7 @@ { if(!m_hWnd || show == false) return 0; - EnterCriticalSection(&applying); mouseTracking = false; - LeaveCriticalSection(&applying); return 0; } @@ -973,8 +937,6 @@ { if(!m_hWnd || show == false) return; - EnterCriticalSection(&applying); - if(!mouseTracking) { TRACKMOUSEEVENT tme; @@ -989,64 +951,65 @@ { mx = point.x; my = point.y; - LeaveCriticalSection(&applying); return; } MouseEvent(nFlags,point,moveRect ? 0 : (leftButton ? CM_BT_LEFT : CM_BT_RIGHT)); - - LeaveCriticalSection(&applying); } void CChannelManagerDlg::OnLButtonUp(UINT /*nFlags*/,CPoint point) { if(!m_hWnd || show == false) return; - EnterCriticalSection(&applying); + CriticalSection cs; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(moveRect && m_pSndFile) + if(moveRect && pModDoc) { CHANNELINDEX n, i, k; CHANNELINDEX newpat[MAX_BASECHANNELS]; k = CHANNELINDEX_INVALID; bool hit = ButtonHit(point,&n,NULL); - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) if(k == CHANNELINDEX_INVALID && select[pattern[nChn]]) k = nChn; - if(hit && m_pSndFile && k != CHANNELINDEX_INVALID){ + if(hit && k != CHANNELINDEX_INVALID){ i = 0; k = 0; - while(i < n){ + while(i < n) + { while(i < n && select[pattern[i]]) i++; - if(i < n && !select[pattern[i]]){ + if(i < n && !select[pattern[i]]) + { newpat[k] = pattern[i]; pattern[i] = CHANNELINDEX_INVALID; k++; i++; } } - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels ; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels() ; nChn++) { - if(pattern[nChn] != CHANNELINDEX_INVALID && select[pattern[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] == CHANNELINDEX_INVALID) i++; - if(i < m_pSndFile->m_nChannels && pattern[i] != CHANNELINDEX_INVALID){ + while(i < pModDoc->GetNumChannels()) + { + while(i < pModDoc->GetNumChannels() && pattern[i] == CHANNELINDEX_INVALID) i++; + if(i < pModDoc->GetNumChannels() && pattern[i] != CHANNELINDEX_INVALID) + { newpat[k] = pattern[i]; k++; i++; } } - for(CHANNELINDEX nChn = 0; nChn < m_pSndFile->m_nChannels; nChn++) + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) { pattern[nChn] = newpat[nChn]; select[nChn] = false; @@ -1064,48 +1027,36 @@ state[pattern[nChn]] = false; if(pModDoc) pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS, NULL); - - LeaveCriticalSection(&applying); } void CChannelManagerDlg::OnLButtonDown(UINT nFlags,CPoint point) { if(!m_hWnd || show == false) return; - EnterCriticalSection(&applying); - if(!ButtonHit(point,NULL,NULL)) ResetState(true, false, false, false); leftButton = true; MouseEvent(nFlags,point,CM_BT_LEFT); omx = point.x; omy = point.y; - - LeaveCriticalSection(&applying); } void CChannelManagerDlg::OnRButtonUp(UINT /*nFlags*/,CPoint /*point*/) { if(!m_hWnd || show == false) return; - EnterCriticalSection(&applying); - ResetState(false, false, true, false); rightButton = false; CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm->GetActiveDoc(); if(pModDoc) pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS, NULL); - - LeaveCriticalSection(&applying); } void CChannelManagerDlg::OnRButtonDown(UINT nFlags,CPoint point) { if(!m_hWnd || show == false) return; - EnterCriticalSection(&applying); - rightButton = true; if(moveRect) { @@ -1118,8 +1069,6 @@ omx = point.x; omy = point.y; } - - LeaveCriticalSection(&applying); } void CChannelManagerDlg::MouseEvent(UINT nFlags,CPoint point,BYTE button) @@ -1134,28 +1083,33 @@ CMainFrame * pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = pMainFrm ? pMainFrm->GetActiveDoc() : NULL; - CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - if(!pModDoc || !m_pSndFile) return; + if(!pModDoc) return; - if(hit && !state[n] && button){ - if(nFlags & MK_CONTROL){ - if(button == CM_BT_LEFT){ + if(hit && !state[n] && button) + { + if(nFlags & MK_CONTROL) + { + if(button == CM_BT_LEFT) + { if(!select[n] && !removed[n]) move[n] = invalidate; select[n] = true; } else if(button == CM_BT_RIGHT) select[n] = false; } - else if(!removed[n] || currentTab == 3){ - switch(currentTab){ + else if(!removed[n] || currentTab == 3) + { + switch(currentTab) + { case 0: if(button == CM_BT_LEFT) { - if(!pModDoc->IsChannelSolo(n) || pModDoc->IsChannelMuted(n)){ + if(!pModDoc->IsChannelSolo(n) || pModDoc->IsChannelMuted(n)) + { GetClientRect(&client); 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); + for(CHANNELINDEX nChn = 0; nChn < pModDoc->GetNumChannels(); nChn++) if(nChn != n) pModDoc->MuteChannel(nChn, true); client.SetRect(client.left + 10,client.top + 38,client.right - 8,client.bottom - 30); invalidate = client; } @@ -1171,7 +1125,8 @@ case 1: BYTE rec; rec = pModDoc->IsChannelRecord(n); - if(!rec || rec != (button == CM_BT_LEFT ? 1 : 2)){ + if(!rec || rec != (button == CM_BT_LEFT ? 1 : 2)) + { if(button == CM_BT_LEFT) pModDoc->Record1Channel(n); else pModDoc->Record2Channel(n); } else @@ -1219,27 +1174,23 @@ state[n] = false; InvalidateRect(&invalidate, FALSE); - } - else{ + } else + { GetClientRect(&client); client.SetRect(client.left + 10,client.top + 38,client.right - 8,client.bottom - 30); InvalidateRect(&client, FALSE); } } -// -! NEW_FEATURE#0015 - void CChannelManagerDlg::OnLButtonDblClk(UINT nFlags, CPoint point) { - // TODO: Add your message handler code here and/or call default OnLButtonDown(nFlags, point); CDialog::OnLButtonDblClk(nFlags, point); } void CChannelManagerDlg::OnRButtonDblClk(UINT nFlags, CPoint point) { - // TODO: Add your message handler code here and/or call default OnRButtonDown(nFlags, point); CDialog::OnRButtonDblClk(nFlags, point); } Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.h =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.h 2013-07-03 21:45:54 UTC (rev 2484) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.h 2013-07-03 21:58:52 UTC (rev 2485) @@ -39,7 +39,6 @@ CChannelManagerDlg(void); ~CChannelManagerDlg(void); - CRITICAL_SECTION applying; CHANNELINDEX memory[4][MAX_BASECHANNELS]; CHANNELINDEX pattern[MAX_BASECHANNELS]; bool removed[MAX_BASECHANNELS]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-07-04 01:04:57
|
Revision: 2494 http://sourceforge.net/p/modplug/code/2494 Author: saga-games Date: 2013-07-04 01:04:48 +0000 (Thu, 04 Jul 2013) Log Message: ----------- [Fix] Pattern Editor: When removing channels or rows from a pattern, a crash could occour when the cursor was previously placed in a now inaccesible part of the pattern. Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2013-07-04 00:40:54 UTC (rev 2493) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2013-07-04 01:04:48 UTC (rev 2494) @@ -1498,6 +1498,7 @@ rect.top += m_szHeader.cy; } InvalidateRect(&rect, FALSE); + SanitizeCursor(); } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2013-07-04 00:40:54 UTC (rev 2493) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2013-07-04 01:04:48 UTC (rev 2494) @@ -3704,7 +3704,7 @@ //----------------------------------------------------------- { CSoundFile *pSndFile = GetSoundFile(); - if(pSndFile != nullptr && pSndFile->Patterns.IsValidPat(GetCurrentPattern())) + if(pSndFile != nullptr && pSndFile->Patterns.IsValidPat(GetCurrentPattern() && pSndFile->Patterns[GetCurrentPattern()].IsValidRow(cursor.GetRow()))) { return *pSndFile->Patterns[GetCurrentPattern()].GetpModCommand(cursor.GetRow(), cursor.GetChannel()); } @@ -3714,7 +3714,18 @@ } +// Sanitize cursor so that it can't point to an invalid position in the current pattern. +void CViewPattern::SanitizeCursor() +//--------------------------------- +{ + CSoundFile *pSndFile = GetSoundFile(); + if(pSndFile != nullptr && pSndFile->Patterns.IsValidPat(GetCurrentPattern())) + { + m_Cursor.Sanitize(GetSoundFile()->Patterns[m_nPattern].GetNumRows(), GetSoundFile()->Patterns[m_nPattern].GetNumChannels()); + } +}; + // Returns pointer to modcommand at given position. // If the position is not valid, a pointer to a dummy command is returned. ModCommand &CViewPattern::GetModCommand(CSoundFile &sndFile, const ModCommandPos &pos) Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2013-07-04 00:40:54 UTC (rev 2493) +++ trunk/OpenMPT/mptrack/View_pat.h 2013-07-04 01:04:48 UTC (rev 2494) @@ -234,6 +234,7 @@ ORDERINDEX GetCurrentOrder() const { return static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); } // Get ModCommand at the pattern cursor position. ModCommand &GetCursorCommand() { return GetModCommand(m_Cursor); }; + void SanitizeCursor(); UINT GetColumnOffset(PatternCursor::Columns column) const; POINT GetPointFromPosition(PatternCursor cursor); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-07-06 17:44:01
|
Revision: 2506 http://sourceforge.net/p/modplug/code/2506 Author: saga-games Date: 2013-07-06 17:43:52 +0000 (Sat, 06 Jul 2013) Log Message: ----------- [Imp] Can now load more than 64 soundfonts. [Ref] Greatly simplify various aspects of mod item handling in treeview code. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2013-07-06 12:56:42 UTC (rev 2505) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2013-07-06 17:43:52 UTC (rev 2506) @@ -564,7 +564,7 @@ } m_parent.InstrumentChanged(-1); - if (!(lParam & 0x8000)) + if (!(lParam & 0x80000000)) { // Pattern item PATTERNINDEX nPat = (PATTERNINDEX)(lParam & 0x7FFF); @@ -585,11 +585,11 @@ } SetCurrentPattern(nPat); } - else if ((lParam & 0x8000)) + else if ((lParam & 0x80000000)) { // Order item - ORDERINDEX nOrd = (ORDERINDEX)(lParam & 0x7FFF); - SEQUENCEINDEX nSeq = (SEQUENCEINDEX)(lParam >> 16); + ORDERINDEX nOrd = (ORDERINDEX)(lParam & 0xFFFF); + SEQUENCEINDEX nSeq = (SEQUENCEINDEX)((lParam >> 16) & 0x7FFF); if(nSeq < m_sndFile.Order.GetNumSequences()) { m_OrderList.SelectSequence(nSeq); Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-06 12:56:42 UTC (rev 2505) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-06 17:43:52 UTC (rev 2506) @@ -503,6 +503,7 @@ strcat(szName, szExt); m_tiDLS[iDls] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, szName, IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, 0, TVI_ROOT, hDlsRoot); + SetItemData(m_tiDLS[iDls], iDls); // Memorize Banks WORD wBanks[16]; HTREEITEM hBanks[16]; @@ -549,13 +550,13 @@ szNoteNames[keymax % 12], keymax / 12, regionName); } - LPARAM lParam = 0x80000000|(iDls<<24)|(iRgn<<16)|iIns; + LPARAM lParam = 0x80000000|(iRgn<<16)|iIns; InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hKit, TVI_LAST); } tvs.hParent = hKit; tvs.lpfnCompare = ModTreeDrumCompareProc; - tvs.lParam = (LPARAM)this; + tvs.lParam = reinterpret_cast<LPARAM>(CTrackApp::gpDLSBanks[iDls]); SortChildrenCB(&tvs); } else // Melodic @@ -588,7 +589,7 @@ hBanks[j] = hbank; nBanks++; } - LPARAM lParam = 0x40000000|(iDls<<24)|((pDlsIns->ulInstrument & 0x7F)<<16)|(iIns); + LPARAM lParam = 0x40000000|((pDlsIns->ulInstrument & 0x7F)<<16)|(iIns); InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hbank, TVI_LAST); } @@ -1048,18 +1049,16 @@ } -uint64 CModTree::GetModItem(HTREEITEM hItem) -//------------------------------------------ +CModTree::ModItem CModTree::GetModItem(HTREEITEM hItem) +//----------------------------------------------------- { - LPARAM lParam; HTREEITEM hItemParent, hItemParentParent, hRootParent; if (!hItem) return MODITEM_NULL; // First, test root items if (hItem == m_hInsLib) return MODITEM_HDR_INSTRUMENTLIB; if (hItem == m_hMidiLib) return MODITEM_HDR_MIDILIB; - // Test DLS Banks - lParam = GetItemData(hItem); + hItemParent = GetParentItem(hItem); hItemParentParent = GetParentItem(hItemParent); hRootParent = hItemParent; @@ -1080,12 +1079,12 @@ { for (UINT iGrp=0; iGrp<17; iGrp++) { - if (hItem == m_tiMidiGrp[iGrp]) return (MODITEM_HDR_MIDIGROUP | (iGrp << 16)); + if (hItem == m_tiMidiGrp[iGrp]) return ModItem(MODITEM_HDR_MIDIGROUP, iGrp); } for (UINT iMidi=0; iMidi<128; iMidi++) { - if (hItem == m_tiMidi[iMidi]) return (MODITEM_MIDIINSTRUMENT | (iMidi << 16)); - if (hItem == m_tiPerc[iMidi]) return (MODITEM_MIDIPERCUSSION | (iMidi << 16)); + if (hItem == m_tiMidi[iMidi]) return ModItem(MODITEM_MIDIINSTRUMENT, iMidi); + if (hItem == m_tiPerc[iMidi]) return ModItem(MODITEM_MIDIPERCUSSION, iMidi); } } // Instrument Library @@ -1102,39 +1101,39 @@ if (GetItem(&tvi)) { // Sample ? - if (tvi.iImage == IMAGE_SAMPLES) return MODITEM_INSLIB_SAMPLE; + if (tvi.iImage == IMAGE_SAMPLES) return ModItem(MODITEM_INSLIB_SAMPLE); // Instrument ? - if (tvi.iImage == IMAGE_INSTRUMENTS) return MODITEM_INSLIB_INSTRUMENT; + if (tvi.iImage == IMAGE_INSTRUMENTS) return ModItem(MODITEM_INSLIB_INSTRUMENT); // Song ? - if (tvi.iImage == IMAGE_FOLDERSONG) return MODITEM_INSLIB_SONG; - return MODITEM_INSLIB_FOLDER; + if (tvi.iImage == IMAGE_FOLDERSONG) return ModItem(MODITEM_INSLIB_SONG); + return ModItem(MODITEM_INSLIB_FOLDER); } - return 0; + return ModItem(MODITEM_NULL); } - if (!m_pDataTree) return 0; + if (!m_pDataTree) return ModItem(MODITEM_NULL); // Songs for (size_t i = 0; i < DocInfo.size(); i++) { m_nDocNdx = i; ModTreeDocInfo *pInfo = DocInfo[i]; - if (hItem == pInfo->hSong) return MODITEM_HDR_SONG; + if (hItem == pInfo->hSong) return ModItem(MODITEM_HDR_SONG); if (hRootParent == pInfo->hSong) { - if (hItem == pInfo->hPatterns) return MODITEM_HDR_PATTERNS; - if (hItem == pInfo->hOrders) return MODITEM_HDR_ORDERS; - if (hItem == pInfo->hSamples) return MODITEM_HDR_SAMPLES; - if (hItem == pInfo->hInstruments) return MODITEM_HDR_INSTRUMENTS; - if (hItem == pInfo->hComments) return MODITEM_COMMENTS; + if (hItem == pInfo->hPatterns) return ModItem(MODITEM_HDR_PATTERNS); + if (hItem == pInfo->hOrders) return ModItem(MODITEM_HDR_ORDERS); + if (hItem == pInfo->hSamples) return ModItem(MODITEM_HDR_SAMPLES); + if (hItem == pInfo->hInstruments) return ModItem(MODITEM_HDR_INSTRUMENTS); + if (hItem == pInfo->hComments) return ModItem(MODITEM_COMMENTS); // Order List or Sequence item? if ((hItemParent == pInfo->hOrders) || (hItemParentParent == pInfo->hOrders)) { // find sequence this item belongs to for(SEQUENCEINDEX nSeq = 0; nSeq < pInfo->tiOrders.size(); nSeq++) { - if(hItem == pInfo->tiSequences[nSeq]) return (MODITEM_SEQUENCE | (nSeq << 16)); + if(hItem == pInfo->tiSequences[nSeq]) return ModItem(MODITEM_SEQUENCE, nSeq); for(ORDERINDEX nOrd = 0; nOrd < pInfo->tiOrders[nSeq].size(); nOrd++) { - if (hItem == pInfo->tiOrders[nSeq][nOrd]) return (MODITEM_ORDER | (nOrd << 16) | (((uint64)nSeq) << 32)); + if (hItem == pInfo->tiOrders[nSeq][nOrd]) return ModItem(MODITEM_ORDER, nOrd, nSeq); } } } @@ -1144,7 +1143,7 @@ ASSERT(pInfo->tiPatterns.size() == pSndFile->Patterns.Size()); for (UINT i=0; i<pInfo->tiPatterns.size(); i++) { - if (hItem == pInfo->tiPatterns[i]) return (MODITEM_PATTERN | (i << 16)); + if (hItem == pInfo->tiPatterns[i]) return ModItem(MODITEM_PATTERN, i); } } // Sample ? @@ -1152,7 +1151,7 @@ { for (UINT i=0; i<MAX_SAMPLES; i++) { - if (hItem == pInfo->tiSamples[i]) return (MODITEM_SAMPLE | (i << 16)); + if (hItem == pInfo->tiSamples[i]) return ModItem(MODITEM_SAMPLE, i); } } // Instrument ? @@ -1160,7 +1159,7 @@ { for (UINT i=0; i<MAX_INSTRUMENTS; i++) { - if (hItem == pInfo->tiInstruments[i]) return (MODITEM_INSTRUMENT | (i << 16)); + if (hItem == pInfo->tiInstruments[i]) return ModItem(MODITEM_INSTRUMENT, i); } } // Effect ? @@ -1168,29 +1167,35 @@ { for (UINT i=0; i<MAX_MIXPLUGINS; i++) { - if (hItem == pInfo->tiEffects[i]) return (MODITEM_EFFECT | (i<<16)); + if (hItem == pInfo->tiEffects[i]) return ModItem(MODITEM_EFFECT, i); } } - return 0; + return ModItem(MODITEM_NULL); } } - // Dls Instruments - for (UINT iDls = 0; iDls < m_tiDLS.size(); iDls++) if (m_tiDLS[iDls]) + + // DLS banks + DWORD_PTR itemData = GetItemData(hItem); + if(itemData < m_tiDLS.size() && hItem == m_tiDLS[itemData]) + return ModItem(MODITEM_DLSBANK_FOLDER, (uint32)itemData); + + // DLS Instruments + if(hRootParent != nullptr) { - if (hItem == m_tiDLS[iDls]) return (MODITEM_DLSBANK_FOLDER | (iDls << 16)); - if (m_tiDLS[iDls] == hRootParent) + DWORD_PTR dlsItem = GetItemData(hRootParent); + if(dlsItem < m_tiDLS.size() && m_tiDLS[dlsItem] == hRootParent) { - if ((lParam & 0x3F000000) == (LONG)(iDls << 24)) + if (hItem == m_tiDLS[dlsItem]) + return ModItem(MODITEM_DLSBANK_FOLDER, (uint32)dlsItem); + + if ((itemData & 0xC0000000) == 0x80000000 + || (itemData & 0xC0000000) == 0x40000000) { - if (((lParam & 0xC0000000) == 0x80000000) - || ((lParam & 0xC0000000) == 0x40000000)) - { - return (lParam | 0x8000); - } + return ModItem(MODITEM_DLSBANK_INSTRUMENT, itemData, (uint16)dlsItem); } } } - return MODITEM_NULL; + return ModItem(MODITEM_NULL); } @@ -1199,23 +1204,22 @@ { if (hItem) { - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + uint32 modItemID = modItem.val1; ModTreeDocInfo *pInfo = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL; - switch(modItemType) + switch(modItem.type) { case MODITEM_COMMENTS: if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_COMMENTS, 0); return TRUE; /*case MODITEM_SEQUENCE: - if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (dwItem << 16) | 0x8000); + if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (dwItem << 16) | 0x80000000); return TRUE;*/ case MODITEM_ORDER: - if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, modItemID | 0x8000); + if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, modItemID | (uint32(modItem.val2) << 16) | 0x80000000); return TRUE; case MODITEM_PATTERN: @@ -1251,12 +1255,9 @@ if (pModDoc) pModDoc->ActivateWindow(); return TRUE; - default: - if (modItemType & 0x8000) - { - PlayItem(hItem, NOTE_MIDDLEC); - return TRUE; - } + case MODITEM_DLSBANK_INSTRUMENT: + PlayItem(hItem, NOTE_MIDDLEC); + return TRUE; } } return FALSE; @@ -1268,12 +1269,11 @@ { if (hItem) { - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + uint32 modItemID = modItem.val1; ModTreeDocInfo *pInfo = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : NULL; - switch(modItemType) + switch(modItem.type) { case MODITEM_SAMPLE: if (pModDoc) @@ -1328,7 +1328,7 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if (pMainFrm && m_SongFile) { - if (modItemType == MODITEM_INSLIB_INSTRUMENT) + if (modItem.type == MODITEM_INSLIB_INSTRUMENT) { pMainFrm->PlaySoundFile(*m_SongFile, static_cast<INSTRUMENTINDEX>(n), SAMPLEINDEX_INVALID, nParam); } else @@ -1360,21 +1360,21 @@ return TRUE; default: - if (modItemType & 0x8000) + if (modItem.type == MODITEM_DLSBANK_INSTRUMENT) { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - UINT bank = (modItem & 0x3F000000) >> 24; + uint16 bank = modItem.val2; if ((bank < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[bank]) && (pMainFrm)) { CDLSBank *pDLSBank = CTrackApp::gpDLSBanks[bank]; - UINT rgn = 0, instr = (modItem & 0x00007FFF); + UINT rgn = 0, instr = (modItem.val1 & 0x00007FFF); // Drum - if (modItem & 0x80000000) + if (modItem.val1 & 0x80000000) { - rgn = (modItem & 0x007F0000) >> 16; + rgn = (modItem.val1 & 0x007F0000) >> 16; } else // Melodic - if (modItem & 0x40000000) + if (modItem.val1 & 0x40000000) { rgn = pDLSBank->GetRegionFromKey(instr, nParam - NOTE_MIN); } @@ -1428,15 +1428,14 @@ BOOL CModTree::DeleteTreeItem(HTREEITEM hItem) //-------------------------------------------- { - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + uint32 modItemID = modItem.val1; TCHAR s[64]; ModTreeDocInfo *pInfo = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfo) ? pInfo->pModDoc : nullptr; CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; - switch(modItemType) + switch(modItem.type) { case MODITEM_SEQUENCE: if (pModDoc && pSndFile) @@ -1522,11 +1521,9 @@ BOOL CModTree::OpenTreeItem(HTREEITEM hItem) //------------------------------------------ { - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - //const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); - switch(modItemType) + switch(modItem.type) { case MODITEM_INSLIB_SONG: { @@ -1862,18 +1859,19 @@ } -int CALLBACK CModTree::ModTreeDrumCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM) -//----------------------------------------------------------------------------------- +int CALLBACK CModTree::ModTreeDrumCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM pDLSBank) +//-------------------------------------------------------------------------------------------- { lParam1 &= 0x7FFFFFFF; lParam2 &= 0x7FFFFFFF; if ((lParam1 & 0xFF00FFFF) == (lParam2 & 0xFF00FFFF)) { - UINT iDls = (lParam1 >> 24) & 0xFF; - if ((iDls < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[iDls])) + /*UINT iDls = (lParam1 >> 24) & 0xFF; + if ((iDls < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[iDls]))*/ + if(pDLSBank) { - CDLSBank *pDLSBank = CTrackApp::gpDLSBanks[iDls]; - DLSINSTRUMENT *pDlsIns = pDLSBank->GetInstrument(lParam1 & 0xFFFF); + //CDLSBank *pDLSBank = CTrackApp::gpDLSBanks[iDls]; + DLSINSTRUMENT *pDlsIns = reinterpret_cast<CDLSBank *>(pDLSBank)->GetInstrument(lParam1 & 0xFFFF); lParam1 = (lParam1 >> 16) & 0xFF; lParam2 = (lParam2 >> 16) & 0xFF; if ((pDlsIns) && (lParam1 < (LONG)pDlsIns->nRegions) && (lParam2 < (LONG)pDlsIns->nRegions)) @@ -1967,9 +1965,9 @@ ModTreeDocInfo *pInfo = (m_nDragDocNdx < DocInfo.size() ? DocInfo[m_nDragDocNdx] : nullptr); pdropinfo->pModDoc = (pInfo) ? pInfo->pModDoc : nullptr; pdropinfo->dwDropType = DRAGONDROP_NOTHING; - pdropinfo->dwDropItem = GetModItemID(m_qwItemDrag); + pdropinfo->dwDropItem = m_itemDrag.val1; pdropinfo->lDropParam = 0; - switch(GetModItemType(m_qwItemDrag)) + switch(m_itemDrag.type) { case MODITEM_ORDER: pdropinfo->dwDropType = DRAGONDROP_ORDER; @@ -2002,7 +2000,7 @@ if (s[0] >= '0') n += (s[0] - '0'); if ((s[1] >= '0') && (s[1] <= '9')) n = n*10 + (s[1] - '0'); if ((s[2] >= '0') && (s[2] <= '9')) n = n*10 + (s[2] - '0'); - pdropinfo->dwDropType = ((m_qwItemDrag & 0xFFFF) == MODITEM_INSLIB_SAMPLE) ? DRAGONDROP_SAMPLE : DRAGONDROP_INSTRUMENT; + pdropinfo->dwDropType = (m_itemDrag.type == MODITEM_INSLIB_SAMPLE) ? DRAGONDROP_SAMPLE : DRAGONDROP_INSTRUMENT; pdropinfo->dwDropItem = n; pdropinfo->pModDoc = nullptr; pdropinfo->lDropParam = (LPARAM)m_SongFile; @@ -2036,17 +2034,15 @@ pdropinfo->lDropParam = (LPARAM)pszFullPath; break; - default: - if (m_qwItemDrag & 0xC0000000) - { - pdropinfo->dwDropType = DRAGONDROP_DLS; - // dwDropItem = DLS Bank # - pdropinfo->dwDropItem = (DWORD)((m_qwItemDrag & 0x3F000000) >> 24); // bank # - // Melodic: (Instrument) - // Drums: (0x80000000) | (Region << 16) | (Instrument) - pdropinfo->lDropParam = (LPARAM)((m_qwItemDrag & 0x80FF7FFF)); - break; - } + case MODITEM_DLSBANK_INSTRUMENT: + ASSERT((m_itemDrag.val1 & 0xC0000000) != 0); + pdropinfo->dwDropType = DRAGONDROP_DLS; + // dwDropItem = DLS Bank # + pdropinfo->dwDropItem = m_itemDrag.val2; // bank # + // Melodic: (Instrument) + // Drums: (0x80000000) | (Region << 16) | (Instrument) + pdropinfo->lDropParam = (LPARAM)((m_itemDrag.val1 & 0x80FF7FFF)); + break; } return (pdropinfo->dwDropType != DRAGONDROP_NOTHING); } @@ -2055,33 +2051,30 @@ bool CModTree::CanDrop(HTREEITEM hItem, bool bDoDrop) //--------------------------------------------------- { - const uint64 modItemDrop = GetModItem(hItem); - const ModItemType modItemDropType = GetModItemType(modItemDrop); - const uint32 modItemDropID = GetModItemID(modItemDrop); + const ModItem modItemDrop = GetModItem(hItem); + const uint32 modItemDropID = modItemDrop.val1; + const uint32 modItemDragID = m_itemDrag.val1; - const ModItemType modItemDragType = GetModItemType(m_qwItemDrag); - const uint32 modItemDragID = GetModItemID(m_qwItemDrag); - const ModTreeDocInfo *pInfoDrag = (m_nDragDocNdx < DocInfo.size() ? DocInfo[m_nDragDocNdx] : nullptr); const ModTreeDocInfo *pInfoDrop = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfoDrop) ? pInfoDrop->pModDoc : nullptr; CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; - switch(modItemDropType) + switch(modItemDrop.type) { case MODITEM_ORDER: case MODITEM_SEQUENCE: - if ((modItemDragType == MODITEM_ORDER) && (pModDoc) && (pSndFile) && (m_nDocNdx == m_nDragDocNdx)) + if ((m_itemDrag.type == MODITEM_ORDER) && (pModDoc) && (pSndFile) && (m_nDocNdx == m_nDragDocNdx)) { // drop an order somewhere if (bDoDrop) { - SEQUENCEINDEX nSeqFrom = (SEQUENCEINDEX)(modItemDragID >> 16), nSeqTo = (SEQUENCEINDEX)(modItemDropID >> 16); - ORDERINDEX nOrdFrom = (ORDERINDEX)(modItemDragID & 0xFFFF), nOrdTo = (ORDERINDEX)(modItemDropID & 0xFFFF); - if(modItemDropType == MODITEM_SEQUENCE) + SEQUENCEINDEX nSeqFrom = (SEQUENCEINDEX)m_itemDrag.val2, nSeqTo = (SEQUENCEINDEX)modItemDrop.val2; + ORDERINDEX nOrdFrom = (ORDERINDEX)m_itemDrag.val1, nOrdTo = (ORDERINDEX)modItemDrop.val1; + if(modItemDrop.type == MODITEM_SEQUENCE) { // drop on sequence -> attach - nSeqTo = (SEQUENCEINDEX)(modItemDropID & 0xFFFF); + nSeqTo = (SEQUENCEINDEX)modItemDrop.val1; nOrdTo = pSndFile->Order.GetSequence(nSeqTo).GetLengthTailTrimmed(); } @@ -2100,7 +2093,7 @@ case MODITEM_HDR_ORDERS: // Drop your sequences here. // At the moment, only dropping sequences into another module is possible. - if((modItemDragType == MODITEM_SEQUENCE || modItemDragType == MODITEM_HDR_ORDERS) && pSndFile && pInfoDrag && pModDoc != pInfoDrag->pModDoc) + if((m_itemDrag.type == MODITEM_SEQUENCE || m_itemDrag.type == MODITEM_HDR_ORDERS) && pSndFile && pInfoDrag && pModDoc != pInfoDrag->pModDoc) { if(bDoDrop && pInfoDrag != nullptr) { @@ -2147,7 +2140,7 @@ case MODITEM_SAMPLE: // Reorder samples in a module - if(modItemDragType == MODITEM_SAMPLE && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) + if(m_itemDrag.type == MODITEM_SAMPLE && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) { if(bDoDrop) { @@ -2174,7 +2167,7 @@ case MODITEM_INSTRUMENT: // Reorder instruments in a module - if(modItemDragType == MODITEM_INSTRUMENT && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) + if(m_itemDrag.type == MODITEM_INSTRUMENT && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) { if(bDoDrop) { @@ -2201,13 +2194,13 @@ case MODITEM_MIDIINSTRUMENT: case MODITEM_MIDIPERCUSSION: - if ((modItemDragType == MODITEM_INSLIB_SAMPLE) || (modItemDragType == MODITEM_INSLIB_INSTRUMENT)) + if ((m_itemDrag.type == MODITEM_INSLIB_SAMPLE) || (m_itemDrag.type == MODITEM_INSLIB_INSTRUMENT)) { if (bDoDrop) { CHAR szFullPath[_MAX_PATH] = ""; InsLibGetFullPath(m_hItemDrag, szFullPath); - if (modItemDropType == MODITEM_MIDIINSTRUMENT) + if (modItemDrop.type == MODITEM_MIDIINSTRUMENT) SetMidiInstrument(modItemDropID, szFullPath); else SetMidiPercussion(modItemDropID, szFullPath); @@ -2337,9 +2330,9 @@ { if (!ItemHasChildren(m_hItemDrag)) SelectItem(m_hItemDrag); } - m_qwItemDrag = GetModItem(m_hItemDrag); + m_itemDrag = GetModItem(m_hItemDrag); m_nDragDocNdx = m_nDocNdx; - switch(GetModItemType(m_qwItemDrag)) + switch(m_itemDrag.type) { case MODITEM_ORDER: case MODITEM_PATTERN: @@ -2363,7 +2356,7 @@ } break; default: - if (m_qwItemDrag & 0x8000) bDrag = true; + if (m_itemDrag.type == MODITEM_DLSBANK_INSTRUMENT) bDrag = true; } if (bDrag) { @@ -2460,12 +2453,11 @@ UINT nDefault = 0; BOOL bSep = FALSE; - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + const uint32 modItemID = modItem.val1; SelectItem(hItem); - switch(modItemType) + switch(modItem.type) { case MODITEM_HDR_SONG: nDefault = ID_MODTREE_EXECUTE; @@ -2483,7 +2475,7 @@ nDefault = ID_MODTREE_EXECUTE; AppendMenu(hMenu, MF_STRING, nDefault, "&Edit Pattern"); AppendMenu(hMenu, MF_STRING, ID_MODTREE_REMOVE, - (modItemType == MODITEM_ORDER) ? "&Delete from list" : "&Delete Pattern"); + (modItem.type == MODITEM_ORDER) ? "&Delete from list" : "&Delete Pattern"); break; case MODITEM_SEQUENCE: @@ -2634,18 +2626,15 @@ bSep = TRUE; break; - default: - if (modItemType & 0x8000) - { - nDefault = ID_MODTREE_PLAY; - AppendMenu(hMenu, MF_STRING, ID_MODTREE_PLAY, "&Play Instrument"); - } + case MODITEM_DLSBANK_INSTRUMENT: + nDefault = ID_MODTREE_PLAY; + AppendMenu(hMenu, MF_STRING, ID_MODTREE_PLAY, "&Play Instrument"); break; } if (nDefault) SetMenuDefaultItem(hMenu, nDefault, FALSE); - if ((modItemType == MODITEM_INSLIB_FOLDER) - || (modItemType == MODITEM_INSLIB_SONG) - || (modItemType == MODITEM_HDR_INSTRUMENTLIB)) + if ((modItem.type == MODITEM_INSLIB_FOLDER) + || (modItem.type == MODITEM_INSLIB_SONG) + || (modItem.type == MODITEM_HDR_INSTRUMENTLIB)) { if ((bSep) || (nDefault)) AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); AppendMenu(hMenu, (m_bShowAllFiles) ? (MF_STRING|MF_CHECKED) : MF_STRING, ID_MODTREE_SHOWALLFILES, "Show All Files"); @@ -2674,11 +2663,10 @@ HTREEITEM hItem = HitTest(pt, &flags); if (hItem != NULL) { - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + const uint32 modItemID = modItem.val1; - switch(modItemType) + switch(modItem.type) { case MODITEM_INSLIB_FOLDER: case MODITEM_INSLIB_SONG: @@ -2693,7 +2681,7 @@ if (pFrame) { pFrame->SendMessage(WM_MOD_INSTRSELECTED, - (modItemType == MODITEM_INSTRUMENT) ? TRUE : FALSE, + (modItem.type == MODITEM_INSTRUMENT) ? TRUE : FALSE, (LPARAM)modItemID); } } @@ -2771,7 +2759,7 @@ // Bug? if (!(nFlags & (MK_LBUTTON|MK_RBUTTON))) { - m_qwItemDrag = 0; + m_itemDrag = ModItem(MODITEM_NULL); m_hItemDrag = NULL; OnEndDrag(TREESTATUS_DRAGGING); return; @@ -2924,30 +2912,25 @@ HTREEITEM hItem = GetSelectedItem(); CModDoc *pModDoc; - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + const uint32 modItemID = modItem.val1; pModDoc = GetDocumentFromItem(hItem); if (pModDoc) { - if ((modItemType == MODITEM_SAMPLE) && (!pModDoc->GetNumInstruments())) + if ((modItem.type == MODITEM_SAMPLE) && (!pModDoc->GetNumInstruments())) { - pModDoc->MuteSample((SAMPLEINDEX)modItemID, (pModDoc->IsSampleMuted((SAMPLEINDEX)modItemID)) ? false : true); + pModDoc->MuteSample((SAMPLEINDEX)modItemID, (!pModDoc->IsSampleMuted((SAMPLEINDEX)modItemID))); UpdateView(GetDocumentInfoFromModDoc(pModDoc), HINT_SMPNAMES | HINT_SAMPLEINFO); } else - if ((modItemType == MODITEM_INSTRUMENT) && (pModDoc->GetNumInstruments())) + if ((modItem.type == MODITEM_INSTRUMENT) && (pModDoc->GetNumInstruments())) { - pModDoc->MuteInstrument((INSTRUMENTINDEX)modItemID, (pModDoc->IsInstrumentMuted((INSTRUMENTINDEX)modItemID)) ? false : true); + pModDoc->MuteInstrument((INSTRUMENTINDEX)modItemID, (!pModDoc->IsInstrumentMuted((INSTRUMENTINDEX)modItemID))); UpdateView(GetDocumentInfoFromModDoc(pModDoc), HINT_INSNAMES | HINT_INSTRUMENT); - } else - if ((modItemType == MODITEM_EFFECT)) + } else if ((modItem.type == MODITEM_EFFECT)) { - CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : nullptr; - if (pSndFile == nullptr) - return; - CVstPlugin *pVstPlugin = dynamic_cast<CVstPlugin *>(pSndFile->m_MixPlugins[modItemID].pMixPlugin); + CVstPlugin *pVstPlugin = dynamic_cast<CVstPlugin *>(pModDoc->GetrSoundFile().m_MixPlugins[modItemID].pMixPlugin); if(pVstPlugin == nullptr) return; pVstPlugin->ToggleBypass(); @@ -2964,27 +2947,25 @@ HTREEITEM hItem = GetSelectedItem(); CModDoc *pModDoc; - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + const uint32 modItemID = modItem.val1; pModDoc = GetDocumentFromItem(hItem); if (pModDoc) { INSTRUMENTINDEX nInstruments = pModDoc->GetNumInstruments(); - if ((modItemType == MODITEM_SAMPLE) && (!nInstruments)) + if ((modItem.type == MODITEM_SAMPLE) && (!nInstruments)) { for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++) { - pModDoc->MuteSample(nSmp, (nSmp == modItemID) ? false : true); + pModDoc->MuteSample(nSmp, nSmp != modItemID); UpdateView(GetDocumentInfoFromModDoc(pModDoc), HINT_SMPNAMES | HINT_SAMPLEINFO); } - } else - if ((modItemType == MODITEM_INSTRUMENT) && (nInstruments)) + } else if ((modItem.type == MODITEM_INSTRUMENT) && (nInstruments)) { for (INSTRUMENTINDEX nIns = 1; nIns <= nInstruments; nIns++) { - pModDoc->MuteInstrument(nIns, (nIns == modItemID) ? false : true); + pModDoc->MuteInstrument(nIns, nIns != modItemID); UpdateView(GetDocumentInfoFromModDoc(pModDoc), HINT_INSNAMES | HINT_INSTRUMENT); } } @@ -2998,14 +2979,12 @@ HTREEITEM hItem = GetSelectedItem(); CModDoc *pModDoc; - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - //const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); pModDoc = GetDocumentFromItem(hItem); if (pModDoc) { - if ((modItemType == MODITEM_SAMPLE) || (modItemType == MODITEM_INSTRUMENT)) + if ((modItem.type == MODITEM_SAMPLE) || (modItem.type == MODITEM_INSTRUMENT)) { for (SAMPLEINDEX nSmp = 1; nSmp <= pModDoc->GetNumSamples(); nSmp++) { @@ -3037,82 +3016,38 @@ } -void CModTree::OnDuplicateTreeItem() -//---------------------------------- +void CModTree::InsertOrDupItem(bool insert) +//----------------------------------------- { HTREEITEM hItem = GetSelectedItem(); - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); + const uint32 modItemID = modItem.val1; CModDoc *pModDoc = GetDocumentFromItem(hItem); CSoundFile *pSndFile = (pModDoc != nullptr) ? pModDoc->GetSoundFile() : nullptr; - if(pModDoc && pSndFile) + if(pModDoc) { - if(modItemType == MODITEM_SEQUENCE || modItemType == MODITEM_HDR_ORDERS) + CSoundFile &sndFile = pModDoc->GetrSoundFile(); + if(modItem.type == MODITEM_SEQUENCE || modItem.type == MODITEM_HDR_ORDERS) { - // Duplicate sequence - pSndFile->Order.SetSequence((SEQUENCEINDEX)modItemID); - pSndFile->Order.AddSequence(true); - pModDoc->SetModified(); - UpdateView(GetDocumentInfoFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE); - pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES|HINT_MODSEQUENCE); - } else if(modItemType == MODITEM_SAMPLE) - { - // Duplicate sample - std::vector<SAMPLEINDEX> newOrder = GenerateInsertVector<SAMPLEINDEX>(pSndFile->GetNumSamples(), modItemID, static_cast<SAMPLEINDEX>(modItemID)); - if(pModDoc->ReArrangeSamples(newOrder) != SAMPLEINDEX_INVALID) + // Duplicate / insert sequence + if(insert) { - pModDoc->SetModified(); - pModDoc->UpdateAllViews(NULL, HINT_SMPNAMES | HINT_SAMPLEINFO | HINT_SAMPLEDATA | HINT_PATTERNDATA); + sndFile.Order.AddSequence(false); } else { - Reporting::Error("Maximum number of samples reached."); + sndFile.Order.SetSequence((SEQUENCEINDEX)modItemID); + sndFile.Order.AddSequence(true); } - } else if(modItemType == MODITEM_INSTRUMENT) - { - // Duplicate instrument - std::vector<INSTRUMENTINDEX> newOrder = GenerateInsertVector<INSTRUMENTINDEX>(pSndFile->GetNumInstruments(), modItemID, static_cast<INSTRUMENTINDEX>(modItemID)); - if(pModDoc->ReArrangeInstruments(newOrder) != INSTRUMENTINDEX_INVALID) - { - pModDoc->UpdateAllViews(NULL, HINT_INSNAMES | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_PATTERNDATA); - pModDoc->SetModified(); - } else - { - Reporting::Error("Maximum number of instruments reached."); - } - } - } -} - - -void CModTree::OnInsertTreeItem() -//------------------------------- -{ - HTREEITEM hItem = GetSelectedItem(); - - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); - - CModDoc *pModDoc = GetDocumentFromItem(hItem); - CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; - - if(pModDoc && pSndFile) - { - if(modItemType == MODITEM_SEQUENCE || modItemType == MODITEM_HDR_ORDERS) - { - // Insert sequence - pSndFile->Order.AddSequence(false); pModDoc->SetModified(); UpdateView(GetDocumentInfoFromModDoc(pModDoc), HINT_SEQNAMES|HINT_MODSEQUENCE); pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES|HINT_MODSEQUENCE); - } else if(modItemType == MODITEM_SAMPLE) + } else if(modItem.type == MODITEM_SAMPLE) { - // Insert sample - std::vector<SAMPLEINDEX> newOrder = GenerateInsertVector<SAMPLEINDEX>(pSndFile->GetNumSamples(), modItemID, 0); + // Duplicate / insert sample + std::vector<SAMPLEINDEX> newOrder = GenerateInsertVector<SAMPLEINDEX>(sndFile.GetNumSamples(), modItemID, static_cast<SAMPLEINDEX>(insert ? 0 : modItemID)); if(pModDoc->ReArrangeSamples(newOrder) != SAMPLEINDEX_INVALID) { pModDoc->SetModified(); @@ -3121,13 +3056,13 @@ { Reporting::Error("Maximum number of samples reached."); } - } else if(modItemType == MODITEM_INSTRUMENT) + } else if(modItem.type == MODITEM_INSTRUMENT) { - // Insert instrument - std::vector<INSTRUMENTINDEX> newOrder = GenerateInsertVector<INSTRUMENTINDEX>(pSndFile->GetNumInstruments(), modItemID, 0); + // Duplicate / insert instrument + std::vector<INSTRUMENTINDEX> newOrder = GenerateInsertVector<INSTRUMENTINDEX>(sndFile.GetNumInstruments(), modItemID, static_cast<INSTRUMENTINDEX>(insert ? 0 : modItemID)); if(pModDoc->ReArrangeInstruments(newOrder) != INSTRUMENTINDEX_INVALID) { - pModDoc->UpdateAllViews(NULL, HINT_INSNAMES| HINT_INSTRUMENT | HINT_ENVELOPE | HINT_PATTERNDATA); + pModDoc->UpdateAllViews(NULL, HINT_INSNAMES | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_PATTERNDATA); pModDoc->SetModified(); } else { @@ -3137,21 +3072,20 @@ } } + void CModTree::OnSwitchToTreeItem() //--------------------------------- { HTREEITEM hItem = GetSelectedItem(); CModDoc *pModDoc; - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); pModDoc = GetDocumentFromItem(hItem); - if (pModDoc && (modItemType == MODITEM_SEQUENCE)) + if (pModDoc && (modItem.type == MODITEM_SEQUENCE)) { - pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (modItemID << 16) | 0x8000); + pModDoc->ActivateView(IDD_CONTROL_PATTERNS, uint32(modItem.val1 << 16) | 0x80000000); } } @@ -3164,17 +3098,16 @@ CModDoc *pModDoc = GetDocumentFromItem(hItem); CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - const uint64 modItem = GetModItem(hItem); - //const uint32 modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); - if(pSndFile && modItemID){ + if(pSndFile && modItem.val1) + { FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(true, "", "", "All files(*.*)|*.*||"); if(files.abort) return; - pSndFile->m_szInstrumentPath[modItemID - 1] = files.first_file; + pSndFile->m_szInstrumentPath[modItem.val1 - 1] = files.first_file; OnRefreshTree(); } } @@ -3186,14 +3119,12 @@ CModDoc *pModDoc = GetDocumentFromItem(hItem); CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; - const uint64 modItem = GetModItem(hItem); - //const uint32 modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); - if(pSndFile && modItemID) + if(pSndFile && modItem.val1) { - if(pSndFile->m_szInstrumentPath[modItemID - 1].empty()) + if(pSndFile->m_szInstrumentPath[modItem.val1 - 1].empty()) { FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, (pSndFile->GetType() == MOD_TYPE_XM) ? "xi" : "iti", "", (pSndFile->GetType() == MOD_TYPE_XM) ? @@ -3203,10 +3134,10 @@ "FastTracker II Instruments (*.xi)|*.xi||"); if(files.abort) return; - pSndFile->m_szInstrumentPath[modItemID - 1] = files.first_file; + pSndFile->m_szInstrumentPath[modItem.val1 - 1] = files.first_file; } - pModDoc->SaveInstrument(static_cast<INSTRUMENTINDEX>(modItemID)); + pModDoc->SaveInstrument(static_cast<INSTRUMENTINDEX>(modItem.val1)); if(pModDoc) pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); OnRefreshTree(); @@ -3259,11 +3190,9 @@ UINT flags; HTREEITEM hItem = HitTest(point, &flags); - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - //const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); - switch(modItemType) + switch(modItem.type) { case MODITEM_MIDIINSTRUMENT: case MODITEM_MIDIPERCUSSION: @@ -3273,7 +3202,7 @@ EnsureVisible(hItem); } m_hItemDrag = hItem; - m_qwItemDrag = modItem; + m_itemDrag = modItem; return DROPEFFECT_LINK; // Folders: case MODITEM_HDR_MIDILIB: @@ -3305,14 +3234,13 @@ DragQueryFile(hDropInfo, 0, szFileName, _MAX_PATH); if (szFileName[0]) { - DWORD dwItem = (DWORD)(m_qwItemDrag >> 16); - switch(m_qwItemDrag & 0xFFFF) + switch(m_itemDrag.type) { case MODITEM_MIDIINSTRUMENT: - bOk = SetMidiInstrument(dwItem, szFileName); + bOk = SetMidiInstrument(m_itemDrag.val1, szFileName); break; case MODITEM_MIDIPERCUSSION: - bOk = SetMidiPercussion(dwItem, szFileName); + bOk = SetMidiPercussion(m_itemDrag.val1, szFileName); break; } } @@ -3382,16 +3310,13 @@ { HTREEITEM hItem = GetSelectedItem(); - const uint64 modItem = GetModItem(hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(hItem); - if ((modItemType & 0xFFFF) == MODITEM_DLSBANK_FOLDER) + if (modItem.type == MODITEM_DLSBANK_FOLDER) { - UINT nBank = modItemID; - if ((nBank < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[nBank])) + if ((modItem.val1 < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[modItem.val1])) { - CSoundBankProperties dlg(CTrackApp::gpDLSBanks[nBank], this); + CSoundBankProperties dlg(CTrackApp::gpDLSBanks[modItem.val1], this); dlg.DoModal(); } } @@ -3474,9 +3399,7 @@ { NMTVDISPINFO *info = reinterpret_cast<NMTVDISPINFO *>(nmhdr); CEdit *editCtrl = GetEditControl(); - const uint64 modItem = GetModItem(info->item.hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(info->item.hItem); const CModDoc *modDoc = GetDocumentFromItem(info->item.hItem); if(editCtrl != nullptr && modDoc != nullptr) @@ -3486,11 +3409,11 @@ char const *text = nullptr; CString tempText; - switch(modItemType) + switch(modItem.type) { case MODITEM_ORDER: { - PATTERNINDEX pat = sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItemID >> 16)).At(static_cast<ORDERINDEX>(modItemID & 0xFFFF)); + PATTERNINDEX pat = sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItem.val2)).At(static_cast<ORDERINDEX>(modItem.val1)); if(pat == sndFile->Order.GetInvalidPatIndex()) tempText = "---"; else if(pat == sndFile->Order.GetIgnoreIndex()) @@ -3502,32 +3425,32 @@ break; case MODITEM_SEQUENCE: - if(modItemID < sndFile->Order.GetNumSequences()) + if(modItem.val1 < sndFile->Order.GetNumSequences()) { - text = sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItemID)).m_sName; + text = sndFile->Order.GetSequence(static_cast<SEQUENCEINDEX>(modItem.val1)).m_sName; } break; case MODITEM_PATTERN: - if(modItemID < sndFile->Patterns.GetNumPatterns() && modSpecs.hasPatternNames) + if(modItem.val1 < sndFile->Patterns.GetNumPatterns() && modSpecs.hasPatternNames) { - text = sndFile->Patterns[modItemID].GetName(); + text = sndFile->Patterns[modItem.val1].GetName(); editCtrl->SetLimitText(MAX_PATTERNNAME - 1); } break; case MODITEM_SAMPLE: - if(modItemID <= sndFile->GetNumSamples()) + if(modItem.val1 <= sndFile->GetNumSamples()) { - text = sndFile->m_szNames[modItemID]; + text = sndFile->m_szNames[modItem.val1]; editCtrl->SetLimitText(modSpecs.sampleNameLengthMax); } break; case MODITEM_INSTRUMENT: - if(modItemID <= sndFile->GetNumInstruments() && sndFile->Instruments[modItemID] != nullptr) + if(modItem.val1 <= sndFile->GetNumInstruments() && sndFile->Instruments[modItem.val1] != nullptr) { - text = sndFile->Instruments[modItemID]->name; + text = sndFile->Instruments[modItem.val1]->name; editCtrl->SetLimitText(modSpecs.instrNameLengthMax); } break; @@ -3554,9 +3477,8 @@ doLabelEdit = false; NMTVDISPINFO *info = reinterpret_cast<NMTVDISPINFO *>(nmhdr); - const uint64 modItem = GetModItem(info->item.hItem); - const ModItemType modItemType = GetModItemType(modItem); - const uint32 modItemID = GetModItemID(modItem); + const ModItem modItem = GetModItem(info->item.hItem); + const uint32 modItemID = modItem.val1; CModDoc *modDoc = GetDocumentFromItem(info->item.hItem); if(info->item.pszText != nullptr && modDoc != nullptr) @@ -3564,7 +3486,7 @@ CSoundFile &sndFile = modDoc->GetrSoundFile(); const CModSpecifications &modSpecs = sndFile.GetModSpecifications(); - switch(modItemType) + switch(modItem.type) { case MODITEM_ORDER: if(info->item.pszText[0]) Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-07-06 12:56:42 UTC (rev 2505) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-07-06 17:43:52 UTC (rev 2506) @@ -110,12 +110,21 @@ MODITEM_SEQUENCE, }; + struct ModItem + { + uint32 val1; + uint16 type; // see ModItemType + uint16 val2; + + ModItem(ModItemType t = MODITEM_NULL, uint32 v1 = 0, uint16 v2 = 0) : type(uint16(t)), val1(v1), val2(v2) { } + }; + static CSoundFile *m_SongFile; // For browsing samples and instruments inside modules on disk CModTreeDropTarget m_DropTarget; CModTree *m_pDataTree; // Pointer to instrument browser (lower part of tree view) - if it's a nullptr, this object is the instrument browser itself. DWORD m_dwStatus; HWND m_hDropWnd; - uint64 m_qwItemDrag; + ModItem m_itemDrag; UINT m_nDocNdx, m_nDragDocNdx; HTREEITEM m_hItemDrag, m_hItemDrop; HTREEITEM m_hInsLib, m_hMidiLib; @@ -142,9 +151,7 @@ void RefreshInstrumentLibrary(); void EmptyInstrumentLibrary(); void FillInstrumentLibrary(); - uint64 GetModItem(HTREEITEM hItem); - ModItemType GetModItemType(const uint64 modItem) {return static_cast<ModItemType>(modItem & 0xFFFF);}; // return "item type" part of mod item variable ( & 0xFFFF ) - uint32 GetModItemID(const uint64 modItem) {return static_cast<uint32>(modItem >> 16);}; // return "item ID" part of mod item variable ( >> 16 ) + ModItem GetModItem(HTREEITEM hItem); BOOL SetMidiInstrument(UINT nIns, LPCTSTR lpszFileName); BOOL SetMidiPercussion(UINT nPerc, LPCTSTR lpszFileName); BOOL ExecuteItem(HTREEITEM hItem); @@ -183,6 +190,8 @@ CModDoc *GetDocumentFromItem(HTREEITEM hItem); ModTreeDocInfo *GetDocumentInfoFromModDoc(CModDoc *pModDoc); + void InsertOrDupItem(bool insert); + // Generated message map functions protected: //{{AFX_MSG(CModTree) @@ -207,8 +216,8 @@ afx_msg void OnMuteTreeItem(); afx_msg void OnSoloTreeItem(); afx_msg void OnUnmuteAllTreeItem(); - afx_msg void OnDuplicateTreeItem(); - afx_msg void OnInsertTreeItem(); + afx_msg void OnDuplicateTreeItem() { InsertOrDupItem(false); } + afx_msg void OnInsertTreeItem() { InsertOrDupItem(true); } afx_msg void OnSwitchToTreeItem(); // hack for sequence items to avoid double-click action afx_msg void OnCloseItem(); afx_msg void OnBeginLabelEdit(NMHDR *nmhdr, LRESULT *result); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-07-07 14:38:37
|
Revision: 2516 http://sourceforge.net/p/modplug/code/2516 Author: saga-games Date: 2013-07-07 14:38:29 +0000 (Sun, 07 Jul 2013) Log Message: ----------- [Ref] More treeview code cleanup. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-06 23:56:03 UTC (rev 2515) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-07 14:38:29 UTC (rev 2516) @@ -170,7 +170,7 @@ m_hMidiLib = InsertItem("MIDI Library", IMAGE_FOLDER, IMAGE_FOLDER, TVI_ROOT, TVI_LAST); for (UINT iMidGrp=0; iMidGrp<17; iMidGrp++) { - m_tiMidiGrp[iMidGrp] = InsertItem(szMidiGroupNames[iMidGrp], IMAGE_FOLDER, IMAGE_FOLDER, m_hMidiLib, TVI_LAST); + m_tiMidiGrp[iMidGrp] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, szMidiGroupNames[iMidGrp], IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, (MODITEM_HDR_MIDIGROUP << MIDILIB_SHIFT) | iMidGrp, m_hMidiLib, TVI_LAST); } } m_hInsLib = InsertItem("Instrument Library", IMAGE_FOLDER, IMAGE_FOLDER, TVI_ROOT, TVI_LAST); @@ -367,18 +367,15 @@ for (int ilimit=0; ilimit<10; ilimit++) { HTREEITEM h = GetParentItem(hItem); - if (h == NULL) break; + if (h == nullptr) break; hItem = h; } - if (hItem != NULL) + if (hItem != nullptr) { - std::vector<ModTreeDocInfo *>::iterator iter; - for (iter = DocInfo.begin(); iter != DocInfo.end(); iter++) - { - if (hItem == (*iter)->hSong) return (*iter)->pModDoc; - } + // Root item has moddoc pointer + return (CModDoc *)GetItemData(hItem); } - return NULL; + return nullptr; } @@ -428,11 +425,11 @@ } if (!m_tiMidi[iMidi]) { - m_tiMidi[iMidi] = InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0, m_tiMidiGrp[iMidi/8], TVI_LAST); + m_tiMidi[iMidi] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIINSTRUMENT << MIDILIB_SHIFT) | iMidi, m_tiMidiGrp[iMidi/8], TVI_LAST); } else { - tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; + tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.hItem = m_tiMidi[iMidi]; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); @@ -440,8 +437,8 @@ GetItem(&tvi); if ((strcmp(s, stmp)) || (tvi.iImage != (int)dwImage)) { - SetItem(m_tiMidi[iMidi], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0); + SetItem(m_tiMidi[iMidi], TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIINSTRUMENT << MIDILIB_SHIFT) | iMidi); } } } @@ -463,11 +460,11 @@ } if (!m_tiPerc[iPerc]) { - m_tiPerc[iPerc] = InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0, m_tiMidiGrp[16], TVI_LAST); + m_tiPerc[iPerc] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIPERCUSSION << MIDILIB_SHIFT) | iPerc, m_tiMidiGrp[16], TVI_LAST); } else { - tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; + tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.hItem = m_tiPerc[iPerc]; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); @@ -476,7 +473,7 @@ if ((strcmp(s, stmp)) || (tvi.iImage != (int)dwImage)) { SetItem(m_tiPerc[iPerc], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0); + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIPERCUSSION << MIDILIB_SHIFT) | iPerc); } } } @@ -508,9 +505,8 @@ // Add DLS file folder _splitpath(pDlsBank->GetFileName(), NULL, NULL, szName, szExt); strcat(szName, szExt); - m_tiDLS[iDls] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, - szName, IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, 0, TVI_ROOT, hDlsRoot); - SetItemData(m_tiDLS[iDls], iDls); + m_tiDLS[iDls] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + szName, IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, iDls, TVI_ROOT, hDlsRoot); // Memorize Banks WORD wBanks[16]; HTREEITEM hBanks[16]; @@ -557,7 +553,7 @@ szNoteNames[keymax % 12], keymax / 12, regionName); } - LPARAM lParam = 0x80000000|(iRgn<<16)|iIns; + LPARAM lParam = DLS_TYPEPERC | (iRgn << DLS_REGIONSHIFT) | iIns; InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hKit, TVI_LAST); } @@ -596,7 +592,7 @@ hBanks[j] = hbank; nBanks++; } - LPARAM lParam = 0x40000000|((pDlsIns->ulInstrument & 0x7F)<<16)|(iIns); + LPARAM lParam = DLS_TYPEINST | ((pDlsIns->ulInstrument & 0x7F) << DLS_REGIONSHIFT) | (iIns); InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hbank, TVI_LAST); } @@ -623,13 +619,8 @@ { if (m_tiDLS[iDls]) { - HTREEITEM h; - while ((h = GetChildItem(m_tiDLS[iDls])) != NULL) - { - DeleteItem(h); - } DeleteItem(m_tiDLS[iDls]); - m_tiDLS[iDls] = NULL; + m_tiDLS[iDls] = nullptr; } } } @@ -654,14 +645,15 @@ void CModTree::UpdateView(ModTreeDocInfo *pInfo, DWORD lHint) //---------------------------------------------------------- { - CModDoc *pDoc; CHAR s[256], stmp[256]; TV_ITEM tvi; const DWORD hintFlagPart = HintFlagPart(lHint); if ((pInfo == nullptr) || (pInfo->pModDoc == nullptr) || (!m_pDataTree)) return; if (!hintFlagPart) return; - pDoc = pInfo->pModDoc; - CSoundFile &sndFile = pDoc->GetrSoundFile(); + + const CModDoc *pDoc = pInfo->pModDoc; + const CSoundFile &sndFile = pDoc->GetrSoundFile(); + // Create headers s[0] = 0; if ((hintFlagPart & (HINT_MODGENERAL|HINT_MODTYPE)) || (!pInfo->hSong)) @@ -687,20 +679,22 @@ GetItem(&tvi); if ((strcmp(s, stmp)) || (tvi.iImage != IMAGE_FOLDER)) { - tvi.mask |= TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; + tvi.mask |= TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.hItem = pInfo->hSong; tvi.pszText = s; tvi.iImage = tvi.iSelectedImage = IMAGE_FOLDER; + tvi.lParam = (LPARAM)pInfo->pModDoc; SetItem(&tvi); } } - if (sndFile.GetType() & (MOD_TYPE_IT|MOD_TYPE_XM|MOD_TYPE_MPT)) + if (sndFile.GetModSpecifications().instrumentsMax > 0) { if (!pInfo->hInstruments) pInfo->hInstruments = InsertItem("Instruments", IMAGE_FOLDER, IMAGE_FOLDER, pInfo->hSong, TVI_LAST); } else { if (pInfo->hInstruments) { + //DeleteChildren(pInfo->hInstruments); for (UINT iRem=MAX_INSTRUMENTS-1; iRem; iRem--) if (pInfo->tiInstruments[iRem]) { DeleteItem(pInfo->tiInstruments[iRem]); @@ -715,15 +709,7 @@ if (hintFlagPart & (HINT_MODGENERAL|HINT_MODTYPE|HINT_MODCHANNELS|HINT_MIXPLUGINS)) { UINT nFx = 0; - for (UINT iRem=0; iRem<MAX_MIXPLUGINS; iRem++) - { - UINT n = MAX_MIXPLUGINS-1-iRem; - if (pInfo->tiEffects[n]) - { - DeleteItem(pInfo->tiEffects[n]); - pInfo->tiEffects[n] = NULL; - } - } + DeleteChildren(pInfo->hEffects); for (UINT iFx=0; iFx<MAX_MIXPLUGINS; iFx++) { const SNDMIXPLUGIN &plugin = sndFile.m_MixPlugins[iFx]; @@ -736,7 +722,7 @@ wsprintf(s, "FX%d: %s", iFx + 1, plugin.GetName()); int nImage = IMAGE_NOPLUGIN; if(plugin.pMixPlugin != nullptr) nImage = (plugin.pMixPlugin->isInstrument()) ? IMAGE_PLUGININSTRUMENT : IMAGE_EFFECTPLUGIN; - pInfo->tiEffects[iFx] = InsertItem(s, nImage, nImage, pInfo->hEffects, TVI_LAST); + InsertItem(TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, s, nImage, nImage, 0, 0, iFx, pInfo->hEffects, TVI_LAST); nFx++; } } @@ -902,7 +888,7 @@ pInfo->tiPatterns.resize(sndFile.Patterns.Size(), NULL); PATTERNINDEX imin = 0, imax = sndFile.Patterns.Size()-1; if ((hintFlagPart == HINT_PATNAMES) && (nPat < sndFile.Patterns.Size())) imin = imax = nPat; - BOOL bDelPat = FALSE; + bool bDelPat = false; ASSERT(pInfo->tiPatterns.size() == sndFile.Patterns.Size()); for(PATTERNINDEX iPat = imin; iPat <= imax; iPat++) @@ -935,13 +921,14 @@ { pInfo->tiPatterns[iPat] = InsertItem(s, IMAGE_PATTERNS, IMAGE_PATTERNS, pInfo->hPatterns, TVI_LAST); } + SetItemData(pInfo->tiPatterns[iPat], iPat); } else { if (pInfo->tiPatterns[iPat]) { DeleteItem(pInfo->tiPatterns[iPat]); pInfo->tiPatterns[iPat] = NULL; - bDelPat = TRUE; + bDelPat = true; } } } @@ -978,6 +965,7 @@ SetItem(pInfo->tiSamples[nSmp], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } } + SetItemData(pInfo->tiSamples[nSmp], nSmp); } else { if (pInfo->tiSamples[nSmp]) @@ -1043,6 +1031,7 @@ if ((strcmp(s, stmp)) || (tvi.iImage != nImage)) SetItem(pInfo->tiInstruments[nIns], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } + SetItemData(pInfo->tiInstruments[nIns], nIns); } else { if (pInfo->tiInstruments[nIns]) @@ -1061,16 +1050,17 @@ { HTREEITEM hItemParent, hItemParentParent, hRootParent; - if (!hItem) return MODITEM_NULL; + if (!hItem) return ModItem(MODITEM_NULL); // First, test root items - if (hItem == m_hInsLib) return MODITEM_HDR_INSTRUMENTLIB; - if (hItem == m_hMidiLib) return MODITEM_HDR_MIDILIB; + if (hItem == m_hInsLib) return ModItem(MODITEM_HDR_INSTRUMENTLIB); + if (hItem == m_hMidiLib) return ModItem(MODITEM_HDR_MIDILIB); hItemParent = GetParentItem(hItem); hItemParentParent = GetParentItem(hItemParent); hRootParent = hItemParent; + DWORD_PTR itemData = GetItemData(hItem); + CModDoc *pModDoc = GetDocumentFromItem(hItem); - CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : nullptr; if ((hRootParent != NULL) && (m_pDataTree)) { HTREEITEM h; @@ -1084,15 +1074,7 @@ // Midi Library if ((hRootParent == m_hMidiLib) && (m_pDataTree)) { - for (UINT iGrp=0; iGrp<17; iGrp++) - { - if (hItem == m_tiMidiGrp[iGrp]) return ModItem(MODITEM_HDR_MIDIGROUP, iGrp); - } - for (UINT iMidi=0; iMidi<128; iMidi++) - { - if (hItem == m_tiMidi[iMidi]) return ModItem(MODITEM_MIDIINSTRUMENT, iMidi); - if (hItem == m_tiPerc[iMidi]) return ModItem(MODITEM_MIDIPERCUSSION, iMidi); - } + return ModItem(static_cast<ModItemType>(itemData >> MIDILIB_SHIFT), static_cast<uint32>(itemData & MIDILIB_MASK)); } // Instrument Library if ((hRootParent == m_hInsLib) || ((!m_pDataTree) && (hItem != m_hInsLib))) @@ -1144,46 +1126,32 @@ } } } - // Pattern ? - if (hItemParent == pInfo->hPatterns && pSndFile) + + ModItem modItem(MODITEM_NULL, (uint32)itemData); + if (hItemParent == pInfo->hPatterns) { - ASSERT(pInfo->tiPatterns.size() == pSndFile->Patterns.Size()); - for (UINT i=0; i<pInfo->tiPatterns.size(); i++) - { - if (hItem == pInfo->tiPatterns[i]) return ModItem(MODITEM_PATTERN, i); - } - } - // Sample ? - if (hItemParent == pInfo->hSamples) + // Pattern + ASSERT(pInfo->tiPatterns.size() == pModDoc->GetrSoundFile().Patterns.Size()); + modItem.type = MODITEM_PATTERN; + } else if (hItemParent == pInfo->hSamples) { - for (UINT i=0; i<MAX_SAMPLES; i++) - { - if (hItem == pInfo->tiSamples[i]) return ModItem(MODITEM_SAMPLE, i); - } - } - // Instrument ? - if (hItemParent == pInfo->hInstruments) + // Sample + modItem.type = MODITEM_SAMPLE; + } else if (hItemParent == pInfo->hInstruments) { - for (UINT i=0; i<MAX_INSTRUMENTS; i++) - { - if (hItem == pInfo->tiInstruments[i]) return ModItem(MODITEM_INSTRUMENT, i); - } - } - // Effect ? - if (hItemParent == pInfo->hEffects) + // Instrument + modItem.type = MODITEM_INSTRUMENT; + } else if (hItemParent == pInfo->hEffects) { - for (UINT i=0; i<MAX_MIXPLUGINS; i++) - { - if (hItem == pInfo->tiEffects[i]) return ModItem(MODITEM_EFFECT, i); - } + // Effect + modItem.type = MODITEM_EFFECT; } - return ModItem(MODITEM_NULL); + return modItem; } } // DLS banks - DWORD_PTR itemData = GetItemData(hItem); - if(itemData < m_tiDLS.size() && hItem == m_tiDLS[itemData]) + if(hItem == m_tiDLS[itemData] && itemData < m_tiDLS.size()) return ModItem(MODITEM_DLSBANK_FOLDER, (uint32)itemData); // DLS Instruments @@ -1195,8 +1163,8 @@ if (hItem == m_tiDLS[dlsItem]) return ModItem(MODITEM_DLSBANK_FOLDER, (uint32)dlsItem); - if ((itemData & 0xC0000000) == 0x80000000 - || (itemData & 0xC0000000) == 0x40000000) + if ((itemData & DLS_TYPEMASK) == DLS_TYPEPERC + || (itemData & DLS_TYPEMASK) == DLS_TYPEINST) { return ModItem(MODITEM_DLSBANK_INSTRUMENT, itemData, (uint16)dlsItem); } @@ -1374,14 +1342,14 @@ if ((bank < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[bank]) && (pMainFrm)) { CDLSBank *pDLSBank = CTrackApp::gpDLSBanks[bank]; - UINT rgn = 0, instr = (modItem.val1 & 0x00007FFF); + UINT rgn = 0, instr = (modItem.val1 & DLS_INSTRMASK); // Drum - if (modItem.val1 & 0x80000000) + if (modItem.val1 & DLS_TYPEPERC) { - rgn = (modItem.val1 & 0x007F0000) >> 16; + rgn = (modItem.val1 & DLS_REGIONMASK) >> DLS_REGIONSHIFT; } else // Melodic - if (modItem.val1 & 0x40000000) + if (modItem.val1 & DLS_TYPEINST) { rgn = pDLSBank->GetRegionFromKey(instr, nParam - NOTE_MIN); } @@ -2041,13 +2009,13 @@ break; case MODITEM_DLSBANK_INSTRUMENT: - ASSERT((m_itemDrag.val1 & 0xC0000000) != 0); + ASSERT((m_itemDrag.val1 & DLS_TYPEMASK) != 0); pdropinfo->dwDropType = DRAGONDROP_DLS; // dwDropItem = DLS Bank # pdropinfo->dwDropItem = m_itemDrag.val2; // bank # // Melodic: (Instrument) // Drums: (0x80000000) | (Region << 16) | (Instrument) - pdropinfo->lDropParam = (LPARAM)((m_itemDrag.val1 & 0x80FF7FFF)); + pdropinfo->lDropParam = (LPARAM)((m_itemDrag.val1 & (DLS_TYPEPERC | DLS_REGIONMASK | DLS_INSTRMASK))); break; } return (pdropinfo->dwDropType != DRAGONDROP_NOTHING); @@ -2065,12 +2033,13 @@ const ModTreeDocInfo *pInfoDrop = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfoDrop) ? pInfoDrop->pModDoc : nullptr; CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; + const bool sameModDoc = (pModDoc == pInfoDrag->pModDoc); switch(modItemDrop.type) { case MODITEM_ORDER: case MODITEM_SEQUENCE: - if ((m_itemDrag.type == MODITEM_ORDER) && (pModDoc) && (pSndFile) && (m_nDocNdx == m_nDragDocNdx)) + if ((m_itemDrag.type == MODITEM_ORDER) && (pModDoc) && sameModDoc) { // drop an order somewhere if (bDoDrop) @@ -2099,7 +2068,7 @@ case MODITEM_HDR_ORDERS: // Drop your sequences here. // At the moment, only dropping sequences into another module is possible. - if((m_itemDrag.type == MODITEM_SEQUENCE || m_itemDrag.type == MODITEM_HDR_ORDERS) && pSndFile && pInfoDrag && pModDoc != pInfoDrag->pModDoc) + if((m_itemDrag.type == MODITEM_SEQUENCE || m_itemDrag.type == MODITEM_HDR_ORDERS) && pSndFile && pInfoDrag && !sameModDoc) { if(bDoDrop && pInfoDrag != nullptr) { @@ -2146,7 +2115,7 @@ case MODITEM_SAMPLE: // Reorder samples in a module - if(m_itemDrag.type == MODITEM_SAMPLE && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) + if(m_itemDrag.type == MODITEM_SAMPLE && pInfoDrag != nullptr && sameModDoc) { if(bDoDrop) { @@ -2173,7 +2142,7 @@ case MODITEM_INSTRUMENT: // Reorder instruments in a module - if(m_itemDrag.type == MODITEM_INSTRUMENT && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) + if(m_itemDrag.type == MODITEM_INSTRUMENT && pInfoDrag != nullptr && sameModDoc) { if(bDoDrop) { @@ -2355,9 +2324,8 @@ case MODITEM_HDR_ORDERS: // can we drag an order header? (only in MPTM format and if there's only one sequence) { - CModDoc *pModDoc = (m_nDragDocNdx < DocInfo.size() ? DocInfo[m_nDragDocNdx]->pModDoc : nullptr); - CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; - if(pSndFile && pSndFile->Order.GetNumSequences() == 1) + const CModDoc *pModDoc = (m_nDragDocNdx < DocInfo.size() ? DocInfo[m_nDragDocNdx]->pModDoc : nullptr); + if(pModDoc && pModDoc->GetrSoundFile().Order.GetNumSequences() == 1) bDrag = true; } break; @@ -3398,6 +3366,24 @@ } +// Delete all children of a tree item +void CModTree::DeleteChildren(HTREEITEM hItem) +//-------------------------------------------- +{ + if(hItem != nullptr && ItemHasChildren(hItem)) + { + HTREEITEM hNextItem; + HTREEITEM hChildItem = GetChildItem(hItem); + while(hChildItem != nullptr) + { + hNextItem = GetNextSiblingItem(hChildItem); + DeleteItem(hChildItem); + hChildItem = hNextItem; + } + } +} + + // Editing sample, instrument, order, pattern, etc. labels void CModTree::OnBeginLabelEdit(NMHDR *nmhdr, LRESULT *result) //------------------------------------------------------------ Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-07-06 23:56:03 UTC (rev 2515) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-07-07 14:38:29 UTC (rev 2516) @@ -24,14 +24,13 @@ struct ModTreeDocInfo { - CModDoc *pModDoc; // Tree state variables std::vector<std::vector<HTREEITEM> > tiOrders; std::vector<HTREEITEM> tiSequences, tiPatterns; + CModDoc *pModDoc; HTREEITEM hSong, hPatterns, hSamples, hInstruments, hComments, hOrders, hEffects; HTREEITEM tiSamples[MAX_SAMPLES]; HTREEITEM tiInstruments[MAX_INSTRUMENTS]; - HTREEITEM tiEffects[MAX_MIXPLUGINS]; // Module information ORDERINDEX nOrdSel; @@ -51,7 +50,6 @@ tiSequences.resize(sndFile.Order.GetNumSequences(), nullptr); MemsetZero(tiSamples); MemsetZero(tiInstruments); - MemsetZero(tiEffects); samplesPlaying.reset(); instrumentsPlaying.reset(); } @@ -119,6 +117,20 @@ ModItem(ModItemType t = MODITEM_NULL, uint32 v1 = 0, uint16 v2 = 0) : type(uint16(t)), val1(v1), val2(v2) { } }; + // Bit mask magic + enum + { + MIDILIB_SHIFT = 16, + MIDILIB_MASK = (1 << MIDILIB_SHIFT) - 1, + + DLS_TYPEMASK = 0xC0000000, + DLS_TYPEPERC = 0x80000000, + DLS_TYPEINST = 0x40000000, + DLS_INSTRMASK = 0x00007FFF, + DLS_REGIONMASK = 0x007F0000, + DLS_REGIONSHIFT = 16, + }; + static CSoundFile *m_SongFile; // For browsing samples and instruments inside modules on disk CModTreeDropTarget m_DropTarget; CModTree *m_pDataTree; // Pointer to instrument browser (lower part of tree view) - if it's a nullptr, this object is the instrument browser itself. @@ -169,6 +181,7 @@ bool CanDrop(HTREEITEM hItem, bool bDoDrop); void UpdatePlayPos(CModDoc *pModDoc, Notification *pNotify); bool IsItemExpanded(HTREEITEM hItem); + void DeleteChildren(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...> - 2013-07-07 15:30:40
|
Revision: 2517 http://sourceforge.net/p/modplug/code/2517 Author: saga-games Date: 2013-07-07 15:30:30 +0000 (Sun, 07 Jul 2013) Log Message: ----------- [Ref] Even more CModTree refactoring (get rid of sample and instrument HITEM collections completely) Modified Paths: -------------- trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-07 14:38:29 UTC (rev 2516) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-07 15:30:30 UTC (rev 2517) @@ -695,11 +695,6 @@ if (pInfo->hInstruments) { //DeleteChildren(pInfo->hInstruments); - for (UINT iRem=MAX_INSTRUMENTS-1; iRem; iRem--) if (pInfo->tiInstruments[iRem]) - { - DeleteItem(pInfo->tiInstruments[iRem]); - pInfo->tiInstruments[iRem] = NULL; - } DeleteItem(pInfo->hInstruments); pInfo->hInstruments = NULL; } @@ -938,10 +933,15 @@ { 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; } + if ((hintFlagPart == HINT_SMPNAMES) && (nSmp) && (nSmp < MAX_SAMPLES)) + { + smin = smax = nSmp; + } + HTREEITEM hChild = GetNthChildItem(pInfo->hSamples, smin - 1); for(SAMPLEINDEX nSmp = smin; nSmp <= smax; nSmp++) { - if (nSmp <= sndFile.m_nSamples) + HTREEITEM hNextChild = GetNextSiblingItem(hChild); + if (nSmp <= sndFile.GetNumSamples()) { const bool sampleExists = (sndFile.GetSample(nSmp).pSample != nullptr); int nImage = (sampleExists) ? IMAGE_SAMPLES : IMAGE_NOSAMPLE; @@ -949,31 +949,31 @@ if(pInfo->pModDoc->IsSampleMuted(nSmp)) nImage = IMAGE_SAMPLEMUTE; wsprintf(s, "%3d: %s", nSmp, sndFile.m_szNames[nSmp]); - if (!pInfo->tiSamples[nSmp]) + if (!hChild) { - pInfo->tiSamples[nSmp] = InsertItem(s, nImage, nImage, pInfo->hSamples, TVI_LAST); + hChild = InsertItem(s, nImage, nImage, pInfo->hSamples, TVI_LAST); } else { tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; - tvi.hItem = pInfo->tiSamples[nSmp]; + tvi.hItem = hChild; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); tvi.iImage = tvi.iSelectedImage = nImage; GetItem(&tvi); if ((strcmp(s, stmp)) || (tvi.iImage != nImage)) { - SetItem(pInfo->tiSamples[nSmp], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); + SetItem(hChild, TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } } - SetItemData(pInfo->tiSamples[nSmp], nSmp); + SetItemData(hChild, nSmp); + } else if(hChild != nullptr) + { + DeleteItem(hChild); } else { - if (pInfo->tiSamples[nSmp]) - { - DeleteItem(pInfo->tiSamples[nSmp]); - pInfo->tiSamples[nSmp] = NULL; - } + break; } + hChild = hNextChild; } } // Add Instruments @@ -984,23 +984,12 @@ if ((hintFlagPart == HINT_INSNAMES) && (nIns) && (nIns < MAX_INSTRUMENTS)) { smin = smax = nIns; - if (((sndFile.Instruments[smin]) && (pInfo->tiInstruments[smin] == NULL)) - || ((!sndFile.Instruments[smin]) && (pInfo->tiInstruments[smin] != NULL))) - { - smax = MAX_INSTRUMENTS-1; - for (INSTRUMENTINDEX iRem=smin; iRem<smax; iRem++) - { - if (pInfo->tiInstruments[iRem]) - { - DeleteItem(pInfo->tiInstruments[iRem]); - pInfo->tiInstruments[iRem] = NULL; - } - } - } } + HTREEITEM hChild = GetNthChildItem(pInfo->hInstruments, smin - 1); for (INSTRUMENTINDEX nIns = smin; nIns <= smax; nIns++) { - if ((nIns <= sndFile.GetNumInstruments()) && (sndFile.Instruments[nIns])) + HTREEITEM hNextChild = GetNextSiblingItem(hChild); + if (nIns <= sndFile.GetNumInstruments()) { if(sndFile.m_SongFlags[SONG_ITPROJECT]) { @@ -1015,31 +1004,31 @@ int nImage = IMAGE_INSTRUMENTS; if(pInfo->instrumentsPlaying[nIns]) nImage = IMAGE_INSTRACTIVE; - if(pInfo->pModDoc->IsInstrumentMuted(nIns)) nImage = IMAGE_INSTRMUTE; + if(!sndFile.Instruments[nIns] || pInfo->pModDoc->IsInstrumentMuted(nIns)) nImage = IMAGE_INSTRMUTE; - if (!pInfo->tiInstruments[nIns]) + if (!hChild) { - pInfo->tiInstruments[nIns] = InsertItem(s, nImage, nImage, pInfo->hInstruments, TVI_LAST); + hChild = InsertItem(s, nImage, nImage, pInfo->hInstruments, TVI_LAST); } else { tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; - tvi.hItem = pInfo->tiInstruments[nIns]; + tvi.hItem = hChild; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); tvi.iImage = tvi.iSelectedImage = nImage; GetItem(&tvi); if ((strcmp(s, stmp)) || (tvi.iImage != nImage)) - SetItem(pInfo->tiInstruments[nIns], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); + SetItem(hChild, TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } - SetItemData(pInfo->tiInstruments[nIns], nIns); + SetItemData(hChild, nIns); + } else if(hChild != nullptr) + { + DeleteItem(hChild); } else { - if (pInfo->tiInstruments[nIns]) - { - DeleteItem(pInfo->tiInstruments[nIns]); - pInfo->tiInstruments[nIns] = NULL; - } + break; } + hChild = hNextChild; } } } @@ -3372,11 +3361,10 @@ { if(hItem != nullptr && ItemHasChildren(hItem)) { - HTREEITEM hNextItem; HTREEITEM hChildItem = GetChildItem(hItem); while(hChildItem != nullptr) { - hNextItem = GetNextSiblingItem(hChildItem); + HTREEITEM hNextItem = GetNextSiblingItem(hChildItem); DeleteItem(hChildItem); hChildItem = hNextItem; } @@ -3384,6 +3372,23 @@ } +// Get the n-th child of a tree node +HTREEITEM CModTree::GetNthChildItem(HTREEITEM hItem, int index) +//------------------------------------------------------------- +{ + HTREEITEM hChildItem = nullptr; + if(hItem != nullptr && ItemHasChildren(hItem)) + { + hChildItem = GetChildItem(hItem); + while(index-- > 0) + { + hChildItem = GetNextSiblingItem(hChildItem); + } + } + return hChildItem; +} + + // Editing sample, instrument, order, pattern, etc. labels void CModTree::OnBeginLabelEdit(NMHDR *nmhdr, LRESULT *result) //------------------------------------------------------------ Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-07-07 14:38:29 UTC (rev 2516) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-07-07 15:30:30 UTC (rev 2517) @@ -29,8 +29,6 @@ std::vector<HTREEITEM> tiSequences, tiPatterns; CModDoc *pModDoc; HTREEITEM hSong, hPatterns, hSamples, hInstruments, hComments, hOrders, hEffects; - HTREEITEM tiSamples[MAX_SAMPLES]; - HTREEITEM tiInstruments[MAX_INSTRUMENTS]; // Module information ORDERINDEX nOrdSel; @@ -48,8 +46,6 @@ tiPatterns.resize(sndFile.Patterns.Size(), nullptr); tiOrders.resize(sndFile.Order.GetNumSequences()); tiSequences.resize(sndFile.Order.GetNumSequences(), nullptr); - MemsetZero(tiSamples); - MemsetZero(tiInstruments); samplesPlaying.reset(); instrumentsPlaying.reset(); } @@ -182,6 +178,7 @@ void UpdatePlayPos(CModDoc *pModDoc, Notification *pNotify); bool IsItemExpanded(HTREEITEM hItem); void DeleteChildren(HTREEITEM hItem); + HTREEITEM GetNthChildItem(HTREEITEM hItem, int index); // 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...> - 2013-07-07 22:16:36
|
Revision: 2518 http://sourceforge.net/p/modplug/code/2518 Author: saga-games Date: 2013-07-07 22:16:30 +0000 (Sun, 07 Jul 2013) Log Message: ----------- [Ref] Even more treeview code cleanup (also fixes some small issues that were always there) Modified Paths: -------------- trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-07 15:30:30 UTC (rev 2517) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-07 22:16:30 UTC (rev 2518) @@ -411,7 +411,8 @@ for (UINT iMidi=0; iMidi<128; iMidi++) { DWORD dwImage = IMAGE_NOINSTRUMENT; - wsprintf(s, "%d: %s", iMidi, szMidiProgramNames[iMidi]); + wsprintf(s, "%u: %s", iMidi, szMidiProgramNames[iMidi]); + const LPARAM param = (MODITEM_MIDIINSTRUMENT << MIDILIB_SHIFT) | iMidi; if ((lpMidiLib) && (lpMidiLib->MidiMap[iMidi]) && (lpMidiLib->MidiMap[iMidi][0])) { _splitpath(lpMidiLib->MidiMap[iMidi], NULL, NULL, szName, szExt); @@ -426,7 +427,7 @@ if (!m_tiMidi[iMidi]) { m_tiMidi[iMidi] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, - s, dwImage, dwImage, 0, 0, (MODITEM_MIDIINSTRUMENT << MIDILIB_SHIFT) | iMidi, m_tiMidiGrp[iMidi/8], TVI_LAST); + s, dwImage, dwImage, 0, 0, param, m_tiMidiGrp[iMidi/8], TVI_LAST); } else { tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; @@ -438,7 +439,7 @@ if ((strcmp(s, stmp)) || (tvi.iImage != (int)dwImage)) { SetItem(m_tiMidi[iMidi], TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, - s, dwImage, dwImage, 0, 0, (MODITEM_MIDIINSTRUMENT << MIDILIB_SHIFT) | iMidi); + s, dwImage, dwImage, 0, 0, param); } } } @@ -447,6 +448,7 @@ { DWORD dwImage = IMAGE_NOSAMPLE; wsprintf(s, "%s: %s", szDefaultNoteNames[iPerc], szMidiPercussionNames[iPerc-24]); + const LPARAM param = (MODITEM_MIDIPERCUSSION << MIDILIB_SHIFT) | iPerc; if ((lpMidiLib) && (lpMidiLib->MidiMap[iPerc|0x80]) && (lpMidiLib->MidiMap[iPerc|0x80][0])) { _splitpath(lpMidiLib->MidiMap[iPerc|0x80], NULL, NULL, szName, szExt); @@ -461,7 +463,7 @@ if (!m_tiPerc[iPerc]) { m_tiPerc[iPerc] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, - s, dwImage, dwImage, 0, 0, (MODITEM_MIDIPERCUSSION << MIDILIB_SHIFT) | iPerc, m_tiMidiGrp[16], TVI_LAST); + s, dwImage, dwImage, 0, 0, param, m_tiMidiGrp[16], TVI_LAST); } else { tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; @@ -473,7 +475,7 @@ if ((strcmp(s, stmp)) || (tvi.iImage != (int)dwImage)) { SetItem(m_tiPerc[iPerc], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, (MODITEM_MIDIPERCUSSION << MIDILIB_SHIFT) | iPerc); + s, dwImage, dwImage, 0, 0, param); } } } @@ -523,7 +525,7 @@ DLSINSTRUMENT *pDlsIns = pDlsBank->GetInstrument(iIns); if (pDlsIns) { - wsprintf(szName, "%d: %s", pDlsIns->ulInstrument & 0x7F, pDlsIns->szName); + wsprintf(szName, "%u: %s", pDlsIns->ulInstrument & 0x7F, pDlsIns->szName); // Drum Kit if (pDlsIns->ulBank & F_INSTRUMENT_DRUMS) { @@ -545,10 +547,10 @@ if (keymin >= keymax) { - wsprintf(szName, "%s%d: %s", szNoteNames[keymin % 12], keymin / 12, regionName); + wsprintf(szName, "%s%u: %s", szNoteNames[keymin % 12], keymin / 12, regionName); } else { - wsprintf(szName, "%s%d-%s%d: %s", + wsprintf(szName, "%s%u-%s%u: %s", szNoteNames[keymin % 12], keymin / 12, szNoteNames[keymax % 12], keymax / 12, regionName); @@ -714,7 +716,7 @@ { pInfo->hEffects = InsertItem("Plugins", IMAGE_FOLDER, IMAGE_FOLDER, pInfo->hSong, TVI_LAST); } - wsprintf(s, "FX%d: %s", iFx + 1, plugin.GetName()); + wsprintf(s, "FX%u: %s", iFx + 1, plugin.GetName()); int nImage = IMAGE_NOPLUGIN; if(plugin.pMixPlugin != nullptr) nImage = (plugin.pMixPlugin->isInstrument()) ? IMAGE_PLUGININSTRUMENT : IMAGE_EFFECTPLUGIN; InsertItem(TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, s, nImage, nImage, 0, 0, iFx, pInfo->hEffects, TVI_LAST); @@ -792,9 +794,9 @@ // more than one sequence -> add folder CString sSeqName; if(sndFile.Order.GetSequence(nSeq).m_sName.empty()) - sSeqName.Format("Sequence %d", nSeq); + sSeqName.Format("Sequence %u", nSeq); else - sSeqName.Format("%d: %s", nSeq, (LPCTSTR)sndFile.Order.GetSequence(nSeq).m_sName); + sSeqName.Format("%u: %s", nSeq, (LPCTSTR)sndFile.Order.GetSequence(nSeq).m_sName); UINT state = (nSeq == sndFile.Order.GetCurrentSequenceIndex()) ? TVIS_BOLD : 0; @@ -804,15 +806,16 @@ } // Update bold item strcpy(stmp, sSeqName); - tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_STATE; + tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_STATE | TVIF_PARAM; tvi.state = 0; tvi.stateMask = TVIS_BOLD; tvi.hItem = pInfo->tiSequences[nSeq]; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); + LPARAM param = (nSeq << SEQU_SHIFT) | ORDERINDEX_INVALID; GetItem(&tvi); - if(tvi.state != state || tvi.pszText != sSeqName) - SetItem(pInfo->tiSequences[nSeq], TVIF_TEXT | TVIF_STATE, sSeqName, 0, 0, state, TVIS_BOLD, 0); + if(tvi.state != state || tvi.pszText != sSeqName || tvi.lParam != param) + SetItem(pInfo->tiSequences[nSeq], TVIF_TEXT | TVIF_STATE | TVIF_PARAM, sSeqName, 0, 0, state, TVIS_BOLD, param); hAncestorNode = pInfo->tiSequences[nSeq]; } @@ -823,7 +826,7 @@ DeleteItem(pInfo->tiOrders[nSeq][nOrd]); pInfo->tiOrders[nSeq][nOrd] = NULL; } if (pInfo->tiOrders[nSeq].size() < sndFile.Order.GetSequence(nSeq).GetLengthTailTrimmed()) // Resize tiOrders if needed. - pInfo->tiOrders[nSeq].resize(sndFile.Order.GetSequence(nSeq).GetLengthTailTrimmed(), NULL); + pInfo->tiOrders[nSeq].resize(sndFile.Order.GetSequence(nSeq).GetLengthTailTrimmed(), nullptr); const bool patNamesOnly = (hintFlagPart == HINT_PATNAMES); //if (hintFlagPart == HINT_PATNAMES) && (dwHintParam < sndFile.Order.size())) imin = imax = dwHintParam; @@ -838,11 +841,11 @@ sndFile.Patterns[sndFile.Order.GetSequence(nSeq)[iOrd]].GetName(stmp); if (stmp[0]) { - wsprintf(s, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] %d: %s" : "[%02d] %d: %s", + wsprintf(s, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] %u: %s" : "[%02u] %u: %s", iOrd, sndFile.Order.GetSequence(nSeq)[iOrd], stmp); } else { - wsprintf(s, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] Pattern %d" : "[%02d] Pattern %d", + wsprintf(s, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "[%02Xh] Pattern %u" : "[%02u] Pattern %u", iOrd, sndFile.Order.GetSequence(nSeq)[iOrd]); } } else @@ -850,14 +853,15 @@ if(sndFile.Order.GetSequence(nSeq)[iOrd] == sndFile.Order.GetIgnoreIndex()) { // +++ Item - wsprintf(s, "[%02d] Skip", iOrd); + wsprintf(s, "[%02u] Skip", iOrd); } else { // --- Item - wsprintf(s, "[%02d] Stop", iOrd); + wsprintf(s, "[%02u] Stop", iOrd); } } + LPARAM param = (nSeq << SEQU_SHIFT) | iOrd; if (pInfo->tiOrders[nSeq][iOrd]) { tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_STATE; @@ -868,10 +872,10 @@ 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); + SetItem(pInfo->tiOrders[nSeq][iOrd], TVIF_TEXT | TVIF_STATE | TVIF_PARAM, s, 0, 0, state, TVIS_BOLD, param); } else { - pInfo->tiOrders[nSeq][iOrd] = InsertItem(s, IMAGE_PARTITION, IMAGE_PARTITION, hAncestorNode, TVI_LAST); + pInfo->tiOrders[nSeq][iOrd] = InsertItem(TVIF_HANDLE | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, s, IMAGE_PARTITION, IMAGE_PARTITION, 0, 0, param, hAncestorNode, TVI_LAST); } } } @@ -899,10 +903,10 @@ sndFile.Patterns[iPat].GetName(stmp); if (stmp[0]) { - wsprintf(s, "%d: %s", iPat, stmp); + wsprintf(s, "%u: %s", iPat, stmp); } else { - wsprintf(s, "%d", iPat); + wsprintf(s, "%u", iPat); } if (pInfo->tiPatterns[iPat]) { @@ -996,10 +1000,10 @@ // path info for ITP instruments const bool pathOk = !sndFile.m_szInstrumentPath[nIns - 1].empty(); const bool instMod = pDoc->m_bsInstrumentModified.test(nIns - 1); - wsprintf(s, pathOk ? (instMod ? "%3d: * %s" : "%3d: %s") : "%3d: ? %s", nIns, sndFile.GetInstrumentName(nIns)); + wsprintf(s, pathOk ? (instMod ? "%3u: * %s" : "%3u: %s") : "%3u: ? %s", nIns, sndFile.GetInstrumentName(nIns)); } else { - wsprintf(s, "%3d: %s", nIns, sndFile.GetInstrumentName(nIns)); + wsprintf(s, "%3u: %s", nIns, sndFile.GetInstrumentName(nIns)); } int nImage = IMAGE_INSTRUMENTS; @@ -1068,13 +1072,9 @@ // Instrument Library if ((hRootParent == m_hInsLib) || ((!m_pDataTree) && (hItem != m_hInsLib))) { - CHAR s[256]; TV_ITEM tvi; - - tvi.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_HANDLE; + tvi.mask = TVIF_IMAGE|TVIF_HANDLE; tvi.hItem = hItem; - tvi.pszText = s; - tvi.cchTextMax = sizeof(s); tvi.iImage = 0; if (GetItem(&tvi)) { @@ -1105,14 +1105,14 @@ // Order List or Sequence item? if ((hItemParent == pInfo->hOrders) || (hItemParentParent == pInfo->hOrders)) { - // find sequence this item belongs to - for(SEQUENCEINDEX nSeq = 0; nSeq < pInfo->tiOrders.size(); nSeq++) + const ORDERINDEX ord = (ORDERINDEX)(itemData & SEQU_MASK); + const SEQUENCEINDEX seq = (SEQUENCEINDEX)(itemData >> SEQU_SHIFT); + if(ord == ORDERINDEX_INVALID) { - if(hItem == pInfo->tiSequences[nSeq]) return ModItem(MODITEM_SEQUENCE, nSeq); - for(ORDERINDEX nOrd = 0; nOrd < pInfo->tiOrders[nSeq].size(); nOrd++) - { - if (hItem == pInfo->tiOrders[nSeq][nOrd]) return ModItem(MODITEM_ORDER, nOrd, nSeq); - } + return ModItem(MODITEM_SEQUENCE, seq); + } else + { + return ModItem(MODITEM_ORDER, ord, seq); } } @@ -1179,11 +1179,11 @@ return TRUE; /*case MODITEM_SEQUENCE: - if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (dwItem << 16) | 0x80000000); + if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, (dwItem << SEQU_SHIFT) | SEQU_INDICATOR); return TRUE;*/ case MODITEM_ORDER: - if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, modItemID | (uint32(modItem.val2) << 16) | 0x80000000); + if (pModDoc) pModDoc->ActivateView(IDD_CONTROL_PATTERNS, modItemID | (uint32(modItem.val2) << SEQU_SHIFT) | SEQU_INDICATOR); return TRUE; case MODITEM_PATTERN: @@ -1403,7 +1403,7 @@ case MODITEM_SEQUENCE: if (pModDoc) { - wsprintf(s, _T("Remove sequence %d?"), modItemID); + wsprintf(s, _T("Remove sequence %u?"), modItemID); if(Reporting::Confirm(s, false, true) == cnfNo) break; pModDoc->GetrSoundFile().Order.RemoveSequence((SEQUENCEINDEX)(modItemID)); pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, NULL); @@ -1419,7 +1419,7 @@ break; case MODITEM_PATTERN: - wsprintf(s, _T("Remove pattern %d?"), modItemID); + wsprintf(s, _T("Remove pattern %u?"), modItemID); if (pModDoc == nullptr || Reporting::Confirm(s, false, true) == cnfNo) break; if (pModDoc->RemovePattern((PATTERNINDEX)modItemID)) { @@ -1428,7 +1428,7 @@ break; case MODITEM_SAMPLE: - wsprintf(s, _T("Remove sample %d?"), modItemID); + wsprintf(s, _T("Remove sample %u?"), modItemID); if (pModDoc == nullptr || Reporting::Confirm(s, false, true) == cnfNo) break; pModDoc->GetSampleUndo().PrepareUndo((SAMPLEINDEX)modItemID, sundo_replace); if (pModDoc->RemoveSample((SAMPLEINDEX)modItemID)) @@ -1438,7 +1438,7 @@ break; case MODITEM_INSTRUMENT: - wsprintf(s, _T("Remove instrument %d?"), modItemID); + wsprintf(s, _T("Remove instrument %u?"), modItemID); if (pModDoc == nullptr || Reporting::Confirm(s, false, true) == cnfNo) break; if (pModDoc->RemoveInstrument((INSTRUMENTINDEX)modItemID)) { @@ -2022,7 +2022,7 @@ const ModTreeDocInfo *pInfoDrop = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfoDrop) ? pInfoDrop->pModDoc : nullptr; CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; - const bool sameModDoc = (pModDoc == pInfoDrag->pModDoc); + const bool sameModDoc = pInfoDrag && (pModDoc == pInfoDrag->pModDoc); switch(modItemDrop.type) { @@ -3047,7 +3047,7 @@ if (pModDoc && (modItem.type == MODITEM_SEQUENCE)) { - pModDoc->ActivateView(IDD_CONTROL_PATTERNS, uint32(modItem.val1 << 16) | 0x80000000); + pModDoc->ActivateView(IDD_CONTROL_PATTERNS, uint32(modItem.val1 << SEQU_SHIFT) | SEQU_INDICATOR); } } Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-07-07 15:30:30 UTC (rev 2517) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-07-07 22:16:30 UTC (rev 2518) @@ -119,20 +119,29 @@ MIDILIB_SHIFT = 16, MIDILIB_MASK = (1 << MIDILIB_SHIFT) - 1, - DLS_TYPEMASK = 0xC0000000, + // Must be consistent with CCtrlPatterns::OnActivatePage + SEQU_SHIFT = 16, + SEQU_MASK = (1 << SEQU_SHIFT) - 1, + SEQU_INDICATOR = 0x80000000, + + // Soundbank instrument identification + DLS_TYPEINST = 0x40000000, DLS_TYPEPERC = 0x80000000, - DLS_TYPEINST = 0x40000000, + DLS_TYPEMASK = DLS_TYPEINST | DLS_TYPEPERC, DLS_INSTRMASK = 0x00007FFF, DLS_REGIONMASK = 0x007F0000, DLS_REGIONSHIFT = 16, }; + static_assert((ORDERINDEX_INVALID & SEQU_MASK) == ORDERINDEX_INVALID, "ORDERINDEX doesn't fit in GetItemData() parameter"); + static_assert((ORDERINDEX_MAX & SEQU_MASK) == ORDERINDEX_MAX, "ORDERINDEX doesn't fit in GetItemData() parameter"); + static_assert((((SEQUENCEINDEX_INVALID << SEQU_SHIFT) & ~SEQU_INDICATOR) >> SEQU_SHIFT) == SEQUENCEINDEX_INVALID, "SEQUENCEINDEX doesn't fit in GetItemData() parameter"); static CSoundFile *m_SongFile; // For browsing samples and instruments inside modules on disk CModTreeDropTarget m_DropTarget; CModTree *m_pDataTree; // Pointer to instrument browser (lower part of tree view) - if it's a nullptr, this object is the instrument browser itself. - DWORD m_dwStatus; HWND m_hDropWnd; ModItem m_itemDrag; + DWORD m_dwStatus; UINT m_nDocNdx, m_nDragDocNdx; HTREEITEM m_hItemDrag, m_hItemDrop; HTREEITEM m_hInsLib, m_hMidiLib; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-07-13 15:41:27
|
Revision: 2535 http://sourceforge.net/p/modplug/code/2535 Author: saga-games Date: 2013-07-13 15:41:18 +0000 (Sat, 13 Jul 2013) Log Message: ----------- [Mod] Support more dls banks through some refactoring (2^22 banks supported) Modified Paths: -------------- trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-13 12:29:39 UTC (rev 2534) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-13 15:41:18 UTC (rev 2535) @@ -555,7 +555,7 @@ szNoteNames[keymax % 12], keymax / 12, regionName); } - LPARAM lParam = DLS_TYPEPERC | (iRgn << DLS_REGIONSHIFT) | iIns; + LPARAM lParam = DlsItem::EncodeValuePerc((uint8)(iRgn), (uint8)iIns); InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hKit, TVI_LAST); } @@ -594,7 +594,7 @@ hBanks[j] = hbank; nBanks++; } - LPARAM lParam = DLS_TYPEINST | ((pDlsIns->ulInstrument & 0x7F) << DLS_REGIONSHIFT) | (iIns); + LPARAM lParam = DlsItem::EncodeValueInstr((pDlsIns->ulInstrument & 0x7F), (uint8)iIns); InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hbank, TVI_LAST); } @@ -1155,7 +1155,7 @@ if ((itemData & DLS_TYPEMASK) == DLS_TYPEPERC || (itemData & DLS_TYPEMASK) == DLS_TYPEINST) { - return ModItem(MODITEM_DLSBANK_INSTRUMENT, itemData, (uint16)dlsItem); + return DlsItem(dlsItem, itemData); } } } @@ -1326,19 +1326,20 @@ default: if (modItem.type == MODITEM_DLSBANK_INSTRUMENT) { + const DlsItem &item = *static_cast<const DlsItem *>(&modItem); CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - uint16 bank = modItem.val2; + size_t bank = item.GetBankIndex(); if ((bank < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[bank]) && (pMainFrm)) { CDLSBank *pDLSBank = CTrackApp::gpDLSBanks[bank]; - UINT rgn = 0, instr = (modItem.val1 & DLS_INSTRMASK); + UINT rgn = 0, instr = item.GetInstr(); // Drum - if (modItem.val1 & DLS_TYPEPERC) + if (item.IsPercussion()) { - rgn = (modItem.val1 & DLS_REGIONMASK) >> DLS_REGIONSHIFT; + rgn = item.GetRegion(); } else // Melodic - if (modItem.val1 & DLS_TYPEINST) + if (item.IsInstr()) { rgn = pDLSBank->GetRegionFromKey(instr, nParam - NOTE_MIN); } @@ -1998,13 +1999,16 @@ break; case MODITEM_DLSBANK_INSTRUMENT: - ASSERT((m_itemDrag.val1 & DLS_TYPEMASK) != 0); - pdropinfo->dwDropType = DRAGONDROP_DLS; - // dwDropItem = DLS Bank # - pdropinfo->dwDropItem = m_itemDrag.val2; // bank # - // Melodic: (Instrument) - // Drums: (0x80000000) | (Region << 16) | (Instrument) - pdropinfo->lDropParam = (LPARAM)((m_itemDrag.val1 & (DLS_TYPEPERC | DLS_REGIONMASK | DLS_INSTRMASK))); + { + const DlsItem &item = *static_cast<const DlsItem *>(&m_itemDrag); + ASSERT(item.IsInstr() || item.IsPercussion()); + pdropinfo->dwDropType = DRAGONDROP_DLS; + // dwDropItem = DLS Bank # + pdropinfo->dwDropItem = item.GetBankIndex(); // bank # + // Melodic: (Instrument) + // Drums: (0x80000000) | (Region << 16) | (Instrument) + pdropinfo->lDropParam = (LPARAM)((m_itemDrag.val1 & (DLS_TYPEPERC | DLS_REGIONMASK | DLS_INSTRMASK))); + } break; } return (pdropinfo->dwDropType != DRAGONDROP_NOTHING); Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-07-13 12:29:39 UTC (rev 2534) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-07-13 15:41:18 UTC (rev 2535) @@ -104,15 +104,6 @@ MODITEM_SEQUENCE, }; - struct ModItem - { - uint32 val1; - uint16 type; // see ModItemType - uint16 val2; - - ModItem(ModItemType t = MODITEM_NULL, uint32 v1 = 0, uint16 v2 = 0) : type(uint16(t)), val1(v1), val2(v2) { } - }; - // Bit mask magic enum { @@ -131,11 +122,36 @@ DLS_INSTRMASK = 0x00007FFF, DLS_REGIONMASK = 0x007F0000, DLS_REGIONSHIFT = 16, + DLS_HIBANKMASK = 0x3F000000, + DLS_HIBANKSHIFT = 24, }; static_assert((ORDERINDEX_INVALID & SEQU_MASK) == ORDERINDEX_INVALID, "ORDERINDEX doesn't fit in GetItemData() parameter"); static_assert((ORDERINDEX_MAX & SEQU_MASK) == ORDERINDEX_MAX, "ORDERINDEX doesn't fit in GetItemData() parameter"); static_assert((((SEQUENCEINDEX_INVALID << SEQU_SHIFT) & ~SEQU_INDICATOR) >> SEQU_SHIFT) == SEQUENCEINDEX_INVALID, "SEQUENCEINDEX doesn't fit in GetItemData() parameter"); + struct ModItem + { + uint32 val1; + uint16 type; // see ModItemType + uint16 val2; + + ModItem(ModItemType t = MODITEM_NULL, uint32 v1 = 0, uint16 v2 = 0) : type(uint16(t)), val1(v1), val2(v2) { } + }; + + struct DlsItem : public ModItem + { + DlsItem(uint32 bank, uint32 itemData) : ModItem(MODITEM_DLSBANK_INSTRUMENT, itemData | ((bank << (DLS_HIBANKSHIFT - 16)) & DLS_HIBANKMASK), (uint16)bank) { } + + uint32 GetBankIndex() const { return val2 | ((val1 & DLS_HIBANKMASK) >> (DLS_HIBANKSHIFT - 16)); } + uint8 GetRegion() const { return static_cast<uint8>((val1 & DLS_REGIONMASK) >> DLS_REGIONSHIFT); } + uint8 GetInstr() const { return static_cast<uint8>((val1 & DLS_INSTRMASK)); } + bool IsPercussion() const { return ((val1 & DLS_TYPEMASK) == DLS_TYPEPERC); } + bool IsInstr() const { return ((val1 & DLS_TYPEMASK) == DLS_TYPEINST); } + + static uint32 EncodeValuePerc(uint8 region, uint8 instr) { return DLS_TYPEPERC | (region << DLS_REGIONSHIFT) | instr; } + static uint32 EncodeValueInstr(uint8 region, uint8 instr) { return DLS_TYPEINST | (region << DLS_REGIONSHIFT) | instr; } + }; + static CSoundFile *m_SongFile; // For browsing samples and instruments inside modules on disk CModTreeDropTarget m_DropTarget; CModTree *m_pDataTree; // Pointer to instrument browser (lower part of tree view) - if it's a nullptr, this object is the instrument browser itself. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-07-13 17:33:23
|
Revision: 2539 http://sourceforge.net/p/modplug/code/2539 Author: saga-games Date: 2013-07-13 17:33:15 +0000 (Sat, 13 Jul 2013) Log Message: ----------- [Mod] Song Cleanup: "Remove unused patterns" doesn't automatically execute "rearrange patterns" now. [Ref] Greatly reduced code complexity of "rearrange patterns" [Mod] OpenMPT: Version is now 1.22.03.11 Modified Paths: -------------- trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/CleanupSong.h Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2013-07-13 15:59:38 UTC (rev 2538) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2013-07-13 17:33:15 UTC (rev 2539) @@ -135,7 +135,7 @@ // 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); + if(m_bCheckBoxes[CU_REARRANGE_PATTERNS]) bModified |= RearrangePatterns(); // Instruments if(modDoc.GetSoundFile()->m_nInstruments > 0) @@ -343,173 +343,138 @@ /////////////////////////////////////////////////////////////////////// // Actual cleanup implementations -struct OrigPatSettings +// Remove unused patterns +bool CModCleanupDlg::RemoveUnusedPatterns() +//----------------------------------------- { - // This stuff is needed for copying the old pattern properties to the new pattern number - CString name; // original pattern name - ModCommand *data; // original pattern data - ROWINDEX numRows; // original pattern sizes - ROWINDEX rowsPerBeat; // original pattern highlight - ROWINDEX rowsPerMeasure; // original pattern highlight - - PATTERNINDEX newIndex; // map old pattern index <-> new pattern index - bool isPatUsed; // Is pattern used in sequence? -}; - -const OrigPatSettings defaultSettings = { "", nullptr, 0, 0, 0, 0, false }; - -// Remove unused patterns / rearrange patterns -// If argument bRemove is true, unused patterns are removed. Else, patterns are only rearranged. -bool CModCleanupDlg::RemoveUnusedPatterns(bool bRemove) -//----------------------------------------------------- -{ CSoundFile &sndFile = modDoc.GetrSoundFile(); + const SEQUENCEINDEX numSequences = sndFile.Order.GetNumSequences(); + const PATTERNINDEX numPatterns = sndFile.Patterns.Size(); + std::vector<bool> patternUsed(numPatterns, false); - const SEQUENCEINDEX maxSeqIndex = sndFile.Order.GetNumSequences(); - const PATTERNINDEX maxPatIndex = sndFile.Patterns.Size(); - std::vector<OrigPatSettings> patternSettings(maxPatIndex, defaultSettings); - - CHAR s[512]; - bool bReordered = false; - size_t nPatRemoved = 0; - PATTERNINDEX nMinToRemove = 0; - BeginWaitCursor(); // First, find all used patterns in all sequences. - PATTERNINDEX maxpat = 0; - for(SEQUENCEINDEX nSeq = 0; nSeq < maxSeqIndex; nSeq++) + for(SEQUENCEINDEX seq = 0; seq < numSequences; seq++) { - for (ORDERINDEX nOrd = 0; nOrd < sndFile.Order.GetSequence(nSeq).GetLength(); nOrd++) + for(ORDERINDEX ord = 0; ord < sndFile.Order.GetSequence(seq).GetLength(); ord++) { - PATTERNINDEX n = sndFile.Order.GetSequence(nSeq)[nOrd]; - if (n < maxPatIndex) + PATTERNINDEX pat = sndFile.Order.GetSequence(seq)[ord]; + if(pat < numPatterns) { - if (n >= maxpat) maxpat = n + 1; - patternSettings[n].isPatUsed = true; + patternUsed[pat] = true; } } } - // Find first index to be removed - if (!bRemove) - { - PATTERNINDEX imax = maxPatIndex; - while (imax > 0) - { - imax--; - if ((sndFile.Patterns[imax]) && (patternSettings[imax].isPatUsed)) break; - } - nMinToRemove = imax + 1; - } - - // Remove all completely empty patterns above last used pattern (those are safe to remove) + // Remove all other patterns. CriticalSection cs; - for (PATTERNINDEX nPat = maxpat; nPat < maxPatIndex; nPat++) if ((sndFile.Patterns[nPat]) && (nPat >= nMinToRemove)) + PATTERNINDEX numRemovedPatterns = 0; + for(PATTERNINDEX pat = 0; pat < numPatterns; pat++) { - if(sndFile.Patterns.IsPatternEmpty(nPat)) + if(!patternUsed[pat] && sndFile.Patterns.IsValidPat(pat)) { - sndFile.Patterns.Remove(nPat); - nPatRemoved++; + numRemovedPatterns++; + modDoc.GetPatternUndo().PrepareUndo(pat, 0, 0, sndFile.GetNumChannels(), sndFile.Patterns[pat].GetNumRows(), numRemovedPatterns != 0, false); + sndFile.Patterns.Remove(pat); } } + EndWaitCursor(); - // Number of unused patterns - size_t nWaste = 0; - for (UINT ichk=0; ichk < maxPatIndex; ichk++) + if(numRemovedPatterns) { - if ((sndFile.Patterns[ichk]) && (!patternSettings[ichk].isPatUsed)) nWaste++; + modDoc.AddToLog(mpt::String::Format("%u pattern%s removed.", numRemovedPatterns, numRemovedPatterns == 1 ? "" : "s")); + return true; } + return false; +} - if ((bRemove) && (nWaste)) - { - cs.Leave(); - 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?", nWaste, (nWaste == 1) ? "" : "s"); - if (Reporting::Confirm(s, "Pattern Cleanup", false, false, this) != cnfYes) return false; - BeginWaitCursor(); - cs.Enter(); - } - for(PATTERNINDEX i = 0; i < maxPatIndex; i++) - patternSettings[i].newIndex = PATTERNINDEX_INVALID; +struct OrigPatSettings +{ + // This stuff is needed for copying the old pattern properties to the new pattern number + std::string name; // original pattern name + ModCommand *data; // original pattern data + ROWINDEX numRows; // original pattern sizes + ROWINDEX rowsPerBeat; // original pattern highlight + ROWINDEX rowsPerMeasure; // original pattern highlight - SEQUENCEINDEX oldSequence = sndFile.Order.GetCurrentSequenceIndex(); // workaround, as GetSequence doesn't allow writing to sequences ATM + PATTERNINDEX newIndex; // map old pattern index <-> new pattern index +}; - // Re-order pattern numbers based on sequence - PATTERNINDEX nPats = 0; // last used index - for(SEQUENCEINDEX nSeq = 0; nSeq < maxSeqIndex; nSeq++) +const OrigPatSettings defaultSettings = { "", nullptr, 0, 0, 0, PATTERNINDEX_INVALID }; + + +// Rearrange patterns (first pattern in order list = 0, etc...) +bool CModCleanupDlg::RearrangePatterns() +//-------------------------------------- +{ + CSoundFile &sndFile = modDoc.GetrSoundFile(); + + const SEQUENCEINDEX numSequences = sndFile.Order.GetNumSequences(); + const PATTERNINDEX numPatterns = sndFile.Patterns.Size(); + std::vector<OrigPatSettings> patternSettings(numPatterns, defaultSettings); + + bool modified = false; + + BeginWaitCursor(); + CriticalSection cs; + + // First, find all used patterns in all sequences. + PATTERNINDEX patOrder = 0; + for(SEQUENCEINDEX seq = 0; seq < numSequences; seq++) { - sndFile.Order.SetSequence(nSeq); - ORDERINDEX imap = 0; - for (imap = 0; imap < sndFile.Order.GetSequence(nSeq).GetLength(); imap++) + for(ORDERINDEX ord = 0; ord < sndFile.Order.GetSequence(seq).GetLength(); ord++) { - PATTERNINDEX n = sndFile.Order.GetSequence(nSeq)[imap]; - if (n < maxPatIndex) + PATTERNINDEX pat = sndFile.Order.GetSequence(seq)[ord]; + if(pat < numPatterns) { - if (patternSettings[n].newIndex == PATTERNINDEX_INVALID) patternSettings[n].newIndex = nPats++; - sndFile.Order[imap] = patternSettings[n].newIndex; - } - } - // Add unused patterns at the end - if ((!bRemove) || (!nWaste)) - { - for(PATTERNINDEX iadd = 0; iadd < maxPatIndex; iadd++) - { - if((sndFile.Patterns[iadd]) && (patternSettings[iadd].newIndex >= maxPatIndex)) + if(patternSettings[pat].newIndex == PATTERNINDEX_INVALID) { - patternSettings[iadd].newIndex = nPats++; + patternSettings[pat].newIndex = patOrder++; } + sndFile.Order.GetSequence(seq)[ord] = patternSettings[pat].newIndex; } } - while (imap < sndFile.Order.GetSequence(nSeq).GetLength()) + } + for(PATTERNINDEX pat = 0; pat < numPatterns; pat++) + { + PATTERNINDEX newIndex = patternSettings[pat].newIndex; + + // All unused patterns are moved to the end of the pattern list. + if(newIndex == PATTERNINDEX_INVALID && sndFile.Patterns.IsValidPat(pat)) { - sndFile.Order[imap++] = sndFile.Order.GetInvalidPatIndex(); + newIndex = patOrder++; } - } - sndFile.Order.SetSequence(oldSequence); + // Create old <-> new pattern ID data mapping. + if(newIndex != PATTERNINDEX_INVALID) + { + if(pat != newIndex) modified = true; - // Reorder patterns & Delete unused patterns - { - for (PATTERNINDEX i = 0; i < maxPatIndex; i++) - { - PATTERNINDEX k = patternSettings[i].newIndex; - if (k < maxPatIndex) + patternSettings[newIndex].numRows = sndFile.Patterns[pat].GetNumRows(); + patternSettings[newIndex].data = sndFile.Patterns[pat]; + if(sndFile.Patterns[pat].GetOverrideSignature()) { - if (i != k) bReordered = true; - patternSettings[k].numRows = sndFile.Patterns[i].GetNumRows(); - patternSettings[k].data = sndFile.Patterns[i]; - if(sndFile.Patterns[i].GetOverrideSignature()) - { - patternSettings[k].rowsPerBeat = sndFile.Patterns[i].GetRowsPerBeat(); - patternSettings[k].rowsPerMeasure = sndFile.Patterns[i].GetRowsPerMeasure(); - } - patternSettings[k].name = sndFile.Patterns[i].GetName(); - } else - if (sndFile.Patterns[i]) - { - sndFile.Patterns.Remove(i); - nPatRemoved++; - } + patternSettings[newIndex].rowsPerBeat = sndFile.Patterns[pat].GetRowsPerBeat(); + patternSettings[newIndex].rowsPerMeasure = sndFile.Patterns[pat].GetRowsPerMeasure(); + } + patternSettings[newIndex].name = sndFile.Patterns[pat].GetName(); } - for (PATTERNINDEX nPat = 0; nPat < maxPatIndex; nPat++) - { - sndFile.Patterns[nPat].SetData(patternSettings[nPat].data, patternSettings[nPat].numRows); - sndFile.Patterns[nPat].SetSignature(patternSettings[nPat].rowsPerBeat, patternSettings[nPat].rowsPerMeasure); - sndFile.Patterns[nPat].SetName(patternSettings[nPat].name); - } } - cs.Leave(); + // Copy old data to new pattern location. + for(PATTERNINDEX pat = 0; pat < numPatterns; pat++) + { + sndFile.Patterns[pat].SetData(patternSettings[pat].data, patternSettings[pat].numRows); + sndFile.Patterns[pat].SetSignature(patternSettings[pat].rowsPerBeat, patternSettings[pat].rowsPerMeasure); + sndFile.Patterns[pat].SetName(patternSettings[pat].name); + } + EndWaitCursor(); - if ((nPatRemoved) || (bReordered)) + + if(modified) { modDoc.GetPatternUndo().ClearUndo(); - if (nPatRemoved) - { - wsprintf(s, "%d pattern%s removed.", nPatRemoved, (nPatRemoved == 1) ? "" : "s"); - modDoc.AddToLog(s); - } return true; } return false; Modified: trunk/OpenMPT/mptrack/CleanupSong.h =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.h 2013-07-13 15:59:38 UTC (rev 2538) +++ trunk/OpenMPT/mptrack/CleanupSong.h 2013-07-13 17:33:15 UTC (rev 2539) @@ -49,7 +49,8 @@ // Actual cleanup implementations: // Patterns - bool RemoveUnusedPatterns(bool bRemove = true); // Remove unused patterns / rearrange patterns + bool RemoveUnusedPatterns(); // Remove unused patterns + bool RearrangePatterns(); // Rearrange patterns bool RemoveAllPatterns(); // Orders bool MergeSequences(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-08-06 17:16:45
|
Revision: 2587 http://sourceforge.net/p/modplug/code/2587 Author: manxorist Date: 2013-08-06 17:16:38 +0000 (Tue, 06 Aug 2013) Log Message: ----------- [Mod] Split channel and sample format selection in soundcard settings dialog. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mpdlgs.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-08-06 15:41:17 UTC (rev 2586) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-08-06 17:16:38 UTC (rev 2587) @@ -72,6 +72,7 @@ ON_CBN_SELCHANGE(IDC_COMBO3, OnSettingsChanged) ON_CBN_SELCHANGE(IDC_COMBO4, OnSettingsChanged) ON_CBN_SELCHANGE(IDC_COMBO5, OnSettingsChanged) + ON_CBN_SELCHANGE(IDC_COMBO6, OnSettingsChanged) ON_CBN_EDITCHANGE(IDC_COMBO2, OnSettingsChanged) ON_CBN_EDITCHANGE(IDC_COMBO_UPDATEINTERVAL, OnSettingsChanged) END_MESSAGE_MAP() @@ -108,7 +109,8 @@ DDX_Control(pDX, IDC_COMBO_UPDATEINTERVAL, m_CbnUpdateIntervalMS); DDX_Control(pDX, IDC_COMBO3, m_CbnMixingFreq); DDX_Control(pDX, IDC_COMBO4, m_CbnPolyphony); - DDX_Control(pDX, IDC_COMBO5, m_CbnQuality); + DDX_Control(pDX, IDC_COMBO5, m_CbnChannels); + DDX_Control(pDX, IDC_COMBO6, m_CbnSampleFormat); DDX_Control(pDX, IDC_SLIDER1, m_SliderStereoSep); DDX_Control(pDX, IDC_SLIDER_PREAMP, m_SliderPreAmp); DDX_Control(pDX, IDC_EDIT_STATISTICS, m_EditStatistics); @@ -250,52 +252,74 @@ UpdateControls(m_nSoundDevice); } - UpdateChannelsFormat(m_nSoundDevice); + UpdateChannels(m_nSoundDevice); + UpdateSampleFormat(m_nSoundDevice); return TRUE; } -void COptionsSoundcard::UpdateChannelsFormat(int dev) -//--------------------------------------------------- +void COptionsSoundcard::UpdateChannels(int dev) +//--------------------------------------------- { - // Sample Format + UNREFERENCED_PARAMETER(dev); CHAR s[128]; UINT n = 0; - m_CbnQuality.ResetContent(); + m_CbnChannels.ResetContent(); for(UINT channels = 4; channels >= 1; channels /= 2) { - for(UINT bits = 32; bits >= 8; bits -= 8) + if(channels > 2 && !theApp.IsWaveExEnabled()) { - if(channels > 2 && bits > 16 && !theApp.IsWaveExEnabled()) + continue; + } + wsprintf(s, "%s", gszChnCfgNames[(channels+2)/2-1]); + UINT ndx = m_CbnChannels.AddString(s); + m_CbnChannels.SetItemData(ndx, channels); + if(channels == m_nChannels) + { + n = ndx; + } + } + m_CbnChannels.SetCurSel(n); +} + + +void COptionsSoundcard::UpdateSampleFormat(int dev) +//------------------------------------------------- +{ + CHAR s[128]; + UINT n = 0; + m_CbnSampleFormat.ResetContent(); + for(UINT bits = 32; bits >= 8; bits -= 8) + { + if(bits > 16 && !theApp.IsWaveExEnabled() && SNDDEV_GET_TYPE(dev) != SNDDEV_ASIO) + { + continue; + } + if(bits != 16 && bits != 32 && SNDDEV_GET_TYPE(dev) == SNDDEV_ASIO) + { + // CASIODevice only supports 16bit or 32bit input for now + continue; + } + if(bits == 32 && SNDDEV_GET_TYPE(dev) != SNDDEV_ASIO) + { + wsprintf(s, "Floating Point"); + UINT ndx = m_CbnSampleFormat.AddString(s); + m_CbnSampleFormat.SetItemData(ndx, (32+128)); + if(SampleFormatFloat32 == m_SampleFormat) { - continue; - } - if(bits != 16 && bits !=32 && SNDDEV_GET_TYPE(dev) == SNDDEV_ASIO) - { - // CASIODevice only supports 16bit or 32bit input for now - continue; - } - if(bits == 32 && SNDDEV_GET_TYPE(dev) != SNDDEV_ASIO) - { - wsprintf(s, "%s, %d Bits, Float", gszChnCfgNames[(channels+2)/2-1], bits); - UINT ndx = m_CbnQuality.AddString(s); - m_CbnQuality.SetItemData(ndx, (channels << 8) | (32+128)); - if((SampleFormat)(32+128) == m_SampleFormat && channels == m_nChannels) - { - n = ndx; - } - } - wsprintf(s, "%s, %d Bit", gszChnCfgNames[(channels+2)/2-1], bits); - UINT ndx = m_CbnQuality.AddString(s); - m_CbnQuality.SetItemData(ndx, (channels << 8) | bits); - if((SampleFormat)bits == m_SampleFormat && channels == m_nChannels) - { n = ndx; } } + wsprintf(s, "%d Bit", bits); + UINT ndx = m_CbnSampleFormat.AddString(s); + m_CbnSampleFormat.SetItemData(ndx, bits); + if((SampleFormat)bits == m_SampleFormat) + { + n = ndx; + } } - m_CbnQuality.SetCurSel(n); + m_CbnSampleFormat.SetCurSel(n); } @@ -365,7 +389,8 @@ int dev = m_CbnDevice.GetItemData(n); UpdateControls(dev); UpdateSampleRates(dev); - UpdateChannelsFormat(dev); + UpdateChannels(dev); + UpdateSampleFormat(dev); OnSettingsChanged(); } } @@ -467,12 +492,16 @@ { m_dwRate = m_CbnMixingFreq.GetItemData(m_CbnMixingFreq.GetCurSel()); } - // Quality + // Channels { - UINT n = m_CbnQuality.GetItemData( m_CbnQuality.GetCurSel() ); - m_nChannels = n >> 8; + UINT n = m_CbnChannels.GetItemData(m_CbnChannels.GetCurSel()); + m_nChannels = n; + if((m_nChannels != 1) && (m_nChannels != 4))m_nChannels = 2; + } + // SampleFormat + { + UINT n = m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel()); m_SampleFormat = (SampleFormat)(n & 0xFF); - if ((m_nChannels != 1) && (m_nChannels != 4)) m_nChannels = 2; } // Polyphony { Modified: trunk/OpenMPT/mptrack/Mpdlgs.h =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.h 2013-08-06 15:41:17 UTC (rev 2586) +++ trunk/OpenMPT/mptrack/Mpdlgs.h 2013-08-06 17:16:38 UTC (rev 2587) @@ -21,7 +21,7 @@ { protected: CComboBoxEx m_CbnDevice; - CComboBox m_CbnLatencyMS, m_CbnUpdateIntervalMS, m_CbnMixingFreq, m_CbnPolyphony, m_CbnQuality; + CComboBox m_CbnLatencyMS, m_CbnUpdateIntervalMS, m_CbnMixingFreq, m_CbnPolyphony, m_CbnChannels, m_CbnSampleFormat; CSliderCtrl m_SliderStereoSep, m_SliderPreAmp; CEdit m_EditStatistics; DWORD m_dwRate, m_SoundDeviceFlags; @@ -41,7 +41,8 @@ private: void UpdateSampleRates(int dev); - void UpdateChannelsFormat(int dev); + void UpdateChannels(int dev); + void UpdateSampleFormat(int dev); void UpdateControls(int dev); void SetPreAmpSliderPosition(); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-08-06 15:41:17 UTC (rev 2586) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-08-06 17:16:38 UTC (rev 2587) @@ -1257,18 +1257,22 @@ CAPTION "Sound Card" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN + GROUPBOX "",IDC_STATIC,6,6,258,114 LTEXT "Sound Device:",IDC_STATIC,12,18,54,8 CONTROL "",IDC_COMBO1,"ComboBoxEx32",CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP,12,30,246,96 - LTEXT "Latency:",IDC_STATIC,12,48,60,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO2,78,48,72,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "Use device exclusively",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,48,102,12 - LTEXT "Update Interval:",IDC_STATIC_UPDATEINTERVAL,12,66,60,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO_UPDATEINTERVAL,78,66,72,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - LTEXT "Mixing Quality:",IDC_STATIC,12,84,57,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO3,78,84,72,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO5,156,84,72,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Max. Polyphony:",IDC_STATIC,12,102,57,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO4,78,102,72,88,CBS_DROPDOWNLIST | WS_TABSTOP + LTEXT "Latency:",IDC_STATIC,12,48,54,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO2,72,48,66,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "Use device exclusively",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,48,102,12 + LTEXT "Update Interval:",IDC_STATIC_UPDATEINTERVAL,12,66,54,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_UPDATEINTERVAL,72,66,66,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "Boost thread priority",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,66,89,12 + LTEXT "Output format:",IDC_STATIC,12,84,54,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO3,72,84,66,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO5,144,84,42,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO6,192,84,66,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Max. Polyphony:",IDC_STATIC,12,102,54,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO4,72,102,66,88,CBS_DROPDOWNLIST | WS_TABSTOP + GROUPBOX "",IDC_STATIC,6,126,258,90 CONTROL "Soft Panning",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,138,78,12 LTEXT "Stereo Separation:",IDC_STATIC,12,157,62,8 LTEXT "100%",IDC_TEXT1,80,157,20,8 @@ -1279,9 +1283,6 @@ CONTROL "Slider2",IDC_SLIDER_PREAMP,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOOLTIPS | WS_TABSTOP,174,168,74,24 LTEXT "Note: The Pre-Amp and Soft Panning settings are ignored by songs with mix levels set to 1.17RC3 or later in the Song Properties.",IDC_STATIC,12,195,246,18 EDITTEXT IDC_EDIT_STATISTICS,6,222,258,36,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - GROUPBOX "",IDC_STATIC,6,6,258,114 - GROUPBOX "",IDC_STATIC,6,126,258,90 - CONTROL "Boost thread priority",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,66,89,12 END IDD_MIDIMACRO DIALOGEX 0, 0, 358, 354 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-08-22 23:37:29
|
Revision: 2613 http://sourceforge.net/p/modplug/code/2613 Author: saga-games Date: 2013-08-22 23:37:20 +0000 (Thu, 22 Aug 2013) Log Message: ----------- [Fix] Slowly double-clicking treeview items that are not part of a song folder crashed the application. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-08-22 07:36:49 UTC (rev 2612) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-08-22 23:37:20 UTC (rev 2613) @@ -3397,7 +3397,7 @@ NMTVDISPINFO *info = reinterpret_cast<NMTVDISPINFO *>(nmhdr); CEdit *editCtrl = GetEditControl(); const ModItem modItem = GetModItem(info->item.hItem); - const CModDoc *modDoc = GetDocumentFromItem(info->item.hItem); + const CModDoc *modDoc = modItem.IsSongItem() ? GetDocumentFromItem(info->item.hItem) : nullptr; if(editCtrl != nullptr && modDoc != nullptr) { @@ -3484,7 +3484,7 @@ NMTVDISPINFO *info = reinterpret_cast<NMTVDISPINFO *>(nmhdr); const ModItem modItem = GetModItem(info->item.hItem); - CModDoc *modDoc = GetDocumentFromItem(info->item.hItem); + CModDoc *modDoc = modItem.IsSongItem() ? GetDocumentFromItem(info->item.hItem) : nullptr; if(info->item.pszText != nullptr && modDoc != nullptr) { Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-08-22 07:36:49 UTC (rev 2612) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-08-22 23:37:20 UTC (rev 2613) @@ -79,17 +79,22 @@ enum ModItemType { MODITEM_NULL = 0, - MODITEM_ORDER, + + MODITEM_BEGIN_SONGITEMS, + MODITEM_ORDER = MODITEM_BEGIN_SONGITEMS, MODITEM_PATTERN, MODITEM_SAMPLE, MODITEM_INSTRUMENT, MODITEM_COMMENTS, MODITEM_EFFECT, + MODITEM_SEQUENCE, MODITEM_HDR_SONG, MODITEM_HDR_ORDERS, MODITEM_HDR_PATTERNS, MODITEM_HDR_SAMPLES, MODITEM_HDR_INSTRUMENTS, + MODITEM_END_SONGITEMS = MODITEM_HDR_INSTRUMENTS, + MODITEM_HDR_INSTRUMENTLIB, MODITEM_HDR_MIDILIB, MODITEM_HDR_MIDIGROUP, @@ -101,7 +106,6 @@ MODITEM_INSLIB_SONG, MODITEM_DLSBANK_FOLDER, MODITEM_DLSBANK_INSTRUMENT, - MODITEM_SEQUENCE, }; // Bit mask magic @@ -136,6 +140,7 @@ uint16 val2; ModItem(ModItemType t = MODITEM_NULL, uint32 v1 = 0, uint16 v2 = 0) : type(uint16(t)), val1(v1), val2(v2) { } + bool IsSongItem() const { return type >= MODITEM_BEGIN_SONGITEMS && type <= MODITEM_END_SONGITEMS; } }; struct DlsItem : public ModItem This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-08-29 09:06:02
|
Revision: 2618 http://sourceforge.net/p/modplug/code/2618 Author: manxorist Date: 2013-08-29 09:05:49 +0000 (Thu, 29 Aug 2013) Log Message: ----------- [Ref] gMemStatus does not need to be global anymore. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-08-28 18:33:45 UTC (rev 2617) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-08-29 09:05:49 UTC (rev 2618) @@ -580,7 +580,6 @@ // CTrackApp MODTYPE CTrackApp::m_nDefaultDocType = MOD_TYPE_IT; -MEMORYSTATUS CTrackApp::gMemStatus; // -> CODE#0023 // -> DESC="IT project files (.itp)" @@ -818,6 +817,7 @@ //m_hAlternateResourceHandle = LoadLibrary("mpt_intl.dll"); + MEMORYSTATUS gMemStatus; MemsetZero(gMemStatus); GlobalMemoryStatus(&gMemStatus); #if 0 @@ -827,7 +827,6 @@ #endif // Allow allocations of at least 16MB if (gMemStatus.dwTotalPhys < 16*1024*1024) gMemStatus.dwTotalPhys = 16*1024*1024; - TrackerSettings::Instance().m_nSampleUndoMaxBuffer = gMemStatus.dwTotalPhys / 10; // set sample undo buffer size if(TrackerSettings::Instance().m_nSampleUndoMaxBuffer < (1 << 20)) TrackerSettings::Instance().m_nSampleUndoMaxBuffer = (1 << 20); Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2013-08-28 18:33:45 UTC (rev 2617) +++ trunk/OpenMPT/mptrack/Mptrack.h 2013-08-29 09:05:49 UTC (rev 2618) @@ -95,7 +95,6 @@ static BOOL m_nProject; public: - static MEMORYSTATUS gMemStatus; static std::vector<CDLSBank *> gpDLSBanks; #if MPT_COMPILER_MSVC && MPT_MSVC_BEFORE(2010,0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-08-29 12:16:20
|
Revision: 2620 http://sourceforge.net/p/modplug/code/2620 Author: manxorist Date: 2013-08-29 12:16:01 +0000 (Thu, 29 Aug 2013) Log Message: ----------- [Ref] Remove mpt_intl.ini and mpt_intl.dll support code which was solely usable to translate the options list in the general options tab. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2013-08-29 11:43:14 UTC (rev 2619) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2013-08-29 12:16:01 UTC (rev 2620) @@ -585,17 +585,11 @@ BOOL COptionsGeneral::OnInitDialog() //---------------------------------- { - CHAR sname[32], s[256]; CPropertyPage::OnInitDialog(); for(size_t i = 0; i < CountOf(generalOptionsList); i++) { - 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(generalOptionsList[i].name); - + m_CheckList.AddString(generalOptionsList[i].name); const int check = (TrackerSettings::Instance().m_dwPatternSetup & generalOptionsList[i].flag) != 0 ? BST_CHECKED : BST_UNCHECKED; m_CheckList.SetCheck(i, check); } @@ -676,14 +670,11 @@ void COptionsGeneral::OnOptionSelChanged() //---------------------------------------- { - CHAR sname[32], s[256]; LPCSTR pszDesc = NULL; const int sel = m_CheckList.GetCurSel(); if ((sel >= 0) && (sel < CountOf(generalOptionsList))) { pszDesc = generalOptionsList[sel].description; - wsprintf(sname, "Setup.Gen.Opt%d.Desc", sel+1); - if ((theApp.GetLocalizedString(sname, s, sizeof(s))) && (s[0])) pszDesc = s; } SetDlgItemText(IDC_TEXT1, (pszDesc) ? pszDesc : ""); } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-08-29 11:43:14 UTC (rev 2619) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-08-29 12:16:01 UTC (rev 2620) @@ -626,7 +626,6 @@ m_bInitialized = FALSE; m_bExWaveSupport = FALSE; m_bDebugMode = FALSE; - m_hAlternateResourceHandle = NULL; m_szConfigFileName[0] = 0; } @@ -740,7 +739,6 @@ // Move the config files if they're still in the old place. MoveConfigFile("mptrack.ini"); MoveConfigFile("plugin.cache"); - MoveConfigFile("mpt_intl.ini"); #endif // WIN32 Legacy Stuff } else { @@ -788,9 +786,6 @@ strcpy(m_szConfigFileName, m_szConfigDirectory); // config file strcat(m_szConfigFileName, "mptrack.ini"); - strcpy(m_szStringsFileName, m_szConfigDirectory); // I18N file - strcat(m_szStringsFileName, "mpt_intl.ini"); - strcpy(m_szPluginCacheFileName, m_szConfigDirectory); // plugin cache strcat(m_szPluginCacheFileName, "plugin.cache"); @@ -815,8 +810,6 @@ // Start loading BeginWaitCursor(); - //m_hAlternateResourceHandle = LoadLibrary("mpt_intl.dll"); - MEMORYSTATUS gMemStatus; MemsetZero(gMemStatus); GlobalMemoryStatus(&gMemStatus); @@ -912,9 +905,6 @@ // Initialize Plugins if (!cmdInfo.m_bNoPlugins) InitializeDXPlugins(); - // Initialize localized strings - ImportLocalizedStrings(); - // Initialize CMainFrame pMainFrame->Initialize(); InitCommonControls(); @@ -2075,38 +2065,6 @@ } -////////////////////////////////////////////////////////////////////////////////// -// Localized strings - -VOID CTrackApp::ImportLocalizedStrings() -//-------------------------------------- -{ - //DWORD dwLangId = ((DWORD)GetUserDefaultLangID()) & 0xfff; - // TODO: look up [Strings.lcid], [Strings.(lcid&0xff)] & [Strings] in mpt_intl.ini -} - - -BOOL CTrackApp::GetLocalizedString(LPCSTR pszName, LPSTR pszStr, UINT cbSize) -//--------------------------------------------------------------------------- -{ - CHAR s[32]; - DWORD dwLangId = ((DWORD)GetUserDefaultLangID()) & 0xffff; - - pszStr[0] = 0; - if (!m_szStringsFileName[0]) return FALSE; - wsprintf(s, "Strings.%04X", dwLangId); - GetPrivateProfileString(s, pszName, "", pszStr, cbSize, m_szStringsFileName); - if (pszStr[0]) return TRUE; - wsprintf(s, "Strings.%04X", dwLangId&0xff); - GetPrivateProfileString(s, pszName, "", pszStr, cbSize, m_szStringsFileName); - if (pszStr[0]) return TRUE; - wsprintf(s, "Strings", dwLangId&0xff); - GetPrivateProfileString(s, pszName, "", pszStr, cbSize, m_szStringsFileName); - if (pszStr[0]) return TRUE; - return FALSE; -} - - /* Open or save one or multiple files using the system's file dialog * Parameter list: * - load: true: load dialog. false: save dialog. Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2013-08-29 11:43:14 UTC (rev 2619) +++ trunk/OpenMPT/mptrack/Mptrack.h 2013-08-29 12:16:01 UTC (rev 2620) @@ -113,14 +113,12 @@ CVstPluginManager *m_pPluginManager; BOOL m_bInitialized, m_bExWaveSupport, m_bDebugMode; DWORD m_dwTimeStarted, m_dwLastPluginIdleCall; - HANDLE m_hAlternateResourceHandle; // Default macro configuration MIDIMacroConfig m_MidiCfg; static TCHAR m_szExePath[_MAX_PATH]; TCHAR m_szConfigDirectory[_MAX_PATH]; TCHAR m_szConfigFileName[_MAX_PATH]; TCHAR m_szPluginCacheFileName[_MAX_PATH]; - TCHAR m_szStringsFileName[_MAX_PATH]; bool m_bPortableMode; public: @@ -182,11 +180,6 @@ void StartSplashScreen(); void StopSplashScreen(); -// Localized strings -public: - void ImportLocalizedStrings(); - BOOL GetLocalizedString(LPCSTR pszName, LPSTR pszStr, UINT cbSize); - // Overrides public: // ClassWizard generated virtual function overrides This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-09-06 13:43:34
|
Revision: 2640 http://sourceforge.net/p/modplug/code/2640 Author: manxorist Date: 2013-09-06 13:43:24 +0000 (Fri, 06 Sep 2013) Log Message: ----------- [Mod] Remove /debug command line option. It only activated a single line of logging in the DMO loading code, and only in debug builds. So it was basically useless. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/Vstplug.cpp Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-09-06 12:05:47 UTC (rev 2639) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-09-06 13:43:24 UTC (rev 2640) @@ -269,14 +269,14 @@ //================================================ { public: - bool m_bNoAcm, m_bNoDls, m_bSafeMode, m_bNoPlugins, m_bDebug, + bool m_bNoAcm, m_bNoDls, m_bSafeMode, m_bNoPlugins, m_bPortable, m_bNoSettingsOnNewVersion; public: CMPTCommandLineInfo() { m_bNoAcm = m_bNoDls = m_bSafeMode = - m_bNoPlugins = m_bDebug = m_bNoSettingsOnNewVersion = m_bPortable = false; + m_bNoPlugins = m_bNoSettingsOnNewVersion = m_bPortable = false; } virtual void ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast); }; @@ -291,7 +291,6 @@ if (!lstrcmpi(lpszParam, "nodls")) { m_bNoDls = true; return; } else if (!lstrcmpi(lpszParam, "noacm")) { m_bNoAcm = true; return; } else if (!lstrcmpi(lpszParam, "noplugs")) { m_bNoPlugins = true; return; } else - if (!lstrcmpi(lpszParam, "debug")) { m_bDebug = true; return; } else if (!lstrcmpi(lpszParam, "portable")) { m_bPortable = true; return; } else if (!lstrcmpi(lpszParam, "noSettingsOnNewVersion")) { m_bNoSettingsOnNewVersion = true; return; } } @@ -623,7 +622,6 @@ m_pModTemplate = NULL; m_pPluginManager = NULL; m_bInitialized = FALSE; - m_bDebugMode = FALSE; m_szConfigFileName[0] = 0; } @@ -856,8 +854,6 @@ { StartSplashScreen(); } - m_bDebugMode = cmdInfo.m_bDebug; - // Enable drag/drop open m_pMainWnd->DragAcceptFiles(); Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2013-09-06 12:05:47 UTC (rev 2639) +++ trunk/OpenMPT/mptrack/Mptrack.h 2013-09-06 13:43:24 UTC (rev 2640) @@ -111,7 +111,7 @@ protected: CMultiDocTemplate *m_pModTemplate; CVstPluginManager *m_pPluginManager; - BOOL m_bInitialized, m_bDebugMode; + BOOL m_bInitialized; DWORD m_dwTimeStarted, m_dwLastPluginIdleCall; // Default macro configuration MIDIMacroConfig m_MidiCfg; @@ -157,7 +157,6 @@ CVstPluginManager *GetPluginManager() const { return m_pPluginManager; } void GetDefaultMidiMacro(MIDIMacroConfig &cfg) const { cfg = m_MidiCfg; } void SetDefaultMidiMacro(const MIDIMacroConfig &cfg) { m_MidiCfg = cfg; } - BOOL IsDebug() const { return m_bDebugMode; } LPCTSTR GetConfigFileName() const { return m_szConfigFileName; } bool IsPortableMode() { return m_bPortableMode; } LPCTSTR GetPluginCacheFileName() const { return m_szPluginCacheFileName; } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2013-09-06 12:05:47 UTC (rev 2639) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2013-09-06 13:43:24 UTC (rev 2640) @@ -169,7 +169,7 @@ WideCharToMultiByte(CP_ACP, 0, w, -1, p->szDllPath, sizeof(p->szDllPath), nullptr, nullptr); mpt::String::SetNullTerminator(p->szDllPath); #ifdef DMO_LOG - if (theApp.IsDebug()) Log("Found \"%s\" clsid=%s\n", p->szLibraryName, p->szDllPath); + Log("Found \"%s\" clsid=%s\n", p->szLibraryName, p->szDllPath); #endif if (m_pVstHead) m_pVstHead->pPrev = p; m_pVstHead = p; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-09-10 16:00:19
|
Revision: 2690 http://sourceforge.net/p/modplug/code/2690 Author: saga-games Date: 2013-09-10 16:00:11 +0000 (Tue, 10 Sep 2013) Log Message: ----------- [Fix] Tree view: Note-off on key-up was accidentally also applied to the lower part of the tree view, too Modified Paths: -------------- trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-09-09 23:35:46 UTC (rev 2689) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-09-10 16:00:11 UTC (rev 2690) @@ -151,7 +151,7 @@ DWORD dwRemove = TVS_SINGLEEXPAND; DWORD dwAdd = TVS_EDITLABELS | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS; - if (!m_pDataTree) + if (IsSampleBrowser()) { dwRemove |= (TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS); dwAdd &= ~(TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS); @@ -165,7 +165,7 @@ ModifyStyle(dwRemove, dwAdd); strcpy(m_szInstrLibPath, TrackerSettings::Instance().GetDefaultDirectory(DIR_SAMPLES)); SetImageList(CMainFrame::GetMainFrame()->GetImageList(), TVSIL_NORMAL); - if (m_pDataTree) + if (!IsSampleBrowser()) { // Create Midi Library m_hMidiLib = InsertItem("MIDI Library", IMAGE_FOLDER, IMAGE_FOLDER, TVI_ROOT, TVI_LAST); @@ -403,7 +403,7 @@ CHAR szName[_MAX_FNAME], szExt[_MAX_EXT]; LPMIDILIBSTRUCT lpMidiLib = CTrackApp::GetMidiLibrary(); - if (!m_pDataTree) return; + if (IsSampleBrowser()) return; // Midi Programs for (UINT iMidi=0; iMidi<128; iMidi++) { @@ -485,7 +485,7 @@ CHAR s[256]; HTREEITEM hDlsRoot = m_hMidiLib; - if (!m_pDataTree) return; + if (IsSampleBrowser()) return; if(m_tiDLS.size() < CTrackApp::gpDLSBanks.size()) { @@ -647,7 +647,7 @@ CHAR s[256], stmp[256]; TV_ITEM tvi; const DWORD hintFlagPart = HintFlagPart(lHint); - if ((pInfo == nullptr) || (pInfo->pModDoc == nullptr) || (!m_pDataTree)) return; + if ((pInfo == nullptr) || (pInfo->pModDoc == nullptr) || IsSampleBrowser()) return; if (!hintFlagPart) return; const CModDoc *pDoc = pInfo->pModDoc; @@ -1051,7 +1051,7 @@ DWORD_PTR itemData = GetItemData(hItem); CModDoc *pModDoc = GetDocumentFromItem(hItem); - if ((hRootParent != NULL) && (m_pDataTree)) + if ((hRootParent != NULL) && !IsSampleBrowser()) { HTREEITEM h; for (;;) @@ -1062,12 +1062,12 @@ } } // Midi Library - if ((hRootParent == m_hMidiLib) && (m_pDataTree)) + if ((hRootParent == m_hMidiLib) && !IsSampleBrowser()) { return ModItem(static_cast<ModItemType>(itemData >> MIDILIB_SHIFT), static_cast<uint32>(itemData & MIDILIB_MASK)); } // Instrument Library - if ((hRootParent == m_hInsLib) || ((!m_pDataTree) && (hItem != m_hInsLib))) + if ((hRootParent == m_hInsLib) || (IsSampleBrowser() && (hItem != m_hInsLib))) { TV_ITEM tvi; tvi.mask = TVIF_IMAGE|TVIF_HANDLE; @@ -1085,7 +1085,7 @@ } return ModItem(MODITEM_NULL); } - if (!m_pDataTree) return ModItem(MODITEM_NULL); + if (IsSampleBrowser()) return ModItem(MODITEM_NULL); // Songs for (size_t i = 0; i < DocInfo.size(); i++) { @@ -1531,7 +1531,7 @@ { HTREEITEM h; if (!m_hInsLib) return; - if (m_pDataTree) + if (!IsSampleBrowser()) { while ((h = GetChildItem(m_hInsLib)) != NULL) { @@ -1568,7 +1568,7 @@ if (!m_hInsLib) return; SetRedraw(FALSE); - if(m_szSongName[0] && !m_pDataTree && m_SongFile) + if(m_szSongName[0] && IsSampleBrowser() && m_SongFile) { wsprintf(s, "%s", m_szSongName); SetItemText(m_hInsLib, s); @@ -1605,7 +1605,7 @@ strcpy(szPath, m_szInstrLibPath); else GetCurrentDirectory(sizeof(szPath), szPath); - if (m_pDataTree) + if (!IsSampleBrowser()) { wsprintf(s, "Instrument Library (%s)", szPath); strcpy(&s[80], "..."); // Limit text @@ -1618,7 +1618,7 @@ SetItemImage(m_hInsLib, IMAGE_FOLDER, IMAGE_FOLDER); } // Enumerating Drives... - if (m_pDataTree) + if (!IsSampleBrowser()) { strcpy(s, "?:\\"); for (UINT iDrive='A'; iDrive<='Z'; iDrive++) @@ -1661,7 +1661,7 @@ // Up Directory if (!strcmp(wfd.cFileName, "..")) { - if (m_pDataTree) + if (!IsSampleBrowser()) { ModTreeBuildTVIParam(tvis, wfd.cFileName, IMAGE_FOLDERPARENT); InsertItem(&tvis); @@ -1679,7 +1679,7 @@ // Directory if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - if ((strcmp(wfd.cFileName, ".")) && (m_pDataTree)) + if ((strcmp(wfd.cFileName, ".")) && !IsSampleBrowser()) { ModTreeBuildTVIParam(tvis, wfd.cFileName, IMAGE_FOLDER); InsertItem(&tvis); @@ -1705,7 +1705,7 @@ || (!strcmp(s, "iti")) || (!strcmp(s, "pat")) ) { - if (!m_pDataTree) + if (IsSampleBrowser()) { ModTreeBuildTVIParam(tvis, wfd.cFileName, IMAGE_INSTRUMENTS); InsertItem(&tvis); @@ -1713,7 +1713,7 @@ } else if(std::find_if(modExts.begin(), modExts.end(), find_str(s)) != modExts.end()) { // Songs - if (m_pDataTree) + if (!IsSampleBrowser()) { ModTreeBuildTVIParam(tvis, wfd.cFileName, IMAGE_FOLDERSONG); InsertItem(&tvis); @@ -1753,7 +1753,7 @@ && strcmp(s, "mol")) ) { - if (!m_pDataTree) + if (IsSampleBrowser()) { ModTreeBuildTVIParam(tvis, wfd.cFileName, IMAGE_SAMPLES); InsertItem(&tvis); @@ -1766,7 +1766,7 @@ } // Sort items TV_SORTCB tvs; - tvs.hParent = (m_pDataTree) ? m_hInsLib : TVI_ROOT; + tvs.hParent = (!IsSampleBrowser()) ? m_hInsLib : TVI_ROOT; tvs.lpfnCompare = ModTreeInsLibCompareProc; tvs.lParam = (LPARAM)this; SortChildren(tvs.hParent); @@ -1796,7 +1796,7 @@ dwId = 4; break; } - tvis.hParent = (m_pDataTree) ? m_hInsLib : TVI_ROOT; + tvis.hParent = (!IsSampleBrowser()) ? m_hInsLib : TVI_ROOT; tvis.hInsertAfter = TVI_LAST; tvis.item.mask = TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_TEXT; tvis.item.hItem = 0; @@ -3238,7 +3238,7 @@ BeginWaitCursor(); RefreshInstrumentLibrary(); - if (m_pDataTree) + if (!IsSampleBrowser()) { hActive = NULL; if ((m_szOldPath[0]) || (m_szSongName[0])) @@ -3313,7 +3313,7 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); const bool start = wParam >= kcTreeViewStartNotes && wParam <= kcTreeViewEndNotes, - stop = wParam >= kcTreeViewStartNoteStops && wParam <= kcTreeViewEndNoteStops; + stop = (wParam >= kcTreeViewStartNoteStops && wParam <= kcTreeViewEndNoteStops) && !IsSampleBrowser(); if(start || stop) { ModCommand::NOTE note = static_cast<ModCommand::NOTE>(wParam - (start ? kcTreeViewStartNotes : kcTreeViewStartNoteStops) + 1 + pMainFrm->GetBaseOctave() * 12); Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-09-09 23:35:46 UTC (rev 2689) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-09-10 16:00:11 UTC (rev 2690) @@ -210,6 +210,8 @@ void DeleteChildren(HTREEITEM hItem); HTREEITEM GetNthChildItem(HTREEITEM hItem, int index); + bool IsSampleBrowser() const { return m_pDataTree == nullptr; } + // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CModTree) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-10-23 09:15:12
|
Revision: 2982 http://sourceforge.net/p/modplug/code/2982 Author: manxorist Date: 2013-10-23 09:14:57 +0000 (Wed, 23 Oct 2013) Log Message: ----------- [Mod] mod2wave: For BladeEnc based mp3 encoders, only display the bitrate itself instead of an additional "ABR" string. This is less confusing to users and more consistent with the old behaviour. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/StreamEncoder.cpp trunk/OpenMPT/mptrack/StreamEncoder.h trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp trunk/OpenMPT/mptrack/StreamEncoderMP3.h Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-22 14:04:09 UTC (rev 2981) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 09:14:57 UTC (rev 2982) @@ -300,7 +300,7 @@ { for(int bitrate = encTraits->bitrates.size()-1; bitrate >= 0; --bitrate) { - int ndx = m_CbnSampleFormat.AddString(mpt::String::Format("VBR %i kbit", encTraits->bitrates[bitrate]).c_str()); + int ndx = m_CbnSampleFormat.AddString(m_Settings.GetEncoderFactory()->DescribeBitrateVBR(encTraits->bitrates[bitrate]).c_str()); m_CbnSampleFormat.SetItemData(ndx, (Encoder::ModeVBR<<24) | (encTraits->bitrates[bitrate]<<0)); if(m_Settings.EncoderSettings.Mode == Encoder::ModeVBR && static_cast<int>(m_Settings.EncoderSettings.Bitrate) == encTraits->bitrates[bitrate]) { @@ -312,7 +312,7 @@ { for(int bitrate = encTraits->bitrates.size()-1; bitrate >= 0; --bitrate) { - int ndx = m_CbnSampleFormat.AddString(mpt::String::Format("ABR %i kbit", encTraits->bitrates[bitrate]).c_str()); + int ndx = m_CbnSampleFormat.AddString(m_Settings.GetEncoderFactory()->DescribeBitrateABR(encTraits->bitrates[bitrate]).c_str()); m_CbnSampleFormat.SetItemData(ndx, (Encoder::ModeABR<<24) | (encTraits->bitrates[bitrate]<<0)); if(m_Settings.EncoderSettings.Mode == Encoder::ModeABR && static_cast<int>(m_Settings.EncoderSettings.Bitrate) == encTraits->bitrates[bitrate]) { @@ -324,7 +324,7 @@ { for(int bitrate = encTraits->bitrates.size()-1; bitrate >= 0; --bitrate) { - int ndx = m_CbnSampleFormat.AddString(mpt::String::Format("CBR %i kbit", encTraits->bitrates[bitrate]).c_str()); + int ndx = m_CbnSampleFormat.AddString(m_Settings.GetEncoderFactory()->DescribeBitrateCBR(encTraits->bitrates[bitrate]).c_str()); m_CbnSampleFormat.SetItemData(ndx, (Encoder::ModeCBR<<24) | (encTraits->bitrates[bitrate]<<0)); if(m_Settings.EncoderSettings.Mode == Encoder::ModeCBR && static_cast<int>(m_Settings.EncoderSettings.Bitrate) == encTraits->bitrates[bitrate]) { Modified: trunk/OpenMPT/mptrack/StreamEncoder.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoder.cpp 2013-10-22 14:04:09 UTC (rev 2981) +++ trunk/OpenMPT/mptrack/StreamEncoder.cpp 2013-10-23 09:14:57 UTC (rev 2982) @@ -81,3 +81,22 @@ { return mpt::String::Format("VBR %i%%", static_cast<int>(quality * 100.0f)); } + +std::string EncoderFactoryBase::DescribeBitrateVBR(int bitrate) const +//------------------------------------------------------------------- +{ + return mpt::String::Format("VBR %i kbit", bitrate); +} + +std::string EncoderFactoryBase::DescribeBitrateABR(int bitrate) const +//------------------------------------------------------------------- +{ + return mpt::String::Format("ABR %i kbit", bitrate); +} + +std::string EncoderFactoryBase::DescribeBitrateCBR(int bitrate) const +//------------------------------------------------------------------- +{ + return mpt::String::Format("CBR %i kbit", bitrate); +} + Modified: trunk/OpenMPT/mptrack/StreamEncoder.h =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-22 14:04:09 UTC (rev 2981) +++ trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-23 09:14:57 UTC (rev 2982) @@ -197,6 +197,9 @@ return traits; } virtual std::string DescribeQuality(float quality) const; + virtual std::string DescribeBitrateVBR(int bitrate) const; + virtual std::string DescribeBitrateABR(int bitrate) const; + virtual std::string DescribeBitrateCBR(int bitrate) const; virtual bool IsAvailable() const = 0; }; Modified: trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2013-10-22 14:04:09 UTC (rev 2981) +++ trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2013-10-23 09:14:57 UTC (rev 2982) @@ -1299,6 +1299,7 @@ #ifdef MPT_MP3ENCODER_ACM , m_Acm(nullptr) #endif // MPT_MP3ENCODER_ACM + , m_Type(MP3EncoderDefault) { #ifdef MPT_MP3ENCODER_LAME if(type == MP3EncoderDefault || type == MP3EncoderLame) @@ -1306,6 +1307,7 @@ m_Lame = new LameDynBind(); if(*m_Lame) { + m_Type = MP3EncoderLame; SetTraits(m_Lame->BuildTraits()); return; } @@ -1317,6 +1319,7 @@ m_Blade = new BladeDynBind(); if(*m_Blade) { + m_Type = MP3EncoderBlade; SetTraits(m_Blade->BuildTraits()); return; } @@ -1328,6 +1331,7 @@ m_Acm = new AcmDynBind(); if(*m_Acm) { + m_Type = MP3EncoderACM; SetTraits(m_Acm->BuildTraits()); return; } @@ -1388,23 +1392,20 @@ { // nothing #ifdef MPT_MP3ENCODER_LAME - } else if(m_Lame && *m_Lame) + } else if(m_Type == MP3EncoderLame) { result = new MP3LameStreamWriter(*m_Lame, file); #endif // MPT_MP3ENCODER_LAME #ifdef MPT_MP3ENCODER_BLADE - } else if(m_Blade && *m_Blade) + } else if(m_Type == MP3EncoderBlade) { result = new MP3BladeStreamWriter(*m_Blade, file); #endif // MPT_MP3ENCODER_BLADE #ifdef MPT_MP3ENCODER_ACM - } else if(m_Acm && *m_Acm) + } else if(m_Type == MP3EncoderACM) { result = new MP3AcmStreamWriter(*m_Acm, file); #endif // MPT_MP3ENCODER_ACM - } else - { - return nullptr; } return result; } @@ -1413,13 +1414,32 @@ std::string MP3Encoder::DescribeQuality(float quality) const //---------------------------------------------------------- { - int q = static_cast<int>((1.0f - quality) * 10.0f); - if(q < 0) q = 0; - if(q >= 10) +#ifdef MPT_MP3ENCODER_LAME + if(m_Type == MP3EncoderLame) { - return "VBR -V9.999"; - } else + int q = static_cast<int>((1.0f - quality) * 10.0f); + if(q < 0) q = 0; + if(q >= 10) + { + return "VBR -V9.999"; + } else + { + return mpt::String::Format("VBR -V%i", static_cast<int>((1.0f - quality) * 10.0f)); + } + } +#endif // MPT_MP3ENCODER_LAME + return EncoderFactoryBase::DescribeQuality(quality); +} + +std::string MP3Encoder::DescribeBitrateABR(int bitrate) const +//----------------------------------------------------------- +{ +#ifdef MPT_MP3ENCODER_BLADE + if(m_Type == MP3EncoderBlade) { - return mpt::String::Format("VBR -V%i", static_cast<int>((1.0f - quality) * 10.0f)); + return mpt::String::Format("%i kbit", bitrate); } +#endif // MPT_MP3ENCODER_BLADE + return EncoderFactoryBase::DescribeBitrateABR(bitrate); } + Modified: trunk/OpenMPT/mptrack/StreamEncoderMP3.h =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderMP3.h 2013-10-22 14:04:09 UTC (rev 2981) +++ trunk/OpenMPT/mptrack/StreamEncoderMP3.h 2013-10-23 09:14:57 UTC (rev 2982) @@ -51,10 +51,13 @@ AcmDynBind *m_Acm; #endif + MP3EncoderType m_Type; + public: IAudioStreamEncoder *ConstructStreamEncoder(std::ostream &file) const; std::string DescribeQuality(float quality) const; + std::string DescribeBitrateABR(int bitrate) const; bool IsAvailable() const; public: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2013-10-23 18:04:17
|
Revision: 2988 http://sourceforge.net/p/modplug/code/2988 Author: saga-games Date: 2013-10-23 18:04:11 +0000 (Wed, 23 Oct 2013) Log Message: ----------- [Mod] Mod Export: Move encoder information to separate window, since most users won't need this information anyway. Rearrange export dialog while I'm at it, and add a checkbox to disable cue writing (not yet functional) Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/mod2wave.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 17:43:27 UTC (rev 2987) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 18:04:11 UTC (rev 2988) @@ -82,7 +82,8 @@ ON_COMMAND(IDC_CHECK6, OnCheckInstrMode) ON_COMMAND(IDC_RADIO1, UpdateDialog) ON_COMMAND(IDC_RADIO2, UpdateDialog) - ON_COMMAND(IDC_PLAYEROPTIONS, OnPlayerOptions) //rewbs.resamplerConf + ON_COMMAND(IDC_PLAYEROPTIONS, OnPlayerOptions) + ON_COMMAND(IDC_BUTTON1, OnShowEncoderInfo) ON_CBN_SELCHANGE(IDC_COMBO5, OnFileTypeChanged) ON_CBN_SELCHANGE(IDC_COMBO1, OnSamplerateChanged) ON_CBN_SELCHANGE(IDC_COMBO4, OnChannelsChanged) @@ -131,14 +132,12 @@ DDX_Control(pDX, IDC_SPIN4, m_SpinMaxOrder); DDX_Control(pDX, IDC_SPIN5, m_SpinLoopCount); - DDX_Control(pDX, IDC_COMBO3, m_CbnGenre); - DDX_Control(pDX, IDC_EDIT11, m_EditTitle); - DDX_Control(pDX, IDC_EDIT6, m_EditAuthor); - DDX_Control(pDX, IDC_EDIT7, m_EditAlbum); - DDX_Control(pDX, IDC_EDIT8, m_EditURL); - DDX_Control(pDX, IDC_EDIT9, m_EditYear); - - DDX_Control(pDX, IDC_EDIT10, m_EditInfo); + DDX_Control(pDX, IDC_COMBO3, m_CbnGenre); + DDX_Control(pDX, IDC_EDIT11, m_EditTitle); + DDX_Control(pDX, IDC_EDIT6, m_EditAuthor); + DDX_Control(pDX, IDC_EDIT7, m_EditAlbum); + DDX_Control(pDX, IDC_EDIT8, m_EditURL); + DDX_Control(pDX, IDC_EDIT9, m_EditYear); } @@ -148,7 +147,8 @@ CDialog::OnInitDialog(); CheckRadioButton(IDC_RADIO1, IDC_RADIO2, m_bSelectPlay ? IDC_RADIO2 : IDC_RADIO1); - CheckDlgButton(IDC_CHECK5, MF_UNCHECKED); // rewbs.NoNormalize + CheckDlgButton(IDC_CHECK5, MF_UNCHECKED); // Normalize + CheckDlgButton(IDC_CHECK3, MF_CHECKED); // Cue points CheckDlgButton(IDC_CHECK4, MF_UNCHECKED); CheckDlgButton(IDC_CHECK6, MF_UNCHECKED); @@ -173,8 +173,7 @@ FillTags(); - FillInfo(); - + // Plugin quirk options are only available if there are any plugins loaded. GetDlgItem(IDC_GIVEPLUGSIDLETIME)->EnableWindow(FALSE); GetDlgItem(IDC_RENDERSILENCE)->EnableWindow(FALSE); for(PLUGINDEX i = 0; i < MAX_MIXPLUGINS; i++) @@ -217,10 +216,9 @@ } -void CWaveConvert::FillInfo() -//--------------------------- +void CWaveConvert::OnShowEncoderInfo() +//------------------------------------ { - std::string info; info += "Format: "; info += encTraits->fileDescription; @@ -229,7 +227,7 @@ info += encTraits->encoderName; info += "\r\n"; info += mpt::String::Replace(encTraits->description, "\n", "\r\n"); - SetDlgItemText(IDC_EDIT10, info.c_str()); + Reporting::Information(info.c_str(), "Encoder Information"); } @@ -383,7 +381,6 @@ FillChannels(); FillFormats(); FillTags(); - FillInfo(); } Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2013-10-23 17:43:27 UTC (rev 2987) +++ trunk/OpenMPT/mptrack/mod2wave.h 2013-10-23 18:04:11 UTC (rev 2988) @@ -57,10 +57,8 @@ CEdit m_EditTitle, m_EditAuthor, m_EditURL, m_EditAlbum, m_EditYear; CComboBox m_CbnGenre; - CEdit m_EditInfo; - private: - void FillInfo(); + void OnShowEncoderInfo(); void FillFileTypes(); void FillSamplerates(); void FillChannels(); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-10-23 17:43:27 UTC (rev 2987) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-10-23 18:04:11 UTC (rev 2988) @@ -449,60 +449,61 @@ PUSHBUTTON "Default Settings",IDC_BUTTON_DEFAULT_RESAMPLING,186,180,66,12 END -IDD_WAVECONVERT DIALOGEX 0, 0, 388, 257 +IDD_WAVECONVERT DIALOGEX 0, 0, 388, 239 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Export" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - DEFPUSHBUTTON "OK",IDOK,270,240,50,14 - PUSHBUTTON "Cancel",IDCANCEL,330,240,50,14 - GROUPBOX "Format",IDC_STATIC,6,6,186,48 - COMBOBOX IDC_COMBO5,12,18,66,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO1,84,18,54,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO4,144,18,42,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO2,12,36,174,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Render",IDC_STATIC,6,60,186,72 - PUSHBUTTON "Player &Options",IDC_PLAYEROPTIONS,12,72,60,14,BS_CENTER - CONTROL "&Channel mode (one file per channel)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,90,168,12 + DEFPUSHBUTTON "OK",IDOK,270,216,50,14 + PUSHBUTTON "Cancel",IDCANCEL,330,216,50,14 + GROUPBOX "Format",IDC_STATIC,6,6,186,66 + COMBOBOX IDC_COMBO5,12,18,90,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO1,12,36,90,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO4,108,36,78,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO2,12,54,174,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Render",IDC_STATIC,6,78,186,84 + PUSHBUTTON "Player &Options",IDC_PLAYEROPTIONS,12,90,60,14,BS_CENTER + CONTROL "&Channel mode (one file per channel)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,108,174,12 CONTROL "&Instrument mode (one file per instrument)",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,102,168,12 - CONTROL "&Normalize Output",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,114,168,12 - GROUPBOX "Limit",IDC_STATIC,6,138,186,96 - CONTROL "Limit file &size to: (KBytes)",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,151,111,11 - EDITTEXT IDC_EDIT1,132,151,50,12,ES_AUTOHSCROLL - CONTROL "Limit song &length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,170,111,10 - EDITTEXT IDC_EDIT2,132,170,50,12,ES_AUTOHSCROLL - LTEXT "Play:",IDC_STATIC,12,186,37,8 - CONTROL "&Entire song",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | BS_VCENTER,12,199,54,12 - EDITTEXT IDC_EDIT5,72,199,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN5,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,96,199,11,11 - LTEXT "times",IDC_STATIC,115,199,65,12,SS_CENTERIMAGE - CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | BS_VCENTER,12,216,58,12 - EDITTEXT IDC_EDIT3,72,216,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,96,216,11,11 - CTEXT "to",IDC_STATIC,114,150,8,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT4,126,216,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,150,216,11,11 - GROUPBOX "Plugin Quirks",IDC_STATIC,198,6,186,42 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,120,174,12 + CONTROL "&Normalize Output",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,132,174,12 + GROUPBOX "Limit",IDC_STATIC,198,6,186,84 + CONTROL "Limit file &size to: (KBytes)",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,19,114,11 + EDITTEXT IDC_EDIT1,324,18,50,12,ES_AUTOHSCROLL + CONTROL "Limit song &length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,37,114,10 + EDITTEXT IDC_EDIT2,324,36,50,12,ES_AUTOHSCROLL + CONTROL "Play &entire song",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,204,54,72,12 + CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,204,73,72,12 + EDITTEXT IDC_EDIT5,276,54,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN5,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,300,60,11,11 + LTEXT "times",IDC_STATIC,319,55,59,12,SS_CENTERIMAGE + EDITTEXT IDC_EDIT3,276,73,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,300,78,11,11 + CTEXT "to",IDC_STATIC,318,73,8,12,SS_CENTERIMAGE + EDITTEXT IDC_EDIT4,330,73,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,354,78,11,11 + GROUPBOX "Plugin Quirks",IDC_STATIC,6,168,186,42 CONTROL "Slow &render (for Kontakt+DFD)",IDC_GIVEPLUGSIDLETIME, - "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,204,18,174,12 + "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,180,174,12 CONTROL "Clear plugin &buffers before exporting",IDC_RENDERSILENCE, - "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,204,30,174,12 - EDITTEXT IDC_EDIT10,198,174,186,60,ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP - GROUPBOX "Tags",IDC_STATIC,198,54,186,114 - CONTROL "Incl&ude Song Information",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,66,174,10 - LTEXT "Title:",IDC_STATIC,204,80,17,8 - EDITTEXT IDC_EDIT11,240,78,138,12,ES_AUTOHSCROLL - LTEXT "Author:",IDC_STATIC,204,98,30,8 - EDITTEXT IDC_EDIT6,240,96,138,12,ES_AUTOHSCROLL - LTEXT "Album:",IDC_STATIC,204,116,30,8 - EDITTEXT IDC_EDIT7,240,114,138,12,ES_AUTOHSCROLL - LTEXT "URL:",IDC_STATIC,204,134,30,8 - EDITTEXT IDC_EDIT8,240,132,138,12,ES_AUTOHSCROLL - LTEXT "Genre:",IDC_STATIC,204,152,29,8 - COMBOBOX IDC_COMBO3,240,150,78,64,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "Year:",IDC_STATIC,324,152,18,8 - EDITTEXT IDC_EDIT9,348,150,30,12,ES_AUTOHSCROLL | ES_NUMBER + "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,192,174,12 + GROUPBOX "Tags",IDC_STATIC,198,96,186,114 + CONTROL "Incl&ude Song Information",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,108,174,10 + LTEXT "Title:",IDC_STATIC,204,122,17,8 + EDITTEXT IDC_EDIT11,240,120,138,12,ES_AUTOHSCROLL + LTEXT "Author:",IDC_STATIC,204,140,30,8 + EDITTEXT IDC_EDIT6,240,138,138,12,ES_AUTOHSCROLL + LTEXT "Album:",IDC_STATIC,204,158,30,8 + EDITTEXT IDC_EDIT7,240,156,138,12,ES_AUTOHSCROLL + LTEXT "URL:",IDC_STATIC,204,176,30,8 + EDITTEXT IDC_EDIT8,240,174,138,12,ES_AUTOHSCROLL + LTEXT "Genre:",IDC_STATIC,204,194,29,8 + COMBOBOX IDC_COMBO3,240,192,78,64,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "Year:",IDC_STATIC,324,194,18,8 + EDITTEXT IDC_EDIT9,348,192,30,12,ES_AUTOHSCROLL | ES_NUMBER + PUSHBUTTON "Encoder Information",IDC_BUTTON1,108,18,78,12 + CONTROL "&Write cue points on pattern transitions",IDC_CHECK3, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,144,174,12 END IDD_PROGRESS DIALOG 0, 0, 186, 55 @@ -1609,7 +1610,7 @@ IDD_WAVECONVERT, DIALOG BEGIN RIGHTMARGIN, 337 - BOTTOMMARGIN, 254 + BOTTOMMARGIN, 236 END IDD_OPTIONS_KEYBOARD, DIALOG This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-10-23 18:17:54
|
Revision: 2989 http://sourceforge.net/p/modplug/code/2989 Author: manxorist Date: 2013-10-23 18:17:45 +0000 (Wed, 23 Oct 2013) Log Message: ----------- [Imp] Mod Export: Make checkbox to disable cue writing work. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/StreamEncoder.h trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 18:04:11 UTC (rev 2988) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 18:17:45 UTC (rev 2989) @@ -194,6 +194,9 @@ void CWaveConvert::FillTags() //--------------------------- { + CheckDlgButton(IDC_CHECK3, encTraits->canCues?m_Settings.EncoderSettings.Cues?TRUE:FALSE:FALSE); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK3), encTraits->canCues?TRUE:FALSE); + const bool canTags = encTraits->canTags; CheckDlgButton(IDC_CHECK7, canTags?m_Settings.EncoderSettings.Tags?TRUE:FALSE:FALSE); @@ -617,7 +620,7 @@ , SampleRate(44100) , Channels(2) , FinalSampleFormat(SampleFormatInt16) - , EncoderSettings(true, Encoder::ModeCBR, 256, 0.8f, -1) + , EncoderSettings(true, true, Encoder::ModeCBR, 256, 0.8f, -1) , Normalize(false) , SilencePlugBuffers(false) { @@ -979,13 +982,16 @@ if(m_pSndFile->m_PatternCuePoints.size() > 0) { - std::vector<PatternCuePoint>::const_iterator iter; - std::vector<uint64> cues; - for(iter = m_pSndFile->m_PatternCuePoints.begin(); iter != m_pSndFile->m_PatternCuePoints.end(); iter++) + if(m_Settings.EncoderSettings.Cues) { - cues.push_back(static_cast<uint32>(iter->offset)); + std::vector<PatternCuePoint>::const_iterator iter; + std::vector<uint64> cues; + for(iter = m_pSndFile->m_PatternCuePoints.begin(); iter != m_pSndFile->m_PatternCuePoints.end(); iter++) + { + cues.push_back(static_cast<uint32>(iter->offset)); + } + fileEnc->WriteCues(cues); } - fileEnc->WriteCues(cues); m_pSndFile->m_PatternCuePoints.clear(); } Modified: trunk/OpenMPT/mptrack/StreamEncoder.h =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-23 18:04:11 UTC (rev 2988) +++ trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-23 18:17:45 UTC (rev 2989) @@ -87,6 +87,8 @@ bool canTags; std::vector<std::string> genres; + bool canCues; + int maxChannels; std::vector<uint32> samplerates; @@ -101,6 +103,7 @@ Traits() : canTags(false) + , canCues(false) , maxChannels(0) , modes(Encoder::ModeInvalid) , defaultMode(Encoder::ModeInvalid) @@ -116,14 +119,16 @@ struct Settings { + bool Cues; bool Tags; Encoder::Mode Mode; int Bitrate; float Quality; int Format; - Settings(bool tags, Encoder::Mode mode, int bitrate, float quality, int format) - : Tags(tags) + Settings(bool cues, bool tags, Encoder::Mode mode, int bitrate, float quality, int format) + : Cues(cues) + , Tags(tags) , Mode(mode) , Bitrate(bitrate) , Quality(quality) Modified: trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp 2013-10-23 18:04:11 UTC (rev 2988) +++ trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp 2013-10-23 18:17:45 UTC (rev 2989) @@ -170,6 +170,7 @@ traits.encoderName = "OpenMPT"; traits.description = "Microsoft RIFF WAVE"; traits.canTags = true; + traits.canCues = true; traits.maxChannels = 4; traits.samplerates = TrackerSettings::Instance().GetSampleRates(); traits.modes = Encoder::ModeEnumerated; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-10-24 07:12:21
|
Revision: 2994 http://sourceforge.net/p/modplug/code/2994 Author: manxorist Date: 2013-10-24 07:12:10 +0000 (Thu, 24 Oct 2013) Log Message: ----------- [Mod] Mod Export: Fill genre list if, and only if, a fixed list is required for the currently selected output format. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/StreamEncoder.h trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 18:41:04 UTC (rev 2993) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-24 07:12:10 UTC (rev 2994) @@ -194,11 +194,15 @@ void CWaveConvert::FillTags() //--------------------------- { + + const bool canTags = encTraits->canTags; + + DWORD dwFormat = m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel()); + Encoder::Mode mode = (Encoder::Mode)((dwFormat >> 24) & 0xff); + CheckDlgButton(IDC_CHECK3, encTraits->canCues?m_Settings.EncoderSettings.Cues?TRUE:FALSE:FALSE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK3), encTraits->canCues?TRUE:FALSE); - const bool canTags = encTraits->canTags; - CheckDlgButton(IDC_CHECK7, canTags?m_Settings.EncoderSettings.Tags?TRUE:FALSE:FALSE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK7), canTags?TRUE:FALSE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_COMBO3), canTags?TRUE:FALSE); @@ -209,7 +213,7 @@ ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT9), canTags?TRUE:FALSE); m_CbnGenre.ResetContent(); - if(!encTraits->genres.empty()) + if((encTraits->modesWithFixedGenres & mode) && !encTraits->genres.empty()) { for(std::vector<std::string>::const_iterator genre = encTraits->genres.begin(); genre != encTraits->genres.end(); ++genre) { @@ -407,6 +411,7 @@ //---------------------------------- { //DWORD dwFormat = m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel()); + FillTags(); } Modified: trunk/OpenMPT/mptrack/StreamEncoder.h =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-23 18:41:04 UTC (rev 2993) +++ trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-24 07:12:10 UTC (rev 2994) @@ -86,6 +86,7 @@ bool canTags; std::vector<std::string> genres; + int modesWithFixedGenres; bool canCues; @@ -102,8 +103,9 @@ int defaultFormat; Traits() - : canTags(false) - , canCues(false) + : canCues(false) + , canTags(false) + , modesWithFixedGenres(0) , maxChannels(0) , modes(Encoder::ModeInvalid) , defaultMode(Encoder::ModeInvalid) Modified: trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2013-10-23 18:41:04 UTC (rev 2993) +++ trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2013-10-24 07:12:10 UTC (rev 2994) @@ -435,6 +435,9 @@ traits.canTags = true; traits.genres.clear(); id3tag_genre_list(&GenreEnumCallback, &traits); +#ifdef MPT_FORCE_ID3V1_TAGS_IN_CBR_MODE + traits.modesWithFixedGenres = Encoder::ModeCBR; +#endif traits.maxChannels = 2; traits.samplerates = std::vector<uint32>(layer3_samplerates, layer3_samplerates + CountOf(layer3_samplerates)); traits.modes = Encoder::ModeCBR | Encoder::ModeQuality; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-10-24 07:34:28
|
Revision: 2995 http://sourceforge.net/p/modplug/code/2995 Author: manxorist Date: 2013-10-24 07:34:19 +0000 (Thu, 24 Oct 2013) Log Message: ----------- [Mod] Mod Export: Replace genre combobox with an edit control if no fixed list is required. Make the combobox text non-editable if a fixed list is required. This is more intuitive for the user. [Fix] Mod Export: Fix tab order. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/mod2wave.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-24 07:12:10 UTC (rev 2994) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-24 07:34:19 UTC (rev 2995) @@ -133,6 +133,7 @@ DDX_Control(pDX, IDC_SPIN5, m_SpinLoopCount); DDX_Control(pDX, IDC_COMBO3, m_CbnGenre); + DDX_Control(pDX, IDC_EDIT10, m_EditGenre); DDX_Control(pDX, IDC_EDIT11, m_EditTitle); DDX_Control(pDX, IDC_EDIT6, m_EditAuthor); DDX_Control(pDX, IDC_EDIT7, m_EditAlbum); @@ -212,14 +213,25 @@ ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT8), canTags?TRUE:FALSE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT9), canTags?TRUE:FALSE); - m_CbnGenre.ResetContent(); if((encTraits->modesWithFixedGenres & mode) && !encTraits->genres.empty()) { + m_EditGenre.ShowWindow(SW_HIDE); + m_CbnGenre.ShowWindow(SW_SHOW); + m_EditGenre.Clear(); + m_CbnGenre.ResetContent(); + m_CbnGenre.AddString(""); for(std::vector<std::string>::const_iterator genre = encTraits->genres.begin(); genre != encTraits->genres.end(); ++genre) { m_CbnGenre.AddString((*genre).c_str()); } + } else + { + m_CbnGenre.ShowWindow(SW_HIDE); + m_EditGenre.ShowWindow(SW_SHOW); + m_CbnGenre.ResetContent(); + m_EditGenre.Clear(); } + } @@ -566,8 +578,15 @@ m_EditURL.GetWindowText(tmp); m_Settings.Tags.url = mpt::String::Decode(tmp.GetString(), mpt::CharsetLocale); - m_CbnGenre.GetWindowText(tmp); - m_Settings.Tags.genre = mpt::String::Decode(tmp.GetString(), mpt::CharsetLocale); + if((encTraits->modesWithFixedGenres & m_Settings.EncoderSettings.Mode) && !encTraits->genres.empty()) + { + m_CbnGenre.GetWindowText(tmp); + m_Settings.Tags.genre = mpt::String::Decode(tmp.GetString(), mpt::CharsetLocale); + } else + { + m_EditGenre.GetWindowText(tmp); + m_Settings.Tags.genre = mpt::String::Decode(tmp.GetString(), mpt::CharsetLocale); + } m_EditYear.GetWindowText(tmp); m_Settings.Tags.year = mpt::String::Decode(tmp.GetString(), mpt::CharsetLocale); Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2013-10-24 07:12:10 UTC (rev 2994) +++ trunk/OpenMPT/mptrack/mod2wave.h 2013-10-24 07:34:19 UTC (rev 2995) @@ -56,6 +56,7 @@ CEdit m_EditTitle, m_EditAuthor, m_EditURL, m_EditAlbum, m_EditYear; CComboBox m_CbnGenre; + CEdit m_EditGenre; private: void OnShowEncoderInfo(); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-10-24 07:12:10 UTC (rev 2994) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-10-24 07:34:19 UTC (rev 2995) @@ -458,6 +458,7 @@ PUSHBUTTON "Cancel",IDCANCEL,330,216,50,14 GROUPBOX "Format",IDC_STATIC,6,6,186,66 COMBOBOX IDC_COMBO5,12,18,90,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Encoder Information",IDC_BUTTON1,108,18,78,12 COMBOBOX IDC_COMBO1,12,36,90,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO4,108,36,78,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO2,12,54,174,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -467,26 +468,28 @@ CONTROL "&Instrument mode (one file per instrument)",IDC_CHECK6, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,120,174,12 CONTROL "&Normalize Output",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,132,174,12 + CONTROL "&Write cue points on pattern transitions",IDC_CHECK3, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,144,174,12 + GROUPBOX "Plugin Quirks",IDC_STATIC,6,168,186,42 + CONTROL "Slow &render (for Kontakt+DFD)",IDC_GIVEPLUGSIDLETIME, + "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,180,174,12 + CONTROL "Clear plugin &buffers before exporting",IDC_RENDERSILENCE, + "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,192,174,12 GROUPBOX "Limit",IDC_STATIC,198,6,186,84 CONTROL "Limit file &size to: (KBytes)",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,19,114,11 EDITTEXT IDC_EDIT1,324,18,50,12,ES_AUTOHSCROLL CONTROL "Limit song &length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,37,114,10 EDITTEXT IDC_EDIT2,324,36,50,12,ES_AUTOHSCROLL CONTROL "Play &entire song",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,204,54,72,12 - CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,204,73,72,12 EDITTEXT IDC_EDIT5,276,54,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN5,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,300,60,11,11 LTEXT "times",IDC_STATIC,319,55,59,12,SS_CENTERIMAGE + CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,204,73,72,12 EDITTEXT IDC_EDIT3,276,73,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,300,78,11,11 CTEXT "to",IDC_STATIC,318,73,8,12,SS_CENTERIMAGE EDITTEXT IDC_EDIT4,330,73,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,354,78,11,11 - GROUPBOX "Plugin Quirks",IDC_STATIC,6,168,186,42 - CONTROL "Slow &render (for Kontakt+DFD)",IDC_GIVEPLUGSIDLETIME, - "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,180,174,12 - CONTROL "Clear plugin &buffers before exporting",IDC_RENDERSILENCE, - "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,192,174,12 GROUPBOX "Tags",IDC_STATIC,198,96,186,114 CONTROL "Incl&ude Song Information",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,108,174,10 LTEXT "Title:",IDC_STATIC,204,122,17,8 @@ -498,12 +501,10 @@ LTEXT "URL:",IDC_STATIC,204,176,30,8 EDITTEXT IDC_EDIT8,240,174,138,12,ES_AUTOHSCROLL LTEXT "Genre:",IDC_STATIC,204,194,29,8 - COMBOBOX IDC_COMBO3,240,192,78,64,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_EDIT10,240,192,78,12,ES_AUTOHSCROLL + COMBOBOX IDC_COMBO3,240,192,78,64,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP RTEXT "Year:",IDC_STATIC,324,194,18,8 EDITTEXT IDC_EDIT9,348,192,30,12,ES_AUTOHSCROLL | ES_NUMBER - PUSHBUTTON "Encoder Information",IDC_BUTTON1,108,18,78,12 - CONTROL "&Write cue points on pattern transitions",IDC_CHECK3, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,144,174,12 END IDD_PROGRESS DIALOG 0, 0, 186, 55 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <man...@us...> - 2013-10-24 07:55:44
|
Revision: 2997 http://sourceforge.net/p/modplug/code/2997 Author: manxorist Date: 2013-10-24 07:55:34 +0000 (Thu, 24 Oct 2013) Log Message: ----------- [Ref] Mod Export: Store samplerate and channels in struct EncoderSettings (in preparation for remembering export settings per codec). Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/StreamEncoder.h trunk/OpenMPT/mptrack/StreamEncoderFLAC.cpp trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp trunk/OpenMPT/mptrack/mod2wave.h Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-24 07:55:34 UTC (rev 2997) @@ -275,7 +275,7 @@ uint32 samplerate = *it; int ndx = m_CbnSampleRate.AddString(mpt::String::Format("%d Hz", samplerate).c_str()); m_CbnSampleRate.SetItemData(ndx, samplerate); - if(samplerate == m_Settings.SampleRate) + if(samplerate == m_Settings.EncoderSettings.Samplerate) { sel = ndx; } @@ -297,7 +297,7 @@ } int ndx = m_CbnChannels.AddString(gszChnCfgNames[(channels+2)/2-1]); m_CbnChannels.SetItemData(ndx, channels); - if(channels == m_Settings.Channels) + if(channels == m_Settings.EncoderSettings.Channels) { sel = ndx; } @@ -524,8 +524,8 @@ m_bChannelMode = IsDlgButtonChecked(IDC_CHECK4) != BST_UNCHECKED; m_bInstrumentMode= IsDlgButtonChecked(IDC_CHECK6) != BST_UNCHECKED; - m_Settings.SampleRate = m_CbnSampleRate.GetItemData(m_CbnSampleRate.GetCurSel()); - m_Settings.Channels = (uint16)m_CbnChannels.GetItemData(m_CbnChannels.GetCurSel()); + m_Settings.EncoderSettings.Samplerate = m_CbnSampleRate.GetItemData(m_CbnSampleRate.GetCurSel()); + m_Settings.EncoderSettings.Channels = (uint16)m_CbnChannels.GetItemData(m_CbnChannels.GetCurSel()); DWORD dwFormat = m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel()); if(encTraits->modes & Encoder::ModeEnumerated) @@ -643,10 +643,8 @@ //-------------------------------------------------------------------------------------------------------------------------- : EncoderFactories(encFactories) , EncoderIndex(defaultEncoder) - , SampleRate(44100) - , Channels(2) , FinalSampleFormat(SampleFormatInt16) - , EncoderSettings(true, true, Encoder::ModeCBR, 256, 0.8f, -1) + , EncoderSettings(true, true, 44100, 2, Encoder::ModeCBR, 256, 0.8f, -1) , Normalize(false) , SilencePlugBuffers(false) { @@ -709,6 +707,9 @@ return; } + const uint32 samplerate = m_Settings.EncoderSettings.Samplerate; + const uint16 channels = m_Settings.EncoderSettings.Channels; + ASSERT(m_Settings.GetEncoderFactory() && m_Settings.GetEncoderFactory()->IsAvailable()); IAudioStreamEncoder *fileEnc = m_Settings.GetEncoderFactory()->ConstructStreamEncoder(fileStream); @@ -722,7 +723,7 @@ // Render up to 20 seconds per plugin for(int j = 0; j < 20; j++) { - const float maxVal = m_pSndFile->m_MixPlugins[i].pMixPlugin->RenderSilence(m_Settings.SampleRate); + const float maxVal = m_pSndFile->m_MixPlugins[i].pMixPlugin->RenderSilence(samplerate); if(maxVal <= FLT_EPSILON) { break; @@ -735,8 +736,8 @@ MixerSettings oldmixersettings = m_pSndFile->m_MixerSettings; MixerSettings mixersettings = TrackerSettings::Instance().m_MixerSettings; mixersettings.m_nMaxMixChannels = MAX_CHANNELS; // always use max mixing channels when rendering - mixersettings.gdwMixingFreq = m_Settings.SampleRate; - mixersettings.gnChannels = m_Settings.Channels; + mixersettings.gdwMixingFreq = samplerate; + mixersettings.gnChannels = channels; m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); if(m_Settings.Normalize) { @@ -754,7 +755,7 @@ if ((!m_dwFileLimit) || (m_dwFileLimit > 2047*1024)) m_dwFileLimit = 2047*1024; // 2GB m_dwFileLimit <<= 10; - fileEnc->SetFormat(m_Settings.SampleRate, m_Settings.Channels, m_Settings.EncoderSettings); + fileEnc->SetFormat(m_Settings.EncoderSettings); if(m_Settings.EncoderSettings.Tags) { // Tags must be written before audio data, @@ -763,16 +764,16 @@ fileEnc->WriteMetatags(m_Settings.Tags); } - ullMaxSamples = m_dwFileLimit / (m_Settings.Channels * ((m_Settings.FinalSampleFormat.GetBitsPerSample()+7) / 8)); + ullMaxSamples = m_dwFileLimit / (channels * ((m_Settings.FinalSampleFormat.GetBitsPerSample()+7) / 8)); if (m_dwSongLimit) { - uint64 l = (uint64)m_dwSongLimit * m_Settings.SampleRate; + uint64 l = (uint64)m_dwSongLimit * samplerate; if (l < ullMaxSamples) ullMaxSamples = l; } // calculate maximum samples uint64 max = ullMaxSamples; - uint64 l = static_cast<uint64>(m_pSndFile->GetSongTime() + 0.5) * m_Settings.SampleRate * std::max<uint64>(1, 1 + m_pSndFile->GetRepeatCount()); + uint64 l = static_cast<uint64>(m_pSndFile->GetSongTime() + 0.5) * samplerate * std::max<uint64>(1, 1 + m_pSndFile->GetRepeatCount()); if (m_nMaxPatterns > 0) { ORDERINDEX dwOrds = m_pSndFile->Order.GetLengthFirstEmpty(); @@ -943,7 +944,7 @@ while(framesToProcess) { const std::size_t framesChunk = std::min<std::size_t>(mpt::saturate_cast<std::size_t>(framesToProcess), MIXBUFFERSIZE); - const std::size_t samplesChunk = framesChunk * m_Settings.Channels; + const std::size_t samplesChunk = framesChunk * channels; normalizeFile.read(reinterpret_cast<char*>(floatbuffer), samplesChunk * sizeof(float)); if(normalizeFile.gcount() != samplesChunk * sizeof(float)) @@ -963,13 +964,13 @@ // Convert float buffer to mixbuffer format so we can apply dither. // This can probably be changed in the future when dither supports floating point input directly. FloatToMonoMix(floatbuffer, mixbuffer, samplesChunk, MIXING_SCALEF); - dither.Process(mixbuffer, framesChunk, m_Settings.Channels, m_Settings.FinalSampleFormat.GetBitsPerSample()); + dither.Process(mixbuffer, framesChunk, channels, m_Settings.FinalSampleFormat.GetBitsPerSample()); switch(m_Settings.FinalSampleFormat.value) { - case SampleFormatUnsigned8: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<uint8*>(buffer), mixbuffer, m_Settings.Channels, framesChunk); break; - case SampleFormatInt16: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<int16*>(buffer), mixbuffer, m_Settings.Channels, framesChunk); break; - case SampleFormatInt24: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<int24*>(buffer), mixbuffer, m_Settings.Channels, framesChunk); break; - case SampleFormatInt32: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<int32*>(buffer), mixbuffer, m_Settings.Channels, framesChunk); break; + case SampleFormatUnsigned8: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<uint8*>(buffer), mixbuffer, channels, framesChunk); break; + case SampleFormatInt16: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<int16*>(buffer), mixbuffer, channels, framesChunk); break; + case SampleFormatInt24: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<int24*>(buffer), mixbuffer, channels, framesChunk); break; + case SampleFormatInt32: ConvertInterleavedFixedPointToInterleaved<MIXING_FRACTIONAL_BITS>(reinterpret_cast<int32*>(buffer), mixbuffer, channels, framesChunk); break; default: ASSERT(false); break; } fileEnc->WriteInterleavedConverted(framesChunk, buffer); Modified: trunk/OpenMPT/mptrack/StreamEncoder.h =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/StreamEncoder.h 2013-10-24 07:55:34 UTC (rev 2997) @@ -97,6 +97,9 @@ std::vector<int> bitrates; std::vector<Encoder::Format> formats; + uint32 defaultSamplerate; + uint16 defaultChannels; + Encoder::Mode defaultMode; int defaultBitrate; float defaultQuality; @@ -108,6 +111,8 @@ , modesWithFixedGenres(0) , maxChannels(0) , modes(Encoder::ModeInvalid) + , defaultSamplerate(44100) + , defaultChannels(2) , defaultMode(Encoder::ModeInvalid) , defaultBitrate(0) , defaultQuality(0.0f) @@ -123,14 +128,20 @@ bool Cues; bool Tags; + + uint32 Samplerate; + uint16 Channels; + Encoder::Mode Mode; int Bitrate; float Quality; int Format; - Settings(bool cues, bool tags, Encoder::Mode mode, int bitrate, float quality, int format) + Settings(bool cues, bool tags, uint32 samplerate, uint16 channels, Encoder::Mode mode, int bitrate, float quality, int format) : Cues(cues) , Tags(tags) + , Samplerate(samplerate) + , Channels(channels) , Mode(mode) , Bitrate(bitrate) , Quality(quality) @@ -154,7 +165,7 @@ virtual ~IAudioStreamEncoder() { } public: // Call the following functions exactly in this order. - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) = 0; + virtual void SetFormat(const Encoder::Settings &settings) = 0; virtual void WriteMetatags(const FileTags &tags) = 0; // optional virtual void WriteInterleaved(size_t count, const float *interleaved) = 0; virtual void WriteInterleavedConverted(size_t frameCount, const char *data) = 0; @@ -176,7 +187,7 @@ StreamWriterBase(std::ostream &stream); virtual ~StreamWriterBase(); public: - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) = 0; + virtual void SetFormat(const Encoder::Settings &settings) = 0; virtual void WriteMetatags(const FileTags &tags); virtual void WriteInterleaved(size_t count, const float *interleaved) = 0; virtual void WriteInterleavedConverted(size_t frameCount, const char *data); Modified: trunk/OpenMPT/mptrack/StreamEncoderFLAC.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderFLAC.cpp 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/StreamEncoderFLAC.cpp 2013-10-24 07:55:34 UTC (rev 2997) @@ -136,11 +136,8 @@ FinishStream(); ASSERT(!inited && !started); } - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) + virtual void SetFormat(const Encoder::Settings &settings) { - MPT_UNREFERENCED_PARAMETER(samplerate); - MPT_UNREFERENCED_PARAMETER(channels); - FinishStream(); ASSERT(!inited && !started); @@ -291,6 +288,8 @@ } } } + traits.defaultSamplerate = 44100; + traits.defaultChannels = 2; traits.defaultMode = Encoder::ModeEnumerated; traits.defaultFormat = 0; SetTraits(traits); Modified: trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/StreamEncoderMP3.cpp 2013-10-24 07:55:34 UTC (rev 2997) @@ -442,6 +442,8 @@ traits.samplerates = std::vector<uint32>(layer3_samplerates, layer3_samplerates + CountOf(layer3_samplerates)); traits.modes = Encoder::ModeCBR | Encoder::ModeQuality; traits.bitrates = std::vector<int>(layer3_bitrates, layer3_bitrates + CountOf(layer3_bitrates)); + traits.defaultSamplerate = 44100; + traits.defaultChannels = 2; traits.defaultMode = Encoder::ModeQuality; traits.defaultBitrate = 256; traits.defaultQuality = 0.8f; @@ -469,13 +471,16 @@ { Finalize(); } - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) + virtual void SetFormat(const Encoder::Settings &settings) { if(!gfp) { gfp = lame.lame_init(); } + uint32 samplerate = settings.Samplerate; + uint16 channels = settings.Channels; + lame.lame_set_in_samplerate(gfp, samplerate); lame.lame_set_num_channels(gfp, channels); @@ -719,6 +724,8 @@ traits.samplerates = std::vector<uint32>(mpeg1layer3_samplerates, mpeg1layer3_samplerates + CountOf(mpeg1layer3_samplerates));; traits.modes = Encoder::ModeABR; traits.bitrates = std::vector<int>(mpeg1layer3_bitrates, mpeg1layer3_bitrates + CountOf(mpeg1layer3_bitrates)); + traits.defaultSamplerate = 44100; + traits.defaultChannels = 2; traits.defaultMode = Encoder::ModeABR; traits.defaultBitrate = 256; return traits; @@ -752,8 +759,11 @@ { Finalize(); } - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) + virtual void SetFormat(const Encoder::Settings &settings) { + uint32 samplerate = settings.Samplerate; + uint16 channels = settings.Channels; + if(samplerate <= 32000) { samplerate = 32000; @@ -1087,6 +1097,8 @@ } traits.modes = Encoder::ModeEnumerated; traits.formats = formats; + traits.defaultSamplerate = 44100; + traits.defaultChannels = 2; traits.defaultMode = Encoder::ModeEnumerated; traits.defaultFormat = 0; traits.defaultBitrate = 256; @@ -1123,10 +1135,14 @@ { Finalize(); } - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) + virtual void SetFormat(const Encoder::Settings &settings) { - const int format = Clamp(settings.Format, 0, (int)acm.formats.size()); + uint32 samplerate = settings.Samplerate; + uint16 channels = settings.Channels; + int format = settings.Format; + format = Clamp(format, 0, (int)acm.formats.size()); + if(acmDriverOpen(&acmDriver, acm.formats_driverids[format], 0) != MMSYSERR_NOERROR) { return; Modified: trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/StreamEncoderOpus.cpp 2013-10-24 07:55:34 UTC (rev 2997) @@ -169,6 +169,8 @@ traits.samplerates = std::vector<uint32>(opus_samplerates, opus_samplerates + CountOf(opus_samplerates)); traits.modes = Encoder::ModeCBR | Encoder::ModeVBR; traits.bitrates = std::vector<int>(opus_bitrates, opus_bitrates + CountOf(opus_bitrates)); + traits.defaultSamplerate = 48000; + traits.defaultChannels = 2; traits.defaultMode = Encoder::ModeVBR; traits.defaultBitrate = 128; return traits; @@ -349,13 +351,16 @@ FinishStream(); ASSERT(!inited && !started); } - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) + virtual void SetFormat(const Encoder::Settings &settings) { FinishStream(); ASSERT(!inited && !started); + uint32 samplerate = settings.Samplerate; + uint16 channels = settings.Channels; + opus_bitrate = settings.Bitrate * 1000; opus_samplerate = samplerate; opus_channels = channels; Modified: trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/StreamEncoderVorbis.cpp 2013-10-24 07:55:34 UTC (rev 2997) @@ -197,6 +197,8 @@ traits.samplerates = std::vector<uint32>(vorbis_samplerates, vorbis_samplerates + CountOf(vorbis_samplerates)); traits.modes = Encoder::ModeVBR | Encoder::ModeQuality; traits.bitrates = std::vector<int>(vorbis_bitrates, vorbis_bitrates + CountOf(vorbis_bitrates)); + traits.defaultSamplerate = 48000; + traits.defaultChannels = 2; traits.defaultMode = Encoder::ModeQuality; traits.defaultBitrate = 160; traits.defaultQuality = 0.5; @@ -309,13 +311,16 @@ FinishStream(); ASSERT(!inited && !started); } - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) + virtual void SetFormat(const Encoder::Settings &settings) { FinishStream(); ASSERT(!inited && !started); + uint32 samplerate = settings.Samplerate; + uint16 channels = settings.Channels; + vorbis_channels = channels; vorbis_tags = settings.Tags; Modified: trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp =================================================================== --- trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/StreamEncoderWAV.cpp 2013-10-24 07:55:34 UTC (rev 2997) @@ -74,10 +74,8 @@ FinishStream(); ASSERT(!inited && !started); } - virtual void SetFormat(int samplerate, int channels, const Encoder::Settings &settings) + virtual void SetFormat(const Encoder::Settings &settings) { - MPT_UNREFERENCED_PARAMETER(samplerate); - MPT_UNREFERENCED_PARAMETER(channels); FinishStream(); @@ -198,6 +196,8 @@ } } } + traits.defaultSamplerate = 44100; + traits.defaultChannels = 2; traits.defaultMode = Encoder::ModeEnumerated; traits.defaultFormat = 0; SetTraits(traits); Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2013-10-24 07:35:14 UTC (rev 2996) +++ trunk/OpenMPT/mptrack/mod2wave.h 2013-10-24 07:55:34 UTC (rev 2997) @@ -20,11 +20,11 @@ { std::vector<EncoderFactoryBase*> EncoderFactories; std::size_t EncoderIndex; - uint32 SampleRate; - uint16 Channels; + SampleFormat FinalSampleFormat; Encoder::Settings EncoderSettings; FileTags Tags; + bool Normalize; bool SilencePlugBuffers; @@ -92,7 +92,7 @@ //================================== { public: - CWaveConvertSettings m_Settings; + const CWaveConvertSettings &m_Settings; CSoundFile *m_pSndFile; const char *m_lpszFileName; DWORD m_dwFileLimit, m_dwSongLimit; @@ -100,7 +100,7 @@ bool m_bAbort, m_bGivePlugsIdleTime; public: - CDoWaveConvert(CSoundFile *sndfile, const char *fname, CWaveConvertSettings settings, CWnd *parent = NULL) + CDoWaveConvert(CSoundFile *sndfile, const char *fname, const CWaveConvertSettings &settings, CWnd *parent = NULL) : CDialog(IDD_PROGRESS, parent) , m_Settings(settings) { m_pSndFile = sndfile; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |