X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/65887bd0f15e2ed92f130dd7bca91636527e1540..2debe2b120a2b376a57d3f8ec24eb418a23b2710:/src/common/datavcmn.cpp?ds=sidebyside diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 1b2d20cdce..94ddc67dc2 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -69,6 +69,24 @@ private: } // anonymous namespace +// --------------------------------------------------------- +// wxDataViewItemAttr +// --------------------------------------------------------- + +wxFont wxDataViewItemAttr::GetEffectiveFont(const wxFont& font) const +{ + if ( !HasFont() ) + return font; + + wxFont f(font); + if ( GetBold() ) + f.MakeBold(); + if ( GetItalic() ) + f.MakeItalic(); + return f; +} + + // --------------------------------------------------------- // wxDataViewModelNotifier // --------------------------------------------------------- @@ -235,6 +253,36 @@ bool wxDataViewModel::Cleared() return ret; } +bool wxDataViewModel::BeforeReset() +{ + bool ret = true; + + wxDataViewModelNotifiers::iterator iter; + for (iter = m_notifiers.begin(); iter != m_notifiers.end(); ++iter) + { + wxDataViewModelNotifier* notifier = *iter; + if (!notifier->BeforeReset()) + ret = false; + } + + return ret; +} + +bool wxDataViewModel::AfterReset() +{ + bool ret = true; + + wxDataViewModelNotifiers::iterator iter; + for (iter = m_notifiers.begin(); iter != m_notifiers.end(); ++iter) + { + wxDataViewModelNotifier* notifier = *iter; + if (!notifier->AfterReset()) + ret = false; + } + + return ret; +} + void wxDataViewModel::Resort() { wxDataViewModelNotifiers::iterator iter; @@ -345,6 +393,8 @@ wxDataViewIndexListModel::wxDataViewIndexListModel( unsigned int initial_size ) void wxDataViewIndexListModel::Reset( unsigned int new_size ) { + /* wxDataViewModel:: */ BeforeReset(); + m_hash.Clear(); // IDs are ordered until an item gets deleted or inserted @@ -357,7 +407,7 @@ void wxDataViewIndexListModel::Reset( unsigned int new_size ) m_nextFreeID = new_size + 1; - /* wxDataViewModel:: */ Cleared(); + /* wxDataViewModel:: */ AfterReset(); } void wxDataViewIndexListModel::RowPrepended() @@ -499,9 +549,11 @@ wxDataViewVirtualListModel::wxDataViewVirtualListModel( unsigned int initial_siz void wxDataViewVirtualListModel::Reset( unsigned int new_size ) { + /* wxDataViewModel:: */ BeforeReset(); + m_size = new_size; - /* wxDataViewModel:: */ Cleared(); + /* wxDataViewModel:: */ AfterReset(); } void wxDataViewVirtualListModel::RowPrepended() @@ -727,6 +779,20 @@ bool wxDataViewRendererBase::FinishEditing() return true; } +void wxDataViewRendererBase::PrepareForItem(const wxDataViewModel *model, + const wxDataViewItem& item, + unsigned column) +{ + wxVariant value; + model->GetValue(value, item, column); + SetValue(value); + + wxDataViewItemAttr attr; + model->GetAttr(item, column, attr); + SetAttr(attr); +} + + // ---------------------------------------------------------------------------- // wxDataViewCustomRendererBase // ---------------------------------------------------------------------------- @@ -792,19 +858,28 @@ wxDataViewCustomRendererBase::WXCallRender(wxRect rectCell, wxDC *dc, int state) wxDCFontChanger changeFont(*dc); if ( m_attr.HasFont() ) - { - wxFont font(dc->GetFont()); - if ( m_attr.GetBold() ) - font.MakeBold(); - if ( m_attr.GetItalic() ) - font.MakeItalic(); - - changeFont.Set(font); - } + changeFont.Set(m_attr.GetEffectiveFont(dc->GetFont())); Render(rectItem, dc, state); } +wxSize wxDataViewCustomRendererBase::GetTextExtent(const wxString& str) const +{ + const wxDataViewCtrl *view = GetView(); + + if ( m_attr.HasFont() ) + { + wxFont font(m_attr.GetEffectiveFont(view->GetFont())); + wxSize size; + view->GetTextExtent(str, &size.x, &size.y, NULL, NULL, &font); + return size; + } + else + { + return view->GetTextExtent(str); + } +} + void wxDataViewCustomRendererBase::RenderText(const wxString& text, int xoffset, @@ -994,6 +1069,22 @@ void wxDataViewCtrlBase::ExpandAncestors( const wxDataViewItem & item ) } } +wxDataViewItem wxDataViewCtrlBase::GetCurrentItem() const +{ + return HasFlag(wxDV_MULTIPLE) ? DoGetCurrentItem() + : GetSelection(); +} + +void wxDataViewCtrlBase::SetCurrentItem(const wxDataViewItem& item) +{ + wxCHECK_RET( item.IsOk(), "Can't make current an invalid item." ); + + if ( HasFlag(wxDV_MULTIPLE) ) + DoSetCurrentItem(item); + else + Select(item); +} + wxDataViewColumn * wxDataViewCtrlBase::AppendTextColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode, int width, wxAlignment align, int flags ) @@ -1391,14 +1482,9 @@ wxDataViewChoiceRenderer::wxDataViewChoiceRenderer( const wxArrayString& choices wxControl* wxDataViewChoiceRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) { - wxString s = value; - wxSize size = labelRect.GetSize(); -#ifdef __WXMAC__ - size = wxSize( wxMax(70,labelRect.width ), -1 ); -#endif - wxChoice *c = new wxChoice( parent, wxID_ANY, labelRect.GetTopLeft(), size, m_choices ); + wxChoice* c = new wxChoice(parent, wxID_ANY, labelRect.GetTopLeft(), wxDefaultSize, m_choices ); + c->Move(labelRect.GetRight() - c->GetRect().width, wxDefaultCoord); c->SetStringSelection( value.GetString() ); - return c; } @@ -1442,11 +1528,11 @@ wxDataViewChoiceByIndexRenderer::wxDataViewChoiceByIndexRenderer( const wxArrayS wxDataViewChoiceRenderer( choices, mode, alignment ) { } - + wxControl* wxDataViewChoiceByIndexRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) { wxVariant string_value = GetChoice( value.GetLong() ); - + return wxDataViewChoiceRenderer::CreateEditorCtrl( parent, labelRect, string_value ); } @@ -1465,13 +1551,13 @@ bool wxDataViewChoiceByIndexRenderer::SetValue( const wxVariant &value ) wxVariant string_value = GetChoice( value.GetLong() ); return wxDataViewChoiceRenderer::SetValue( string_value ); } - + bool wxDataViewChoiceByIndexRenderer::GetValue( wxVariant &value ) const { wxVariant string_value; if (!wxDataViewChoiceRenderer::GetValue( string_value )) return false; - + value = (long) GetChoices().Index( string_value.GetString() ); return true; } @@ -1605,10 +1691,6 @@ wxDataViewListCtrl::wxDataViewListCtrl( wxWindow *parent, wxWindowID id, const wxValidator& validator ) { Create( parent, id, pos, size, style, validator ); - - wxDataViewListStore *store = new wxDataViewListStore; - AssociateModel( store ); - store->DecRef(); } wxDataViewListCtrl::~wxDataViewListCtrl() @@ -1620,7 +1702,14 @@ bool wxDataViewListCtrl::Create( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator ) { - return wxDataViewCtrl::Create( parent, id, pos, size, style, validator ); + if ( !wxDataViewCtrl::Create( parent, id, pos, size, style, validator ) ) + return false; + + wxDataViewListStore *store = new wxDataViewListStore; + AssociateModel( store ); + store->DecRef(); + + return true; } bool wxDataViewListCtrl::AppendColumn( wxDataViewColumn *column, const wxString &varianttype )