⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parameters_control.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
		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 + -