Improved handling of column widths, removed need for hidden column for sorting, and put in a stub for editing support.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41310 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Kevin Ollivier
2006-09-19 22:09:41 +00:00
parent 714dfaa6fb
commit 0d2d29b16a
3 changed files with 40 additions and 52 deletions

View File

@@ -909,7 +909,7 @@ public :
DataBrowserPropertyID property) const; DataBrowserPropertyID property) const;
void InsertColumn(int colId, DataBrowserPropertyType colType, void InsertColumn(int colId, DataBrowserPropertyType colType,
const wxString& title, SInt16 just = teFlushDefault, int minWidth = -1, int maxWidth = -1); const wxString& title, SInt16 just = teFlushDefault, int defaultWidth = -1);
int GetColumnWidth(int colId); int GetColumnWidth(int colId);
void SetColumnWidth(int colId, int width); void SetColumnWidth(int colId, int width);
@@ -986,6 +986,8 @@ public :
virtual wxClientDataType GetClientDataType() const; virtual wxClientDataType GetClientDataType() const;
virtual void SetClientDataType(wxClientDataType clientDataItemsType); virtual void SetClientDataType(wxClientDataType clientDataItemsType);
virtual ListSortOrder GetSortOrder() const;
virtual void SetSortOrder(const ListSortOrder sort);

View File

