Esempio n. 1
0
 def getStringMax(self, catalog=Catalog()):
     size = catalog.getSize()
     idMax = 0
     nameMax = 0
     timeMax = 0
     descriptionMax = 0
     directorMax = 0
     categoryMax = 0
     self.cleanMax()
     for i in range(size):
         timeManager = TimeManager()
         movie = catalog.getMovieFromIndex(i)
         idMovie, name, time, description, director, category = self.getConten(
             movie)
         time = str(timeManager.convertTimeToSeconds(time))
         if (len(name) > self.nameMax):
             self.nameMax = len(name)
         if (len(idMovie) > self.idMax):
             self.idMax = 4
         if (len(time) > self.timeMax):
             self.timeMax = len(time)
         if (len(description) > self.descriptionMax):
             self.descriptionMax = 32
         if (len(director) > self.directorMax):
             self.directorMax = len(director)
         if (len(category) > self.categoryMax):
             self.categoryMax = len(category)
     return True
Esempio n. 2
0
    def getDataString(self, catalog=Catalog()):
        timeManager = TimeManager()
        size = catalog.getSize()
        vector = []
        for i in range(size):
            movie = catalog.getMovieFromIndex(i)
            idMovie, name, formate, description, director, category = self.getConten(
                movie)
            time = timeManager.convertTimeToSeconds(formate)
            if (len(description) > 29):
                description = description[0:29]
                description += "..."
            if (len(name) > 37):
                name = name[0:37]
                name += "..."
            time = "%s%s" % (time, " seg.")
            spaceId, spaceName, spaceTime, spaceDescription, spaceDirector, spaceCategory = self.getSpaces(
                movie)
            data = "%s%s\t|  %s%s\t|  %s%s|%s%s\t|  %s%s\t|  %s%s\t  " % (
                idMovie, " " * spaceId, name, " " * spaceName, time,
                " " * spaceTime, description, " " * spaceDescription, category,
                " " * spaceCategory, director, " " * spaceDirector)
            vector.append(data)
            if (i == 0):
                self.lenString = len(data) + 60

        return vector
Esempio n. 3
0
 def __init__(self):
     self.files = []
     self.timeManager = TimeManager()
     self.totaltime = 0
     self.table = WindowTable()
     self.uiGraph = WindowGraph()
     self.typeWork = ""
     self.logJson = LogJSON()
Esempio n. 4
0
 def getSpaces(self, movie):
     if (isinstance(movie, Movie)):
         timeManager = TimeManager()
         idMovie, name, time, description, director, category = self.getConten(
             movie)
         time = str(timeManager.convertTimeToSeconds(time))
         spaceId = self.idMax - len(idMovie)
         spaceName = 32 - len(name)
         spaceTime = self.timeMax - len(time)
         spaceDescription = 32 - len(description)
         spaceDirector = self.directorMax - len(director)
         spaceCategory = 20 - len(category)
         return spaceId, spaceName + 4, spaceTime + 4, spaceDescription, spaceDirector + 4, spaceCategory + 4
Esempio n. 5
0
    def __init__(self, parent=None):
        super(WindowAdd, self).__init__(parent)
        self.uiAdd = Ui_MainWindow()
        self.uiAdd.setupUi(self)
        self.centerWindow()

        # Instancia de los dialogos
        self.uiDialogConfirmationAdd = DialogConfirm()
        self.uiDialogConfirmationCancel = DialogConfirm()
        self.uiDialogError = DialogError()

        # Eventos de los botones de la pantalla Agregar.
        self.uiAdd.btnAgregar.clicked.connect(self.openDialogConfirmationAdd)
        self.uiAdd.btnCancelar.clicked.connect(
            self.openDialogConfirmationCancel)

        # Eventos de los botones de los dialogBox
        self.uiDialogConfirmationAdd.uiDialog.btnConfirm.clicked.connect(
            self.eventAddOrEdit)
        self.uiDialogConfirmationAdd.uiDialog.btnCancel.clicked.connect(
            self.closeDialogConfirmationAdd)
        self.uiDialogConfirmationCancel.uiDialog.btnConfirm.clicked.connect(
            self.closeDialogConfirmationCancel)
        self.uiDialogConfirmationCancel.uiDialog.btnCancel.clicked.connect(
            self.closeDialogConfirmationCancel)
        self.uiDialogError.uiDialogError.btnConfirmar.clicked.connect(
            self.closeDialogError)

        # Variables
        self.idEdit = -1
        self.idRemove = -1
        self.add = True
        self.edit = False
        self.remove = False
        #Otras instancias
        self.table = TableAsscii()
        self.timeManager = TimeManager()
        self.memory = MemoryManager()
        self.catalog = Catalog()
        self.memory.getFromMemory()
        self.catalog = self.memory.getCatalogFromMemory()
