summaryrefslogtreecommitdiffstats
path: root/libk3b/projects/datacd/k3bdatadoc.h
diff options
context:
space:
mode:
Diffstat (limited to 'libk3b/projects/datacd/k3bdatadoc.h')
-rw-r--r--libk3b/projects/datacd/k3bdatadoc.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/libk3b/projects/datacd/k3bdatadoc.h b/libk3b/projects/datacd/k3bdatadoc.h
new file mode 100644
index 0000000..e09177a
--- /dev/null
+++ b/libk3b/projects/datacd/k3bdatadoc.h
@@ -0,0 +1,297 @@
+/*
+ *
+ * $Id: k3bdatadoc.h 619556 2007-01-03 17:38:12Z trueg $
+ * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
+ *
+ * This file is part of the K3b project.
+ * Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.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.
+ * See the file "COPYING" for the exact licensing terms.
+ */
+
+
+#ifndef K3BDATADOC_H
+#define K3BDATADOC_H
+
+#include <k3bdoc.h>
+#include <k3bdataitem.h>
+
+#include "k3bisooptions.h"
+
+#include <qptrlist.h>
+#include <qfileinfo.h>
+#include <qstringlist.h>
+
+#include <kurl.h>
+#include <kio/global.h>
+#include "k3b_export.h"
+
+class K3bDataItem;
+class K3bRootItem;
+class K3bDirItem;
+class K3bFileItem;
+class K3bJob;
+class K3bBootItem;
+class K3bFileCompilationSizeHandler;
+
+class KProgressDialog;
+//class K3bView;
+class KConfig;
+class QString;
+class QStringList;
+class QWidget;
+class QDomDocument;
+class QDomElement;
+class K3bIso9660Directory;
+
+namespace K3bDevice {
+ class Device;
+ class DeviceHandler;
+}
+
+
+/**
+ *@author Sebastian Trueg
+ */
+
+class LIBK3B_EXPORT K3bDataDoc : public K3bDoc
+{
+ Q_OBJECT
+
+ public:
+ K3bDataDoc( QObject* parent = 0 );
+ virtual ~K3bDataDoc();
+
+ virtual int type() const { return DATA; }
+ virtual QString typeString() const;
+
+ virtual QString name() const;
+
+ enum MultiSessionMode {
+ /**
+ * Let the K3bDataJob decide if to close the CD or not.
+ * The decision is based on the state of the inserted media
+ * (appendable/closed), the size of the project (will it fill
+ * up the CD?), and the free space on the inserted media.
+ */
+ AUTO,
+ NONE,
+ START,
+ CONTINUE,
+ FINISH
+ };
+
+ K3bRootItem* root() const { return m_root; }
+
+ virtual bool newDocument();
+ virtual KIO::filesize_t size() const;
+
+ /**
+ * This is used for multisession where size() also returnes the imported session's size
+ */
+ virtual KIO::filesize_t burningSize() const;
+ virtual K3b::Msf length() const;
+ virtual K3b::Msf burningLength() const;
+
+ /**
+ * Simply deletes the item if it is removable (meaning isRemovable() returns true.
+ * Be aware that you can remove items simply by deleting them even if isRemovable()
+ * returns false.
+ */
+ void removeItem( K3bDataItem* item );
+
+ /**
+ * Simply calls reparent.
+ */
+ void moveItem( K3bDataItem* item, K3bDirItem* newParent );
+ void moveItems( QPtrList<K3bDataItem> itemList, K3bDirItem* newParent );
+
+ K3bDirItem* addEmptyDir( const QString& name, K3bDirItem* parent );
+
+ QString treatWhitespace( const QString& );
+
+ virtual K3bBurnJob* newBurnJob( K3bJobHandler* hdl, QObject* parent = 0 );
+
+ MultiSessionMode multiSessionMode() const { return m_multisessionMode; }
+ void setMultiSessionMode( MultiSessionMode mode );
+
+ int dataMode() const { return m_dataMode; }
+ void setDataMode( int m ) { m_dataMode = m; }
+
+ void setVerifyData( bool b ) { m_verifyData = b; }
+ bool verifyData() const { return m_verifyData; }
+
+ static bool nameAlreadyInDir( const QString&, K3bDirItem* );
+
+ /**
+ * Most of the options that map to the mkisofs parameters are grouped
+ * together in the K3bIsoOptions class to allow easy saving to and loading
+ * from a KConfig object.
+ */
+ const K3bIsoOptions& isoOptions() const { return m_isoOptions; }
+ void setIsoOptions( const K3bIsoOptions& );
+
+ const QPtrList<K3bBootItem>& bootImages() { return m_bootImages; }
+ K3bDataItem* bootCataloge() { return m_bootCataloge; }
+
+ K3bDirItem* bootImageDir();
+
+ /**
+ * Create a boot item and also create a boot cataloge file in case none
+ * exists in the project.
+ *
+ * Calling this method has the same effect like creating a new K3bBootItem
+ * instance manually and then calling createBootCatalogeItem.
+ *
+ * \return The new boot item on success or 0 in case a file with the same
+ * name already exists.
+ */
+ K3bBootItem* createBootItem( const QString& filename, K3bDirItem* bootDir = 0 );
+
+ /**
+ * Create a new boot catalog item.
+ * For now this is not called automatically for internal reasons.
+ *
+ * Call this if you create boot items manually instead of using createBootItem.
+ *
+ * The boot catalog is automatically deleted once the last boot item is removed
+ * from the doc.
+ *
+ * \return The new boot catalog item or the old one if it already exists.
+ */
+ K3bDataItem* createBootCatalogeItem( K3bDirItem* bootDir );
+
+ /**
+ * This will prepare the filenames as written to the image.
+ * These filenames are saved in K3bDataItem::writtenName
+ */
+ void prepareFilenames();
+
+ /**
+ * Returns true if filenames need to be cut due to the limitations of Joliet.
+ *
+ * This is only valid after a call to @p prepareFilenames()
+ */
+ bool needToCutFilenames() const { return m_needToCutFilenames; }
+
+ const QValueList<K3bDataItem*>& needToCutFilenameItems() const { return m_needToCutFilenameItems; }
+
+ /**
+ * Imports a session into the project. This will create K3bSessionImportItems
+ * and properly set the imported session size.
+ * Some settings will be adjusted to the imported session (joliet, rr).
+ *
+ * Be aware that this method is blocking.
+ *
+ * \return true if the old session was successfully imported, false if no
+ * session could be found.
+ *
+ * \see clearImportedSession()
+ */
+ bool importSession( K3bDevice::Device* );
+
+ bool sessionImported() const;
+
+ /**
+ * Searches for an item by it's local path.
+ *
+ * NOT IMPLEMENTED YET!
+ *
+ * \return The items that correspond to the specified local path.
+ */
+ QValueList<K3bDataItem*> findItemByLocalPath( const QString& path ) const;
+
+ public slots:
+ virtual void addUrls( const KURL::List& urls );
+
+ /**
+ * Add urls syncroneously
+ * This method adds files recursively including symlinks, hidden, and system files.
+ * If a file already exists the new file's name will be appended a number.
+ */
+ virtual void addUrls( const KURL::List& urls, K3bDirItem* dir );
+
+ void clearImportedSession();
+
+ /**
+ * Just a convience method to prevent using setIsoOptions for this
+ * often used value.
+ */
+ void setVolumeID( const QString& );
+
+ signals:
+ void itemRemoved( K3bDataItem* );
+ void itemAdded( K3bDataItem* );
+
+ protected:
+ /** reimplemented from K3bDoc */
+ virtual bool loadDocumentData( QDomElement* root );
+ /** reimplemented from K3bDoc */
+ virtual bool saveDocumentData( QDomElement* );
+
+ void saveDocumentDataOptions( QDomElement& optionsElem );
+ void saveDocumentDataHeader( QDomElement& headerElem );
+ bool loadDocumentDataOptions( QDomElement optionsElem );
+ bool loadDocumentDataHeader( QDomElement optionsElem );
+
+ K3bFileCompilationSizeHandler* m_sizeHandler;
+
+ // K3bFileCompilationSizeHandler* m_oldSessionSizeHandler;
+ KIO::filesize_t m_oldSessionSize;
+
+ private:
+ void prepareFilenamesInDir( K3bDirItem* dir );
+ void createSessionImportItems( const K3bIso9660Directory*, K3bDirItem* parent );
+
+ /**
+ * used by K3bDirItem to inform about removed items.
+ */
+ void itemRemovedFromDir( K3bDirItem* parent, K3bDataItem* removedItem );
+ void itemAddedToDir( K3bDirItem* parent, K3bDataItem* addedItem );
+
+ /**
+ * load recursivly
+ */
+ bool loadDataItem( QDomElement& e, K3bDirItem* parent );
+ /**
+ * save recursivly
+ */
+ void saveDataItem( K3bDataItem* item, QDomDocument* doc, QDomElement* parent );
+
+ void informAboutNotFoundFiles();
+
+ QStringList m_notFoundFiles;
+ QStringList m_noPermissionFiles;
+
+ K3bRootItem* m_root;
+
+ int m_dataMode;
+
+ bool m_verifyData;
+
+ KIO::filesize_t m_size;
+
+ K3bIsoOptions m_isoOptions;
+
+ MultiSessionMode m_multisessionMode;
+ QPtrList<K3bDataItem> m_oldSession;
+
+ // boot cd stuff
+ K3bDataItem* m_bootCataloge;
+ QPtrList<K3bBootItem> m_bootImages;
+
+ bool m_bExistingItemsReplaceAll;
+ bool m_bExistingItemsIgnoreAll;
+
+ bool m_needToCutFilenames;
+ QValueList<K3bDataItem*> m_needToCutFilenameItems;
+
+ friend class K3bMixedDoc;
+ friend class K3bDirItem;
+};
+
+#endif