/*
 * MidiInOutEditor.h
 * -----------------
 * Purpose: Editor interface for the MidiInOut plugin.
 * Notes  : (currently none)
 * Authors: Johannes Schultz (OpenMPT Devs)
 * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
 */


#pragma once

#include "openmpt/all/BuildSettings.hpp"

#ifdef MODPLUG_TRACKER

#include "../AbstractVstEditor.h"
#include "../CDecimalSupport.h"

OPENMPT_NAMESPACE_BEGIN

class MidiInOut;

class MidiInOutEditor : public CAbstractVstEditor
{
protected:
	CComboBox m_inputCombo, m_outputCombo;
	CNumberEdit m_latencyEdit;
	CSpinButtonCtrl m_latencySpin;
	bool m_locked = true;

public:

	MidiInOutEditor(MidiInOut &plugin);

	// Refresh current input / output device in GUI
	void SetCurrentDevice(bool asInputDevice, MidiDevice::ID device)
	{
		CComboBox &combo = asInputDevice ? m_inputCombo : m_outputCombo;
		SetCurrentDevice(combo, device);
	}

	bool OpenEditor(CWnd *parent) override;
	bool IsResizable() const override { return false; }
	bool SetSize(int, int) override { return false; }

protected:

	// Update lists of available input / output devices
	static void PopulateList(CComboBox &combo, RtMidi &rtDevice, MidiDevice &midiDevice, bool isInput);
	// Refresh current input / output device in GUI
	void SetCurrentDevice(CComboBox &combo, MidiDevice::ID device);

	void DoDataExchange(CDataExchange* pDX) override;

	afx_msg void OnInputChanged();
	afx_msg void OnOutputChanged();
	afx_msg void OnLatencyChanged();
	afx_msg void OnTimingMessagesChanged();

	DECLARE_MESSAGE_MAP()
};

OPENMPT_NAMESPACE_END

#endif // MODPLUG_TRACKER