📄 parameters_control.cpp
字号:
{
Id = m_pPG->Append(pProperty);
}
return( Id.GetPropertyPtr() );
}
//---------------------------------------------------------
void CParameters_Control::_Add_Property(CSG_Parameter *pParameter, wxPGProperty *pParent)
{
int i;
wxPGProperty *pProperty;
if( pParameter->Get_Children_Count() > 0 )
{
switch( pParameter->Get_Type() )
{
case PARAMETER_TYPE_Node:
case PARAMETER_TYPE_Grid_System:
pProperty = _Get_Property(pParameter, pParent);
break;
case PARAMETER_TYPE_Grid:
case PARAMETER_TYPE_Grid_List:
_Get_Property(pParameter, pParent);
pProperty = wxPropertyCategory(wxString::Format(wxT("%s [%s]"), pParameter->Get_Name(), LNG("[CAP] Options")), wxString::Format(wxT("%s_PARENT"), pParameter->Get_Identifier()));
if( pParameter->Get_Parent() && pParameter->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System )
{
wxPGId Id = m_pPG->GetPropertyByName(wxT("_DATAOBJECT_GRIDS"));
_Add_Property(pProperty, Id.GetPropertyPtr());
}
else
{
_Add_Property(pProperty, pParent);
}
break;
default:
_Get_Property(pParameter, pParent);
pProperty = wxPropertyCategory(wxString::Format(wxT("%s [%s]"), pParameter->Get_Name(), LNG("[CAP] Options")), wxString::Format(wxT("%s_PARENT"), pParameter->Get_Identifier()));
_Add_Property(pProperty, pParent);
break;
}
for(i=0; i<pParameter->Get_Children_Count(); i++)
{
if( pParameter->Get_Child(i)->Get_Children_Count() == 0 )
{
_Add_Property(pParameter->Get_Child(i), pProperty);
}
}
for(i=0; i<pParameter->Get_Children_Count(); i++)
{
if( pParameter->Get_Child(i)->Get_Children_Count() > 0 )
{
_Add_Property(pParameter->Get_Child(i), pProperty);
}
}
m_pPG->Expand(pProperty->GetId());
}
else if( pParameter->Get_Type() != PARAMETER_TYPE_Node )
{
_Get_Property(pParameter, pParent);
}
}
//---------------------------------------------------------
wxPGProperty * CParameters_Control::_Get_Property(CSG_Parameter *pParameter, wxPGProperty *pParent)
{
wxPGProperty *pProperty = NULL;
switch( pParameter->Get_Type() )
{
default:
pProperty = _Add_Property(wxStringProperty(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
pParameter->Get_Type_Name()
), pParent);
break;
case PARAMETER_TYPE_Node:
pProperty = _Add_Property(wxPropertyCategory(
pParameter->Get_Name(),
pParameter->Get_Identifier()
), pParent);
break;
case PARAMETER_TYPE_Bool:
pProperty = _Add_Property(wxBoolProperty(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
pParameter->asBool()
), pParent);
m_pPG->SetPropertyAttribute(pProperty->GetId(), wxPG_BOOL_USE_CHECKBOX, (long)1);
break;
case PARAMETER_TYPE_Int:
pProperty = _Add_Property(wxIntProperty(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
pParameter->asInt()
), pParent);
break;
case PARAMETER_TYPE_Double:
pProperty = _Add_Property(wxFloatProperty(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
pParameter->asDouble()
), pParent);
m_pPG->SetPropertyAttribute(pProperty->GetId(), wxPG_FLOAT_PRECISION, (long)12);
break;
case PARAMETER_TYPE_Range:
case PARAMETER_TYPE_Degree:
pProperty = _Add_Property(CParameters_PG_Doubles(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
CParameters_PG_DoublesValue(pParameter)
), pParent);
break;
case PARAMETER_TYPE_String:
pProperty = _Add_Property(wxStringProperty(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
pParameter->asString()
), pParent);
if( ((CSG_Parameter_String *)pParameter->Get_Data())->is_Password() )
{
m_pPG->SetPropertyAttribute(pProperty->GetId(), wxPG_STRING_PASSWORD, (long)pParameter->asString());
}
break;
case PARAMETER_TYPE_Color:
pProperty = _Add_Property(wxColourProperty(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
Get_Color_asWX(pParameter->asColor())
), pParent);
pProperty->SetEditor(wxPGEditor_Choice);
break;
case PARAMETER_TYPE_Colors:
pProperty = _Add_Property(CParameters_PG_Colors(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
CParameters_PG_DialogedValue(pParameter)
), pParent);
m_pPG->LimitPropertyEditing(pProperty->GetId());
break;
case PARAMETER_TYPE_Grid_System:
pProperty = _Add_Property(new CParameters_PG_GridSystem(
pParameter
), pParent);
m_pPG->LimitPropertyEditing(pProperty->GetId());
break;
case PARAMETER_TYPE_Choice:
case PARAMETER_TYPE_Table_Field:
case PARAMETER_TYPE_Grid:
case PARAMETER_TYPE_Table:
case PARAMETER_TYPE_Shapes:
case PARAMETER_TYPE_TIN:
pProperty = _Add_Property(new CParameters_PG_Choice(
pParameter
), pParent);
break;
case PARAMETER_TYPE_FilePath:
pProperty = _Add_Property(CParameters_PG_Dialoged(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
CParameters_PG_DialogedValue(pParameter)
), pParent);
break;
case PARAMETER_TYPE_Text:
// pProperty = _Add_Property(wxLongStringProperty(
// pParameter->Get_Name(), pParameter->Get_Identifier(), pParameter->asString()
// ), pParent);
// break;
case PARAMETER_TYPE_Font:
case PARAMETER_TYPE_FixedTable:
case PARAMETER_TYPE_Grid_List:
case PARAMETER_TYPE_Table_List:
case PARAMETER_TYPE_Shapes_List:
case PARAMETER_TYPE_TIN_List:
case PARAMETER_TYPE_Parameters:
pProperty = _Add_Property(CParameters_PG_Dialoged(
pParameter->Get_Name(),
pParameter->Get_Identifier(),
CParameters_PG_DialogedValue(pParameter)
), pParent);
m_pPG->LimitPropertyEditing(pProperty->GetId());
break;
}
//-----------------------------------------------------
if( pProperty )
{
CSG_String s, sDesc;
sDesc = pParameter->Get_Description(PARAMETER_DESCRIPTION_TYPE);
s = pParameter->Get_Description(PARAMETER_DESCRIPTION_TEXT);
if( s.Length() > 0 ) { sDesc.Append( wxT("\n___\n") ); sDesc.Append( s ); }
s = pParameter->Get_Description(PARAMETER_DESCRIPTION_PROPERTIES);
if( s.Length() > 0 ) { sDesc.Append(wxT("\n___\n")); sDesc.Append(s); }
m_pPG->SetPropertyHelpString(pProperty->GetId(), sDesc.c_str());
}
return( pProperty );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CParameters_Control::_Set_Parameter(const wxChar *Identifier)
{
CSG_Parameter *pParameter;
if( (pParameter = m_pParameters->Get_Parameter(Identifier)) != NULL )
{
m_bModified = true;
wxPGId Id = m_pPG->GetPropertyByName(Identifier);
if( Id.IsOk() )
{
switch( pParameter->Get_Type() )
{
default:
break;
case PARAMETER_TYPE_String:
case PARAMETER_TYPE_FilePath:
pParameter->Set_Value( ( m_pPG->GetPropertyValueAsString(Id).c_str() ) );
break;
case PARAMETER_TYPE_Bool:
pParameter->Set_Value(m_pPG->GetPropertyValueAsBool (Id));
break;
case PARAMETER_TYPE_Int:
pParameter->Set_Value(m_pPG->GetPropertyValueAsInt (Id));
break;
case PARAMETER_TYPE_Double:
pParameter->Set_Value(m_pPG->GetPropertyValueAsDouble (Id));
break;
case PARAMETER_TYPE_Color:
wxASSERT(m_pPG->IsPropertyValueType(Id, CLASSINFO(wxColour)));
pParameter->Set_Value(Get_Color_asInt(*(wxDynamicCast(m_pPG->GetPropertyValueAsWxObjectPtr(Id), wxColour))));
// wxASSERT(m_pPG->IsPropertyValueType(Id, CLASSINFO(wxColourPropertyValue)));
// pParameter->Set_Value(Get_Color_asInt(wxDynamicCast(m_pPG->GetPropertyValueAsWxObjectPtr(Id), wxColourPropertyValue)->m_colour));
break;
}
}
_Update_Parameters();
}
}
//---------------------------------------------------------
void CParameters_Control::_Update_Parameters(void)
{
if( m_pParameters )
{
for(int i=0; i<m_pParameters->Get_Count(); i++)
{
_Update_Parameter(m_pParameters->Get_Parameter(i));
}
}
}
//---------------------------------------------------------
void CParameters_Control::_Update_Parameter(CSG_Parameter *pParameter)
{
wxPGId Id = m_pPG->GetPropertyByName(pParameter->Get_Identifier());
if( Id.IsOk() )
{
CSG_String s;
switch( pParameter->Get_Type() )
{
default:
break;
case PARAMETER_TYPE_String:
case PARAMETER_TYPE_FilePath:
if( m_pPG->GetPropertyValueAsString (Id).Cmp(pParameter->asString()) != 0 )
{
m_pPG->SetPropertyValue(Id, pParameter->asString());
}
break;
case PARAMETER_TYPE_Bool:
if( m_pPG->GetPropertyValueAsBool (Id) != pParameter->asBool() )
{
m_pPG->SetPropertyValue(Id, pParameter->asBool());
}
break;
case PARAMETER_TYPE_Int:
if( m_pPG->GetPropertyValueAsInt (Id) != pParameter->asInt() )
{
m_pPG->SetPropertyValue(Id, pParameter->asInt());
}
break;
case PARAMETER_TYPE_Double:
if( m_pPG->GetPropertyValueAsDouble (Id) != pParameter->asDouble() )
{
m_pPG->SetPropertyValue(Id, pParameter->asDouble());
}
break;
case PARAMETER_TYPE_Range:
s.Printf( SG_T("%f; %f"), pParameter->asRange()->Get_LoVal(), pParameter->asRange()->Get_HiVal());
m_pPG->SetPropertyValue(Id, s.c_str());
break;
case PARAMETER_TYPE_Degree:
double d[3];
Decimal_To_Degree(pParameter->asDouble(), d[0], d[1], d[2]);
s.Printf( SG_T("%f; %f; %f"), d[0], d[1], d[2]);
m_pPG->SetPropertyValue(Id, s.c_str());
break;
}
}
}
//---------------------------------------------------------
bool CParameters_Control::Update_DataObjects(void)
{
CSG_Parameter *pParameter;
wxPGId Id;
if( m_pParameters )
{
for(int i=0; i<m_pParameters->Get_Count(); i++)
{
pParameter = m_pParameters->Get_Parameter(i);
Id = m_pPG->GetPropertyByName(pParameter->Get_Identifier());
if( Id.IsOk() )
{
switch( pParameter->Get_Type() )
{
default:
break;
case PARAMETER_TYPE_Grid_System:
((CParameters_PG_GridSystem *)Id.GetPropertyPtr())->Update();
break;
case PARAMETER_TYPE_Grid:
case PARAMETER_TYPE_Table:
case PARAMETER_TYPE_Shapes:
case PARAMETER_TYPE_TIN:
((CParameters_PG_Choice *)Id.GetPropertyPtr())->Update();
break;
case PARAMETER_TYPE_Grid_List:
case PARAMETER_TYPE_Table_List:
case PARAMETER_TYPE_Shapes_List:
case PARAMETER_TYPE_TIN_List:
if( g_pData->Check_Parameter(pParameter) == false )
{
}
break;
}
}
}
}
return( true );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -