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