Пример #1
0
        /// <summary>
        /// ログ表示更新タイマー
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timerLog_Tick(object sender, EventArgs e)
        {
            if (LOG.CheckAndClearRequestFlag())
            {
                var inspos  = listViewLogView.Items.Count;
                var lastseq = inspos == 0 ? -1 : (int)listViewLogView.Items[listViewLogView.Items.Count - 1].Tag;
                LOG.GetCurrent();
                var lu = LOG.GetCurrentLast();

                while (lu != null && lu.Value.Seq > lastseq)
                {
                    string type;
                    switch (lu.Value.Level)
                    {
                    case LLV.WAR: type = "w"; break;

                    case LLV.ERR: type = "e"; break;

                    case LLV.DEV: type = "d"; break;

                    case LLV.INF: type = "i"; break;

                    default: type = "?"; break;
                    }
                    //var type = lu.Value.Level switch
                    //{
                    //    LLV.WAR => "w",
                    //    LLV.ERR => "e",
                    //    LLV.DEV => "d",
                    //    LLV.INF => "i",
                    //    _ => "?",
                    //};
                    var lvi = new ListViewItem(type);
                    lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, DateTime.Now.ToString())).Tag = DateTime.Now;
                    lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, lu.Value.Mes));
                    listViewLogView.Items.Insert(inspos, lvi);
                    lvi.Tag = lu.Value.Seq;
                    if (lu.Value.Level == LLV.ERR)
                    {
                        lvi.BackColor = Color.FromArgb(255, 224, 192);
                    }
                    if (lu.Value.Level == LLV.WAR)
                    {
                        lvi.BackColor = Color.FromArgb(255, 255, 224);
                    }

                    lu = lu.Previous;

                    if (listViewLogView.Items.Count > 10000)    // 多すぎるログは、過去から消して行く
                    {
                        listViewLogView.Items.RemoveAt(0);
                    }
                }
                if (checkBoxAutoScroll.Checked && listViewLogView.Items.Count > 0)
                {
                    listViewLogView.EnsureVisible(listViewLogView.Items.Count - 1);
                }
            }
        }
