1
0
Fork 0
forked from len0rd/rockbox

Theme Editor: Made text and comments editable from a treeview

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26453 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Robert Bieber 2010-06-01 20:19:51 +00:00
parent 5943f4c5e2
commit 279969618d
3 changed files with 51 additions and 32 deletions

View file

@ -142,8 +142,14 @@ Qt::ItemFlags ParseTreeModel::flags(const QModelIndex &index) const
ParseTreeNode* element = static_cast<ParseTreeNode*> ParseTreeNode* element = static_cast<ParseTreeNode*>
(index.internalPointer()); (index.internalPointer());
if(element->isParam() && index.column() == valueColumn)
if((element->isParam()
|| element->getElement()->type == TEXT
|| element->getElement()->type == COMMENT)
&& index.column() == valueColumn)
{
retval |= Qt::ItemIsEditable; retval |= Qt::ItemIsEditable;
}
return retval; return retval;
} }
@ -157,43 +163,54 @@ bool ParseTreeModel::setData(const QModelIndex &index, const QVariant &value,
if(index.column() != valueColumn) if(index.column() != valueColumn)
return false; return false;
ParseTreeNode* element = static_cast<ParseTreeNode*> ParseTreeNode* node = static_cast<ParseTreeNode*>
(index.internalPointer()); (index.internalPointer());
if(!element->isParam()) if(node->isParam())
return false;
struct skin_tag_parameter* param = element->getParam();
/* Now that we've established that we do, in fact, have a parameter, we'll
* set it to its new value if an acceptable one has been entered
*/
if(value.toString().trimmed() == QString(QChar(DEFAULTSYM)))
{ {
if(islower(param->type_code)) struct skin_tag_parameter* param = node->getParam();
param->type = skin_tag_parameter::DEFAULT;
/* Now that we've established that we do, in fact, have a parameter,
* set it to its new value if an acceptable one has been entered
*/
if(value.toString().trimmed() == QString(QChar(DEFAULTSYM)))
{
if(islower(param->type_code))
param->type = skin_tag_parameter::DEFAULT;
else
return false;
}
else if(tolower(param->type_code) == 's'
|| tolower(param->type_code) == 'f')
{
if(param->type == skin_tag_parameter::STRING)
free(param->data.text);
param->type = skin_tag_parameter::STRING;
param->data.text = strdup(value.toString().trimmed().toAscii());
}
else if(tolower(param->type_code) == 'i')
{
if(!value.canConvert(QVariant::Int))
return false;
param->type = skin_tag_parameter::NUMERIC;
param->data.numeric = value.toInt();
}
else else
{
return false; return false;
} }
else if(tolower(param->type_code) == 's' || tolower(param->type_code) == 'f')
{
if(param->type == skin_tag_parameter::STRING)
free(param->data.text);
param->type = skin_tag_parameter::STRING;
param->data.text = strdup(value.toString().trimmed().toAscii());
}
else if(tolower(param->type_code) == 'i')
{
if(!value.canConvert(QVariant::Int))
return false;
param->type = skin_tag_parameter::NUMERIC;
param->data.numeric = value.toInt();
} }
else else
{ {
return false; struct skin_element* element = node->getElement();
if(element->type != COMMENT && element->type != TEXT)
return false;
free(element->text);
element->text = strdup(value.toString().trimmed().toAscii());
} }
emit dataChanged(index, index); emit dataChanged(index, index);

View file

@ -172,6 +172,7 @@ QString ParseTreeNode::genCode() const
case COMMENT: case COMMENT:
buffer.append(COMMENTSYM); buffer.append(COMMENTSYM);
buffer.append(element->text); buffer.append(element->text);
buffer.append('\n');
break; break;
} }
} }

View file

@ -738,6 +738,7 @@ int skin_parse_comment(struct skin_element* element, char** document)
*/ */
for(length = 0; cursor[length] != '\n' && cursor[length] != '\0'; length++); for(length = 0; cursor[length] != '\n' && cursor[length] != '\0'; length++);
length--;
element->type = COMMENT; element->type = COMMENT;
element->line = skin_line; element->line = skin_line;
element->text = skin_alloc_string(length); element->text = skin_alloc_string(length);
@ -745,10 +746,10 @@ int skin_parse_comment(struct skin_element* element, char** document)
memcpy((void*)(element->text), (void*)(cursor + 1), sizeof(char) * length); memcpy((void*)(element->text), (void*)(cursor + 1), sizeof(char) * length);
element->text[length] = '\0'; element->text[length] = '\0';
if(cursor[length] == '\n') if(cursor[length + 1] == '\n')
skin_line++; skin_line++;
*document += (length + 1); /* Move cursor up past # and all text */ *document += (length + 2); /* Move cursor up past # and all text */
return 1; return 1;
} }