diff options
Diffstat (limited to 'muse2/muse/mixer/mstrip.cpp')
-rw-r--r-- | muse2/muse/mixer/mstrip.cpp | 286 |
1 files changed, 162 insertions, 124 deletions
diff --git a/muse2/muse/mixer/mstrip.cpp b/muse2/muse/mixer/mstrip.cpp index 6ec47f24..f6e3a26e 100644 --- a/muse2/muse/mixer/mstrip.cpp +++ b/muse2/muse/mixer/mstrip.cpp @@ -10,18 +10,15 @@ #include <QLayout> #include <QAction> -#include <qapplication.h> -#include <qdialog.h> -#include <qtoolbutton.h> -#include <qlabel.h> -#include <qdialog.h> -#include <qcombobox.h> -#include <qtooltip.h> -#include <qtimer.h> -//#include <qpopupmenu.h> -#include <qcursor.h> -//Added by qt3to4: -#include <QHBoxLayout> +#include <QApplication> +//#include <QDialog> +#include <QToolButton> +#include <QLabel> +#include <QComboBox> +#include <QToolTip> +#include <QTimer> +//#include <QPopupMenu> +#include <QCursor> #include <QGridLayout> #include <math.h> @@ -84,23 +81,21 @@ void MidiStrip::addKnob(int idx, const QString& tt, const QString& label, knob->setId(ctl); controller[idx].knob = knob; - knob->setFixedWidth(STRIP_WIDTH/2-3); - knob->setFixedHeight(30); - knob->setBackgroundMode(Qt::PaletteMid); - QToolTip::add(knob, tt); + knob->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); + knob->setBackgroundRole(QPalette::Mid); + knob->setToolTip(tt); knob->setEnabled(enabled); DoubleLabel* dl = new DoubleLabel(0.0, double(mn), double(mx), this); dl->setId(idx); dl->setSpecialText(tr("off")); - QToolTip::add(dl, tr("double click on/off")); + dl->setToolTip(tr("double click on/off")); controller[idx].dl = dl; dl->setFont(config.fonts[1]); - dl->setBackgroundMode(Qt::PaletteMid); + dl->setBackgroundRole(QPalette::Mid); dl->setFrame(true); dl->setPrecision(0); - dl->setFixedWidth(STRIP_WIDTH/2); - dl->setFixedHeight(15); + dl->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); dl->setEnabled(enabled); double dlv; @@ -140,17 +135,16 @@ void MidiStrip::addKnob(int idx, const QString& tt, const QString& label, QLabel* lb = new QLabel(label, this); controller[idx].lb = lb; lb->setFont(config.fonts[1]); - lb->setFixedWidth(STRIP_WIDTH/2-3); + lb->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); lb->setAlignment(Qt::AlignCenter); - lb->setFixedHeight(15); lb->setEnabled(enabled); - QGridLayout* grid = new QGridLayout(0, 2, 2, 0, 0, "grid"); - grid->setMargin(2); - grid->addWidget(lb, 0, 0); - grid->addWidget(dl, 1, 0); - grid->addMultiCellWidget(knob, 0, 1, 1, 1); - layout->addLayout(grid); + QGridLayout* gr = new QGridLayout(); + gr->setMargin(0); + gr->addWidget(lb, 0, 0); + gr->addWidget(dl, 1, 0); + gr->addWidget(knob, 0, 1, 2, 1); + grid->addLayout(gr, _curGridRow++, 0, 1, 2); connect(knob, SIGNAL(sliderMoved(double,int)), slot); connect(knob, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(controlRightClicked(const QPoint &, int))); @@ -181,8 +175,9 @@ MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) addKnob(KNOB_REV_SEND, tr("ReverbSend"), tr("Rev"), SLOT(setReverbSend(double)), false); addKnob(KNOB_CHO_SEND, tr("ChorusSend"), tr("Cho"), SLOT(setChorusSend(double)), false); int auxsSize = song->auxs()->size(); - if (auxsSize) - layout->addSpacing((STRIP_WIDTH/2 + 1) * auxsSize); + ///if (auxsSize) + //layout->addSpacing((STRIP_WIDTH/2 + 1) * auxsSize); + ///grid->addSpacing((STRIP_WIDTH/2 + 1) * auxsSize); // ?? //--------------------------------------------------- // slider, label, meter @@ -206,21 +201,22 @@ MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) meter[0]->setRange(0, 127.0); meter[0]->setFixedWidth(15); connect(meter[0], SIGNAL(mousePress()), this, SLOT(resetPeaks())); - sliderGrid = new QGridLayout(this); // ddskrjo this + + sliderGrid = new QGridLayout(); sliderGrid->setRowStretch(0, 100); sliderGrid->addWidget(slider, 0, 0, Qt::AlignRight); sliderGrid->addWidget(meter[0], 0, 1, Qt::AlignLeft); - layout->addLayout(sliderGrid); + grid->addLayout(sliderGrid, _curGridRow++, 0, 1, 2); sl = new DoubleLabel(0.0, -98.0, 0.0, this); sl->setFont(config.fonts[1]); - sl->setBackgroundMode(Qt::PaletteMid); + sl->setBackgroundRole(QPalette::Mid); sl->setSpecialText(tr("off")); sl->setSuffix(tr("dB")); - QToolTip::add(sl, tr("double click on/off")); + sl->setToolTip(tr("double click on/off")); sl->setFrame(true); sl->setPrecision(0); - sl->setFixedWidth(STRIP_WIDTH); + sl->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); // Set the label's slider 'buddy'. sl->setSlider(slider); @@ -264,7 +260,7 @@ MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) connect(sl, SIGNAL(valueChanged(double, int)), SLOT(volLabelChanged(double))); connect(sl, SIGNAL(doubleClicked(int)), SLOT(labelDoubleClicked(int))); - layout->addWidget(sl); + grid->addWidget(sl, _curGridRow++, 0, 1, 2); //--------------------------------------------------- // pan, balance @@ -281,66 +277,73 @@ MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) //--------------------------------------------------- record = new TransparentToolButton(this); - record->setBackgroundMode(Qt::PaletteMid); - record->setToggleButton(true); - - //record->setFixedWidth(STRIP_WIDTH/2); - //record->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum)); - record->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); + record->setBackgroundRole(QPalette::Mid); + record->setCheckable(true); + record->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); QIcon iconSet; - iconSet.setPixmap(*record_on_Icon, QIcon::Automatic, QIcon::Normal, QIcon::On); - iconSet.setPixmap(*record_off_Icon, QIcon::Automatic, QIcon::Normal, QIcon::Off); - record->setIconSet(iconSet); - QToolTip::add(record, tr("record")); - record->setOn(track->recordFlag()); - connect(record, SIGNAL(toggled(bool)), SLOT(recordToggled(bool))); - - mute = new QToolButton(this); + iconSet.addPixmap(*record_on_Icon, QIcon::Normal, QIcon::On); + iconSet.addPixmap(*record_off_Icon, QIcon::Normal, QIcon::Off); + record->setIcon(iconSet); + record->setIconSize(record_on_Icon->size()); + record->setToolTip(tr("record")); + record->setChecked(track->recordFlag()); + connect(record, SIGNAL(clicked(bool)), SLOT(recordToggled(bool))); + + mute = new QToolButton(); QIcon muteSet; - muteSet.setPixmap(*muteIconOn, QIcon::Automatic, QIcon::Normal, QIcon::Off); - muteSet.setPixmap(*muteIconOff, QIcon::Automatic, QIcon::Normal, QIcon::On); - mute->setIconSet(muteSet); - mute->setToggleButton(true); - QToolTip::add(mute, tr("mute")); - mute->setOn(track->mute()); - mute->setFixedWidth(STRIP_WIDTH/2); - connect(mute, SIGNAL(toggled(bool)), SLOT(muteToggled(bool))); + muteSet.addPixmap(*muteIconOn, QIcon::Normal, QIcon::Off); + muteSet.addPixmap(*muteIconOff, QIcon::Normal, QIcon::On); + mute->setIcon(muteSet); + mute->setIconSize(muteIconOn->size()); + mute->setCheckable(true); + mute->setToolTip(tr("mute")); + mute->setChecked(track->mute()); + mute->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); + connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); - solo = new QToolButton(this); + solo = new QToolButton(); if((bool)t->internalSolo()) { - solo->setIconSet(*soloIconSet2); + solo->setIcon(*soloIconSet2); useSoloIconSet2 = true; } else { - solo->setIconSet(*soloIconSet1); + solo->setIcon(*soloIconSet1); useSoloIconSet2 = false; } - //QToolTip::add(solo, tr("pre fader listening")); - QToolTip::add(solo, tr("solo mode")); - solo->setToggleButton(true); - solo->setOn(t->solo()); - solo->setFixedWidth(STRIP_WIDTH/2); - connect(solo, SIGNAL(toggled(bool)), SLOT(soloToggled(bool))); - - QHBoxLayout* smBox1 = new QHBoxLayout(0); - QHBoxLayout* smBox2 = new QHBoxLayout(0); - - smBox2->addWidget(mute); - smBox2->addWidget(solo); - + //solo->setToolTip(tr("pre fader listening")); + solo->setToolTip(tr("solo mode")); + solo->setCheckable(true); + solo->setChecked(t->solo()); + solo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); + connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); + + /* // Changed by Tim. p3.3.21 //QToolTip::add(record, tr("record")); //smBox1->addStretch(100); //smBox1->addWidget(record); - QLabel* dev_ch_label = new QLabel(this); - dev_ch_label->setMinimumWidth(STRIP_WIDTH/2); + QLabel* dev_ch_label = new QLabel(); + ///dev_ch_label->setMinimumWidth(STRIP_WIDTH/2); + + // Special here: Must make label same size as the 'exit' button would be IF this were an audio strip... + // (The 'exit1' icon is BIGGER than the 'record on' icon.) + TransparentToolButton* off = new TransparentToolButton(this); + QIcon iconOff; + iconOff.addPixmap(*exit1Icon, QIcon::Normal, QIcon::On); + iconOff.addPixmap(*exitIcon, QIcon::Normal, QIcon::Off); + off->setIcon(iconOff); + off->setIconSize(exit1Icon->size()); + dev_ch_label->setMinimumHeight(off->height()); + delete off; + //dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum)); - dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum)); + ///dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum)); + dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); dev_ch_label->setAlignment(Qt::AlignCenter); int port = t->outPort(); int channel = t->outChannel(); @@ -353,43 +356,48 @@ MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) // Dealing with a horizontally constrained label. Ignore vertical. Use a minimum readable point size. //autoAdjustFontSize(dev_ch_label, dev_ch_label->text(), false, true, config.fonts[6].pointSize(), 5); QToolTip::add(dev_ch_label, tr("output port and channel")); - smBox1->addWidget(dev_ch_label); - smBox1->addWidget(record); + */ - layout->addLayout(smBox1); - layout->addLayout(smBox2); + off = new TransparentToolButton(this); + QIcon iconOff; + iconOff.addPixmap(*exit1Icon, QIcon::Normal, QIcon::On); + iconOff.addPixmap(*exitIcon, QIcon::Normal, QIcon::Off); + off->setIcon(iconOff); + off->setIconSize(exit1Icon->size()); + off->setBackgroundRole(QPalette::Mid); + off->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); + off->setCheckable(true); + off->setToolTip(tr("off")); + off->setChecked(t->off()); + connect(off, SIGNAL(toggled(bool)), SLOT(offToggled(bool))); + + grid->addWidget(off, _curGridRow, 0); + grid->addWidget(record, _curGridRow++, 1); + grid->addWidget(mute, _curGridRow, 0); + grid->addWidget(solo, _curGridRow++, 1); //--------------------------------------------------- // routing //--------------------------------------------------- - // p3.3.38 - //route = new QToolButton(this); - //route->setFont(config.fonts[1]); - //route->setFixedWidth(STRIP_WIDTH); - //route->setText(tr("Route")); - //QToolTip::add(route, tr("set routing")); - //layout->addWidget(route); - QHBoxLayout* rBox = new QHBoxLayout(0); - iR = new QToolButton(this); + iR = new QToolButton(); iR->setFont(config.fonts[1]); - iR->setFixedWidth((STRIP_WIDTH-4)/2); + iR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); iR->setText(tr("iR")); - iR->setToggleButton(false); - QToolTip::add(iR, tr("input routing")); - rBox->addWidget(iR); + iR->setCheckable(false); + iR->setToolTip(tr("input routing")); + grid->addWidget(iR, _curGridRow, 0); connect(iR, SIGNAL(pressed()), SLOT(iRoutePressed())); - oR = new QToolButton(this); + oR = new QToolButton(); oR->setFont(config.fonts[1]); - oR->setFixedWidth((STRIP_WIDTH-4)/2); + oR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); oR->setText(tr("oR")); - oR->setToggleButton(false); + oR->setCheckable(false); // TODO: Works OK, but disabled for now, until we figure out what to do about multiple out routes and display values... oR->setEnabled(false); - QToolTip::add(oR, tr("output routing")); - rBox->addWidget(oR); + oR->setToolTip(tr("output routing")); + grid->addWidget(oR, _curGridRow++, 1); connect(oR, SIGNAL(pressed()), SLOT(oRoutePressed())); - layout->addLayout(rBox); //--------------------------------------------------- // automation mode @@ -397,8 +405,9 @@ MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) autoType = new ComboBox(this); autoType->setFont(config.fonts[1]); - autoType->setFixedWidth(STRIP_WIDTH-4); + autoType->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); autoType->setEnabled(false); + // Removed by T356. // Disabled for now. There is no midi automation mechanism yet... //autoType->insertItem(tr("Off"), AUTO_OFF); @@ -406,14 +415,52 @@ MidiStrip::MidiStrip(QWidget* parent, MidiTrack* t) //autoType->insertItem(tr("Touch"), AUTO_TOUCH); //autoType->insertItem(tr("Write"), AUTO_WRITE); //autoType->setCurrentItem(t->automationType()); - //QToolTip::add(autoType, tr("automation type")); + // TODO: Convert ComboBox to QT4 + //autoType->insertItem(AUTO_OFF, tr("Off")); + //autoType->insertItem(AUTO_READ, tr("Read")); + //autoType->insertItem(AUTO_TOUCH, tr("Touch")); + //autoType->insertItem(AUTO_WRITE, tr("Write")); + //autoType->setCurrentIndex(t->automationType()); + //autoType->setToolTip(tr("automation type")); + //connect(autoType, SIGNAL(activated(int,int)), SLOT(setAutomationType(int,int))); - layout->addWidget(autoType); + grid->addWidget(autoType, _curGridRow++, 0, 1, 2); connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); inHeartBeat = false; } //--------------------------------------------------------- +// updateOffState +//--------------------------------------------------------- + +void MidiStrip::updateOffState() + { + bool val = !track->off(); + slider->setEnabled(val); + sl->setEnabled(val); + //pan->setEnabled(val); + label->setEnabled(val); + + if (record) + record->setEnabled(val); + if (solo) + solo->setEnabled(val); + if (mute) + mute->setEnabled(val); + if (autoType) + autoType->setEnabled(val); + if (iR) + iR->setEnabled(val); + if (oR) + oR->setEnabled(val); + if (off) { + off->blockSignals(true); + off->setOn(track->off()); + off->blockSignals(false); + } + } + +//--------------------------------------------------------- // songChanged //--------------------------------------------------------- @@ -431,13 +478,13 @@ void MidiStrip::songChanged(int val) { if(!useSoloIconSet2) { - solo->setIconSet(*soloIconSet2); + solo->setIcon(*soloIconSet2); useSoloIconSet2 = true; } } else if(useSoloIconSet2) { - solo->setIconSet(*soloIconSet1); + solo->setIcon(*soloIconSet1); useSoloIconSet2 = false; } solo->blockSignals(true); @@ -555,6 +602,16 @@ void MidiStrip::labelDoubleClicked(int idx) } +//--------------------------------------------------------- +// offToggled +//--------------------------------------------------------- + +void MidiStrip::offToggled(bool val) + { + track->setOff(val); + song->update(SC_MUTE); + } + /* //--------------------------------------------------------- // routeClicked @@ -944,25 +1001,6 @@ void MidiStrip::setReverbSend(double val) } //--------------------------------------------------------- -// updateOffState -//--------------------------------------------------------- - -void MidiStrip::updateOffState() // Ripped from AudioStrip, hehh(mg) - { - bool val = !track->off(); - slider->setEnabled(val); - //KNOB* gcon = &controller[KNOB_PAN]; // TODO: Pan ctrl - //gcon->setOn(val); - label->setEnabled(val); - if (record) - record->setEnabled(val); - if (solo) - solo->setEnabled(val); - if (mute) - mute->setEnabled(val); - } - -//--------------------------------------------------------- // routingPopupMenuActivated //--------------------------------------------------------- |