// Author: Jaakko Salli
// Modified by:
// Created: 2006-03-05
-// RCS-ID: $Id:
+// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wx.h"
#endif
+#include "wx/fontdlg.h"
+
// -----------------------------------------------------------------------
// Custom version of wxFontProperty that also holds colour in the value.
// Original version by Vladimir Vainer.
-#include <wx/fontdlg.h>
-
-WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA(wxPGVariantDataFontData, wxFontData)
+IMPLEMENT_VARIANT_OBJECT_SHALLOWCMP(wxFontData)
WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontProperty,
wxFontData,const wxFontData&,TextCtrlAndButton)
wxFontDataProperty::wxFontDataProperty( const wxString& label, const wxString& name,
const wxFontData& value ) : wxFontProperty(label,name,value.GetInitialFont())
{
- // Set initial value - should be done in a simpler way like this
- // (instead of calling SetValue) in derived (wxObject) properties.
- m_value_wxFontData << value;
-
- wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+ wxFontData fontData(value);
// Fix value.
fontData.SetChosenFont(value.GetInitialFont());
- if ( !fontData.GetColour().Ok() )
+ if ( !fontData.GetColour().IsOk() )
fontData.SetColour(*wxBLACK);
- // Add extra children.
- AddChild( new wxColourProperty(_("Colour"),wxPG_LABEL,
- fontData.GetColour() ) );
+ // Set initial value - should be done in a simpler way like this
+ // (instead of calling SetValue) in derived (wxObject) properties.
+ m_value_wxFontData << value;
+ // Add extra children.
+ AddPrivateChild( new wxColourProperty(_("Colour"), wxPG_LABEL,
+ fontData.GetColour() ) );
}
wxFontDataProperty::~wxFontDataProperty () { }
void wxFontDataProperty::OnSetValue()
{
- if ( !(&wxFontDataFromVariant(m_value)) )
+ if ( m_value.GetType() != "wxFontData" )
{
- wxFont* pFont = &wxFontFromVariant(m_value);
- if ( pFont )
+ if ( m_value.GetType() == "wxFont" )
{
+ wxFont font;
+ font << m_value;
wxFontData fontData;
- fontData.SetChosenFont(*pFont);
- m_value = WXVARIANT(fontData);
+ fontData.SetChosenFont(font);
+ if ( !m_value_wxFontData.IsNull() )
+ {
+ wxFontData oldFontData;
+ oldFontData << m_value_wxFontData;
+ fontData.SetColour(oldFontData.GetColour());
+ }
+ else
+ {
+ fontData.SetColour(*wxBLACK);
+ }
+ wxVariant variant;
+ variant << fontData;
+ m_value_wxFontData = variant;
}
else
{
wxFAIL_MSG(wxT("Value to wxFontDataProperty must be eithe wxFontData or wxFont"));
}
}
+ else
+ {
+ // Set m_value to wxFont so that wxFontProperty methods will work
+ // correctly.
+ m_value_wxFontData = m_value;
+
+ wxFontData fontData;
+ fontData << m_value_wxFontData;
- // Set m_value to wxFont so that wxFontProperty methods will work
- // correctly.
- m_value_wxFontData = m_value;
- wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+ wxFont font = fontData.GetChosenFont();
+ if ( !font.IsOk() )
+ font = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL);
- wxFont font = fontData.GetChosenFont();
- if ( !font.Ok() )
- font = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL);
- m_value = WXVARIANT(font);
+ m_value = WXVARIANT(font);
+ }
}
wxVariant wxFontDataProperty::DoGetValue() const
{
if ( propgrid->IsMainButtonEvent(event) )
{
- // Update value from last minute changes
- PrepareValueForDialogEditing(propgrid);
+ wxVariant useValue = propgrid->GetUncommittedPropertyValue();
- wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+ wxFontData fontData;
+ fontData << useValue;
fontData.SetInitialFont(fontData.GetChosenFont());
if ( dlg.ShowModal() == wxID_OK )
{
- SetValueInEvent( wxFontDataToVariant(dlg.GetFontData()) );
+ wxVariant variant;
+ variant << dlg.GetFontData();
+ SetValueInEvent( variant );
return true;
}
}
void wxFontDataProperty::RefreshChildren()
{
wxFontProperty::RefreshChildren();
- if ( GetChildCount() < 6 ) // Number is count of inherit prop's children + 1.
+ if ( GetChildCount() < 6 ) // Number is count of wxFontProperty's children + 1.
return;
- wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+ wxFontData fontData; fontData << m_value_wxFontData;
wxVariant variant; variant << fontData.GetColour();
Item(6)->SetValue( variant );
}
-void wxFontDataProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+wxVariant wxFontDataProperty::ChildChanged( wxVariant& thisValue,
+ int childIndex,
+ wxVariant& childValue ) const
{
- wxFontData& fontData = wxFontDataFromVariant(thisValue);
+ wxFontData fontData;
+ fontData << thisValue;
wxColour col;
wxVariant variant;
fontData.SetColour( col );
break;
default:
- // Transfer between subset to superset.
- variant = WXVARIANT(fontData.GetChosenFont());
+ // Transfer from subset to superset.
+ wxFont font = fontData.GetChosenFont();
+ variant = WXVARIANT(font);
wxFontProperty::ChildChanged( variant, childIndex, childValue );
- fontData.SetChosenFont(wxFontFromVariant(variant));
+ font << variant;
+ fontData.SetChosenFont(font);
}
+
+ wxVariant newVariant;
+ newVariant << fontData;
+ return newVariant;
}
// -----------------------------------------------------------------------
const wxSize& value) : wxPGProperty(label,name)
{
SetValueI(value);
- AddChild( new wxIntProperty(wxT("Width"),wxPG_LABEL,value.x) );
- AddChild( new wxIntProperty(wxT("Height"),wxPG_LABEL,value.y) );
+ AddPrivateChild( new wxIntProperty(wxT("Width"),wxPG_LABEL,value.x) );
+ AddPrivateChild( new wxIntProperty(wxT("Height"),wxPG_LABEL,value.y) );
}
wxSizeProperty::~wxSizeProperty() { }
void wxSizeProperty::RefreshChildren()
{
if ( !GetChildCount() ) return;
- const wxSize& size = wxSizeFromVariant(m_value);
+ const wxSize& size = wxSizeRefFromVariant(m_value);
Item(0)->SetValue( (long)size.x );
Item(1)->SetValue( (long)size.y );
}
-void wxSizeProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+wxVariant wxSizeProperty::ChildChanged( wxVariant& thisValue,
+ int childIndex,
+ wxVariant& childValue ) const
{
- wxSize& size = wxSizeFromVariant(thisValue);
- int val = wxPGVariantToInt(childValue);
+ wxSize& size = wxSizeRefFromVariant(thisValue);
+ int val = childValue.GetLong();
switch ( childIndex )
{
case 0: size.x = val; break;
case 1: size.y = val; break;
}
+ wxVariant newVariant;
+ newVariant << size;
+ return newVariant;
}
// -----------------------------------------------------------------------
const wxPoint& value) : wxPGProperty(label,name)
{
SetValueI(value);
- AddChild( new wxIntProperty(wxT("X"),wxPG_LABEL,value.x) );
- AddChild( new wxIntProperty(wxT("Y"),wxPG_LABEL,value.y) );
+ AddPrivateChild( new wxIntProperty(wxT("X"),wxPG_LABEL,value.x) );
+ AddPrivateChild( new wxIntProperty(wxT("Y"),wxPG_LABEL,value.y) );
}
wxPointProperty::~wxPointProperty() { }
void wxPointProperty::RefreshChildren()
{
if ( !GetChildCount() ) return;
- const wxPoint& point = wxPointFromVariant(m_value);
+ const wxPoint& point = wxPointRefFromVariant(m_value);
Item(0)->SetValue( (long)point.x );
Item(1)->SetValue( (long)point.y );
}
-void wxPointProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+wxVariant wxPointProperty::ChildChanged( wxVariant& thisValue,
+ int childIndex,
+ wxVariant& childValue ) const
{
- wxPoint& point = wxPointFromVariant(thisValue);
- int val = wxPGVariantToInt(childValue);
+ wxPoint& point = wxPointRefFromVariant(thisValue);
+ int val = childValue.GetLong();
switch ( childIndex )
{
case 0: point.x = val; break;
case 1: point.y = val; break;
}
+ wxVariant newVariant;
+ newVariant << point;
+ return newVariant;
}
// Dirs Property
// -----------------------------------------------------------------------
-WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(wxDirsProperty,wxT(','),wxT("Browse"))
+WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(wxDirsProperty, ',',
+ "Browse")
#if wxUSE_VALIDATORS
// by replacing each ArrayDouble with ArrayXXX.
//
-class wxArrayDoubleEditorDialog : public wxArrayEditorDialog
+class wxArrayDoubleEditorDialog : public wxPGArrayEditorDialog
{
public:
wxArrayDoubleEditorDialog();
DECLARE_DYNAMIC_CLASS_NO_COPY(wxArrayDoubleEditorDialog)
};
-IMPLEMENT_DYNAMIC_CLASS(wxArrayDoubleEditorDialog, wxArrayEditorDialog)
+IMPLEMENT_DYNAMIC_CLASS(wxArrayDoubleEditorDialog, wxPGArrayEditorDialog)
//
// Array dialog array access and manipulation
//
wxArrayDoubleEditorDialog::wxArrayDoubleEditorDialog()
- : wxArrayEditorDialog()
+ : wxPGArrayEditorDialog()
{
Init();
}
void wxArrayDoubleEditorDialog::Init()
{
- wxArrayEditorDialog::Init();
+ wxPGArrayEditorDialog::Init();
SetPrecision(-1);
}
long style,
const wxPoint& pos,
const wxSize& sz )
- : wxArrayEditorDialog()
+ : wxPGArrayEditorDialog()
{
Init();
Create(parent,message,caption,array,style,pos,sz);
m_array = array;
- return wxArrayEditorDialog::Create (parent,message,caption,style,pos,sz);
+ return wxPGArrayEditorDialog::Create (parent,message,caption,style,pos,sz);
}
// -----------------------------------------------------------------------
return TRUE;
}
-WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataArrayDouble, wxArrayDouble)
+WX_PG_IMPLEMENT_VARIANT_DATA_DUMMY_EQ(wxArrayDouble)
WX_PG_IMPLEMENT_PROPERTY_CLASS(wxArrayDoubleProperty,
wxPGProperty,
m_delimiter = use_delimiter;
- SetValue( wxArrayDoubleToVariant(array) );
+ SetValue( WXVARIANT(array) );
}
wxArrayDoubleProperty::~wxArrayDoubleProperty () { }
void wxArrayDoubleProperty::OnSetValue()
{
+ // Generate cached display string, to optimize grid drawing
GenerateValueAsString( m_display, m_precision, true );
}
-wxString wxArrayDoubleProperty::GetValueAsString( int arg_flags ) const
+wxString wxArrayDoubleProperty::ValueToString( wxVariant& value,
+ int argFlags ) const
{
- if ( !(arg_flags & wxPG_FULL_VALUE ))
- return m_display;
-
wxString s;
- GenerateValueAsString(s,-1,false);
+
+ if ( argFlags & wxPG_FULL_VALUE )
+ {
+ GenerateValueAsString(s,-1,false);
+ }
+ else
+ {
+ //
+ // Display cached string only if value truly matches m_value
+ if ( value.GetData() == m_value.GetData() )
+ return m_display;
+ else
+ GenerateValueAsString( s, m_precision, true );
+ }
+
return s;
}
target.Empty();
- const wxArrayDouble& value = wxArrayDoubleFromVariant(m_value);
+ const wxArrayDouble& value = wxArrayDoubleRefFromVariant(m_value);
for ( i=0; i<value.GetCount(); i++ )
{
{
if ( propgrid->IsMainButtonEvent(event) )
{
- wxArrayDouble& value = wxArrayDoubleFromVariant(m_value);
-
// Update the value in case of last minute changes
- PrepareValueForDialogEditing(propgrid);
+ wxVariant useValue = propgrid->GetUncommittedPropertyValue();
+
+ wxArrayDouble& value = wxArrayDoubleRefFromVariant(useValue);
// Create editor dialog.
wxArrayDoubleEditorDialog dlg;
int res = dlg.ShowModal();
if ( res == wxID_OK && dlg.IsModified() )
{
- SetValueInEvent( wxArrayDoubleToVariant(dlg.GetArray()) );
+ SetValueInEvent( WXVARIANT(dlg.GetArray()) );
return true;
}
return false;
WX_PG_TOKENIZER1_BEGIN(text,delimiter)
- if ( token.length() )
+ if ( !token.empty() )
{
// If token was invalid, exit the loop now
return false;
}
- if ( !(wxArrayDoubleFromVariant(m_value) == new_array) )
+ if ( !(wxArrayDoubleRefFromVariant(m_value) == new_array) )
{
- variant = wxArrayDoubleToVariant(new_array);
+ variant = WXVARIANT(new_array);
return true;
}