Commit Graph

68173 Commits

Author SHA1 Message Date
Vadim Zeitlin
b8c3c60316 Allow extending selection using Shift-Page Up/Down keys
Also make Page Up/Down themselves work consistently with the other
cursor movement keys and clear current selection if they move the
cursor.

Even though DoMoveCursorByPage() is simpler than DoMoveCursorByBlock(),
still factor out AdvanceByPage() for consistency with AdvanceByBlock()
and because it still makes the code more clear.
2020-04-13 01:23:25 +02:00
Vadim Zeitlin
bc3c6fea70 Fix Shift-Ctrl-arrows handling
Extending the selection with Ctrl-arrows is different from all the other
cases, as we need to combine both the selection anchor and the current
cell coordinates when doing it.

This means that we can't reuse the same PrepareForSelectionExpansion()
helper for this case, so this function is not useful finally and this
commit removes it entirely. It also replaces GetCurrentBlockCornerRow()
and GetCurrentBlockCornerCol() functions with GetExtensionAnchor() which
combines both of them.

Finally, it adds wxGridDirectionOperations::TryToAdvance() helper to
avoid repeating the IsAtBoundary() check which was previously part of
PrepareForSelectionExpansion() in multiple places.

And because the "extending" and normal parts of DoMoveCursorByBlock()
are so different now, it also factors out AdvanceByBlock() helper which
can be used to keep these parts well separate from each other instead of
intermixing them together.

With all these preparatory changes, it's finally possible to implement
the "extending selection by block" logic relatively easily, with the
bulk of this branch actually taken by comments explaining why do we have
to do what we do.

Add unit tests verifying that the functions used by Shift-Ctrl-arrow
work as expected.
2020-04-13 00:49:22 +02:00
Vadim Zeitlin
9b031be8d1 Fix fatal bug in wxGridSelection::DeselectBlock()
The selBlock reference could be used after the vector invalidation,
which resulted in using the wrong vector element at best and could
probably lead to a crash at worst.

Don't use it after invalidating the vector any longer.

This notably fixes a bug in row-or-column selection mode where the grid
wasn't updated visually after modifying its selection by deselecting a
single cell as soon as there were more than one selected row or column.
2020-04-12 18:57:59 +02:00
Vadim Zeitlin
4f7ed07f5e Don't use row/column headers for selection incompatible with mode
Mouse events in row/column headers should be just ignored when the
current selection mode disallows row/column selection.

This wasn't the case before, and while actually selecting the line
corresponding to the header was disallowed further down the call chain,
clicking it still unexpectedly cleared the existing selection and
dragging mouse in the header window selected the entire grid.

Fix this by just never entering the corresponding cursor mode in the
first place if it's incompatible with the current selection mode.
2020-04-12 18:39:34 +02:00
Vadim Zeitlin
4cabffb983 Fix test for "almost visible" row in GetFirstFullyVisibleRow()
The test didn't correspond to the comment and resulted in always
considering the first row not visible instead of the intended effect.
2020-04-12 18:29:26 +02:00
Vadim Zeitlin
287c1b1d11 Merge branch 'noexcept-event-tables'
Allow using noexcept handlers in event tables.

See https://github.com/wxWidgets/wxWidgets/pull/1788
2020-04-12 16:41:55 +02:00
Vadim Zeitlin
413fdfbfa4 Merge branch 'cmake-c++11-stl' of git://github.com/MaartenBent/wxWidgets
CMake: Improve STL checks, improve C++17/20 support.

See https://github.com/wxWidgets/wxWidgets/pull/1782

Closes #18718.
2020-04-12 16:37:57 +02:00
Vadim Zeitlin
ed077e17cf Restore wxAnimation::GetFrame() constness
This got lost, almost surely accidentally, in 706c8e8ad6 (Merge branch
'disable-native-animation', 2020-04-07), so just restore it now.

See https://github.com/wxWidgets/wxWidgets/pull/1768

Closes #18725.
2020-04-12 16:36:34 +02:00
Vadim Zeitlin
b98f439686 Also rename wxGridSelection::ExtendOrCreateCurrentBlock()
This function finally doesn't ever create a new block, except for the
trivial case when there is no current block, so rename it to a simpler
and more clear name.

No real changes.
2020-04-12 02:43:42 +02:00
Vadim Zeitlin
30eaa28de5 Rename wxGrid::GetSelectionRange() to GetSelectedBlocks()
This seems to be more consistent with the existing functions and doesn't
create ambiguity with a grid range.

Also rename wxGridSelectionRange to just wxGridBlocks as, in principle,
this class could be used for iterating over any blocks, not just the
selected ones.

No changes in functionality, this is just a renaming.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
b10755e553 Fix selection expansion in row/column-only selection modes
We should never adjust the fixed coordinate of the selection blocks in
this mode, so ensure we never end up with a partially selected line in
this case by preserving the -- correct by construction -- current block
coordinates in this direction.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
32bb5e9157 Fix Shift-click/arrow behaviour for column/row selection
Extend the current block to the entire line when the corresponding
header is Shift-clicked and, importantly, keep the full-line selection
when using Shift-arrows later to make the selection behave in the
expected way.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
c90bed6f8e Stop passing invalid coordinates to ExtendOrCreateCurrentBlock()
This made the logic of this function unnecessarily more complicated.
Instead, just fall back to the current cell coordinates in the only
place where this could happen before.

Doing this still preserves the correct behaviour of Shift-arrow
selection when entire rows/columns are selected and the current cell is
not the leftmost/topmost cell (due to scrolling), but the code is
simpler.

Remove the now always true condition check and assert that it's indeed
always true.

Note that the changes to gridsel.cpp in this commit are best viewed
ignoring whitespace changes.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
415bab551c Add wxGridSelection::SelectAll() and use it in wxGrid
The difference between calling SelectAll() and SelectBlock() with a
block covering the entire grid is that the former discards any
previously selected blocks, which become clearly redundant.

As a consequence, clicking on the grid corner 10 times in a row still
results in a selection with a single block, not 10 (identical) blocks.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
7d56146998 Add a comment for ClearSelection()
No real changes, just mention that this function does more than just
clearing the selection.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
1cb2ec06ee Fix off-by-1 bugs in wxGrid::GetFirstFullyVisible{Row,Column}()
These functions always returned the first partially visible line, not
the first fully visible one as intended because IsXXXShown() always
returned true when it applied to that line and we need to increment the
index first, before calling it -- even if this requires writing the loop
in a slightly uglier way.

This fixes bugs in commits 0920a1646b (Make wxGrid row selecting more
user friendly, 2020-03-04) and 89dd47edee (Make wxGrid column selecting
more user friendly, 2020-03-04).
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
b095e67ac3 Show more detailed information about selection in the grid sample
Show the selected cells/rows/columns/blocks instead of just showing
their number, as we now have an efficient (i.e. taking time proportional
to the number of selected blocks and not to the number of the individual
cells, rows or columns) way of doing this.

See #2576.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
f3ff89601f Slightly clarify ExtendOrCreateCurrentBlock() code
Don't use long-lived non-const "block" reference, this makes it
difficult to see that it's never changed until the very end of the
function, when it's updated.

