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();
}