Merge branch 'generic-initial-state-fixes'

Fixes for the initial state of generic wx{List,Spin}Ctrl.

See https://github.com/wxWidgets/wxWidgets/pull/2469
This commit is contained in:
Vadim Zeitlin
2021-08-20 21:28:35 +02:00
8 changed files with 41 additions and 18 deletions

View File

@@ -1379,7 +1379,7 @@ following properties (all of them optional):
@row3col{text, @ref overview_xrcformat_type_text,
The title of the column. }
@row3col{width, integer,
The column width. }
The column width. @c wxLIST_DEFAULT_COL_WIDTH is used by default. }
@row3col{image, integer,
The zero-based index of the image associated with the item in the 'small' image list. }
@endTable

View File

@@ -145,6 +145,9 @@ protected:
// check if the value is in range
bool InRange(double n) const { return (n >= m_min) && (n <= m_max); }
// adjust the value to fit the range and snap it to ticks if necessary
double AdjustAndSnap(double value) const;
// ensure that the value is in range wrapping it round if necessary
double AdjustToFitInRange(double value) const;

View File

@@ -135,11 +135,12 @@ enum wxListColumnFormat
wxLIST_FORMAT_CENTER = wxLIST_FORMAT_CENTRE
};
// Autosize values for SetColumnWidth
// Values for SetColumnWidth()
enum
{
wxLIST_AUTOSIZE = -1,
wxLIST_AUTOSIZE_USEHEADER = -2 // partly supported by generic version
wxLIST_AUTOSIZE_USEHEADER = -2, // partly supported by generic version
wxLIST_DEFAULT_COL_WIDTH = 80
};
// Flag values for GetItemRect

View File

@@ -89,7 +89,7 @@ enum wxListColumnFormat
wxLIST_FORMAT_CENTER = wxLIST_FORMAT_CENTRE
};
/// Autosize values for SetColumnWidth
/// Values for SetColumnWidth()
enum
{
wxLIST_AUTOSIZE = -1,

View File

@@ -96,9 +96,6 @@ static const int MARGIN_BETWEEN_ROWS = 6;
// when autosizing the columns, add some slack
static const int AUTOSIZE_COL_MARGIN = 10;
// default width for the header columns
static const int WIDTH_COL_DEFAULT = 80;
// the space between the image and the text in the report mode
static const int IMAGE_MARGIN_IN_REPORT_MODE = 5;
@@ -316,8 +313,9 @@ void wxListHeaderData::SetItem( const wxListItem &item )
if ( m_mask & wxLIST_MASK_FORMAT )
m_format = item.m_format;
if ( m_mask & wxLIST_MASK_WIDTH )
SetWidth(item.m_width);
// Always give some initial width to the new columns (it's still possible
// to set the width to 0 explicitly, however).
SetWidth(m_mask & wxLIST_MASK_WIDTH ? item.m_width : wxLIST_DEFAULT_COL_WIDTH);
if ( m_mask & wxLIST_MASK_STATE )
SetState(item.m_state);
@@ -336,7 +334,7 @@ void wxListHeaderData::SetHeight( int h )
void wxListHeaderData::SetWidth( int w )
{
m_width = w < 0 ? WIDTH_COL_DEFAULT : w;
m_width = w < 0 ? wxLIST_DEFAULT_COL_WIDTH : w;
}
void wxListHeaderData::SetState( int flag )

View File

@@ -222,11 +222,14 @@ bool wxSpinCtrlGenericBase::Create(wxWindow *parent,
return false;
}
m_value = initial;
m_min = min;
m_max = max;
m_min = min;
m_max = max;
m_increment = increment;
// Note that AdjustAndSnap() uses the variables set above, so only call it
// after assigning the values to them.
m_value = AdjustAndSnap(initial);
// the string value overrides the numeric one (for backwards compatibility
// reasons and also because it is simpler to specify the string value which
// comes much sooner in the list of arguments and leave the initial
@@ -235,7 +238,7 @@ bool wxSpinCtrlGenericBase::Create(wxWindow *parent,
{
double d;
if ( DoTextToValue(value, &d) )
m_value = d;
m_value = AdjustAndSnap(d);
}
m_textCtrl = new wxSpinCtrlTextGeneric(this, DoValueToText(m_value), style);
@@ -529,10 +532,8 @@ void wxSpinCtrlGenericBase::SetValue(const wxString& text)
}
}
bool wxSpinCtrlGenericBase::DoSetValue(double val, SendEvent sendEvent)
double wxSpinCtrlGenericBase::AdjustAndSnap(double val) const
{
wxCHECK_MSG( m_textCtrl, false, wxT("invalid call to wxSpinCtrl::SetValue") );
if ( val < m_min )
val = m_min;
if ( val > m_max )
@@ -551,6 +552,15 @@ bool wxSpinCtrlGenericBase::DoSetValue(double val, SendEvent sendEvent)
}
}
return val;
}
bool wxSpinCtrlGenericBase::DoSetValue(double val, SendEvent sendEvent)
{
wxCHECK_MSG( m_textCtrl, false, wxT("invalid call to wxSpinCtrl::SetValue") );
val = AdjustAndSnap(val);
wxString str(DoValueToText(val));
if ((val != m_value) || (str != m_textCtrl->GetValue()))

View File

@@ -2057,7 +2057,7 @@ long wxListCtrl::DoInsertColumn(long col, const wxListItem& item)
// always give some width to the new column: this one is compatible
// with the generic version
lvCol.mask |= LVCF_WIDTH;
lvCol.cx = 80;
lvCol.cx = wxLIST_DEFAULT_COL_WIDTH;
}
long n = ListView_InsertColumn(GetHwnd(), col, &lvCol);

View File

@@ -124,6 +124,17 @@ TEST_CASE_METHOD(SpinCtrlTestCase1, "SpinCtrl::Init4", "[spinctrl]")
CHECK(m_spin->GetValue() == 99);
}
TEST_CASE_METHOD(SpinCtrlTestCase1, "SpinCtrl::InitOutOfRange", "[spinctrl]")
{
m_spin->Create(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxDefaultSize, 0,
10, 20, 0);
// Recreate the control with another "initial" outside of the valid range:
// it shouldn't be taken into account.
CHECK(m_spin->GetValue() == 10);
}
TEST_CASE_METHOD(SpinCtrlTestCase1, "SpinCtrl::NoEventsInCtor", "[spinctrl]")
{
// Verify that creating the control does not generate any events. This is