@@ -1085,8 +1085,9 @@ long wxListCtrl::InsertColumn(long col, wxListItem& item)
return m_genericImpl->InsertColumn(col, item); return m_genericImpl->InsertColumn(col, item);
if (m_dbImpl){ if (m_dbImpl){
if ( !(item.GetMask() & wxLIST_MASK_WIDTH) ) //item.GetWidth() == 0) if ( !(item.GetMask() & wxLIST_MASK_WIDTH) )
item.SetWidth(300); item.SetWidth(150);
DataBrowserPropertyType type = kDataBrowserTextType; DataBrowserPropertyType type = kDataBrowserTextType;
wxImageList* imageList = GetImageList(wxIMAGE_LIST_SMALL); wxImageList* imageList = GetImageList(wxIMAGE_LIST_SMALL);
if (imageList && imageList->GetImageCount() > 0){ if (imageList && imageList->GetImageCount() > 0){
@@ -1105,7 +1106,17 @@ long wxListCtrl::InsertColumn(long col, wxListItem& item)
else if (item.GetAlign() == wxLIST_FORMAT_RIGHT) else if (item.GetAlign() == wxLIST_FORMAT_RIGHT)
just = teFlushRight; just = teFlushRight;
} }
m_dbImpl->InsertColumn(col, type, item.GetText(), just, -1, item.GetWidth()); m_dbImpl->InsertColumn(col, type, item.GetText(), just, item.GetWidth());
if (GetWindowStyleFlag() & wxLC_EDIT_LABELS)
{
DataBrowserTableViewColumnID id;
m_dbImpl->GetColumnIDFromIndex(col, &id);
DataBrowserPropertyFlags flags;
verify_noerr(m_dbImpl->GetPropertyFlags(id, &flags));
flags |= kDataBrowserPropertyIsEditable;
verify_noerr(m_dbImpl->SetPropertyFlags(id, flags));
}
} }
return col; return col;
@@ -1259,15 +1270,6 @@ void wxMacListCtrlItem::Notification(wxMacDataItemBrowserControl *owner ,
return; return;
} }
// CS : couldn't reproduce this problem, what are the steps to test ?
// 1) wxDynamicCast fails during shutdown. This doesn't suprise me, but
// you have similar listbox code, so I'm wondering why this case is different.
// CS: these two should be fixed now
// 2) owner->GetLineFromItem( this ) always asserts.
// 3) the !lb->IsSelectionSuppressed code also fails with EXC_BAD_ACCESS
// during shutdown, this may fail.
wxListCtrl *list = wxDynamicCast( owner->GetPeer() , wxListCtrl ); wxListCtrl *list = wxDynamicCast( owner->GetPeer() , wxListCtrl );
if ( list ){ if ( list ){
bool trigger = false; bool trigger = false;
@@ -1329,31 +1331,6 @@ wxMacDataBrowserListCtrlControl::wxMacDataBrowserListCtrlControl( wxWindow *peer
err = SetSelectionFlags( options ); err = SetSelectionFlags( options );
verify_noerr( err ); verify_noerr( err );
// create the numeric order column
DataBrowserListViewColumnDesc columnDesc;
columnDesc.headerBtnDesc.titleOffset = 0;
columnDesc.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc;
columnDesc.headerBtnDesc.btnFontStyle.flags =
kControlUseFontMask | kControlUseJustMask;
columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlNoContent;
columnDesc.headerBtnDesc.btnFontStyle.just = teFlushDefault;
columnDesc.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont;
columnDesc.headerBtnDesc.btnFontStyle.style = normal;
columnDesc.headerBtnDesc.titleString = NULL;
columnDesc.headerBtnDesc.minimumWidth = 0;
columnDesc.headerBtnDesc.maximumWidth = 0;
columnDesc.propertyDesc.propertyID = kNumericOrderColumnId;
columnDesc.propertyDesc.propertyType = kDataBrowserPropertyRelevanceRankPart;
columnDesc.propertyDesc.propertyFlags = kDataBrowserTableViewSelectionColumn;
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewTypeSelectColumn;
#endif
verify_noerr( AddColumn( &columnDesc, kDataBrowserListViewAppendColumn ) );
if ( style & wxLC_LIST ){ if ( style & wxLC_LIST ){
InsertColumn(0, kDataBrowserIconAndTextType, wxEmptyString, -1, -1); InsertColumn(0, kDataBrowserIconAndTextType, wxEmptyString, -1, -1);
verify_noerr( AutoSizeColumns() ); verify_noerr( AutoSizeColumns() );
@@ -1376,7 +1353,7 @@ wxMacDataBrowserListCtrlControl::wxMacDataBrowserListCtrlControl( wxWindow *peer
else else
{ {
m_sortOrder = SortOrder_None; m_sortOrder = SortOrder_None;
SetDataBrowserSortProperty( m_controlRef , kNumericOrderColumnId); SetDataBrowserSortProperty( m_controlRef , kMinColumnId);
SetDataBrowserSortOrder( m_controlRef , kDataBrowserOrderIncreasing); SetDataBrowserSortOrder( m_controlRef , kDataBrowserOrderIncreasing);
} }
@@ -1546,6 +1523,7 @@ OSStatus wxMacListCtrlItem::GetSetData( wxMacDataItemBrowserControl *owner ,
DataBrowserItemDataRef itemData, DataBrowserItemDataRef itemData,
bool changeValue ) bool changeValue )
{ {
OSStatus err = errDataBrowserPropertyNotSupported; OSStatus err = errDataBrowserPropertyNotSupported;
if ( !changeValue ) if ( !changeValue )
{ {

View File

@@ -1646,11 +1646,11 @@ bool wxMacDataItem::IsLessThan(wxMacDataItemBrowserControl *owner ,
const wxMacDataItem* otherItem = dynamic_cast<const wxMacDataItem*>(rhs); const wxMacDataItem* otherItem = dynamic_cast<const wxMacDataItem*>(rhs);
bool retval = false; bool retval = false;
if ( sortProperty == m_colId ){ if ( sortProperty == m_colId && owner->GetSortOrder() != SortOrder_None){
retval = m_label.CmpNoCase( otherItem->m_label) < 0; retval = m_label.CmpNoCase( otherItem->m_label) < 0;
} }
else if ( sortProperty == kNumericOrderColumnId ) else if ( owner->GetSortOrder() == SortOrder_None || sortProperty == kNumericOrderColumnId )
retval = m_order < otherItem->m_order; retval = m_order < otherItem->m_order;
return retval; return retval;
@@ -1703,6 +1703,16 @@ wxMacDataItemBrowserControl::wxMacDataItemBrowserControl( wxWindow* peer , const
m_clientDataItemsType = wxClientData_None; m_clientDataItemsType = wxClientData_None;
} }
ListSortOrder wxMacDataItemBrowserControl::GetSortOrder() const
{
return m_sortOrder;
}
void wxMacDataItemBrowserControl::SetSortOrder(const ListSortOrder sort)
{
m_sortOrder = sort;
}
wxMacDataItem* wxMacDataItemBrowserControl::CreateItem() wxMacDataItem* wxMacDataItemBrowserControl::CreateItem()
{ {
return new wxMacDataItem(); return new wxMacDataItem();
@@ -1870,7 +1880,7 @@ void wxMacDataItemBrowserControl::UpdateItems(const wxMacDataItem *container,
} }
void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyType colType, void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyType colType,
const wxString& title, SInt16 just, int minWidth, int maxWidth) const wxString& title, SInt16 just, int defaultWidth)
{ {
DataBrowserListViewColumnDesc columnDesc; DataBrowserListViewColumnDesc columnDesc;
columnDesc.headerBtnDesc.titleOffset = 0; columnDesc.headerBtnDesc.titleOffset = 0;
@@ -1895,15 +1905,8 @@ void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyTyp
cfTitle.Assign( title, enc ); cfTitle.Assign( title, enc );
columnDesc.headerBtnDesc.titleString = cfTitle; columnDesc.headerBtnDesc.titleString = cfTitle;
int colMinWidth = 0; columnDesc.headerBtnDesc.minimumWidth = 0;
if (minWidth != -1) columnDesc.headerBtnDesc.maximumWidth = 30000;
colMinWidth = minWidth;
columnDesc.headerBtnDesc.minimumWidth = colMinWidth;
int colMaxWidth = 500;
if (maxWidth != -1)
colMaxWidth = maxWidth;
columnDesc.headerBtnDesc.maximumWidth = colMaxWidth;
columnDesc.propertyDesc.propertyID = (kMinColumnId + colId); columnDesc.propertyDesc.propertyID = (kMinColumnId + colId);
columnDesc.propertyDesc.propertyType = colType; columnDesc.propertyDesc.propertyType = colType;
@@ -1913,6 +1916,11 @@ void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyTyp
#endif #endif
verify_noerr( AddColumn( &columnDesc, kDataBrowserListViewAppendColumn ) ); verify_noerr( AddColumn( &columnDesc, kDataBrowserListViewAppendColumn ) );
if (defaultWidth > 0){
SetColumnWidth(colId, defaultWidth);
}
} }
void wxMacDataItemBrowserControl::SetColumnWidth(int colId, int width) void wxMacDataItemBrowserControl::SetColumnWidth(int colId, int width)