Esempio n. 6
0
class LogGenerator:
    """
    Nombre: LogGenerator
    Atributos: 
                self.files= Lista que contiene el registro de los archivos procesados.
                self.timeManager =  Instancia de la clase TimeManager para gestionar el tiempo.
                self.totaltime = 0 Tiempo total de ejecución.
                self.table = GUI que muestra la tabla de los archivos procesados.
                self.uiGraph = GUI que muestra la imagen del grafo.
                self.typeWork = Tipo de tarea realizada ("Encrypt/Decript)
                self.logJson = Instancia de la clase logJson la cual maneja el registro en un JSON.
    Descripción: Genera registros en tablas HTML, Tablas de QT5, Diccionarios/ JSON.
    """
    def __init__(self):
        self.files = []
        self.timeManager = TimeManager()
        self.totaltime = 0
        self.table = WindowTable()
        self.uiGraph = WindowGraph()
        self.typeWork = ""
        self.logJson = LogJSON()

    def getDataFromJSON(self, route=""):
        """
        Nombre: getDataFromJSON
        Parametros: route: Ruta del archivo JSON.
        Descripción: Obtiene la data de un archivo JSON con el contenido del grafo.
        Retorno: True o False.
        """

        try:
            with open(route) as file:
                self.logJson.graph.graph = json.load(file)
                file.close()

        except:
            return False
        return True

    def addToFileList(self, ubicationFile, processingTime=0):
        """
        Nombre: addToFileList

        Parametros:
                    ubicationFile: Ubicación del archivo a agregar.
                    processingTime: Tiempo que tarda el archivo en procesarce.

        Descripción: Agrega en una lista un registro con los datos de procesamiento del archivo.
                    nombre, tamaño y tiempo que tardo en encriptar.

        Retorno: No retorna.
        """
        nameFile = self.getNameFile(ubicationFile)
        sizeFile = os.path.getsize(ubicationFile) / 1000
        dataFile = [nameFile, processingTime, sizeFile]
        self.files.append(dataFile)

    def resume(self):
        """
        Nombre: resume

        Parametro:
                    typeWork: Tipo de trabajo reaalizado, Encriptado/ Desencriptado.

        Descripción:    Genera una tabla html con el registro de todos los archivos procesados en la lista.
                        Genera una tabla QT5 con el registro de todos los archivos procesados.

        Retorno: No retorna.

        """

        self.generateTableProcess()
        self.generateTableFilesProcess()
        self.generateLogHtml(self.typeWork)
        self.generateLogJSON()

        self.files.clear()
        self.logJson.graph.graph.clear()

    def generateTableProcess(self):
        """
        Nombre: generateTableProcess

        Parametros: No recibe parametros.

        Descripción: Genera una tabla QT con la información general de todos los archivos procesasodos.

        Retorno: Retorna True.

        """
        filesProcessed = "%s Archivos" % len(self.files)
        timeProcess = self.timeManager.timeToString(0, self.totaltime)
        sizeFilesProcessed = round(self.getFileSizeProcess(), 2)
        strSize = self.getStringFileSize(str(sizeFilesProcessed))
        self.table.uiTable.lblProcess.setText("Proceso ejecutado: %s" %
                                              self.typeWork)
        self.table.generateTableProcess(filesProcessed, timeProcess, strSize)
        return True

    def generateTableFilesProcess(self):
        """
        Nombre:  generateTableFilesProcess

        Parametros: No recibe parametros.

        Descripción: Genera una tabla QT5 con todos los elementos de la lista.

        Retorno: No retorna.

        """
        self.table.uiTable.lblFileProcess.setText("Archivos: %ss" %
                                                  self.typeWork)
        self.table.uiTable.tblFileProcess.setRowCount(len(self.files) + 1)
        self.table.uiTable.tblFileProcess.setColumnCount(3)
        index = 1
        for element in self.files:

            name = "%s" % element[0]
            time = "%s" % self.timeManager.getTimeProcessFile(0, element[1])
            strSize = self.getStringFileSize(str(element[2]))
            size = "%s KB" % strSize
            self.table.generateTableFilesProcess(name, time, size, index)
            index += 1

    def generateLogJSON(self):
        """
        Nombre: generateLogJSON

        Parametros: No recibe parametros.

        Descripción: Genera un regisro de los archivos procesados en un archivo JSON.

        Retorno: Retoena True.
        """
        nameFile = "%s.json" % self.getCurrentLogName()
        content = self.logJson.graph.graph
        f = open("Nucleo/LOGS/%s" % nameFile, 'w', encoding='utf8')
        json.dump(content, f, indent=4)
        f.close()
        self.logJson.createImgGraph()
        self.logJson.graphNx.g = nx.DiGraph()

        return True

    def generateLogHtml(self, TypeWork=""):
        """
        Nombre: generateLogHtml

        Parametros: TypeWork: Tipo de trabajo a realizar ('Encriptado/Desencriptado')

        Descripción: Genera una tabla HTMl con todos los archivos procesados en la lista.

        Retorno: No retorna.

        """
        nameFile = "%s.html" % self.getCurrentLogName()
        f = "Nucleo/LOGS/%s" % nameFile
        f = open(f, 'w')
        tableProcess = self.getTableProcessHtml()
        tableFilesProcess = self.getContentTableHtml()
        title1 = "<h2>Proceso ejecutado: %s</h2>" % TypeWork
        title2 = "<h2>Archivos %s</h>" % TypeWork
        content = "%s<br>%s<br>%s<br>%s" % (title1, tableProcess, title2,
                                            tableFilesProcess)
        f.write(content)
        f.close()

    def getContentProcessHtml(self):
        """
        Nombre: getContentProcessHtml

        Parametros: No recibe parametros.

        Descripción: Obtiene el contenido de la lista para darle un formato de tabla HTML.

        Retorno: Retorna un String con el contenido de la tabla HTML.

        """

        FilesProcess = "<td>%s  </td>" % "Archivos procesados."
        numFiles = "<td>%s Archivos </td>" % len(self.files)
        time = "<td>%s  </td>" % "Tiempo"
        timeProcess = "<td>%s  </td>" % self.timeManager.timeToString(
            0, self.totaltime)
        size = "<td>%s  </td>" % "Tamaño total"
        strSize = self.getStringFileSize(str(self.getFileSizeProcess()))
        sizeProcess = "<td>%s KB </td>" % strSize

        header_1 = "<tr>%s%s</tr>" % (FilesProcess, numFiles)
        header_2 = "<tr>%s%s</tr>" % (time, timeProcess)
        header_3 = "<tr>%s%s</tr>" % (size, sizeProcess)
        txt = "%s%s%s" % (header_1, header_2, header_3)
        return txt

    def getTableProcessHtml(self):
        """
        Nombre: getTableProcessHtml

        Parametros: No recibe parametros.

        Descripción: Se obtiene la tabla HTML en su formato final.

        Retorno: Retorna un String con la forma total de la tabla HTML.

        """
        conten = self.getContentProcessHtml()
        txt = "<table border = '1'> %s </table>" % (conten)
        return txt

    def getContentTableHtml(self):
        """
        Nombre:  getContentTableHtml

        Parametros: No recibe parametros.

        Descripción: Obtiene el contenido de la tabla HTML

        Retorno: Retorna una tabla HTML con su forma final.
        """
        header = self.getHeaderTableHtml()
        array = []
        array.append(header)
        count = 1
        for element in self.files:
            num = "<td>%s  </td>" % count
            name = "<td>%s  </td>" % element[0]
            time = "<td>%s  </td>" % self.timeManager.getTimeProcessFile(
                0, element[1])
            size = "<td>%s KB</td>" % self.getStringFileSize(
                str(round(element[2], 2)))
            row = "<tr>%s%s%s%s</tr>" % (num, name, time, size)
            array.append(row)
            count += 1
        txt = "<table border = '1'> %s </table>" % ("".join(array))
        return txt

    def getHeaderTableHtml(self):
        """
        Nombre: getHeaderTableHtml

        Parametros: No recibe parametros.

        Descripción: Obtiene el encabezado de la tabla HTML.

        Retorno: Retorna un String con el encabezado de la tabla.

        """

        num = "<td>%s  </td>" % "Num."
        name = "<td>%s  </td>" % "Nombre"
        time = "<td>%s  </td>" % "Tiempo de procesamiento"
        size = "<td>%s  </td>" % "Tamaño"

        header = "<tr>%s%s%s%s</tr>" % (num, name, time, size)
        return header

    def getCurrentLogName(self):
        """
        Nombre: getCurrentLogName

        Parametros: No recibe parametros.

        Descripción: Obtiene el nombre del archivo LOG.

        Retorno: Retorna un String con el nombre del archivo log.

        """
        date = datetime.datetime.now()
        year = date.year
        month = date.month
        day = date.day
        hour = date.hour
        minutes = date.minute
        second = date.second
        nameFile = "LOG_%s_%s_%s_%s_%s_%s" % (year, month, day, hour, minutes,
                                              second)
        return nameFile

    def getFileSizeProcess(self):
        """
        Nombre: getFileSizeProcess

        Parametros: No recibe parametros.

        Descripción: Obtiene el tamaño total de todos los archivos procesados.

        Retorno: Retorna un flotante del tamaño de los archivos procesados.

        """
        sume = 0
        for i in range(len(self.files)):
            sume += self.files[i][2]
        return round(sume, 3)

    def getTimeProcess(self):
        """
        Nombre: getTimeProcess

        Parametros: No recibe parametros.

        Descripción: Obtiene el tiempo total que tardaron los archivos en procesar.

        Retorno: No retorna.

        """
        sume = 0
        for i in range(len(self.files)):
            sume += self.files[i][1]
        return sume

    def getNameFile(self, ruteFile):
        """
        Nombre: getNameFile

        Parametros: ruteFile: Ruta del archivo.

        Descripción: Obtiene el nombre de un archivo segun su ruta.

        Retorno: Retorna un String con el nombre del archivo.
        """
        return os.path.split(ruteFile)[1]

    def getStringFileSize(self, size=""):
        """
        Nombre: getStringFileSize

        Parametros: 
                    size: Es una cadena de texto que contiene el tamaño del archivo.

        Descripción: Genera ina cadena de texto con la coma que se para la unidad de millar.

        Retorno: Retorna una cadena de texto.
        """
        integerSize = size.split(".")
        strSize = ""

        if len(integerSize) == 2:
            a, b = integerSize
            if len(a) > 3:
                strSize = "%s,%s.%s" % (a[:-3], a[-3:], b)
            else:
                strSize = "%s.%s" % (a, b)
        if len(integerSize) == 1:
            a = integerSize[0]
            if (len(a) > 3):
                strSize = "%s,%s.%s" % (a[:-3], a[-3:], 00)
            else:
                strSize = "%s.%s" % (a, 00)
        return strSize

        return strSize

    def setImageToGraph(self):
        """
        Nombre: setImageToGraph

        Parametros: No recibe parametros.

        Descripción: Agrega la imagen del grafo al textbox de la ventana 'Grafo'
        
        Retorno: Retorna True
        """
        self.uiGraph.uiGraph.txtImage.setHtml(
            "<img src=\"Nucleo/LOGS/img.png\">")
        self.uiGraph.uiGraph.txtImage.setReadOnly(True)
        return True
