##// END OF EJS Templates
#para prueba de verificacion de datos en el proceso de grabacion
ralonso -
r83:84
parent child
Show More
@@ -1,332 +1,356
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 #class BKmanager:
3 #class BKmanager:
4 # def __init__(self):
4 # def __init__(self):
5
5
6 from subprocess import *
6 from subprocess import *
7 import sys
7 import sys
8 import os
8 import os
9 import subprocess
9 import subprocess
10 import commands
10 import commands
11 import shutil
11 import shutil
12 import functions2
12 import functions2
13
13
14 #--------------------------------------------- Entero a cadena agregando ceros delante -------------------------------------------------
14 #--------------------------------------------- Entero a cadena agregando ceros delante -------------------------------------------------
15
15
16 def i2s(var_n, var_length=4):
16 def i2s(var_n, var_length=4):
17 var_n2=str(var_n)
17 var_n2=str(var_n)
18 while len(var_n2) < var_length:
18 while len(var_n2) < var_length:
19 var_n2 = "0"+var_n2
19 var_n2 = "0"+var_n2
20 return var_n2
20 return var_n2
21
21
22
22
23 #----------------------------------------- Se verifica que la ruta exista y sea un directorio -------------------------------------------------
23 #----------------------------------------- Se verifica que la ruta exista y sea un directorio -------------------------------------------------
24
24
25 def dir_exists(var_dir, self):
25 def dir_exists(var_dir, self):
26 if os.path.isdir(var_dir):
26 if os.path.isdir(var_dir):
27 return True
27 return True
28 else:
28 else:
29 self.txtInfo.append("Incorrect path:" + str(var_dir))
29 self.txtInfo.append("Incorrect path:" + str(var_dir))
30 return False
30 return False
31
31
32
32
33 #-------------------------------- Se buscan los archivos del tipo especificado y se cargan las fechas -----------------------------
33 #-------------------------------- Se buscan los archivos del tipo especificado y se cargan las fechas -----------------------------
34
34
35 def load_days(self):
35 def load_days(self):
36
36
37 self.var_list=[]
37 self.var_list=[]
38 self.lstStartDay.clear()
38 self.lstStartDay.clear()
39 self.lstStopDay.clear()
39 self.lstStopDay.clear()
40
40
41 if self.statusDpath == False:
41 if self.statusDpath == False:
42 self.btnGbkp.setEnabled(False)
42 self.btnGbkp.setEnabled(False)
43 return
43 return
44
44
45 if self.var_Dtype == '':
45 if self.var_Dtype == '':
46 return
46 return
47
47
48 var_cmd="find " + str(self.var_Dpath) + " -name *."+ str(self.var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq"
48 var_cmd="find " + str(self.var_Dpath) + " -name *."+ str(self.var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq"
49 output=commands.getstatusoutput(var_cmd)[1]
49 output=commands.getstatusoutput(var_cmd)[1]
50
50
51 #Si no se encuentra ningun archivo
51 #Si no se encuentra ningun archivo
52 if len(output) == 0:
52 if len(output) == 0:
53 self.txtInfo.append("File not found")
53 self.txtInfo.append("File not found")
54 self.btnGbkp.setEnabled(False)
54 self.btnGbkp.setEnabled(False)
55 return
55 return
56
56
57 #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox)
57 #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox)
58 for i in range(0, (len(output)+1)/8):
58 for i in range(0, (len(output)+1)/8):
59 self.var_list.append(output[8*i:8*(i+1)-1])
59 self.var_list.append(output[8*i:8*(i+1)-1])
60
60
61 for i in self.var_list:
61 for i in self.var_list:
62 self.lstStartDay.addItem(i)
62 self.lstStartDay.addItem(i)
63 self.lstStopDay.addItem(i)
63 self.lstStopDay.addItem(i)
64 self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1)
64 self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1)
65
65
66 get_sub_list(self)
66 get_sub_list(self)
67 self.btnGbkp.setEnabled(True)
67 self.btnGbkp.setEnabled(True)
68
68
69
69
70 #-------------------------------------------------- Obtiene el rango de las fechas seleccionadas -----------------------------------------
70 #-------------------------------------------------- Obtiene el rango de las fechas seleccionadas -----------------------------------------
71
71
72 def get_sub_list(self):
72 def get_sub_list(self):
73 self.var_sublist=[]
73 self.var_sublist=[]
74 for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]:
74 for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]:
75 self.var_sublist.append(i)
75 self.var_sublist.append(i)
76
76
77
77
78 #----------------------------------------------------- Verifica los parametros faltantes -----------------------------------------------------------
78 #----------------------------------------------------- Verifica los parametros faltantes -----------------------------------------------------------
79
79
80 def validate_parameters(self):
80 def validate_parameters(self):
81 #Verifica que las ruta del proyecto sea valida
81 #Verifica que las ruta del proyecto sea valida
82 if self.statusRpath == False:
82 if self.statusRpath == False:
83 self.txtInfo.append("Incorrect proyect path")
83 self.txtInfo.append("Incorrect proyect path")
84 return False
84 return False
85
85
86 #Verifica la etiqueta
86 #Verifica la etiqueta
87 if len(self.var_Elabel) == 0:
87 if len(self.var_Elabel) == 0:
88 self.txtInfo.append("Enter label")
88 self.txtInfo.append("Enter label")
89 return False
89 return False
90
90
91 return True
91 return True
92
92
93
93
94 #------------------------------------------------- Crea directorios en la ruta indicada -----------------------------------------------------------
94 #------------------------------------------------- Crea directorios en la ruta indicada -----------------------------------------------------------
95
95
96 def make_dirs(list_dirs, self):
96 def make_dirs(list_dirs, self):
97 """
97
98
99 """
100
101 for var_dir in list_dirs:
98 for var_dir in list_dirs:
102 shutil.rmtree(self.var_Rpath+'/'+var_dir, True)
99 shutil.rmtree(self.var_Rpath+'/'+var_dir, True)
103 var_output=commands.getstatusoutput("mkdir -p "+self.var_Rpath+'/'+var_dir)[0]
100 var_output=commands.getstatusoutput("mkdir -p "+self.var_Rpath+'/'+var_dir)
104 if var_output != 0:
101 if var_output[0] != 0:
105 self.txtInfo.append("Error creating directory: "+var_dir+", output_error:" + str(var_output))
102 self.txtInfo.append("Error creating directory: "+var_dir+", output_error:" + str(var_output[0]))
106 return False
103 return False
107 self.txtInfo.append('Directories created correctly')
104 self.txtInfo.append('Directories created correctly')
108 return True
105 return True
109
106
110
107 def remove_dir(var_dir, self):
108 var_output = commands.getstatusoutput('chmod -R 777 '+var_dir)
109 if var_output[0] != 0:
110 self.txtInfo.append("Error changing permissions: "+var_dir+", output_error:" + str(var_output[0]))
111 return False
112
113 var_output = commands.getstatusoutput('rm -rf '+var_dir)
114 if var_output[0] != 0:
115 self.txtInfo.append("Error deleting directory: "+var_dir+", output_error:" + str(var_output[0]))
116 return False
117 return True
118
119 def make_dir(var_dir, self):
120 var_output = commands.getstatusoutput('mkdir '+var_dir)
121 if var_output[0] != 0:
122 self.txtInfo.append("Error deleting directory: "+var_dir+", output_error:" + str(var_output[0]))
123 return False
124 return True
125
111 #-------------------------------------------- Busca los archivos con los parametros de busqueda ---------------------------------------
126 #-------------------------------------------- Busca los archivos con los parametros de busqueda ---------------------------------------
112
127
113 def list_files(self):
128 def list_files(self):
114 var_files_list=[]
129 var_files_list=[]
115 for var_doy in self.var_sublist:
130 for var_doy in self.var_sublist:
116 var_cmd="find " + str(self.var_Dpath) + " -name ?"+var_doy+"???."+ str(self.var_Dtype) + " |sort"
131 var_cmd="find " + str(self.var_Dpath) + " -name ?"+var_doy+"???."+ str(self.var_Dtype) + " |sort"
117 var_output=commands.getstatusoutput(var_cmd)[1]
132 var_output=commands.getstatusoutput(var_cmd)[1]
118 for var_file in var_output.split():
133 for var_file in var_output.split():
119 var_files_list.append(var_file) #Almacena cada archivo en la lista
134 var_files_list.append(var_file) #Almacena cada archivo en la lista
120 return var_files_list
135 return var_files_list
121
136
122
137
123 #--------------- Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD -----------------------
138 #--------------- Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD -----------------------
124
139
125 def make_files_dat(var_files_list, self):
140 def make_files_dat(var_files_list, self):
126 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
141 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
127 var_n=1 #Numero del DVD actual
142 var_n=1 #Numero del DVD actual
128 var_tmp=0 #Se usa para acumular el tamaΓ±o de los archivos de la lista
143 var_tmp=0 #Se usa para acumular el tamaΓ±o de los archivos de la lista
129 var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD
144 var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD
130
145
131 for i in var_files_list: #Se asignan en i los archivos de la lista
146 for i in var_files_list: #Se asignan en i los archivos de la lista
132
147
133 var_size_i=os.path.getsize(i)/1024+1 #tamaΓ±o en KB del archivo de la lista, se suma 1 KB para evitar problemas al momento de sumar
148 var_size_i=os.path.getsize(i)/1024+1 #tamaΓ±o en KB del archivo de la lista, se suma 1 KB para evitar problemas al momento de sumar
134 var_tmp += var_size_i #Se acumulan el tamaΓ±o de los archivos de la lista
149 var_tmp += var_size_i #Se acumulan el tamaΓ±o de los archivos de la lista
135
150
136 #Si el tamaΓ±o acumulado es mayor que el de el DVD
151 #Si el tamaΓ±o acumulado es mayor que el de el DVD
137 if var_tmp > (self.var_Dcapacity * 1024):
152 if var_tmp > (self.var_Dcapacity * 1024):
138 var_tmp -= var_size_i #se quita el tamaΓ±o sumado para mostrar el tamaΓ±o real
153 var_tmp -= var_size_i #se quita el tamaΓ±o sumado para mostrar el tamaΓ±o real
139 #se crea un archivo con numeral en el sufijo y extension .dat
154 #se crea un archivo con numeral en el sufijo y extension .dat
140 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
155 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
141 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
156 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
142 for line in var_files_list_2:
157 for line in var_files_list_2:
143 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
158 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
144 var_file.write(var_tmp_path+'='+line+'\n')
159 var_file.write(var_tmp_path+'='+line+'\n')
145 var_file.close()
160 var_file.close()
146
161
147 var_tmp = var_size_i #Se asigna a la variable el tamaΓ±o del archivo actual
162 var_tmp = var_size_i #Se asigna a la variable el tamaΓ±o del archivo actual
148 var_files_list_2=[] #Se reinicia la lista
163 var_files_list_2=[] #Se reinicia la lista
149 var_n += 1
164 var_n += 1
150 var_files_list_2.append(i)
165 var_files_list_2.append(i)
151
166
152 #se crea un archivo con numeral en el sufijo y extension .dat
167 #se crea un archivo con numeral en el sufijo y extension .dat
153 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
168 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
154 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
169 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
155 for line in var_files_list_2:
170 for line in var_files_list_2:
156 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
171 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
157 var_file.write(var_tmp_path+'='+line+'\n')
172 var_file.write(var_tmp_path+'='+line+'\n')
158 var_file.close()
173 var_file.close()
159
174
160 self.txtInfo.append("configuration files created")
175 self.txtInfo.append("configuration files created")
161 return var_n
176 return var_n
162
177
163
178
164 #------------------------------ Genera los archivos .print con los cuales se creara los postscript -----------------------------------
179 #------------------------------ Genera los archivos .print con los cuales se creara los postscript -----------------------------------
165
180
166 def make_files_print(self):
181 def make_files_print(self):
167
182
168 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
183 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
169 var_Rpath_gpath=self.var_Rpath+"/gpath" #Ruta de los archivos postscript
184 var_Rpath_gpath=self.var_Rpath+"/gpath" #Ruta de los archivos postscript
170 var_labels=[]
185 var_labels=[]
171 for m in range (0, self.txtPSgraphic.value() - 1):
186 for m in range (0, self.txtPSgraphic.value() - 1):
172 var_lines = "\n" * 9
187 var_lines = "\n" * 9
173 var_labels.append(var_lines)
188 var_labels.append(var_lines)
174
189
175 # Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .print
190 # Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .print
176 for var_n in range(1, self.var_Discs + 1):
191 for var_n in range(1, self.var_Discs + 1):
177
192
178 #se abren los archivos .dat en modo lectura
193 #se abren los archivos .dat en modo lectura
179 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","r")
194 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","r")
180 lines=var_file.readlines() # Se lee las lineas en el archivo y se almacenan en la lista
195 lines=var_file.readlines() # Se lee las lineas en el archivo y se almacenan en la lista
181 var_file.close()
196 var_file.close()
182 list_files=[]
197 list_files=[]
183 var_lines=[]
198 var_lines=[]
184
199
185 for j in range(0, len(lines)):
200 for j in range(0, len(lines)):
186
201
187 if j == 0:
202 if j == 0:
188 var_first_folder = lines[j].split('=')[0]
203 var_first_folder = lines[j].split('=')[0]
189 var_first_file = (lines[j].split('=')[1])[:-1]
204 var_first_file = (lines[j].split('=')[1])[:-1]
190 continue
205 continue
191
206
192 var_tmp_folder = lines[j].split('=')[0]
207 var_tmp_folder = lines[j].split('=')[0]
193 var_tmp_file = (lines[j].split('=')[1])[:-1]
208 var_tmp_file = (lines[j].split('=')[1])[:-1]
194
209
195 # Si el subfolder superior o el DOY del archivo actual y el anterior son diferentes
210 # Si el subfolder superior o el DOY del archivo actual y el anterior son diferentes
196 if (var_tmp_folder != var_first_folder) or (var_tmp_file[0:-5] != var_first_file[0:-5]):
211 if (var_tmp_folder != var_first_folder) or (var_tmp_file[0:-5] != var_first_file[0:-5]):
197 var_last_file = (lines[j-1].split('=')[1])[:-1]
212 var_last_file = (lines[j-1].split('=')[1])[:-1]
198 list_files.append([var_first_folder, var_first_file, var_last_file])
213 list_files.append([var_first_folder, var_first_file, var_last_file])
199
214
200 var_first_folder = lines[j].split('=')[0]
215 var_first_folder = lines[j].split('=')[0]
201 var_first_file = (lines[j].split('=')[1])[:-1]
216 var_first_file = (lines[j].split('=')[1])[:-1]
202
217
203 var_last_file = (lines[-1].split('=')[1])[:-1]
218 var_last_file = (lines[-1].split('=')[1])[:-1]
204 list_files.append([var_first_folder, var_first_file, var_last_file])
219 list_files.append([var_first_folder, var_first_file, var_last_file])
205
220
206 var_lines2 = lines_print(list_files, self.var_Elabel)
221 var_lines2 = lines_print(list_files, self.var_Elabel)
207
222
208 for k in range(0, len(var_lines2) / 5):
223 for k in range(0, len(var_lines2) / 5):
209 var_lines=["\n"]
224 var_lines=["\n"]
210 var_lines.append(" "+self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_Discs)+"\n")
225 var_lines.append(" "+self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_Discs)+"\n")
211 var_lines.append("Year Doy Folder"+" "*9+"Set"+" "*11+"Time range\n")
226 var_lines.append("Year Doy Folder"+" "*9+"Set"+" "*11+"Time range\n")
212 var_lines.extend(var_lines2[(5*k):(5*(k+1))])
227 var_lines.extend(var_lines2[(5*k):(5*(k+1))])
213 var_lines.append("\n")
228 var_lines.append("\n")
214 var_labels.append(var_lines)
229 var_labels.append(var_lines)
215
230
216 for i in range(0, (len(var_labels) // 33) +1 ):
231 for i in range(0, (len(var_labels) // 33) +1 ):
217 var_file=var_Rpath_gpath+"/"+self.var_Elabel+"_"+i2s(i+1)
232 var_file=var_Rpath_gpath+"/"+self.var_Elabel+"_"+i2s(i+1)
218 file_ps = open(var_file+".print","w")
233 file_ps = open(var_file+".print","w")
219 if i == (len(var_labels) // 33):
234 if i == (len(var_labels) // 33):
220 var_sub_labels = var_labels[33*i:]
235 var_sub_labels = var_labels[33*i:]
221 else:
236 else:
222 var_sub_labels = var_labels[33*i:33*(i+1)]
237 var_sub_labels = var_labels[33*i:33*(i+1)]
223
238
224 for label in var_sub_labels:
239 for label in var_sub_labels:
225 for line in label:
240 for line in label:
226 file_ps.write(line)
241 file_ps.write(line)
227 file_ps.close()
242 file_ps.close()
228 var_cmd="enscript "+var_file+".print -p "+var_file+".ps -f Times-Roman7 " \
243 var_cmd="enscript "+var_file+".print -p "+var_file+".ps -f Times-Roman7 " \
229 +" -3R -j -B --margins=21.25:20.4:25.51:20 --media=A4"
244 +" -3R -j -B --margins=21.25:20.4:25.51:20 --media=A4"
230 var_output=commands.getstatusoutput(var_cmd)[0]
245 var_output=commands.getstatusoutput(var_cmd)[0]
231
246
232
247
233 def lines_print(list_files, var_Elabel):
248 def lines_print(list_files, var_Elabel):
234 """
249 """
235 Devuelve las lineas del rango de archivos de cada etiqueta segun el formato
250 Devuelve las lineas del rango de archivos de cada etiqueta segun el formato
236 """
251 """
237 var_lines=[]
252 var_lines=[]
238 for i in list_files:
253 for i in list_files:
239
254
240 # Si el archivo se grabara directamente en la / del DVD y no en un /directorio/
255 # Si el archivo se grabara directamente en la / del DVD y no en un /directorio/
241 # se usa la etiqueta para indicar la parte de la etiqueta donde va el subdirectorio
256 # se usa la etiqueta para indicar la parte de la etiqueta donde va el subdirectorio
242 if i[0] == '/':
257 if i[0] == '/':
243 var_folder = var_Elabel
258 var_folder = var_Elabel
244 else:
259 else:
245 var_folder = i[0].split('/')[-2]
260 var_folder = i[0].split('/')[-2]
246
261
247 var_first_file = i[1]
262 var_first_file = i[1]
248 var_last_file = i[2]
263 var_last_file = i[2]
249
264
250 var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1]
265 var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1]
251 var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1]
266 var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1]
252
267
253 var_lines.append(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+"-"
268 var_lines.append(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+"-"
254 +var_last_file[-5:-2]+" "+var_date_first_file+"-"+var_date_last_file+"\n")
269 +var_last_file[-5:-2]+" "+var_date_first_file+"-"+var_date_last_file+"\n")
255 #Nos aseguramos que sea un mutiplo de 5
270 #Nos aseguramos que sea un mutiplo de 5
256 while (len(var_lines) % 5) != 0:
271 while (len(var_lines) % 5) != 0:
257 var_lines.append("\n")
272 var_lines.append("\n")
258
273
259 return var_lines
274 return var_lines
260
275
261 #---------------------------------------comandos para el proceso de grabacion ------------------------------------------
276 #---------------------------------------comandos para el proceso de grabacion ------------------------------------------
262 def cmd_iso(self):
277 def cmd_iso(self):
263 var_Rpath_ppath=self.var_Rpath+"/ppath"
278 var_Rpath_ppath=self.var_Rpath+"/ppath"
264 var_Rpath_iso=self.var_Rpath+"/iso"
279 var_Rpath_iso=self.var_Rpath+"/iso"
265 #comando para la creacion del archivo.iso
280 #comando para la creacion del archivo.iso
266 file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(self.var_disc_n)+".dat"
281 file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(self.var_disc_n)+".dat"
267 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
282 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
268 var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
283 var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
269 var_cmd += ' -A '+self.var_Elabel+' -V '+self.var_Elabel
284 var_cmd += ' -A '+self.var_Elabel+' -V '+self.var_Elabel
270 var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
285 var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
271 return var_cmd
286 return var_cmd
272
287
273 def cmd_burn(self):
288 def cmd_burn(self):
274 var_Rpath_iso=self.var_Rpath+"/iso"
289 var_Rpath_iso=self.var_Rpath+"/iso"
275 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
290 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
276
291
277 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
292 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
278 var_dev_tmp = self.var_devices[var_index]
293 var_dev_tmp = self.var_devices[var_index]
279
294
280 # var_cmd = "wodim -v dev="+var_dev_tmp+" speed=16 "+ file_iso
295 # var_cmd = "wodim -v dev="+var_dev_tmp+" speed=16 "+ file_iso
281 var_cmd = "growisofs -dvd-compat -Z "+var_dev_tmp+"="+ file_iso
296 var_cmd = "growisofs -dvd-compat -Z "+var_dev_tmp+"="+ file_iso
282 return var_cmd
297 return var_cmd
283
298
284 def cmd_check(self):
299
285 var_cmd = "echo 'function check'"
300 def cmd_check(dev_sr, self):
286 return var_cmd
301
302 var_Rpath_tmpdata=self.var_Rpath+"/tmpdata"
303
304 var_output=commands.getstatusoutput('df -hT | grep '+dev_sr)
305 if var_output[0] != 0:
306 return "FATAL ERROR"
307 else:
308 var_cmd = "cp -rfv "+var_output[1] .split()[-1]+"/ "+var_Rpath_tmpdata+"/"
309 return var_cmd
310
287
311
288 def remove_iso(self):
312 def remove_iso(self):
289 var_Rpath_iso=self.var_Rpath+"/iso"
313 var_Rpath_iso=self.var_Rpath+"/iso"
290 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
314 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
291 # shutil.rmtree(self.var_Rpath+'/'+var_dir, True)
315 # shutil.rmtree(self.var_Rpath+'/'+var_dir, True)
292 if os.path.isfile(file_iso):
316 if os.path.isfile(file_iso):
293 os.remove(file_iso)
317 os.remove(file_iso)
294
318
295 #Si es el ultimo disco se termina el proceso
319 #Si es el ultimo disco se termina el proceso
296 def is_last_disc_and_copy(self):
320 def is_last_disc_and_copy(self):
297 if self.var_disc_n == self.var_Discs and self.var_copy_n == self.var_Copys:
321 if self.var_disc_n == self.var_Discs and self.var_copy_n == self.var_Copys:
298 self.function_final()
322 self.function_final()
299 else:
323 else:
300 next_disc(self)
324 next_disc(self)
301
325
302 #Define cual es el siguiente disco a grabar y que paso seguir
326 #Define cual es el siguiente disco a grabar y que paso seguir
303 def next_disc(self, error = False):
327 def next_disc(self, error = False):
304 if self.var_copy_n == self.var_Copys:
328 if self.var_copy_n == self.var_Copys:
305 #borrado del iso
329 #borrado del iso
306 self.txtInfo.append("Deleting iso file: "+i2s(self.var_disc_n)+".iso")
330 self.txtInfo.append("Deleting iso file: "+i2s(self.var_disc_n)+".iso")
307 remove_iso(self)
331 remove_iso(self)
308
332
309 self.var_disc_n += 1
333 self.var_disc_n += 1
310 self.var_copy_n = 1
334 self.var_copy_n = 1
311 self.var_step = 0
335 self.var_step = 0
312
336
313 else:
337 else:
314 self.var_copy_n += 1
338 self.var_copy_n += 1
315 self.var_step = 1
339 self.var_step = 1
316
340
317 functions2.make_burning_conf(self) # Si el proceso no ha sido detenido manualmente
341 functions2.make_burning_conf(self) # Si el proceso no ha sido detenido manualmente
318 #crea el archivo burning.conf para el seguimiento de los discos grabados
342 #crea el archivo burning.conf para el seguimiento de los discos grabados
319
343
320 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
344 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
321
345
322 self.txtInfo.append("NEXT DISC: "+str(self.var_disc_n)+" COPY: "+str(self.var_copy_n)
346 self.txtInfo.append("NEXT DISC: "+str(self.var_disc_n)+" COPY: "+str(self.var_copy_n)
323 +" INDEX: "+str(var_index)+" STEP: "+str(self.var_step))
347 +" INDEX: "+str(var_index)+" STEP: "+str(self.var_step))
324 self.txtInfo.append("\n")
348 self.txtInfo.append("\n")
325
349
326 if var_index == 0 :
350 if var_index == 0 :
327 self.function_eject()
351 self.function_eject()
328
352
329 elif self.var_step == 0:
353 elif self.var_step == 0:
330 self.function_iso()
354 self.function_iso()
331 elif self.var_step == 1:
355 elif self.var_step == 1:
332 self.function_burn()
356 self.function_burn()
@@ -1,246 +1,274
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3
3
4 from subprocess import *
4 from subprocess import *
5 import sys
5 import sys
6 import os
6 import os
7 import subprocess
7 import subprocess
8 import commands
8 import commands
9
9
10 #----------------------------------------------------- Deteccion de los dispositivos de grabacion ---------------------------------------------------------------
10 #----------------------------------------------------- Deteccion de los dispositivos de grabacion ---------------------------------------------------------------
11
11
12 def detect_devices(self):
12 def detect_devices(self):
13 """
13 """
14 Deteccion de los dispositvos de grabacion
14 Deteccion de los dispositvos de grabacion
15 """
15 """
16 #var_cmd="wodim --devices | grep /dev/ | awk -F\' '{print $2}'" #Funciona en consola pero no en python ΒΏ?
16 #var_cmd="wodim --devices | grep /dev/ | awk -F\' '{print $2}'" #Funciona en consola pero no en python ΒΏ?
17 var_cmd="wodim --devices | grep /dev/ | awk '{print $2}' | awk -F= '{print $2}'"
17 var_cmd="wodim --devices | grep /dev/ | awk '{print $2}' | awk -F= '{print $2}'"
18
18
19 var_output = commands.getstatusoutput(var_cmd)
19 var_output = commands.getstatusoutput(var_cmd)
20 if var_output[0] != 0:
20 if var_output[0] != 0:
21 self.txtInfo.append("No recording devices")
21 self.txtInfo.append("No recording devices")
22 else:
22 else:
23 var_devices = var_output[1].split('\n')
23 var_devices = var_output[1].split('\n')
24
24
25 var_tmp=[]
25 var_tmp=[]
26 for i in range(0, 4):
26 for i in range(0, 4):
27 if i < len(var_devices):
27 if i < len(var_devices):
28 var_len = len(var_devices[i])
28 var_len = len(var_devices[i])
29 var_tmp.append(var_devices[i][1:var_len - 1])
29 var_tmp.append(var_devices[i][1:var_len - 1])
30 else:
30 else:
31 var_tmp.append('')
31 var_tmp.append('')
32
32
33 #Se escriben los dispostivos correspodientes, si existen
33 #Se escriben los dispostivos correspodientes, si existen
34 self.txtDeviceA.setText(str(var_tmp[0]))
34 self.txtDeviceA.setText(str(var_tmp[0]))
35 self.txtDeviceB.setText(str(var_tmp[1]))
35 self.txtDeviceB.setText(str(var_tmp[1]))
36 self.txtDeviceC.setText(str(var_tmp[2]))
36 self.txtDeviceC.setText(str(var_tmp[2]))
37 self.txtDeviceD.setText(str(var_tmp[3]))
37 self.txtDeviceD.setText(str(var_tmp[3]))
38 #Se desactivan los que no existen
38 #Se desactivan los que no existen
39 if len(var_tmp[0]) == 0 :
39 if len(var_tmp[0]) == 0 :
40 self.chkDevA.setChecked(False)
40 self.chkDevA.setChecked(False)
41 self.chkDevA.setEnabled(False)
41 self.chkDevA.setEnabled(False)
42 if len(var_tmp[1]) == 0 :
42 if len(var_tmp[1]) == 0 :
43 self.chkDevB.setChecked(False)
43 self.chkDevB.setChecked(False)
44 self.chkDevB.setEnabled(False)
44 self.chkDevB.setEnabled(False)
45 if len(var_tmp[2]) == 0 :
45 if len(var_tmp[2]) == 0 :
46 self.chkDevC.setChecked(False)
46 self.chkDevC.setChecked(False)
47 self.chkDevC.setEnabled(False)
47 self.chkDevC.setEnabled(False)
48 if len(var_tmp[3]) == 0 :
48 if len(var_tmp[3]) == 0 :
49 self.chkDevD.setChecked(False)
49 self.chkDevD.setChecked(False)
50 self.chkDevD.setEnabled(False)
50 self.chkDevD.setEnabled(False)
51
51
52 #----------------------------------- expulsa los dispositivos de grabacion --------------------------------------------
52 #----------------------------------- expulsa los dispositivos de grabacion --------------------------------------------
53
53
54 def eject_devices(self):
54 def eject_devices(self):
55 for var_dev in self.var_devices:
55 for var_dev in self.var_devices:
56 var_cmd = 'eject ' + var_dev
56 var_cmd = 'eject ' + var_dev
57 commands.getstatusoutput(var_cmd)
57 commands.getstatusoutput(var_cmd)
58
58
59 #Expulsa el dispositivo de grabacion actual
60 def eject_one_device(self):
61 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
62 var_dev = self.var_devices[var_index]
63 var_cmd = 'eject ' + var_dev
64 commands.getstatusoutput(var_cmd)
65
66 def eject_t_one_device(self):
67 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
68 var_dev = self.var_devices[var_index]
69 var_cmd = 'eject -t ' + var_dev
70 commands.getstatusoutput(var_cmd)
71
72 def get_dev_sr(self):
73 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
74 var_dev = self.var_devices[var_index]
75 var_output=commands.getstatusoutput('ls -lh '+var_dev)
76 if var_output[0] != 0:
77 return "FATAL ERROR"
78 else:
79 var_dev_sr = "/dev/"+var_output[1] .split()[-1]
80 return var_dev_sr
81
82
83
59 #----------------------------------- listado de los dispositivos de grabacion seleccionados --------------------------------------------
84 #----------------------------------- listado de los dispositivos de grabacion seleccionados --------------------------------------------
60
85
61 def selected_devices(self):
86 def selected_devices(self):
62 self.var_devices=[]
87 self.var_devices=[]
63 if self.chkDevA.isChecked():
88 if self.chkDevA.isChecked():
64 self.var_devices.append(str(self.txtDeviceA.text()))
89 self.var_devices.append(str(self.txtDeviceA.text()))
65 if self.chkDevB.isChecked():
90 if self.chkDevB.isChecked():
66 self.var_devices.append(str(self.txtDeviceB.text()))
91 self.var_devices.append(str(self.txtDeviceB.text()))
67 if self.chkDevC.isChecked():
92 if self.chkDevC.isChecked():
68 self.var_devices.append(str(self.txtDeviceC.text()))
93 self.var_devices.append(str(self.txtDeviceC.text()))
69 if self.chkDevD.isChecked():
94 if self.chkDevD.isChecked():
70 self.var_devices.append(str(self.txtDeviceD.text()))
95 self.var_devices.append(str(self.txtDeviceD.text()))
71
96
72 if len(self.var_devices) == 0:
97 if len(self.var_devices) == 0:
73 return False
98 return False
74 else:
99 else:
75 return True
100 return True
76
101
77
102
78 #----------------------------------------------------- Inicializacion para pruebas---------------------------------------------------------------
103 #----------------------------------------------------- Inicializacion para pruebas---------------------------------------------------------------
79
104
80 def set_parameters_test(self):
105 def set_parameters_test(self):
81 """
106 """
82 Se usa para inicializar ciertos parametros para pruebas
107 Se usa para inicializar ciertos parametros para pruebas
83 """
108 """
84 self.txtDpath.setText('/home/ricardoar/optional/STORAGE/EW_DRIFTS')
109 self.txtDpath.setText('/home/ricardoar/optional/STORAGE/EW_DRIFTS')
85 self.txtRpath.setText('/home/ricardoar/optional/prueba1_jro_backup_manager')
110 self.txtRpath.setText('/home/ricardoar/optional/prueba1_jro_backup_manager')
86 self.txtElabel.setText('EW_DRIFTS_pruebas')
111 self.txtElabel.setText('EW_DRIFTS_pruebas')
87 self.lstDcapacity.setCurrentIndex(4)
112 self.lstDcapacity.setCurrentIndex(4)
88 self.txtDcapacity.setValue(100.0)
113 self.txtDcapacity.setValue(100.0)
89 self.txtDcapacity.setReadOnly(False)
114 self.txtDcapacity.setReadOnly(False)
90
115
91 def set_devices_test(self):
116 def set_devices_test(self):
92 self.txtDeviceA.setText("/dev/scd0")
117 self.txtDeviceA.setText("/dev/scd0")
93 self.txtDeviceB.setText("/dev/scd1")
118 self.txtDeviceB.setText("/dev/scd1")
94 self.txtDeviceC.setText("/dev/scd2")
119 self.txtDeviceC.setText("/dev/scd2")
95 self.txtDeviceD.setText("/dev/scd3")
120 self.txtDeviceD.setText("/dev/scd3")
96
121
97
122
98
123
99 #----------------------------------------------------- crea parameters.conf ---------------------------------------------------------------
124 #----------------------------------------------------- crea parameters.conf ---------------------------------------------------------------
100
125
101 def make_parameters_conf(self):
126 def make_parameters_conf(self):
102 var_file = open("parameters.conf","w")
127 var_file = open("parameters.conf","w")
103 var_file.write(self.var_Dpath+"\n") #0 Ruta de los datos
128 var_file.write(self.var_Dpath+"\n") #0 Ruta de los datos
104 var_file.write(self.var_Rpath+"\n") #1 Ruta del proyecto
129 var_file.write(self.var_Rpath+"\n") #1 Ruta del proyecto
105 var_file.write(str(self.var_lstDtype)+"\n") #2 opcion Data Type
130 var_file.write(str(self.var_lstDtype)+"\n") #2 opcion Data Type
106 var_file.write(self.var_Dtype+"\n") #3 extension Data Type
131 var_file.write(self.var_Dtype+"\n") #3 extension Data Type
107 var_file.write(self.var_Elabel+"\n") #4 etiqueta
132 var_file.write(self.var_Elabel+"\n") #4 etiqueta
108 var_file.write(str(self.var_Copys)+"\n") #5 Numero de copias
133 var_file.write(str(self.var_Copys)+"\n") #5 Numero de copias
109 var_file.write(str(self.var_lstDcapacity)+"\n") #6 opcion Device Capacity
134 var_file.write(str(self.var_lstDcapacity)+"\n") #6 opcion Device Capacity
110 var_file.write(str(self.var_Dcapacity)+"\n") #7 tamaΓ±o Device Capacity
135 var_file.write(str(self.var_Dcapacity)+"\n") #7 tamaΓ±o Device Capacity
111 var_file.write(str(self.var_Discs)+"\n") #8 Numero de discos a grabar
136 var_file.write(str(self.var_Discs)+"\n") #8 Numero de discos a grabar
112 # var_file.write(str(self.lstStartDay.currentIndex())+"\n") #9 Indice fecha inicial
137 # var_file.write(str(self.lstStartDay.currentIndex())+"\n") #9 Indice fecha inicial
113 # var_file.write(str(self.lstStopDay.currentIndex())+"\n") #10 Indice fecha final
138 # var_file.write(str(self.lstStopDay.currentIndex())+"\n") #10 Indice fecha final
114 var_file.close()
139 var_file.close()
115
140
116 #----------------------------------------------------- carga parameters.conf ---------------------------------------------------------------
141 #----------------------------------------------------- carga parameters.conf ---------------------------------------------------------------
117
142
118 def get_parameters_conf(self):
143 def get_parameters_conf(self):
119 var_file = open("parameters.conf","r")
144 var_file = open("parameters.conf","r")
120 lines = var_file.readlines()
145 lines = var_file.readlines()
121 self.txtDpath.setText(lines[0][:-1]) #0
146 self.txtDpath.setText(lines[0][:-1]) #0
122 self.txtRpath.setText(lines[1][:-1]) #1
147 self.txtRpath.setText(lines[1][:-1]) #1
123 self.lstDtype.setCurrentIndex(int(lines[2])) #2
148 self.lstDtype.setCurrentIndex(int(lines[2])) #2
124 self.txtDtype.setText(lines[3][:-1]) #3
149 self.txtDtype.setText(lines[3][:-1]) #3
125 self.txtElabel.setText(lines[4][:-1]) #4
150 self.txtElabel.setText(lines[4][:-1]) #4
126 self.txtCopys.setValue(int(lines[5][:-1])) #5
151 self.txtCopys.setValue(int(lines[5][:-1])) #5
127 self.lstDcapacity.setCurrentIndex(int(lines[6])) #6
152 self.lstDcapacity.setCurrentIndex(int(lines[6])) #6
128 self.txtDcapacity.setValue(float(lines[7])) #7
153 self.txtDcapacity.setValue(float(lines[7])) #7
129 self.var_Discs = int(lines[8]) #8
154 self.var_Discs = int(lines[8]) #8
130 # var_StartDay = int(lines[6]) #9
155 # var_StartDay = int(lines[6]) #9
131 # var_StopDay = int(lines[7]) #10
156 # var_StopDay = int(lines[7]) #10
132 ################################
157 ################################
133 self.var_Copys = self.txtCopys.value() #5
158 self.var_Copys = self.txtCopys.value() #5
134 ################################
159 ################################
135
160
136 var_file.close()
161 var_file.close()
137
162
138
163
139 #-------------------------- actualiza el valor de las variables con los parametros seleccionados -----------------------------
164 #-------------------------- actualiza el valor de las variables con los parametros seleccionados -----------------------------
140
165
141 def set_vars(self):
166 def set_vars(self):
142 self.var_Dpath = str(self.txtDpath.text()) #0
167 self.var_Dpath = str(self.txtDpath.text()) #0
143 self.var_Rpath = str(self.txtRpath.text()) #1
168 self.var_Rpath = str(self.txtRpath.text()) #1
144 self.var_lstDtype = self.lstDtype.currentIndex() #2
169 self.var_lstDtype = self.lstDtype.currentIndex() #2
145 self.var_Dtype = str(self.txtDtype.text()) #3
170 self.var_Dtype = str(self.txtDtype.text()) #3
146 self.var_Elabel = str(self.txtElabel.text()) #4
171 self.var_Elabel = str(self.txtElabel.text()) #4
147 self.var_Copys = self.txtCopys.value() #5
172 self.var_Copys = self.txtCopys.value() #5
148 self.var_lstDcapacity = self.lstDcapacity.currentIndex() #6
173 self.var_lstDcapacity = self.lstDcapacity.currentIndex() #6
149 self.var_Dcapacity = self.txtDcapacity.value() #7
174 self.var_Dcapacity = self.txtDcapacity.value() #7
150 self.var_Discs = self.var_Discs #8
175 self.var_Discs = self.var_Discs #8
151
176
152
177
153 #-------------------------- crea burning.conf -----------------------------
178 #-------------------------- crea burning.conf -----------------------------
154
179
155 def make_burning_conf(self):
180 def make_burning_conf(self):
156 var_file = open("burning.conf","w")
181 var_file = open("burning.conf","w")
157 var_n_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n - 1 )
182 var_n_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n - 1 )
158 var_file.write(str(var_n_burned_discs)+"\n") #0 Numero de discos ya grabados
183 var_file.write(str(var_n_burned_discs)+"\n") #0 Numero de discos ya grabados
159 var_file.write(str(self.var_disc_n)+"\n") #1 Disco actual para grabar
184 var_file.write(str(self.var_disc_n)+"\n") #1 Disco actual para grabar
160 var_file.write(str(self.var_copy_n)+"\n") #2 Numero de copia actual para grabar
185 var_file.write(str(self.var_copy_n)+"\n") #2 Numero de copia actual para grabar
161 var_file.close()
186 var_file.close()
162
187
163 #----------------------------------------------------- carga burning.conf ---------------------------------------------------------------
188 #----------------------------------------------------- carga burning.conf ---------------------------------------------------------------
164
189
165 def get_burning_conf(self):
190 def get_burning_conf(self):
166 var_file = open("burning.conf","r")
191 var_file = open("burning.conf","r")
167 lines = var_file.readlines()
192 lines = var_file.readlines()
168 self.var_burned_discs = int(lines[0]) #0
193 self.var_burned_discs = int(lines[0]) #0
169 self.var_disc_n = int(lines[1])
194 self.var_disc_n = int(lines[1])
170 self.var_copy_n = int(lines[2])
195 self.var_copy_n = int(lines[2])
171 var_file.close()
196 var_file.close()
172
197
173 #---------------------------------------------- Habilitacion y deshabilitacion de items -------------------------------------------------------
198 #---------------------------------------------- Habilitacion y deshabilitacion de items -------------------------------------------------------
174
199
175 def enabled_items1(var_bool, self):
200 def enabled_items1(var_bool, self):
176 self.tabParameters.setEnabled(not(var_bool))
201 self.tabParameters.setEnabled(not(var_bool))
177 self.lstDcapacity.setEnabled(not(var_bool))
202 self.lstDcapacity.setEnabled(not(var_bool))
178 self.txtDcapacity.setEnabled(not(var_bool))
203 self.txtDcapacity.setEnabled(not(var_bool))
179 self.actionChange_Parameters.setEnabled(var_bool)
204 self.actionChange_Parameters.setEnabled(var_bool)
180 self.btnGbkp.setEnabled(not(var_bool))
205 self.btnGbkp.setEnabled(not(var_bool))
181 self.btnRestart.setEnabled(var_bool)
206 self.btnRestart.setEnabled(var_bool)
182 self.btnStartburn.setEnabled(var_bool)
207 self.btnStartburn.setEnabled(var_bool)
183
208
184
209
185 def enabled_items2(var_bool, self):
210 def enabled_items2(var_bool, self):
186 self.btnRestart.setEnabled(not(var_bool))
211 self.btnRestart.setEnabled(not(var_bool))
187 self.btnStartburn.setEnabled(not(var_bool))
212 self.btnStartburn.setEnabled(not(var_bool))
188 self.btnStopburn.setEnabled(var_bool)
213 self.btnStopburn.setEnabled(var_bool)
189 self.chkCheck.setEnabled(not(var_bool))
214 self.chkCheck.setEnabled(not(var_bool))
215 self.chkCheck.setChecked(False)
216
190 self.actionChange_Parameters.setEnabled(False)
217 self.actionChange_Parameters.setEnabled(False)
218
191
219
192
220
193
221
194
222
195 #---------------------------------------------- Actualiza estado en los labels -------------------------------------------------------
223 #---------------------------------------------- Actualiza estado en los labels -------------------------------------------------------
196
224
197 def update_message(type, message, self, index=0):
225 def update_message(type, message, self, index=0, ):
198 if index == 0:
226 if index == 0:
199 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
227 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
200 else:
228 else:
201 var_index = index
229 var_index = index
202
230
203 var_message = message
231 var_message = message
204 # var_message = "BURNING"
232 # var_message = "BURNING"
205 # var_message = "COMPLETED"
233 # var_message = "COMPLETED"
206 # var_message = "ERROR"
234 # var_message = "ERROR"
207 # var_message = "CHECKING"
235 # var_message = "CHECKING"
208 # var_message = "CHECKED"
236 # var_message = "CHECKED"
209
237
210 if type == 1:
238 if type == 1:
211
239
212 if var_index == 0:
240 if var_index == 0:
213 self.txtBstatusA.setText(var_message)
241 self.txtBstatusA.setText(var_message)
214 self.txtBdiscA.setText(str(self.var_disc_n))
242 self.txtBdiscA.setText(str(self.var_disc_n))
215 self.txtBcopyA.setText(str(self.var_copy_n))
243 self.txtBcopyA.setText(str(self.var_copy_n))
216
244
217 if var_index == 1:
245 if var_index == 1:
218 self.txtBstatusB.setText(var_message)
246 self.txtBstatusB.setText(var_message)
219 self.txtBdiscB.setText(str(self.var_disc_n))
247 self.txtBdiscB.setText(str(self.var_disc_n))
220 self.txtBcopyB.setText(str(self.var_copy_n))
248 self.txtBcopyB.setText(str(self.var_copy_n))
221
249
222 if var_index == 2:
250 if var_index == 2:
223 self.txtBstatusC.setText(var_message)
251 self.txtBstatusC.setText(var_message)
224 self.txtBdiscC.setText(str(self.var_disc_n))
252 self.txtBdiscC.setText(str(self.var_disc_n))
225 self.txtBcopyC.setText(str(self.var_copy_n))
253 self.txtBcopyC.setText(str(self.var_copy_n))
226
254
227 if var_index == 3:
255 if var_index == 3:
228 self.txtBstatusD.setText(var_message)
256 self.txtBstatusD.setText(var_message)
229 self.txtBdiscD.setText(str(self.var_disc_n))
257 self.txtBdiscD.setText(str(self.var_disc_n))
230 self.txtBcopyD.setText(str(self.var_copy_n))
258 self.txtBcopyD.setText(str(self.var_copy_n))
231
259
232 if type == 2:
260 if type == 2:
233
261
234 if var_index == 0:
262 if var_index == 0:
235 self.txtCHstatusA.setText(var_message)
263 self.txtCHstatusA.setText(var_message)
236
264
237 if var_index == 1:
265 if var_index == 1:
238 self.txtCHstatusB.setText(var_message)
266 self.txtCHstatusB.setText(var_message)
239
267
240 if var_index == 2:
268 if var_index == 2:
241 self.txtCHstatusC.setText(var_message)
269 self.txtCHstatusC.setText(var_message)
242
270
243 if var_index == 3:
271 if var_index == 3:
244 self.txtCHstatusD.setText(var_message)
272 self.txtCHstatusD.setText(var_message)
245
273
246
274
@@ -1,645 +1,666
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 """
3 """
4 Module implementing MainWindow.
4 Module implementing MainWindow.
5 """
5 """
6
6
7 from PyQt4.QtGui import QMainWindow
7 from PyQt4.QtGui import QMainWindow
8 from PyQt4.QtCore import pyqtSignature
8 from PyQt4.QtCore import pyqtSignature
9 from PyQt4 import QtCore
9 from PyQt4 import QtCore
10 from Ui_MainWindow import Ui_MainWindow
10 from Ui_MainWindow import Ui_MainWindow
11 from Ui_Parameters import Ui_Parameters
11 from Ui_Parameters import Ui_Parameters
12 from Ui_About import Ui_About
12 from Ui_About import Ui_About
13 from PyQt4 import QtGui
13 from PyQt4 import QtGui
14 from subprocess import *
14 from subprocess import *
15 import sys
15 import sys
16 import os
16 import os
17 #import subprocess
17 #import subprocess
18 import time
18 import time
19 import commands
19 import commands
20 from functions import functions
20 from functions import functions
21 from functions import functions2
21 from functions import functions2
22
22
23 class MainWindow(QMainWindow, Ui_MainWindow):
23 class MainWindow(QMainWindow, Ui_MainWindow):
24 """
24 """
25 Class documentation goes here.
25 Class documentation goes here.
26 """
26 """
27
27
28 def __init__(self, parent = None):
28 def __init__(self, parent = None):
29 QMainWindow.__init__(self, parent)
29 QMainWindow.__init__(self, parent)
30 self.setupUi(self)
30 self.setupUi(self)
31 self.setupUi2()
31 self.setupUi2()
32
32
33 def setupUi2(self):
33 def setupUi2(self):
34
34
35 self.txtInfo.append("cambio")
35 self.txtInfo.append("cambio 1")
36
36
37
37 self.allTrue = False
38 self.allTrue = True
39
38
40 if self.allTrue == True:
39 if self.allTrue == True:
41 self.var_real_principal = True
40 self.var_real_principal = True
42 self.var_real_detect_devices = True
41 self.var_real_detect_devices = True
43 self.var_real_iso = True
42 self.var_real_iso = True
44 self.var_real_burn = True
43 self.var_real_burn = True
45 self.var_real_check = True
44 self.var_real_check = True
46 self.var_real_eject = True
45 self.var_real_eject = True
47 self.var_real_show_cmd = True
46 self.var_real_show_cmd = True
48
47
49 else:
48 else:
50 self.var_real_principal = True
49 self.var_real_principal = False
51 self.var_real_detect_devices = False
50 self.var_real_detect_devices = False
52 self.var_real_iso = True
51 self.var_real_iso = False
53 self.var_real_burn = False
52 self.var_real_burn = False
54 self.var_real_check = False
53 self.var_real_check = True
55 self.var_real_eject = False
54 self.var_real_eject = False
56 self.var_real_show_cmd = True
55 self.var_real_show_cmd = True
57
56
58 if self.var_real_detect_devices == True:
57 if self.var_real_detect_devices == True:
59 # Reconocimiento de los dispositivos de grabacion
58 # Reconocimiento de los dispositivos de grabacion
60 functions2.detect_devices(self)
59 functions2.detect_devices(self)
61 else:
60 else:
62 functions2.set_devices_test(self)
61 functions2.set_devices_test(self)
63
62
64 #Inicialiazacion de variables
63 #Inicialiazacion de variables
65 self.var_Discs = 0 #Numero de discos del proyecto
64 self.var_Discs = 0 #Numero de discos del proyecto
66 self.var_Copys = 0 #Numero de copias
65 self.var_Copys = 0 #Numero de copias
67 self.var_disc_n = 0 # disco actual
66 self.var_disc_n = 0 # disco actual
68 self.var_copy_n = 0 # copia actual
67 self.var_copy_n = 0 # copia actual
69 self.var_burned_discs = 0 #numero de discos ya grabados
68 self.var_burned_discs = 0 #numero de discos ya grabados
70
69
71 self.bool_first_iso = False
70 self.bool_first_iso = False
72 self.var_step = 0 # numero de paso en el proceso
71 self.var_step = 0 # numero de paso en el proceso
73 self.bool_state_burning = False #si es True se puede grabar
72 self.bool_state_burning = False #si es True se puede grabar
74 self.blank_discs = False # Si es true significa que se acaban de ingresar discos en blanco
73 self.blank_discs = False # Si es true significa que se acaban de ingresar discos en blanco
75
74
76 self.var_list=[] # Lista de DOYs
75 self.var_list=[] # Lista de DOYs
77 self.var_sublist=[] # Sub-lista de DOYs seleccionados
76 self.var_sublist=[] # Sub-lista de DOYs seleccionados
78 self.var_devices=[] #Lista de dispositivos seleccionados
77 self.var_devices=[] #Lista de dispositivos seleccionados
79
78
80 #Revisa si existe el archivo de confirguracion y lo carga
79 #Revisa si existe el archivo de confirguracion y lo carga
81 if os.path.isfile("parameters.conf"):
80 if os.path.isfile("parameters.conf"):
82 functions2.get_parameters_conf(self)
81 functions2.get_parameters_conf(self)
83 self.bool_first_iso = True
82 self.bool_first_iso = True
84 self.txtInfo.append("Parameters were loaded from configuration file")
83 self.txtInfo.append("Parameters were loaded from configuration file")
85 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
84 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
86
85
87 elif self.var_real_principal == False:
86 elif self.var_real_principal == False:
88 functions2.set_parameters_test(self) #Establece ciertos parametros, para pruebas
87 functions2.set_parameters_test(self) #Establece ciertos parametros, para pruebas
89
88
90 functions2.set_vars(self) #Carga las variables de la clase con los parametros seleccionados
89 functions2.set_vars(self) #Carga las variables de la clase con los parametros seleccionados
91
90
92 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
91 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
93 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
92 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
94 functions.load_days(self)
93 functions.load_days(self)
95
94
96 if os.path.isfile("parameters.conf"):
95 if os.path.isfile("parameters.conf"):
97 functions2.enabled_items1(True, self) #Se bloquean los parametros de configuracion
96 functions2.enabled_items1(True, self) #Se bloquean los parametros de configuracion
98
97
99 if os.path.isfile("burning.conf"):
98 if os.path.isfile("burning.conf"):
100 functions2.get_burning_conf(self)
99 functions2.get_burning_conf(self)
101 self.txtInfo.append("Current disc: "+str(self.var_disc_n))
100 self.txtInfo.append("Current disc: "+str(self.var_disc_n))
102 self.txtInfo.append("Current copy: "+str(self.var_copy_n))
101 self.txtInfo.append("Current copy: "+str(self.var_copy_n))
103 self.txtInfo.append("Burned discs: "+str(self.var_burned_discs))
102 self.txtInfo.append("Burned discs: "+str(self.var_burned_discs))
104 self.btnStartburn.setText("Continue")
103 self.btnStartburn.setText("Continue")
105 self.actionChange_Parameters.setEnabled(False)
104 self.actionChange_Parameters.setEnabled(False)
106
105
107 self.connect(self.actionChange_Parameters, QtCore.SIGNAL("triggered()"), self.changeParameters)
106 self.connect(self.actionChange_Parameters, QtCore.SIGNAL("triggered()"), self.changeParameters)
108 self.connect(self.actionAbout, QtCore.SIGNAL("triggered()"), self.about)
107 self.connect(self.actionAbout, QtCore.SIGNAL("triggered()"), self.about)
109
108
110 self.process_iso = QtCore.QProcess()
109 self.process_iso = QtCore.QProcess()
111 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_iso)
110 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_iso)
112 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardError()'), self.readError_iso)
111 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardError()'), self.readError_iso)
113 self.connect(self.process_iso, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_iso)
112 self.connect(self.process_iso, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_iso)
114
113
115 self.process_burn = QtCore.QProcess()
114 self.process_burn = QtCore.QProcess()
116 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_burn)
115 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_burn)
117 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardError()'), self.readError_burn)
116 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardError()'), self.readError_burn)
118 self.connect(self.process_burn, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_burn)
117 self.connect(self.process_burn, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_burn)
119
118
120 self.process_check = QtCore.QProcess()
119 self.process_check = QtCore.QProcess()
121 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_check)
120 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_check)
122 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardError()'), self.readError_check)
121 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardError()'), self.readError_check)
123 self.connect(self.process_check, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_check)
122 self.connect(self.process_check, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_check)
124
123
125
124
126 def changeParameters(self):
125 def changeParameters(self):
127 dlg=QtGui.QDialog()
126 dlg=QtGui.QDialog()
128 dlgui=Ui_Parameters()
127 dlgui=Ui_Parameters()
129 dlgui.setupUi(dlg)
128 dlgui.setupUi(dlg)
130 if (dlg.exec_() == QtGui.QDialog.Accepted):
129 if (dlg.exec_() == QtGui.QDialog.Accepted):
131 if dlgui.txtDisc.value() > self.var_Discs or dlgui.txtCopy.value() > dlgui.txtNcopys.value():
130 if dlgui.txtDisc.value() > self.var_Discs or dlgui.txtCopy.value() > dlgui.txtNcopys.value():
132 self.txtInfo.append("Wrong parameters")
131 self.txtInfo.append("Wrong parameters")
133 else:
132 else:
134 self.var_Copys = dlgui.txtNcopys.value()
133 self.var_Copys = dlgui.txtNcopys.value()
135 self.var_disc_n = dlgui.txtDisc.value()
134 self.var_disc_n = dlgui.txtDisc.value()
136 self.var_copy_n = dlgui.txtCopy.value()
135 self.var_copy_n = dlgui.txtCopy.value()
137 self.txtInfo.append("Changed parameters")
136 self.txtInfo.append("Changed parameters")
138 self.var_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n -1 )
137 self.var_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n -1 )
139 self.bool_first_iso = True
138 self.bool_first_iso = True
140 self.txtInfo.append("Current disc: "+str(self.var_disc_n))
139 self.txtInfo.append("Current disc: "+str(self.var_disc_n))
141 self.txtInfo.append("Current copy: "+str(self.var_copy_n))
140 self.txtInfo.append("Current copy: "+str(self.var_copy_n))
142 self.txtInfo.append("Nro Copys: "+str(self.var_Copys))
141 self.txtInfo.append("Nro Copys: "+str(self.var_Copys))
143 functions2.make_parameters_conf(self)
142 functions2.make_parameters_conf(self)
144 self.txtCopys.setValue(self.var_Copys) #Actualizo mananualmente el valor Copys
143 self.txtCopys.setValue(self.var_Copys) #Actualizo mananualmente el valor Copys
145
144
146
145
147
146
148 def about(self):
147 def about(self):
149 dlg_about=QtGui.QDialog()
148 dlg_about=QtGui.QDialog()
150 dlgui_about=Ui_About()
149 dlgui_about=Ui_About()
151 dlgui_about.setupUi(dlg_about)
150 dlgui_about.setupUi(dlg_about)
152 dlg_about.exec_()
151 dlg_about.exec_()
153
152
154
153
155 #==============================================================================
154 #==============================================================================
156 # Manejo de los eventos
155 # Manejo de los eventos
157 #==============================================================================
156 #==============================================================================
158
157
159 #----------------------------------------------------- Obtencion de la ruta de los datos ---------------------------------------------------------------
158 #----------------------------------------------------- Obtencion de la ruta de los datos ---------------------------------------------------------------
160
159
161 @pyqtSignature("")
160 @pyqtSignature("")
162 def on_btnDpath_clicked(self):
161 def on_btnDpath_clicked(self):
163 """
162 """
164 Permite seleccionar graficamente el direcorio de los datos a grabar
163 Permite seleccionar graficamente el direcorio de los datos a grabar
165 """
164 """
166 self.var_Dpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
165 self.var_Dpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
167 self.txtDpath.setText(self.var_Dpath)
166 self.txtDpath.setText(self.var_Dpath)
168 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
167 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
169 functions.load_days(self)
168 functions.load_days(self)
170
169
171
170
172 @pyqtSignature("")
171 @pyqtSignature("")
173 def on_txtDpath_editingFinished(self):
172 def on_txtDpath_editingFinished(self):
174 """
173 """
175 Carga la ruta editada y verifica que sea correcta y carga la lista de dias
174 Carga la ruta editada y verifica que sea correcta y carga la lista de dias
176 """
175 """
177 self.var_Dpath=str(self.txtDpath.text()) #Se carga la variable con la ruta recien editada
176 self.var_Dpath=str(self.txtDpath.text()) #Se carga la variable con la ruta recien editada
178 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
177 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
179 functions.load_days(self)
178 functions.load_days(self)
180
179
181
180
182 #----------------------------------------------------- Obtencion de las ruta del proyecto ---------------------------------------------------------------
181 #----------------------------------------------------- Obtencion de las ruta del proyecto ---------------------------------------------------------------
183
182
184 @pyqtSignature("")
183 @pyqtSignature("")
185 def on_btnRpath_clicked(self):
184 def on_btnRpath_clicked(self):
186 """
185 """
187 Permite seleccionar graficamente el direcorio del proyecto
186 Permite seleccionar graficamente el direcorio del proyecto
188 """
187 """
189 self.var_Rpath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
188 self.var_Rpath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
190 self.txtRpath.setText(self.var_Rpath)
189 self.txtRpath.setText(self.var_Rpath)
191 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
190 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
192
191
193
192
194 @pyqtSignature("")
193 @pyqtSignature("")
195 def on_txtRpath_editingFinished(self):
194 def on_txtRpath_editingFinished(self):
196 """
195 """
197 Valida la ruta del proyecto
196 Valida la ruta del proyecto
198 """
197 """
199 self.var_Rpath = str(self.txtRpath.text()) #Se carga la variable con la ruta recien editada
198 self.var_Rpath = str(self.txtRpath.text()) #Se carga la variable con la ruta recien editada
200 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
199 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
201
200
202
201
203 #----------------------------------------------------- Tipo de datos ---------------------------------------------------------------
202 #----------------------------------------------------- Tipo de datos ---------------------------------------------------------------
204
203
205 @pyqtSignature("int")
204 @pyqtSignature("int")
206 def on_lstDtype_activated(self, index):
205 def on_lstDtype_activated(self, index):
207 """
206 """
208 Permite elegir entre los tipos de archivos
207 Permite elegir entre los tipos de archivos
209 """
208 """
210 self.txtDtype.setReadOnly(True)
209 self.txtDtype.setReadOnly(True)
211 if index == 0:
210 if index == 0:
212 self.var_Dtype ='r'
211 self.var_Dtype ='r'
213 elif index == 1:
212 elif index == 1:
214 self.var_Dtype ='pdata'
213 self.var_Dtype ='pdata'
215 elif index == 2:
214 elif index == 2:
216 self.var_Dtype ='sswma'
215 self.var_Dtype ='sswma'
217 else :
216 else :
218 self.var_Dtype =''
217 self.var_Dtype =''
219 self.txtDtype.setReadOnly(False)
218 self.txtDtype.setReadOnly(False)
220
219
221 self.txtDtype.setText(self.var_Dtype)
220 self.txtDtype.setText(self.var_Dtype)
222 functions.load_days(self) #llamada a funcion
221 functions.load_days(self) #llamada a funcion
223
222
224 @pyqtSignature("")
223 @pyqtSignature("")
225 def on_txtDtype_editingFinished(self):
224 def on_txtDtype_editingFinished(self):
226 self.var_Dtype=str(self.txtDtype.text())
225 self.var_Dtype=str(self.txtDtype.text())
227 functions.load_days(self) #llamada a funcion
226 functions.load_days(self) #llamada a funcion
228
227
229
228
230 #----------------------------------------------------- Etiqueta ---------------------------------------------------------------
229 #----------------------------------------------------- Etiqueta ---------------------------------------------------------------
231
230
232 @pyqtSignature("")
231 @pyqtSignature("")
233 def on_txtElabel_editingFinished(self):
232 def on_txtElabel_editingFinished(self):
234 self.var_Elabel = str(self.txtElabel.text())
233 self.var_Elabel = str(self.txtElabel.text())
235
234
236 #----------------------------------------------------- Numero de copias ---------------------------------------------------------------
235 #----------------------------------------------------- Numero de copias ---------------------------------------------------------------
237 @pyqtSignature("")
236 @pyqtSignature("")
238 def on_txtCopys_editingFinished(self):
237 def on_txtCopys_editingFinished(self):
239 self.var_Copys = self.txtCopys.value()
238 self.var_Copys = self.txtCopys.value()
240
239
241 #----------------------------------------------------- Seleccion del rango de fechas ---------------------------------------------------------------
240 #----------------------------------------------------- Seleccion del rango de fechas ---------------------------------------------------------------
242
241
243 @pyqtSignature("int") #CLOSED
242 @pyqtSignature("int") #CLOSED
244 def on_lstStartDay_activated(self, index):
243 def on_lstStartDay_activated(self, index):
245 """
244 """
246 Cambia la lista de opciones en lstStopDay
245 Cambia la lista de opciones en lstStopDay
247 """
246 """
248 var_StopDay_index=self.lstStopDay.count() - self.lstStopDay.currentIndex()
247 var_StopDay_index=self.lstStopDay.count() - self.lstStopDay.currentIndex()
249 self.lstStopDay.clear()
248 self.lstStopDay.clear()
250
249
251 for i in self.var_list[index:]:
250 for i in self.var_list[index:]:
252 self.lstStopDay.addItem(i)
251 self.lstStopDay.addItem(i)
253
252
254 self.lstStopDay.setCurrentIndex(self.lstStopDay.count() - var_StopDay_index)
253 self.lstStopDay.setCurrentIndex(self.lstStopDay.count() - var_StopDay_index)
255
254
256 functions.get_sub_list(self)
255 functions.get_sub_list(self)
257
256
258
257
259 @pyqtSignature("int") #CLOSED
258 @pyqtSignature("int") #CLOSED
260 def on_lstStopDay_activated(self, index):
259 def on_lstStopDay_activated(self, index):
261 """
260 """
262 Cambia la lista de opciones en lstStartDay
261 Cambia la lista de opciones en lstStartDay
263 """
262 """
264 var_StartDay_index=self.lstStartDay.currentIndex()
263 var_StartDay_index=self.lstStartDay.currentIndex()
265 var_end_index = self.lstStopDay.count() - index
264 var_end_index = self.lstStopDay.count() - index
266 self.lstStartDay.clear()
265 self.lstStartDay.clear()
267
266
268 for i in self.var_list[:len(self.var_list) - var_end_index + 1]:
267 for i in self.var_list[:len(self.var_list) - var_end_index + 1]:
269 self.lstStartDay.addItem(i)
268 self.lstStartDay.addItem(i)
270
269
271 self.lstStartDay.setCurrentIndex(var_StartDay_index)
270 self.lstStartDay.setCurrentIndex(var_StartDay_index)
272
271
273 functions.get_sub_list(self)
272 functions.get_sub_list(self)
274
273
275
274
276 #----------------------------------------------------- Capacidad del dispositivo de grabacion ---------------------------------------------------------------
275 #----------------------------------------------------- Capacidad del dispositivo de grabacion ---------------------------------------------------------------
277
276
278 @pyqtSignature("")
277 @pyqtSignature("")
279 def on_txtDcapacity_editingFinished(self):
278 def on_txtDcapacity_editingFinished(self):
280 self.var_Dcapacity = self.txtDcapacity.value()
279 self.var_Dcapacity = self.txtDcapacity.value()
281
280
282
281
283 @pyqtSignature("int") #CLOSED
282 @pyqtSignature("int") #CLOSED
284 def on_lstDcapacity_activated(self, index):
283 def on_lstDcapacity_activated(self, index):
285 """
284 """
286 Permite elegir el tamaΓ±o del disco
285 Permite elegir el tamaΓ±o del disco
287 """
286 """
288 if index == 0:
287 if index == 0:
289 var_size=25.0
288 var_size=25.0
290 elif index == 1:
289 elif index == 1:
291 var_size=8.5
290 var_size=8.5
292 elif index == 2:
291 elif index == 2:
293 var_size=4.7
292 var_size=4.7
294 elif index == 3:
293 elif index == 3:
295 var_size=0.7
294 var_size=0.7
296
295
297 if index != 4:
296 if index != 4:
298 self.txtDcapacity.setValue(var_size*10**9/1024**2)
297 self.txtDcapacity.setValue(var_size*10**9/1024**2)
299 self.txtDcapacity.setReadOnly(True)
298 self.txtDcapacity.setReadOnly(True)
300 else:
299 else:
301 self.txtDcapacity.setValue(100.0)
300 self.txtDcapacity.setValue(100.0)
302 self.txtDcapacity.setReadOnly(False)
301 self.txtDcapacity.setReadOnly(False)
303
302
304 self.var_lstDcapacity = self.lstDcapacity.currentIndex()
303 self.var_lstDcapacity = self.lstDcapacity.currentIndex()
305 self.var_Dcapacity = self.txtDcapacity.value()
304 self.var_Dcapacity = self.txtDcapacity.value()
306
305
307 #----------------------------------------------------- Testeo de las unidades de grabacion ---------------------------------------------------------------
306 #----------------------------------------------------- Testeo de las unidades de grabacion ---------------------------------------------------------------
308
307
309 @pyqtSignature("")
308 @pyqtSignature("")
310 def on_btnTdevA_clicked(self):
309 def on_btnTdevA_clicked(self):
311 var_dev = str(self.txtDeviceA.text())
310 var_dev = str(self.txtDeviceA.text())
312 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
311 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
313 commands.getstatusoutput(var_cmd)
312 commands.getstatusoutput(var_cmd)
314
313
315 @pyqtSignature("")
314 @pyqtSignature("")
316 def on_btnTdevB_clicked(self):
315 def on_btnTdevB_clicked(self):
317 var_dev = str(self.txtDeviceB.text())
316 var_dev = str(self.txtDeviceB.text())
318 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
317 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
319 commands.getstatusoutput(var_cmd)
318 commands.getstatusoutput(var_cmd)
320
319
321 @pyqtSignature("")
320 @pyqtSignature("")
322 def on_btnTdevC_clicked(self):
321 def on_btnTdevC_clicked(self):
323 var_dev = str(self.txtDeviceC.text())
322 var_dev = str(self.txtDeviceC.text())
324 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
323 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
325 commands.getstatusoutput(var_cmd)
324 commands.getstatusoutput(var_cmd)
326
325
327 @pyqtSignature("")
326 @pyqtSignature("")
328 def on_btnTdevD_clicked(self):
327 def on_btnTdevD_clicked(self):
329 var_dev = str(self.txtDeviceD.text())
328 var_dev = str(self.txtDeviceD.text())
330 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
329 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
331 commands.getstatusoutput(var_cmd)
330 commands.getstatusoutput(var_cmd)
332
331
333
332
334 #==============================================================================
333 #==============================================================================
335 # Botones para la generacion de los archivos de configuracion
334 # Botones para la generacion de los archivos de configuracion
336 #==============================================================================
335 #==============================================================================
337
336
338 #----------------------------------------------------- Generacion de la configuracion usando los parametros ---------------------------------------------------------------
337 #----------------------------------------------------- Generacion de la configuracion usando los parametros ---------------------------------------------------------------
339
338
340 @pyqtSignature("")
339 @pyqtSignature("")
341 def on_btnGbkp_clicked(self):
340 def on_btnGbkp_clicked(self):
342 """
341 """
343 Generacion de archivos de configuracion usando los parametros
342 Generacion de archivos de configuracion usando los parametros
344 """
343 """
345
344
346 if functions.validate_parameters(self) == False:
345 if functions.validate_parameters(self) == False:
347 return
346 return
348
347
349 #Crea las carpetas en la ruta del proyecto y verifica que se crearon correctamente
348 #Crea las carpetas en la ruta del proyecto y verifica que se crearon correctamente
350 list_dirs=['gpath','iso','ppath', 'tmpdata']
349 list_dirs=['gpath','iso','ppath', 'tmpdata']
351 bool_make_dirs = functions.make_dirs(list_dirs, self)
350 bool_make_dirs = functions.make_dirs(list_dirs, self)
352 if bool_make_dirs == False:
351 if bool_make_dirs == False:
353 return
352 return
354
353
355 var_files_list = functions.list_files(self) #Se obtiene la lista de archivos a grabar
354 var_files_list = functions.list_files(self) #Se obtiene la lista de archivos a grabar
356
355
357 self.var_Discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat
356 self.var_Discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat
358
357
359 functions.make_files_print(self) # Se crean los archivos .print
358 functions.make_files_print(self) # Se crean los archivos .print
360
359
361 functions2.make_parameters_conf(self) # se crea el archivo parameters.conf
360 functions2.make_parameters_conf(self) # se crea el archivo parameters.conf
362
361
363 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
362 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
364
363
365 #Se bloquean los parametros de configuracion
364 #Se bloquean los parametros de configuracion
366 functions2.enabled_items1(True, self)
365 functions2.enabled_items1(True, self)
367 self.var_disc_n = 1
366 self.var_disc_n = 1
368 self.var_copy_n = 1
367 self.var_copy_n = 1
369 self.bool_first_iso = True
368 self.bool_first_iso = True
370 self.var_burned_discs = 0 #numero de discos grabados
369 self.var_burned_discs = 0 #numero de discos grabados
371
370
372
371
373 #----------------------------------------------------- Permite reiniciar la configuracion ---------------------------------------------------------------
372 #----------------------------------------------------- Permite reiniciar la configuracion ---------------------------------------------------------------
374
373
375 @pyqtSignature("")
374 @pyqtSignature("")
376 def on_btnRestart_clicked(self):
375 def on_btnRestart_clicked(self):
377 """
376 """
378 Permite que se puedan cambiar los parametros
377 Permite que se puedan cambiar los parametros
379 """
378 """
380 if os.path.isfile("parameters.conf"):
379 if os.path.isfile("parameters.conf"):
381 os.remove("parameters.conf")
380 os.remove("parameters.conf")
382 if os.path.isfile("burning.conf"):
381 if os.path.isfile("burning.conf"):
383 os.remove("burning.conf")
382 os.remove("burning.conf")
384
383
385 functions2.enabled_items1(False, self)
384 functions2.enabled_items1(False, self)
386 self.btnStartburn.setText("Start Burn")
385 self.btnStartburn.setText("Start Burn")
387 self.txtInfo.clear()
386 self.txtInfo.clear()
388
387
389
388
390
389
391 #==============================================================================
390 #==============================================================================
392 # Acciones de los procesos
391 # Acciones de los procesos
393 #==============================================================================
392 #==============================================================================
394
393
395 #------------------------------------------------ Funciones del proceso de creacion del iso ------------------------------------------------------
394 #------------------------------------------------ Funciones del proceso de creacion del iso ------------------------------------------------------
396
395
397 def readOuput_iso(self):
396 def readOuput_iso(self):
398 self.txtProgress.setText("stdout iso: " + QtCore.QString(self.process_iso.readAllStandardOutput()))
397 self.txtProgress.setText("stdout iso: " + QtCore.QString(self.process_iso.readAllStandardOutput()))
399
398
400 def readError_iso(self):
399 def readError_iso(self):
401 self.txtProgress.setText("stderr iso: " + QtCore.QString(self.process_iso.readAllStandardError()))
400 self.txtProgress.setText("stderr iso: " + QtCore.QString(self.process_iso.readAllStandardError()))
402
401
403 def finished_iso(self):
402 def finished_iso(self):
404 self.txtProgress.clear()
403 self.txtProgress.clear()
405
404
406 if not(self.bool_state_burning):
405 if not(self.bool_state_burning):
407 return
406 return
408
407
409 if self.process_iso.exitCode() == 0:
408 if self.process_iso.exitCode() == 0:
410 self.txtInfo.append("------Iso file: "+functions.i2s(self.var_disc_n)+" created successfully\n")
409 self.txtInfo.append("------Iso file: "+functions.i2s(self.var_disc_n)+" created successfully\n")
411 self.var_step = 1
410 self.var_step = 1
412 self.function_burn()
411 self.function_burn()
413
412
414 else:
413 else:
415 self.txtInfo.append("#####Error creating iso file "+functions.i2s(self.var_disc_n)
414 self.txtInfo.append("#####Error creating iso file "+functions.i2s(self.var_disc_n)
416 +" , code "+QtCore.QString(self.process_iso.exitCode()))
415 +" , code "+QtCore.QString(self.process_iso.exitCode()))
417 self.txtInfo.append("Please check the data")
416 self.txtInfo.append("Please check the data")
418 self.txtInfo.append("FATAL ERROR")
417 self.txtInfo.append("FATAL ERROR")
419
418
420 #----------------------------------------------------- Funciones del proceso de grabado ---------------------------------------------------------------
419 #----------------------------------------------------- Funciones del proceso de grabado ---------------------------------------------------------------
421
420
422 def readOuput_burn(self):
421 def readOuput_burn(self):
423 self.txtProgress.setText("stdout burn: " + QtCore.QString(self.process_burn.readAllStandardOutput()))
422 self.txtProgress.setText("stdout burn: " + QtCore.QString(self.process_burn.readAllStandardOutput()))
424
423
425 def readError_burn(self):
424 def readError_burn(self):
426 self.txtProgress.setText("stderr burn: " + QtCore.QString(self.process_burn.readAllStandardError()))
425 self.txtProgress.setText("stderr burn: " + QtCore.QString(self.process_burn.readAllStandardError()))
427
426
428 def finished_burn(self):
427 def finished_burn(self):
429 self.txtProgress.clear()
428 self.txtProgress.clear()
430
429
431 #Si se paro el proceso manualmente se termina
430 #Si se paro el proceso manualmente se termina
432 if not(self.bool_state_burning):
431 if not(self.bool_state_burning):
433 return
432 return
434
433
435 if self.process_burn.exitCode() == 0:
434 if self.process_burn.exitCode() == 0:
436 self.txtInfo.append("-----Complete recording, disc: "+str(self.var_disc_n)+" copy: "+str(self.var_copy_n))
435 self.txtInfo.append("-----Complete recording, disc: "+str(self.var_disc_n)+" copy: "+str(self.var_copy_n))
437 functions2.update_message(1, "COMPLETED", self)
436 functions2.update_message(1, "COMPLETED", self)
438 self.var_step = 2
437 self.var_step = 2
439 self.function_check()
438 self.function_check()
440
439
441 else:
440 else:
442 self.txtInfo.append("#######Error recording, disc: "+functions.i2s(self.var_disc_n)+" copy: "
441 self.txtInfo.append("#######Error recording, disc: "+functions.i2s(self.var_disc_n)+" copy: "
443 +functions.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_burn.exitCode()))
442 +functions.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_burn.exitCode()))
444 functions2.update_message(1, "ERROR", self)
443 functions2.update_message(1, "ERROR", self)
445
444
446 functions.is_last_disc_and_copy(self)
445 functions.is_last_disc_and_copy(self)
447
446
448
447
449 #----------------------------------------------------- Funciones del proceso de verificacion ---------------------------------------------------------------
448 #----------------------------------------------------- Funciones del proceso de verificacion ---------------------------------------------------------------
450
449
451 def readOuput_check(self):
450 def readOuput_check(self):
452 self.txtProgress.setText("stdout check: " + QtCore.QString(self.process_check.readAllStandardOutput()))
451 self.txtProgress.setText("stdout check: " + QtCore.QString(self.process_check.readAllStandardOutput()))
453
452
454 def readError_check(self):
453 def readError_check(self):
455 self.txtProgress.setText("stderr check: " + QtCore.QString(self.process_check.readAllStandardError()))
454 self.txtProgress.setText("stderr check: " + QtCore.QString(self.process_check.readAllStandardError()))
456
455
457 def finished_check(self):
456 def finished_check(self):
458 self.txtProgress.clear()
457 self.txtProgress.clear()
459
458
460 if not(self.bool_state_burning):
459 if not(self.bool_state_burning):
461 return
460 return
462
461
463 if self.process_check.exitCode() == 0:
462 if self.process_check.exitCode() == 0:
464 self.txtInfo.append("--------Complete checking, disc: "+str(self.var_disc_n)+" copy: "+str(self.var_copy_n))
463 self.txtInfo.append("--------Complete checking, disc: "+str(self.var_disc_n)+" copy: "+str(self.var_copy_n))
465 functions2.update_message(2, "CHECKED", self)
464 functions2.update_message(2, "CHECKED", self)
466
465
467 else:
466 else:
468 self.txtInfo.append("#######Error checking, disc: "+functions.i2s(self.var_disc_n)+" copy: "
467 self.txtInfo.append("#######Error checking, disc: "+functions.i2s(self.var_disc_n)+" copy: "
469 +functions.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_check.exitCode()))
468 +functions.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_check.exitCode()))
470 functions2.update_message(2, "ERROR", self)
469 functions2.update_message(2, "ERROR", self)
471
470
471 #borrar el contenido de tmpdata
472 var_tmpdata=self.var_Rpath+"/tmpdata"
473
474 bool_return = functions.remove_dir(var_tmpdata, self)
475 if not(bool_return):
476 self.txtInfo.append("Error deleting directory: "+var_tmpdata)
477 self.bool_state_burning = False
478 return
479
480 bool_return = functions.make_dir(var_tmpdata, self)
481 if not(bool_return):
482 self.txtInfo.append("Error creating directory:"+ var_tmpdata)
483 self.bool_state_burning = False
484 return
485
472 functions.is_last_disc_and_copy(self)
486 functions.is_last_disc_and_copy(self)
473
487
474
488
475
489
476 #==============================================================================
490 #==============================================================================
477 # Botones para el proceso de grabacion
491 # Botones para el proceso de grabacion
478 #==============================================================================
492 #==============================================================================
479
493
480 #----------------------------------------------------- Iniciar proceso de grabacion ---------------------------------------------------------------
494 #----------------------------------------------------- Iniciar proceso de grabacion ---------------------------------------------------------------
481
495
482 @pyqtSignature("")
496 @pyqtSignature("")
483 def on_btnStartburn_clicked(self):
497 def on_btnStartburn_clicked(self):
484 """
498 """
485 Se inicia el proceso de grabacion
499 Se inicia el proceso de grabacion
486 """
500 """
487 #Verifica que exista algun dispositivo de grabacion seleccionado
501 #Verifica que exista algun dispositivo de grabacion seleccionado
488 if not(functions2.selected_devices(self)):
502 if not(functions2.selected_devices(self)):
489 self.txtInfo.append("There is no recording device selected")
503 self.txtInfo.append("There is no recording device selected")
490 return
504 return
491
505
492 # #Lista los dispositivos de grabacion a usar
506 # #Lista los dispositivos de grabacion a usar
493 # for dev in self.var_devices:
507 # for dev in self.var_devices:
494 # self.txtInfo.append("recording device :"+dev)
508 # self.txtInfo.append("recording device :"+dev)
495
509
496 self.bool_state_burning = True
510 self.bool_state_burning = True
497 functions2.enabled_items2(True, self)
511 functions2.enabled_items2(True, self)
498
512
499 if self.bool_first_iso == True:
513 if self.bool_first_iso == True:
500 self.txtInfo.append("BUTTON: on_btnStartburn_clicked")
514 self.txtInfo.append("BUTTON: on_btnStartburn_clicked")
501 self.var_step = 4
515 self.var_step = 4
502 self.function_eject()
516 self.function_eject()
503 return
517 return
504
518
505 if self.var_step == 0:
519 if self.var_step == 0:
506 self.function_iso()
520 self.function_iso()
507 return
521 return
508
522
509 if self.var_step == 1:
523 if self.var_step == 1:
510 self.function_burn()
524 self.function_burn()
511 return
525 return
512
526
513 #----------------------------------------------------- Funcion para el grabado ---------------------------------------------------------------
527 #----------------------------------------------------- Funcion para el grabado ---------------------------------------------------------------
514
528
515 def function_iso(self):
529 def function_iso(self):
516 #Creacion del archivo.iso para la grabacion
530 #Creacion del archivo.iso para la grabacion
517 if self.var_step == 0:
531 if self.var_step == 0:
518 self.txtInfo.append("########## Disc number: "+str(self.var_disc_n)+"##########")
532 self.txtInfo.append("########## Disc number: "+str(self.var_disc_n)+"##########")
519 self.txtInfo.append("------Creating iso file number: "+str(self.var_disc_n))
533 self.txtInfo.append("------Creating iso file number: "+str(self.var_disc_n))
520
534
521 var_cmd = functions.cmd_iso(self)
535 var_cmd = functions.cmd_iso(self)
522
536
523 if self.var_real_show_cmd == True:
537 if self.var_real_show_cmd == True:
524 self.txtInfo.append("CMD: "+var_cmd)
538 self.txtInfo.append("CMD: "+var_cmd)
525
539
526 if self.var_real_iso == False:
540 if self.var_real_iso == False:
527 self.txtInfo.append('**function_iso')
541 self.txtInfo.append('**function_iso')
528 var_cmd="echo 'function_iso'"
542 var_cmd="echo 'function_iso'"
529
543
530 self.process_iso.start(var_cmd)
544 self.process_iso.start(var_cmd)
531
545
532 def function_burn(self):
546 def function_burn(self):
533 #Grabacion de los DVDs
547 #Grabacion de los DVDs
534
548
535 if self.var_step == 1:
549 if self.var_step == 1:
536 self.txtInfo.append("------Recording disc: "+str(self.var_disc_n)+", copy:"+str(self.var_copy_n))
550 self.txtInfo.append("------Recording disc: "+str(self.var_disc_n)+", copy:"+str(self.var_copy_n))
537 functions2.update_message(1, "BURNING", self)
551 functions2.update_message(1, "BURNING", self)
538
552
539 var_cmd = functions.cmd_burn(self)
553 var_cmd = functions.cmd_burn(self)
540
554
541 if self.var_real_show_cmd == True:
555 if self.var_real_show_cmd == True:
542 self.txtInfo.append("CMD: "+var_cmd)
556 self.txtInfo.append("CMD: "+var_cmd)
543
557
544 if self.var_real_burn == False:
558 if self.var_real_burn == False:
545 self.txtInfo.append('**function_burn')
559 self.txtInfo.append('**function_burn')
546 var_cmd="echo 'function_burn'"
560 var_cmd="echo 'function_burn'"
547
561
548 self.process_burn.start(var_cmd)
562 self.process_burn.start(var_cmd)
549
563
550 def function_check(self):
564 def function_check(self):
551 #Verificacion de los discos
565 #Verificacion de los discos
552 if self.var_step == 2:
566 if self.var_step == 2:
553 self.txtInfo.append("-----------checking disc:"+str(self.var_disc_n)+", copy:"+str(self.var_copy_n))
567 self.txtInfo.append("-----------checking disc:"+str(self.var_disc_n)+", copy:"+str(self.var_copy_n))
568
569 functions2.eject_one_device(self)
570 functions2.eject_t_one_device(self)
571 self.txtInfo.append("Waiting ...")
572 time .sleep(20)
573
554 functions2.update_message(2, "CHECKING", self)
574 functions2.update_message(2, "CHECKING", self)
555
575
556 var_cmd = functions.cmd_check(self)
576 dev_sr = functions2.get_dev_sr(self)
577 var_cmd = functions.cmd_check(dev_sr, self)
557
578
558 if self.var_real_show_cmd == True:
579 if self.var_real_show_cmd == True:
559 self.txtInfo.append("CMD: "+var_cmd)
580 self.txtInfo.append("CMD: "+var_cmd)
560
581
561 if self.var_real_check == False:
582 if self.var_real_check == False:
562 self.txtInfo.append('**function_check')
583 self.txtInfo.append('**function_check')
563 var_cmd="echo 'function_check'"
584 var_cmd="echo 'function_check'"
564
585
565 self.process_check.start(var_cmd)
586 self.process_check.start(var_cmd)
566
587
567 #OK
588 #OK
568 def function_eject(self):
589 def function_eject(self):
569 self.txtInfo.append("Ejecting recording devices")
590 self.txtInfo.append("Ejecting recording devices")
570 self.txtInfo.append("Please insert blank discs")
591 self.txtInfo.append("Please insert blank discs")
571
592
572 if self.var_real_eject == True:
593 if self.var_real_eject == True:
573 functions2.eject_devices(self) # Expulsa las bandejas de los dispostivos de grabacion
594 functions2.eject_devices(self) # Expulsa las bandejas de los dispostivos de grabacion
574 else:
595 else:
575 self.txtInfo.append("**functions2.eject_devices")
596 self.txtInfo.append("**functions2.eject_devices")
576
597
577 self.btnStartburn.setText("Continue")
598 self.btnStartburn.setText("Continue")
578 self.btnStartburn.setEnabled(True)
599 self.btnStartburn.setEnabled(True)
579
600
580 if self.bool_first_iso == True:
601 if self.bool_first_iso == True:
581 self.bool_first_iso = False
602 self.bool_first_iso = False
582 self.var_step = 0
603 self.var_step = 0
583
604
584 elif self.var_copy_n == 1:
605 elif self.var_copy_n == 1:
585 self.var_step = 0
606 self.var_step = 0
586
607
587 else:
608 else:
588 self.var_step = 1
609 self.var_step = 1
589
610
590 def function_final(self):
611 def function_final(self):
591 self.txtInfo.append("Recording process is complete")
612 self.txtInfo.append("Recording process is complete")
592 if os.path.isfile("parameters.conf"):
613 if os.path.isfile("parameters.conf"):
593 os.remove("parameters.conf")
614 os.remove("parameters.conf")
594 if os.path.isfile("burning.conf"):
615 if os.path.isfile("burning.conf"):
595 os.remove("burning.conf")
616 os.remove("burning.conf")
596
617
597
618
598
619
599 #----------------------------------------------------- Detener proceso de grabacion ---------------------------------------------------------------
620 #----------------------------------------------------- Detener proceso de grabacion ---------------------------------------------------------------
600
621
601 @pyqtSignature("")
622 @pyqtSignature("")
602 def on_btnStopburn_clicked(self):
623 def on_btnStopburn_clicked(self):
603 """
624 """
604 Slot documentation goes here.
625 Slot documentation goes here.
605 """
626 """
606 self.bool_state_burning = False
627 self.bool_state_burning = False
607
628
608 if self.var_step == 0:
629 if self.var_step == 0:
609 self.process_iso.terminate() #Termina el proceso, si puede
630 self.process_iso.terminate() #Termina el proceso, si puede
610 # self.process_iso.kill() #Mata el proceso, no es la forma adecuada, solo usar si terminate() no funciona
631 # self.process_iso.kill() #Mata el proceso, no es la forma adecuada, solo usar si terminate() no funciona
611 elif self.var_step == 1:
632 elif self.var_step == 1:
612 self.process_burn.terminate()
633 self.process_burn.terminate()
613 elif self.var_step == 2:
634 elif self.var_step == 2:
614 self.process_check.terminate()
635 self.process_check.terminate()
615
636
616 self.txtInfo.append("Stopped recording")
637 self.txtInfo.append("Stopped recording")
617 functions2.enabled_items2(False, self)
638 functions2.enabled_items2(False, self)
618 self.bool_first_iso = True
639 self.bool_first_iso = True
619
640
620
641
621
642
622 #==============================================================================
643 #==============================================================================
623 # Proceso verificacion manual
644 # Proceso verificacion manual
624 #==============================================================================
645 #==============================================================================
625
646
626
647
627 #----------------------------------------------------- Proceso de verificaion manual ---------------------------------------------------------------
648 #----------------------------------------------------- Proceso de verificaion manual ---------------------------------------------------------------
628
649
629
650
630 @pyqtSignature("")
651 @pyqtSignature("")
631 def on_btnTDpath_clicked(self):
652 def on_btnTDpath_clicked(self):
632 """
653 """
633 Slot documentation goes here.
654 Slot documentation goes here.
634 """
655 """
635 self.var_TDpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
656 self.var_TDpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
636 self.txtTDpath.setText(self.var_TDpath)
657 self.txtTDpath.setText(self.var_TDpath)
637 self.statusTDpath = functions.dir_exists(self.var_TDpath, self)
658 self.statusTDpath = functions.dir_exists(self.var_TDpath, self)
638
659
639
660
640 @pyqtSignature("")
661 @pyqtSignature("")
641 def on_btnCHstart_clicked(self):
662 def on_btnCHstart_clicked(self):
642 """
663 """
643 Slot documentation goes here.
664 Slot documentation goes here.
644 """
665 """
645 pass
666 pass
@@ -1,1463 +1,1466
1 <?xml version="1.0" encoding="UTF-8"?>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <ui version="4.0">
2 <ui version="4.0">
3 <class>MainWindow</class>
3 <class>MainWindow</class>
4 <widget class="QMainWindow" name="MainWindow">
4 <widget class="QMainWindow" name="MainWindow">
5 <property name="geometry">
5 <property name="geometry">
6 <rect>
6 <rect>
7 <x>0</x>
7 <x>0</x>
8 <y>0</y>
8 <y>0</y>
9 <width>824</width>
9 <width>824</width>
10 <height>717</height>
10 <height>717</height>
11 </rect>
11 </rect>
12 </property>
12 </property>
13 <property name="windowTitle">
13 <property name="windowTitle">
14 <string>JRO BACKUP MANAGER</string>
14 <string>JRO BACKUP MANAGER</string>
15 </property>
15 </property>
16 <widget class="QWidget" name="centralwidget">
16 <widget class="QWidget" name="centralwidget">
17 <layout class="QVBoxLayout" name="verticalLayout">
17 <layout class="QVBoxLayout" name="verticalLayout">
18 <item>
18 <item>
19 <widget class="QTabWidget" name="tabWidget">
19 <widget class="QTabWidget" name="tabWidget">
20 <property name="enabled">
20 <property name="enabled">
21 <bool>true</bool>
21 <bool>true</bool>
22 </property>
22 </property>
23 <property name="sizePolicy">
23 <property name="sizePolicy">
24 <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
24 <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
25 <horstretch>0</horstretch>
25 <horstretch>0</horstretch>
26 <verstretch>0</verstretch>
26 <verstretch>0</verstretch>
27 </sizepolicy>
27 </sizepolicy>
28 </property>
28 </property>
29 <property name="currentIndex">
29 <property name="currentIndex">
30 <number>0</number>
30 <number>0</number>
31 </property>
31 </property>
32 <widget class="QWidget" name="tabParameters">
32 <widget class="QWidget" name="tabParameters">
33 <property name="enabled">
33 <property name="enabled">
34 <bool>true</bool>
34 <bool>true</bool>
35 </property>
35 </property>
36 <attribute name="title">
36 <attribute name="title">
37 <string>Parameters</string>
37 <string>Parameters</string>
38 </attribute>
38 </attribute>
39 <layout class="QVBoxLayout" name="verticalLayout_2">
39 <layout class="QVBoxLayout" name="verticalLayout_2">
40 <item>
40 <item>
41 <layout class="QHBoxLayout" name="horizontalLayout">
41 <layout class="QHBoxLayout" name="horizontalLayout">
42 <property name="sizeConstraint">
42 <property name="sizeConstraint">
43 <enum>QLayout::SetDefaultConstraint</enum>
43 <enum>QLayout::SetDefaultConstraint</enum>
44 </property>
44 </property>
45 <item>
45 <item>
46 <widget class="QLineEdit" name="txtDpath">
46 <widget class="QLineEdit" name="txtDpath">
47 <property name="sizePolicy">
47 <property name="sizePolicy">
48 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
48 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
49 <horstretch>0</horstretch>
49 <horstretch>0</horstretch>
50 <verstretch>0</verstretch>
50 <verstretch>0</verstretch>
51 </sizepolicy>
51 </sizepolicy>
52 </property>
52 </property>
53 </widget>
53 </widget>
54 </item>
54 </item>
55 <item>
55 <item>
56 <widget class="QPushButton" name="btnDpath">
56 <widget class="QPushButton" name="btnDpath">
57 <property name="sizePolicy">
57 <property name="sizePolicy">
58 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
58 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
59 <horstretch>0</horstretch>
59 <horstretch>0</horstretch>
60 <verstretch>0</verstretch>
60 <verstretch>0</verstretch>
61 </sizepolicy>
61 </sizepolicy>
62 </property>
62 </property>
63 <property name="text">
63 <property name="text">
64 <string>Data Path</string>
64 <string>Data Path</string>
65 </property>
65 </property>
66 <property name="checkable">
66 <property name="checkable">
67 <bool>false</bool>
67 <bool>false</bool>
68 </property>
68 </property>
69 </widget>
69 </widget>
70 </item>
70 </item>
71 </layout>
71 </layout>
72 </item>
72 </item>
73 <item>
73 <item>
74 <layout class="QHBoxLayout" name="horizontalLayout_3">
74 <layout class="QHBoxLayout" name="horizontalLayout_3">
75 <item>
75 <item>
76 <widget class="QLineEdit" name="txtRpath"/>
76 <widget class="QLineEdit" name="txtRpath"/>
77 </item>
77 </item>
78 <item>
78 <item>
79 <widget class="QPushButton" name="btnRpath">
79 <widget class="QPushButton" name="btnRpath">
80 <property name="text">
80 <property name="text">
81 <string>Resource Path</string>
81 <string>Resource Path</string>
82 </property>
82 </property>
83 </widget>
83 </widget>
84 </item>
84 </item>
85 </layout>
85 </layout>
86 </item>
86 </item>
87 <item>
87 <item>
88 <widget class="QLabel" name="lblDtype">
88 <widget class="QLabel" name="lblDtype">
89 <property name="text">
89 <property name="text">
90 <string>Data Type</string>
90 <string>Data Type</string>
91 </property>
91 </property>
92 </widget>
92 </widget>
93 </item>
93 </item>
94 <item>
94 <item>
95 <layout class="QHBoxLayout" name="horizontalLayout_4">
95 <layout class="QHBoxLayout" name="horizontalLayout_4">
96 <item>
96 <item>
97 <widget class="QComboBox" name="lstDtype">
97 <widget class="QComboBox" name="lstDtype">
98 <item>
98 <item>
99 <property name="text">
99 <property name="text">
100 <string>Raw Data</string>
100 <string>Raw Data</string>
101 </property>
101 </property>
102 </item>
102 </item>
103 <item>
103 <item>
104 <property name="text">
104 <property name="text">
105 <string>Process Data</string>
105 <string>Process Data</string>
106 </property>
106 </property>
107 </item>
107 </item>
108 <item>
108 <item>
109 <property name="text">
109 <property name="text">
110 <string>BLTR Data</string>
110 <string>BLTR Data</string>
111 </property>
111 </property>
112 </item>
112 </item>
113 <item>
113 <item>
114 <property name="text">
114 <property name="text">
115 <string>Other</string>
115 <string>Other</string>
116 </property>
116 </property>
117 </item>
117 </item>
118 </widget>
118 </widget>
119 </item>
119 </item>
120 <item>
120 <item>
121 <widget class="QLineEdit" name="txtDtype">
121 <widget class="QLineEdit" name="txtDtype">
122 <property name="sizePolicy">
122 <property name="sizePolicy">
123 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
123 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
124 <horstretch>0</horstretch>
124 <horstretch>0</horstretch>
125 <verstretch>0</verstretch>
125 <verstretch>0</verstretch>
126 </sizepolicy>
126 </sizepolicy>
127 </property>
127 </property>
128 <property name="text">
128 <property name="text">
129 <string>r</string>
129 <string>r</string>
130 </property>
130 </property>
131 <property name="readOnly">
131 <property name="readOnly">
132 <bool>true</bool>
132 <bool>true</bool>
133 </property>
133 </property>
134 </widget>
134 </widget>
135 </item>
135 </item>
136 <item>
136 <item>
137 <spacer name="horizontalSpacer">
137 <spacer name="horizontalSpacer">
138 <property name="orientation">
138 <property name="orientation">
139 <enum>Qt::Horizontal</enum>
139 <enum>Qt::Horizontal</enum>
140 </property>
140 </property>
141 <property name="sizeType">
141 <property name="sizeType">
142 <enum>QSizePolicy::Expanding</enum>
142 <enum>QSizePolicy::Expanding</enum>
143 </property>
143 </property>
144 <property name="sizeHint" stdset="0">
144 <property name="sizeHint" stdset="0">
145 <size>
145 <size>
146 <width>40</width>
146 <width>40</width>
147 <height>20</height>
147 <height>20</height>
148 </size>
148 </size>
149 </property>
149 </property>
150 </spacer>
150 </spacer>
151 </item>
151 </item>
152 </layout>
152 </layout>
153 </item>
153 </item>
154 <item>
154 <item>
155 <layout class="QHBoxLayout" name="horizontalLayout_6">
155 <layout class="QHBoxLayout" name="horizontalLayout_6">
156 <item>
156 <item>
157 <widget class="QLabel" name="lblElabel">
157 <widget class="QLabel" name="lblElabel">
158 <property name="text">
158 <property name="text">
159 <string>Exp. Label at device</string>
159 <string>Exp. Label at device</string>
160 </property>
160 </property>
161 </widget>
161 </widget>
162 </item>
162 </item>
163 <item>
163 <item>
164 <widget class="QLabel" name="lblCopys">
164 <widget class="QLabel" name="lblCopys">
165 <property name="text">
165 <property name="text">
166 <string>Copys</string>
166 <string>Copys</string>
167 </property>
167 </property>
168 </widget>
168 </widget>
169 </item>
169 </item>
170 </layout>
170 </layout>
171 </item>
171 </item>
172 <item>
172 <item>
173 <layout class="QHBoxLayout" name="horizontalLayout_5">
173 <layout class="QHBoxLayout" name="horizontalLayout_5">
174 <item>
174 <item>
175 <widget class="QLineEdit" name="txtElabel"/>
175 <widget class="QLineEdit" name="txtElabel"/>
176 </item>
176 </item>
177 <item>
177 <item>
178 <widget class="QSpinBox" name="txtCopys">
178 <widget class="QSpinBox" name="txtCopys">
179 <property name="sizePolicy">
179 <property name="sizePolicy">
180 <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
180 <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
181 <horstretch>0</horstretch>
181 <horstretch>0</horstretch>
182 <verstretch>0</verstretch>
182 <verstretch>0</verstretch>
183 </sizepolicy>
183 </sizepolicy>
184 </property>
184 </property>
185 <property name="minimum">
185 <property name="minimum">
186 <number>1</number>
186 <number>1</number>
187 </property>
187 </property>
188 </widget>
188 </widget>
189 </item>
189 </item>
190 </layout>
190 </layout>
191 </item>
191 </item>
192 <item>
192 <item>
193 <layout class="QHBoxLayout" name="horizontalLayout_7">
193 <layout class="QHBoxLayout" name="horizontalLayout_7">
194 <item>
194 <item>
195 <widget class="QLabel" name="lblStartDay">
195 <widget class="QLabel" name="lblStartDay">
196 <property name="text">
196 <property name="text">
197 <string>Start Day:</string>
197 <string>Start Day:</string>
198 </property>
198 </property>
199 </widget>
199 </widget>
200 </item>
200 </item>
201 <item>
201 <item>
202 <widget class="QLabel" name="lblStopDay">
202 <widget class="QLabel" name="lblStopDay">
203 <property name="text">
203 <property name="text">
204 <string>Stop Day:</string>
204 <string>Stop Day:</string>
205 </property>
205 </property>
206 </widget>
206 </widget>
207 </item>
207 </item>
208 </layout>
208 </layout>
209 </item>
209 </item>
210 <item>
210 <item>
211 <layout class="QHBoxLayout" name="horizontalLayout_8">
211 <layout class="QHBoxLayout" name="horizontalLayout_8">
212 <item>
212 <item>
213 <widget class="QComboBox" name="lstStartDay"/>
213 <widget class="QComboBox" name="lstStartDay"/>
214 </item>
214 </item>
215 <item>
215 <item>
216 <widget class="QComboBox" name="lstStopDay"/>
216 <widget class="QComboBox" name="lstStopDay"/>
217 </item>
217 </item>
218 </layout>
218 </layout>
219 </item>
219 </item>
220 </layout>
220 </layout>
221 </widget>
221 </widget>
222 <widget class="QWidget" name="tabDconfig">
222 <widget class="QWidget" name="tabDconfig">
223 <property name="enabled">
223 <property name="enabled">
224 <bool>true</bool>
224 <bool>true</bool>
225 </property>
225 </property>
226 <property name="sizePolicy">
226 <property name="sizePolicy">
227 <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
227 <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
228 <horstretch>0</horstretch>
228 <horstretch>0</horstretch>
229 <verstretch>0</verstretch>
229 <verstretch>0</verstretch>
230 </sizepolicy>
230 </sizepolicy>
231 </property>
231 </property>
232 <attribute name="title">
232 <attribute name="title">
233 <string>Device Config.</string>
233 <string>Device Config.</string>
234 </attribute>
234 </attribute>
235 <layout class="QVBoxLayout" name="verticalLayout_3">
235 <layout class="QVBoxLayout" name="verticalLayout_3">
236 <item>
236 <item>
237 <layout class="QHBoxLayout" name="horizontalLayout_12">
237 <layout class="QHBoxLayout" name="horizontalLayout_12">
238 <item>
238 <item>
239 <layout class="QVBoxLayout" name="verticalLayout_15">
239 <layout class="QVBoxLayout" name="verticalLayout_15">
240 <item>
240 <item>
241 <widget class="QCheckBox" name="chkDevA">
241 <widget class="QCheckBox" name="chkDevA">
242 <property name="text">
242 <property name="text">
243 <string>Dev A</string>
243 <string>Dev A</string>
244 </property>
244 </property>
245 <property name="checked">
245 <property name="checked">
246 <bool>true</bool>
246 <bool>true</bool>
247 </property>
247 </property>
248 </widget>
248 </widget>
249 </item>
249 </item>
250 <item>
250 <item>
251 <widget class="QWidget" name="grpDevA" native="true">
251 <widget class="QWidget" name="grpDevA" native="true">
252 <layout class="QVBoxLayout" name="verticalLayout_11">
252 <layout class="QVBoxLayout" name="verticalLayout_11">
253 <item>
253 <item>
254 <widget class="QLineEdit" name="txtDeviceA">
254 <widget class="QLineEdit" name="txtDeviceA">
255 <property name="readOnly">
255 <property name="readOnly">
256 <bool>true</bool>
256 <bool>true</bool>
257 </property>
257 </property>
258 </widget>
258 </widget>
259 </item>
259 </item>
260 <item>
260 <item>
261 <widget class="QSpinBox" name="txtBspeedA">
261 <widget class="QSpinBox" name="txtBspeedA">
262 <property name="readOnly">
262 <property name="readOnly">
263 <bool>true</bool>
263 <bool>true</bool>
264 </property>
264 </property>
265 <property name="minimum">
265 <property name="minimum">
266 <number>1</number>
266 <number>1</number>
267 </property>
267 </property>
268 <property name="value">
268 <property name="value">
269 <number>16</number>
269 <number>16</number>
270 </property>
270 </property>
271 </widget>
271 </widget>
272 </item>
272 </item>
273 <item>
273 <item>
274 <widget class="QLineEdit" name="txtBmodeA">
274 <widget class="QLineEdit" name="txtBmodeA">
275 <property name="text">
275 <property name="text">
276 <string>-sao</string>
276 <string>-sao</string>
277 </property>
277 </property>
278 <property name="readOnly">
278 <property name="readOnly">
279 <bool>true</bool>
279 <bool>true</bool>
280 </property>
280 </property>
281 </widget>
281 </widget>
282 </item>
282 </item>
283 <item>
283 <item>
284 <widget class="QPushButton" name="btnTdevA">
284 <widget class="QPushButton" name="btnTdevA">
285 <property name="text">
285 <property name="text">
286 <string>Test DevA</string>
286 <string>Test DevA</string>
287 </property>
287 </property>
288 </widget>
288 </widget>
289 </item>
289 </item>
290 </layout>
290 </layout>
291 </widget>
291 </widget>
292 </item>
292 </item>
293 </layout>
293 </layout>
294 </item>
294 </item>
295 <item>
295 <item>
296 <layout class="QVBoxLayout" name="verticalLayout_16">
296 <layout class="QVBoxLayout" name="verticalLayout_16">
297 <item>
297 <item>
298 <widget class="QCheckBox" name="chkDevB">
298 <widget class="QCheckBox" name="chkDevB">
299 <property name="text">
299 <property name="text">
300 <string>Dev B</string>
300 <string>Dev B</string>
301 </property>
301 </property>
302 <property name="checked">
302 <property name="checked">
303 <bool>true</bool>
303 <bool>true</bool>
304 </property>
304 </property>
305 </widget>
305 </widget>
306 </item>
306 </item>
307 <item>
307 <item>
308 <widget class="QWidget" name="grpDevB" native="true">
308 <widget class="QWidget" name="grpDevB" native="true">
309 <layout class="QVBoxLayout" name="verticalLayout_12">
309 <layout class="QVBoxLayout" name="verticalLayout_12">
310 <item>
310 <item>
311 <widget class="QLineEdit" name="txtDeviceB">
311 <widget class="QLineEdit" name="txtDeviceB">
312 <property name="readOnly">
312 <property name="readOnly">
313 <bool>true</bool>
313 <bool>true</bool>
314 </property>
314 </property>
315 </widget>
315 </widget>
316 </item>
316 </item>
317 <item>
317 <item>
318 <widget class="QSpinBox" name="txtBspeedB">
318 <widget class="QSpinBox" name="txtBspeedB">
319 <property name="readOnly">
319 <property name="readOnly">
320 <bool>true</bool>
320 <bool>true</bool>
321 </property>
321 </property>
322 <property name="minimum">
322 <property name="minimum">
323 <number>1</number>
323 <number>1</number>
324 </property>
324 </property>
325 <property name="value">
325 <property name="value">
326 <number>16</number>
326 <number>16</number>
327 </property>
327 </property>
328 </widget>
328 </widget>
329 </item>
329 </item>
330 <item>
330 <item>
331 <widget class="QLineEdit" name="txtBmodeB">
331 <widget class="QLineEdit" name="txtBmodeB">
332 <property name="text">
332 <property name="text">
333 <string>-sao</string>
333 <string>-sao</string>
334 </property>
334 </property>
335 <property name="readOnly">
335 <property name="readOnly">
336 <bool>true</bool>
336 <bool>true</bool>
337 </property>
337 </property>
338 </widget>
338 </widget>
339 </item>
339 </item>
340 <item>
340 <item>
341 <widget class="QPushButton" name="btnTdevB">
341 <widget class="QPushButton" name="btnTdevB">
342 <property name="text">
342 <property name="text">
343 <string>Test DevB</string>
343 <string>Test DevB</string>
344 </property>
344 </property>
345 </widget>
345 </widget>
346 </item>
346 </item>
347 </layout>
347 </layout>
348 </widget>
348 </widget>
349 </item>
349 </item>
350 </layout>
350 </layout>
351 </item>
351 </item>
352 <item>
352 <item>
353 <layout class="QVBoxLayout" name="verticalLayout_17">
353 <layout class="QVBoxLayout" name="verticalLayout_17">
354 <item>
354 <item>
355 <widget class="QCheckBox" name="chkDevC">
355 <widget class="QCheckBox" name="chkDevC">
356 <property name="text">
356 <property name="text">
357 <string>Dev C</string>
357 <string>Dev C</string>
358 </property>
358 </property>
359 <property name="checked">
359 <property name="checked">
360 <bool>true</bool>
360 <bool>true</bool>
361 </property>
361 </property>
362 </widget>
362 </widget>
363 </item>
363 </item>
364 <item>
364 <item>
365 <widget class="QWidget" name="grpDevC" native="true">
365 <widget class="QWidget" name="grpDevC" native="true">
366 <layout class="QVBoxLayout" name="verticalLayout_13">
366 <layout class="QVBoxLayout" name="verticalLayout_13">
367 <item>
367 <item>
368 <widget class="QLineEdit" name="txtDeviceC">
368 <widget class="QLineEdit" name="txtDeviceC">
369 <property name="readOnly">
369 <property name="readOnly">
370 <bool>true</bool>
370 <bool>true</bool>
371 </property>
371 </property>
372 </widget>
372 </widget>
373 </item>
373 </item>
374 <item>
374 <item>
375 <widget class="QSpinBox" name="txtBspeedC">
375 <widget class="QSpinBox" name="txtBspeedC">
376 <property name="readOnly">
376 <property name="readOnly">
377 <bool>true</bool>
377 <bool>true</bool>
378 </property>
378 </property>
379 <property name="minimum">
379 <property name="minimum">
380 <number>1</number>
380 <number>1</number>
381 </property>
381 </property>
382 <property name="value">
382 <property name="value">
383 <number>16</number>
383 <number>16</number>
384 </property>
384 </property>
385 </widget>
385 </widget>
386 </item>
386 </item>
387 <item>
387 <item>
388 <widget class="QLineEdit" name="txtBmodeC">
388 <widget class="QLineEdit" name="txtBmodeC">
389 <property name="text">
389 <property name="text">
390 <string>-sao</string>
390 <string>-sao</string>
391 </property>
391 </property>
392 <property name="readOnly">
392 <property name="readOnly">
393 <bool>true</bool>
393 <bool>true</bool>
394 </property>
394 </property>
395 </widget>
395 </widget>
396 </item>
396 </item>
397 <item>
397 <item>
398 <widget class="QPushButton" name="btnTdevC">
398 <widget class="QPushButton" name="btnTdevC">
399 <property name="text">
399 <property name="text">
400 <string>Test DevC</string>
400 <string>Test DevC</string>
401 </property>
401 </property>
402 </widget>
402 </widget>
403 </item>
403 </item>
404 </layout>
404 </layout>
405 </widget>
405 </widget>
406 </item>
406 </item>
407 </layout>
407 </layout>
408 </item>
408 </item>
409 <item>
409 <item>
410 <layout class="QVBoxLayout" name="verticalLayout_18">
410 <layout class="QVBoxLayout" name="verticalLayout_18">
411 <item>
411 <item>
412 <widget class="QCheckBox" name="chkDevD">
412 <widget class="QCheckBox" name="chkDevD">
413 <property name="text">
413 <property name="text">
414 <string>Dev D</string>
414 <string>Dev D</string>
415 </property>
415 </property>
416 <property name="checked">
416 <property name="checked">
417 <bool>true</bool>
417 <bool>true</bool>
418 </property>
418 </property>
419 </widget>
419 </widget>
420 </item>
420 </item>
421 <item>
421 <item>
422 <widget class="QWidget" name="grpDevD" native="true">
422 <widget class="QWidget" name="grpDevD" native="true">
423 <layout class="QVBoxLayout" name="verticalLayout_14">
423 <layout class="QVBoxLayout" name="verticalLayout_14">
424 <item>
424 <item>
425 <widget class="QLineEdit" name="txtDeviceD">
425 <widget class="QLineEdit" name="txtDeviceD">
426 <property name="readOnly">
426 <property name="readOnly">
427 <bool>true</bool>
427 <bool>true</bool>
428 </property>
428 </property>
429 </widget>
429 </widget>
430 </item>
430 </item>
431 <item>
431 <item>
432 <widget class="QSpinBox" name="txtBspeedD">
432 <widget class="QSpinBox" name="txtBspeedD">
433 <property name="readOnly">
433 <property name="readOnly">
434 <bool>true</bool>
434 <bool>true</bool>
435 </property>
435 </property>
436 <property name="minimum">
436 <property name="minimum">
437 <number>1</number>
437 <number>1</number>
438 </property>
438 </property>
439 <property name="value">
439 <property name="value">
440 <number>16</number>
440 <number>16</number>
441 </property>
441 </property>
442 </widget>
442 </widget>
443 </item>
443 </item>
444 <item>
444 <item>
445 <widget class="QLineEdit" name="txtBmodeD">
445 <widget class="QLineEdit" name="txtBmodeD">
446 <property name="text">
446 <property name="text">
447 <string>-sao</string>
447 <string>-sao</string>
448 </property>
448 </property>
449 <property name="readOnly">
449 <property name="readOnly">
450 <bool>true</bool>
450 <bool>true</bool>
451 </property>
451 </property>
452 </widget>
452 </widget>
453 </item>
453 </item>
454 <item>
454 <item>
455 <widget class="QPushButton" name="btnTdevD">
455 <widget class="QPushButton" name="btnTdevD">
456 <property name="text">
456 <property name="text">
457 <string>Test DevD</string>
457 <string>Test DevD</string>
458 </property>
458 </property>
459 </widget>
459 </widget>
460 </item>
460 </item>
461 </layout>
461 </layout>
462 </widget>
462 </widget>
463 </item>
463 </item>
464 </layout>
464 </layout>
465 </item>
465 </item>
466 <item>
466 <item>
467 <layout class="QVBoxLayout" name="verticalLayout_19">
467 <layout class="QVBoxLayout" name="verticalLayout_19">
468 <item>
468 <item>
469 <spacer name="verticalSpacer_3">
469 <spacer name="verticalSpacer_3">
470 <property name="orientation">
470 <property name="orientation">
471 <enum>Qt::Vertical</enum>
471 <enum>Qt::Vertical</enum>
472 </property>
472 </property>
473 <property name="sizeType">
473 <property name="sizeType">
474 <enum>QSizePolicy::Minimum</enum>
474 <enum>QSizePolicy::Minimum</enum>
475 </property>
475 </property>
476 <property name="sizeHint" stdset="0">
476 <property name="sizeHint" stdset="0">
477 <size>
477 <size>
478 <width>20</width>
478 <width>20</width>
479 <height>40</height>
479 <height>40</height>
480 </size>
480 </size>
481 </property>
481 </property>
482 </spacer>
482 </spacer>
483 </item>
483 </item>
484 <item>
484 <item>
485 <widget class="QWidget" name="grpDevD_2" native="true">
485 <widget class="QWidget" name="grpDevD_2" native="true">
486 <layout class="QVBoxLayout" name="verticalLayout_20">
486 <layout class="QVBoxLayout" name="verticalLayout_20">
487 <item>
487 <item>
488 <widget class="QLabel" name="lblDevice">
488 <widget class="QLabel" name="lblDevice">
489 <property name="text">
489 <property name="text">
490 <string>Device</string>
490 <string>Device</string>
491 </property>
491 </property>
492 </widget>
492 </widget>
493 </item>
493 </item>
494 <item>
494 <item>
495 <widget class="QLabel" name="lblBspeed">
495 <widget class="QLabel" name="lblBspeed">
496 <property name="text">
496 <property name="text">
497 <string>Burn Speed</string>
497 <string>Burn Speed</string>
498 </property>
498 </property>
499 </widget>
499 </widget>
500 </item>
500 </item>
501 <item>
501 <item>
502 <widget class="QLabel" name="lblBmode">
502 <widget class="QLabel" name="lblBmode">
503 <property name="text">
503 <property name="text">
504 <string>Burn Mode</string>
504 <string>Burn Mode</string>
505 </property>
505 </property>
506 </widget>
506 </widget>
507 </item>
507 </item>
508 <item>
508 <item>
509 <spacer name="verticalSpacer_4">
509 <spacer name="verticalSpacer_4">
510 <property name="orientation">
510 <property name="orientation">
511 <enum>Qt::Vertical</enum>
511 <enum>Qt::Vertical</enum>
512 </property>
512 </property>
513 <property name="sizeType">
513 <property name="sizeType">
514 <enum>QSizePolicy::Fixed</enum>
514 <enum>QSizePolicy::Fixed</enum>
515 </property>
515 </property>
516 <property name="sizeHint" stdset="0">
516 <property name="sizeHint" stdset="0">
517 <size>
517 <size>
518 <width>20</width>
518 <width>20</width>
519 <height>40</height>
519 <height>40</height>
520 </size>
520 </size>
521 </property>
521 </property>
522 </spacer>
522 </spacer>
523 </item>
523 </item>
524 </layout>
524 </layout>
525 </widget>
525 </widget>
526 </item>
526 </item>
527 </layout>
527 </layout>
528 </item>
528 </item>
529 </layout>
529 </layout>
530 </item>
530 </item>
531 <item>
531 <item>
532 <spacer name="verticalSpacer_2">
532 <spacer name="verticalSpacer_2">
533 <property name="orientation">
533 <property name="orientation">
534 <enum>Qt::Vertical</enum>
534 <enum>Qt::Vertical</enum>
535 </property>
535 </property>
536 <property name="sizeType">
536 <property name="sizeType">
537 <enum>QSizePolicy::Minimum</enum>
537 <enum>QSizePolicy::Minimum</enum>
538 </property>
538 </property>
539 <property name="sizeHint" stdset="0">
539 <property name="sizeHint" stdset="0">
540 <size>
540 <size>
541 <width>20</width>
541 <width>20</width>
542 <height>40</height>
542 <height>40</height>
543 </size>
543 </size>
544 </property>
544 </property>
545 </spacer>
545 </spacer>
546 </item>
546 </item>
547 <item>
547 <item>
548 <layout class="QHBoxLayout" name="horizontalLayout_11">
548 <layout class="QHBoxLayout" name="horizontalLayout_11">
549 <property name="spacing">
549 <property name="spacing">
550 <number>6</number>
550 <number>6</number>
551 </property>
551 </property>
552 <property name="sizeConstraint">
552 <property name="sizeConstraint">
553 <enum>QLayout::SetDefaultConstraint</enum>
553 <enum>QLayout::SetDefaultConstraint</enum>
554 </property>
554 </property>
555 <item>
555 <item>
556 <widget class="QLabel" name="lblDcapacity">
556 <widget class="QLabel" name="lblDcapacity">
557 <property name="sizePolicy">
557 <property name="sizePolicy">
558 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
558 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
559 <horstretch>0</horstretch>
559 <horstretch>0</horstretch>
560 <verstretch>0</verstretch>
560 <verstretch>0</verstretch>
561 </sizepolicy>
561 </sizepolicy>
562 </property>
562 </property>
563 <property name="text">
563 <property name="text">
564 <string>Device Capacity</string>
564 <string>Device Capacity</string>
565 </property>
565 </property>
566 </widget>
566 </widget>
567 </item>
567 </item>
568 <item>
568 <item>
569 <spacer name="horizontalSpacer_2">
569 <spacer name="horizontalSpacer_2">
570 <property name="orientation">
570 <property name="orientation">
571 <enum>Qt::Horizontal</enum>
571 <enum>Qt::Horizontal</enum>
572 </property>
572 </property>
573 <property name="sizeHint" stdset="0">
573 <property name="sizeHint" stdset="0">
574 <size>
574 <size>
575 <width>40</width>
575 <width>40</width>
576 <height>20</height>
576 <height>20</height>
577 </size>
577 </size>
578 </property>
578 </property>
579 </spacer>
579 </spacer>
580 </item>
580 </item>
581 </layout>
581 </layout>
582 </item>
582 </item>
583 <item>
583 <item>
584 <layout class="QHBoxLayout" name="horizontalLayout_10">
584 <layout class="QHBoxLayout" name="horizontalLayout_10">
585 <property name="sizeConstraint">
585 <property name="sizeConstraint">
586 <enum>QLayout::SetFixedSize</enum>
586 <enum>QLayout::SetFixedSize</enum>
587 </property>
587 </property>
588 <item>
588 <item>
589 <widget class="QComboBox" name="lstDcapacity">
589 <widget class="QComboBox" name="lstDcapacity">
590 <property name="currentIndex">
590 <property name="currentIndex">
591 <number>2</number>
591 <number>2</number>
592 </property>
592 </property>
593 <item>
593 <item>
594 <property name="text">
594 <property name="text">
595 <string>BluRay [25.0 GB]</string>
595 <string>BluRay [25.0 GB]</string>
596 </property>
596 </property>
597 </item>
597 </item>
598 <item>
598 <item>
599 <property name="text">
599 <property name="text">
600 <string>DVD2 [8.5 GB]</string>
600 <string>DVD2 [8.5 GB]</string>
601 </property>
601 </property>
602 </item>
602 </item>
603 <item>
603 <item>
604 <property name="text">
604 <property name="text">
605 <string>DVD1 [4.7 GB]</string>
605 <string>DVD1 [4.7 GB]</string>
606 </property>
606 </property>
607 </item>
607 </item>
608 <item>
608 <item>
609 <property name="text">
609 <property name="text">
610 <string>CD [0.7 GB]</string>
610 <string>CD [0.7 GB]</string>
611 </property>
611 </property>
612 </item>
612 </item>
613 <item>
613 <item>
614 <property name="text">
614 <property name="text">
615 <string>Other [? MB]</string>
615 <string>Other [? MB]</string>
616 </property>
616 </property>
617 </item>
617 </item>
618 </widget>
618 </widget>
619 </item>
619 </item>
620 <item>
620 <item>
621 <widget class="QDoubleSpinBox" name="txtDcapacity">
621 <widget class="QDoubleSpinBox" name="txtDcapacity">
622 <property name="sizePolicy">
622 <property name="sizePolicy">
623 <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
623 <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
624 <horstretch>0</horstretch>
624 <horstretch>0</horstretch>
625 <verstretch>0</verstretch>
625 <verstretch>0</verstretch>
626 </sizepolicy>
626 </sizepolicy>
627 </property>
627 </property>
628 <property name="readOnly">
628 <property name="readOnly">
629 <bool>true</bool>
629 <bool>true</bool>
630 </property>
630 </property>
631 <property name="minimum">
631 <property name="minimum">
632 <double>100.000000000000000</double>
632 <double>100.000000000000000</double>
633 </property>
633 </property>
634 <property name="maximum">
634 <property name="maximum">
635 <double>99999.990000000005239</double>
635 <double>99999.990000000005239</double>
636 </property>
636 </property>
637 <property name="value">
637 <property name="value">
638 <double>4482.270000000000437</double>
638 <double>4482.270000000000437</double>
639 </property>
639 </property>
640 </widget>
640 </widget>
641 </item>
641 </item>
642 <item>
642 <item>
643 <spacer name="horizontalSpacer_3">
643 <spacer name="horizontalSpacer_3">
644 <property name="orientation">
644 <property name="orientation">
645 <enum>Qt::Horizontal</enum>
645 <enum>Qt::Horizontal</enum>
646 </property>
646 </property>
647 <property name="sizeHint" stdset="0">
647 <property name="sizeHint" stdset="0">
648 <size>
648 <size>
649 <width>40</width>
649 <width>40</width>
650 <height>20</height>
650 <height>20</height>
651 </size>
651 </size>
652 </property>
652 </property>
653 </spacer>
653 </spacer>
654 </item>
654 </item>
655 <item>
655 <item>
656 <widget class="QLabel" name="lblPSgraphic">
656 <widget class="QLabel" name="lblPSgraphic">
657 <property name="text">
657 <property name="text">
658 <string>PS Graphic</string>
658 <string>PS Graphic</string>
659 </property>
659 </property>
660 </widget>
660 </widget>
661 </item>
661 </item>
662 <item>
662 <item>
663 <widget class="QSpinBox" name="txtPSgraphic">
663 <widget class="QSpinBox" name="txtPSgraphic">
664 <property name="minimum">
664 <property name="minimum">
665 <number>1</number>
665 <number>1</number>
666 </property>
666 </property>
667 <property name="maximum">
667 <property name="maximum">
668 <number>33</number>
668 <number>33</number>
669 </property>
669 </property>
670 </widget>
670 </widget>
671 </item>
671 </item>
672 </layout>
672 </layout>
673 </item>
673 </item>
674 </layout>
674 </layout>
675 </widget>
675 </widget>
676 <widget class="QWidget" name="tabStatus">
676 <widget class="QWidget" name="tabStatus">
677 <attribute name="title">
677 <attribute name="title">
678 <string>Status Burn</string>
678 <string>Status Burn</string>
679 </attribute>
679 </attribute>
680 <layout class="QVBoxLayout" name="verticalLayout_4">
680 <layout class="QVBoxLayout" name="verticalLayout_4">
681 <item>
681 <item>
682 <layout class="QHBoxLayout" name="horizontalLayout_18">
682 <layout class="QHBoxLayout" name="horizontalLayout_18">
683 <item>
683 <item>
684 <layout class="QVBoxLayout" name="verticalLayout_21">
684 <layout class="QVBoxLayout" name="verticalLayout_21">
685 <item>
685 <item>
686 <widget class="QLabel" name="label_4">
686 <widget class="QLabel" name="label_4">
687 <property name="text">
687 <property name="text">
688 <string>BURN</string>
688 <string>BURN</string>
689 </property>
689 </property>
690 </widget>
690 </widget>
691 </item>
691 </item>
692 <item>
692 <item>
693 <spacer name="horizontalSpacer_9">
693 <spacer name="horizontalSpacer_9">
694 <property name="orientation">
694 <property name="orientation">
695 <enum>Qt::Horizontal</enum>
695 <enum>Qt::Horizontal</enum>
696 </property>
696 </property>
697 <property name="sizeType">
697 <property name="sizeType">
698 <enum>QSizePolicy::Minimum</enum>
698 <enum>QSizePolicy::Minimum</enum>
699 </property>
699 </property>
700 <property name="sizeHint" stdset="0">
700 <property name="sizeHint" stdset="0">
701 <size>
701 <size>
702 <width>40</width>
702 <width>40</width>
703 <height>20</height>
703 <height>20</height>
704 </size>
704 </size>
705 </property>
705 </property>
706 </spacer>
706 </spacer>
707 </item>
707 </item>
708 <item>
708 <item>
709 <widget class="QLabel" name="lblSTATUS">
709 <widget class="QLabel" name="lblSTATUS">
710 <property name="sizePolicy">
710 <property name="sizePolicy">
711 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
711 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
712 <horstretch>0</horstretch>
712 <horstretch>0</horstretch>
713 <verstretch>0</verstretch>
713 <verstretch>0</verstretch>
714 </sizepolicy>
714 </sizepolicy>
715 </property>
715 </property>
716 <property name="text">
716 <property name="text">
717 <string>STATUS</string>
717 <string>STATUS</string>
718 </property>
718 </property>
719 </widget>
719 </widget>
720 </item>
720 </item>
721 <item>
721 <item>
722 <widget class="QLabel" name="lblINFO">
722 <widget class="QLabel" name="lblINFO">
723 <property name="text">
723 <property name="text">
724 <string>DISC</string>
724 <string>DISC</string>
725 </property>
725 </property>
726 </widget>
726 </widget>
727 </item>
727 </item>
728 <item>
728 <item>
729 <widget class="QLabel" name="lblSET">
729 <widget class="QLabel" name="lblSET">
730 <property name="text">
730 <property name="text">
731 <string>COPY</string>
731 <string>COPY</string>
732 </property>
732 </property>
733 </widget>
733 </widget>
734 </item>
734 </item>
735 </layout>
735 </layout>
736 </item>
736 </item>
737 <item>
737 <item>
738 <layout class="QVBoxLayout" name="verticalLayout_22">
738 <layout class="QVBoxLayout" name="verticalLayout_22">
739 <item>
739 <item>
740 <spacer name="horizontalSpacer_5">
740 <spacer name="horizontalSpacer_5">
741 <property name="orientation">
741 <property name="orientation">
742 <enum>Qt::Horizontal</enum>
742 <enum>Qt::Horizontal</enum>
743 </property>
743 </property>
744 <property name="sizeType">
744 <property name="sizeType">
745 <enum>QSizePolicy::Minimum</enum>
745 <enum>QSizePolicy::Minimum</enum>
746 </property>
746 </property>
747 <property name="sizeHint" stdset="0">
747 <property name="sizeHint" stdset="0">
748 <size>
748 <size>
749 <width>40</width>
749 <width>40</width>
750 <height>20</height>
750 <height>20</height>
751 </size>
751 </size>
752 </property>
752 </property>
753 </spacer>
753 </spacer>
754 </item>
754 </item>
755 <item>
755 <item>
756 <widget class="QLabel" name="lblDevA">
756 <widget class="QLabel" name="lblDevA">
757 <property name="text">
757 <property name="text">
758 <string>DEV A</string>
758 <string>DEV A</string>
759 </property>
759 </property>
760 <property name="alignment">
760 <property name="alignment">
761 <set>Qt::AlignCenter</set>
761 <set>Qt::AlignCenter</set>
762 </property>
762 </property>
763 </widget>
763 </widget>
764 </item>
764 </item>
765 <item>
765 <item>
766 <widget class="QLineEdit" name="txtBstatusA">
766 <widget class="QLineEdit" name="txtBstatusA">
767 <property name="readOnly">
767 <property name="readOnly">
768 <bool>true</bool>
768 <bool>true</bool>
769 </property>
769 </property>
770 </widget>
770 </widget>
771 </item>
771 </item>
772 <item>
772 <item>
773 <widget class="QLineEdit" name="txtBdiscA">
773 <widget class="QLineEdit" name="txtBdiscA">
774 <property name="readOnly">
774 <property name="readOnly">
775 <bool>true</bool>
775 <bool>true</bool>
776 </property>
776 </property>
777 </widget>
777 </widget>
778 </item>
778 </item>
779 <item>
779 <item>
780 <widget class="QLineEdit" name="txtBcopyA">
780 <widget class="QLineEdit" name="txtBcopyA">
781 <property name="readOnly">
781 <property name="readOnly">
782 <bool>true</bool>
782 <bool>true</bool>
783 </property>
783 </property>
784 </widget>
784 </widget>
785 </item>
785 </item>
786 </layout>
786 </layout>
787 </item>
787 </item>
788 <item>
788 <item>
789 <layout class="QVBoxLayout" name="verticalLayout_23">
789 <layout class="QVBoxLayout" name="verticalLayout_23">
790 <item>
790 <item>
791 <spacer name="horizontalSpacer_6">
791 <spacer name="horizontalSpacer_6">
792 <property name="orientation">
792 <property name="orientation">
793 <enum>Qt::Horizontal</enum>
793 <enum>Qt::Horizontal</enum>
794 </property>
794 </property>
795 <property name="sizeType">
795 <property name="sizeType">
796 <enum>QSizePolicy::Minimum</enum>
796 <enum>QSizePolicy::Minimum</enum>
797 </property>
797 </property>
798 <property name="sizeHint" stdset="0">
798 <property name="sizeHint" stdset="0">
799 <size>
799 <size>
800 <width>40</width>
800 <width>40</width>
801 <height>20</height>
801 <height>20</height>
802 </size>
802 </size>
803 </property>
803 </property>
804 </spacer>
804 </spacer>
805 </item>
805 </item>
806 <item>
806 <item>
807 <widget class="QLabel" name="lblDevB">
807 <widget class="QLabel" name="lblDevB">
808 <property name="text">
808 <property name="text">
809 <string>DEV B</string>
809 <string>DEV B</string>
810 </property>
810 </property>
811 <property name="alignment">
811 <property name="alignment">
812 <set>Qt::AlignCenter</set>
812 <set>Qt::AlignCenter</set>
813 </property>
813 </property>
814 </widget>
814 </widget>
815 </item>
815 </item>
816 <item>
816 <item>
817 <widget class="QLineEdit" name="txtBstatusB">
817 <widget class="QLineEdit" name="txtBstatusB">
818 <property name="readOnly">
818 <property name="readOnly">
819 <bool>true</bool>
819 <bool>true</bool>
820 </property>
820 </property>
821 </widget>
821 </widget>
822 </item>
822 </item>
823 <item>
823 <item>
824 <widget class="QLineEdit" name="txtBdiscB">
824 <widget class="QLineEdit" name="txtBdiscB">
825 <property name="readOnly">
825 <property name="readOnly">
826 <bool>true</bool>
826 <bool>true</bool>
827 </property>
827 </property>
828 </widget>
828 </widget>
829 </item>
829 </item>
830 <item>
830 <item>
831 <widget class="QLineEdit" name="txtBcopyB">
831 <widget class="QLineEdit" name="txtBcopyB">
832 <property name="readOnly">
832 <property name="readOnly">
833 <bool>true</bool>
833 <bool>true</bool>
834 </property>
834 </property>
835 </widget>
835 </widget>
836 </item>
836 </item>
837 </layout>
837 </layout>
838 </item>
838 </item>
839 <item>
839 <item>
840 <layout class="QVBoxLayout" name="verticalLayout_24">
840 <layout class="QVBoxLayout" name="verticalLayout_24">
841 <item>
841 <item>
842 <spacer name="horizontalSpacer_7">
842 <spacer name="horizontalSpacer_7">
843 <property name="orientation">
843 <property name="orientation">
844 <enum>Qt::Horizontal</enum>
844 <enum>Qt::Horizontal</enum>
845 </property>
845 </property>
846 <property name="sizeType">
846 <property name="sizeType">
847 <enum>QSizePolicy::Minimum</enum>
847 <enum>QSizePolicy::Minimum</enum>
848 </property>
848 </property>
849 <property name="sizeHint" stdset="0">
849 <property name="sizeHint" stdset="0">
850 <size>
850 <size>
851 <width>40</width>
851 <width>40</width>
852 <height>20</height>
852 <height>20</height>
853 </size>
853 </size>
854 </property>
854 </property>
855 </spacer>
855 </spacer>
856 </item>
856 </item>
857 <item>
857 <item>
858 <widget class="QLabel" name="lblDevC">
858 <widget class="QLabel" name="lblDevC">
859 <property name="text">
859 <property name="text">
860 <string>DEV C</string>
860 <string>DEV C</string>
861 </property>
861 </property>
862 <property name="alignment">
862 <property name="alignment">
863 <set>Qt::AlignCenter</set>
863 <set>Qt::AlignCenter</set>
864 </property>
864 </property>
865 </widget>
865 </widget>
866 </item>
866 </item>
867 <item>
867 <item>
868 <widget class="QLineEdit" name="txtBstatusC">
868 <widget class="QLineEdit" name="txtBstatusC">
869 <property name="readOnly">
869 <property name="readOnly">
870 <bool>true</bool>
870 <bool>true</bool>
871 </property>
871 </property>
872 </widget>
872 </widget>
873 </item>
873 </item>
874 <item>
874 <item>
875 <widget class="QLineEdit" name="txtBdiscC">
875 <widget class="QLineEdit" name="txtBdiscC">
876 <property name="readOnly">
876 <property name="readOnly">
877 <bool>true</bool>
877 <bool>true</bool>
878 </property>
878 </property>
879 </widget>
879 </widget>
880 </item>
880 </item>
881 <item>
881 <item>
882 <widget class="QLineEdit" name="txtBcopyC">
882 <widget class="QLineEdit" name="txtBcopyC">
883 <property name="readOnly">
883 <property name="readOnly">
884 <bool>true</bool>
884 <bool>true</bool>
885 </property>
885 </property>
886 </widget>
886 </widget>
887 </item>
887 </item>
888 </layout>
888 </layout>
889 </item>
889 </item>
890 <item>
890 <item>
891 <layout class="QVBoxLayout" name="verticalLayout_25">
891 <layout class="QVBoxLayout" name="verticalLayout_25">
892 <item>
892 <item>
893 <spacer name="horizontalSpacer_8">
893 <spacer name="horizontalSpacer_8">
894 <property name="orientation">
894 <property name="orientation">
895 <enum>Qt::Horizontal</enum>
895 <enum>Qt::Horizontal</enum>
896 </property>
896 </property>
897 <property name="sizeType">
897 <property name="sizeType">
898 <enum>QSizePolicy::Minimum</enum>
898 <enum>QSizePolicy::Minimum</enum>
899 </property>
899 </property>
900 <property name="sizeHint" stdset="0">
900 <property name="sizeHint" stdset="0">
901 <size>
901 <size>
902 <width>40</width>
902 <width>40</width>
903 <height>20</height>
903 <height>20</height>
904 </size>
904 </size>
905 </property>
905 </property>
906 </spacer>
906 </spacer>
907 </item>
907 </item>
908 <item>
908 <item>
909 <widget class="QLabel" name="lblDevD">
909 <widget class="QLabel" name="lblDevD">
910 <property name="text">
910 <property name="text">
911 <string>DEV D</string>
911 <string>DEV D</string>
912 </property>
912 </property>
913 <property name="alignment">
913 <property name="alignment">
914 <set>Qt::AlignCenter</set>
914 <set>Qt::AlignCenter</set>
915 </property>
915 </property>
916 </widget>
916 </widget>
917 </item>
917 </item>
918 <item>
918 <item>
919 <widget class="QLineEdit" name="txtBstatusD">
919 <widget class="QLineEdit" name="txtBstatusD">
920 <property name="readOnly">
920 <property name="readOnly">
921 <bool>true</bool>
921 <bool>true</bool>
922 </property>
922 </property>
923 </widget>
923 </widget>
924 </item>
924 </item>
925 <item>
925 <item>
926 <widget class="QLineEdit" name="txtBdiscD">
926 <widget class="QLineEdit" name="txtBdiscD">
927 <property name="readOnly">
927 <property name="readOnly">
928 <bool>true</bool>
928 <bool>true</bool>
929 </property>
929 </property>
930 </widget>
930 </widget>
931 </item>
931 </item>
932 <item>
932 <item>
933 <widget class="QLineEdit" name="txtBcopyD">
933 <widget class="QLineEdit" name="txtBcopyD">
934 <property name="readOnly">
934 <property name="readOnly">
935 <bool>true</bool>
935 <bool>true</bool>
936 </property>
936 </property>
937 </widget>
937 </widget>
938 </item>
938 </item>
939 </layout>
939 </layout>
940 </item>
940 </item>
941 </layout>
941 </layout>
942 </item>
942 </item>
943 <item>
943 <item>
944 <spacer name="verticalSpacer">
944 <spacer name="verticalSpacer">
945 <property name="orientation">
945 <property name="orientation">
946 <enum>Qt::Vertical</enum>
946 <enum>Qt::Vertical</enum>
947 </property>
947 </property>
948 <property name="sizeType">
948 <property name="sizeType">
949 <enum>QSizePolicy::Fixed</enum>
949 <enum>QSizePolicy::Fixed</enum>
950 </property>
950 </property>
951 <property name="sizeHint" stdset="0">
951 <property name="sizeHint" stdset="0">
952 <size>
952 <size>
953 <width>20</width>
953 <width>20</width>
954 <height>20</height>
954 <height>20</height>
955 </size>
955 </size>
956 </property>
956 </property>
957 </spacer>
957 </spacer>
958 </item>
958 </item>
959 <item>
959 <item>
960 <layout class="QHBoxLayout" name="horizontalLayout_16">
960 <layout class="QHBoxLayout" name="horizontalLayout_16">
961 <item>
961 <item>
962 <widget class="QLabel" name="label">
962 <widget class="QLabel" name="label">
963 <property name="text">
963 <property name="text">
964 <string>CHECK</string>
964 <string>CHECK</string>
965 </property>
965 </property>
966 </widget>
966 </widget>
967 </item>
967 </item>
968 <item>
968 <item>
969 <spacer name="horizontalSpacer_14">
969 <spacer name="horizontalSpacer_14">
970 <property name="orientation">
970 <property name="orientation">
971 <enum>Qt::Horizontal</enum>
971 <enum>Qt::Horizontal</enum>
972 </property>
972 </property>
973 <property name="sizeHint" stdset="0">
973 <property name="sizeHint" stdset="0">
974 <size>
974 <size>
975 <width>40</width>
975 <width>40</width>
976 <height>20</height>
976 <height>20</height>
977 </size>
977 </size>
978 </property>
978 </property>
979 </spacer>
979 </spacer>
980 </item>
980 </item>
981 </layout>
981 </layout>
982 </item>
982 </item>
983 <item>
983 <item>
984 <layout class="QHBoxLayout" name="horizontalLayout_17">
984 <layout class="QHBoxLayout" name="horizontalLayout_17">
985 <item>
985 <item>
986 <spacer name="horizontalSpacer_13">
986 <spacer name="horizontalSpacer_13">
987 <property name="orientation">
987 <property name="orientation">
988 <enum>Qt::Horizontal</enum>
988 <enum>Qt::Horizontal</enum>
989 </property>
989 </property>
990 <property name="sizeType">
990 <property name="sizeType">
991 <enum>QSizePolicy::Fixed</enum>
991 <enum>QSizePolicy::Fixed</enum>
992 </property>
992 </property>
993 <property name="sizeHint" stdset="0">
993 <property name="sizeHint" stdset="0">
994 <size>
994 <size>
995 <width>50</width>
995 <width>50</width>
996 <height>20</height>
996 <height>20</height>
997 </size>
997 </size>
998 </property>
998 </property>
999 </spacer>
999 </spacer>
1000 </item>
1000 </item>
1001 <item>
1001 <item>
1002 <widget class="QLineEdit" name="txtTDpath">
1002 <widget class="QLineEdit" name="txtTDpath">
1003 <property name="enabled">
1003 <property name="enabled">
1004 <bool>false</bool>
1004 <bool>false</bool>
1005 </property>
1006 <property name="readOnly">
1007 <bool>true</bool>
1005 </property>
1008 </property>
1006 </widget>
1009 </widget>
1007 </item>
1010 </item>
1008 <item>
1011 <item>
1009 <widget class="QPushButton" name="btnTDpath">
1012 <widget class="QPushButton" name="btnTDpath">
1010 <property name="enabled">
1013 <property name="enabled">
1011 <bool>false</bool>
1014 <bool>false</bool>
1012 </property>
1015 </property>
1013 <property name="text">
1016 <property name="text">
1014 <string>Temp Data Path</string>
1017 <string>Temp Data Path</string>
1015 </property>
1018 </property>
1016 </widget>
1019 </widget>
1017 </item>
1020 </item>
1018 </layout>
1021 </layout>
1019 </item>
1022 </item>
1020 <item>
1023 <item>
1021 <layout class="QHBoxLayout" name="horizontalLayout_19">
1024 <layout class="QHBoxLayout" name="horizontalLayout_19">
1022 <item>
1025 <item>
1023 <layout class="QVBoxLayout" name="verticalLayout_26">
1026 <layout class="QVBoxLayout" name="verticalLayout_26">
1024 <item>
1027 <item>
1025 <spacer name="horizontalSpacer_10">
1028 <spacer name="horizontalSpacer_10">
1026 <property name="orientation">
1029 <property name="orientation">
1027 <enum>Qt::Horizontal</enum>
1030 <enum>Qt::Horizontal</enum>
1028 </property>
1031 </property>
1029 <property name="sizeType">
1032 <property name="sizeType">
1030 <enum>QSizePolicy::Minimum</enum>
1033 <enum>QSizePolicy::Minimum</enum>
1031 </property>
1034 </property>
1032 <property name="sizeHint" stdset="0">
1035 <property name="sizeHint" stdset="0">
1033 <size>
1036 <size>
1034 <width>40</width>
1037 <width>40</width>
1035 <height>20</height>
1038 <height>20</height>
1036 </size>
1039 </size>
1037 </property>
1040 </property>
1038 </spacer>
1041 </spacer>
1039 </item>
1042 </item>
1040 <item>
1043 <item>
1041 <widget class="QLabel" name="lblSTATUS_2">
1044 <widget class="QLabel" name="lblSTATUS_2">
1042 <property name="sizePolicy">
1045 <property name="sizePolicy">
1043 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
1046 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
1044 <horstretch>0</horstretch>
1047 <horstretch>0</horstretch>
1045 <verstretch>0</verstretch>
1048 <verstretch>0</verstretch>
1046 </sizepolicy>
1049 </sizepolicy>
1047 </property>
1050 </property>
1048 <property name="text">
1051 <property name="text">
1049 <string>STATUS</string>
1052 <string>STATUS</string>
1050 </property>
1053 </property>
1051 </widget>
1054 </widget>
1052 </item>
1055 </item>
1053 </layout>
1056 </layout>
1054 </item>
1057 </item>
1055 <item>
1058 <item>
1056 <layout class="QVBoxLayout" name="verticalLayout_27">
1059 <layout class="QVBoxLayout" name="verticalLayout_27">
1057 <item>
1060 <item>
1058 <widget class="QLabel" name="lblDevA_2">
1061 <widget class="QLabel" name="lblDevA_2">
1059 <property name="text">
1062 <property name="text">
1060 <string>DEV A</string>
1063 <string>DEV A</string>
1061 </property>
1064 </property>
1062 <property name="alignment">
1065 <property name="alignment">
1063 <set>Qt::AlignCenter</set>
1066 <set>Qt::AlignCenter</set>
1064 </property>
1067 </property>
1065 </widget>
1068 </widget>
1066 </item>
1069 </item>
1067 <item>
1070 <item>
1068 <widget class="QLineEdit" name="txtCHstatusA">
1071 <widget class="QLineEdit" name="txtCHstatusA">
1069 <property name="readOnly">
1072 <property name="readOnly">
1070 <bool>true</bool>
1073 <bool>true</bool>
1071 </property>
1074 </property>
1072 </widget>
1075 </widget>
1073 </item>
1076 </item>
1074 </layout>
1077 </layout>
1075 </item>
1078 </item>
1076 <item>
1079 <item>
1077 <layout class="QVBoxLayout" name="verticalLayout_28">
1080 <layout class="QVBoxLayout" name="verticalLayout_28">
1078 <item>
1081 <item>
1079 <widget class="QLabel" name="lblDevB_2">
1082 <widget class="QLabel" name="lblDevB_2">
1080 <property name="text">
1083 <property name="text">
1081 <string>DEV B</string>
1084 <string>DEV B</string>
1082 </property>
1085 </property>
1083 <property name="alignment">
1086 <property name="alignment">
1084 <set>Qt::AlignCenter</set>
1087 <set>Qt::AlignCenter</set>
1085 </property>
1088 </property>
1086 </widget>
1089 </widget>
1087 </item>
1090 </item>
1088 <item>
1091 <item>
1089 <widget class="QLineEdit" name="txtCHstatusB">
1092 <widget class="QLineEdit" name="txtCHstatusB">
1090 <property name="readOnly">
1093 <property name="readOnly">
1091 <bool>true</bool>
1094 <bool>true</bool>
1092 </property>
1095 </property>
1093 </widget>
1096 </widget>
1094 </item>
1097 </item>
1095 </layout>
1098 </layout>
1096 </item>
1099 </item>
1097 <item>
1100 <item>
1098 <layout class="QVBoxLayout" name="verticalLayout_29">
1101 <layout class="QVBoxLayout" name="verticalLayout_29">
1099 <item>
1102 <item>
1100 <widget class="QLabel" name="lblDevC_2">
1103 <widget class="QLabel" name="lblDevC_2">
1101 <property name="text">
1104 <property name="text">
1102 <string>DEV C</string>
1105 <string>DEV C</string>
1103 </property>
1106 </property>
1104 <property name="alignment">
1107 <property name="alignment">
1105 <set>Qt::AlignCenter</set>
1108 <set>Qt::AlignCenter</set>
1106 </property>
1109 </property>
1107 </widget>
1110 </widget>
1108 </item>
1111 </item>
1109 <item>
1112 <item>
1110 <widget class="QLineEdit" name="txtCHstatusC">
1113 <widget class="QLineEdit" name="txtCHstatusC">
1111 <property name="readOnly">
1114 <property name="readOnly">
1112 <bool>true</bool>
1115 <bool>true</bool>
1113 </property>
1116 </property>
1114 </widget>
1117 </widget>
1115 </item>
1118 </item>
1116 </layout>
1119 </layout>
1117 </item>
1120 </item>
1118 <item>
1121 <item>
1119 <layout class="QVBoxLayout" name="verticalLayout_30">
1122 <layout class="QVBoxLayout" name="verticalLayout_30">
1120 <item>
1123 <item>
1121 <widget class="QLabel" name="lblDevD_2">
1124 <widget class="QLabel" name="lblDevD_2">
1122 <property name="text">
1125 <property name="text">
1123 <string>DEV D</string>
1126 <string>DEV D</string>
1124 </property>
1127 </property>
1125 <property name="alignment">
1128 <property name="alignment">
1126 <set>Qt::AlignCenter</set>
1129 <set>Qt::AlignCenter</set>
1127 </property>
1130 </property>
1128 </widget>
1131 </widget>
1129 </item>
1132 </item>
1130 <item>
1133 <item>
1131 <widget class="QLineEdit" name="txtCHstatusD">
1134 <widget class="QLineEdit" name="txtCHstatusD">
1132 <property name="readOnly">
1135 <property name="readOnly">
1133 <bool>true</bool>
1136 <bool>true</bool>
1134 </property>
1137 </property>
1135 </widget>
1138 </widget>
1136 </item>
1139 </item>
1137 </layout>
1140 </layout>
1138 </item>
1141 </item>
1139 </layout>
1142 </layout>
1140 </item>
1143 </item>
1141 <item>
1144 <item>
1142 <layout class="QHBoxLayout" name="horizontalLayout_20">
1145 <layout class="QHBoxLayout" name="horizontalLayout_20">
1143 <item>
1146 <item>
1144 <spacer name="horizontalSpacer_12">
1147 <spacer name="horizontalSpacer_12">
1145 <property name="orientation">
1148 <property name="orientation">
1146 <enum>Qt::Horizontal</enum>
1149 <enum>Qt::Horizontal</enum>
1147 </property>
1150 </property>
1148 <property name="sizeType">
1151 <property name="sizeType">
1149 <enum>QSizePolicy::Minimum</enum>
1152 <enum>QSizePolicy::Minimum</enum>
1150 </property>
1153 </property>
1151 <property name="sizeHint" stdset="0">
1154 <property name="sizeHint" stdset="0">
1152 <size>
1155 <size>
1153 <width>50</width>
1156 <width>50</width>
1154 <height>20</height>
1157 <height>20</height>
1155 </size>
1158 </size>
1156 </property>
1159 </property>
1157 </spacer>
1160 </spacer>
1158 </item>
1161 </item>
1159 <item>
1162 <item>
1160 <widget class="QCheckBox" name="chkCheck">
1163 <widget class="QCheckBox" name="chkCheck">
1161 <property name="enabled">
1164 <property name="enabled">
1162 <bool>true</bool>
1165 <bool>true</bool>
1163 </property>
1166 </property>
1164 <property name="text">
1167 <property name="text">
1165 <string>MANUAL</string>
1168 <string>MANUAL</string>
1166 </property>
1169 </property>
1167 </widget>
1170 </widget>
1168 </item>
1171 </item>
1169 <item>
1172 <item>
1170 <spacer name="horizontalSpacer_15">
1173 <spacer name="horizontalSpacer_15">
1171 <property name="orientation">
1174 <property name="orientation">
1172 <enum>Qt::Horizontal</enum>
1175 <enum>Qt::Horizontal</enum>
1173 </property>
1176 </property>
1174 <property name="sizeHint" stdset="0">
1177 <property name="sizeHint" stdset="0">
1175 <size>
1178 <size>
1176 <width>40</width>
1179 <width>40</width>
1177 <height>20</height>
1180 <height>20</height>
1178 </size>
1181 </size>
1179 </property>
1182 </property>
1180 </spacer>
1183 </spacer>
1181 </item>
1184 </item>
1182 <item>
1185 <item>
1183 <widget class="QPushButton" name="btnCHstart">
1186 <widget class="QPushButton" name="btnCHstart">
1184 <property name="enabled">
1187 <property name="enabled">
1185 <bool>false</bool>
1188 <bool>false</bool>
1186 </property>
1189 </property>
1187 <property name="text">
1190 <property name="text">
1188 <string>START</string>
1191 <string>START</string>
1189 </property>
1192 </property>
1190 </widget>
1193 </widget>
1191 </item>
1194 </item>
1192 </layout>
1195 </layout>
1193 </item>
1196 </item>
1194 </layout>
1197 </layout>
1195 </widget>
1198 </widget>
1196 </widget>
1199 </widget>
1197 </item>
1200 </item>
1198 <item>
1201 <item>
1199 <widget class="QTextEdit" name="txtInfo">
1202 <widget class="QTextEdit" name="txtInfo">
1200 <property name="readOnly">
1203 <property name="readOnly">
1201 <bool>true</bool>
1204 <bool>true</bool>
1202 </property>
1205 </property>
1203 </widget>
1206 </widget>
1204 </item>
1207 </item>
1205 <item>
1208 <item>
1206 <widget class="QLineEdit" name="txtProgress">
1209 <widget class="QLineEdit" name="txtProgress">
1207 <property name="sizePolicy">
1210 <property name="sizePolicy">
1208 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
1211 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
1209 <horstretch>0</horstretch>
1212 <horstretch>0</horstretch>
1210 <verstretch>0</verstretch>
1213 <verstretch>0</verstretch>
1211 </sizepolicy>
1214 </sizepolicy>
1212 </property>
1215 </property>
1213 </widget>
1216 </widget>
1214 </item>
1217 </item>
1215 <item>
1218 <item>
1216 <layout class="QHBoxLayout" name="horizontalLayout_2">
1219 <layout class="QHBoxLayout" name="horizontalLayout_2">
1217 <property name="sizeConstraint">
1220 <property name="sizeConstraint">
1218 <enum>QLayout::SetDefaultConstraint</enum>
1221 <enum>QLayout::SetDefaultConstraint</enum>
1219 </property>
1222 </property>
1220 <item>
1223 <item>
1221 <widget class="QPushButton" name="btnGbkp">
1224 <widget class="QPushButton" name="btnGbkp">
1222 <property name="enabled">
1225 <property name="enabled">
1223 <bool>false</bool>
1226 <bool>false</bool>
1224 </property>
1227 </property>
1225 <property name="text">
1228 <property name="text">
1226 <string>Generate Bkp</string>
1229 <string>Generate Bkp</string>
1227 </property>
1230 </property>
1228 </widget>
1231 </widget>
1229 </item>
1232 </item>
1230 <item>
1233 <item>
1231 <widget class="QPushButton" name="btnRestart">
1234 <widget class="QPushButton" name="btnRestart">
1232 <property name="enabled">
1235 <property name="enabled">
1233 <bool>false</bool>
1236 <bool>false</bool>
1234 </property>
1237 </property>
1235 <property name="text">
1238 <property name="text">
1236 <string>Restart</string>
1239 <string>Restart</string>
1237 </property>
1240 </property>
1238 </widget>
1241 </widget>
1239 </item>
1242 </item>
1240 <item>
1243 <item>
1241 <widget class="QPushButton" name="btnStartburn">
1244 <widget class="QPushButton" name="btnStartburn">
1242 <property name="enabled">
1245 <property name="enabled">
1243 <bool>false</bool>
1246 <bool>false</bool>
1244 </property>
1247 </property>
1245 <property name="text">
1248 <property name="text">
1246 <string>Start Burn</string>
1249 <string>Start Burn</string>
1247 </property>
1250 </property>
1248 </widget>
1251 </widget>
1249 </item>
1252 </item>
1250 <item>
1253 <item>
1251 <widget class="QPushButton" name="btnStopburn">
1254 <widget class="QPushButton" name="btnStopburn">
1252 <property name="enabled">
1255 <property name="enabled">
1253 <bool>false</bool>
1256 <bool>false</bool>
1254 </property>
1257 </property>
1255 <property name="text">
1258 <property name="text">
1256 <string>Stop Burn</string>
1259 <string>Stop Burn</string>
1257 </property>
1260 </property>
1258 </widget>
1261 </widget>
1259 </item>
1262 </item>
1260 </layout>
1263 </layout>
1261 </item>
1264 </item>
1262 </layout>
1265 </layout>
1263 </widget>
1266 </widget>
1264 <widget class="QMenuBar" name="menubar">
1267 <widget class="QMenuBar" name="menubar">
1265 <property name="geometry">
1268 <property name="geometry">
1266 <rect>
1269 <rect>
1267 <x>0</x>
1270 <x>0</x>
1268 <y>0</y>
1271 <y>0</y>
1269 <width>824</width>
1272 <width>824</width>
1270 <height>25</height>
1273 <height>25</height>
1271 </rect>
1274 </rect>
1272 </property>
1275 </property>
1273 <widget class="QMenu" name="menuFile">
1276 <widget class="QMenu" name="menuFile">
1274 <property name="title">
1277 <property name="title">
1275 <string>File</string>
1278 <string>File</string>
1276 </property>
1279 </property>
1277 <addaction name="actionQuit"/>
1280 <addaction name="actionQuit"/>
1278 </widget>
1281 </widget>
1279 <widget class="QMenu" name="menuHelp">
1282 <widget class="QMenu" name="menuHelp">
1280 <property name="title">
1283 <property name="title">
1281 <string>Help</string>
1284 <string>Help</string>
1282 </property>
1285 </property>
1283 <addaction name="actionAbout"/>
1286 <addaction name="actionAbout"/>
1284 </widget>
1287 </widget>
1285 <widget class="QMenu" name="menuParameters">
1288 <widget class="QMenu" name="menuParameters">
1286 <property name="title">
1289 <property name="title">
1287 <string>Parameters</string>
1290 <string>Parameters</string>
1288 </property>
1291 </property>
1289 <addaction name="actionChange_Parameters"/>
1292 <addaction name="actionChange_Parameters"/>
1290 </widget>
1293 </widget>
1291 <addaction name="menuFile"/>
1294 <addaction name="menuFile"/>
1292 <addaction name="menuParameters"/>
1295 <addaction name="menuParameters"/>
1293 <addaction name="menuHelp"/>
1296 <addaction name="menuHelp"/>
1294 </widget>
1297 </widget>
1295 <widget class="QStatusBar" name="statusbar"/>
1298 <widget class="QStatusBar" name="statusbar"/>
1296 <action name="actionChange_Parameters">
1299 <action name="actionChange_Parameters">
1297 <property name="enabled">
1300 <property name="enabled">
1298 <bool>false</bool>
1301 <bool>false</bool>
1299 </property>
1302 </property>
1300 <property name="text">
1303 <property name="text">
1301 <string>Change Parameters</string>
1304 <string>Change Parameters</string>
1302 </property>
1305 </property>
1303 </action>
1306 </action>
1304 <action name="actionQuit">
1307 <action name="actionQuit">
1305 <property name="text">
1308 <property name="text">
1306 <string>Quit</string>
1309 <string>Quit</string>
1307 </property>
1310 </property>
1308 </action>
1311 </action>
1309 <action name="actionAbout">
1312 <action name="actionAbout">
1310 <property name="text">
1313 <property name="text">
1311 <string>About</string>
1314 <string>About</string>
1312 </property>
1315 </property>
1313 </action>
1316 </action>
1314 </widget>
1317 </widget>
1315 <tabstops>
1318 <tabstops>
1316 <tabstop>txtDpath</tabstop>
1319 <tabstop>txtDpath</tabstop>
1317 <tabstop>btnDpath</tabstop>
1320 <tabstop>btnDpath</tabstop>
1318 <tabstop>txtRpath</tabstop>
1321 <tabstop>txtRpath</tabstop>
1319 <tabstop>btnRpath</tabstop>
1322 <tabstop>btnRpath</tabstop>
1320 <tabstop>lstDtype</tabstop>
1323 <tabstop>lstDtype</tabstop>
1321 <tabstop>txtDtype</tabstop>
1324 <tabstop>txtDtype</tabstop>
1322 <tabstop>txtElabel</tabstop>
1325 <tabstop>txtElabel</tabstop>
1323 <tabstop>lstStartDay</tabstop>
1326 <tabstop>lstStartDay</tabstop>
1324 <tabstop>lstStopDay</tabstop>
1327 <tabstop>lstStopDay</tabstop>
1325 <tabstop>lstDcapacity</tabstop>
1328 <tabstop>lstDcapacity</tabstop>
1326 <tabstop>tabWidget</tabstop>
1329 <tabstop>tabWidget</tabstop>
1327 <tabstop>btnGbkp</tabstop>
1330 <tabstop>btnGbkp</tabstop>
1328 <tabstop>btnRestart</tabstop>
1331 <tabstop>btnRestart</tabstop>
1329 <tabstop>btnStartburn</tabstop>
1332 <tabstop>btnStartburn</tabstop>
1330 <tabstop>btnStopburn</tabstop>
1333 <tabstop>btnStopburn</tabstop>
1331 </tabstops>
1334 </tabstops>
1332 <resources/>
1335 <resources/>
1333 <connections>
1336 <connections>
1334 <connection>
1337 <connection>
1335 <sender>actionQuit</sender>
1338 <sender>actionQuit</sender>
1336 <signal>triggered()</signal>
1339 <signal>triggered()</signal>
1337 <receiver>MainWindow</receiver>
1340 <receiver>MainWindow</receiver>
1338 <slot>close()</slot>
1341 <slot>close()</slot>
1339 <hints>
1342 <hints>
1340 <hint type="sourcelabel">
1343 <hint type="sourcelabel">
1341 <x>-1</x>
1344 <x>-1</x>
1342 <y>-1</y>
1345 <y>-1</y>
1343 </hint>
1346 </hint>
1344 <hint type="destinationlabel">
1347 <hint type="destinationlabel">
1345 <x>306</x>
1348 <x>306</x>
1346 <y>358</y>
1349 <y>358</y>
1347 </hint>
1350 </hint>
1348 </hints>
1351 </hints>
1349 </connection>
1352 </connection>
1350 <connection>
1353 <connection>
1351 <sender>chkCheck</sender>
1354 <sender>chkCheck</sender>
1352 <signal>toggled(bool)</signal>
1355 <signal>toggled(bool)</signal>
1353 <receiver>txtTDpath</receiver>
1356 <receiver>txtTDpath</receiver>
1354 <slot>setEnabled(bool)</slot>
1357 <slot>setEnabled(bool)</slot>
1355 <hints>
1358 <hints>
1356 <hint type="sourcelabel">
1359 <hint type="sourcelabel">
1357 <x>160</x>
1360 <x>160</x>
1358 <y>378</y>
1361 <y>378</y>
1359 </hint>
1362 </hint>
1360 <hint type="destinationlabel">
1363 <hint type="destinationlabel">
1361 <x>231</x>
1364 <x>231</x>
1362 <y>306</y>
1365 <y>306</y>
1363 </hint>
1366 </hint>
1364 </hints>
1367 </hints>
1365 </connection>
1368 </connection>
1366 <connection>
1369 <connection>
1367 <sender>chkCheck</sender>
1370 <sender>chkCheck</sender>
1368 <signal>toggled(bool)</signal>
1371 <signal>toggled(bool)</signal>
1369 <receiver>btnTDpath</receiver>
1372 <receiver>btnTDpath</receiver>
1370 <slot>setEnabled(bool)</slot>
1373 <slot>setEnabled(bool)</slot>
1371 <hints>
1374 <hints>
1372 <hint type="sourcelabel">
1375 <hint type="sourcelabel">
1373 <x>160</x>
1376 <x>160</x>
1374 <y>387</y>
1377 <y>387</y>
1375 </hint>
1378 </hint>
1376 <hint type="destinationlabel">
1379 <hint type="destinationlabel">
1377 <x>802</x>
1380 <x>802</x>
1378 <y>305</y>
1381 <y>305</y>
1379 </hint>
1382 </hint>
1380 </hints>
1383 </hints>
1381 </connection>
1384 </connection>
1382 <connection>
1385 <connection>
1383 <sender>chkCheck</sender>
1386 <sender>chkCheck</sender>
1384 <signal>toggled(bool)</signal>
1387 <signal>toggled(bool)</signal>
1385 <receiver>btnCHstart</receiver>
1388 <receiver>btnCHstart</receiver>
1386 <slot>setEnabled(bool)</slot>
1389 <slot>setEnabled(bool)</slot>
1387 <hints>
1390 <hints>
1388 <hint type="sourcelabel">
1391 <hint type="sourcelabel">
1389 <x>160</x>
1392 <x>160</x>
1390 <y>383</y>
1393 <y>383</y>
1391 </hint>
1394 </hint>
1392 <hint type="destinationlabel">
1395 <hint type="destinationlabel">
1393 <x>802</x>
1396 <x>802</x>
1394 <y>389</y>
1397 <y>389</y>
1395 </hint>
1398 </hint>
1396 </hints>
1399 </hints>
1397 </connection>
1400 </connection>
1398 <connection>
1401 <connection>
1399 <sender>chkDevD</sender>
1402 <sender>chkDevD</sender>
1400 <signal>toggled(bool)</signal>
1403 <signal>toggled(bool)</signal>
1401 <receiver>grpDevD</receiver>
1404 <receiver>grpDevD</receiver>
1402 <slot>setEnabled(bool)</slot>
1405 <slot>setEnabled(bool)</slot>
1403 <hints>
1406 <hints>
1404 <hint type="sourcelabel">
1407 <hint type="sourcelabel">
1405 <x>701</x>
1408 <x>701</x>
1406 <y>98</y>
1409 <y>98</y>
1407 </hint>
1410 </hint>
1408 <hint type="destinationlabel">
1411 <hint type="destinationlabel">
1409 <x>701</x>
1412 <x>701</x>
1410 <y>251</y>
1413 <y>251</y>
1411 </hint>
1414 </hint>
1412 </hints>
1415 </hints>
1413 </connection>
1416 </connection>
1414 <connection>
1417 <connection>
1415 <sender>chkDevB</sender>
1418 <sender>chkDevB</sender>
1416 <signal>toggled(bool)</signal>
1419 <signal>toggled(bool)</signal>
1417 <receiver>grpDevB</receiver>
1420 <receiver>grpDevB</receiver>
1418 <slot>setEnabled(bool)</slot>
1421 <slot>setEnabled(bool)</slot>
1419 <hints>
1422 <hints>
1420 <hint type="sourcelabel">
1423 <hint type="sourcelabel">
1421 <x>263</x>
1424 <x>263</x>
1422 <y>79</y>
1425 <y>79</y>
1423 </hint>
1426 </hint>
1424 <hint type="destinationlabel">
1427 <hint type="destinationlabel">
1425 <x>251</x>
1428 <x>251</x>
1426 <y>167</y>
1429 <y>167</y>
1427 </hint>
1430 </hint>
1428 </hints>
1431 </hints>
1429 </connection>
1432 </connection>
1430 <connection>
1433 <connection>
1431 <sender>chkDevC</sender>
1434 <sender>chkDevC</sender>
1432 <signal>toggled(bool)</signal>
1435 <signal>toggled(bool)</signal>
1433 <receiver>grpDevC</receiver>
1436 <receiver>grpDevC</receiver>
1434 <slot>setEnabled(bool)</slot>
1437 <slot>setEnabled(bool)</slot>
1435 <hints>
1438 <hints>
1436 <hint type="sourcelabel">
1439 <hint type="sourcelabel">
1437 <x>391</x>
1440 <x>391</x>
1438 <y>79</y>
1441 <y>79</y>
1439 </hint>
1442 </hint>
1440 <hint type="destinationlabel">
1443 <hint type="destinationlabel">
1441 <x>391</x>
1444 <x>391</x>
1442 <y>202</y>
1445 <y>202</y>
1443 </hint>
1446 </hint>
1444 </hints>
1447 </hints>
1445 </connection>
1448 </connection>
1446 <connection>
1449 <connection>
1447 <sender>chkDevA</sender>
1450 <sender>chkDevA</sender>
1448 <signal>toggled(bool)</signal>
1451 <signal>toggled(bool)</signal>
1449 <receiver>grpDevA</receiver>
1452 <receiver>grpDevA</receiver>
1450 <slot>setEnabled(bool)</slot>
1453 <slot>setEnabled(bool)</slot>
1451 <hints>
1454 <hints>
1452 <hint type="sourcelabel">
1455 <hint type="sourcelabel">
1453 <x>105</x>
1456 <x>105</x>
1454 <y>79</y>
1457 <y>79</y>
1455 </hint>
1458 </hint>
1456 <hint type="destinationlabel">
1459 <hint type="destinationlabel">
1457 <x>95</x>
1460 <x>95</x>
1458 <y>167</y>
1461 <y>167</y>
1459 </hint>
1462 </hint>
1460 </hints>
1463 </hints>
1461 </connection>
1464 </connection>
1462 </connections>
1465 </connections>
1463 </ui>
1466 </ui>
General Comments 0
You need to be logged in to leave comments. Login now