/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2010 Robert Bieber * * 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. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #include "projectmodel.h" #include "editorwindow.h" #include #include #include #include ProjectModel::ProjectModel(QString config, EditorWindow* mainWindow, QObject *parent) : QAbstractListModel(parent), mainWindow(mainWindow) { /* Reading the config file */ QFile cfg(config); cfg.open(QFile::ReadOnly | QFile::Text); if(!cfg.isReadable()) return; settings.insert("configfile", config); QTextStream fin(&cfg); /* Storing the base directory */ QString confDir = config; confDir.chop(confDir.length() - confDir.lastIndexOf('/') - 1); QDir base(confDir); base.cdUp(); settings.insert("themebase", base.canonicalPath()); while(!fin.atEnd()) { QString current = fin.readLine(); QList parts = current.split(':'); /* A valid setting has at least one : */ if(parts.count() < 2) continue; QString setting; for(int i = 1; i < parts.count(); i++) setting.append(parts[i].trimmed()); settings.insert(parts[0].trimmed(), setting); } cfg.close(); /* Adding the files, starting with the .cfg */ config.replace(base.canonicalPath() + "/", ""); files.append(config); QList keys; keys.append("wps"); keys.append("rwps"); keys.append("sbs"); keys.append("rsbs"); keys.append("fms"); keys.append("rfms"); for(int i = 0; i < keys.count(); i++) { QString file = settings.value(keys[i], ""); if(file != "" && file != "-") { file.replace("/.rockbox/", ""); files.append(file); } } } ProjectModel::~ProjectModel() { } int ProjectModel::rowCount(const QModelIndex& parent) const { return files.count(); } QVariant ProjectModel::data(const QModelIndex &index, int role) const { if(!index.isValid()) return QVariant(); if(role != Qt::DisplayRole) return QVariant(); return files[index.row()]; } void ProjectModel::activated(const QModelIndex &index) { if(index.row() == 0) { ConfigDocument* doc = new ConfigDocument(settings, settings.value("themebase", "") + "/" + files[index.row()]); QObject::connect(doc, SIGNAL(configFileChanged(QString)), mainWindow, SLOT(configFileChanged(QString))); mainWindow->loadConfigTab(doc); } else { mainWindow->loadTabFromSkinFile(settings.value("themebase", "") + "/" + files[index.row()]); } }