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:
parent
5943f4c5e2
commit
279969618d
3 changed files with 51 additions and 32 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue