summaryrefslogtreecommitdiff
path: root/lyt
diff options
context:
space:
mode:
Diffstat (limited to 'lyt')
-rw-r--r--lyt/archivepackage.cpp168
-rw-r--r--lyt/archivepackage.h62
-rw-r--r--lyt/directorypackage.cpp2
-rw-r--r--lyt/packagebase.cpp3
-rw-r--r--lyt/packagebase.h1
5 files changed, 235 insertions, 1 deletions
diff --git a/lyt/archivepackage.cpp b/lyt/archivepackage.cpp
new file mode 100644
index 0000000..6b5a476
--- /dev/null
+++ b/lyt/archivepackage.cpp
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ This file is part of LayoutStudio (http://github.com/Treeki/LayoutStudio)
+ Copyright (c) 2010 Treeki (treeki@gmail.com)
+
+ 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, version 2.0.
+
+ 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 2.0 for more details.
+
+ You should have received a copy of the GNU General Public License 2.0
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*******************************************************************************/
+
+#include "archivepackage.h"
+
+#include <QtCore/QFile>
+
+LYTArchivePackage::LYTArchivePackage() : LYTPackageBase() {
+ m_archive = new WiiArchiveU8;
+}
+
+LYTArchivePackage::LYTArchivePackage(QString filename) : LYTPackageBase() {
+ m_filename = filename;
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QByteArray data = file.readAll();
+
+ QDataStream stream(data);
+ m_archive = new WiiArchiveU8(stream);
+}
+
+LYTArchivePackage::~LYTArchivePackage() {
+ delete m_archive;
+}
+
+
+
+WiiArchiveU8 *LYTArchivePackage::archive() {
+ return m_archive;
+}
+
+QString LYTArchivePackage::filename() {
+ return m_filename;
+}
+
+
+
+QStringList LYTArchivePackage::listSubDirIfExists(QString dirName) {
+ WiiFSObject *obj = this->m_archive->root.resolvePath(dirName);
+
+ if (obj && obj->isDirectory()) {
+ QStringList output;
+
+ foreach (WiiFSObject *ptr, ((WiiDirectory*)obj)->children) {
+ output.append(ptr->name);
+ }
+
+ return output;
+ }
+
+ return QStringList();
+}
+
+
+QByteArray LYTArchivePackage::getFileFromSubDirIfExists(QString dirName, QString fileName) {
+ WiiFSObject *obj = this->m_archive->root.resolvePath(QString("%1/%2").arg(dirName, fileName));
+
+ if (obj && obj->isFile()) {
+ return ((WiiFile*)obj)->data;
+ }
+
+ return QByteArray();
+}
+
+
+bool LYTArchivePackage::writeFileToSubDir(QString dirName, QString fileName, QByteArray data) {
+ WiiFSObject *obj = this->m_archive->root.resolvePath(QString("%1/%2").arg(dirName, fileName));
+
+ if (obj && obj->isFile()) {
+ ((WiiFile*)obj)->data = data;
+ return true;
+ }
+
+ return false;
+}
+
+
+
+
+QStringList LYTArchivePackage::listAnims() {
+ return this->listSubDirIfExists("arc/anim");
+}
+
+QStringList LYTArchivePackage::listLayouts() {
+ return this->listSubDirIfExists("arc/blyt");
+}
+
+QStringList LYTArchivePackage::listTextures() {
+ return this->listSubDirIfExists("arc/timg");
+}
+
+QStringList LYTArchivePackage::listFonts() {
+ return this->listSubDirIfExists("arc/font");
+}
+
+
+
+QByteArray LYTArchivePackage::getAnim(QString name) {
+ return this->getFileFromSubDirIfExists("arc/anim", name);
+}
+
+QByteArray LYTArchivePackage::getLayout(QString name) {
+ return this->getFileFromSubDirIfExists("arc/blyt", name);
+}
+
+QByteArray LYTArchivePackage::getTexture(QString name) {
+ return this->getFileFromSubDirIfExists("arc/timg", name);
+}
+
+QByteArray LYTArchivePackage::getFont(QString name) {
+ return this->getFileFromSubDirIfExists("arc/font", name);
+}
+
+
+
+bool LYTArchivePackage::writeAnim(QString name, QByteArray data) {
+ return this->writeFileToSubDir("arc/anim", name, data);
+}
+
+bool LYTArchivePackage::writeLayout(QString name, QByteArray data) {
+ return this->writeFileToSubDir("arc/blyt", name, data);
+}
+
+bool LYTArchivePackage::writeTexture(QString name, QByteArray data) {
+ return this->writeFileToSubDir("arc/timg", name, data);
+}
+
+bool LYTArchivePackage::writeFont(QString name, QByteArray data) {
+ return this->writeFileToSubDir("arc/font", name, data);
+}
+
+
+
+bool LYTArchivePackage::savePackage() {
+ QFile file(m_filename);
+
+ if (file.open(QFile::WriteOnly)) {
+ QByteArray data;
+ QDataStream stream(&data, QIODevice::ReadWrite);
+
+ m_archive->writeToDataStream(stream);
+ file.write(data);
+
+ return true;
+ }
+
+ return false;
+}
+
+
+QString LYTArchivePackage::description() {
+ return m_filename;
+}
diff --git a/lyt/archivepackage.h b/lyt/archivepackage.h
new file mode 100644
index 0000000..7ef1abd
--- /dev/null
+++ b/lyt/archivepackage.h
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ This file is part of LayoutStudio (http://github.com/Treeki/LayoutStudio)
+ Copyright (c) 2010 Treeki (treeki@gmail.com)
+
+ 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, version 2.0.
+
+ 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 2.0 for more details.
+
+ You should have received a copy of the GNU General Public License 2.0
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*******************************************************************************/
+
+#ifndef LYTARCHIVEPACKAGE_H
+#define LYTARCHIVEPACKAGE_H
+
+#include "packagebase.h"
+#include "wii/archiveu8.h"
+
+class LYTArchivePackage : public LYTPackageBase {
+public:
+ LYTArchivePackage();
+ LYTArchivePackage(QString filename);
+
+ ~LYTArchivePackage();
+
+ QStringList listAnims();
+ QStringList listLayouts();
+ QStringList listTextures();
+ QStringList listFonts();
+
+ QByteArray getAnim(QString name);
+ QByteArray getLayout(QString name);
+ QByteArray getTexture(QString name);
+ QByteArray getFont(QString name);
+
+ bool writeAnim(QString name, QByteArray data);
+ bool writeLayout(QString name, QByteArray data);
+ bool writeTexture(QString name, QByteArray data);
+ bool writeFont(QString name, QByteArray data);
+
+ bool savePackage();
+ QString description();
+
+ WiiArchiveU8 *archive();
+ QString filename();
+
+
+protected:
+ QStringList listSubDirIfExists(QString dirName);
+ QByteArray getFileFromSubDirIfExists(QString dirName, QString fileName);
+ bool writeFileToSubDir(QString dirName, QString fileName, QByteArray data);
+
+ WiiArchiveU8 *m_archive;
+ QString m_filename;
+};
+
+#endif // LYTARCHIVEPACKAGE_H
diff --git a/lyt/directorypackage.cpp b/lyt/directorypackage.cpp
index 84287e6..e8f31b9 100644
--- a/lyt/directorypackage.cpp
+++ b/lyt/directorypackage.cpp
@@ -17,7 +17,7 @@
#include "directorypackage.h"
-#include <QDir>
+#include <QtCore/QDir>
LYTDirectoryPackage::LYTDirectoryPackage(QString path) : LYTPackageBase() {
QDir fix_path(path);
diff --git a/lyt/packagebase.cpp b/lyt/packagebase.cpp
index c9004e7..e186435 100644
--- a/lyt/packagebase.cpp
+++ b/lyt/packagebase.cpp
@@ -20,3 +20,6 @@
LYTPackageBase::LYTPackageBase() {
// do nothing
}
+
+LYTPackageBase::~LYTPackageBase() {
+}
diff --git a/lyt/packagebase.h b/lyt/packagebase.h
index 3de3e58..9ad45c0 100644
--- a/lyt/packagebase.h
+++ b/lyt/packagebase.h
@@ -25,6 +25,7 @@
class LYTPackageBase {
public:
LYTPackageBase();
+ virtual ~LYTPackageBase();
virtual QStringList listAnims() = 0;
virtual QStringList listLayouts() = 0;