summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/muse/liste/ieventdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse_qt4_evolution/muse/liste/ieventdialog.cpp')
-rw-r--r--muse_qt4_evolution/muse/liste/ieventdialog.cpp428
1 files changed, 0 insertions, 428 deletions
diff --git a/muse_qt4_evolution/muse/liste/ieventdialog.cpp b/muse_qt4_evolution/muse/liste/ieventdialog.cpp
deleted file mode 100644
index a2914ffc..00000000
--- a/muse_qt4_evolution/muse/liste/ieventdialog.cpp
+++ /dev/null
@@ -1,428 +0,0 @@
-//=============================================================================
-// MusE
-// Linux Music Editor
-// $Id:$
-//
-// Copyright (C) 2007 by Werner Schweer and others
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2.
-//
-// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-//=============================================================================
-
-#include <QColor>
-#include <QDialogButtonBox>
-#include "ieventdialog.h"
-
-InsertEventDialog::InsertEventDialog(const Pos& time, Part* part, Event* ev,
- QWidget* parent, Qt::WindowFlags f)
- : QDialog(parent, f) {
- setWindowTitle("Insert Event Dialog");
-
- _selectedType = -1;
-
-
- _part = part;
-
- _lastDir = QDir::currentPath();
-
- _mainLayout = new QGridLayout(parent);
- //event type
- QLabel* eventTypeLabel = new QLabel("Event Type", parent);
- _mainLayout->addWidget(eventTypeLabel, 0, 0);
- _eventTypeComboBox = new QComboBox(parent);
- for(unsigned i = 0; i < IED_TypeCount; i++) {
- _typeWidget.push_back(new QWidget(parent));
- QGridLayout* tLayout = new QGridLayout(_typeWidget[i]);
- if(i == IED_Note) {
- _eventTypeComboBox->addItem(NoteSTR);
- //pitch
- QLabel* pitchLabel = new QLabel("Pitch", _typeWidget[i]);
- tLayout->addWidget(pitchLabel, 0, 0);
- /*_noteLabel = new QLabel("C4", _typeWidget[i]);
- _noteLabel->setFrameShape(QFrame::Panel);
- _noteLabel->setFrameShadow(QFrame::Sunken);
- tLayout->addWidget(_noteLabel, 0, 1);*/
- _pitchSpinBox = new QSpinBox(_typeWidget[i]);
- _pitchSpinBox->setMaximum(127);
- _pitchSpinBox->setMinimum(0);
- _pitchSpinBox->setValue(ev && ev->type()==Note?ev->pitch():72/*C4*/);
- tLayout->addWidget(_pitchSpinBox, 0, 1);
- //Velocity
- QLabel* velocityLabel = new QLabel("Velocity", _typeWidget[i]);
- tLayout->addWidget(velocityLabel, 1, 0);
- _velocitySpinBox = new QSpinBox(_typeWidget[i]);
- _velocitySpinBox->setMaximum(127);
- _velocitySpinBox->setMinimum(0);
- _velocitySpinBox->setValue(ev && ev->type()==Note?ev->velo():70);
- tLayout->addWidget(_velocitySpinBox, 1, 1);
- //Velocity Off
- /*QLabel* veloOffLabel = new QLabel("Velocity Off", _typeWidget[i]);
- tLayout->addWidget(veloOffLabel, 2, 0);
- _veloOffSpinBox = new QSpinBox(_typeWidget[i]);
- _veloOffSpinBox->setMaximum(127);
- _veloOffSpinBox->setMinimum(0);
- _veloOffSpinBox->setValue(0);
- tLayout->addWidget(_veloOffSpinBox, 2, 1);*/
- //Length
- QLabel* lengthLabel = new QLabel("Length", _typeWidget[i]);
- tLayout->addWidget(lengthLabel, 2, 0);
- _lengthSpinBox = new QSpinBox(_typeWidget[i]);
- _lengthSpinBox->setMaximum(32768);
- _lengthSpinBox->setMinimum(1);
- _lengthSpinBox->setValue(ev && ev->type()==Note?ev->lenTick():384);
- tLayout->addWidget(_lengthSpinBox, 2, 1);
- }
- else if(i == IED_ProgramChange) {
- _eventTypeComboBox->addItem(ProgramChangeSTR);
- //TODO
- QLabel* programChangeEventTODO =
- new QLabel("TODO : Program change event", _typeWidget[i]);
- tLayout->addWidget(programChangeEventTODO, 0, 0, 1, 2);
- }
- else if(i == IED_ControlChange) {
- _eventTypeComboBox->addItem(ControlChangeSTR);
- //TODO
- QLabel* controlChangeEventTODO =
- new QLabel("TODO : Control change event", _typeWidget[i]);
- tLayout->addWidget(controlChangeEventTODO, 0, 0, 1, 2);
- }
- else if(i == IED_Sysex) {
- _eventTypeComboBox->addItem(SysexSTR);
- //number of sysex
- QLabel* numOfSysexLabel = new QLabel("Number of Sysex", _typeWidget[i]);
- tLayout->addWidget(numOfSysexLabel, 0, 0);
- _sysexCountSpinBox = new QSpinBox(_typeWidget[i]);
- _sysexCountSpinBox->setMaximum(1024);
- _sysexCountSpinBox->setMinimum(1);
- _sysexCountSpinBox->setValue(1);
- tLayout->addWidget(_sysexCountSpinBox, 0, 1);
- //current sysex
- QLabel* curSysexLabel = new QLabel("Current Sysex", _typeWidget[i]);
- tLayout->addWidget(curSysexLabel, 1, 0);
- _curSysexSpinBox = new QSpinBox(_typeWidget[i]);
- _curSysexSpinBox->setMaximum(0);
- _curSysexSpinBox->setMinimum(0);
- _curSysexSpinBox->setValue(0);
- tLayout->addWidget(_curSysexSpinBox, 1, 1);
- //select from the instrument
- QPushButton* selectButton = new QPushButton("Select from instrument",
- _typeWidget[i]);
- tLayout->addWidget(selectButton, 2, 0, 1, 2);
- //load
- _loadButton = new QPushButton("Load...", _typeWidget[i]);
- tLayout->addWidget(_loadButton, 3, 0);
- //save
- _saveButton = new QPushButton("Save...", _typeWidget[i]);
- tLayout->addWidget(_saveButton, 3, 1);
- //length
- QLabel* lengthLabel = new QLabel("Length", _typeWidget[i]);
- tLayout->addWidget(lengthLabel, 4, 0);
- _lengthIntLabel = new QLabel(ev && ev->type()==Sysex?
- QString::number(ev->dataLen()):"0",
- _typeWidget[i]);
- tLayout->addWidget(_lengthIntLabel, 4, 1);
- //text edit
- _sysexTextEdit = new QTextEdit(_typeWidget[i]);
- _sysexCursorPos = 0;
- _dataSysex.push_back(ev && ev->type()==Sysex?
- QByteArray((const char*)ev->data(), ev->dataLen())
- :QByteArray());
- _lengthIntLabel->setText(QString::number(sysexLength()));
- _dataSysexStr.push_back(ev && ev->type()==Sysex?
- charArray2Str((const char*)ev->data(),
- ev->dataLen()):
- "F0 F7");
- tLayout->addWidget(_sysexTextEdit, 5, 0, 3, 2);
- setSysexTextEdit();
- QString HEX = "(?!F7)([A-F]|\\d){1,2}";
- QString SRE = QString("^F0(\\s+)(") + HEX + QString("(\\s+))*F7$");
- _hexRegExp = new QRegExp(SRE, Qt::CaseInsensitive);
- }
- tLayout->setMargin(0);
- _typeWidget[i]->setLayout(tLayout);
- _mainLayout->addWidget(_typeWidget[i], 2, 0, 1, 2);
- }
- _mainLayout->addWidget(_eventTypeComboBox, 0, 1);
- //time
- QLabel* timeLabel = new QLabel("Time", parent);
- _mainLayout->addWidget(timeLabel, 1, 0);
- _timePosEdit = new PosEdit(parent);
- _timePosEdit->setValue(time);
- _mainLayout->addWidget(_timePosEdit, 1, 1);
- //Ok, cancel
- QDialogButtonBox* OkCancelBox =
- new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
- Qt::Horizontal, parent);
- _mainLayout->addWidget(OkCancelBox, 3, 0, 1, 2);
-
- if(ev)
- if(ev->type()==Note) _eventTypeComboBox->setCurrentIndex(IED_Note);
- else if(ev->type()==Sysex) _eventTypeComboBox->setCurrentIndex(IED_Sysex);
- else _eventTypeComboBox->setCurrentIndex(IED_Note);
- else _eventTypeComboBox->setCurrentIndex(IED_Note);
-
- updateType(_eventTypeComboBox->currentIndex());
-
- setLayout(_mainLayout);
-
- //connection
- connect(_sysexTextEdit, SIGNAL(textChanged()), this,
- SLOT(updateSysexTextEdit()));
- connect(_sysexTextEdit, SIGNAL(cursorPositionChanged()), this,
- SLOT(updateSysexCursor()));
- connect(_eventTypeComboBox, SIGNAL(currentIndexChanged(int)), this,
- SLOT(updateType(int)));
- connect(_sysexCountSpinBox, SIGNAL(valueChanged(int)), this,
- SLOT(updateSysexCount(int)));
- connect(_curSysexSpinBox, SIGNAL(valueChanged(int)), this,
- SLOT(updateCurSysexSpinBox(int)));
- connect(_loadButton, SIGNAL(clicked()), this, SLOT(updateSysexLoad()));
- connect(_saveButton, SIGNAL(clicked()), this, SLOT(updateSysexSave()));
- connect(OkCancelBox, SIGNAL(accepted()), this, SLOT(accept()));
- connect(OkCancelBox, SIGNAL(rejected()), this, SLOT(reject()));
-}
-
-InsertEventDialog::~InsertEventDialog() {
-}
-
-EventList* InsertEventDialog::elResult() {
- unsigned evTick;
- evTick = (unsigned)IED_MAX(0, (int)_timePosEdit->pos().tick()
- - (int)_part->tick());
- Pos evPos(evTick);
- EventList* res = new EventList;
-
- int curType = _eventTypeComboBox->currentIndex();
-
- if(curType == IED_Note) {
- Event evNote(Note);
- evNote.setPos(evPos);
- evNote.setPitch(_pitchSpinBox->value());
- evNote.setVelo(_velocitySpinBox->value());
- //evNote.setVeloOff(_veloOffSpinBox->value());
- evNote.setLenTick(_lengthSpinBox->value());
- res->add(evNote);
- return res;
- }
- else if(curType == IED_ProgramChange) {
- //TODO
- return NULL;
- }
- else if(curType == IED_ControlChange) {
- //TODO
- return NULL;
- }
- else if(curType == IED_Sysex) {
- for(unsigned i = 0; (int)i < _sysexCountSpinBox->value(); i++) {
- Event evSysex(Sysex);
- evSysex.setPos(evPos);
- evSysex.setData((const unsigned char*) _dataSysex[i].data(),
- _dataSysex[i].size());
- res->add(evSysex);
- }
- return res;
- }
- else return NULL;
-}
-
-int InsertEventDialog::sysexLength() {
- return _dataSysex[_curSysexSpinBox->value()].size();
-}
-QString InsertEventDialog::charArray2Str(const char* s, int length) {
- return ByteArray2Str(QByteArray(s, length));
-}
-QString InsertEventDialog::ByteArray2Str(const QByteArray& ba) {
- QString res = "F0 ";
- for(int i = 0; i < ba.size(); i++) {
- res += QString::number((unsigned char)ba.at(i), 16);
- res += " ";
- }
- res += "F7";
- return res.toUpper();
-}
-QByteArray InsertEventDialog::Str2ByteArray(const QString& s) {
- QByteArray ba;
- QString simpli = s.simplified();
- QStringList sl = simpli.split(" ");
- bool ok;
- for(int i = 1; i < sl.size() - 1; i++) {//i=1 and until size-1 to skip F0, F7
- ba.push_back(sl[i].toInt(&ok, 16));
- }
- return ba;
-}
-char* InsertEventDialog::Str2CharArray(const QString& s) {
- return Str2ByteArray(s).data();
-}
-
-void InsertEventDialog::setSysexTextEdit() {
- QString s = _dataSysexStr[_curSysexSpinBox->value()].toUpper();
- _sysexTextEdit->blockSignals(true);
- //print in gray F0
- _sysexTextEdit->setTextColor(Qt::darkGray);
- _sysexTextEdit->setPlainText(s.left(2));
- //move cursor at the end
- QTextCursor tc1(_sysexTextEdit->document());
- tc1.movePosition(QTextCursor::End);
- _sysexTextEdit->setTextCursor(tc1);
- //print in black the core
- _sysexTextEdit->setTextColor(Qt::black);
- _sysexTextEdit->insertPlainText(s.mid(2, s.size()-4));
- //move cursor at the end
- QTextCursor tc2(_sysexTextEdit->document());
- tc2.movePosition(QTextCursor::End);
- _sysexTextEdit->setTextCursor(tc2);
- //print in gray F7
- _sysexTextEdit->setTextColor(Qt::darkGray);
- _sysexTextEdit->insertPlainText(s.right(2));
- //relocate cursor
- QTextCursor tc(_sysexTextEdit->document());
- tc.setPosition(_sysexCursorPos);
- _sysexTextEdit->setTextCursor(tc);
- //update length label
- _lengthIntLabel->setText(QString::number(sysexLength()));
-
- _sysexTextEdit->blockSignals(false);
-}
-
-//SLOTS
-void InsertEventDialog::updateSysexTextEdit() {
- int cur = _curSysexSpinBox->value();
- int curCursor = _sysexTextEdit->textCursor().position();
- QString data = _sysexTextEdit->toPlainText();
- bool correctInput = _hexRegExp->exactMatch(data);
-
- if(correctInput) {
- _dataSysexStr[cur] = data;
- _sysexCursorPos = curCursor;
- }
-
- //display text, relocate cursor and update length
- setSysexTextEdit();
- //update _dataSysex
- _dataSysex[cur] = Str2ByteArray(_dataSysexStr[cur]);
-}
-void InsertEventDialog::updateSysexCursor() {
- if(_dataSysexStr[_curSysexSpinBox->value()]
- == _sysexTextEdit->toPlainText()) //only if the text hasn't changed
- _sysexCursorPos = _sysexTextEdit->textCursor().position();
-}
-void InsertEventDialog::updateSysexCount(int c) {
- while((int)_dataSysexStr.size() < c) {
- _dataSysexStr.push_back(QString("F0 F7"));
- QByteArray ba;
- _dataSysex.push_back(ba);
- }
- if(c <= _curSysexSpinBox->value()) _curSysexSpinBox->setValue(c-1);
- _curSysexSpinBox->setMaximum(c-1);
-}
-void InsertEventDialog::updateCurSysexSpinBox(int /*c*/) {
- setSysexTextEdit();
-}
-void InsertEventDialog::updateSysexLoad() {
- QByteArray ba;
- QString fileName =
- QFileDialog::getOpenFileName(this,
- tr("Load Sysex dialog"),
- _lastDir,
- QString("*.syx;; *"));
- if(!fileName.isEmpty()) {
- QFileInfo fi(fileName);
- _lastDir = fi.path();
-
- QFile f(fileName);
- if(f.open(QIODevice::ReadOnly)) {
- ba = f.readAll();
- bool sysexStart = false;
- int sysexCount = 0;
- for(int i = 0; i < ba.size(); i++) {
- if((unsigned char)ba.at(i) == 0xF0) {
- sysexStart = true;
- sysexCount++;
- while((int)_dataSysex.size() < sysexCount) {
- QByteArray tempba;
- _dataSysex.push_back(tempba);
- _dataSysexStr.push_back(QString(""));
- }
- _dataSysex[sysexCount-1].clear();
- }
- else if((unsigned char)ba.at(i) == 0xF7) {
- QByteArray endba(_dataSysex[sysexCount-1]);
- sysexStart = false;
- _dataSysexStr[sysexCount-1] = ByteArray2Str(endba);
- }
- else if(sysexStart) _dataSysex[sysexCount-1].push_back(ba.at(i));
- }
- _sysexCountSpinBox->setValue(sysexCount);
- _curSysexSpinBox->setValue(0);
- updateCurSysexSpinBox(0);
- //Message dialog
- if(sysexCount > 0) {
- QMessageBox::information(this, tr("Sysex loaded"),
- tr("MusE has successfully detected"
- " and loaded ") +
- QString::number(sysexCount) +
- tr(" sysex messages."));
- }
- else {
- QMessageBox::information(this, tr("No sysex"),
- tr("No sysex in this file"));
- }
- }
- else {
- QMessageBox::critical(0,
- tr("Critical Error"),
- tr("Cannot open file %1").arg(fileName));
- }
- }
-}
-void InsertEventDialog::updateSysexSave() {
- QString filename =
- QFileDialog::getSaveFileName(
- this,
- tr("Save Sysex Dialog"),
- _lastDir,
- QString("*"));
- if(!filename.isEmpty()) {
- QFileInfo fi(filename);
- _lastDir = fi.path();
- QFile f(filename);
- if(f.open(QIODevice::WriteOnly)) {
- for(unsigned i = 0; i < _dataSysex.size(); i++) {
- qint64 wok;
- wok = f.write(QByteArray(1, 0xF0));
- wok = f.write(_dataSysex[i]);
- wok = f.write(QByteArray(1, 0xF7));
- if(wok == -1) {
- QMessageBox::critical(0,
- tr("Critical Error"),
- tr("Cannot write the sysex number %1")
- .arg(i));
- }
- }
- }
- else {
- QMessageBox::critical(0,
- tr("Critical Error"),
- tr("Cannot save file %1").arg(filename));
- }
- }
-}
-void InsertEventDialog::updateType(int type) {
- if(_selectedType != type) {
- for(unsigned i = 0; i < IED_TypeCount; i++) {
- if(type == (int)i) _typeWidget[i]->show();
- else _typeWidget[i]->hide();
- }
- _selectedType = type;
- resize(1, 1);
- }
-}