FrmWorkLog.
This commit is contained in:
213
VAR.Toolbox/UI/Tools/FrmWorkLog.Designer.cs
generated
Normal file
213
VAR.Toolbox/UI/Tools/FrmWorkLog.Designer.cs
generated
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
namespace VAR.Toolbox.UI.Tools
|
||||||
|
{
|
||||||
|
partial class FrmWorkLog
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.splitWindow = new System.Windows.Forms.SplitContainer();
|
||||||
|
this.btnNextDay = new System.Windows.Forms.Button();
|
||||||
|
this.btnPreviousDay = new System.Windows.Forms.Button();
|
||||||
|
this.dtToday = new System.Windows.Forms.DateTimePicker();
|
||||||
|
this.lsbWorkLog = new System.Windows.Forms.ListBox();
|
||||||
|
this.dtEnd = new System.Windows.Forms.DateTimePicker();
|
||||||
|
this.dtStart = new System.Windows.Forms.DateTimePicker();
|
||||||
|
this.txtDescription = new System.Windows.Forms.TextBox();
|
||||||
|
this.txtActivity = new System.Windows.Forms.TextBox();
|
||||||
|
this.btnDelete = new System.Windows.Forms.Button();
|
||||||
|
this.btnAdd = new System.Windows.Forms.Button();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.splitWindow)).BeginInit();
|
||||||
|
this.splitWindow.Panel1.SuspendLayout();
|
||||||
|
this.splitWindow.Panel2.SuspendLayout();
|
||||||
|
this.splitWindow.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// splitWindow
|
||||||
|
//
|
||||||
|
this.splitWindow.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.splitWindow.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.splitWindow.Name = "splitWindow";
|
||||||
|
//
|
||||||
|
// splitWindow.Panel1
|
||||||
|
//
|
||||||
|
this.splitWindow.Panel1.Controls.Add(this.btnNextDay);
|
||||||
|
this.splitWindow.Panel1.Controls.Add(this.btnPreviousDay);
|
||||||
|
this.splitWindow.Panel1.Controls.Add(this.dtToday);
|
||||||
|
this.splitWindow.Panel1.Controls.Add(this.lsbWorkLog);
|
||||||
|
//
|
||||||
|
// splitWindow.Panel2
|
||||||
|
//
|
||||||
|
this.splitWindow.Panel2.Controls.Add(this.dtEnd);
|
||||||
|
this.splitWindow.Panel2.Controls.Add(this.dtStart);
|
||||||
|
this.splitWindow.Panel2.Controls.Add(this.txtDescription);
|
||||||
|
this.splitWindow.Panel2.Controls.Add(this.txtActivity);
|
||||||
|
this.splitWindow.Panel2.Controls.Add(this.btnDelete);
|
||||||
|
this.splitWindow.Panel2.Controls.Add(this.btnAdd);
|
||||||
|
this.splitWindow.Size = new System.Drawing.Size(721, 603);
|
||||||
|
this.splitWindow.SplitterDistance = 442;
|
||||||
|
this.splitWindow.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// btnNextDay
|
||||||
|
//
|
||||||
|
this.btnNextDay.Location = new System.Drawing.Point(154, 33);
|
||||||
|
this.btnNextDay.Name = "btnNextDay";
|
||||||
|
this.btnNextDay.Size = new System.Drawing.Size(33, 20);
|
||||||
|
this.btnNextDay.TabIndex = 2;
|
||||||
|
this.btnNextDay.Text = "->";
|
||||||
|
this.btnNextDay.UseVisualStyleBackColor = true;
|
||||||
|
this.btnNextDay.Click += new System.EventHandler(this.btnNextDay_Click);
|
||||||
|
//
|
||||||
|
// btnPreviousDay
|
||||||
|
//
|
||||||
|
this.btnPreviousDay.Location = new System.Drawing.Point(3, 33);
|
||||||
|
this.btnPreviousDay.Name = "btnPreviousDay";
|
||||||
|
this.btnPreviousDay.Size = new System.Drawing.Size(33, 20);
|
||||||
|
this.btnPreviousDay.TabIndex = 1;
|
||||||
|
this.btnPreviousDay.Text = "<-";
|
||||||
|
this.btnPreviousDay.UseVisualStyleBackColor = true;
|
||||||
|
this.btnPreviousDay.Click += new System.EventHandler(this.btnPreviousDay_Click);
|
||||||
|
//
|
||||||
|
// dtToday
|
||||||
|
//
|
||||||
|
this.dtToday.CustomFormat = "yyyy/MM/dd";
|
||||||
|
this.dtToday.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
|
||||||
|
this.dtToday.Location = new System.Drawing.Point(42, 33);
|
||||||
|
this.dtToday.Name = "dtToday";
|
||||||
|
this.dtToday.Size = new System.Drawing.Size(106, 20);
|
||||||
|
this.dtToday.TabIndex = 0;
|
||||||
|
this.dtToday.ValueChanged += new System.EventHandler(this.dtToday_ValueChanged);
|
||||||
|
//
|
||||||
|
// lsbWorkLog
|
||||||
|
//
|
||||||
|
this.lsbWorkLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.lsbWorkLog.BackColor = System.Drawing.Color.Black;
|
||||||
|
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.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.TabIndex = 0;
|
||||||
|
this.lsbWorkLog.SelectedIndexChanged += new System.EventHandler(this.lsbWorkLog_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// dtEnd
|
||||||
|
//
|
||||||
|
this.dtEnd.CustomFormat = "yyyy/MM/ddThh:mm:ss";
|
||||||
|
this.dtEnd.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
|
||||||
|
this.dtEnd.Location = new System.Drawing.Point(4, 60);
|
||||||
|
this.dtEnd.Name = "dtEnd";
|
||||||
|
this.dtEnd.Size = new System.Drawing.Size(155, 20);
|
||||||
|
this.dtEnd.TabIndex = 5;
|
||||||
|
this.dtEnd.ValueChanged += new System.EventHandler(this.dtEnd_ValueChanged);
|
||||||
|
//
|
||||||
|
// dtStart
|
||||||
|
//
|
||||||
|
this.dtStart.CustomFormat = "yyyy/MM/ddThh:mm:ss";
|
||||||
|
this.dtStart.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
|
||||||
|
this.dtStart.Location = new System.Drawing.Point(4, 33);
|
||||||
|
this.dtStart.Name = "dtStart";
|
||||||
|
this.dtStart.Size = new System.Drawing.Size(155, 20);
|
||||||
|
this.dtStart.TabIndex = 4;
|
||||||
|
this.dtStart.ValueChanged += new System.EventHandler(this.dtStart_ValueChanged);
|
||||||
|
//
|
||||||
|
// txtDescription
|
||||||
|
//
|
||||||
|
this.txtDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.txtDescription.Location = new System.Drawing.Point(4, 119);
|
||||||
|
this.txtDescription.Multiline = true;
|
||||||
|
this.txtDescription.Name = "txtDescription";
|
||||||
|
this.txtDescription.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||||
|
this.txtDescription.Size = new System.Drawing.Size(259, 472);
|
||||||
|
this.txtDescription.TabIndex = 3;
|
||||||
|
this.txtDescription.TextChanged += new System.EventHandler(this.txtDescription_TextChanged);
|
||||||
|
//
|
||||||
|
// txtActivity
|
||||||
|
//
|
||||||
|
this.txtActivity.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.txtActivity.Location = new System.Drawing.Point(3, 93);
|
||||||
|
this.txtActivity.Name = "txtActivity";
|
||||||
|
this.txtActivity.Size = new System.Drawing.Size(259, 20);
|
||||||
|
this.txtActivity.TabIndex = 2;
|
||||||
|
this.txtActivity.TextChanged += new System.EventHandler(this.txtActivity_TextChanged);
|
||||||
|
//
|
||||||
|
// btnDelete
|
||||||
|
//
|
||||||
|
this.btnDelete.Location = new System.Drawing.Point(84, 3);
|
||||||
|
this.btnDelete.Name = "btnDelete";
|
||||||
|
this.btnDelete.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.btnDelete.TabIndex = 1;
|
||||||
|
this.btnDelete.Text = "Delete";
|
||||||
|
this.btnDelete.UseVisualStyleBackColor = true;
|
||||||
|
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
|
||||||
|
//
|
||||||
|
// btnAdd
|
||||||
|
//
|
||||||
|
this.btnAdd.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.btnAdd.Name = "btnAdd";
|
||||||
|
this.btnAdd.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.btnAdd.TabIndex = 0;
|
||||||
|
this.btnAdd.Text = "Add";
|
||||||
|
this.btnAdd.UseVisualStyleBackColor = true;
|
||||||
|
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
|
||||||
|
//
|
||||||
|
// FrmWorkLog
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(721, 603);
|
||||||
|
this.Controls.Add(this.splitWindow);
|
||||||
|
this.Name = "FrmWorkLog";
|
||||||
|
this.Text = "WorkLog";
|
||||||
|
this.splitWindow.Panel1.ResumeLayout(false);
|
||||||
|
this.splitWindow.Panel2.ResumeLayout(false);
|
||||||
|
this.splitWindow.Panel2.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.splitWindow)).EndInit();
|
||||||
|
this.splitWindow.ResumeLayout(false);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.SplitContainer splitWindow;
|
||||||
|
private System.Windows.Forms.DateTimePicker dtToday;
|
||||||
|
private System.Windows.Forms.ListBox lsbWorkLog;
|
||||||
|
private System.Windows.Forms.TextBox txtDescription;
|
||||||
|
private System.Windows.Forms.TextBox txtActivity;
|
||||||
|
private System.Windows.Forms.Button btnDelete;
|
||||||
|
private System.Windows.Forms.Button btnAdd;
|
||||||
|
private System.Windows.Forms.DateTimePicker dtEnd;
|
||||||
|
private System.Windows.Forms.DateTimePicker dtStart;
|
||||||
|
private System.Windows.Forms.Button btnNextDay;
|
||||||
|
private System.Windows.Forms.Button btnPreviousDay;
|
||||||
|
}
|
||||||
|
}
|
||||||
322
VAR.Toolbox/UI/Tools/FrmWorkLog.cs
Normal file
322
VAR.Toolbox/UI/Tools/FrmWorkLog.cs
Normal file
@@ -0,0 +1,322 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace VAR.Toolbox.UI.Tools
|
||||||
|
{
|
||||||
|
public partial class FrmWorkLog : Form, IToolForm
|
||||||
|
{
|
||||||
|
#region IToolForm
|
||||||
|
|
||||||
|
public string ToolName { get { return "WorkLog"; } }
|
||||||
|
|
||||||
|
public bool HasIcon { get { return false; } }
|
||||||
|
|
||||||
|
#endregion IToolForm
|
||||||
|
|
||||||
|
#region Form life cycle
|
||||||
|
|
||||||
|
public FrmWorkLog()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
WorkLog_LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Form life cycle
|
||||||
|
|
||||||
|
#region UI events
|
||||||
|
|
||||||
|
private bool _selecting = false;
|
||||||
|
|
||||||
|
private void lsbWorkLog_SelectedIndexChanged(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
if (_selecting) { return; }
|
||||||
|
_selecting = true;
|
||||||
|
WorkLogRow row = lsbWorkLog.SelectedItem as WorkLogRow;
|
||||||
|
if (row == null)
|
||||||
|
{
|
||||||
|
lsbWorkLog.ClearSelected();
|
||||||
|
_selecting = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (row.Item == null)
|
||||||
|
{
|
||||||
|
WorkLogItem_Show(null);
|
||||||
|
DateTime dateStart = DateTime.MaxValue;
|
||||||
|
DateTime dateEnd = DateTime.MinValue;
|
||||||
|
foreach (WorkLogRow rowAux in lsbWorkLog.SelectedItems)
|
||||||
|
{
|
||||||
|
if (rowAux.DateStart < dateStart) { dateStart = rowAux.DateStart; }
|
||||||
|
if (rowAux.DateEnd > dateEnd) { dateEnd = rowAux.DateEnd; }
|
||||||
|
}
|
||||||
|
dtStart.Value = dateStart;
|
||||||
|
dtEnd.Value = dateEnd;
|
||||||
|
|
||||||
|
_selecting = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < lsbWorkLog.Items.Count; i++)
|
||||||
|
{
|
||||||
|
WorkLogRow auxRow = lsbWorkLog.Items[i] as WorkLogRow;
|
||||||
|
lsbWorkLog.SetSelected(i, (row.Item == auxRow.Item));
|
||||||
|
}
|
||||||
|
WorkLogItem_Show(row.Item);
|
||||||
|
_selecting = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnAdd_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
WorkLogItem item = new WorkLogItem
|
||||||
|
{
|
||||||
|
DateStart = dtStart.Value,
|
||||||
|
DateEnd = dtEnd.Value,
|
||||||
|
Activity = txtActivity.Text,
|
||||||
|
Description = txtDescription.Text,
|
||||||
|
};
|
||||||
|
_workLog.Add(item);
|
||||||
|
WorkLog_Refresh();
|
||||||
|
WorkLog_SelectDate(item.DateStart);
|
||||||
|
WorkLogItem_Show(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnDelete_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
if (_currentWorkLogItem == null) { return; }
|
||||||
|
if (MessageBox.Show("Delete Log?", "Delete Log?", MessageBoxButtons.YesNo) != DialogResult.Yes)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_workLog.Remove(_currentWorkLogItem);
|
||||||
|
WorkLog_Refresh();
|
||||||
|
WorkLogItem_Show(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dtStart_ValueChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
WorkLogItem_Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dtEnd_ValueChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
WorkLogItem_Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void txtActivity_TextChanged(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
WorkLogItem_Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void txtDescription_TextChanged(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
WorkLogItem_Update(refresh: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dtToday_ValueChanged(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
WorkLog_Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnPreviousDay_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
dtToday.Value = dtToday.Value.Date.AddDays(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnNextDay_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
dtToday.Value = dtToday.Value.Date.AddDays(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion UI events
|
||||||
|
|
||||||
|
#region Private methods
|
||||||
|
|
||||||
|
private List<WorkLogItem> _workLog = null;
|
||||||
|
|
||||||
|
private void WorkLog_LoadData()
|
||||||
|
{
|
||||||
|
_workLog = new List<WorkLogItem>();
|
||||||
|
WorkLog_Refresh();
|
||||||
|
WorkLog_SelectDate(DateTime.Now);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WorkLog_SelectDate(DateTime date)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < lsbWorkLog.Items.Count; i++)
|
||||||
|
{
|
||||||
|
WorkLogRow row = lsbWorkLog.Items[i] as WorkLogRow;
|
||||||
|
if (row.DateEnd > date)
|
||||||
|
{
|
||||||
|
lsbWorkLog.SetSelected(i, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WorkLog_Refresh()
|
||||||
|
{
|
||||||
|
DateTime today = dtToday.Value;
|
||||||
|
lsbWorkLog_BindData(_workLog, today.Year, today.Month, today.Day);
|
||||||
|
}
|
||||||
|
|
||||||
|
private WorkLogItem _currentWorkLogItem = null;
|
||||||
|
|
||||||
|
private void WorkLogItem_Show(WorkLogItem item)
|
||||||
|
{
|
||||||
|
_currentWorkLogItem = null;
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
dtStart.Value = DateTime.UtcNow.Date;
|
||||||
|
dtEnd.Value = DateTime.UtcNow.Date;
|
||||||
|
txtActivity.Text = string.Empty;
|
||||||
|
txtDescription.Text = string.Empty;
|
||||||
|
btnAdd.Enabled = true;
|
||||||
|
btnDelete.Enabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dtStart.Value = item.DateStart;
|
||||||
|
dtEnd.Value = item.DateEnd;
|
||||||
|
txtActivity.Text = item.Activity;
|
||||||
|
txtDescription.Text = item.Description;
|
||||||
|
|
||||||
|
btnAdd.Enabled = false;
|
||||||
|
btnDelete.Enabled = true;
|
||||||
|
_currentWorkLogItem = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WorkLogItem_Update(bool refresh = true)
|
||||||
|
{
|
||||||
|
if (_currentWorkLogItem == null) { return; }
|
||||||
|
_currentWorkLogItem.DateStart = dtStart.Value;
|
||||||
|
_currentWorkLogItem.DateEnd = dtEnd.Value;
|
||||||
|
_currentWorkLogItem.Activity = txtActivity.Text;
|
||||||
|
_currentWorkLogItem.Description = txtDescription.Text;
|
||||||
|
if (refresh)
|
||||||
|
{
|
||||||
|
WorkLog_Refresh();
|
||||||
|
WorkLog_SelectDate(_currentWorkLogItem.DateStart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void lsbWorkLog_BindData(IEnumerable<WorkLogItem> items, int year, int month, int day, int q = 15)
|
||||||
|
{
|
||||||
|
List<WorkLogRow> rows = new List<WorkLogRow>();
|
||||||
|
for (int h = 0; h < 24; h++)
|
||||||
|
{
|
||||||
|
for (int m = 0; m < 60; m += q)
|
||||||
|
{
|
||||||
|
DateTime dateStart = new DateTime(year, month, day, h, m, 0);
|
||||||
|
DateTime dateEnd = dateStart.AddMinutes(q);
|
||||||
|
WorkLogRow row = new WorkLogRow { DateStart = dateStart, DateEnd = dateEnd, };
|
||||||
|
if (items != null)
|
||||||
|
{
|
||||||
|
foreach (WorkLogItem item in items)
|
||||||
|
{
|
||||||
|
row.SetItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rows.Add(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lsbWorkLog.Items.Clear();
|
||||||
|
lsbWorkLog.Items.AddRange(rows.ToArray());
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WorkLogRow
|
||||||
|
{
|
||||||
|
public DateTime DateStart { get; set; }
|
||||||
|
public DateTime DateEnd { get; set; }
|
||||||
|
public WorkLogItem Item { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
StringBuilder sbRow = new StringBuilder();
|
||||||
|
|
||||||
|
sbRow.AppendFormat("{0:00}:{1:00} ", DateStart.Hour, DateStart.Minute);
|
||||||
|
|
||||||
|
if (Item == null)
|
||||||
|
{
|
||||||
|
return sbRow.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
int rowLenght = 30;
|
||||||
|
int textLenght = Item.Activity.Length + 2;
|
||||||
|
if (textLenght > rowLenght) { rowLenght = textLenght; }
|
||||||
|
|
||||||
|
if (Item.DateStart >= DateStart && Item.DateStart < DateEnd)
|
||||||
|
{
|
||||||
|
if (Item.DateEnd >= DateStart && Item.DateEnd <= DateEnd)
|
||||||
|
{
|
||||||
|
sbRow.Append("- ");
|
||||||
|
sbRow.Append(Item.Activity);
|
||||||
|
sbRow.Append(" ");
|
||||||
|
sbRow.Append(new string('-', (rowLenght - textLenght) + 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sbRow.Append("┌ ");
|
||||||
|
sbRow.Append(Item.Activity);
|
||||||
|
sbRow.Append(" ");
|
||||||
|
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("┘");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sbRow.Append("│");
|
||||||
|
sbRow.Append(new string('#', rowLenght));
|
||||||
|
sbRow.Append("│");
|
||||||
|
}
|
||||||
|
return sbRow.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetItem(WorkLogItem item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
Item = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.DateStart >= DateEnd || item.DateEnd <= DateStart) { return; }
|
||||||
|
|
||||||
|
Item = item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WorkLogItem
|
||||||
|
{
|
||||||
|
public DateTime DateStart { get; set; }
|
||||||
|
public DateTime DateEnd { get; set; }
|
||||||
|
public string Activity { get; set; }
|
||||||
|
public string Description { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -195,6 +195,12 @@
|
|||||||
<DependentUpon>FrmWebcam.cs</DependentUpon>
|
<DependentUpon>FrmWebcam.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="UI\IToolForm.cs" />
|
<Compile Include="UI\IToolForm.cs" />
|
||||||
|
<Compile Include="UI\Tools\FrmWorkLog.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UI\Tools\FrmWorkLog.Designer.cs">
|
||||||
|
<DependentUpon>FrmWorkLog.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="UI\Tools\PnlActivity.cs">
|
<Compile Include="UI\Tools\PnlActivity.cs">
|
||||||
<SubType>UserControl</SubType>
|
<SubType>UserControl</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|||||||
Reference in New Issue
Block a user