123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- /*
- * MidiPort.h - abstraction of MIDI ports which are part of LMMS' MIDI
- * sequencing system
- *
- * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of LMMS - https://lmms.io
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
- #ifndef MIDI_PORT_H
- #define MIDI_PORT_H
- #include <QtCore/QString>
- #include <QtCore/QList>
- #include <QtCore/QMap>
- #include "Midi.h"
- #include "MidiTime.h"
- #include "AutomatableModel.h"
- class MidiClient;
- class MidiEvent;
- class MidiEventProcessor;
- class MidiPortMenu;
- // class for abstraction of MIDI-port
- class MidiPort : public Model, public SerializingObject
- {
- Q_OBJECT
- mapPropertyFromModel(int,inputChannel,setInputChannel,m_inputChannelModel);
- mapPropertyFromModel(int,outputChannel,setOutputChannel,m_outputChannelModel);
- mapPropertyFromModel(int,inputController,setInputController,m_inputControllerModel);
- mapPropertyFromModel(int,outputController,setOutputController,m_outputControllerModel);
- mapPropertyFromModel(int,fixedInputVelocity,setFixedInputVelocity,m_fixedInputVelocityModel);
- mapPropertyFromModel(int,fixedOutputVelocity,setFixedOutputVelocity,m_fixedOutputVelocityModel);
- mapPropertyFromModel(int,fixedOutputNote,setFixedOutputNote,m_fixedOutputNoteModel);
- mapPropertyFromModel(int,outputProgram,setOutputProgram,m_outputProgramModel);
- mapPropertyFromModel(int,baseVelocity,setBaseVelocity,m_baseVelocityModel);
- mapPropertyFromModel(bool,isReadable,setReadable,m_readableModel);
- mapPropertyFromModel(bool,isWritable,setWritable,m_writableModel);
- public:
- typedef QMap<QString, bool> Map;
- enum Modes
- {
- Disabled, // don't route any MIDI-events (default)
- Input, // from MIDI-client to MIDI-event-processor
- Output, // from MIDI-event-processor to MIDI-client
- Duplex // both directions
- } ;
- typedef Modes Mode;
- MidiPort( const QString& name,
- MidiClient* client,
- MidiEventProcessor* eventProcessor,
- Model* parent = NULL,
- Mode mode = Disabled );
- virtual ~MidiPort();
- void setName( const QString& name );
- Mode mode() const
- {
- return m_mode;
- }
- void setMode( Mode mode );
- bool isInputEnabled() const
- {
- return mode() == Input || mode() == Duplex;
- }
- bool isOutputEnabled() const
- {
- return mode() == Output || mode() == Duplex;
- }
- int realOutputChannel() const
- {
- return outputChannel() - 1;
- }
- void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime() );
- void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime() );
- void saveSettings( QDomDocument& doc, QDomElement& thisElement ) override;
- void loadSettings( const QDomElement& thisElement ) override;
- QString nodeName() const override
- {
- return "midiport";
- }
- void subscribeReadablePort( const QString& port, bool subscribe = true );
- void subscribeWritablePort( const QString& port, bool subscribe = true );
- const Map& readablePorts() const
- {
- return m_readablePorts;
- }
- const Map& writablePorts() const
- {
- return m_writablePorts;
- }
- void invalidateCilent();
- MidiPortMenu* m_readablePortsMenu;
- MidiPortMenu* m_writablePortsMenu;
- public slots:
- void updateMidiPortMode();
- private slots:
- void updateReadablePorts();
- void updateWritablePorts();
- void updateOutputProgram();
- private:
- MidiClient* m_midiClient;
- MidiEventProcessor* m_midiEventProcessor;
- Mode m_mode;
- IntModel m_inputChannelModel;
- IntModel m_outputChannelModel;
- IntModel m_inputControllerModel;
- IntModel m_outputControllerModel;
- IntModel m_fixedInputVelocityModel;
- IntModel m_fixedOutputVelocityModel;
- IntModel m_fixedOutputNoteModel;
- IntModel m_outputProgramModel;
- IntModel m_baseVelocityModel;
- BoolModel m_readableModel;
- BoolModel m_writableModel;
- Map m_readablePorts;
- Map m_writablePorts;
- friend class ControllerConnectionDialog;
- friend class InstrumentMidiIOView;
- signals:
- void readablePortsChanged();
- void writablePortsChanged();
- void modeChanged();
- } ;
- typedef QList<MidiPort *> MidiPortList;
- #endif
|