void MainWindow::slotConnectMonitors()
{
-
m_projectList->setRenderer(m_projectMonitor->render);
//connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
connect(m_projectList, SIGNAL(deleteProjectClips(QStringList, QMap<QString, QString>)), this, SLOT(slotDeleteProjectClips(QStringList, QMap<QString, QString>)));
m_buttonFitZoom = new KAction(KIcon("zoom-fit-best"), i18n("Fit zoom to project"), this);
toolbar->addAction(m_buttonFitZoom);
m_buttonFitZoom->setCheckable(false);
- connect(m_buttonFitZoom, SIGNAL(triggered()), this, SLOT(slotFitZoom()));
- m_zoomIn = new KAction(KIcon("zoom-in"), i18n("Zoom In"), this);
- toolbar->addAction(m_zoomIn);
- connect(m_zoomIn, SIGNAL(triggered(bool)), this, SLOT(slotZoomIn()));
- m_zoomIn->setShortcut(Qt::CTRL + Qt::Key_Plus);
+ m_zoomOut = new KAction(KIcon("zoom-out"), i18n("Zoom Out"), this);
+ toolbar->addAction(m_zoomOut);
+ m_zoomOut->setShortcut(Qt::CTRL + Qt::Key_Minus);
m_zoomSlider = new QSlider(Qt::Horizontal, this);
m_zoomSlider->setMaximum(13);
m_zoomSlider->setPageStep(1);
+ m_zoomSlider->setInvertedAppearance(true);
m_zoomSlider->setMaximumWidth(150);
m_zoomSlider->setMinimumWidth(100);
toolbar->addWidget(m_zoomSlider);
- m_zoomOut = new KAction(KIcon("zoom-out"), i18n("Zoom Out"), this);
- toolbar->addAction(m_zoomOut);
- connect(m_zoomOut, SIGNAL(triggered(bool)), this, SLOT(slotZoomOut()));
- m_zoomOut->setShortcut(Qt::CTRL + Qt::Key_Minus);
+ m_zoomIn = new KAction(KIcon("zoom-in"), i18n("Zoom In"), this);
+ toolbar->addAction(m_zoomIn);
+ m_zoomIn->setShortcut(Qt::CTRL + Qt::Key_Plus);
actionWidget = toolbar->widgetForAction(m_buttonFitZoom);
actionWidget->setMaximumWidth(max);
actionWidget->setMaximumHeight(max - 4);
actionWidget->setStyleSheet(styleBorderless);
+ connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(slotSetZoom(int)));
+ connect(m_zoomSlider, SIGNAL(sliderMoved(int)), this, SLOT(slotShowZoomSliderToolTip(int)));
+ connect(m_buttonFitZoom, SIGNAL(triggered()), this, SLOT(slotFitZoom()));
+ connect(m_zoomIn, SIGNAL(triggered(bool)), this, SLOT(slotZoomIn()));
+ connect(m_zoomOut, SIGNAL(triggered(bool)), this, SLOT(slotZoomOut()));
+
toolbar->addSeparator();
m_buttonVideoThumbs = new KAction(KIcon("kdenlive-show-videothumb"), i18n("Show video thumbnails"), this);
bool MainWindow::saveFileAs()
{
- // Check that the Kdenlive mime type is correctly installed
- QString mimetype = "application/x-kdenlive";
- KMimeType::Ptr mime = KMimeType::mimeType(mimetype);
- if (!mime) mimetype = "*.kdenlive";
-
- QString outputFile = KFileDialog::getSaveFileName(KUrl(), mimetype);
+ QString outputFile = KFileDialog::getSaveFileName(KUrl(), getMimeType());
if (outputFile.isEmpty()) return false;
if (QFile::exists(outputFile)) {
// Show the file dialog again if the user does not want to overwrite the file
m_startUrl = KUrl();
return;
}
- // Check that the Kdenlive mime type is correctly installed
- QString mimetype = "application/x-kdenlive";
- KMimeType::Ptr mime = KMimeType::mimeType(mimetype);
- if (!mime) mimetype = "*.kdenlive";
-
- KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///projectfolder"), mimetype);
+ KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///projectfolder"), getMimeType());
if (url.isEmpty()) return;
m_fileOpenRecent->addUrl(url);
openFile(url);
disconnect(m_activeTimeline->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, int, QPoint, bool)));
disconnect(m_activeTimeline->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
disconnect(m_activeTimeline->projectView(), SIGNAL(playMonitor()), m_projectMonitor, SLOT(slotPlay()));
- disconnect(m_zoomSlider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, QPoint, const int)));
disconnect(m_activeTimeline, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor()));
connect(trackView->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, int, QPoint, bool)));
connect(trackView->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
m_zoomSlider->setValue(doc->zoom().x());
- connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
connect(trackView->projectView(), SIGNAL(zoomOut()), this, SLOT(slotZoomOut()));
connect(trackView, SIGNAL(setZoom(int)), this, SLOT(slotSetZoom(int)));
&& QApplication::focusWidget()->parentWidget()->parentWidget() == m_projectListDock) {
m_projectList->slotRemoveClip();
- } else if (QApplication::focusWidget()
- && QApplication::focusWidget()->parentWidget()
- && QApplication::focusWidget()->parentWidget()->parentWidget()
- && QApplication::focusWidget()->parentWidget()->parentWidget()->parentWidget()
- && QApplication::focusWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget()
- && QApplication::focusWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget() == m_effectStackDock) {
- // TODO: also delete effect when an effect widget (slider, geomtryval, ...) has focus
- m_effectStack->slotItemDel();
+ } else {
+ QWidget *widget = QApplication::focusWidget();
+ while (widget) {
+ if (widget == m_effectStackDock) {
+ m_effectStack->slotItemDel();
+ return;
+ }
+ widget = widget->parentWidget();
+ }
- } else if (m_activeTimeline) {
- m_activeTimeline->projectView()->deleteSelectedClips();
+ // effect stack has no focus
+ if (m_activeTimeline)
+ m_activeTimeline->projectView()->deleteSelectedClips();
}
}
void MainWindow::slotZoomIn()
{
m_zoomSlider->setValue(m_zoomSlider->value() - 1);
+ slotShowZoomSliderToolTip();
}
void MainWindow::slotZoomOut()
{
m_zoomSlider->setValue(m_zoomSlider->value() + 1);
+ slotShowZoomSliderToolTip();
}
void MainWindow::slotFitZoom()
void MainWindow::slotSetZoom(int value)
{
+ if (m_activeTimeline)
+ m_activeTimeline->slotChangeZoom(value);
+
+ m_zoomOut->setEnabled(value < m_zoomSlider->maximum());
+ m_zoomIn->setEnabled(value > m_zoomSlider->minimum());
+ slotUpdateZoomSliderToolTip(value);
+
+ m_zoomSlider->blockSignals(true);
m_zoomSlider->setValue(value);
+ m_zoomSlider->blockSignals(false);
+}
+
+void MainWindow::slotShowZoomSliderToolTip(int zoomlevel)
+{
+ if (zoomlevel != -1)
+ slotUpdateZoomSliderToolTip(zoomlevel);
+
+ QPoint global = m_zoomSlider->rect().topLeft();
+ global.ry() += m_zoomSlider->height() / 2;
+ QHelpEvent toolTipEvent(QEvent::ToolTip, QPoint(0, 0), m_zoomSlider->mapToGlobal(global));
+ QApplication::sendEvent(m_zoomSlider, &toolTipEvent);
+}
+
+void MainWindow::slotUpdateZoomSliderToolTip(int zoomlevel)
+{
+ m_zoomSlider->setToolTip(i18n("Zoom Level: %1/13", (13 - zoomlevel)));
}
void MainWindow::slotGotProgressInfo(const QString &message, int progress)
void MainWindow::slotDeleteProjectClips(QStringList ids, QMap<QString, QString> folderids)
{
- for (int i = 0; i < ids.size(); ++i) {
- m_activeTimeline->slotDeleteClip(ids.at(i));
+ if (m_activeDocument && m_activeTimeline) {
+ if (!ids.isEmpty()) {
+ for (int i = 0; i < ids.size(); ++i) {
+ m_activeTimeline->slotDeleteClip(ids.at(i));
+ }
+ m_activeDocument->clipManager()->slotDeleteClips(ids);
+ }
+ if (!folderids.isEmpty()) m_projectList->deleteProjectFolder(folderids);
+ m_activeDocument->setModified(true);
}
- m_activeDocument->clipManager()->slotDeleteClips(ids);
- if (!folderids.isEmpty()) m_projectList->deleteProjectFolder(folderids);
-
}
void MainWindow::slotShowTitleBars(bool show)
slotShowTitleBars(!KdenliveSettings::showtitlebars());
}
+QString MainWindow::getMimeType()
+{
+ QString mimetype = "application/x-kdenlive";
+ KMimeType::Ptr mime = KMimeType::mimeType(mimetype);
+ if (!mime) mimetype = "*.kdenlive";
+ return mimetype;
+}
+
#include "mainwindow.moc"