def is_summable(self, otra, actual): '''Indica si se puede sumar el tamaño de las particiones si se trata \ del mismo tipo (primaria o lógica)''' # Si la particion es libre if otra[TblCol.FORMATO] == msj.particion.libre: # Si ambas son primarias # o ambas son logicas if (is_primary(actual) and is_primary(otra)) \ or (is_logic(actual) and is_logic(otra)): return True return False
def count_logical(self): '''Cuenta la cantidad de particiones logicas que no sean vacias''' total = 0 for fila in self.lista: if is_logic(fila) and not is_free(fila): total = total + 1 return total
def delete_partition(self, part): 'Ejecuta el proceso de eliminar la particion de la lista' i = get_row_index(self.lista, part) particion = self.lista[i] inicio = particion[TblCol.INICIO] fin = particion[TblCol.FIN] del_sig = del_ant = False # Si tiene una fila anterior if i > 0: p_anterior = self.lista[i - 1] if self.is_summable(p_anterior, particion): del_ant = True inicio = p_anterior[TblCol.INICIO] # si tiene una fila siguiente if has_next_row(self.lista, i): p_siguiente = self.lista[i + 1] if self.is_summable(p_siguiente, particion): del_sig = True fin = p_siguiente[TblCol.FIN] tamano = fin - inicio temp = copy(particion) temp[TblCol.DISPOSITIVO] = '' # Validar de que tipo quedará la particion libre if is_primary(temp): temp[TblCol.TIPO] = msj.particion.primaria elif is_logic(temp): temp[TblCol.TIPO] = msj.particion.logica temp[TblCol.FORMATO] = msj.particion.libre temp[TblCol.MONTAJE] = '' temp[TblCol.TAMANO] = humanize(tamano) temp[TblCol.USADO] = humanize(0) temp[TblCol.LIBRE] = humanize(tamano) temp[TblCol.INICIO] = inicio temp[TblCol.FIN] = fin temp[TblCol.FORMATEAR] = False temp[TblCol.ESTADO] = PStatus.FREED # Sustituimos con los nuevos valores self.lista[i] = temp # Borramos los esṕacios vacios contiguos si existieren if del_sig: del self.lista[i + 1] if del_ant: del self.lista[i - 1] # Si lo que se estaeliminando no es un espacio libre if not is_free(particion): # Agregamos la accion correspondiente self.acciones.append(['borrar', self.disco, None, particion[TblCol.INICIO], particion[TblCol.FIN], particion[TblCol.FORMATO], msj.particion.get_tipo_orig( particion[TblCol.TIPO]), 0])
def delete_partition(self, part): 'Ejecuta el proceso de eliminar la particion de la lista' i = get_row_index(self.lista, part) particion = self.lista[i] inicio = particion[TblCol.INICIO] fin = particion[TblCol.FIN] del_sig = del_ant = False # Si tiene una fila anterior if i > 0: p_anterior = self.lista[i - 1] if self.is_summable(p_anterior, particion): del_ant = True inicio = p_anterior[TblCol.INICIO] # si tiene una fila siguiente if has_next_row(self.lista, i): p_siguiente = self.lista[i + 1] if self.is_summable(p_siguiente, particion): del_sig = True fin = p_siguiente[TblCol.FIN] tamano = fin - inicio temp = copy(particion) temp[TblCol.DISPOSITIVO] = '' # Validar de que tipo quedará la particion libre if is_primary(temp): temp[TblCol.TIPO] = msj.particion.primaria elif is_logic(temp): temp[TblCol.TIPO] = msj.particion.logica temp[TblCol.FORMATO] = msj.particion.libre temp[TblCol.MONTAJE] = '' temp[TblCol.TAMANO] = humanize(tamano) temp[TblCol.USADO] = humanize(0) temp[TblCol.LIBRE] = humanize(tamano) temp[TblCol.INICIO] = inicio temp[TblCol.FIN] = fin temp[TblCol.FORMATEAR] = False temp[TblCol.ESTADO] = PStatus.FREED # Sustituimos con los nuevos valores self.lista[i] = temp # Borramos los esṕacios vacios contiguos si existieren if del_sig: del self.lista[i + 1] if del_ant: del self.lista[i - 1] # Si lo que se estaeliminando no es un espacio libre if not is_free(particion): # Agregamos la accion correspondiente self.acciones.append([ 'borrar', self.disco, None, particion[TblCol.INICIO], particion[TblCol.FIN], particion[TblCol.FORMATO], msj.particion.get_tipo_orig(particion[TblCol.TIPO]), 0 ])
def __init__(self, lista, fila_selec, acciones): self.lista = lista self.fila_selec = fila_selec self.acciones = acciones self.disco = fila_selec[TblCol.DISPOSITIVO] if is_primary(self.fila_selec, False) or is_logic(self.fila_selec): self.delete_partition(self.fila_selec) else: is_clean = True for partition in self.lista: if is_logic(partition) and not is_free(partition): message = "Debe borrar primero las particiones lógicas." UserMessage(message, 'ERROR', gtk.MESSAGE_ERROR, gtk.BUTTONS_OK) is_clean = False break; if is_clean: i = get_row_index(self.lista, self.fila_selec) free = self.lista[i + 1] self.delete_partition(self.fila_selec) free[TblCol.TIPO] = msj.particion.primaria self.delete_partition(free)
def table_row_selected(self, fila): """Acciones a tomar cuando una fila de la tabla es seleccionada""" # Si no se selecciona una fila valida if fila == None: print "Nada seleccionado." return else: self.fila_selec = fila # BTN_NUEVA if is_free(fila): # Activar solo si hay menos de 4 particiones primarias if is_primary(fila) and self.count_primary() < 4: self.btn_nueva.set_sensitive(True) # o si la part. libre es logica elif is_logic(fila) and self.count_logical() < 11: self.btn_nueva.set_sensitive(True) else: self.btn_nueva.set_sensitive(False) else: self.btn_nueva.set_sensitive(False) # BTN_USAR if is_usable(self.fila_selec): self.btn_editar.set_sensitive(True) else: self.btn_editar.set_sensitive(False) # BTN_REDIMENSION # Si la particion NO es libre # si el filesystem tiene redimensionador # y no se ha marcado la aprticion para usarla # y si hay espacio para redimensionar dentro de la particion if ( fila[TblCol.FORMATO] != msj.particion.libre and is_resizable(fila[TblCol.FORMATO]) and fila[TblCol.ESTADO] != PStatus.USED and floatify(fila[TblCol.TAMANO]) > floatify(fila[TblCol.USADO]) ): self.btn_redimension.set_sensitive(True) else: self.btn_redimension.set_sensitive(False) # BTN_ELIMINAR # Solo se pueden eliminar particiones, no los espacios libres # TODO: Eliminar part. extendidas (necesita verificar part. logicas) if not is_free(fila): self.btn_eliminar.set_sensitive(True) else: self.btn_eliminar.set_sensitive(False)
def table_row_selected(self, fila): '''Acciones a tomar cuando una fila de la tabla es seleccionada''' # Si no se selecciona una fila valida if fila == None: print "Nada seleccionado." return else: self.fila_selec = fila # BTN_NUEVA if is_free(fila): # Activar solo si hay menos de 4 particiones primarias if is_primary(fila) and self.count_primary() < 4: self.btn_nueva.set_sensitive(True) # o si la part. libre es logica elif is_logic(fila) and self.count_logical() < 11: self.btn_nueva.set_sensitive(True) else: self.btn_nueva.set_sensitive(False) else: self.btn_nueva.set_sensitive(False) # BTN_USAR if is_usable(self.fila_selec): self.btn_editar.set_sensitive(True) else: self.btn_editar.set_sensitive(False) #BTN_REDIMENSION # Si la particion NO es libre # si el filesystem tiene redimensionador # y no se ha marcado la aprticion para usarla # y si hay espacio para redimensionar dentro de la particion if fila[TblCol.FORMATO] != msj.particion.libre \ and is_resizable(fila[TblCol.FORMATO]) \ and fila[TblCol.ESTADO] != PStatus.USED \ and floatify(fila[TblCol.TAMANO]) > floatify(fila[TblCol.USADO]): self.btn_redimension.set_sensitive(True) else: self.btn_redimension.set_sensitive(False) # BTN_ELIMINAR # Solo se pueden eliminar particiones, no los espacios libres #TODO: Eliminar part. extendidas (necesita verificar part. logicas) if not is_free(fila): self.btn_eliminar.set_sensitive(True) else: self.btn_eliminar.set_sensitive(False)
def __init__(self, lista, fila_selec, acciones): self.lista = lista self.fila_selec = fila_selec self.acciones = acciones self.disco = fila_selec[TblCol.DISPOSITIVO] if is_primary(self.fila_selec, False) or is_logic(self.fila_selec): self.delete_partition(self.fila_selec) else: is_clean = True for partition in self.lista: if is_logic(partition) and not is_free(partition): message = _("You must first delete the logical \ partitions.") UserMessage(message, 'ERROR', gtk.MESSAGE_ERROR, gtk.BUTTONS_OK) is_clean = False break if is_clean: i = get_row_index(self.lista, self.fila_selec) free = self.lista[i + 1] self.delete_partition(self.fila_selec) free[TblCol.TIPO] = msj.particion.primaria self.delete_partition(free)
def __init__(self, parent_diag, lista, part_act): ''' Constructor ''' gtk.Table.__init__(self, 6, 6) self.lista = lista self.part_act = part_act self.parent_diag = parent_diag #Tipo de partición self.lbl1 = gtk.Label(_("Partition type:")) self.lbl1.set_alignment(0, 0.5) self.attach(self.lbl1, 0, 1, 0, 1) self.lbl1.show() self.cmb_tipo = gtk.combo_box_new_text() if is_logic(self.part_act): self.cmb_tipo.append_text(msj.particion.logica) self.cmb_tipo.set_sensitive(False) else: self.cmb_tipo.append_text(msj.particion.primaria) # Solo se permite una particion extendida en el disco if not has_extended(self.lista): self.cmb_tipo.append_text(msj.particion.extendida) self.cmb_tipo.set_active(0) self.attach(self.cmb_tipo, 1, 2, 0, 1) self.cmb_tipo.connect("changed", self.cmb_tipo_on_changed) self.cmb_tipo.show() #Sistema de Archivos self.lbl2 = gtk.Label(_("File system:")) self.lbl2.set_alignment(0, 0.5) self.attach(self.lbl2, 0, 1, 1, 2) self.lbl2.show() self.cmb_fs = gtk.combo_box_new_text() self.cmb_fs_fill() self.cmb_fs.connect("changed", self.cmb_fs_on_changed) self.attach(self.cmb_fs, 1, 2, 1, 2) self.cmb_fs.show() # Punto de Montaje self.lbl3 = gtk.Label(_("Mount point:")) self.lbl3.set_alignment(0, 0.5) self.lbl3.set_size_request(200, 30) self.attach(self.lbl3, 0, 1, 2, 3) self.lbl3.show() self.cmb_montaje = gtk.combo_box_new_text() self.cmb_montaje_fill() self.attach(self.cmb_montaje, 1, 2, 2, 3) self.cmb_montaje.connect("changed", self.cmb_montaje_on_changed) self.cmb_montaje.show() self.entrada = gtk.Entry() self.entrada.set_text('/') self.attach(self.entrada, 1, 2, 2, 3) self.entrada.connect("changed", self.validate_m_point) self.formatear = gtk.CheckButton(_("Format this partition")) self.attach(self.formatear, 1, 2, 3, 4) self.formatear.set_visible(is_usable(self.part_act)) self.formatear.connect("toggled", self.cmb_fs_on_changed) self.formatear.show() self.show()