Пример #2
0
            /// <summary>
            /// 描画
            /// </summary>
            /// <param name="rp"></param>
            /// <returns></returns>
            public override bool Draw(IRichPane rp)
            {
                if (Visible)
                {
                    var sr = rp.GetPaneRect();
                    sr.LT.X += _margin.LT.X;
                    sr.RB.X -= _margin.RB.X;
                    sr.RB.Y -= _margin.RB.Y;

                    if (Rect.Height < 1)
                    {
                        return(true);
                    }

                    #region 領域の矩形
                    var lgb = createLogPanelBG(sr);

                    sr.LT.Y = sr.RB.Y - Rect.Height;

                    rp.Graphics.DrawLine(_pRegionShadow, sr.RB.X, sr.LT.Y, sr.RB.X, sr.RB.Y);
                    rp.Graphics.DrawLine(_pRegionShadow, sr.LT.X, sr.RB.Y, sr.RB.X, sr.RB.Y);

                    rp.Graphics.FillRectangle(lgb, sr);
                    lgb.Dispose();
                    #endregion
                    #region タイトルボーダー
                    Brush _bd = new SolidBrush(Color.FromArgb(64, 0, 0, 0));
                    var   b   = 8;
                    var   w3  = sr.Width / 4;
                    var   pst = new Point[] {
                        new Point(sr.LT.X, sr.LT.Y + b + 16), new Point(sr.LT.X, sr.LT.Y), new Point(sr.RB.X, sr.LT.Y),
                    };
                    var psb = new Point[] {
                        new Point(sr.RB.X, sr.LT.Y + b), new Point(sr.RB.X - w3, sr.LT.Y + b + 2), new Point(sr.RB.X - w3 * 2, sr.LT.Y + b + 8), new Point(sr.RB.X - w3 * 3, sr.LT.Y + b + 16), new Point(sr.LT.X, sr.LT.Y + b + 16),
                    };
                    var ps = new Point[pst.Length + psb.Length];
                    int i;
                    for (i = 0; i < pst.Length; i++)
                    {
                        ps[i] = pst[i];
                    }

                    for (var j = 0; j < psb.Length; j++)
                    {
                        ps[i++] = psb[j];
                    }

                    rp.Graphics.FillPolygon(_bd, ps);
                    _bd.Dispose();
                    // ハイライト
                    using (var p = new Pen(Color.FromArgb(96, 255, 255, 255)))
                    {
                        rp.Graphics.DrawLines(p, pst);
                    }
                    // シャドウ
                    using (var p = new Pen(Color.FromArgb(96, 0, 0, 0)))
                    {
                        rp.Graphics.DrawLines(p, psb);
                    }
                    #endregion

                    // タイトルメッセージ
                    var btr = sr.Clone() as ScreenRect;
                    btr.RB.X = btr.LT.X + 24;
                    btr.RB.Y = btr.LT.Y + 12;
                    btr     += XyBase.FromInt(4, 4);
                    var titlestr = Mes.Current["LogGroupPanel", "Title"];
                    rp.Graphics.DrawString(titlestr, _fontTitle, new SolidBrush(Color.FromArgb(192, 192, 255)), btr.LT.X, btr.LT.Y);
                    btr += XyBase.FromInt((int)rp.Graphics.MeasureString(titlestr, _fontTitle).Width + 8, 0);

                    // 表示レベルボタン
                    _clickArea.Clear();
                    ScreenPos pos;
                    pos = savePos(LLV.ERR, btr.LT + XyBase.FromInt(0 - (int)(LOG.JumpErr.R / 2), LOG.JumpErr.Y));
                    rp.Graphics.DrawImage(LOG.ErrSw ? Properties.Resources.lp_Err_on : Properties.Resources.lp_Err_off, pos.X, pos.Y, (float)(LOG.JumpErr.R + Properties.Resources.lp_Err_on.Width), (float)(LOG.JumpErr.R + Properties.Resources.lp_Err_on.Height));
                    pos = savePos(LLV.WAR, btr.LT + XyBase.FromInt(22 - (int)(LOG.JumpWar.R / 2), LOG.JumpWar.Y));
                    rp.Graphics.DrawImage(LOG.WarSw ? Properties.Resources.lp_War_on : Properties.Resources.lp_War_off, pos.X, pos.Y, (float)(LOG.JumpWar.R + Properties.Resources.lp_War_on.Width), (float)(LOG.JumpWar.R + Properties.Resources.lp_War_on.Height));
                    pos = savePos(LLV.INF, btr.LT + XyBase.FromInt(44 - (int)(LOG.JumpInf.R / 2), LOG.JumpInf.Y));
                    rp.Graphics.DrawImage(LOG.InfSw ? Properties.Resources.lp_Inf_on : Properties.Resources.lp_Inf_off, pos.X, pos.Y, (float)(LOG.JumpInf.R + Properties.Resources.lp_Inf_on.Width), (float)(LOG.JumpInf.R + Properties.Resources.lp_Inf_on.Height));
                    pos = savePos(LLV.DEV, btr.LT + XyBase.FromInt(66 - (int)(LOG.JumpDev.R / 2), LOG.JumpDev.Y));
                    rp.Graphics.DrawImage(LOG.DevSw ? Properties.Resources.lp_Dev_on : Properties.Resources.lp_Dev_off, pos.X, pos.Y, (float)(LOG.JumpDev.R + Properties.Resources.lp_Dev_on.Width), (float)(LOG.JumpDev.R + Properties.Resources.lp_Dev_on.Height));

                    // クローズボタン
                    pos = savePos(0, btr.LT + XyBase.FromInt(100 - (int)(LOG.JumpDev.R / 2), LOG.JumpDev.Y));
                    rp.Graphics.DrawImage(LOG.DevSw ? Properties.Resources.Cancel : Properties.Resources.Cancel, (float)pos.X, pos.Y, 16, 16);

                    // テキスト表示領域のみ
                    sr.Deflate(2);
                    sr.LT.X += 16;
                    sr.LT.Y += b + 16;
                    // for test		rp.Graphics.DrawLine(Pens.White, sr.LT, sr.RB);

                    // メッセージ表示
                    var   ms        = rp.Graphics.MeasureString("AX08iIay", _font);
                    float lm        = 2; // 行間
                    var   y1        = ms.Height + lm;
                    var   dispLineN = (int)(sr.Height / y1);
                    float curN      = LOG.GetCurrentCount();
                    float btY;
                    if (curN < dispLineN)
                    {
                        btY = sr.RB.Y - (int)(dispLineN - curN + 1) * y1;
                    }
                    else
                    {
                        btY = sr.RB.Y - y1;
                    }
                    var lu = LOG.GetCurrentLast();

                    for (; ;)
                    {
                        if (btY < sr.LT.Y - 2 || lu == null)
                        {
                            break;
                        }

                        var br = _bInf;
                        switch (lu.Value.Level)
                        {
                        case LLV.WAR:
                            br = _bWar;
                            break;

                        case LLV.ERR:
                            br = _bErr;
                            break;

                        case LLV.DEV:
                            br = _bDev;
                            break;

                        case LLV.INF:
                            br = _bInf;
                            break;

                        case LLV.TODO:
                            br = _bTodo;
                            break;
                        }
                        rp.Graphics.DrawString(lu.Value.Mes, _font, br, new PointF(sr.LT.X, btY));
                        rp.Graphics.DrawLine(_pLine, sr.LT.X, btY + y1 - 3, sr.RB.X, btY + y1 - 3);
                        if (lu.Value.Icon != null)
                        {
                            rp.Graphics.DrawImageUnscaled(lu.Value.Icon, sr.LT.X - 17, (int)(btY - 1));
                        }
                        btY -= y1;
                        lu   = lu.Previous;
                    }
                }
                return(true);
            }