X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivedoc.h;h=8acf632842b74486dfb6bbaaae218274b98c9a72;hb=aa95245a04e8dd94de03eabcbc72a7140f2283a4;hp=29c088612a5eb39d8f51d1178474f993326a445c;hpb=f697b9fd5408e77412f2ee35aa406173630890bf;p=kdenlive diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index 29c08861..8acf6328 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -1,58 +1,247 @@ /*************************************************************************** - krender.h - description - ------------------- - begin : Fri Nov 22 2002 - copyright : (C) 2002 by Jason Wood - email : jasonwood@blueyonder.co.uk -***************************************************************************/ - -/*************************************************************************** + * 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 -#include -#include +#include +#include #include +#include #include -#include +#include +#include #include "gentime.h" #include "timecode.h" +#include "definitions.h" +#include "guide.h" -class KdenliveDoc:public QObject { - Q_OBJECT public: +class Render; +class ClipManager; +class DocClipBase; +class MainWindow; +class TrackInfo; - KdenliveDoc(KUrl url, double fps, int width, int height, QWidget *parent = 0); +class KTextEdit; +class KProgressDialog; +class QGLWidget; +class QUndoGroup; +class QTimer; +class QUndoStack; + +class KdenliveDoc: public QObject +{ + Q_OBJECT +public: + + KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QMap & properties, const QMap & metadata, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, QGLWidget *glContext, MainWindow *parent = 0, KProgressDialog *progressDialog = 0); ~KdenliveDoc(); - QString documentName(); QDomNodeList producersList(); - double fps(); - int width(); - int height(); - void setProducers(QDomElement doc); - Timecode timecode(); + double fps() const; + int width() const; + int height() const; + KUrl url() const; + KAutoSaveFile *m_autosave; + Timecode timecode() const; + QDomDocument toXml(); + //void setRenderer(Render *render); + QUndoStack *commandStack(); + QString producerName(const QString &id); + Render *renderer(); + QDomDocument m_guidesXml; + QDomElement guidesXml() const; + ClipManager *clipManager(); + + /** @brief Adds a clip to the project tree. + * @return false if the user aborted the operation, true otherwise */ + bool addClip(QDomElement elem, const QString &clipId, bool createClipItem = true); + + /** @brief Updates information about a clip. + * @param elem the + * @param orig the potential + * @param clipId the producer id + * @return false if the user aborted the operation (in case the clip wasn't + * there yet), true otherwise + * + * If the clip wasn't added before, it tries to add it to the project. */ + bool addClipInfo(QDomElement elem, QDomElement orig, const QString &clipId); + void slotAddClipList(const KUrl::List &urls, const stringMap &data = stringMap()); + void deleteClip(const QString &clipId); + int getFramePos(const QString &duration); + DocClipBase *getBaseClip(const QString &clipId); + void updateClip(const QString &id); + + /** @brief Informs Kdenlive of the audio thumbnails generation progress. */ + void setThumbsProgress(const QString &message, int progress); + const QString &profilePath() const; + MltVideoProfile mltProfile() const; + const QString description() const; + void setUrl(const KUrl &url); + + /** @brief Updates the project profile. + * @return true if frame rate was changed */ + bool setProfilePath(QString path); + const QString getFreeClipId(); + + /** @brief Defines whether the document needs to be saved. */ + bool isModified() const; + + /** @brief Returns the project folder, used to store project files. */ + KUrl projectFolder() const; + void syncGuides(const QList &guides); + void setZoom(int horizontal, int vertical); + QPoint zoom() const; + double dar() const; + double projectDuration() const; + /** @brief Returns the project file xml. */ + QDomDocument xmlSceneList(const QString &scene, const QStringList &expandedFolders); + /** @brief Saves the project file xml to a file. */ + bool saveSceneList(const QString &path, const QString &scene, const QStringList &expandedFolders, bool autosave = false); + int tracksCount() const; + TrackInfo trackInfoAt(int ix) const; + void insertTrack(int ix, const TrackInfo &type); + void deleteTrack(int ix); + void setTrackType(int ix, const TrackInfo &type); + const QList tracksList() const; + + /** @brief Gets the number of audio and video tracks and returns them as a QPoint with x = video, y = audio. */ + QPoint getTracksCount() const; + + void switchTrackVideo(int ix, bool hide); + void switchTrackAudio(int ix, bool hide); + void switchTrackLock(int ix, bool lock); + bool isTrackLocked(int ix) const; - private: + /** @brief Sets the duration of track @param ix to @param duration. + * This does not! influence the actual track but only the value in its TrackInfo. */ + void setTrackDuration(int ix, int duration); + + /** @brief Returns the duration of track @param ix. + * + * The returned duration might differ from the actual track duration! + * It is the one stored in the track's TrackInfo. */ + int trackDuration(int ix); + void cacheImage(const QString &fileId, const QImage &img) const; + void setProjectFolder(KUrl url); + void setZone(int start, int end); + QPoint zone() const; + int setSceneList(); + void setDocumentProperty(const QString &name, const QString &value); + const QString getDocumentProperty(const QString &name) const; + + /** @brief Gets the list of renderer properties saved into the document. */ + QMap getRenderProperties() const; + void addTrackEffect(int ix, QDomElement effect); + void removeTrackEffect(int ix, const QDomElement &effect); + void setTrackEffect(int trackIndex, int effectIndex, QDomElement effect); + const EffectsList getTrackEffects(int ix); + /** @brief Enable / disable an effect in Kdenlive's xml list. */ + void enableTrackEffects(int trackIndex, const QList &effectIndexes, bool disable); + QDomElement getTrackEffect(int trackIndex, int effectIndex) const; + /** @brief Check if a track already contains a specific effect. */ + int hasTrackEffect(int trackIndex, const QString &tag, const QString &id) const; + /** @brief Get a list of folder id's that were opened on last save. */ + QStringList getExpandedFolders(); + /** @brief Read the display ratio from an xml project file. */ + static double getDisplayRatio(const QString &path); + /** @brief Backup the project file */ + void backupLastSavedVersion(const QString &path); + /** @brief Returns the document metadata (author, copyright, ...) */ + const QMap metadata() const; + /** @brief Set the document metadata (author, copyright, ...) */ + void setMetadata(const QMap & meta); + +private: KUrl m_url; QDomDocument m_document; - QString m_projectName; double m_fps; int m_width; int m_height; Timecode m_timecode; + Render *m_render; + KTextEdit *m_notesWidget; + QUndoStack *m_commandStack; + ClipManager *m_clipManager; + MltVideoProfile m_profile; + QTimer *m_autoSaveTimer; + QString m_searchFolder; - public slots: - + /** @brief Tells whether the current document has been changed after being saved. */ + bool m_modified; + + /** @brief The project folder, used to store project files (titles, effects...). */ + KUrl m_projectFolder; + QMap m_documentProperties; + QMap m_documentMetadata; + + QList m_tracksList; + void setNewClipResource(const QString &id, const QString &path); + QString searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const; + void moveProjectData(const KUrl &url); + bool checkDocumentClips(QDomNodeList infoproducers); + + /** @brief Creates a new project. */ + QDomDocument createEmptyDocument(int videotracks, int audiotracks); + QDomDocument createEmptyDocument(const QList &tracks); + /** @brief Saves effects embedded in project file. + * @return True if effects were imported. */ + bool saveCustomEffects(const QDomNodeList &customeffects); + + /** @brief Updates the project folder location entry in the kdenlive file dialogs to point to the current project folder. */ + void updateProjectFolderPlacesEntry(); + /** @brief Only keep some backup files, delete some */ + void cleanupBackupFiles(); + +public slots: + void slotCreateXmlClip(const QString &name, const QDomElement &xml, const QString &group, const QString &groupId); + void slotCreateColorClip(const QString &name, const QString &color, const QString &duration, const QString &group, const QString &groupId); + void slotCreateSlideshowClipFile(const QMap &properties, const QString &group, const QString &groupId); + void slotCreateTextClip(QString group, const QString &groupId, const QString &templatePath = QString()); + void slotCreateTextTemplateClip(const QString &group, const QString &groupId, KUrl path); + + /** @brief Sets the document as modified or up to date. + * @param mod (optional) true if the document has to be saved */ + void setModified(bool mod = true); + void checkProjectClips(bool displayRatioChanged = false, bool fpsChanged = false); + void slotAddClipFile(const KUrl &url, const stringMap &data); + +private slots: + void slotAutoSave(); + +signals: + void resetProjectList(); + void addProjectClip(DocClipBase *, bool getInfo = true); + void signalDeleteProjectClip(const QString &); + void updateClipDisplay(const QString&); + void progressInfo(const QString &, int); + + /** @brief Informs that the document status has been changed. + * + * If the document has been modified, it's called with true as an argument. */ + void docModified(bool); + void selectLastAddedClip(const QString &); + void guidesUpdated(); + /** @brief When creating a backup file, also save a thumbnail of current timeline */ + void saveTimelinePreview(const QString &path); }; #endif