diff options
| author | Orcan Ogetbil <oget.fedora@gmail.com> | 2010-12-07 07:29:59 +0000 |
|---|---|---|
| committer | Orcan Ogetbil <oget.fedora@gmail.com> | 2010-12-07 07:29:59 +0000 |
| commit | c2adb2d1ec669182b127c1414ac0583a4e9c9386 (patch) | |
| tree | d6cb64a50d994e1be66669de0c662f92c2a1a66d /muse2/muse/mixer | |
| parent | 8e9886770af1022d88e6f92ff4fcceb3e50d0e55 (diff) | |
Ported rack. Converted many Qt3 methods to Qt4.
Diffstat (limited to 'muse2/muse/mixer')
| -rw-r--r-- | muse2/muse/mixer/amixer.cpp | 4 | ||||
| -rw-r--r-- | muse2/muse/mixer/astrip.cpp | 2 | ||||
| -rw-r--r-- | muse2/muse/mixer/astrip.h | 2 | ||||
| -rw-r--r-- | muse2/muse/mixer/meter.cpp | 9 | ||||
| -rw-r--r-- | muse2/muse/mixer/rack.cpp | 268 | ||||
| -rw-r--r-- | muse2/muse/mixer/rack.h | 25 |
6 files changed, 171 insertions, 139 deletions
diff --git a/muse2/muse/mixer/amixer.cpp b/muse2/muse/mixer/amixer.cpp index fe72136d..1848b9fd 100644 --- a/muse2/muse/mixer/amixer.cpp +++ b/muse2/muse/mixer/amixer.cpp @@ -169,7 +169,9 @@ AudioMixerApp::AudioMixerApp(QWidget* parent, MixerConfig* c) showDrumTracksId = new QAction(tr("Show Drum Tracks"), actionItems); showWaveTracksId = new QAction(tr("Show Wave Tracks"), actionItems); - actionItems->addSeparator(); + QAction *separator = new QAction(this); + separator->setSeparator(true); + actionItems->addAction(separator); showInputTracksId = new QAction(tr("Show Inputs"), actionItems); showOutputTracksId = new QAction(tr("Show Outputs"), actionItems); diff --git a/muse2/muse/mixer/astrip.cpp b/muse2/muse/mixer/astrip.cpp index 88d8f945..9c2e14f5 100644 --- a/muse2/muse/mixer/astrip.cpp +++ b/muse2/muse/mixer/astrip.cpp @@ -702,7 +702,7 @@ AudioStrip::AudioStrip(QWidget* parent, AudioTrack* at) // plugin rack //--------------------------------------------------- - EffectRack* rack = new EffectRack(this, t); + rack = new EffectRack(this, t); rack->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); grid->addWidget(rack, _curGridRow++, 0, 1, 2); diff --git a/muse2/muse/mixer/astrip.h b/muse2/muse/mixer/astrip.h index 88cef89b..10d75305 100644 --- a/muse2/muse/mixer/astrip.h +++ b/muse2/muse/mixer/astrip.h @@ -25,6 +25,7 @@ class QButton; class TransparentToolButton; class AudioTrack; class DoubleLabel; +class EffectRack; //--------------------------------------------------------- // AudioStrip @@ -36,6 +37,7 @@ class AudioStrip : public Strip { int channel; Slider* slider; DoubleLabel* sl; + EffectRack* rack; Knob* pan; DoubleLabel* panl; diff --git a/muse2/muse/mixer/meter.cpp b/muse2/muse/mixer/meter.cpp index 993a15ff..aae380f3 100644 --- a/muse2/muse/mixer/meter.cpp +++ b/muse2/muse/mixer/meter.cpp @@ -23,7 +23,7 @@ //--------------------------------------------------------- Meter::Meter(QWidget* parent, MeterType type) - : QFrame(parent, Qt::WNoAutoErase) + : QFrame(parent) //Qt::WNoAutoErase { mtype = type; overflow = false; @@ -138,9 +138,10 @@ void Meter::drawVU(int w, int h) int fw = frameWidth(); w -= 2*fw; h -= 2*fw; - bgPm.resize(w, h); - fgPm.resize(w, h); - + + bgPm = QPixmap(QSize(w, h)); + fgPm = QPixmap(QSize(w, h)); + QPainter p1(&fgPm); QPainter p2(&bgPm); diff --git a/muse2/muse/mixer/rack.cpp b/muse2/muse/mixer/rack.cpp index ead97ae1..16e76258 100644 --- a/muse2/muse/mixer/rack.cpp +++ b/muse2/muse/mixer/rack.cpp @@ -6,19 +6,17 @@ // (C) Copyright 2000-2003 Werner Schweer (ws@seh.de) //========================================================= -#include <qapplication.h> -#include <qtooltip.h> -#include <qpalette.h> -#include <qpainter.h> -#include <q3popupmenu.h> -#include <qmessagebox.h> - #include <QByteArray> -#include <QMimeData> #include <QDrag> +#include <QDragEnterEvent> #include <QDropEvent> +#include <QMenu> +#include <QMessageBox> +#include <QMimeData> #include <QMouseEvent> -#include <QDragEnterEvent> +#include <QPainter> +#include <QPalette> + #include <errno.h> #include "xml.h" @@ -35,16 +33,14 @@ // class RackSlot //--------------------------------------------------------- -class RackSlot : public Q3ListBoxItem { +class RackSlot : public QListWidgetItem { int idx; AudioTrack* node; - virtual void paint(QPainter*); - virtual int height(const Q3ListBox*) const { return 18; } - public: - RackSlot(Q3ListBox* lb, AudioTrack* t, int); + RackSlot(QListWidget* lb, AudioTrack* t, int i); ~RackSlot(); + void setBackgroundColor(const QBrush& brush) {setBackground(brush);}; }; RackSlot::~RackSlot() @@ -56,31 +52,12 @@ RackSlot::~RackSlot() // RackSlot //--------------------------------------------------------- -RackSlot::RackSlot(Q3ListBox* b, AudioTrack* t, int i) - : Q3ListBoxItem(b) +RackSlot::RackSlot(QListWidget* b, AudioTrack* t, int i) + : QListWidgetItem(b) { node = t; idx = i; - } - -//--------------------------------------------------------- -// paint -//--------------------------------------------------------- - -void RackSlot::paint(QPainter* painter) - { - if (node == 0) - return; - painter->save(); - if (node == 0 || !node->efxPipe()->isOn(idx)) { - const QColorGroup& g = listBox()->colorGroup(); - painter->fillRect(0,0,listBox()->width(),height(listBox()), g.dark()); - painter->setPen(g.light()); - } - QFontMetrics fm = painter->fontMetrics(); - QString s(node->efxPipe()->name(idx)); - painter->drawText(3, fm.ascent() + fm.leading()/2, s); - painter->restore(); + setSizeHint(QSize(10,17)); } //--------------------------------------------------------- @@ -88,27 +65,42 @@ void RackSlot::paint(QPainter* painter) //--------------------------------------------------------- EffectRack::EffectRack(QWidget* parent, AudioTrack* t) - : Q3ListBox(parent, "Rack") + : QListWidget(parent) { + setObjectName("Rack"); setAttribute(Qt::WA_DeleteOnClose); track = t; setFont(config.fonts[1]); - setHScrollBarMode(AlwaysOff); - setVScrollBarMode(AlwaysOff); - setSelectionMode(Single); - setMaximumHeight(18 * PipelineDepth); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setSelectionMode(QAbstractItemView::SingleSelection); + setMaximumHeight(19 * PipelineDepth); for (int i = 0; i < PipelineDepth; ++i) new RackSlot(this, track, i); - connect(this, SIGNAL(contextMenuRequested(Q3ListBoxItem*, const QPoint&)), - this, SLOT(menuRequested(Q3ListBoxItem*, const QPoint&))); - connect(this, SIGNAL(doubleClicked(Q3ListBoxItem*)), - this, SLOT(doubleClicked(Q3ListBoxItem*))); + updateContents(); + + connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), + this, SLOT(doubleClicked(QListWidgetItem*))); connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); - QToolTip::add(this, tr("effect rack")); + + setToolTip(tr("effect rack")); + setSpacing(0); + QPalette qpal; + qpal.setColor(QPalette::Base, QColor(palette().midlight().color())); + setPalette(qpal); + setAcceptDrops(true); } +void EffectRack::updateContents() + { + for (int i = 0; i < PipelineDepth; ++i) { + item(i)->setText(track->efxPipe()->name(i)); + item(i)->setBackground(track->efxPipe()->isOn(i) ? palette().mid() : palette().dark()); + } + } + //--------------------------------------------------------- // EffectRack //--------------------------------------------------------- @@ -124,9 +116,8 @@ EffectRack::~EffectRack() void EffectRack::songChanged(int typ) { if (typ & (SC_ROUTE | SC_RACK)) { - for (int i = 0; i < PipelineDepth; ++i) - updateItem(i); - } + updateContents(); + } } //--------------------------------------------------------- @@ -135,7 +126,7 @@ void EffectRack::songChanged(int typ) QSize EffectRack::minimumSizeHint() const { - return QSize(10, 18 * PipelineDepth); + return QSize(10, 19 * PipelineDepth); } //--------------------------------------------------------- @@ -147,16 +138,36 @@ QSize EffectRack::sizeHint() const return minimumSizeHint(); } + +void EffectRack::choosePlugin(QListWidgetItem* it, bool replace) + { + Plugin* plugin = PluginDialog::getPlugin(this); + if (plugin) { + PluginI* plugi = new PluginI(); + if (plugi->initPluginInstance(plugin, track->channels())) { + printf("cannot instantiate plugin <%s>\n", + plugin->name().latin1()); + delete plugi; + return; + } + int idx = row(it); + if (replace) + audio->msgAddPlugin(track, idx, 0); + audio->msgAddPlugin(track, idx, plugi); + updateContents(); + } + } + //--------------------------------------------------------- // menuRequested //--------------------------------------------------------- -void EffectRack::menuRequested(Q3ListBoxItem* it, const QPoint& pt) +void EffectRack::menuRequested(QListWidgetItem* it) { if (it == 0 || track == 0) return; RackSlot* curitem = (RackSlot*)it; - int idx = index(curitem); + int idx = row(curitem); QString name; bool mute; Pipeline* pipe = track->efxPipe(); @@ -167,78 +178,75 @@ void EffectRack::menuRequested(Q3ListBoxItem* it, const QPoint& pt) //enum { NEW, CHANGE, UP, DOWN, REMOVE, BYPASS, SHOW, SAVE }; enum { NEW, CHANGE, UP, DOWN, REMOVE, BYPASS, SHOW, SHOW_NATIVE, SAVE }; - Q3PopupMenu* menu = new Q3PopupMenu; - menu->insertItem(QIcon(*upIcon), tr("move up"), UP, UP); - menu->insertItem(QIcon(*downIcon), tr("move down"), DOWN, DOWN); - menu->insertItem(tr("remove"), REMOVE, REMOVE); - menu->insertItem(tr("bypass"), BYPASS, BYPASS); - menu->insertItem(tr("show gui"), SHOW, SHOW); - menu->insertItem(tr("show native gui"), SHOW_NATIVE, SHOW_NATIVE); - - menu->setItemChecked(BYPASS, !pipe->isOn(idx)); - menu->setItemChecked(SHOW, pipe->guiVisible(idx)); - menu->setItemChecked(SHOW_NATIVE, pipe->nativeGuiVisible(idx)); + QMenu* menu = new QMenu; + QAction* newAction = menu->addAction(tr("new")); + QAction* changeAction = menu->addAction(tr("change")); + QAction* upAction = menu->addAction(QIcon(*upIcon), tr("move up"));//, UP, UP); + QAction* downAction = menu->addAction(QIcon(*downIcon), tr("move down"));//, DOWN, DOWN); + QAction* removeAction = menu->addAction(tr("remove"));//, REMOVE, REMOVE); + QAction* bypassAction = menu->addAction(tr("bypass"));//, BYPASS, BYPASS); + QAction* showGuiAction = menu->addAction(tr("show gui"));//, SHOW, SHOW); + QAction* showNativeGuiAction = menu->addAction(tr("show native gui"));//, SHOW_NATIVE, SHOW_NATIVE); + QAction* saveAction = menu->addAction(tr("save preset")); + + newAction->setData(NEW); + changeAction->setData(CHANGE); + upAction->setData(UP); + downAction->setData(DOWN); + removeAction->setData(REMOVE); + bypassAction->setData(BYPASS); + showGuiAction->setData(SHOW); + showNativeGuiAction->setData(SHOW_NATIVE); + saveAction->setData(SAVE); + + bypassAction->setCheckable(true); + showGuiAction->setCheckable(true); + showNativeGuiAction->setCheckable(true); + + bypassAction->setChecked(!pipe->isOn(idx)); + showGuiAction->setChecked(pipe->guiVisible(idx)); + showNativeGuiAction->setChecked(pipe->nativeGuiVisible(idx)); if (pipe->empty(idx)) { - menu->insertItem(tr("new"), NEW, NEW); - menu->setItemEnabled(UP, false); - menu->setItemEnabled(DOWN, false); - menu->setItemEnabled(REMOVE, false); - menu->setItemEnabled(BYPASS, false); - menu->setItemEnabled(SHOW, false); - menu->setItemEnabled(SHOW_NATIVE, false); - menu->setItemEnabled(SAVE, false); + menu->removeAction(changeAction); + menu->removeAction(saveAction); + upAction->setEnabled(false); + downAction->setEnabled(false); + removeAction->setEnabled(false); + bypassAction->setEnabled(false); + showGuiAction->setEnabled(false); + showNativeGuiAction->setEnabled(false); } else { - menu->insertItem(tr("change"), CHANGE, CHANGE); - menu->insertItem(tr("save preset"), SAVE, SAVE); + menu->removeAction(newAction); if (idx == 0) - menu->setItemEnabled(UP, false); + upAction->setEnabled(true); if (idx == (PipelineDepth-1)) - menu->setItemEnabled(DOWN, false); + downAction->setEnabled(false); if(!pipe->isDssiPlugin(idx)) - menu->setItemEnabled(SHOW_NATIVE, false); + showNativeGuiAction->setEnabled(false); } #ifndef OSC_SUPPORT - menu->setItemEnabled(SHOW_NATIVE, false); + showNativeGuiAction->setEnabled(false); #endif - - int sel = menu->exec(pt, 1); - delete menu; - if (sel == -1) - return; + QPoint pt = QCursor::pos(); + QAction* act = menu->exec(pt, 0); + + //delete menu; + if (!act) + return; + int sel = act->data().toInt(); switch(sel) { case NEW: { - Plugin* plugin = PluginDialog::getPlugin(this); - if (plugin) { - PluginI* plugi = new PluginI(); - if (plugi->initPluginInstance(plugin, track->channels())) { - printf("cannot instantiate plugin <%s>\n", - plugin->name().latin1()); - delete plugi; - break; - } - audio->msgAddPlugin(track, idx, plugi); - } + choosePlugin(it); break; } case CHANGE: { - Plugin* plugin = PluginDialog::getPlugin(this); - if (plugin) { - PluginI* plugi = new PluginI(); - if (plugi->initPluginInstance(plugin, track->channels())) { - printf("cannot instantiate plugin <%s>\n", - plugin->name().latin1()); - delete plugi; - break; - } - audio->msgAddPlugin(track, idx, 0); - audio->msgAddPlugin(track, idx, plugi); - } + choosePlugin(it, true); break; } case REMOVE: @@ -264,13 +272,13 @@ void EffectRack::menuRequested(Q3ListBoxItem* it, const QPoint& pt) } case UP: if (idx > 0) { - setCurrentItem(idx-1); + setCurrentItem(item(idx-1)); pipe->move(idx, true); } break; case DOWN: if (idx < (PipelineDepth-1)) { - setCurrentItem(idx+1); + setCurrentItem(item(idx+1)); pipe->move(idx, false); } break; @@ -278,6 +286,7 @@ void EffectRack::menuRequested(Q3ListBoxItem* it, const QPoint& pt) savePreset(idx); break; } + updateContents(); song->update(SC_RACK); } @@ -286,13 +295,19 @@ void EffectRack::menuRequested(Q3ListBoxItem* it, const QPoint& pt) // toggle gui //--------------------------------------------------------- -void EffectRack::doubleClicked(Q3ListBoxItem* it) +void EffectRack::doubleClicked(QListWidgetItem* it) { if (it == 0 || track == 0) return; + RackSlot* item = (RackSlot*)it; - int idx = index(item); + int idx = row(item); Pipeline* pipe = track->efxPipe(); + + if (pipe->name(idx) == QString("empty")) { + choosePlugin(it); + return; + } if (pipe) { bool flag = !pipe->guiVisible(idx); pipe->showGui(idx, flag); @@ -399,8 +414,9 @@ void EffectRack::contentsDropEvent(QDropEvent * /*event*/)// prevent of compiler void EffectRack::dropEvent(QDropEvent *event) { QString text; - Q3ListBoxItem *i = itemAt( contentsToViewport(event->pos()) ); - int idx = index(i); + //orcan-check//QListWidgetItem *i = itemAt( contentsToViewport(event->pos()) ); + QListWidgetItem *i = itemAt( event->pos() ); + int idx = row(i); Pipeline* pipe = track->efxPipe(); if (pipe) @@ -409,14 +425,15 @@ void EffectRack::dropEvent(QDropEvent *event) QWidget *sw = event->source(); if(sw) { - if(strcmp(sw->className(), "EffectRack") == 0) + if(strcmp(sw->metaObject()->className(), "EffectRack") == 0) { EffectRack *ser = (EffectRack*)sw; Pipeline* spipe = ser->getTrack()->efxPipe(); if(!spipe) return; - Q3ListBoxItem *i = ser->itemAt(contentsToViewport(ser->getDragPos())); - int idx0 = ser->index(i); + //orcan-check//QListWidgetItem *i = ser->itemAt(contentsToViewport(ser->getDragPos())); + QListWidgetItem *i = ser->itemAt(ser->getDragPos()); + int idx0 = ser->row(i); if (!(*spipe)[idx0] || (idx == idx0 && (ser == this || ser->getTrack()->name() == track->name()))) return; @@ -478,33 +495,40 @@ void EffectRack::contentsDragEnterEvent(QDragEnterEvent * /*event*/)// prevent o { } -void EffectRack::contentsMousePressEvent(QMouseEvent *event) +void EffectRack::mousePressEvent(QMouseEvent *event) { if(event->button() & Qt::LeftButton) { dragPos = event->pos(); } - Q3ListBox::contentsMousePressEvent(event); + else if(event->button() & Qt::RightButton) { + menuRequested(itemAt(event->pos())); + return; + } + + QListWidget::mousePressEvent(event); } -void EffectRack::contentsMouseMoveEvent(QMouseEvent *event) +void EffectRack::mouseMoveEvent(QMouseEvent *event) { if (event->state() & Qt::LeftButton) { Pipeline* pipe = track->efxPipe(); if(!pipe) return; - Q3ListBoxItem *i = itemAt(contentsToViewport(dragPos)); - int idx0 = index(i); + //orcan-check//QListWidgetItem *i = itemAt(contentsToViewport(dragPos)); + QListWidgetItem *i = itemAt(dragPos); + int idx0 = row(i); if (!(*pipe)[idx0]) return; int distance = (dragPos-event->pos()).manhattanLength(); if (distance > QApplication::startDragDistance()) { - Q3ListBoxItem *i = itemAt( contentsToViewport(event->pos()) ); - int idx = index(i); + //orcan-check//QListWidgetItem *i = itemAt( contentsToViewport(event->pos()) ); + QListWidgetItem *i = itemAt( event->pos() ); + int idx = row(i); startDrag(idx); } } - Q3ListBox::contentsMouseMoveEvent(event); + QListWidget::mouseMoveEvent(event); } diff --git a/muse2/muse/mixer/rack.h b/muse2/muse/mixer/rack.h index f04ce2ed..fd3057d7 100644 --- a/muse2/muse/mixer/rack.h +++ b/muse2/muse/mixer/rack.h @@ -9,21 +9,22 @@ #ifndef __RACK_H__ #define __RACK_H__ -#include <q3listbox.h> -#include <QDragLeaveEvent> -//Added by qt3to4: -#include <QMouseEvent> -#include <QDropEvent> -#include <QDragEnterEvent> #include "xml.h" +#include <QListWidget> + +class QDragEnterEvent; +class QDragLeaveEvent; +class QDropEvent; +class QMouseEvent; + class AudioTrack; //--------------------------------------------------------- // EffectRack //--------------------------------------------------------- -class EffectRack : public Q3ListBox { +class EffectRack : public QListWidget { AudioTrack* track; Q_OBJECT @@ -34,19 +35,21 @@ class EffectRack : public Q3ListBox { void initPlugin(Xml xml, int idx); QPoint dragPos; void savePreset(int idx); + void choosePlugin(QListWidgetItem* item, bool replace = false); private slots: - void menuRequested(Q3ListBoxItem*, const QPoint&); - void doubleClicked(Q3ListBoxItem*); + void menuRequested(QListWidgetItem*); + void doubleClicked(QListWidgetItem*); void songChanged(int); + void updateContents(); protected: void dropEvent(QDropEvent *event); void dragEnterEvent(QDragEnterEvent *event); void contentsDropEvent(QDropEvent *event); void contentsDragEnterEvent(QDragEnterEvent *event); - void contentsMousePressEvent(QMouseEvent *event); - void contentsMouseMoveEvent(QMouseEvent *event); + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); public: EffectRack(QWidget*, AudioTrack* t); |
