#include "wx/button.h"
#include "wx/pen.h"
#include "wx/brush.h"
- #include "wx/cursor.h"
- #include "wx/dialog.h"
#include "wx/settings.h"
- #include "wx/msgdlg.h"
- #include "wx/choice.h"
- #include "wx/stattext.h"
- #include "wx/scrolwin.h"
- #include "wx/dirdlg.h"
- #include "wx/layout.h"
#include "wx/sizer.h"
- #include "wx/textdlg.h"
- #include "wx/filedlg.h"
- #include "wx/statusbr.h"
#include "wx/intl.h"
- #include "wx/frame.h"
#endif
#include <wx/propgrid/property.h>
#include <wx/propgrid/propgrid.h>
-#include <typeinfo>
-
const wxChar *wxPGTypeName_long = wxT("long");
const wxChar *wxPGTypeName_bool = wxT("bool");
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxPoint, WXDLLIMPEXP_PROPGRID)
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxSize, WXDLLIMPEXP_PROPGRID)
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_DUMMY_EQ(wxArrayInt, WXDLLIMPEXP_PROPGRID)
-WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxLongLong, WXDLLIMPEXP_PROPGRID)
-WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxULongLong, WXDLLIMPEXP_PROPGRID)
+
+// For wxLongLong and wxULongLong have custom classname << variant
+// implementation for improved flexibility.
+WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ_NO_GETTER(wxLongLong, WXDLLIMPEXP_PROPGRID)
+WX_PG_IMPLEMENT_VARIANT_DATA_EQ(wxLongLong, WXDLLIMPEXP_PROPGRID)
+WXDLLIMPEXP_PROPGRID wxLongLong& operator << ( wxLongLong &value, const wxVariant &variant )
+{
+ wxLongLong_t ll;
+ if ( !wxPGVariantToLongLong(variant, &ll) )
+ {
+ wxFAIL_MSG("Cannot convert to wxLongLong");
+ }
+ value = ll;
+ return value;
+}
+WXDLLIMPEXP_PROPGRID wxLongLong_t& operator << ( wxLongLong_t &value, const wxVariant &variant )
+{
+ if ( !wxPGVariantToLongLong(variant, &value) )
+ {
+ wxFAIL_MSG("Cannot convert to wxLongLong");
+ }
+ return value;
+}
+
+WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ_NO_GETTER(wxULongLong, WXDLLIMPEXP_PROPGRID)
+WX_PG_IMPLEMENT_VARIANT_DATA_EQ(wxULongLong, WXDLLIMPEXP_PROPGRID)
+WXDLLIMPEXP_PROPGRID wxULongLong& operator << ( wxULongLong &value, const wxVariant &variant )
+{
+ wxULongLong_t ull;
+ if ( !wxPGVariantToULongLong(variant, &ull) )
+ {
+ wxFAIL_MSG("Cannot convert to wxULongLong");
+ }
+ value = ull;
+ return value;
+}
+WXDLLIMPEXP_PROPGRID wxULongLong_t& operator << ( wxULongLong_t &value, const wxVariant &variant )
+{
+ if ( !wxPGVariantToULongLong(variant, &value) )
+ {
+ wxFAIL_MSG("Cannot convert to wxULongLong");
+ }
+ return value;
+}
IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxFont, WXDLLIMPEXP_PROPGRID)
if ( variantType == wxLongLong_VariantType )
{
- wxLongLong ll;
- ll << variant;
- *pResult = ll.GetValue();
+ // NOTE: << operator uses this functions, so we can't use it here
+ *pResult = wxLongLongRefFromVariant(variant).GetValue();
return true;
}
if ( variantType == wxULongLong_VariantType )
{
- wxULongLong ull;
- ull << variant;
- *pResult = ull.GetValue();
+ // NOTE: << operator uses this functions, so we can't use it here
+ *pResult = wxULongLongRefFromVariant(variant).GetValue();
return true;
}
wxPGProperty* wxPropertyGridInterface::Insert( wxPGPropArg id, wxPGProperty* property )
{
wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
- wxPGProperty* retp = m_pState->DoInsert(p->GetParent(), p->GetArrIndex(), property);
+ wxPGProperty* retp = m_pState->DoInsert(p->GetParent(), p->GetIndexInParent(), property);
RefreshGrid();
return retp;
}
p->GetParentState()->DoSetPropertyValueUnspecified(p);
}
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::ClearModifiedStatus()
+{
+ unsigned int pageIndex = 0;
+
+ for (;;)
+ {
+ wxPropertyGridPageState* page = GetPageState(pageIndex);
+ if ( !page ) break;
+
+ page->DoGetRoot()->SetFlagRecursively(wxPG_PROP_MODIFIED, false);
+
+ pageIndex++;
+ }
+}
+
// -----------------------------------------------------------------------
// wxPropertyGridInterface property value setting and getting
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
+void wxPropertyGridInterface::SetPropertyAttributeAll( const wxString& attrName,
+ wxVariant value )
+{
+ unsigned int pageIndex = 0;
+
+ for (;;)
+ {
+ wxPropertyGridPageState* page = GetPageState(pageIndex);
+ if ( !page ) break;
+
+ DoSetPropertyAttribute(page->DoGetRoot(), attrName, value, wxPG_RECURSE);
+
+ pageIndex++;
+ }
+}
+
+// -----------------------------------------------------------------------
+
void wxPropertyGridInterface::GetPropertiesWithFlag( wxArrayPGProperty* targetArr,
wxPGProperty::FlagType flags,
bool inverse,
IMPLEMENT_GET_VALUE(long,long,Long,0)
IMPLEMENT_GET_VALUE(double,double,Double,0.0)
-IMPLEMENT_GET_VALUE(void,void*,VoidPtr,NULL)
bool wxPropertyGridInterface::IsPropertyExpanded( wxPGPropArg id ) const
{
//
// Save state on page basis
- size_t pageIndex = 0;
- wxPropertyGridPageState* pageState = GetPageState(pageIndex);
+ unsigned int pageIndex = 0;
wxArrayPtrVoid pageStates;
- while ( pageState )
+
+ for (;;)
{
- pageStates.Add(pageState);
- pageIndex += 1;
- pageState = GetPageState(pageIndex);
+ wxPropertyGridPageState* page = GetPageState(pageIndex);
+ if ( !page ) break;
+
+ pageStates.Add(page);
+
+ pageIndex++;
}
for ( pageIndex=0; pageIndex < pageStates.size(); pageIndex++ )
else
result += wxS("0;");
}
+ if ( includedStates & DescBoxState )
+ {
+ wxVariant v = GetEditableStateItem(wxS("descboxheight"));
+ result += wxString::Format(wxS("descboxheight=%i;"), (int)v.GetLong());
+ }
result.RemoveLast(); // Remove last semicolon
result += wxS("|");
}
}
}
}
+ else if ( key == wxS("descboxheight") )
+ {
+ if ( restoreStates & DescBoxState )
+ {
+ long descBoxHeight;
+ if ( values.size() == 1 && values[0].ToLong(&descBoxHeight) )
+ {
+ SetEditableStateItem(wxS("descboxheight"), descBoxHeight);
+ }
+ else
+ {
+ res = false;
+ }
+ }
+ }
else
{
res = false;