X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipmanager.h;h=172d0d527e722e1e6265e8017d31b38fc424e91a;hb=a3eee7be24126f5a3458d488f44cd61c66135e17;hp=d5e2bbb34d4f7c6a69076902a0cc930d4aba366c;hpb=7ac1f7b70439ce38c29fb6ff02439f24cb040ccc;p=kdenlive diff --git a/src/clipmanager.h b/src/clipmanager.h index d5e2bbb3..172d0d52 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -17,21 +17,33 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ +/** + * @class ClipManager + * @brief Manages the list of clips in a document. + * @author Jean-Baptiste Mardelle + */ + #ifndef CLIPMANAGER_H #define CLIPMANAGER_H -/**ClipManager manages the list of clips in a document - *@author Jean-Baptiste Mardelle - */ - -#include +#include #include #include +#include +#include +#include #include #include #include #include +#include +#include + +#if KDE_IS_VERSION(4,5,0) +#include +#endif + #include "gentime.h" #include "definitions.h" @@ -40,30 +52,58 @@ class KdenliveDoc; class DocClipBase; class AbstractGroupItem; +class QGLWidget; + + +class SolidVolumeInfo +{ + +public: + QString path; // mount path of volume, with trailing slash + QString uuid; // UUID as from Solid + QString label; // volume label (think of CDs) + bool isRemovable; // may be removed + bool isMounted; + + bool isNull() const { return path.isNull(); } +}; namespace Mlt { class Producer; -}; +} class ClipManager: public QObject { Q_OBJECT public: - ClipManager(KdenliveDoc *doc); + ClipManager(KdenliveDoc *doc, QGLWidget *glContext); virtual ~ ClipManager(); void addClip(DocClipBase *clip); DocClipBase *getClipAt(int pos); void deleteClip(const QString &clipId); - void slotAddClipFile(const KUrl url, const QString group, const QString &groupId); - void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId); - void slotAddTextClipFile(const QString titleName, int out, const QString xml, const QString group, const QString &groupId); - void slotAddTextTemplateClip(QString titleName, const KUrl path, const QString group, const QString &groupId); - void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId); - 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); + + /** @brief Add a file to the project. + * @ref slotAddClipList + * @param url file to add + * @param group name of the group to insert the file in (can be empty) + * @param groupId id of the group (if any) */ + void slotAddClipFile(const KUrl &url, const QMap &data); + + /** @brief Adds a list of files to the project. + * @param urls files to add + * @param group name of the group to insert the files in (can be empty) + * @param groupId id of the group (if any) + * It checks for duplicated items and asks to the user for instructions. */ + void slotAddClipList(const KUrl::List &urls, const QMap &data); + void slotAddTextClipFile(const QString &titleName, int out, const QString &xml, const QString &group, const QString &groupId); + void slotAddTextTemplateClip(QString titleName, const KUrl &path, const QString &group, const QString &groupId); + void slotAddXmlClipFile(const QString &name, const QDomElement &xml, const QString &group, const QString &groupId); + void slotAddColorClipFile(const QString &name, const QString &color, const QString &duration, const QString &group, const QString &groupId); + void slotAddSlideshowClipFile(QMap properties, const QString &group, const QString &groupId); DocClipBase *getClipById(QString clipId); - const QList getClipByResource(QString resource); - void slotDeleteClip(const QString & clipId); + const QList getClipByResource(const QString &resource); + void slotDeleteClips(QStringList ids); void setThumbsProgress(const QString &message, int progress); void checkAudioThumbs(); QList documentClipList() const; @@ -71,26 +111,44 @@ Q_OBJECT public: int getFreeClipId(); int getFreeFolderId(); int lastClipId() const; - void startAudioThumbsGeneration(); - void endAudioThumbsGeneration(const QString &requestedId); void askForAudioThumb(const QString &id); QString projectFolder() const; void clearUnusedProducers(); - void resetProducersList(const QList prods); + void resetProducersList(const QList prods, bool displayRatioChanged, bool fpsChanged); void addFolder(const QString&, const QString&); void deleteFolder(const QString&); void clear(); + void clearCache(); AbstractGroupItem *createGroup(); void removeGroup(AbstractGroupItem *group); QDomElement groupsXml() const; + int clipsCount() const; + /** @brief remove a clip id from the queue list. */ + void stopThumbs(const QString &id); + void projectTreeThumbReady(const QString &id, int frame, const QImage &img, int type); -public slots: - void updatePreviewSettings(); +#if KDE_IS_VERSION(4,5,0) + KImageCache* pixmapCache; +#endif +public slots: + /** @brief Request creation of a clip thumbnail for specified frames. */ + void slotRequestThumbs(const QString &id, const QList &frames); + private slots: + /** A clip was externally modified, monitor for more changes and prepare for reload */ void slotClipModified(const QString &path); + void slotClipMissing(const QString &path); + void slotClipAvailable(const QString &path); + /** Check the list of externally modified clips, and process them if they were not modified in the last 1500 milliseconds */ + void slotProcessModifiedClips(); + void slotGetThumbs(); + void slotGetAudioThumbs(); + /** @brief Clip has been copied, add it now. */ + void slotAddClip(KIO::Job *job, const KUrl &, const KUrl &dst); private: // Private attributes + QGLWidget *m_mainGLContext; /** the list of clips in the document */ QList m_clipList; /** the list of groups in the document */ @@ -101,13 +159,45 @@ private: // Private attributes KdenliveDoc *m_doc; int m_clipIdCounter; int m_folderIdCounter; - bool m_audioThumbsEnabled; - QString m_generatingAudioId; KDirWatch m_fileWatcher; + /** Timer used to reload clips when they have been externally modified */ + QTimer m_modifiedTimer; + /** List of the clip IDs that need to be reloaded after being externally modified */ + QMap m_modifiedClips; + /** Struct containing the list of clip thumbnails to request (clip id and frames) */ + QMap m_requestedThumbs; + QMutex m_thumbsMutex; + QFuture m_thumbsThread; + /** @brief The id of currently processed clip for thumbs creation. */ + QString m_processingThumbId; + /** @brief If true, abort processing of clip thumbs before removing a clip. */ + bool m_abortThumb; + /** @brief We are about to delete the clip producer, stop processing thumbs. */ + bool m_closing; + QFuture m_audioThumbsThread; + /** @brief If true, abort processing of audio thumbs. */ + bool m_abortAudioThumb; + /** @brief The id of currently processed clip for audio thumbs creation. */ + QString m_processingAudioThumbId; + /** @brief The list of removable drives. */ + QList m_removableVolumes; + + QPoint m_projectTreeThumbSize; + + /** @brief Get a list of drives, to check if we have files on removable media. */ + void listRemovableVolumes(); + /** @brief Check if added file is on a removable drive. */ + bool isOnRemovableDevice(const KUrl &url); signals: void reloadClip(const QString &); - void checkAllClips(); + void modifiedClip(const QString &); + void missingClip(const QString &); + void availableClip(const QString &); + void checkAllClips(bool displayRatioChanged, bool fpsChanged, const QStringList &brokenClips); + void displayMessage(const QString &, int); + void thumbReady(const QString &id, int, const QImage&); + void gotClipPropertyThumbnail(const QString &id, const QImage&); }; #endif