void PropertyWindow::SetProperty() { if(property->GetOption().second!=-1 && textField->GetText().length() > 0) { void * propValue; int tempInt; unsigned int tempUInt; float tempFloat; std::string value = textField->GetText(); try { switch(properties[property->GetOption().second].Type) { case StructProperty::Integer: case StructProperty::ParticleType: if(value.length() > 2 && value.substr(0, 2) == "0x") { //0xC0FFEE std::stringstream buffer; buffer.exceptions(std::stringstream::failbit | std::stringstream::badbit); buffer << std::hex << value.substr(2); buffer >> tempInt; } else if(value.length() > 1 && value[0] == '#') { //#C0FFEE std::stringstream buffer; buffer.exceptions(std::stringstream::failbit | std::stringstream::badbit); buffer << std::hex << value.substr(1); buffer >> tempInt; }
void PropertyWindow::SetProperty() { if(property->GetOption().second!=-1 && textField->GetText().length() > 0) { String value = textField->GetText(); try { switch(properties[property->GetOption().second].Type) { case StructProperty::Integer: case StructProperty::ParticleType: { int v; if(value.length() > 2 && value.BeginsWith("0x")) { //0xC0FFEE v = value.Substr(2).ToNumber<unsigned int>(Format::Hex()); } else if(value.length() > 1 && value.BeginsWith("#")) { //#C0FFEE v = value.Substr(1).ToNumber<unsigned int>(Format::Hex()); } else { int type; if ((type = sim->GetParticleType(value.ToUtf8())) != -1) { v = type; #ifdef DEBUG std::cout << "Got type from particle name" << std::endl; #endif } else { v = value.ToNumber<int>(); } } if (properties[property->GetOption().second].Name == "type" && (v < 0 || v >= PT_NUM || !sim->elements[v].Enabled)) { new ErrorMessage("Could not set property", "Invalid particle type"); return; } #ifdef DEBUG std::cout << "Got int value " << v << std::endl; #endif tool->propValue.Integer = v; break; } case StructProperty::UInteger: { unsigned int v; if(value.length() > 2 && value.BeginsWith("0x")) { //0xC0FFEE v = value.Substr(2).ToNumber<unsigned int>(Format::Hex()); } else if(value.length() > 1 && value.BeginsWith("#")) { //#C0FFEE v = value.Substr(1).ToNumber<unsigned int>(Format::Hex()); } else { v = value.ToNumber<unsigned int>(); } #ifdef DEBUG std::cout << "Got uint value " << v << std::endl; #endif tool->propValue.UInteger = v; break; } case StructProperty::Float: { if (value.EndsWith("C")) { float v = value.SubstrFromEnd(1).ToNumber<float>(); tool->propValue.Float = v + 273.15; } else if(value.EndsWith("F")) { float v = value.SubstrFromEnd(1).ToNumber<float>(); tool->propValue.Float = (v-32.0f)*5/9+273.15f; } else { tool->propValue.Float = value.ToNumber<float>(); } #ifdef DEBUG std::cout << "Got float value " << tool->propValue.Float << std::endl; #endif } break; default: new ErrorMessage("Could not set property", "Invalid property"); return; } tool->propOffset = properties[property->GetOption().second].Offset; tool->propType = properties[property->GetOption().second].Type; } catch (const std::exception& ex) { new ErrorMessage("Could not set property", "Invalid value provided"); return; } Client::Ref().SetPref("Prop.Type", property->GetOption().second); Client::Ref().SetPrefUnicode("Prop.Value", textField->GetText()); } }