From 0af7d299c91c7988ea33e7acaf2cbfbea87ff942 Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Wed, 10 Jun 2020 02:07:05 +0200 Subject: [PATCH] FrmWorkLog: Better worklog viewer --- .../UI/Tools/WorkLog/FrmWorkLog.Designer.cs | 5 +- VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.cs | 57 +++++++++++++------ 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.Designer.cs b/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.Designer.cs index 96e4ab7..0e316b1 100644 --- a/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.Designer.cs +++ b/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.Designer.cs @@ -176,14 +176,17 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.lsbWorkLog.BackColor = System.Drawing.Color.Black; + this.lsbWorkLog.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; this.lsbWorkLog.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lsbWorkLog.ForeColor = System.Drawing.Color.Gray; this.lsbWorkLog.FormattingEnabled = true; + this.lsbWorkLog.ItemHeight = 12; this.lsbWorkLog.Location = new System.Drawing.Point(3, 60); this.lsbWorkLog.Name = "lsbWorkLog"; this.lsbWorkLog.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; - this.lsbWorkLog.Size = new System.Drawing.Size(436, 537); + this.lsbWorkLog.Size = new System.Drawing.Size(436, 532); this.lsbWorkLog.TabIndex = 0; + this.lsbWorkLog.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.lsbWorkLog_DrawItem); this.lsbWorkLog.SelectedIndexChanged += new System.EventHandler(this.lsbWorkLog_SelectedIndexChanged); // // dtEnd diff --git a/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.cs b/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.cs index 094ec18..a83c19a 100644 --- a/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.cs +++ b/VAR.Toolbox/UI/Tools/WorkLog/FrmWorkLog.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.IO; -using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; using VAR.Json; @@ -198,6 +198,22 @@ namespace VAR.Toolbox.UI.Tools.WorkLog dtToday.Value = dtToday.Value.Date.AddDays(1); } + private void lsbWorkLog_DrawItem(object sender, DrawItemEventArgs e) + { + if (e.Index < 0) return; + + if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) + { + e.Graphics.FillRectangle(Brushes.DarkRed, e.Bounds); + e.Graphics.DrawString(lsbWorkLog.Items[e.Index].ToString(), lsbWorkLog.Font, Brushes.Black, e.Bounds); + } + else + { + e.Graphics.FillRectangle(Brushes.Black, e.Bounds); + e.Graphics.DrawString(lsbWorkLog.Items[e.Index].ToString(), lsbWorkLog.Font, Brushes.Gray, e.Bounds); + } + } + #endregion UI events #region Private methods @@ -306,8 +322,13 @@ namespace VAR.Toolbox.UI.Tools.WorkLog private void WorkLog_Refresh() { + int selectedIndex = lsbWorkLog.SelectedIndex; DateTime today = dtToday.Value; lsbWorkLog_BindData(_workLog, today.Year, today.Month, today.Day); + if (selectedIndex > -1) + { + lsbWorkLog.SelectedIndex = selectedIndex; + } } private WorkLogItem _currentWorkLogItem = null; @@ -353,6 +374,7 @@ namespace VAR.Toolbox.UI.Tools.WorkLog public void lsbWorkLog_BindData(IEnumerable items, int year, int month, int day, int q = 15) { + int topIndex = lsbWorkLog.TopIndex; List rows = new List(); for (int h = 0; h < 24; h++) { @@ -373,20 +395,21 @@ namespace VAR.Toolbox.UI.Tools.WorkLog } lsbWorkLog.Items.Clear(); lsbWorkLog.Items.AddRange(rows.ToArray()); + lsbWorkLog.TopIndex = topIndex; - EnableRepaint(new HandleRef(lsbWorkLog, lsbWorkLog.Handle), true); - lsbWorkLog.Invalidate(); + //EnableRepaint(new HandleRef(lsbWorkLog, lsbWorkLog.Handle), true); + //lsbWorkLog.Invalidate(); } - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] - private static extern IntPtr SendMessage(HandleRef hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam); + //[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] + //private static extern IntPtr SendMessage(HandleRef hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam); - private static void EnableRepaint(HandleRef handle, bool enable) - { - const int WM_SETREDRAW = 0x000B; - SendMessage(handle, WM_SETREDRAW, new IntPtr(enable ? 1 : 0), IntPtr.Zero); - } + //private static void EnableRepaint(HandleRef handle, bool enable) + //{ + // const int WM_SETREDRAW = 0x000B; + // SendMessage(handle, WM_SETREDRAW, new IntPtr(enable ? 1 : 0), IntPtr.Zero); + //} #endregion Private methods @@ -417,32 +440,30 @@ namespace VAR.Toolbox.UI.Tools.WorkLog { if (Item.DateEnd >= DateStart && Item.DateEnd <= DateEnd) { - sbRow.Append("- "); + sbRow.Append("─ "); sbRow.Append(Item.Activity); sbRow.Append(" "); - sbRow.Append(new string('-', (rowLenght - textLenght) + 1)); + sbRow.Append(new string('─', (rowLenght - textLenght) + 1)); } else { sbRow.Append("┌ "); sbRow.Append(Item.Activity); sbRow.Append(" "); - sbRow.Append(new string('-', rowLenght - textLenght)); + sbRow.Append(new string('─', rowLenght - textLenght)); sbRow.Append("┐"); } } else if (Item.DateEnd >= DateStart && Item.DateEnd <= DateEnd) { - sbRow.Append("└ "); - sbRow.Append(Item.Activity); - sbRow.Append(" "); - sbRow.Append(new string('-', rowLenght - textLenght)); + sbRow.Append("└"); + sbRow.Append(new string('─', rowLenght)); sbRow.Append("┘"); } else { sbRow.Append("│"); - sbRow.Append(new string('#', rowLenght)); + sbRow.Append(new string(' ', rowLenght)); sbRow.Append("│"); } return sbRow.ToString();