// Monitor ruler
layout->addWidget(m_ruler);
// Tool bar buttons
- QToolBar *toolbar = new QToolBar(name, this);
- toolbar->setIconSize(QSize(s, s));
+ m_toolbar = new QToolBar(name, this);
+ m_toolbar->setIconSize(QSize(s, s));
m_playIcon = KIcon("media-playback-start");
m_pauseIcon = KIcon("media-playback-pause");
if (name != "chapter") {
- toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart()));
- toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd()));
+ m_toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart()));
+ m_toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd()));
} else {
m_ruler->setZone(-3, -2);
}
- toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind"), this, SLOT(slotRewind()));
- //toolbar->addAction(KIcon("media-skip-backward"), i18n("Rewind 1 frame"), this, SLOT(slotRewindOneFrame()));
+ m_toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind"), this, SLOT(slotRewind()));
+ //m_toolbar->addAction(KIcon("media-skip-backward"), i18n("Rewind 1 frame"), this, SLOT(slotRewindOneFrame()));
- QToolButton *playButton = new QToolButton(toolbar);
+ QToolButton *playButton = new QToolButton(m_toolbar);
m_playMenu = new QMenu(i18n("Play..."), this);
m_playAction = m_playMenu->addAction(m_playIcon, i18n("Play"));
//m_playAction->setCheckable(true);
playButton->setMenu(m_playMenu);
playButton->setPopupMode(QToolButton::MenuButtonPopup);
- toolbar->addWidget(playButton);
+ m_toolbar->addWidget(playButton);
- //toolbar->addAction(KIcon("media-skip-forward"), i18n("Forward 1 frame"), this, SLOT(slotForwardOneFrame()));
- toolbar->addAction(KIcon("media-seek-forward"), i18n("Forward"), this, SLOT(slotForward()));
+ //m_toolbar->addAction(KIcon("media-skip-forward"), i18n("Forward 1 frame"), this, SLOT(slotForwardOneFrame()));
+ m_toolbar->addAction(KIcon("media-seek-forward"), i18n("Forward"), this, SLOT(slotForward()));
playButton->setDefaultAction(m_playAction);
if (name != "chapter") {
- QToolButton *configButton = new QToolButton(toolbar);
+ QToolButton *configButton = new QToolButton(m_toolbar);
m_configMenu = new QMenu(i18n("Misc..."), this);
configButton->setIcon(KIcon("system-run"));
configButton->setMenu(m_configMenu);
configButton->setPopupMode(QToolButton::QToolButton::InstantPopup);
- toolbar->addWidget(configButton);
+ m_toolbar->addWidget(configButton);
if (name == "clip") {
m_markerMenu = new QMenu(i18n("Go to marker..."), this);
m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo()));
}
+ // Create Volume slider popup
+ m_volumePopup = new QFrame(this, Qt::Popup);
+ QVBoxLayout *poplayout = new QVBoxLayout;
+ poplayout->setContentsMargins(0, 0, 0, 0);
+ m_audioSlider = new QSlider(Qt::Vertical);
+ m_audioSlider->setRange(0, 100);
+ poplayout->addWidget(m_audioSlider);
+ m_volumePopup->setLayout(poplayout);
+ KIcon icon;
+ if (KdenliveSettings::volume() == 0) icon = KIcon("audio-volume-muted");
+ else icon = KIcon("audio-volume-medium");
+
+ m_volumeWidget = m_toolbar->widgetForAction(m_toolbar->addAction(icon, i18n("Audio volume"), this, SLOT(slotShowVolume())));
+
+ // we need to show / hide the popup once so that it's geometry can be calculated in slotShowVolume
+ m_volumePopup->show();
+ m_volumePopup->hide();
+
QWidget *spacer = new QWidget(this);
spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
- toolbar->addWidget(spacer);
+ m_toolbar->addWidget(spacer);
m_timePos = new TimecodeDisplay(m_monitorManager->timecode(), this);
- toolbar->addWidget(m_timePos);
+ m_toolbar->addWidget(m_timePos);
connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotSeek()));
- toolbar->setMaximumHeight(s * 1.5);
- layout->addWidget(toolbar);
+ m_toolbar->setMaximumHeight(s * 1.5);
+ layout->addWidget(m_toolbar);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setLayout(layout);
m_monitorRefresh->setRenderer(render);
}
+ connect(m_audioSlider, SIGNAL(valueChanged(int)), this, SLOT(slotSetVolume(int)));
connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int)));
connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int)));
connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int)));
return m_effectView->isVisible();
}
+void Monitor::slotSetVolume(int volume)
+{
+ KdenliveSettings::setVolume(volume);
+ KIcon icon;
+ if (volume == 0) icon = KIcon("audio-volume-muted");
+ else icon = KIcon("audio-volume-medium");
+ static_cast <QToolButton *>(m_volumeWidget)->setIcon(icon);
+ render->slotSetVolume(volume);
+}
+
+void Monitor::slotShowVolume()
+{
+ m_volumePopup->move(mapToGlobal(m_toolbar->geometry().topLeft()) + QPoint(mapToParent(m_volumeWidget->geometry().bottomLeft()).x(), -m_volumePopup->height()));
+ int vol = render->volume();
+ // Disable widget if we cannot get the volume
+ m_volumePopup->setEnabled(vol != -1);
+ m_audioSlider->blockSignals(true);
+ m_audioSlider->setValue(vol);
+ m_audioSlider->blockSignals(false);
+ m_volumePopup->show();
+}
+
MonitorRefresh::MonitorRefresh(QWidget* parent) :
QWidget(parent)
, m_renderer(NULL)
if (!audioDriver.isEmpty())
m_mltConsumer->set("audio_driver", audioDriver.toUtf8().constData());
- int volume = KdenliveSettings::volume();
- m_mltConsumer->set("volume", (float)volume / 100);
-
m_mltConsumer->set("progressive", 1);
m_mltConsumer->set("audio_buffer", 1024);
m_mltConsumer->set("frequency", 48000);
if (getenv("SDL_VIDEO_YUV_HWACCEL") != NULL && currentDriver == "x11") currentDriver = "x11_noaccel";
QString background = KdenliveSettings::window_background().name();
QString currentBackground = m_mltConsumer->get("window_background");
- int volume = KdenliveSettings::volume();
- int currentVolume = (int)(QString(m_mltConsumer->get("volume")).toDouble() * 100.0);
- if (m_activeProfile == profileName && currentDriver == videoDriver && volume == currentVolume && background == currentBackground) {
+ if (m_activeProfile == profileName && currentDriver == videoDriver && background == currentBackground) {
kDebug() << "reset to same profile, nothing to do";
return 1;
}
} else return -1;
m_mltConsumer->purge();
-
m_isBlocked = true;
if (m_mltProducer) {
m_mltProducer->set_speed(0);
if (producer) {
m_mltProducer = new Mlt::Producer(producer->get_producer());
} else m_mltProducer = m_blackClip->cut(0, 50);
+
/*if (KdenliveSettings::dropbframes()) {
m_mltProducer->set("skip_loop_filter", "all");
m_mltProducer->set("skip_frame", "bidir");
kDebug() << " WARNING - - - - -INVALID PLAYLIST: ";
return -1;
}
-
+ int volume = KdenliveSettings::volume();
+ m_mltProducer->set("meta.volume", (double)volume / 100);
m_fps = m_mltProducer->get_fps();
int error = connectPlaylist();
m_mltProducer = m_blackClip->cut(0, 50);
error = -1;
}
-
+ int volume = KdenliveSettings::volume();
+ m_mltProducer->set("meta.volume", (double)volume / 100);
m_mltProducer->optimise();
/*if (KdenliveSettings::osdtimecode()) {
refresh();
}
-void Render::setVolume(double /*volume*/)
+int Render::volume() const
+{
+ if (!m_mltConsumer || !m_mltProducer) return -1;
+ return ((int) 100 * m_mltProducer->get_double("meta.volume"));
+}
+
+void Render::slotSetVolume(int volume)
{
if (!m_mltConsumer || !m_mltProducer) return;
+ m_mltProducer->set("meta.volume", (double)volume / 100.0);
+ return;
/*osdTimer->stop();
m_mltConsumer->set("refresh", 0);
// Attach filter for on screen display of timecode