summaryrefslogtreecommitdiff
path: root/utils/themeeditor/projectmodel.cpp
blob: 925be8195055020266fd64a1ace8a05346cf8488 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/***************************************************************************
 *             __________               __   ___.
 *   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 <QFile>
#include <QTextStream>
#include <QMap>
#include <QDir>

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;

    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<QString> 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<QString> 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)
{
    mainWindow->loadTabFromFile(settings.value("themebase", "")
                                + "/" + files[index.row()]);
}