📄 parameters_properties.cpp
字号:
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 + -