long wxCheckedListCtrl::InsertItem(wxListItem &info) { int additionalstate = GetAndRemoveAdditionalState(&info.m_state, info.m_stateMask); if (!(info.m_mask & wxLIST_MASK_STATE) || !(info.m_stateMask & wxLIST_STATE_ENABLED)) { // if not specified, the default additional state is ENABLED additionalstate = wxLIST_STATE_ENABLED; } // we always want to insert items with images... info.m_mask |= wxLIST_MASK_IMAGE; info.m_image = GetItemImageFromAdditionalState(additionalstate); info.SetBackgroundColour(GetBgColourFromAdditionalState(additionalstate)); int itemcount = GetItemCount(); wxASSERT_MSG(info.m_itemId <= itemcount, wxT("Invalid index !")); wxASSERT_MSG((int)m_stateList.GetCount() == (int)GetItemCount(), wxT("Something wrong !")); if (info.m_itemId == itemcount) { // we are adding a new item at the end of the list m_stateList.Add(additionalstate); } else { // we must shift all following items for (int i=itemcount; i > info.m_itemId; i++) m_stateList[i] = m_stateList[i-1]; m_stateList[info.m_itemId] = additionalstate; } return wxListCtrl::InsertItem(info); }
bool wxCheckedListCtrl::SetItem(wxListItem &info) { #if CLC_VBAM_USAGE // only col 0 gets a checkbox if (info.GetColumn()) return wxListCtrl::SetItem(info); #endif // remove the checked & enabled states from the state flag: // we'll store them in our separate array int additionalstate = GetAndRemoveAdditionalState(&info.m_state, info.m_stateMask); // set image index // we will ignore the info.m_image field since we need // to overwrite it... if (info.m_mask & wxLIST_MASK_STATE) { // if some state is not included in the state mask, then get the state info // from our internal state array if (!(info.m_stateMask & wxLIST_STATE_ENABLED)) additionalstate |= (m_stateList[info.m_itemId] & wxLIST_STATE_ENABLED); if (!(info.m_stateMask & wxLIST_STATE_CHECKED)) additionalstate |= (m_stateList[info.m_itemId] & wxLIST_STATE_CHECKED); // state is valid: use it to determine the image to set... info.m_mask |= wxLIST_MASK_IMAGE; info.m_image = GetItemImageFromAdditionalState(additionalstate); // since when changing the background color, also the foreground color // and the font of the item are changed, we try to respect the user // choices of such attributes info.SetTextColour(this->GetItemTextColour(info.GetId())); #if wxCHECK_VERSION(2, 6, 2) // before wx 2.6.2 the wxListCtrl::SetItemFont function is missing info.SetFont(this->GetItemFont(info.GetId())); #endif // change the background color to respect the enabled/disabled status... info.SetBackgroundColour(GetBgColourFromAdditionalState(additionalstate)); m_stateList[info.m_itemId] = additionalstate; } else { // state is invalid; don't change image info.m_mask &= ~wxLIST_MASK_IMAGE; } // save the changes return wxListCtrl::SetItem(info); }