Commit Graph

435 Commits

Author SHA1 Message Date
Vadim Zeitlin
43e7536c87 Use correct mask for wxListCtrl column bitmaps in wxMSW
Do use LVCFMT_COL_HAS_IMAGES as it's the right flag to use according to
the documentation, unlike LVCFMT_IMAGE which seems to have worked only
accidentally.

See #18523.
2019-10-08 02:08:21 +02:00
oneeyeman1
0e0ea2ad84 Fix autosizing empty columns in wxMSW wxListCtrl
Autosizing the column by double clicking on its separator line reset it
to the default width when the control was empty, which isn't especially
useful.

Set the column size to fit its header instead.

Closes #9926.

See https://github.com/wxWidgets/wxWidgets/pull/1573
2019-10-08 01:33:08 +02:00
Maarten Bent
2b41ba2702 Apply review comments 2019-09-29 19:30:39 +02:00
Maarten Bent
b39c79cb4a Set column count to 1 in wxListCtrl with list view 2019-09-28 23:47:04 +02:00
Maarten Bent
2c6d132efe Resize wxListCtrl columns on DPI change
Fix font of custom attributes in wxListCtrl on DPI change.
2019-09-28 23:37:01 +02:00
Vadim Zeitlin
0bf223be44 Return empty rect for wxLIST_RECT_ICON for subitems without icons
It doesn't make sense to return anything else than an empty rectangle
when querying the icon rectangle of the sub-items that can't show any
icon.

Also document this behaviour, just in case it's not obvious.
2019-08-27 16:42:39 +02:00
Vadim Zeitlin
ba787af932 Replace a chain of "if"s with a "switch" in wxMSW wxListCtrl
Also return false from GetSubItemRect() if an invalid code is passed in,
instead of silently using wxLIST_RECT_BOUNDS instead of it.
2019-08-27 16:42:39 +02:00
Vadim Zeitlin
eba26cf35e Remove unneeded workaround for wxLIST_RECT_LABEL in wxMSW
The code added in https://github.com/wxWidgets/wxWidgets/pull/1461 is
completely unnecessary, using LVIR_LABEL works just fine.
2019-08-27 16:42:39 +02:00
oneeyeman1
5e7b515349 Avoid showing 2 tooltips simultaneously in wxMSW wxListCtrl
Only show the built-in control tooltips if we're not showing any custom
ones.

Closes https://github.com/wxWidgets/wxWidgets/pull/1500

Closes #10492.
2019-08-25 00:40:08 +02:00
Vadim Zeitlin
75134c752e Prettify the changes of the previous commit
Use switch over enum value instead of consecutive ifs.

Don't duplicate wxGetListCtrlSubItemRect() code, just call it instead.

See https://github.com/wxWidgets/wxWidgets/pull/1461
2019-08-06 00:05:06 +02:00
oneeyeman1
da524ebacb Fix retrieving the size of item label in native MSW wxListCtrl
Closes https://github.com/wxWidgets/wxWidgets/pull/1461

Closes #11355.
2019-08-06 00:01:07 +02:00
oneeyeman1
43c519e04f Add wxListCtrl::IsVisible()
Allow checking if the given item is (at least partially) visible on
screen.

Closes https://github.com/wxWidgets/wxWidgets/pull/1444

Closes #9949.
2019-08-05 13:46:15 +02:00
Vadim Zeitlin
6eac636576 Fix wxListCtrl column resizing with old comctl32.dll v5
The fix for visual artefacts when resizing columns with comctl32.dll v6
introduced them when using v5 of the DLL, so apply it only conditionally
now.

See #18032, #18441.
2019-07-17 02:59:51 +02:00
Vadim Zeitlin
c35075cbf0 Only use double buffering for MSW wxListCtrl when using themes
LVS_EX_DOUBLEBUFFER doesn't seem to work correctly with comctl32.dll v5,
and results in artefacts when the control is resized, so don't enable it
for it.

Closes #18441.
2019-07-17 02:59:50 +02:00
Maarten Bent
f74d756ca5 Use DPI Aware wxGetSystemMetrics
If no wxWindow is known, use wxTheApp->GetTopWindow().
Also use a wxWindow for all wxSystemSettings::GetMetric calls.
2019-07-15 00:00:18 +02:00
Vadim Zeitlin
b24d7e3ae4 Add a simple wxSetWindowFont() helper
This function is a just a very thin wrapper for WM_SETFONT, but it's
still better to have it rather than write casts to WPARAM and
MAKELPARAM() in several different places.

