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

📄 parameters_properties.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
class CParameters_PG_DoublesClass : public wxPGPropertyWithChildren
{
    WX_PG_DECLARE_PROPERTY_CLASS()

public:
	CParameters_PG_DoublesClass(const wxString &label, const wxString &name, const CParameters_PG_DoublesValue &value);
	virtual ~CParameters_PG_DoublesClass(void)	{}

	WX_PG_DECLARE_PARENTAL_TYPE_METHODS()
	WX_PG_DECLARE_PARENTAL_METHODS()

	CParameters_PG_DoublesValue		m_value;

};

//---------------------------------------------------------
WX_PG_IMPLEMENT_PROPERTY_CLASS(CParameters_PG_Doubles, wxBaseParentProperty, CParameters_PG_DoublesValue, const CParameters_PG_DoublesValue &, TextCtrl)

//---------------------------------------------------------
CParameters_PG_DoublesClass::CParameters_PG_DoublesClass(const wxString &Name, const wxString &Identifier, const CParameters_PG_DoublesValue &value)
	: wxPGPropertyWithChildren(Name, Identifier)
{
	DoSetValue((void *)&value);

	for(int i=0; i<m_value.m_nValues; i++)
	{
		AddChild(wxFloatProperty(m_value.m_Labels[i], wxString::Format(wxT("%s_%d"), Identifier.c_str(), i), m_value.m_Values[i]));
	}
}

//---------------------------------------------------------
void CParameters_PG_DoublesClass::DoSetValue(wxPGVariant value)
{
	m_value.Assign(*((CParameters_PG_DoublesValue *)wxPGVariantToVoidPtr(value)));

	RefreshChildren();
}

//---------------------------------------------------------
wxPGVariant CParameters_PG_DoublesClass::DoGetValue(void) const
{
	return( wxPGVariant((void *)&m_value) );
}

//---------------------------------------------------------
void CParameters_PG_DoublesClass::RefreshChildren(void)
{
	if( (int)GetCount() == m_value.m_nValues )
	{
		for(int i=0; i<m_value.m_nValues; i++)
		{
			Item(i)->DoSetValue(m_value.m_Values[i]);
		}
	}
}

