#include <QGraphicsView>
#include <QScrollBar>
-AbstractClipItem::AbstractClipItem(const ItemInfo info, const QRectF& rect): QGraphicsRectItem(rect), m_startFade(0), m_endFade(0) {
+AbstractClipItem::AbstractClipItem(const ItemInfo info, const QRectF& rect): QGraphicsRectItem(rect), m_startFade(0), m_endFade(0), m_track(0) {
setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
setTrack(info.track);
m_startPos = info.startPos;
#include "effectslistwidget.h"
#include "effectslist.h"
-EffectsListView::EffectsListView(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent)
+EffectsListView::EffectsListView(QWidget *parent)
: QWidget(parent) {
- m_effectsList = new EffectsListWidget(audioEffectList, videoEffectList, customEffectList);
+ m_effectsList = new EffectsListWidget();
ui.setupUi(this);
QVBoxLayout *lyr = new QVBoxLayout(ui.effectlistframe);
Q_OBJECT
public:
- EffectsListView(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent = 0);
+ EffectsListView(QWidget *parent = 0);
KListWidget *listView();
//void slotAddEffect(GenTime pos, int track, QString name);
#include "effectslistwidget.h"
#include "effectslist.h"
+#include "mainwindow.h"
#define EFFECT_VIDEO 1
#define EFFECT_AUDIO 2
#define EFFECT_CUSTOM 3
-EffectsListWidget::EffectsListWidget(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent)
- : KListWidget(parent), m_audioList(audioEffectList), m_videoList(videoEffectList), m_customList(customEffectList) {
+EffectsListWidget::EffectsListWidget(QWidget *parent)
+ : KListWidget(parent) {
//setSelectionMode(QAbstractItemView::ExtendedSelection);
//setDragDropMode(QAbstractItemView::DragDrop);
setDropIndicatorShown(true);
void EffectsListWidget::initList() {
clear();
- QStringList names = m_videoList->effectNames();
+ QStringList names = MainWindow::videoEffects.effectNames();
QListWidgetItem *item;
foreach(QString str, names) {
item = new QListWidgetItem(str, this);
item->setData(Qt::UserRole, QString::number((int) EFFECT_VIDEO));
}
- names = m_audioList->effectNames();
+ names = MainWindow::audioEffects.effectNames();
foreach(QString str, names) {
item = new QListWidgetItem(str, this);
item->setData(Qt::UserRole, QString::number((int) EFFECT_AUDIO));
}
- names = m_customList->effectNames();
+ names = MainWindow::customEffects.effectNames();
foreach(QString str, names) {
item = new QListWidgetItem(str, this);
item->setData(Qt::UserRole, QString::number((int) EFFECT_CUSTOM));
if (!item) return effect;
switch (item->data(Qt::UserRole).toInt()) {
case 1:
- effect = m_videoList->getEffectByName(item->text());
+ effect = MainWindow::videoEffects.getEffectByName(item->text());
break;
case 2:
- effect = m_audioList->getEffectByName(item->text());
+ effect = MainWindow::audioEffects.getEffectByName(item->text());
break;
default:
- effect = m_customList->getEffectByName(item->text());
+ effect = MainWindow::customEffects.getEffectByName(item->text());
break;
}
return effect;
QString info;
switch (item->data(Qt::UserRole).toInt()) {
case 1:
- info = m_videoList->getInfo(item->text());
+ info = MainWindow::videoEffects.getInfo(item->text());
break;
case 2:
- info = m_audioList->getInfo(item->text());
+ info = MainWindow::audioEffects.getInfo(item->text());
break;
default:
- info = m_customList->getInfo(item->text());
+ info = MainWindow::customEffects.getInfo(item->text());
break;
}
return info;
Q_OBJECT
public:
- EffectsListWidget(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent = 0);
+ EffectsListWidget(QWidget *parent = 0);
virtual ~EffectsListWidget();
QDomElement currentEffect();
QString currentInfo();
private:
bool m_dragStarted;
QPoint m_DragStartPosition;
- EffectsList *m_audioList;
- EffectsList *m_videoList;
- EffectsList *m_customList;
void initList();
};
#include "effectstackview.h"
#include "effectslist.h"
#include "clipitem.h"
+#include "mainwindow.h"
#include <QHeaderView>
#include <QMenu>
-EffectStackView::EffectStackView(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent)
+EffectStackView::EffectStackView(QWidget *parent)
: QWidget(parent) {
ui.setupUi(this);
effectedit = new EffectStackEdit(ui.frame, this);
connect(ui.buttonReset, SIGNAL(clicked()), this, SLOT(slotResetEffect()));
connect(this, SIGNAL(transferParamDesc(const QDomElement&, int , int)), effectedit , SLOT(transferParamDesc(const QDomElement&, int , int)));
connect(effectedit, SIGNAL(parameterChanged(const QDomElement&, const QDomElement&)), this , SLOT(slotUpdateEffectParams(const QDomElement&, const QDomElement&)));
- effectLists["audio"] = audioEffectList;
- effectLists["video"] = videoEffectList;
- effectLists["custom"] = customEffectList;
+ effectLists["audio"] = &MainWindow::audioEffects;
+ effectLists["video"] = &MainWindow::videoEffects;
+ effectLists["custom"] = &MainWindow::customEffects;
ui.infoBox->hide();
setEnabled(false);
Q_OBJECT
public:
- EffectStackView(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent = 0);
+ EffectStackView(QWidget *parent = 0);
private:
Ui::EffectStack_UI ui;
#include "kdenlivesettings.h"
#include "effectslist.h"
#include "effectstackedit.h"
+#include "mainwindow.h"
initEffectsThumbnailer::initEffectsThumbnailer() {
}
//static
-Mlt::Repository *initEffects::parseEffectFiles(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList* transitionsList) {
+Mlt::Repository *initEffects::parseEffectFiles() {
QStringList::Iterator more;
QStringList::Iterator it;
QStringList fileList;
transitionsItemList << transitions->get_name(i);
}
delete transitions;
- fillTransitionsList(repository, transitionsList, transitionsItemList);
+ fillTransitionsList(repository, &MainWindow::transitions, transitionsItemList);
KGlobal::dirs()->addResourceType("ladspa_plugin", 0, "lib/ladspa");
KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/lib/ladspa");
fileList = directory.entryList(QDir::Files);
for (it = fileList.begin() ; it != fileList.end() ; ++it) {
itemName = KUrl(*more + *it).path();
- parseEffectFile(audioEffectList, videoEffectList, itemName, filtersList, producersList);
+ parseEffectFile(&MainWindow::audioEffects, &MainWindow::videoEffects, itemName, filtersList, producersList);
// kDebug()<<"// FOUND EFFECT FILE: "<<itemName<<endl;
}
}
foreach(QString filtername, filtersList) {
QDomDocument doc = createDescriptionFromMlt(repository, "filters", filtername);
if (!doc.isNull())
- videoEffectList->append(doc.documentElement());
+ MainWindow::videoEffects.append(doc.documentElement());
}
return repository;
}
initEffects();
~initEffects();
- static Mlt::Repository *parseEffectFiles(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *transitions);
+ static Mlt::Repository *parseEffectFiles();
static QDomDocument createDescriptionFromMlt(Mlt::Repository* repository, const QString& type, const QString& name);
static void fillTransitionsList(Mlt::Repository *, EffectsList* transitions, QStringList names);
static QDomElement quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def = QString(), QString min = QString(), QString max = QString(), QString list = QString(), QString factor = QString(), QString namedesc = QString(), QString format = QString());
#define ID_TIMELINE_POS 6
#define ID_TIMELINE_FORMAT 7
+EffectsList MainWindow::videoEffects;
+EffectsList MainWindow::audioEffects;
+EffectsList MainWindow::customEffects;
+EffectsList MainWindow::transitions;
+
MainWindow::MainWindow(QWidget *parent)
: KXmlGuiWindow(parent),
m_activeDocument(NULL), m_activeTimeline(NULL), m_renderWidget(NULL), m_jogProcess(NULL) {
m_timelineArea->setCornerWidget(closeTabButton);
connect(m_timelineArea, SIGNAL(currentChanged(int)), this, SLOT(activateDocument()));
- initEffects::parseEffectFiles(&m_audioEffects, &m_videoEffects, &m_transitions);
+ initEffects::parseEffectFiles();
m_monitorManager = new MonitorManager();
projectListDock = new QDockWidget(i18n("Project Tree"), this);
effectListDock = new QDockWidget(i18n("Effect List"), this);
effectListDock->setObjectName("effect_list");
- m_effectList = new EffectsListView(&m_audioEffects, &m_videoEffects, &m_customEffects);
+ m_effectList = new EffectsListView();
//m_effectList = new KListWidget(this);
effectListDock->setWidget(m_effectList);
effectStackDock = new QDockWidget(i18n("Effect Stack"), this);
effectStackDock->setObjectName("effect_stack");
- effectStack = new EffectStackView(&m_audioEffects, &m_videoEffects, &m_customEffects, this);
+ effectStack = new EffectStackView(this);
effectStackDock->setWidget(effectStack);
addDockWidget(Qt::TopDockWidgetArea, effectStackDock);
transitionConfigDock = new QDockWidget(i18n("Transition"), this);
transitionConfigDock->setObjectName("transition");
- transitionConfig = new TransitionSettings(&m_transitions, this);
+ transitionConfig = new TransitionSettings(this);
transitionConfigDock->setWidget(transitionConfig);
addDockWidget(Qt::TopDockWidgetArea, transitionConfigDock);
// build effects menus
QAction *action;
QMenu *videoEffectsMenu = (QMenu*)(factory()->container("video_effects_menu", this));
- QStringList effects = m_videoEffects.effectNames();
+ QStringList effects = videoEffects.effectNames();
foreach(QString name, effects) {
action = new QAction(name, this);
action->setData(name);
videoEffectsMenu->addAction(action);
}
QMenu *audioEffectsMenu = (QMenu*)(factory()->container("audio_effects_menu", this));
- effects = m_audioEffects.effectNames();
+ effects = audioEffects.effectNames();
foreach(QString name, effects) {
action = new QAction(name, this);
action->setData(name);
audioEffectsMenu->addAction(action);
}
QMenu *customEffectsMenu = (QMenu*)(factory()->container("custom_effects_menu", this));
- effects = m_customEffects.effectNames();
+ effects = customEffects.effectNames();
foreach(QString name, effects) {
action = new QAction(name, this);
action->setData(name);
void MainWindow::slotAddVideoEffect(QAction *result) {
if (!result) return;
- QDomElement effect = m_videoEffects.getEffectByName(result->data().toString());
+ QDomElement effect = videoEffects.getEffectByName(result->data().toString());
slotAddEffect(effect);
}
void MainWindow::slotAddAudioEffect(QAction *result) {
if (!result) return;
- QDomElement effect = m_audioEffects.getEffectByName(result->data().toString());
+ QDomElement effect = audioEffects.getEffectByName(result->data().toString());
slotAddEffect(effect);
}
void MainWindow::slotAddCustomEffect(QAction *result) {
if (!result) return;
- QDomElement effect = m_customEffects.getEffectByName(result->data().toString());
+ QDomElement effect = customEffects.getEffectByName(result->data().toString());
slotAddEffect(effect);
}
MainWindow(QWidget *parent = 0);
void parseProfiles();
+ static EffectsList videoEffects;
+ static EffectsList audioEffects;
+ static EffectsList customEffects;
+ static EffectsList transitions;
protected:
virtual bool queryClose();
virtual void customEvent(QEvent * e);
QDockWidget *overviewDock;
CustomTrackView *m_overView;
- EffectsList m_videoEffects;
- EffectsList m_audioEffects;
- EffectsList m_customEffects;
- EffectsList m_transitions;
-
QMenu *m_timelineContextMenu;
QMenu *m_timelineContextClipMenu;
QMenu *m_timelineContextTransitionMenu;
// ffmpeg Header files
extern "C" {
-//#include <libavformat/avformat.h>
+#include <libavformat/avformat.h>
}
#include <QTimer>
#include <QDir>
#include "renderer.h"
#include "kdenlivesettings.h"
#include "kthumb.h"
-#include <ffmpeg/avformat.h>
+//#include <ffmpeg/avformat.h>
#include <mlt++/Mlt.h>
static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr) {
}
void Render::saveSceneList(QString path, QDomElement addedXml) {
+
char *tmppath = decodedString("westley:" + path);
Mlt::Consumer westleyConsumer(*m_mltProfile , tmppath);
delete[] tmppath;
// add Kdenlive specific tags
QFile file(path);
QDomDocument doc;
- doc.setContent(&file, false);
- doc.documentElement().appendChild(doc.importNode(addedXml, true));
+ //doc.setContent(&file, false);
+ doc.appendChild(doc.importNode(addedXml, true));
file.close();
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
kWarning() << "////// ERROR writing to file: " << path;
m_isBlocked = false;
delete tractor;
}
+ mltSavePlaylist();
m_mltConsumer->set("refresh", 1);
}
QTextStream txtNeu(&neu);
if (values.size() > 0)
txtNeu << (int)values[0].toDouble();
- for (int i = 0;i < separators.size() && i + 1 < values.size();i++) {
+ int i = 0;
+ for (i = 0;i < separators.size() && i + 1 < values.size();i++) {
txtNeu << separators[i];
txtNeu << (int)(values[i+1].toDouble());
}
+ if (i < separators.size())
+ txtNeu << separators[i];
map[e.attribute("name")] = neu;
}
#include "transition.h"
#include "clipitem.h"
#include "kdenlivesettings.h"
-
+#include "mainwindow.h"
Transition::Transition(const ItemInfo info, int transitiontrack, double scale, double fps, QDomElement params) : AbstractClipItem(info, QRectF(info.startPos.frames(fps) *scale , info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 2, (info.endPos - info.startPos).frames(fps) * scale , KdenliveSettings::trackheight() - 1)) {
m_singleClip = true;
m_maxDuration = GenTime(10000, fps);
//m_referenceClip = clipa;
if (params.isNull()) {
- //FIXME we need to setup here the right luma xml file !!!
- QDomDocument doc;
- doc.setContent(QString("<ktransition tag=\"luma\"><name>Luma</name><description>Luma Transitions</description><properties id=\"luma\" tag=\"luma\" /><parameter type=\"bool\" name=\"reverse\" max=\"1\" min=\"0\" default=\"1\" factor=\"1\"><name>Reverse</name></parameter></ktransition>"));
- m_parameters = doc.documentElement();
+ m_parameters = MainWindow::transitions.getEffectByName("Luma");
} else {
m_parameters = params;
}
#include "transition.h"
#include "effectslist.h"
#include "effectstackedit.h"
+#include "mainwindow.h"
-TransitionSettings::TransitionSettings(EffectsList *transitions, QWidget* parent): QWidget(parent) {
+TransitionSettings::TransitionSettings(QWidget* parent): QWidget(parent) {
ui.setupUi(this);
effectEdit = new EffectStackEdit(ui.frame, this);
setEnabled(false);
- m_transitions = transitions;
- ui.listWidget->addItems(transitions->effectNames());
- kDebug() << transitions->effectNames().size() << " -" << transitions->size();
+ ui.listWidget->addItems(MainWindow::transitions.effectNames());
+ kDebug() << MainWindow::transitions.effectNames().size();
ui.listWidget->setCurrentRow(0);
connect(ui.listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(slotTransitionChanged()));
connect(this, SIGNAL(transferParamDesc(const QDomElement&, int , int)), effectEdit , SLOT(transferParamDesc(const QDomElement&, int , int)));
if (m_usedTransition && m_usedTransition->transitionName() == ui.listWidget->currentItem()->text() && !e.attribute("tag").isNull()) {
slotUpdateEffectParams(e, e);
} else
- slotUpdateEffectParams(e, m_transitions->getEffectByName(ui.listWidget->currentItem()->text()));
+ slotUpdateEffectParams(e, MainWindow::transitions.getEffectByName(ui.listWidget->currentItem()->text()));
emit transferParamDesc(m_usedTransition->toXML(), 0, 0);
}
class TransitionSettings : public QWidget {
Q_OBJECT
public:
- TransitionSettings(EffectsList *, QWidget* parent = 0);
+ TransitionSettings(QWidget* parent = 0);
private:
Ui::TransitionSettings_UI ui;
- EffectsList *m_transitions;
EffectStackEdit *effectEdit;
Transition* m_usedTransition;
public slots: