-void ClipManager::slotAddTextClipFile(const QString path, const QString group, const int groupId) {
+void ClipManager::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) {
kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << path;
QDomDocument doc;
QDomElement prod = doc.createElement("producer");
prod.setAttribute("resource", path + ".png");
prod.setAttribute("xml", path);
+ prod.setAttribute("xmldata", xml);
uint id = m_clipIdCounter++;
prod.setAttribute("id", QString::number(id));
if (!group.isEmpty()) {
DocClipBase *getClipAt(int pos);
void deleteClip(uint clipId);
void slotAddClipFile(const KUrl url, const QString group, const int groupId);
- void slotAddTextClipFile(const QString path, const QString group, const int groupId);
+ void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId);
void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId);
void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, bool loop, const QString group, const int groupId);
DocClipBase *getClipById(int clipId);
void DocClipBase::setDuration(GenTime dur) {
m_duration = dur;
+ m_properties.insert("duration", QString::number((int) dur.frames(KdenliveSettings::project_fps())));
}
const GenTime &DocClipBase::duration() const {
}
-QDomDocument DocClipBase::generateSceneList(bool, bool) const {
-}
-
void DocClipBase::setThumbnail(const QPixmap & pixmap) {
m_thumbnail = pixmap;
}
const GenTime & endTime) const;
/** returns a QString containing all of the XML data required to recreate this clip. */
QDomElement toXML() const;
- QDomDocument generateSceneList(bool addProducers = true, bool rendering = false) const;
/** Returns true if the xml passed matches the values in this clip */
bool matchesXML(const QDomElement & element) const;
KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoProfile profile, QUndoGroup *undoGroup, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_profile(profile), m_fps((double)profile.frame_rate_num / profile.frame_rate_den), m_width(profile.width), m_height(profile.height), m_commandStack(new KUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(4) {
kDebug() << "// init profile, ratnum: " << profile.frame_rate_num << ", " << profile.frame_rate_num << ", width: " << profile.width;
m_clipManager = new ClipManager(this);
+ KdenliveSettings::setProject_fps(m_fps);
if (!url.isEmpty()) {
QString tmpFile;
if (KIO::NetAccess::download(url.path(), tmpFile, parent)) {
m_fps = (double) m_profile.frame_rate_num / m_profile.frame_rate_den;
m_width = m_profile.width;
m_height = m_profile.height;
+ KdenliveSettings::setProject_fps(m_fps);
kDebug() << "KDEnnlive document, init timecode from path: " << path << ", " << m_fps;
if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(30, true);
else m_timecode.setFormat((int) m_fps);
setModified(true);
}
-void KdenliveDoc::slotAddTextClipFile(const QString path, const QString group, const int groupId) {
+void KdenliveDoc::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) {
kDebug() << "///////// DOCUM, ADD TXT CLP: " << path;
- m_clipManager->slotAddTextClipFile(path, group, groupId);
+ m_clipManager->slotAddTextClipFile(path, xml, group, groupId);
setModified(true);
}
}
QPixmap pix = dia_ui->renderedPixmap();
pix.save(path + ".png");
- dia_ui->saveTitle(path + ".kdenlivetitle");
- slotAddTextClipFile(path, QString(), -1);
+ //dia_ui->saveTitle(path + ".kdenlivetitle");
+ slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), -1);
}
delete dia_ui;
}
void KdenliveDoc::editTextClip(QString path, int id) {
- TitleWidget *dia_ui = new TitleWidget(KUrl(path + ".kdenlivetitle"), path, m_render, kapp->activeWindow());
+ DocClipBase *clip = m_clipManager->getClipById(id);
+ if (!clip) return;
+ TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_render, kapp->activeWindow());
+ QDomDocument doc;
+ doc.setContent(clip->getProperty("xmldata"));
+ dia_ui->setXml(doc);
if (dia_ui->exec() == QDialog::Accepted) {
QPixmap pix = dia_ui->renderedPixmap();
pix.save(path + ".png");
- dia_ui->saveTitle(path + ".kdenlivetitle");
+ //dia_ui->saveTitle(path + ".kdenlivetitle");
//slotAddClipFile(KUrl("/tmp/kdenlivetitle.png"), QString(), -1);
emit refreshClipThumbnail(id);
}
void addFolder(const QString foldername, int clipId, bool edit);
void deleteFolder(const QString foldername, int clipId);
void slotAddClipFile(const KUrl url, const QString group, const int groupId = -1);
- void slotAddTextClipFile(const QString path, const QString group, const int groupId = -1);
+ void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId = -1);
void editTextClip(QString path, int id);
void slotAddFolder(const QString folderName);
void slotDeleteFolder(const QString folderName, const int id);
disconnect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *)));
m_clipMonitor->stop();
}
+ KdenliveSettings::setProject_fps(doc->fps());
m_monitorManager->resetProfiles(doc->profilePath());
m_projectList->setDocument(doc);
connect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *)));
slotSetToolTip();
}
- if (m_clipType == COLOR || m_clipType == IMAGE) element.setAttribute("duration", MAXCLIPDURATION);
+ if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == SLIDESHOW || m_clipType == TEXT)
+ element.setAttribute("duration", MAXCLIPDURATION);
else if (element.attribute("duration").isEmpty() && !element.attribute("out").isEmpty()) {
element.setAttribute("duration", element.attribute("out").toInt() - element.attribute("in").toInt());
}
void ProjectItem::setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata) {
if (attributes.contains("duration")) {
- if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == AV) m_clip->setProperty("duration", attributes["duration"]);
+ //if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == AV)
+ //m_clip->setProperty("duration", attributes["duration"]);
GenTime duration = GenTime(attributes["duration"].toInt(), KdenliveSettings::project_fps());
setData(1, DurationRole, Timecode::getEasyTimecode(duration, KdenliveSettings::project_fps()));
m_clip->setDuration(duration);
- kDebug() << "//// LOADED CLIP, DURATION SET TO: " << duration.frames(KdenliveSettings::project_fps());
- } else {
+ //kDebug() << "//// LOADED CLIP, DURATION SET TO: " << duration.frames(KdenliveSettings::project_fps());
+ } else {
// No duration known, use an arbitrary one until it is.
}
if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK";
KUrl::List list;
if (givenUrl.isEmpty()) {
- KFileDialog d(KUrl("kfiledialog:///clipfolder"), "application/x-kdenlive application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr", this);
- d.setFilter(d.currentFilter() + "\n*.m2t *.mts|HDV video\n*.dv|DV video");
- if (d.exec() == QDialog::Accepted)
- list = d.selectedUrls();
- /*list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr\n*.m2t *.mts|HDV video\n*.dv|DV video");*/
+ list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr\n*.m2t *.mts|HDV video\n*.dv|DV video");
} else list.append(givenUrl);
if (list.isEmpty()) return;
KUrl::List::Iterator it;
}
delete dia;
}
+
void ProjectList::slotAddTitleClip() {
QString group = QString();
int groupId = -1;
Mlt::Producer *producer = getProducerById(QString::number(clipId));
if (producer == NULL) {
- if (url.isEmpty()) {
+ if (true /*url.isEmpty()*/) {
QDomDocument doc;
QDomElement westley = doc.createElement("westley");
QDomElement play = doc.createElement("playlist");
***************************************************************************/
#include "titledocument.h"
#include <QGraphicsScene>
-#include <QDomDocument>
#include <QDomElement>
#include <QGraphicsItem>
#include <QGraphicsRectItem>
scene = _scene;
}
-bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+QDomDocument TitleDocument::xml(QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
QDomDocument doc;
- if (!scene)
- return false;
-
QDomElement main = doc.createElement("kdenlivetitle");
doc.appendChild(main);
backgr.setAttribute("color", colorToString(color));
main.appendChild(backgr);
+ return doc;
+}
+
+
+bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+ if (!scene)
+ return false;
+
+ QDomDocument doc = xml(startv, endv);
KTemporaryFile tmpfile;
if (!tmpfile.open()) kWarning() << "///// CANNOT CREATE TMP FILE in: " << tmpfile.fileName();
QFile xmlf(tmpfile.fileName());
xmlf.write(doc.toString().toAscii());
xmlf.close();
kDebug() << KIO::NetAccess::upload(tmpfile.fileName(), url, 0);
-
+ return true;
}
-int TitleDocument::loadDocument(const KUrl& url , QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+int TitleDocument::loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
QString tmpfile;
QDomDocument doc;
- int maxZValue = 0;
double aspect_ratio = 4.0 / 3.0;
if (!scene)
return -1;
} else
return -1;
KIO::NetAccess::removeTempFile(tmpfile);
- QDomNodeList titles = doc.elementsByTagName("kdenlivetitle");
- if (titles.size()) {
+ return loadFromXml(doc, startv, endv);
+ }
+}
- QDomNodeList items = titles.item(0).childNodes();
- for (int i = 0;i < items.count();i++) {
- QGraphicsItem *gitem = NULL;
- kDebug() << items.item(i).attributes().namedItem("type").nodeValue();
- int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
- if (zValue > -1000)
- if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") {
- QFont font(items.item(i).namedItem("content").attributes().namedItem("font").nodeValue());
- font.setBold(items.item(i).namedItem("content").attributes().namedItem("font-bold").nodeValue().toInt());
- font.setItalic(items.item(i).namedItem("content").attributes().namedItem("font-italic").nodeValue().toInt());
- font.setUnderline(items.item(i).namedItem("content").attributes().namedItem("font-underline").nodeValue().toInt());
- font.setPointSize(items.item(i).namedItem("content").attributes().namedItem("font-size").nodeValue().toInt());
- QColor col(stringToColor(items.item(i).namedItem("content").attributes().namedItem("font-color").nodeValue()));
- QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font);
- txt->setDefaultTextColor(col);
- txt->setTextInteractionFlags(Qt::NoTextInteraction);
- gitem = txt;
+int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+ QDomNodeList titles = doc.elementsByTagName("kdenlivetitle");
+ int maxZValue = 0;
+ if (titles.size()) {
+
+ QDomNodeList items = titles.item(0).childNodes();
+ for (int i = 0;i < items.count();i++) {
+ QGraphicsItem *gitem = NULL;
+ kDebug() << items.item(i).attributes().namedItem("type").nodeValue();
+ int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
+ if (zValue > -1000)
+ if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") {
+ QFont font(items.item(i).namedItem("content").attributes().namedItem("font").nodeValue());
+ font.setBold(items.item(i).namedItem("content").attributes().namedItem("font-bold").nodeValue().toInt());
+ font.setItalic(items.item(i).namedItem("content").attributes().namedItem("font-italic").nodeValue().toInt());
+ font.setUnderline(items.item(i).namedItem("content").attributes().namedItem("font-underline").nodeValue().toInt());
+ font.setPointSize(items.item(i).namedItem("content").attributes().namedItem("font-size").nodeValue().toInt());
+ QColor col(stringToColor(items.item(i).namedItem("content").attributes().namedItem("font-color").nodeValue()));
+ QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font);
+ txt->setDefaultTextColor(col);
+ txt->setTextInteractionFlags(Qt::NoTextInteraction);
+ gitem = txt;
+ } else
+ if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") {
+ QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue();
+ QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue();
+ QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue();
+ double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble();
+ QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str)));
+ gitem = rec;
} else
- if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") {
- QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue();
- QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue();
- QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue();
- double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble();
- QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str)));
+ if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") {
+ QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue();
+ QPixmap pix(url);
+ QGraphicsPixmapItem *rec = scene->addPixmap(pix);
+ rec->setData(Qt::UserRole, url);
gitem = rec;
} else
- if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") {
+ if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") {
QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue();
- QPixmap pix(url);
- QGraphicsPixmapItem *rec = scene->addPixmap(pix);
+ QGraphicsSvgItem *rec = new QGraphicsSvgItem(url);
+ scene->addItem(rec);
rec->setData(Qt::UserRole, url);
gitem = rec;
- } else
- if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") {
- QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue();
- QGraphicsSvgItem *rec = new QGraphicsSvgItem(url);
- scene->addItem(rec);
- rec->setData(Qt::UserRole, url);
- gitem = rec;
- }
- //pos and transform
- if (gitem) {
- QPointF p(items.item(i).namedItem("position").attributes().namedItem("x").nodeValue().toDouble(),
- items.item(i).namedItem("position").attributes().namedItem("y").nodeValue().toDouble());
- gitem->setPos(p);
- gitem->setTransform(stringToTransform(items.item(i).namedItem("position").firstChild().firstChild().nodeValue()));
- int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
- if (zValue > maxZValue) maxZValue = zValue;
- gitem->setZValue(zValue);
- gitem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
- }
- if (items.item(i).nodeName() == "background") {
- kDebug() << items.item(i).attributes().namedItem("color").nodeValue();
- QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue()));
- //color.setAlpha(items.item(i).attributes().namedItem("alpha").nodeValue().toInt());
- QList<QGraphicsItem *> items = scene->items();
- for (int i = 0; i < items.size(); i++) {
- if (items.at(i)->zValue() == -1100) {
- ((QGraphicsRectItem *)items.at(i))->setBrush(QBrush(color));
- break;
- }
+ }
+ //pos and transform
+ if (gitem) {
+ QPointF p(items.item(i).namedItem("position").attributes().namedItem("x").nodeValue().toDouble(),
+ items.item(i).namedItem("position").attributes().namedItem("y").nodeValue().toDouble());
+ gitem->setPos(p);
+ gitem->setTransform(stringToTransform(items.item(i).namedItem("position").firstChild().firstChild().nodeValue()));
+ int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
+ if (zValue > maxZValue) maxZValue = zValue;
+ gitem->setZValue(zValue);
+ gitem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ }
+ if (items.item(i).nodeName() == "background") {
+ kDebug() << items.item(i).attributes().namedItem("color").nodeValue();
+ QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue()));
+ //color.setAlpha(items.item(i).attributes().namedItem("alpha").nodeValue().toInt());
+ QList<QGraphicsItem *> items = scene->items();
+ for (int i = 0; i < items.size(); i++) {
+ if (items.at(i)->zValue() == -1100) {
+ ((QGraphicsRectItem *)items.at(i))->setBrush(QBrush(color));
+ break;
}
- } /*else if (items.item(i).nodeName() == "startviewport" && startv) {
+ }
+ } /*else if (items.item(i).nodeName() == "startviewport" && startv) {
QPointF p(items.item(i).attributes().namedItem("x").nodeValue().toDouble(), items.item(i).attributes().namedItem("y").nodeValue().toDouble());
double width = items.item(i).attributes().namedItem("size").nodeValue().toDouble();
QRectF rect(-width, -width / aspect_ratio, width*2.0, width / aspect_ratio*2.0);
endv->setPolygon(rect);
endv->setPos(p);
}*/
- }
}
}
return maxZValue;
***************************************************************************/
#ifndef TITLEDOCUMENT_H
#define TITLEDOCUMENT_H
+
+#include <QDomDocument>
+
#include <KUrl>
class QGraphicsScene;
void setScene(QGraphicsScene* scene);
bool saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
int loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
+ QDomDocument xml(QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
+ int loadFromXml(QDomDocument doc, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
+
private:
QString colorToString(const QColor&);
QString rectFToString(const QRectF&);
m_scene->setTool(TITLE_RECTANGLE);
m_buttonText->setChecked(false);
m_buttonCursor->setChecked(false);
+ m_buttonRect->setChecked(true);
}
void TitleWidget::slotSelectTool() {
if (!url.isEmpty()) m_titledocument.saveDocument(url, startViewport, endViewport);
}
+QDomDocument TitleWidget::xml() {
+ return m_titledocument.xml(startViewport, endViewport);
+}
+
+void TitleWidget::setXml(QDomDocument doc) {
+ m_titledocument.loadFromXml(doc, startViewport, endViewport);
+ slotSelectTool();
+}
+
QPixmap TitleWidget::renderedPixmap() {
QPixmap pix(m_frameWidth, m_frameHeight);
pix.fill(Qt::transparent);
Q_OBJECT
public:
TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent = 0);
+ QDomDocument xml();
+ void setXml(QDomDocument doc);
protected:
virtual void resizeEvent(QResizeEvent * event);