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
Esempio n. 2
0
 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
Esempio n. 4
0
 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])
Esempio n. 6
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)
Esempio n. 9
0
    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)
Esempio n. 10
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 = _("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)
Esempio n. 11
0
    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()
Esempio n. 12
0
    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()