Commit Graph

111 Commits

Author SHA1 Message Date
Vadim Zeitlin
e307945170 Merge branch 'ui-locale'
Add wxUILocale class providing functionality which can be implemented
portably for all major platforms, including macOS, and doesn't force
the change of the global C locale, unlike wxLocale.

See https://github.com/wxWidgets/wxWidgets/pull/2464
2021-08-26 15:49:57 +02:00
Vadim Zeitlin
85d379913d Use wxUILocale in wxSpinCtrlDouble
This ensures that we use the decimal separator corresponding to the UI
locale of the application, rather than C locale, so that e.g. comma is
used under macOS even if setlocale() is not used.
2021-08-20 23:37:28 +02:00
Vadim Zeitlin
ac1fa83c20 Ensure initial value of generic wxSpinCtrl is always valid
Under MSW creating a wxSpinCtrl with a range of, say, 1..10 and the
default initial value of 0 sets its initial value to 1 (i.e. the closest
valid value) as expected, but the generic version still set it to the
invalid value of 0, which was unexpected, inconsistent and not useful.

Fix the generic version to follow MSW behaviour now and add a test
checking for this.
2021-08-17 23:15:49 +02:00
Vadim Zeitlin
a44bb13a0c Make DetermineDigits() reusable in other ports
Move this function, and the associated constant, to common code.

This required moving wxSpinCtrlDouble::Create() implementation to the
source file, but there are no real changes.
2021-04-25 20:14:46 +01:00
Vadim Zeitlin
c16f85bd4d Simplify after recent changes by adding DoSetDigitsAndUpdate()
There is no need for a separate UpdateAfterDigitsChange(), it is always
called together with DoSetDigits().
2021-04-25 20:08:05 +01:00
Vadim Zeitlin
6c9c0ba02b Determine number of digits correctly when increment > 1
Using increment greater than 1 but with a fractional part should still
work, i.e. should use enough digits to fully show the fractional part of
the numbers that can be obtained by using this increment.
2021-04-25 20:00:31 +01:00
Vadim Zeitlin
0153a6673e Don't decrease the number of digits implicitly
wxSpinCtrlDouble::SetIncrement() should increase the number of digits if
necessary because not doing it would be inconsistent with the initial
determination of the number of digits in the ctor and would actually
lose the digits displayed, but it seems unnecessary to decrease the
number of digits and it might be surprising, so don't do it.

Add a test for this behaviour and document it.
2021-04-25 19:54:27 +01:00
Vadim Zeitlin
6938d91942 Update number of digits in wxSpinCtrlDouble::SetIncrement()
This is consistent with using the value of the increment specified in
the ctor for setting the initial number of digits, it was surprising
that creating the control with some value of the increment (e.g. 0.1)
and calling SetIncrement(0.1) later resulted in very different outcomes,
as in the former case the value was shown with a digit after the period
while in the latter case only the integer part was shown.

This also makes the behaviour compatible with that of the previous
versions of the generic wxSpinCtrlDouble, which used "%g" to format the
number before the changes of edc553870f (Fix displaying wxSpinCtrlDouble
values with default precision, 2020-05-18), as they did show the
fractional part even in the latter case.

Add a test checking that this works as expected: before this commit, the
test failed with "1 == 1.2" and "1 == 1.23" errors.
2021-04-25 19:45:34 +01:00
Vadim Zeitlin
eecc62ba65 Factor out wxSpinCtrlDouble::DoSetDigits()
Make this part of SetDigits() reusable in order to be able to also use
it in DetermineDigits() now and in SetIncrement() in the upcoming
commit.

No real changes yet.
2021-04-25 19:44:24 +01:00
Vadim Zeitlin
e2d2b367af Always initialize m_format in DetermineDigits()
It doesn't seem right to leave it unchanged when increment is outside of
[0, 1] interval, we should still set it to something in this case.

And doing this makes it unnecessary and redundant to initialize m_format
in Init(), as it will be always done when DetermineDigits() is called
from Create() anyhow.
2021-04-25 19:13:22 +01:00
Vadim Zeitlin
35fa1f93bc Reset wxSpinCtrl value to GetMin() if text string is invalid
Previously, wxSpinCtrl (using native control) and wxSpinCtrlDouble
(using the generic implementation) behaved differently in this case,
with the former changing its value but the latter keeping the last valid
value instead.

