summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/themeeditor/parsetreemodel.cpp73
-rw-r--r--utils/themeeditor/parsetreenode.cpp1
-rw-r--r--utils/themeeditor/skin_parser.c5
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}