// qsamplerChannelForm.h
//
/****************************************************************************
   Copyright (C) 2004-2020, rncbc aka Rui Nuno Capela. All rights reserved.
   Copyright (C) 2007, Christian Schoenebeck

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
   as published by the Free Software Foundation; either version 2
   of the License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License along
   with this program; if not, write to the Free Software Foundation, Inc.,
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

*****************************************************************************/

#ifndef __qsamplerChannelForm_h
#define __qsamplerChannelForm_h

#include "ui_qsamplerChannelForm.h"

#include "qsamplerDevice.h"
#include "qsamplerChannel.h"
#include "qsamplerDeviceForm.h"

#include <QHash>


namespace QSampler {

//-------------------------------------------------------------------------
// QSampler::Channelform -- Channel form interface.
//

class ChannelForm : public QDialog
{
	Q_OBJECT

public:

	ChannelForm(QWidget* pParent = nullptr);
	~ChannelForm();

	void setup(Channel* pChannel);

	void setupDevice(Device* pDevice,
		Device::DeviceType deviceTypeMode,
		const QString& sDriverName);

	void selectMidiDriverItem(const QString& sMidiDriver);
	void selectMidiDeviceItem(int iMidiItem);
	void selectAudioDriverItem(const QString& sAudioDriver);
	void selectAudioDeviceItem(int iAudioItem);

protected slots:

	void accept();
	void reject();
	void openInstrumentFile();
	void updateInstrumentName();
	void selectMidiDriver(const QString& sMidiDriver);
	void selectMidiDevice(int iMidiItem);
	void setupMidiDevice();
	void selectAudioDriver(const QString& sAudioDriver);
	void selectAudioDevice(int iAudioItem);
	void setupAudioDevice();
	void updateDevices();
	void optionsChanged();
	void stabilizeForm();

	void updateTableCellRenderers();
	void updateTableCellRenderers(
		const QModelIndex& topLeft, const QModelIndex& bottomRight);

private:

	Ui::qsamplerChannelForm m_ui;

	Channel* m_pChannel;
	int m_iDirtySetup;
	int m_iDirtyCount;
	QHash<int, Device *> m_audioDevices;
	QHash<int, Device *> m_midiDevices;
	DeviceForm* m_pDeviceForm;
	ChannelRoutingModel m_routingModel;
	ChannelRoutingDelegate m_routingDelegate;
};

} // namespace QSampler

#endif // __qsamplerChannelForm_h


// end of qsamplerChannelForm.h