Make them behave the same by resetting the value in both cases and
document this behaviour.
2021-04-23 22:27:28 +01:00
Dummy
b6f8a8cf5b Add wxSpinCtrl::GetTextValue()
This allows to retrieve the current contents of the text entry part of
wxSpinCtrl.

For now provide a stub in the base class, will be made pure virtual
later.

Co-Authored-By: Vadim Zeitlin <vadim@wxwidgets.org>
2021-04-18 13:09:17 +02:00
PB
f57f214122 Remove BCC-specific hdrstop pragma from everywhere 2020-10-12 21:58:37 +02:00
Artur Wieczorek
776b28cba7 Don't allow wxSpinCtrl range to include negative values if base != 10 (wxOSX)
For the sake of consistency with another ports only unsigned
hexadecimal numbers should be supported. To do so we need
to prevent:
- Setting a range including negative values if base == 16.
- Setting base != 10 if current range includes negative values.

Closes #18805.
2020-07-12 19:58:30 +02:00
Artur Wieczorek
016924e14c Update wxSpinCtrl size while changing the base under OSX
Changing the base changes the textual representation of the number
so we need to reset the best size of numeric box to enforce
size recalculation.
2020-06-30 19:29:55 +02:00
Artur Wieczorek
5a676ac855 Set proper value of wxSpinEvent generated by wxSpinCtrl
Current way of converting wxSpinCtrl value to integer does not work
for negative values. We can just use here integer value returned
by GetValue().

