Add support for custom numeric formats to wxGrid.
Allow %e and %g formats (as well as their upper-letter equivalents) in addition to the default %f format for number display in wxGrid. Closes #13583. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69856 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -598,10 +598,13 @@ wxSize wxGridCellNumberRenderer::GetBestSize(wxGrid& grid,
|
||||
// wxGridCellFloatRenderer
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxGridCellFloatRenderer::wxGridCellFloatRenderer(int width, int precision)
|
||||
wxGridCellFloatRenderer::wxGridCellFloatRenderer(int width,
|
||||
int precision,
|
||||
int format)
|
||||
{
|
||||
SetWidth(width);
|
||||
SetPrecision(precision);
|
||||
SetFormat(format);
|
||||
}
|
||||
|
||||
wxGridCellRenderer *wxGridCellFloatRenderer::Clone() const
|
||||
@@ -609,6 +612,7 @@ wxGridCellRenderer *wxGridCellFloatRenderer::Clone() const
|
||||
wxGridCellFloatRenderer *renderer = new wxGridCellFloatRenderer;
|
||||
renderer->m_width = m_width;
|
||||
renderer->m_precision = m_precision;
|
||||
renderer->m_style = m_style;
|
||||
renderer->m_format = m_format;
|
||||
|
||||
return renderer;
|
||||
@@ -641,22 +645,30 @@ wxString wxGridCellFloatRenderer::GetString(const wxGrid& grid, int row, int col
|
||||
if ( m_precision == -1 )
|
||||
{
|
||||
// default width/precision
|
||||
m_format = wxT("%f");
|
||||
m_format = wxT("%");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_format.Printf(wxT("%%.%df"), m_precision);
|
||||
m_format.Printf(wxT("%%.%d"), m_precision);
|
||||
}
|
||||
}
|
||||
else if ( m_precision == -1 )
|
||||
{
|
||||
// default precision
|
||||
m_format.Printf(wxT("%%%d.f"), m_width);
|
||||
m_format.Printf(wxT("%%%d."), m_width);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_format.Printf(wxT("%%%d.%df"), m_width, m_precision);
|
||||
m_format.Printf(wxT("%%%d.%d"), m_width, m_precision);
|
||||
}
|
||||
|
||||
bool isUpper = ( ( m_style & wxGRID_FLOAT_FORMAT_UPPER ) == wxGRID_FLOAT_FORMAT_UPPER);
|
||||
if ( ( m_style & wxGRID_FLOAT_FORMAT_SCIENTIFIC ) == wxGRID_FLOAT_FORMAT_SCIENTIFIC)
|
||||
m_format += isUpper ? wxT('E') : wxT('e');
|
||||
else if ( ( m_style & wxGRID_FLOAT_FORMAT_COMPACT ) == wxGRID_FLOAT_FORMAT_COMPACT)
|
||||
m_format += isUpper ? wxT('G') : wxT('g');
|
||||
else
|
||||
m_format += wxT('f');
|
||||
}
|
||||
|
||||
text.Printf(m_format, val);
|
||||
@@ -704,10 +716,12 @@ void wxGridCellFloatRenderer::SetParameters(const wxString& params)
|
||||
// reset to defaults
|
||||
SetWidth(-1);
|
||||
SetPrecision(-1);
|
||||
SetFormat(wxGRID_FLOAT_FORMAT_DEFAULT);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxString tmp = params.BeforeFirst(wxT(','));
|
||||
wxString rest;
|
||||
wxString tmp = params.BeforeFirst(wxT(','), &rest);
|
||||
if ( !tmp.empty() )
|
||||
{
|
||||
long width;
|
||||
@@ -721,7 +735,7 @@ void wxGridCellFloatRenderer::SetParameters(const wxString& params)
|
||||
}
|
||||
}
|
||||
|
||||
tmp = params.AfterFirst(wxT(','));
|
||||
tmp = rest.BeforeFirst(wxT(','));
|
||||
if ( !tmp.empty() )
|
||||
{
|
||||
long precision;
|
||||
@@ -734,6 +748,43 @@ void wxGridCellFloatRenderer::SetParameters(const wxString& params)
|
||||
wxLogDebug(wxT("Invalid wxGridCellFloatRenderer precision parameter string '%s ignored"), params.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
tmp = rest.AfterFirst(wxT(','));
|
||||
if ( !tmp.empty() )
|
||||
{
|
||||
if ( tmp[0] == wxT('f') )
|
||||
{
|
||||
SetFormat(wxGRID_FLOAT_FORMAT_FIXED);
|
||||
}
|
||||
else if ( tmp[0] == wxT('e') )
|
||||
{
|
||||
SetFormat(wxGRID_FLOAT_FORMAT_SCIENTIFIC);
|
||||
}
|
||||
else if ( tmp[0] == wxT('g') )
|
||||
{
|
||||
SetFormat(wxGRID_FLOAT_FORMAT_COMPACT);
|
||||
}
|
||||
else if ( tmp[0] == wxT('E') )
|
||||
{
|
||||
SetFormat(wxGRID_FLOAT_FORMAT_SCIENTIFIC |
|
||||
wxGRID_FLOAT_FORMAT_UPPER);
|
||||
}
|
||||
else if ( tmp[0] == wxT('F') )
|
||||
{
|
||||
SetFormat(wxGRID_FLOAT_FORMAT_FIXED |
|
||||
wxGRID_FLOAT_FORMAT_UPPER);
|
||||
}
|
||||
else if ( tmp[0] == wxT('G') )
|
||||
{
|
||||
SetFormat(wxGRID_FLOAT_FORMAT_COMPACT |
|
||||
wxGRID_FLOAT_FORMAT_UPPER);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogDebug("Invalid wxGridCellFloatRenderer format "
|
||||
"parameter string '%s ignored", params);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user