{
public:
wxMacListCtrlItem();
-
+
virtual void Notification(wxMacDataItemBrowserControl *owner ,
DataBrowserItemNotification message,
DataBrowserItemDataRef itemData ) const;
-
+
virtual void SetColumnInfo( unsigned int column, wxListItem* item );
virtual wxListItem* GetColumnInfo( unsigned int column );
virtual bool HasColumnInfo( unsigned int column );
-
+
virtual void SetColumnTextValue( unsigned int column, const wxString& text );
- virtual const wxString& GetColumnTextValue( unsigned int column );
-
+ virtual const wxString& GetColumnTextValue( unsigned int column );
+
virtual int GetColumnImageValue( unsigned int column );
virtual void SetColumnImageValue( unsigned int column, int imageIndex );
-
+
virtual OSStatus GetSetData( wxMacDataItemBrowserControl *owner ,
DataBrowserPropertyID property,
DataBrowserItemDataRef itemData,
bool changeValue );
-
+
virtual ~wxMacListCtrlItem();
protected:
wxListItemList m_rowItems;
// create a list item (can be a subclass of wxMacListBoxItem)
virtual wxMacListCtrlItem* CreateItem();
-
+
virtual void MacInsertItem( unsigned int n, wxListItem* item );
virtual void MacSetColumnInfo( unsigned int row, unsigned int column, wxListItem* item );
virtual void MacGetColumnInfo( unsigned int row, unsigned int column, wxListItem& item );
virtual void UpdateState(wxMacDataItem* dataItem, wxListItem* item);
-
+
protected:
wxClientDataType m_clientDataItemsType;
};
-// TODO: This gives errors, find out why.
+// TODO: This gives errors, find out why.
//BEGIN_EVENT_TABLE(wxListCtrl, wxControl)
// EVT_PAINT(wxListCtrl::OnPaint)
//END_EVENT_TABLE()
m_imageListNormal = NULL;
m_imageListSmall = NULL;
m_imageListState = NULL;
-
+
// keep track of if we created our own image lists, or if they were assigned
// to us.
m_ownsImageListNormal = m_ownsImageListSmall = m_ownsImageListState = false;
long style,
const wxValidator& validator,
const wxString& name)
- : wxGenericListCtrl(parent, id, pos, size, style, validator, name),
+ : wxGenericListCtrl(parent, id, pos, size, style, validator, name),
m_nativeListCtrl(parent)
{
}
// 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 )
+ 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_VIRTUAL))
{
m_macIsUserPane = true;
-
+
if ( !wxWindow::Create(parent, id, pos, size, style, name) )
return false;
m_genericImpl = new wxGenericListCtrlHook(this, id, pos, size, style, validator, name);
return true;
}
-
+
else
{
m_macIsUserPane = false;
-
+
if ( !wxWindow::Create(parent, id, pos, size, style, name) )
return false;
m_dbImpl = new wxMacDataBrowserListCtrlControl( this, pos, size, style );
MacPostControlCreate( pos, size );
}
-
+
return true;
}
wxListCtrl::~wxListCtrl()
-{
+{
if (m_ownsImageListNormal)
delete m_imageListNormal;
if (m_ownsImageListSmall)
{
m_windowStyle = flag;
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->SetWindowStyleFlag(flag);
}
}
}
-void wxListCtrl::DoSetSize( int x, int y, int width, int height, int sizeFlags ){
+void wxListCtrl::DoSetSize( int x, int y, int width, int height, int sizeFlags )
+{
wxControl::DoSetSize(x, y, width, height, sizeFlags);
-
+
if (m_genericImpl)
m_genericImpl->SetSize(x, y, width, height, sizeFlags);
}
return m_genericImpl->GetColumn(col, item);
bool success = true;
-
+
if ( item.m_mask & wxLIST_MASK_TEXT )
{
}
{
if (m_genericImpl)
return m_genericImpl->SetColumn(col, item);
-
+
return false;
}
{
if (m_genericImpl)
return m_genericImpl->GetColumnCount();
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
UInt32 count;
m_dbImpl->GetColumnCount(&count);
return count;
{
if (m_genericImpl)
return m_genericImpl->GetColumnWidth(col);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
return m_dbImpl->GetColumnWidth(col);
}
{
if (m_genericImpl)
return m_genericImpl->SetColumnWidth(col, width);
-
+
// TODO: This is setting the width of the first column
// to the entire window width; investigate why
// this is.
-
- if (m_dbImpl){
+
+ 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++){
+
+ if (col == -1)
+ {
+ for (int column = 0; column < GetColumnCount(); column++)
+ {
m_dbImpl->SetColumnWidth(col, mywidth);
}
}
}
return true;
}
-
+
return false;
}
{
if (m_genericImpl)
return m_genericImpl->GetCountPerPage();
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
}
-
+
return 1;
}
{
if (m_genericImpl)
return m_genericImpl->GetEditControl();
-
+
return NULL;
}
{
if (m_genericImpl)
return m_genericImpl->GetItem(info);
-
+
if (m_dbImpl)
m_dbImpl->MacGetColumnInfo(info.m_itemId, info.m_col, info);
bool success = true;
{
if (m_genericImpl)
return m_genericImpl->GetItemState(item, stateMask);
-
+
wxListItem info;
info.m_mask = wxLIST_MASK_STATE;
{
if (m_genericImpl)
return m_genericImpl->GetItemText(item);
-
+
wxListItem info;
info.m_mask = wxLIST_MASK_TEXT;
{
if (m_genericImpl)
return m_genericImpl->SetItemText(item, str);
-
+
wxListItem info;
info.m_mask = wxLIST_MASK_TEXT;
{
if (m_genericImpl)
return m_genericImpl->SetItemData(item, data);
-
+
wxListItem info;
info.m_mask = wxLIST_MASK_DATA;
{
wxASSERT_MSG( !HasFlag(wxLC_REPORT | wxLC_LIST),
_T("wxListCtrl::GetViewRect() only works in icon mode") );
-
+
if (m_genericImpl)
return m_genericImpl->GetViewRect();
-
+
wxRect rect;
return rect;
}
if (m_genericImpl)
return m_genericImpl->GetItemRect(item, rect, code);
- return true;
+ return true;
}
// Gets the item position
if (m_dbImpl)
return m_dbImpl->MacGetCount();
-
+
return m_count;
}
void wxListCtrl::SetItemTextColour( long item, const wxColour &col )
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->SetItemTextColour(item, col);
}
-
+
wxListItem info;
info.m_itemId = item;
info.SetTextColour( col );
{
if (m_genericImpl)
return m_genericImpl->GetItemTextColour(item);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
wxListItem info;
if (GetItem(info))
return info.GetTextColour();
void wxListCtrl::SetItemBackgroundColour( long item, const wxColour &col )
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->SetItemBackgroundColour(item, col);
return;
}
-
+
wxListItem info;
info.m_itemId = item;
info.SetBackgroundColour( col );
{
if (m_genericImpl)
return m_genericImpl->GetItemBackgroundColour(item);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
wxListItem info;
if (GetItem(info))
return info.GetBackgroundColour();
void wxListCtrl::SetItemFont( long item, const wxFont &f )
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->SetItemFont(item, f);
return;
}
{
if (m_genericImpl)
return m_genericImpl->GetItemFont(item);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
wxListItem info;
if (GetItem(info))
return info.GetFont();
// TODO: we need owner drawn list items to customize text color.
if (m_dbImpl)
return *wxBLACK;
+
+ return wxNullColour;
}
// Sets the text colour of the listview
void wxListCtrl::SetTextColour(const wxColour& col)
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->SetTextColour(col);
return;
}
-
+
// TODO: if we add owner-drawn item support for DataBrowser,
// consider supporting this property
}
{
if (m_genericImpl)
return m_genericImpl->GetTopItem();
-
+
return 0;
}
void wxListCtrl::SetImageList(wxImageList *imageList, int which)
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->SetImageList(imageList, which);
return;
}
- int flags = 0;
if ( which == wxIMAGE_LIST_NORMAL )
{
if (m_ownsImageListNormal) delete m_imageListNormal;
void wxListCtrl::AssignImageList(wxImageList *imageList, int which)
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->AssignImageList(imageList, which);
return;
}
{
if (m_genericImpl)
return m_genericImpl->DeleteItem(item);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
m_dbImpl->MacDelete(item);
wxListEvent event( wxEVT_COMMAND_LIST_DELETE_ITEM, GetId() );
event.SetEventObject( this );
event.m_itemIndex = item;
- GetEventHandler()->ProcessEvent( event );
-
+ GetEventHandler()->ProcessEvent( event );
+
}
return true;
}
{
if (m_genericImpl)
return m_genericImpl->DeleteAllItems();
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
m_dbImpl->MacClear();
wxListEvent event( wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, GetId() );
event.SetEventObject( this );
- GetEventHandler()->ProcessEvent( event );
+ GetEventHandler()->ProcessEvent( event );
}
return true;
}
{
if (m_genericImpl)
return m_genericImpl->DeleteAllColumns();
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
UInt32 cols;
m_dbImpl->GetColumnCount(&cols);
- for (UInt32 col = 0; col < cols; col++){
- DeleteColumn(col);
- }
+ for (UInt32 col = 0; col < cols; col++)
+ {
+ DeleteColumn(col);
+ }
}
-
+
return true;
}
{
if (m_genericImpl)
return m_genericImpl->DeleteColumn(col);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
OSStatus err = m_dbImpl->RemoveColumn(col);
return err == noErr;
}
-
+
return true;
}
// Clears items, and columns if there are any.
void wxListCtrl::ClearAll()
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->ClearAll();
return;
}
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
DeleteAllItems();
DeleteAllColumns();
}
{
if (m_genericImpl)
return m_genericImpl->EditLabel(item, textControlClass);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
wxMacDataItem* id = m_dbImpl->GetItemFromLine(item);
verify_noerr( SetDataBrowserEditItem(m_dbImpl->GetControlRef(), (DataBrowserItemID)id, kMinColumnId) );
}
// TODO: generic impl. doesn't have this method - is it needed for us?
if (m_genericImpl)
return true; // m_genericImpl->EndEditLabel(cancel);
-
+
if (m_dbImpl)
verify_noerr( SetDataBrowserEditItem(m_dbImpl->GetControlRef(), kDataBrowserNoItem, kMinColumnId) );
return true;
{
if (m_genericImpl)
return m_genericImpl->EnsureVisible(item);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
wxMacDataItem* dataItem = m_dbImpl->GetItemFromLine(item);
m_dbImpl->RevealItem(dataItem, kDataBrowserRevealWithoutSelecting);
}
+
+ return false;
}
// Find an item whose label matches this string, starting from the item after 'start'
{
if (m_genericImpl)
return m_genericImpl->FindItem(start, data);
-
+
long idx = start + 1;
long count = GetItemCount();
if (m_genericImpl)
return m_genericImpl->InsertItem(info);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
int count = GetItemCount();
if (info.m_itemId > count)
info.m_itemId = count;
-
+
m_dbImpl->MacInsertItem(info.m_itemId, &info );
wxListEvent event( wxEVT_COMMAND_LIST_INSERT_ITEM, GetId() );
event.SetEventObject( this );
event.m_itemIndex = info.m_itemId;
- GetEventHandler()->ProcessEvent( event );
+ GetEventHandler()->ProcessEvent( event );
}
return info.m_itemId;
{
if (m_genericImpl)
return m_genericImpl->InsertItem(index, imageIndex);
-
+
wxListItem info;
info.m_image = imageIndex;
info.m_mask = wxLIST_MASK_IMAGE;
{
if (m_genericImpl)
return m_genericImpl->InsertItem(index, label, imageIndex);
-
+
wxListItem info;
info.m_image = imageIndex;
info.m_text = label;
{
if (m_genericImpl)
return m_genericImpl->InsertColumn(col, item);
-
- if (m_dbImpl){
- if ( !(item.GetMask() & wxLIST_MASK_WIDTH) )
+
+ if (m_dbImpl)
+ {
+ if ( !(item.GetMask() & wxLIST_MASK_WIDTH) )
item.SetWidth(150);
-
+
DataBrowserPropertyType type = kDataBrowserTextType;
wxImageList* imageList = GetImageList(wxIMAGE_LIST_SMALL);
- if (imageList && imageList->GetImageCount() > 0){
+ if (imageList && imageList->GetImageCount() > 0)
+ {
wxBitmap bmp = imageList->GetBitmap(0);
if (bmp.Ok())
type = kDataBrowserIconAndTextType;
}
-
+
fprintf(stderr, "Flush is %d\n", item.GetAlign());
SInt16 just = teFlushDefault;
- if (item.GetMask() & wxLIST_MASK_FORMAT){
+ if (item.GetMask() & wxLIST_MASK_FORMAT)
+ {
if (item.GetAlign() == wxLIST_FORMAT_LEFT)
just = teFlushLeft;
else if (item.GetAlign() == wxLIST_FORMAT_CENTER)
just = teFlushRight;
}
m_dbImpl->InsertColumn(col, type, item.GetText(), just, item.GetWidth());
-
+
if (GetWindowStyleFlag() & wxLC_EDIT_LABELS)
{
DataBrowserTableViewColumnID id;
verify_noerr(m_dbImpl->SetPropertyFlags(id, flags));
}
}
-
+
return col;
}
{
if (m_genericImpl)
return m_genericImpl->ScrollList(dx, dy);
-
- if (m_dbImpl){
+
+ if (m_dbImpl)
+ {
m_dbImpl->SetScrollPosition(dx, dy);
}
return true;
{
if (m_genericImpl)
return m_genericImpl->SortItems(fn, data);
-
+
return true;
}
{
wxASSERT_MSG( IsVirtual(), _T("this is for virtual controls only") );
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->SetItemCount(count);
return;
}
-
+
m_count = count;
}
void wxListCtrl::RefreshItem(long item)
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->RefreshItem(item);
return;
}
-
+
wxRect rect;
GetItemRect(item, rect);
RefreshRect(rect);
void wxListCtrl::RefreshItems(long itemFrom, long itemTo)
{
- if (m_genericImpl){
+ if (m_genericImpl)
+ {
m_genericImpl->RefreshItems(itemFrom, itemTo);
return;
}
}
-// wxMac internal data structures
+// wxMac internal data structures
wxMacListCtrlItem::~wxMacListCtrlItem()
{
}
wxListCtrl *list = wxDynamicCast( owner->GetPeer() , wxListCtrl );
- if ( list ){
+ if ( list )
+ {
bool trigger = false;
-
+
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() )
{
lb->MacGetColumnInfo(event.m_itemIndex,0,event.m_item);
}
-
+
switch (message)
{
case kDataBrowserItemDeselected:
event.SetEventType( wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT ) ;
trigger = true ;
break ;
-
+
case kDataBrowserEditStopped :
// TODO probably trigger only upon the value store callback, because
// here IIRC we cannot veto
err = SetSelectionFlags( options );
verify_noerr( err );
- if ( style & wxLC_LIST ){
+ if ( style & wxLC_LIST )
+ {
InsertColumn(0, kDataBrowserIconAndTextType, wxEmptyString, -1, -1);
verify_noerr( AutoSizeColumns() );
}
-
+
if ( style & wxLC_LIST || style & wxLC_NO_HEADER )
verify_noerr( SetHeaderButtonHeight( 0 ) );
SetDataBrowserSortProperty( m_controlRef , kMinColumnId);
SetDataBrowserSortOrder( m_controlRef , kDataBrowserOrderIncreasing);
}
-
- if ( style & wxLC_VRULES ){
+
+ 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
}
void wxMacDataBrowserListCtrlControl::MacSetColumnInfo( unsigned int row, unsigned int column, wxListItem* item )
-{
+{
wxMacDataItem* dataItem = GetItemFromLine(row);
- if (item){
+ if (item)
+ {
wxMacListCtrlItem* listItem = dynamic_cast<wxMacListCtrlItem*>(dataItem);
listItem->SetColumnInfo( column, item );
UpdateState(dataItem, item);
}
}
-// apply changes that need to happen immediately, rather than when the
+// apply changes that need to happen immediately, rather than when the
// databrowser control fires a callback.
void wxMacDataBrowserListCtrlControl::UpdateState(wxMacDataItem* dataItem, wxListItem* listItem)
{
bool isSelected = IsItemSelected( dataItem );
bool isSelectedState = (listItem->GetState() == wxLIST_STATE_SELECTED);
- // toggle the selection state if wxListInfo state and actual state don't match.
- if ( isSelected != isSelectedState ){
+ // toggle the selection state if wxListInfo state and actual state don't match.
+ if ( isSelected != isSelectedState )
+ {
DataBrowserSetOption options = kDataBrowserItemsAdd;
if (!isSelectedState)
options = kDataBrowserItemsRemove;
- fprintf(stderr, "state = %d, db options = %d\n", isSelectedState, options);
SetSelectedItem(dataItem, options);
}
// TODO: Set column width if item width > than current column width
}
void wxMacDataBrowserListCtrlControl::MacGetColumnInfo( unsigned int row, unsigned int column, wxListItem& item )
-{
+{
wxMacDataItem* dataItem = GetItemFromLine(row);
// CS should this guard against dataItem = 0 ? , as item is not a pointer if (item) is not appropriate
- //if (item)
+ //if (item)
{
wxMacListCtrlItem* listItem = dynamic_cast<wxMacListCtrlItem*>(dataItem);
wxListItem* oldItem = listItem->GetColumnInfo( column );
-
+
long mask = item.GetMask();
if ( !mask )
// by default, get everything for backwards compatibility
item.SetTextColour(oldItem->GetTextColour());
item.SetBackgroundColour(oldItem->GetBackgroundColour());
- item.SetFont(oldItem->GetFont());
+ item.SetFont(oldItem->GetFont());
}
}
void wxMacListCtrlItem::SetColumnTextValue( unsigned int column, const wxString& text )
{
GetColumnInfo(column)->SetText(text);
-
+
// for compatibility with superclass APIs
if ( column == 0 )
SetLabel(text);
void wxMacListCtrlItem::SetColumnInfo( unsigned int column, wxListItem* item )
{
- if ( column >= m_rowItems.GetCount() ){
+ if ( column >= m_rowItems.GetCount() )
+ {
wxListItem* listItem = new wxListItem(*item);
//listItem->SetAlign(item->GetAlign());
//listItem->SetBackgroundColour(item->GetBackgroundColour());
//listItem->SetId(GetOrder());
//listItem->SetImage(item->GetImage());
//listItem->SetMask(item->GetMask());
-
- //listItem->SetText(item->GetText());
+
+ //listItem->SetText(item->GetText());
m_rowItems.Append( listItem );
}
else{
DataBrowserItemDataRef itemData,
bool changeValue )
{
-
+
OSStatus err = errDataBrowserPropertyNotSupported;
wxListCtrl* list = wxDynamicCast( owner->GetPeer() , wxListCtrl );
if ( !changeValue )
}
break ;
default :
- if ( property >= kMinColumnId ){
+ if ( property >= kMinColumnId )
+ {
short listColumn = property - kMinColumnId;
-
- if (HasColumnInfo(listColumn)){
+
+ if (HasColumnInfo(listColumn))
+ {
wxListItem* item = GetColumnInfo(listColumn);
wxMacCFStringHolder cfStr;
-
- if (item->GetText()){
+
+ if (item->GetText())
+ {
cfStr.Assign( item->GetText(), wxLocale::GetSystemEncoding() );
err = ::SetDataBrowserItemDataText( itemData, cfStr );
err = noErr;
}
-
+
int imgIndex = item->GetImage();
- if ( (item->GetMask() & wxLIST_MASK_IMAGE) ){
+ if ( (item->GetMask() & wxLIST_MASK_IMAGE) )
+ {
wxImageList* imageList = list->GetImageList(wxIMAGE_LIST_SMALL);
- if (imageList && imageList->GetImageCount() > 0){
+ if (imageList && imageList->GetImageCount() > 0)
+ {
wxBitmap bmp = imageList->GetBitmap(imgIndex);
IconRef icon = bmp.GetBitmapData()->GetIconRef();
::SetDataBrowserItemDataIcon(itemData, icon);
}
}
-
+
}
}
break ;
switch (property)
{
default:
- if ( property >= kMinColumnId ){
+ if ( property >= kMinColumnId )
+ {
short listColumn = property - kMinColumnId;
-
- if (HasColumnInfo(listColumn)){
+
+ if (HasColumnInfo(listColumn))
+ {
// TODO probably send the 'end edit' from here, as we
// can then deal with the veto
CFStringRef sr ;
verify_noerr( GetDataBrowserItemDataText( itemData , &sr ) ) ;
wxMacCFStringHolder cfStr(sr) ;;
list->SetItem( owner->GetLineFromItem(this) , listColumn, cfStr.AsString() ) ;
- err = noErr ;
+ err = noErr ;
}
}
break;
}
}
-
+
// don't duplicate the numeric order column handling
- if (err == errDataBrowserPropertyNotSupported)
+ if (err == errDataBrowserPropertyNotSupported)
err = wxMacDataItem::GetSetData(owner, property, itemData, changeValue);
-
+
return err;
}