QMenu *clipInTimeline = static_cast<QMenu*>(factory()->container("clip_in_timeline", this));
clipInTimeline->setIcon(KIcon("go-jump"));
- QHash<QString,QMenu*> menus;
- menus.insert("addMenu",static_cast<QMenu*>(factory()->container("generators", this)));
- menus.insert("extractAudioMenu",static_cast<QMenu*>(factory()->container("extract_audio", this)));
- menus.insert("transcodeMenu",static_cast<QMenu*>(factory()->container("transcoders", this)));
- menus.insert("clipActionsMenu",static_cast<QMenu*>(factory()->container("clip_actions", this)));
- menus.insert("inTimelineMenu",clipInTimeline);
+ QHash<QString,QMenu*> menus;
+ menus.insert("addMenu",static_cast<QMenu*>(factory()->container("generators", this)));
+ menus.insert("extractAudioMenu",static_cast<QMenu*>(factory()->container("extract_audio", this)));
+ menus.insert("transcodeMenu",static_cast<QMenu*>(factory()->container("transcoders", this)));
+ menus.insert("clipActionsMenu",static_cast<QMenu*>(factory()->container("clip_actions", this)));
+ menus.insert("inTimelineMenu",clipInTimeline);
m_projectList->setupGeneratorMenu(menus);
// build themes menus
slotConnectMonitors();
- // Open or create a file. Command line argument passed in Url has
- // precedence, then "openlastproject", then just a plain empty file.
- // If opening Url fails, openlastproject will _not_ be used.
- if (!Url.isEmpty()) {
- // delay loading so that the window shows up
- m_startUrl = Url;
- QTimer::singleShot(500, this, SLOT(openFile()));
- } else if (KdenliveSettings::openlastproject()) {
- QTimer::singleShot(500, this, SLOT(openLastFile()));
- } else { //if (m_timelineArea->count() == 0) {
- newFile(false);
- }
-
- if (!clipsToLoad.isEmpty() && m_activeDocument) {
- QStringList list = clipsToLoad.split(',');
- QList <QUrl> urls;
- foreach(const QString &path, list) {
- kDebug() << QDir::current().absoluteFilePath(path);
- urls << QUrl::fromLocalFile(QDir::current().absoluteFilePath(path));
- }
- m_projectList->slotAddClip(urls);
- }
-
#ifdef USE_JOGSHUTTLE
activateShuttleDevice();
#endif
}
connect (KGlobalSettings::self(), SIGNAL(kdisplayPaletteChanged()), this, SLOT(slotChangePalette()));
+
+ // Open or create a file. Command line argument passed in Url has
+ // precedence, then "openlastproject", then just a plain empty file.
+ // If opening Url fails, openlastproject will _not_ be used.
+ if (!Url.isEmpty()) {
+ // delay loading so that the window shows up
+ m_startUrl = Url;
+ QTimer::singleShot(500, this, SLOT(openFile()));
+ } else if (KdenliveSettings::openlastproject()) {
+ QTimer::singleShot(500, this, SLOT(openLastFile()));
+ } else { //if (m_timelineArea->count() == 0) {
+ newFile(false);
+ }
+
+ if (!clipsToLoad.isEmpty() && m_activeDocument) {
+ QStringList list = clipsToLoad.split(',');
+ QList <QUrl> urls;
+ foreach(const QString &path, list) {
+ kDebug() << QDir::current().absoluteFilePath(path);
+ urls << QUrl::fromLocalFile(QDir::current().absoluteFilePath(path));
+ }
+ m_projectList->slotAddClip(urls);
+ }
+
}
MainWindow::~MainWindow()
if (m_stopmotion) {
delete m_stopmotion;
}
+
+#ifdef USE_JOGSHUTTLE
+ if (m_jogProcess)
+ delete m_jogProcess;
+#endif
+
m_effectStack->slotClipItemSelected(NULL);
m_transitionConfig->slotTransitionItemSelected(NULL, 0, QPoint(), false);
connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QString &, int, int)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QString &, int, int)));
connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QImage &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QImage &)));
- kDebug()<<" - - - - - -\n CONNECTED REPLY";
connect(m_projectMonitor->render, SIGNAL(replyGetFileProperties(const QString &, Mlt::Producer*, const stringMap &, const stringMap &, bool)), m_projectList, SLOT(slotReplyGetFileProperties(const QString &, Mlt::Producer*, const stringMap &, const stringMap &, bool)));
connect(m_projectMonitor->render, SIGNAL(removeInvalidClip(const QString &, bool)), m_projectList, SLOT(slotRemoveInvalidClip(const QString &, bool)));
connect(projectAdjust, SIGNAL(triggered(bool)), m_projectList, SLOT(adjustProjectProfileToItem()));
KAction* monitorPlay = new KAction(KIcon("media-playback-start"), i18n("Play"), this);
- KShortcut playShortcut;
- playShortcut.setPrimary(Qt::Key_Space);
- playShortcut.setAlternate(Qt::Key_K);
- monitorPlay->setShortcut(playShortcut);
+ monitorPlay->setShortcut(Qt::Key_Space);
collection.addAction("monitor_play", monitorPlay);
connect(monitorPlay, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPlay()));
KAction* monitorPause = new KAction(KIcon("media-playback-stop"), i18n("Pause"), this);
+ monitorPause->setShortcut(Qt::Key_K);
collection.addAction("monitor_pause", monitorPause);
connect(monitorPause, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPause()));
KAction* splitAudio = new KAction(KIcon("document-new"), i18n("Split Audio"), this);
collection.addAction("split_audio", splitAudio);
+ // "A+V" as data means this action should only be available for clips with audio AND video
+ splitAudio->setData("A+V");
connect(splitAudio, SIGNAL(triggered(bool)), this, SLOT(slotSplitAudio()));
KAction* setAudioAlignReference = new KAction(i18n("Set Audio Reference"), this);
collection.addAction("set_audio_align_ref", setAudioAlignReference);
+ // "A" as data means this action should only be available for clips with audio
+ setAudioAlignReference->setData("A");
connect(setAudioAlignReference, SIGNAL(triggered()), this, SLOT(slotSetAudioAlignReference()));
KAction* alignAudio = new KAction(i18n("Align Audio to Reference"), this);
collection.addAction("align_audio", alignAudio);
+ // "A" as data means this action should only be available for clips with audio
+ alignAudio->setData("A");
connect(alignAudio, SIGNAL(triggered()), this, SLOT(slotAlignAudio()));
KAction* audioOnly = new KAction(KIcon("document-new"), i18n("Audio Only"), this);
newFile(false);
return;
}
- QAction *firstUrlAction = m_fileOpenRecent->selectableActionGroup()->actions().first();
+ QAction *firstUrlAction = m_fileOpenRecent->selectableActionGroup()->actions().last();
if (firstUrlAction) firstUrlAction->trigger();
else newFile(false);
}
if (dia_ui->exec() == QDialog::Accepted) {
QMap <QString, QString> newprops;
newprops.insert("xmldata", dia_ui->xml().toString());
- if (dia_ui->outPoint() != clip->duration().frames(m_activeDocument->fps())) {
+ if (dia_ui->duration() != clip->duration().frames(m_activeDocument->fps())) {
// duration changed, we need to update duration
- newprops.insert("out", QString::number(dia_ui->outPoint()));
+ newprops.insert("out", QString::number(dia_ui->duration() - 1));
int currentLength = QString(clip->producerProperty("length")).toInt();
- if (currentLength <= dia_ui->outPoint())
- newprops.insert("length", QString::number(dia_ui->outPoint() + 1));
+ if (currentLength <= dia_ui->duration())
+ newprops.insert("length", QString::number(dia_ui->duration()));
else newprops.insert("length", clip->producerProperty("length"));
}
if (!path.isEmpty()) {