Note that this removes the assert for font validity from
wxWindow::SetFont() which really doesn't make much sense (and if we
wanted to have it, it would be better to have it for all ports in
wxWindowBase instead) and was never triggered since more than 20 years
of its existence.
2019-07-12 00:11:53 +02:00
Vadim Zeitlin
551dfea59a Fix wrong appearance of selected unfocused items in wxListCtrl
Items using wxSYS_COLOUR_BTNFACE (light grey in the default theme) for
their background are, for some reason, drawn using the colour of active
selection (blue) even when the control doesn't have focus.

This is wrong, but there just doesn't seem to be any way to prevent this
from happening when using the native drawing logic other than not using
wxSYS_COLOUR_BTNFACE for the background (modifying any colour channel by
1 is enough to work around the issue). So to draw the item ourselves in
this case and hope that it remains indistinguishable from the native
appearance when not using the system theme.

Closes #17988.
2019-05-26 23:20:21 +02:00
Vadim Zeitlin
d9684e1ceb Allow calling EnableSystemTheme(false) before creating the window
This is important as enabling the system theme results in changes to the
native ListView control appearance that are not undone later even if the
system theme is disabled. Notably, the item rectangle width is reduced
by 2 pixels when system theme is enabled and it's not increased to its
original value even when it's disabled later, resulting in gaps between
items through which the control background shows, for example. This also
makes items drawn using our own HandleItemPaint() slightly, but
noticeably, larger than the items using standard appearance, which looks
bad.

All these problems can be avoided if we skip enabling the system theme
in the first place if EnableSystemTheme(false) had been called before
creating the control, so support doing it like this and document that
this is the preferred way of disabling the system theme use.

Closes #17404, #18296.
2019-05-26 23:20:21 +02:00
Maarten Bent
c20060745f Support checkboxes in virtual wxListCtrl 2019-05-05 14:25:06 +02:00
Maarten Bent
ceaf2aa803 Move virtual stub functions to wxListCtrlBase 2019-05-05 14:23:44 +02:00
Maarten Bent
eb23d4735c Fix unannotated fall-through warnings 2018-11-25 21:29:37 +01:00
Vadim Zeitlin
a824ee092d Change the return type of wxListCtrl::SetItem() overload to bool
For some reason lost in the depths of time (but probably just a typo)
(but probably just a typo) (but probably just a typo) (but probably just
a typo), SetItem() overload taking the column index returned "long" and
not "bool", even though the actual return value was always "true" or
"false" (or even just always "true" in the case of the generic version).

Change it to return "bool" for consistency with the other overload and
because this just makes more sense and shouldn't break any existing code
due to the implicit conversions between bool and long.

Also document the return value meaning.

Closes #18153.
2018-06-28 00:39:31 +02:00
Vadim Zeitlin
610c164988 Always let DefWndProc() process column resizing in wxListCtrl
If we don't pass these messages to it, the selected items highlight
rectangle doesn't get updated when the columns are resized when using
visual themes, as could be seen in the listctrl sample.

While this did work if the wxEVT_LIST_COL_DRAGGING event handler skipped
the event, prefer to not require doing this as things work without this
call to wxEvent::Skip() under the other platforms and even MSW with
themes disabled.

Closes #18032.
2017-12-25 17:14:56 +01:00
Vadim Zeitlin
de7fa05245 Use wxDCXXXChanger classes instead of manual SetXXX() calls
No real changes, but the code is slightly shorter, maybe more clear and
will be easier to maintain (because more difficult to break
accidentally) in the future.
2017-12-18 17:00:44 +01:00
Vadim Zeitlin
aa7c99b275 Minor formatting fixes to recently changed wxListCtrl code
No real changes.
2017-12-18 16:58:59 +01:00
Vadim Zeitlin
8285be78f6 Merge branch 'msw-listctrl-painting' of https://github.com/discnl/wxWidgets into msw-listctrl-painting
Pull in the fixes from https://github.com/wxWidgets/wxWidgets/pull/278
2017-12-18 16:54:28 +01:00
Vadim Zeitlin
061e6f9a3c Fix flicker when resizing columns of report-mode MSW wxListCtrl
Just turn off background erasing to avoid having horrible flicker which
can be seen perfectly well simply by drag-resizing a column in a list
control with non-default background colour.

