comparison widgets/PropertyBox.cpp @ 771:a964151832a7

Merge from branch tony_integration
author Chris Cannam
date Wed, 14 May 2014 09:54:34 +0100
parents 336ccf8fc3f8
children 037a7c22bec8
comparison
equal deleted inserted replaced
768:8b614632568c 771:a964151832a7
22 #include "layer/Layer.h" 22 #include "layer/Layer.h"
23 #include "layer/ColourDatabase.h" 23 #include "layer/ColourDatabase.h"
24 #include "base/UnitDatabase.h" 24 #include "base/UnitDatabase.h"
25 #include "base/RangeMapper.h" 25 #include "base/RangeMapper.h"
26 26
27 #include "plugin/RealTimePluginFactory.h"
28 #include "plugin/RealTimePluginInstance.h"
29 #include "plugin/PluginXml.h"
30
31 #include "AudioDial.h" 27 #include "AudioDial.h"
32 #include "LEDButton.h" 28 #include "LEDButton.h"
33 #include "IconLoader.h" 29 #include "IconLoader.h"
34 30
35 #include "NotifyingCheckBox.h" 31 #include "NotifyingCheckBox.h"
44 #include <QLabel> 40 #include <QLabel>
45 #include <QFrame> 41 #include <QFrame>
46 #include <QApplication> 42 #include <QApplication>
47 #include <QColorDialog> 43 #include <QColorDialog>
48 #include <QInputDialog> 44 #include <QInputDialog>
45 #include <QDir>
49 46
50 #include <cassert> 47 #include <cassert>
51 #include <iostream> 48 #include <iostream>
52 #include <cmath> 49 #include <cmath>
53 50
186 this, SLOT(playAudibleChanged(bool))); 183 this, SLOT(playAudibleChanged(bool)));
187 layout->setAlignment(m_playButton, Qt::AlignVCenter); 184 layout->setAlignment(m_playButton, Qt::AlignVCenter);
188 185
189 layout->insertStretch(-1, 10); 186 layout->insertStretch(-1, 10);
190 187
191 if (params->getPlayPluginId() != "") { 188 if (params->getPlayClipId() != "") {
192 QPushButton *pluginButton = new QPushButton(QIcon(":icons/faders.png"), ""); 189 QPushButton *playParamButton =
193 pluginButton->setFixedWidth(24); 190 new QPushButton(QIcon(":icons/faders.png"), "");
194 pluginButton->setFixedHeight(24); 191 playParamButton->setFixedWidth(24);
195 layout->addWidget(pluginButton); 192 playParamButton->setFixedHeight(24);
196 connect(pluginButton, SIGNAL(clicked()), 193 layout->addWidget(playParamButton);
197 this, SLOT(editPlugin())); 194 connect(playParamButton, SIGNAL(clicked()),
195 this, SLOT(editPlayParameters()));
198 } 196 }
199 197
200 AudioDial *gainDial = new AudioDial; 198 AudioDial *gainDial = new AudioDial;
201 layout->addWidget(gainDial); 199 layout->addWidget(gainDial);
202 gainDial->setMeterColor(Qt::darkRed); 200 gainDial->setMeterColor(Qt::darkRed);
459 457
460 //!!! should be a proper colour combobox class that 458 //!!! should be a proper colour combobox class that
461 // manages its own Add New Colour entry... 459 // manages its own Add New Colour entry...
462 460
463 ColourDatabase *db = ColourDatabase::getInstance(); 461 ColourDatabase *db = ColourDatabase::getInstance();
464 for (size_t i = 0; i < db->getColourCount(); ++i) { 462 for (int i = 0; i < db->getColourCount(); ++i) {
465 QString name = db->getColourName(i); 463 QString name = db->getColourName(i);
466 cb->addItem(db->getExamplePixmap(i, QSize(12, 12)), name); 464 cb->addItem(db->getExamplePixmap(i, QSize(12, 12)), name);
467 } 465 }
468 cb->addItem(tr("Add New Colour...")); 466 cb->addItem(tr("Add New Colour..."));
469 } 467 }
744 742
745 updateContextHelp(obj); 743 updateContextHelp(obj);
746 } 744 }
747 745
748 void 746 void
749 PropertyBox::editPlugin() 747 PropertyBox::editPlayParameters()
750 { 748 {
751 //!!! should probably just emit and let something else do this
752
753 PlayParameters *params = m_container->getPlayParameters(); 749 PlayParameters *params = m_container->getPlayParameters();
754 if (!params) return; 750 if (!params) return;
755 751
756 QString pluginId = params->getPlayPluginId(); 752 QString clip = params->getPlayClipId();
757 QString configurationXml = params->getPlayPluginConfiguration();
758 753
759 PlayParameterRepository::EditCommand *command = 754 PlayParameterRepository::EditCommand *command =
760 new PlayParameterRepository::EditCommand(params); 755 new PlayParameterRepository::EditCommand(params);
761 756
762 RealTimePluginFactory *factory = 757 QInputDialog *dialog = new QInputDialog(this);
763 RealTimePluginFactory::instanceFor(pluginId); 758
764 if (!factory) return; 759 QDir dir(":/samples");
765 760 QStringList clipFiles = dir.entryList(QStringList() << "*.wav", QDir::Files);
766 RealTimePluginInstance *instance = 761
767 factory->instantiatePlugin(pluginId, 0, 0, 48000, 1024, 1); 762 QStringList clips;
768 if (!instance) return; 763 foreach (QString str, clipFiles) {
769 764 clips.push_back(str.replace(".wav", ""));
770 PluginXml(instance).setParametersFromXml(configurationXml); 765 }
771 766 dialog->setComboBoxItems(clips);
772 PluginParameterDialog *dialog = new PluginParameterDialog(instance); 767
773 connect(dialog, SIGNAL(pluginConfigurationChanged(QString)), 768 dialog->setLabelText(tr("Set playback clip:"));
774 this, SLOT(pluginConfigurationChanged(QString))); 769
770 QComboBox *cb = dialog->findChild<QComboBox *>();
771 if (cb) cb->setCurrentText(clip);
772
773 connect(dialog, SIGNAL(textValueChanged(QString)),
774 this, SLOT(playClipChanged(QString)));
775 775
776 if (dialog->exec() == QDialog::Accepted) { 776 if (dialog->exec() == QDialog::Accepted) {
777 QString newConfiguration = PluginXml(instance).toXmlString(); 777 QString newClip = dialog->textValue();
778 command->setPlayPluginConfiguration(newConfiguration); 778 command->setPlayClipId(newClip);
779 CommandHistory::getInstance()->addCommand(command, true); 779 CommandHistory::getInstance()->addCommand(command, true);
780 } else { 780 } else {
781 delete command; 781 delete command;
782 // restore in case we mucked about with the configuration 782 // restore in case we mucked about with the configuration
783 // as a consequence of signals from the dialog 783 // as a consequence of signals from the dialog
784 params->setPlayPluginConfiguration(configurationXml); 784 params->setPlayClipId(clip);
785 } 785 }
786 786
787 delete dialog; 787 delete dialog;
788 delete instance; 788 }
789 } 789
790 790 void
791 void 791 PropertyBox::playClipChanged(QString id)
792 PropertyBox::pluginConfigurationChanged(QString configurationXml)
793 { 792 {
794 PlayParameters *params = m_container->getPlayParameters(); 793 PlayParameters *params = m_container->getPlayParameters();
795 if (!params) return; 794 if (!params) return;
796 795
797 params->setPlayPluginConfiguration(configurationXml); 796 params->setPlayClipId(id);
798 } 797 }
799 798
800 void 799 void
801 PropertyBox::layerVisibilityChanged(bool visible) 800 PropertyBox::layerVisibilityChanged(bool visible)
802 { 801 {