// // Methods // /** * 追加先を指定してエリアを追加 * * @input logArea: 追加するログエリア * @input parentName: 追加先の親エリア名 */ public void AddArea(LogArea logArea) { if (logArea.ParentArea == null) { // 最後に追加したエリアと同じ階層(同じ親の下)に追加する if (lastAddArea != null) { if (lastAddArea.ParentArea != null) { lastAddArea.ParentArea.AddChildArea(logArea); } else { rootArea.AddChildArea(logArea); } } else { rootArea.AddChildArea(logArea); } } else { // 指定した親の下に追加 logArea.ParentArea.AddChildArea(logArea); } lastAddArea = logArea; }
/** * 1行分のフィールドからエリアデータを取得する * @input fields: * @output 取得したエリアデータ */ private LogArea GetMemAreaText(Dictionary <string, string> fields, MemLogAreaManager manager) { LogArea area = new LogArea(); // area,name:"area1",parent:"root",color=FF000000, image="icon1" foreach (KeyValuePair <string, string> kvp in fields) { if (kvp.Value != null) { switch (kvp.Key.ToLower()) { case "name": area.Name = kvp.Value; break; case "parent": area.ParentArea = manager.searchArea(kvp.Value); break; case "color": area.Color = Convert.ToUInt32(kvp.Value, 16); break; case "image": area.Image = images.GetImage(kvp.Value); break; } } } return(area); }
/** * ログの本体部分を取得 * <body>~</body> の中の行をすべて取得する * */ private MemLogAreaManager GetLogDataText(StreamReader sr) { MemLogAreaManager manager = new MemLogAreaManager(); while (!sr.EndOfStream) { string line = sr.ReadLine().Trim(); Dictionary <string, string> fields = SplitLineStr(line); if (fields.Count == 0) { continue; } // 終了判定 if (line.Equals("</body>")) { return(manager); } else if (fields.ContainsKey("area")) { LogArea area = GetMemAreaText(fields, manager); manager.AddArea(area); } else if (fields.ContainsKey("log")) { LogData log = GetMemLogText(fields); manager.AddLogData(log); } } return(null); }
// // Methods // /** * 配下にエリアを追加 */ public void AddChildArea(LogArea logArea) { if (childArea == null) { childArea = new List <LogArea>(); } logArea.parentArea = this; childArea.Add(logArea); }
/** * バイナリエリアデータを読み込む */ private void ReadLogAreaBin(UFileStream fs) { LogArea area = new LogArea(); // エリア名の長さ // エリア名 area.Name = fs.GetSizeString(); // 親のエリア名の長さ // 親のエリア名 area.ParentArea = areaManager.searchArea(fs.GetSizeString()); // 色 area.Color = fs.GetUInt32(); // エリアを追加 areaManager.AddArea(area); }
/** * 指定の名前のエリアを探す * ※エリアを追加できるポイントは、自分の親(親の親も含む)に限られるのでその範囲で探す * @input name: 探すエリア名 */ public LogArea searchArea(string name) { // 1つもエリアを追加していない場合はルート if (lastAddArea == null) { return(rootArea); } LogArea area = lastAddArea; while (area != rootArea) { if (area.Name.Equals(name)) { return(area); } area = area.ParentArea; } // 見つからなかった場合はルート return(rootArea); }
public LogArea(UInt32 id, string name, UInt32 color, LogArea parentArea) : this() { this.name = name; this.color = color; this.parentArea = parentArea; }
/** * Constructor */ public MemLogAreaManager() { rootArea = new LogArea(); lastAddArea = rootArea; }