//---------------------------------------------------------
void CParameters_PG_DoublesClass::ChildChanged(wxPGProperty *p)
{
	int		i	= p->GetIndexInParent();

	if( i >= 0 && i < m_value.m_nValues )
	{
		m_value.m_Values[i]	= p->DoGetValue().GetDouble();
		m_value.Update_Parameter();
	}
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CParameters_PG_DialogedValue::fromString(wxString String)
{
	switch( m_pParameter->Get_Type() )
	{
	default:
		return( false );

	case PARAMETER_TYPE_Text:
	case PARAMETER_TYPE_FilePath:
		m_pParameter->Set_Value(String.c_str());
		return( true );
	}
}

//---------------------------------------------------------
wxString CParameters_PG_DialogedValue::asString(void) const
{
	wxString	s;

	if( m_pParameter && Check() )
	{
		s	= m_pParameter->asString();
	}

	return( s );
}

//---------------------------------------------------------
bool CParameters_PG_DialogedValue::Check(void) const
{
	if( m_pParameter )
	{
		switch( m_pParameter->Get_Type() )
		{
		default:
			break;

		case PARAMETER_TYPE_Table_List:
		case PARAMETER_TYPE_Shapes_List:
		case PARAMETER_TYPE_TIN_List:
		case PARAMETER_TYPE_Grid_List:
			CSG_Parameter_List	*pList	= (CSG_Parameter_Grid_List *)m_pParameter->Get_Data();

			for(int i=pList->Get_Count()-1; i>=0; i--)
			{
				if( !g_pData->Exists(pList->asDataObject(i)) )
				{
					pList->Del_Item(i);
				}
			}

			break;
		}

		return( true );
	}

	return( false );
}

//---------------------------------------------------------
bool CParameters_PG_DialogedValue::Do_Dialog(void)
{
	bool		bModified	= false;
	long		Color;
	wxString	Text;

	if( m_pParameter )
	{
		switch( m_pParameter->Get_Type() )
		{
		default:
			break;

		case PARAMETER_TYPE_Font:
			bModified	= DLG_Font			(m_pParameter->asFont(), Color = m_pParameter->asColor());

			if( bModified )
			{
				m_pParameter->Set_Value((int)Color);
			}
			break;

		case PARAMETER_TYPE_Text:
			bModified	= DLG_Text			(m_pParameter->Get_Name(), Text = m_pParameter->asString());

			if( bModified )
			{
				m_pParameter->Set_Value(Text.c_str());
			}
			break;

		case PARAMETER_TYPE_FilePath:
			Text	= m_pParameter->asString();

			if( m_pParameter->asFilePath()->is_Directory() )
			{
				bModified	= DLG_Directory	(Text, LNG("[CAP] Choose Directory"));
			}
			else if( m_pParameter->asFilePath()->is_Save() )
			{
				bModified	= DLG_Save		(Text, LNG("[CAP] Save"), m_pParameter->asFilePath()->Get_Filter());
			}
			else if( m_pParameter->asFilePath()->is_Multiple() == false )
			{
				bModified	= DLG_Open		(Text, LNG("[CAP] Open"), m_pParameter->asFilePath()->Get_Filter());
			}
			else
			{
				wxArrayString	Files;

				bModified	= DLG_Open		(Files, LNG("[CAP] Open"), m_pParameter->asFilePath()->Get_Filter());

				if( bModified )
				{
					if( Files.GetCount() > 0 )
					{
						Text.Clear();

						for(size_t i=0; i<Files.GetCount(); i++)
						{
							Text.Append(i > 0 ? wxT(" \"") : wxT("\""));
							Text.Append(Files.Item(i));
							Text.Append(wxT("\""));
						}
					}
					else
					{
						Text	= Files.Item(0);
					}
				}
			}

			if( bModified )
			{
				m_pParameter->Set_Value(Text.c_str());
			}
			break;

		case PARAMETER_TYPE_FixedTable:
			bModified	= DLG_Table			(m_pParameter->Get_Name(), m_pParameter->asTable());
			break;

		case PARAMETER_TYPE_Grid_List:
			bModified	= DLG_List_Grid		(m_pParameter->Get_Name(), (CSG_Parameter_Grid_List   *)m_pParameter->Get_Data());
			break;

		case PARAMETER_TYPE_Table_List:
			bModified	= DLG_List_Table	(m_pParameter->Get_Name(), (CSG_Parameter_Table_List  *)m_pParameter->Get_Data());
			break;

		case PARAMETER_TYPE_Shapes_List:
			bModified	= DLG_List_Shapes	(m_pParameter->Get_Name(), (CSG_Parameter_Shapes_List *)m_pParameter->Get_Data());
			break;

		case PARAMETER_TYPE_TIN_List:
			bModified	= DLG_List_TIN		(m_pParameter->Get_Name(), (CSG_Parameter_TIN_List    *)m_pParameter->Get_Data());
			break;

		case PARAMETER_TYPE_Colors:
			bModified	= DLG_Colors		(m_pParameter->asColors());
			break;

		case PARAMETER_TYPE_Parameters:
			bModified	= DLG_Parameters	(m_pParameter->asParameters());
			break;
		}
	}

	return( bModified );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP(CParameters_PG_DialogedValue, CParameters_PG_Dialoged, CParameters_PG_DialogedValue(NULL))

//---------------------------------------------------------
class CParameters_PG_DialogedClass : public wxPGProperty
{
    WX_PG_DECLARE_PROPERTY_CLASS()

public:
	CParameters_PG_DialogedClass(const wxString &label, const wxString &name, const CParameters_PG_DialogedValue &value);
	virtual ~CParameters_PG_DialogedClass(void)	{}

	WX_PG_DECLARE_BASIC_TYPE_METHODS()
	WX_PG_DECLARE_EVENT_METHODS()

	CParameters_PG_DialogedValue		m_value;

};

//---------------------------------------------------------
WX_PG_IMPLEMENT_PROPERTY_CLASS(CParameters_PG_Dialoged, wxBaseProperty, CParameters_PG_DialogedValue, const CParameters_PG_DialogedValue &, TextCtrlAndButton)

//---------------------------------------------------------
CParameters_PG_DialogedClass::CParameters_PG_DialogedClass(const wxString &Name, const wxString &Identifier, const CParameters_PG_DialogedValue &value)
	: wxPGProperty(value.m_pParameter ? GET_DATAOBJECT_LABEL(value.m_pParameter) : Name, Identifier)
{
	m_value	= value;

	DoSetValue((void *)&m_value);
}

//---------------------------------------------------------
void CParameters_PG_DialogedClass::DoSetValue(wxPGVariant value)
{
	m_value	= *((CParameters_PG_DialogedValue *)wxPGVariantToVoidPtr(value));
}

//---------------------------------------------------------
wxPGVariant CParameters_PG_DialogedClass::DoGetValue(void) const
{
	return( wxPGVariant((void *)&m_value) );
}

//---------------------------------------------------------
bool CParameters_PG_DialogedClass::SetValueFromString(const wxString &text, int flags)
{
	return( m_value.fromString(text) );
}

//---------------------------------------------------------
wxString CParameters_PG_DialogedClass::GetValueAsString(int flags) const
{
	return( m_value.asString() );
}

//---------------------------------------------------------
bool CParameters_PG_DialogedClass::OnEvent(wxPropertyGrid *propgrid, wxWindow *primary, wxEvent &event)
{
	if( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED )
	{
		if( m_value.Do_Dialog() )
		{
			UpdateControl(primary);

			return( true );
		}
	}

	return( false );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
class CParameters_PG_ColorsClass : public CParameters_PG_DialogedClass
{
    WX_PG_DECLARE_PROPERTY_CLASS()

public:
	CParameters_PG_ColorsClass(const wxString &label, const wxString &name, const CParameters_PG_DialogedValue &value);

	WX_PG_DECLARE_CUSTOM_PAINT_METHODS()

};


//---------------------------------------------------------
WX_PG_IMPLEMENT_PROPERTY_CLASS(CParameters_PG_Colors, wxBaseProperty, CParameters_PG_DialogedValue, const CParameters_PG_DialogedValue &, TextCtrlAndButton)

//---------------------------------------------------------
CParameters_PG_ColorsClass::CParameters_PG_ColorsClass(const wxString &Name, const wxString &Identifier, const CParameters_PG_DialogedValue &value)
	: CParameters_PG_DialogedClass(Name, Identifier, value)
{
}

//---------------------------------------------------------
void CParameters_PG_ColorsClass::OnCustomPaint(wxDC &dc, const wxRect &r, wxPGPaintData &pd)
{
	int		i, ax, bx;
	double	dx;
	CSG_Colors	*pColors;

	if( m_value.m_pParameter && m_value.m_pParameter->Get_Type() == PARAMETER_TYPE_Colors )
	{
		pColors	= m_value.m_pParameter->asColors();
		dx		= r.GetWidth() / (double)pColors->Get_Count();

		for(i=0, bx=r.GetLeft(); i<pColors->Get_Count(); i++)
		{
			ax	= bx;
			bx	= r.GetLeft() + (int)(dx * (i + 1.0));

			Draw_FillRect(dc, Get_Color_asWX(pColors->Get_Color(i)), ax, r.GetTop(), bx, r.GetBottom());
		}
	}
}

//---------------------------------------------------------
wxSize CParameters_PG_ColorsClass::GetImageSize() const
{
	return( wxPG_FLEXIBLE_SIZE(164, 64) );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -