示例#1
0
 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() 
示例#2
0
 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() 
示例#3
0
    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")  
示例#4
0
    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)
示例#5
0
 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)
示例#6
0
    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)
示例#8
0
 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
示例#9
0
 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()
示例#10
0
 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()
示例#11
0
 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() 
示例#12
0
 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)
示例#13
0
 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()
示例#14
0
 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))
示例#15
0
 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()
示例#16
0
    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")
示例#17
0
 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)
示例#18
0
 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))
示例#19
0
    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)
示例#20
0
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
示例#21
0
 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))	
示例#22
0
 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))