setCentralWidget(m_timelineArea);
setupGUI(Default, NULL /*"kdenliveui.rc"*/);
- kDebug() << factory() << " " << factory()->container("video_effects_menu", this);
+ //kDebug() << factory() << " " << factory()->container("video_effects_menu", this);
+
+ m_projectMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)));
+ m_clipMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)));
// build effects menus
QAction *action;
QMenu *videoEffectsMenu = static_cast<QMenu*>(factory()->container("video_effects_menu", this));
- QStringList effects = videoEffects.effectNames();
- foreach(const QString &name, effects) {
- action = new QAction(name, this);
- action->setData(name);
+
+ QStringList effectInfo;
+ QMap<QString, QStringList> effectsList;
+ for (int ix = 0; ix < videoEffects.count(); ix++) {
+ effectInfo = videoEffects.effectIdInfo(ix);
+ effectsList.insert(effectInfo.at(0).toLower(), effectInfo);
+ }
+
+ foreach(QStringList value, effectsList) {
+ action = new QAction(value.at(0), this);
+ action->setData(value);
videoEffectsMenu->addAction(action);
}
+
QMenu *audioEffectsMenu = static_cast<QMenu*>(factory()->container("audio_effects_menu", this));
- effects = audioEffects.effectNames();
- foreach(const QString &name, effects) {
- action = new QAction(name, this);
- action->setData(name);
+
+
+ effectsList.clear();
+ for (int ix = 0; ix < audioEffects.count(); ix++) {
+ effectInfo = audioEffects.effectIdInfo(ix);
+ effectsList.insert(effectInfo.at(0).toLower(), effectInfo);
+ }
+
+ foreach(QStringList value, effectsList) {
+ action = new QAction(value.at(0), this);
+ action->setData(value);
audioEffectsMenu->addAction(action);
}
+
m_customEffectsMenu = static_cast<QMenu*>(factory()->container("custom_effects_menu", this));
- effects = customEffects.effectNames();
- if (effects.isEmpty()) m_customEffectsMenu->setEnabled(false);
+
+ if (customEffects.isEmpty()) m_customEffectsMenu->setEnabled(false);
else m_customEffectsMenu->setEnabled(true);
- foreach(const QString &name, effects) {
- action = new QAction(name, this);
- action->setData(name);
+ effectsList.clear();
+ for (int ix = 0; ix < customEffects.count(); ix++) {
+ effectInfo = customEffects.effectIdInfo(ix);
+ effectsList.insert(effectInfo.at(0).toLower(), effectInfo);
+ }
+
+ foreach(QStringList value, effectsList) {
+ action = new QAction(value.at(0), this);
+ action->setData(value);
m_customEffectsMenu->addAction(action);
}
QMenu *transitionsMenu = new QMenu(i18n("Add Transition"), this);
- effects = transitions.effectNames();
+ QStringList effects = transitions.effectNames();
foreach(const QString &name, effects) {
action = new QAction(name, this);
action->setData(name);
return;
}
TrackView *currentTimeLine = (TrackView *) m_timelineArea->currentWidget();
- currentTimeLine->projectView()->slotAddEffect(effect, pos, track);
+ currentTimeLine->projectView()->slotAddEffect(effect.cloneNode().toElement(), pos, track);
}
void MainWindow::slotRaiseMonitor(bool clipMonitor) {
collection->addAction("seek_clip_end", clipEnd);
connect(clipEnd, SIGNAL(triggered(bool)), this, SLOT(slotClipEnd()));
- KAction* projectStart = new KAction(KIcon("media-seek-backward"), i18n("Go to Project Start"), this);
+ KAction* projectStart = new KAction(KIcon("go-first"), i18n("Go to Project Start"), this);
projectStart->setShortcut(Qt::CTRL + Qt::Key_Home);
collection->addAction("seek_start", projectStart);
connect(projectStart, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotStart()));
- KAction* projectEnd = new KAction(KIcon("media-seek-forward"), i18n("Go to Project End"), this);
+ KAction* projectEnd = new KAction(KIcon("go-last"), i18n("Go to Project End"), this);
projectEnd->setShortcut(Qt::CTRL + Qt::Key_End);
collection->addAction("seek_end", projectEnd);
connect(projectEnd, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotEnd()));
collection->addAction("cut_timeline_clip", cutTimelineClip);
connect(cutTimelineClip, SIGNAL(triggered(bool)), this, SLOT(slotCutTimelineClip()));
- KAction* addClipMarker = new KAction(KIcon("bookmark-new"), i18n("Add Marker to Clip"), this);
+ KAction* addClipMarker = new KAction(KIcon("bookmark-new"), i18n("Add Marker"), this);
collection->addAction("add_clip_marker", addClipMarker);
connect(addClipMarker, SIGNAL(triggered(bool)), this, SLOT(slotAddClipMarker()));
- KAction* deleteClipMarker = new KAction(KIcon("edit-delete"), i18n("Delete Marker from Clip"), this);
+ KAction* deleteClipMarker = new KAction(KIcon("edit-delete"), i18n("Delete Marker"), this);
collection->addAction("delete_clip_marker", deleteClipMarker);
connect(deleteClipMarker, SIGNAL(triggered(bool)), this, SLOT(slotDeleteClipMarker()));
- KAction* deleteAllClipMarkers = new KAction(KIcon("edit-delete"), i18n("Delete All Markers from Clip"), this);
+ KAction* deleteAllClipMarkers = new KAction(KIcon("edit-delete"), i18n("Delete All Markers"), this);
collection->addAction("delete_all_clip_markers", deleteAllClipMarkers);
connect(deleteAllClipMarkers, SIGNAL(triggered(bool)), this, SLOT(slotDeleteAllClipMarkers()));
if (m_timelineArea->count() == 1) m_timelineArea->setTabBarHidden(true);
delete docToClose;
delete w;
- if (m_timelineArea->count() == 0) m_activeDocument = NULL;
+ if (m_timelineArea->count() == 0) {
+ m_activeDocument = NULL;
+ effectStack->clear();
+ transitionConfig->slotTransitionItemSelected(NULL);
+ }
}
void MainWindow::saveFileAs(const QString &outputFileName) {
}
void MainWindow::openFile(const KUrl &url) {
+ // Check if the document is already opened
+ const int ct = m_timelineArea->count();
+ bool isOpened = false;
+ int i;
+ for (i = 0; i < ct; i++) {
+ TrackView *tab = (TrackView *) m_timelineArea->widget(i);
+ KdenliveDoc *doc = tab->document();
+ if (doc->url() == url) {
+ isOpened = true;
+ break;
+ }
+ }
+ if (isOpened) {
+ m_timelineArea->setCurrentIndex(i);
+ return;
+ }
+
// Check for backup file
QList<KAutoSaveFile *> staleFiles = KAutoSaveFile::staleFiles(url);
if (!staleFiles.isEmpty()) {
m_activeDocument->backupMltPlaylist();
if (m_activeTimeline) {
disconnect(m_projectMonitor, SIGNAL(renderPosition(int)), m_activeTimeline, SLOT(moveCursorPos(int)));
- disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint)));
+ disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeTimeline, SLOT(slotSetZone(QPoint)));
disconnect(m_projectMonitor, SIGNAL(durationChanged(int)), m_activeTimeline, SLOT(setDuration(int)));
disconnect(m_projectList, SIGNAL(projectModified()), m_activeDocument, SLOT(setModified()));
disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated()));
disconnect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement, int)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement, int)));
disconnect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
disconnect(effectStack, SIGNAL(changeEffectState(ClipItem*, int, bool)), m_activeTimeline->projectView(), SLOT(slotChangeEffectState(ClipItem*, int, bool)));
- disconnect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), trackView->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int)));
+ disconnect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), m_activeTimeline->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int)));
disconnect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), m_activeTimeline->projectView(), SLOT(slotRefreshEffects(ClipItem*)));
disconnect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects()));
- disconnect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement)));
- disconnect(transitionConfig, SIGNAL(seekTimeline(int)), trackView->projectView() , SLOT(setCursorPos(int)));
+ disconnect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), m_activeTimeline->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement)));
+ disconnect(transitionConfig, SIGNAL(seekTimeline(int)), m_activeTimeline->projectView() , SLOT(setCursorPos(int)));
disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
- disconnect(trackView, SIGNAL(zoneMoved(int, int)), m_projectMonitor, SLOT(slotZoneMoved(int, int)));
+ disconnect(m_activeTimeline, SIGNAL(zoneMoved(int, int)), m_projectMonitor, SLOT(slotZoneMoved(int, int)));
+ disconnect(m_projectList, SIGNAL(loadingIsOver()), m_activeTimeline->projectView(), SLOT(slotUpdateAllThumbs()));
effectStack->clear();
}
m_activeDocument->setRenderer(NULL);
connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
connect(trackView, SIGNAL(zoneMoved(int, int)), m_projectMonitor, SLOT(slotZoneMoved(int, int)));
+ connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs()));
trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu);
m_activeTimeline = trackView;
m_commandStack->setActiveStack(doc->commandStack());
KdenliveSettings::setProject_display_ratio(doc->dar());
m_projectList->updateAllClips();
- trackView->projectView()->updateAllThumbs();
-
+ //doc->clipManager()->checkAudioThumbs();
//m_overView->setScene(trackView->projectScene());
//m_overView->scale(m_overView->width() / trackView->duration(), m_overView->height() / (50 * trackView->tracksNumber()));
void MainWindow::slotAddVideoEffect(QAction *result) {
if (!result) return;
- QDomElement effect = videoEffects.getEffectByName(result->data().toString());
+ QStringList info = result->data().toStringList();
+ if (info.isEmpty()) return;
+ QDomElement effect = videoEffects.getEffectByTag(info.at(1), info.at(2));
slotAddEffect(effect);
}
void MainWindow::slotAddAudioEffect(QAction *result) {
if (!result) return;
- QDomElement effect = audioEffects.getEffectByName(result->data().toString());
+ QStringList info = result->data().toStringList();
+ if (info.isEmpty()) return;
+ QDomElement effect = audioEffects.getEffectByTag(info.at(1), info.at(2));
slotAddEffect(effect);
}
void MainWindow::slotAddCustomEffect(QAction *result) {
if (!result) return;
- if (result->data().toString().isEmpty()) return;
- QDomElement effect = customEffects.getEffectByName(result->data().toString());
+ QStringList info = result->data().toStringList();
+ if (info.isEmpty()) return;
+ QDomElement effect = customEffects.getEffectByTag(info.at(1), info.at(2));
slotAddEffect(effect);
}