-
Notifications
You must be signed in to change notification settings - Fork 0
/
ListaTemporizadores.cs
168 lines (150 loc) · 5.47 KB
/
ListaTemporizadores.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace Avisador
{
public delegate void HoraSiguienteEventHandler(string hora, int segundosRestantes);
public delegate void TemporizadorEventHandler(temporizador temp);
public partial class ListaTemporizadores : UserControl
{
List<temporizador> temporitzadors;
Semaphore semafor;
public event TemporizadorEventHandler TemporizadorSiguiente;
public event HoraSiguienteEventHandler Hora;
public ListaTemporizadores()
{
InitializeComponent();
semafor = new Semaphore(1, 1);
temporitzadors = new List<temporizador>();
pnlTemp.BringToFront();
pnlTemp.AutoScroll = true;
}
public string HoraSiguiente()
{
Actual.EsElSiguiente = false;
temporizador temporizadorS = Siguiente;
temporizadorS.EsElSiguiente = true;
string hora = (DateTime.Now + temporizadorS.DTiempo).ToShortTimeString();
if (Hora != null)
Hora(hora, Convert.ToInt32(temporizadorS.DTiempo.TotalSeconds));
if (TemporizadorSiguiente != null)
TemporizadorSiguiente(Siguiente);
return hora;
}
public void PonerTemporizador(temporizador temporizador)
{
Actual.EsElSiguiente = false;
temporizador.EsElSiguiente = true;
if (Hora != null)
Hora((DateTime.Now + temporizador.DTiempo).ToShortTimeString(), Convert.ToInt32(temporizador.DTiempo.TotalSeconds));
if (TemporizadorSiguiente != null)
TemporizadorSiguiente(Siguiente);
}
public void Añadir(temporizador temporizador)
{
semafor.WaitOne();
pnlTemp.Controls.Add(temporizador);
if (temporitzadors.Count != 0)
temporizador.Location = new Point(0, temporizador.Height + temporitzadors[temporitzadors.Count - 1].Location.Y);
else
{
temporizador.Location = new Point(0, 0);
temporizador.EsElSiguiente = true;
}
temporizador.Click += new EventHandler(SeleccionaTempEvent);
temporitzadors.Add(temporizador);
temporizador.Quitar += new EventHandler(QuitarEvent);
if (TemporizadorSiguiente != null)
TemporizadorSiguiente(Siguiente);
semafor.Release();
}
private void SeleccionaTempEvent(object sender, EventArgs e)
{
PonerTemporizador(sender as temporizador);
}
public void Reset()
{ pnlTemp.Controls.Clear(); temporitzadors.Clear(); semafor = new Semaphore(1, 1); }
private void QuitarEvent(object sender, EventArgs e)
{
Avisador.temporizador temp = sender as temporizador;
if (temp != null)
{
temp.Quitar -= QuitarEvent;
Quitar(temp);
}
}
public void Quitar(temporizador temporitzador)
{
semafor.WaitOne();
temporizador temSeg = null;
if (temporitzador.EsElSiguiente)
{
HoraSiguiente();
temSeg = Siguiente;
temSeg.EsElSiguiente = true;
if (Hora != null)
Hora((DateTime.Now + temSeg.DTiempo).ToShortTimeString(), Convert.ToInt32(temSeg.DTiempo.TotalSeconds));
}
temporitzadors.Remove(temporitzador);
pnlTemp.Controls.Remove(temporitzador);
Avisador.temporizador tempAnt = new temporizador();
tempAnt.Location = new Point(0, -tempAnt.Height);
for (int i = 0; i < temporitzadors.Count; i++)
{
temporitzadors[i].Location = new Point(temporitzadors[i].Location.X, tempAnt.Height + tempAnt.Location.Y);
tempAnt = temporitzadors[i];
}
if (TemporizadorSiguiente != null)
TemporizadorSiguiente(Siguiente);
semafor.Release();
}
public temporizador Siguiente
{
get
{
try
{
return temporitzadors[IndexSiguiente];
}
catch { return null; }
}
}
private int IndexSiguiente
{
get
{
int indexSeg = IndexActual;
if (indexSeg == temporitzadors.Count - 1)
indexSeg = 0;
else
indexSeg++;
return indexSeg;
}
}
public temporizador Actual
{
get
{
return temporitzadors[IndexActual];
}
}
private int IndexActual
{
get
{
int index = -1;
for (int i = 0; i < temporitzadors.Count && index == -1; i++)
if (temporitzadors[i].EsElSiguiente)
index = i;
return index;
}
}
}
}