void ResultList::saveToFile(QXmlStreamWriter* stream) { int num_rows = rowCount(); int num_columns = columnCount(); stream->writeStartElement("ResultList"); stream->writeAttribute("title", title); stream->writeAttribute("decimal_places", QString::number(decimal_places)); stream->writeAttribute("decimal_factor", QString::number(decimal_factor)); stream->writeAttribute("column_category", QString::number(column_category)); stream->writeAttribute("column_rank", QString::number(column_rank)); stream->writeAttribute("column_first_runner", QString::number(column_first_runner)); stream->writeAttribute("column_last_runner", QString::number(column_last_runner)); stream->writeAttribute("column_club", QString::number(column_club)); stream->writeAttribute("column_status", QString::number(column_status)); stream->writeAttribute("column_time", QString::number(column_time)); stream->writeAttribute("column_points", QString::number(column_points)); stream->writeAttribute("column_additional_start", QString::number(column_additional_start)); stream->writeAttribute("column_additional_end", QString::number(column_additional_end)); stream->writeAttribute("num_rows", QString::number(num_rows)); stream->writeAttribute("num_cols", QString::number(num_columns)); for (int i = 0; i < num_columns; ++i) { stream->writeEmptyElement("Column"); stream->writeAttribute("type", QString::number(static_cast<int>(columnTypes[i]))); stream->writeAttribute("label", columnLabel[i]); } for (int i = 0; i < num_rows; ++i) { stream->writeStartElement("Row"); for (int k = 0; k < num_columns; ++k) { stream->writeEmptyElement("Value"); ColumnType type = columnTypes[k]; switch (type) { case ColumnRank: case ColumnTime: case ColumnResult: stream->writeAttribute("v", QString::number(columns[k][i].toInt())); break; case ColumnCategory: stream->writeAttribute("v", reinterpret_cast<AbstractCategory*>(columns[k][i].value<void*>())->name); break; case ColumnRunner: { Runner* runner = reinterpret_cast<Runner*>(columns[k][i].value<void*>()); stream->writeAttribute("i", QString::number(runner->getID())); stream->writeAttribute("f", runner->getFirstName()); stream->writeAttribute("l", runner->getLastName()); stream->writeAttribute("m", runner->isMale() ? "yes" : "no"); stream->writeAttribute("y", QString::number(runner->getYear())); break; } case ColumnClub: { Club* club = reinterpret_cast<Club*>(columns[k][i].value<void*>()); stream->writeAttribute("v", club ? club->getName() : ""); stream->writeAttribute("i", club ? QString::number(club->getID()) : "-1"); break; } case ColumnPoints: case ColumnPointInfo: stream->writeAttribute("v", columns[k][i].isValid() ? QString::number(columns[k][i].toInt()) : "-"); break; } } stream->writeEndElement(); } stream->writeEndElement(); }