| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <string> |
| |
|
| | #include <App/Application.h> |
| |
|
| | #include "Exceptions.h" |
| | #include "Library.h" |
| |
|
| |
|
| | using namespace Materials; |
| |
|
| | TYPESYSTEM_SOURCE(Materials::Library, Base::BaseClass) |
| |
|
| | Library::Library(const QString& libraryName, const QString& iconPath, bool readOnly) |
| | : _name(libraryName) |
| | , _readOnly(readOnly) |
| | , _local(false) |
| | { |
| | setIcon(iconPath); |
| | } |
| |
|
| | Library::Library(const QString& libraryName, const QByteArray& icon, bool readOnly) |
| | : _name(libraryName) |
| | , _icon(icon) |
| | , _readOnly(readOnly) |
| | , _local(false) |
| | {} |
| |
|
| | Library::Library(const QString& libraryName, |
| | const QString& dir, |
| | const QString& iconPath, |
| | bool readOnly) |
| | : _name(libraryName) |
| | , _directory(QDir::cleanPath(dir)) |
| | , _readOnly(readOnly) |
| | , _local(false) |
| | { |
| | setIcon(iconPath); |
| | } |
| |
|
| | QByteArray Library::getIcon(const QString& iconPath) |
| | { |
| | QFile file(iconPath); |
| | if (!file.open(QIODevice::ReadOnly)) { |
| | Base::Console().log("Failed to open icon file '%s'\n", iconPath.toStdString().c_str()); |
| | return QByteArray(); |
| | } |
| |
|
| | QByteArray data = file.readAll(); |
| | file.close(); |
| | return data; |
| | } |
| |
|
| | void Library::setIcon(const QString& iconPath) |
| | { |
| | _icon = getIcon(iconPath); |
| | } |
| |
|
| | bool Library::isLocal() const |
| | { |
| | return _local; |
| | } |
| |
|
| | void Library::setLocal(bool local) |
| | { |
| | _local = local; |
| | } |
| |
|
| | bool Library::operator==(const Library& library) const |
| | { |
| | return (getName() == library.getName()) && (_directory == library._directory); |
| | } |
| |
|
| | void Library::validate(const Library& remote) const |
| | { |
| | if (getName() != remote.getName()) { |
| | throw InvalidLibrary("Library names don't match"); |
| | } |
| | if (getIcon() != remote.getIcon()) { |
| | throw InvalidLibrary("Library icons don't match"); |
| | } |
| |
|
| | |
| | if (!remote.getDirectory().isEmpty()) { |
| | throw InvalidLibrary("Remote library should not have a path"); |
| | } |
| |
|
| | if (isReadOnly() != remote.isReadOnly()) { |
| | throw InvalidLibrary("Library readonly settings don't match"); |
| | } |
| | } |
| |
|
| | QString Library::getLocalPath(const QString& path) const |
| | { |
| | QString filePath = getDirectoryPath(); |
| | if (!(filePath.endsWith(QStringLiteral("/")) || filePath.endsWith(QStringLiteral("\\")))) { |
| | filePath += QStringLiteral("/"); |
| | } |
| |
|
| | QString cleanPath = QDir::cleanPath(path); |
| | QString prefix = QStringLiteral("/") + getName(); |
| | if (cleanPath.startsWith(prefix)) { |
| | |
| | filePath += cleanPath.right(cleanPath.length() - prefix.length()); |
| | } |
| | else { |
| | filePath += cleanPath; |
| | } |
| |
|
| | return filePath; |
| | } |
| |
|
| | bool Library::isRoot(const QString& path) const |
| | { |
| | QString localPath = getLocalPath(path); |
| | QString cleanPath = getLocalPath(QStringLiteral("")); |
| | return (cleanPath == localPath); |
| | } |
| |
|
| | QString Library::getRelativePath(const QString& path) const |
| | { |
| | QString filePath; |
| | QString cleanPath = QDir::cleanPath(path); |
| | QString prefix = QStringLiteral("/") + getName(); |
| | if (cleanPath.startsWith(prefix)) { |
| | |
| | filePath = cleanPath.right(cleanPath.length() - prefix.length()); |
| | } |
| | else { |
| | filePath = cleanPath; |
| | } |
| |
|
| | prefix = getDirectoryPath(); |
| | if (filePath.startsWith(prefix)) { |
| | |
| | filePath = filePath.right(filePath.length() - prefix.length()); |
| | } |
| |
|
| | |
| | if (filePath.startsWith(QStringLiteral("/"))) { |
| | filePath.remove(0, 1); |
| | } |
| |
|
| | return filePath; |
| | } |
| |
|
| | QString Library::getLibraryPath(const QString& path, const QString& filename) const |
| | { |
| | QString filePath(path); |
| | if (filePath.endsWith(filename)) { |
| | filePath = filePath.left(filePath.length() - filename.length()); |
| | } |
| | if (filePath.endsWith(QStringLiteral("/"))) { |
| | filePath = filePath.left(filePath.length() - 1); |
| | } |
| |
|
| | return filePath; |
| | } |
| |
|