X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0d236fd0faa89b4c3da04facdd50817f03207093..9dc6871e8fc67ab4db88857af993d398e8edf387:/src/msw/listctrl.cpp diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index 6d6aac182d..68149b52c3 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "listctrl.h" #pragma implementation "listctrlbase.h" #endif @@ -213,7 +213,72 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_FOCUSED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_CACHE_HINT) +#if wxUSE_EXTENDED_RTTI +WX_DEFINE_FLAGS( wxListCtrlStyle ) + +WX_BEGIN_FLAGS( wxListCtrlStyle ) + // new style border flags, we put them first to + // use them for streaming out + WX_FLAGS_MEMBER(wxBORDER_SIMPLE) + WX_FLAGS_MEMBER(wxBORDER_SUNKEN) + WX_FLAGS_MEMBER(wxBORDER_DOUBLE) + WX_FLAGS_MEMBER(wxBORDER_RAISED) + WX_FLAGS_MEMBER(wxBORDER_STATIC) + WX_FLAGS_MEMBER(wxBORDER_NONE) + + // old style border flags + WX_FLAGS_MEMBER(wxSIMPLE_BORDER) + WX_FLAGS_MEMBER(wxSUNKEN_BORDER) + WX_FLAGS_MEMBER(wxDOUBLE_BORDER) + WX_FLAGS_MEMBER(wxRAISED_BORDER) + WX_FLAGS_MEMBER(wxSTATIC_BORDER) + WX_FLAGS_MEMBER(wxNO_BORDER) + + // standard window styles + WX_FLAGS_MEMBER(wxTAB_TRAVERSAL) + WX_FLAGS_MEMBER(wxCLIP_CHILDREN) + WX_FLAGS_MEMBER(wxTRANSPARENT_WINDOW) + WX_FLAGS_MEMBER(wxWANTS_CHARS) + WX_FLAGS_MEMBER(wxNO_FULL_REPAINT_ON_RESIZE) + WX_FLAGS_MEMBER(wxALWAYS_SHOW_SB ) + WX_FLAGS_MEMBER(wxVSCROLL) + WX_FLAGS_MEMBER(wxHSCROLL) + + WX_FLAGS_MEMBER(wxLC_LIST) + WX_FLAGS_MEMBER(wxLC_REPORT) + WX_FLAGS_MEMBER(wxLC_ICON) + WX_FLAGS_MEMBER(wxLC_SMALL_ICON) + WX_FLAGS_MEMBER(wxLC_ALIGN_TOP) + WX_FLAGS_MEMBER(wxLC_ALIGN_LEFT) + WX_FLAGS_MEMBER(wxLC_AUTOARRANGE) + WX_FLAGS_MEMBER(wxLC_USER_TEXT) + WX_FLAGS_MEMBER(wxLC_EDIT_LABELS) + WX_FLAGS_MEMBER(wxLC_NO_HEADER) + WX_FLAGS_MEMBER(wxLC_SINGLE_SEL) + WX_FLAGS_MEMBER(wxLC_SORT_ASCENDING) + WX_FLAGS_MEMBER(wxLC_SORT_DESCENDING) + WX_FLAGS_MEMBER(wxLC_VIRTUAL) + +WX_END_FLAGS( wxListCtrlStyle ) + +IMPLEMENT_DYNAMIC_CLASS_XTI(wxListCtrl, wxControl,"wx/listctrl.h") + +WX_BEGIN_PROPERTIES_TABLE(wxListCtrl) + WX_PROPERTY_FLAGS( WindowStyle , wxListCtrlStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style +WX_END_PROPERTIES_TABLE() + +WX_BEGIN_HANDLERS_TABLE(wxListCtrl) +WX_END_HANDLERS_TABLE() + +WX_CONSTRUCTOR_5( wxListCtrl , wxWindow* , Parent , wxWindowID , Id , wxPoint , Position , wxSize , Size , long , WindowStyle ) + +/* + TODO : Expose more information of a list's layout etc. via appropriate objects (à la NotebookPageInfo) +*/ +#else IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl) +#endif + IMPLEMENT_DYNAMIC_CLASS(wxListView, wxListCtrl) IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject) @@ -1499,34 +1564,18 @@ long wxListCtrl::InsertColumn(long col, wxListItem& item) lvCol.cx = 80; } - // when we insert a column which can contain an image, we must specify this - // flag right now as doing it later in SetColumn() has no effect - // - // we use LVCFMT_BITMAP_ON_RIGHT by default because without it there is no - // way to dynamically set/clear the bitmap as the column without a bitmap - // on the left looks ugly (there is a hole) - // - // unfortunately with my version of comctl32.dll (5.80), the left column - // image is always on the left and it seems that it's a "feature" - I - // didn't find any way to work around it in any case - if ( lvCol.mask & LVCF_IMAGE ) - { - lvCol.mask |= LVCF_FMT; - lvCol.fmt |= LVCFMT_BITMAP_ON_RIGHT; - } - - bool success = ListView_InsertColumn(GetHwnd(), col, &lvCol) != -1; - if ( success ) + long n = ListView_InsertColumn(GetHwnd(), col, &lvCol); + if ( n != -1 ) { m_colCount++; } - else + else // failed to insert? { wxLogDebug(wxT("Failed to insert the column '%s' into listview!"), lvCol.pszText); } - return success; + return n; } long wxListCtrl::InsertColumn(long col, @@ -2066,6 +2115,7 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) break; #ifdef NM_CUSTOMDRAW + case NM_CUSTOMDRAW: *result = OnCustomDraw(lParam); return TRUE; @@ -2645,7 +2695,17 @@ static void wxConvertToMSWListCol(int WXUNUSED(col), const wxListItem& item, { if ( wxTheApp->GetComCtl32Version() >= 470 ) { - lvCol.mask |= LVCF_IMAGE; + lvCol.mask |= LVCF_IMAGE | LVCF_FMT; + + // we use LVCFMT_BITMAP_ON_RIGHT because thei mages on the right + // seem to be generally nicer than on the left and the generic + // version only draws them on the right (we don't have a flag to + // specify the image location anyhow) + // + // we don't use LVCFMT_COL_HAS_IMAGES because it doesn't seem to + // make any difference in my tests -- but maybe we should? + lvCol.fmt |= LVCFMT_BITMAP_ON_RIGHT | LVCFMT_IMAGE; + lvCol.iImage = item.m_image; } //else: it doesn't support item images anyhow @@ -2654,3 +2714,4 @@ static void wxConvertToMSWListCol(int WXUNUSED(col), const wxListItem& item, } #endif // wxUSE_LISTCTRL +