def formBlundersBrilliancies(alm, configuracion): liBlunders = [SEPARADOR] liBlunders.append(( FormLayout.Editbox(_("Is considered wrong move when the loss of points is greater than"), tipo=int, ancho=50), alm.kblunders)) liBlunders.append(SEPARADOR) def fileNext(base, ext): return Util.fileNext(configuracion.dirPersonalTraining, base, ext) path_pgn = fileNext("Blunders", "pgn") liBlunders.append((None, _("Generate a training file with these moves"))) config = FormLayout.Editbox(_("Tactics name"), rx="[^\\\:/|?*^%><()]*") liBlunders.append((config, "")) config = FormLayout.Fichero(_("PGN Format"), "%s (*.pgn)" % _("PGN Format"), True, anchoMinimo=280, ficheroDefecto=path_pgn) liBlunders.append((config, "")) liBlunders.append((_("Also add complete game to PGN") + ":", False)) liBlunders.append(SEPARADOR) eti = '"%s"' % _("Find best move") liBlunders.append((_X(_("Add to the training %1 with the name"), eti) + ":", "")) liBrilliancies = [SEPARADOR] liBrilliancies.append((FormLayout.Spinbox(_("Minimum depth"), 3, 30, 50), alm.dpbrilliancies)) liBrilliancies.append((FormLayout.Spinbox(_("Minimum gain points"), 30, 30000, 50), alm.ptbrilliancies)) liBrilliancies.append(SEPARADOR) path_fns = fileNext("Brilliancies", "fns") path_pgn = fileNext("Brilliancies", "pgn") liBrilliancies.append((None, _("Generate a training file with these moves"))) config = FormLayout.Fichero(_("List of FENs"), "%s (*.fns)" % _("List of FENs"), True, anchoMinimo=280, ficheroDefecto=path_fns) liBrilliancies.append((config, "")) config = FormLayout.Fichero(_("PGN Format"), "%s (*.pgn)" % _("PGN Format"), True, anchoMinimo=280, ficheroDefecto=path_pgn) liBrilliancies.append((config, "")) liBrilliancies.append((_("Also add complete game to PGN"), False)) liBrilliancies.append(SEPARADOR) eti = '"%s"' % _("Find best move") liBrilliancies.append((_X(_("Add to the training %1 with the name"), eti) + ":", "")) return liBlunders, liBrilliancies
def configurar(self): # Datos li_gen = [(None, None)] # # Motor mt = self.configuration.tutor_inicial if self.engine is None else self.engine li_combo = [mt] for name, key in self.configuration.comboMotoresMultiPV10(): li_combo.append((key, name)) li_gen.append((_("Engine") + ":", li_combo)) # # Segundos a pensar el tutor config = FormLayout.Spinbox(_("Duration of engine analysis (secs)"), 1, 99, 50) li_gen.append((config, self.segundos)) # Pruebas config = FormLayout.Spinbox(_("N. of tests"), 1, 40, 40) li_gen.append((config, self.pruebas)) # Fichero config = FormLayout.Fichero(_("File"), "%s (*.fns);;%s PGN (*.pgn)" % (_("List of FENs"), _("File")), False, anchoMinimo=280) li_gen.append((config, self.fns)) # Editamos resultado = FormLayout.fedit(li_gen, title=_("Configuration"), parent=self, icon=Iconos.Opciones()) if resultado: accion, li_resp = resultado self.engine = li_resp[0] self.segundos = li_resp[1] self.pruebas = li_resp[2] self.fns = li_resp[3] param = UtilSQL.DictSQL(self.configuration.ficheroDailyTest, tabla="parametros") param["ENGINE"] = self.engine param["SEGUNDOS"] = self.segundos param["PRUEBAS"] = self.pruebas param["FNS"] = self.fns param.close()
def command(self): separador = FormLayout.separador li_gen = [separador] li_gen.append(separador) config = FormLayout.Fichero(_("File"), "exe" if Code.is_windows else "*", False) li_gen.append((config, "")) for num in range(1, 11): li_gen.append(("%s:" % (_("Argument %d") % num), "")) li_gen.append(separador) resultado = FormLayout.fedit(li_gen, title=_("Command"), parent=self, anchoMinimo=600, icon=Iconos.Terminal()) if resultado: nada, resp = resultado command = resp[0] liArgs = [] if not command or not os.path.isfile(command): return for x in range(1, len(resp)): arg = resp[x].strip() if arg: liArgs.append(arg) um = QTUtil2.unMomento(self) me = Engines.Engine(path_exe=command, args=liArgs) li_uci = me.read_uci_options() um.final() if not li_uci: QTUtil2.message_bold( self, _X( _("The file %1 does not correspond to a UCI engine type." ), command)) return None # Editamos w = WEngine(self, self.lista_motores, me) if w.exec_(): self.lista_motores.append(me) self.grid.refresh() self.grid.gobottom(0) self.grabar()
def command(self): separador = FormLayout.separador liGen = [separador] liGen.append(separador) config = FormLayout.Fichero(_("File"), "exe", False) liGen.append((config, "")) for num in range(1, 11): liGen.append((_("Argument %d") % num + ":", "")) liGen.append(separador) resultado = FormLayout.fedit(liGen, title=_("Command"), parent=self, anchoMinimo=600, icon=Iconos.Terminal()) if resultado: nada, resp = resultado command = resp[0] liArgs = [] if not command or not os.path.isfile(command): return for x in range(1, len(resp)): arg = resp[x].strip() if arg: liArgs.append(arg) um = QTUtil2.unMomento(self) me = MotoresExternos.MotorExterno() resp = me.leerUCI(command, liArgs) um.final() if not resp: QTUtil2.mensaje( self, _X( _("The file %1 does not correspond to a UCI engine type." ), command)) return None # Editamos w = WMotor(self, self.listaMotores, me) if w.exec_(): self.listaMotores.nuevo(me) self.grid.refresh() self.grid.gobottom(0) self.grabar()
def opciones(parent, configuracion): separador = (None, None) # Datos generales liGen = [separador] # # Nombre del jugador liGen.append((_("Player's name") + ":", configuracion.jugador)) # # Estilo liGen.append((_("Window style") + ":", configuracion.estilos())) liTraducciones = configuracion.listaTraducciones() trActual = configuracion.traductor if configuracion.traductor else "en" li = [trActual] for k, trad, porc, author in liTraducciones: rotulo = "%s" % trad if int(porc) < 90: rotulo += " (%s%%)"%porc li.append((k, rotulo)) liGen.append((_("Language") + ":", li)) liGen.append(separador) liGen.append((_("Check for updates at startup") + ":", configuracion.checkforupdate)) # Engines liEng = [separador] liMedidas = [configuracion.centipawns, (True, "%s = 100 %s -> 64, 19, -19, +23, -120, +130" % (_("One pawn"), _("points"))), (False, "%s = 1.00 %s -> 0.64, 0.19, -0.19, +0.23, -1.20, +1.30" % (_("One pawn"), _("points")))] liEng.append((_("By showing scores from the engines") + ":", liMedidas)) liEng.append(separador) liEng.append((_("OS 64bits BMI2 compatible") + ":", configuracion.bmi2)) liEng.append(separador) liEng.append((_("Do not work in background when possible") + ":", configuracion.notbackground)) # Aspect liAsp = [] liAsp.append((_("By default") + ":", False)) liAsp.append(separador) ## font general liAsp.append((FormLayout.FontCombobox(_("Font")), configuracion.familia)) liAsp.append(separador) ## Menus liAsp.append((None, _("Menus") + ":")) liAsp.append((FormLayout.Spinbox(_("Font size"), 5, 64, 60), configuracion.puntosMenu)) liAsp.append((_("Bold") + ":", configuracion.boldMenu)) ## Toolbars liAsp.append(separador) liAsp.append((None, _("Toolbars") + ":")) liAsp.append((FormLayout.Spinbox(_("Font size"), 5, 64, 60), configuracion.puntosTB)) liAsp.append((_("Bold") + ":", configuracion.boldTB)) li = ( (_("Only display the icon"), QtCore.Qt.ToolButtonIconOnly), (_("Only display the text"), QtCore.Qt.ToolButtonTextOnly), (_("The text appears beside the icon"), QtCore.Qt.ToolButtonTextBesideIcon), (_("The text appears under the icon"), QtCore.Qt.ToolButtonTextUnderIcon) ) config = FormLayout.Combobox(_("Icons"), li) liAsp.append((config, configuracion.iconsTB)) ## PGN table liAsp.append(separador) liAsp.append((None, _("PGN table") + ":")) liAsp.append((FormLayout.Spinbox(_("Width"), 283, 1000, 70), configuracion.anchoPGN)) liAsp.append((FormLayout.Spinbox(_("Height of each row"), 18, 99, 40), configuracion.altoFilaPGN)) liAsp.append((FormLayout.Spinbox(_("Font size"), 10, 99, 40), configuracion.puntosPGN)) liAsp.append((_("PGN always in English") + ":", configuracion.siNomPiezasEN)) liAsp.append((_("PGN with figurines") + ":", configuracion.figurinesPGN)) liAsp.append(separador) liAsp.append((FormLayout.Spinbox(_("Font size of information labels"), 8, 30, 40), configuracion.tamFontRotulos)) # Sonidos liSon = [separador] liSon.append(separador) # Si a_adimos sonido tras cada jugada liSon.append((_("Beep after opponent's move") + ":", configuracion.siSuenaBeep)) liSon.append(separador) liSon.append((None, _("Sound on in") + ":")) liSon.append((_("Results") + ":", configuracion.siSuenaResultados)) liSon.append((_("Rival moves") + ":", configuracion.siSuenaJugada)) liSon.append(separador) liSon.append((_("Activate sounds with our moves") + ":", configuracion.siSuenaNuestro)) liSon.append(separador) # Tutor liTT = [separador] liTT.append((_("Engine") + ":", configuracion.ayudaCambioTutor())) liTT.append((_("Duration of tutor analysis (secs)") + ":", float(configuracion.tiempoTutor / 1000.0))) li = [(_("Maximum"), 0)] for x in (1, 3, 5, 10, 15, 20, 30, 40, 50, 75, 100, 150, 200): li.append((str(x), x)) config = FormLayout.Combobox(_("Number of moves evaluated by engine(MultiPV)"), li) liTT.append((config, configuracion.tutorMultiPV)) liTT.append(separador) liTT.append((_("Tutor enabled"), configuracion.tutorActivoPorDefecto)) liTT.append(separador) liTT.append((None, _("Sensitivity"))) liTT.append((FormLayout.Spinbox(_("Minimum difference in points"), 0, 1000, 70), configuracion.tutorDifPts)) liTT.append((FormLayout.Spinbox(_("Minimum difference in %"), 0, 1000, 70), configuracion.tutorDifPorc)) # Modo no competitivo liNC = [separador] liNC.append((FormLayout.Spinbox(_("Lucas-Elo"), 0, 3200, 70), configuracion.eloNC)) liNC.append((FormLayout.Spinbox(_("Tourney-Elo"), 0, 3200, 70), configuracion.micheloNC)) liNC.append((FormLayout.Spinbox(_("Fics-Elo"), 0, 3200, 70), configuracion.ficsNC)) liNC.append((FormLayout.Spinbox(_("Fide-Elo"), 0, 3200, 70), configuracion.fideNC)) # Salvado automatico liSA = [separador] config = FormLayout.Fichero(_("Autosave to a PGN file"), "pgn", True) liSA.append((config, configuracion.salvarFichero)) liSA.append((_("Won games") + ":", configuracion.salvarGanados)) liSA.append((_("Lost/Drawn games") + ":", configuracion.salvarPerdidos)) liSA.append((_("Unfinished games") + ":", configuracion.salvarAbandonados)) liSA.append(separador) liSA.append((_("Save as variant tutor's suggestion") + ":", configuracion.guardarVariantesTutor)) liSA.append(separador) config = FormLayout.Fichero(_("Autosave to a CSV file moves played"), "csv", True) liSA.append((config, configuracion.salvarCSV)) # Boards liT = [separador] # Mostrando el tutor # kTutorH, kTutorH2_1, kTutorH1_2, kTutorV liPosTutor = [configuracion.vistaTutor, (kTutorH, _("Horizontal")), (kTutorH2_1, _("Horizontal") + " 2+1"), (kTutorH1_2, _("Horizontal") + " 1+2"), (kTutorV, _("Vertical"))] liT.append((_("Tutor boards position") + ":", liPosTutor)) liT.append(separador) liT.append((_("Visual effects") + ":", configuracion.efectosVisuales)) drap = {1: 100, 2: 150, 3: 200, 4: 250, 5: 300, 6: 350, 7: 400, 8: 450, 9: 500} drapV = {} for x in drap: drapV[drap[x]] = x liT.append((FormLayout.Dial("%s (%s=1)" % (_("Speed"), _("Default")), 1, len(drap), siporc=False), drapV.get(configuracion.rapidezMovPiezas, 100))) liT.append(separador) liMouseSH = [configuracion.siAtajosRaton, (False, _("Type fixed: you must always indicate origin and destination")), (True, _("Type predictive: program tries to guess your intention"))] liT.append((_("Mouse shortcuts") + ":", liMouseSH)) liT.append((_("Show candidates") + ":", configuracion.showCandidates)) liT.append((_("Show arrows of variants") + ":", configuracion.showVariantes)) liT.append(separador) liT.append((_("Show cursor when engine is thinking") + ":", configuracion.cursorThinking)) liT.append(separador) liT.append((_("Enable captured material window by default") + ":", configuracion.siActivarCapturas)) liMat = [configuracion.tipoMaterial, ("D", _("Difference material")), ("C", _("Captured material at beginning")), ("M", _("Material advantage"))] liT.append((_("Show material") + ":", liMat)) liT.append(separador) liT.append((_("Enable information panel by default") + ":", configuracion.siActivarInformacion)) liT.append(separador) liT.append((_X(_("Enable %1"), _("DGT board")) + ":", configuracion.siDGT)) liT.append(separador) # liT.append((FormLayout.Dial(_("Opacity of tool icon"), 1, 9, siporc=False), configuracion.opacityToolBoard)) liT.append((_("Show configuration icon"), configuracion.opacityToolBoard > 6)) liPos = [configuracion.positionToolBoard, ("B", _("Bottom")), ("T", _("Top"))] liT.append((_("Configuration icon position" + ":"), liPos)) liT.append(separador) lista = [] lista.append((liGen, _("General"), "")) lista.append((liSon, _("Sounds"), "")) lista.append((liTT, _("Tutor"), "")) lista.append((liT, _("Boards"), "")) lista.append((liEng, _("Engines"), "")) lista.append((liAsp, _("Appearance"), "")) lista.append((liSA, _("Autosave"), "")) lista.append((liNC, _("Non competitive mode"), "")) # Editamos resultado = FormLayout.fedit(lista, title=_("Configuration"), parent=parent, anchoMinimo=640, icon=Iconos.Opciones()) if resultado: accion, resp = resultado liGen, liSon, liTT, liT, liEng, liAsp, liSA, liNC = resp (configuracion.jugador, configuracion.estilo, configuracion.traductor, configuracion.checkforupdate) = liGen porDefecto = liAsp[0] if porDefecto: liAsp = "", 11, False, 11, False, QtCore.Qt.ToolButtonTextUnderIcon, 283, 22, 10, False, True, 10 else: del liAsp[0] (configuracion.familia, configuracion.puntosMenu, configuracion.boldMenu, configuracion.puntosTB, configuracion.boldTB, configuracion.iconsTB, configuracion.anchoPGN, configuracion.altoFilaPGN, configuracion.puntosPGN, configuracion.siNomPiezasEN, configuracion.figurinesPGN, configuracion.tamFontRotulos) = liAsp if configuracion.familia == "System": configuracion.familia = "" (configuracion.siSuenaBeep, configuracion.siSuenaResultados, configuracion.siSuenaJugada, configuracion.siSuenaNuestro) = liSon (configuracion.tutor.clave, tiempoTutor, configuracion.tutorMultiPV, configuracion.tutorActivoPorDefecto, configuracion.tutorDifPts, configuracion.tutorDifPorc) = liTT configuracion.tiempoTutor = int(tiempoTutor * 1000) (configuracion.eloNC, configuracion.micheloNC, configuracion.ficsNC, configuracion.fideNC) = liNC (configuracion.centipawns, configuracion.bmi2, configuracion.notbackground) = liEng (configuracion.vistaTutor, configuracion.efectosVisuales, rapidezMovPiezas, configuracion.siAtajosRaton, configuracion.showCandidates, configuracion.showVariantes, configuracion.cursorThinking, configuracion.siActivarCapturas, configuracion.tipoMaterial, configuracion.siActivarInformacion, siDGT, toolIcon, configuracion.positionToolBoard) = liT configuracion.opacityToolBoard = 10 if toolIcon else 1 configuracion.rapidezMovPiezas = drap[rapidezMovPiezas] if configuracion.siDGT != siDGT: if siDGT: DGT.ponON() configuracion.siDGT = siDGT (configuracion.salvarFichero, configuracion.salvarGanados, configuracion.salvarPerdidos, configuracion.salvarAbandonados, configuracion.guardarVariantesTutor, configuracion.salvarCSV) = liSA configuracion.salvarCSV = Util.dirRelativo(configuracion.salvarCSV) return True else: return False
def editar(self, una, icono): if una is None: una = {} # Datos basicos liGen = [(None, None)] liGen.append((FormLayout.Editbox(_("Name")), una.get("NOMBRE", ""))) liGen.append((None, None)) config = FormLayout.Fichero(_("Debug file"), "txt", True) liGen.append((config, una.get("DEBUG", ""))) liGen.append((None, None)) liGen.append((None, _("Serious errors, select the best move if:"))) liGen.append((FormLayout.Editbox(_("Mate is less than or equal to"), tipo=int, ancho=50), una.get("MAXMATE", 0))) liGen.append(( FormLayout.Editbox(_("The loss of points is greater than"), tipo=int, ancho=50), una.get("MINDIFPUNTOS", 0), )) liGen.append((None, None)) liGen.append(( FormLayout.Editbox( _("Max. loss of points per move by the <br> engine to reach a leveled evaluation" ), tipo=int, ancho=50, ), una.get("ATERRIZAJE", 50), )) # Apertura liA = [(None, None)] config = FormLayout.Fichero(_("Polyglot book"), "bin", False) liA.append((config, una.get("BOOK", ""))) # Medio juego liMJ = [(None, None)] # # Ajustar liMJ.append((FormLayout.Combobox(_("Strength"), self.listaAjustes(False)), una.get("AJUSTAR", ADJUST_BETTER))) # Movimiento siguiente liMJ.append((None, _("In the next move"))) trlistaSG = [ _("To move a pawn"), _("Advance piece"), _("Make check"), _("Capture") ] listaSG = ["MOVERPEON", "AVANZARPIEZA", "JAQUE", "CAPTURAR"] for n, opcion in enumerate(listaSG): liMJ.append((FormLayout.Spinbox(trlistaSG[n], -2000, +2000, 50), una.get(opcion, 0))) # Movimientos previstos liMJ.append((None, _("In the expected moves"))) trlistaPR = [ _("Keep the two bishops"), _("Advance"), _("Make check"), _("Capture") ] listaPR = ["2B", "AVANZAR", "JAQUE", "CAPTURAR"] for n, opcion in enumerate(listaPR): liMJ.append((FormLayout.Spinbox(trlistaPR[n], -2000, +2000, 50), una.get(opcion + "PR", 0))) # Final liF = [(None, None)] # Ajustar liF.append((FormLayout.Combobox(_("Strength"), self.listaAjustes(False)), una.get("AJUSTARFINAL", ADJUST_BETTER))) liF.append((FormLayout.Spinbox(_("Maximum pieces at this stage"), 0, 32, 50), una.get("MAXPIEZASFINAL", 0))) liF.append((None, None)) # Movimiento siguiente liF.append((None, _("In the next move"))) for n, opcion in enumerate(listaSG): liF.append((FormLayout.Spinbox(trlistaSG[n], -2000, +2000, 50), una.get(opcion + "F", 0))) # Movimientos previstos liF.append((None, _("In the expected moves"))) for n, opcion in enumerate(listaPR): liF.append((FormLayout.Spinbox(trlistaPR[n], -2000, +2000, 50), una.get(opcion + "PRF", 0))) while True: lista = [] lista.append((liGen, _("Basic data"), "")) lista.append((liA, _("Opening"), "")) lista.append((liMJ, _("Middlegame"), "")) lista.append((liF, _("Endgame"), "")) resultado = FormLayout.fedit(lista, title=_("Personalities"), parent=self.owner, anchoMinimo=460, icon=icono) if resultado: accion, liResp = resultado liGenR, liAR, liMJR, liFR = liResp name = liGenR[0].strip() if not name: QTUtil2.message_error(self.owner, _("Missing name")) continue una = {} # Base una["NOMBRE"] = name una["DEBUG"] = liGenR[1] una["MAXMATE"] = liGenR[2] una["MINDIFPUNTOS"] = liGenR[3] una["ATERRIZAJE"] = liGenR[4] # Apertura una["BOOK"] = liAR[0] # Medio una["AJUSTAR"] = liMJR[0] for num, opcion in enumerate(listaSG): una[opcion] = liMJR[num + 1] nSG = len(listaSG) + 1 for num, opcion in enumerate(listaPR): una[opcion + "PR"] = liMJR[num + nSG] # Final una["AJUSTARFINAL"] = liFR[0] una["MAXPIEZASFINAL"] = liFR[1] for num, opcion in enumerate(listaSG): una[opcion + "F"] = liFR[num + 2] nSG = len(listaSG) + 2 for num, opcion in enumerate(listaPR): una[opcion + "PRF"] = liFR[num + nSG] return una return None
def savePGN(owner, pgn): configuracion = VarGen.configuracion dicVariables = configuracion.leeVariables("SAVEPGN") liGen = [(None, None)] liHistorico = dicVariables.get("LIHISTORICO") config = FormLayout.Fichero(_("File to save"), "pgn", True, liHistorico=liHistorico, anchoMinimo=300) liGen.append((config, "")) #Codec liCodecs = [k for k in set(v for k, v in aliases.iteritems())] liCodecs.sort() liCodecs = [(k, k) for k in liCodecs] liCodecs.insert(0, (_("Same as file"), "file")) liCodecs.insert(0, ("%s: UTF-8" % _("By default"), "default")) config = FormLayout.Combobox(_("Write with the codec"), liCodecs) codec = dicVariables.get("CODEC", "default") liGen.append((config, codec)) #Overwrite liGen.append((_("Overwrite"), dicVariables.get("OVERWRITE", False))) #Remove comments liGen.append((_("Remove comments and variations"), dicVariables.get("REMCOMMENTSVAR", False))) # Editamos resultado = FormLayout.fedit(liGen, title=_("Save PGN"), parent=owner, icon=Iconos.PGN()) if resultado is None: return accion, liResp = resultado fichero, codec, overwrite, remcommentsvar = liResp if not fichero: return if not liHistorico: liHistorico = [] if fichero in liHistorico: del liHistorico[liHistorico.index(fichero)] chardet liHistorico.insert(0, fichero) dicVariables["LIHISTORICO"] = liHistorico[:20] dicVariables["CODEC"] = codec dicVariables["OVERWRITE"] = overwrite dicVariables["REMCOMMENTSVAR"] = remcommentsvar configuracion.escVariables("SAVEPGN", dicVariables) carpeta, name = os.path.split(fichero) if carpeta != configuracion.dirSalvados: configuracion.dirSalvados = carpeta configuracion.graba() if remcommentsvar: pgn = PGN.rawPGN(pgn) pgn = pgn.replace("\n", "\r\n") modo = "w" if overwrite else "a" if not overwrite: if not Util.existeFichero(fichero): modo = "w" if codec == "default": codec = "utf-8" elif codec == "file": codec = "utf-8" if Util.existeFichero(fichero): with open(fichero) as f: u = chardet.universaldetector.UniversalDetector() for n, x in enumerate(f): u.feed(x) if n == 1000: break u.close() codec = u.result.get("encoding", "utf-8") try: f = codecs.open(fichero, modo, codec, 'ignore') if modo == "a": f.write("\r\n\r\n") f.write(pgn) f.close() QTUtil2.mensajeTemporal(owner, _("Saved"), 1.2) except: QTUtil.ponPortapapeles(pgn) QTUtil2.mensError( owner, "%s : %s\n\n%s" % (_("Unable to save"), fichero, _("It is saved in the clipboard to paste it wherever you want.")))