Esempio n. 7
0
 def __init__(self):
     self.root = None
     self.g = nx.Graph()
     #self.g = nx.dodecahedral_graph()
     self.timeManager = TimeManager()
Esempio n. 8
0
class BST:
    def __init__(self):
        self.root = None
        self.g = nx.Graph()
        #self.g = nx.dodecahedral_graph()
        self.timeManager = TimeManager()

    """
    Nombre: BSTAdd
    Parametros:   Value = valor que se quiere agregar al árbol.
    Descripcion: Llama a la funcion BSTAddInner.
    Retorna: Retorna un llamado a la funcion BSTAddInner
    """

    def BSTAdd(self, value):
        return self.BSTAddInner(value, self.root)

    """
    Nombre: BSTAddInner
    Parametros: 
                Value: Valor que se quiere agregar al arbol.
                Current: La raiz actual donde se quiere agregar.
    Descripcion: Esta funcion agrega elementos al árbol binario.

    Retorno: Retorna un booleano.
                True: Si se agrego correctamente.
                False: si no se pudo agregar.

    """

    def BSTAddInner(self, value, current):
        valueTime = self.timeManager.convertTimeToSeconds(value.timeMovie)
        if (not self.root):
            self.root = NodeBst(value)
            return True
        currentTime = self.timeManager.convertTimeToSeconds(
            current.value.timeMovie)
        if (currentTime > valueTime):
            if (not current.left):
                current.left = NodeBst(value)
                return True
            return self.BSTAddInner(value, current.left)
        elif (currentTime < valueTime):
            if (not current.right):
                current.right = NodeBst(value)
                return True
            return self.BSTAddInner(value, current.right)
        else:
            return False

    """
    Nombre: getValue
    Parametros:
                value: objeto Movie al que se quiere extraer su contenido para visualizar en el árbol.
    Descripcion: Obtiene el contenido que se desea visualizar en el árbol.
    Retrorna: Retorna un String si se encontro el valor deseado, False en caso contrario.
    """

    def getValue(self, value):
        if (isinstance(value, Movie)):
            if (len(value.nameMovie) > 20):
                conten = "%s |\n%s" % (value.timeMovie, value.nameMovie)
            else:
                conten = "%s | %s" % (value.timeMovie, value.nameMovie)

            return conten
        return False

    """
    Nombre: BSTADToLinkedList
    Parametros: 
                ll: LinkedList con todos los elementos del catalogo.
    Descripcion: Agrega los elementos de una lista enlazada a un arbol.
    Retorno: Retorna True

    """

    def BSTAddFromLinkedList(self, ll=LinkedList()):
        if (isinstance(ll, LinkedList)):
            current = ll.first
            while (current):
                value = current.value
                self.BSTAdd(value)
                current = current.next
            return True

    """
    Nombre: BSTConvert
    Parametros: 
                ll: LinkedList con todos los elementos del catalogo.
    Descripcion: Convierte los elementos de una lista enlazada a un árbol.
    Retorno: Retorna Un TDA BST

    """

    def BSTConvert(self, ll=LinkedList()):
        current = ll.first
        if (not current):
            return False
        tree = BST()
        rootNode = self.getValue(current.value)
        tree.g.add_node(rootNode)
        while (current):
            value = current.value
            tree.BSTAdd(value)
            current = current.next
        return tree

    """
    Nombre: BSTSearch
    Parametros: 
                value: Valor que se desea encontrar.
    Descripcion: Llama a la funcion BSTSearchInner para que busque desde la raiz.
    Retorno: Retorna el llamado a la funcion BSTSearchInner
    """

    def BSTSearch(self, value):
        return self.BSTSearchInner(value, self.root)

    """
    Nombre: BSTSearchInner
    Parametros: 
                value: Valor que se desea encontrar.
                Current: La raiz actul donde se esta buscando.
    Descripcion: Realiza un recorrido  en profundidad de manera recursiva hasta encontrar el valor que se desea obtener.
    Retorno: Retorna un Booleano.

    """

    def BSTSearchInner(self, value, current):
        if (isinstance(current, NodeBst)):
            if (not self.root):
                return False
            if (current.value == value):
                return True
            if (current.value > value):
                if (not current.left):
                    return False
                return self.BSTSearch(value, current.left)
            if (current.value < value):
                if (not current.right):
                    return False
                return self.BSTSearch(value, current.right)
            return False
        return False

    """
    Nombre: AddToG
    parametros: 
                current: Nodo actual, por defecto comienza desde la raiz.
    Descripcion: Agrega Nodos y aristas al Grapho de networkX
    Retorno: No retorna Nada.

    """

    def AddToG(self, current):
        if not current:
            return False
        else:
            currentValue = self.getValue(current.value)
            self.g.add_node(currentValue)
            if (current.left):
                leftCurrentValue = self.getValue(current.left.value)
                self.g.add_edge(currentValue, leftCurrentValue)
            if (current.right):
                rightCurrentValue = self.getValue(current.right.value)
                self.g.add_edge(currentValue, rightCurrentValue)
            self.AddToG(current.left)
            self.AddToG(current.right)

    """
    Nombre: getGraph
    Parametros:  No recibe parametros.
    Descripcion: Obtiene el grapho de networkx
    Retorno: Retorna el grapho de networkX
    """

    def getGraph(self):
        return self.g

    """
    Nombre:getRoot
    Parametros: No recibe parametros.
    Retorno: Retorna la raiz.
    """

    def getRoot(self):
        return self.root
