Пример #1
0
        //
        // 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;
        }
Пример #2
0
        /**
         * 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);
        }
Пример #3
0
        /**
         * ログの本体部分を取得
         * <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);
        }
Пример #4
0
        //
        // Methods
        //

        /**
         * 配下にエリアを追加
         */
        public void AddChildArea(LogArea logArea)
        {
            if (childArea == null)
            {
                childArea = new List <LogArea>();
            }
            logArea.parentArea = this;
            childArea.Add(logArea);
        }
Пример #5
0
        /**
         * バイナリエリアデータを読み込む
         */
        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);
        }
Пример #6
0
        /**
         * 指定の名前のエリアを探す
         * ※エリアを追加できるポイントは、自分の親(親の親も含む)に限られるのでその範囲で探す
         * @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);
        }
Пример #7
0
 public LogArea(UInt32 id, string name, UInt32 color, LogArea parentArea) : this()
 {
     this.name       = name;
     this.color      = color;
     this.parentArea = parentArea;
 }
Пример #8
0
 /**
  * Constructor
  */
 public MemLogAreaManager()
 {
     rootArea    = new LogArea();
     lastAddArea = rootArea;
 }