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 import os
34 import time
35 import rospy
36 import roslib
37
38 try:
39 from python_qt_binding import QtCore
40 except:
41 pass
42
44 '''
45 A class to watch for file changes.
46 '''
47 file_changed = QtCore.Signal(str, list)
48 '''@ivar: a signal to inform the receiver about the changes on
49 launch file or included file. ParameterB{:} (changed file, list of tuples(masteruri, launch file))'''
50
57
62
64 '''
65 callback method, which is called by L{QtCore.QFileSystemWatcher} if the
66 launch file or included files are changed. In this case
67 L{FileWatcher.file_changed} signal will be emitted.
68 '''
69
70 if (not self.changed.has_key(file) or (self.changed.has_key(file) and self.changed[file] + 0.05 < time.time())):
71 self.changed[file] = time.time()
72 changes = []
73 for (uri, lfile, id), files in self.launches.items():
74 if file in files:
75 changes.append((uri, lfile))
76 self.file_changed.emit(file, changes)
77
78 - def add(self, masteruri, launch_file, launch_id, files):
79 if self.launches.has_key((masteruri, launch_file, launch_id)):
80 self.launches[(masteruri, launch_file, launch_id)].extend([os.path.normpath(f) for f in files])
81 else:
82 self.launches[(masteruri, launch_file, launch_id)] = [os.path.normpath(f) for f in files]
83 self.update_files()
84
85 - def rem(self, masteruri, launch_file='', launch_id=''):
86 try:
87 if launch_file:
88 if launch_id:
89 del self.launches[(masteruri, launch_file, launch_id)]
90 else:
91 for (uri, file, id), files in self.launches.items():
92 if uri == masteruri and file == launch_file:
93 del self.launches[(uri, file, id)]
94 else:
95 for (uri, file, id), files in self.launches.items():
96 if uri == masteruri:
97 del self.launches[(uri, file, id)]
98 except:
99
100
101 pass
102 self.update_files()
103
105 result = set()
106 for files in self.launches.itervalues():
107 result.update(set(files))
108 files = self.file_watcher.files()
109 if files:
110 self.file_watcher.removePaths(files)
111 if list(result):
112 self.file_watcher.addPaths(list(result))
113