See https://github.com/wxWidgets/wxWidgets/pull/374
2017-12-10 17:47:21 +01:00
Vadim Zeitlin
406608b31c Remove obsolete wxCHECK_W32API_VERSION() checks
The latest of those checks tested for w32 API 3.3, which is older than
MinGW 3.4 released which is more than 13 years old, so we can safely
drop them (let alone checks for prehistoric 0.5 w32 API).

This incidentally fixes compilation errors due to the use of
wxCHECK_W32API_VERSION() in wx/msw/winundef.h which was now (since
the changes of 8c572c0a77) included before
this macro was defined.
2017-09-04 22:38:23 +02:00
Artur Wieczorek
3eb650972a Fix setting style flags in wxListCtrl (wxMSW)
UpdateStyle() function was introduced in edccf428 to synchronize in
SetWindowStyleFlag() style of the control with new style flags just stored
in m_windowStyle.
In 9a8d75f1, storing directly a new flags in m_windowStyle was replaced by
the call to parent's SetWindowStyleFlag().
Because call to parent's SetWindowStyleFlag() updates both m_windowStyle
and actual style of the control for common flags (WS_*, LVS_* flags),
synchronizing the control again with UpdateStyles() is pointless (since
this function does nothing in this context).
Only wxSCROLL style flags need special care because wxListCtrl doesn't
have these styles but the control itself may have them. In order
to preserve them in the call to SetWindowStyleFlag(), we can do the trick
and request the same new scroll style as the actual physical style.
UpdateStyles() is useless now and can be deprecated.

See #17059.
2017-05-19 00:01:47 +02:00
Catalin
a647b6da72 Fix switching to report view using SetWindowStyleFlag()
Closes #17059.
Closes https://github.com/wxWidgets/wxWidgets/pull/425.
2017-05-18 23:39:01 +02:00
Catalin
fb0a118230 Remove checks for the existence of LVCOLUMN::iImage
<https://msdn.microsoft.com/en-us/library/windows/desktop/bb774743(v=vs.85).aspx>
2017-05-14 22:35:39 +02:00
Catalin
2c7435a469 Fix wxListCtrl::HitTest() 2017-05-14 22:33:41 +02:00
Cătălin Răceanu
933e3e6fc5 Remove compile-time checks for always defined WM_XXX in wxMSW
The symbols in question are present at least since XP, and most of them since
Windows 2000, so remove preprocessor checks for them, they shouldn't be needed
when any remotely current compiler/SDK.
2017-02-22 23:17:56 +01:00
Dimitri Schoolwerth
374db28747 Fix wxMSW ListCtrl drawing of horizontal rules for new items
When adding a new item to a wxMSW ListCtrl that uses horizontal rules the
painting is horizontally clipped to the left of the control and the
rightmost column and the rule doesn't extend beyond that as it does when
doing a full repaint. Fix by refreshing the part to the right of the
rightmost column.

This also reverts 02c8973a57 which became
unnecessary now.

Also see #17158.
2016-05-04 11:24:51 +04:00
Dimitri Schoolwerth
d382107ea2 Slightly improve wxMSW ListCtrl drawing of vertical rules
Draw the vertical rules with Y coordinates related to the top and bottom
visible item which makes more sense than using the first and last item.
2016-05-04 11:24:51 +04:00
Dimitri Schoolwerth
761f05c649 Improve wxMSW ListCtrl drawing of horizontal rules
Appending an item in the listctrl sample results in two horizontal lines
drawn next to each other while they should be overlapping. Fix by drawing
only the bottom line of each item instead of skipping the first one
(should have been the top visible item since
6443de0263) and drawing the last one in the
list (should have been bottom visible item).
2016-05-04 11:24:51 +04:00
Dimitri Schoolwerth
8d661b6bf8 Clarify and change a drawing fix for wxMSW ListCtrl with wxLC_VRULES
Since 9eaba69276 a fix was added for leaving
behind trailing pixels when resizing a column in a ListCtrl that uses
wxLC_VRULES. This fix is only needed for ComCtl32.dll versions prior to
6.0. Make the fix conditional and explain the (rare) conditions under
which the problem still occurs.

Also see #747.
2016-05-04 11:24:51 +04:00
Vadim Zeitlin
70b64b8c53 Merge branch 'rename-listctrl-checkbox-methods' of https://github.com/discnl/wxWidgets
Use consistent case for wxListCtrl::{Has,Enable}CheckBoxes() methods.

