summaryrefslogtreecommitdiff
path: root/utils/themeeditor/parsetreemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/themeeditor/parsetreemodel.cpp')
-rw-r--r--utils/themeeditor/parsetreemodel.cpp73
1 files changed, 45 insertions, 28 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);