Showing the changes to libraries/script-engine/src/qtscript/ScriptEngineQtScript_cast.cpp (1 of 3 files). Show all
Unified · Split
| @@ -195,6 +195,87 @@ void ScriptEngineQtScript::registerSystemTypes() { · 194 unmodified lines | |||
| 195 | scriptRegisterMetaType<QJsonArray, JsonArrayToScriptValue, JsonArrayFromScriptValue>(this); | 195 | scriptRegisterMetaType<QJsonArray, JsonArrayToScriptValue, JsonArrayFromScriptValue>(this); |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | int ScriptEngineQtScript::computeCastPenalty(QScriptValue& val, int destTypeId) { | ||
| 199 | if (val.isNumber()) { | ||
| 200 | switch (destTypeId){ | ||
| 201 | case QMetaType::Bool: | ||
| 202 | return 5; | ||
| 203 | break; | ||
| 204 | case QMetaType::UInt: | ||
| 205 | case QMetaType::ULong: | ||
| 206 | case QMetaType::Int: | ||
| 207 | case QMetaType::Long: | ||
| 208 | case QMetaType::Short: | ||
| 209 | case QMetaType::Double: | ||
| 210 | case QMetaType::Float: | ||
| 211 | case QMetaType::ULongLong: | ||
| 212 | case QMetaType::LongLong: | ||
| 213 | case QMetaType::UShort: | ||
| 214 | return 0; | ||
| 215 | break; | ||
| 216 | case QMetaType::QString: | ||
| 217 | case QMetaType::QByteArray: | ||
| 218 | case QMetaType::QDateTime: | ||
| 219 | case QMetaType::QDate: | ||
| 220 | return 100; | ||
| 221 | break; | ||
| 222 | default: | ||
| 223 | return 5; | ||
| 224 | } | ||
| 225 | } else if (val.isString() || val.isDate() || val.isRegExp()) { | ||
| 226 | switch (destTypeId){ | ||
| 227 | case QMetaType::Bool: | ||
| 228 | return 100; | ||
| 229 | case QMetaType::UInt: | ||
| 230 | case QMetaType::ULong: | ||
| 231 | case QMetaType::Int: | ||
| 232 | case QMetaType::Long: | ||
| 233 | case QMetaType::Short: | ||
| 234 | case QMetaType::Double: | ||
| 235 | case QMetaType::Float: | ||
| 236 | case QMetaType::ULongLong: | ||
| 237 | case QMetaType::LongLong: | ||
| 238 | case QMetaType::UShort: | ||
| 239 | return 100; | ||
| 240 | case QMetaType::QString: | ||
| 241 | return 0; | ||
| 242 | case QMetaType::QByteArray: | ||
| 243 | case QMetaType::QDateTime: | ||
| 244 | case QMetaType::QDate: | ||
| 245 | return 5; | ||
| 246 | default: | ||
| 247 | return 5; | ||
| 248 | } | ||
| 249 | } else if (val.isBool() || val.isBoolean()) { | ||
| 250 | switch (destTypeId){ | ||
| 251 | case QMetaType::Bool: | ||
| 252 | return 0; | ||
| 253 | break; | ||
| 254 | case QMetaType::UInt: | ||
| 255 | case QMetaType::ULong: | ||
| 256 | case QMetaType::Int: | ||
| 257 | case QMetaType::Long: | ||
| 258 | case QMetaType::Short: | ||
| 259 | case QMetaType::Double: | ||
| 260 | case QMetaType::Float: | ||
| 261 | case QMetaType::ULongLong: | ||
| 262 | case QMetaType::LongLong: | ||
| 263 | case QMetaType::UShort: | ||
| 264 | return 5; | ||
| 265 | break; | ||
| 266 | case QMetaType::QString: | ||
| 267 | case QMetaType::QByteArray: | ||
| 268 | case QMetaType::QDateTime: | ||
| 269 | case QMetaType::QDate: | ||
| 270 | return 50; | ||
| 271 | break; | ||
| 272 | default: | ||
| 273 | return 5; | ||
| 274 | } | ||
| 275 | } | ||
| 276 | return 0; | ||
| 277 | } | ||
| 278 | |||
| 198 | bool ScriptEngineQtScript::castValueToVariant(const QScriptValue& val, QVariant& dest, int destTypeId) { | 279 | bool ScriptEngineQtScript::castValueToVariant(const QScriptValue& val, QVariant& dest, int destTypeId) { |
| 199 | 280 | ||
| 200 | // if we're not particularly interested in a specific type, try to detect if we're dealing with a registered type | 281 | // if we're not particularly interested in a specific type, try to detect if we're dealing with a registered type |