Patch from Hartwig for wxMac implementation

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48459 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2007-08-30 13:09:20 +00:00
parent 24c4a50f43
commit c17b2e3151
4 changed files with 318 additions and 60 deletions

View File

@@ -120,6 +120,7 @@ public:
OSStatus SetHasScrollBars( bool horiz, bool vert );
OSStatus SetHeaderButtonHeight( UInt16 height );
OSStatus SetHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle );
OSStatus SetIndent(float Indent);
OSStatus SetRowHeight( DataBrowserItemID item , UInt16 height);
OSStatus SetScrollPosition( UInt32 top , UInt32 left );
@@ -135,7 +136,8 @@ public:
OSStatus IsUsedPropertyID(DataBrowserPropertyID propertyID) const; // checks if passed property id is used by the control; no error is returned if the id exists
OSStatus RemoveColumn(DataBrowserTableViewColumnIndex index);
OSStatus RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID);
OSStatus RemoveColumnByIndex (DataBrowserTableViewColumnIndex index);
OSStatus SetColumnIndex (DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex index);
OSStatus SetDisclosureColumn(DataBrowserPropertyID propertyID, Boolean expandableRows=true);
@@ -207,6 +209,13 @@ public:
OSStatus SetSortOrder (DataBrowserSortOrder order);
OSStatus SetSortProperty(DataBrowserPropertyID propertyID);
//
// container handling
//
OSStatus CloseContainer(DataBrowserItemID containerID);
OSStatus OpenContainer(DataBrowserItemID containerID);
protected :
//
// callback functions

View File

