///////////////////////////////////////////////////////////////////////////// // Name: cpp/controls.cpp // Purpose: implementation for controls.h // Author: Mattia Barbon // Modified by: // Created: 29/10/2000 // RCS-ID: $Id: controls.cpp 3340 2012-09-12 03:21:07Z mdootson $ // Copyright: (c) 2000-2008 Mattia Barbon // Licence: This program is free software; you can redistribute it and/or // modify it under the same terms as Perl itself ///////////////////////////////////////////////////////////////////////////// #include "cpp/constants.h" // // Wx::ListCtrl implementation // WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliListCtrl, wxListCtrl ); double listctrl_constant( const char* name, int arg ) { // !package: Wx // !parser: sub { $_[0] =~ m<^\s*r\w*\(\s*(\w+)\s*\);\s*(?://(.*))?$> } // !tag: #define r( n ) \ if( strEQ( name, #n ) ) \ return n; WX_PL_CONSTANT_INIT(); switch( fl ) { case 'E': r( wxEVT_COMMAND_LIST_BEGIN_DRAG ); r( wxEVT_COMMAND_LIST_BEGIN_RDRAG ); r( wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT ); r( wxEVT_COMMAND_LIST_CACHE_HINT ); r( wxEVT_COMMAND_LIST_COL_RIGHT_CLICK ); r( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG ); r( wxEVT_COMMAND_LIST_COL_DRAGGING ); r( wxEVT_COMMAND_LIST_COL_END_DRAG ); r( wxEVT_COMMAND_LIST_END_LABEL_EDIT ); r( wxEVT_COMMAND_LIST_DELETE_ITEM ); r( wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS ); #if WXPERL_W_VERSION_LE( 2, 5, 2 ) r( wxEVT_COMMAND_LIST_SET_INFO ); r( wxEVT_COMMAND_LIST_GET_INFO ); #endif r( wxEVT_COMMAND_LIST_ITEM_SELECTED ); r( wxEVT_COMMAND_LIST_ITEM_DESELECTED ); r( wxEVT_COMMAND_LIST_KEY_DOWN ); r( wxEVT_COMMAND_LIST_INSERT_ITEM ); r( wxEVT_COMMAND_LIST_COL_CLICK ); r( wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK ); r( wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK ); r( wxEVT_COMMAND_LIST_ITEM_ACTIVATED ); r( wxEVT_COMMAND_LIST_ITEM_FOCUSED ); break; case 'I': r( wxIMAGE_LIST_NORMAL ); // listctrl r( wxIMAGE_LIST_SMALL ); // listctrl r( wxIMAGE_LIST_STATE ); // listctrl break; case 'L': r( wxLIST_AUTOSIZE ); // listctrl r( wxLIST_AUTOSIZE_USEHEADER ); // listctrl r( wxLIST_ALIGN_DEFAULT ); // listctrl r( wxLIST_ALIGN_LEFT ); // listctrl r( wxLIST_ALIGN_TOP ); // listctrl r( wxLIST_ALIGN_SNAP_TO_GRID ); // listctrl r( wxLIST_FIND_UP ); // listctrl r( wxLIST_FIND_DOWN ); // listctrl r( wxLIST_FIND_LEFT ); // listctrl r( wxLIST_FIND_RIGHT ); // listctrl r( wxLIST_FORMAT_LEFT ); // listctrl r( wxLIST_FORMAT_RIGHT ); // listctrl r( wxLIST_FORMAT_CENTRE ); // listctrl r( wxLIST_FORMAT_CENTER ); // listctrl r( wxLIST_HITTEST_ABOVE ); // listctrl r( wxLIST_HITTEST_BELOW ); // listctrl r( wxLIST_HITTEST_NOWHERE ); // listctrl r( wxLIST_HITTEST_ONITEMICON ); // listctrl r( wxLIST_HITTEST_ONITEMLABEL ); // listctrl r( wxLIST_HITTEST_ONITEMRIGHT ); // listctrl r( wxLIST_HITTEST_ONITEMSTATEICON );// listctrl r( wxLIST_HITTEST_TOLEFT ); // listctrl r( wxLIST_HITTEST_TORIGHT ); // listctrl r( wxLIST_HITTEST_ONITEM ); // listctrl #if WXPERL_W_VERSION_GE( 2, 7, 2 ) r( wxLIST_GETSUBITEMRECT_WHOLEITEM ); // listctrl #endif r( wxLIST_MASK_STATE ); // listctrl r( wxLIST_MASK_TEXT ); // listctrl r( wxLIST_MASK_IMAGE ); // listctrl r( wxLIST_MASK_DATA ); // listctrl r( wxLIST_MASK_WIDTH ); // listctrl r( wxLIST_MASK_FORMAT ); // listctrl r( wxLIST_NEXT_ABOVE ); // listctrl r( wxLIST_NEXT_ALL ); // listctrl r( wxLIST_NEXT_BELOW ); // listctrl r( wxLIST_NEXT_LEFT ); // listctrl r( wxLIST_NEXT_RIGHT ); // listctrl r( wxLIST_RECT_BOUNDS ); // listctrl r( wxLIST_RECT_ICON ); // listctrl r( wxLIST_RECT_LABEL ); // listctrl r( wxLIST_STATE_DONTCARE ); // listctrl r( wxLIST_STATE_DROPHILITED ); // listctrl r( wxLIST_STATE_FOCUSED ); // listctrl r( wxLIST_STATE_SELECTED ); // listctrl r( wxLIST_STATE_CUT ); // listctrl r( wxLIST_SET_ITEM ); // listctrl r( wxLC_VRULES ); // listctrl r( wxLC_HRULES ); // listctrl r( wxLC_ICON ); // listctrl r( wxLC_SMALL_ICON ); // listctrl r( wxLC_LIST ); // listctrl r( wxLC_REPORT ); // listctrl r( wxLC_ALIGN_TOP ); // listctrl r( wxLC_ALIGN_LEFT ); // listctrl r( wxLC_AUTOARRANGE ); // listctrl r( wxLC_USER_TEXT ); // listctrl r( wxLC_EDIT_LABELS ); // listctrl r( wxLC_NO_HEADER ); // listctrl r( wxLC_NO_SORT_HEADER ); // listctrl r( wxLC_SINGLE_SEL ); // listctrl r( wxLC_SORT_ASCENDING ); // listctrl r( wxLC_SORT_DESCENDING ); // listctrl r( wxLC_VIRTUAL ); // listctrl break; } #undef r WX_PL_CONSTANT_CLEANUP(); } wxPlConstants listctrl_module( &listctrl_constant ); wxString wxPliListCtrl::OnGetItemText( long item, long column ) const { dTHX; wxPliVirtualCallback* cb = (wxPliVirtualCallback*)&m_callback; if( wxPliVirtualCallback_FindCallback( aTHX_ cb, "OnGetItemText" ) ) { SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ cb, G_SCALAR, "ll", item, column ); wxString val; WXSTRING_INPUT( val, char*, ret ); SvREFCNT_dec( ret ); return val; } return wxListCtrl::OnGetItemText( item, column ); } int wxPliListCtrl::OnGetItemImage( long item ) const { dTHX; wxPliVirtualCallback* cb = (wxPliVirtualCallback*)&m_callback; if( wxPliVirtualCallback_FindCallback( aTHX_ cb, "OnGetItemImage" ) ) { SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ cb, G_SCALAR, "l", item ); int val = SvIV( ret ); SvREFCNT_dec( ret ); return val; } return wxListCtrl::OnGetItemImage( item ); } wxListItemAttr* wxPliListCtrl::OnGetItemAttr( long item ) const { dTHX; wxPliVirtualCallback* cb = (wxPliVirtualCallback*)&m_callback; if( wxPliVirtualCallback_FindCallback( aTHX_ cb, "OnGetItemAttr" ) ) { SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ cb, G_SCALAR, "l", item ); wxListItemAttr* val = (wxListItemAttr*) wxPli_sv_2_object( aTHX_ ret, "Wx::ListItemAttr" ); val = val ? new wxListItemAttr( *val ) : NULL; SvREFCNT_dec( ret ); return val; } return wxListCtrl::OnGetItemAttr( item ); } #if WXPERL_W_VERSION_GE( 2, 7, 2 ) DEF_V_CBACK_INT__LONG_LONG_const( wxPliListCtrl, wxListCtrl, OnGetItemColumnImage ); #endif // // Wx::ListView implementation // WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliListView, wxListView ); wxString wxPliListView::OnGetItemText( long item, long column ) const { dTHX; wxPliVirtualCallback* cb = (wxPliVirtualCallback*)&m_callback; if( wxPliVirtualCallback_FindCallback( aTHX_ cb, "OnGetItemText" ) ) { SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ cb, G_SCALAR, "ll", item, column ); wxString val; WXSTRING_INPUT( val, char*, ret ); SvREFCNT_dec( ret ); return val; } return wxListView::OnGetItemText( item, column ); } int wxPliListView::OnGetItemImage( long item ) const { dTHX; wxPliVirtualCallback* cb = (wxPliVirtualCallback*)&m_callback; if( wxPliVirtualCallback_FindCallback( aTHX_ cb, "OnGetItemImage" ) ) { SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ cb, G_SCALAR, "l", item ); int val = SvIV( ret ); SvREFCNT_dec( ret ); return val; } return wxListView::OnGetItemImage( item ); } wxListItemAttr* wxPliListView::OnGetItemAttr( long item ) const { dTHX; wxPliVirtualCallback* cb = (wxPliVirtualCallback*)&m_callback; if( wxPliVirtualCallback_FindCallback( aTHX_ cb, "OnGetItemAttr" ) ) { SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ cb, G_SCALAR, "l", item ); wxListItemAttr* val = (wxListItemAttr*) wxPli_sv_2_object( aTHX_ ret, "Wx::ListItemAttr" ); val = val ? new wxListItemAttr( *val ) : NULL; SvREFCNT_dec( ret ); return val; } return wxListView::OnGetItemAttr( item ); } #if WXPERL_W_VERSION_GE( 2, 7, 2 ) DEF_V_CBACK_INT__LONG_LONG_const( wxPliListView, wxListView, OnGetItemColumnImage ); #endif // // Wx::TreeCtrl implementation // WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliTreeCtrl, wxTreeCtrl ); double treectrl_constant( const char* name, int arg ) { // !package: Wx // !parser: sub { $_[0] =~ m<^\s*r\w*\(\s*(\w+)\s*\);\s*(?://(.*))?$> } // !tag: #define r( n ) \ if( strEQ( name, #n ) ) \ return n; WX_PL_CONSTANT_INIT(); switch( fl ) { case 'E': r( wxEVT_COMMAND_TREE_BEGIN_DRAG ); r( wxEVT_COMMAND_TREE_BEGIN_RDRAG ); r( wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT ); r( wxEVT_COMMAND_TREE_END_LABEL_EDIT ); r( wxEVT_COMMAND_TREE_DELETE_ITEM ); r( wxEVT_COMMAND_TREE_GET_INFO ); r( wxEVT_COMMAND_TREE_SET_INFO ); r( wxEVT_COMMAND_TREE_ITEM_EXPANDED ); r( wxEVT_COMMAND_TREE_ITEM_EXPANDING ); r( wxEVT_COMMAND_TREE_ITEM_COLLAPSED ); r( wxEVT_COMMAND_TREE_ITEM_COLLAPSING ); r( wxEVT_COMMAND_TREE_SEL_CHANGED ); r( wxEVT_COMMAND_TREE_SEL_CHANGING ); r( wxEVT_COMMAND_TREE_KEY_DOWN ); r( wxEVT_COMMAND_TREE_ITEM_ACTIVATED ); #if WXPERL_W_VERSION_GE( 2, 6, 0 ) r( wxEVT_COMMAND_TREE_ITEM_MENU ); #endif r( wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK ); r( wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK ); r( wxEVT_COMMAND_TREE_END_DRAG ); #if defined(__WXMSW__) r( wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK ); r( wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP ); #endif break; case 'T': r( wxTR_DEFAULT_STYLE ); // treectrl r( wxTR_EDIT_LABELS ); // treectrl #if WXPERL_W_VERSION_LT( 2, 9, 0 ) || WXWIN_COMPATIBILITY_2_8 r( wxTR_EXTENDED ); // treectrl #endif r( wxTR_FULL_ROW_HIGHLIGHT ); // treectrl r( wxTR_HAS_BUTTONS ); // treectrl r( wxTR_HAS_VARIABLE_ROW_HEIGHT ); // treectrl r( wxTR_HIDE_ROOT ); // treectrl r( wxTR_LINES_AT_ROOT ); // treectrl r( wxTR_MULTIPLE ); // treectrl r( wxTR_NO_BUTTONS ); // treectrl r( wxTR_NO_LINES ); // treectrl r( wxTR_ROW_LINES ); // treectrl r( wxTR_SINGLE ); // treectrl r( wxTR_TWIST_BUTTONS ); // treectrl r( wxTreeItemIcon_Normal ); // treectrl r( wxTreeItemIcon_Selected ); // treectrl r( wxTreeItemIcon_Expanded ); // treectrl r( wxTreeItemIcon_SelectedExpanded ); // treectrl r( wxTREE_HITTEST_ABOVE ); // treectrl r( wxTREE_HITTEST_BELOW ); // treectrl r( wxTREE_HITTEST_NOWHERE ); // treectrl r( wxTREE_HITTEST_ONITEMBUTTON ); // treectrl r( wxTREE_HITTEST_ONITEMICON ); // treectrl r( wxTREE_HITTEST_ONITEMINDENT ); // treectrl r( wxTREE_HITTEST_ONITEMLABEL ); // treectrl r( wxTREE_HITTEST_ONITEMRIGHT ); // treectrl r( wxTREE_HITTEST_ONITEMSTATEICON ); // treectrl r( wxTREE_HITTEST_TOLEFT ); // treectrl r( wxTREE_HITTEST_TORIGHT ); // treectrl r( wxTREE_HITTEST_ONITEMUPPERPART ); // treectrl r( wxTREE_HITTEST_ONITEMLOWERPART ); // treectrl r( wxTREE_HITTEST_ONITEM ); // treectrl break; default: break; } #undef r WX_PL_CONSTANT_CLEANUP(); } wxPlConstants tree_module( &treectrl_constant ); int wxPliTreeCtrl::OnCompareItems( const wxTreeItemId& item1, const wxTreeItemId& item2 ) { dTHX; if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "OnCompareItems" ) ) { SV* t1 = wxPli_non_object_2_sv( aTHX_ newSViv( 0 ), (void*)&item1, "Wx::TreeItemId" ); SV* t2 = wxPli_non_object_2_sv( aTHX_ newSViv( 0 ), (void*)&item2, "Wx::TreeItemId" ); SV* ret = wxPliVirtualCallback_CallCallback ( aTHX_ &m_callback, G_SCALAR, "SS", t1, t2 ); sv_setiv( SvRV( t1 ), 0 ); sv_setiv( SvRV( t2 ), 0 ); int val = SvIV( ret ); SvREFCNT_dec( ret ); SvREFCNT_dec( t1 ); SvREFCNT_dec( t2 ); return val; } else return wxTreeCtrl::OnCompareItems( item1, item2 ); } // Local variables: // // mode: c++ // // End: //