For some unknown reason wxGrid decided to store its scroll units in its own
m_scrollLine[XY] variables instead of just using the base wxScrollWindow class
m_[xy]ScrollPixelsPerLine ones. And, of course, the two could get out of sync
because wxGrid didn't update the base class version correctly.
Just don't duplicate these values at all and use the base class fields. This
makes the code simpler and also fixes changing the size of the scroll units.
Closes#12221.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64918 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
The changes (cosmetic renaming, no less) in r64436 broke unit tests checking
for wxComboBox event generation because the extra text updated events were not
suppressed correctly any longer because wrong {Enable,Disable}Events() were
called instead of the correct GTK{Enable,Disable}Events().
Fix and slightly improve the code by disabling the events in overridden
EnableTextChangedEvents() itself and reuse its code from GTK-specific event
enabling functions.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64916 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
In practice names are not often used so typically whenever you want to make a
window settings persistent you also need to set its name and the it's
convenient to let a single function do both tasks, so add an overload taking
the name string (this is a separate function instead of optional parameter to
avoid compilation errors if this is ever used with non-wxWindow-derived
objects which don't have SetName() method).
Also expand the documentation slightly and add @since tags.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64887 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Don't just return a hard-coded value but at least return something big
enough to show the largest item in the control in non-report mode.
This fixes the appearance of wxListbook which simply truncated its items
before if they didn't fit in 80 pixels horizontally.
Also switch to implementing DoGetBestClientSize() instead of DoGetBestSize()
as this method doesn't account for the control borders (it does account for
the scrollbars however).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64884 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
It seems to make at least as much sense to extend a wxSize by wxPoint than by
another wxSize (which doesn't make much size to me...) so add Inc/DecBy()
overloads doing this.
We might also add operator+=() overloads taking wxPoint for consistency but
for now don't add more operator overloads unnecessarily, let's wait if anybody
asks about this first.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64883 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Implement DoGetBorderSize() properly for wxGTK and use the difference between
the full window size and the client size for all the ports not implementing
this method. The latter is incorrect in the presence of the scrollbars but is
the best we can do in general.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64880 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
The changes of r58323 ("Restore keyboard navi") fixed the handling of cursor
keys in the generic wxListCtrl implementation but at the price of not sending
keyboard events for the cursor keys to wxListCtrl itself any more. This made
it impossible to override their handling in user code, something that used to
work in previous wx versions and still works in wxMSW.
Revert the changes of this revision now and fix the original code by simply
disabling the handling of the cursor keys in wxScrollHelperBase using a newly
added DisableKeyboardScrolling() method. This ensures that the keyboard events
for cursor keys are not used to scroll the window when they are forwarded to
wxListCtrl from wxListMainWindow.
The fix is conceptually ugly as it would be better to avoid the need for such
ad hoc functions as DisableKeyboardScrolling() but it is very simple and there
just doesn't seem to be any sane way to do it otherwise with wxScrollHelperBase.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64877 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
The parser used to understand only 'Z' specifier for size_t/ptrdiff_t,
which is non-standard libc5 extension. C99 defines 'z' for this purpose,
so use that. Compatibility with 'Z' is preserved.
Also support Visual C++'s non-standard 'I' modifier with the same
meaning.
Fixes#12192.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64800 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Instead of always declaraing that a C++ type corresponds to either
Arg_String or Arg_Pointer, make Arg_String superset of Arg_Pointer.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64797 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
char arguments weren't recognized as allowed variadic types. Unlike in
Unicode build, where chars are treated specially, they are primitive
types in ANSI build.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64790 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Implements checks similar to gcc's compile-time checks: verify that the
arguments are of correct types. This works partially at compile time
(e.g. passing an object as argument fails to compile) and partially at
runtime (assert if the specifier doesn't match the type).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Signed char is distict type (see 3.9.1 [basic.fundamental] part of the
standard), covering just char and unsigned char is not enough.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64709 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
The array was initialized and terminating NUL was only added in some
cases. In combination with strchr() calls, this would result it
incorrect calculations or even crashes.
Fixed by initializing the array to zeros. This is less error-prone than
fixing the few places where explicitly adding the terminating NUL was
missing.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64708 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Handling of activation in the generic implementation of standard renderers was
broken since r62589 which stopped calling their Activate() method. Restore it
by introducing a special WXOnActivate() replacing it (but clearly marked as
private and implementation-only) and calling it instead.
Closes#11460.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
The old code which simply used PBM_SETPOS after setting PBS_MARQUEE style
often worked but sometimes apparently didn't, so switch to the officially
sanctioned PBM_SETMARQUEE to implement this.
Also make wxGauge::SetDeterminateMode() and SetIndeterminateMode() methods
private as they are not part of the public class API.
Closes#11357.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64648 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Standardize on using sample.rc and sample icon in all the samples, it was
confusing that some of them used it and other didn't, without any apparent
logic.
Remove the now unnecessary icon files, including the dialogs sample icon which
seemed to be corrupted (this closes#11146).
Also replace multiple OS/2 resource files with a single one in the sample
directory. The OS/2 projects/makefiles would need to be updated to use them.
Remove dialogs sample icon.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64645 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Add wxDir::Make() and wxDir::Remove() for coherency with wxDir::Exists() and document them as simple aliases to wxFileName functions, just a bit more readable.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64632 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Add a wxFTP::Connect() overload taking a port number.
Also specify the default port (21) explicitly if resolving "ftp" service name
failed.
Closes#12145.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64621 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
We only handled events for wxID_FILE1..wxID_FILE9 range but there can be more
than 9 entries in the MRU list. Handle events for as many of them as there are
correctly.
This required adding a fallback handler for all menu events and checking if
the id of the menu item is in the MRU range inside it. Also move this to
wxDocManager itself from wxDocParentFrameAnyBase as it's common for all kinds
of frames anyhow.
Closes#12141.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Overloaded ctor taking wxArrayString didn't call Init() so the wxListBox
fields were not initialized. Fix it by adding the Init() call.
Closes#12138.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64548 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Implement compatibility aliases for non-prefixed macro names.
Require a final semicolon where possible.
Correct a recurring error in the docs: IMPLEMENT/DECLARE_CLASS are alias to the DYNAMIC macros, not to the ABSTRACT macros.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Remember the last item for which a listbox notification event had been sent
and don't send it again if the user clicks on an already selected item. This
is consistent with wxGTK behaviour and generally makes more sense: why should
we send an event if the selection didn't really change?
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64500 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Using LB_GETCARETINDEX doesn't work when the mouse is used to make selection
because it always returns the index of the last item, even if the mouse is
clicked below it, on an area without any listbox items. So use the mouse
position to find the item in this case but still use LB_GETCARETINDEX to find
the item when the keyboard is used.
This required adding a flag to wxListBox storing the kind of the last input
message that it received as there doesn't seem to be any way to determine how
the message was generated otherwise.
This code will be refactored/improved further in the next two commits.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64498 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
wxMSW wxListBox implementation contained the same code as the private
LBSendEvent() function in lboxcmn.cpp, so make this function a (protected)
member of wxListBoxBase and reuse it instead.
Also change its and CalcAndSendEvent() return type to bool to be able to
return whether the event was processed or not.
As the result of this refactoring, the "is selected" flag is now set correctly
for the selection events under MSW (it was always off before).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64496 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
After the recent changes to the event processing logic, forwarding an event
from one event handler to another one stopped working correctly because the
per-event "process here only" flag prevented it from following the event
handler chain after forwarding. This notably broke keyboard navigation in
wxComboCtrl under MSW in wx itself and probably quite a few of other things in
user code.
Fix this by replacing the boolean flag with a pointer to the handler to which
the processing of this event should be restricted. This allows the full
processing to still take place if an event is forwarded to another handler.
So wxEvent::ShouldProcessHereOnly() is now called ShouldProcessOnlyIn() and
takes a wxEvtHandler parameter.
This made appear a problem in wxScrollHelperEvtHandler code that was hidden by
the bug above: the events were still processed multiple times in it. To fix
this, also add wxEvent::DidntHonourProcessOnlyIn() and take it into account in
the base class code. Did I mention that wxScrollHelperEvtHandler must die?
Add another unit test checking that forwarding works correctly.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64464 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
wxString::FromCDouble() is needed inside wxWidgets itself to format numbers
independently of the current locale. FromDouble() was added for symmetry with
ToDouble/ToCDouble() functions.
Use std::locale for the implementation if available and manual wxLocale-based
fallback otherwise.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64449 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
We use these methods inside wxWidgets itself and so want to always have them,
even when wxUSE_XLOCALE==0. Provide replacement manual implementations for
this case.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64448 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Add to their documentation a note about the fact that the real operators are not class members but rather global functions.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64444 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Parse "style" attributes of the HTML tags and honour those of them that can be
mapped to the HTML 3 attributes.
Also add a handler for <span> tag.
Closes#10631.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64443 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This appears to be necessary under Mac where views are top level windows and
should do no harm elsewhere.
Also factor out the activation code in a new wxDocManager::ActivateDocument()
method to avoid duplicating it.
Closes#11417.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64440 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Printing of documents from wxDocManager always used default page setup data,
allow the user to configure it now.
Add wxDocManager::m_pageSetupDialogData and add a handler for wxID_PRINT_SETUP
command to it.
Closes#11394.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64439 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
When it is present, no-window widgets sometimes don't get expose events for
reasons I could not determine. And it is dubious that it improved scrolling
performance on modern hardware anyway, and almost certainly doesn't help now
that GTK+ is using "client side windows".
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64431 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Using WM_SETFONT seemed to work with rich edit controls but in fact it
doesn't, it only changes the font used by the control initially apparently but
it can be reset later.
Use EM_SETCHARFORMAT which is more reliable.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64394 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Yield for input event processing before updating the dialog instead of doing
it after this as the latter apparently doesn't always work.
Closes#10645.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64385 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
The assumption that SIZEOF_EVERYTHING_ELSE is defined when SIZEOF_INT is is
wrong. While wxWidgets configure does define all SIZEOF_XXX at once,
SIZEOF_INT could also be defined in some third party headers (e.g. Python.h)
and we still need to define the other ones.
In particular, doing this fixes the problem with SIZEOF_WCHAR_T not being
defined during wxPython build.
Closes#12013.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64373 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
Check for the transparency of the window background in MSWGetBgBrush() itself
and let MSWGetBgBrushForChild() just return the brush to be used.
This required adding a MSW-specific hack to wxPanel to allow inheriting
background of wxNotebook by its children which is slightly ugly but is exactly
what we need to do in this case and makes the rest of the code much simpler.
Also add a possibility to set the background of the page containing the
control being tested to the widgets sample to test for background inheritance.
This shows problems with wxSlider and wxRadioBox backgrounds but they're not
new with this patch.
Closes#12057.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64372 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775