##// END OF EJS Templates
segun diagrama 2da parte ...
ralonso -
r77:78
parent child
Show More
@@ -1,281 +1,321
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
12
13 #--------------------------------------------- Entero a cadena agregando ceros delante -------------------------------------------------
13 #--------------------------------------------- Entero a cadena agregando ceros delante -------------------------------------------------
14
14
15 def i2s(var_n, var_length=4):
15 def i2s(var_n, var_length=4):
16 var_n2=str(var_n)
16 var_n2=str(var_n)
17 while len(var_n2) < var_length:
17 while len(var_n2) < var_length:
18 var_n2 = "0"+var_n2
18 var_n2 = "0"+var_n2
19 return var_n2
19 return var_n2
20
20
21
21
22 #----------------------------------------- Se verifica que la ruta exista y sea un directorio -------------------------------------------------
22 #----------------------------------------- Se verifica que la ruta exista y sea un directorio -------------------------------------------------
23
23
24 def dir_exists(var_dir, self):
24 def dir_exists(var_dir, self):
25 if os.path.isdir(var_dir):
25 if os.path.isdir(var_dir):
26 return True
26 return True
27 else:
27 else:
28 self.txtInfo.append("Incorrect path:" + str(var_dir))
28 self.txtInfo.append("Incorrect path:" + str(var_dir))
29 return False
29 return False
30
30
31
31
32 #-------------------------------- Se buscan los archivos del tipo especificado y se cargan las fechas -----------------------------
32 #-------------------------------- Se buscan los archivos del tipo especificado y se cargan las fechas -----------------------------
33
33
34 def load_days(self):
34 def load_days(self):
35
35
36 self.var_list=[]
36 self.var_list=[]
37 self.lstStartDay.clear()
37 self.lstStartDay.clear()
38 self.lstStopDay.clear()
38 self.lstStopDay.clear()
39
39
40 if self.statusDpath == False:
40 if self.statusDpath == False:
41 self.btnGbkp.setEnabled(False)
41 self.btnGbkp.setEnabled(False)
42 return
42 return
43
43
44 if self.var_Dtype == '':
44 if self.var_Dtype == '':
45 return
45 return
46
46
47 var_cmd="find " + str(self.var_Dpath) + " -name *."+ str(self.var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq"
47 var_cmd="find " + str(self.var_Dpath) + " -name *."+ str(self.var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq"
48 output=commands.getstatusoutput(var_cmd)[1]
48 output=commands.getstatusoutput(var_cmd)[1]
49
49
50 #Si no se encuentra ningun archivo
50 #Si no se encuentra ningun archivo
51 if len(output) == 0:
51 if len(output) == 0:
52 self.txtInfo.append("File not found")
52 self.txtInfo.append("File not found")
53 self.btnGbkp.setEnabled(False)
53 self.btnGbkp.setEnabled(False)
54 return
54 return
55
55
56 #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox)
56 #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox)
57 for i in range(0, (len(output)+1)/8):
57 for i in range(0, (len(output)+1)/8):
58 self.var_list.append(output[8*i:8*(i+1)-1])
58 self.var_list.append(output[8*i:8*(i+1)-1])
59
59
60 for i in self.var_list:
60 for i in self.var_list:
61 self.lstStartDay.addItem(i)
61 self.lstStartDay.addItem(i)
62 self.lstStopDay.addItem(i)
62 self.lstStopDay.addItem(i)
63 self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1)
63 self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1)
64
64
65 get_sub_list(self)
65 get_sub_list(self)
66 self.btnGbkp.setEnabled(True)
66 self.btnGbkp.setEnabled(True)
67
67
68
68
69 #-------------------------------------------------- Obtiene el rango de las fechas seleccionadas -----------------------------------------
69 #-------------------------------------------------- Obtiene el rango de las fechas seleccionadas -----------------------------------------
70
70
71 def get_sub_list(self):
71 def get_sub_list(self):
72 self.var_sublist=[]
72 self.var_sublist=[]
73 for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]:
73 for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]:
74 self.var_sublist.append(i)
74 self.var_sublist.append(i)
75
75
76
76
77 #----------------------------------------------------- Verifica los parametros faltantes -----------------------------------------------------------
77 #----------------------------------------------------- Verifica los parametros faltantes -----------------------------------------------------------
78
78
79 def validate_parameters(self):
79 def validate_parameters(self):
80 #Verifica que las ruta del proyecto sea valida
80 #Verifica que las ruta del proyecto sea valida
81 if self.statusRpath == False:
81 if self.statusRpath == False:
82 self.txtInfo.append("Incorrect proyect path")
82 self.txtInfo.append("Incorrect proyect path")
83 return False
83 return False
84
84
85 #Verifica la etiqueta
85 #Verifica la etiqueta
86 if len(self.var_Elabel) == 0:
86 if len(self.var_Elabel) == 0:
87 self.txtInfo.append("Enter label")
87 self.txtInfo.append("Enter label")
88 return False
88 return False
89
89
90 return True
90 return True
91
91
92
92
93 #------------------------------------------------- Crea directorios en la ruta indicada -----------------------------------------------------------
93 #------------------------------------------------- Crea directorios en la ruta indicada -----------------------------------------------------------
94
94
95 def make_dirs(list_dirs, self):
95 def make_dirs(list_dirs, self):
96 """
96 """
97
97
98 """
98 """
99
99
100 for var_dir in list_dirs:
100 for var_dir in list_dirs:
101 shutil.rmtree(self.var_Rpath+'/'+var_dir, True)
101 shutil.rmtree(self.var_Rpath+'/'+var_dir, True)
102 var_output=commands.getstatusoutput("mkdir -p "+self.var_Rpath+'/'+var_dir)[0]
102 var_output=commands.getstatusoutput("mkdir -p "+self.var_Rpath+'/'+var_dir)[0]
103 if var_output != 0:
103 if var_output != 0:
104 self.txtInfo.append("Error creating directory: "+var_dir+", output_error:" + str(var_output))
104 self.txtInfo.append("Error creating directory: "+var_dir+", output_error:" + str(var_output))
105 return False
105 return False
106 self.txtInfo.append('Directories created correctly')
106 self.txtInfo.append('Directories created correctly')
107 return True
107 return True
108
108
109
109
110 #-------------------------------------------- Busca los archivos con los parametros de busqueda ---------------------------------------
110 #-------------------------------------------- Busca los archivos con los parametros de busqueda ---------------------------------------
111
111
112 def list_files(self):
112 def list_files(self):
113 var_files_list=[]
113 var_files_list=[]
114 for var_doy in self.var_sublist:
114 for var_doy in self.var_sublist:
115 var_cmd="find " + str(self.var_Dpath) + " -name ?"+var_doy+"???."+ str(self.var_Dtype) + " |sort"
115 var_cmd="find " + str(self.var_Dpath) + " -name ?"+var_doy+"???."+ str(self.var_Dtype) + " |sort"
116 var_output=commands.getstatusoutput(var_cmd)[1]
116 var_output=commands.getstatusoutput(var_cmd)[1]
117 for var_file in var_output.split():
117 for var_file in var_output.split():
118 var_files_list.append(var_file) #Almacena cada archivo en la lista
118 var_files_list.append(var_file) #Almacena cada archivo en la lista
119 return var_files_list
119 return var_files_list
120
120
121
121
122 #--------------- Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD -----------------------
122 #--------------- Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD -----------------------
123
123
124 def make_files_dat(var_files_list, self):
124 def make_files_dat(var_files_list, self):
125 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
125 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
126 var_n=1 #Numero del DVD actual
126 var_n=1 #Numero del DVD actual
127 var_tmp=0 #Se usa para acumular el tamaΓ±o de los archivos de la lista
127 var_tmp=0 #Se usa para acumular el tamaΓ±o de los archivos de la lista
128 var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD
128 var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD
129
129
130 for i in var_files_list: #Se asignan en i los archivos de la lista
130 for i in var_files_list: #Se asignan en i los archivos de la lista
131
131
132 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
132 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
133 var_tmp += var_size_i #Se acumulan el tamaΓ±o de los archivos de la lista
133 var_tmp += var_size_i #Se acumulan el tamaΓ±o de los archivos de la lista
134
134
135 #Si el tamaΓ±o acumulado es mayor que el de el DVD
135 #Si el tamaΓ±o acumulado es mayor que el de el DVD
136 if var_tmp > (self.var_Dcapacity * 1024):
136 if var_tmp > (self.var_Dcapacity * 1024):
137 var_tmp -= var_size_i #se quita el tamaΓ±o sumado para mostrar el tamaΓ±o real
137 var_tmp -= var_size_i #se quita el tamaΓ±o sumado para mostrar el tamaΓ±o real
138 #se crea un archivo con numeral en el sufijo y extension .dat
138 #se crea un archivo con numeral en el sufijo y extension .dat
139 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
139 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
140 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
140 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
141 for line in var_files_list_2:
141 for line in var_files_list_2:
142 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
142 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
143 var_file.write(var_tmp_path+'='+line+'\n')
143 var_file.write(var_tmp_path+'='+line+'\n')
144 var_file.close()
144 var_file.close()
145
145
146 var_tmp = var_size_i #Se asigna a la variable el tamaΓ±o del archivo actual
146 var_tmp = var_size_i #Se asigna a la variable el tamaΓ±o del archivo actual
147 var_files_list_2=[] #Se reinicia la lista
147 var_files_list_2=[] #Se reinicia la lista
148 var_n += 1
148 var_n += 1
149 var_files_list_2.append(i)
149 var_files_list_2.append(i)
150
150
151 #se crea un archivo con numeral en el sufijo y extension .dat
151 #se crea un archivo con numeral en el sufijo y extension .dat
152 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
152 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w")
153 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
153 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
154 for line in var_files_list_2:
154 for line in var_files_list_2:
155 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
155 var_tmp_path=line.split(self.var_Dpath)[1][:-13]
156 var_file.write(var_tmp_path+'='+line+'\n')
156 var_file.write(var_tmp_path+'='+line+'\n')
157 var_file.close()
157 var_file.close()
158
158
159 self.txtInfo.append("configuration files created")
159 self.txtInfo.append("configuration files created")
160 return var_n
160 return var_n
161
161
162
162
163 #------------------------------ Genera los archivos .print con los cuales se creara los postscript -----------------------------------
163 #------------------------------ Genera los archivos .print con los cuales se creara los postscript -----------------------------------
164
164
165 def make_files_print(self):
165 def make_files_print(self):
166
166
167 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
167 var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
168 var_Rpath_gpath=self.var_Rpath+"/gpath" #Ruta de los archivos postscript
168 var_Rpath_gpath=self.var_Rpath+"/gpath" #Ruta de los archivos postscript
169 var_labels=[]
169 var_labels=[]
170 for m in range (0, self.txtPSgraphic.value() - 1):
170 for m in range (0, self.txtPSgraphic.value() - 1):
171 var_lines = "\n" * 9
171 var_lines = "\n" * 9
172 var_labels.append(var_lines)
172 var_labels.append(var_lines)
173
173
174 # Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .print
174 # Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .print
175 for var_n in range(1, self.var_Discs + 1):
175 for var_n in range(1, self.var_Discs + 1):
176
176
177 #se abren los archivos .dat en modo lectura
177 #se abren los archivos .dat en modo lectura
178 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","r")
178 var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","r")
179 lines=var_file.readlines() # Se lee las lineas en el archivo y se almacenan en la lista
179 lines=var_file.readlines() # Se lee las lineas en el archivo y se almacenan en la lista
180 var_file.close()
180 var_file.close()
181 list_files=[]
181 list_files=[]
182 var_lines=[]
182 var_lines=[]
183
183
184 for j in range(0, len(lines)):
184 for j in range(0, len(lines)):
185
185
186 if j == 0:
186 if j == 0:
187 var_first_folder = lines[j].split('=')[0]
187 var_first_folder = lines[j].split('=')[0]
188 var_first_file = (lines[j].split('=')[1])[:-1]
188 var_first_file = (lines[j].split('=')[1])[:-1]
189 continue
189 continue
190
190
191 var_tmp_folder = lines[j].split('=')[0]
191 var_tmp_folder = lines[j].split('=')[0]
192 var_tmp_file = (lines[j].split('=')[1])[:-1]
192 var_tmp_file = (lines[j].split('=')[1])[:-1]
193
193
194 # Si el subfolder superior o el DOY del archivo actual y el anterior son diferentes
194 # Si el subfolder superior o el DOY del archivo actual y el anterior son diferentes
195 if (var_tmp_folder != var_first_folder) or (var_tmp_file[0:-5] != var_first_file[0:-5]):
195 if (var_tmp_folder != var_first_folder) or (var_tmp_file[0:-5] != var_first_file[0:-5]):
196 var_last_file = (lines[j-1].split('=')[1])[:-1]
196 var_last_file = (lines[j-1].split('=')[1])[:-1]
197 list_files.append([var_first_folder, var_first_file, var_last_file])
197 list_files.append([var_first_folder, var_first_file, var_last_file])
198
198
199 var_first_folder = lines[j].split('=')[0]
199 var_first_folder = lines[j].split('=')[0]
200 var_first_file = (lines[j].split('=')[1])[:-1]
200 var_first_file = (lines[j].split('=')[1])[:-1]
201
201
202 var_last_file = (lines[-1].split('=')[1])[:-1]
202 var_last_file = (lines[-1].split('=')[1])[:-1]
203 list_files.append([var_first_folder, var_first_file, var_last_file])
203 list_files.append([var_first_folder, var_first_file, var_last_file])
204
204
205 var_lines2 = lines_print(list_files, self.var_Elabel)
205 var_lines2 = lines_print(list_files, self.var_Elabel)
206
206
207 for k in range(0, len(var_lines2) / 5):
207 for k in range(0, len(var_lines2) / 5):
208 var_lines=["\n"]
208 var_lines=["\n"]
209 var_lines.append(" "+self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_Discs)+"\n")
209 var_lines.append(" "+self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_Discs)+"\n")
210 var_lines.append("Year Doy Folder"+" "*6+"Set"+" "*9+"Time range\n")
210 var_lines.append("Year Doy Folder"+" "*6+"Set"+" "*9+"Time range\n")
211 var_lines.extend(var_lines2[(5*k):(5*(k+1))])
211 var_lines.extend(var_lines2[(5*k):(5*(k+1))])
212 var_lines.append("\n")
212 var_lines.append("\n")
213 var_labels.append(var_lines)
213 var_labels.append(var_lines)
214
214
215 for i in range(0, (len(var_labels) // 33) +1 ):
215 for i in range(0, (len(var_labels) // 33) +1 ):
216 var_file=var_Rpath_gpath+"/"+self.var_Elabel+"_"+i2s(i+1)
216 var_file=var_Rpath_gpath+"/"+self.var_Elabel+"_"+i2s(i+1)
217 file_ps = open(var_file+".print","w")
217 file_ps = open(var_file+".print","w")
218 if i == (len(var_labels) // 33):
218 if i == (len(var_labels) // 33):
219 var_sub_labels = var_labels[33*i:]
219 var_sub_labels = var_labels[33*i:]
220 else:
220 else:
221 var_sub_labels = var_labels[33*i:33*(i+1)]
221 var_sub_labels = var_labels[33*i:33*(i+1)]
222
222
223 for label in var_sub_labels:
223 for label in var_sub_labels:
224 for line in label:
224 for line in label:
225 file_ps.write(line)
225 file_ps.write(line)
226 file_ps.close()
226 file_ps.close()
227 var_cmd="enscript "+var_file+".print -p "+var_file+".ps -f Times-Roman7 " \
227 var_cmd="enscript "+var_file+".print -p "+var_file+".ps -f Times-Roman7 " \
228 +" -3R -j -B --margins=21.25:20.4:25.51:20 --media=A4"
228 +" -3R -j -B --margins=21.25:20.4:25.51:20 --media=A4"
229 var_output=commands.getstatusoutput(var_cmd)[0]
229 var_output=commands.getstatusoutput(var_cmd)[0]
230
230
231
231
232 def lines_print(list_files, var_Elabel):
232 def lines_print(list_files, var_Elabel):
233 """
233 """
234 Devuelve las lineas del rango de archivos de cada etiqueta segun el formato
234 Devuelve las lineas del rango de archivos de cada etiqueta segun el formato
235 """
235 """
236 var_lines=[]
236 var_lines=[]
237 for i in list_files:
237 for i in list_files:
238
238
239 # Si el archivo se grabara directamente en la / del DVD y no en un /directorio/
239 # Si el archivo se grabara directamente en la / del DVD y no en un /directorio/
240 # se usa la etiqueta para indicar la parte de la etiqueta donde va el subdirectorio
240 # se usa la etiqueta para indicar la parte de la etiqueta donde va el subdirectorio
241 if i[0] == '/':
241 if i[0] == '/':
242 var_folder = var_Elabel
242 var_folder = var_Elabel
243 else:
243 else:
244 var_folder = i[0].split('/')[-2]
244 var_folder = i[0].split('/')[-2]
245
245
246 var_first_file = i[1]
246 var_first_file = i[1]
247 var_last_file = i[2]
247 var_last_file = i[2]
248
248
249 var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1]
249 var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1]
250 var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1]
250 var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1]
251
251
252 var_lines.append(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+"-"
252 var_lines.append(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+"-"
253 +var_last_file[-5:-2]+" "+var_date_first_file+"-"+var_date_last_file+"\n")
253 +var_last_file[-5:-2]+" "+var_date_first_file+"-"+var_date_last_file+"\n")
254 #Nos aseguramos que sea un mutiplo de 5
254 #Nos aseguramos que sea un mutiplo de 5
255 while (len(var_lines) % 5) != 0:
255 while (len(var_lines) % 5) != 0:
256 var_lines.append("\n")
256 var_lines.append("\n")
257
257
258 return var_lines
258 return var_lines
259
259
260 #---------------------------------------comandos para el proceso de grabacion ------------------------------------------
260 def cmd_iso(self):
261 def cmd_iso(self):
261 var_Rpath_ppath=self.var_Rpath+"/ppath"
262 var_Rpath_ppath=self.var_Rpath+"/ppath"
262 var_Rpath_iso=self.var_Rpath+"/iso"
263 var_Rpath_iso=self.var_Rpath+"/iso"
263 #comando para la creacion del archivo.iso
264 #comando para la creacion del archivo.iso
264 file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(self.var_disc_n)+".dat"
265 file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(self.var_disc_n)+".dat"
265 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
266 file_iso=var_Rpath_iso+"/"+i2s(self.var_disc_n)+".iso"
266 var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
267 var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
267 var_cmd += ' -A '+self.var_Elabel+' -V '+self.var_Elabel
268 var_cmd += ' -A '+self.var_Elabel+' -V '+self.var_Elabel
268 var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
269 var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
269 return var_cmd
270 return var_cmd
270
271
271
272 def cmd_burn(self):
272 def next_var_disc(self, error = False):
273 var_Rpath_iso=self.var_Rpath+"/iso"
273 pass
274 file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc_n)+".iso"
274 # if self.var_copy_n < self.var_Copys:
275
275 # self.var_copy_n += 1
276 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
276 # self.var_step == 1:
277 var_dev_tmp = self.var_devices[var_index]
277 #
278
278 # if self.var_disc_n < self.var_Discs:
279 var_cmd = "wodim -v dev="+var_dev_tmp+" speed=16 "+ file_iso
279
280 return var_cmd
280 pass
281
281
282 def remove_iso(self):
283 var_Rpath_iso=self.var_Rpath+"/iso"
284 file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc_n)+".iso"
285
286 self.txtInfo.append("Deleting iso file: "+functions.i2s(self.var_disc_n)+".iso")
287
288 if os.path.isfile(file_iso):
289 os.remove(file_iso)
290
291 #Si es el ultimo disco se termina el proceso
292 def is_last_disc_and_copy(self):
293 if self.var_disc_n == self.var_Discs and self.var_copy_n == self.var_Copys:
294 self.function_final()
295 else:
296 next_disc(self)
297
298 #Define cual es el siguiente disco a grabar y que paso seguir
299 def next_disc(self, error = False):
300 if self.var_copy_n == self.var_Copys:
301 self.var_disc_n += 1
302 self.var_copy_n = 1
303 self.var_step = 0
304
305 else:
306 self.var_copy_n += 1
307 self.var_step = 1
308
309 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
310
311 self.txtInfo.append("NEXT DISC: "+str(self.var_disc_n)+" COPY: "+str(self.var_copy_n)
312 +" INDEX: "+str(var_index)+" STEP: "+str(self.var_step))
313 self.txtInfo.append("\n")
314
315 if var_index == 0 :
316 self.function_eject()
317
318 elif self.var_step == 0:
319 self.function_iso()
320 elif self.var_step == 1:
321 self.function_burn()
@@ -1,248 +1,246
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 self.txtInfo.append("Ejecting recording devices")
56 return
57 for var_dev in self.var_devices:
55 for var_dev in self.var_devices:
58 var_cmd = 'eject ' + var_dev
56 var_cmd = 'eject ' + var_dev
59 commands.getstatusoutput(var_cmd)
57 commands.getstatusoutput(var_cmd)
60
58
61 #----------------------------------- listado de los dispositivos de grabacion seleccionados --------------------------------------------
59 #----------------------------------- listado de los dispositivos de grabacion seleccionados --------------------------------------------
62
60
63 def selected_devices(self):
61 def selected_devices(self):
64 self.var_devices=[]
62 self.var_devices=[]
65 if self.chkDevA.isChecked():
63 if self.chkDevA.isChecked():
66 self.var_devices.append(str(self.txtDeviceA.text()))
64 self.var_devices.append(str(self.txtDeviceA.text()))
67 if self.chkDevB.isChecked():
65 if self.chkDevB.isChecked():
68 self.var_devices.append(str(self.txtDeviceB.text()))
66 self.var_devices.append(str(self.txtDeviceB.text()))
69 if self.chkDevC.isChecked():
67 if self.chkDevC.isChecked():
70 self.var_devices.append(str(self.txtDeviceC.text()))
68 self.var_devices.append(str(self.txtDeviceC.text()))
71 if self.chkDevD.isChecked():
69 if self.chkDevD.isChecked():
72 self.var_devices.append(str(self.txtDeviceD.text()))
70 self.var_devices.append(str(self.txtDeviceD.text()))
73
71
74 if len(self.var_devices) == 0:
72 if len(self.var_devices) == 0:
75 return False
73 return False
76 else:
74 else:
77 return True
75 return True
78
76
79
77
80 #----------------------------------------------------- Inicializacion para pruebas---------------------------------------------------------------
78 #----------------------------------------------------- Inicializacion para pruebas---------------------------------------------------------------
81
79
82 def set_parameters_test(self):
80 def set_parameters_test(self):
83 """
81 """
84 Se usa para inicializar ciertos parametros para pruebas
82 Se usa para inicializar ciertos parametros para pruebas
85 """
83 """
86 self.txtDpath.setText('/home/ricardoar/optional/STORAGE/EW_DRIFTS')
84 self.txtDpath.setText('/home/ricardoar/optional/STORAGE/EW_DRIFTS')
87 self.txtRpath.setText('/home/ricardoar/optional/prueba1_jro_backup_manager')
85 self.txtRpath.setText('/home/ricardoar/optional/prueba1_jro_backup_manager')
88 self.txtElabel.setText('EW_DRIFTS_pruebas')
86 self.txtElabel.setText('EW_DRIFTS_pruebas')
89 self.lstDcapacity.setCurrentIndex(4)
87 self.lstDcapacity.setCurrentIndex(4)
90 self.txtDcapacity.setValue(100.0)
88 self.txtDcapacity.setValue(100.0)
91 self.txtDcapacity.setReadOnly(False)
89 self.txtDcapacity.setReadOnly(False)
92
90
93 def set_devices_test(self):
91 def set_devices_test(self):
94 self.txtDeviceA.setText("/dev/scd0")
92 self.txtDeviceA.setText("/dev/scd0")
95 self.txtDeviceB.setText("/dev/scd1")
93 self.txtDeviceB.setText("/dev/scd1")
96 self.txtDeviceC.setText("/dev/scd2")
94 self.txtDeviceC.setText("/dev/scd2")
97 self.txtDeviceD.setText("/dev/scd3")
95 self.txtDeviceD.setText("/dev/scd3")
98
96
99
97
100
98
101 #----------------------------------------------------- crea parameters.conf ---------------------------------------------------------------
99 #----------------------------------------------------- crea parameters.conf ---------------------------------------------------------------
102
100
103 def make_parameters_conf(self):
101 def make_parameters_conf(self):
104 var_file = open("parameters.conf","w")
102 var_file = open("parameters.conf","w")
105 var_file.write(self.var_Dpath+"\n") #0 Ruta de los datos
103 var_file.write(self.var_Dpath+"\n") #0 Ruta de los datos
106 var_file.write(self.var_Rpath+"\n") #1 Ruta del proyecto
104 var_file.write(self.var_Rpath+"\n") #1 Ruta del proyecto
107 var_file.write(str(self.var_lstDtype)+"\n") #2 opcion Data Type
105 var_file.write(str(self.var_lstDtype)+"\n") #2 opcion Data Type
108 var_file.write(self.var_Dtype+"\n") #3 extension Data Type
106 var_file.write(self.var_Dtype+"\n") #3 extension Data Type
109 var_file.write(self.var_Elabel+"\n") #4 etiqueta
107 var_file.write(self.var_Elabel+"\n") #4 etiqueta
110 var_file.write(str(self.var_Copys)+"\n") #5 Numero de copias
108 var_file.write(str(self.var_Copys)+"\n") #5 Numero de copias
111 var_file.write(str(self.var_lstDcapacity)+"\n") #6 opcion Device Capacity
109 var_file.write(str(self.var_lstDcapacity)+"\n") #6 opcion Device Capacity
112 var_file.write(str(self.var_Dcapacity)+"\n") #7 tamaΓ±o Device Capacity
110 var_file.write(str(self.var_Dcapacity)+"\n") #7 tamaΓ±o Device Capacity
113 var_file.write(str(self.var_Discs)+"\n") #8 Numero de discos a grabar
111 var_file.write(str(self.var_Discs)+"\n") #8 Numero de discos a grabar
114 # var_file.write(str(self.lstStartDay.currentIndex())+"\n") #9 Indice fecha inicial
112 # var_file.write(str(self.lstStartDay.currentIndex())+"\n") #9 Indice fecha inicial
115 # var_file.write(str(self.lstStopDay.currentIndex())+"\n") #10 Indice fecha final
113 # var_file.write(str(self.lstStopDay.currentIndex())+"\n") #10 Indice fecha final
116 var_file.close()
114 var_file.close()
117
115
118 #----------------------------------------------------- carga parameters.conf ---------------------------------------------------------------
116 #----------------------------------------------------- carga parameters.conf ---------------------------------------------------------------
119
117
120 def get_parameters_conf(self):
118 def get_parameters_conf(self):
121 var_file = open("parameters.conf","r")
119 var_file = open("parameters.conf","r")
122 lines = var_file.readlines()
120 lines = var_file.readlines()
123 self.txtDpath.setText(lines[0][:-1]) #0
121 self.txtDpath.setText(lines[0][:-1]) #0
124 self.txtRpath.setText(lines[1][:-1]) #1
122 self.txtRpath.setText(lines[1][:-1]) #1
125 self.lstDtype.setCurrentIndex(int(lines[2])) #2
123 self.lstDtype.setCurrentIndex(int(lines[2])) #2
126 self.txtDtype.setText(lines[3][:-1]) #3
124 self.txtDtype.setText(lines[3][:-1]) #3
127 self.txtElabel.setText(lines[4][:-1]) #4
125 self.txtElabel.setText(lines[4][:-1]) #4
128 self.txtCopys.setValue(int(lines[5][:-1])) #5
126 self.txtCopys.setValue(int(lines[5][:-1])) #5
129 self.lstDcapacity.setCurrentIndex(int(lines[6])) #6
127 self.lstDcapacity.setCurrentIndex(int(lines[6])) #6
130 self.txtDcapacity.setValue(float(lines[7])) #7
128 self.txtDcapacity.setValue(float(lines[7])) #7
131 self.var_Discs = int(lines[8]) #8
129 self.var_Discs = int(lines[8]) #8
132 # var_StartDay = int(lines[6]) #9
130 # var_StartDay = int(lines[6]) #9
133 # var_StopDay = int(lines[7]) #10
131 # var_StopDay = int(lines[7]) #10
134 ################################
132 ################################
135 self.var_Copys = self.txtCopys.value() #5
133 self.var_Copys = self.txtCopys.value() #5
136 ################################
134 ################################
137
135
138 var_file.close()
136 var_file.close()
139
137
140
138
141 #-------------------------- actualiza el valor de las variables con los parametros seleccionados -----------------------------
139 #-------------------------- actualiza el valor de las variables con los parametros seleccionados -----------------------------
142
140
143 def set_vars(self):
141 def set_vars(self):
144 self.var_Dpath = str(self.txtDpath.text()) #0
142 self.var_Dpath = str(self.txtDpath.text()) #0
145 self.var_Rpath = str(self.txtRpath.text()) #1
143 self.var_Rpath = str(self.txtRpath.text()) #1
146 self.var_lstDtype = self.lstDtype.currentIndex() #2
144 self.var_lstDtype = self.lstDtype.currentIndex() #2
147 self.var_Dtype = str(self.txtDtype.text()) #3
145 self.var_Dtype = str(self.txtDtype.text()) #3
148 self.var_Elabel = str(self.txtElabel.text()) #4
146 self.var_Elabel = str(self.txtElabel.text()) #4
149 self.var_Copys = self.txtCopys.value() #5
147 self.var_Copys = self.txtCopys.value() #5
150 self.var_lstDcapacity = self.lstDcapacity.currentIndex() #6
148 self.var_lstDcapacity = self.lstDcapacity.currentIndex() #6
151 self.var_Dcapacity = self.txtDcapacity.value() #7
149 self.var_Dcapacity = self.txtDcapacity.value() #7
152 self.var_Discs = self.var_Discs #8
150 self.var_Discs = self.var_Discs #8
153
151
154
152
155 #-------------------------- crea burning.conf -----------------------------
153 #-------------------------- crea burning.conf -----------------------------
156
154
157 def make_burning_conf(self):
155 def make_burning_conf(self):
158 var_file = open("burning.conf","w")
156 var_file = open("burning.conf","w")
159 var_n_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n -1 )
157 var_n_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n -1 )
160 var_file.write(str(var_n_burned_discs)+"\n") #0 Numero de discos ya grabados
158 var_file.write(str(var_n_burned_discs)+"\n") #0 Numero de discos ya grabados
161 var_file.write(str(self.var_disc_n)+"\n") #1 Disco actual para grabar
159 var_file.write(str(self.var_disc_n)+"\n") #1 Disco actual para grabar
162 var_file.write(str(self.var_copy_n)+"\n") #2 Numero de copia actual para grabar
160 var_file.write(str(self.var_copy_n)+"\n") #2 Numero de copia actual para grabar
163 var_file.close()
161 var_file.close()
164
162
165 #----------------------------------------------------- carga burning.conf ---------------------------------------------------------------
163 #----------------------------------------------------- carga burning.conf ---------------------------------------------------------------
166
164
167 def get_burning_conf(self):
165 def get_burning_conf(self):
168 var_file = open("burning.conf","r")
166 var_file = open("burning.conf","r")
169 lines = var_file.readlines()
167 lines = var_file.readlines()
170 self.var_burned_discs = int(lines[0]) #0
168 self.var_burned_discs = int(lines[0]) #0
171 self.var_disc_n = int(lines[1])
169 self.var_disc_n = int(lines[1])
172 self.var_copy_n = int(lines[2])
170 self.var_copy_n = int(lines[2])
173 var_file.close()
171 var_file.close()
174
172
175 #---------------------------------------------- Habilitacion y deshabilitacion de items -------------------------------------------------------
173 #---------------------------------------------- Habilitacion y deshabilitacion de items -------------------------------------------------------
176
174
177 def enabled_items1(var_bool, self):
175 def enabled_items1(var_bool, self):
178 self.tabParameters.setEnabled(not(var_bool))
176 self.tabParameters.setEnabled(not(var_bool))
179 self.lstDcapacity.setEnabled(not(var_bool))
177 self.lstDcapacity.setEnabled(not(var_bool))
180 self.txtDcapacity.setEnabled(not(var_bool))
178 self.txtDcapacity.setEnabled(not(var_bool))
181 self.actionChange_Parameters.setEnabled(var_bool)
179 self.actionChange_Parameters.setEnabled(var_bool)
182 self.btnGbkp.setEnabled(not(var_bool))
180 self.btnGbkp.setEnabled(not(var_bool))
183 self.btnRestart.setEnabled(var_bool)
181 self.btnRestart.setEnabled(var_bool)
184 self.btnStartburn.setEnabled(var_bool)
182 self.btnStartburn.setEnabled(var_bool)
185
183
186
184
187 def enabled_items2(var_bool, self):
185 def enabled_items2(var_bool, self):
188 self.btnRestart.setEnabled(not(var_bool))
186 self.btnRestart.setEnabled(not(var_bool))
189 self.btnStartburn.setEnabled(not(var_bool))
187 self.btnStartburn.setEnabled(not(var_bool))
190 self.btnStopburn.setEnabled(var_bool)
188 self.btnStopburn.setEnabled(var_bool)
191 self.chkCheck.setEnabled(not(var_bool))
189 self.chkCheck.setEnabled(not(var_bool))
192 self.actionChange_Parameters.setEnabled(False)
190 self.actionChange_Parameters.setEnabled(False)
193
191
194
192
195
193
196
194
197 #---------------------------------------------- Actualiza estado en los labels -------------------------------------------------------
195 #---------------------------------------------- Actualiza estado en los labels -------------------------------------------------------
198
196
199 def update_message(type, message, self, index=0):
197 def update_message(type, message, self, index=0):
200 if index == 0:
198 if index == 0:
201 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
199 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
202 else:
200 else:
203 var_index = index
201 var_index = index
204
202
205 var_message = message
203 var_message = message
206 # var_message = "BURNING"
204 # var_message = "BURNING"
207 # var_message = "COMPLETED"
205 # var_message = "COMPLETED"
208 # var_message = "ERROR"
206 # var_message = "ERROR"
209 # var_message = "CHECKING"
207 # var_message = "CHECKING"
210 # var_message = "CHECKED"
208 # var_message = "CHECKED"
211
209
212 if type == 1:
210 if type == 1:
213
211
214 if var_index == 0:
212 if var_index == 0:
215 self.txtBstatusA.setText(var_message)
213 self.txtBstatusA.setText(var_message)
216 self.txtBdiscA.setText(str(self.var_disc_n))
214 self.txtBdiscA.setText(str(self.var_disc_n))
217 self.txtBcopyA.setText(str(self.var_copy_n))
215 self.txtBcopyA.setText(str(self.var_copy_n))
218
216
219 if var_index == 1:
217 if var_index == 1:
220 self.txtBstatusB.setText(var_message)
218 self.txtBstatusB.setText(var_message)
221 self.txtBdiscB.setText(str(self.var_disc_n))
219 self.txtBdiscB.setText(str(self.var_disc_n))
222 self.txtBcopyB.setText(str(self.var_copy_n))
220 self.txtBcopyB.setText(str(self.var_copy_n))
223
221
224 if var_index == 2:
222 if var_index == 2:
225 self.txtBstatusC.setText(var_message)
223 self.txtBstatusC.setText(var_message)
226 self.txtBdiscC.setText(str(self.var_disc_n))
224 self.txtBdiscC.setText(str(self.var_disc_n))
227 self.txtBcopyC.setText(str(self.var_copy_n))
225 self.txtBcopyC.setText(str(self.var_copy_n))
228
226
229 if var_index == 3:
227 if var_index == 3:
230 self.txtBstatusD.setText(var_message)
228 self.txtBstatusD.setText(var_message)
231 self.txtBdiscD.setText(str(self.var_disc_n))
229 self.txtBdiscD.setText(str(self.var_disc_n))
232 self.txtBcopyD.setText(str(self.var_copy_n))
230 self.txtBcopyD.setText(str(self.var_copy_n))
233
231
234 if type == 2:
232 if type == 2:
235
233
236 if var_index == 0:
234 if var_index == 0:
237 self.txtCHstatusA.setText(var_message)
235 self.txtCHstatusA.setText(var_message)
238
236
239 if var_index == 1:
237 if var_index == 1:
240 self.txtCHstatusB.setText(var_message)
238 self.txtCHstatusB.setText(var_message)
241
239
242 if var_index == 2:
240 if var_index == 2:
243 self.txtCHstatusC.setText(var_message)
241 self.txtCHstatusC.setText(var_message)
244
242
245 if var_index == 3:
243 if var_index == 3:
246 self.txtCHstatusD.setText(var_message)
244 self.txtCHstatusD.setText(var_message)
247
245
248
246
@@ -1,598 +1,607
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.var_real = False
36
35 # Reconocimiento de los dispositivos de grabacion
37 # Reconocimiento de los dispositivos de grabacion
36 # functions2.detect_devices(self) #busca los dispositivos de grabacion
38 # functions2.detect_devices(self) #busca los dispositivos de grabacion
37 ####################################
39 ####################################
38 functions2.set_devices_test(self) ############
40 functions2.set_devices_test(self) ############
39 ####################################
41 ####################################
40
42
41 #Inicialiazacion de variables
43 #Inicialiazacion de variables
42 self.var_Discs = 0 #Numero de discos del proyecto
44 self.var_Discs = 0 #Numero de discos del proyecto
43 self.var_Copys = 0 #Numero de copias
45 self.var_Copys = 0 #Numero de copias
44 self.var_disc_n = 0 # disco actual
46 self.var_disc_n = 0 # disco actual
45 self.var_copy_n = 0 # copia actual
47 self.var_copy_n = 0 # copia actual
46 self.var_burned_discs = 0 #numero de discos ya grabados
48 self.var_burned_discs = 0 #numero de discos ya grabados
47
49
50 self.bool_first_iso = False
48 self.var_step = 0 # numero de paso en el proceso
51 self.var_step = 0 # numero de paso en el proceso
49 self.bool_state_burning = False #si es True se puede grabar
52 self.bool_state_burning = False #si es True se puede grabar
50 self.blank_discs = False # Si es true significa que se acaban de ingresar discos en blanco
53 self.blank_discs = False # Si es true significa que se acaban de ingresar discos en blanco
51
54
52 self.var_list=[] # Lista de DOYs
55 self.var_list=[] # Lista de DOYs
53 self.var_sublist=[] # Sub-lista de DOYs seleccionados
56 self.var_sublist=[] # Sub-lista de DOYs seleccionados
54 self.var_devices=[] #Lista de dispositivos seleccionados
57 self.var_devices=[] #Lista de dispositivos seleccionados
55
58
56 #Revisa si existe el archivo de confirguracion y lo carga
59 #Revisa si existe el archivo de confirguracion y lo carga
57 if os.path.isfile("parameters.conf"):
60 if os.path.isfile("parameters.conf"):
58 functions2.get_parameters_conf(self)
61 functions2.get_parameters_conf(self)
62 self.bool_first_iso = True
59 self.txtInfo.append("Parameters were loaded from configuration file")
63 self.txtInfo.append("Parameters were loaded from configuration file")
60 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
64 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
61
65
62 else:
66 else:
63 functions2.set_parameters_test(self) #Establece ciertos parametros, para pruebas
67 functions2.set_parameters_test(self) #Establece ciertos parametros, para pruebas
64
68
65 functions2.set_vars(self) #Carga las variables de la clase con los parametros seleccionados
69 functions2.set_vars(self) #Carga las variables de la clase con los parametros seleccionados
66
70
67 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
71 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
68 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
72 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
69 functions.load_days(self)
73 functions.load_days(self)
70
74
71 if os.path.isfile("parameters.conf"):
75 if os.path.isfile("parameters.conf"):
72 functions2.enabled_items1(True, self) #Se bloquean los parametros de configuracion
76 functions2.enabled_items1(True, self) #Se bloquean los parametros de configuracion
73
77
74 if os.path.isfile("burning.conf"):
78 if os.path.isfile("burning.conf"):
75 functions2.get_burning_conf(self)
79 functions2.get_burning_conf(self)
76 self.txtInfo.append("Current disc: "+str(self.var_disc_n))
80 self.txtInfo.append("Current disc: "+str(self.var_disc_n))
77 self.txtInfo.append("Current copy: "+str(self.var_copy_n))
81 self.txtInfo.append("Current copy: "+str(self.var_copy_n))
78 self.txtInfo.append("Burned discs: "+str(self.var_burned_discs))
82 self.txtInfo.append("Burned discs: "+str(self.var_burned_discs))
79 self.btnStartburn.setText("Continue")
83 self.btnStartburn.setText("Continue")
80
84
81
85
82
86
83 self.connect(self.actionChange_Parameters, QtCore.SIGNAL("triggered()"), self.changeParameters)
87 self.connect(self.actionChange_Parameters, QtCore.SIGNAL("triggered()"), self.changeParameters)
84 self.connect(self.actionAbout, QtCore.SIGNAL("triggered()"), self.about)
88 self.connect(self.actionAbout, QtCore.SIGNAL("triggered()"), self.about)
85
89
86 self.process_iso = QtCore.QProcess()
90 self.process_iso = QtCore.QProcess()
87 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_iso)
91 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_iso)
88 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardError()'), self.readError_iso)
92 self.connect(self.process_iso, QtCore.SIGNAL('readyReadStandardError()'), self.readError_iso)
89 self.connect(self.process_iso, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_iso)
93 self.connect(self.process_iso, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_iso)
90
94
91 self.process_burn = QtCore.QProcess()
95 self.process_burn = QtCore.QProcess()
92 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_burn)
96 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_burn)
93 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardError()'), self.readError_burn)
97 self.connect(self.process_burn, QtCore.SIGNAL('readyReadStandardError()'), self.readError_burn)
94 self.connect(self.process_burn, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_burn)
98 self.connect(self.process_burn, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_burn)
95
99
96 self.process_check = QtCore.QProcess()
100 self.process_check = QtCore.QProcess()
97 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_check)
101 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput_check)
98 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardError()'), self.readError_check)
102 self.connect(self.process_check, QtCore.SIGNAL('readyReadStandardError()'), self.readError_check)
99 self.connect(self.process_check, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_check)
103 self.connect(self.process_check, QtCore.SIGNAL('finished(int,QProcess::ExitStatus)'), self.finished_check)
100
104
101
105
102 def changeParameters(self):
106 def changeParameters(self):
103 dlg=QtGui.QDialog()
107 dlg=QtGui.QDialog()
104 dlgui=Ui_Parameters()
108 dlgui=Ui_Parameters()
105 dlgui.setupUi(dlg)
109 dlgui.setupUi(dlg)
106 if (dlg.exec_() == QtGui.QDialog.Accepted):
110 if (dlg.exec_() == QtGui.QDialog.Accepted):
107 if dlgui.txtDisc.value() > self.var_Discs or dlgui.txtCopy.value() > dlgui.txtNcopys.value():
111 if dlgui.txtDisc.value() > self.var_Discs or dlgui.txtCopy.value() > dlgui.txtNcopys.value():
108 self.txtInfo.append("Wrong parameters")
112 self.txtInfo.append("Wrong parameters")
109 else:
113 else:
110 self.var_Copys = dlgui.txtNcopys.value()
114 self.var_Copys = dlgui.txtNcopys.value()
111 self.var_disc_n = dlgui.txtDisc.value()
115 self.var_disc_n = dlgui.txtDisc.value()
112 self.var_copy_n = dlgui.txtCopy.value()
116 self.var_copy_n = dlgui.txtCopy.value()
113 self.txtInfo.append("Changed parameters")
117 self.txtInfo.append("Changed parameters")
114 self.var_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n -1 )
118 self.var_burned_discs = ( ( (self.var_disc_n - 1) * self.var_Copys) + self.var_copy_n -1 )
119 self.bool_first_iso = True
120
115
121
116
122
117 def about(self):
123 def about(self):
118 dlg_about=QtGui.QDialog()
124 dlg_about=QtGui.QDialog()
119 dlgui_about=Ui_About()
125 dlgui_about=Ui_About()
120 dlgui_about.setupUi(dlg_about)
126 dlgui_about.setupUi(dlg_about)
121 dlg_about.exec_()
127 dlg_about.exec_()
122
128
123
129
124 #==============================================================================
130 #==============================================================================
125 # Manejo de los eventos
131 # Manejo de los eventos
126 #==============================================================================
132 #==============================================================================
127
133
128 #----------------------------------------------------- Obtencion de la ruta de los datos ---------------------------------------------------------------
134 #----------------------------------------------------- Obtencion de la ruta de los datos ---------------------------------------------------------------
129
135
130 @pyqtSignature("")
136 @pyqtSignature("")
131 def on_btnDpath_clicked(self):
137 def on_btnDpath_clicked(self):
132 """
138 """
133 Permite seleccionar graficamente el direcorio de los datos a grabar
139 Permite seleccionar graficamente el direcorio de los datos a grabar
134 """
140 """
135 self.var_Dpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
141 self.var_Dpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
136 self.txtDpath.setText(self.var_Dpath)
142 self.txtDpath.setText(self.var_Dpath)
137 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
143 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
138 functions.load_days(self)
144 functions.load_days(self)
139
145
140
146
141 @pyqtSignature("")
147 @pyqtSignature("")
142 def on_txtDpath_editingFinished(self):
148 def on_txtDpath_editingFinished(self):
143 """
149 """
144 Carga la ruta editada y verifica que sea correcta y carga la lista de dias
150 Carga la ruta editada y verifica que sea correcta y carga la lista de dias
145 """
151 """
146 self.var_Dpath=str(self.txtDpath.text()) #Se carga la variable con la ruta recien editada
152 self.var_Dpath=str(self.txtDpath.text()) #Se carga la variable con la ruta recien editada
147 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
153 self.statusDpath = functions.dir_exists(self.var_Dpath, self)
148 functions.load_days(self)
154 functions.load_days(self)
149
155
150
156
151 #----------------------------------------------------- Obtencion de las ruta del proyecto ---------------------------------------------------------------
157 #----------------------------------------------------- Obtencion de las ruta del proyecto ---------------------------------------------------------------
152
158
153 @pyqtSignature("")
159 @pyqtSignature("")
154 def on_btnRpath_clicked(self):
160 def on_btnRpath_clicked(self):
155 """
161 """
156 Permite seleccionar graficamente el direcorio del proyecto
162 Permite seleccionar graficamente el direcorio del proyecto
157 """
163 """
158 self.var_Rpath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
164 self.var_Rpath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
159 self.txtRpath.setText(self.var_Rpath)
165 self.txtRpath.setText(self.var_Rpath)
160 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
166 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
161
167
162
168
163 @pyqtSignature("")
169 @pyqtSignature("")
164 def on_txtRpath_editingFinished(self):
170 def on_txtRpath_editingFinished(self):
165 """
171 """
166 Valida la ruta del proyecto
172 Valida la ruta del proyecto
167 """
173 """
168 self.var_Rpath = str(self.txtRpath.text()) #Se carga la variable con la ruta recien editada
174 self.var_Rpath = str(self.txtRpath.text()) #Se carga la variable con la ruta recien editada
169 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
175 self.statusRpath = functions.dir_exists(self.var_Rpath, self)
170
176
171
177
172 #----------------------------------------------------- Tipo de datos ---------------------------------------------------------------
178 #----------------------------------------------------- Tipo de datos ---------------------------------------------------------------
173
179
174 @pyqtSignature("int")
180 @pyqtSignature("int")
175 def on_lstDtype_activated(self, index):
181 def on_lstDtype_activated(self, index):
176 """
182 """
177 Permite elegir entre los tipos de archivos
183 Permite elegir entre los tipos de archivos
178 """
184 """
179 self.txtDtype.setReadOnly(True)
185 self.txtDtype.setReadOnly(True)
180 if index == 0:
186 if index == 0:
181 self.var_Dtype ='r'
187 self.var_Dtype ='r'
182 elif index == 1:
188 elif index == 1:
183 self.var_Dtype ='pdata'
189 self.var_Dtype ='pdata'
184 elif index == 2:
190 elif index == 2:
185 self.var_Dtype ='sswma'
191 self.var_Dtype ='sswma'
186 else :
192 else :
187 self.var_Dtype =''
193 self.var_Dtype =''
188 self.txtDtype.setReadOnly(False)
194 self.txtDtype.setReadOnly(False)
189
195
190 self.txtDtype.setText(self.var_Dtype)
196 self.txtDtype.setText(self.var_Dtype)
191 functions.load_days(self) #llamada a funcion
197 functions.load_days(self) #llamada a funcion
192
198
193 @pyqtSignature("")
199 @pyqtSignature("")
194 def on_txtDtype_editingFinished(self):
200 def on_txtDtype_editingFinished(self):
195 self.var_Dtype=str(self.txtDtype.text())
201 self.var_Dtype=str(self.txtDtype.text())
196 functions.load_days(self) #llamada a funcion
202 functions.load_days(self) #llamada a funcion
197
203
198
204
199 #----------------------------------------------------- Etiqueta ---------------------------------------------------------------
205 #----------------------------------------------------- Etiqueta ---------------------------------------------------------------
200
206
201 @pyqtSignature("")
207 @pyqtSignature("")
202 def on_txtElabel_editingFinished(self):
208 def on_txtElabel_editingFinished(self):
203 self.var_Elabel = str(self.txtElabel.text())
209 self.var_Elabel = str(self.txtElabel.text())
204
210
205 #----------------------------------------------------- Numero de copias ---------------------------------------------------------------
211 #----------------------------------------------------- Numero de copias ---------------------------------------------------------------
206 @pyqtSignature("")
212 @pyqtSignature("")
207 def on_txtCopys_editingFinished(self):
213 def on_txtCopys_editingFinished(self):
208 self.var_Copys = self.txtCopys.value()
214 self.var_Copys = self.txtCopys.value()
209
215
210 #----------------------------------------------------- Seleccion del rango de fechas ---------------------------------------------------------------
216 #----------------------------------------------------- Seleccion del rango de fechas ---------------------------------------------------------------
211
217
212 @pyqtSignature("int") #CLOSED
218 @pyqtSignature("int") #CLOSED
213 def on_lstStartDay_activated(self, index):
219 def on_lstStartDay_activated(self, index):
214 """
220 """
215 Cambia la lista de opciones en lstStopDay
221 Cambia la lista de opciones en lstStopDay
216 """
222 """
217 var_StopDay_index=self.lstStopDay.count() - self.lstStopDay.currentIndex()
223 var_StopDay_index=self.lstStopDay.count() - self.lstStopDay.currentIndex()
218 self.lstStopDay.clear()
224 self.lstStopDay.clear()
219
225
220 for i in self.var_list[index:]:
226 for i in self.var_list[index:]:
221 self.lstStopDay.addItem(i)
227 self.lstStopDay.addItem(i)
222
228
223 self.lstStopDay.setCurrentIndex(self.lstStopDay.count() - var_StopDay_index)
229 self.lstStopDay.setCurrentIndex(self.lstStopDay.count() - var_StopDay_index)
224
230
225 functions.get_sub_list(self)
231 functions.get_sub_list(self)
226
232
227
233
228 @pyqtSignature("int") #CLOSED
234 @pyqtSignature("int") #CLOSED
229 def on_lstStopDay_activated(self, index):
235 def on_lstStopDay_activated(self, index):
230 """
236 """
231 Cambia la lista de opciones en lstStartDay
237 Cambia la lista de opciones en lstStartDay
232 """
238 """
233 var_StartDay_index=self.lstStartDay.currentIndex()
239 var_StartDay_index=self.lstStartDay.currentIndex()
234 var_end_index = self.lstStopDay.count() - index
240 var_end_index = self.lstStopDay.count() - index
235 self.lstStartDay.clear()
241 self.lstStartDay.clear()
236
242
237 for i in self.var_list[:len(self.var_list) - var_end_index + 1]:
243 for i in self.var_list[:len(self.var_list) - var_end_index + 1]:
238 self.lstStartDay.addItem(i)
244 self.lstStartDay.addItem(i)
239
245
240 self.lstStartDay.setCurrentIndex(var_StartDay_index)
246 self.lstStartDay.setCurrentIndex(var_StartDay_index)
241
247
242 functions.get_sub_list(self)
248 functions.get_sub_list(self)
243
249
244
250
245 #----------------------------------------------------- Capacidad del dispositivo de grabacion ---------------------------------------------------------------
251 #----------------------------------------------------- Capacidad del dispositivo de grabacion ---------------------------------------------------------------
246
252
247 @pyqtSignature("")
253 @pyqtSignature("")
248 def on_txtDcapacity_editingFinished(self):
254 def on_txtDcapacity_editingFinished(self):
249 self.var_Dcapacity = self.txtDcapacity.value()
255 self.var_Dcapacity = self.txtDcapacity.value()
250
256
251
257
252 @pyqtSignature("int") #CLOSED
258 @pyqtSignature("int") #CLOSED
253 def on_lstDcapacity_activated(self, index):
259 def on_lstDcapacity_activated(self, index):
254 """
260 """
255 Permite elegir el tamaΓ±o del disco
261 Permite elegir el tamaΓ±o del disco
256 """
262 """
257 if index == 0:
263 if index == 0:
258 var_size=25.0
264 var_size=25.0
259 elif index == 1:
265 elif index == 1:
260 var_size=8.5
266 var_size=8.5
261 elif index == 2:
267 elif index == 2:
262 var_size=4.7
268 var_size=4.7
263 elif index == 3:
269 elif index == 3:
264 var_size=0.7
270 var_size=0.7
265
271
266 if index != 4:
272 if index != 4:
267 self.txtDcapacity.setValue(var_size*10**9/1024**2)
273 self.txtDcapacity.setValue(var_size*10**9/1024**2)
268 self.txtDcapacity.setReadOnly(True)
274 self.txtDcapacity.setReadOnly(True)
269 else:
275 else:
270 self.txtDcapacity.setValue(100.0)
276 self.txtDcapacity.setValue(100.0)
271 self.txtDcapacity.setReadOnly(False)
277 self.txtDcapacity.setReadOnly(False)
272
278
273 self.var_lstDcapacity = self.lstDcapacity.currentIndex()
279 self.var_lstDcapacity = self.lstDcapacity.currentIndex()
274 self.var_Dcapacity = self.txtDcapacity.value()
280 self.var_Dcapacity = self.txtDcapacity.value()
275
281
276 #----------------------------------------------------- Testeo de las unidades de grabacion ---------------------------------------------------------------
282 #----------------------------------------------------- Testeo de las unidades de grabacion ---------------------------------------------------------------
277
283
278 @pyqtSignature("")
284 @pyqtSignature("")
279 def on_btnTdevA_clicked(self):
285 def on_btnTdevA_clicked(self):
280 var_dev = str(self.txtDeviceA.text())
286 var_dev = str(self.txtDeviceA.text())
281 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
287 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
282 commands.getstatusoutput(var_cmd)
288 commands.getstatusoutput(var_cmd)
283
289
284 @pyqtSignature("")
290 @pyqtSignature("")
285 def on_btnTdevB_clicked(self):
291 def on_btnTdevB_clicked(self):
286 var_dev = str(self.txtDeviceB.text())
292 var_dev = str(self.txtDeviceB.text())
287 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
293 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
288 commands.getstatusoutput(var_cmd)
294 commands.getstatusoutput(var_cmd)
289
295
290 @pyqtSignature("")
296 @pyqtSignature("")
291 def on_btnTdevC_clicked(self):
297 def on_btnTdevC_clicked(self):
292 var_dev = str(self.txtDeviceC.text())
298 var_dev = str(self.txtDeviceC.text())
293 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
299 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
294 commands.getstatusoutput(var_cmd)
300 commands.getstatusoutput(var_cmd)
295
301
296 @pyqtSignature("")
302 @pyqtSignature("")
297 def on_btnTdevD_clicked(self):
303 def on_btnTdevD_clicked(self):
298 var_dev = str(self.txtDeviceD.text())
304 var_dev = str(self.txtDeviceD.text())
299 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
305 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
300 commands.getstatusoutput(var_cmd)
306 commands.getstatusoutput(var_cmd)
301
307
302
308
303 #==============================================================================
309 #==============================================================================
304 # Botones para la generacion de los archivos de configuracion
310 # Botones para la generacion de los archivos de configuracion
305 #==============================================================================
311 #==============================================================================
306
312
307 #----------------------------------------------------- Generacion de la configuracion usando los parametros ---------------------------------------------------------------
313 #----------------------------------------------------- Generacion de la configuracion usando los parametros ---------------------------------------------------------------
308
314
309 @pyqtSignature("")
315 @pyqtSignature("")
310 def on_btnGbkp_clicked(self):
316 def on_btnGbkp_clicked(self):
311 """
317 """
312 Generacion de archivos de configuracion usando los parametros
318 Generacion de archivos de configuracion usando los parametros
313 """
319 """
314
320
315 if functions.validate_parameters(self) == False:
321 if functions.validate_parameters(self) == False:
316 return
322 return
317
323
318 #Crea las carpetas en la ruta del proyecto y verifica que se crearon correctamente
324 #Crea las carpetas en la ruta del proyecto y verifica que se crearon correctamente
319 list_dirs=['gpath','iso','ppath', 'tmpdata']
325 list_dirs=['gpath','iso','ppath', 'tmpdata']
320 bool_make_dirs = functions.make_dirs(list_dirs, self)
326 bool_make_dirs = functions.make_dirs(list_dirs, self)
321 if bool_make_dirs == False:
327 if bool_make_dirs == False:
322 return
328 return
323
329
324 var_files_list = functions.list_files(self) #Se obtiene la lista de archivos a grabar
330 var_files_list = functions.list_files(self) #Se obtiene la lista de archivos a grabar
325
331
326 self.var_Discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat
332 self.var_Discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat
327
333
328 functions.make_files_print(self) # Se crean los archivos .print
334 functions.make_files_print(self) # Se crean los archivos .print
329
335
330 functions2.make_parameters_conf(self) # se crea el archivo parameters.conf
336 functions2.make_parameters_conf(self) # se crea el archivo parameters.conf
331
337
332 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
338 self.txtInfo.append("Total number of discs for recording: "+str(self.var_Discs * self.var_Copys))
333
339
334 #Se bloquean los parametros de configuracion
340 #Se bloquean los parametros de configuracion
335 functions2.enabled_items1(True, self)
341 functions2.enabled_items1(True, self)
336
342 self.var_disc_n = 1
343 self.var_copy_n = 1
344 self.bool_first_iso = True
345 self.var_burned_discs = 0 #numero de discos grabados
337
346
338
347
339 #----------------------------------------------------- Permite reiniciar la configuracion ---------------------------------------------------------------
348 #----------------------------------------------------- Permite reiniciar la configuracion ---------------------------------------------------------------
340
349
341 @pyqtSignature("")
350 @pyqtSignature("")
342 def on_btnRestart_clicked(self):
351 def on_btnRestart_clicked(self):
343 """
352 """
344 Permite que se puedan cambiar los parametros
353 Permite que se puedan cambiar los parametros
345 """
354 """
346 if os.path.isfile("parameters.conf"):
355 if os.path.isfile("parameters.conf"):
347 os.remove("parameters.conf")
356 os.remove("parameters.conf")
348 if os.path.isfile("burning.conf"):
357 if os.path.isfile("burning.conf"):
349 os.remove("burning.conf")
358 os.remove("burning.conf")
350
359
351 functions2.enabled_items1(False, self)
360 functions2.enabled_items1(False, self)
352 self.btnStartburn.setText("Start Burn")
361 self.btnStartburn.setText("Start Burn")
353
362
354
363
364
355 #==============================================================================
365 #==============================================================================
356 # Acciones de los procesos
366 # Acciones de los procesos
357 #==============================================================================
367 #==============================================================================
358
368
359 #------------------------------------------------ Funciones del proceso de creacion del iso ------------------------------------------------------
369 #------------------------------------------------ Funciones del proceso de creacion del iso ------------------------------------------------------
360
370
361 def readOuput_iso(self):
371 def readOuput_iso(self):
362 self.txtProgress.setText("stdout iso: " + QtCore.QString(self.process_iso.readAllStandardOutput()))
372 self.txtProgress.setText("stdout iso: " + QtCore.QString(self.process_iso.readAllStandardOutput()))
363
373
364 def readError_iso(self):
374 def readError_iso(self):
365 self.txtProgress.setText("stderr iso: " + QtCore.QString(self.process_iso.readAllStandardError()))
375 self.txtProgress.setText("stderr iso: " + QtCore.QString(self.process_iso.readAllStandardError()))
366
376
367 def finished_iso(self):
377 def finished_iso(self):
368 self.txtProgress.clear()
378 self.txtProgress.clear()
369
379
370 if not(self.bool_state_burning):
380 if not(self.bool_state_burning):
371 return
381 return
372
382
373 if self.process_iso.exitCode() == 0:
383 if self.process_iso.exitCode() == 0:
374 self.txtInfo.append("Iso file"+function.i2s(self.var_disc_n)+" created successfully \n")
384 self.txtInfo.append("------Iso file: "+functions.i2s(self.var_disc_n)+" created successfully")
375 self.var_step = 1
385 self.var_step = 1
376 self.function_burn()
386 self.function_burn()
377
387
378 else:
388 else:
379 self.txtInfo.append("Error creating iso file "+function.i2s(self.var_disc_n)
389 self.txtInfo.append("#####Error creating iso file "+function.i2s(self.var_disc_n)
380 +" , code "+QtCore.QString(self.process_iso.exitCode()))
390 +" , code "+QtCore.QString(self.process_iso.exitCode()))
381 self.txtInfo.append("Please check the data \n")
391 self.txtInfo.append("Please check the data")
382
392 self.txtInfo.append("FATAL ERROR")
383 #----------------------------------------------------- Funciones del proceso de grabado ---------------------------------------------------------------
393 #----------------------------------------------------- Funciones del proceso de grabado ---------------------------------------------------------------
384
394
385 def readOuput_burn(self):
395 def readOuput_burn(self):
386 self.txtProgress.setText("stdout burn: " + QtCore.QString(self.process_burn.readAllStandardOutput()))
396 self.txtProgress.setText("stdout burn: " + QtCore.QString(self.process_burn.readAllStandardOutput()))
387
397
388 def readError_burn(self):
398 def readError_burn(self):
389 self.txtProgress.setText("stderr burn: " + QtCore.QString(self.process_burn.readAllStandardError()))
399 self.txtProgress.setText("stderr burn: " + QtCore.QString(self.process_burn.readAllStandardError()))
390
400
391 def finished_burn(self):
401 def finished_burn(self):
392 self.txtProgress.clear()
402 self.txtProgress.clear()
393
403
404 #Si se paro el proceso manualmente se termina
394 if not(self.bool_state_burning):
405 if not(self.bool_state_burning):
395 return
406 return
407
408 functions2.make_burning_conf(self) # Si el proceso no ha sido detenido manualmente
409 #crea el archivo burning.conf para el seguimiento de los discos grabados
396
410
397 if self.process_burn.exitCode() == 0:
411 if self.process_burn.exitCode() == 0:
398 self.txtInfo.append("Complete recording, disc: "+self.var_disc_n+" copy: "+self.var_copy_n)
412 self.txtInfo.append("-----Complete recording, disc: "+str(self.var_disc_n)+" copy: "+str(self.var_copy_n))
399 functions2.update_message(1, "COMPLETED", self)
413 functions2.update_message(1, "COMPLETED", self)
400 self.var_step = 2
414 self.var_step = 2
401 self.function_check()
415 self.function_check()
402
416
403 else:
417 else:
404 self.txtInfo.append("Error recording, disc: "+function.i2s(self.var_disc_n)+" copy: "
418 self.txtInfo.append("#######Error recording, disc: "+function.i2s(self.var_disc_n)+" copy: "
405 +function.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_burn.exitCode()))
419 +function.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_burn.exitCode()))
406 functions2.update_message(1, "ERROR", self)
420 functions2.update_message(1, "ERROR", self)
407
421
408 functions.next_var_disc(self, True)
422 functions.is_last_disc_and_copy(self)
409 if self.var_step == 0:
410 self.function_iso()
411 elif self.var_step == 1:
412 self.function_burn()
413
423
414
424
415 #----------------------------------------------------- Funciones del proceso de verificacion ---------------------------------------------------------------
425 #----------------------------------------------------- Funciones del proceso de verificacion ---------------------------------------------------------------
416
426
417 def readOuput_check(self):
427 def readOuput_check(self):
418 self.txtProgress.setText("stdout check: " + QtCore.QString(self.process_check.readAllStandardOutput()))
428 self.txtProgress.setText("stdout check: " + QtCore.QString(self.process_check.readAllStandardOutput()))
419
429
420 def readError_check(self):
430 def readError_check(self):
421 self.txtProgress.setText("stderr check: " + QtCore.QString(self.process_check.readAllStandardError()))
431 self.txtProgress.setText("stderr check: " + QtCore.QString(self.process_check.readAllStandardError()))
422
432
423 def finished_check(self):
433 def finished_check(self):
424 self.txtProgress.clear()
434 self.txtProgress.clear()
425
435
426 if not(self.bool_state_burning):
436 if not(self.bool_state_burning):
427 return
437 return
428
438
429 if self.process_check.exitCode() == 0:
439 if self.process_check.exitCode() == 0:
430 self.txtInfo.append("Complete checking, disc: "+self.var_disc_n+" copy: "+self.var_copy_n)
440 self.txtInfo.append("--------Complete checking, disc: "+str(self.var_disc_n)+" copy: "+str(self.var_copy_n))
431 functions2.update_message(2, "CHECKED", self)
441 functions2.update_message(2, "CHECKED", self)
432
442
433 else:
443 else:
434 self.txtInfo.append("Error checking, disc: "+function.i2s(self.var_disc_n)+" copy: "
444 self.txtInfo.append("#######Error checking, disc: "+function.i2s(self.var_disc_n)+" copy: "
435 +function.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_check.exitCode()))
445 +function.i2s(self.var_copy_n)+", code "+QtCore.QString(self.process_check.exitCode()))
436 functions2.update_message(2, "ERROR", self)
446 functions2.update_message(2, "ERROR", self)
437
447
438 self.function_check()
448 functions.is_last_disc_and_copy(self)
439
449
440
450
441
451
442 #==============================================================================
452 #==============================================================================
443 # Botones para el proceso de grabacion
453 # Botones para el proceso de grabacion
444 #==============================================================================
454 #==============================================================================
445
455
446 #----------------------------------------------------- Iniciar proceso de grabacion ---------------------------------------------------------------
456 #----------------------------------------------------- Iniciar proceso de grabacion ---------------------------------------------------------------
447
457
448 @pyqtSignature("")
458 @pyqtSignature("")
449 def on_btnStartburn_clicked(self):
459 def on_btnStartburn_clicked(self):
450 """
460 """
451 Se inicia el proceso de grabacion
461 Se inicia el proceso de grabacion
452 """
462 """
453 self.txtInfo.append("BUTTON: on_btnStartburn_clicked")
454
455 #Verifica que exista algun dispositivo de grabacion seleccionado
463 #Verifica que exista algun dispositivo de grabacion seleccionado
456 if not(functions2.selected_devices(self)):
464 if not(functions2.selected_devices(self)):
457 self.txtInfo.append("There is no recording device selected")
465 self.txtInfo.append("There is no recording device selected")
458 return
466 return
459
467
460 # #Lista los dispositivos de grabacion a usar
468 # #Lista los dispositivos de grabacion a usar
461 # for dev in self.var_devices:
469 # for dev in self.var_devices:
462 # self.txtInfo.append("recording device :"+dev)
470 # self.txtInfo.append("recording device :"+dev)
463
471
464 #Si se ingresaron los DVDs en blanco
472 self.bool_state_burning = True
465 if self.blank_discs == True:
473 functions2.enabled_items2(True, self)
466 self.btnStartburn.setEnabled(False)
474
467 self.burning()
475 if self.bool_first_iso == True:
476 self.txtInfo.append("BUTTON: on_btnStartburn_clicked")
477 self.var_step = 4
478 self.function_eject()
468 return
479 return
469
480
470 #Si se cargo los parametros de burning.conf
481 if self.var_step == 0:
471 if self.var_burned_discs != 0:
482 self.function_iso()
472 self.txtInfo.append("BURNED DISC: "+str(self.var_burned_discs))
473 self.var_step = 0
474 self.bool_state_burning = True
475 self.blank_discs = False
476 functions2.enabled_items2(True, self)
477 self.burning()
478 return
483 return
479
484
480 #Asigna las variables con los valores iniciales
485 if self.var_step == 1:
481 self.var_disc_n = 1 # numero de disco actual para grabacion
486 self.function_burn()
482 self.var_copy_n = 1
487 return
483 self.var_burned_discs = 0 #numero de discos grabados
488
484 self.var_step = 0
485 self.bool_state_burning = True
486 self.blank_discs = False
487 functions2.enabled_items2(True, self)
488 self.burning()
489
490 #----------------------------------------------------- Funcion para el grabado ---------------------------------------------------------------
489 #----------------------------------------------------- Funcion para el grabado ---------------------------------------------------------------
491
490
492 def burning(self):
491 def function_iso(self):
493
494 var_Rpath_ppath=self.var_Rpath+"/ppath"
495 var_Rpath_iso=self.var_Rpath+"/iso"
496
497 #Si ya se grabaron todas las copias del disco
498 if self.var_copy_n > self.var_Copys:
499 #borra la imagen.iso del numero de disco anterior
500 file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc_n)+".iso"
501 # self.txtInfo.append("Deleting iso file")
502 # os.remove(file_iso)
503 self.var_copy_n = 1
504 self.var_disc_n += 1 # aumenta numero de disco actual para grabacion
505 self.var_step = 0
506
507 #Si ya se grabaron todos los discos
508 if self.var_disc_n > self.var_Discs:
509 self.bool_state_burning = False
510 self.txtInfo.append("Recording process is complete")
511 functions2.eject_devices(self) # Expulsa las bandejas de los dispostivos de grabacion
512 self.on_btnRestart_clicked()
513 self.btnStopburn.setEnabled(False)
514 return
515
516 # self.txtInfo.append("\n"+str(self.var_disc_n)+" "+str(self.var_copy_n)+" "+str(self.var_step))
517
518 #Creacion del archivo.iso para la grabacion
492 #Creacion del archivo.iso para la grabacion
519 if self.var_step == 0:
493 if self.var_step == 0:
520 self.txtInfo.append("########## Disc number: "+str(self.var_disc_n)+"##########")
494 self.txtInfo.append("########## Disc number: "+str(self.var_disc_n)+"##########")
521 self.txtInfo.append("---------Creating iso file number: "+str(self.var_disc_n))
495 self.txtInfo.append("------Creating iso file number: "+str(self.var_disc_n))
522 var_cmd = functions.cmd_iso(self)
496
523
497 if self.var_real == True:
498 var_cmd = functions.cmd_iso(self)
499 else:
500 self.txtInfo.append('**function_iso')
501 var_cmd="echo 'function_iso'"
502
503 self.process_iso.start(var_cmd)
504
505 def function_burn(self):
524 #Grabacion de los DVDs
506 #Grabacion de los DVDs
525 elif self.var_step == 1:
507 if self.var_step == 1:
526
508 self.txtInfo.append("------Recording disc: "+str(self.var_copy_n)+", copy:"+str(self.var_copy_n))
527 functions2.make_burning_conf(self)
528
529 var_index = ( ( (self.var_disc_n - 1) * self.var_Copys) + (self.var_copy_n - 1) - self.var_burned_discs ) % len(self.var_devices)
530 # self.txtInfo.append("INDEX: "+str(var_index))
531 if var_index == 0 and self.blank_discs == False:
532 functions2.eject_devices(self) # Expulsa las bandejas de los dispostivos de grabacion
533 self.blank_discs = True
534 self.btnStartburn.setText("Continue")
535 self.btnStartburn.setEnabled(True)
536 return
537
538 self.blank_discs = False
539
540 self.txtInfo.append("recording disc:"+str(self.var_copy_n)+", copy:"+str(self.var_copy_n))
541 functions2.update_message(1, "BURNING", self)
509 functions2.update_message(1, "BURNING", self)
542
510
543 var_dev_tmp = self.var_devices[var_index]
511 if self.var_real == True:
544 file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc_n)+".iso"
512 var_cmd = functions.cmd_burn(self)
545 var_cmd = "wodim -v dev="+var_dev_tmp+" speed=16 "+ file_iso
513 else:
546
514 self.txtInfo.append('**function_burn')
547 self.var_process.start('echo "comando"')
515 var_cmd="echo 'function_burn'"
548 # self.txtInfo.append("CMD: "+var_cmd)
516
549
517 self.process_burn.start(var_cmd)
550 # self.txtInfo.append("creando iso")
518
551 # self.var_process.start(var_cmd)
519 def function_check(self):
520 #Verificacion de los discos
521 if self.var_step == 2:
522 self.txtInfo.append("-----------checking disc:"+str(self.var_copy_n)+", copy:"+str(self.var_copy_n))
523 functions2.update_message(2, "CHECKING", self)
524
525 if self.var_real == True:
526 var_cmd = functions.cmd_check(self)
527 else:
528 self.txtInfo.append('**function_check')
529 var_cmd="echo 'function_check'"
530
531 self.process_check.start(var_cmd)
532
533 #OK
534 def function_eject(self):
535 self.txtInfo.append("Ejecting recording devices")
536 self.txtInfo.append("Please insert blank discs")
537
538 if self.var_real == True:
539 functions2.eject_devices(self) # Expulsa las bandejas de los dispostivos de grabacion
540 else:
541 self.txtInfo.append("**functions2.eject_devices")
542
543 self.btnStartburn.setText("Continue")
544 self.btnStartburn.setEnabled(True)
545
546 if self.bool_first_iso == True:
547 self.bool_first_iso = False
548 self.var_step = 0
549
550 elif self.var_copy_n == 1:
551 self.var_step = 0
552
553 else:
554 self.var_step = 1
555
556 def function_final(self):
557 self.txtInfo.append("Recording process is complete")
558
552
559
553
560
554 #----------------------------------------------------- Detener proceso de grabacion ---------------------------------------------------------------
561 #----------------------------------------------------- Detener proceso de grabacion ---------------------------------------------------------------
555
562
556 @pyqtSignature("")
563 @pyqtSignature("")
557 def on_btnStopburn_clicked(self):
564 def on_btnStopburn_clicked(self):
558 """
565 """
559 Slot documentation goes here.
566 Slot documentation goes here.
560 """
567 """
561 self.bool_state_burning = False
568 self.bool_state_burning = False
562
569
563 if self.var_step == 0:
570 if self.var_step == 0:
564 self.process_iso.terminate() #Termina el proceso, si puede
571 self.process_iso.terminate() #Termina el proceso, si puede
565 # self.process_iso.kill() #Mata el proceso, no es la forma adecuada, solo usar si terminate() no funciona
572 # self.process_iso.kill() #Mata el proceso, no es la forma adecuada, solo usar si terminate() no funciona
566 elif self.var_step == 1:
573 elif self.var_step == 1:
567 self.process_burn.terminate()
574 self.process_burn.terminate()
568 elif self.var_step == 2:
575 elif self.var_step == 2:
569 self.process_check.terminate()
576 self.process_check.terminate()
570
577
571 self.txtInfo.append("Stopped recording")
578 self.txtInfo.append("Stopped recording")
572 functions2.enabled_items2(False, self)
579 functions2.enabled_items2(False, self)
580 self.bool_first_iso = True
581
573
582
574
583
575 #==============================================================================
584 #==============================================================================
576 # Proceso verificacion manual
585 # Proceso verificacion manual
577 #==============================================================================
586 #==============================================================================
578
587
579
588
580 #----------------------------------------------------- Proceso de verificaion manual ---------------------------------------------------------------
589 #----------------------------------------------------- Proceso de verificaion manual ---------------------------------------------------------------
581
590
582
591
583 @pyqtSignature("")
592 @pyqtSignature("")
584 def on_btnTDpath_clicked(self):
593 def on_btnTDpath_clicked(self):
585 """
594 """
586 Slot documentation goes here.
595 Slot documentation goes here.
587 """
596 """
588 self.var_TDpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
597 self.var_TDpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
589 self.txtTDpath.setText(self.var_TDpath)
598 self.txtTDpath.setText(self.var_TDpath)
590 self.statusTDpath = functions.dir_exists(self.var_TDpath, self)
599 self.statusTDpath = functions.dir_exists(self.var_TDpath, self)
591
600
592
601
593 @pyqtSignature("")
602 @pyqtSignature("")
594 def on_btnCHstart_clicked(self):
603 def on_btnCHstart_clicked(self):
595 """
604 """
596 Slot documentation goes here.
605 Slot documentation goes here.
597 """
606 """
598 pass
607 pass
@@ -1,1463 +1,1463
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>621</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>
1005 </property>
1006 </widget>
1006 </widget>
1007 </item>
1007 </item>
1008 <item>
1008 <item>
1009 <widget class="QPushButton" name="btnTDpath">
1009 <widget class="QPushButton" name="btnTDpath">
1010 <property name="enabled">
1010 <property name="enabled">
1011 <bool>false</bool>
1011 <bool>false</bool>
1012 </property>
1012 </property>
1013 <property name="text">
1013 <property name="text">
1014 <string>Temp Data Path</string>
1014 <string>Temp Data Path</string>
1015 </property>
1015 </property>
1016 </widget>
1016 </widget>
1017 </item>
1017 </item>
1018 </layout>
1018 </layout>
1019 </item>
1019 </item>
1020 <item>
1020 <item>
1021 <layout class="QHBoxLayout" name="horizontalLayout_19">
1021 <layout class="QHBoxLayout" name="horizontalLayout_19">
1022 <item>
1022 <item>
1023 <layout class="QVBoxLayout" name="verticalLayout_26">
1023 <layout class="QVBoxLayout" name="verticalLayout_26">
1024 <item>
1024 <item>
1025 <spacer name="horizontalSpacer_10">
1025 <spacer name="horizontalSpacer_10">
1026 <property name="orientation">
1026 <property name="orientation">
1027 <enum>Qt::Horizontal</enum>
1027 <enum>Qt::Horizontal</enum>
1028 </property>
1028 </property>
1029 <property name="sizeType">
1029 <property name="sizeType">
1030 <enum>QSizePolicy::Minimum</enum>
1030 <enum>QSizePolicy::Minimum</enum>
1031 </property>
1031 </property>
1032 <property name="sizeHint" stdset="0">
1032 <property name="sizeHint" stdset="0">
1033 <size>
1033 <size>
1034 <width>40</width>
1034 <width>40</width>
1035 <height>20</height>
1035 <height>20</height>
1036 </size>
1036 </size>
1037 </property>
1037 </property>
1038 </spacer>
1038 </spacer>
1039 </item>
1039 </item>
1040 <item>
1040 <item>
1041 <widget class="QLabel" name="lblSTATUS_2">
1041 <widget class="QLabel" name="lblSTATUS_2">
1042 <property name="sizePolicy">
1042 <property name="sizePolicy">
1043 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
1043 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
1044 <horstretch>0</horstretch>
1044 <horstretch>0</horstretch>
1045 <verstretch>0</verstretch>
1045 <verstretch>0</verstretch>
1046 </sizepolicy>
1046 </sizepolicy>
1047 </property>
1047 </property>
1048 <property name="text">
1048 <property name="text">
1049 <string>STATUS</string>
1049 <string>STATUS</string>
1050 </property>
1050 </property>
1051 </widget>
1051 </widget>
1052 </item>
1052 </item>
1053 </layout>
1053 </layout>
1054 </item>
1054 </item>
1055 <item>
1055 <item>
1056 <layout class="QVBoxLayout" name="verticalLayout_27">
1056 <layout class="QVBoxLayout" name="verticalLayout_27">
1057 <item>
1057 <item>
1058 <widget class="QLabel" name="lblDevA_2">
1058 <widget class="QLabel" name="lblDevA_2">
1059 <property name="text">
1059 <property name="text">
1060 <string>DEV A</string>
1060 <string>DEV A</string>
1061 </property>
1061 </property>
1062 <property name="alignment">
1062 <property name="alignment">
1063 <set>Qt::AlignCenter</set>
1063 <set>Qt::AlignCenter</set>
1064 </property>
1064 </property>
1065 </widget>
1065 </widget>
1066 </item>
1066 </item>
1067 <item>
1067 <item>
1068 <widget class="QLineEdit" name="txtCHstatusA">
1068 <widget class="QLineEdit" name="txtCHstatusA">
1069 <property name="readOnly">
1069 <property name="readOnly">
1070 <bool>true</bool>
1070 <bool>true</bool>
1071 </property>
1071 </property>
1072 </widget>
1072 </widget>
1073 </item>
1073 </item>
1074 </layout>
1074 </layout>
1075 </item>
1075 </item>
1076 <item>
1076 <item>
1077 <layout class="QVBoxLayout" name="verticalLayout_28">
1077 <layout class="QVBoxLayout" name="verticalLayout_28">
1078 <item>
1078 <item>
1079 <widget class="QLabel" name="lblDevB_2">
1079 <widget class="QLabel" name="lblDevB_2">
1080 <property name="text">
1080 <property name="text">
1081 <string>DEV B</string>
1081 <string>DEV B</string>
1082 </property>
1082 </property>
1083 <property name="alignment">
1083 <property name="alignment">
1084 <set>Qt::AlignCenter</set>
1084 <set>Qt::AlignCenter</set>
1085 </property>
1085 </property>
1086 </widget>
1086 </widget>
1087 </item>
1087 </item>
1088 <item>
1088 <item>
1089 <widget class="QLineEdit" name="txtCHstatusB">
1089 <widget class="QLineEdit" name="txtCHstatusB">
1090 <property name="readOnly">
1090 <property name="readOnly">
1091 <bool>true</bool>
1091 <bool>true</bool>
1092 </property>
1092 </property>
1093 </widget>
1093 </widget>
1094 </item>
1094 </item>
1095 </layout>
1095 </layout>
1096 </item>
1096 </item>
1097 <item>
1097 <item>
1098 <layout class="QVBoxLayout" name="verticalLayout_29">
1098 <layout class="QVBoxLayout" name="verticalLayout_29">
1099 <item>
1099 <item>
1100 <widget class="QLabel" name="lblDevC_2">
1100 <widget class="QLabel" name="lblDevC_2">
1101 <property name="text">
1101 <property name="text">
1102 <string>DEV C</string>
1102 <string>DEV C</string>
1103 </property>
1103 </property>
1104 <property name="alignment">
1104 <property name="alignment">
1105 <set>Qt::AlignCenter</set>
1105 <set>Qt::AlignCenter</set>
1106 </property>
1106 </property>
1107 </widget>
1107 </widget>
1108 </item>
1108 </item>
1109 <item>
1109 <item>
1110 <widget class="QLineEdit" name="txtCHstatusC">
1110 <widget class="QLineEdit" name="txtCHstatusC">
1111 <property name="readOnly">
1111 <property name="readOnly">
1112 <bool>true</bool>
1112 <bool>true</bool>
1113 </property>
1113 </property>
1114 </widget>
1114 </widget>
1115 </item>
1115 </item>
1116 </layout>
1116 </layout>
1117 </item>
1117 </item>
1118 <item>
1118 <item>
1119 <layout class="QVBoxLayout" name="verticalLayout_30">
1119 <layout class="QVBoxLayout" name="verticalLayout_30">
1120 <item>
1120 <item>
1121 <widget class="QLabel" name="lblDevD_2">
1121 <widget class="QLabel" name="lblDevD_2">
1122 <property name="text">
1122 <property name="text">
1123 <string>DEV D</string>
1123 <string>DEV D</string>
1124 </property>
1124 </property>
1125 <property name="alignment">
1125 <property name="alignment">
1126 <set>Qt::AlignCenter</set>
1126 <set>Qt::AlignCenter</set>
1127 </property>
1127 </property>
1128 </widget>
1128 </widget>
1129 </item>
1129 </item>
1130 <item>
1130 <item>
1131 <widget class="QLineEdit" name="txtCHstatusD">
1131 <widget class="QLineEdit" name="txtCHstatusD">
1132 <property name="readOnly">
1132 <property name="readOnly">
1133 <bool>true</bool>
1133 <bool>true</bool>
1134 </property>
1134 </property>
1135 </widget>
1135 </widget>
1136 </item>
1136 </item>
1137 </layout>
1137 </layout>
1138 </item>
1138 </item>
1139 </layout>
1139 </layout>
1140 </item>
1140 </item>
1141 <item>
1141 <item>
1142 <layout class="QHBoxLayout" name="horizontalLayout_20">
1142 <layout class="QHBoxLayout" name="horizontalLayout_20">
1143 <item>
1143 <item>
1144 <spacer name="horizontalSpacer_12">
1144 <spacer name="horizontalSpacer_12">
1145 <property name="orientation">
1145 <property name="orientation">
1146 <enum>Qt::Horizontal</enum>
1146 <enum>Qt::Horizontal</enum>
1147 </property>
1147 </property>
1148 <property name="sizeType">
1148 <property name="sizeType">
1149 <enum>QSizePolicy::Minimum</enum>
1149 <enum>QSizePolicy::Minimum</enum>
1150 </property>
1150 </property>
1151 <property name="sizeHint" stdset="0">
1151 <property name="sizeHint" stdset="0">
1152 <size>
1152 <size>
1153 <width>50</width>
1153 <width>50</width>
1154 <height>20</height>
1154 <height>20</height>
1155 </size>
1155 </size>
1156 </property>
1156 </property>
1157 </spacer>
1157 </spacer>
1158 </item>
1158 </item>
1159 <item>
1159 <item>
1160 <widget class="QCheckBox" name="chkCheck">
1160 <widget class="QCheckBox" name="chkCheck">
1161 <property name="enabled">
1161 <property name="enabled">
1162 <bool>true</bool>
1162 <bool>true</bool>
1163 </property>
1163 </property>
1164 <property name="text">
1164 <property name="text">
1165 <string>MANUAL</string>
1165 <string>MANUAL</string>
1166 </property>
1166 </property>
1167 </widget>
1167 </widget>
1168 </item>
1168 </item>
1169 <item>
1169 <item>
1170 <spacer name="horizontalSpacer_15">
1170 <spacer name="horizontalSpacer_15">
1171 <property name="orientation">
1171 <property name="orientation">
1172 <enum>Qt::Horizontal</enum>
1172 <enum>Qt::Horizontal</enum>
1173 </property>
1173 </property>
1174 <property name="sizeHint" stdset="0">
1174 <property name="sizeHint" stdset="0">
1175 <size>
1175 <size>
1176 <width>40</width>
1176 <width>40</width>
1177 <height>20</height>
1177 <height>20</height>
1178 </size>
1178 </size>
1179 </property>
1179 </property>
1180 </spacer>
1180 </spacer>
1181 </item>
1181 </item>
1182 <item>
1182 <item>
1183 <widget class="QPushButton" name="btnCHstart">
1183 <widget class="QPushButton" name="btnCHstart">
1184 <property name="enabled">
1184 <property name="enabled">
1185 <bool>false</bool>
1185 <bool>false</bool>
1186 </property>
1186 </property>
1187 <property name="text">
1187 <property name="text">
1188 <string>START</string>
1188 <string>START</string>
1189 </property>
1189 </property>
1190 </widget>
1190 </widget>
1191 </item>
1191 </item>
1192 </layout>
1192 </layout>
1193 </item>
1193 </item>
1194 </layout>
1194 </layout>
1195 </widget>
1195 </widget>
1196 </widget>
1196 </widget>
1197 </item>
1197 </item>
1198 <item>
1198 <item>
1199 <widget class="QTextEdit" name="txtInfo">
1199 <widget class="QTextEdit" name="txtInfo">
1200 <property name="readOnly">
1200 <property name="readOnly">
1201 <bool>true</bool>
1201 <bool>true</bool>
1202 </property>
1202 </property>
1203 </widget>
1203 </widget>
1204 </item>
1204 </item>
1205 <item>
1205 <item>
1206 <widget class="QLineEdit" name="txtProgress">
1206 <widget class="QLineEdit" name="txtProgress">
1207 <property name="sizePolicy">
1207 <property name="sizePolicy">
1208 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
1208 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
1209 <horstretch>0</horstretch>
1209 <horstretch>0</horstretch>
1210 <verstretch>0</verstretch>
1210 <verstretch>0</verstretch>
1211 </sizepolicy>
1211 </sizepolicy>
1212 </property>
1212 </property>
1213 </widget>
1213 </widget>
1214 </item>
1214 </item>
1215 <item>
1215 <item>
1216 <layout class="QHBoxLayout" name="horizontalLayout_2">
1216 <layout class="QHBoxLayout" name="horizontalLayout_2">
1217 <property name="sizeConstraint">
1217 <property name="sizeConstraint">
1218 <enum>QLayout::SetDefaultConstraint</enum>
1218 <enum>QLayout::SetDefaultConstraint</enum>
1219 </property>
1219 </property>
1220 <item>
1220 <item>
1221 <widget class="QPushButton" name="btnGbkp">
1221 <widget class="QPushButton" name="btnGbkp">
1222 <property name="enabled">
1222 <property name="enabled">
1223 <bool>false</bool>
1223 <bool>false</bool>
1224 </property>
1224 </property>
1225 <property name="text">
1225 <property name="text">
1226 <string>Generate Bkp</string>
1226 <string>Generate Bkp</string>
1227 </property>
1227 </property>
1228 </widget>
1228 </widget>
1229 </item>
1229 </item>
1230 <item>
1230 <item>
1231 <widget class="QPushButton" name="btnRestart">
1231 <widget class="QPushButton" name="btnRestart">
1232 <property name="enabled">
1232 <property name="enabled">
1233 <bool>false</bool>
1233 <bool>false</bool>
1234 </property>
1234 </property>
1235 <property name="text">
1235 <property name="text">
1236 <string>Restart</string>
1236 <string>Restart</string>
1237 </property>
1237 </property>
1238 </widget>
1238 </widget>
1239 </item>
1239 </item>
1240 <item>
1240 <item>
1241 <widget class="QPushButton" name="btnStartburn">
1241 <widget class="QPushButton" name="btnStartburn">
1242 <property name="enabled">
1242 <property name="enabled">
1243 <bool>false</bool>
1243 <bool>false</bool>
1244 </property>
1244 </property>
1245 <property name="text">
1245 <property name="text">
1246 <string>Start Burn</string>
1246 <string>Start Burn</string>
1247 </property>
1247 </property>
1248 </widget>
1248 </widget>
1249 </item>
1249 </item>
1250 <item>
1250 <item>
1251 <widget class="QPushButton" name="btnStopburn">
1251 <widget class="QPushButton" name="btnStopburn">
1252 <property name="enabled">
1252 <property name="enabled">
1253 <bool>false</bool>
1253 <bool>false</bool>
1254 </property>
1254 </property>
1255 <property name="text">
1255 <property name="text">
1256 <string>Stop Burn</string>
1256 <string>Stop Burn</string>
1257 </property>
1257 </property>
1258 </widget>
1258 </widget>
1259 </item>
1259 </item>
1260 </layout>
1260 </layout>
1261 </item>
1261 </item>
1262 </layout>
1262 </layout>
1263 </widget>
1263 </widget>
1264 <widget class="QMenuBar" name="menubar">
1264 <widget class="QMenuBar" name="menubar">
1265 <property name="geometry">
1265 <property name="geometry">
1266 <rect>
1266 <rect>
1267 <x>0</x>
1267 <x>0</x>
1268 <y>0</y>
1268 <y>0</y>
1269 <width>621</width>
1269 <width>824</width>
1270 <height>21</height>
1270 <height>25</height>
1271 </rect>
1271 </rect>
1272 </property>
1272 </property>
1273 <widget class="QMenu" name="menuFile">
1273 <widget class="QMenu" name="menuFile">
1274 <property name="title">
1274 <property name="title">
1275 <string>File</string>
1275 <string>File</string>
1276 </property>
1276 </property>
1277 <addaction name="actionQuit"/>
1277 <addaction name="actionQuit"/>
1278 </widget>
1278 </widget>
1279 <widget class="QMenu" name="menuHelp">
1279 <widget class="QMenu" name="menuHelp">
1280 <property name="title">
1280 <property name="title">
1281 <string>Help</string>
1281 <string>Help</string>
1282 </property>
1282 </property>
1283 <addaction name="actionAbout"/>
1283 <addaction name="actionAbout"/>
1284 </widget>
1284 </widget>
1285 <widget class="QMenu" name="menuParameters">
1285 <widget class="QMenu" name="menuParameters">
1286 <property name="title">
1286 <property name="title">
1287 <string>Parameters</string>
1287 <string>Parameters</string>
1288 </property>
1288 </property>
1289 <addaction name="actionChange_Parameters"/>
1289 <addaction name="actionChange_Parameters"/>
1290 </widget>
1290 </widget>
1291 <addaction name="menuFile"/>
1291 <addaction name="menuFile"/>
1292 <addaction name="menuParameters"/>
1292 <addaction name="menuParameters"/>
1293 <addaction name="menuHelp"/>
1293 <addaction name="menuHelp"/>
1294 </widget>
1294 </widget>
1295 <widget class="QStatusBar" name="statusbar"/>
1295 <widget class="QStatusBar" name="statusbar"/>
1296 <action name="actionChange_Parameters">
1296 <action name="actionChange_Parameters">
1297 <property name="enabled">
1297 <property name="enabled">
1298 <bool>false</bool>
1298 <bool>false</bool>
1299 </property>
1299 </property>
1300 <property name="text">
1300 <property name="text">
1301 <string>Change Parameters</string>
1301 <string>Change Parameters</string>
1302 </property>
1302 </property>
1303 </action>
1303 </action>
1304 <action name="actionQuit">
1304 <action name="actionQuit">
1305 <property name="text">
1305 <property name="text">
1306 <string>Quit</string>
1306 <string>Quit</string>
1307 </property>
1307 </property>
1308 </action>
1308 </action>
1309 <action name="actionAbout">
1309 <action name="actionAbout">
1310 <property name="text">
1310 <property name="text">
1311 <string>About</string>
1311 <string>About</string>
1312 </property>
1312 </property>
1313 </action>
1313 </action>
1314 </widget>
1314 </widget>
1315 <tabstops>
1315 <tabstops>
1316 <tabstop>txtDpath</tabstop>
1316 <tabstop>txtDpath</tabstop>
1317 <tabstop>btnDpath</tabstop>
1317 <tabstop>btnDpath</tabstop>
1318 <tabstop>txtRpath</tabstop>
1318 <tabstop>txtRpath</tabstop>
1319 <tabstop>btnRpath</tabstop>
1319 <tabstop>btnRpath</tabstop>
1320 <tabstop>lstDtype</tabstop>
1320 <tabstop>lstDtype</tabstop>
1321 <tabstop>txtDtype</tabstop>
1321 <tabstop>txtDtype</tabstop>
1322 <tabstop>txtElabel</tabstop>
1322 <tabstop>txtElabel</tabstop>
1323 <tabstop>lstStartDay</tabstop>
1323 <tabstop>lstStartDay</tabstop>
1324 <tabstop>lstStopDay</tabstop>
1324 <tabstop>lstStopDay</tabstop>
1325 <tabstop>lstDcapacity</tabstop>
1325 <tabstop>lstDcapacity</tabstop>
1326 <tabstop>tabWidget</tabstop>
1326 <tabstop>tabWidget</tabstop>
1327 <tabstop>btnGbkp</tabstop>
1327 <tabstop>btnGbkp</tabstop>
1328 <tabstop>btnRestart</tabstop>
1328 <tabstop>btnRestart</tabstop>
1329 <tabstop>btnStartburn</tabstop>
1329 <tabstop>btnStartburn</tabstop>
1330 <tabstop>btnStopburn</tabstop>
1330 <tabstop>btnStopburn</tabstop>
1331 </tabstops>
1331 </tabstops>
1332 <resources/>
1332 <resources/>
1333 <connections>
1333 <connections>
1334 <connection>
1334 <connection>
1335 <sender>actionQuit</sender>
1335 <sender>actionQuit</sender>
1336 <signal>triggered()</signal>
1336 <signal>triggered()</signal>
1337 <receiver>MainWindow</receiver>
1337 <receiver>MainWindow</receiver>
1338 <slot>close()</slot>
1338 <slot>close()</slot>
1339 <hints>
1339 <hints>
1340 <hint type="sourcelabel">
1340 <hint type="sourcelabel">
1341 <x>-1</x>
1341 <x>-1</x>
1342 <y>-1</y>
1342 <y>-1</y>
1343 </hint>
1343 </hint>
1344 <hint type="destinationlabel">
1344 <hint type="destinationlabel">
1345 <x>306</x>
1345 <x>306</x>
1346 <y>358</y>
1346 <y>358</y>
1347 </hint>
1347 </hint>
1348 </hints>
1348 </hints>
1349 </connection>
1349 </connection>
1350 <connection>
1350 <connection>
1351 <sender>chkCheck</sender>
1351 <sender>chkCheck</sender>
1352 <signal>toggled(bool)</signal>
1352 <signal>toggled(bool)</signal>
1353 <receiver>txtTDpath</receiver>
1353 <receiver>txtTDpath</receiver>
1354 <slot>setEnabled(bool)</slot>
1354 <slot>setEnabled(bool)</slot>
1355 <hints>
1355 <hints>
1356 <hint type="sourcelabel">
1356 <hint type="sourcelabel">
1357 <x>160</x>
1357 <x>160</x>
1358 <y>378</y>
1358 <y>378</y>
1359 </hint>
1359 </hint>
1360 <hint type="destinationlabel">
1360 <hint type="destinationlabel">
1361 <x>231</x>
1361 <x>231</x>
1362 <y>306</y>
1362 <y>306</y>
1363 </hint>
1363 </hint>
1364 </hints>
1364 </hints>
1365 </connection>
1365 </connection>
1366 <connection>
1366 <connection>
1367 <sender>chkCheck</sender>
1367 <sender>chkCheck</sender>
1368 <signal>toggled(bool)</signal>
1368 <signal>toggled(bool)</signal>
1369 <receiver>btnTDpath</receiver>
1369 <receiver>btnTDpath</receiver>
1370 <slot>setEnabled(bool)</slot>
1370 <slot>setEnabled(bool)</slot>
1371 <hints>
1371 <hints>
1372 <hint type="sourcelabel">
1372 <hint type="sourcelabel">
1373 <x>160</x>
1373 <x>160</x>
1374 <y>387</y>
1374 <y>387</y>
1375 </hint>
1375 </hint>
1376 <hint type="destinationlabel">
1376 <hint type="destinationlabel">
1377 <x>802</x>
1377 <x>802</x>
1378 <y>305</y>
1378 <y>305</y>
1379 </hint>
1379 </hint>
1380 </hints>
1380 </hints>
1381 </connection>
1381 </connection>
1382 <connection>
1382 <connection>
1383 <sender>chkCheck</sender>
1383 <sender>chkCheck</sender>
1384 <signal>toggled(bool)</signal>
1384 <signal>toggled(bool)</signal>
1385 <receiver>btnCHstart</receiver>
1385 <receiver>btnCHstart</receiver>
1386 <slot>setEnabled(bool)</slot>
1386 <slot>setEnabled(bool)</slot>
1387 <hints>
1387 <hints>
1388 <hint type="sourcelabel">
1388 <hint type="sourcelabel">
1389 <x>160</x>
1389 <x>160</x>
1390 <y>383</y>
1390 <y>383</y>
1391 </hint>
1391 </hint>
1392 <hint type="destinationlabel">
1392 <hint type="destinationlabel">
1393 <x>802</x>
1393 <x>802</x>
1394 <y>389</y>
1394 <y>389</y>
1395 </hint>
1395 </hint>
1396 </hints>
1396 </hints>
1397 </connection>
1397 </connection>
1398 <connection>
1398 <connection>
1399 <sender>chkDevD</sender>
1399 <sender>chkDevD</sender>
1400 <signal>toggled(bool)</signal>
1400 <signal>toggled(bool)</signal>
1401 <receiver>grpDevD</receiver>
1401 <receiver>grpDevD</receiver>
1402 <slot>setEnabled(bool)</slot>
1402 <slot>setEnabled(bool)</slot>
1403 <hints>
1403 <hints>
1404 <hint type="sourcelabel">
1404 <hint type="sourcelabel">
1405 <x>701</x>
1405 <x>701</x>
1406 <y>98</y>
1406 <y>98</y>
1407 </hint>
1407 </hint>
1408 <hint type="destinationlabel">
1408 <hint type="destinationlabel">
1409 <x>701</x>
1409 <x>701</x>
1410 <y>251</y>
1410 <y>251</y>
1411 </hint>
1411 </hint>
1412 </hints>
1412 </hints>
1413 </connection>
1413 </connection>
1414 <connection>
1414 <connection>
1415 <sender>chkDevB</sender>
1415 <sender>chkDevB</sender>
1416 <signal>toggled(bool)</signal>
1416 <signal>toggled(bool)</signal>
1417 <receiver>grpDevB</receiver>
1417 <receiver>grpDevB</receiver>
1418 <slot>setEnabled(bool)</slot>
1418 <slot>setEnabled(bool)</slot>
1419 <hints>
1419 <hints>
1420 <hint type="sourcelabel">
1420 <hint type="sourcelabel">
1421 <x>263</x>
1421 <x>263</x>
1422 <y>79</y>
1422 <y>79</y>
1423 </hint>
1423 </hint>
1424 <hint type="destinationlabel">
1424 <hint type="destinationlabel">
1425 <x>251</x>
1425 <x>251</x>
1426 <y>167</y>
1426 <y>167</y>
1427 </hint>
1427 </hint>
1428 </hints>
1428 </hints>
1429 </connection>
1429 </connection>
1430 <connection>
1430 <connection>
1431 <sender>chkDevC</sender>
1431 <sender>chkDevC</sender>
1432 <signal>toggled(bool)</signal>
1432 <signal>toggled(bool)</signal>
1433 <receiver>grpDevC</receiver>
1433 <receiver>grpDevC</receiver>
1434 <slot>setEnabled(bool)</slot>
1434 <slot>setEnabled(bool)</slot>
1435 <hints>
1435 <hints>
1436 <hint type="sourcelabel">
1436 <hint type="sourcelabel">
1437 <x>391</x>
1437 <x>391</x>
1438 <y>79</y>
1438 <y>79</y>
1439 </hint>
1439 </hint>
1440 <hint type="destinationlabel">
1440 <hint type="destinationlabel">
1441 <x>391</x>
1441 <x>391</x>
1442 <y>202</y>
1442 <y>202</y>
1443 </hint>
1443 </hint>
1444 </hints>
1444 </hints>
1445 </connection>
1445 </connection>
1446 <connection>
1446 <connection>
1447 <sender>chkDevA</sender>
1447 <sender>chkDevA</sender>
1448 <signal>toggled(bool)</signal>
1448 <signal>toggled(bool)</signal>
1449 <receiver>grpDevA</receiver>
1449 <receiver>grpDevA</receiver>
1450 <slot>setEnabled(bool)</slot>
1450 <slot>setEnabled(bool)</slot>
1451 <hints>
1451 <hints>
1452 <hint type="sourcelabel">
1452 <hint type="sourcelabel">
1453 <x>105</x>
1453 <x>105</x>
1454 <y>79</y>
1454 <y>79</y>
1455 </hint>
1455 </hint>
1456 <hint type="destinationlabel">
1456 <hint type="destinationlabel">
1457 <x>95</x>
1457 <x>95</x>
1458 <y>167</y>
1458 <y>167</y>
1459 </hint>
1459 </hint>
1460 </hints>
1460 </hints>
1461 </connection>
1461 </connection>
1462 </connections>
1462 </connections>
1463 </ui>
1463 </ui>
General Comments 0
You need to be logged in to leave comments. Login now