Compare "blockStart" with "block" itself instead of comparing it with
"newBlock" which is initially its copy but gets modified later (however
these modifications don't affect the comparisons involving it).

Add a comment explaining why are we doing what we do here.
2020-04-12 02:38:37 +02:00
Vadim Zeitlin
7d0b352485 Add MSVS debug visualizers for wxGrid{Cell,Block}Coords
This makes debugging wxGrid code much more pleasant.
2020-04-12 02:38:37 +02:00
Paul Cornett
2197f9d10e Match caret color to foreground color
Fixes cursor visibility in text control with non-default foreground color
See #18722
2020-04-11 08:48:12 -07:00
Artur Wieczorek
802ee492d6 Revert "Add option to present wxButton with wxNO_BORDER style in widgets sample"
This reverts commit 17b9c98121.

This option to select border style is already implemented in the widgets sample.
2020-04-10 20:48:21 +02:00
Artur Wieczorek
c4f5fd3581 Move duplicated code to rescale the bitmap to the shared function 2020-04-10 20:45:34 +02:00
Artur Wieczorek
f95d6463d3 Fix sizing wxBitmapButton used as wxPropertyGrid editor button
Since wxBitmapButton doesn't rescale embedded bitmap we need
to do this on our own to display entire bitmap even the button
is small.

Closes #18715.
2020-04-10 20:33:16 +02:00
Artur Wieczorek
c7aeba7ed5 Fix displaying labels in small wxPropertyGrid editor buttons
We need to create wxButtons without internal border (with
wxBU_EXACTFIT flag) to display button labels properly even
if buttons are small.

See #18715.
2020-04-10 20:31:11 +02:00
Scott Talbert
e8be37da3d Add missing documentation for wxTreeCtrl GetSpacing / SetSpacing
Closes https://github.com/wxWidgets/wxWidgets/pull/1787
2020-04-10 17:20:24 +02:00
Maarten Bent
c96014db27 CMake: install toucan.png with widgets sample
It is used on the StaticBitmap page.
2020-04-10 00:51:17 +02:00
Maarten Bent
b20daa9fb0 Fix using deleted function in TempStringRef
Use the constructor directly instead of via a make function.
2020-04-10 00:51:17 +02:00
Maarten Bent
362fe04b0f Fix previous local declaration warning in wxRegKey sample 2020-04-10 00:51:17 +02:00
Maarten Bent
52ef7157e7 Define wxMEMBER_DEFAULT similarly to the existing wxOVERRIDE
Also define wxHAS_MEMBER_DEFAULT allowing to check if '= default' is supported
(compilers that define c++11 and VS2015 and later).
2020-04-10 00:51:14 +02:00
Artur Wieczorek
215a6ee238 Implement wxBU_EXACTFIT style for wxButton under wxGTK3
GtkButton without inner border is just as big as its contents.
2020-04-09 22:50:19 +02:00
Artur Wieczorek
17b9c98121 Add option to present wxButton with wxNO_BORDER style in widgets sample 2020-04-09 22:49:14 +02:00
Vadim Zeitlin
c3810da549 Allow using noexcept methods with event tables macros
Explicitly remove noexcept before static-casting the member function
pointer to the base class pointer type to avoid compilation error with
C++17.

Add a test checking that this does work now.

Closes #18721.
2020-04-09 22:36:30 +02:00
Vadim Zeitlin
f4f70102ea Define wxNOEXCEPT similarly to the existing wxOVERRIDE
Also define wxHAS_NOEXCEPT allowing to check if noexcept is supported.

This is not used in the library yet, but probably should be.
2020-04-09 22:36:30 +02:00
Paul Cornett
d3c60b9524 Update gtk-3.0.m4 from gtk+-3.24.17 2020-04-09 09:39:32 -07:00
Paul Cornett
02ce30687b Use C linkage for callbacks 2020-04-09 09:37:07 -07:00
PB
80d5c95f93 Fix XRC link in Hello World example
Closes https://github.com/wxWidgets/wxWidgets/pull/1786
2020-04-08 22:55:39 +02:00
PB
b7edb46c6a Make vcpkg MSW instructions more MSW-like
Make command line instructions for vcpgk more similar to those used
for example for nmake. The MS Windows command line does not use $ as
the command prompt and batch files are more commonly used then Unix
shell scripts.

Closes https://github.com/wxWidgets/wxWidgets/pull/1785
2020-04-08 22:53:28 +02:00
Maarten Bent
89185875a9 Enable wxMEMBER_DELETE for MSVC
It is available since Visual Studio 2015.
2020-04-08 22:13:53 +02:00
Maarten Bent
7da632b438 Fix building test.cpp with c++17
uncaught_exception() has been replaced with uncaught_exceptions().
2020-04-08 22:13:53 +02:00
Maarten Bent
b931c4b52c Fix wxArrayString build error when using c++17 with MSVC
MSVC does not set the correct __cplusplus version, so check MSVC compiler
version as well.
2020-04-08 22:13:53 +02:00
Maarten Bent
4122511e76 CMake: Add c++20 option, enable setting c++ version for MSVC
MSVC supports setting the CMAKE_CXX_STANDARD since VS2015 update 2.
2020-04-08 22:13:52 +02:00
Maarten Bent
3c4c4ee273 CMake: Only test stl for c++ versions before 11 2020-04-07 19:28:46 +02:00
Maarten Bent
5c2d186132 CMake: Add variable to indicate if c++11 or later is enabled
Use it in macOS checks.
2020-04-07 19:28:46 +02:00
Maarten Bent
c8209a5111 CMake: Set wxBUILD_CXX_STANDARD globally instead of only on targets
This way the tests in setup.cmake will use the correct c++ version.
2020-04-07 19:09:58 +02:00
Paul Cornett
fab2d067b5 Fix Oracle compiler name
aCC is/was the HP-UX compiler
2020-04-07 08:43:57 -07:00
Artur Wieczorek
435764ee61 Display toolkit information in wxPG sample About box
This may help in diagnostics.
2020-04-07 17:20:03 +02:00
Vadim Zeitlin
17c7469af3 Switch to manual method of LXC "detection"
Just define wxLXC environment variable for the builds using LXC on
Travis.
2020-04-07 17:15:04 +02:00
Vadim Zeitlin
82cfdd07c2 Disable tests of /proc/cpuinfo in LXC containers
It seems that we can't access /proc files when running inside such
containers, so don't try to do it.
2020-04-07 14:30:01 +02:00
Vadim Zeitlin
a776a9112e Use /proc/cpuinfo instead of /proc/diskstats in Linux file tests
The file /proc/diskstats doesn't seem to contain anything on some Travis
builds, so try using /proc/cpuinfo instead.
2020-04-07 13:41:21 +02:00
Scott Talbert
2005e50b27 Fix tests when run on s390x arch
Don't assume "mem" is always present in /sys/power/state, but hopefully
one of "mem" and "disk" is.
2020-04-07 13:39:34 +02:00