QTfrontend/util/HWDataManager.cpp
changeset 6159 c780b8cf4d75
child 6160 863d3edf5690
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/util/HWDataManager.cpp	Thu Oct 20 13:10:24 2011 +0200
@@ -0,0 +1,89 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@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 of the License
+ *
+ * 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 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <QStringList>
+
+#include "hwconsts.h"
+
+#include "HWDataManager.h"
+
+
+HWDataManager::HWDataManager()
+{
+    userData = new QDir(cfgdir->absolutePath());
+    if (!userData->cd("Data"))
+        userData = NULL;
+
+    defaultData = new QDir(datadir->absolutePath());
+}
+
+
+HWDataManager & HWDataManager::instance()
+{
+    static HWDataManager instance;
+    return instance;
+}
+
+
+QStringList HWDataManager::entryList(
+                    const QString & subDirectory,
+                    QDir::Filters filters,
+                    const QStringList & nameFilters
+                    ) const
+{
+    QStringList result;
+
+    if (userData != NULL)
+    {
+        QDir tmpDir(*userData);
+        if (tmpDir.cd(subDirectory))
+            result.append(tmpDir.entryList(nameFilters, filters));
+    }
+
+    QDir tmpDir(*defaultData);
+    if (tmpDir.cd(subDirectory))
+        result.append(tmpDir.entryList(nameFilters, filters));
+
+    result.sort();
+    result.removeDuplicates();
+
+    return result;
+}
+
+
+QFile * HWDataManager::findFileForRead(
+                                const QString & relativeDataFilePath) const
+{
+    QFile * file =
+            new QFile(userData->absolutePath()+"/"+relativeDataFilePath);
+    if (!file->exists())
+    {
+        delete file;
+        file = new QFile(defaultData->absolutePath()+"/"+relativeDataFilePath);
+    }
+    return file;
+}
+
+
+QFile * HWDataManager::findFileForWrite(
+                                const QString & relativeDataFilePath) const
+{
+    return new QFile(userData->absolutePath()+"/"+relativeDataFilePath);
+}
+