Esempio n. 9
0
class WindowAdd(QMainWindow):
    def __init__(self, parent=None):
        super(WindowAdd, self).__init__(parent)
        self.uiAdd = Ui_MainWindow()
        self.uiAdd.setupUi(self)
        self.centerWindow()

        # Instancia de los dialogos
        self.uiDialogConfirmationAdd = DialogConfirm()
        self.uiDialogConfirmationCancel = DialogConfirm()
        self.uiDialogError = DialogError()

        # Eventos de los botones de la pantalla Agregar.
        self.uiAdd.btnAgregar.clicked.connect(self.openDialogConfirmationAdd)
        self.uiAdd.btnCancelar.clicked.connect(
            self.openDialogConfirmationCancel)

        # Eventos de los botones de los dialogBox
        self.uiDialogConfirmationAdd.uiDialog.btnConfirm.clicked.connect(
            self.eventAddOrEdit)
        self.uiDialogConfirmationAdd.uiDialog.btnCancel.clicked.connect(
            self.closeDialogConfirmationAdd)
        self.uiDialogConfirmationCancel.uiDialog.btnConfirm.clicked.connect(
            self.closeDialogConfirmationCancel)
        self.uiDialogConfirmationCancel.uiDialog.btnCancel.clicked.connect(
            self.closeDialogConfirmationCancel)
        self.uiDialogError.uiDialogError.btnConfirmar.clicked.connect(
            self.closeDialogError)

        # Variables
        self.idEdit = -1
        self.idRemove = -1
        self.add = True
        self.edit = False
        self.remove = False
        #Otras instancias
        self.table = TableAsscii()
        self.timeManager = TimeManager()
        self.memory = MemoryManager()
        self.catalog = Catalog()
        self.memory.getFromMemory()
        self.catalog = self.memory.getCatalogFromMemory()

    # Funciones para editar:
    """
    Nombre: activateEdition
    Paramereos: No recibe parametros
    Descripcion: activa la variable booleana edit para asegurar que se esta editando
                 en lugar de eliminar o agregar.
    Retorno: True
    """

    def activateEdition(self, idEdit):
        self.edit = True
        self.add = False
        self.remove = False
        self.idEdit = idEdit
        return True

    """
    Nombre: activateAdd
    Parametros: No recibe parametros.
    Descripcion: activa la variable booleana Add para asegurar que se esta agregando 
                 en lugar de editar o eliminar.
    Retorno: True
    """

    def activateAdd(self):
        self.add = True
        self.edit = False
        self.remove = False
        return True

    """
    Nombre: activateRemove
    Parametros: No recibe parametros.
    Descripcion: activa la variable booleana remove para asegurar que se esta eliminando 
                 en lugar de editar o eliminar.
    Retorno: True
    """

    def activateRemove(self, idRemove):
        self.remove = True
        self.edit = False
        self.add = False
        self.idRemove = idRemove
        return True

    """
    Nombre: setTextBox
    Parametros: No recibe parametros.
    Descripcion: Hace el set de los atributos del objeto que se esta editando hacia los textbox
                 de la pantalla de agregar.
    Retorno: Retorna True.

    """

    def setTextBox(self):
        movieEdit = self.catalog.getMovieFromList(self.idEdit)
        self.uiAdd.txtName.setText(movieEdit.nameMovie)
        self.uiAdd.txtTime.setText(movieEdit.timeMovie)
        self.uiAdd.txtDirector.setText(movieEdit.directorMovie)
        self.uiAdd.txtDescription.setText(movieEdit.descriptionMovie)
        return True

    # Funciones para agregar:
    """
    Nombre: getTextBox
    Parametros: No recibe parametro.
    Descripcion: Obtiene los datos de los textbox de la pantalla, luego crea el objeto Movie 
                y lo retorna.
    Retorno: Retorna un objeto Movie.
    """

    def getTextBoxForAdd(self):
        time = self.uiAdd.txtTime.text()
        validate = self.timeManager.verificateformate(time)
        if (not validate):
            self.openDialogError()
            return False
        idMovie = self.catalog.asignateId()
        nameMovie = self.uiAdd.txtName.text()
        descriptionMovie = str(self.uiAdd.txtDescription.toPlainText())
        directorMovie = self.uiAdd.txtDirector.text()
        category = self.uiAdd.cbxCategory.currentText()
        objMovie = Movie(nameMovie, time, descriptionMovie, directorMovie,
                         category, idMovie)
        return objMovie

    #Funciones para editar.
    """
    Nombre: getTextBoxForEdit
    Parametros: No recibe parametro.
    Descripcion: Obtiene los datos de los textbox de la pantalla, luego crea el objeto Movie 
                y lo retorna.
    Retorno: Retorna un objeto Movie.
    """

    def getTextBoxForEdit(self):
        time = self.uiAdd.txtTime.text()
        validate = self.timeManager.verificateformate(time)
        if (not validate):
            self.openDialogError()
            return False
        idMovie = self.idEdit
        nameMovie = self.uiAdd.txtName.text()
        descriptionMovie = str(self.uiAdd.txtDescription.toPlainText())
        directorMovie = self.uiAdd.txtDirector.text()
        category = self.uiAdd.cbxCategory.currentText()
        objMovie = Movie(nameMovie, time, descriptionMovie, directorMovie,
                         category, idMovie)
        return objMovie

    #Funciones de los DialogBox

    #1. Abrir y cerrar dialogos.
    """
    Nombre: openDialogError
    Parametros: No recibe parametros.
    Descripcion: Abre un dialogo que muestra un texto de error.
    Retorno: Retorna True
    """

    def openDialogError(self):
        self.uiDialogError.uiDialogError.txtError.setText(
            "Error, el tiempo de duracion\nde la pelicula no es valido.")
        self.uiDialogError.show()
        return True

    """
    Nombre: closeDialogError
    Parametros: No recibe parametros.
    Descripcion: cierra el dialogo de error.
    Retorno: Retorna True.
    """

    def closeDialogError(self):
        self.uiDialogError.close()
        return True

    """
    Nombre: openDialogConfirmationAdd
    Parametros: No recibe parametrosconfirmación
    Descripcion: Abre un dialogo de confirmacion que muestra una pregunta para 
                 confirmar la accion de agregar.
    Retorno: Retorna True
    """

    def openDialogConfirmationAdd(self):
        validateFields = self.validateFields()
        if (validateFields):
            self.uiDialogConfirmationAdd.setWindowTitle("¿Agregar?")
            self.uiDialogConfirmationAdd.show()
            return True
        self.uiDialogError.uiDialogError.txtError.setText(
            "Error, uno o mas campos están vacíos")
        self.uiDialogError.show()
        return False

    """
    Nombre: validateFields
    Parametros: No recibe parametros.
    Descripcion: Comprueba que los campos de los textBox esten llenos.
    Retorno: Retorna True en caso de que esten llenos,False en caso contrario.

    """

    def validateFields(self):
        name = self.uiAdd.txtName.text()
        time = self.uiAdd.txtTime.text()
        director = self.uiAdd.txtDirector.text()
        description = self.uiAdd.txtDescription.toPlainText()
        if (name == "" or time == "" or director == "" or description == ""):
            return False
        return True

    """
    Nombre: closeDialogConfirmationAdd
    Parametros: No recibe parametros.
    Descripcion: Cierra el dialogo de confirmacion para agregar
    Retorno: Retorna True
    """

    def closeDialogConfirmationAdd(self):
        self.uiDialogConfirmationAdd.close()
        return True

    """
    Nombre: openDialogConfirmationCancel
    Parametros: No recibe parametrosconfirmación
    Descripción: Abre un dialogo de confirmación que muestra una pregunta para 
                 confirmar si quiere cancelar la acción.
    Retorno: Retorna True
    """

    def openDialogConfirmationCancel(self):
        self.uiDialogConfirmationCancel.setWindowTitle("¿Cancelar?")
        self.uiDialogConfirmationCancel.show()
        return True

    """
    Nombre: closeDialogConfirmationCancel
    Parametros: No recibe parametros.
    Descripcion: Cierra el dialogo de confirmacion de el boton cancelar.
    Retorno: Retorna True
    """

    def closeDialogConfirmationCancel(self):
        self.uiDialogConfirmationCancel.close()
        return True

    #2. Evento de los dialogos
    """
    Nombre: eventAdd
    Parametros: No recibe parametros.
    Descripcion: Al momento de hacer click en el boton aceptar del dialogo de confirmacion
                se agregara la pelicula al catalogo.
    Retorno: Retorna True
    """

    def eventAddOrEdit(self):
        if (self.add):
            objMovie = self.getTextBoxForAdd()
            self.catalog.addMovie(objMovie)
            self.memory.saveCatalog(self.catalog)
            self.closeDialogConfirmationAdd()
            self.cleanTextBox()
            self.activateAdd()
            self.idEdit = -1
            self.idRemove = -1
            return True
        elif (self.edit):
            movieEdit = self.getTextBoxForEdit()
            self.catalog.editMovie(self.idEdit, movieEdit)
            self.memory.saveCatalog(self.catalog)
            self.closeDialogConfirmationAdd()
            self.close()
            self.activateAdd()
            self.idEdit = -1
            self.idRemove = -1
            return True
        return False

    # Otras funciones
    """
    Nombre: cleanTextBox
    Parametros: No recibe parametros.
    Descripcion: Limpia los formularios de los textBox
    Retorno: Retorna True
    """

    def cleanTextBox(self):
        formate = self.uiAdd.txtTime.text()
        validate = self.timeManager.verificateformate(formate)
        if (validate):
            self.uiAdd.txtDescription.setPlainText("")
            self.uiAdd.txtDirector.setText("")
            self.uiAdd.txtName.setText("")
            self.uiAdd.txtTime.setText("HH:MM.SS")
            self.uiAdd.cbxCategory.setCurrentIndex(0)
        return True

    """
    Nombre: getIndexCbx
    Parametros: Recibe el String a buscar en el comboBox
    Descripcion: Genera la posicion de el comboBox.
    Retorno: Retorna la posicion del item en el comboBox
    """

    def getIndexCbx(self, category):
        array = []
        array.append("Acción")
        array.append("Artes marciales")
        array.append("Aventuras")
        array.append("Bélicas")
        array.append("Comedia")
        array.append("Comedias musicales")
        array.append("Ciencia ficción")
        array.append("Deportivas")
        array.append("Dibujos Animados")
        array.append("Documental")
        array.append("Dramáticas")
        array.append("Espada y hechicería")
        array.append("Espionaje")
        array.append("Fantásticas")
        array.append("Hechos reales")
        array.append("Horror")
        array.append("Infantiles")
        array.append("Misterio")
        array.append("Muertos vivientes")
        array.append("Musicales")
        array.append("Policíales")
        array.append("Propaganda")
        array.append("Psicológicas")
        array.append("Suspenso")
        array.append("Románticas")
        array.append("Sobre Animales")
        array.append("Sobre aviación")
        array.append("Sobre delincuencia")
        array.append("Sobre discapacitados")
        array.append("Sobre religión")
        array.append("Sobre política")
        for i in range(len(array)):
            if (array[i] == category):
                return i
        return 0

    """
    Nombre: centerWindow
    Parametros: No recibe parametros
    Descripcion: Inicializa la ventana al centro de la pantalla.
    Retorno: Retorna True
    """

    def centerWindow(self):
        screen = self.frameGeometry()
        ubication = QtWidgets.QDesktopWidget().availableGeometry().center()
        screen.moveCenter(ubication)
        self.move(screen.topLeft())
        return True