void MyApp::DoVariantDemo(wxCommandEvent& WXUNUSED(event) ) { wxTextCtrl& textCtrl = * GetTextCtrl(); wxVariant var1 = "String value"; textCtrl << "var1 = " << var1.MakeString() << "\n"; // Conversion var1 = 123.456; textCtrl << "var1 = " << var1.GetReal() << "\n"; // Implicit conversion double v = var1; var1 = 9876L; textCtrl << "var1 = " << var1.GetLong() << "\n"; // Implicit conversion long l = var1; // suppress compile warnings about unused variables wxUnusedVar(l); wxUnusedVar(v); wxArrayString stringArray; stringArray.Add("one"); stringArray.Add("two"); stringArray.Add("three"); var1 = stringArray; textCtrl << "var1 = " << var1.MakeString() << "\n"; var1.ClearList(); var1.Append(wxVariant(1.2345)); var1.Append(wxVariant("hello")); var1.Append(wxVariant(54321L)); textCtrl << "var1 = " << var1.MakeString() << "\n"; size_t n = var1.GetCount(); size_t i; for (i = (size_t) 0; i < n; i++) { textCtrl << "var1[" << (int) i << "] (type " << var1[i].GetType() << ") = " << var1[i].MakeString() << "\n"; } wxFont* sysFont = new wxFont(wxSystemSettings::GetFont(wxSYS_OEM_FIXED_FONT)); var1 = wxVariant(sysFont); textCtrl << "var1 = (wxfont)\""; wxFont* font = wxGetVariantCast(var1,wxFont); if (font) { textCtrl << font->GetNativeFontInfoDesc() << "\"\n"; } else { textCtrl << "(null)\"\n"; } delete sysFont; }
void CPropertiesCanvas::OnPropertyGridChange( wxPropertyGridEvent& event ) { wxPGProperty* p = event.GetPropertyPtr(); Property* property = GetProperty(p); if(property == NULL)return; wxGetApp().CreateUndoPoint(); switch(property->get_property_type()){ case StringPropertyType: { wxString value; if (property->Evaluate(GetProperties(), event.GetPropertyValue().GetString(), value)) { (*(((PropertyString*)property)->m_callbackfunc))(value, ((PropertyString*)property)->m_object); } } break; case DoublePropertyType: { wxString value; if (property->Evaluate(GetProperties(), event.GetPropertyValue().GetString(), value)) { (*(((PropertyDouble*)property)->m_callbackfunc))(strtod(value.utf8_str(),NULL), ((PropertyDouble*)property)->m_object); } } break; case LengthPropertyType: { wxString value; if (property->Evaluate(GetProperties(), event.GetPropertyValue().GetString(), value)) { (*(((PropertyLength*)property)->m_callbackfunc))(strtod(value.utf8_str(),NULL) * wxGetApp().m_view_units, ((PropertyDouble*)property)->m_object); } } break; case IntPropertyType: { (*(((PropertyInt*)property)->m_callbackfunc))(event.GetPropertyValue().GetLong(), ((PropertyInt*)property)->m_object); } break; case ColorPropertyType: { wxVariant var = event.GetPropertyValue(); const wxColour* wcol = wxGetVariantCast(var,wxColour); HeeksColor col(wcol->Red(), wcol->Green(), wcol->Blue()); (*(((PropertyColor*)property)->m_callbackfunc))(col, ((PropertyColor*)property)->m_object); } break; case VertexPropertyType: { if(p->GetName()[0] == 'x'){ ((PropertyVertex*)property)->m_x[0] = event.GetPropertyValue().GetDouble(); if(((PropertyVertex*)property)->m_affected_by_view_units)((PropertyVertex*)property)->m_x[0] *= wxGetApp().m_view_units; } else if(p->GetName()[0] == 'y'){ ((PropertyVertex*)property)->m_x[1] = event.GetPropertyValue().GetDouble(); if(((PropertyVertex*)property)->m_affected_by_view_units)((PropertyVertex*)property)->m_x[1] *= wxGetApp().m_view_units; } else if(p->GetName()[0] == 'z'){ ((PropertyVertex*)property)->m_x[2] = event.GetPropertyValue().GetDouble(); if(((PropertyVertex*)property)->m_affected_by_view_units)((PropertyVertex*)property)->m_x[2] *= wxGetApp().m_view_units; } (*(((PropertyVertex*)property)->m_callbackfunc))(((PropertyVertex*)property)->m_x, ((PropertyVertex*)property)->m_object); } break; case TrsfPropertyType: { double pos[3]; extract(((PropertyTrsf*)property)->m_trsf.TranslationPart(), pos); gp_Dir xaxis(1, 0, 0); xaxis.Transform(((PropertyTrsf*)p)->m_trsf); gp_Dir yaxis(0, 1, 0); yaxis.Transform(((PropertyTrsf*)p)->m_trsf); double vertical_angle = 0; double horizontal_angle = 0; double twist_angle = 0; CoordinateSystem::AxesToAngles(xaxis, yaxis, vertical_angle, horizontal_angle, twist_angle); if(p->GetName()[0] == 'x'){ pos[0] = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'y'){ pos[1] = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'z'){ pos[2] = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'v'){ vertical_angle = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 'h'){ horizontal_angle = event.GetPropertyValue().GetDouble(); } else if(p->GetName()[0] == 't'){ twist_angle = event.GetPropertyValue().GetDouble(); } CoordinateSystem::AnglesToAxes(vertical_angle, horizontal_angle, twist_angle, xaxis, yaxis); ((PropertyTrsf*)property)->m_trsf = make_matrix(make_point(pos), xaxis, yaxis); (*(((PropertyTrsf*)property)->m_callbackfunc))(((PropertyTrsf*)property)->m_trsf, ((PropertyTrsf*)property)->m_object); } break; case ChoicePropertyType: { (*(((PropertyChoice*)property)->m_callbackfunc))(event.GetPropertyValue().GetLong(), ((PropertyChoice*)property)->m_object); } break; case CheckPropertyType: { (*(((PropertyCheck*)property)->m_callbackfunc))(event.GetPropertyValue().GetBool(), ((PropertyCheck*)property)->m_object); } break; case ListOfPropertyType: { } break; case FilePropertyType: { (*(((PropertyFile*)property)->m_callbackfunc))(event.GetPropertyValue().GetString(), ((PropertyFile*)property)->m_object); } break; case DirectoryPropertyType: { (*(((PropertyDir*)property)->m_callbackfunc))(event.GetPropertyValue().GetString(), ((PropertyDir*)property)->m_object); } break; } wxGetApp().Changed(); }