forked from len0rd/rockbox
Theme Editor: Added target database, now populates combo box in new project dialog but otherwise not used yet
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27450 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
1c1d10b9fd
commit
025147effb
9 changed files with 424 additions and 11 deletions
245
utils/themeeditor/models/targetdata.cpp
Normal file
245
utils/themeeditor/models/targetdata.cpp
Normal file
|
@ -0,0 +1,245 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* 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 "targetdata.h"
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
const QString TargetData::reserved = "{}:#\n";
|
||||
|
||||
TargetData::TargetData(QString file)
|
||||
{
|
||||
if(!QFile::exists(file))
|
||||
file = ":/targets/targetdb";
|
||||
|
||||
QFile fin(file);
|
||||
fin.open(QFile::ReadOnly | QFile::Text);
|
||||
|
||||
/* Reading the database */
|
||||
QString data = QString(fin.readAll());
|
||||
|
||||
fin.close();
|
||||
|
||||
int cursor = 0;
|
||||
int index = 0;
|
||||
while(cursor < data.count())
|
||||
{
|
||||
QString id = scanString(data, cursor);
|
||||
QString name = "";
|
||||
QRect size(0, 0, 0, 0);
|
||||
ScreenDepth depth = None;
|
||||
QRect rSize(0, 0, 0, 0);
|
||||
ScreenDepth rDepth = None;
|
||||
bool fm = false;
|
||||
|
||||
if(id == "")
|
||||
break;
|
||||
|
||||
if(!require('{', data, cursor))
|
||||
break;
|
||||
|
||||
/* Now we have to parse each of the arguments */
|
||||
while(cursor < data.count())
|
||||
{
|
||||
QString key = scanString(data, cursor);
|
||||
if(key == "")
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!require(':', data, cursor))
|
||||
break;
|
||||
|
||||
if(key.toLower() == "name")
|
||||
{
|
||||
name = scanString(data, cursor);
|
||||
}
|
||||
else if(key.toLower() == "screen")
|
||||
{
|
||||
QString s = scanString(data, cursor);
|
||||
if(s[0].toLower() != 'n')
|
||||
{
|
||||
int subCursor = 0;
|
||||
int width = scanInt(s, subCursor);
|
||||
|
||||
if(!require('x', s, subCursor))
|
||||
break;
|
||||
|
||||
int height = scanInt(s, subCursor);
|
||||
|
||||
if(!require('@', s, subCursor))
|
||||
break;
|
||||
|
||||
size = QRect(0, 0, width, height);
|
||||
depth = scanDepth(s, subCursor);
|
||||
}
|
||||
}
|
||||
else if(key.toLower() == "remote")
|
||||
{
|
||||
QString s = scanString(data, cursor);
|
||||
if(s[0].toLower() != 'n')
|
||||
{
|
||||
int subCursor = 0;
|
||||
int width = scanInt(s, subCursor);
|
||||
|
||||
if(!require('x', s, subCursor))
|
||||
break;
|
||||
|
||||
int height = scanInt(s, subCursor);
|
||||
|
||||
if(!require('@', s, subCursor))
|
||||
break;
|
||||
|
||||
rSize = QRect(0, 0, width, height);
|
||||
rDepth = scanDepth(s, subCursor);
|
||||
}
|
||||
}
|
||||
else if(key.toLower() == "fm")
|
||||
{
|
||||
QString s = scanString(data, cursor);
|
||||
if(s.toLower() == "yes")
|
||||
fm = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Checking for the closing '}' and adding the entry */
|
||||
if(require('}', data, cursor))
|
||||
{
|
||||
entries.append(Entry(name, size, depth, rSize, rDepth, fm));
|
||||
indices.insert(id, index);
|
||||
index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TargetData::~TargetData()
|
||||
{
|
||||
}
|
||||
|
||||
QString TargetData::scanString(QString data, int &index)
|
||||
{
|
||||
QString retval;
|
||||
|
||||
/* Skipping whitespace and comments */
|
||||
while(index < data.count() && (data[index].isSpace() || data[index] == '#'))
|
||||
{
|
||||
if(data[index] == '#')
|
||||
skipComment(data, index);
|
||||
else
|
||||
index++;
|
||||
}
|
||||
|
||||
while(index < data.count() && !reserved.contains(data[index]))
|
||||
{
|
||||
if(data[index] == '%')
|
||||
{
|
||||
retval.append(data[index + 1]);
|
||||
index += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
retval.append(data[index]);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
return retval.trimmed();
|
||||
}
|
||||
|
||||
int TargetData::scanInt(QString data, int &index)
|
||||
{
|
||||
/* Skipping whitespace and comments */
|
||||
while(index < data.count() && (data[index].isSpace() || data[index] == '#'))
|
||||
{
|
||||
if(data[index] == '#')
|
||||
skipComment(data, index);
|
||||
else
|
||||
index++;
|
||||
}
|
||||
|
||||
QString number;
|
||||
while(index < data.count() && data[index].isDigit())
|
||||
number.append(data[index++]);
|
||||
|
||||
return number.toInt();
|
||||
}
|
||||
|
||||
TargetData::ScreenDepth TargetData::scanDepth(QString data, int &index)
|
||||
{
|
||||
QString depth = scanString(data, index);
|
||||
|
||||
if(depth.toLower() == "grey")
|
||||
return Grey;
|
||||
else if(depth.toLower() == "rgb")
|
||||
return RGB;
|
||||
else if(depth.toLower() == "mono")
|
||||
return Mono;
|
||||
else
|
||||
return None;
|
||||
}
|
||||
|
||||
void TargetData::skipComment(QString data, int &index)
|
||||
{
|
||||
if(data[index] != '#')
|
||||
return;
|
||||
|
||||
while(index < data.count() && data[index] != '\n')
|
||||
index++;
|
||||
|
||||
if(index < data.count())
|
||||
index++;
|
||||
}
|
||||
|
||||
bool TargetData::require(QChar required, QString data, int &index)
|
||||
{
|
||||
/* Skipping whitespace and comments */
|
||||
while(index < data.count() && (data[index].isSpace() || data[index] == '#'))
|
||||
{
|
||||
if(data[index] == '#')
|
||||
skipComment(data, index);
|
||||
else
|
||||
index++;
|
||||
}
|
||||
|
||||
if(index == data.count())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(data[index] == required)
|
||||
{
|
||||
index++;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue