diff options
author | Robert Bieber <robby@bieberphoto.com> | 2010-06-01 20:19:51 +0000 |
---|---|---|
committer | Robert Bieber <robby@bieberphoto.com> | 2010-06-01 20:19:51 +0000 |
commit | 279969618d28e23ac83b6e81c7b7bbf1adaf5b74 (patch) | |
tree | b875450c631cdae21c7c6befbb1ea4bde232423c | |
parent | 5943f4c5e239475a32ac2b341a6df8189c8f1768 (diff) | |
download | rockbox-279969618d28e23ac83b6e81c7b7bbf1adaf5b74.tar.gz rockbox-279969618d28e23ac83b6e81c7b7bbf1adaf5b74.zip |
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
-rw-r--r-- | utils/themeeditor/parsetreemodel.cpp | 73 | ||||
-rw-r--r-- | utils/themeeditor/parsetreenode.cpp | 1 | ||||
-rw-r--r-- | utils/themeeditor/skin_parser.c | 5 |
3 files changed, 49 insertions, 30 deletions
diff --git a/utils/themeeditor/parsetreemodel.cpp b/utils/themeeditor/parsetreemodel.cpp index a0e3abb03b..24eebac8d6 100644 --- a/utils/themeeditor/parsetreemodel.cpp +++ b/utils/themeeditor/parsetreemodel.cpp | |||
@@ -142,8 +142,14 @@ Qt::ItemFlags ParseTreeModel::flags(const QModelIndex &index) const | |||
142 | 142 | ||
143 | ParseTreeNode* element = static_cast<ParseTreeNode*> | 143 | ParseTreeNode* element = static_cast<ParseTreeNode*> |
144 | (index.internalPointer()); | 144 | (index.internalPointer()); |
145 | if(element->isParam() && index.column() == valueColumn) | 145 | |
146 | if((element->isParam() | ||
147 | || element->getElement()->type == TEXT | ||
148 | || element->getElement()->type == COMMENT) | ||
149 | && index.column() == valueColumn) | ||
150 | { | ||
146 | retval |= Qt::ItemIsEditable; | 151 | retval |= Qt::ItemIsEditable; |
152 | } | ||
147 | 153 | ||
148 | return retval; | 154 | return retval; |
149 | } | 155 | } |
@@ -157,43 +163,54 @@ bool ParseTreeModel::setData(const QModelIndex &index, const QVariant &value, | |||
157 | if(index.column() != valueColumn) | 163 | if(index.column() != valueColumn) |
158 | return false; | 164 | return false; |
159 | 165 | ||
160 | ParseTreeNode* element = static_cast<ParseTreeNode*> | 166 | ParseTreeNode* node = static_cast<ParseTreeNode*> |
161 | (index.internalPointer()); | 167 | (index.internalPointer()); |
162 | 168 | ||
163 | if(!element->isParam()) | 169 | if(node->isParam()) |
164 | return false; | ||
165 | |||
166 | struct skin_tag_parameter* param = element->getParam(); | ||
167 | |||
168 | /* Now that we've established that we do, in fact, have a parameter, we'll | ||
169 | * set it to its new value if an acceptable one has been entered | ||
170 | */ | ||
171 | if(value.toString().trimmed() == QString(QChar(DEFAULTSYM))) | ||
172 | { | 170 | { |
173 | if(islower(param->type_code)) | 171 | struct skin_tag_parameter* param = node->getParam(); |
174 | param->type = skin_tag_parameter::DEFAULT; | 172 | |
173 | /* Now that we've established that we do, in fact, have a parameter, | ||
174 | * set it to its new value if an acceptable one has been entered | ||
175 | */ | ||
176 | if(value.toString().trimmed() == QString(QChar(DEFAULTSYM))) | ||
177 | { | ||
178 | if(islower(param->type_code)) | ||
179 | param->type = skin_tag_parameter::DEFAULT; | ||
180 | else | ||
181 | return false; | ||
182 | } | ||
183 | else if(tolower(param->type_code) == 's' | ||
184 | || tolower(param->type_code) == 'f') | ||
185 | { | ||
186 | if(param->type == skin_tag_parameter::STRING) | ||
187 | free(param->data.text); | ||
188 | |||
189 | param->type = skin_tag_parameter::STRING; | ||
190 | param->data.text = strdup(value.toString().trimmed().toAscii()); | ||
191 | } | ||
192 | else if(tolower(param->type_code) == 'i') | ||
193 | { | ||
194 | if(!value.canConvert(QVariant::Int)) | ||
195 | return false; | ||
196 | |||
197 | param->type = skin_tag_parameter::NUMERIC; | ||
198 | param->data.numeric = value.toInt(); | ||
199 | } | ||
175 | else | 200 | else |
201 | { | ||
176 | return false; | 202 | return false; |
203 | } | ||
177 | } | 204 | } |
178 | else if(tolower(param->type_code) == 's' || tolower(param->type_code) == 'f') | 205 | else |
179 | { | 206 | { |
180 | if(param->type == skin_tag_parameter::STRING) | 207 | struct skin_element* element = node->getElement(); |
181 | free(param->data.text); | ||
182 | 208 | ||
183 | param->type = skin_tag_parameter::STRING; | 209 | if(element->type != COMMENT && element->type != TEXT) |
184 | param->data.text = strdup(value.toString().trimmed().toAscii()); | ||
185 | } | ||
186 | else if(tolower(param->type_code) == 'i') | ||
187 | { | ||
188 | if(!value.canConvert(QVariant::Int)) | ||
189 | return false; | 210 | return false; |
190 | 211 | ||
191 | param->type = skin_tag_parameter::NUMERIC; | 212 | free(element->text); |
192 | param->data.numeric = value.toInt(); | 213 | element->text = strdup(value.toString().trimmed().toAscii()); |
193 | } | ||
194 | else | ||
195 | { | ||
196 | return false; | ||
197 | } | 214 | } |
198 | 215 | ||
199 | emit dataChanged(index, index); | 216 | emit dataChanged(index, index); |
diff --git a/utils/themeeditor/parsetreenode.cpp b/utils/themeeditor/parsetreenode.cpp index 98b4187a9e..22db94da89 100644 --- a/utils/themeeditor/parsetreenode.cpp +++ b/utils/themeeditor/parsetreenode.cpp | |||
@@ -172,6 +172,7 @@ QString ParseTreeNode::genCode() const | |||
172 | case COMMENT: | 172 | case COMMENT: |
173 | buffer.append(COMMENTSYM); | 173 | buffer.append(COMMENTSYM); |
174 | buffer.append(element->text); | 174 | buffer.append(element->text); |
175 | buffer.append('\n'); | ||
175 | break; | 176 | break; |
176 | } | 177 | } |
177 | } | 178 | } |
diff --git a/utils/themeeditor/skin_parser.c b/utils/themeeditor/skin_parser.c index d118e9b97b..c0f1849523 100644 --- a/utils/themeeditor/skin_parser.c +++ b/utils/themeeditor/skin_parser.c | |||
@@ -738,6 +738,7 @@ int skin_parse_comment(struct skin_element* element, char** document) | |||
738 | */ | 738 | */ |
739 | for(length = 0; cursor[length] != '\n' && cursor[length] != '\0'; length++); | 739 | for(length = 0; cursor[length] != '\n' && cursor[length] != '\0'; length++); |
740 | 740 | ||
741 | length--; | ||
741 | element->type = COMMENT; | 742 | element->type = COMMENT; |
742 | element->line = skin_line; | 743 | element->line = skin_line; |
743 | element->text = skin_alloc_string(length); | 744 | element->text = skin_alloc_string(length); |
@@ -745,10 +746,10 @@ int skin_parse_comment(struct skin_element* element, char** document) | |||
745 | memcpy((void*)(element->text), (void*)(cursor + 1), sizeof(char) * length); | 746 | memcpy((void*)(element->text), (void*)(cursor + 1), sizeof(char) * length); |
746 | element->text[length] = '\0'; | 747 | element->text[length] = '\0'; |
747 | 748 | ||
748 | if(cursor[length] == '\n') | 749 | if(cursor[length + 1] == '\n') |
749 | skin_line++; | 750 | skin_line++; |
750 | 751 | ||
751 | *document += (length + 1); /* Move cursor up past # and all text */ | 752 | *document += (length + 2); /* Move cursor up past # and all text */ |
752 | 753 | ||
753 | return 1; | 754 | return 1; |
754 | } | 755 | } |