listview has LVS_EX_FULLROWSELECT style when supported
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1754 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -10,18 +10,18 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma implementation "listctrl.h"
|
#pragma implementation "listctrl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// For compilers that support precompilation, includes "wx.h".
|
// For compilers that support precompilation, includes "wx.h".
|
||||||
#include "wx/wxprec.h"
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#pragma hdrstop
|
#pragma hdrstop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/wx.h"
|
#include "wx/wx.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__WIN95__)
|
#if defined(__WIN95__)
|
||||||
@@ -32,25 +32,24 @@
|
|||||||
#include "wx/msw/private.h"
|
#include "wx/msw/private.h"
|
||||||
|
|
||||||
#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__)
|
#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__)
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __TWIN32__
|
#ifndef __TWIN32__
|
||||||
#ifdef __GNUWIN32__
|
#ifdef __GNUWIN32__
|
||||||
#include "wx/msw/gnuwin32/extra.h"
|
#include "wx/msw/gnuwin32/extra.h"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void wxConvertToMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_ITEM& tvItem);
|
static void wxConvertToMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_ITEM& tvItem);
|
||||||
static void wxConvertFromMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_ITEM& tvItem, HWND getFullInfo = 0);
|
static void wxConvertFromMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_ITEM& tvItem, HWND getFullInfo = 0);
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
#if !USE_SHARED_LIBRARY
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl)
|
IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
|
||||||
|
#endif // USE_SHARED_LIBRARY
|
||||||
|
|
||||||
#endif
|
wxListCtrl::wxListCtrl()
|
||||||
|
|
||||||
wxListCtrl::wxListCtrl(void)
|
|
||||||
{
|
{
|
||||||
m_imageListNormal = NULL;
|
m_imageListNormal = NULL;
|
||||||
m_imageListSmall = NULL;
|
m_imageListSmall = NULL;
|
||||||
@@ -60,8 +59,13 @@ wxListCtrl::wxListCtrl(void)
|
|||||||
m_textCtrl = NULL;
|
m_textCtrl = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size,
|
bool wxListCtrl::Create(wxWindow *parent,
|
||||||
long style, const wxValidator& validator, const wxString& name)
|
wxWindowID id,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxValidator& validator,
|
||||||
|
const wxString& name)
|
||||||
{
|
{
|
||||||
m_imageListNormal = NULL;
|
m_imageListNormal = NULL;
|
||||||
m_imageListSmall = NULL;
|
m_imageListSmall = NULL;
|
||||||
@@ -125,6 +129,16 @@ bool wxListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, con
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for comctl32.dll v 4.70+ we want to have this attribute because it's
|
||||||
|
// prettier (and also because wxGTK does it like this)
|
||||||
|
#ifdef ListView_SetExtendedListViewStyle
|
||||||
|
if ( wstyle & LVS_REPORT )
|
||||||
|
{
|
||||||
|
ListView_SetExtendedListViewStyle((HWND)GetHWND(),
|
||||||
|
LVS_EX_FULLROWSELECT);
|
||||||
|
}
|
||||||
|
#endif // ListView_SetExtendedListViewStyle
|
||||||
|
|
||||||
wxSystemSettings settings;
|
wxSystemSettings settings;
|
||||||
SetBackgroundColour(settings.GetSystemColour(wxSYS_COLOUR_WINDOW));
|
SetBackgroundColour(settings.GetSystemColour(wxSYS_COLOUR_WINDOW));
|
||||||
SetForegroundColour(parent->GetForegroundColour());
|
SetForegroundColour(parent->GetForegroundColour());
|
||||||
@@ -136,7 +150,7 @@ bool wxListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, con
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxListCtrl::~wxListCtrl(void)
|
wxListCtrl::~wxListCtrl()
|
||||||
{
|
{
|
||||||
if (m_textCtrl)
|
if (m_textCtrl)
|
||||||
{
|
{
|
||||||
@@ -189,14 +203,14 @@ void wxListCtrl::SetWindowStyleFlag(long flag)
|
|||||||
RecreateWindow();
|
RecreateWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxListCtrl::RecreateWindow(void)
|
void wxListCtrl::RecreateWindow()
|
||||||
{
|
{
|
||||||
if ( GetHWND() )
|
if ( GetHWND() )
|
||||||
{
|
{
|
||||||
long oldStyle = 0;
|
long oldStyle = 0;
|
||||||
long style = ConvertToMSWStyle(oldStyle, m_windowStyle);
|
long style = ConvertToMSWStyle(oldStyle, m_windowStyle);
|
||||||
style |= m_baseStyle;
|
style |= m_baseStyle;
|
||||||
// ::SetWindowLong((HWND) GetHWND(), GWL_STYLE, style);
|
// ::SetWindowLong((HWND) GetHWND(), GWL_STYLE, style);
|
||||||
|
|
||||||
// The following recreation of the window appears to be necessary
|
// The following recreation of the window appears to be necessary
|
||||||
// because SetWindowLong doesn't seem to do it.
|
// because SetWindowLong doesn't seem to do it.
|
||||||
@@ -226,6 +240,14 @@ void wxListCtrl::RecreateWindow(void)
|
|||||||
m_hWnd = (WXHWND) hWndListControl;
|
m_hWnd = (WXHWND) hWndListControl;
|
||||||
SubclassWin((WXHWND) m_hWnd);
|
SubclassWin((WXHWND) m_hWnd);
|
||||||
|
|
||||||
|
#ifdef ListView_SetExtendedListViewStyle
|
||||||
|
if ( style & LVS_REPORT )
|
||||||
|
{
|
||||||
|
ListView_SetExtendedListViewStyle((HWND)GetHWND(),
|
||||||
|
LVS_EX_FULLROWSELECT);
|
||||||
|
}
|
||||||
|
#endif // ListView_SetExtendedListViewStyle
|
||||||
|
|
||||||
if ( m_imageListNormal )
|
if ( m_imageListNormal )
|
||||||
SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
|
SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
|
||||||
if ( m_imageListSmall )
|
if ( m_imageListSmall )
|
||||||
@@ -280,6 +302,7 @@ long wxListCtrl::ConvertToMSWStyle(long& oldStyle, long style) const
|
|||||||
oldStyle -= LVS_LIST;
|
oldStyle -= LVS_LIST;
|
||||||
if ( (oldStyle & LVS_TYPEMASK) == LVS_SMALLICON )
|
if ( (oldStyle & LVS_TYPEMASK) == LVS_SMALLICON )
|
||||||
oldStyle -= LVS_SMALLICON;
|
oldStyle -= LVS_SMALLICON;
|
||||||
|
|
||||||
wstyle |= LVS_REPORT;
|
wstyle |= LVS_REPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,10 +324,10 @@ long wxListCtrl::ConvertToMSWStyle(long& oldStyle, long style) const
|
|||||||
wstyle |= LVS_AUTOARRANGE;
|
wstyle |= LVS_AUTOARRANGE;
|
||||||
|
|
||||||
// Apparently, no such style (documentation wrong?)
|
// Apparently, no such style (documentation wrong?)
|
||||||
/*
|
/*
|
||||||
if ( style & wxLC_BUTTON )
|
if ( style & wxLC_BUTTON )
|
||||||
wstyle |= LVS_BUTTON;
|
wstyle |= LVS_BUTTON;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( style & wxLC_NO_SORT_HEADER )
|
if ( style & wxLC_NO_SORT_HEADER )
|
||||||
wstyle |= LVS_NOSORTHEADER;
|
wstyle |= LVS_NOSORTHEADER;
|
||||||
@@ -361,7 +384,7 @@ bool wxListCtrl::GetColumn(int col, wxListItem& item) const
|
|||||||
|
|
||||||
bool success = (ListView_GetColumn((HWND) GetHWND(), col, & lvCol) != 0);
|
bool success = (ListView_GetColumn((HWND) GetHWND(), col, & lvCol) != 0);
|
||||||
|
|
||||||
// item.m_subItem = lvCol.iSubItem;
|
// item.m_subItem = lvCol.iSubItem;
|
||||||
item.m_width = lvCol.cx;
|
item.m_width = lvCol.cx;
|
||||||
|
|
||||||
if ( (item.m_mask & wxLIST_MASK_TEXT) && lvCol.pszText )
|
if ( (item.m_mask & wxLIST_MASK_TEXT) && lvCol.pszText )
|
||||||
@@ -806,13 +829,13 @@ bool wxListCtrl::DeleteItem(long item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Deletes all items
|
// Deletes all items
|
||||||
bool wxListCtrl::DeleteAllItems(void)
|
bool wxListCtrl::DeleteAllItems()
|
||||||
{
|
{
|
||||||
return (ListView_DeleteAllItems((HWND) GetHWND()) != 0);
|
return (ListView_DeleteAllItems((HWND) GetHWND()) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deletes all items
|
// Deletes all items
|
||||||
bool wxListCtrl::DeleteAllColumns(void)
|
bool wxListCtrl::DeleteAllColumns()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for ( i = 0; i < m_colCount; i++)
|
for ( i = 0; i < m_colCount; i++)
|
||||||
@@ -834,7 +857,7 @@ bool wxListCtrl::DeleteColumn(int col)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clears items, and columns if there are any.
|
// Clears items, and columns if there are any.
|
||||||
void wxListCtrl::ClearAll(void)
|
void wxListCtrl::ClearAll()
|
||||||
{
|
{
|
||||||
DeleteAllItems();
|
DeleteAllItems();
|
||||||
if ( m_colCount > 0 )
|
if ( m_colCount > 0 )
|
||||||
@@ -867,7 +890,7 @@ bool wxListCtrl::EndEditLabel(bool cancel)
|
|||||||
{
|
{
|
||||||
wxFAIL;
|
wxFAIL;
|
||||||
|
|
||||||
/* I don't know how to implement this: there's no such macro as ListView_EndEditLabelNow.
|
/* I don't know how to implement this: there's no such macro as ListView_EndEditLabelNow.
|
||||||
* ???
|
* ???
|
||||||
bool success = (ListView_EndEditLabelNow((HWND) GetHWND(), cancel) != 0);
|
bool success = (ListView_EndEditLabelNow((HWND) GetHWND(), cancel) != 0);
|
||||||
|
|
||||||
@@ -879,7 +902,7 @@ bool wxListCtrl::EndEditLabel(bool cancel)
|
|||||||
m_textCtrl = NULL;
|
m_textCtrl = NULL;
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
*/
|
*/
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1160,7 +1183,7 @@ bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
case LVN_DELETEALLITEMS:
|
case LVN_DELETEALLITEMS:
|
||||||
{
|
{
|
||||||
eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
|
eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
|
||||||
// NM_LISTVIEW* hdr = (NM_LISTVIEW*)lParam;
|
// NM_LISTVIEW* hdr = (NM_LISTVIEW*)lParam;
|
||||||
event.m_itemIndex = -1;
|
event.m_itemIndex = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1182,7 +1205,7 @@ bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
}
|
}
|
||||||
case LVN_GETDISPINFO:
|
case LVN_GETDISPINFO:
|
||||||
{
|
{
|
||||||
// return FALSE;
|
// return FALSE;
|
||||||
// TODO: some text buffering here, I think
|
// TODO: some text buffering here, I think
|
||||||
// TODO: API for getting Windows to retrieve values
|
// TODO: API for getting Windows to retrieve values
|
||||||
// on demand.
|
// on demand.
|
||||||
@@ -1254,7 +1277,7 @@ bool wxListCtrl::MSWNotify(WXWPARAM wParam, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
info->item.cchTextMax = strlen(info->item.pszText) + 1;
|
info->item.cchTextMax = strlen(info->item.pszText) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// wxConvertToMSWListItem(this, event.m_item, info->item);
|
// wxConvertToMSWListItem(this, event.m_item, info->item);
|
||||||
}
|
}
|
||||||
|
|
||||||
*result = !event.IsAllowed();
|
*result = !event.IsAllowed();
|
||||||
@@ -1276,7 +1299,7 @@ char *wxListCtrl::AddPool(const wxString& str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// List item structure
|
// List item structure
|
||||||
wxListItem::wxListItem(void)
|
wxListItem::wxListItem()
|
||||||
{
|
{
|
||||||
m_mask = 0;
|
m_mask = 0;
|
||||||
m_itemId = 0;
|
m_itemId = 0;
|
||||||
@@ -1313,7 +1336,7 @@ static void wxConvertFromMSWListItem(const wxListCtrl *ctrl, wxListItem& info, L
|
|||||||
lvItem.pszText = new char[513];
|
lvItem.pszText = new char[513];
|
||||||
lvItem.cchTextMax = 512;
|
lvItem.cchTextMax = 512;
|
||||||
}
|
}
|
||||||
// lvItem.mask |= TVIF_HANDLE | TVIF_STATE | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM ;
|
// lvItem.mask |= TVIF_HANDLE | TVIF_STATE | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM ;
|
||||||
lvItem.mask |= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM ;
|
lvItem.mask |= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM ;
|
||||||
::SendMessage(getFullInfo, LVM_GETITEM, 0, (LPARAM)& lvItem) ;
|
::SendMessage(getFullInfo, LVM_GETITEM, 0, (LPARAM)& lvItem) ;
|
||||||
}
|
}
|
||||||
@@ -1438,7 +1461,7 @@ static void wxConvertToMSWListItem(const wxListCtrl *ctrl, wxListItem& info, LV_
|
|||||||
IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxNotifyEvent)
|
IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxNotifyEvent)
|
||||||
|
|
||||||
wxListEvent::wxListEvent(wxEventType commandType, int id)
|
wxListEvent::wxListEvent(wxEventType commandType, int id)
|
||||||
: wxNotifyEvent(commandType, id)
|
: wxNotifyEvent(commandType, id)
|
||||||
{
|
{
|
||||||
m_code = 0;
|
m_code = 0;
|
||||||
m_itemIndex = 0;
|
m_itemIndex = 0;
|
||||||
|
Reference in New Issue
Block a user