Closes #18802.
2020-06-30 19:24:58 +02:00
Artur Wieczorek
0065799965 Fix calculating the size of wxSpinCtrl numeric box under wxOSX
Since 8189ce89ed (Improve wxTextCtrl::DoGetSizeFromTextSize() in wxOSX, 2020-05-28) GetSizeFromTextSize() is fully functional under wxOSX
so we can revert 39d586421b (Don't call GetSizeFromText() under wxOSX, 2020-05-21) and use GetSizeFromText() in calculating text box size.

Closes #18766.
2020-06-29 23:23:27 +02:00
Artur Wieczorek
7c3d540c70 Validate input in generic wxSpinCtrl and wxSpinCtrlDouble
Use respective validator to control what is typed in the text field.

Closes #17882.
2020-06-11 15:47:12 +02:00
Vadim Zeitlin
27495c5484 Merge branch 'textctrl-getsizefromtextsize'
Improve wxTextCtrl and wxSpinCtrl sizing under macOS.

See https://github.com/wxWidgets/wxWidgets/pull/1861
2020-05-28 02:21:35 +02:00
Vadim Zeitlin
316bbd2189 Use the same code in generic wxSpinCtrl in all ports
Use Mac version for the other ports too, instead of the weird hardcoded
numbers introduced back in 40aa1a7e60 (Implement GetSizeFromTextSize()
for wxSpinCtrl., 2012-11-20) which don't make much sense, as they use
vertical text control size to determine the horizontal size of the spin
control.

Do not use the max of spin button height and text control height,
however, as we really want to have the same height as just a normal text
control.
2020-05-28 02:13:43 +02:00
valid-ptr
74a60516b9 Respect border styles for text part of generic wxSpinCtrlDouble
Specifying e.g. wxBORDER_NONE for wxSpinCtrlDouble should work, i.e.
remove the border from the wxTextCtrl used by it internally in the
generic version, so add wxBORDER_MASK to the list of styles respected by
this wxTextCtrl.

Closes https://github.com/wxWidgets/wxWidgets/pull/1864
2020-05-25 01:48:43 +02:00
Artur Wieczorek
39d586421b Don't call GetSizeFromText() under wxOSX
We cannot use GetSizeFromText() to calculate
numeric box size under wxOSX because this function
calls GetSizeFromTextSize() which is implemented
only in wxMSW and wxGTK.
2020-05-21 22:50:54 +02:00
Artur Wieczorek
6c64f4994e Fix calculation of the size of wxSpinCtrlDouble numeric box
Every time spin control precision, minimal or maximal value changes there
is necessary to adjust numeric box size to the new dimension of displayed
number.

See #18734.
2020-05-20 22:33:10 +02:00
wangqr
a06fb27f21 Implement wxSpinCtrl::GetSizeFromTextSize for wxOSX/Cocoa
The value is calculated based on size of wxTextCtrl
2020-05-19 00:24:31 -04:00
Artur Wieczorek
c963c60a0f Determine initial wxSpinCtrlDouble precision
For native wxGTK implementation default spin control precision is derived
from the precision of the increment value. Fot the sake of consistency the
same should be done in the generic implementation.

Closes #18764.
2020-05-18 18:52:41 +02:00
Vadim Zeitlin
eb3d8395c2 Rename wxSpinCtrl helper functions
Put them in wxSpinCtrlImpl namespace and remove "wxSpinCtrl" prefix from
the function names themselves, this was ugly.

No real changes.
2019-11-13 15:46:16 +01:00
Vadim Zeitlin
4444694043 Move private wxSpinCtrl helpers into a private header
Np real changes, just don't put these functions in the public
wx/spinctrl.h, they have nothing to do there.
2019-11-13 02:59:42 +01:00
Maarten Bent
32aabf7a41 Update font of wxSpinCtrl when DPI changes
Fix position of spin control in wxSpinCtrlDouble after DPI change
The old size of the control was used to determine the position. Use GetBestSize
instead, which will return the correct size.
2019-09-28 23:37:01 +02:00
tommash
5e24bd162c Don't send unnecessary events when wxSpinCtrlDouble loses focus
Only send the event when the control loses focus if its value has really
changed.

Closes https://github.com/wxWidgets/wxWidgets/pull/436
2017-04-29 13:50:45 +02:00
Lauri Nurmi
148e8971c7 Fix the integer value in events generated by generic wxSpinCtrl
This notably fixes the problem with changing the year using spin control
arrows under macOS, where this control is used as part of
wxGenericCalendarCtrl, as not having the correct value in the event object
resulted in bogus events with dates in the year 0 there.

Closes http://trac.wxwidgets.org/ticket/17193
2017-04-25 13:08:14 +02:00
Dimitri Schoolwerth
8f8d58d193 Use wx-prefixed macros throughout the repository.
Change {DECLARE,IMPLEMENT}_*CLASS and {DECLARE,BEGIN,END}_EVENT_TABLE
occurrences to use the wx-prefixed version of the macros.
2015-04-23 22:00:35 +04:00
Vadim Zeitlin
a2b0b8dbaa Handle updating tooltip text in wxCompositeWindow correctly.
While calling SetToolTip(wxToolTip*) overload already worked correctly for
wxCompositeWindow, using SetToolTip(wxString) did not if a tooltip already
existed, as it didn't use the virtual DoSetToolTip() in this case, resulting
in e.g. impossibility to update wxSpinCtrlDouble tooltip using this method.

Fix this by introducing DoSetToolTipText() virtual which is used by that
overload now and overriding it in wxCompositeWindow.

Also don't override DoSetToolTip() in wxSpinCtrlGenericBase any more, it is
not necessary as it's already done by its base class wxCompositeWindow.

Closes #16595.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78245 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-12-05 22:19:10 +00:00
Vadim Zeitlin
f9637c9626 Set the initial text value of wxSpinCtrlGeneric correctly.
The text control was left empty if the string value was not specified, but
it should use the numeric initial value instead in this case.

This notably affected wxSpinCtrlDouble under non-GTK platforms.

Closes #16621.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78124 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-11-11 01:02:08 +00:00
Vadim Zeitlin
c66c12aa63 Fix typo in a comment in wxSpinCtrlGenericBase::Create().
s/satisfy/specify/ to give some sense to this comment.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78020 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-10-14 19:23:27 +00:00
Stefan Csomor
f18d7097da adding wxFALLTHROUGH where until now we had comments, allows for code-analysis support
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76399 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-04-26 17:36:32 +00:00
Vadim Zeitlin
fe67b68d7a Focus generic spin control when its spin button is pressed.
This is consistent with the behaviour of the native control under MSW and GTK
and generally makes sense as otherwise focus could remain on a completely
unrelated control.

Closes #15885.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75645 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-01-19 13:15:38 +00:00
Vadim Zeitlin
b736d59eb5 Don't generate any events from wxSpinCtrl and wxSpinCtrlDouble methods.
After the changes of r53758 wxMSW didn't generate any wxEVT_TEXT events but
this was still the case for the generic version (and hence for
wxSpinCtrlDouble under MSW too) and wasn't documented.

Fix all versions to avoid sending events for programmatic actions, add unit
tests checking this behaviour and document it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74631 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-06 17:00:00 +00:00
Julian Smart
cc4d5638c6 Applied #15375 to stop event-sending in generic wxSpinCtrl ctor (eco)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-31 10:47:03 +00:00
Vadim Zeitlin
3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +00:00
Vadim Zeitlin
2aa54d47d6 Fix warnings about implicit float or double to int conversions in wxMSW.
Make the conversions explicit as these warnings are harmless.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74491 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-12 14:12:31 +00:00
Stefan Csomor
f66c0d497b fixes to pass tests
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74236 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-06-13 14:09:39 +00:00
Vadim Zeitlin
ce7fe42e84 Provide shorter synonyms for wxEVT_XXX constants.
Use the same short names as are used by the event table macros for the event
type constants themselves. This makes them much more comfortable to use, e.g.
Bind(wxEVT_BUTTON) compared to Bind(wxEVT_COMMAND_BUTTON_CLICKED).

The old long names are still kept for backwards compatibility and shouldn't be
removed as it doesn't really cost anything to continue providing them, but all
new event types should only use the short versions.

Closes #10661.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73850 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-04-25 10:11:03 +00:00
Vadim Zeitlin
29cc4cc9bc Use generic spin control itself as parent for its children.
This fixes a problem with using wxSpinCtrlGeneric in toolbars under wxOSX,
using the toolbar itself (i.e. the parent of the spin control) as parent for
the children didn't work there and no windows were visible at all.

Also use wxNavigationEnabled as base class of wxSpinCtrlGeneric to fix
keyboard navigation.

And override SetBackgroundColour() to set it for the text control part of the
spin control only.

Closes #15016.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73630 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-03-09 15:08:31 +00:00
Vadim Zeitlin
6ceeeafd56 Select the entire spin control contents when changing its value.
Selecting the entire contents makes it more convenient for the user to enter
the new value.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-28 23:56:16 +00:00
Vadim Zeitlin
40aa1a7e60 Implement GetSizeFromTextSize() for wxSpinCtrl.
Implement it for the native MSW and GTK versions and the generic one used in
the other ports and also for wxSpinCtrlDouble under MSW.

Also test this function in the spin page of the widgets sample.

Closes #14840.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72995 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-20 12:49:53 +00:00
Vadim Zeitlin
29604c85d6 Make wxSpinCtrlGenericBase a wxCompositeWindow.
This takes care of propagating methods setting fonts and colours to the
subwindows automatically, so that setting font for the generic wxSpinCtrl now
works, unlike before.

Closes #14839.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72994 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-20 12:49:29 +00:00
Vadim Zeitlin
a0e5592007 Revert all wxNOEXCEPT-related changes.
This reverts r72978, 72984, 72989 and 72992. Do not use wxNOEXCEPT for
wxTextCtrl dtor as this breaks compilation of any user-defined classes
inheriting from it unless they use wxNOEXCEPT as well and the benefits
(fixing a harmless warning for the niche ICC compiler) are just not worth
the compatibility breakage.

See #14826.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72993 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-20 12:49:03 +00:00
Vadim Zeitlin
1d9f819c69 Add wxNOEXCEPT and use it for std::streambuf-derived classes.
This fixes warnings from Intel compiler about overriding function using a
different exception specification than the base one and also incidentally
provides a handy macro that can be useful in other situations.

Closes #14826.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72978 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-17 23:56:23 +00:00
Vadim Zeitlin
319faba717 Generate text events in generic wxSpinCtrl itself.
The text events in a wxSpinCtrl should originate from the control itself but
they were just propagated upwards from wxTextCtrl embedded into it and hence
had wrong event object and event ID fields.

Fix this by making EVT_TEXT come from wxSpinCtrl itself, in addition to
EVT_TEXT_ENTER ones which we already forwarded like this.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72648 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-10-09 21:02:17 +00:00
Vadim Zeitlin
9ecc6bc2f1 Explicitly reject the use of wxTE_PASSWORD in generic wxSpinCtrl.
wxTE_PASSWORD has the same value as wxALIGN_CENTRE_VERTICAL which could be
implicitly specified as part of wxALIGN_CENTRE, but should never be used with
wxSpinCtrl, so explicitly filter it out when creating the associated
wxTextCtrl.

Closes #14452.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72416 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-08-30 20:25:24 +00:00