void ElementDataGridRow::RemoveChildren(int first_row_removed, int num_rows_removed) { if (num_rows_removed == -1) { num_rows_removed = (int)children.size() - first_row_removed; } // prevent relayout of the document while removing rows Core::ElementDocument* document = parent_grid->GetOwnerDocument(); document->LockLayout(true); for (int i = num_rows_removed - 1; i >= 0; i--) { children[first_row_removed + i]->RemoveChildren(); parent_grid->RemoveRows(children[first_row_removed + i]->GetTableRelativeIndex()); } children.erase(children.begin() + first_row_removed, children.begin() + (first_row_removed + num_rows_removed)); for (int i = first_row_removed; i < (int) children.size(); i++) { children[i]->SetChildIndex(i); children[i]->DirtyTableRelativeIndex(); } document->LockLayout(false); Rocket::Core::Dictionary parameters; parameters.Set("first_row_removed", GetChildTableRelativeIndex(first_row_removed)); parameters.Set("num_rows_removed", num_rows_removed); parent_grid->DispatchEvent("rowremove", parameters); }
void ElementDataGridRow::RemoveChildren(int first_row_removed, int num_rows_removed) { if (num_rows_removed == -1) { num_rows_removed = (int)children.size() - first_row_removed; } for (int i = num_rows_removed - 1; i >= 0; i--) { children[first_row_removed + i]->RemoveChildren(); parent_grid->RemoveRows(children[first_row_removed + i]->GetTableRelativeIndex()); } children.erase(children.begin() + first_row_removed, children.begin() + (first_row_removed + num_rows_removed)); for (int i = first_row_removed; i < (int) children.size(); i++) { children[i]->SetChildIndex(i); children[i]->DirtyTableRelativeIndex(); } Rocket::Core::Dictionary parameters; parameters.Set("first_row_removed", GetChildTableRelativeIndex(first_row_removed)); parameters.Set("num_rows_removed", num_rows_removed); parent_grid->DispatchEvent("rowremove", parameters); }
void ElementDataGridRow::ChangeChildren(int first_row_changed, int num_rows_changed) { for (int i = first_row_changed; i < first_row_changed + num_rows_changed; i++) children[i]->DirtyCells(); Rocket::Core::Dictionary parameters; parameters.Set("first_row_changed", GetChildTableRelativeIndex(first_row_changed)); parameters.Set("num_rows_changed", num_rows_changed); parent_grid->DispatchEvent("rowchange", parameters); }
// Adds children underneath this row, and fetches their contents (and possible // children) from the row's data source. void ElementDataGridRow::AddChildren(int first_row_added, int num_rows_added) { if (first_row_added == -1) { first_row_added = (int)children.size(); } // prevent relayout of the document while adding rows Core::ElementDocument* document = parent_grid->GetOwnerDocument(); document->LockLayout(true); // We need to make a row for each new child, then pass through the cell // information and the child's data source (if one exists.) if (data_source) { for (int i = 0; i < num_rows_added; i++) { int row_index = first_row_added + i; // Make a new row: ElementDataGridRow* new_row = parent_grid->AddRow(this, row_index); children.insert(children.begin() + row_index, new_row); if (!row_expanded) { new_row->SetProperty("display", "none"); } } for (int i = first_row_added + num_rows_added; i < (int)children.size(); i++) { children[i]->SetChildIndex(i); children[i]->DirtyTableRelativeIndex(); } if (parent_row) { parent_row->ChildChanged(child_index); } } document->LockLayout(false); RefreshChildDependentCells(); DirtyRow(); Rocket::Core::Dictionary parameters; parameters.Set("first_row_added", GetChildTableRelativeIndex(first_row_added)); parameters.Set("num_rows_added", num_rows_added); parent_grid->DispatchEvent("rowadd", parameters); }