Closes https://github.com/wxWidgets/wxWidgets/pull/275
2016-04-23 18:53:41 +02:00
Dimitri Schoolwerth
602111f2b3 Rename wxListCtrl::HasCheckboxes() and EnableCheckboxes()
Rename them to HasCheckBoxes and EnableCheckBoxes for consistency with
wxCheckBox naming.

See also PR https://github.com/wxWidgets/wxWidgets/pull/153
2016-04-21 15:25:10 +00:00
Vadim Zeitlin
5388c7a72e Add wxListCtrl::SetHeaderAttr()
This method can be used to change the list view header appearance.

Add the method declaration, documentation, show it in the sample and implement
it for wxMSW (only, for now).
2016-04-17 18:26:13 +02:00
Vadim Zeitlin
246ae58c19 Replace wxTreeItemAttr and wxListItemAttr with wxItemAttr
The two existing structs were completely identical, just replace them with a
single wxItemAttr.

Notice that wxDataViewItemAttr is not quite the same, although pretty similar,
so it remains separate for now. It would be nice to combine it with this one
too in the future, e.g. to make it simpler to make items bold in a wxListCtrl.
2016-04-16 19:04:52 +02:00
Vadim Zeitlin
c592363e95 Remove obsolete test for HDN_BEGINTRACKA being defined
It's used without this test in src/msw/headerctrl.cpp, so we can be sure using
this symbol doesn't create any problems any more.
2016-04-16 17:03:54 +02:00
Dimitri Schoolwerth
c6570770bc Fix signed/unsigned mismatch warning
When not using MinGW the value NO_ITEM (-1) is passed as an item count to
the macro ListView_ApproximateViewRect. While Windows/Platform SDKs since
at least 6.0a cast the argument to (only!) a WPARAM, older ones such as
5.0 don't which results in a signed/unsigned mismatch (converting -1 to
WPARAM, which is an UINT_PTR).

Fix by always casting to WPARAM when using ListView_ApproximateViewRect.
Also use a value of -1 again instead of NO_ITEM because the latter is a
bit of a misnomer in this case (as it refers to the total number of items
in the control) and to reduce the risk of the cast being removed in the
future as well as differentiate it from the MinGW headers issue.

Note that this is a different casting problem than with other ListView_XXX
macros such as ListView_GetNextItem (which cast to int first and then to
WPARAM) where casting to WPARAM results in a warning with WIN64 builds.
That situation does not apply to ListView_ApproximateViewRect.

Regression since 00c63cfd3a.
2016-04-13 23:58:04 +00:00
Artur Wieczorek
43fe885eb7 Fixed displaying text labels after assigning wxImageList to wxListCtrl.
For ComCtl32 prior to 6.0 all text labels in wxListCtrl need to be re-assigned when new wxImageList is set in order to position them correctly within the control.
2016-02-16 21:39:33 +01:00
Vadim Zeitlin
9a0333496b Fix harmless warning in wxMSW wxListCtrl checkboxes code
Explicitly suppress a gcc warning about the value returned by
ListView_SetExtendedListViewStyleEx() being not used.

See https://github.com/wxWidgets/wxWidgets/pull/153
2016-02-06 19:13:35 +01:00
Vadim Zeitlin
3631a2d142 Merge branch listctrl-with-checkboxes
Add support for native checkboxes to wxMSW wxListCtrl.

Closes https://github.com/wxWidgets/wxWidgets/pull/153
2016-02-06 01:20:01 +01:00
Vadim Zeitlin
a358c898c5 Don't account for the border size twice in wxMSW wxListCtrl
When computing the best control width from height, or vice versa, don't
account for the border size twice, once inside ListView_ApproximateViewRect()
and another time in our own code in the base class.

As we can't change the former, just compensate what the latter does by
returning the best width or height of the client part of the control, as
indicated by the DoGetBestClient{Height,Width}() methods names.
2016-01-25 02:51:06 +01:00
Maarten Bent
c57c281c44 Silenced unused value warning in 64bit builds with GCC. 2016-01-15 20:55:32 +01:00
Maarten Bent
418a96d44c Support native MSW check-boxes in wxListCtrl. 2016-01-15 20:55:32 +01:00
Vadim Zeitlin
1c5c28411b Don't check for LVS_EX_LABELTIP being defined, it always is
This constant is defined in wx/msw/missing.h if it's not defined, so testing
for whether it's defined here doesn't make sense -- and the comment about not
using it under Windows CE which is not supported any more anyhow doesn't make
sense neither.
2015-10-25 13:37:41 +01:00