From db3fbd2faa043a1f14b1ec80486673cc169e8dcd Mon Sep 17 00:00:00 2001 From: Nil Geisweiller Date: Thu, 15 Mar 2007 02:52:35 +0000 Subject: update miditracker --- muse/ChangeLog | 2 ++ muse/muse/midiedit/midieditor.h | 4 +++- muse/muse/midiedit/miditracker.cpp | 44 +++++++++++++----------------------- muse/muse/midiedit/miditracker.h | 8 +++++-- muse/muse/midiedit/trackpattern.cpp | 45 ++++++++++++++++++++++++++----------- muse/muse/midiedit/trackpattern.h | 11 +++++---- 6 files changed, 65 insertions(+), 49 deletions(-) diff --git a/muse/ChangeLog b/muse/ChangeLog index b6f2f700..61c70b63 100644 --- a/muse/ChangeLog +++ b/muse/ChangeLog @@ -1,3 +1,5 @@ +15.03 (ng) + - update IV miditracker 04.03 (ng) - update III miditracker 02.02 (ng) diff --git a/muse/muse/midiedit/midieditor.h b/muse/muse/midiedit/midieditor.h index d35eee6c..3791e017 100644 --- a/muse/muse/midiedit/midieditor.h +++ b/muse/muse/midiedit/midieditor.h @@ -96,7 +96,9 @@ class MidiEditor : public Editor { protected slots: void clipboardChanged(); // enable/disable "Paste" void selectionChanged(); // enable/disable "Copy" & "Paste" - void songChanged(int); + virtual void songChanged(int); //add virtual to allow editors that do not use + //ecancav to use there own songChanged slot + //and avoid crashing, like MidiTrackerEditor void setPos(int, const AL::Pos&); virtual void cmd(QAction*) = 0; diff --git a/muse/muse/midiedit/miditracker.cpp b/muse/muse/midiedit/miditracker.cpp index 6e6a9a5b..e345f454 100644 --- a/muse/muse/midiedit/miditracker.cpp +++ b/muse/muse/midiedit/miditracker.cpp @@ -5,6 +5,7 @@ // (C) Copyright 2006 Nil Geisweiller (a_lin@user.sourceforge.net) //================================================================= +#include "ecanvas.h" #include "miditracker.h" #include "trackpattern.h" #include "song.h" @@ -14,6 +15,7 @@ #define MAX(x,y) (x>y?x:y) class TrackPattern; +//class EventCanvas; //--------------------------------------------------------- // MidiTrackerEditor @@ -84,17 +86,17 @@ MidiTrackerEditor::MidiTrackerEditor(PartList* pl, bool /*init*/) //number of visible rows //rowfeatures->addSeparator(); - QLabel* nvrLabel = new QLabel(tr("Number of visible rows"), rowfeatures); + /*QLabel* nvrLabel = new QLabel(tr("Number of visible rows"), rowfeatures); nvrLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); nvrLabel->setIndent(3); rowfeatures->addWidget(nvrLabel); _nvrSpinBox = new QSpinBox(rowfeatures); _nvrSpinBox->setRange(1, 256); _nvrSpinBox->setFixedHeight(24); - rowfeatures->addWidget(_nvrSpinBox); + rowfeatures->addWidget(_nvrSpinBox);*/ //init number of visible row - setNumVisibleRows(20); - updateNumVisibleRows(); + /*setNumVisibleRows(20); + updateNumVisibleRows();*/ //evaluate fisrtTick and lastTick unsigned firstTick = _pl->begin()->second->tick(); @@ -175,21 +177,21 @@ MidiTrackerEditor::MidiTrackerEditor(PartList* pl, bool /*init*/) } //--------------------------------------------------------- -// setRowPerBar +// setQuant //--------------------------------------------------------- void MidiTrackerEditor::setQuant(int q) { _quant = q; } //--------------------------------------------------------- -// getRowPerBar +// getQuant //--------------------------------------------------------- int MidiTrackerEditor::getQuant() { return _quant; } //--------------------------------------------------------- -// updateRowPerBar +// updateQuant //--------------------------------------------------------- void MidiTrackerEditor::updateQuant() { _quantCombo->blockSignals(true); @@ -198,33 +200,17 @@ void MidiTrackerEditor::updateQuant() { } //--------------------------------------------------------- -// setNumVisibleRows -//--------------------------------------------------------- -void MidiTrackerEditor::setNumVisibleRows(int nvr) { - _numVisibleRows = nvr; -} - -//--------------------------------------------------------- -// getNumVisibleRows -//--------------------------------------------------------- -int MidiTrackerEditor::getNumVisibleRows() { - return _numVisibleRows; -} - -//--------------------------------------------------------- -// updateNumVisibleRows +// setFollow //--------------------------------------------------------- -void MidiTrackerEditor::updateNumVisibleRows() { - _nvrSpinBox->blockSignals(true); - _nvrSpinBox->setValue(_numVisibleRows); - _nvrSpinBox->blockSignals(false); +void MidiTrackerEditor::setFollow(bool f) { + _follow = f; } //--------------------------------------------------------- -// setFollow +// songChanged //--------------------------------------------------------- -void MidiTrackerEditor::setFollow(bool f) { - _follow = f; +void MidiTrackerEditor::songChanged(int i) { + emit signalSongChanged(i); } //--------------------------------------------------------- diff --git a/muse/muse/midiedit/miditracker.h b/muse/muse/midiedit/miditracker.h index aad3a090..5e6d706a 100644 --- a/muse/muse/midiedit/miditracker.h +++ b/muse/muse/midiedit/miditracker.h @@ -31,8 +31,8 @@ class MidiTrackerEditor : public MidiEditor { private: int _quant; QuantCombo* _quantCombo; - int _numVisibleRows; - QSpinBox* _nvrSpinBox; + //int _numVisibleRows; + //QSpinBox* _nvrSpinBox; QMenu* menuView; bool _follow; @@ -45,6 +45,9 @@ class MidiTrackerEditor : public MidiEditor { void updateMoveCurrentRow(unsigned); virtual void cmd(QAction*); + protected slots: + virtual void songChanged(int); + public: MidiTrackerEditor(PartList*, bool); ~MidiTrackerEditor() {} @@ -67,6 +70,7 @@ class MidiTrackerEditor : public MidiEditor { signals: void signalMoveCurrentRow(unsigned); + void signalSongChanged(int); }; #endif diff --git a/muse/muse/midiedit/trackpattern.cpp b/muse/muse/midiedit/trackpattern.cpp index 84f4aeda..d50fffd0 100644 --- a/muse/muse/midiedit/trackpattern.cpp +++ b/muse/muse/midiedit/trackpattern.cpp @@ -283,7 +283,8 @@ BaseTrackPat::BaseTrackPat(QMainWindow* parent, unsigned anr) { SLOT(currentItemChanged(QTreeWidgetItem*))); connect(_parent, SIGNAL(signalMoveCurrentRow(unsigned)), this, SLOT(moveRowFromSignal(unsigned))); - //connect(_tree, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); + //connect signalSongChanged to update the pattern + connect(parent, SIGNAL(signalSongChanged(int)), this, SLOT(updatePattern(int))); } BaseTrackPat::~BaseTrackPat() { @@ -366,13 +367,23 @@ void BaseTrackPat::resizeEvent(QResizeEvent* /*event*/) { } void BaseTrackPat::selectCurrentRow() { - _tree->blockSignals(true); - - QTreeWidgetItem* item = _tree->topLevelItem(getRelativeCurrentRow()); - item->setSelected(true); - _tree->setCurrentItem(item); + unsigned rcr = getRelativeCurrentRow(); + if(rcr < getRowMag()) { + QTreeWidgetItem* item = _tree->topLevelItem(getRelativeCurrentRow()); + if(item) { + _tree->blockSignals(true); + item->setSelected(true); + _tree->setCurrentItem(item); + _tree->blockSignals(false); + } + } +} - _tree->blockSignals(false); +void BaseTrackPat::updatePattern(int /*type*/) { + clearMatrix(); + buildMatrix(); + fillPattern(); + selectCurrentRow(); } //---------------------------------------------------------- @@ -395,8 +406,8 @@ TrackPattern::TrackPattern(QMainWindow* parent, QString name, } //build the matrix of events - buildEventMatrix(); - + buildMatrix(); + //configure and add the dockWidget setWindowTitle(_track->name()); setFeatures(QDockWidget::DockWidgetClosable |QDockWidget::DockWidgetMovable); @@ -436,7 +447,6 @@ TrackPattern::TrackPattern(QMainWindow* parent, QString name, //Resize the columns for(unsigned i = 0; i < _voiceColumns.size(); i++) _tree->resizeColumnToContents(i); - } TrackPattern::~TrackPattern() { @@ -468,7 +478,12 @@ void TrackPattern::setQuant(int /*quant*/) { //TODO } -void TrackPattern::buildEventMatrix() { +void TrackPattern::clearMatrix() { + _voiceColumns.clear(); + _ctrlColumns.clear(); +} + +void TrackPattern::buildMatrix() { for(ciPart p = _partList->begin(); p != _partList->end(); p++) { Part* part = p->second; EventList* events = part->events(); @@ -543,7 +558,7 @@ TimingPattern::TimingPattern(QMainWindow* parent, QString name, unsigned firstTick, unsigned lastTick, int quant) : BasePat(name, firstTick, lastTick, quant), BaseTrackPat(parent) { //build the timing matrix - buildTimingMatrix(); + buildMatrix(); //configure and add the dockWidget setWindowTitle(name); @@ -582,7 +597,11 @@ TimingPattern::TimingPattern(QMainWindow* parent, QString name, TimingPattern::~TimingPattern() { } -void TimingPattern::buildTimingMatrix() { +void TimingPattern::clearMatrix() { + _timingEvents.clear(); +} + +void TimingPattern::buildMatrix() { for(unsigned tick = _firstTick; tick <= _lastTick; tick++) { if(isRow(tick)) { TimingEvent* te = new TimingEvent(tick2row(tick) - tick2row(_firstTick)); diff --git a/muse/muse/midiedit/trackpattern.h b/muse/muse/midiedit/trackpattern.h index 52bb87b3..d9d91aee 100644 --- a/muse/muse/midiedit/trackpattern.h +++ b/muse/muse/midiedit/trackpattern.h @@ -180,6 +180,8 @@ class BaseTrackPat : public QDockWidget { void resizeEvent(QResizeEvent* /*event*/); + virtual void clearMatrix() {} + virtual void buildMatrix() {} virtual void fillPattern() {} //fill the treeWidget with the right window of times //according to _firstRow and _lastRow @@ -192,7 +194,7 @@ class BaseTrackPat : public QDockWidget { private slots: void currentItemChanged(QTreeWidgetItem* nitem); void moveRowFromSignal(unsigned index); - + void updatePattern(int songChangeType); }; //------------------------------------------------------ @@ -216,8 +218,9 @@ class TrackPattern : public BaseTrackPat, public BasePat { //creating new voices when necessary MidiTrack* getTrack() {return _track;} void setQuant(int quant); - void buildEventMatrix(); + virtual void clearMatrix(); + virtual void buildMatrix(); virtual void fillPattern(); }; @@ -250,8 +253,8 @@ class TimingPattern : public BasePat, public BaseTrackPat { unsigned lastTick, int quant); ~TimingPattern(); - void buildTimingMatrix(); - + virtual void clearMatrix(); + virtual void buildMatrix(); virtual void fillPattern(); }; -- cgit v1.2.3