106 lines
2.2 KiB
C
106 lines
2.2 KiB
C
|
#ifndef PROJECTITEM_H
|
||
|
#define PROJECTITEM_H
|
||
|
|
||
|
#include <string>
|
||
|
#include <boost/filesystem.hpp>
|
||
|
|
||
|
namespace Ember
|
||
|
{
|
||
|
class Project;
|
||
|
|
||
|
class ProjectItem
|
||
|
{
|
||
|
public:
|
||
|
enum ProjectItemType
|
||
|
{
|
||
|
UNKNOWN,
|
||
|
MISSING,
|
||
|
DIRECTORY,
|
||
|
IMAGE,
|
||
|
AUDIO,
|
||
|
VIDEO,
|
||
|
SUBTITLES,
|
||
|
PROJECT,
|
||
|
COMPOSITION,
|
||
|
SEQUENCE
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* @brief ProjectItem constructor
|
||
|
* @param name Name corresponding to file on disk
|
||
|
* @param parent Parent project item
|
||
|
* @param project Assigned project
|
||
|
*/
|
||
|
ProjectItem(boost::filesystem::path path, ProjectItem* parent, Project* project);
|
||
|
|
||
|
// Getters
|
||
|
/**
|
||
|
* @brief Gets the name of the item
|
||
|
* @return Name
|
||
|
*/
|
||
|
std::string name() const;
|
||
|
|
||
|
/**
|
||
|
* @brief Gets the type of the item.
|
||
|
* @return Type of item
|
||
|
*/
|
||
|
ProjectItemType type();
|
||
|
|
||
|
/**
|
||
|
* @brief Gets the parent project item.
|
||
|
* @return Parent item
|
||
|
*/
|
||
|
ProjectItem *parent() const;
|
||
|
|
||
|
/**
|
||
|
* @brief Gets the parent project
|
||
|
* @return Parent project
|
||
|
*/
|
||
|
Project *project() const;
|
||
|
|
||
|
/**
|
||
|
* @brief Gets a list of children. If not a directory, the list will be empty.
|
||
|
* @return Vector of children.
|
||
|
*/
|
||
|
const std::vector<ProjectItem *>& children();
|
||
|
|
||
|
/**
|
||
|
* @brief Gets the path of this project item
|
||
|
* @return
|
||
|
*/
|
||
|
boost::filesystem::path path() const;
|
||
|
|
||
|
// Action
|
||
|
/**
|
||
|
* @brief Sets the name of the item. Will result in a disk rename.
|
||
|
* @param name New name
|
||
|
*/
|
||
|
void rename(const std::string &name);
|
||
|
|
||
|
/**
|
||
|
* @brief Sets the parent project item. Will result in a disk move.
|
||
|
* @param newParent New parent
|
||
|
*/
|
||
|
void move(ProjectItem *newParent);
|
||
|
|
||
|
/**
|
||
|
* @brief Delete from the disk. 'this' object is DELETED!
|
||
|
* TODO: recycle bin or permanent delete?
|
||
|
*/
|
||
|
void unlink();
|
||
|
|
||
|
private:
|
||
|
ProjectItem* unparentChild(ProjectItem* child);
|
||
|
|
||
|
boost::filesystem::path m_path;
|
||
|
ProjectItemType m_type;
|
||
|
bool m_typeLoaded;
|
||
|
ProjectItem* m_parent;
|
||
|
std::vector<ProjectItem*> m_children;
|
||
|
bool m_childrenLoaded;
|
||
|
Project* m_project;
|
||
|
};
|
||
|
|
||
|
}
|
||
|
#endif // PROJECTITEM_H
|