m_dbImpl = NULL;
}
+class wxGenericListCtrlHook : public wxGenericListCtrl
+{
+public:
+ wxGenericListCtrlHook(wxListCtrl* parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxValidator& validator,
+ const wxString& name)
+ : wxGenericListCtrl(parent, id, pos, size, style, validator, name),
+ m_nativeListCtrl(parent)
+ {
+ }
+
+ virtual wxListItemAttr * OnGetItemAttr(long item) const
+ {
+ return m_nativeListCtrl->OnGetItemAttr(item);
+ }
+
+ virtual int OnGetItemImage(long item) const
+ {
+ return m_nativeListCtrl->OnGetItemImage(item);
+ }
+
+ virtual int OnGetItemColumnImage(long item, long column) const
+ {
+ return m_nativeListCtrl->OnGetItemColumnImage(item, column);
+ }
+
+ virtual wxString OnGetItemText(long item, long column) const
+ {
+ return m_nativeListCtrl->OnGetItemText(item, column);
+ }
+
+protected:
+ wxListCtrl* m_nativeListCtrl;
+
+};
+
bool wxListCtrl::Create(wxWindow *parent,
wxWindowID id,
const wxPoint& pos,
// for now, we'll always use the generic list control for ICON and LIST views,
// because they dynamically change the number of columns on resize.
// Also, allow the user to set it to use the list ctrl as well.
+ // Also, use generic list control in VIRTUAL mode.
if ( (wxSystemOptions::HasOption( wxMAC_ALWAYS_USE_GENERIC_LISTCTRL )
&& (wxSystemOptions::GetOptionInt( wxMAC_ALWAYS_USE_GENERIC_LISTCTRL ) == 1)) ||
- (style & wxLC_ICON) || (style & wxLC_SMALL_ICON) || (style & wxLC_LIST))
+ (style & wxLC_ICON) || (style & wxLC_SMALL_ICON) || (style & wxLC_LIST) || (style & wxLC_VIRTUAL))
{
m_macIsUserPane = true;
if ( !wxWindow::Create(parent, id, pos, size, style, name) )
return false;
- m_genericImpl = new wxGenericListCtrl(this, id, pos, size, style, validator, name);
+ m_genericImpl = new wxGenericListCtrlHook(this, id, pos, size, style, validator, name);
return true;
}
// to the entire window width; investigate why
// this is.
- //if (m_dbImpl){
- // m_dbImpl->SetColumnWidth(col+1, width);
- // return true;
- //}
+ if (m_dbImpl){
+ int mywidth = width;
+ if (width == wxLIST_AUTOSIZE || width == wxLIST_AUTOSIZE_USEHEADER)
+ mywidth = 150;
+
+ if (col == -1){
+ for (int column = 0; column < GetColumnCount(); column++){
+ m_dbImpl->SetColumnWidth(col, mywidth);
+ }
+ }
+ else{
+ m_dbImpl->SetColumnWidth(col, mywidth);
+ }
+ return true;
+ }
return false;
}
return;
}
- DeleteAllItems();
- if ( m_colCount > 0 )
+ if (m_dbImpl){
+ DeleteAllItems();
DeleteAllColumns();
+ }
}
wxTextCtrl* wxListCtrl::EditLabel(long item, wxClassInfo* textControlClass)
if (m_genericImpl)
return m_genericImpl->EditLabel(item, textControlClass);
+ if (m_dbImpl){
+ wxMacDataItem* id = m_dbImpl->GetItemFromLine(item);
+ verify_noerr( SetDataBrowserEditItem(m_dbImpl->GetControlRef(), (DataBrowserItemID)id, kMinColumnId) );
+ }
return NULL;
}
{
// TODO: generic impl. doesn't have this method - is it needed for us?
if (m_genericImpl)
- return false; // m_genericImpl->EndEditLabel(cancel);
+ return true; // m_genericImpl->EndEditLabel(cancel);
- bool b = true;
- return b;
+ if (m_dbImpl)
+ verify_noerr( SetDataBrowserEditItem(m_dbImpl->GetControlRef(), kDataBrowserNoItem, kMinColumnId) );
+ return true;
}
// Ensures this item is visible
delete this;
return;
}
+ else if ( message == kDataBrowserItemAdded )
+ {
+ // we don't issue events on adding, the item is not really stored in the list yet, so we
+ // avoid asserts by gettting out now
+ return ;
+ }
wxListCtrl *list = wxDynamicCast( owner->GetPeer() , wxListCtrl );
if ( list ){
wxListEvent event( wxEVT_COMMAND_LIST_ITEM_SELECTED, list->GetId() );
bool isSingle = list->GetWindowStyle() | wxLC_SINGLE_SEL;
+
event.SetEventObject( list );
event.m_itemIndex = owner->GetLineFromItem( this ) ;
if ( !list->IsVirtual() )
}
else
{
- options |= kDataBrowserAlwaysExtendSelection | kDataBrowserCmdTogglesSelection;
+ options |= kDataBrowserCmdTogglesSelection;
}
err = SetSelectionFlags( options );
if ( style & wxLC_LIST ){
InsertColumn(0, kDataBrowserIconAndTextType, wxEmptyString, -1, -1);
verify_noerr( AutoSizeColumns() );
- verify_noerr( SetHeaderButtonHeight( 0 ) );
}
+
+ if ( style & wxLC_LIST || style & wxLC_NO_HEADER )
+ verify_noerr( SetHeaderButtonHeight( 0 ) );
SetDataBrowserSortProperty( m_controlRef , kMinColumnId );
if ( style & wxLC_SORT_ASCENDING )
SetDataBrowserSortProperty( m_controlRef , kMinColumnId);
SetDataBrowserSortOrder( m_controlRef , kDataBrowserOrderIncreasing);
}
+
+ if ( style & wxLC_VRULES ){
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
+ verify_noerr( DataBrowserChangeAttributes(m_controlRef, kDataBrowserAttributeListViewDrawColumnDividers, kDataBrowserAttributeNone) );
+#endif
+ }
verify_noerr( AutoSizeColumns() );
verify_noerr( SetHiliteStyle(kDataBrowserTableViewFillHilite ) );