mirror of
https://github.com/LMMS/lmms.git
synced 2025-12-23 22:58:33 -05:00
Users can now choose if they only want to export the selected notes when exporting a MIDI clip as an `xpt` or `xptz` file in the piano roll. The export file dialog now shows a checkbox with the label "Export only selected notes". ## Technical details Add the new public method `exportToXML` to `MidiClip`. Compared to `saveSettings` it has an additional parameter `onlySelectedNotes` which controls which notes are exported. The default is to export all notes. The method `saveSettings` now simply delegates to `exportToXML` using the default. `PianoRollWindow::exportMidiClip` now adds a check box to the export dialog which lets users select if they only want to export the selected notes or all notes. The default is to export all notes. The method now uses the new method `exportToXML` for the export and passes the state of the check box into the method.
171 lines
3.6 KiB
C++
171 lines
3.6 KiB
C++
/*
|
|
* MidiClip.h - declaration of class MidiClip, which contains all information
|
|
* about a clip
|
|
*
|
|
* Copyright (c) 2004-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 LMMS_MIDI_CLIP_H
|
|
#define LMMS_MIDI_CLIP_H
|
|
|
|
#include "Clip.h"
|
|
#include "Note.h"
|
|
|
|
|
|
namespace lmms
|
|
{
|
|
|
|
|
|
class InstrumentTrack;
|
|
|
|
namespace gui
|
|
{
|
|
class MidiClipView;
|
|
}
|
|
|
|
|
|
class LMMS_EXPORT MidiClip : public Clip
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum class Type
|
|
{
|
|
BeatClip,
|
|
MelodyClip
|
|
} ;
|
|
|
|
MidiClip( InstrumentTrack* instrumentTrack );
|
|
~MidiClip() override;
|
|
|
|
void init();
|
|
|
|
void updateLength() override;
|
|
|
|
// note management
|
|
Note * addNote( const Note & _new_note, const bool _quant_pos = true );
|
|
|
|
NoteVector::const_iterator removeNote(NoteVector::const_iterator it);
|
|
NoteVector::const_iterator removeNote(Note* note);
|
|
|
|
Note * noteAtStep( int _step );
|
|
|
|
void rearrangeAllNotes();
|
|
void clearNotes();
|
|
|
|
inline const NoteVector & notes() const
|
|
{
|
|
return m_notes;
|
|
}
|
|
|
|
Note * addStepNote( int step );
|
|
void setStep( int step, bool enabled );
|
|
|
|
//! Horizontally flip the positions of the given notes.
|
|
void reverseNotes(const NoteVector& notes);
|
|
|
|
// Split the list of notes on the given position
|
|
void splitNotes(const NoteVector& notes, TimePos pos);
|
|
|
|
// Split the list of notes along a line
|
|
void splitNotesAlongLine(const NoteVector notes, TimePos pos1, int key1, TimePos pos2, int key2, bool deleteShortEnds);
|
|
|
|
// clip-type stuff
|
|
inline Type type() const
|
|
{
|
|
return m_clipType;
|
|
}
|
|
|
|
|
|
// next/previous track based on position in the containing track
|
|
MidiClip * previousMidiClip() const;
|
|
MidiClip * nextMidiClip() const;
|
|
|
|
// settings-management
|
|
void exportToXML(QDomDocument& doc, QDomElement& midiClipElement, bool onlySelectedNotes = false);
|
|
void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
|
|
void loadSettings( const QDomElement & _this ) override;
|
|
inline QString nodeName() const override
|
|
{
|
|
return "midiclip";
|
|
}
|
|
|
|
inline InstrumentTrack * instrumentTrack() const
|
|
{
|
|
return m_instrumentTrack;
|
|
}
|
|
|
|
bool empty();
|
|
|
|
|
|
gui::ClipView * createView( gui::TrackView * _tv ) override;
|
|
|
|
MidiClip* clone() override
|
|
{
|
|
return new MidiClip(*this);
|
|
}
|
|
|
|
|
|
using Model::dataChanged;
|
|
|
|
public slots:
|
|
void addSteps();
|
|
void cloneSteps();
|
|
void removeSteps();
|
|
void clear();
|
|
|
|
protected:
|
|
MidiClip( const MidiClip& other );
|
|
void updatePatternTrack();
|
|
|
|
protected slots:
|
|
void changeTimeSignature();
|
|
|
|
|
|
private:
|
|
TimePos beatClipLength() const;
|
|
|
|
void setType( Type _new_clip_type );
|
|
void checkType();
|
|
|
|
void resizeToFirstTrack();
|
|
|
|
InstrumentTrack * m_instrumentTrack;
|
|
|
|
Type m_clipType;
|
|
|
|
// data-stuff
|
|
NoteVector m_notes;
|
|
int m_steps;
|
|
|
|
MidiClip * adjacentMidiClipByOffset(int offset) const;
|
|
|
|
friend class gui::MidiClipView;
|
|
|
|
|
|
signals:
|
|
void destroyedMidiClip( lmms::MidiClip* );
|
|
} ;
|
|
|
|
|
|
} // namespace lmms
|
|
|
|
#endif // LMMS_MIDI_CLIP_H
|