Mercurial > repos > snowblizz-super-API-ideas
changeset 261:b9b8b0e60c31
Re #281: Export multiple stat lines in HTML
* Add initial version of multiple stat lines per unit - still needs some work
Also:
* Line ending cleanup
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 29 May 2010 20:03:17 +0000 |
parents | b72cc74a240b |
children | 900adf96a915 |
files | api/Exporters/WarFoundryHtmlExporter.cs api/Factories/Xml/WarFoundryXmlFactory.cs |
diffstat | 2 files changed, 122 insertions(+), 44 deletions(-) [+] |
line wrap: on
line diff
--- a/api/Exporters/WarFoundryHtmlExporter.cs Fri May 21 19:41:02 2010 +0000 +++ b/api/Exporters/WarFoundryHtmlExporter.cs Sat May 29 20:03:17 2010 +0000 @@ -21,6 +21,7 @@ public class WarFoundryHtmlExporter : IWarFoundryExporter { private static WarFoundryHtmlExporter exporter; + private delegate string GetStatCellTextDelegate(Stat stat); public static WarFoundryHtmlExporter GetDefault() { @@ -56,7 +57,8 @@ metaCharset.SetAttribute("content", "text/html;charset=UTF-8"); head.AppendChild(metaCharset); XmlElement style = doc.CreateElement("style"); - style.InnerText = "table, th, td { border: 1px solid #000 }"; + style.InnerText = "table, th, td { border: 1px solid #000; border-spacing: 0 }" + + "table table { width: 100% }"; head.AppendChild(style); XmlElement body = doc.CreateElement("body"); html.AppendChild(body); @@ -100,11 +102,22 @@ foreach (Unit unit in army.GetUnits()) { - tables[unit.UnitType.StatsID].AppendChild(CreateUnitRow(unit, doc)); + tables[GetFirstStatType(unit)].AppendChild(CreateUnitRow(unit, doc)); } return DictionaryUtils.ToArray(tables); } + + private static string GetFirstStatType(Unit unit) + { + string[] unitStatIDs = unit.UnitStatsArrayIDs; + return GetFirstStatType(unitStatIDs); + } + + public static string GetFirstStatType(string[] unitStatIDs) + { + return unitStatIDs[0]; + } private XmlElement CreateTable(SystemStats stats, XmlDocument doc) { @@ -115,6 +128,10 @@ name.InnerText = Translation.GetTranslation("armyHtmlOutputTableHeaderUnitName", "name"); headerRow.AppendChild(name); + XmlElement unitTypeName = doc.CreateElement("th"); + unitTypeName.InnerText = Translation.GetTranslation("armyHtmlOutputTableHeaderUnitTypeName", "type name"); + headerRow.AppendChild(unitTypeName); + foreach (StatSlot stat in stats.StatSlots) { XmlElement statHeader = doc.CreateElement("th"); @@ -139,13 +156,7 @@ XmlElement name = doc.CreateElement("td"); name.InnerText = unit.Name; row.AppendChild(name); - - foreach (Stat stat in unit.UnitStatsArray) - { - XmlElement statCell = doc.CreateElement("td"); - statCell.InnerText = stat.SlotValueString; - row.AppendChild(statCell); - } + CreateStatsBlock(unit, row); StringBuilder sb = new StringBuilder(); UnitEquipmentItem[] unitEquipment = unit.GetEquipment (); @@ -233,6 +244,73 @@ return row; } + private void CreateStatsBlock(Unit unit, XmlElement unitRow) + { + XmlDocument doc = unitRow.OwnerDocument; + XmlElement statsWrapperCell = doc.CreateElement("td"); + unitRow.AppendChild(statsWrapperCell); + Stat[][] memberStats = unit.UnitStatsArraysWithName; + statsWrapperCell.SetAttribute("colspan", memberStats[0].Length.ToString()); + string[] statTypeIDs = unit.UnitStatsArrayIDs; + string defaultStatType = GetFirstStatType(statTypeIDs); + Dictionary<string, XmlElement> statTables = CreateEmptyStatsTables(statTypeIDs, statsWrapperCell); + + int statCount = statTypeIDs.Length; + + for (int i = 0; i < statCount; i++) + { + Stat[] statLine = memberStats[i]; + string statTypeID = statTypeIDs[i]; + XmlElement tableElement = DictionaryUtils.GetValue(statTables, statTypeID); + int statLineCount = statLine.Length; + XmlElement statRow = doc.CreateElement("tr"); + tableElement.AppendChild(statRow); + GetStatCellTextDelegate statCellTextDelegate = (statTypeID.Equals(defaultStatType) ? new GetStatCellTextDelegate(GetDefaultStatCellText) : new GetStatCellTextDelegate(GetOtherStatCellText)); + AddStatCell(statLine[0].SlotValueString, statRow); + + for (int j = 1; j < statLineCount; j++) + { + string statText = statCellTextDelegate(statLine[j]); + AddStatCell(statText, statRow); + } + } + } + + private Dictionary<string, XmlElement> CreateEmptyStatsTables(string[] statTypeIDs, XmlElement containerCell) + { + Dictionary<string, XmlElement> statTables = new Dictionary<string, XmlElement>(); + XmlDocument doc = containerCell.OwnerDocument; + + foreach (string statTypeID in statTypeIDs) + { + if (!statTables.ContainsKey(statTypeID)) + { + XmlElement tableElement = doc.CreateElement("table"); + containerCell.AppendChild(tableElement); + statTables[statTypeID] = tableElement; + } + } + + return statTables; + } + + private string GetDefaultStatCellText(Stat stat) + { + return Translation.GetTranslation("armyHtmlExportDefaultStatCellText", "{0}", stat.SlotValueString, stat.ParentSlotName); + } + + private string GetOtherStatCellText(Stat stat) + { + return Translation.GetTranslation("armyHtmlExportOtherStatCellText", "{1}: {0}", stat.SlotValueString, stat.ParentSlotName); + } + + private static void AddStatCell(string statValue, XmlElement row) + { + XmlElement statCell = row.OwnerDocument.CreateElement("td"); + statCell.InnerText = statValue; + row.AppendChild(statCell); + } + private string GetEquipmentAmountRatioTranslation (double amount, int number) { return Translation.GetTranslation ("armyHtmlExportEquipAmountPercentage", "{0}% ({1})", amount, number);
--- a/api/Factories/Xml/WarFoundryXmlFactory.cs Fri May 21 19:41:02 2010 +0000 +++ b/api/Factories/Xml/WarFoundryXmlFactory.cs Sat May 29 20:03:17 2010 +0000 @@ -133,42 +133,42 @@ public override void CompleteLoading(IWarFoundryStagedLoadObject obj) { - LogNotifier.DebugFormat(GetType(), "Complete loading of {0} with ID {1}", obj.GetType().Name, obj.ID); - - if (obj is GameSystem) - { - CompleteLoadingGameSystem((GameSystem) obj); - } - else if (obj is Race) - { - CompleteLoadingRace((Race) obj); + LogNotifier.DebugFormat(GetType(), "Complete loading of {0} with ID {1}", obj.GetType().Name, obj.ID); + + if (obj is GameSystem) + { + CompleteLoadingGameSystem((GameSystem) obj); + } + else if (obj is Race) + { + CompleteLoadingRace((Race) obj); + } + } + + private void CompleteLoadingRace(Race race) + { + try + { + raceFactory.CompleteLoading(race); } - } - - private void CompleteLoadingRace(Race race) - { - try - { - raceFactory.CompleteLoading(race); - } - catch (InvalidFileException ex) - { - WarFoundryLoader.GetDefault().RemoveRace(race); - throw; - } - } - - private void CompleteLoadingGameSystem(GameSystem system) - { - try - { - gameSystemFactory.CompleteLoading(system); - } - catch (InvalidFileException ex) - { - WarFoundryLoader.GetDefault().RemoveGameSystem(system); - throw; - } + catch (InvalidFileException ex) + { + WarFoundryLoader.GetDefault().RemoveRace(race); + throw; + } + } + + private void CompleteLoadingGameSystem(GameSystem system) + { + try + { + gameSystemFactory.CompleteLoading(system); + } + catch (InvalidFileException ex) + { + WarFoundryLoader.GetDefault().RemoveGameSystem(system); + throw; + } } } } \ No newline at end of file