#include <QToolBar>
#include <QDesktopWidget>
#include <QLabel>
+#include <QIntValidator>
Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
m_timePos = new KRestrictedLine(this);
m_timePos->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::MinimumExpanding);
m_frametimecode = KdenliveSettings::frametimecode();
- if (m_frametimecode) m_timePos->setInputMask("999999999");
- else m_timePos->setInputMask("99:99:99:99");
+ if (m_frametimecode) {
+ m_timePos->setInputMask(QString());
+ m_timePos->setValidator(new QIntValidator(this));
+ } else m_timePos->setInputMask("99:99:99:99");
toolbar->addWidget(m_timePos);
connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotSeek()));
QVBoxLayout *rendererBox = new QVBoxLayout(m_ui.video_frame);
rendererBox->setContentsMargins(0, 0, 0, 0);
+#ifdef Q_WS_MAC
+ m_glWidget = new VideoGLWidget(m_ui.video_frame);
+ rendererBox->addWidget(m_glWidget);
+ render = new Render(m_name, (int) m_ui.video_frame->winId(), -1, this);
+ m_glWidget->setImageAspectRatio(render->dar());
+ m_glWidget->setBackgroundColor(KdenliveSettings::window_background());
+ m_glWidget->resize(m_ui.video_frame->size());
+ connect(render, SIGNAL(showImageSignal(QImage)), m_glWidget, SLOT(showImage(QImage)));
+ m_monitorRefresh = 0;
+#else
m_monitorRefresh = new MonitorRefresh(m_ui.video_frame);
rendererBox->addWidget(m_monitorRefresh);
render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, this);
m_monitorRefresh->setRenderer(render);
+#endif
connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int)));
connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int)));
} else {
connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SLOT(setClipZone(QPoint)));
}
+#ifndef Q_WS_MAC
m_monitorRefresh->show();
+#endif
kDebug() << "/////// BUILDING MONITOR, ID: " << m_ui.video_frame->winId();
}
m_contextMenu->addAction(extractFrame);
if (m_name != "clip") {
+#ifndef Q_WS_MAC
QAction *splitView = m_contextMenu->addAction(KIcon("view-split-left-right"), i18n("Split view"), render, SLOT(slotSplitView(bool)));
splitView->setCheckable(true);
m_configMenu->addAction(splitView);
+#endif
} else {
QAction *setThumbFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Set current image as thumbnail"), this, SLOT(slotSetThumbFrame()));
m_configMenu->addAction(setThumbFrame);
{
if (event->modifiers() == Qt::ControlModifier) {
int delta = m_monitorManager->timecode().fps();
- if (event->delta() < 0) delta = 0 - delta;
+ if (event->delta() > 0) delta = 0 - delta;
slotSeek(render->seekFramePosition() - delta);
} else {
- if (event->delta() <= 0) slotForwardOneFrame();
+ if (event->delta() >= 0) slotForwardOneFrame();
else slotRewindOneFrame();
}
}
void Monitor::slotExtractCurrentFrame()
{
- QPixmap frame = render->extractFrame(render->seekFramePosition());
- QString outputFile = KFileDialog::getSaveFileName(KUrl(), "image/png");
- if (!outputFile.isEmpty()) {
- if (QFile::exists(outputFile) && KMessageBox::questionYesNo(this, i18n("File already exists.\nDo you want to overwrite it?")) == KMessageBox::No) return;
- frame.save(outputFile);
+ QImage frame = render->extractFrame(render->seekFramePosition());
+ KFileDialog *fs = new KFileDialog(KUrl(), "image/png",this);
+ fs->setOperationMode(KFileDialog::Saving);
+ fs->setMode(KFile::File);
+ fs->setConfirmOverwrite(true);
+ fs->setKeepLocation(true);
+ fs->exec();
+ QString path = fs->selectedFile();
+ delete fs;
+ if (!path.isEmpty()) {
+ frame.save(path);
}
}
int frames;
if (m_frametimecode) frames = m_timePos->text().toInt();
else frames = m_monitorManager->timecode().getFrameCount(m_timePos->text());
+ //kDebug() << "// / / SEEK TO: " << frames;
slotSeek(frames);
}
KdenliveSettings::setDisplayMonitorInfo(show);
if (show) {
if (m_overlay) return;
+#ifndef Q_WS_MAC
m_overlay = new Overlay(m_monitorRefresh);
m_overlay->raise();
m_overlay->setHidden(true);
+#else
+ m_overlay = new Overlay(m_glWidget);
+#endif
} else {
delete m_overlay;
m_overlay = NULL;
m_frametimecode = KdenliveSettings::frametimecode();
if (m_frametimecode) {
int frames = m_monitorManager->timecode().getFrameCount(m_timePos->text());
- m_timePos->setInputMask("999999999");
+ m_timePos->setValidator(new QIntValidator(this));
+ m_timePos->setInputMask(QString());
m_timePos->setText(QString::number(frames));
} else {
int pos = m_timePos->text().toInt();
+ m_timePos->setValidator(0);
m_timePos->setInputMask("99:99:99:99");
m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(pos));
}