Beispiel #1
0
    def _displayquest(self, quest):
        """
        """
        if not quest:
            return

        twi_question = QtGui.QTreeWidgetItem(
            [qctrans(u"Question {num}").format(num=quest.number)])
        self.ui.treeWidget_questionnaire.addTopLevelItem(twi_question)

        twi_ennonce = QtGui.QTreeWidgetItem([qctrans(u"Text")])
        twi_ennonce.addChild(QtGui.QTreeWidgetItem([quest.text]))
        twi_question.addChild(twi_ennonce)

        twi_propositions = QtGui.QTreeWidgetItem([qctrans(u"Proposals")])
        for p in quest.proposals:
            twi_propositions.addChild(QtGui.QTreeWidgetItem([p]))
        twi_question.addChild(twi_propositions)

        twi_bonnes_reponses = QtGui.QTreeWidgetItem(
            [qctrans(u"Good answers")])
        for b in quest.goodanswers:
            twi_bonnes_reponses.addChild(QtGui.QTreeWidgetItem([b]))
        twi_question.addChild(twi_bonnes_reponses)

        twi_explication = QtGui.QTreeWidgetItem([qctrans(u"Explanation")])
        twi_explication.addChild(
            QtGui.QTreeWidgetItem([quest.explanation]))
        twi_question.addChild(twi_explication)
Beispiel #2
0
    def _save(self):
        """
        Save the questionnaire.
        If the questionnaire has no file associated the call _saveas before
        """
        if not self._questionnaire.file:
            self._saveas()
            if not self._questionnaire.file:
                return  # _saveas has been canceled

        questxml = self._questionnaire.toxml()
        if questxml is None:
            return

        try:
            ElementTree.ElementTree(questxml).write(
                self._questionnaire.file, encoding="utf-8")
        except ElementTree.ParseError as e:
            logger.critical(
                qctrans(u"Error while saving the understanding questionnaire "
                        u"in the xml file: {msg}".format(msg=e.message)))
            return

        QtGui.QMessageBox.information(
            self, qctrans(u"File saved"),
            qctrans(u"Understanding questionnaire saved"))
Beispiel #3
0
    def _accept(self):
        quest = self._testcontent()
        logger.debug(qctrans(u"Edited question: {q}").format(q=quest))
        if not quest:
            return

        if self._edit:
            confirmation = QtGui.QMessageBox.question(
                self, qctrans(u"Confirmation"),
                qctrans(u"Do you want to save changes for this question?"),
                QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
            if confirmation == QtGui.QMessageBox.Yes:
                for att in [
                        "number", "text", "proposals", "goodanswers",
                        "explanation"
                ]:
                    setattr(self._question, att, getattr(quest, att))
                self._questionnaire.refresh()
        else:
            confirmation = QtGui.QMessageBox.question(
                self, qctrans(u"Confirmation"),
                qctrans(u"Do you want to add this question to the "
                        u"questionnaire?"),
                QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
            if confirmation == QtGui.QMessageBox.Yes:
                self._questionnaire.add_question(quest)

        self.accept()
Beispiel #4
0
def get_questions(xmlfile):
    """
    Return the questions
    :param xmlfile:
    :return: list
    """
    questions = []
    try:
        questionnaire = ElementTree.parse(xmlfile)
        logger.debug(qctrans(u"Questionnaire: {q}".format(q=questionnaire)))
        logger.info(qctrans(u"The questionnaire has {nb} questions").format(
            nb=len(questionnaire.findall("question"))))
        compteur = 1

        for q in questionnaire.iter("question"):
            question = CopyQuestion()  # the copy for sending through the netw
            question.number = compteur
            question.text = q.find("ennonce").text
            question.proposals = [p.text for p in q.findall("proposition")]
            question.goodanswers = [g.text for g in q.findall("bonneReponse")]
            question.explanation = q.find("explication").text

            logger.info(qctrans(u"Add question: {quest}").format(
                quest=question))
            questions.append(question)
            compteur += 1

    except ElementTree.ParseError as e:
        logger.critical(e.message)

    finally:
        return questions
Beispiel #5
0
    def _accept(self):
        quest = self._testcontent()
        logger.debug(qctrans(u"Edited question: {q}").format(q=quest))
        if not quest:
            return

        if self._edit:
            confirmation = QtGui.QMessageBox.question(
                self,
                qctrans(u"Confirmation"),
                qctrans(u"Do you want to save changes for this question?"),
                QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
            if confirmation == QtGui.QMessageBox.Yes:
                for att in ["number", "text", "proposals", "goodanswers",
                            "explanation"]:
                    setattr(self._question, att, getattr(quest, att))
                self._questionnaire.refresh()
        else:
            confirmation = QtGui.QMessageBox.question(
                self,
                qctrans(u"Confirmation"),
                qctrans(u"Do you want to add this question to the "
                        u"questionnaire?"),
                QtGui.QMessageBox.No | QtGui.QMessageBox.Yes
            )
            if confirmation == QtGui.QMessageBox.Yes:
                self._questionnaire.add_question(quest)

        self.accept()
Beispiel #6
0
    def _displayquest(self, quest):
        """
        """
        if not quest:
            return

        twi_question = QtGui.QTreeWidgetItem(
            [qctrans(u"Question {num}").format(num=quest.number)])
        self.ui.treeWidget_questionnaire.addTopLevelItem(twi_question)

        twi_ennonce = QtGui.QTreeWidgetItem([qctrans(u"Text")])
        twi_ennonce.addChild(QtGui.QTreeWidgetItem([quest.text]))
        twi_question.addChild(twi_ennonce)

        twi_propositions = QtGui.QTreeWidgetItem([qctrans(u"Proposals")])
        for p in quest.proposals:
            twi_propositions.addChild(QtGui.QTreeWidgetItem([p]))
        twi_question.addChild(twi_propositions)

        twi_bonnes_reponses = QtGui.QTreeWidgetItem([qctrans(u"Good answers")])
        for b in quest.goodanswers:
            twi_bonnes_reponses.addChild(QtGui.QTreeWidgetItem([b]))
        twi_question.addChild(twi_bonnes_reponses)

        twi_explication = QtGui.QTreeWidgetItem([qctrans(u"Explanation")])
        twi_explication.addChild(QtGui.QTreeWidgetItem([quest.explanation]))
        twi_question.addChild(twi_explication)
Beispiel #7
0
    def _save(self):
        """
        Save the questionnaire.
        If the questionnaire has no file associated the call _saveas before
        """
        if not self._questionnaire.file:
            self._saveas()
            if not self._questionnaire.file:
                return  # _saveas has been canceled

        questxml = self._questionnaire.toxml()
        if questxml is None:
            return

        try:
            ElementTree.ElementTree(questxml).write(self._questionnaire.file,
                                                    encoding="utf-8")
        except ElementTree.ParseError as e:
            logger.critical(
                qctrans(u"Error while saving the understanding questionnaire "
                        u"in the xml file: {msg}".format(msg=e.message)))
            return

        QtGui.QMessageBox.information(
            self, qctrans(u"File saved"),
            qctrans(u"Understanding questionnaire saved"))
Beispiel #8
0
 def _deletequest(self, quest):
     confirmation = QtGui.QMessageBox.question(
         self, qctrans(u"Confirmation"),
         qctrans(u"Delete {q}?").format(q=quest),
         QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
     if confirmation != QtGui.QMessageBox.Yes:
         return
     self._questionnaire.delete(quest)
Beispiel #9
0
 def _deletequest(self, quest):
     confirmation = QtGui.QMessageBox.question(
         self, qctrans(u"Confirmation"),
         qctrans(u"Delete {q}?").format(q=quest),
         QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
     if confirmation != QtGui.QMessageBox.Yes:
         return
     self._questionnaire.delete(quest)
Beispiel #10
0
 def __repr__(self):
     txt = qctrans(u"Number {num}").format(num=self.number)
     txt += qctrans(u"\nText: {txt}").format(txt=self.text)
     txt += qctrans(u"\nProposals: {p}").format(p=" | ".join(self.proposals))
     txt += qctrans(u"\nGood answers: {ga}").format(
         ga=" | ".join(self.goodanswers))
     txt += qctrans(u"\nExplanation: {exp}").format(exp=self.explanation)
     return txt
Beispiel #11
0
 def closeEvent(self, event):
     confirmation = QtGui.QMessageBox.question(
         self, qctrans(u"Confirmation"),
         qctrans(u"Are you sure you want to quit?"),
         QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
     if confirmation != QtGui.QMessageBox.Yes:
         event.ignore()
         return
     event.accept()
Beispiel #12
0
 def closeEvent(self, event):
     confirmation = QtGui.QMessageBox.question(
         self, qctrans(u"Confirmation"),
         qctrans(u"Are you sure you want to quit?"),
         QtGui.QMessageBox.No | QtGui.QMessageBox.Yes
     )
     if confirmation != QtGui.QMessageBox.Yes: 
         event.ignore()
         return
     event.accept()
Beispiel #13
0
    def __init__(self, parent, questionnaire, question=None):
        super(GuiQuestEdit, self).__init__(parent)

        self.ui = questcompquestedit.Ui_Dialog()
        self.ui.setupUi(self)

        self._questionnaire = questionnaire
        self._edit = True if question else False
        self._question = question or questcompmod.Question()

        self.ui.spinBox_numero.setToolTip(
            qctrans(u"This number is used to sort the list of questions"))
        if not self._edit:
            self.ui.spinBox_numero.setValue(self._questionnaire.size() + 1)
        else:
            self.ui.spinBox_numero.setValue(self._question.number)
        self.ui.textEdit_ennonce.setText(self._question.text)
        for c, p in enumerate(self._question.proposals):
            le = getattr(self.ui, "lineEdit_propositions_{}".format(c + 1))
            le.setText(p)
            if p in self._question.goodanswers:
                ckb = getattr(self.ui,
                              "checkBox_propositions_{}".format(c + 1))
                ckb.setChecked(True)
        self.ui.textEdit_explication.setText(self._question.explanation)

        self.ui.buttonBox.accepted.connect(self._accept)
        self.ui.buttonBox.rejected.connect(self.reject)
Beispiel #14
0
    def _print(self):
        html = self._questionnaire.tohtml()
        if not html:
            return

        printer = QtGui.QPrinter()
        doc = QtGui.QTextDocument()
        doc.setHtml(html)
        dialog = QtGui.QPrintDialog(printer)
        dialog.setModal(True)
        dialog.setWindowTitle(qctrans(u"Understanding questionnaire"))
        if dialog.exec_():
            doc.print_(printer)
            QtGui.QMessageBox.information(
                self, qctrans(u"Print"),
                qctrans(u"Understanding questionnaire successfully printed"))
Beispiel #15
0
    def __init__(self, parent, questionnaire, question=None):
        super(GuiQuestEdit, self).__init__(parent)
        
        self.ui = questcompquestedit.Ui_Dialog()
        self.ui.setupUi(self)

        self._questionnaire = questionnaire
        self._edit = True if question else False
        self._question = question or questcompmod.Question()

        self.ui.spinBox_numero.setToolTip(
            qctrans(u"This number is used to sort the list of questions"))
        if not self._edit:
            self.ui.spinBox_numero.setValue(self._questionnaire.size() + 1)
        else:
            self.ui.spinBox_numero.setValue(self._question.number)
        self.ui.textEdit_ennonce.setText(self._question.text)
        for c, p in enumerate(self._question.proposals):
            le = getattr(self.ui, "lineEdit_propositions_{}".format(c+1))
            le.setText(p)
            if p in self._question.goodanswers:
                ckb = getattr(self.ui, "checkBox_propositions_{}".format(c+1))
                ckb.setChecked(True)
        self.ui.textEdit_explication.setText(self._question.explanation)

        self.ui.buttonBox.accepted.connect(self._accept)
        self.ui.buttonBox.rejected.connect(self.reject)
Beispiel #16
0
    def _print(self):
        html = self._questionnaire.tohtml()
        if not html:
            return

        printer = QtGui.QPrinter()
        doc = QtGui.QTextDocument()
        doc.setHtml(html)
        dialog = QtGui.QPrintDialog(printer)
        dialog.setModal(True)
        dialog.setWindowTitle(qctrans(u"Understanding questionnaire"))
        if dialog.exec_(): 
            doc.print_(printer)
            QtGui.QMessageBox.information(
                self, qctrans(u"Print"),
                qctrans(u"Understanding questionnaire successfully printed"))
Beispiel #17
0
 def _newquestionnaire(self):
     """
     Clear the current questionnaire (and the associated file) and
     create a (empty) new one
     """
     if not self._questionnaire.isempty():
         confirm = QtGui.QMessageBox.question(
             self, qctrans(u"Confirmation"),
             qctrans(u"An understanding questionnaire is loaded. Do you "
                     u"really want to close it and create a new one?"),
             QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
         if confirm != QtGui.QMessageBox.Yes:
             return
     self._questionnaire.clear()
     self._questionnaire.file = None
     self.ui.treeWidget_questionnaire.clear()
Beispiel #18
0
    def toxml(self):
        """
        Return an xml string with the questions inside
        :return: str
        """
        if self.isempty():
            return

        questr = ElementTree.Element(u"questionnaire")

        for q in self.get_questions():
            quest = ElementTree.SubElement(questr, u"question")
            ennonce = ElementTree.SubElement(quest, u"ennonce")
            ennonce.text = u"{}".format(q.text)
            for p in q.proposals:
                proposition = ElementTree.SubElement(quest, u"proposition")
                proposition.text = u"{}".format(p)
            for b in q.goodanswers:
                bonrep = ElementTree.SubElement(quest, u'bonneReponse')
                bonrep.text = u"{}".format(b)
            explication = ElementTree.SubElement(quest, u"explication")
            explication.text = u"{}".format(q.explanation)

        logger.debug(qctrans(u"Generated xml: {xmlgen}").format(
            xmlgen=ElementTree.dump(questr)))

        return questr
Beispiel #19
0
 def _newquestionnaire(self):
     """
     Clear the current questionnaire (and the associated file) and
     create a (empty) new one
     """
     if not self._questionnaire.isempty():
         confirm = QtGui.QMessageBox.question(
             self, qctrans(u"Confirmation"),
             qctrans(u"An understanding questionnaire is loaded. Do you "
                     u"really want to close it and create a new one?"),
             QtGui.QMessageBox.No | QtGui.QMessageBox.Yes
         )
         if confirm != QtGui.QMessageBox.Yes:
             return
     self._questionnaire.clear()
     self._questionnaire.file = None
     self.ui.treeWidget_questionnaire.clear()
Beispiel #20
0
    def _test(self):
        if self._questionnaire.isempty():
            QtGui.QMessageBox.warning(
                self, qctrans(u"Warning"),
                qctrans(u"There is no questionnaire loaded"))
            return

        faults = []
        for c, q in enumerate(self._questionnaire.get_questions()):
            ecran = GuiQuestCompQuest(None, False, q, self)
            ecran.exec_()
            if ecran.iswrong():
                faults.append(c+1)
        QtGui.QMessageBox.information(
            self, qctrans(u"End"),
            qctrans(u"You've done {nbfaults} fault(s) {q}").format(
                nbfaults=len(faults),
                q=u"" if not faults else u"({})".format(faults)))
Beispiel #21
0
    def _test(self):
        if self._questionnaire.isempty():
            QtGui.QMessageBox.warning(
                self, qctrans(u"Warning"),
                qctrans(u"There is no questionnaire loaded"))
            return

        faults = []
        for c, q in enumerate(self._questionnaire.get_questions()):
            ecran = GuiQuestCompQuest(None, False, q, self)
            ecran.exec_()
            if ecran.iswrong():
                faults.append(c + 1)
        QtGui.QMessageBox.information(
            self, qctrans(u"End"),
            qctrans(u"You've done {nbfaults} fault(s) {q}").format(
                nbfaults=len(faults),
                q=u"" if not faults else u"({})".format(faults)))
Beispiel #22
0
 def tohtml(self):
     txt = u"<p><b>"
     txt += qctrans(u"Question {num}").format(num=self.number)
     txt += u"</b><br /><i>"
     txt += qctrans(u"Text")
     txt += u"</i>: {}<br /><i>".format(self.text)
     txt += qctrans(u"Proposals")
     txt += u"</i>:<ul>"
     for p in self.proposals:
         txt += u"<li>{}</li>".format(p)
     txt += u"</ul><i>"
     txt += qctrans(u"Good answers")
     txt += u"</i>:<ul>"
     for b in self.goodanswers:
         txt += u"<li>{}</li>".format(b)
     txt += u"</ul><i>"
     txt += qctrans(u"Explanation")
     txt += u"</i>: {}</p>".format(self.explanation)
     return txt
Beispiel #23
0
    def tohtml(self):
        """
        return an html text with the questions
        :return:str
        """
        if self.isempty():
            return

        html = u""
        html += u"<html><title>"
        html += qctrans(u"Understanding questionnaire")
        html += u"</title><body><h2>"
        html += qctrans(u"Understanding questionnaire")
        html += u"</h2>"
        for q in self.get_questions():
            html += q.tohtml()
        html += u"</body></html>"

        return html
Beispiel #24
0
 def _menucontexttree(self, point):
     """
     From the point we collect the question and then we propose to edit
     that question or to delete it
     """
     try:
         item = self.ui.treeWidget_questionnaire.itemAt(point)
         nom = unicode(item.text(0).toUtf8(), "utf-8")
         num = int(nom.split()[1])
         question = self._questionnaire.get_question(num)
         menu = QtGui.QMenu(self)
         action_modify = QtGui.QAction(qctrans(u"Modify"), menu)
         action_modify.triggered.connect(lambda _: self._editquest(question))
         menu.addAction(action_modify)
         action_delete = QtGui.QAction(qctrans(u"Delete"), menu)
         action_delete.triggered.connect(lambda _: self._deletequest(question))
         menu.addAction(action_delete)
         menu.exec_(QtGui.QCursor.pos())
     except (IndexError, AttributeError, ValueError):
         pass
Beispiel #25
0
    def __init__(self, defered, automatique, question, parent=None):
        super(GuiQuestCompQuest, self).__init__(parent)

        self._defered = defered
        self._automatique = automatique
        self._question = question

        self.ui = questcompquest.Ui_Dialog()
        self.ui.setupUi(self)

        self.ui.label_numeroQuestion.setText(qctrans(u"Question {num}").format(
            num=self._question.number))
        self.ui.textEdit_ennonce.setText(self._question.text)

        # proposals ------------------------------------------------------------
        espace_gauche = QtGui.QSpacerItem(
            40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.ui.hl_propositions.addItem(espace_gauche)

        self._cases_decisions = []
        # boutons radio --------------------------------------------------------
        if len(self._question.goodanswers) == 1:
            for p in self._question.proposals:
                btn = QtGui.QRadioButton(p, self)
                self._cases_decisions.append(btn)
                self.ui.hl_propositions.addWidget(btn)
            if self._automatique:
                random.choice(self._cases_decisions).setChecked(True)
        # checkbox -------------------------------------------------------------
        else:
            for p in self._question.proposals:
                checkbox = QtGui.QCheckBox(p, self)
                self._cases_decisions.append(checkbox)
                self.ui.hl_propositions.addWidget(checkbox)
            if self._automatique:
                nb = random.randint(1, len(self._question.proposals) - 1)
                for i in range(1, nb + 1):
                    b = random.choice(self._cases_decisions)
                    if not b.isChecked():
                        b.setChecked(True)

        espace_droite = QtGui.QSpacerItem(
            40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.ui.hl_propositions.addItem(espace_droite)

        self.ui.pushButton_valider.clicked.connect(self._accept)

        self.adjustSize()
        self.setFixedSize(self.size())

        if self._automatique:
            self._timer = QtCore.QTimer()
            self._timer.timeout.connect(self._accept)
            self._timer.start(7000)
Beispiel #26
0
    def __init__(self, defered, automatique, question, parent=None):
        super(GuiQuestCompQuest, self).__init__(parent)

        self._defered = defered
        self._automatique = automatique
        self._question = question

        self.ui = questcompquest.Ui_Dialog()
        self.ui.setupUi(self)

        self.ui.label_numeroQuestion.setText(
            qctrans(u"Question {num}").format(num=self._question.number))
        self.ui.textEdit_ennonce.setText(self._question.text)

        # proposals ------------------------------------------------------------
        espace_gauche = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                          QtGui.QSizePolicy.Minimum)
        self.ui.hl_propositions.addItem(espace_gauche)

        self._cases_decisions = []
        # boutons radio --------------------------------------------------------
        if len(self._question.goodanswers) == 1:
            for p in self._question.proposals:
                btn = QtGui.QRadioButton(p, self)
                self._cases_decisions.append(btn)
                self.ui.hl_propositions.addWidget(btn)
            if self._automatique:
                random.choice(self._cases_decisions).setChecked(True)
        # checkbox -------------------------------------------------------------
        else:
            for p in self._question.proposals:
                checkbox = QtGui.QCheckBox(p, self)
                self._cases_decisions.append(checkbox)
                self.ui.hl_propositions.addWidget(checkbox)
            if self._automatique:
                nb = random.randint(1, len(self._question.proposals) - 1)
                for i in range(1, nb + 1):
                    b = random.choice(self._cases_decisions)
                    if not b.isChecked():
                        b.setChecked(True)

        espace_droite = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                          QtGui.QSizePolicy.Minimum)
        self.ui.hl_propositions.addItem(espace_droite)

        self.ui.pushButton_valider.clicked.connect(self._accept)

        self.adjustSize()
        self.setFixedSize(self.size())

        if self._automatique:
            self._timer = QtCore.QTimer()
            self._timer.timeout.connect(self._accept)
            self._timer.start(7000)
Beispiel #27
0
    def _saveas(self):
        """
        """
        xmlfile = str(
            QtGui.QFileDialog.getSaveFileName(self, qctrans(u"xml file")))
        if not xmlfile:
            return

        if os.path.splitext(xmlfile)[1] != ".xml":
            xmlfile += ".xml"
        self._questionnaire.file = xmlfile
        self._save()
Beispiel #28
0
    def _saveas(self):
        """
        """
        xmlfile = str(QtGui.QFileDialog.getSaveFileName(
            self, qctrans(u"xml file")))
        if not xmlfile:
            return

        if os.path.splitext(xmlfile)[1] != ".xml":
            xmlfile += ".xml"
        self._questionnaire.file = xmlfile
        self._save()
Beispiel #29
0
    def _testcontent(self):
        """
        Test the content of fields
        If everything is ok return a question
        :return: Question
        """
        quest = None
        try:
            # num
            num = self.ui.spinBox_numero.value()
            if not self._edit or \
            (self._edit and num != self._question.number):
                if self._questionnaire.hasnumber(num):
                    raise ValueError(
                        qctrans(u"This number already exists, "
                                u"please choose another one"))

            text = unicode(self.ui.textEdit_ennonce.toPlainText().toUtf8(),
                           "utf-8")
            if not text:
                raise ValueError(qctrans(u"You need to provide a text"))

            proposals, goodanswers = [], []
            for i in xrange(1, 7):
                leprop = getattr(self.ui, "lineEdit_propositions_{}".format(i))
                txtprop = unicode(leprop.text().toUtf8(), "utf-8")
                if txtprop:
                    proposals.append(txtprop)
                    chkb = getattr(self.ui,
                                   "checkBox_propositions_{}".format(i))
                    if chkb.isChecked():
                        goodanswers.append(txtprop)

            if len(proposals) < 2:
                raise ValueError(
                    qctrans(u"You must give at least 2 proposals"))
            if not goodanswers:
                raise ValueError(
                    qctrans(u"You must give at least 1 good "
                            u"answer"))

            explanation = unicode(
                self.ui.textEdit_explication.toPlainText().toUtf8(), "utf-8")
            if not explanation:
                raise ValueError(
                    qctrans(u"You need to provide an explanation"))

            quest = questcompmod.Question()
            quest.number = num
            quest.text = text
            quest.proposals = proposals
            quest.goodanswers = goodanswers
            quest.explanation = explanation

        except ValueError as e:
            QtGui.QMessageBox.critical(self, qctrans(u"Error"), e.message)

        finally:
            return quest
Beispiel #30
0
    def _accept(self):
        try:
            self._timer.stop()
        except AttributeError:
            pass

        textes_items_selectionnes = []
        for b in self._cases_decisions:
            if b.isChecked():
                textes_items_selectionnes.append(
                    unicode(b.text().toUtf8(), "utf-8"))
        if not textes_items_selectionnes:
            QtGui.QMessageBox.warning(
                self, qctrans(u'Warning'),
                qctrans(u"You must answer to the question"))
            return

        self._wrong = False
        for br in self._question.goodanswers:
            if br not in textes_items_selectionnes:
                self._wrong = True

        # si pas automatique on affiche l'explication de la réponse
        if not self._automatique:
            if len(self._question.goodanswers) > 1:
                texte = qctrans(u"The right answers were")
                texte += u": \n {}".format(u"\n".join(
                    self._question.goodanswers))
            else:
                texte = qctrans(u"The right answer was ")
                texte += u": {}".format(self._question.goodanswers[0])

            texte += u"\n\n{}".format(self._question.explanation)

            QtGui.QMessageBox.information(self, qctrans("Information"), texte)

        if self._defered:
            self._defered.callback(self._wrong)
        self.accept()
Beispiel #31
0
 def _menucontexttree(self, point):
     """
     From the point we collect the question and then we propose to edit
     that question or to delete it
     """
     try:
         item = self.ui.treeWidget_questionnaire.itemAt(point)
         nom = unicode(item.text(0).toUtf8(), "utf-8")
         num = int(nom.split()[1])
         question = self._questionnaire.get_question(num)
         menu = QtGui.QMenu(self)
         action_modify = QtGui.QAction(qctrans(u"Modify"), menu)
         action_modify.triggered.connect(
             lambda _: self._editquest(question))
         menu.addAction(action_modify)
         action_delete = QtGui.QAction(qctrans(u"Delete"), menu)
         action_delete.triggered.connect(
             lambda _: self._deletequest(question))
         menu.addAction(action_delete)
         menu.exec_(QtGui.QCursor.pos())
     except (IndexError, AttributeError, ValueError):
         pass
Beispiel #32
0
    def _accept(self):
        try:
            self._timer.stop()
        except AttributeError:
            pass

        textes_items_selectionnes = []
        for b in self._cases_decisions:
            if b.isChecked():
                textes_items_selectionnes.append(
                    unicode(b.text().toUtf8(), "utf-8"))
        if not textes_items_selectionnes:
            QtGui.QMessageBox.warning(
                self, qctrans(u'Warning'),
                qctrans(u"You must answer to the question"))
            return

        self._wrong = False
        for br in self._question.goodanswers:
            if br not in textes_items_selectionnes:
                self._wrong = True

        # si pas automatique on affiche l'explication de la réponse
        if not self._automatique:
            if len(self._question.goodanswers) > 1:
                texte = qctrans(u"The right answers were")
                texte += u": \n {}".format(
                    u"\n".join(self._question.goodanswers))
            else:
                texte = qctrans(u"The right answer was ")
                texte += u": {}".format(self._question.goodanswers[0])

            texte += u"\n\n{}".format(self._question.explanation)

            QtGui.QMessageBox.information(self, qctrans("Information"), texte)

        if self._defered:
            self._defered.callback(self._wrong)
        self.accept()
Beispiel #33
0
    def _open(self):
        """
        Open an understanding questionnaire (xml file), get the questions
        that are inside the file and set them in the questionnaire
        """
        if not self._questionnaire.isempty():
            confirm = QtGui.QMessageBox.question(
                self, qctrans(u"Confirmation"),
                qctrans(u"An understanding questionnaire is loaded. Do you "
                        u"really want to close it and open a new one?"),
                QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
            if confirm != QtGui.QMessageBox.Yes:
                return

        xmlfile = str(QtGui.QFileDialog.getOpenFileName(
            self, qctrans(u"Select the understanding questionnaire"), "",
            qctrans(u"xml file (*.xml)")))
        if not xmlfile:
            return

        self._questionnaire.file = xmlfile
        questions = questcompmod.get_questions(xmlfile)
        self._questionnaire.set_questions(questions)
Beispiel #34
0
    def _testcontent(self):
        """
        Test the content of fields
        If everything is ok return a question
        :return: Question
        """
        quest = None
        try:
            # num
            num = self.ui.spinBox_numero.value()
            if not self._edit or \
            (self._edit and num != self._question.number):
                if self._questionnaire.hasnumber(num):
                    raise ValueError(qctrans(u"This number already exists, "
                                             u"please choose another one"))

            text = unicode(self.ui.textEdit_ennonce.toPlainText().toUtf8(),
                           "utf-8")
            if not text:
                raise ValueError(qctrans(u"You need to provide a text"))

            proposals, goodanswers = [], []
            for i in xrange(1, 7):
                leprop = getattr(self.ui, "lineEdit_propositions_{}".format(i))
                txtprop = unicode(leprop.text().toUtf8(), "utf-8")
                if txtprop:
                    proposals.append(txtprop)
                    chkb= getattr(self.ui, "checkBox_propositions_{}".format(i))
                    if chkb.isChecked():
                        goodanswers.append(txtprop)

            if len(proposals) < 2:
                raise ValueError(qctrans(u"You must give at least 2 proposals"))
            if not goodanswers:
                raise ValueError(qctrans(u"You must give at least 1 good "
                                         u"answer"))

            explanation = unicode(
                self.ui.textEdit_explication.toPlainText().toUtf8(),
                "utf-8")
            if not explanation:
                raise ValueError(qctrans(u"You need to provide an explanation"))

            quest = questcompmod.Question()
            quest.number = num
            quest.text = text
            quest.proposals = proposals
            quest.goodanswers = goodanswers
            quest.explanation = explanation

        except ValueError as e:
            QtGui.QMessageBox.critical(
                self,  qctrans(u"Error"), e.message)

        finally:
            return quest
Beispiel #35
0
    def _open(self):
        """
        Open an understanding questionnaire (xml file), get the questions
        that are inside the file and set them in the questionnaire
        """
        if not self._questionnaire.isempty():
            confirm = QtGui.QMessageBox.question(
                self, qctrans(u"Confirmation"),
                qctrans(u"An understanding questionnaire is loaded. Do you "
                        u"really want to close it and open a new one?"),
                QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
            if confirm != QtGui.QMessageBox.Yes:
                return

        xmlfile = str(
            QtGui.QFileDialog.getOpenFileName(
                self, qctrans(u"Select the understanding questionnaire"), "",
                qctrans(u"xml file (*.xml)")))
        if not xmlfile:
            return

        self._questionnaire.file = xmlfile
        questions = questcompmod.get_questions(xmlfile)
        self._questionnaire.set_questions(questions)
Beispiel #36
0
    def __init__(self):
        super(GuiQuestComp, self).__init__()

        global logger
        questcomputil.create_logger()
        logger = logging.getLogger("questcomp")

        self.ui = questcompscreen.Ui_MainWindow()
        self.ui.setupUi(self)

        self._questionnaire = questcompmod.Questionnaire()
        self._questionnaire.valuechanged.connect(self._displayquestionnaire)

        # menus ----------------------------------------------------------------
        # file
        menu_file = QtGui.QMenu(qctrans(u"File"), self.ui.menubar)
        self.ui.menubar.addMenu(menu_file)
        submenu_filenew = QtGui.QMenu(qctrans(u"New"), menu_file)
        menu_file.addMenu(submenu_filenew)
        action_newquestionnaire = QtGui.QAction(qctrans(u"Questionnaire"),
                                                submenu_filenew)
        action_newquestionnaire.triggered.connect(self._newquestionnaire)
        submenu_filenew.addAction(action_newquestionnaire)
        action_newquestion = QtGui.QAction(qctrans(u"Question"),
                                           submenu_filenew)
        action_newquestion.triggered.connect(self._newquest)
        action_newquestion.setShortcut(QtGui.QKeySequence("Ctrl+n"))
        submenu_filenew.addAction(action_newquestion)
        menu_file.addSeparator()
        action_open = QtGui.QAction(qctrans(u"Open"), menu_file)
        action_open.triggered.connect(self._open)
        action_open.setShortcut(QtGui.QKeySequence("Ctrl+o"))
        menu_file.addAction(action_open)
        action_save = QtGui.QAction(qctrans(u"Save"), menu_file)
        action_save.triggered.connect(self._save)
        action_save.setShortcut(QtGui.QKeySequence("Ctrl+s"))
        menu_file.addAction(action_save)
        action_saveas = QtGui.QAction(qctrans(u"Save as"), menu_file)
        action_saveas.triggered.connect(self._saveas)
        menu_file.addAction(action_saveas)
        menu_file.addSeparator()
        action_print = QtGui.QAction(qctrans(u"Print"), menu_file)
        action_print.triggered.connect(self._print)
        action_print.setShortcut(QtGui.QKeySequence("Ctrl+p"))
        menu_file.addAction(action_print)
        action_close = QtGui.QAction(qctrans(u"Quit"), menu_file)
        action_close.triggered.connect(self.close)
        action_close.setShortcut(QtGui.QKeySequence("Ctrl+q"))
        menu_file.addAction(action_close)

        # tools
        menu_tools = QtGui.QMenu(qctrans(u"Tools"), self.ui.menubar)
        self.ui.menubar.addMenu(menu_tools)
        action_test = QtGui.QAction(qctrans(u"Test the questionnaire"),
                                    menu_tools)
        action_test.triggered.connect(self._test)
        menu_tools.addAction(action_test)

        # contextual menu of the treeWidget_questionnaire
        self.ui.treeWidget_questionnaire.setHeaderItem(
            QtGui.QTreeWidgetItem([qctrans(u"Understanding questions")]))
        self.ui.treeWidget_questionnaire.header().setResizeMode(
            QtGui.QHeaderView.Stretch)
        self.ui.treeWidget_questionnaire.setContextMenuPolicy(
            QtCore.Qt.CustomContextMenu)
        self.ui.treeWidget_questionnaire. \
            customContextMenuRequested["QPoint"].connect(self._menucontexttree)

        self.setFixedSize(800, 600)
        frameg = self.frameGeometry()
        cent = QtGui.QDesktopWidget().availableGeometry().center()
        frameg.moveCenter(cent)
        self.move(frameg.topLeft())
Beispiel #37
0
    def __init__(self):
        super(GuiQuestComp, self).__init__()

        global logger
        questcomputil.create_logger()
        logger = logging.getLogger("questcomp")

        self.ui = questcompscreen.Ui_MainWindow()
        self.ui.setupUi(self)

        self._questionnaire = questcompmod.Questionnaire()
        self._questionnaire.valuechanged.connect(self._displayquestionnaire)

        # menus ----------------------------------------------------------------
        # file
        menu_file = QtGui.QMenu(qctrans(u"File"), self.ui.menubar)
        self.ui.menubar.addMenu(menu_file)
        submenu_filenew = QtGui.QMenu(qctrans(u"New"), menu_file)
        menu_file.addMenu(submenu_filenew)
        action_newquestionnaire = QtGui.QAction(
            qctrans(u"Questionnaire"), submenu_filenew)
        action_newquestionnaire.triggered.connect(self._newquestionnaire)
        submenu_filenew.addAction(action_newquestionnaire)
        action_newquestion = QtGui.QAction(
            qctrans(u"Question"), submenu_filenew)
        action_newquestion.triggered.connect(self._newquest)
        action_newquestion.setShortcut(QtGui.QKeySequence("Ctrl+n"))
        submenu_filenew.addAction(action_newquestion)
        menu_file.addSeparator()
        action_open = QtGui.QAction(qctrans(u"Open"), menu_file)
        action_open.triggered.connect(self._open)
        action_open.setShortcut(QtGui.QKeySequence("Ctrl+o"))
        menu_file.addAction(action_open)
        action_save = QtGui.QAction(qctrans(u"Save"), menu_file)
        action_save.triggered.connect(self._save)
        action_save.setShortcut(QtGui.QKeySequence("Ctrl+s"))
        menu_file.addAction(action_save)
        action_saveas = QtGui.QAction(qctrans(u"Save as"), menu_file)
        action_saveas.triggered.connect(self._saveas)
        menu_file.addAction(action_saveas)
        menu_file.addSeparator()
        action_print = QtGui.QAction(qctrans(u"Print"), menu_file)
        action_print.triggered.connect(self._print)
        action_print.setShortcut(QtGui.QKeySequence("Ctrl+p"))
        menu_file.addAction(action_print)
        action_close = QtGui.QAction(qctrans(u"Quit"), menu_file)
        action_close.triggered.connect(self.close)
        action_close.setShortcut(QtGui.QKeySequence("Ctrl+q"))
        menu_file.addAction(action_close)

        # tools
        menu_tools = QtGui.QMenu(qctrans(u"Tools"), self.ui.menubar)
        self.ui.menubar.addMenu(menu_tools)
        action_test = QtGui.QAction(
            qctrans(u"Test the questionnaire"), menu_tools)
        action_test.triggered.connect(self._test)
        menu_tools.addAction(action_test)
        
        # contextual menu of the treeWidget_questionnaire
        self.ui.treeWidget_questionnaire.setHeaderItem(
            QtGui.QTreeWidgetItem([qctrans(u"Understanding questions")]))
        self.ui.treeWidget_questionnaire.header().setResizeMode(
            QtGui.QHeaderView.Stretch)
        self.ui.treeWidget_questionnaire.setContextMenuPolicy(
            QtCore.Qt.CustomContextMenu)
        self.ui.treeWidget_questionnaire. \
            customContextMenuRequested["QPoint"].connect(self._menucontexttree)

        self.setFixedSize(800, 600)
        frameg = self.frameGeometry()
        cent = QtGui.QDesktopWidget().availableGeometry().center()
        frameg.moveCenter(cent)
        self.move(frameg.topLeft())