Skip to content

Commit

Permalink
-Regarding to issue #40
Browse files Browse the repository at this point in the history
-Check if unit enter is an allowed unit, else notify and restore the last valid unit.
-Allow put the same unit to multiple variables in varstable, only have to hold selected all variables to change using CTR or SHIFT.
-Enter key works to go down in varstable's rows and edit.
  • Loading branch information
xmagor committed May 10, 2020
1 parent b1f55ac commit e345a1c
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
61 changes: 61 additions & 0 deletions pyENL.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ def __init__(self, parent, theme):
self.cajaTexto.cursorPositionChanged.connect(self.originCursor)
self.cleanVarButton.clicked.connect(self.showVarsTable)
self.Actualizar_Button.clicked.connect(self.actualizaVarsTable)
self.varsTable.cellChanged.connect(self.verificarNewUnitVarsTable)
self.solve_button.clicked.connect(self.solve)
self.solveTableButton.clicked.connect(self.calculateTable)
self.actionTermodinamicas.triggered.connect(self.propWindow)
Expand Down Expand Up @@ -333,6 +334,7 @@ def limpiaTrasCierre(self):
self.variables = []
self.solucion = []
self.imprimeSol(self.format)
self.actualizaVars()

def guardaArchivoComo(self):
try:
Expand Down Expand Up @@ -750,6 +752,9 @@ def showVarsTable(self):
'''
Imprime en tabla las variables del programa.
'''
# Se bloquean las señales de la tabla para no llamar funciones
# como verificarNewUnitVarsTable
self.varsTable.blockSignals(True)
self.varsTable.resizeColumnsToContents()
self.varsTable.resizeRowsToContents()
# La cantidad de filas es pues igual a la cantidad de variables.
Expand Down Expand Up @@ -797,6 +802,7 @@ def showVarsTable(self):
# newitem = QtWidgets.QTableWidgetItem(item)
# self.varsTable.setItem(m, n, newitem)
self.varsTable.setHorizontalHeaderLabels(horHeaders)
self.varsTable.blockSignals(False)
# print(dir(newitem))
# self.varsTable.show()
# self.infoLabel.setText('Pollo')
Expand All @@ -807,6 +813,9 @@ def actualizaVarsTable(self):
los parámetros de las variables de programa.
'''
try:
# Se bloquean las señales de la tabla para no llamar funciones
# como verificarNewUnitVarsTable
self.varsTable.blockSignals(True)
#Inicialmente se revisa que no la hayan embarrado repitiendo Variables
#Ojalá se encuentre una mejor manera de hacer esto , y no con un for repetido xD
list_names = []
Expand Down Expand Up @@ -879,9 +888,61 @@ def actualizaVarsTable(self):
self.variables[i].comment = comment
except Exception as e:
QtWidgets.QMessageBox.about(self, "Error", str(e))
self.varsTable.blockSignals(False)
self.showVarsTable()
self.archivoModificado = True

def keyPressEvent(self, e):
'''Función heredada, es llamada cuando una tecla se presiona'''

# Detecta cuando se use la tecla enter
# para usarla para ir bajando en las filas de la tabla de variables
# y poder editarla
if e.key() in [QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]:

item = self.varsTable.currentItem()
row, col = item.row() , item.column()

if row +1 < self.varsTable.rowCount():
self.varsTable.setCurrentCell(row+1,col)
self.varsTable.edit(self.varsTable.currentIndex())
def verificarNewUnitVarsTable(self,row,col):
'''
En el momento que el usuario cambia la unidad de una variable especifica
se verifica si es válida
'''
# Check que la modificación sea en la columna de unidades

if col!=4:
return
units = self.varsTable.item(row, col).text() # Nueva unidad tentativa

# Como es posible que se modifiquen celdas, se debe bloquear los signals
# para evitar falsos positivos en esta función
self.varsTable.blockSignals(True)
try:
# Si eval sin error entonces breves pase a la siguiente linea
temp_unit = eval('pyENLu.parse_units("' + units + '")')

#Escribir la unidad en todas las selecciones válidas hechas
list_selected = self.varsTable.selectedItems()
if len(list_selected)>1:
for item in list_selected:
# Se valida que el item pertenezca a la columna de unidades
if item.column() == col:
item.setText(units)

if row +1 < self.varsTable.rowCount():
self.varsTable.setCurrentCell(row+1,col)
self.varsTable.edit(self.varsTable.currentIndex())
# self.varsTable.set
self.varsTable.blockSignals(False)
except Exception as e:
QtWidgets.QMessageBox.about(self, "Error", str(e))
# vuelve a dejar la unidad como estaba (realmente vuelve a imprimir la tabla, pero shhh)
self.showVarsTable()
self.varsTable.blockSignals(False)

def actualizarNumeroLinea(self):
'''
Actualiza cada cierto tiempo la numeración de las lineas
Expand Down
2 changes: 2 additions & 0 deletions solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ def pyENL_sistema(pyENL, pyENL_variables, pyENL_eqns):
elif ('invalid value encountered in sqrt' in er
or 'invalid value encountered in log10' in er
or 'invalid value encountered in double_scalars' in er) :
# TODO conteo de error para notificar a usuario si es muy repetitivo (puede que el usuario
# se haya equivocado al escribir la ecuación)
pass
elif 'missing unary operator "*"' in er:
raise Exception(er + 'en la ecuación' + eqn)
Expand Down

0 comments on commit e345a1c

Please sign in to comment.