3
3
4
4
from gi .repository import Gtk
5
5
6
- from artiq .gui .tools import Window , ListSyncer
6
+ from artiq .gui .tools import Window , ListSyncer , DictSyncer
7
7
from artiq .management .sync_struct import Subscriber
8
8
9
9
@@ -16,16 +16,12 @@ def convert(self, x):
16
16
return row
17
17
18
18
19
- class _PeriodicStoreSyncer :
20
- def __init__ (self , periodic_store , init ):
21
- self .periodic_store = periodic_store
22
- self .periodic_store .clear ()
23
- self .order = []
24
- for prid , x in sorted (init .items (), key = lambda e : (e [1 ][0 ], e [0 ])):
25
- self .periodic_store .append (self ._convert (prid , x ))
26
- self .order .append ((x [0 ], prid ))
19
+ class _PeriodicStoreSyncer (DictSyncer ):
20
+ def order_key (self , kv_pair ):
21
+ # order by next run time, and then by PRID
22
+ return (kv_pair [1 ][0 ], kv_pair [0 ])
27
23
28
- def _convert (self , prid , x ):
24
+ def convert (self , prid , x ):
29
25
next_run , run_params , timeout , period = x
30
26
row = [time .strftime ("%m/%d %H:%M:%S" , time .localtime (next_run )),
31
27
prid , run_params ["file" ]]
@@ -34,34 +30,6 @@ def _convert(self, prid, x):
34
30
row .append (str (period ))
35
31
return row
36
32
37
- def _find_index (self , prid ):
38
- for i , e in enumerate (self .periodic_store ):
39
- if e [1 ] == prid :
40
- return i
41
- raise KeyError
42
-
43
- def __setitem__ (self , prid , x ):
44
- try :
45
- i = self ._find_index (prid )
46
- except KeyError :
47
- pass
48
- else :
49
- del self .periodic_store [i ]
50
- del self .order [i ]
51
- ord_el = (x [0 ], prid )
52
- j = len (self .order )
53
- for i , o in enumerate (self .order ):
54
- if o > ord_el :
55
- j = i
56
- break
57
- self .periodic_store .insert (j , self ._convert (prid , x ))
58
- self .order .insert (j , ord_el )
59
-
60
- def __delitem__ (self , key ):
61
- i = self ._find_index (key )
62
- del self .periodic_store [i ]
63
- del self .order [i ]
64
-
65
33
66
34
class SchedulerWindow (Window ):
67
35
def __init__ (self ):
0 commit comments