lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2006 Chris Cannam and QMUL. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #include "PropertyBox.h" lbajardsilogic@0: #include "PluginParameterDialog.h" lbajardsilogic@0: lbajardsilogic@0: #include "system/System.h" lbajardsilogic@0: #include "base/PropertyContainer.h" lbajardsilogic@0: #include "base/PlayParameters.h" lbajardsilogic@0: #include "layer/Layer.h" lbajardsilogic@0: #include "base/UnitDatabase.h" lbajardsilogic@0: #include "base/RangeMapper.h" lbajardsilogic@0: lbajardsilogic@0: #include "plugin/RealTimePluginFactory.h" lbajardsilogic@0: #include "plugin/RealTimePluginInstance.h" lbajardsilogic@0: #include "plugin/PluginXml.h" lbajardsilogic@0: lbajardsilogic@182: #include "main/MainWindow.h" lbajardsilogic@229: #include "filter/EqualizerFilter.h" lbajardsilogic@182: lbajardsilogic@0: #include "AudioDial.h" lbajardsilogic@83: #include "Slider.h" lbajardsilogic@0: #include "LEDButton.h" lbajardsilogic@0: lbajardsilogic@0: #include "NotifyingCheckBox.h" lbajardsilogic@0: #include "NotifyingComboBox.h" lbajardsilogic@221: #include "Plotter.h" lbajardsilogic@0: benoitrigolleau@276: #include "LabelForTimeStrechFilter.h" benoitrigolleau@276: lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include benoitrigolleau@276: #include benoitrigolleau@276: #include benoitrigolleau@276: lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: //#define DEBUG_PROPERTY_BOX 1 lbajardsilogic@0: lbajardsilogic@0: PropertyBox::PropertyBox(PropertyContainer *container) : lbajardsilogic@0: m_container(container), lbajardsilogic@0: m_showButton(0), lbajardsilogic@0: m_playButton(0) lbajardsilogic@0: { lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox[" << this << "(\"" << lbajardsilogic@0: container->getPropertyContainerName().toStdString() << "\")]::PropertyBox" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: m_mainBox = new QVBoxLayout; lbajardsilogic@0: setLayout(m_mainBox); lbajardsilogic@0: lbajardsilogic@0: // m_nameWidget = new QLabel; lbajardsilogic@0: // m_mainBox->addWidget(m_nameWidget); lbajardsilogic@0: // m_nameWidget->setText(container->objectName()); lbajardsilogic@0: lbajardsilogic@0: m_mainWidget = new QWidget; lbajardsilogic@0: m_mainBox->addWidget(m_mainWidget); lbajardsilogic@0: m_mainBox->insertStretch(2, 10); lbajardsilogic@0: lbajardsilogic@0: m_viewPlayFrame = 0; lbajardsilogic@0: populateViewPlayFrame(); lbajardsilogic@0: lbajardsilogic@0: m_layout = new QGridLayout; lbajardsilogic@0: m_layout->setMargin(0); lbajardsilogic@0: m_mainWidget->setLayout(m_layout); lbajardsilogic@0: lbajardsilogic@0: PropertyContainer::PropertyList properties = m_container->getProperties(); lbajardsilogic@0: lbajardsilogic@0: blockSignals(true); lbajardsilogic@0: lbajardsilogic@0: size_t i; lbajardsilogic@0: lbajardsilogic@0: for (i = 0; i < properties.size(); ++i) { lbajardsilogic@0: updatePropertyEditor(properties[i]); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: blockSignals(false); lbajardsilogic@0: lbajardsilogic@0: m_layout->setRowStretch(m_layout->rowCount(), 10); lbajardsilogic@0: lbajardsilogic@0: connect(UnitDatabase::getInstance(), SIGNAL(unitDatabaseChanged()), lbajardsilogic@0: this, SLOT(unitDatabaseChanged())); lbajardsilogic@0: lbajardsilogic@183: setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); lbajardsilogic@182: lbajardsilogic@184: setWindowTitle(container->objectName()); lbajardsilogic@184: lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox[" << this << "]::PropertyBox returning" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: PropertyBox::~PropertyBox() lbajardsilogic@0: { lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox[" << this << "]::~PropertyBox" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::populateViewPlayFrame() lbajardsilogic@0: { lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox(" << m_container << ")::populateViewPlayFrame" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: if (m_viewPlayFrame) { lbajardsilogic@0: delete m_viewPlayFrame; lbajardsilogic@0: m_viewPlayFrame = 0; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: if (!m_container) return; lbajardsilogic@0: lbajardsilogic@0: Layer *layer = dynamic_cast(m_container); lbajardsilogic@0: if (layer) { lbajardsilogic@0: disconnect(layer, SIGNAL(modelReplaced()), lbajardsilogic@0: this, SLOT(populateViewPlayFrame())); lbajardsilogic@0: connect(layer, SIGNAL(modelReplaced()), lbajardsilogic@0: this, SLOT(populateViewPlayFrame())); lbajardsilogic@0: } lbajardsilogic@0: benoitrigolleau@58: lbajardsilogic@0: PlayParameters *params = m_container->getPlayParameters(); lbajardsilogic@0: if (!params && !layer) return; lbajardsilogic@0: lbajardsilogic@0: m_viewPlayFrame = new QFrame; lbajardsilogic@0: m_viewPlayFrame->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); lbajardsilogic@0: m_mainBox->addWidget(m_viewPlayFrame); lbajardsilogic@0: lbajardsilogic@0: QHBoxLayout *layout = new QHBoxLayout; lbajardsilogic@0: m_viewPlayFrame->setLayout(layout); lbajardsilogic@0: lbajardsilogic@0: layout->setMargin(layout->margin() / 2); lbajardsilogic@0: lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox::populateViewPlayFrame: container " << m_container << " (name " << m_container->getPropertyContainerName().toStdString() << ") params " << params << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: if (layer) { lbajardsilogic@0: QLabel *showLabel = new QLabel(tr("Show")); lbajardsilogic@0: layout->addWidget(showLabel); lbajardsilogic@0: layout->setAlignment(showLabel, Qt::AlignVCenter); lbajardsilogic@0: lbajardsilogic@0: m_showButton = new LEDButton(Qt::blue); lbajardsilogic@0: layout->addWidget(m_showButton); lbajardsilogic@0: connect(m_showButton, SIGNAL(stateChanged(bool)), lbajardsilogic@0: this, SIGNAL(showLayer(bool))); lbajardsilogic@0: connect(m_showButton, SIGNAL(mouseEntered()), lbajardsilogic@0: this, SLOT(mouseEnteredWidget())); lbajardsilogic@0: connect(m_showButton, SIGNAL(mouseLeft()), lbajardsilogic@0: this, SLOT(mouseLeftWidget())); lbajardsilogic@0: layout->setAlignment(m_showButton, Qt::AlignVCenter); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: if (params) { lbajardsilogic@0: lbajardsilogic@0: QLabel *playLabel = new QLabel(tr("Play")); lbajardsilogic@0: layout->addWidget(playLabel); lbajardsilogic@0: layout->setAlignment(playLabel, Qt::AlignVCenter); lbajardsilogic@0: lbajardsilogic@0: m_playButton = new LEDButton(Qt::darkGreen); lbajardsilogic@0: m_playButton->setState(!params->isPlayMuted()); lbajardsilogic@0: layout->addWidget(m_playButton); lbajardsilogic@0: connect(m_playButton, SIGNAL(stateChanged(bool)), lbajardsilogic@0: params, SLOT(setPlayAudible(bool))); lbajardsilogic@0: connect(m_playButton, SIGNAL(mouseEntered()), lbajardsilogic@0: this, SLOT(mouseEnteredWidget())); lbajardsilogic@0: connect(m_playButton, SIGNAL(mouseLeft()), lbajardsilogic@0: this, SLOT(mouseLeftWidget())); lbajardsilogic@0: connect(params, SIGNAL(playAudibleChanged(bool)), lbajardsilogic@0: m_playButton, SLOT(setState(bool))); lbajardsilogic@0: layout->setAlignment(m_playButton, Qt::AlignVCenter); lbajardsilogic@0: lbajardsilogic@0: layout->insertStretch(-1, 10); lbajardsilogic@0: lbajardsilogic@207: if (params->getPlayPluginId() != "") { lbajardsilogic@207: QPushButton *pluginButton = new QPushButton(QIcon(":icons/faders.png"), ""); lbajardsilogic@207: pluginButton->setObjectName("fadersButton"); lbajardsilogic@207: pluginButton->setToolTip("Plugin parameters"); lbajardsilogic@207: pluginButton->setFixedWidth(24); lbajardsilogic@207: pluginButton->setFixedHeight(24); lbajardsilogic@207: layout->addWidget(pluginButton); lbajardsilogic@207: connect(pluginButton, SIGNAL(clicked()), lbajardsilogic@0: this, SLOT(editPlugin())); lbajardsilogic@207: } lbajardsilogic@0: lbajardsilogic@0: AudioDial *gainDial = new AudioDial; lbajardsilogic@0: layout->addWidget(gainDial); lbajardsilogic@0: gainDial->setMeterColor(Qt::darkRed); lbajardsilogic@0: gainDial->setMinimum(-50); lbajardsilogic@0: gainDial->setMaximum(50); lbajardsilogic@0: gainDial->setPageStep(1); lbajardsilogic@0: gainDial->setFixedWidth(24); lbajardsilogic@0: gainDial->setFixedHeight(24); lbajardsilogic@0: gainDial->setNotchesVisible(false); lbajardsilogic@0: gainDial->setDefaultValue(0); lbajardsilogic@0: gainDial->setObjectName(tr("Playback Gain")); lbajardsilogic@0: gainDial->setRangeMapper(new LinearRangeMapper lbajardsilogic@0: (-50, 50, -25, 25, tr("dB"))); lbajardsilogic@0: gainDial->setShowToolTip(true); lbajardsilogic@0: connect(gainDial, SIGNAL(valueChanged(int)), lbajardsilogic@0: this, SLOT(playGainDialChanged(int))); lbajardsilogic@0: connect(params, SIGNAL(playGainChanged(float)), lbajardsilogic@0: this, SLOT(playGainChanged(float))); lbajardsilogic@0: connect(this, SIGNAL(changePlayGain(float)), lbajardsilogic@0: params, SLOT(setPlayGain(float))); lbajardsilogic@0: connect(this, SIGNAL(changePlayGainDial(int)), lbajardsilogic@0: gainDial, SLOT(setValue(int))); lbajardsilogic@0: connect(gainDial, SIGNAL(mouseEntered()), lbajardsilogic@0: this, SLOT(mouseEnteredWidget())); lbajardsilogic@0: connect(gainDial, SIGNAL(mouseLeft()), lbajardsilogic@0: this, SLOT(mouseLeftWidget())); lbajardsilogic@0: layout->setAlignment(gainDial, Qt::AlignVCenter); lbajardsilogic@0: lbajardsilogic@0: AudioDial *panDial = new AudioDial; lbajardsilogic@0: layout->addWidget(panDial); lbajardsilogic@0: panDial->setMeterColor(Qt::darkGreen); lbajardsilogic@0: panDial->setMinimum(-50); lbajardsilogic@0: panDial->setMaximum(50); lbajardsilogic@0: panDial->setPageStep(1); lbajardsilogic@0: panDial->setFixedWidth(24); lbajardsilogic@0: panDial->setFixedHeight(24); lbajardsilogic@0: panDial->setNotchesVisible(false); lbajardsilogic@0: panDial->setToolTip(tr("Playback Pan / Balance")); lbajardsilogic@0: panDial->setDefaultValue(0); lbajardsilogic@0: panDial->setObjectName(tr("Playback Pan / Balance")); lbajardsilogic@0: panDial->setShowToolTip(true); lbajardsilogic@0: connect(panDial, SIGNAL(valueChanged(int)), lbajardsilogic@0: this, SLOT(playPanDialChanged(int))); lbajardsilogic@0: connect(params, SIGNAL(playPanChanged(float)), lbajardsilogic@0: this, SLOT(playPanChanged(float))); lbajardsilogic@0: connect(this, SIGNAL(changePlayPan(float)), lbajardsilogic@0: params, SLOT(setPlayPan(float))); lbajardsilogic@0: connect(this, SIGNAL(changePlayPanDial(int)), lbajardsilogic@0: panDial, SLOT(setValue(int))); lbajardsilogic@0: connect(panDial, SIGNAL(mouseEntered()), lbajardsilogic@0: this, SLOT(mouseEnteredWidget())); lbajardsilogic@0: connect(panDial, SIGNAL(mouseLeft()), lbajardsilogic@0: this, SLOT(mouseLeftWidget())); lbajardsilogic@0: layout->setAlignment(panDial, Qt::AlignVCenter); lbajardsilogic@0: lbajardsilogic@0: } else { lbajardsilogic@0: lbajardsilogic@0: layout->insertStretch(-1, 10); lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::updatePropertyEditor(PropertyContainer::PropertyName name, lbajardsilogic@0: bool rangeChanged) lbajardsilogic@0: { lbajardsilogic@0: PropertyContainer::PropertyType type = m_container->getPropertyType(name); lbajardsilogic@0: int row = m_layout->rowCount(); lbajardsilogic@0: lbajardsilogic@0: int min = 0, max = 0, value = 0, deflt = 0; lbajardsilogic@0: value = m_container->getPropertyRangeAndValue(name, &min, &max, &deflt); lbajardsilogic@0: lbajardsilogic@0: bool have = (m_propertyControllers.find(name) != lbajardsilogic@0: m_propertyControllers.end()); lbajardsilogic@0: lbajardsilogic@0: QString groupName = m_container->getPropertyGroupName(name); lbajardsilogic@0: QString propertyLabel = m_container->getPropertyLabel(name); lbajardsilogic@0: lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox[" << this lbajardsilogic@0: << "(\"" << m_container->getPropertyContainerName().toStdString() lbajardsilogic@0: << "\")]"; lbajardsilogic@0: std::cerr << "::updatePropertyEditor(\"" << name.toStdString() << "\"):"; lbajardsilogic@0: std::cerr << " value " << value << ", have " << have << ", group \"" lbajardsilogic@0: << groupName.toStdString() << "\"" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: bool inGroup = (groupName != QString()); lbajardsilogic@0: lbajardsilogic@0: if (!have) { lbajardsilogic@0: if (inGroup) { lbajardsilogic@0: if (m_groupLayouts.find(groupName) == m_groupLayouts.end()) { lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox: adding label \"" << groupName.toStdString() << "\" and frame for group for \"" << name.toStdString() << "\"" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: m_layout->addWidget(new QLabel(groupName, m_mainWidget), row, 0); lbajardsilogic@0: QFrame *frame = new QFrame(m_mainWidget); lbajardsilogic@0: m_layout->addWidget(frame, row, 1, 1, 2); lbajardsilogic@0: m_groupLayouts[groupName] = new QHBoxLayout; lbajardsilogic@0: m_groupLayouts[groupName]->setMargin(0); lbajardsilogic@0: frame->setLayout(m_groupLayouts[groupName]); lbajardsilogic@0: } lbajardsilogic@0: } else { lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox: adding label \"" << propertyLabel.toStdString() << "\"" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: m_layout->addWidget(new QLabel(propertyLabel, m_mainWidget), row, 0); lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: switch (type) { lbajardsilogic@0: lbajardsilogic@0: case PropertyContainer::ToggleProperty: lbajardsilogic@0: { lbajardsilogic@0: NotifyingCheckBox *cb; lbajardsilogic@0: lbajardsilogic@0: if (have) { lbajardsilogic@0: cb = dynamic_cast(m_propertyControllers[name]); lbajardsilogic@0: assert(cb); lbajardsilogic@0: } else { lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox: creating new checkbox" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: cb = new NotifyingCheckBox(); lbajardsilogic@0: cb->setObjectName(name); lbajardsilogic@0: connect(cb, SIGNAL(stateChanged(int)), lbajardsilogic@0: this, SLOT(propertyControllerChanged(int))); lbajardsilogic@0: connect(cb, SIGNAL(mouseEntered()), lbajardsilogic@0: this, SLOT(mouseEnteredWidget())); lbajardsilogic@0: connect(cb, SIGNAL(mouseLeft()), lbajardsilogic@0: this, SLOT(mouseLeftWidget())); lbajardsilogic@0: if (inGroup) { lbajardsilogic@221: cb->setToolTip(propertyLabel); lbajardsilogic@221: m_groupLayouts[groupName]->addWidget(cb); lbajardsilogic@0: } else { lbajardsilogic@221: m_layout->addWidget(cb, row, 1, 1, 2); lbajardsilogic@0: } lbajardsilogic@0: m_propertyControllers[name] = cb; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: if (cb->isChecked() != (value > 0)) { lbajardsilogic@0: cb->blockSignals(true); lbajardsilogic@0: cb->setChecked(value > 0); lbajardsilogic@0: cb->blockSignals(false); lbajardsilogic@0: } lbajardsilogic@0: break; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@83: /* case PropertyContainer::RangeProperty: lbajardsilogic@0: { lbajardsilogic@83: AudioDial *dial; lbajardsilogic@0: lbajardsilogic@83: if (have) { lbajardsilogic@83: dial = dynamic_cast(m_propertyControllers[name]); lbajardsilogic@83: assert(dial); lbajardsilogic@83: if (rangeChanged) { lbajardsilogic@83: dial->blockSignals(true); lbajardsilogic@83: dial->setMinimum(min); lbajardsilogic@83: dial->setMaximum(max); lbajardsilogic@83: dial->setRangeMapper(m_container->getNewPropertyRangeMapper(name)); lbajardsilogic@83: dial->blockSignals(false); lbajardsilogic@83: } lbajardsilogic@83: lbajardsilogic@83: } else { lbajardsilogic@83: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@83: std::cerr << "PropertyBox: creating new dial" << std::endl; lbajardsilogic@83: #endif lbajardsilogic@83: dial = new AudioDial(); lbajardsilogic@83: dial->setObjectName(name); lbajardsilogic@83: dial->setMinimum(min); lbajardsilogic@83: dial->setMaximum(max); lbajardsilogic@83: dial->setPageStep(1); lbajardsilogic@83: dial->setNotchesVisible((max - min) <= 12); lbajardsilogic@83: dial->setDefaultValue(deflt); lbajardsilogic@83: dial->setRangeMapper(m_container->getNewPropertyRangeMapper(name)); lbajardsilogic@83: dial->setShowToolTip(true); lbajardsilogic@83: connect(dial, SIGNAL(valueChanged(int)), lbajardsilogic@83: this, SLOT(propertyControllerChanged(int))); lbajardsilogic@83: connect(dial, SIGNAL(mouseEntered()), lbajardsilogic@83: this, SLOT(mouseEnteredWidget())); lbajardsilogic@83: connect(dial, SIGNAL(mouseLeft()), lbajardsilogic@83: this, SLOT(mouseLeftWidget())); lbajardsilogic@0: lbajardsilogic@83: if (inGroup) { lbajardsilogic@83: dial->setFixedWidth(24); lbajardsilogic@83: dial->setFixedHeight(24); lbajardsilogic@83: m_groupLayouts[groupName]->addWidget(dial); lbajardsilogic@83: } else { lbajardsilogic@83: dial->setFixedWidth(32); lbajardsilogic@83: dial->setFixedHeight(32); lbajardsilogic@83: m_layout->addWidget(dial, row, 1); lbajardsilogic@83: QLabel *label = new QLabel(m_mainWidget); lbajardsilogic@83: connect(dial, SIGNAL(valueChanged(int)), lbajardsilogic@83: label, SLOT(setNum(int))); lbajardsilogic@83: label->setNum(value); lbajardsilogic@83: m_layout->addWidget(label, row, 2); lbajardsilogic@83: } lbajardsilogic@0: lbajardsilogic@83: m_propertyControllers[name] = dial; lbajardsilogic@83: } lbajardsilogic@83: lbajardsilogic@83: if (dial->value() != value) { lbajardsilogic@83: dial->blockSignals(true); lbajardsilogic@83: dial->setValue(value); lbajardsilogic@83: dial->blockSignals(false); lbajardsilogic@83: } lbajardsilogic@83: break; lbajardsilogic@83: }*/ lbajardsilogic@83: case PropertyContainer::RangeProperty: benoitrigolleau@276: case PropertyContainer::RangePropertyWithLabel: lbajardsilogic@83: { lbajardsilogic@83: Slider *slider; lbajardsilogic@83: lbajardsilogic@83: if (have) { lbajardsilogic@83: slider = dynamic_cast(m_propertyControllers[name]); lbajardsilogic@83: assert(slider); lbajardsilogic@83: if (rangeChanged) { lbajardsilogic@83: slider->blockSignals(true); lbajardsilogic@83: slider->setMinimum(min); lbajardsilogic@83: slider->setMaximum(max); lbajardsilogic@83: slider->blockSignals(false); lbajardsilogic@83: } lbajardsilogic@83: lbajardsilogic@83: } else { lbajardsilogic@83: slider = new Slider(Qt::Horizontal); lbajardsilogic@83: slider->setObjectName(name); lbajardsilogic@83: slider->setMinimum(min); lbajardsilogic@83: slider->setMaximum(max); lbajardsilogic@83: slider->setPageStep(1); lbajardsilogic@206: slider->setShowToolTip(true); lbajardsilogic@83: connect(slider, SIGNAL(valueChanged(int)), lbajardsilogic@83: this, SLOT(propertyControllerChanged(int))); lbajardsilogic@83: connect(slider, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); lbajardsilogic@83: connect(slider, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); lbajardsilogic@83: lbajardsilogic@83: if (inGroup) { lbajardsilogic@232: slider->setOrientation(Qt::Vertical); lbajardsilogic@83: slider->setFixedWidth(48); lbajardsilogic@232: slider->setFixedHeight(100); benoitrigolleau@277: benoitrigolleau@277: //HotFIX for the equalizer benoitrigolleau@277: benoitrigolleau@277: if(groupName==" "){ benoitrigolleau@277: slider->setShowToolTip(false); benoitrigolleau@277: slider->useLabel(false); benoitrigolleau@277: QWidget *widaux = new QWidget; benoitrigolleau@277: QGridLayout *equalizerLayout = new QGridLayout(); benoitrigolleau@277: equalizerLayout->setMargin(1); benoitrigolleau@277: equalizerLayout->setSpacing(0); benoitrigolleau@277: benoitrigolleau@277: widaux->setLayout(equalizerLayout); benoitrigolleau@277: equalizerLayout->addWidget(new QLabel("+6db"),0,0,Qt::AlignBottom); benoitrigolleau@277: equalizerLayout->addWidget(new QLabel("-inf"),2,0,Qt::AlignTop); benoitrigolleau@277: equalizerLayout->addWidget(slider,1,0,1,1,Qt::AlignLeft); benoitrigolleau@277: benoitrigolleau@277: m_groupLayouts[groupName]->addWidget(widaux); benoitrigolleau@277: }else{ benoitrigolleau@277: m_groupLayouts[groupName]->addWidget(slider); benoitrigolleau@277: } lbajardsilogic@235: connect(m_container, SIGNAL(enableDrawCurve(bool)), slider, SLOT(setDisabled(bool))); benoitrigolleau@277: // lbajardsilogic@83: } else { lbajardsilogic@83: slider->setFixedWidth(100); lbajardsilogic@83: slider->setFixedHeight(32); lbajardsilogic@83: m_layout->addWidget(slider, row, 1); lbajardsilogic@83: } benoitrigolleau@276: //HoTFIX to add a dynamique label for the TimeStrechFilter benoitrigolleau@276: if(type==PropertyContainer::RangePropertyWithLabel){ benoitrigolleau@276: if(propertyLabel=="Time"){ benoitrigolleau@276: m_layout->addWidget(new QLabel("% "), row, 2); benoitrigolleau@276: m_layout->addWidget(new QLabel(tr("Tempo")), row, 3); benoitrigolleau@276: LabelForTimeStrechFilter* lab = new LabelForTimeStrechFilter(); benoitrigolleau@276: lab->setType(0); benoitrigolleau@276: connect(slider,SIGNAL(valueChanged(int)),lab,SLOT(setValue(int))); benoitrigolleau@276: m_layout->addWidget(lab,row,4); benoitrigolleau@276: }else if(propertyLabel=="Pitch"){ benoitrigolleau@276: m_layout->addWidget(new QLabel("% "), row, 2); benoitrigolleau@276: m_layout->addWidget(new QLabel(tr("Semitones")), row, 3); benoitrigolleau@276: LabelForTimeStrechFilter* lab = new LabelForTimeStrechFilter(); benoitrigolleau@276: lab->setType(1); benoitrigolleau@276: connect(slider,SIGNAL(valueChanged(int)),lab,SLOT(setValue(int))); benoitrigolleau@276: m_layout->addWidget(lab,row,4); benoitrigolleau@276: } benoitrigolleau@276: } benoitrigolleau@276: // lbajardsilogic@83: lbajardsilogic@83: m_propertyControllers[name] = slider; lbajardsilogic@83: } lbajardsilogic@83: lbajardsilogic@83: if (slider->value() != value) { lbajardsilogic@203: //slider->blockSignals(true); lbajardsilogic@83: slider->setValue(value); lbajardsilogic@203: //slider->blockSignals(false); lbajardsilogic@83: } lbajardsilogic@83: break; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: case PropertyContainer::ValueProperty: lbajardsilogic@0: case PropertyContainer::UnitsProperty: lbajardsilogic@0: { lbajardsilogic@0: NotifyingComboBox *cb; lbajardsilogic@0: lbajardsilogic@0: if (have) { lbajardsilogic@0: cb = dynamic_cast(m_propertyControllers[name]); lbajardsilogic@0: assert(cb); lbajardsilogic@0: } else { lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox: creating new combobox" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: cb = new NotifyingComboBox(); lbajardsilogic@0: cb->setObjectName(name); lbajardsilogic@0: cb->setDuplicatesEnabled(false); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: if (!have || rangeChanged) { lbajardsilogic@0: cb->blockSignals(true); lbajardsilogic@0: cb->clear(); lbajardsilogic@0: if (type == PropertyContainer::ValueProperty) { lbajardsilogic@0: for (int i = min; i <= max; ++i) { lbajardsilogic@0: cb->addItem(m_container->getPropertyValueLabel(name, i)); lbajardsilogic@0: } lbajardsilogic@0: cb->setEditable(false); lbajardsilogic@0: } else { lbajardsilogic@0: QStringList units = UnitDatabase::getInstance()->getKnownUnits(); lbajardsilogic@0: for (int i = 0; i < units.size(); ++i) { lbajardsilogic@0: cb->addItem(units[i]); lbajardsilogic@0: } lbajardsilogic@0: cb->setEditable(true); lbajardsilogic@0: } lbajardsilogic@0: cb->blockSignals(false); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: if (!have) { lbajardsilogic@0: connect(cb, SIGNAL(activated(int)), lbajardsilogic@0: this, SLOT(propertyControllerChanged(int))); lbajardsilogic@0: connect(cb, SIGNAL(mouseEntered()), lbajardsilogic@0: this, SLOT(mouseEnteredWidget())); lbajardsilogic@0: connect(cb, SIGNAL(mouseLeft()), lbajardsilogic@0: this, SLOT(mouseLeftWidget())); lbajardsilogic@0: lbajardsilogic@0: if (inGroup) { lbajardsilogic@0: cb->setToolTip(propertyLabel); lbajardsilogic@0: m_groupLayouts[groupName]->addWidget(cb); lbajardsilogic@0: } else { lbajardsilogic@0: m_layout->addWidget(cb, row, 1, 1, 2); lbajardsilogic@0: } lbajardsilogic@0: m_propertyControllers[name] = cb; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: cb->blockSignals(true); lbajardsilogic@0: if (type == PropertyContainer::ValueProperty) { lbajardsilogic@0: if (cb->currentIndex() != value) { lbajardsilogic@0: cb->setCurrentIndex(value); lbajardsilogic@0: } lbajardsilogic@0: } else { lbajardsilogic@0: QString unit = UnitDatabase::getInstance()->getUnitById(value); lbajardsilogic@0: if (cb->currentText() != unit) { lbajardsilogic@0: for (int i = 0; i < cb->count(); ++i) { lbajardsilogic@0: if (cb->itemText(i) == unit) { lbajardsilogic@0: cb->setCurrentIndex(i); lbajardsilogic@0: break; lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: cb->blockSignals(false); lbajardsilogic@0: lbajardsilogic@0: #ifdef Q_WS_MAC lbajardsilogic@0: // Crashes on startup without this, for some reason lbajardsilogic@0: cb->setMinimumSize(QSize(10, 10)); lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: break; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@221: case PropertyContainer::PlotProperty: lbajardsilogic@221: { lbajardsilogic@221: Plotter* cb; lbajardsilogic@221: lbajardsilogic@221: if (have) { lbajardsilogic@221: cb = dynamic_cast(m_propertyControllers[name]); lbajardsilogic@221: assert(cb); lbajardsilogic@221: } else { lbajardsilogic@221: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@221: std::cerr << "PropertyBox: creating new Plotter" << std::endl; lbajardsilogic@221: #endif lbajardsilogic@221: lbajardsilogic@221: cb = new Plotter(); lbajardsilogic@221: cb->setObjectName(name); lbajardsilogic@221: //cb->setDuplicatesEnabled(false); lbajardsilogic@221: } lbajardsilogic@221: lbajardsilogic@221: /*if (!have || rangeChanged) { lbajardsilogic@221: cb->blockSignals(true); lbajardsilogic@221: cb->clear(); lbajardsilogic@221: if (type == PropertyContainer::ValueProperty) { lbajardsilogic@221: for (int i = min; i <= max; ++i) { lbajardsilogic@221: cb->addItem(m_container->getPropertyValueLabel(name, i)); lbajardsilogic@221: } lbajardsilogic@221: cb->setEditable(false); lbajardsilogic@221: } else { lbajardsilogic@221: QStringList units = UnitDatabase::getInstance()->getKnownUnits(); lbajardsilogic@221: for (int i = 0; i < units.size(); ++i) { lbajardsilogic@221: cb->addItem(units[i]); lbajardsilogic@221: } lbajardsilogic@221: cb->setEditable(true); lbajardsilogic@221: } lbajardsilogic@221: cb->blockSignals(false); lbajardsilogic@221: }*/ lbajardsilogic@221: lbajardsilogic@221: if (!have) { lbajardsilogic@233: connect(cb, SIGNAL(filterChanged(QVector&)), this, SLOT(propertyControllerChanged(QVector&))); lbajardsilogic@229: connect(m_container, SIGNAL(signalChanged(float*)), cb, SLOT(setCurve(float*))); benoitrigolleau@240: connect(m_container, SIGNAL(enableDrawCurve(bool)), cb, SLOT(enableDrawCurve(bool))); lbajardsilogic@232: connect(m_container, SIGNAL(filterChanged(float*)), cb, SLOT(setFilter(float*))); lbajardsilogic@229: connect(cb, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); lbajardsilogic@221: connect(cb, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); lbajardsilogic@221: lbajardsilogic@221: if (inGroup) { lbajardsilogic@221: cb->setToolTip(propertyLabel); lbajardsilogic@221: m_groupLayouts[groupName]->addWidget(cb); lbajardsilogic@221: } else { lbajardsilogic@221: m_layout->addWidget(cb, row, 0, 1, 2); lbajardsilogic@221: } lbajardsilogic@221: m_propertyControllers[name] = cb; lbajardsilogic@221: } lbajardsilogic@221: lbajardsilogic@221: /*cb->blockSignals(true); lbajardsilogic@221: if (type == PropertyContainer::ValueProperty) { lbajardsilogic@221: if (cb->currentIndex() != value) { lbajardsilogic@221: cb->setCurrentIndex(value); lbajardsilogic@221: } lbajardsilogic@221: } else { lbajardsilogic@221: QString unit = UnitDatabase::getInstance()->getUnitById(value); lbajardsilogic@221: if (cb->currentText() != unit) { lbajardsilogic@221: for (int i = 0; i < cb->count(); ++i) { lbajardsilogic@221: if (cb->itemText(i) == unit) { lbajardsilogic@221: cb->setCurrentIndex(i); lbajardsilogic@221: break; lbajardsilogic@221: } lbajardsilogic@221: } lbajardsilogic@221: } lbajardsilogic@221: } lbajardsilogic@221: cb->blockSignals(false); lbajardsilogic@221: lbajardsilogic@221: #ifdef Q_WS_MAC lbajardsilogic@221: // Crashes on startup without this, for some reason lbajardsilogic@221: cb->setMinimumSize(QSize(10, 10)); lbajardsilogic@221: #endif lbajardsilogic@221: */ lbajardsilogic@221: break; lbajardsilogic@221: } lbajardsilogic@0: default: lbajardsilogic@0: break; lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::propertyContainerPropertyChanged(PropertyContainer *pc) lbajardsilogic@0: { lbajardsilogic@0: if (pc != m_container) return; lbajardsilogic@0: lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox::propertyContainerPropertyChanged" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: PropertyContainer::PropertyList properties = m_container->getProperties(); lbajardsilogic@0: size_t i; lbajardsilogic@0: lbajardsilogic@0: blockSignals(true); lbajardsilogic@0: lbajardsilogic@0: for (i = 0; i < properties.size(); ++i) { lbajardsilogic@0: updatePropertyEditor(properties[i]); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: blockSignals(false); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::propertyContainerPropertyRangeChanged(PropertyContainer *) lbajardsilogic@0: { lbajardsilogic@0: blockSignals(true); lbajardsilogic@0: lbajardsilogic@0: PropertyContainer::PropertyList properties = m_container->getProperties(); lbajardsilogic@0: for (size_t i = 0; i < properties.size(); ++i) { lbajardsilogic@0: updatePropertyEditor(properties[i], true); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: blockSignals(false); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::unitDatabaseChanged() lbajardsilogic@0: { lbajardsilogic@0: blockSignals(true); lbajardsilogic@0: lbajardsilogic@0: PropertyContainer::PropertyList properties = m_container->getProperties(); lbajardsilogic@0: for (size_t i = 0; i < properties.size(); ++i) { lbajardsilogic@0: updatePropertyEditor(properties[i]); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: blockSignals(false); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::propertyControllerChanged(int value) lbajardsilogic@0: { lbajardsilogic@0: QObject *obj = sender(); lbajardsilogic@0: QString name = obj->objectName(); lbajardsilogic@0: lbajardsilogic@0: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@0: std::cerr << "PropertyBox::propertyControllerChanged(" << name.toStdString() lbajardsilogic@0: << ", " << value << ")" << std::endl; lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: PropertyContainer::PropertyType type = m_container->getPropertyType(name); lbajardsilogic@0: lbajardsilogic@0: if (type == PropertyContainer::UnitsProperty) { lbajardsilogic@0: NotifyingComboBox *cb = dynamic_cast(obj); lbajardsilogic@0: if (cb) { lbajardsilogic@0: QString unit = cb->currentText(); lbajardsilogic@0: m_container->setPropertyWithCommand lbajardsilogic@0: (name, UnitDatabase::getInstance()->getUnitId(unit)); lbajardsilogic@0: } lbajardsilogic@0: } else if (type != PropertyContainer::InvalidProperty) { lbajardsilogic@0: m_container->setPropertyWithCommand(name, value); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: updateContextHelp(obj); lbajardsilogic@0: } lbajardsilogic@229: lbajardsilogic@229: void lbajardsilogic@233: PropertyBox::propertyControllerChanged(QVector &value) lbajardsilogic@229: { lbajardsilogic@229: QObject *obj = sender(); lbajardsilogic@229: QString name = obj->objectName(); lbajardsilogic@229: lbajardsilogic@229: #ifdef DEBUG_PROPERTY_BOX lbajardsilogic@229: std::cerr << "PropertyBox::propertyControllerChanged(" << name.toStdString() lbajardsilogic@229: << ", " << value << ")" << std::endl; lbajardsilogic@229: #endif lbajardsilogic@229: lbajardsilogic@229: PropertyContainer::PropertyType type = m_container->getPropertyType(name); lbajardsilogic@229: lbajardsilogic@229: if (type == PropertyContainer::PlotProperty) { lbajardsilogic@229: m_container->setProperty(name, value); lbajardsilogic@229: } lbajardsilogic@229: lbajardsilogic@229: updateContextHelp(obj); lbajardsilogic@229: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::playGainChanged(float gain) lbajardsilogic@0: { lbajardsilogic@0: int dialValue = lrint(log10(gain) * 20.0); lbajardsilogic@0: if (dialValue < -50) dialValue = -50; lbajardsilogic@0: if (dialValue > 50) dialValue = 50; lbajardsilogic@0: emit changePlayGainDial(dialValue); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::playGainDialChanged(int dialValue) lbajardsilogic@0: { lbajardsilogic@0: QObject *obj = sender(); lbajardsilogic@0: float gain = pow(10, float(dialValue) / 20.0); lbajardsilogic@0: emit changePlayGain(gain); lbajardsilogic@0: updateContextHelp(obj); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::playPanChanged(float pan) lbajardsilogic@0: { lbajardsilogic@0: int dialValue = lrint(pan * 50.0); lbajardsilogic@0: if (dialValue < -50) dialValue = -50; lbajardsilogic@0: if (dialValue > 50) dialValue = 50; lbajardsilogic@0: emit changePlayPanDial(dialValue); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::playPanDialChanged(int dialValue) lbajardsilogic@0: { lbajardsilogic@0: QObject *obj = sender(); lbajardsilogic@0: float pan = float(dialValue) / 50.0; lbajardsilogic@0: if (pan < -1.0) pan = -1.0; lbajardsilogic@0: if (pan > 1.0) pan = 1.0; lbajardsilogic@0: emit changePlayPan(pan); lbajardsilogic@0: updateContextHelp(obj); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::editPlugin() lbajardsilogic@0: { lbajardsilogic@0: //!!! should probably just emit and let something else do this lbajardsilogic@0: lbajardsilogic@0: PlayParameters *params = m_container->getPlayParameters(); lbajardsilogic@0: if (!params) return; lbajardsilogic@0: lbajardsilogic@0: QString pluginId = params->getPlayPluginId(); lbajardsilogic@0: QString configurationXml = params->getPlayPluginConfiguration(); lbajardsilogic@0: lbajardsilogic@0: RealTimePluginFactory *factory = lbajardsilogic@0: RealTimePluginFactory::instanceFor(pluginId); lbajardsilogic@0: if (!factory) return; lbajardsilogic@0: lbajardsilogic@0: RealTimePluginInstance *instance = lbajardsilogic@0: factory->instantiatePlugin(pluginId, 0, 0, 48000, 1024, 1); lbajardsilogic@0: if (!instance) return; lbajardsilogic@0: lbajardsilogic@0: PluginXml(instance).setParametersFromXml(configurationXml); lbajardsilogic@0: lbajardsilogic@0: PluginParameterDialog *dialog = new PluginParameterDialog(instance); lbajardsilogic@0: connect(dialog, SIGNAL(pluginConfigurationChanged(QString)), lbajardsilogic@0: this, SLOT(pluginConfigurationChanged(QString))); lbajardsilogic@0: lbajardsilogic@0: if (dialog->exec() == QDialog::Accepted) { lbajardsilogic@0: params->setPlayPluginConfiguration(PluginXml(instance).toXmlString()); lbajardsilogic@0: } else { lbajardsilogic@0: // restore in case we mucked about with the configuration lbajardsilogic@0: // as a consequence of signals from the dialog lbajardsilogic@0: params->setPlayPluginConfiguration(configurationXml); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: delete dialog; lbajardsilogic@0: delete instance; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::pluginConfigurationChanged(QString configurationXml) lbajardsilogic@0: { lbajardsilogic@0: PlayParameters *params = m_container->getPlayParameters(); lbajardsilogic@0: if (!params) return; lbajardsilogic@0: lbajardsilogic@0: params->setPlayPluginConfiguration(configurationXml); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::layerVisibilityChanged(bool visible) lbajardsilogic@0: { lbajardsilogic@0: if (m_showButton) m_showButton->setState(visible); lbajardsilogic@0: } lbajardsilogic@0: benoitrigolleau@57: void PropertyBox::layerVisibilityChanged(int value){ benoitrigolleau@57: if (m_showButton){ benoitrigolleau@57: if(value==Qt::Checked){ benoitrigolleau@57: m_showButton->setState(true); benoitrigolleau@57: emit(showLayer(true)); benoitrigolleau@57: }else if(value == Qt::Unchecked){ benoitrigolleau@57: m_showButton->setState(false); benoitrigolleau@57: emit(showLayer(false)); benoitrigolleau@57: } benoitrigolleau@57: benoitrigolleau@57: } benoitrigolleau@57: } benoitrigolleau@57: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::mouseEnteredWidget() lbajardsilogic@0: { lbajardsilogic@0: updateContextHelp(sender()); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::updateContextHelp(QObject *o) lbajardsilogic@0: { lbajardsilogic@0: QWidget *w = dynamic_cast(o); lbajardsilogic@0: if (!w) return; lbajardsilogic@0: lbajardsilogic@0: if (!m_container) return; lbajardsilogic@0: QString cname = m_container->getPropertyContainerName(); lbajardsilogic@0: if (cname == "") return; lbajardsilogic@0: lbajardsilogic@0: QString wname = w->objectName(); lbajardsilogic@0: lbajardsilogic@0: QString extraText; lbajardsilogic@0: AudioDial *dial = dynamic_cast(w); lbajardsilogic@0: if (dial) { lbajardsilogic@0: float mv = dial->mappedValue(); lbajardsilogic@0: QString unit = ""; lbajardsilogic@0: if (dial->rangeMapper()) unit = dial->rangeMapper()->getUnit(); lbajardsilogic@0: if (unit != "") { lbajardsilogic@0: extraText = tr(" (current value: %1%2)").arg(mv).arg(unit); lbajardsilogic@0: } else { lbajardsilogic@0: extraText = tr(" (current value: %1)").arg(mv); lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@206: Slider *slider = dynamic_cast(w); lbajardsilogic@206: if (slider) { lbajardsilogic@206: float mv = slider->value(); lbajardsilogic@206: QString unit = ""; lbajardsilogic@206: //if (slider->rangeMapper()) unit = slider->rangeMapper()->getUnit(); lbajardsilogic@206: if (unit != "") { lbajardsilogic@206: extraText = tr(" (current value: %1%2)").arg(mv).arg(unit); lbajardsilogic@206: } else { lbajardsilogic@206: extraText = tr(" (current value: %1)").arg(mv); lbajardsilogic@206: } lbajardsilogic@206: } lbajardsilogic@206: lbajardsilogic@0: if (w == m_showButton) { lbajardsilogic@0: emit contextHelpChanged(tr("Toggle Visibility of %1").arg(cname)); lbajardsilogic@0: } else if (w == m_playButton) { lbajardsilogic@0: emit contextHelpChanged(tr("Toggle Playback of %1").arg(cname)); lbajardsilogic@0: } else if (wname == "") { lbajardsilogic@0: return; lbajardsilogic@0: } else if (dynamic_cast(w)) { lbajardsilogic@0: emit contextHelpChanged(tr("Toggle %1 property of %2") lbajardsilogic@0: .arg(wname).arg(cname)); lbajardsilogic@0: } else { lbajardsilogic@0: emit contextHelpChanged(tr("Adjust %1 property of %2%3") lbajardsilogic@0: .arg(wname).arg(cname).arg(extraText)); lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: PropertyBox::mouseLeftWidget() lbajardsilogic@0: { lbajardsilogic@0: if (!(QApplication::mouseButtons() & Qt::LeftButton)) { lbajardsilogic@0: emit contextHelpChanged(""); lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@183: void PropertyBox::showNormal() lbajardsilogic@183: { lbajardsilogic@183: if (!isVisible()) lbajardsilogic@183: { lbajardsilogic@183: move(MainWindow::instance()->pos().x() + 3*MainWindow::instance()->width()/4, lbajardsilogic@183: MainWindow::instance()->pos().y() + 3*MainWindow::instance()->height()/5); lbajardsilogic@183: } lbajardsilogic@183: QWidget::showNormal(); lbajardsilogic@183: activateWindow(); lbajardsilogic@183: } lbajardsilogic@0: benoitrigolleau@57: LEDButton* PropertyBox::showButton(){ benoitrigolleau@57: return m_showButton; benoitrigolleau@57: } benoitrigolleau@57: LEDButton* PropertyBox::playButton(){ benoitrigolleau@57: return m_playButton; benoitrigolleau@57: } benoitrigolleau@58: benoitrigolleau@58: PropertyContainer* PropertyBox::container(){ benoitrigolleau@58: return m_container; benoitrigolleau@58: } lbajardsilogic@183: