def _display_payoffs(self): if self._currentsequence >= 0: sequence, ok = QtGui.QInputDialog.getInt( self._le2mserv.gestionnaire_graphique.screen, trans_TC(u"Sequence choice"), trans_TC(u"Choose the sequence"), min=0, max=self._currentsequence, step=1, value=0, ) if ok: self._ecran_gains = DGains(self._le2mserv, sequence) self._ecran_gains.show() else: # no sequence has been run return
class Serveur(object): def __init__(self, le2mserv): self._le2mserv = le2mserv # creation of the menu (will be placed in the "part" menu on the # server screen actions = OrderedDict() actions[trans_TC(u"Configure")] = self._configure actions[ trans_TC(u"Display the parameters") ] = lambda _: self._le2mserv.gestionnaire_graphique.display_information2( utiltools.get_module_info(pms), trans_TC(u"Parameters") ) actions[trans_TC(u"Start")] = lambda _: self._demarrer() actions[trans_TC(u"Form groups for the dictator game")] = self._prepare_dictator actions[trans_TC(u"Display the question after the dictator game")] = lambda _: self._run_questionapresdictator() actions[trans_TC(u"Display payoffs")] = self._display_payoffs self._le2mserv.gestionnaire_graphique.add_topartmenu(u"Team Communication", actions) # ajout d'onglets ------------------------------------------------------ self._onglet_looks = Wlist() self._onglet_essais = Wlist() self._onglet_messages = Wlist() self._le2mserv.gestionnaire_graphique.screen.ui.onglets.addTab(self._onglet_looks, trans_TC(u"Looks of grids")) self._le2mserv.gestionnaire_graphique.screen.ui.onglets.addTab(self._onglet_essais, trans_TC(u"Tries")) self._le2mserv.gestionnaire_graphique.screen.ui.onglets.addTab(self._onglet_messages, trans_TC(u"Messages")) # final question self._le2mserv.gestionnaire_graphique.screen.action_finalquest.triggered.disconnect() self._le2mserv.gestionnaire_graphique.screen.action_finalquest.triggered.connect( lambda _: self._display_questfinal() ) self._currentsequence = -1 @property def onglet_looks(self): return self._onglet_looks @property def onglet_essais(self): return self._onglet_essais @property def onglet_messages(self): return self._onglet_messages def _configure(self): """ To make changes in the parameters :return: """ dconfig = DConfiguration(self._le2mserv.gestionnaire_graphique.screen) if dconfig.exec_(): pms.TEMPS_PARTIE, pms.TREATMENT, pms.GRILLES = dconfig.get_config() self._le2mserv.gestionnaire_graphique.infoserv( [ trans_TC(u"Part time: {}").format(pms.TEMPS_PARTIE), trans_TC(u"Treatment: {}").format(pms.get_treatment(pms.TREATMENT)), trans_TC(u"Grids: {}").format(len(pms.GRILLES)), ] ) @defer.inlineCallbacks def _demarrer(self): # checks of consistency ================================================ if divmod(len(self._le2mserv.gestionnaire_joueurs.get_players()), pms.TAILLE_GROUPES)[1] != 0: self._le2mserv.gestionnaire_graphique.display_error( trans_TC(u"Impossible to form groups of size {} with {} " u"players").format( pms.TAILLE_GROUPES, self._le2mserv.gestionnaire_joueurs.nombre_joueurs ) ) return if not pms.GRILLES: self._le2mserv.gestionnaire_graphique.display_error( trans_TC(u"Grids must be loaded before to start the part") ) return # confirmation start confirmation = self._le2mserv.gestionnaire_graphique.question(trans_TC(u"Start TeamCommunication?")) if not confirmation: return # init part ============================================================ if not self._le2mserv.gestionnaire_experience.has_part("TeamCommunication"): # init part yield (self._le2mserv.gestionnaire_experience.init_part("TeamCommunication", "PartieTC", "RemoteTC", pms)) self._tous = self._le2mserv.gestionnaire_joueurs.get_players("TeamCommunication") else: # uniquement affichage self._le2mserv.gestionnaire_graphique.infoserv(None) self._le2mserv.gestionnaire_graphique.infoserv("TeamCommunication".upper(), fg="white", bg="blue") self._le2mserv.gestionnaire_graphique.infoclt(None) self._le2mserv.gestionnaire_graphique.infoclt("TeamCommunication".upper(), fg="white", bg="blue") self._le2mserv.gestionnaire_graphique.infoserv( utili18n.le2mtrans(u"Start time: {st}").format(st=strftime("%H:%M:%S")) ) self._currentsequence += 1 self._le2mserv.gestionnaire_graphique.infoserv(u"Sequence {}".format(self._currentsequence)) self.onglet_looks.clear() self.onglet_essais.clear() self.onglet_messages.clear() # groups formation if self._currentsequence == 0: try: self._le2mserv.gestionnaire_groupes.former_groupes( liste_joueurs=self._le2mserv.gestionnaire_joueurs.get_players(), taille_groupes=pms.TAILLE_GROUPES, roundrobin=True, ) except ValueError as e: self._le2mserv.gestionnaire_graphique.display_error(e.message) return else: self._le2mserv.gestionnaire_groupes.roundrobinnext() # configuration of players and remote yield ( self._le2mserv.gestionnaire_experience.run_step( u"Configure", self._tous, "configure", self, self._currentsequence ) ) for j in self._tous: j.othergroupmembers = [ k.get_part("TeamCommunication") for k in self._le2mserv.gestionnaire_groupes.get_autres_membres_groupe(j.joueur) ] # Start of repetitions ================================================= for period in xrange(1 if pms.NOMBRE_PERIODES else 0, pms.NOMBRE_PERIODES + 1): if self._le2mserv.gestionnaire_experience.stop_repetitions: break # init period self._le2mserv.gestionnaire_graphique.infoserv([None, u"Period {}".format(period)]) self._le2mserv.gestionnaire_graphique.infoclt([None, u"Period {}".format(period)], fg="white", bg="gray") yield (self._le2mserv.gestionnaire_experience.run_func(self._tous, "newperiod", period)) # decision yield (self._le2mserv.gestionnaire_experience.run_step(u"Decision", self._tous, "display_decision")) # computation of good answers in each group self._le2mserv.gestionnaire_graphique.infoserv(u"Good answers") for g, m in self._le2mserv.gestionnaire_groupes.get_groupes("TeamCommunication").viewitems(): nbbonnesrep = sum([j.currentperiod.TC_goodanswers for j in m]) for j in m: j.currentperiod.TC_goodanswers_group = nbbonnesrep self._le2mserv.gestionnaire_graphique.infoserv(u"G{}: {}".format(g.split("_")[2], nbbonnesrep)) # period payoffs self._le2mserv.gestionnaire_experience.compute_periodpayoffs("TeamCommunication") # questions about self confidence and satisfaction yield ( self._le2mserv.gestionnaire_experience.run_step( trans_TC(u"Additionnal questions"), self._tous, "display_additionnalquestions" ) ) # period summary yield (self._le2mserv.gestionnaire_experience.run_step(trans_TC(u"Summary"), self._tous, "display_summary")) # End of part ========================================================== yield (self._le2mserv.gestionnaire_experience.finalize_part("TeamCommunication")) def _display_payoffs(self): if self._currentsequence >= 0: sequence, ok = QtGui.QInputDialog.getInt( self._le2mserv.gestionnaire_graphique.screen, trans_TC(u"Sequence choice"), trans_TC(u"Choose the sequence"), min=0, max=self._currentsequence, step=1, value=0, ) if ok: self._ecran_gains = DGains(self._le2mserv, sequence) self._ecran_gains.show() else: # no sequence has been run return def _prepare_dictator(self): if self._currentsequence == -1: self._le2mserv.gestionnaire_graphique.display_error( u"Il faut au moins avoir lancé une séquence de " u"TeamCommunication" ) return if not self._le2mserv.gestionnaire_graphique.question(u"Préparer les groupes de Dictator?"): return DictatorParams.TAILLE_GROUPES = 0 self._le2mserv.gestionnaire_groupes.roundrobinnext() groups = self._le2mserv.gestionnaire_groupes.get_groupes() newgroups = {} for v in groups.viewvalues(): newgroups["{}_g_{}".format(self._le2mserv.nom_session, servgestgroups.compteur_groupe)] = [v[0], v[1]] servgestgroups.compteur_groupe += 1 newgroups["{}_g_{}".format(self._le2mserv.nom_session, servgestgroups.compteur_groupe)] = [v[2], v[3]] servgestgroups.compteur_groupe += 1 self._le2mserv.gestionnaire_groupes.set_groupes(newgroups) self._le2mserv.gestionnaire_groupes.set_attributes() self._le2mserv.gestionnaire_graphique.infoserv(self._le2mserv.gestionnaire_groupes.get_groupes_string()) @defer.inlineCallbacks def _run_questionapresdictator(self): if self._currentsequence == -1 or not self._le2mserv.gestionnaire_joueurs.get_players()[0].get_part("Dictator"): self._le2mserv.gestionnaire_graphique.display_error( u"Il faut avoir fait au moins une séquence de " u"TeamCommunication et la partie Dictator" ) return if not self._le2mserv.gestionnaire_graphique.question(u"Lancer la question d'après Dictator?"): return yield ( self._le2mserv.gestionnaire_experience.run_step( step_name=u"Question après Dictator", step_participants=self._tous, step_function="display_questionapresdictator", ) ) @defer.inlineCallbacks def _display_questfinal(self): if not self._le2mserv.gestionnaire_base.is_created(): QtGui.QMessageBox.warning( self._le2mserv.gestionnaire_graphique.screen, le2mtrans(u"Warning"), le2mtrans(u"There is no database yet. You first need to " u"load at least one part."), ) return if not hasattr(self, "_tous"): QtGui.QMessageBox.warning( self._le2mserv.gestionnaire_graphique.screen, le2mtrans(u"Warning"), trans_TC(u"TeamCommunication has to be run before to " u"start this questionnaire"), ) return confirmation = QtGui.QMessageBox.question( self._le2mserv.gestionnaire_graphique.screen, le2mtrans(u"Confirmation"), le2mtrans(u"Start the final questionnaire?"), QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Ok, ) if confirmation != QtGui.QMessageBox.Ok: return yield ( self._le2mserv.gestionnaire_experience.run_step( trans_TC(u"Final questionnaire"), self._tous, "display_questfinal" ) )