66,6 → 66,19 |
|
private void MainForm_KeyPress(object sender, KeyPressEventArgs e) |
{ |
int n; |
try { |
n = int.Parse(e.KeyChar.ToString()); |
} |
catch(Exception ex) { |
n = -1; // NaN |
} |
|
if(n >= 0 && n < times.Length) |
{ |
times[n].Reset(DateTime.Now); |
ShowTime(); |
} |
} |
|
private void MainForm_Load(object sender, EventArgs e) |
144,10 → 157,6 |
|
g.DrawString(i.ToString(), fontSmall, brushSmall, x, y + dy * i); |
g.DrawString(str, fontBig, brushBig, x + dx, y + dy * i); |
|
if(times[i].Paused) { |
g.DrawString("\u25CF", fontSmall, brushSmall, x, y + dy * (i + 0.3f)); |
} |
} |
} |
catch(Exception ex) |
167,46 → 176,13 |
Start(Count); |
} |
} |
|
private void MainForm_KeyDown(object sender, KeyEventArgs e) |
{ |
if(e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) { |
int n = (e.KeyCode - Keys.D0); |
|
if(n >= 0 && n < times.Length) |
{ |
TimeState time = times[n]; |
DateTime now = DateTime.Now; |
|
if(e.Control) { |
if(time.Paused) { |
time.Continue(now); |
} |
else { |
time.Pause(now); |
} |
} |
else { |
time.Reset(now); |
} |
|
ShowTime(); |
} |
} |
} |
} |
|
class TimeState |
{ |
private TimeSpan collected; |
private DateTime begin; |
private DateTime last; |
|
private bool paused; |
public bool Paused { |
get { return paused; } |
} |
|
public TimeState(DateTime now) |
{ |
Reset(now); |
214,45 → 190,21 |
|
public void Reset(DateTime now) |
{ |
collected = TimeSpan.Zero; |
begin = now; |
last = DateTime.MinValue; |
paused = false; |
begin = now; |
last = DateTime.MinValue; |
} |
|
public void Pause(DateTime now) |
{ |
collected = collected.Add(now.Subtract(begin)); |
paused = true; |
} |
|
public void Continue(DateTime now) |
{ |
begin = now; |
last = DateTime.MinValue; |
paused = false; |
} |
|
public bool IsChanged(DateTime now) |
{ |
TimeSpan diff = now.Subtract(last); |
|
return (diff.TotalSeconds >= 1.0); |
|
return (diff.TotalSeconds > 0); |
} |
|
public TimeSpan GetDiff(DateTime now) |
{ |
last = now; |
|
TimeSpan diff; |
if(paused) { |
diff = collected; |
} |
else { |
diff = now.Subtract(begin).Add(collected); |
} |
|
return diff; |
return now.Subtract(begin); |
} |
} |
} |