Logo Search packages:      
Sourcecode: kdenlive version File versions

kdenlivedoc.h

/***************************************************************************
 *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
 ***************************************************************************/


#ifndef KDENLIVEDOC_H
#define KDENLIVEDOC_H

#include <qdom.h>
#include <QString>
#include <QMap>
#include <QList>
#include <QDir>
#include <QObject>
#include <QUndoGroup>
#include <QUndoStack>
#include <QTimer>

#include <KUrl>
#include <kautosavefile.h>

#include "gentime.h"
#include "timecode.h"
#include "definitions.h"
#include "guide.h"

class Render;
class ClipManager;
class DocClipBase;
class MainWindow;
class TrackInfo;

class KdenliveDoc: public QObject {
Q_OBJECT public:

    KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QPoint tracks, Render *render, MainWindow *parent = 0);
    ~KdenliveDoc();
    QDomNodeList producersList();
    double fps() const;
    int width() const;
    int height() const;
    KUrl url() const;
    KAutoSaveFile *m_autosave;
    void backupMltPlaylist();
    Timecode timecode() const;
    QDomDocument toXml();
    //void setRenderer(Render *render);
    QUndoStack *commandStack();
    QString producerName(const QString &id);
    void setProducerDuration(const QString &id, int duration);
    int getProducerDuration(const QString &id);
    Render *renderer();
    QDomElement m_guidesXml;
    QDomElement guidesXml() const;
    ClipManager *clipManager();
    void addClip(QDomElement elem, QString clipId, bool createClipItem = true);
    void addClipInfo(QDomElement elem, QString clipId);
    void addFolder(const QString foldername, const QString &clipId, bool edit);
    void deleteFolder(const QString foldername, const QString &clipId);
    void slotAddClipFile(const KUrl url, const QString group, const QString &groupId = QString());
    void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId = QString());
    void slotAddFolder(const QString folderName);
    void slotDeleteFolder(const QString folderName, const QString &id);
    void slotEditFolder(const QString folderName, const QString oldfolderName, const QString &clipId);
    void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId = QString());
    void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId = QString());
    void deleteClip(const QString &clipId);
    int getFramePos(QString duration);
    DocClipBase *getBaseClip(const QString &clipId);
    void updateClip(const QString &id);
    void deleteProjectClip(QList <QString> ids);
    void deleteProjectFolder(QMap <QString, QString> map);
    /** Inform application of the audio thumbnails generation progress */
    void setThumbsProgress(const QString &message, int progress);
    QString profilePath() const;
    MltVideoProfile mltProfile() const;
    QString description() const;
    void setUrl(KUrl url);
    void setProfilePath(QString path);
    const QString &getFreeClipId();
    /** does the document need saving */
    bool isModified() const;
    /** Returns project folder, used to store project files (titles, effects,...) */
    KUrl projectFolder() const;
    /** Used to inform main app of the current document loading progress */
    void loadingProgressed();
    void syncGuides(QList <Guide *> guides);
    void setZoom(int factor);
    int zoom() const;
    const double dar();
    double projectDuration() const;
    bool saveSceneList(const QString &path, QDomDocument sceneList);
    int tracksCount() const;
    TrackInfo trackInfoAt(int ix) const;
    void insertTrack(int ix, TrackInfo type);
    void deleteTrack(int ix);
    void setTrackType(int ix, TrackInfo type);
    const QList <TrackInfo> tracksList() const;
    QPoint getTracksCount() const;
    QString getTracksInfo() const;
    void switchTrackVideo(int ix, bool hide);
    void switchTrackAudio(int ix, bool hide);
    void cachePixmap(const QString &fileId, const QPixmap &pix) const;
    void setProjectFolder(KUrl url);
    QString getLadspaFile() const;

private:
    KUrl m_url;
    QDomDocument m_document;
    QString m_projectName;
    double m_fps;
    int m_zoom;
    /** Cursor position at document opening */
    int m_startPos;
    int m_width;
    int m_height;
    Timecode m_timecode;
    Render *m_render;
    QUndoStack *m_commandStack;
    QDomDocument generateSceneList();
    ClipManager *m_clipManager;
    MltVideoProfile m_profile;
    QString m_scenelist;
    QTimer *m_autoSaveTimer;
    QString m_searchFolder;
    /** tells whether current doc has been changed since last save event */
    bool m_modified;
    /** Project folder, used to store project files (titles, effects,...) */
    KUrl m_projectFolder;
    double m_documentLoadingStep;
    double m_documentLoadingProgress;

    QList <TrackInfo> m_tracksList;

    bool convertDocument(double version);
    QDomDocument createEmptyDocument(const int videotracks, const int audiotracks);
    QString colorToString(const QColor& c);
    void checkProjectClips();
    void setNewClipResource(const QString &id, const QString &path);
    QString searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const;
    void moveProjectData(KUrl url);

public slots:
    void slotCreateTextClip(QString group, const QString &groupId);
    /** Set to true if document needs saving, false otherwise */
    void setModified(bool mod = true);

private slots:
    void slotAutoSave();

signals:
    void addProjectClip(DocClipBase *, bool getInfo = true);
    void addProjectFolder(const QString, const QString &, bool, bool edit = false);
    void signalDeleteProjectClip(const QString &);
    void updateClipDisplay(const QString&);
    void deleteTimelineClip(const QString&);
    void progressInfo(const QString &, int);
    /** emited when the document state has been modified (= needs saving or not) */
    void docModified(bool);
    void selectLastAddedClip(const QString &);
    void guidesUpdated();
};

#endif

Generated by  Doxygen 1.6.0   Back to index