void RadioButtonGroup::RemoveButton(StateButton* button) { std::size_t index = NO_BUTTON; for (std::size_t i = 0; i < m_button_slots.size(); ++i) { if (m_button_slots[i].button == button) { index = i; break; } } assert(index < m_button_slots.size()); const int CELLS_PER_BUTTON = m_expand_buttons ? 1 : 2; Layout* layout = GetLayout(); layout->Remove(m_button_slots[index].button); for (std::size_t i = index + 1; i < m_button_slots.size(); ++i) { layout->Remove(m_button_slots[i].button); if (m_orientation == VERTICAL) { layout->Add(m_button_slots[i].button, i * CELLS_PER_BUTTON - CELLS_PER_BUTTON, 0); layout->SetRowStretch(i * CELLS_PER_BUTTON - CELLS_PER_BUTTON, layout->RowStretch(i * CELLS_PER_BUTTON)); layout->SetMinimumRowHeight(i * CELLS_PER_BUTTON - CELLS_PER_BUTTON, layout->MinimumRowHeight(i * CELLS_PER_BUTTON)); } else { layout->Add(m_button_slots[i].button, 0, i * CELLS_PER_BUTTON - CELLS_PER_BUTTON); layout->SetColumnStretch(i * CELLS_PER_BUTTON - CELLS_PER_BUTTON, layout->ColumnStretch(i * CELLS_PER_BUTTON)); layout->SetMinimumColumnWidth(i * CELLS_PER_BUTTON - CELLS_PER_BUTTON, layout->MinimumColumnWidth(i * CELLS_PER_BUTTON)); } } m_button_slots[index].connection.disconnect(); m_button_slots.erase(m_button_slots.begin() + index); if (m_button_slots.empty()) { layout->ResizeLayout(1, 1); } else { if (m_orientation == VERTICAL) layout->ResizeLayout(layout->Rows() - CELLS_PER_BUTTON, 1); else layout->ResizeLayout(1, layout->Columns() - CELLS_PER_BUTTON); } if (index == m_checked_button) m_checked_button = NO_BUTTON; else if (index <= m_checked_button) --m_checked_button; Reconnect(); }