@@ -193,7 +193,7 @@ public:
// implementation
//
virtual bool Render(void); // declared in wxDataViewRenderer but will not be used here, therefore calling this function will
// return 'false' without having done anything
// return 'true' without having done anything
virtual DataBrowserPropertyType GetPropertyType(void) const
{
@@ -281,6 +281,33 @@ private:
// wxDataViewToggleRenderer
// ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer: public wxDataViewRenderer
{
public:
wxDataViewIconTextRenderer(wxString const& varianttype = wxT("wxDataViewIconText"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
//
// inherited functions from wxDataViewRenderer
//
virtual bool Render(void);
//
// implementation
//
virtual DataBrowserPropertyType GetPropertyType(void) const
{
return kDataBrowserIconAndTextType;
}
protected:
private:
DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer)
};
// ---------------------------------------------------------
// wxDataViewToggleRenderer
// ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewRenderer
{
public:
@@ -490,17 +517,23 @@ public:
bool Create(wxWindow *parent, wxWindowID id, wxPoint const& pos=wxDefaultPosition, wxSize const& size=wxDefaultSize, long style=0,
wxValidator const& validator=wxDefaultValidator);
// inherited methods from 'wxDataViewCtrlBase':
virtual bool AppendColumn(wxDataViewColumn* columnPtr);
virtual bool AssociateModel(wxDataViewModel* model);
virtual wxControl* GetMainWindow(void) // should disappear as it is not of any use for the native implementation
{
return this;
}
// inherited methods from 'wxDataViewCtrlBase':
virtual bool AssociateModel(wxDataViewModel* model);
virtual bool AppendColumn(wxDataViewColumn* columnPtr);
virtual bool ClearColumns(void);
virtual bool DeleteColumn(wxDataViewColumn* columnPtr);
virtual wxDataViewColumn* GetColumn(unsigned int pos) const;
virtual unsigned int GetColumnCount(void) const;
virtual void Collapse(wxDataViewItem const& item);
virtual void EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr=NULL);
virtual void Expand(wxDataViewItem const& item);
virtual wxRect GetItemRect(wxDataViewItem const& item, wxDataViewColumn const* columnPtr) const;
virtual wxDataViewItem GetSelection(void) const;
@@ -516,8 +549,7 @@ public:
virtual void Unselect(wxDataViewItem const& item);
virtual void UnselectAll(void);
//
// implementation
//
@@ -525,6 +557,10 @@ public:
// adds all children of the passed parent to the control; if 'parentItem' is invalid the root(s) is/are added:
void AddChildrenLevel(wxDataViewItem const& parentItem);
// returns a pointer to a column;
// in case the pointer cannot be found NULL is returned:
wxDataViewColumn* GetColumnPtr(DataBrowserPropertyID propertyID) const;
// checks if currently a delete process is running:
bool IsDeleting(void) const
{
@@ -559,6 +595,9 @@ protected:
void OnSize(wxSizeEvent &event);
private:
// type definitions:
WX_DECLARE_HASH_MAP(DataBrowserPropertyID,wxDataViewColumn*,wxIntegerHash,wxIntegerEqual,ColumnPointerHashMapType);
// initializing of local variables:
void Init(void);
@@ -572,7 +611,7 @@ private:
void* m_cgContext; // pointer to core graphics context
wxDataViewModelNotifier* m_NotifierPtr; // the notifier is NOT owned by this class but by the associated model
ColumnPointerHashMapType m_ColumnPointers; // all column pointers are stored in a hash map with the property ID as a key
// wxWidget internal stuff:
DECLARE_DYNAMIC_CLASS(wxDataViewCtrl)

View File

@@ -273,20 +273,25 @@ OSStatus wxMacDataBrowserTableViewControl::SetDefaultRowHeight(UInt16 height)
return ::SetDataBrowserTableViewRowHeight(this->m_controlRef,height);
}
OSStatus wxMacDataBrowserTableViewControl::SetHasScrollBars( bool horiz, bool vert )
OSStatus wxMacDataBrowserTableViewControl::SetHasScrollBars(bool horiz, bool vert)
{
return SetDataBrowserHasScrollBars(this->m_controlRef, horiz, vert );
}
return ::SetDataBrowserHasScrollBars(this->m_controlRef,horiz,vert);
} /* wxMacDataBrowserTableViewControl::SetHasScrollBars(bool, bool) */
OSStatus wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16 height)
{
return SetDataBrowserListViewHeaderBtnHeight(this->m_controlRef, height );
}
return ::SetDataBrowserListViewHeaderBtnHeight(this->m_controlRef,height);
} /* wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16) */
OSStatus wxMacDataBrowserTableViewControl::SetHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle )
OSStatus wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle hiliteStyle)
{
return SetDataBrowserTableViewHiliteStyle(this->m_controlRef, hiliteStyle );
}
return ::SetDataBrowserTableViewHiliteStyle(this->m_controlRef,hiliteStyle);
} /*wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle) */
OSStatus wxMacDataBrowserTableViewControl::SetIndent(float Indent)
{
return ::DataBrowserSetMetric(this->m_controlRef,kDataBrowserMetricDisclosureColumnPerDepthGap,true,Indent);
} /* wxMacDataBrowserTableViewControl::SetIndent(float* Indent) */
OSStatus wxMacDataBrowserTableViewControl::SetRowHeight(DataBrowserItemID item, UInt16 height)
{
@@ -344,14 +349,19 @@ OSStatus wxMacDataBrowserTableViewControl::IsUsedPropertyID(DataBrowserPropertyI
return ::GetDataBrowserTableViewColumnPosition(this->m_controlRef,propertyID,&index);
} /* wxMacDataBrowserTableViewControl::IsUsedPropertyId(DataBrowserPropertyID) const */
OSStatus wxMacDataBrowserTableViewControl::RemoveColumn(DataBrowserTableViewColumnIndex index)
OSStatus wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID)
{
return ::RemoveDataBrowserTableViewColumn(this->m_controlRef,propertyID);
} /* wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID) */
OSStatus wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex index)
{
DataBrowserTableViewColumnID propertyID;
this->GetPropertyID(index,&propertyID);
return ::RemoveDataBrowserTableViewColumn(this->m_controlRef,propertyID);
} /* wxMacDataBrowserTableViewControl::RemoveColumn(DataBrowserTableViewColumnIndex) */
} /* wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex) */
OSStatus wxMacDataBrowserTableViewControl::SetColumnIndex(DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex index)
{
@@ -526,6 +536,19 @@ OSStatus wxMacDataBrowserTableViewControl::SetSortProperty(DataBrowserPropertyID
return ::SetDataBrowserSortProperty(this->m_controlRef,propertyID);
}
//
// container handling
//
OSStatus wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID containerID)
{
return ::CloseDataBrowserContainer(this->m_controlRef,containerID);
} /* wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID) */
OSStatus wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID containerID)
{
return ::OpenDataBrowserContainer(this->m_controlRef,containerID);
} /* wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID) */
IMPLEMENT_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl,wxMacControl)
// ============================================================================
@@ -714,27 +737,27 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
if (propertyID >= kMinPropertyID) // in case data columns set the data
{
// variable definitions:
DataBrowserTableViewColumnIndex columnIndex;
OSStatus errorStatus;
wxVariant variant;
wxDataViewColumn* dataViewColumnPtr;
wxDataViewCtrl* dataViewCtrlPtr;
wxVariant variant;
wxDataViewColumn* dataViewColumnPtr;
wxDataViewCtrl* dataViewCtrlPtr;
dataViewCtrlPtr = dynamic_cast<wxDataViewCtrl*>(this->GetPeer());
wxCHECK_MSG(dataViewCtrlPtr != NULL,errDataBrowserNotConfigured,_("Pointer to data view control not set correctly."));
wxCHECK_MSG(dataViewCtrlPtr->GetModel() != NULL,errDataBrowserNotConfigured,_("Pointer to model not set correctly."));
errorStatus = this->GetColumnIndex(propertyID,&columnIndex);
wxCHECK_MSG(errorStatus == noErr,errorStatus,_("Column index does not exist."));
dataViewColumnPtr = dataViewCtrlPtr->GetColumn(columnIndex);
dataViewColumnPtr = dataViewCtrlPtr->GetColumnPtr(propertyID);
wxCHECK_MSG(dataViewColumnPtr != NULL,errDataBrowserNotConfigured,_("No column for the specified column position existing."));
wxCHECK_MSG(dataViewColumnPtr->GetRenderer() != NULL,errDataBrowserNotConfigured,_("No renderer specified for column."));
dataViewCtrlPtr->GetModel()->GetValue(variant,wxDataViewItem(reinterpret_cast<void*>(itemID)),dataViewColumnPtr->GetModelColumn());
dataViewColumnPtr->GetRenderer()->SetDataReference(itemData);
dataViewColumnPtr->GetRenderer()->SetValue(variant);
wxCHECK_MSG(dataViewColumnPtr->GetRenderer()->Render(),errDataBrowserNotConfigured,_("Rendering failed."));
if (!(variant.IsNull()))
{
dataViewColumnPtr->GetRenderer()->SetDataReference(itemData);
dataViewColumnPtr->GetRenderer()->SetValue(variant);
wxCHECK_MSG(dataViewColumnPtr->GetRenderer()->Render(),errDataBrowserNotConfigured,_("Rendering failed."));
} /* if */
return noErr;
} /* if */
else // react on special system requests
{
switch (propertyID)
{
case kDataBrowserContainerIsClosableProperty:
@@ -753,7 +776,6 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
// opening the container is allowed if not vetoed:
return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewEvent.IsAllowed());
} /* block */
return noErr;
case kDataBrowserContainerIsOpenableProperty:
{
// variable definitions:
@@ -782,11 +804,12 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
case kDataBrowserItemIsEditableProperty:
return ::SetDataBrowserItemDataBooleanValue(itemData,true);
} /* switch */
} /* if */
} /* if */
return errDataBrowserPropertyNotSupported;
} /* wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemDataRef, Boolean) */
void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef WXUNUSED(itemData))
void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData)
{
switch (message)
{
@@ -823,6 +846,60 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
} /* block */
break;
case kDataBrowserEditStarted:
{
// variable definitions:
wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
if (dataViewCtrlPtr != NULL)
{
// initialize wxWidget event:
DataBrowserPropertyID propertyID;
wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED,dataViewCtrlPtr->GetId()); // variable definition
dataViewEvent.SetEventObject(dataViewCtrlPtr);
dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
if (this->GetPropertyID(itemData,&propertyID) == noErr)
{
// variable definition and initialization:
DataBrowserTableViewColumnIndex columnIndex;
wxCHECK_RET(this->GetColumnIndex(propertyID,&columnIndex),_("Column index not found."));
dataViewEvent.SetColumn(columnIndex);
dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
} /* if */
// finally send the equivalent wxWidget event:
dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
} /* if */
} /* block */
break;
case kDataBrowserEditStopped:
{
// variable definitions:
wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
if (dataViewCtrlPtr != NULL)
{
// initialize wxWidget event:
DataBrowserPropertyID propertyID;
wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE,dataViewCtrlPtr->GetId()); // variable definition
dataViewEvent.SetEventObject(dataViewCtrlPtr);
dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
if (this->GetPropertyID(itemData,&propertyID) == noErr)
{
// variable definition and initialization:
DataBrowserTableViewColumnIndex columnIndex;
wxCHECK_RET(this->GetColumnIndex(propertyID,&columnIndex),_("Column index not found."));
dataViewEvent.SetColumn(columnIndex);
dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
} /* if */
// finally send the equivalent wxWidget event:
dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
} /* if */
} /* block */
break;
case kDataBrowserItemAdded:
{
// variable definitions:
@@ -838,6 +915,23 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
} /* block */
break;
case kDataBrowserItemDeselected:
{
// variable definitions:
wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
if (dataViewCtrlPtr != NULL) // can become NULL if an item is still selected while removing the data browser
{
// initialize wxWidget event:
wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_DESELECTED,dataViewCtrlPtr->GetId()); // variable definition
dataViewEvent.SetEventObject(dataViewCtrlPtr);
dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
// finally send the equivalent wxWidget event:
dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
} /* if */
} /* block */
break;
case kDataBrowserItemDoubleClicked:
{
// variable definitions:
@@ -885,6 +979,8 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
} /* block */
break;
case kDataBrowserSelectionSetChanged:
break;
case kDataBrowserUserStateChanged:
{
DataBrowserPropertyID propertyID;

View File

@@ -277,7 +277,7 @@ IMPLEMENT_ABSTRACT_CLASS(wxDataViewRenderer,wxDataViewRendererBase)
// ---------------------------------------------------------
#pragma mark -
wxDataViewCustomRenderer::wxDataViewCustomRenderer(wxString const& varianttype, wxDataViewCellMode mode, int align)
:wxDataViewRenderer(varianttype,mode,align), m_editorCtrlPtr(NULL)
:wxDataViewRenderer(varianttype,mode,align), m_editorCtrlPtr(NULL), m_DCPtr(NULL)
{
} /* wxDataViewCustomRenderer::wxDataViewCustomRenderer(wxString const&, wxDataViewCellMode) */
@@ -300,7 +300,7 @@ wxDC* wxDataViewCustomRenderer::GetDC(void)
bool wxDataViewCustomRenderer::Render(void)
{
return false;
return true;
} /* wxDataViewCustomRenderer::Render(void) */
void wxDataViewCustomRenderer::SetDC(wxDC* newDCPtr)
@@ -363,6 +363,38 @@ bool wxDataViewBitmapRenderer::Render(void)
IMPLEMENT_CLASS(wxDataViewBitmapRenderer,wxDataViewRenderer)
// ---------------------------------------------------------
// wxDataViewIconTextRenderer
// ---------------------------------------------------------
#pragma mark -
wxDataViewIconTextRenderer::wxDataViewIconTextRenderer(wxString const& varianttype, wxDataViewCellMode mode, int align)
:wxDataViewRenderer(varianttype,mode)
{
}
bool wxDataViewIconTextRenderer::Render(void)
{
wxLogMessage(wxString(_("Types: ")) << this->GetValue().GetType() << wxT(' ') << this->GetVariantType());
if (this->GetValue().GetType() == this->GetVariantType())
{
// variable definition:
wxDataViewIconText iconText;
iconText << this->GetValue();
// variable definition:
wxMacCFStringHolder cfString(iconText.GetText(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
return ((::SetDataBrowserItemDataIcon(this->GetDataReference(),MAC_WXHICON(iconText.GetIcon().GetHICON())) == noErr) &&
(::SetDataBrowserItemDataText(this->GetDataReference(),cfString) == noErr));
} /* if */
else
return false;
} /* wxDataViewIconTextRenderer::Render(void) */
IMPLEMENT_ABSTRACT_CLASS(wxDataViewIconTextRenderer,wxDataViewRenderer)
// ---------------------------------------------------------
// wxDataViewToggleRenderer
// ---------------------------------------------------------
@@ -670,7 +702,6 @@ void wxDataViewCtrl::Init(void)
{
this->m_Deleting = false;
this->m_macIsUserPane = false;
this->m_NotifierPtr = NULL;
this->m_cgContext = NULL;
} /* wxDataViewCtrl::Init(void) */
@@ -692,25 +723,40 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos,
return true;
} /* wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator) */
bool wxDataViewCtrl::AssociateModel(wxDataViewModel* model)
{
if (!wxDataViewCtrlBase::AssociateModel(model))
return false;
model->AddNotifier(new wxMacDataViewModelNotifier(dynamic_cast<wxMacDataViewDataBrowserListViewControl*>(this->m_peer)));
return true;
} /* wxDataViewCtrl::AssociateModel(wxDataViewModel*) */
bool wxDataViewCtrl::AppendColumn(wxDataViewColumn* dataViewColumnPtr)
{
DataBrowserPropertyID NewPropertyID;
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
// first, some error checking:
wxCHECK_MSG(MacDataViewListCtrlPtr != NULL, false,_("m_peer is not or incorrectly initialized"));
wxCHECK_MSG(dataViewColumnPtr != NULL, false,_("Column pointer must not be NULL."));
wxCHECK_MSG(dataViewColumnPtr->GetRenderer() != NULL, false,_("Column does not have a renderer."));
wxCHECK_MSG(this->GetModel() != NULL, false,_("No model associated with control."));
wxCHECK_MSG((dataViewColumnPtr->GetModelColumn() >= 0) &&
(dataViewColumnPtr->GetModelColumn() < this->GetModel()->GetColumnCount()),false,_("Column's model column has no equivalent in the associated model."));
if (this->wxDataViewCtrlBase::AppendColumn(dataViewColumnPtr))
if ((MacDataViewListCtrlPtr->GetFreePropertyID(&NewPropertyID) == noErr) && this->wxDataViewCtrlBase::AppendColumn(dataViewColumnPtr))
{
// insert column into hash map:
this->m_ColumnPointers.insert(ColumnPointerHashMapType::value_type(NewPropertyID,dataViewColumnPtr));
// variable definitions:
DataBrowserPropertyID NewPropertyID;
DataBrowserListViewColumnDesc columnDescription;
wxMacCFStringHolder cfTitle(dataViewColumnPtr->GetTitle(),(this->m_font.Ok() ? this->m_font.GetEncoding() : wxLocale::GetSystemEncoding()));
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
DataBrowserListViewColumnDesc columnDescription;
wxMacCFStringHolder cfTitle(dataViewColumnPtr->GetTitle(),(this->m_font.Ok() ? this->m_font.GetEncoding() : wxLocale::GetSystemEncoding()));
// initialize column description:
wxCHECK_MSG(MacDataViewListCtrlPtr != NULL, false,_("m_peer is not or incorrectly initialized"));
wxCHECK_MSG(MacDataViewListCtrlPtr->GetFreePropertyID(&NewPropertyID) == noErr,false,_("Maximum number of columns reached."));
dataViewColumnPtr->SetPropertyID(NewPropertyID);
if (dataViewColumnPtr->GetWidth() <= 0)
dataViewColumnPtr->SetWidth(wxDVC_DEFAULT_WIDTH);
@@ -735,7 +781,7 @@ bool wxDataViewCtrl::AppendColumn(wxDataViewColumn* dataViewColumnPtr)
columnDescription.propertyDesc.propertyFlags |= kDataBrowserListViewNoGapForIconInHeaderButton;
#endif
columnDescription.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc;
if (dataViewColumnPtr->IsResizable())
if (dataViewColumnPtr->IsResizeable())
{
columnDescription.headerBtnDesc.minimumWidth = 0;
columnDescription.headerBtnDesc.maximumWidth = 30000;
@@ -775,10 +821,6 @@ bool wxDataViewCtrl::AppendColumn(wxDataViewColumn* dataViewColumnPtr)
// final adjustments for the layout:
wxCHECK_MSG(MacDataViewListCtrlPtr->SetColumnWidth(NewPropertyID,dataViewColumnPtr->GetWidth()) == noErr,false,_("Column width could not be set."));
#if 0
if (dataViewColumnPtr->IsSortable()) // if the current column is marked sortable this column will become the active sortable column, otherwise don't do anything
MacDataViewListCtrlPtr->SetSortProperty(NewPropertyID);
#endif
if (dataViewColumnPtr == this->GetExpanderColumn()) // if the current column is marked expandable this column will become the active expandable column
MacDataViewListCtrlPtr->SetDisclosureColumn(NewPropertyID,true);
@@ -795,16 +837,67 @@ bool wxDataViewCtrl::AppendColumn(wxDataViewColumn* dataViewColumnPtr)
return false;
} /* wxDataViewCtrl::AppendColumn(wxDataViewColumn*) */
bool wxDataViewCtrl::AssociateModel(wxDataViewModel* model)
bool wxDataViewCtrl::ClearColumns(void)
{
if (!wxDataViewCtrlBase::AssociateModel(model))
return false;
this->m_NotifierPtr = new wxMacDataViewModelNotifier(dynamic_cast<wxMacDataViewDataBrowserListViewControl*>(this->m_peer));
model->AddNotifier(this->m_NotifierPtr);
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
while (this->m_ColumnPointers.begin() != this->m_ColumnPointers.end())
{
wxCHECK_MSG(MacDataViewListCtrlPtr->RemoveColumnByProperty(this->m_ColumnPointers.begin()->first) == noErr,false,_("Could not remove column."));
delete this->m_ColumnPointers.begin()->second;
this->m_ColumnPointers.erase(this->m_ColumnPointers.begin());
} /* while */
return true;
} /* wxDataViewCtrl::AssociateModel(wxDataViewModel*) */
} /* wxDataViewCtrl::ClearColumns(void) */
bool wxDataViewCtrl::DeleteColumn(wxDataViewColumn* columnPtr)
{
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
if ((MacDataViewListCtrlPtr->RemoveColumnByProperty(columnPtr->GetPropertyID()) == noErr) && (this->m_ColumnPointers.erase(columnPtr->GetPropertyID()) > 0))
{
delete columnPtr;
return true;
} /* if */
else
return false;
} /* wxDataViewCtrl::DeleteColumn(wxDataViewColumn*) */
wxDataViewColumn* wxDataViewCtrl::GetColumn(unsigned int pos) const
{
DataBrowserPropertyID propertyID;
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
if (MacDataViewListCtrlPtr->GetPropertyID(pos,&propertyID) == noErr)
{
// variable definition:
ColumnPointerHashMapType::const_iterator Result(this->m_ColumnPointers.find(propertyID));
if (Result != this->m_ColumnPointers.end())
return Result->second;
else
return NULL;
} /* if */
else
return NULL;
} /* wxDataViewCtrl::GetColumn(unsigned int pos) const */
unsigned int wxDataViewCtrl::GetColumnCount(void) const
{
return this->m_ColumnPointers.size();
} /* wxDataViewCtrl::GetColumnCount(void) const */
void wxDataViewCtrl::Collapse(wxDataViewItem const& item)
{
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
MacDataViewListCtrlPtr->CloseContainer(reinterpret_cast<DataBrowserItemID>(item.GetID()));
} /* wxDataViewCtrl::Collapse(wxDataViewItem const&) */
void wxDataViewCtrl::EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr)
{
@@ -822,6 +915,14 @@ void wxDataViewCtrl::EnsureVisible(wxDataViewItem const& item, wxDataViewColumn
} /* if */
} /* wxDataViewCtrl::EnsureVisible(wxDataViewItem const&, wxDataViewColumn const*) */
void wxDataViewCtrl::Expand(wxDataViewItem const& item)
{
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
MacDataViewListCtrlPtr->OpenContainer(reinterpret_cast<DataBrowserItemID>(item.GetID()));
} /* wxDataViewCtrl::Expand(wxDataViewItem const&) */
wxRect wxDataViewCtrl::GetItemRect(wxDataViewItem const& item, wxDataViewColumn const* columnPtr) const
{
if (item.IsOk() && (columnPtr != NULL))
@@ -984,23 +1085,36 @@ void wxDataViewCtrl::AddChildrenLevel(wxDataViewItem const& parentItem)
} /* while */
} /* wxDataViewCtrl::AddChildrenLevel(wxDataViewItem const&) */
wxDataViewColumn* wxDataViewCtrl::GetColumnPtr(DataBrowserPropertyID propertyID) const
{
// variable definition:
ColumnPointerHashMapType::const_iterator Result(this->m_ColumnPointers.find(propertyID));
if (Result != this->m_ColumnPointers.end())
return Result->second;
else
return NULL;
} /* wxDataViewCtrl::GetColumnPtr(DataBrowserPropertyID) const */
// inherited methods from wxDataViewCtrlBase
void wxDataViewCtrl::DoSetExpanderColumn(void)
{
if (this->GetExpanderColumn() < this->GetColumnCount())
if (this->GetExpanderColumn() != NULL)
{
// variable definition and initialization:
DataBrowserPropertyID propertyID;
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
if (MacDataViewListCtrlPtr->GetPropertyID(this->GetExpanderColumn(),&propertyID) == noErr)
(void) MacDataViewListCtrlPtr->SetDisclosureColumn(propertyID);
(void) MacDataViewListCtrlPtr->SetDisclosureColumn(this->GetExpanderColumn()->GetPropertyID());
} /* if */
} /* wxDataViewCtrl::DoSetExpanderColumn(void) */
void wxDataViewCtrl::DoSetIndent(void)
{
} /* wxDataViewCtrl::DoSetExpanderColumn(void) */
wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(this->m_peer));
(void) MacDataViewListCtrlPtr->SetIndent(static_cast<float>(this->GetIndent()));
} /* wxDataViewCtrl::DoSetIndent(void) */
// event handling:
void wxDataViewCtrl::OnSize(wxSizeEvent& event)