예제 #1
0
BOOL CCtrlPatterns::OnInitDialog()
//--------------------------------
{
    CWnd::EnableToolTips(true);
    CRect rect, rcOrderList;
    CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
    CModControlDlg::OnInitDialog();

    if ((!m_pModDoc) || (!m_pSndFile) || (!pMainFrm)) return TRUE;
    LockControls();
    // Order List
    m_BtnNext.GetWindowRect(&rect);
    ScreenToClient(&rect);
    rcOrderList.left = rect.right + 4;
    rcOrderList.top = rect.top;
    rcOrderList.bottom = rect.bottom + GetSystemMetrics(SM_CYHSCROLL);
    GetClientRect(&rect);
    rcOrderList.right = rect.right - 4;
    m_OrderList.Init(rcOrderList, this, m_pModDoc, pMainFrm->GetGUIFont());
    // Toolbar buttons
    m_ToolBar.Init();
    m_ToolBar.AddButton(IDC_PATTERN_NEW, TIMAGE_PATTERN_NEW);
    m_ToolBar.AddButton(IDC_PATTERN_PLAY, TIMAGE_PATTERN_PLAY);
    m_ToolBar.AddButton(IDC_PATTERN_PLAYFROMSTART, TIMAGE_PATTERN_RESTART);
    m_ToolBar.AddButton(IDC_PATTERN_STOP, TIMAGE_PATTERN_STOP);
    m_ToolBar.AddButton(ID_PATTERN_PLAYROW, TIMAGE_PATTERN_PLAYROW);
    m_ToolBar.AddButton(IDC_PATTERN_RECORD, TIMAGE_PATTERN_RECORD, TBSTYLE_CHECK, ((m_bRecord) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED);
    m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
    m_ToolBar.AddButton(ID_PATTERN_VUMETERS, TIMAGE_PATTERN_VUMETERS, TBSTYLE_CHECK, ((m_bVUMeters) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED);
    m_ToolBar.AddButton(ID_VIEWPLUGNAMES, TIMAGE_PATTERN_PLUGINS, TBSTYLE_CHECK, ((m_bPluginNames) ? TBSTATE_CHECKED : 0)|TBSTATE_ENABLED); //rewbs.patPlugNames
    m_ToolBar.AddButton(ID_PATTERN_CHANNELMANAGER, TIMAGE_CHANNELMANAGER);
    m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
    m_ToolBar.AddButton(ID_PATTERN_MIDIMACRO, TIMAGE_MACROEDITOR);
    m_ToolBar.AddButton(ID_PATTERN_CHORDEDIT, TIMAGE_CHORDEDITOR);
    m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
    m_ToolBar.AddButton(ID_EDIT_UNDO, TIMAGE_UNDO);
    m_ToolBar.AddButton(ID_PATTERN_PROPERTIES, TIMAGE_PATTERN_PROPERTIES);
    m_ToolBar.AddButton(ID_PATTERN_EXPAND, TIMAGE_PATTERN_EXPAND);
    m_ToolBar.AddButton(ID_PATTERN_SHRINK, TIMAGE_PATTERN_SHRINK);
    //        m_ToolBar.AddButton(ID_PATTERN_AMPLIFY, TIMAGE_SAMPLE_AMPLIFY);
    m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
    m_ToolBar.AddButton(ID_PATTERNDETAIL_LO, TIMAGE_PATTERN_DETAIL_LO, TBSTYLE_CHECK, TBSTATE_ENABLED);
    m_ToolBar.AddButton(ID_PATTERNDETAIL_MED, TIMAGE_PATTERN_DETAIL_MED, TBSTYLE_CHECK, TBSTATE_ENABLED);
    m_ToolBar.AddButton(ID_PATTERNDETAIL_HI, TIMAGE_PATTERN_DETAIL_HI, TBSTYLE_CHECK, TBSTATE_ENABLED|TBSTATE_CHECKED);
    m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP);
    m_ToolBar.AddButton(ID_OVERFLOWPASTE, TIMAGE_PATTERN_OVERFLOWPASTE, TBSTYLE_CHECK, ((CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED);

    // Special edit controls -> tab switch to view
    m_EditSequence.SetParent(this);
    m_EditSpacing.SetParent(this);
    m_EditPatName.SetParent(this);
    m_EditPatName.SetLimitText(MAX_PATTERNNAME - 1);
    m_EditOrderListMargins.SetParent(this);
    m_EditOrderListMargins.SetLimitText(3);
    // Spin controls
    m_SpinSpacing.SetRange(0, MAX_SPACING);
    m_SpinSpacing.SetPos(CMainFrame::gnPatternSpacing);

    m_SpinInstrument.SetRange(-1, 1);
    m_SpinInstrument.SetPos(0);

    if(CMainFrame::gbShowHackControls == true)
    {
            m_SpinOrderListMargins.ShowWindow(SW_SHOW);
            m_EditOrderListMargins.ShowWindow(SW_SHOW);
            m_SpinOrderListMargins.SetRange(0, m_OrderList.GetMarginsMax());
            m_SpinOrderListMargins.SetPos(m_OrderList.GetMargins());
    }
    else
    {
            m_SpinOrderListMargins.ShowWindow(SW_HIDE);
            m_EditOrderListMargins.ShowWindow(SW_HIDE);
    }

    SetDlgItemInt(IDC_EDIT_SPACING, CMainFrame::gnPatternSpacing);
    SetDlgItemInt(IDC_EDIT_ORDERLIST_MARGINS, m_OrderList.GetMargins());
    CheckDlgButton(IDC_PATTERN_FOLLOWSONG, !(CMainFrame::m_dwPatternSetup & PATTERN_FOLLOWSONGOFF));                //rewbs.noFollow - set to unchecked

    m_SpinSequence.SetRange(0, m_pSndFile->Order.GetNumSequences() - 1);
    m_SpinSequence.SetPos(m_pSndFile->Order.GetCurrentSequenceIndex());
    SetDlgItemText(IDC_EDIT_SEQUENCE_NAME, m_pSndFile->Order.m_sName.c_str());

    m_OrderList.SetFocus();

    UpdateView(HINT_MODTYPE|HINT_PATNAMES, NULL);
    RecalcLayout();

    m_bInitialized = TRUE;
    UnlockControls();

    return FALSE;
}
예제 #2
0
void CCtrlGeneral::OnVScroll(UINT code, UINT pos, CScrollBar *pscroll)
//--------------------------------------------------------------------
{
	CDialog::OnVScroll(code, pos, pscroll);

	if (m_bInitialized)
	{
		CSliderCtrl* pSlider = (CSliderCtrl*) pscroll;

		if (pSlider == &m_SliderTempo)
		{
			const TEMPO tempo = tempoMax - TEMPO(m_SliderTempo.GetPos(), 0);
			if ((tempo >= m_sndFile.GetModSpecifications().GetTempoMin()) && (tempo <= m_sndFile.GetModSpecifications().GetTempoMax()) && (tempo != m_sndFile.m_nDefaultTempo))
			{
				m_sndFile.m_nDefaultTempo = m_sndFile.m_PlayState.m_nMusicTempo = tempo;
				m_modDoc.SetModified();

				m_modDoc.UpdateAllViews(nullptr, GeneralHint().General(), this);
			}
		}

		else if (pSlider == &m_SliderGlobalVol)
		{
			const UINT gv = MAX_SLIDER_GLOBAL_VOL - m_SliderGlobalVol.GetPos();
			if ((gv >= 0) && (gv <= MAX_SLIDER_GLOBAL_VOL) && (gv != m_sndFile.m_nDefaultGlobalVolume))
			{
				m_sndFile.m_PlayState.m_nGlobalVolume = gv;
				m_sndFile.m_nDefaultGlobalVolume = gv;
				m_modDoc.SetModified();

				m_modDoc.UpdateAllViews(nullptr, GeneralHint().General(), this);
			}
		}

		else if (pSlider == &m_SliderSamplePreAmp)
		{
			const UINT spa = MAX_SLIDER_SAMPLE_VOL - m_SliderSamplePreAmp.GetPos();
			if ((spa >= 0) && (spa <= MAX_SLIDER_SAMPLE_VOL) && (spa != m_sndFile.m_nSamplePreAmp))
			{
				m_sndFile.m_nSamplePreAmp = spa;
				if(m_sndFile.GetType() != MOD_TYPE_MOD)
					m_modDoc.SetModified();
				m_modDoc.UpdateAllViews(nullptr, GeneralHint().General(), this);
			}
		}

		else if (pSlider == &m_SliderVSTiVol)
		{
			const UINT vv = MAX_SLIDER_VSTI_VOL - m_SliderVSTiVol.GetPos();
			if ((vv >= 0) && (vv <= MAX_SLIDER_VSTI_VOL) && (vv != m_sndFile.m_nVSTiVolume))
			{
				m_sndFile.m_nVSTiVolume = vv;
				m_sndFile.RecalculateGainForAllPlugs();
				m_modDoc.SetModified();
				m_modDoc.UpdateAllViews(nullptr, GeneralHint().General(), this);
			}
		}

		else if(pSlider == (CSliderCtrl*)&m_SpinTempo)
		{
			int pos32 = m_SpinTempo.GetPos32();
			if(pos32 != 0)
			{
				TEMPO newTempo;
				if(m_sndFile.GetModSpecifications().hasFractionalTempo)
				{
					pos32 *= TEMPO::fractFact;
					if(CMainFrame::GetMainFrame()->GetInputHandler()->CtrlPressed())
						pos32 /= 100;
					else
						pos32 /= 10;
					newTempo.SetRaw(pos32);
				} else
				{
					newTempo = TEMPO(pos32, 0);
				}
				newTempo += m_sndFile.m_nDefaultTempo;
				Limit(newTempo, tempoMin, tempoMax);
				m_sndFile.m_nDefaultTempo = m_sndFile.m_PlayState.m_nMusicTempo = newTempo;
				m_modDoc.SetModified();
				LockControls();
				m_modDoc.UpdateAllViews(nullptr, GeneralHint().General(), this);
				UnlockControls();
			}
			m_SpinTempo.SetPos(0);
		}

		UpdateView(GeneralHint().General());
	}
}