def Valider(self): # Récupération des données IDgroupe = None for ordre, nom, IDgroupeTmp in self.liste_groupes : if nom == self.spinner_groupe.text : IDgroupe = IDgroupeTmp heure_debut = self.ctrl_heure_debut.text heure_fin = self.ctrl_heure_fin.text quantite = int(self.ctrl_quantite.text) etat = self.etat # Vérification de la cohérence des données if heure_debut > heure_fin : MsgBox.info(text=u"L'heure de début ne peut pas être supérieure à l'heure de fin !", title="Erreur de saisie", size_hint=(0.6, 0.6)) return False # Enregistre les modifications dans le dictConso self.dictConso["heure_debut"] = heure_debut self.dictConso["heure_fin"] = heure_fin self.dictConso["quantite"] = quantite self.dictConso["etat"] = etat self.dictConso["IDgroupe"] = IDgroupe # Renvoi des données if self.callback != None : self.callback(typeAction=self.typeAction, dictConso=self.dictConso) self.dismiss()
def OnBoutonEnvoyer(self): # Vérifie que le nom de l'appareil a bien été renseigné avant config = UTILS_Config.Config() nom_appareil = config.Lire(section="general", option="nom_appareil", defaut="") ID_appareil = config.Lire(section="general", option="ID_appareil", defaut="") config.Close() if nom_appareil == "" : MsgBox.info(text="Vous devez obligatoirement renseigner le nom de l'appareil ! \n(Menu principal > Paramètres > Généralités)", title="Erreur", size_hint=(0.6, 0.6)) return DB = GestionDB.DB(typeFichier="actions") req = """SELECT IDparametre, nom, valeur FROM parametres;""" DB.ExecuterReq(req) listeTemp = DB.ResultatReq() dictTemp = {} for IDparametre, nom, valeur in listeTemp : dictTemp[nom] = IDparametre if dictTemp.has_key("nom_appareil") : DB.ReqMAJ("parametres", [("nom", "nom_appareil"), ("valeur", nom_appareil)], "IDparametre", dictTemp["nom_appareil"]) else : DB.ReqInsert("parametres", [("nom", "nom_appareil"), ("valeur", nom_appareil)]) if dictTemp.has_key("ID_appareil") : DB.ReqMAJ("parametres", [("nom", "ID_appareil"), ("valeur", ID_appareil)], "IDparametre", dictTemp["ID_appareil"]) else : DB.ReqInsert("parametres", [("nom", "ID_appareil"), ("valeur", ID_appareil)]) DB.Close() # Lancement du transfert typeTransfert = self.GetTypeTransfert() if typeTransfert == "serveur" : self.StartServer(action="envoyer") if typeTransfert == "ftp" : self.StartFTP(action="envoyer") if typeTransfert == "manuel" : self.StartManuel(action="envoyer")
def Afficher_page(self, code_page="", label_page="", direction='left'): if self.code_page == "consommations" : self.dict_pages["consommations"]["page"].On_leave() if code_page == "parametres" : popup = Popup_parametres(callback=self.MAJ_page) popup.open() return # Chargement d'une page depuis son label if label_page != "" : for code_page, dictPage in self.dict_pages.iteritems() : if dictPage["label"] == label_page : break # Chargement d'une page depuis son code if self.code_page == code_page : return # Vérifications avant chargement page if code_page in ("liste_individus", "consommations") : # Vérifie qu'un fichier de données est chargé if self.fichier_valide == False : MsgBox.info(text="Action impossible : Aucun fichier n'est chargé !", title="Erreur", size_hint=(0.6, 0.6)) return # Vérifie que l'utilisateur est identifié if self.IDutilisateur == 0 : popup = SaisieMdp(title="Saisissez votre mot de passe utilisateur", callback=self.VerifieMdp, code_page=code_page) popup.open() return # Chargement de la page self.Charger_page(code_page, direction=direction)
def VerifieMdp(self, mdp="", code_page=None, silencieux=False): # Vérification du mot de passe utilisateur if IMPORT_SHA256 : mdpcrypt = SHA256.new(mdp.encode('utf-8')).hexdigest() else : mdpcrypt = "" DB = GestionDB.DB() req = "SELECT IDutilisateur, nom, prenom FROM utilisateurs WHERE mdp='%s' or mdp='%s';" % (mdpcrypt, mdp) DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() DB.Close() if len(listeDonnees) > 0 : self.IDutilisateur, nom, prenom = listeDonnees[0] self.nomUtilisateur = "%s %s" % (nom, prenom) self.mdpUtilisateur = mdp else : self.IDutilisateur == 0 self.nomUtilisateur = "" self.mdpUtilisateur = "" if self.IDutilisateur == 0 and silencieux == False : MsgBox.info(text="Le mot de passe utilisateur n'est pas valide !", title="Accès refusé", size_hint=(0.6, 0.6)) return # Chargement de la page souhaitée if code_page != None : self.Charger_page(code_page)
def VerifieMdp(self, mdp="", code_page=None, silencieux=False): # Vérification du mot de passe utilisateur if IMPORT_SHA256: mdpcrypt = SHA256.new(mdp.encode('utf-8')).hexdigest() else: mdpcrypt = "" DB = GestionDB.DB() req = "SELECT IDutilisateur, nom, prenom FROM utilisateurs WHERE mdp='%s' or mdp='%s';" % ( mdpcrypt, mdp) DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() DB.Close() if len(listeDonnees) > 0: self.IDutilisateur, nom, prenom = listeDonnees[0] self.nomUtilisateur = "%s %s" % (nom, prenom) self.mdpUtilisateur = mdp else: self.IDutilisateur == 0 self.nomUtilisateur = "" self.mdpUtilisateur = "" if self.IDutilisateur == 0 and silencieux == False: MsgBox.info(text="Le mot de passe utilisateur n'est pas valide !", title="Accès refusé", size_hint=(0.6, 0.6)) return # Chargement de la page souhaitée if code_page != None: self.Charger_page(code_page)
def MyMsgBox(msgText, msgType, msgTitle): # Auf den Kontext achten: msgbox = MsgBox(XSCRIPTCONTEXT.getComponentContext()) msgbox.addButton("OK") msgbox.addButton("Cancel") msgbox.renderFromButtonSize() msgbox.numberOflines = 2 return msgbox.show(msgText, msgType, msgTitle)
def build(self): root = Widget() MsgBox.question(text="Are you able to answer for this question?", title="hello world", yes_callback=lambda: MsgBox.info(text='You said Yes'), no_callback=lambda: MsgBox.info(text='You said No'), size_hint=(0.6, 0.6) ) return root
def show_credits(self): msg = MsgBox(text="This game is created by software engineer Niko Skrypnik and "\ "designers from Sunny Studio and powered with Kivy - open source"\ "framework for creating cross-platform applications on Python", font_size='23dp', type='info', size_hint=(0.95, 0.95), buttons_padding='5dp', ) msg.open()
def show_help(self): msg = MsgBox(text="Path of the Rabbit game is the simple game"\ " with indirect control where you should help the main hero(Rabbit)"\ " to achieve the Holly Carrot. You should help him to avoid meet with"\ " cruel and dangerous Hare which wants to kill our hero.", font_size='23dp', type='info', size_hint=(0.95, 0.95), buttons_padding='5dp', ) msg.open()
def Valider(self, chemin=None, listeFichiers=[]): if self.nomFichier != None : nomFichier = self.nomFichier else : if len(listeFichiers) == 0 : MsgBox.info(text="Vous devez selectionner un fichier !", title="Erreur", size_hint=(0.6, 0.6)) return nomFichier = listeFichiers[0] self.callback(chemin, nomFichier) self.dismiss()
def ChargerFichier(self, chemin="", nomFichier=""): """ Recevoir un fichier manuel """ # Recherche du IDfichier en cours config = UTILS_Config.Config() IDfichier = config.Lire(section="fichier", option="ID", defaut="") config.Close() # Vérification du fichier if "data_%s" % IDfichier not in nomFichier : MsgBox.info(text="Récuperation impossible : Le fichier doit commencer par 'data_%s' ! " % IDfichier, title="Echec de la recuperation", size_hint=(0.6, 0.6)) return self.ReceptionFichier(nomFichier)
def go_to_menu(self,btn): GameContext.game.pause(self.button_play) def _yes_callback(): _cb = GameContext.app.back_to_menu GameContext.app.fade_to_black(_cb) msg = MsgBox(text="You are about to go to main menu.\nAre you sure?", font_size='34dp', type='question', size_hint=(0.9, 0.8), buttons_padding='40dp', no_callback=lambda: GameContext.game.resume(self.button_play), yes_callback=_yes_callback ) msg.open()
def StartServer(self, action="envoyer"): # Récupération des paramètres de connexion dans le config config = UTILS_Config.Config() adresse = config.Lire(section="synchronisation", option="serveur_adresse", defaut="") port = config.Lire(section="synchronisation", option="serveur_port", defaut="") config.Close() # Connexion au serveur try : reactor.connectTCP(adresse, int(port), EchoFactory(self, action=action), timeout=5) except Exception, err: self.EcritLog("Echec de la connexion : Verifiez les paramètres !") MsgBox.info(text="Verifiez les paramètres de connexion !", title="Echec de la connexion", size_hint=(0.6, 0.6))
def Valider(self, chemin=None, listeFichiers=[]): if self.nomFichier != None: nomFichier = self.nomFichier else: if len(listeFichiers) == 0: MsgBox.info(text="Vous devez selectionner un fichier !", title="Erreur", size_hint=(0.6, 0.6)) return nomFichier = listeFichiers[0] self.callback(chemin, nomFichier) self.dismiss()
def OnBoutonEnvoyer(self): # Vérifie que le nom de l'appareil a bien été renseigné avant config = UTILS_Config.Config() nom_appareil = config.Lire(section="general", option="nom_appareil", defaut="") ID_appareil = config.Lire(section="general", option="ID_appareil", defaut="") config.Close() if nom_appareil == "": MsgBox.info( text= "Vous devez obligatoirement renseigner le nom de l'appareil ! \n(Menu principal > Paramètres > Généralités)", title="Erreur", size_hint=(0.6, 0.6)) return DB = GestionDB.DB(typeFichier="actions") req = """SELECT IDparametre, nom, valeur FROM parametres;""" DB.ExecuterReq(req) listeTemp = DB.ResultatReq() dictTemp = {} for IDparametre, nom, valeur in listeTemp: dictTemp[nom] = IDparametre if "nom_appareil" in dictTemp: DB.ReqMAJ("parametres", [("nom", "nom_appareil"), ("valeur", nom_appareil)], "IDparametre", dictTemp["nom_appareil"]) else: DB.ReqInsert("parametres", [("nom", "nom_appareil"), ("valeur", nom_appareil)]) if "ID_appareil" in dictTemp: DB.ReqMAJ("parametres", [("nom", "ID_appareil"), ("valeur", ID_appareil)], "IDparametre", dictTemp["ID_appareil"]) else: DB.ReqInsert("parametres", [("nom", "ID_appareil"), ("valeur", ID_appareil)]) DB.Close() # Lancement du transfert typeTransfert = self.GetTypeTransfert() if typeTransfert == "serveur": self.StartServer(action="envoyer") if typeTransfert == "ftp": self.StartFTP(action="envoyer") if typeTransfert == "manuel": self.StartManuel(action="envoyer")
def ChargerFichier(self, chemin="", nomFichier=""): """ Recevoir un fichier manuel """ # Recherche du IDfichier en cours config = UTILS_Config.Config() IDfichier = config.Lire(section="fichier", option="ID", defaut="") config.Close() # Vérification du fichier if "data_%s" % IDfichier not in nomFichier: MsgBox.info( text= "Récuperation impossible : Le fichier doit commencer par 'data_%s' ! " % IDfichier, title="Echec de la recuperation", size_hint=(0.6, 0.6)) return self.ReceptionFichier(nomFichier)
def StartServer(self, action="envoyer"): # Récupération des paramètres de connexion dans le config config = UTILS_Config.Config() adresse = config.Lire(section="synchronisation", option="serveur_adresse", defaut="") port = config.Lire(section="synchronisation", option="serveur_port", defaut="") config.Close() # Connexion au serveur try: reactor.connectTCP(adresse, int(port), EchoFactory(self, action=action), timeout=5) except Exception as err: self.EcritLog(u"Echec de la connexion : Verifiez les paramètres !") MsgBox.info(text=u"Vérifiez les paramètres de connexion !", title="Echec de la connexion", size_hint=(0.6, 0.6))
def Afficher_page(self, code_page="", label_page="", direction='left'): if self.code_page == "consommations": self.dict_pages["consommations"]["page"].On_leave() if code_page == "parametres": popup = Popup_parametres(callback=self.MAJ_page) popup.open() return # Chargement d'une page depuis son label if label_page != "": for code_page, dictPage in self.dict_pages.items(): if dictPage["label"] == label_page: break # Chargement d'une page depuis son code if self.code_page == code_page: return # Vérifications avant chargement page if code_page in ("liste_individus", "consommations"): # Vérifie qu'un fichier de données est chargé if self.fichier_valide == False: MsgBox.info( text="Action impossible : Aucun fichier n'est chargé !", title="Erreur", size_hint=(0.6, 0.6)) return # Vérifie que l'utilisateur est identifié if self.IDutilisateur == 0: popup = SaisieMdp( title="Saisissez votre mot de passe utilisateur", callback=self.VerifieMdp, code_page=code_page) popup.open() return # Chargement de la page self.Charger_page(code_page, direction=direction)
def main(stdscr): # locale.setlocale(locale.LC_ALL, '') curses.nonl() # constants related to rooms room_max_size = 15 room_min_size = 5 max_rooms = 15 # constants related to padding size # either height/width has to be larger than their counterparts of map # becuase writing on the bottom right corner of the padding causes an error height = 151 width = 150 # constants related to map size map_height = 150 map_width = 150 # get size of the screen for positioning # FIXME: as of now, we are going to assume that stdscr size doesn't change # stdscr is automatically init by wrapper() base_height, base_width = stdscr.getmaxyx() # constants related to view size # TODO: change view size in relation to screen size view_width = 100 view_height = 24 # default setups init_colors() curses.curs_set(0) # hide cursor # win has to be a pad, so that scrolling is easily supported win = curses.newpad(height, width) win.keypad(True) win.bkgd(' ') # msgwin msg_win = curses.newpad(10, 100) msgbox = MsgBox(msg_win, view_width, view_height, base_width, base_height) # bars bar_width = 33 bar_height = 1 bar_win = curses.newwin(bar_height, bar_width, 1, 1) # bar_win.border() combat_module = Combat(hp=30, defense=2, power=5) inventory = Inventory(26) player = Player(combat_module, inventory) entities = [player] game_map = maps.GameMap(map_width, map_height) maps.generate_map(game_map, max_rooms, room_min_size, room_max_size, player, entities) game_state = GameStates.PLAYERS_TURN previous_game_state = game_state # initial compute of fov game_map.compute_fov(player) inventory_menu = Menu(win, "INVENTORY", 30, base_width, base_height) while True: rendering.render_all(win, entities, game_map, view_width, view_height, player, base_width, base_height, msgbox, bar_win, inventory_menu, game_state) action = input_handler.handle_input(win, game_state) mv = action.get('move') pickup = action.get('pickup') show_inventory = action.get('show_inventory') hide_inventory = action.get('hide_inventory') item_at_cursor = action.get('item_at_cursor') inventory_index = action.get('inventory_index') move_cursor = action.get('move_cursor') move_page = action.get('move_page') exit = action.get('exit') inventory_shown = False player_turn_results = [] if mv: dx, dy = mv dest_x = player.x + dx dest_y = player.y + dy if game_map.walkable[dest_x, dest_y]: target = blocking_entity_at_position(entities, dest_x, dest_y) if target: atk_results = player.combat.attack(target) player_turn_results.extend(atk_results) else: move_results = {'move': mv} player_turn_results.append(move_results) elif pickup: for e in entities: if e.item and e.x == player.x and e.y == player.y: pickup_results = player.inventory.add_item(e) player_turn_results.extend(pickup_results) # only acquire one item at one turn break else: msgbox.add("no_item") # Toggle Inventory screen elif show_inventory: msgbox.add("open inven") previous_game_state = game_state game_state = GameStates.SHOW_INVENTORY # FIXME: cursor, page should have a value limit # and it probably should be handled by menus, not here elif exit: # quit game # break pass if GameStates.SHOW_INVENTORY: if move_cursor: inventory_menu.next_item(move_cursor) elif move_page: inventory_menu.next_page(move_page) elif hide_inventory: game_state = previous_game_state elif item_at_cursor: item = inventory_menu.item_at_cursor() if item: # TEMP FIX: check validity of choice at menu? use_results = player.inventory.use_item(item) player_turn_results.extend(use_results) elif inventory_index is not None: # unlike other inputs, inventory_index can be 0, # so compare it with "None" # check will cause input 0 to be ignored item = inventory_menu.item_at(inventory_index) if item: use_results = player.inventory.use_item(item) player_turn_results.extend(use_results) # evaluate results of player turn for result in player_turn_results: movement = result.get('move') dead_entity = result.get('dead') item_added = result.get('item_added') msg = result.get('msg') item_used = result.get('item_used') if movement: dx, dy = movement player.move(dx, dy) game_map.compute_fov(player) if item_added: entities.remove(item_added) if msg: msgbox.add(msg) if dead_entity == player: game_state = GameStates.PLAYER_DEAD if item_used: inventory_shown = True # toggle state only when something is done in PLAYERS_TURN game_state = GameStates.ENEMY_TURN if game_state == GameStates.ENEMY_TURN: # move those with ai modules enemies = (e for e in entities if e.ai) for e in enemies: e_turn_results = e.ai.take_turn(player, game_map, entities) # still a bit WET! for result in e_turn_results: msg = result.get('msg') dead_entity = result.get('dead') if msg: msgbox.add(msg) if dead_entity == player: game_state = GameStates.PLAYER_DEAD # check whether to return to beginning of loop if game_state == GameStates.PLAYER_DEAD: break elif game_state == GameStates.SHOW_INVENTORY: pass #if item was used at screen, keep the inventory opened elif inventory_shown: game_state = GameStates.SHOW_INVENTORY else: game_state = GameStates.PLAYERS_TURN
def Quitter(self, obj=None): MsgBox.question(text="Souhaitez-vous vraiment quitter Nomadhys ?", title="Quitter", yes_callback=lambda: self.stop(), size_hint=(0.6, 0.6))