Logo Search packages:      
Sourcecode: kdenlive version File versions

docclipvirtual.cpp

/***************************************************************************
                          doccliptextfile.cpp  -  description
                             -------------------
    begin                : Jan 31 2006
    copyright            : (C) 2006 by Jean-Baptiste Mardelle
    email                : jb@ader.ch

 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include "docclipvirtual.h"

#include <iostream>
#include <assert.h>

#include <qfileinfo.h>

#include <kdebug.h>
#include <klocale.h>
#include <kio/netaccess.h>

#include "clipmanager.h"
#include "kdenlivesettings.h"


DocClipVirtual::DocClipVirtual(const KURL & url, const QString & name, const QString & text, GenTime start, GenTime end, uint id):DocClipBase(), m_start(start), m_end(end), m_clipType(VIRTUAL), m_duration(end - start), m_durationKnown(true), m_framesPerSecond(KdenliveSettings::defaultfps()), m_url(url)
{
    setName(name);
    setId(id);
    setDescription( text );
    thumbCreator = new KThumb();
    //setThumbnail(NULL);
}


DocClipVirtual::DocClipVirtual(QDomDocument node):DocClipBase(),m_clipType(VIRTUAL), m_duration(0.0),  m_durationKnown(false), m_framesPerSecond(KdenliveSettings::defaultfps())
{
QDomElement element = node.documentElement(); 
 if (element.tagName() != "kdenliveclip") {
      kdWarning() <<
          "DocClipRef::createClip() element has unknown tagName : " <<
          element.tagName() << endl;
      return;
    }

    QDomNode n = element.firstChild();

    while (!n.isNull()) {
      QDomElement e = n.toElement();
      if (!e.isNull()) {
          //kdWarning() << "DocClipRef::createClip() tag = " << e.tagName() << endl;
          if (e.tagName() == "avfile") {
                setId(e.attribute("id", "-1").toInt());
            m_url = KURL(e.attribute("url", QString::null));
            m_width = e.attribute("width", "0").toInt();
            m_height = e.attribute("height", "0").toInt();
            m_start = GenTime(e.attribute("virtualstart", "0").toInt(), m_framesPerSecond);
            m_end = GenTime(e.attribute("virtualend", "0").toInt(), m_framesPerSecond);
            m_durationKnown = e.attribute("durationknown", "0" ).toInt();
            m_duration = m_end - m_start;
            setName(e.attribute("name", QString::null));
            setDescription(e.attribute("description", QString::null));
          }
      }
      n = n.nextSibling();
    }
    thumbCreator = new KThumb();

}

DocClipVirtual::~DocClipVirtual()
{
}

void DocClipVirtual::removeTmpFile() const
{
    KIO::NetAccess::del(m_url);
}

00088 const GenTime & DocClipVirtual::duration() const
{
    return m_duration;
}

00093 const DocClipBase::CLIPTYPE & DocClipVirtual::clipType() const
{
    return m_clipType;
}


00099 const KURL & DocClipVirtual::fileURL() const
{
    return m_url;
}


00105 DocClipVirtual *DocClipVirtual::createClip(const QDomElement element)
{
}

00109 bool DocClipVirtual::durationKnown() const
{
    return m_durationKnown;
}

// virtual
double DocClipVirtual::framesPerSecond() const
{
    return m_framesPerSecond;
}

//returns clip video properties -reh
uint DocClipVirtual::clipHeight() const
{
    return KdenliveSettings::defaultheight();
}

uint DocClipVirtual::clipWidth() const
{
    return KdenliveSettings::defaultwidth();
}

// virtual
QDomDocument DocClipVirtual::sceneToXML(const GenTime & startTime,
    const GenTime & endTime) const
{
}

// virtual
QDomDocument DocClipVirtual::generateSceneList(bool, bool) const
{

    QDomDocument sceneList;
    QDomElement westley = sceneList.createElement("westley");
    sceneList.appendChild(westley);

    QDomElement producer = sceneList.createElement("producer");
    producer.setAttribute("id", 0);
    producer.setAttribute("mlt_service", "westley");
    producer.setAttribute("resource", fileURL().path());
    westley.appendChild(producer);
    QDomElement playlist = sceneList.createElement("playlist");
    playlist.setAttribute("in", "0");
    playlist.setAttribute("out", QString::number(duration().frames(m_framesPerSecond)));
    QDomElement entry = sceneList.createElement("entry");
    entry.setAttribute("producer", 0);
    playlist.appendChild(entry);
    westley.appendChild(playlist);

    return sceneList;

}

void DocClipVirtual::populateSceneTimes(QValueVector < GenTime >
    &toPopulate) const
{
    toPopulate.append(GenTime(0));
    toPopulate.append(duration());
}

GenTime DocClipVirtual::virtualStartTime() const
{
    return m_start;
}

GenTime DocClipVirtual::virtualEndTime() const
{
    return m_end;
}

00179 uint DocClipVirtual::fileSize() const
{
    return 0;
}

00184 uint DocClipVirtual::numReferences() const
{
#warning TODO - write this funtion.
}


// virtual
00191 bool DocClipVirtual::referencesClip(DocClipBase * clip) const
{
    return this == clip;
}

// virtual
QDomDocument DocClipVirtual::toXML() const
{
    QDomDocument doc = DocClipBase::toXML();
    QDomNode node = doc.firstChild();

    while (!node.isNull()) {
      QDomElement element = node.toElement();
      if (!element.isNull()) {
          if (element.tagName() == "kdenliveclip") {
            QDomElement avfile = doc.createElement("avfile");
            avfile.setAttribute("type", m_clipType);
                avfile.setAttribute("id", getId());
            avfile.setAttribute("url", m_url.path());
            avfile.setAttribute("duration", m_duration.frames(m_framesPerSecond));
            avfile.setAttribute("virtualstart", m_start.frames(m_framesPerSecond));
            avfile.setAttribute("virtualend", m_end.frames(m_framesPerSecond));
            avfile.setAttribute("durationknown", m_durationKnown );
            avfile.setAttribute("description", description());
            avfile.setAttribute("name", name());
            avfile.setAttribute("width", m_width);
            avfile.setAttribute("height", m_height);
            element.appendChild(avfile);
            
            return doc;
          }
      }
      node = node.nextSibling();
    }


    assert(node.isNull());

    /* This final return should never be reached, it is here to remove compiler warning. */
    return doc;
}

// virtual
00234 bool DocClipVirtual::matchesXML(const QDomElement & element) const
{
    bool result = false;

    if (element.tagName() == "kdenliveclip") {
      bool found = false;
      QDomNode n = element.firstChild();
      while (!n.isNull()) {
          QDomElement avElement = n.toElement();      // try to convert the node to an element.

          if (!avElement.isNull()) {
            if (avElement.tagName() == "avfile") {
                if (found) {
                  kdWarning() <<
                      "Clip contains multiple avclip definitions, only matching XML of the first one,"
                      << endl;
                  break;
                } else {
                  found = true;
                  //if(avElement.attribute("url") == fileURL().url()) {
                  if (avElement.attribute("id") ==
                      QString::number(getId())) {
                      result = true;
                  }
                }
            }
          }

          n = n.nextSibling();
      }
    }

    return result;
}




Generated by  Doxygen 1.6.0   Back to index